@blackbelt-technology/pi-agent-dashboard 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +342 -0
- package/README.md +619 -0
- package/docs/architecture.md +646 -0
- package/package.json +92 -0
- package/packages/extension/package.json +33 -0
- package/packages/extension/src/__tests__/ask-user-tool.test.ts +85 -0
- package/packages/extension/src/__tests__/command-handler.test.ts +712 -0
- package/packages/extension/src/__tests__/connection.test.ts +344 -0
- package/packages/extension/src/__tests__/credentials-updated.test.ts +26 -0
- package/packages/extension/src/__tests__/dev-build.test.ts +79 -0
- package/packages/extension/src/__tests__/event-forwarder.test.ts +89 -0
- package/packages/extension/src/__tests__/git-info.test.ts +112 -0
- package/packages/extension/src/__tests__/git-link-builder.test.ts +102 -0
- package/packages/extension/src/__tests__/openspec-activity-detector.test.ts +232 -0
- package/packages/extension/src/__tests__/openspec-poller.test.ts +119 -0
- package/packages/extension/src/__tests__/process-metrics.test.ts +47 -0
- package/packages/extension/src/__tests__/process-scanner.test.ts +202 -0
- package/packages/extension/src/__tests__/prompt-expander.test.ts +54 -0
- package/packages/extension/src/__tests__/server-auto-start.test.ts +167 -0
- package/packages/extension/src/__tests__/server-launcher.test.ts +44 -0
- package/packages/extension/src/__tests__/server-probe.test.ts +25 -0
- package/packages/extension/src/__tests__/session-switch.test.ts +139 -0
- package/packages/extension/src/__tests__/session-sync.test.ts +55 -0
- package/packages/extension/src/__tests__/source-detector.test.ts +73 -0
- package/packages/extension/src/__tests__/stats-extractor.test.ts +92 -0
- package/packages/extension/src/__tests__/ui-proxy.test.ts +583 -0
- package/packages/extension/src/__tests__/watchdog.test.ts +161 -0
- package/packages/extension/src/ask-user-tool.ts +63 -0
- package/packages/extension/src/bridge-context.ts +64 -0
- package/packages/extension/src/bridge.ts +926 -0
- package/packages/extension/src/command-handler.ts +538 -0
- package/packages/extension/src/connection.ts +204 -0
- package/packages/extension/src/dev-build.ts +39 -0
- package/packages/extension/src/event-forwarder.ts +40 -0
- package/packages/extension/src/flow-event-wiring.ts +102 -0
- package/packages/extension/src/git-info.ts +65 -0
- package/packages/extension/src/git-link-builder.ts +112 -0
- package/packages/extension/src/model-tracker.ts +56 -0
- package/packages/extension/src/pi-env.d.ts +23 -0
- package/packages/extension/src/process-metrics.ts +70 -0
- package/packages/extension/src/process-scanner.ts +396 -0
- package/packages/extension/src/prompt-expander.ts +87 -0
- package/packages/extension/src/provider-register.ts +276 -0
- package/packages/extension/src/server-auto-start.ts +87 -0
- package/packages/extension/src/server-launcher.ts +82 -0
- package/packages/extension/src/server-probe.ts +33 -0
- package/packages/extension/src/session-sync.ts +154 -0
- package/packages/extension/src/source-detector.ts +26 -0
- package/packages/extension/src/ui-proxy.ts +269 -0
- package/packages/extension/tsconfig.json +11 -0
- package/packages/server/package.json +37 -0
- package/packages/server/src/__tests__/auth-plugin.test.ts +117 -0
- package/packages/server/src/__tests__/auth.test.ts +224 -0
- package/packages/server/src/__tests__/auto-attach.test.ts +246 -0
- package/packages/server/src/__tests__/auto-resume.test.ts +135 -0
- package/packages/server/src/__tests__/auto-shutdown.test.ts +136 -0
- package/packages/server/src/__tests__/browse-endpoint.test.ts +104 -0
- package/packages/server/src/__tests__/bulk-archive-handler.test.ts +15 -0
- package/packages/server/src/__tests__/cli-parse.test.ts +73 -0
- package/packages/server/src/__tests__/client-discovery.test.ts +39 -0
- package/packages/server/src/__tests__/config-api.test.ts +104 -0
- package/packages/server/src/__tests__/cors.test.ts +48 -0
- package/packages/server/src/__tests__/directory-service.test.ts +240 -0
- package/packages/server/src/__tests__/editor-detection.test.ts +60 -0
- package/packages/server/src/__tests__/editor-endpoints.test.ts +26 -0
- package/packages/server/src/__tests__/editor-manager.test.ts +73 -0
- package/packages/server/src/__tests__/editor-registry.test.ts +151 -0
- package/packages/server/src/__tests__/event-status-extraction-flow.test.ts +55 -0
- package/packages/server/src/__tests__/event-status-extraction.test.ts +58 -0
- package/packages/server/src/__tests__/extension-register.test.ts +61 -0
- package/packages/server/src/__tests__/file-endpoint.test.ts +49 -0
- package/packages/server/src/__tests__/force-kill-handler.test.ts +109 -0
- package/packages/server/src/__tests__/git-operations.test.ts +251 -0
- package/packages/server/src/__tests__/headless-pid-registry.test.ts +233 -0
- package/packages/server/src/__tests__/headless-shutdown-fallback.test.ts +109 -0
- package/packages/server/src/__tests__/health-endpoint.test.ts +35 -0
- package/packages/server/src/__tests__/heartbeat-ack.test.ts +63 -0
- package/packages/server/src/__tests__/json-store.test.ts +70 -0
- package/packages/server/src/__tests__/localhost-guard.test.ts +149 -0
- package/packages/server/src/__tests__/memory-event-store.test.ts +260 -0
- package/packages/server/src/__tests__/memory-session-manager.test.ts +80 -0
- package/packages/server/src/__tests__/meta-persistence.test.ts +107 -0
- package/packages/server/src/__tests__/migrate-persistence.test.ts +180 -0
- package/packages/server/src/__tests__/npm-search-proxy.test.ts +153 -0
- package/packages/server/src/__tests__/oauth-callback-server.test.ts +165 -0
- package/packages/server/src/__tests__/openspec-archive.test.ts +87 -0
- package/packages/server/src/__tests__/package-manager-wrapper.test.ts +163 -0
- package/packages/server/src/__tests__/package-routes.test.ts +172 -0
- package/packages/server/src/__tests__/pending-fork-registry.test.ts +69 -0
- package/packages/server/src/__tests__/pending-load-manager.test.ts +144 -0
- package/packages/server/src/__tests__/pending-resume-registry.test.ts +130 -0
- package/packages/server/src/__tests__/pi-resource-scanner.test.ts +235 -0
- package/packages/server/src/__tests__/preferences-store.test.ts +108 -0
- package/packages/server/src/__tests__/process-manager.test.ts +184 -0
- package/packages/server/src/__tests__/provider-auth-handlers.test.ts +93 -0
- package/packages/server/src/__tests__/provider-auth-routes.test.ts +143 -0
- package/packages/server/src/__tests__/provider-auth-storage.test.ts +114 -0
- package/packages/server/src/__tests__/resolve-path.test.ts +38 -0
- package/packages/server/src/__tests__/ring-buffer.test.ts +45 -0
- package/packages/server/src/__tests__/server-pid.test.ts +89 -0
- package/packages/server/src/__tests__/session-api.test.ts +244 -0
- package/packages/server/src/__tests__/session-diff.test.ts +138 -0
- package/packages/server/src/__tests__/session-file-dedup.test.ts +102 -0
- package/packages/server/src/__tests__/session-file-reader.test.ts +85 -0
- package/packages/server/src/__tests__/session-lifecycle-logging.test.ts +138 -0
- package/packages/server/src/__tests__/session-order-manager.test.ts +135 -0
- package/packages/server/src/__tests__/session-ordering-integration.test.ts +102 -0
- package/packages/server/src/__tests__/session-scanner.test.ts +199 -0
- package/packages/server/src/__tests__/shutdown-endpoint.test.ts +42 -0
- package/packages/server/src/__tests__/skip-wipe.test.ts +123 -0
- package/packages/server/src/__tests__/sleep-aware-heartbeat.test.ts +126 -0
- package/packages/server/src/__tests__/smoke-integration.test.ts +175 -0
- package/packages/server/src/__tests__/spa-fallback.test.ts +68 -0
- package/packages/server/src/__tests__/subscription-handler.test.ts +155 -0
- package/packages/server/src/__tests__/terminal-gateway.test.ts +61 -0
- package/packages/server/src/__tests__/terminal-manager.test.ts +257 -0
- package/packages/server/src/__tests__/trusted-networks-config.test.ts +84 -0
- package/packages/server/src/__tests__/tunnel.test.ts +206 -0
- package/packages/server/src/__tests__/ws-ping-pong.test.ts +112 -0
- package/packages/server/src/auth-plugin.ts +302 -0
- package/packages/server/src/auth.ts +323 -0
- package/packages/server/src/browse.ts +55 -0
- package/packages/server/src/browser-gateway.ts +495 -0
- package/packages/server/src/browser-handlers/directory-handler.ts +137 -0
- package/packages/server/src/browser-handlers/handler-context.ts +45 -0
- package/packages/server/src/browser-handlers/session-action-handler.ts +271 -0
- package/packages/server/src/browser-handlers/session-meta-handler.ts +95 -0
- package/packages/server/src/browser-handlers/subscription-handler.ts +154 -0
- package/packages/server/src/browser-handlers/terminal-handler.ts +37 -0
- package/packages/server/src/cli.ts +347 -0
- package/packages/server/src/config-api.ts +130 -0
- package/packages/server/src/directory-service.ts +162 -0
- package/packages/server/src/editor-detection.ts +60 -0
- package/packages/server/src/editor-manager.ts +352 -0
- package/packages/server/src/editor-proxy.ts +134 -0
- package/packages/server/src/editor-registry.ts +108 -0
- package/packages/server/src/event-status-extraction.ts +131 -0
- package/packages/server/src/event-wiring.ts +589 -0
- package/packages/server/src/extension-register.ts +92 -0
- package/packages/server/src/git-operations.ts +200 -0
- package/packages/server/src/headless-pid-registry.ts +207 -0
- package/packages/server/src/idle-timer.ts +61 -0
- package/packages/server/src/json-store.ts +32 -0
- package/packages/server/src/localhost-guard.ts +117 -0
- package/packages/server/src/memory-event-store.ts +193 -0
- package/packages/server/src/memory-session-manager.ts +123 -0
- package/packages/server/src/meta-persistence.ts +64 -0
- package/packages/server/src/migrate-persistence.ts +195 -0
- package/packages/server/src/npm-search-proxy.ts +143 -0
- package/packages/server/src/oauth-callback-server.ts +177 -0
- package/packages/server/src/openspec-archive.ts +60 -0
- package/packages/server/src/package-manager-wrapper.ts +200 -0
- package/packages/server/src/pending-fork-registry.ts +53 -0
- package/packages/server/src/pending-load-manager.ts +110 -0
- package/packages/server/src/pending-resume-registry.ts +69 -0
- package/packages/server/src/pi-gateway.ts +419 -0
- package/packages/server/src/pi-resource-scanner.ts +369 -0
- package/packages/server/src/preferences-store.ts +116 -0
- package/packages/server/src/process-manager.ts +311 -0
- package/packages/server/src/provider-auth-handlers.ts +438 -0
- package/packages/server/src/provider-auth-storage.ts +200 -0
- package/packages/server/src/resolve-path.ts +12 -0
- package/packages/server/src/routes/editor-routes.ts +86 -0
- package/packages/server/src/routes/file-routes.ts +116 -0
- package/packages/server/src/routes/git-routes.ts +89 -0
- package/packages/server/src/routes/openspec-routes.ts +99 -0
- package/packages/server/src/routes/package-routes.ts +172 -0
- package/packages/server/src/routes/provider-auth-routes.ts +244 -0
- package/packages/server/src/routes/provider-routes.ts +101 -0
- package/packages/server/src/routes/route-deps.ts +23 -0
- package/packages/server/src/routes/session-routes.ts +91 -0
- package/packages/server/src/routes/system-routes.ts +271 -0
- package/packages/server/src/server-pid.ts +84 -0
- package/packages/server/src/server.ts +554 -0
- package/packages/server/src/session-api.ts +330 -0
- package/packages/server/src/session-bootstrap.ts +80 -0
- package/packages/server/src/session-diff.ts +178 -0
- package/packages/server/src/session-discovery.ts +134 -0
- package/packages/server/src/session-file-reader.ts +135 -0
- package/packages/server/src/session-order-manager.ts +73 -0
- package/packages/server/src/session-scanner.ts +233 -0
- package/packages/server/src/session-stats-reader.ts +99 -0
- package/packages/server/src/terminal-gateway.ts +51 -0
- package/packages/server/src/terminal-manager.ts +241 -0
- package/packages/server/src/tunnel.ts +329 -0
- package/packages/server/tsconfig.json +11 -0
- package/packages/shared/package.json +15 -0
- package/packages/shared/src/__tests__/config.test.ts +358 -0
- package/packages/shared/src/__tests__/deriveChangeState.test.ts +95 -0
- package/packages/shared/src/__tests__/mdns-discovery.test.ts +80 -0
- package/packages/shared/src/__tests__/protocol.test.ts +243 -0
- package/packages/shared/src/__tests__/resolve-jiti.test.ts +17 -0
- package/packages/shared/src/__tests__/server-identity.test.ts +73 -0
- package/packages/shared/src/__tests__/session-meta.test.ts +125 -0
- package/packages/shared/src/archive-types.ts +11 -0
- package/packages/shared/src/browser-protocol.ts +534 -0
- package/packages/shared/src/config.ts +245 -0
- package/packages/shared/src/diff-types.ts +41 -0
- package/packages/shared/src/editor-types.ts +18 -0
- package/packages/shared/src/mdns-discovery.ts +248 -0
- package/packages/shared/src/openspec-activity-detector.ts +109 -0
- package/packages/shared/src/openspec-poller.ts +96 -0
- package/packages/shared/src/protocol.ts +369 -0
- package/packages/shared/src/resolve-jiti.ts +43 -0
- package/packages/shared/src/rest-api.ts +255 -0
- package/packages/shared/src/server-identity.ts +51 -0
- package/packages/shared/src/session-meta.ts +86 -0
- package/packages/shared/src/state-replay.ts +174 -0
- package/packages/shared/src/stats-extractor.ts +54 -0
- package/packages/shared/src/terminal-types.ts +18 -0
- package/packages/shared/src/types.ts +351 -0
- package/packages/shared/tsconfig.json +8 -0
package/AGENTS.md
ADDED
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
|
|
2
|
+
# PI Dashboard
|
|
3
|
+
|
|
4
|
+
## Project Overview
|
|
5
|
+
|
|
6
|
+
Web-based dashboard for monitoring and interacting with pi agent sessions remotely. Three-component architecture: bridge extension + Node.js server + React web client.
|
|
7
|
+
|
|
8
|
+
## Architecture
|
|
9
|
+
|
|
10
|
+
See [docs/architecture.md](docs/architecture.md) for full details.
|
|
11
|
+
|
|
12
|
+
- **Bridge Extension** (`src/extension/`) — Runs in every pi session, forwards events via WebSocket
|
|
13
|
+
- **Dashboard Server** (`src/server/`) — Aggregates events, in-memory + JSON persistence, dual WebSocket servers
|
|
14
|
+
- **Web Client** (`src/client/`) — React + Tailwind responsive UI
|
|
15
|
+
- **Shared Types** (`src/shared/`) — Protocol definitions shared across components
|
|
16
|
+
|
|
17
|
+
## Commands
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm install # Install dependencies
|
|
21
|
+
npm test # Run all tests (vitest)
|
|
22
|
+
npm run test:watch # Watch mode
|
|
23
|
+
npm run build # Build web client (Vite)
|
|
24
|
+
npm run dev # Start Vite dev server
|
|
25
|
+
npm run reload # Reload all connected pi sessions
|
|
26
|
+
npm run reload:check # Type-check + reload all pi sessions
|
|
27
|
+
pi-dashboard # Start dashboard server
|
|
28
|
+
pi-dashboard --dev # Start with Vite proxy
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Cross-Platform QA Testing
|
|
32
|
+
|
|
33
|
+
VM-based QA testing for verifying clean-state installation and runtime across platforms.
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
cd qa
|
|
37
|
+
make build-linux-x86 # Build Ubuntu x86 base image (Packer + VMware)
|
|
38
|
+
make test-linux-x86 # Clone → boot → run tests → destroy
|
|
39
|
+
make manual-linux-x86 # Clone with GUI for manual testing
|
|
40
|
+
make clean # Destroy all cloned VMs
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
| File | Purpose |
|
|
44
|
+
|------|---------|
|
|
45
|
+
| `qa/Makefile` | Build/test/manual/clean targets for all platforms |
|
|
46
|
+
| `qa/packer/*.pkr.hcl` | Packer templates per platform (Ubuntu, Windows, macOS) |
|
|
47
|
+
| `qa/packer/scripts/` | Provisioning scripts (common, linux, macos, windows) |
|
|
48
|
+
| `qa/packer/vars/` | OS-version-specific variables (ISO URL, checksum, VM specs) |
|
|
49
|
+
| `qa/packer/http/` | Auto-install configs (cloud-init, autounattend.xml) |
|
|
50
|
+
| `qa/scripts/` | VM lifecycle (clone, wait-ssh, destroy, run-test) |
|
|
51
|
+
| `qa/tests/` | Test suite (install, server, websocket, terminal, git) |
|
|
52
|
+
| `qa/README.md` | Full setup and usage documentation |
|
|
53
|
+
|
|
54
|
+
## Key Files
|
|
55
|
+
|
|
56
|
+
| File | Purpose |
|
|
57
|
+
|------|---------|
|
|
58
|
+
| `src/shared/protocol.ts` | Extension↔Server WebSocket messages |
|
|
59
|
+
| `src/shared/browser-protocol.ts` | Server↔Browser WebSocket messages |
|
|
60
|
+
| `src/shared/types.ts` | Data models (Session, Workspace, Event) |
|
|
61
|
+
| `src/shared/config.ts` | Shared config loader (`~/.pi/dashboard/config.json`) |
|
|
62
|
+
| `src/extension/bridge.ts` | Main extension entry point (composes sync/tracker/flow modules, tracks `isAgentStreaming` in persistent BridgeState) |
|
|
63
|
+
| `src/extension/bridge-context.ts` | Shared mutable state type + helpers for bridge modules |
|
|
64
|
+
| `src/extension/session-sync.ts` | Session register, replay, and switch/fork handling |
|
|
65
|
+
| `src/extension/model-tracker.ts` | Model/thinking-level/git/name change detection |
|
|
66
|
+
| `src/extension/flow-event-wiring.ts` | Flow event listener registration (flow:* → event_forward) |
|
|
67
|
+
| `src/extension/connection.ts` | WebSocket with exponential backoff |
|
|
68
|
+
| `src/extension/server-probe.ts` | TCP probe to detect running server |
|
|
69
|
+
| `src/shared/server-identity.ts` | Identity-verified health check (`isDashboardRunning`) replacing bare TCP probes |
|
|
70
|
+
| `src/shared/mdns-discovery.ts` | mDNS advertise/discover/browse for `_pi-dashboard._tcp` services |
|
|
71
|
+
| `src/extension/server-launcher.ts` | Auto-start server as detached process |
|
|
72
|
+
| `src/extension/command-handler.ts` | Command routing: `!`/`!!` bash, `/compact`, slash commands |
|
|
73
|
+
| `src/extension/prompt-expander.ts` | Slash command → prompt template expansion (supports colon-to-hyphen aliasing: `/opsx:cmd` → `opsx-cmd.md`) |
|
|
74
|
+
| `src/extension/dev-build.ts` | Dev build-on-reload helper (client build + server shutdown) |
|
|
75
|
+
| `src/extension/server-auto-start.ts` | mDNS-first discovery → health check fallback → auto-start with concurrent launch detection |
|
|
76
|
+
| `src/shared/session-meta.ts` | Session metadata sidecar (.meta.json) read/write helpers |
|
|
77
|
+
| `src/extension/process-metrics.ts` | Lightweight CPU/memory/event-loop metrics collector for heartbeats |
|
|
78
|
+
| `src/extension/process-scanner.ts` | Child process detection via ps + PGID tracking (leaf-only, grandchild recursion) and PGID-based kill |
|
|
79
|
+
| `src/client/components/ProcessList.tsx` | Session card process list with elapsed time and red ✕ kill button |
|
|
80
|
+
| `src/extension/git-info.ts` | Git branch/remote/PR detection (polled every 30s) |
|
|
81
|
+
| `src/extension/git-link-builder.ts` | Git remote URL parsing and platform-specific links |
|
|
82
|
+
| `src/server/git-operations.ts` | Server-side git commands: branch listing, checkout, init, stash pop |
|
|
83
|
+
| `src/client/components/BranchPicker.tsx` | Typeahead branch picker with keyboard navigation |
|
|
84
|
+
| `src/client/components/BranchSwitchDialog.tsx` | Checkout orchestration: dirty-state stash, pop prompt |
|
|
85
|
+
| `src/client/lib/git-api.ts` | Client-side fetch helpers for git API endpoints |
|
|
86
|
+
| `src/extension/ui-proxy.ts` | Proxies ctx.ui dialogs to dashboard (confirm/select/input/editor/notify) |
|
|
87
|
+
| `src/extension/ask-user-tool.ts` | `ask_user` tool registration (bundled in bridge, registered at session_start to avoid static tool-name conflicts with other extensions) |
|
|
88
|
+
| `src/shared/openspec-activity-detector.ts` | Detects OpenSpec activity from tool events; auto-attach requires only changeName (phase optional) |
|
|
89
|
+
| `src/shared/openspec-poller.ts` | OpenSpec CLI polling (shared, used by server DirectoryService) |
|
|
90
|
+
| `src/shared/state-replay.ts` | Synthesizes events from pi entries (shared, used by server + bridge) |
|
|
91
|
+
| `src/shared/stats-extractor.ts` | Extracts token/cost stats from turn_end events |
|
|
92
|
+
| `src/server/session-stats-reader.ts` | Reads cumulative stats + context usage from session JSONL files at startup |
|
|
93
|
+
| `src/server/server.ts` | HTTP + WebSocket server (composes route modules + wiring) |
|
|
94
|
+
| `src/server/routes/session-routes.ts` | REST routes: sessions, events, session-diff |
|
|
95
|
+
| `src/server/routes/git-routes.ts` | REST routes: git branches, checkout, init, stash-pop |
|
|
96
|
+
| `src/server/routes/file-routes.ts` | REST routes: file read, browse, readme, pinned-dirs |
|
|
97
|
+
| `src/server/routes/openspec-routes.ts` | REST routes: openspec-archive, pi-resources, pi-resource-file |
|
|
98
|
+
| `src/server/routes/system-routes.ts` | REST routes: config, health, shutdown, tunnel, editors |
|
|
99
|
+
| `src/server/event-wiring.ts` | Pi gateway → browser gateway event forwarding (replay suppression with `skipReplayInsert` dedup, flows refresh dedup, context usage extraction) |
|
|
100
|
+
| `src/server/idle-timer.ts` | Auto-shutdown idle timer with sleep-wake resilience |
|
|
101
|
+
| `src/server/session-bootstrap.ts` | Startup session discovery and OpenSpec polling init |
|
|
102
|
+
| `src/server/pi-gateway.ts` | Extension WebSocket gateway (port 9999) |
|
|
103
|
+
| `src/server/browser-gateway.ts` | Browser WebSocket gateway (dispatches to handler modules) |
|
|
104
|
+
| `src/server/browser-handlers/handler-context.ts` | Shared context type for browser message handlers |
|
|
105
|
+
| `src/server/browser-handlers/subscription-handler.ts` | Subscribe/unsubscribe with async batched replay, backpressure, lazy loading |
|
|
106
|
+
| `src/server/browser-handlers/session-action-handler.ts` | Send prompt, abort, resume, spawn, shutdown, force kill, flow control |
|
|
107
|
+
| `src/client/components/ImageLightbox.tsx` | Full-size image lightbox with zoom/pan (useZoomPan), Esc/backdrop close |
|
|
108
|
+
| `src/client/components/CollapsedToolGroup.tsx` | Collapsed group of repeated tool calls with expand toggle |
|
|
109
|
+
| `src/client/lib/group-tool-calls.ts` | Groups consecutive identical tool calls for chat display |
|
|
110
|
+
| `src/server/browser-handlers/session-meta-handler.ts` | Rename, hide, unhide, attach/detach proposal, fetch, list |
|
|
111
|
+
| `src/server/browser-handlers/terminal-handler.ts` | Create, kill, rename terminals |
|
|
112
|
+
| `src/server/browser-handlers/directory-handler.ts` | Pin/unpin dirs, reorder, openspec refresh, pi-gateway forwards |
|
|
113
|
+
| `src/server/memory-event-store.ts` | In-memory event buffer with LRU eviction, per-session cap, payload truncation |
|
|
114
|
+
| `src/server/memory-session-manager.ts` | Pure in-memory session registry |
|
|
115
|
+
| `src/client/components/FolderOpenSpecSection.tsx` | Folder-level OpenSpec UI: collapsible change list, refresh, bulk archive, archive button |
|
|
116
|
+
| `src/client/components/ArchiveBrowserView.tsx` | Searchable archive browser: date-grouped list, two-level nav to artifact reader |
|
|
117
|
+
| `src/client/hooks/useArchiveListing.ts` | Fetch hook + pure helpers (groupByDate, filterEntries) for archive endpoint |
|
|
118
|
+
| `src/server/openspec-archive.ts` | Scans `openspec/changes/archive/` and returns structured ArchiveEntry list |
|
|
119
|
+
| `src/client/components/SessionOpenSpecActions.tsx` | Session-level OpenSpec: searchable attach dialog, action buttons, detach |
|
|
120
|
+
| `src/client/components/DialogPortal.tsx` | Portal wrapper rendering dialogs at document.body with scroll lock |
|
|
121
|
+
| `src/client/components/PinDirectoryDialog.tsx` | Dialog to pin a directory (wraps PathPicker) |
|
|
122
|
+
| `src/client/components/PathPicker.tsx` | Reusable keyboard-first path picker with typeahead directory list |
|
|
123
|
+
| `src/client/lib/browse-api.ts` | Client-side browse API helper for PathPicker |
|
|
124
|
+
| `src/server/browse.ts` | Directory listing logic for browse API endpoint |
|
|
125
|
+
| `src/server/pi-resource-scanner.ts` | Discovers pi extensions, skills, prompts from local, global, and package sources |
|
|
126
|
+
| `src/server/package-manager-wrapper.ts` | Thin adapter around pi's `DefaultPackageManager` with operation serialization, progress forwarding, and session reload |
|
|
127
|
+
| `src/server/npm-search-proxy.ts` | Cached proxy for npm registry search (`keywords:pi-package`) and README fetch |
|
|
128
|
+
| `src/server/routes/package-routes.ts` | REST routes: search, readme, installed, install, remove, update, check-updates |
|
|
129
|
+
| `src/client/components/SortablePinnedGroup.tsx` | Drag-to-reorder wrapper for pinned directory groups |
|
|
130
|
+
| `src/server/preferences-store.ts` | Global UI preferences (pinned dirs, session order) in `preferences.json` |
|
|
131
|
+
| `src/server/meta-persistence.ts` | Per-session debounced `.meta.json` writer |
|
|
132
|
+
| `src/server/session-scanner.ts` | Startup session discovery by scanning `~/.pi/agent/sessions/` |
|
|
133
|
+
| `src/server/migrate-persistence.ts` | One-time migration from `sessions.json` + `state.json` to `.meta.json` |
|
|
134
|
+
| `src/server/session-order-manager.ts` | Per-cwd session ordering with persistence |
|
|
135
|
+
| `src/server/directory-service.ts` | Server-side session discovery, event loading, and OpenSpec polling |
|
|
136
|
+
| `src/server/pending-fork-registry.ts` | Tracks pending fork operations for session placement |
|
|
137
|
+
| `src/server/pending-resume-registry.ts` | Queues prompts for auto-resume of ended sessions |
|
|
138
|
+
| `src/server/json-store.ts` | Atomic JSON file read/write helpers |
|
|
139
|
+
| `src/server/process-manager.ts` | Session spawning via tmux or headless mode |
|
|
140
|
+
| `src/server/editor-registry.ts` | Detects available native editors (running processes + CLI) |
|
|
141
|
+
| `src/server/editor-manager.ts` | Lifecycle manager for code-server child processes (spawn, stop, idle, heartbeat) |
|
|
142
|
+
| `src/server/editor-proxy.ts` | Reverse proxy for `/editor/:id/*` to code-server instances |
|
|
143
|
+
| `src/server/editor-detection.ts` | Auto-detect code-server/openvscode-server binary on PATH |
|
|
144
|
+
| `src/server/routes/editor-routes.ts` | REST routes: editor start, stop, heartbeat, status, detect |
|
|
145
|
+
| `src/server/event-status-extraction.ts` | Extracts session status/tool updates from events (incl. flow metadata) |
|
|
146
|
+
| `src/server/headless-pid-registry.ts` | Maps headless child PIDs to session IDs |
|
|
147
|
+
| `src/server/auth.ts` | OAuth2 authentication: provider registry, JWT helpers, user allowlist |
|
|
148
|
+
| `src/server/provider-auth-handlers.ts` | Pi provider OAuth handlers (Anthropic, Codex, GitHub Copilot, Gemini CLI, Antigravity) |
|
|
149
|
+
| `src/server/provider-auth-storage.ts` | Read/write ~/.pi/agent/auth.json with lockfile for pi provider credentials |
|
|
150
|
+
| `src/server/routes/provider-auth-routes.ts` | REST routes: provider OAuth authorize/exchange/callback, device-code, API key CRUD |
|
|
151
|
+
| `src/client/components/ProviderAuthSection.tsx` | Settings section: OAuth login buttons, device-code modal, API key inputs |
|
|
152
|
+
| `src/server/auth-plugin.ts` | Fastify plugin: auth routes, onRequest hook, WS upgrade validation |
|
|
153
|
+
| `src/server/config-api.ts` | Config REST API: read (redacted), write (partial merge), secret preservation |
|
|
154
|
+
| `src/client/components/SettingsPanel.tsx` | Settings UI: all dashboard config fields, grouped form, save to server |
|
|
155
|
+
| `src/client/hooks/useAuthStatus.ts` | Client auth status hook and login redirect helper |
|
|
156
|
+
| `src/server/localhost-guard.ts` | Network access guard: `createNetworkGuard` (loopback/trusted/authenticated), `isBypassedHost` (CIDR/wildcard/exact), netmask-to-CIDR helpers |
|
|
157
|
+
| `src/server/server-pid.ts` | PID file management for daemon mode |
|
|
158
|
+
| `src/client/components/ServerSelector.tsx` | Server selector dropdown for switching between discovered dashboard servers |
|
|
159
|
+
| `src/server/terminal-manager.ts` | PTY lifecycle, ring buffer, spawn/attach/kill terminals |
|
|
160
|
+
| `src/server/terminal-gateway.ts` | Binary WebSocket upgrade handler for `/ws/terminal/:id` |
|
|
161
|
+
| `scripts/fix-pty-permissions.cjs` | Postinstall: fix node-pty spawn-helper execute permissions |
|
|
162
|
+
| `src/server/tunnel.ts` | Zrok tunnel with reserved shares for persistent URLs, binary detection, PID tracking, stale cleanup |
|
|
163
|
+
| `src/client/components/TunnelButton.tsx` | Unified tunnel/QR button — tunnel icon when not set up, QR icon when inactive, green QR icon when connected; opens QR dialog with disconnect/setup |
|
|
164
|
+
| `src/client/components/QrCodeDialog.tsx` | QR code dialog showing tunnel URL as scannable QR code with copy, disconnect, and setup buttons |
|
|
165
|
+
| `public/manifest.json` | PWA web app manifest for installability |
|
|
166
|
+
| `public/sw.js` | Minimal service worker for PWA installability |
|
|
167
|
+
| `src/client/components/ZrokInstallGuide.tsx` | OS-aware zrok installation guide view (macOS/Linux/Windows) |
|
|
168
|
+
| `src/server/cli.ts` | CLI entry point with subcommands (start/stop/restart/status) |
|
|
169
|
+
| `src/shared/rest-api.ts` | REST API type definitions |
|
|
170
|
+
| `scripts/reload-all.sh` | Build bridge + reload all pi sessions |
|
|
171
|
+
| `src/client/components/PiResourcesView.tsx` | Content area view for browsing pi extensions, skills, and prompts (with Installed/Packages tabs) |
|
|
172
|
+
| `src/client/components/PackageBrowser.tsx` | Reusable inline package browser: npm search, type filters, install/uninstall, manual URL input |
|
|
173
|
+
| `src/client/components/PackageCard.tsx` | Package card with type badges, downloads, install/uninstall actions |
|
|
174
|
+
| `src/client/components/PackageReadmeDialog.tsx` | Dialog overlay showing package README with install/uninstall action |
|
|
175
|
+
| `src/client/components/PackageInstallConfirmDialog.tsx` | Confirmation dialog before package install (name, source, scope) |
|
|
176
|
+
| `src/client/hooks/usePackageSearch.ts` | Debounced fetch hook for `/api/packages/search` |
|
|
177
|
+
| `src/client/hooks/useInstalledPackages.ts` | Fetch hook for `/api/packages/installed` |
|
|
178
|
+
| `src/client/hooks/usePackageOperations.ts` | Install/remove/update actions with WebSocket progress listening |
|
|
179
|
+
| `src/client/hooks/usePiResources.ts` | Fetch + 30s polling hook for pi resources API |
|
|
180
|
+
| `src/client/components/MarkdownPreviewView.tsx` | Generic reusable markdown preview with back button, tabs, loading/error states |
|
|
181
|
+
| `src/client/hooks/useOpenSpecReader.ts` | Maps OpenSpec artifacts to file paths, fetches content, concatenates specs |
|
|
182
|
+
| `src/client/components/interactive-renderers/` | Registry + renderers for interactive UI dialogs (confirm, select, multiselect, input, editor, notify) |
|
|
183
|
+
| `src/shared/terminal-types.ts` | TerminalSession type and control messages |
|
|
184
|
+
| `src/client/components/TerminalView.tsx` | xterm.js terminal emulator wrapper with keep-alive |
|
|
185
|
+
| `src/client/components/TerminalsView.tsx` | Tabbed terminal container per folder (tab bar, keep-alive, rename) |
|
|
186
|
+
| `src/client/components/EditorView.tsx` | code-server iframe embedding with lazy start and heartbeat |
|
|
187
|
+
| `src/client/components/EditorInstallGuide.tsx` | Platform-specific code-server installation guide |
|
|
188
|
+
| `src/client/components/FolderActionBar.tsx` | Unified action bar per folder: +Session, +Terminal, Terminals(N), Editor, Zed, Pi Resources |
|
|
189
|
+
| `src/client/lib/folder-encoding.ts` | Base64url encode/decode for folder paths in URL routes |
|
|
190
|
+
| `src/shared/editor-types.ts` | Editor instance types shared across components |
|
|
191
|
+
| `src/client/components/TerminalCard.tsx` | Sidebar card for terminal sessions (cyan accent) |
|
|
192
|
+
| `src/client/App.tsx` | React app with WebSocket integration |
|
|
193
|
+
| `src/client/components/MobileShell.tsx` | Two-panel mobile shell with slide transitions and swipe-back |
|
|
194
|
+
| `src/client/components/MobileActionMenu.tsx` | Kebab menu for session actions on mobile (includes OpenSpec commands) |
|
|
195
|
+
| `src/client/components/MobileOverlay.tsx` | Hamburger button and sidebar overlay for mobile |
|
|
196
|
+
| `src/client/components/SessionHeader.tsx` | Session header with OpenSpec attach/detach, flow launcher, MobileAttachButton |
|
|
197
|
+
| `src/client/hooks/useSwipeBack.ts` | iOS-style left-edge swipe-back gesture (40px edge zone, document-level listeners) |
|
|
198
|
+
| `src/client/components/ChatView.tsx` | Chat message view with scroll-lock: pauses auto-scroll when user scrolls up, floating scroll-to-bottom button, per-session scroll position persistence |
|
|
199
|
+
| `src/client/lib/mobile-depth.ts` | Pure function computing MobileShell depth from route state |
|
|
200
|
+
| `src/client/hooks/useZoomPan.ts` | Reusable zoom/pan hook (wheel, drag, pinch, buttons) |
|
|
201
|
+
| `src/client/hooks/useMessageHandler.ts` | WebSocket message dispatch hook (extracted from App.tsx) |
|
|
202
|
+
| `src/client/hooks/useSessionActions.ts` | Session action callbacks hook (send, abort, resume, spawn, etc.) |
|
|
203
|
+
| `src/client/hooks/useOpenSpecActions.ts` | OpenSpec action callbacks hook (refresh, archive, attach, detach) |
|
|
204
|
+
| `src/client/hooks/useContentViews.ts` | Content view state + fetch (pi resources, readme, file preview) |
|
|
205
|
+
| `src/client/lib/event-reducer.ts` | Event-sourced state reducer (delegates flow events to flow-reducer); extracts LLM errors from `agent_end` into `lastError` |
|
|
206
|
+
| `src/client/hooks/usePendingPromptTimeout.ts` | 30-second safety timeout for stuck `pendingPrompt` spinners |
|
|
207
|
+
| `src/client/lib/flow-reducer.ts` | Flow state machine: all flow_* event handling |
|
|
208
|
+
| `src/client/lib/session-grouping.ts` | Pure functions: group, sort, filter sessions by directory |
|
|
209
|
+
| `src/client/lib/truncate-path.ts` | Middle-truncation utility for filesystem paths |
|
|
210
|
+
| `src/server/resolve-path.ts` | Safe realpath resolution (symlink handling) |
|
|
211
|
+
| `src/client/components/ElapsedBadge.tsx` | Reusable elapsed time badge: static duration or live ticking counter |
|
|
212
|
+
| `src/client/components/FlowDashboard.tsx` | Sticky flow card grid above ChatView with abort/auto controls, mobile collapse |
|
|
213
|
+
| `src/client/components/FlowAgentCard.tsx` | Individual agent card: status, tools, tokens, duration, loop badge |
|
|
214
|
+
| `src/client/components/FlowAgentDetail.tsx` | Full content-area agent detail: tool history, assistant text, thinking |
|
|
215
|
+
| `src/client/components/FlowSummary.tsx` | Post-completion summary: per-agent status, file counts, dismiss |
|
|
216
|
+
| `src/client/components/FlowActivityBadge.tsx` | Session card badge showing flow name and agent progress |
|
|
217
|
+
| `src/client/components/FlowLaunchDialog.tsx` | Task input dialog for launching a flow |
|
|
218
|
+
| `src/client/components/SessionFlowActions.tsx` | Session card flow launcher: searchable picker + new flow button |
|
|
219
|
+
| `src/client/components/SearchableSelectDialog.tsx` | Shared searchable select dialog (keyboard nav, filtering, badges) |
|
|
220
|
+
| `src/shared/diff-types.ts` | Types for session file diff API (FileChangeEvent, FileDiffEntry, SessionDiffResponse) |
|
|
221
|
+
| `src/server/session-diff.ts` | Server-side event scanning + git diff extraction for session file changes |
|
|
222
|
+
| `src/client/components/FileDiffView.tsx` | Split-pane container: file tree + diff panel, content-area view |
|
|
223
|
+
| `src/client/components/DiffFileTree.tsx` | Two-level file tree with change events, timestamps, context messages |
|
|
224
|
+
| `src/client/components/DiffPanel.tsx` | Rich diff rendering via @git-diff-view/react with syntax highlighting |
|
|
225
|
+
| `src/client/hooks/useSessionDiff.ts` | Fetch hook for `/api/session-diff` endpoint |
|
|
226
|
+
| `src/client/lib/diff-tree.ts` | Directory tree builder from flat file paths |
|
|
227
|
+
| `src/server/session-api.ts` | REST wrappers for WebSocket-only session operations (prompt, abort, spawn, resume, etc.) |
|
|
228
|
+
| `.pi/skills/pi-dashboard/SKILL.md` | Bundled skill: monitor and control the dashboard from any pi session |
|
|
229
|
+
| `.pi/skills/pi-dashboard/references/api-reference.md` | Complete REST API reference for the skill |
|
|
230
|
+
| `.pi/skills/pi-dashboard/references/recipes.md` | Multi-step orchestration recipes |
|
|
231
|
+
| `.pi/skills/pi-dashboard/scripts/dashboard-api.sh` | Helper script with port auto-detection and auth |
|
|
232
|
+
|
|
233
|
+
| `.pi/skills/spec-coherence-check/SKILL.md` | Skill: sweep proposals for staleness, conflicts, obsolescence against codebase |
|
|
234
|
+
| `.pi/skills/spec-coherence-check/references/proposal-queue-schema.md` | JSON schema for `.pi/proposal-queue.json` |
|
|
235
|
+
| `.pi/skills/code-review/SKILL.md` | Skill: comprehensive code review with severity labels, four-phase process, language-specific guides |
|
|
236
|
+
| `.pi/skills/code-review/references/` | On-demand language guides (React, TypeScript, Vue, Rust, Go, Java, Python, C/C++, CSS, Qt) + architecture/performance/security reviews |
|
|
237
|
+
| `.pi/skills/nano-banana-imagegen/SKILL.md` | Skill: AI image generation/editing via Google Gemini (nano-banana CLI) |
|
|
238
|
+
| `.pi/skills/nano-banana-imagegen/references/` | Prompting guide, example prompts (headers, icons, illustrations, photography) |
|
|
239
|
+
| `.pi/skills/browser-visual-debug/SKILL.md` | Skill: visual debugging with a real browser (screenshots, interaction, responsive testing) via pi-agent-browser |
|
|
240
|
+
| `.pi/skills/browser-visual-debug/references/` | Dashboard recipes, responsive testing presets, agent-browser commands cheatsheet |
|
|
241
|
+
| `.pi/skills/browser-visual-debug/scripts/detect-dashboard.sh` | Auto-detect dashboard URL, mode, and Vite dev server status |
|
|
242
|
+
| `packages/electron/src/main.ts` | Electron main process: single-instance, wizard, server launch, loading page, tray |
|
|
243
|
+
| `packages/electron/src/lib/server-lifecycle.ts` | Health check → tsx binary spawn (inlined config/health, no shared pkg imports) |
|
|
244
|
+
| `packages/server/src/extension-register.ts` | Auto-registers bundled bridge extension in pi's global settings on startup |
|
|
245
|
+
| `packages/electron/src/lib/doctor.ts` | Doctor diagnostic: checks all binaries, versions, server status, offers setup |
|
|
246
|
+
| `packages/electron/src/lib/app-menu.ts` | App menu with About dialog and Doctor on all platforms |
|
|
247
|
+
| `packages/electron/src/lib/tray.ts` | System tray with platform-specific icons (template on macOS, ico/png on Win/Linux) |
|
|
248
|
+
| `packages/electron/src/lib/dependency-installer.ts` | Async npm install of pi, openspec, tsx into ~/.pi-dashboard/ using bundled Node |
|
|
249
|
+
| `packages/electron/src/lib/dependency-detector.ts` | Detects pi, openspec, Node.js on system PATH and managed install |
|
|
250
|
+
| `packages/electron/src/lib/bundled-node.ts` | Resolves bundled Node.js/npm paths in Electron resources |
|
|
251
|
+
| `packages/electron/src/lib/wizard-window.ts` | First-run setup wizard window with preload bridge |
|
|
252
|
+
| `packages/electron/forge.config.ts` | Electron Forge config: DMG, DEB, AppImage, NSIS makers, icon, extraResources |
|
|
253
|
+
| `packages/electron/scripts/build-installer.sh` | Build script: native + Docker cross-platform (--linux, --windows, --all) |
|
|
254
|
+
| `packages/electron/scripts/docker-make.sh` | Docker entrypoint: platform-aware native module handling, ZIP for Windows |
|
|
255
|
+
| `packages/electron/scripts/Dockerfile.build` | Docker image for cross-platform builds (node:22-bookworm-slim + build tools) |
|
|
256
|
+
| `packages/electron/scripts/bundle-server.sh` | Bundles dashboard server source + deps into resources/server/ (--source-only for cross-builds) |
|
|
257
|
+
| `packages/electron/scripts/docker-make.sh` | Docker entrypoint: bundles server, installs native deps, runs Forge make |
|
|
258
|
+
| `packages/electron/scripts/Dockerfile.build` | Docker image for cross-platform builds (node:22-bookworm-slim + build tools) |
|
|
259
|
+
| `packages/electron/scripts/test-server-launch.sh` | Docker-based test for server launch on clean Linux |
|
|
260
|
+
| `packages/electron/scripts/test-electron-install.sh` | Full e2e Docker test: install, wizard, server launch, health check |
|
|
261
|
+
| `packages/electron/scripts/test-electron-install-inner.sh` | Inner test script run inside Docker container |
|
|
262
|
+
| `packages/electron/resources/icon.png` | Master 1024×1024 app icon (π on dark navy) |
|
|
263
|
+
| `.github/workflows/electron-build.yml` | CI: builds DMG (macOS), DEB+AppImage (Linux), NSIS (Windows) on native runners |
|
|
264
|
+
|
|
265
|
+
## Build & Restart Workflow
|
|
266
|
+
|
|
267
|
+
The dashboard has three components that need rebuilding depending on what changed:
|
|
268
|
+
|
|
269
|
+
### After bridge extension changes (`src/extension/`)
|
|
270
|
+
Reload all connected pi sessions to pick up the new bridge code:
|
|
271
|
+
```bash
|
|
272
|
+
npm run reload # Reload all pi sessions
|
|
273
|
+
npm run reload:check # Type-check first, then reload
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
### After server changes (`src/server/`, `src/shared/`)
|
|
277
|
+
Restart the dashboard server. The server runs TypeScript directly via jiti (pi's TypeScript loader), so no separate build step is needed — just restart:
|
|
278
|
+
```bash
|
|
279
|
+
# Graceful restart via API (preserves current dev/prod mode)
|
|
280
|
+
curl -X POST http://localhost:8000/api/restart
|
|
281
|
+
|
|
282
|
+
# Or via CLI
|
|
283
|
+
pi-dashboard restart # production mode
|
|
284
|
+
pi-dashboard restart --dev # dev mode
|
|
285
|
+
|
|
286
|
+
# Manual stop + start
|
|
287
|
+
pi-dashboard stop && pi-dashboard start
|
|
288
|
+
pi-dashboard stop && pi-dashboard start --dev
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
### After client changes (`src/client/`)
|
|
292
|
+
- **Dev mode**: Vite hot-reloads automatically, no action needed. Start with `npm run dev`.
|
|
293
|
+
- **Production mode**: Rebuild the client and restart the server:
|
|
294
|
+
```bash
|
|
295
|
+
npm run build
|
|
296
|
+
curl -X POST http://localhost:8000/api/restart
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
### After OpenSpec apply finishes (full rebuild)
|
|
300
|
+
When an openspec-apply-change skill completes implementation, do a full rebuild and restart:
|
|
301
|
+
```bash
|
|
302
|
+
npm run build
|
|
303
|
+
curl -X POST http://localhost:8000/api/restart
|
|
304
|
+
npm run reload
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
### Check current mode
|
|
308
|
+
```bash
|
|
309
|
+
curl -s http://localhost:8000/api/health | jq .mode
|
|
310
|
+
# Returns "dev" or "production"
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
### Dev mode with production fallback
|
|
314
|
+
In `--dev` mode, the server proxies to Vite for HMR. If Vite is not running, it **automatically falls back** to serving the production build from `dist/client/`. This means `pi-dashboard start --dev` always works — no 502 errors.
|
|
315
|
+
|
|
316
|
+
### Fault-tolerant restart
|
|
317
|
+
- `POST /api/restart` waits for the old server to exit, starts a new one, and verifies health
|
|
318
|
+
- `POST /api/restart` with body `{"dev": true}` or `{"dev": false}` switches modes
|
|
319
|
+
- `pi-dashboard stop` kills stale processes holding the ports (via `lsof`), not just the PID file
|
|
320
|
+
|
|
321
|
+
## OpenSpec Conventions
|
|
322
|
+
|
|
323
|
+
When creating OpenSpec change artifacts, always place them at `openspec/changes/<name>/` — never nest under subdirectories like `active/` or `archive/`. Prefer using `openspec change new <name>` CLI to scaffold the directory structure correctly.
|
|
324
|
+
|
|
325
|
+
## Diagram Style
|
|
326
|
+
|
|
327
|
+
When creating diagrams, use Mermaid syntax (```mermaid blocks) instead of ASCII box drawings. This applies to explore mode, design documents, and all other artifacts.
|
|
328
|
+
|
|
329
|
+
## Code Instructions
|
|
330
|
+
|
|
331
|
+
1. First think through the problem, read the codebase for relevant files.
|
|
332
|
+
2. Before you make any major changes, check in with me and I will verify the plan.
|
|
333
|
+
3. Please every step of the way just give me a high level explanation of what changes you made.
|
|
334
|
+
4. Make every task and code change you do as simple as possible. We want to avoid making any massive or complex changes. Every change should impact as little code as possible. Everything is about simplicity.
|
|
335
|
+
5. Maintain a documentation file that describes how the architecture of the app works inside and out.
|
|
336
|
+
6. Never speculate about code you have not opened. If the user references a specific file, you MUST read the file before answering. Make sure to investigate and read relevant files BEFORE answering questions about the codebase. Never make any claims about code before investigating unless you are certain of the correct answer - give grounded and hallucination-free answers.
|
|
337
|
+
7. For implementation use TDD (Test-Driven Development): write or update tests first to define the expected behaviour, verify they fail, then write the minimal implementation to make them pass.
|
|
338
|
+
8. Use DRY (Don't Repeat Yourself): extract reusable logic into separate classes, utilities, or components. If the same pattern appears in multiple places, refactor it into a shared helper.
|
|
339
|
+
|
|
340
|
+
## Document changes
|
|
341
|
+
|
|
342
|
+
When an implementation is ready, update AGENTS.md, README.md, and docs/architecture.md. AGENTS.md contains instructions for AI agents, key files, and commands needed to build and operate. README.md contains end-user and developer documentation with CI badges, prerequisites, configuration, and project structure. docs/architecture.md contains detailed data flows, persistence model, reconnection logic, and configuration reference.
|