@viewportai/daemon 0.1.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/LICENSE +176 -0
- package/README.md +157 -0
- package/bin/vpd.js +3 -0
- package/dist/adapters/claude.d.ts +119 -0
- package/dist/adapters/claude.d.ts.map +1 -0
- package/dist/adapters/claude.js +621 -0
- package/dist/adapters/claude.js.map +1 -0
- package/dist/adapters/codex-event-normalizers.d.ts +10 -0
- package/dist/adapters/codex-event-normalizers.d.ts.map +1 -0
- package/dist/adapters/codex-event-normalizers.js +208 -0
- package/dist/adapters/codex-event-normalizers.js.map +1 -0
- package/dist/adapters/codex-sdk-loader.d.ts +47 -0
- package/dist/adapters/codex-sdk-loader.d.ts.map +1 -0
- package/dist/adapters/codex-sdk-loader.js +19 -0
- package/dist/adapters/codex-sdk-loader.js.map +1 -0
- package/dist/adapters/codex.d.ts +56 -0
- package/dist/adapters/codex.d.ts.map +1 -0
- package/dist/adapters/codex.js +267 -0
- package/dist/adapters/codex.js.map +1 -0
- package/dist/adapters/gemini-cli.d.ts +49 -0
- package/dist/adapters/gemini-cli.d.ts.map +1 -0
- package/dist/adapters/gemini-cli.js +181 -0
- package/dist/adapters/gemini-cli.js.map +1 -0
- package/dist/adapters/pty.d.ts +56 -0
- package/dist/adapters/pty.d.ts.map +1 -0
- package/dist/adapters/pty.js +223 -0
- package/dist/adapters/pty.js.map +1 -0
- package/dist/agents/aider.d.ts +9 -0
- package/dist/agents/aider.d.ts.map +1 -0
- package/dist/agents/aider.js +37 -0
- package/dist/agents/aider.js.map +1 -0
- package/dist/agents/built-in.d.ts +4 -0
- package/dist/agents/built-in.d.ts.map +1 -0
- package/dist/agents/built-in.js +6 -0
- package/dist/agents/built-in.js.map +1 -0
- package/dist/agents/claude.d.ts +12 -0
- package/dist/agents/claude.d.ts.map +1 -0
- package/dist/agents/claude.js +93 -0
- package/dist/agents/claude.js.map +1 -0
- package/dist/agents/codex.d.ts +6 -0
- package/dist/agents/codex.d.ts.map +1 -0
- package/dist/agents/codex.js +64 -0
- package/dist/agents/codex.js.map +1 -0
- package/dist/agents/command-detection.d.ts +6 -0
- package/dist/agents/command-detection.d.ts.map +1 -0
- package/dist/agents/command-detection.js +12 -0
- package/dist/agents/command-detection.js.map +1 -0
- package/dist/agents/gemini.d.ts +6 -0
- package/dist/agents/gemini.d.ts.map +1 -0
- package/dist/agents/gemini.js +36 -0
- package/dist/agents/gemini.js.map +1 -0
- package/dist/cli/agent-commands.d.ts +2 -0
- package/dist/cli/agent-commands.d.ts.map +1 -0
- package/dist/cli/agent-commands.js +87 -0
- package/dist/cli/agent-commands.js.map +1 -0
- package/dist/cli/args.d.ts +9 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +34 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/command-shared.d.ts +53 -0
- package/dist/cli/command-shared.d.ts.map +1 -0
- package/dist/cli/command-shared.js +239 -0
- package/dist/cli/command-shared.js.map +1 -0
- package/dist/cli/commands.d.ts +20 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +20 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/daemon-client.d.ts +30 -0
- package/dist/cli/daemon-client.d.ts.map +1 -0
- package/dist/cli/daemon-client.js +161 -0
- package/dist/cli/daemon-client.js.map +1 -0
- package/dist/cli/daemon-lifecycle.d.ts +47 -0
- package/dist/cli/daemon-lifecycle.d.ts.map +1 -0
- package/dist/cli/daemon-lifecycle.js +262 -0
- package/dist/cli/daemon-lifecycle.js.map +1 -0
- package/dist/cli/daemon-settings.d.ts +9 -0
- package/dist/cli/daemon-settings.d.ts.map +1 -0
- package/dist/cli/daemon-settings.js +168 -0
- package/dist/cli/daemon-settings.js.map +1 -0
- package/dist/cli/directory-commands.d.ts +4 -0
- package/dist/cli/directory-commands.d.ts.map +1 -0
- package/dist/cli/directory-commands.js +190 -0
- package/dist/cli/directory-commands.js.map +1 -0
- package/dist/cli/hook-command.d.ts +14 -0
- package/dist/cli/hook-command.d.ts.map +1 -0
- package/dist/cli/hook-command.js +96 -0
- package/dist/cli/hook-command.js.map +1 -0
- package/dist/cli/install-command.d.ts +2 -0
- package/dist/cli/install-command.d.ts.map +1 -0
- package/dist/cli/install-command.js +91 -0
- package/dist/cli/install-command.js.map +1 -0
- package/dist/cli/lifecycle-commands.d.ts +10 -0
- package/dist/cli/lifecycle-commands.d.ts.map +1 -0
- package/dist/cli/lifecycle-commands.js +524 -0
- package/dist/cli/lifecycle-commands.js.map +1 -0
- package/dist/cli/listen-target.d.ts +13 -0
- package/dist/cli/listen-target.d.ts.map +1 -0
- package/dist/cli/listen-target.js +102 -0
- package/dist/cli/listen-target.js.map +1 -0
- package/dist/cli/orchestration-commands.d.ts +8 -0
- package/dist/cli/orchestration-commands.d.ts.map +1 -0
- package/dist/cli/orchestration-commands.js +340 -0
- package/dist/cli/orchestration-commands.js.map +1 -0
- package/dist/cli/permission-commands.d.ts +2 -0
- package/dist/cli/permission-commands.d.ts.map +1 -0
- package/dist/cli/permission-commands.js +138 -0
- package/dist/cli/permission-commands.js.map +1 -0
- package/dist/cli/runtime-toolchain.d.ts +35 -0
- package/dist/cli/runtime-toolchain.d.ts.map +1 -0
- package/dist/cli/runtime-toolchain.js +184 -0
- package/dist/cli/runtime-toolchain.js.map +1 -0
- package/dist/cli/service-commands.d.ts +19 -0
- package/dist/cli/service-commands.d.ts.map +1 -0
- package/dist/cli/service-commands.js +273 -0
- package/dist/cli/service-commands.js.map +1 -0
- package/dist/cli/session-commands.d.ts +3 -0
- package/dist/cli/session-commands.d.ts.map +1 -0
- package/dist/cli/session-commands.js +146 -0
- package/dist/cli/session-commands.js.map +1 -0
- package/dist/cli/setup-command.d.ts +12 -0
- package/dist/cli/setup-command.d.ts.map +1 -0
- package/dist/cli/setup-command.js +223 -0
- package/dist/cli/setup-command.js.map +1 -0
- package/dist/cli/supervisor-protocol.d.ts +20 -0
- package/dist/cli/supervisor-protocol.d.ts.map +1 -0
- package/dist/cli/supervisor-protocol.js +5 -0
- package/dist/cli/supervisor-protocol.js.map +1 -0
- package/dist/cli/supervisor.d.ts +10 -0
- package/dist/cli/supervisor.d.ts.map +1 -0
- package/dist/cli/supervisor.js +218 -0
- package/dist/cli/supervisor.js.map +1 -0
- package/dist/cli/worktree-commands.d.ts +2 -0
- package/dist/cli/worktree-commands.d.ts.map +1 -0
- package/dist/cli/worktree-commands.js +250 -0
- package/dist/cli/worktree-commands.js.map +1 -0
- package/dist/cli/ws-client.d.ts +20 -0
- package/dist/cli/ws-client.d.ts.map +1 -0
- package/dist/cli/ws-client.js +103 -0
- package/dist/cli/ws-client.js.map +1 -0
- package/dist/core/agent-registry.d.ts +128 -0
- package/dist/core/agent-registry.d.ts.map +1 -0
- package/dist/core/agent-registry.js +131 -0
- package/dist/core/agent-registry.js.map +1 -0
- package/dist/core/config-schema.d.ts +77 -0
- package/dist/core/config-schema.d.ts.map +1 -0
- package/dist/core/config-schema.js +66 -0
- package/dist/core/config-schema.js.map +1 -0
- package/dist/core/config.d.ts +111 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +244 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/daemon.d.ts +113 -0
- package/dist/core/daemon.d.ts.map +1 -0
- package/dist/core/daemon.js +197 -0
- package/dist/core/daemon.js.map +1 -0
- package/dist/core/discovered-sessions.d.ts +7 -0
- package/dist/core/discovered-sessions.d.ts.map +1 -0
- package/dist/core/discovered-sessions.js +39 -0
- package/dist/core/discovered-sessions.js.map +1 -0
- package/dist/core/error-codes.d.ts +31 -0
- package/dist/core/error-codes.d.ts.map +1 -0
- package/dist/core/error-codes.js +30 -0
- package/dist/core/error-codes.js.map +1 -0
- package/dist/core/errors.d.ts +16 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +43 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/events.d.ts +183 -0
- package/dist/core/events.d.ts.map +1 -0
- package/dist/core/events.js +61 -0
- package/dist/core/events.js.map +1 -0
- package/dist/core/interfaces.d.ts +115 -0
- package/dist/core/interfaces.d.ts.map +1 -0
- package/dist/core/interfaces.js +9 -0
- package/dist/core/interfaces.js.map +1 -0
- package/dist/core/logger.d.ts +11 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +17 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/metrics.d.ts +24 -0
- package/dist/core/metrics.d.ts.map +1 -0
- package/dist/core/metrics.js +32 -0
- package/dist/core/metrics.js.map +1 -0
- package/dist/core/output.d.ts +13 -0
- package/dist/core/output.d.ts.map +1 -0
- package/dist/core/output.js +22 -0
- package/dist/core/output.js.map +1 -0
- package/dist/core/permission-coordinator.d.ts +67 -0
- package/dist/core/permission-coordinator.d.ts.map +1 -0
- package/dist/core/permission-coordinator.js +209 -0
- package/dist/core/permission-coordinator.js.map +1 -0
- package/dist/core/session-manager.d.ts +121 -0
- package/dist/core/session-manager.d.ts.map +1 -0
- package/dist/core/session-manager.js +354 -0
- package/dist/core/session-manager.js.map +1 -0
- package/dist/core/session-state-file.d.ts +20 -0
- package/dist/core/session-state-file.d.ts.map +1 -0
- package/dist/core/session-state-file.js +49 -0
- package/dist/core/session-state-file.js.map +1 -0
- package/dist/core/types.d.ts +250 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +88 -0
- package/dist/core/types.js.map +1 -0
- package/dist/directories/manager.d.ts +32 -0
- package/dist/directories/manager.d.ts.map +1 -0
- package/dist/directories/manager.js +86 -0
- package/dist/directories/manager.js.map +1 -0
- package/dist/discovery/claude.d.ts +29 -0
- package/dist/discovery/claude.d.ts.map +1 -0
- package/dist/discovery/claude.js +55 -0
- package/dist/discovery/claude.js.map +1 -0
- package/dist/discovery/codex.d.ts +11 -0
- package/dist/discovery/codex.d.ts.map +1 -0
- package/dist/discovery/codex.js +365 -0
- package/dist/discovery/codex.js.map +1 -0
- package/dist/discovery/gemini.d.ts +15 -0
- package/dist/discovery/gemini.d.ts.map +1 -0
- package/dist/discovery/gemini.js +151 -0
- package/dist/discovery/gemini.js.map +1 -0
- package/dist/discovery/jsonl-reader.d.ts +122 -0
- package/dist/discovery/jsonl-reader.d.ts.map +1 -0
- package/dist/discovery/jsonl-reader.js +622 -0
- package/dist/discovery/jsonl-reader.js.map +1 -0
- package/dist/discovery/watcher.d.ts +29 -0
- package/dist/discovery/watcher.d.ts.map +1 -0
- package/dist/discovery/watcher.js +383 -0
- package/dist/discovery/watcher.js.map +1 -0
- package/dist/hooks/index.d.ts +10 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +8 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/installers/base.d.ts +27 -0
- package/dist/hooks/installers/base.d.ts.map +1 -0
- package/dist/hooks/installers/base.js +9 -0
- package/dist/hooks/installers/base.js.map +1 -0
- package/dist/hooks/installers/claude.d.ts +18 -0
- package/dist/hooks/installers/claude.d.ts.map +1 -0
- package/dist/hooks/installers/claude.js +120 -0
- package/dist/hooks/installers/claude.js.map +1 -0
- package/dist/hooks/router.d.ts +63 -0
- package/dist/hooks/router.d.ts.map +1 -0
- package/dist/hooks/router.js +259 -0
- package/dist/hooks/router.js.map +1 -0
- package/dist/hooks/supervision.d.ts +27 -0
- package/dist/hooks/supervision.d.ts.map +1 -0
- package/dist/hooks/supervision.js +67 -0
- package/dist/hooks/supervision.js.map +1 -0
- package/dist/hooks/types.d.ts +171 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/types.js +148 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +117 -0
- package/dist/index.js.map +1 -0
- package/dist/permissions/engine.d.ts +23 -0
- package/dist/permissions/engine.d.ts.map +1 -0
- package/dist/permissions/engine.js +43 -0
- package/dist/permissions/engine.js.map +1 -0
- package/dist/plugins/loader.d.ts +44 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +177 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/server/auth.d.ts +32 -0
- package/dist/server/auth.d.ts.map +1 -0
- package/dist/server/auth.js +78 -0
- package/dist/server/auth.js.map +1 -0
- package/dist/server/discovered-watch-key.d.ts +5 -0
- package/dist/server/discovered-watch-key.d.ts.map +1 -0
- package/dist/server/discovered-watch-key.js +31 -0
- package/dist/server/discovered-watch-key.js.map +1 -0
- package/dist/server/hello-builder.d.ts +17 -0
- package/dist/server/hello-builder.d.ts.map +1 -0
- package/dist/server/hello-builder.js +71 -0
- package/dist/server/hello-builder.js.map +1 -0
- package/dist/server/http-server.d.ts +30 -0
- package/dist/server/http-server.d.ts.map +1 -0
- package/dist/server/http-server.js +561 -0
- package/dist/server/http-server.js.map +1 -0
- package/dist/server/message-normalizers.d.ts +11 -0
- package/dist/server/message-normalizers.d.ts.map +1 -0
- package/dist/server/message-normalizers.js +104 -0
- package/dist/server/message-normalizers.js.map +1 -0
- package/dist/server/pairing-offers.d.ts +78 -0
- package/dist/server/pairing-offers.d.ts.map +1 -0
- package/dist/server/pairing-offers.js +502 -0
- package/dist/server/pairing-offers.js.map +1 -0
- package/dist/server/rate-limiter.d.ts +21 -0
- package/dist/server/rate-limiter.d.ts.map +1 -0
- package/dist/server/rate-limiter.js +61 -0
- package/dist/server/rate-limiter.js.map +1 -0
- package/dist/server/ring-buffer.d.ts +34 -0
- package/dist/server/ring-buffer.d.ts.map +1 -0
- package/dist/server/ring-buffer.js +73 -0
- package/dist/server/ring-buffer.js.map +1 -0
- package/dist/server/security.d.ts +22 -0
- package/dist/server/security.d.ts.map +1 -0
- package/dist/server/security.js +123 -0
- package/dist/server/security.js.map +1 -0
- package/dist/server/ws-command-handlers.d.ts +25 -0
- package/dist/server/ws-command-handlers.d.ts.map +1 -0
- package/dist/server/ws-command-handlers.js +218 -0
- package/dist/server/ws-command-handlers.js.map +1 -0
- package/dist/server/ws-daemon-event-bridge.d.ts +22 -0
- package/dist/server/ws-daemon-event-bridge.d.ts.map +1 -0
- package/dist/server/ws-daemon-event-bridge.js +321 -0
- package/dist/server/ws-daemon-event-bridge.js.map +1 -0
- package/dist/server/ws-limits.d.ts +2 -0
- package/dist/server/ws-limits.d.ts.map +1 -0
- package/dist/server/ws-limits.js +12 -0
- package/dist/server/ws-limits.js.map +1 -0
- package/dist/server/ws-protocol.d.ts +248 -0
- package/dist/server/ws-protocol.d.ts.map +1 -0
- package/dist/server/ws-protocol.js +157 -0
- package/dist/server/ws-protocol.js.map +1 -0
- package/dist/server/ws-server.d.ts +26 -0
- package/dist/server/ws-server.d.ts.map +1 -0
- package/dist/server/ws-server.js +290 -0
- package/dist/server/ws-server.js.map +1 -0
- package/dist/startup-agents.d.ts +6 -0
- package/dist/startup-agents.d.ts.map +1 -0
- package/dist/startup-agents.js +97 -0
- package/dist/startup-agents.js.map +1 -0
- package/dist/startup-prereqs.d.ts +29 -0
- package/dist/startup-prereqs.d.ts.map +1 -0
- package/dist/startup-prereqs.js +209 -0
- package/dist/startup-prereqs.js.map +1 -0
- package/dist/startup-watchers.d.ts +7 -0
- package/dist/startup-watchers.d.ts.map +1 -0
- package/dist/startup-watchers.js +196 -0
- package/dist/startup-watchers.js.map +1 -0
- package/dist/startup.d.ts +20 -0
- package/dist/startup.d.ts.map +1 -0
- package/dist/startup.js +335 -0
- package/dist/startup.js.map +1 -0
- package/dist/tracking/git-tracker.d.ts +52 -0
- package/dist/tracking/git-tracker.d.ts.map +1 -0
- package/dist/tracking/git-tracker.js +277 -0
- package/dist/tracking/git-tracker.js.map +1 -0
- package/dist/tracking/noop-tracker.d.ts +27 -0
- package/dist/tracking/noop-tracker.d.ts.map +1 -0
- package/dist/tracking/noop-tracker.js +42 -0
- package/dist/tracking/noop-tracker.js.map +1 -0
- package/docs/configuration.md +75 -0
- package/docs/developer-workflows.md +107 -0
- package/docs/protocol-matrix.json +155 -0
- package/docs/releasing.md +65 -0
- package/docs/security.md +48 -0
- package/docs/testing.md +112 -0
- package/package.json +84 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"messages": [
|
|
4
|
+
{
|
|
5
|
+
"type": "launch",
|
|
6
|
+
"class": "stable",
|
|
7
|
+
"schema": "src/server/ws-protocol.ts#LaunchSchema",
|
|
8
|
+
"handler": "src/server/ws-command-handlers.ts#launch",
|
|
9
|
+
"unitTests": ["tests/server/ws-protocol.test.ts", "tests/server/ws-command-handlers.test.ts"],
|
|
10
|
+
"integrationTests": ["tests/server/ws-server.test.ts", "tests/e2e/protocol-session-lifecycle.test.ts"],
|
|
11
|
+
"surfacedInUi": true,
|
|
12
|
+
"surfacedInCli": true
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"type": "kill",
|
|
16
|
+
"class": "stable",
|
|
17
|
+
"schema": "src/server/ws-protocol.ts#KillSchema",
|
|
18
|
+
"handler": "src/server/ws-command-handlers.ts#kill",
|
|
19
|
+
"unitTests": ["tests/server/ws-protocol.test.ts"],
|
|
20
|
+
"integrationTests": ["tests/server/ws-server.test.ts", "tests/e2e/protocol-session-lifecycle.test.ts"],
|
|
21
|
+
"surfacedInUi": true,
|
|
22
|
+
"surfacedInCli": false
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"type": "prompt",
|
|
26
|
+
"class": "stable",
|
|
27
|
+
"schema": "src/server/ws-protocol.ts#PromptSchema",
|
|
28
|
+
"handler": "src/server/ws-command-handlers.ts#prompt",
|
|
29
|
+
"unitTests": ["tests/server/ws-protocol.test.ts", "tests/server/ws-command-handlers.test.ts"],
|
|
30
|
+
"integrationTests": ["tests/server/ws-server.test.ts", "tests/e2e/protocol-session-lifecycle.test.ts"],
|
|
31
|
+
"surfacedInUi": true,
|
|
32
|
+
"surfacedInCli": true
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"type": "respond-permission",
|
|
36
|
+
"class": "stable",
|
|
37
|
+
"schema": "src/server/ws-protocol.ts#RespondPermissionSchema",
|
|
38
|
+
"handler": "src/server/ws-command-handlers.ts#respond-permission",
|
|
39
|
+
"unitTests": ["tests/server/ws-protocol.test.ts"],
|
|
40
|
+
"integrationTests": ["tests/server/ws-server.test.ts", "tests/e2e/protocol-session-lifecycle.test.ts"],
|
|
41
|
+
"surfacedInUi": true,
|
|
42
|
+
"surfacedInCli": true
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"type": "subscribe",
|
|
46
|
+
"class": "stable",
|
|
47
|
+
"schema": "src/server/ws-protocol.ts#SubscribeSchema",
|
|
48
|
+
"handler": "src/server/ws-command-handlers.ts#subscribe",
|
|
49
|
+
"unitTests": ["tests/server/ws-protocol.test.ts", "tests/server/ring-buffer.test.ts"],
|
|
50
|
+
"integrationTests": ["tests/server/ws-server.test.ts"],
|
|
51
|
+
"surfacedInUi": true,
|
|
52
|
+
"surfacedInCli": true
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"type": "unsubscribe",
|
|
56
|
+
"class": "stable",
|
|
57
|
+
"schema": "src/server/ws-protocol.ts#UnsubscribeSchema",
|
|
58
|
+
"handler": "src/server/ws-command-handlers.ts#unsubscribe",
|
|
59
|
+
"unitTests": ["tests/server/ws-protocol.test.ts"],
|
|
60
|
+
"integrationTests": ["tests/server/ws-server.test.ts"],
|
|
61
|
+
"surfacedInUi": true,
|
|
62
|
+
"surfacedInCli": false
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"type": "rollback",
|
|
66
|
+
"class": "stable",
|
|
67
|
+
"schema": "src/server/ws-protocol.ts#RollbackSchema",
|
|
68
|
+
"handler": "src/server/ws-command-handlers.ts#rollback",
|
|
69
|
+
"unitTests": ["tests/server/ws-protocol.test.ts"],
|
|
70
|
+
"integrationTests": ["tests/server/ws-server.test.ts"],
|
|
71
|
+
"surfacedInUi": true,
|
|
72
|
+
"surfacedInCli": false
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"type": "branch-retry",
|
|
76
|
+
"class": "stable",
|
|
77
|
+
"schema": "src/server/ws-protocol.ts#BranchRetrySchema",
|
|
78
|
+
"handler": "src/server/ws-command-handlers.ts#branch-retry",
|
|
79
|
+
"unitTests": ["tests/server/ws-protocol.test.ts"],
|
|
80
|
+
"integrationTests": ["tests/server/ws-server.test.ts"],
|
|
81
|
+
"surfacedInUi": true,
|
|
82
|
+
"surfacedInCli": false
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"type": "squash-merge",
|
|
86
|
+
"class": "stable",
|
|
87
|
+
"schema": "src/server/ws-protocol.ts#SquashMergeSchema",
|
|
88
|
+
"handler": "src/server/ws-command-handlers.ts#squash-merge",
|
|
89
|
+
"unitTests": ["tests/server/ws-protocol.test.ts"],
|
|
90
|
+
"integrationTests": ["tests/server/ws-server.test.ts"],
|
|
91
|
+
"surfacedInUi": true,
|
|
92
|
+
"surfacedInCli": false
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"type": "list-sessions",
|
|
96
|
+
"class": "stable",
|
|
97
|
+
"schema": "src/server/ws-protocol.ts#ListSessionsSchema",
|
|
98
|
+
"handler": "src/server/ws-command-handlers.ts#list-sessions",
|
|
99
|
+
"unitTests": ["tests/server/ws-protocol.test.ts", "tests/server/ws-command-handlers.test.ts"],
|
|
100
|
+
"integrationTests": ["tests/server/ws-server.test.ts"],
|
|
101
|
+
"surfacedInUi": true,
|
|
102
|
+
"surfacedInCli": false
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"type": "resume",
|
|
106
|
+
"class": "stable",
|
|
107
|
+
"schema": "src/server/ws-protocol.ts#ResumeSchema",
|
|
108
|
+
"handler": "src/server/ws-command-handlers.ts#resume",
|
|
109
|
+
"unitTests": ["tests/server/ws-protocol.test.ts", "tests/server/ws-command-handlers.test.ts"],
|
|
110
|
+
"integrationTests": ["tests/server/ws-server.test.ts", "tests/e2e/protocol-session-lifecycle.test.ts"],
|
|
111
|
+
"surfacedInUi": true,
|
|
112
|
+
"surfacedInCli": false
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"type": "watch-discovered-session",
|
|
116
|
+
"class": "stable",
|
|
117
|
+
"schema": "src/server/ws-protocol.ts#WatchDiscoveredSessionSchema",
|
|
118
|
+
"handler": "src/server/ws-command-handlers.ts#watch-discovered-session",
|
|
119
|
+
"unitTests": ["tests/server/ws-protocol.test.ts", "tests/server/ws-command-handlers.test.ts"],
|
|
120
|
+
"integrationTests": ["tests/server/ws-server.test.ts", "tests/e2e/protocol-discovery-hooks.test.ts"],
|
|
121
|
+
"surfacedInUi": true,
|
|
122
|
+
"surfacedInCli": false
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"type": "unwatch-discovered-session",
|
|
126
|
+
"class": "stable",
|
|
127
|
+
"schema": "src/server/ws-protocol.ts#UnwatchDiscoveredSessionSchema",
|
|
128
|
+
"handler": "src/server/ws-command-handlers.ts#unwatch-discovered-session",
|
|
129
|
+
"unitTests": ["tests/server/ws-protocol.test.ts", "tests/server/ws-command-handlers.test.ts"],
|
|
130
|
+
"integrationTests": ["tests/server/ws-server.test.ts", "tests/e2e/protocol-discovery-hooks.test.ts"],
|
|
131
|
+
"surfacedInUi": true,
|
|
132
|
+
"surfacedInCli": false
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"type": "supervise",
|
|
136
|
+
"class": "experimental",
|
|
137
|
+
"schema": "src/server/ws-protocol.ts#SuperviseSchema",
|
|
138
|
+
"handler": "src/server/ws-command-handlers.ts#supervise",
|
|
139
|
+
"unitTests": ["tests/server/ws-protocol.test.ts"],
|
|
140
|
+
"integrationTests": ["tests/e2e/protocol-discovery-hooks.test.ts"],
|
|
141
|
+
"surfacedInUi": true,
|
|
142
|
+
"surfacedInCli": false
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"type": "respond-hook-permission",
|
|
146
|
+
"class": "experimental",
|
|
147
|
+
"schema": "src/server/ws-protocol.ts#RespondHookPermissionSchema",
|
|
148
|
+
"handler": "src/server/ws-command-handlers.ts#respond-hook-permission",
|
|
149
|
+
"unitTests": ["tests/server/ws-protocol.test.ts"],
|
|
150
|
+
"integrationTests": ["tests/e2e/protocol-discovery-hooks.test.ts"],
|
|
151
|
+
"surfacedInUi": true,
|
|
152
|
+
"surfacedInCli": false
|
|
153
|
+
}
|
|
154
|
+
]
|
|
155
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Releasing and npm Publish
|
|
2
|
+
|
|
3
|
+
## Current source of truth
|
|
4
|
+
|
|
5
|
+
1. npm package name: `@viewportai/daemon` (`package.json` `name`).
|
|
6
|
+
2. Version source: semantic-release from commit history on `main`.
|
|
7
|
+
3. Publish trigger: `.github/workflows/release.yml` after `CI` succeeds on a push to `main`.
|
|
8
|
+
4. npm auth: granular `NPM_TOKEN` secret in GitHub Actions.
|
|
9
|
+
|
|
10
|
+
## Version rules
|
|
11
|
+
|
|
12
|
+
1. `feat:` => `minor` (for example `0.4.0` -> `0.5.0`).
|
|
13
|
+
2. `fix:` => `patch` (for example `0.4.1` -> `0.4.2`).
|
|
14
|
+
3. `perf:` / `refactor:` / `revert:` => `patch`.
|
|
15
|
+
4. `BREAKING CHANGE:` footer or `!` in type/scope => `major`.
|
|
16
|
+
5. `docs:`, `test:`, `chore:` alone => no release.
|
|
17
|
+
|
|
18
|
+
## One-time setup for production publish
|
|
19
|
+
|
|
20
|
+
1. Create npm organization scope `@viewportai` (or verify ownership if it already exists).
|
|
21
|
+
2. Ensure repository package name remains `@viewportai/daemon`.
|
|
22
|
+
3. Create a granular npm token with publish rights to `@viewportai/daemon`.
|
|
23
|
+
4. Add GitHub Actions secret `NPM_TOKEN` in repo settings.
|
|
24
|
+
5. Ensure branch protection on `main` requires the `CI` workflow to pass before merge.
|
|
25
|
+
6. Ensure branch protection on `main` requires the `Semantic PR` workflow to pass before merge.
|
|
26
|
+
7. Use squash-merge so the semantic PR title becomes the release-driving commit on `main`.
|
|
27
|
+
8. Ensure npm package access is public (already configured via `publishConfig.access=public`).
|
|
28
|
+
9. For this repository, enforce a pre-1.0 stream with a one-time baseline tag on the bootstrap `main` commit: `git tag v0.0.0 && git push origin v0.0.0`.
|
|
29
|
+
10. Keep `package.json` publish metadata canonical for provenance:
|
|
30
|
+
- `repository.url` must be exactly `https://github.com/viewportai/daemon`
|
|
31
|
+
- `bin.vpd` must be exactly `bin/vpd.js`
|
|
32
|
+
|
|
33
|
+
## Release flow
|
|
34
|
+
|
|
35
|
+
1. Open PR with semantic commits.
|
|
36
|
+
2. Merge to `main` after CI green.
|
|
37
|
+
3. `release.yml` runs semantic-release:
|
|
38
|
+
- calculates next version,
|
|
39
|
+
- updates `CHANGELOG.md`, `package.json`, and `package-lock.json`,
|
|
40
|
+
- creates git tag,
|
|
41
|
+
- creates GitHub release,
|
|
42
|
+
- publishes package to npm.
|
|
43
|
+
4. Validate via:
|
|
44
|
+
- GitHub release/tag exists (`vX.Y.Z`),
|
|
45
|
+
- npm package version appears in registry,
|
|
46
|
+
- `vpd --version` from fresh global install matches.
|
|
47
|
+
|
|
48
|
+
## Local dry run
|
|
49
|
+
|
|
50
|
+
Use this before rollout changes to release config:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
npx -y \
|
|
54
|
+
-p semantic-release \
|
|
55
|
+
-p @semantic-release/changelog \
|
|
56
|
+
-p @semantic-release/commit-analyzer \
|
|
57
|
+
-p conventional-changelog-conventionalcommits \
|
|
58
|
+
-p @semantic-release/git \
|
|
59
|
+
-p @semantic-release/github \
|
|
60
|
+
-p @semantic-release/npm \
|
|
61
|
+
-p @semantic-release/release-notes-generator \
|
|
62
|
+
semantic-release --dry-run
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
This does not publish; it only reports what version would be released.
|
package/docs/security.md
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Viewport Daemon Security Profiles
|
|
2
|
+
|
|
3
|
+
## Profiles
|
|
4
|
+
|
|
5
|
+
- `local`
|
|
6
|
+
- Host must be loopback.
|
|
7
|
+
- Auth optional.
|
|
8
|
+
- Intended for single-machine use.
|
|
9
|
+
- `lan`
|
|
10
|
+
- Requires explicit host allowlist (`--allowed-hosts` or config/env equivalent).
|
|
11
|
+
- Auth required.
|
|
12
|
+
- `relay`
|
|
13
|
+
- Requires explicit host allowlist.
|
|
14
|
+
- Auth required.
|
|
15
|
+
- Relay transport and key exchange are next-phase work.
|
|
16
|
+
|
|
17
|
+
## Current controls
|
|
18
|
+
|
|
19
|
+
- Host header allowlist enforcement.
|
|
20
|
+
- Origin allowlist enforcement.
|
|
21
|
+
- Token auth (`~/.viewport/auth-token`) for protected API/WS.
|
|
22
|
+
- WS auth supports `?token=` query fallback for browser compatibility.
|
|
23
|
+
- Tradeoff: query tokens can leak via logs/history.
|
|
24
|
+
- Preferred path is `Authorization: Bearer ...`.
|
|
25
|
+
- WebSocket payload limits, backpressure handling, and rate limiting.
|
|
26
|
+
- Path traversal protection for file APIs.
|
|
27
|
+
|
|
28
|
+
## Pairing foundations (current phase)
|
|
29
|
+
|
|
30
|
+
- `vpd pair` creates short-lived offers (default 10 minutes, max 60 minutes).
|
|
31
|
+
- Offer URL contains `offerId`, one-time proof, trust-anchor fingerprint, and connection metadata, not the auth token.
|
|
32
|
+
- Offers are persisted and can be listed/revoked:
|
|
33
|
+
- `vpd pair list`
|
|
34
|
+
- `vpd pair revoke <offer-id>`
|
|
35
|
+
- Daemon trust anchor can be inspected:
|
|
36
|
+
- `vpd pair anchor`
|
|
37
|
+
- Offer redemption is one-time:
|
|
38
|
+
- `POST /api/pair/redeem` with `offerId` + `proof` + `trustAnchor`
|
|
39
|
+
- Local loopback profile can bypass bearer auth for redeem; LAN/relay profiles cannot.
|
|
40
|
+
- Pairing events are written to `~/.viewport/pairing-audit.jsonl`.
|
|
41
|
+
|
|
42
|
+
## Relay-phase extensions
|
|
43
|
+
|
|
44
|
+
The next phase should add:
|
|
45
|
+
|
|
46
|
+
- Explicit device identity binding.
|
|
47
|
+
- Revocation propagation across relay sessions.
|
|
48
|
+
- Short-lived capability tokens scoped by command/permission class.
|
package/docs/testing.md
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# Daemon Testing Guide
|
|
2
|
+
|
|
3
|
+
## Layers
|
|
4
|
+
|
|
5
|
+
1. Unit tests: fast behavior checks for isolated modules.
|
|
6
|
+
2. Integration tests: daemon + HTTP/WS route behavior in-process.
|
|
7
|
+
3. Protocol e2e tests: WS command/event lifecycle with harness.
|
|
8
|
+
4. Fullstack net e2e: real CLI -> real daemon HTTP/WS over localhost.
|
|
9
|
+
|
|
10
|
+
## Commands
|
|
11
|
+
|
|
12
|
+
Fast confidence:
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npm run check:protocol-matrix
|
|
16
|
+
npm run typecheck
|
|
17
|
+
npm run test -- tests/cli tests/server
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Single-entry test command with modes:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npm run test
|
|
24
|
+
npm run test --verify
|
|
25
|
+
npm run test --e2e
|
|
26
|
+
npm run test --fullstack
|
|
27
|
+
npm run test --env
|
|
28
|
+
npm run test --service
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Protocol e2e:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
npm run test:e2e
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Fullstack CLI proof (network bind required):
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
npm run test:e2e:fullstack
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Full gate:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
npm run check
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Local environment verification:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
# isolated daemon lifecycle verification (temp VIEWPORT_HOME + dedicated listen target)
|
|
53
|
+
npm run verify:env
|
|
54
|
+
|
|
55
|
+
# includes launchd/systemd install + active status checks
|
|
56
|
+
npm run verify:env:service
|
|
57
|
+
|
|
58
|
+
# validates local tarball install + binary lifecycle in isolated npm prefix
|
|
59
|
+
npm run verify:install
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
`verify:install` requires network access to resolve package runtime dependencies.
|
|
63
|
+
|
|
64
|
+
One-command local checker:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
# repo gates only
|
|
68
|
+
npm run verify:repo
|
|
69
|
+
|
|
70
|
+
# repo gates + env verification + service checks
|
|
71
|
+
bash ./scripts/verify.sh --env --service
|
|
72
|
+
|
|
73
|
+
# repo gates + fullstack net e2e + env verification + service checks
|
|
74
|
+
bash ./scripts/verify.sh --fullstack --env --service
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## CI Linux verification
|
|
78
|
+
|
|
79
|
+
GitHub Actions now runs a dedicated Linux runtime verification path:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
npm run verify:linux:ci
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
This validates:
|
|
86
|
+
1. Tarball install verification (`verify:install`)
|
|
87
|
+
2. Dev install + isolated daemon lifecycle verification (`verify:env`)
|
|
88
|
+
3. systemd user-service verification when available on runner (`verify:env:service`)
|
|
89
|
+
|
|
90
|
+
## What fullstack e2e proves
|
|
91
|
+
|
|
92
|
+
`tests/e2e/cli-fullstack-workflow.test.ts` verifies in one workflow:
|
|
93
|
+
|
|
94
|
+
1. `vpd run` launches over real WS.
|
|
95
|
+
2. `vpd ls` and `vpd agent mode` hit real HTTP routes.
|
|
96
|
+
3. `vpd worktree diffs/summary/retry/squash` use live daemon state.
|
|
97
|
+
4. Pairing trust-anchor flow: offer + redeem success and mismatch rejection.
|
|
98
|
+
5. `vpd session stop` terminates the live session.
|
|
99
|
+
|
|
100
|
+
The test is opt-in via `VIEWPORT_RUN_NET_E2E=1` because it requires binding a localhost port.
|
|
101
|
+
|
|
102
|
+
## Dev install flows
|
|
103
|
+
|
|
104
|
+
Use local source without publishing to npm:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
# tarball install flow (recommended)
|
|
108
|
+
./scripts/install-dev.sh --yes --no-service --no-prereqs --no-hooks
|
|
109
|
+
|
|
110
|
+
# npm link flow
|
|
111
|
+
./scripts/install-dev.sh --link --yes --no-service --no-prereqs --no-hooks
|
|
112
|
+
```
|
package/package.json
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@viewportai/daemon",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Viewport daemon — supervision and orchestration layer for AI coding agents",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/viewportai/daemon"
|
|
10
|
+
},
|
|
11
|
+
"bugs": {
|
|
12
|
+
"url": "https://github.com/viewportai/daemon/issues"
|
|
13
|
+
},
|
|
14
|
+
"homepage": "https://github.com/viewportai/daemon#readme",
|
|
15
|
+
"bin": {
|
|
16
|
+
"vpd": "bin/vpd.js"
|
|
17
|
+
},
|
|
18
|
+
"files": [
|
|
19
|
+
"bin",
|
|
20
|
+
"dist",
|
|
21
|
+
"README.md",
|
|
22
|
+
"docs"
|
|
23
|
+
],
|
|
24
|
+
"publishConfig": {
|
|
25
|
+
"access": "public"
|
|
26
|
+
},
|
|
27
|
+
"engines": {
|
|
28
|
+
"node": ">=20.0.0"
|
|
29
|
+
},
|
|
30
|
+
"scripts": {
|
|
31
|
+
"dev": "tsx watch src/index.ts",
|
|
32
|
+
"build": "tsc",
|
|
33
|
+
"prepack": "npm run build",
|
|
34
|
+
"typecheck": "tsc --noEmit",
|
|
35
|
+
"test": "bash ./scripts/test.sh",
|
|
36
|
+
"test:unit": "vitest run",
|
|
37
|
+
"test:verify": "npm run test -- --verify",
|
|
38
|
+
"test:setup": "vitest run tests/cli/setup-command.test.ts tests/cli/service-commands.test.ts tests/startup-prereqs.test.ts tests/core/built-in-agents.test.ts",
|
|
39
|
+
"test:e2e": "vitest run tests/e2e",
|
|
40
|
+
"test:e2e:fullstack": "VIEWPORT_RUN_NET_E2E=1 vitest run tests/e2e/cli-fullstack-workflow.test.ts",
|
|
41
|
+
"test:watch": "vitest",
|
|
42
|
+
"test:coverage": "vitest run --coverage",
|
|
43
|
+
"check:file-size": "node ./scripts/check-file-sizes.mjs",
|
|
44
|
+
"check:protocol-matrix": "node ./scripts/check-protocol-matrix.mjs",
|
|
45
|
+
"lint": "eslint src/ tests/ --no-error-on-unmatched-pattern",
|
|
46
|
+
"format": "prettier --write \"{src,tests}/**/*.ts\"",
|
|
47
|
+
"format:check": "prettier --check \"{src,tests}/**/*.ts\"",
|
|
48
|
+
"check": "npm run check:file-size && npm run check:protocol-matrix && npm run typecheck && npm run lint && npm run format:check && npm run test",
|
|
49
|
+
"dev:install": "bash ./scripts/install-dev.sh --yes --no-service --no-prereqs --no-hooks",
|
|
50
|
+
"dev:link": "bash ./scripts/install-dev.sh --link --yes --no-service --no-prereqs --no-hooks",
|
|
51
|
+
"dev:uninstall": "bash ./scripts/uninstall.sh --service",
|
|
52
|
+
"dev:uninstall:all": "bash ./scripts/uninstall.sh --service --purge-home",
|
|
53
|
+
"dev:reinstall": "npm run dev:uninstall && npm run dev:install",
|
|
54
|
+
"verify:repo": "bash ./scripts/verify.sh",
|
|
55
|
+
"verify:linux:ci": "bash ./scripts/verify-linux-ci.sh",
|
|
56
|
+
"verify:env": "bash ./scripts/test-env.sh",
|
|
57
|
+
"verify:env:service": "bash ./scripts/test-env.sh --service",
|
|
58
|
+
"verify:install": "bash ./scripts/install-verify.sh"
|
|
59
|
+
},
|
|
60
|
+
"dependencies": {
|
|
61
|
+
"@anthropic-ai/claude-agent-sdk": "^0.2.63",
|
|
62
|
+
"@fastify/cors": "^10.0.1",
|
|
63
|
+
"@fastify/websocket": "^11.0.1",
|
|
64
|
+
"@openai/codex-sdk": "^0.107.0",
|
|
65
|
+
"fastify": "^5.2.1",
|
|
66
|
+
"pino": "^9.6.0",
|
|
67
|
+
"pino-pretty": "^13.1.3",
|
|
68
|
+
"zod": "^4.0.0"
|
|
69
|
+
},
|
|
70
|
+
"devDependencies": {
|
|
71
|
+
"@types/node": "^22.13.4",
|
|
72
|
+
"@types/ws": "^8.18.1",
|
|
73
|
+
"@vitest/coverage-v8": "^3.0.5",
|
|
74
|
+
"conventional-changelog-conventionalcommits": "^9.2.0",
|
|
75
|
+
"eslint": "^9.20.0",
|
|
76
|
+
"eslint-config-prettier": "^10.0.1",
|
|
77
|
+
"eslint-plugin-prettier": "^5.2.3",
|
|
78
|
+
"prettier": "^3.5.2",
|
|
79
|
+
"tsx": "^4.19.3",
|
|
80
|
+
"typescript": "^5.7.3",
|
|
81
|
+
"typescript-eslint": "^8.24.1",
|
|
82
|
+
"vitest": "^3.0.5"
|
|
83
|
+
}
|
|
84
|
+
}
|