# daolyap/pickle architecture

> Architecture diagram of the GitHub repository daolyap/pickle, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/daolyap/pickle
- Repository: https://github.com/daolyap/pickle
- Video tour (about a minute): https://gitdiagram.com/daolyap/pickle/video

## Overview

Pickle is a PowerShell 7 shell whose main workflow runs from terminal invocation through its interactive REPL and real PowerShell runspace. The editor, completion, history, and prompt improve command entry; registered commands and plugins expose shell extensions, panels, and platform tooling. Separate branches cover guided command wizards, network diagnostics, Git, Windows package/system management, and configuration sync. README capabilities inform several branches; sampled source confirms selected runtime behavior, but unsampled subsystem wiring is not asserted.

Main entry points: [`src/Pickle.Core/Hosting/ShellEngine.cs`](https://github.com/daolyap/pickle/blob/main/src/Pickle.Core/Hosting/ShellEngine.cs) (PowerShell engine), [`src/Pickle.Core/Hosting/Repl.cs`](https://github.com/daolyap/pickle/blob/main/src/Pickle.Core/Hosting/Repl.cs) (Interactive REPL), [`src/Pickle.Tui/PanelHost.cs`](https://github.com/daolyap/pickle/blob/main/src/Pickle.Tui/PanelHost.cs) (Panel host), [`src/Pickle.Core/Input/LineEditor.cs`](https://github.com/daolyap/pickle/blob/main/src/Pickle.Core/Input/LineEditor.cs) (Line editor)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_shell["Shell experience"]
  node_program["CLI entry<br/>[Program.cs]"]
  node_app["Application host<br/>[PickleApp.cs]"]
  node_repl["Interactive REPL<br/>[Repl.cs]"]
  node_engine["PowerShell engine<br/>[ShellEngine.cs]"]
  node_editor["Line editor<br/>[LineEditor.cs]"]
  node_completion["Completion"]
  node_history["History search"]
  node_prompt["Prompt and themes<br/>[PromptEngine.cs]"]
end

subgraph group_extensions["Commands and extensions"]
  node_aliases["Aliases<br/>[AliasManager.cs]"]
  node_plugins["Plugin manager<br/>[PluginManager.cs]"]
  node_wizards["Command wizards<br/>[WizardEngine.cs]"]
end

subgraph group_panels["Interactive panels"]
  node_panelhost["Panel host<br/>[PanelHost.cs]"]
  node_gitpanel["Git panel<br/>[GitPanel.cs]"]
  node_filespanel["Files panel<br/>[FilesPanel.cs]"]
  node_systempanels["System panels"]
end

subgraph group_tools["Domain tools"]
  node_git["Git service<br/>[GitService.cs]"]
  node_network["Network tools"]
  node_dns["DNS client<br/>[DnsClient.cs]"]
  node_windows["Windows services<br/>[WindowsPlugin.cs]"]
  node_winget["Package manager<br/>[WingetService.cs]"]
end

subgraph group_state["Configuration and sync"]
  node_config["Configuration<br/>[JsonConfigStore.cs]"]
  node_sync["Sync engine<br/>[SyncEngine.cs]"]
  node_historystore["History storage"]
end

node_user(("Terminal user"))

node_user -->|"invokes"| node_program
node_program -->|"starts"| node_app
node_app -->|"runs"| node_repl
node_repl -->|"executes commands"| node_engine
node_repl -->|"reads input"| node_editor
node_editor -->|"requests completion"| node_completion
node_editor -->|"searches history"| node_history
node_repl -->|"renders prompt"| node_prompt
node_engine -->|"hosts alias commands"| node_aliases
node_engine -->|"loads extensions"| node_plugins
node_engine -->|"runs wizard commands"| node_wizards
node_engine -->|"opens panels"| node_panelhost
node_panelhost -->|"dispatches panel"| node_gitpanel
node_panelhost -->|"dispatches panel"| node_filespanel
node_panelhost -->|"dispatches panel"| node_systempanels
node_gitpanel -->|"uses Git service"| node_git
node_engine -->|"runs network commands"| node_network
node_network -->|"performs DNS queries"| node_dns
node_engine -->|"registers Windows tools"| node_windows
node_windows -->|"provides package operations"| node_winget
node_engine -->|"reads configuration"| node_config
node_engine -->|"runs sync commands"| node_sync
node_sync -->|"merges config"| node_config
node_sync -->|"merges history"| node_historystore
node_history -->|"searches stored history"| node_historystore

click node_program "https://github.com/daolyap/pickle/blob/main/src/Pickle/Program.cs"
click node_app "https://github.com/daolyap/pickle/blob/main/src/Pickle.Core/PickleApp.cs"
click node_repl "https://github.com/daolyap/pickle/blob/main/src/Pickle.Core/Hosting/Repl.cs"
click node_engine "https://github.com/daolyap/pickle/blob/main/src/Pickle.Core/Hosting/ShellEngine.cs"
click node_editor "https://github.com/daolyap/pickle/blob/main/src/Pickle.Core/Input/LineEditor.cs"
click node_completion "https://github.com/daolyap/pickle/blob/main/src/Pickle.Core/Completion/CompletionEngine.cs"
click node_history "https://github.com/daolyap/pickle/blob/main/src/Pickle.Core/History/HistorySearchOverlay.cs"
click node_prompt "https://github.com/daolyap/pickle/blob/main/src/Pickle.Core/Prompt/PromptEngine.cs"
click node_aliases "https://github.com/daolyap/pickle/blob/main/src/Pickle.Core/Aliases/AliasManager.cs"
click node_plugins "https://github.com/daolyap/pickle/blob/main/src/Pickle.Core/Plugins/PluginManager.cs"
click node_wizards "https://github.com/daolyap/pickle/blob/main/src/Pickle.Wizards/WizardEngine.cs"
click node_panelhost "https://github.com/daolyap/pickle/blob/main/src/Pickle.Tui/PanelHost.cs"
click node_gitpanel "https://github.com/daolyap/pickle/blob/main/src/Pickle.Tui/Panels/Git/GitPanel.cs"
click node_filespanel "https://github.com/daolyap/pickle/blob/main/src/Pickle.Tui/Panels/Files/FilesPanel.cs"
click node_systempanels "https://github.com/daolyap/pickle/blob/main/src/Pickle.Tui/Panels/System/SystemPanelsPlugin.cs"
click node_git "https://github.com/daolyap/pickle/blob/main/src/Pickle.Core/Git/GitService.cs"
click node_network "https://github.com/daolyap/pickle/blob/main/src/Pickle.Network/NetworkToolsPlugin.cs"
click node_dns "https://github.com/daolyap/pickle/blob/main/src/Pickle.Network/DnsClient.cs"
click node_windows "https://github.com/daolyap/pickle/blob/main/src/Pickle.Windows/WindowsPlugin.cs"
click node_winget "https://github.com/daolyap/pickle/blob/main/src/Pickle.Windows/Winget/WingetService.cs"
click node_config "https://github.com/daolyap/pickle/blob/main/src/Pickle.Core/Config/JsonConfigStore.cs"
click node_sync "https://github.com/daolyap/pickle/blob/main/src/Pickle.Core/Sync/SyncEngine.cs"
click node_historystore "https://github.com/daolyap/pickle/blob/main/src/Pickle.Core/History/JsonlHistoryStore.cs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_program,node_app,node_repl,node_engine,node_editor,node_completion,node_history,node_prompt,node_user toneBlue
class node_aliases,node_plugins,node_wizards toneAmber
class node_panelhost,node_gitpanel,node_filespanel,node_systempanels toneMint
class node_git,node_network,node_dns,node_windows,node_winget toneRose
class node_config,node_sync,node_historystore toneIndigo
```

## Components

### Shell experience

- [CLI entry](https://github.com/daolyap/pickle/blob/main/src/Pickle/Program.cs): `src/Pickle/Program.cs`
- [Application host](https://github.com/daolyap/pickle/blob/main/src/Pickle.Core/PickleApp.cs): `src/Pickle.Core/PickleApp.cs`
- [Interactive REPL](https://github.com/daolyap/pickle/blob/main/src/Pickle.Core/Hosting/Repl.cs): `src/Pickle.Core/Hosting/Repl.cs`
- [PowerShell engine](https://github.com/daolyap/pickle/blob/main/src/Pickle.Core/Hosting/ShellEngine.cs): `src/Pickle.Core/Hosting/ShellEngine.cs`
- [Line editor](https://github.com/daolyap/pickle/blob/main/src/Pickle.Core/Input/LineEditor.cs): `src/Pickle.Core/Input/LineEditor.cs`
- [Completion](https://github.com/daolyap/pickle/blob/main/src/Pickle.Core/Completion/CompletionEngine.cs): `src/Pickle.Core/Completion/CompletionEngine.cs`
- [History search](https://github.com/daolyap/pickle/blob/main/src/Pickle.Core/History/HistorySearchOverlay.cs): `src/Pickle.Core/History/HistorySearchOverlay.cs`
- [Prompt and themes](https://github.com/daolyap/pickle/blob/main/src/Pickle.Core/Prompt/PromptEngine.cs): `src/Pickle.Core/Prompt/PromptEngine.cs`

### Commands and extensions

- [Aliases](https://github.com/daolyap/pickle/blob/main/src/Pickle.Core/Aliases/AliasManager.cs): `src/Pickle.Core/Aliases/AliasManager.cs`
- [Plugin manager](https://github.com/daolyap/pickle/blob/main/src/Pickle.Core/Plugins/PluginManager.cs): `src/Pickle.Core/Plugins/PluginManager.cs`
- [Command wizards](https://github.com/daolyap/pickle/blob/main/src/Pickle.Wizards/WizardEngine.cs): `src/Pickle.Wizards/WizardEngine.cs`

### Interactive panels

- [Panel host](https://github.com/daolyap/pickle/blob/main/src/Pickle.Tui/PanelHost.cs): `src/Pickle.Tui/PanelHost.cs`
- [Git panel](https://github.com/daolyap/pickle/blob/main/src/Pickle.Tui/Panels/Git/GitPanel.cs): `src/Pickle.Tui/Panels/Git/GitPanel.cs`
- [Files panel](https://github.com/daolyap/pickle/blob/main/src/Pickle.Tui/Panels/Files/FilesPanel.cs): `src/Pickle.Tui/Panels/Files/FilesPanel.cs`
- [System panels](https://github.com/daolyap/pickle/blob/main/src/Pickle.Tui/Panels/System/SystemPanelsPlugin.cs): `src/Pickle.Tui/Panels/System/SystemPanelsPlugin.cs`

### Domain tools

- [Git service](https://github.com/daolyap/pickle/blob/main/src/Pickle.Core/Git/GitService.cs): `src/Pickle.Core/Git/GitService.cs`
- [Network tools](https://github.com/daolyap/pickle/blob/main/src/Pickle.Network/NetworkToolsPlugin.cs): `src/Pickle.Network/NetworkToolsPlugin.cs`
- [DNS client](https://github.com/daolyap/pickle/blob/main/src/Pickle.Network/DnsClient.cs): `src/Pickle.Network/DnsClient.cs`
- [Windows services](https://github.com/daolyap/pickle/blob/main/src/Pickle.Windows/WindowsPlugin.cs): `src/Pickle.Windows/WindowsPlugin.cs`
- [Package manager](https://github.com/daolyap/pickle/blob/main/src/Pickle.Windows/Winget/WingetService.cs): `src/Pickle.Windows/Winget/WingetService.cs`

### Configuration and sync

- [Configuration](https://github.com/daolyap/pickle/blob/main/src/Pickle.Core/Config/JsonConfigStore.cs): `src/Pickle.Core/Config/JsonConfigStore.cs`
- [Sync engine](https://github.com/daolyap/pickle/blob/main/src/Pickle.Core/Sync/SyncEngine.cs): `src/Pickle.Core/Sync/SyncEngine.cs`
- [History storage](https://github.com/daolyap/pickle/blob/main/src/Pickle.Core/History/JsonlHistoryStore.cs): `src/Pickle.Core/History/JsonlHistoryStore.cs`

### Other components

- **Terminal user**

## Connections

- Terminal user → CLI entry: invokes
- CLI entry → Application host: starts
- Application host → Interactive REPL: runs
- Interactive REPL → PowerShell engine: executes commands
- Interactive REPL → Line editor: reads input
- Line editor → Completion: requests completion
- Line editor → History search: searches history
- Interactive REPL → Prompt and themes: renders prompt
- PowerShell engine → Aliases: hosts alias commands
- PowerShell engine → Plugin manager: loads extensions
- PowerShell engine → Command wizards: runs wizard commands
- PowerShell engine → Panel host: opens panels
- Panel host → Git panel: dispatches panel
- Panel host → Files panel: dispatches panel
- Panel host → System panels: dispatches panel
- Git panel → Git service: uses Git service
- PowerShell engine → Network tools: runs network commands
- Network tools → DNS client: performs DNS queries
- PowerShell engine → Windows services: registers Windows tools
- Windows services → Package manager: provides package operations
- PowerShell engine → Configuration: reads configuration
- PowerShell engine → Sync engine: runs sync commands
- Sync engine → Configuration: merges config
- Sync engine → History storage: merges history
- History search → History storage: searches stored history
