tmux-ide 2.1.5 → 2.6.1
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/README.md +115 -101
- package/bin/cli.js +13686 -4
- package/bin/cli.ts +1143 -260
- package/bunfig.toml +4 -0
- package/package.json +36 -18
- package/packages/contracts/package.json +22 -0
- package/packages/contracts/src/__tests__/ide-config.test.ts +46 -0
- package/packages/contracts/src/__tests__/terminals.test.ts +87 -0
- package/packages/contracts/src/actions-contract.ts +310 -0
- package/packages/contracts/src/actions-errors.ts +41 -0
- package/packages/contracts/src/domain.ts +36 -0
- package/packages/contracts/src/ide-config.ts +170 -0
- package/packages/contracts/src/index.ts +24 -0
- package/packages/contracts/src/lib-internal/hq.ts +38 -0
- package/packages/contracts/src/terminals.ts +116 -0
- package/packages/contracts/src/tmux.ts +60 -0
- package/packages/contracts/src/workspace.ts +67 -0
- package/packages/daemon/dist/__tests__/support.d.ts +7 -0
- package/packages/daemon/dist/__tests__/support.js +33 -0
- package/packages/daemon/dist/agent-explain.d.ts +45 -0
- package/packages/daemon/dist/agent-explain.js +210 -0
- package/packages/daemon/dist/attach.d.ts +3 -0
- package/packages/daemon/dist/attach.js +14 -0
- package/packages/daemon/dist/bin.d.ts +2 -0
- package/packages/daemon/dist/bin.js +3 -0
- package/packages/daemon/dist/canonical.d.ts +2 -0
- package/packages/daemon/dist/canonical.js +1 -0
- package/packages/daemon/dist/cli.d.ts +1 -0
- package/packages/daemon/dist/cli.js +425 -0
- package/packages/daemon/dist/command-center/actions/contract.d.ts +1 -0
- package/packages/daemon/dist/command-center/actions/contract.js +2 -0
- package/packages/daemon/dist/command-center/actions/dispatcher.d.ts +27 -0
- package/packages/daemon/dist/command-center/actions/dispatcher.js +109 -0
- package/packages/daemon/dist/command-center/actions/errors.d.ts +38 -0
- package/packages/daemon/dist/command-center/actions/errors.js +56 -0
- package/packages/daemon/dist/command-center/actions/handlers/_project-context.d.ts +12 -0
- package/packages/daemon/dist/command-center/actions/handlers/_project-context.js +12 -0
- package/packages/daemon/dist/command-center/actions/handlers/_resolve-project.d.ts +42 -0
- package/packages/daemon/dist/command-center/actions/handlers/_resolve-project.js +48 -0
- package/packages/daemon/dist/command-center/actions/handlers/app-set-remote-access.d.ts +23 -0
- package/packages/daemon/dist/command-center/actions/handlers/app-set-remote-access.js +67 -0
- package/packages/daemon/dist/command-center/actions/handlers/config-actions.d.ts +12 -0
- package/packages/daemon/dist/command-center/actions/handlers/config-actions.js +69 -0
- package/packages/daemon/dist/command-center/actions/handlers/daemon-shutdown.d.ts +6 -0
- package/packages/daemon/dist/command-center/actions/handlers/daemon-shutdown.js +24 -0
- package/packages/daemon/dist/command-center/actions/handlers/project-activate.d.ts +7 -0
- package/packages/daemon/dist/command-center/actions/handlers/project-activate.js +19 -0
- package/packages/daemon/dist/command-center/actions/handlers/project-launch.d.ts +18 -0
- package/packages/daemon/dist/command-center/actions/handlers/project-launch.js +58 -0
- package/packages/daemon/dist/command-center/actions/handlers/project-open-terminal.d.ts +32 -0
- package/packages/daemon/dist/command-center/actions/handlers/project-open-terminal.js +69 -0
- package/packages/daemon/dist/command-center/actions/handlers/project-restart.d.ts +17 -0
- package/packages/daemon/dist/command-center/actions/handlers/project-restart.js +27 -0
- package/packages/daemon/dist/command-center/actions/handlers/project-stop.d.ts +24 -0
- package/packages/daemon/dist/command-center/actions/handlers/project-stop.js +38 -0
- package/packages/daemon/dist/command-center/actions/handlers/terminal-respawn.d.ts +24 -0
- package/packages/daemon/dist/command-center/actions/handlers/terminal-respawn.js +88 -0
- package/packages/daemon/dist/command-center/actions/handlers/terminal-stop.d.ts +14 -0
- package/packages/daemon/dist/command-center/actions/handlers/terminal-stop.js +22 -0
- package/packages/daemon/dist/command-center/actions/registry.d.ts +35 -0
- package/packages/daemon/dist/command-center/actions/registry.js +109 -0
- package/packages/daemon/dist/command-center/discovery.d.ts +23 -0
- package/packages/daemon/dist/command-center/discovery.js +67 -0
- package/packages/daemon/dist/command-center/index.d.ts +10 -0
- package/packages/daemon/dist/command-center/index.js +21 -0
- package/packages/daemon/dist/command-center/schemas.d.ts +76 -0
- package/packages/daemon/dist/command-center/schemas.js +68 -0
- package/packages/daemon/dist/command-center/server.d.ts +26 -0
- package/packages/daemon/dist/command-center/server.js +1103 -0
- package/packages/daemon/dist/command-center/ws-events.d.ts +59 -0
- package/packages/daemon/dist/command-center/ws-events.js +277 -0
- package/packages/daemon/dist/config.d.ts +19 -0
- package/packages/daemon/dist/config.js +494 -0
- package/packages/daemon/dist/detect.d.ts +15 -0
- package/packages/daemon/dist/detect.js +228 -0
- package/packages/daemon/dist/doctor.d.ts +21 -0
- package/packages/daemon/dist/doctor.js +154 -0
- package/packages/daemon/dist/embed.d.ts +1 -0
- package/packages/daemon/dist/embed.js +1 -0
- package/packages/daemon/dist/index.d.ts +3 -0
- package/packages/daemon/dist/index.js +2 -0
- package/packages/daemon/dist/init.d.ts +4 -0
- package/packages/daemon/dist/init.js +174 -0
- package/packages/daemon/dist/inspect.d.ts +54 -0
- package/packages/daemon/dist/inspect.js +118 -0
- package/packages/daemon/dist/launch.d.ts +23 -0
- package/packages/daemon/dist/launch.js +250 -0
- package/packages/daemon/dist/lib/active-projects.d.ts +12 -0
- package/packages/daemon/dist/lib/active-projects.js +35 -0
- package/packages/daemon/dist/lib/agent-discovery.d.ts +43 -0
- package/packages/daemon/dist/lib/agent-discovery.js +85 -0
- package/packages/daemon/dist/lib/app-config.d.ts +147 -0
- package/packages/daemon/dist/lib/app-config.js +191 -0
- package/packages/daemon/dist/lib/app-settings.d.ts +9 -0
- package/packages/daemon/dist/lib/app-settings.js +44 -0
- package/packages/daemon/dist/lib/auth/auth-service.d.ts +33 -0
- package/packages/daemon/dist/lib/auth/auth-service.js +172 -0
- package/packages/daemon/dist/lib/auth/middleware.d.ts +16 -0
- package/packages/daemon/dist/lib/auth/middleware.js +43 -0
- package/packages/daemon/dist/lib/auth/types.d.ts +1 -0
- package/packages/daemon/dist/lib/auth/types.js +2 -0
- package/packages/daemon/dist/lib/auth-token.d.ts +1 -0
- package/packages/daemon/dist/lib/auth-token.js +4 -0
- package/packages/daemon/dist/lib/authorship.d.ts +62 -0
- package/packages/daemon/dist/lib/authorship.js +209 -0
- package/packages/daemon/dist/lib/canonical-daemon.d.ts +21 -0
- package/packages/daemon/dist/lib/canonical-daemon.js +111 -0
- package/packages/daemon/dist/lib/cli-action-bridge.d.ts +27 -0
- package/packages/daemon/dist/lib/cli-action-bridge.js +161 -0
- package/packages/daemon/dist/lib/daemon-embed.d.ts +31 -0
- package/packages/daemon/dist/lib/daemon-embed.js +643 -0
- package/packages/daemon/dist/lib/daemon-watchdog.d.ts +16 -0
- package/packages/daemon/dist/lib/daemon-watchdog.js +98 -0
- package/packages/daemon/dist/lib/daemon.d.ts +8 -0
- package/packages/daemon/dist/lib/daemon.js +79 -0
- package/packages/daemon/dist/lib/dot-path.d.ts +2 -0
- package/packages/daemon/dist/lib/dot-path.js +17 -0
- package/packages/daemon/dist/lib/errors.d.ts +37 -0
- package/packages/daemon/dist/lib/errors.js +50 -0
- package/packages/daemon/dist/lib/filesystem-browser.d.ts +85 -0
- package/packages/daemon/dist/lib/filesystem-browser.js +257 -0
- package/packages/daemon/dist/lib/launch-plan.d.ts +6 -0
- package/packages/daemon/dist/lib/launch-plan.js +76 -0
- package/packages/daemon/dist/lib/log.d.ts +40 -0
- package/packages/daemon/dist/lib/log.js +86 -0
- package/packages/daemon/dist/lib/output.d.ts +9 -0
- package/packages/daemon/dist/lib/output.js +65 -0
- package/packages/daemon/dist/lib/project-init-runner.d.ts +46 -0
- package/packages/daemon/dist/lib/project-init-runner.js +117 -0
- package/packages/daemon/dist/lib/project-inspect.d.ts +28 -0
- package/packages/daemon/dist/lib/project-inspect.js +67 -0
- package/packages/daemon/dist/lib/project-onboard.d.ts +58 -0
- package/packages/daemon/dist/lib/project-onboard.js +108 -0
- package/packages/daemon/dist/lib/project-probe.d.ts +35 -0
- package/packages/daemon/dist/lib/project-probe.js +61 -0
- package/packages/daemon/dist/lib/project-registry.d.ts +76 -0
- package/packages/daemon/dist/lib/project-registry.js +230 -0
- package/packages/daemon/dist/lib/session-monitor.d.ts +15 -0
- package/packages/daemon/dist/lib/session-monitor.js +103 -0
- package/packages/daemon/dist/lib/session-options.d.ts +13 -0
- package/packages/daemon/dist/lib/session-options.js +85 -0
- package/packages/daemon/dist/lib/shell.d.ts +5 -0
- package/packages/daemon/dist/lib/shell.js +8 -0
- package/packages/daemon/dist/lib/sizes.d.ts +16 -0
- package/packages/daemon/dist/lib/sizes.js +36 -0
- package/packages/daemon/dist/lib/skill-sync.d.ts +60 -0
- package/packages/daemon/dist/lib/skill-sync.js +128 -0
- package/packages/daemon/dist/lib/slugify.d.ts +4 -0
- package/packages/daemon/dist/lib/slugify.js +10 -0
- package/packages/daemon/dist/lib/terminals-store.d.ts +27 -0
- package/packages/daemon/dist/lib/terminals-store.js +111 -0
- package/packages/daemon/dist/lib/update-check.d.ts +118 -0
- package/packages/daemon/dist/lib/update-check.js +261 -0
- package/packages/daemon/dist/lib/update.d.ts +65 -0
- package/packages/daemon/dist/lib/update.js +141 -0
- package/packages/daemon/dist/lib/workspace-registry.d.ts +84 -0
- package/packages/daemon/dist/lib/workspace-registry.js +176 -0
- package/packages/daemon/dist/lib/worktree.d.ts +76 -0
- package/packages/daemon/dist/lib/worktree.js +207 -0
- package/packages/daemon/dist/lib/yaml-io.d.ts +10 -0
- package/packages/daemon/dist/lib/yaml-io.js +24 -0
- package/packages/daemon/dist/ls.d.ts +3 -0
- package/packages/daemon/dist/ls.js +35 -0
- package/packages/daemon/dist/restart.d.ts +4 -0
- package/packages/daemon/dist/restart.js +16 -0
- package/packages/daemon/dist/restore.d.ts +86 -0
- package/packages/daemon/dist/restore.js +406 -0
- package/packages/daemon/dist/schemas/domain.d.ts +1 -0
- package/packages/daemon/dist/schemas/domain.js +2 -0
- package/packages/daemon/dist/schemas/filesystem.d.ts +29 -0
- package/packages/daemon/dist/schemas/filesystem.js +29 -0
- package/packages/daemon/dist/schemas/ide-config.d.ts +1 -0
- package/packages/daemon/dist/schemas/ide-config.js +2 -0
- package/packages/daemon/dist/schemas/index.d.ts +12 -0
- package/packages/daemon/dist/schemas/index.js +6 -0
- package/packages/daemon/dist/schemas/inspect.d.ts +53 -0
- package/packages/daemon/dist/schemas/inspect.js +57 -0
- package/packages/daemon/dist/schemas/registry.d.ts +35 -0
- package/packages/daemon/dist/schemas/registry.js +43 -0
- package/packages/daemon/dist/schemas/ws-events.d.ts +72 -0
- package/packages/daemon/dist/schemas/ws-events.js +110 -0
- package/packages/daemon/dist/send.d.ts +27 -0
- package/packages/daemon/dist/send.js +141 -0
- package/packages/daemon/dist/server/index.d.ts +10 -0
- package/packages/daemon/dist/server/index.js +55 -0
- package/packages/daemon/dist/server/pty-bridge.d.ts +174 -0
- package/packages/daemon/dist/server/pty-bridge.js +422 -0
- package/packages/daemon/dist/server/standalone.d.ts +1 -0
- package/packages/daemon/dist/server/standalone.js +14 -0
- package/packages/daemon/dist/server/ws-route.d.ts +74 -0
- package/packages/daemon/dist/server/ws-route.js +379 -0
- package/packages/daemon/dist/status.d.ts +3 -0
- package/packages/daemon/dist/status.js +46 -0
- package/packages/daemon/dist/stop.d.ts +3 -0
- package/packages/daemon/dist/stop.js +21 -0
- package/packages/daemon/dist/terminal/NodePtyAdapter.d.ts +44 -0
- package/packages/daemon/dist/terminal/NodePtyAdapter.js +253 -0
- package/packages/daemon/dist/terminal/PtyAdapter.d.ts +124 -0
- package/packages/daemon/dist/terminal/PtyAdapter.js +43 -0
- package/packages/daemon/dist/terminal/__tests__/MockPtyAdapter.d.ts +77 -0
- package/packages/daemon/dist/terminal/__tests__/MockPtyAdapter.js +155 -0
- package/packages/daemon/dist/types.d.ts +2 -0
- package/packages/daemon/dist/types.js +1 -0
- package/packages/daemon/dist/validate.d.ts +4 -0
- package/packages/daemon/dist/validate.js +184 -0
- package/packages/daemon/dist/widgets/changes/index.d.ts +1 -0
- package/packages/daemon/dist/widgets/changes/index.jsx +575 -0
- package/packages/daemon/dist/widgets/config/index.d.ts +1 -0
- package/packages/daemon/dist/widgets/config/index.jsx +395 -0
- package/packages/daemon/dist/widgets/explorer/breadcrumbs.d.ts +10 -0
- package/packages/daemon/dist/widgets/explorer/breadcrumbs.jsx +51 -0
- package/packages/daemon/dist/widgets/explorer/footer.d.ts +6 -0
- package/packages/daemon/dist/widgets/explorer/footer.jsx +11 -0
- package/packages/daemon/dist/widgets/explorer/index.d.ts +1 -0
- package/packages/daemon/dist/widgets/explorer/index.jsx +393 -0
- package/packages/daemon/dist/widgets/explorer/tree-model.d.ts +13 -0
- package/packages/daemon/dist/widgets/explorer/tree-model.js +69 -0
- package/packages/daemon/dist/widgets/explorer/tree.d.ts +13 -0
- package/packages/daemon/dist/widgets/explorer/tree.jsx +108 -0
- package/packages/daemon/dist/widgets/lib/config-model.d.ts +22 -0
- package/packages/daemon/dist/widgets/lib/config-model.js +99 -0
- package/packages/daemon/dist/widgets/lib/files.d.ts +11 -0
- package/packages/daemon/dist/widgets/lib/files.js +76 -0
- package/packages/daemon/dist/widgets/lib/git.d.ts +11 -0
- package/packages/daemon/dist/widgets/lib/git.js +70 -0
- package/packages/daemon/dist/widgets/lib/grammar.d.ts +79 -0
- package/packages/daemon/dist/widgets/lib/grammar.js +95 -0
- package/packages/daemon/dist/widgets/lib/help-overlay.d.ts +19 -0
- package/packages/daemon/dist/widgets/lib/help-overlay.jsx +69 -0
- package/packages/daemon/dist/widgets/lib/pane-comms.d.ts +28 -0
- package/packages/daemon/dist/widgets/lib/pane-comms.js +189 -0
- package/packages/daemon/dist/widgets/lib/theme.d.ts +44 -0
- package/packages/daemon/dist/widgets/lib/theme.js +153 -0
- package/packages/daemon/dist/widgets/lib/watcher.d.ts +9 -0
- package/packages/daemon/dist/widgets/lib/watcher.js +92 -0
- package/packages/daemon/dist/widgets/preview/index.d.ts +1 -0
- package/packages/daemon/dist/widgets/preview/index.jsx +371 -0
- package/packages/daemon/dist/widgets/resolve.d.ts +20 -0
- package/packages/daemon/dist/widgets/resolve.js +100 -0
- package/packages/daemon/dist/widgets/setup/agent-naming.d.ts +9 -0
- package/packages/daemon/dist/widgets/setup/agent-naming.jsx +81 -0
- package/packages/daemon/dist/widgets/setup/config-tree.d.ts +13 -0
- package/packages/daemon/dist/widgets/setup/config-tree.jsx +203 -0
- package/packages/daemon/dist/widgets/setup/detect-panel.d.ts +14 -0
- package/packages/daemon/dist/widgets/setup/detect-panel.jsx +48 -0
- package/packages/daemon/dist/widgets/setup/field-editor.d.ts +12 -0
- package/packages/daemon/dist/widgets/setup/field-editor.jsx +163 -0
- package/packages/daemon/dist/widgets/setup/footer.d.ts +17 -0
- package/packages/daemon/dist/widgets/setup/footer.jsx +64 -0
- package/packages/daemon/dist/widgets/setup/index.d.ts +1 -0
- package/packages/daemon/dist/widgets/setup/index.jsx +261 -0
- package/packages/daemon/dist/widgets/setup/layout-picker.d.ts +9 -0
- package/packages/daemon/dist/widgets/setup/layout-picker.jsx +69 -0
- package/packages/daemon/dist/widgets/setup/setup-model.d.ts +15 -0
- package/packages/daemon/dist/widgets/setup/setup-model.js +157 -0
- package/packages/daemon/dist/widgets/sidebar/index.d.ts +1 -0
- package/packages/daemon/dist/widgets/sidebar/index.jsx +462 -0
- package/packages/daemon/src/agent-explain.ts +270 -0
- package/packages/daemon/src/attach.ts +20 -0
- package/packages/daemon/src/bin.ts +4 -0
- package/packages/daemon/src/canonical.ts +7 -0
- package/packages/daemon/src/cli.ts +499 -0
- package/packages/daemon/src/command-center/actions/contract.ts +2 -0
- package/packages/daemon/src/command-center/actions/dispatcher.ts +137 -0
- package/packages/daemon/src/command-center/actions/errors.ts +105 -0
- package/packages/daemon/src/command-center/actions/handlers/_project-context.ts +30 -0
- package/packages/daemon/src/command-center/actions/handlers/_resolve-project.ts +78 -0
- package/packages/daemon/src/command-center/actions/handlers/app-set-remote-access.ts +118 -0
- package/packages/daemon/src/command-center/actions/handlers/config-actions.ts +113 -0
- package/packages/daemon/src/command-center/actions/handlers/daemon-shutdown.ts +38 -0
- package/packages/daemon/src/command-center/actions/handlers/project-activate.ts +30 -0
- package/packages/daemon/src/command-center/actions/handlers/project-launch.ts +70 -0
- package/packages/daemon/src/command-center/actions/handlers/project-open-terminal.ts +87 -0
- package/packages/daemon/src/command-center/actions/handlers/project-restart.ts +38 -0
- package/packages/daemon/src/command-center/actions/handlers/project-stop.ts +62 -0
- package/packages/daemon/src/command-center/actions/handlers/terminal-respawn.ts +119 -0
- package/packages/daemon/src/command-center/actions/handlers/terminal-stop.ts +35 -0
- package/packages/daemon/src/command-center/actions/registry.ts +149 -0
- package/packages/daemon/src/command-center/discovery.ts +96 -0
- package/packages/daemon/src/command-center/schemas.ts +85 -0
- package/packages/daemon/src/command-center/server.ts +1260 -0
- package/packages/daemon/src/command-center/ws-events.ts +316 -0
- package/packages/daemon/src/config.ts +549 -0
- package/packages/daemon/src/doctor.ts +242 -0
- package/packages/daemon/src/embed.ts +5 -0
- package/packages/daemon/src/index.ts +12 -0
- package/packages/daemon/src/init.ts +211 -0
- package/packages/daemon/src/inspect.ts +178 -0
- package/packages/daemon/src/launch.ts +349 -0
- package/packages/daemon/src/lib/active-projects.ts +49 -0
- package/packages/daemon/src/lib/agent-discovery.ts +121 -0
- package/packages/daemon/src/lib/app-config.ts +336 -0
- package/packages/daemon/src/lib/app-settings.ts +53 -0
- package/packages/daemon/src/lib/auth/types.ts +2 -0
- package/packages/daemon/src/lib/auth-token.ts +5 -0
- package/packages/daemon/src/lib/canonical-daemon.ts +122 -0
- package/packages/daemon/src/lib/cli-action-bridge.ts +216 -0
- package/packages/daemon/src/lib/daemon-embed.ts +782 -0
- package/packages/daemon/src/lib/daemon-watchdog.ts +111 -0
- package/packages/daemon/src/lib/daemon.ts +79 -0
- package/packages/daemon/src/lib/errors.ts +67 -0
- package/packages/daemon/src/lib/filesystem-browser.ts +292 -0
- package/packages/daemon/src/lib/log.ts +134 -0
- package/packages/daemon/src/lib/output.ts +76 -0
- package/packages/daemon/src/lib/project-init-runner.ts +150 -0
- package/packages/daemon/src/lib/project-inspect.ts +80 -0
- package/packages/daemon/src/lib/project-onboard.ts +149 -0
- package/packages/daemon/src/lib/project-probe.ts +92 -0
- package/packages/daemon/src/lib/project-registry.ts +296 -0
- package/packages/daemon/src/lib/session-monitor.ts +122 -0
- package/packages/daemon/src/lib/skill-sync.ts +155 -0
- package/packages/daemon/src/lib/terminals-store.ts +125 -0
- package/packages/daemon/src/lib/update-check.ts +298 -0
- package/packages/daemon/src/lib/update.ts +158 -0
- package/packages/daemon/src/lib/workspace-registry.ts +229 -0
- package/packages/daemon/src/lib/worktree.ts +289 -0
- package/packages/daemon/src/restart.ts +24 -0
- package/packages/daemon/src/restore.ts +514 -0
- package/packages/daemon/src/schemas/domain.ts +2 -0
- package/packages/daemon/src/schemas/filesystem.ts +34 -0
- package/packages/daemon/src/schemas/ide-config.ts +2 -0
- package/packages/daemon/src/schemas/index.ts +59 -0
- package/packages/daemon/src/schemas/inspect.ts +67 -0
- package/packages/daemon/src/schemas/registry.ts +55 -0
- package/packages/daemon/src/schemas/ws-events.ts +135 -0
- package/packages/daemon/src/send.ts +171 -0
- package/packages/daemon/src/server/README.md +15 -0
- package/packages/daemon/src/server/index.ts +74 -0
- package/packages/daemon/src/server/pty-bridge.ts +532 -0
- package/packages/daemon/src/server/standalone.ts +18 -0
- package/packages/daemon/src/server/ws-route.ts +483 -0
- package/packages/daemon/src/status.ts +59 -0
- package/packages/daemon/src/stop.ts +28 -0
- package/packages/daemon/src/terminal/NodePtyAdapter.ts +271 -0
- package/packages/daemon/src/terminal/PtyAdapter.ts +140 -0
- package/packages/daemon/src/terminal/README.md +92 -0
- package/packages/daemon/src/tui/chrome/cheatsheet.ts +260 -0
- package/packages/daemon/src/tui/chrome/chip.ts +30 -0
- package/packages/daemon/src/tui/chrome/events.ts +119 -0
- package/packages/daemon/src/tui/chrome/kitty-keys.ts +55 -0
- package/packages/daemon/src/tui/chrome/menu.ts +289 -0
- package/packages/daemon/src/tui/chrome/notify.ts +195 -0
- package/packages/daemon/src/tui/chrome/panels.ts +111 -0
- package/packages/daemon/src/tui/chrome/sidebar.ts +222 -0
- package/packages/daemon/src/tui/chrome/snapshot.ts +425 -0
- package/packages/daemon/src/tui/chrome/statusline.ts +595 -0
- package/packages/daemon/src/tui/chrome/updater.ts +428 -0
- package/packages/daemon/src/tui/chrome/welcome.ts +124 -0
- package/packages/daemon/src/tui/compiled.ts +113 -0
- package/packages/daemon/src/tui/detect/classify.ts +193 -0
- package/packages/daemon/src/tui/detect/manifest-loader.ts +192 -0
- package/packages/daemon/src/tui/detect/manifest.ts +184 -0
- package/packages/daemon/src/tui/detect/manifests.ts +226 -0
- package/packages/daemon/src/tui/detect/process-tree.ts +197 -0
- package/packages/daemon/src/tui/detect/snapshot.ts +70 -0
- package/packages/daemon/src/tui/integrations/claude.ts +176 -0
- package/packages/daemon/src/tui/integrations/offer.ts +145 -0
- package/packages/daemon/src/tui/main.ts +70 -0
- package/packages/daemon/src/tui/mirror/control-client.ts +143 -0
- package/packages/daemon/src/tui/mirror/control.ts +97 -0
- package/packages/daemon/src/tui/mirror/pane-mirror.ts +81 -0
- package/packages/daemon/src/tui/mirror/viewer.tsx +166 -0
- package/packages/daemon/src/tui/team/CONTROL.md +50 -0
- package/packages/daemon/src/tui/team/entry.ts +11 -0
- package/packages/daemon/src/tui/team/fuzzy.ts +133 -0
- package/packages/daemon/src/tui/team/home.ts +170 -0
- package/packages/daemon/src/tui/team/index.tsx +1521 -0
- package/packages/daemon/src/tui/team/input.ts +34 -0
- package/packages/daemon/src/tui/team/keymap.ts +127 -0
- package/packages/daemon/src/tui/team/mouse.ts +29 -0
- package/packages/daemon/src/tui/team/nav.ts +31 -0
- package/packages/daemon/src/tui/team/preview.ts +34 -0
- package/packages/daemon/src/tui/team/projects.ts +191 -0
- package/packages/daemon/src/tui/team/report.ts +73 -0
- package/packages/daemon/src/tui/team/sessions.ts +344 -0
- package/packages/daemon/src/tui/team/tree.ts +62 -0
- package/packages/daemon/src/types.ts +13 -0
- package/packages/daemon/src/widgets/changes/README.md +3 -0
- package/packages/daemon/src/widgets/changes/index.tsx +691 -0
- package/packages/daemon/src/widgets/config/README.md +3 -0
- package/packages/daemon/src/widgets/config/index.tsx +481 -0
- package/packages/daemon/src/widgets/explorer/README.md +3 -0
- package/packages/daemon/src/widgets/explorer/index.tsx +456 -0
- package/packages/daemon/src/widgets/explorer/tree.tsx +165 -0
- package/packages/daemon/src/widgets/lib/grammar.ts +126 -0
- package/packages/daemon/src/widgets/lib/help-overlay.tsx +101 -0
- package/packages/daemon/src/widgets/lib/pane-comms.ts +209 -0
- package/packages/daemon/src/widgets/lib/theme.ts +194 -0
- package/packages/daemon/src/widgets/lib/watcher.ts +132 -0
- package/packages/daemon/src/widgets/preview/README.md +3 -0
- package/packages/daemon/src/widgets/preview/index.tsx +416 -0
- package/packages/daemon/src/widgets/resolve.ts +121 -0
- package/packages/daemon/src/widgets/setup/README.md +3 -0
- package/packages/daemon/src/widgets/setup/config-tree.tsx +246 -0
- package/packages/daemon/src/widgets/setup/index.tsx +341 -0
- package/packages/daemon/src/widgets/sidebar/index.tsx +527 -0
- package/packages/tmux-bridge/package.json +22 -0
- package/packages/tmux-bridge/src/errors.ts +28 -0
- package/packages/tmux-bridge/src/index.ts +31 -0
- package/packages/tmux-bridge/src/monitor.ts +77 -0
- package/packages/tmux-bridge/src/panes.ts +136 -0
- package/packages/tmux-bridge/src/runner.test.ts +501 -0
- package/packages/tmux-bridge/src/runner.ts +91 -0
- package/packages/tmux-bridge/src/sessions.ts +126 -0
- package/packages/tmux-bridge/src/targeting.test.ts +107 -0
- package/packages/tmux-bridge/src/targeting.ts +90 -0
- package/scripts/build-cli.mjs +101 -0
- package/scripts/build-tui.mjs +58 -0
- package/scripts/capture-codex-traffic.mjs +195 -0
- package/scripts/check-src-additions.sh +74 -0
- package/scripts/coverage-summary.mjs +68 -0
- package/scripts/install-git-hooks.js +53 -0
- package/scripts/merge-update-manifests.mjs +58 -0
- package/scripts/merge-update-manifests.test.mjs +82 -0
- package/scripts/pack-check-run.mjs +83 -0
- package/scripts/postinstall.js +53 -7
- package/scripts/prepublish-check.mjs +44 -0
- package/scripts/stress-test.ts +141 -0
- package/scripts/verify-endpoints.sh +90 -0
- package/skill/SKILL.md +203 -236
- package/dashboard/out/404/index.html +0 -1
- package/dashboard/out/404.html +0 -1
- package/dashboard/out/__next.__PAGE__.txt +0 -9
- package/dashboard/out/__next._full.txt +0 -21
- package/dashboard/out/__next._head.txt +0 -5
- package/dashboard/out/__next._index.txt +0 -7
- package/dashboard/out/__next._tree.txt +0 -4
- package/dashboard/out/_next/static/BDqbxLkiJrlXDfMXNb3cK/_buildManifest.js +0 -11
- package/dashboard/out/_next/static/BDqbxLkiJrlXDfMXNb3cK/_clientMiddlewareManifest.json +0 -1
- package/dashboard/out/_next/static/BDqbxLkiJrlXDfMXNb3cK/_ssgManifest.js +0 -1
- package/dashboard/out/_next/static/chunks/048e2449530877e2.js +0 -1
- package/dashboard/out/_next/static/chunks/053c57bda6abb959.js +0 -1
- package/dashboard/out/_next/static/chunks/056760c6c2dd9172.js +0 -1
- package/dashboard/out/_next/static/chunks/06ab47357b6d3e35.js +0 -1
- package/dashboard/out/_next/static/chunks/0921cbe5dfd6738e.js +0 -1
- package/dashboard/out/_next/static/chunks/0b2599bf468cf5ea.js +0 -1
- package/dashboard/out/_next/static/chunks/0c012eac08ef2c4f.js +0 -1
- package/dashboard/out/_next/static/chunks/0c29e87fcdcffac3.js +0 -1
- package/dashboard/out/_next/static/chunks/0e1e98854430c693.js +0 -1
- package/dashboard/out/_next/static/chunks/0e24498976a88976.js +0 -1
- package/dashboard/out/_next/static/chunks/0e5bf11ff0b9ab90.js +0 -1
- package/dashboard/out/_next/static/chunks/0eae0a45ab8416c8.js +0 -1
- package/dashboard/out/_next/static/chunks/104797400d9d38ad.js +0 -1
- package/dashboard/out/_next/static/chunks/10cfcfce475f9d2d.js +0 -1
- package/dashboard/out/_next/static/chunks/11bac38e7cfb4ecc.js +0 -1
- package/dashboard/out/_next/static/chunks/120c5f6501ec3529.js +0 -1
- package/dashboard/out/_next/static/chunks/121fceb2b1dcd79f.js +0 -1
- package/dashboard/out/_next/static/chunks/13726b63e1be6b98.js +0 -1
- package/dashboard/out/_next/static/chunks/140c6ce631514660.js +0 -1
- package/dashboard/out/_next/static/chunks/1435ee3a51174c97.js +0 -1
- package/dashboard/out/_next/static/chunks/14dc927d2e2cca91.js +0 -1
- package/dashboard/out/_next/static/chunks/179c3031b292d98e.js +0 -1
- package/dashboard/out/_next/static/chunks/181e88957c47e5c1.js +0 -1
- package/dashboard/out/_next/static/chunks/18f70ba23873c432.js +0 -1
- package/dashboard/out/_next/static/chunks/1b58303b027fd135.js +0 -1
- package/dashboard/out/_next/static/chunks/1b5f49a358dcc71e.js +0 -1
- package/dashboard/out/_next/static/chunks/1bba44b81585099a.js +0 -1
- package/dashboard/out/_next/static/chunks/1bea8dee19a3e9ae.js +0 -1
- package/dashboard/out/_next/static/chunks/1cfad21646fc250e.js +0 -1
- package/dashboard/out/_next/static/chunks/1d053dc9e1e428ef.js +0 -1
- package/dashboard/out/_next/static/chunks/1e7d7639c6f0ee5e.js +0 -1
- package/dashboard/out/_next/static/chunks/1f42504ca81463f1.js +0 -1
- package/dashboard/out/_next/static/chunks/20c92047399305b4.js +0 -1
- package/dashboard/out/_next/static/chunks/214560e9514a9a4d.js +0 -1
- package/dashboard/out/_next/static/chunks/21d4ef106914e997.js +0 -1
- package/dashboard/out/_next/static/chunks/2586e83fc3dc2588.js +0 -1
- package/dashboard/out/_next/static/chunks/267136a09e94f5c2.js +0 -1
- package/dashboard/out/_next/static/chunks/271c50b329917c10.js +0 -1
- package/dashboard/out/_next/static/chunks/27fccecefffd88b5.js +0 -1
- package/dashboard/out/_next/static/chunks/28f058ed331315b6.js +0 -1
- package/dashboard/out/_next/static/chunks/28f704f2cc5713eb.js +0 -1
- package/dashboard/out/_next/static/chunks/290f67a6cd150a98.js +0 -1
- package/dashboard/out/_next/static/chunks/2ad12f4dcc30d30a.js +0 -1
- package/dashboard/out/_next/static/chunks/2b650b172078ab92.js +0 -1
- package/dashboard/out/_next/static/chunks/2bd91076019a6453.js +0 -1
- package/dashboard/out/_next/static/chunks/2e1278563a8e26be.js +0 -1
- package/dashboard/out/_next/static/chunks/309eb70780a3d67d.js +0 -1
- package/dashboard/out/_next/static/chunks/30f71950992e2307.js +0 -1
- package/dashboard/out/_next/static/chunks/31191873c2075784.js +0 -1
- package/dashboard/out/_next/static/chunks/31a790921a0c035e.js +0 -1
- package/dashboard/out/_next/static/chunks/34f8d7a5a06e8e32.js +0 -1
- package/dashboard/out/_next/static/chunks/36b3716436d9bc9d.js +0 -1
- package/dashboard/out/_next/static/chunks/3770b7d0ff004de3.js +0 -1
- package/dashboard/out/_next/static/chunks/381ab3bd4cffbf4d.js +0 -1
- package/dashboard/out/_next/static/chunks/38aa4eada5dcd1a4.js +0 -1
- package/dashboard/out/_next/static/chunks/39723132b78cb77e.js +0 -1
- package/dashboard/out/_next/static/chunks/399efdcc3fe56e09.js +0 -1
- package/dashboard/out/_next/static/chunks/3a8431a9221b0706.js +0 -1
- package/dashboard/out/_next/static/chunks/3a9b40810ce88cbf.js +0 -1
- package/dashboard/out/_next/static/chunks/3b322e3e9476ecdf.js +0 -1
- package/dashboard/out/_next/static/chunks/3bb14befeeb08c28.js +0 -1
- package/dashboard/out/_next/static/chunks/3c99637ebd462b20.js +0 -1
- package/dashboard/out/_next/static/chunks/3cbb9217d56459d8.js +0 -1
- package/dashboard/out/_next/static/chunks/3d438e0929a762f7.js +0 -1
- package/dashboard/out/_next/static/chunks/3e6d4834e0752f76.js +0 -2
- package/dashboard/out/_next/static/chunks/3e6f8cedaad4e89b.js +0 -1
- package/dashboard/out/_next/static/chunks/3e701259ce1b53e3.js +0 -1
- package/dashboard/out/_next/static/chunks/41562f7ab7c033eb.js +0 -1
- package/dashboard/out/_next/static/chunks/418fadd8a94e2fd7.js +0 -1
- package/dashboard/out/_next/static/chunks/42345437bb922e9c.js +0 -1
- package/dashboard/out/_next/static/chunks/434b6bd78c97b668.js +0 -1
- package/dashboard/out/_next/static/chunks/434febe897d33e2d.js +0 -1
- package/dashboard/out/_next/static/chunks/45d28707dd8ce1c1.js +0 -1
- package/dashboard/out/_next/static/chunks/4620a640e88cb1b7.js +0 -1
- package/dashboard/out/_next/static/chunks/468f8eb604502ea4.js +0 -1
- package/dashboard/out/_next/static/chunks/495f5cedf8afe823.js +0 -1
- package/dashboard/out/_next/static/chunks/49a89d1704d27740.js +0 -1
- package/dashboard/out/_next/static/chunks/49e5c37d15f63def.js +0 -1
- package/dashboard/out/_next/static/chunks/4a46ad186a8587ee.css +0 -2
- package/dashboard/out/_next/static/chunks/4a5c728574935d50.js +0 -1
- package/dashboard/out/_next/static/chunks/4b27ebd4d9304d8f.js +0 -1
- package/dashboard/out/_next/static/chunks/4b965aa320a9b358.js +0 -1
- package/dashboard/out/_next/static/chunks/4bb2da90bbe5794f.js +0 -1
- package/dashboard/out/_next/static/chunks/4d2f1c6f631e4b85.js +0 -1
- package/dashboard/out/_next/static/chunks/4d696d5a64dab42e.js +0 -1
- package/dashboard/out/_next/static/chunks/4f660dadb3f1e9e2.js +0 -1
- package/dashboard/out/_next/static/chunks/507b50d47f949333.js +0 -1
- package/dashboard/out/_next/static/chunks/50b1b7063bb044e2.js +0 -1
- package/dashboard/out/_next/static/chunks/50c0c2e3c4f02508.js +0 -1
- package/dashboard/out/_next/static/chunks/50d7ba9803e65b02.js +0 -1
- package/dashboard/out/_next/static/chunks/51535a6d4c98c7a4.js +0 -1
- package/dashboard/out/_next/static/chunks/526de6cc16c7dd2f.js +0 -1
- package/dashboard/out/_next/static/chunks/5307604f8632b3fd.js +0 -1
- package/dashboard/out/_next/static/chunks/5480bd722260f231.js +0 -1
- package/dashboard/out/_next/static/chunks/54c61c82e5f1dca5.js +0 -1
- package/dashboard/out/_next/static/chunks/555de6ac6bb9034c.js +0 -1
- package/dashboard/out/_next/static/chunks/562b89ee76a4b90c.js +0 -1
- package/dashboard/out/_next/static/chunks/5747f9a32edff429.js +0 -1
- package/dashboard/out/_next/static/chunks/57ee141430b4c05c.js +0 -1
- package/dashboard/out/_next/static/chunks/584c066a0837dd9a.js +0 -1
- package/dashboard/out/_next/static/chunks/5856aed4670a6253.js +0 -1
- package/dashboard/out/_next/static/chunks/58fe563414726511.js +0 -1
- package/dashboard/out/_next/static/chunks/5948196b2729b18c.js +0 -1
- package/dashboard/out/_next/static/chunks/5ab77c69e7306f97.js +0 -1
- package/dashboard/out/_next/static/chunks/5b3fa4c99d61611c.js +0 -1
- package/dashboard/out/_next/static/chunks/5cc87abaef616661.js +0 -1
- package/dashboard/out/_next/static/chunks/5dfa7913f99bb966.js +0 -1
- package/dashboard/out/_next/static/chunks/5e49b008432770f1.js +0 -1
- package/dashboard/out/_next/static/chunks/5e5a33dd81c45c47.js +0 -1
- package/dashboard/out/_next/static/chunks/5ee61bed638eb8a8.js +0 -1
- package/dashboard/out/_next/static/chunks/5eed557b9f45ae4a.js +0 -1
- package/dashboard/out/_next/static/chunks/60446823a7d30c1b.js +0 -1
- package/dashboard/out/_next/static/chunks/605150c490861442.js +0 -1
- package/dashboard/out/_next/static/chunks/609056d51c0bf332.js +0 -1
- package/dashboard/out/_next/static/chunks/60ec91dfeb50071b.js +0 -1
- package/dashboard/out/_next/static/chunks/61bc7be0bba6a33f.js +0 -1
- package/dashboard/out/_next/static/chunks/61f4a5c9ce23e55e.js +0 -1
- package/dashboard/out/_next/static/chunks/63aae3585be04e65.js +0 -1
- package/dashboard/out/_next/static/chunks/64e0e1ee7ef4f01b.js +0 -1
- package/dashboard/out/_next/static/chunks/66e9b4c26ff1aaaf.js +0 -1
- package/dashboard/out/_next/static/chunks/67068847aa1b5e98.js +0 -1
- package/dashboard/out/_next/static/chunks/68d7de1f2e202c26.js +0 -1
- package/dashboard/out/_next/static/chunks/698ca3ea1937ba4f.js +0 -1
- package/dashboard/out/_next/static/chunks/69eb97c24b5b6b9d.js +0 -1
- package/dashboard/out/_next/static/chunks/6b1ac098c228a479.js +0 -1
- package/dashboard/out/_next/static/chunks/6bb8020cb796bcc1.js +0 -1
- package/dashboard/out/_next/static/chunks/6cf8b1db17f2a155.js +0 -1
- package/dashboard/out/_next/static/chunks/6e7613643906ea88.js +0 -1
- package/dashboard/out/_next/static/chunks/6ea27ceb2e6feae5.js +0 -1
- package/dashboard/out/_next/static/chunks/6f95a8dbcf23dded.js +0 -1
- package/dashboard/out/_next/static/chunks/6fd44e759d82f64e.js +0 -1
- package/dashboard/out/_next/static/chunks/716ec29c268c38f6.js +0 -1
- package/dashboard/out/_next/static/chunks/717b399dfcf7c02c.js +0 -1
- package/dashboard/out/_next/static/chunks/72badd90e1c91348.js +0 -1
- package/dashboard/out/_next/static/chunks/72f9296dbb7ae3c4.js +0 -1
- package/dashboard/out/_next/static/chunks/73aa31e1144d8191.js +0 -1
- package/dashboard/out/_next/static/chunks/73f98ded8fe2e879.js +0 -1
- package/dashboard/out/_next/static/chunks/740a2e8ace15e13b.js +0 -1
- package/dashboard/out/_next/static/chunks/74e57c16e7304b6b.js +0 -1
- package/dashboard/out/_next/static/chunks/7628dead4d113df2.js +0 -1
- package/dashboard/out/_next/static/chunks/7717c88c07ed96e6.js +0 -1
- package/dashboard/out/_next/static/chunks/775581f7956d9a27.js +0 -1
- package/dashboard/out/_next/static/chunks/77d3b6661befdb98.js +0 -1
- package/dashboard/out/_next/static/chunks/78435c0e1c77fea7.js +0 -1
- package/dashboard/out/_next/static/chunks/791336748b9c9393.js +0 -1
- package/dashboard/out/_next/static/chunks/79ea68dfae65ef2f.js +0 -1
- package/dashboard/out/_next/static/chunks/7bae777a472eb13c.js +0 -1
- package/dashboard/out/_next/static/chunks/7fd847f47237a35c.js +0 -1
- package/dashboard/out/_next/static/chunks/804d718be0370058.css +0 -1
- package/dashboard/out/_next/static/chunks/807cb3c1923995ab.js +0 -1
- package/dashboard/out/_next/static/chunks/8286b39407d94447.js +0 -1
- package/dashboard/out/_next/static/chunks/84e4305b8dc830ed.js +0 -1
- package/dashboard/out/_next/static/chunks/850f99dbfabb53e0.js +0 -1
- package/dashboard/out/_next/static/chunks/85594127e66b6b7f.js +0 -1
- package/dashboard/out/_next/static/chunks/858c11169c183c9c.js +0 -1
- package/dashboard/out/_next/static/chunks/85e27005dfe4c3e3.js +0 -1
- package/dashboard/out/_next/static/chunks/8707bd3d8ddc1f1c.js +0 -1
- package/dashboard/out/_next/static/chunks/8851e5d7ef894973.js +0 -1
- package/dashboard/out/_next/static/chunks/88ba3782cc614989.js +0 -1
- package/dashboard/out/_next/static/chunks/8a0c9a181784c2ef.js +0 -1
- package/dashboard/out/_next/static/chunks/8ad01ae355a6e7f6.js +0 -1
- package/dashboard/out/_next/static/chunks/8d2ed93b0d0a4b4f.js +0 -1
- package/dashboard/out/_next/static/chunks/8dc352ebd5310d3c.js +0 -1
- package/dashboard/out/_next/static/chunks/8dd1d722c8c1a22c.js +0 -1
- package/dashboard/out/_next/static/chunks/8e60fe307e3e4986.js +0 -1
- package/dashboard/out/_next/static/chunks/8eea4dd71e25f32a.js +0 -1
- package/dashboard/out/_next/static/chunks/8f468a65bac34eaa.js +0 -1
- package/dashboard/out/_next/static/chunks/9057e5382d6a5059.js +0 -1
- package/dashboard/out/_next/static/chunks/931d056437805ecb.js +0 -1
- package/dashboard/out/_next/static/chunks/954eb11648dd8cff.js +0 -1
- package/dashboard/out/_next/static/chunks/955034d876d14bb3.js +0 -1
- package/dashboard/out/_next/static/chunks/966c4895773249f6.js +0 -1
- package/dashboard/out/_next/static/chunks/96aff410a6ab106c.js +0 -1
- package/dashboard/out/_next/static/chunks/99b396c821c1dd2d.js +0 -1
- package/dashboard/out/_next/static/chunks/9a255fd2cf4922ae.js +0 -1
- package/dashboard/out/_next/static/chunks/9b1f6aa73bc864b2.js +0 -1
- package/dashboard/out/_next/static/chunks/9b9ce582c533aa79.js +0 -1
- package/dashboard/out/_next/static/chunks/9c19bd3c773c6611.js +0 -1
- package/dashboard/out/_next/static/chunks/9ceeaa847eb15ca2.js +0 -1
- package/dashboard/out/_next/static/chunks/9d2e6e7b8b65f845.js +0 -1
- package/dashboard/out/_next/static/chunks/9de23802066128ff.js +0 -1
- package/dashboard/out/_next/static/chunks/9e327f94b3701170.js +0 -1
- package/dashboard/out/_next/static/chunks/9e7818421c2d455a.js +0 -1
- package/dashboard/out/_next/static/chunks/9e935acbcf2fb519.js +0 -1
- package/dashboard/out/_next/static/chunks/9ed9f68340343b51.js +0 -1
- package/dashboard/out/_next/static/chunks/9f94a0242455fc20.js +0 -1
- package/dashboard/out/_next/static/chunks/9fff46b5aaecf47e.js +0 -1
- package/dashboard/out/_next/static/chunks/a06d267a5c557657.js +0 -1
- package/dashboard/out/_next/static/chunks/a0eb8c81c54722fe.js +0 -1
- package/dashboard/out/_next/static/chunks/a16808e83106427d.js +0 -1
- package/dashboard/out/_next/static/chunks/a2215e2bc72739ef.js +0 -1
- package/dashboard/out/_next/static/chunks/a2de9e6696eb9c17.js +0 -1
- package/dashboard/out/_next/static/chunks/a33420b8c14090d6.js +0 -1
- package/dashboard/out/_next/static/chunks/a360bffef39d818b.js +0 -1
- package/dashboard/out/_next/static/chunks/a42852fdf5287cf5.js +0 -1
- package/dashboard/out/_next/static/chunks/a4efc88488322b67.js +0 -1
- package/dashboard/out/_next/static/chunks/a696a91d14101bdb.js +0 -1
- package/dashboard/out/_next/static/chunks/a6dad97d9634a72d.js +0 -1
- package/dashboard/out/_next/static/chunks/a6dad97d9634a72d.js.map +0 -1
- package/dashboard/out/_next/static/chunks/a705c7261712bd8e.js +0 -1
- package/dashboard/out/_next/static/chunks/a7d1e4b067ace180.js +0 -1
- package/dashboard/out/_next/static/chunks/a8590c121a7efaa5.js +0 -1
- package/dashboard/out/_next/static/chunks/a95953a83a6df6cf.js +0 -1
- package/dashboard/out/_next/static/chunks/a9d0a757d3b4afed.js +0 -1
- package/dashboard/out/_next/static/chunks/a9dc35514619c872.js +0 -1
- package/dashboard/out/_next/static/chunks/aae0253c73fba984.js +0 -193
- package/dashboard/out/_next/static/chunks/ab1821552066a74d.js +0 -1
- package/dashboard/out/_next/static/chunks/ac96bc0eccebe15a.js +0 -1
- package/dashboard/out/_next/static/chunks/acc03cfaaf6bb30f.js +0 -1
- package/dashboard/out/_next/static/chunks/acc298ae059b9fe4.js +0 -1
- package/dashboard/out/_next/static/chunks/ad076b6e996d250c.js +0 -1
- package/dashboard/out/_next/static/chunks/ae53b64af7ba16d5.js +0 -1
- package/dashboard/out/_next/static/chunks/ae5da7fa4bc5fa95.js +0 -1
- package/dashboard/out/_next/static/chunks/aefcf0eb033a155e.js +0 -1
- package/dashboard/out/_next/static/chunks/b12d43100ee10526.js +0 -1
- package/dashboard/out/_next/static/chunks/b137952dd5566a41.js +0 -1
- package/dashboard/out/_next/static/chunks/b2832d8a2d332a47.js +0 -1
- package/dashboard/out/_next/static/chunks/b417aa09c15f63c6.js +0 -1
- package/dashboard/out/_next/static/chunks/b48e152ba7bf6caf.js +0 -1
- package/dashboard/out/_next/static/chunks/b4cbef8e4714bf92.js +0 -1
- package/dashboard/out/_next/static/chunks/b568ff8383a37f53.js +0 -1
- package/dashboard/out/_next/static/chunks/b6e1495dd89a39e3.js +0 -1
- package/dashboard/out/_next/static/chunks/b73a21bd67528440.js +0 -1
- package/dashboard/out/_next/static/chunks/b77ee62bc71dcec7.js +0 -1
- package/dashboard/out/_next/static/chunks/b7f454615c11d4eb.js +0 -1
- package/dashboard/out/_next/static/chunks/b818ea32a839590f.js +0 -1
- package/dashboard/out/_next/static/chunks/b901ce78c1c65d66.js +0 -1
- package/dashboard/out/_next/static/chunks/b93d647b803be9fa.js +0 -1
- package/dashboard/out/_next/static/chunks/b960b09ff1ecd6bb.js +0 -1
- package/dashboard/out/_next/static/chunks/ba717c7779a778fc.js +0 -1
- package/dashboard/out/_next/static/chunks/bacb0ae7458d18b6.js +0 -1
- package/dashboard/out/_next/static/chunks/bb51f68b27346852.js +0 -1
- package/dashboard/out/_next/static/chunks/bb67f22e1ab632ae.js +0 -1
- package/dashboard/out/_next/static/chunks/bbae97ec58d1bb9d.js +0 -1
- package/dashboard/out/_next/static/chunks/bbaf38ee90307765.js +0 -1
- package/dashboard/out/_next/static/chunks/be01598fe1fce5db.js +0 -1
- package/dashboard/out/_next/static/chunks/bf4cbbc095987fec.js +0 -1
- package/dashboard/out/_next/static/chunks/c18f823797d57446.js +0 -1
- package/dashboard/out/_next/static/chunks/c1bcece34ec5b295.js +0 -1
- package/dashboard/out/_next/static/chunks/c1ccbc3a51adaf0a.js +0 -1
- package/dashboard/out/_next/static/chunks/c1f54a628f27791c.js +0 -1
- package/dashboard/out/_next/static/chunks/c21916bf5d232151.js +0 -1
- package/dashboard/out/_next/static/chunks/c27e570f0fc2f78b.js +0 -1
- package/dashboard/out/_next/static/chunks/c322b8005eebc0d8.js +0 -1
- package/dashboard/out/_next/static/chunks/c3900ac2b009b764.js +0 -1
- package/dashboard/out/_next/static/chunks/c3c597c8eb77ad6b.js +0 -1
- package/dashboard/out/_next/static/chunks/c58d45c1d88e208c.js +0 -1
- package/dashboard/out/_next/static/chunks/c63875998d7a655f.js +0 -1
- package/dashboard/out/_next/static/chunks/c6eaa7c8e7209c8e.js +0 -1
- package/dashboard/out/_next/static/chunks/c6f820f71162a59a.js +0 -1
- package/dashboard/out/_next/static/chunks/c7ce0941d1dfe7ed.js +0 -1
- package/dashboard/out/_next/static/chunks/c877259f784ec8e5.js +0 -1
- package/dashboard/out/_next/static/chunks/cb8057e86aaa1c68.js +0 -1
- package/dashboard/out/_next/static/chunks/ccb4e306ee4859b1.js +0 -1
- package/dashboard/out/_next/static/chunks/ccde62b0fa8112eb.js +0 -1
- package/dashboard/out/_next/static/chunks/cd421f0971c63c31.js +0 -1
- package/dashboard/out/_next/static/chunks/cde0317494d4adb7.js +0 -1
- package/dashboard/out/_next/static/chunks/cfae64434b92b8b6.js +0 -1
- package/dashboard/out/_next/static/chunks/cfc0e19310ec0a36.js +0 -1
- package/dashboard/out/_next/static/chunks/d0f344c7d0bcb59a.js +0 -1
- package/dashboard/out/_next/static/chunks/d1871c73e74e1f50.js +0 -1
- package/dashboard/out/_next/static/chunks/d18f658850711061.js +0 -1
- package/dashboard/out/_next/static/chunks/d25d9c48880697f6.js +0 -1
- package/dashboard/out/_next/static/chunks/d3f0a72bbc3060b0.js +0 -1
- package/dashboard/out/_next/static/chunks/d5fca429bc89060b.js +0 -1
- package/dashboard/out/_next/static/chunks/d6a6c75c9a4bef49.js +0 -1
- package/dashboard/out/_next/static/chunks/d6a8f93aa8f1e345.js +0 -1
- package/dashboard/out/_next/static/chunks/d7deab676b19ba0e.js +0 -1
- package/dashboard/out/_next/static/chunks/d80030dde88cec85.js +0 -1
- package/dashboard/out/_next/static/chunks/da84f9774c076ff1.js +0 -1
- package/dashboard/out/_next/static/chunks/da98ecc6b9b0ceb2.js +0 -1
- package/dashboard/out/_next/static/chunks/db550aabce60b912.js +0 -4
- package/dashboard/out/_next/static/chunks/dc87f77fcc029482.js +0 -1
- package/dashboard/out/_next/static/chunks/dd05f30acdb63a53.js +0 -1
- package/dashboard/out/_next/static/chunks/dea150155499b903.js +0 -1
- package/dashboard/out/_next/static/chunks/df4358754ff1d5e8.js +0 -1
- package/dashboard/out/_next/static/chunks/df8b21ff12d23b0e.js +0 -1
- package/dashboard/out/_next/static/chunks/df8fc68d77debf2c.js +0 -1
- package/dashboard/out/_next/static/chunks/df9ed1ffec90589f.js +0 -1
- package/dashboard/out/_next/static/chunks/dfa65ece1598f934.js +0 -1
- package/dashboard/out/_next/static/chunks/dfaab5cdd41a20d9.js +0 -1
- package/dashboard/out/_next/static/chunks/e00c03c942b5ae3e.js +0 -1
- package/dashboard/out/_next/static/chunks/e02d27cf679bece1.js +0 -1
- package/dashboard/out/_next/static/chunks/e0b747585f78513a.js +0 -1
- package/dashboard/out/_next/static/chunks/e19b71ca23fd7df0.js +0 -1
- package/dashboard/out/_next/static/chunks/e21cbe89d0cda120.js +0 -1
- package/dashboard/out/_next/static/chunks/e2a0386930edd34f.js +0 -1
- package/dashboard/out/_next/static/chunks/e375de19a36e2f38.js +0 -1
- package/dashboard/out/_next/static/chunks/e5241b4a6496a9e0.js +0 -1
- package/dashboard/out/_next/static/chunks/e569dd07c96eb4dd.js +0 -1
- package/dashboard/out/_next/static/chunks/e61c3ea91233f948.js +0 -1
- package/dashboard/out/_next/static/chunks/e73b42c5d34c4c28.js +0 -1
- package/dashboard/out/_next/static/chunks/e7c5b2105f651e87.js +0 -1
- package/dashboard/out/_next/static/chunks/e878e58a69bb01b6.js +0 -1
- package/dashboard/out/_next/static/chunks/e8f090a4dc571062.js +0 -1
- package/dashboard/out/_next/static/chunks/e98dc34dac91cdad.js +0 -1
- package/dashboard/out/_next/static/chunks/ea67cf7a0c5e7233.js +0 -1
- package/dashboard/out/_next/static/chunks/eacc98a1e3512fa9.js +0 -1
- package/dashboard/out/_next/static/chunks/eae9cd74d9bbed8b.js +0 -1
- package/dashboard/out/_next/static/chunks/eb187fd345852b34.js +0 -1
- package/dashboard/out/_next/static/chunks/ecea46df7a40b427.js +0 -1
- package/dashboard/out/_next/static/chunks/ecf48b83f4245d9c.js +0 -1
- package/dashboard/out/_next/static/chunks/eda41732bf966c6d.js +0 -1
- package/dashboard/out/_next/static/chunks/ee174a433049f43a.js +0 -1
- package/dashboard/out/_next/static/chunks/ee66b2d3b76de72e.js +0 -1
- package/dashboard/out/_next/static/chunks/ef058d3041c3d8ab.js +0 -1
- package/dashboard/out/_next/static/chunks/f3544b800b0d4969.js +0 -1
- package/dashboard/out/_next/static/chunks/f3b280e604b97509.js +0 -1
- package/dashboard/out/_next/static/chunks/f42e1d3693232993.js +0 -1
- package/dashboard/out/_next/static/chunks/f5a5fdd80166d304.js +0 -1
- package/dashboard/out/_next/static/chunks/f60adc5dd6169316.js +0 -1
- package/dashboard/out/_next/static/chunks/f6255bc2e6c68ce8.js +0 -1
- package/dashboard/out/_next/static/chunks/f6bb677d2d8840db.js +0 -1
- package/dashboard/out/_next/static/chunks/f6f3bf016239c33a.js +0 -1
- package/dashboard/out/_next/static/chunks/f6f57a46cd074bfe.js +0 -1
- package/dashboard/out/_next/static/chunks/f7feb9c1199e8cf6.js +0 -1
- package/dashboard/out/_next/static/chunks/f831087bf964cc3d.js +0 -1
- package/dashboard/out/_next/static/chunks/fa5a2f7244935aa2.js +0 -1
- package/dashboard/out/_next/static/chunks/fa73f36df4c38fa0.js +0 -1
- package/dashboard/out/_next/static/chunks/faa1461722d6a88d.js +0 -1
- package/dashboard/out/_next/static/chunks/fbf706b9a0edb7e6.js +0 -1
- package/dashboard/out/_next/static/chunks/fc2b8c8b7446bbc2.js +0 -1
- package/dashboard/out/_next/static/chunks/fd516f3930c128c1.js +0 -1
- package/dashboard/out/_next/static/chunks/fd663e7ff8de4887.js +0 -1
- package/dashboard/out/_next/static/chunks/fe5b656cc9bdd60e.js +0 -1
- package/dashboard/out/_next/static/chunks/turbopack-2f5dec4a537c0ee7.js +0 -4
- package/dashboard/out/_next/static/media/02263ebadd758ea4-s.8da66e7f.woff2 +0 -0
- package/dashboard/out/_next/static/media/2fe89d53234c61d4-s.cb53f04b.woff2 +0 -0
- package/dashboard/out/_next/static/media/59b15b4bcd7b1eb5-s.afa48be3.woff2 +0 -0
- package/dashboard/out/_next/static/media/5e05ae5b48faa55e-s.6b5ea6af.woff2 +0 -0
- package/dashboard/out/_next/static/media/68757d6cddeff913-s.e6cd1753.woff2 +0 -0
- package/dashboard/out/_next/static/media/99e609270109b47d-s.p.64b9304e.woff2 +0 -0
- package/dashboard/out/_next/static/media/a7afbb44bec2bb18-s.1dcddae6.woff2 +0 -0
- package/dashboard/out/_next/static/media/e390973e931a41c5-s.a82ecf4e.woff2 +0 -0
- package/dashboard/out/_next/static/media/e532fa1b9921e1cd-s.764b43eb.woff2 +0 -0
- package/dashboard/out/_next/static/media/effe91970fc4db64-s.p.19510058.woff2 +0 -0
- package/dashboard/out/_not-found/__next._full.txt +0 -15
- package/dashboard/out/_not-found/__next._head.txt +0 -5
- package/dashboard/out/_not-found/__next._index.txt +0 -7
- package/dashboard/out/_not-found/__next._not-found.__PAGE__.txt +0 -5
- package/dashboard/out/_not-found/__next._not-found.txt +0 -4
- package/dashboard/out/_not-found/__next._tree.txt +0 -2
- package/dashboard/out/_not-found/index.html +0 -1
- package/dashboard/out/_not-found/index.txt +0 -15
- package/dashboard/out/index.html +0 -1
- package/dashboard/out/index.txt +0 -21
- package/dashboard/out/project/__fallback/__next._full.txt +0 -19
- package/dashboard/out/project/__fallback/__next._head.txt +0 -5
- package/dashboard/out/project/__fallback/__next._index.txt +0 -7
- package/dashboard/out/project/__fallback/__next._tree.txt +0 -5
- package/dashboard/out/project/__fallback/__next.project.$d$name.__PAGE__.txt +0 -7
- package/dashboard/out/project/__fallback/__next.project.$d$name.txt +0 -4
- package/dashboard/out/project/__fallback/__next.project.txt +0 -4
- package/dashboard/out/project/__fallback/index.html +0 -1
- package/dashboard/out/project/__fallback/index.txt +0 -19
- package/src/__tests__/support.ts +0 -186
- package/src/attach.ts +0 -20
- package/src/cli.test.ts +0 -314
- package/src/command-center/discovery.test.ts +0 -265
- package/src/command-center/discovery.ts +0 -296
- package/src/command-center/schemas.ts +0 -57
- package/src/command-center/server.test.ts +0 -814
- package/src/command-center/server.ts +0 -1427
- package/src/command-center/static.test.ts +0 -105
- package/src/command-center/static.ts +0 -122
- package/src/config-cli.test.ts +0 -86
- package/src/config.test.ts +0 -205
- package/src/config.ts +0 -313
- package/src/detect.test.ts +0 -142
- package/src/dispatch.ts +0 -102
- package/src/doctor.test.ts +0 -119
- package/src/doctor.ts +0 -167
- package/src/init.test.ts +0 -101
- package/src/init.ts +0 -211
- package/src/inspect.test.ts +0 -67
- package/src/inspect.ts +0 -212
- package/src/integration.test.ts.skip +0 -276
- package/src/launch.test.ts +0 -149
- package/src/launch.ts +0 -583
- package/src/lib/auth/auth-service.test.ts +0 -178
- package/src/lib/auth/middleware.test.ts +0 -119
- package/src/lib/authorship.test.ts +0 -242
- package/src/lib/cast/recorder.test.ts +0 -127
- package/src/lib/cast/recorder.ts +0 -148
- package/src/lib/daemon-watchdog.ts +0 -102
- package/src/lib/daemon.ts +0 -440
- package/src/lib/dot-path.test.ts +0 -66
- package/src/lib/errors.ts +0 -44
- package/src/lib/event-log.test.ts +0 -189
- package/src/lib/event-log.ts +0 -237
- package/src/lib/github-pr.ts +0 -182
- package/src/lib/hq/client.test.ts +0 -154
- package/src/lib/hq/client.ts +0 -142
- package/src/lib/hq/mdns.test.ts +0 -54
- package/src/lib/hq/mdns.ts +0 -88
- package/src/lib/hq/registry.test.ts +0 -237
- package/src/lib/hq/registry.ts +0 -145
- package/src/lib/hq/types.ts +0 -44
- package/src/lib/ipc/socket-protocol.test.ts +0 -126
- package/src/lib/ipc/socket-protocol.ts +0 -324
- package/src/lib/launch-plan.test.ts +0 -119
- package/src/lib/log.test.ts +0 -39
- package/src/lib/log.ts +0 -71
- package/src/lib/metrics.test.ts +0 -213
- package/src/lib/metrics.ts +0 -345
- package/src/lib/orchestrator.test.ts +0 -2358
- package/src/lib/orchestrator.ts +0 -1799
- package/src/lib/output.ts +0 -76
- package/src/lib/plan-store.test.ts +0 -148
- package/src/lib/plan-store.ts +0 -131
- package/src/lib/research.test.ts +0 -208
- package/src/lib/research.ts +0 -475
- package/src/lib/round-trip.test.ts +0 -341
- package/src/lib/session-monitor.test.ts +0 -152
- package/src/lib/session-monitor.ts +0 -284
- package/src/lib/session-options.test.ts +0 -146
- package/src/lib/shell.test.ts +0 -20
- package/src/lib/sizes.test.ts +0 -73
- package/src/lib/skill-registry.test.ts +0 -134
- package/src/lib/skill-registry.ts +0 -86
- package/src/lib/slugify.test.ts +0 -35
- package/src/lib/task-store.ts +0 -352
- package/src/lib/tmux.test.ts +0 -500
- package/src/lib/tmux.ts +0 -372
- package/src/lib/token-tracker.test.ts +0 -102
- package/src/lib/token-tracker.ts +0 -70
- package/src/lib/tunnels/cloudflare.test.ts +0 -73
- package/src/lib/tunnels/cloudflare.ts +0 -254
- package/src/lib/tunnels/manager.test.ts +0 -63
- package/src/lib/tunnels/manager.ts +0 -132
- package/src/lib/tunnels/ngrok.test.ts +0 -94
- package/src/lib/tunnels/ngrok.ts +0 -261
- package/src/lib/tunnels/tailscale.test.ts +0 -103
- package/src/lib/tunnels/tailscale.ts +0 -1048
- package/src/lib/tunnels/types.ts +0 -44
- package/src/lib/validation.test.ts +0 -289
- package/src/lib/validation.ts +0 -123
- package/src/lib/webhook.ts +0 -51
- package/src/lib/workflow-store.ts +0 -209
- package/src/lib/ws-v3/protocol.test.ts +0 -127
- package/src/lib/ws-v3/protocol.ts +0 -160
- package/src/lib/yaml-io.test.ts +0 -125
- package/src/ls.test.ts +0 -76
- package/src/metrics-cli.ts +0 -177
- package/src/notify.ts +0 -85
- package/src/orchestrator-status.ts +0 -228
- package/src/plan.ts +0 -117
- package/src/postinstall.test.ts +0 -79
- package/src/remote.test.ts +0 -115
- package/src/remote.ts +0 -148
- package/src/restart.ts +0 -24
- package/src/schemas/domain.ts +0 -422
- package/src/schemas/ide-config.ts +0 -148
- package/src/schemas/index.ts +0 -53
- package/src/send.test.ts +0 -70
- package/src/send.ts +0 -181
- package/src/skill.test.ts +0 -114
- package/src/skill.ts +0 -138
- package/src/status.ts +0 -66
- package/src/stop.test.ts +0 -151
- package/src/stop.ts +0 -37
- package/src/task.test.ts +0 -1466
- package/src/task.ts +0 -1143
- package/src/tunnel.test.ts +0 -80
- package/src/tunnel.ts +0 -133
- package/src/types.ts +0 -15
- package/src/ui/web/utils/color.test.ts +0 -93
- package/src/validate.test.ts +0 -385
- package/src/widgets/changes/index.tsx +0 -576
- package/src/widgets/config/index.tsx +0 -440
- package/src/widgets/costs/index.tsx +0 -216
- package/src/widgets/explorer/index.tsx +0 -408
- package/src/widgets/explorer/tree-model.test.ts +0 -214
- package/src/widgets/explorer/tree.tsx +0 -156
- package/src/widgets/lib/files.test.ts +0 -103
- package/src/widgets/lib/git.test.ts +0 -151
- package/src/widgets/lib/pane-comms.test.ts +0 -178
- package/src/widgets/lib/pane-comms.ts +0 -207
- package/src/widgets/lib/theme.ts +0 -151
- package/src/widgets/lib/watcher.ts +0 -50
- package/src/widgets/mission-control/activity-feed.tsx +0 -59
- package/src/widgets/mission-control/agent-panel.tsx +0 -132
- package/src/widgets/mission-control/command-bar.tsx +0 -63
- package/src/widgets/mission-control/index.tsx +0 -751
- package/src/widgets/mission-control/task-panel.tsx +0 -238
- package/src/widgets/preview/index.tsx +0 -415
- package/src/widgets/resolve.ts +0 -40
- package/src/widgets/setup/config-tree.tsx +0 -238
- package/src/widgets/setup/index.tsx +0 -340
- package/src/widgets/setup/setup-model.test.ts +0 -303
- package/src/widgets/tasks/index.tsx +0 -129
- package/src/widgets/tasks/task-detail.tsx +0 -309
- package/src/widgets/tasks/task-form.tsx +0 -193
- package/src/widgets/tasks/task-list.tsx +0 -205
- package/src/widgets/tasks/task-model.test.ts +0 -473
- package/src/widgets/tasks/task-model.ts +0 -157
- /package/{src/lib/auth/types.ts → packages/contracts/src/lib-internal/auth.ts} +0 -0
- /package/{src → packages/daemon/src}/command-center/index.ts +0 -0
- /package/{src → packages/daemon/src}/detect.ts +0 -0
- /package/{src → packages/daemon/src}/js-yaml.d.ts +0 -0
- /package/{src → packages/daemon/src}/lib/auth/auth-service.ts +0 -0
- /package/{src → packages/daemon/src}/lib/auth/middleware.ts +0 -0
- /package/{src → packages/daemon/src}/lib/authorship.ts +0 -0
- /package/{src → packages/daemon/src}/lib/dot-path.ts +0 -0
- /package/{src → packages/daemon/src}/lib/launch-plan.ts +0 -0
- /package/{src → packages/daemon/src}/lib/session-options.ts +0 -0
- /package/{src → packages/daemon/src}/lib/shell.ts +0 -0
- /package/{src → packages/daemon/src}/lib/sizes.ts +0 -0
- /package/{src → packages/daemon/src}/lib/slugify.ts +0 -0
- /package/{src → packages/daemon/src}/lib/yaml-io.ts +0 -0
- /package/{src → packages/daemon/src}/ls.ts +0 -0
- /package/{src → packages/daemon/src}/ui/index.ts +0 -0
- /package/{src → packages/daemon/src}/ui/terminal/index.ts +0 -0
- /package/{src → packages/daemon/src}/ui/types.ts +0 -0
- /package/{src → packages/daemon/src}/ui/web/base.css +0 -0
- /package/{src → packages/daemon/src}/ui/web/components/Box.tsx +0 -0
- /package/{src → packages/daemon/src}/ui/web/components/Input.tsx +0 -0
- /package/{src → packages/daemon/src}/ui/web/components/ScrollBox.tsx +0 -0
- /package/{src → packages/daemon/src}/ui/web/components/Text.tsx +0 -0
- /package/{src → packages/daemon/src}/ui/web/hooks.ts +0 -0
- /package/{src → packages/daemon/src}/ui/web/index.ts +0 -0
- /package/{src → packages/daemon/src}/ui/web/render.ts +0 -0
- /package/{src → packages/daemon/src}/ui/web/utils/color.ts +0 -0
- /package/{src → packages/daemon/src}/validate.ts +0 -0
- /package/{src → packages/daemon/src}/widgets/explorer/breadcrumbs.tsx +0 -0
- /package/{src → packages/daemon/src}/widgets/explorer/footer.tsx +0 -0
- /package/{src → packages/daemon/src}/widgets/explorer/header.tsx +0 -0
- /package/{src → packages/daemon/src}/widgets/explorer/tree-model.ts +0 -0
- /package/{src → packages/daemon/src}/widgets/lib/config-model.ts +0 -0
- /package/{src → packages/daemon/src}/widgets/lib/files.ts +0 -0
- /package/{src → packages/daemon/src}/widgets/lib/git.ts +0 -0
- /package/{src → packages/daemon/src}/widgets/setup/agent-naming.tsx +0 -0
- /package/{src → packages/daemon/src}/widgets/setup/detect-panel.tsx +0 -0
- /package/{src → packages/daemon/src}/widgets/setup/field-editor.tsx +0 -0
- /package/{src → packages/daemon/src}/widgets/setup/footer.tsx +0 -0
- /package/{src → packages/daemon/src}/widgets/setup/layout-picker.tsx +0 -0
- /package/{src → packages/daemon/src}/widgets/setup/orchestrator-panel.tsx +0 -0
- /package/{src → packages/daemon/src}/widgets/setup/review-panel.tsx +0 -0
- /package/{src → packages/daemon/src}/widgets/setup/setup-model.ts +0 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2 action dispatcher — single Hono route that resolves an action name
|
|
3
|
+
* against the registry, parses input + output with Zod, runs the handler,
|
|
4
|
+
* and broadcasts an `action.complete` WS frame on success.
|
|
5
|
+
*
|
|
6
|
+
* Endpoint: `POST /api/v2/action/:name`
|
|
7
|
+
*
|
|
8
|
+
* Wire envelope:
|
|
9
|
+
* 200 OK { ok: true, result }
|
|
10
|
+
* 200 OK { ok: false, error: { code, message, details? } } (typed app error)
|
|
11
|
+
* 400 malformed JSON body
|
|
12
|
+
* 404 unknown action name (transport-level — name isn't in the registry)
|
|
13
|
+
*
|
|
14
|
+
* `ok: false` is intentionally HTTP 200: it represents a typed application
|
|
15
|
+
* outcome the client is expected to handle. HTTP 4xx/5xx remain reserved
|
|
16
|
+
* for transport-level failures.
|
|
17
|
+
*/
|
|
18
|
+
import type { Context } from "hono";
|
|
19
|
+
export interface DispatcherDeps {
|
|
20
|
+
/** Override the WS broadcaster (tests / non-default daemons). */
|
|
21
|
+
broadcast?: (name: string, result: unknown) => void;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Build the Hono handler. Exposed as a factory so tests can inject a
|
|
25
|
+
* broadcaster and assert on the WS event without mounting a real server.
|
|
26
|
+
*/
|
|
27
|
+
export declare function createActionDispatcher(deps?: DispatcherDeps): (c: Context) => Promise<Response>;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2 action dispatcher — single Hono route that resolves an action name
|
|
3
|
+
* against the registry, parses input + output with Zod, runs the handler,
|
|
4
|
+
* and broadcasts an `action.complete` WS frame on success.
|
|
5
|
+
*
|
|
6
|
+
* Endpoint: `POST /api/v2/action/:name`
|
|
7
|
+
*
|
|
8
|
+
* Wire envelope:
|
|
9
|
+
* 200 OK { ok: true, result }
|
|
10
|
+
* 200 OK { ok: false, error: { code, message, details? } } (typed app error)
|
|
11
|
+
* 400 malformed JSON body
|
|
12
|
+
* 404 unknown action name (transport-level — name isn't in the registry)
|
|
13
|
+
*
|
|
14
|
+
* `ok: false` is intentionally HTTP 200: it represents a typed application
|
|
15
|
+
* outcome the client is expected to handle. HTTP 4xx/5xx remain reserved
|
|
16
|
+
* for transport-level failures.
|
|
17
|
+
*/
|
|
18
|
+
import { isActionName } from "./contract.js";
|
|
19
|
+
import { wrapInternalError } from "./errors.js";
|
|
20
|
+
import { getLooseActionEntry } from "./registry.js";
|
|
21
|
+
import { broadcastActionComplete } from "../ws-events.js";
|
|
22
|
+
function errorEnvelope(err) {
|
|
23
|
+
return { ok: false, error: err.toEnvelope() };
|
|
24
|
+
}
|
|
25
|
+
function zodErrorEnvelope(err) {
|
|
26
|
+
return {
|
|
27
|
+
ok: false,
|
|
28
|
+
error: {
|
|
29
|
+
code: "validation_failed",
|
|
30
|
+
message: "Input failed schema validation",
|
|
31
|
+
details: { issues: err.issues },
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function outputZodErrorEnvelope(err) {
|
|
36
|
+
// A handler returned a value that does not conform to its declared output
|
|
37
|
+
// schema — log loudly and surface as `internal`. The dashboard treats
|
|
38
|
+
// this the same as any other server bug.
|
|
39
|
+
console.error("[actions] handler output failed schema validation", err.issues);
|
|
40
|
+
return {
|
|
41
|
+
ok: false,
|
|
42
|
+
error: {
|
|
43
|
+
code: "internal",
|
|
44
|
+
message: "Handler returned an invalid result",
|
|
45
|
+
details: { issues: err.issues },
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Build the Hono handler. Exposed as a factory so tests can inject a
|
|
51
|
+
* broadcaster and assert on the WS event without mounting a real server.
|
|
52
|
+
*/
|
|
53
|
+
export function createActionDispatcher(deps = {}) {
|
|
54
|
+
const broadcast = deps.broadcast ?? broadcastActionComplete;
|
|
55
|
+
return async function dispatcher(c) {
|
|
56
|
+
const name = c.req.param("name");
|
|
57
|
+
if (!name || !isActionName(name)) {
|
|
58
|
+
return c.json({
|
|
59
|
+
ok: false,
|
|
60
|
+
error: {
|
|
61
|
+
code: "validation_failed",
|
|
62
|
+
message: `Unknown action: ${name}`,
|
|
63
|
+
details: { name },
|
|
64
|
+
},
|
|
65
|
+
}, 404);
|
|
66
|
+
}
|
|
67
|
+
let body;
|
|
68
|
+
try {
|
|
69
|
+
body = await c.req.json();
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
// Malformed JSON is a transport problem, not an app outcome.
|
|
73
|
+
return c.json({
|
|
74
|
+
ok: false,
|
|
75
|
+
error: {
|
|
76
|
+
code: "validation_failed",
|
|
77
|
+
message: `Invalid JSON body: ${err.message ?? String(err)}`,
|
|
78
|
+
},
|
|
79
|
+
}, 400);
|
|
80
|
+
}
|
|
81
|
+
const actionName = name;
|
|
82
|
+
const entry = getLooseActionEntry(actionName);
|
|
83
|
+
const inputParsed = entry.inputSchema.safeParse(body);
|
|
84
|
+
if (!inputParsed.success) {
|
|
85
|
+
return c.json(zodErrorEnvelope(inputParsed.error), 200);
|
|
86
|
+
}
|
|
87
|
+
let result;
|
|
88
|
+
try {
|
|
89
|
+
result = await entry.handler(inputParsed.data);
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
const wrapped = wrapInternalError(err);
|
|
93
|
+
return c.json(errorEnvelope(wrapped), 200);
|
|
94
|
+
}
|
|
95
|
+
const outputParsed = entry.resultSchema.safeParse(result);
|
|
96
|
+
if (!outputParsed.success) {
|
|
97
|
+
return c.json(outputZodErrorEnvelope(outputParsed.error), 200);
|
|
98
|
+
}
|
|
99
|
+
// Fire-and-forget: subscribers learn about the success via the WS bus.
|
|
100
|
+
try {
|
|
101
|
+
broadcast(actionName, outputParsed.data);
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
// Broadcast failure must not turn a successful action into a failure.
|
|
105
|
+
console.error("[actions] broadcast failed:", err);
|
|
106
|
+
}
|
|
107
|
+
return c.json({ ok: true, result: outputParsed.data }, 200);
|
|
108
|
+
};
|
|
109
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed errors for the v2 action dispatcher. Every error path through a
|
|
3
|
+
* handler funnels into one of these so the dispatcher can map to the
|
|
4
|
+
* `{ ok: false, error: { code, message, details? } }` envelope without
|
|
5
|
+
* stringly-typed catches.
|
|
6
|
+
*
|
|
7
|
+
* Codes are stable wire identifiers — never rename without a coordinated
|
|
8
|
+
* dashboard release. New codes go at the bottom of the union.
|
|
9
|
+
*/
|
|
10
|
+
import { TerminalCwdError } from "../../server/pty-bridge.ts";
|
|
11
|
+
export type ActionErrorCode = "project_not_found" | "cwd_not_found" | "cwd_not_directory" | "cwd_stat_failed" | "session_already_running" | "session_not_running" | "launch_failed" | "stop_failed" | "terminal_not_found" | "validation_failed" | "task_not_found" | "goal_not_found" | "milestone_not_found" | "mission_not_set" | "task_dependency_unmet" | "task_already_assigned" | "skill_invalid" | "skill_not_found" | "ide_yml_missing" | "config_path_invalid" | "config_validation_failed" | "validation_assertion_not_found" | "webhook_not_found" | "webhook_test_failed" | "remote_access_restart_failed" | "shutdown_already_in_progress" | "bad_request" | "thread_not_found" | "permission_request_not_found" | "internal";
|
|
12
|
+
export declare class ActionError extends Error {
|
|
13
|
+
readonly code: ActionErrorCode;
|
|
14
|
+
readonly details: unknown | undefined;
|
|
15
|
+
constructor(args: {
|
|
16
|
+
code: ActionErrorCode;
|
|
17
|
+
message: string;
|
|
18
|
+
details?: unknown;
|
|
19
|
+
cause?: unknown;
|
|
20
|
+
});
|
|
21
|
+
toEnvelope(): {
|
|
22
|
+
code: ActionErrorCode;
|
|
23
|
+
message: string;
|
|
24
|
+
details?: unknown;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Translate a {@link TerminalCwdError} into an {@link ActionError} with the
|
|
29
|
+
* matching wire code. The cwd is preserved in `details` so the dashboard can
|
|
30
|
+
* surface it without re-parsing the error message.
|
|
31
|
+
*/
|
|
32
|
+
export declare function actionErrorFromCwdError(err: TerminalCwdError): ActionError;
|
|
33
|
+
/**
|
|
34
|
+
* Wrap an unknown thrown value as an `internal` ActionError. Used as the
|
|
35
|
+
* last-resort branch in dispatcher catch blocks so handlers never leak raw
|
|
36
|
+
* Error stacks across the wire.
|
|
37
|
+
*/
|
|
38
|
+
export declare function wrapInternalError(err: unknown): ActionError;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed errors for the v2 action dispatcher. Every error path through a
|
|
3
|
+
* handler funnels into one of these so the dispatcher can map to the
|
|
4
|
+
* `{ ok: false, error: { code, message, details? } }` envelope without
|
|
5
|
+
* stringly-typed catches.
|
|
6
|
+
*
|
|
7
|
+
* Codes are stable wire identifiers — never rename without a coordinated
|
|
8
|
+
* dashboard release. New codes go at the bottom of the union.
|
|
9
|
+
*/
|
|
10
|
+
import { TerminalCwdError } from "../../server/pty-bridge.js";
|
|
11
|
+
export class ActionError extends Error {
|
|
12
|
+
code;
|
|
13
|
+
details;
|
|
14
|
+
constructor(args) {
|
|
15
|
+
super(args.message, args.cause !== undefined ? { cause: args.cause } : undefined);
|
|
16
|
+
this.name = "ActionError";
|
|
17
|
+
this.code = args.code;
|
|
18
|
+
this.details = args.details;
|
|
19
|
+
}
|
|
20
|
+
toEnvelope() {
|
|
21
|
+
return this.details !== undefined
|
|
22
|
+
? { code: this.code, message: this.message, details: this.details }
|
|
23
|
+
: { code: this.code, message: this.message };
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
const CWD_REASON_TO_CODE = {
|
|
27
|
+
notFound: "cwd_not_found",
|
|
28
|
+
notDirectory: "cwd_not_directory",
|
|
29
|
+
statFailed: "cwd_stat_failed",
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Translate a {@link TerminalCwdError} into an {@link ActionError} with the
|
|
33
|
+
* matching wire code. The cwd is preserved in `details` so the dashboard can
|
|
34
|
+
* surface it without re-parsing the error message.
|
|
35
|
+
*/
|
|
36
|
+
export function actionErrorFromCwdError(err) {
|
|
37
|
+
return new ActionError({
|
|
38
|
+
code: CWD_REASON_TO_CODE[err.reason],
|
|
39
|
+
message: err.message,
|
|
40
|
+
details: { cwd: err.cwd, reason: err.reason },
|
|
41
|
+
cause: err,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Wrap an unknown thrown value as an `internal` ActionError. Used as the
|
|
46
|
+
* last-resort branch in dispatcher catch blocks so handlers never leak raw
|
|
47
|
+
* Error stacks across the wire.
|
|
48
|
+
*/
|
|
49
|
+
export function wrapInternalError(err) {
|
|
50
|
+
if (err instanceof ActionError)
|
|
51
|
+
return err;
|
|
52
|
+
if (err instanceof TerminalCwdError)
|
|
53
|
+
return actionErrorFromCwdError(err);
|
|
54
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
55
|
+
return new ActionError({ code: "internal", message, cause: err });
|
|
56
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type ProjectResolverDeps } from "./_resolve-project.ts";
|
|
2
|
+
export interface ProjectContextDeps extends ProjectResolverDeps {
|
|
3
|
+
cwd?: string;
|
|
4
|
+
}
|
|
5
|
+
export interface ProjectContextInput {
|
|
6
|
+
projectName?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ProjectContext {
|
|
9
|
+
dir: string;
|
|
10
|
+
sessionName: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function resolveProjectContext(input: ProjectContextInput, deps?: ProjectContextDeps): ProjectContext;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { basename } from "node:path";
|
|
2
|
+
import { getSessionName } from "../../../lib/yaml-io.js";
|
|
3
|
+
import { resolveProject } from "./_resolve-project.js";
|
|
4
|
+
export function resolveProjectContext(input, deps = {}) {
|
|
5
|
+
if (input.projectName) {
|
|
6
|
+
const project = resolveProject(input.projectName, deps);
|
|
7
|
+
return { dir: project.dir, sessionName: project.sessionName };
|
|
8
|
+
}
|
|
9
|
+
const dir = deps.cwd ?? process.cwd();
|
|
10
|
+
const sessionName = getSessionName(dir).name || basename(dir);
|
|
11
|
+
return { dir, sessionName };
|
|
12
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared helper: resolve a registered project by name and project the
|
|
3
|
+
* fields the action handlers actually consume.
|
|
4
|
+
*
|
|
5
|
+
* Lives in handlers/ so the registry stays the only public surface; tests
|
|
6
|
+
* import from here directly.
|
|
7
|
+
*/
|
|
8
|
+
import type { RegisteredProject } from "../../../schemas/registry.ts";
|
|
9
|
+
export interface ResolvedProject {
|
|
10
|
+
name: string;
|
|
11
|
+
dir: string;
|
|
12
|
+
sessionName: string;
|
|
13
|
+
/**
|
|
14
|
+
* `true` when the project was resolved from a live tmux session
|
|
15
|
+
* (rather than the registry). Useful for handlers that want to
|
|
16
|
+
* auto-register on first action — out of scope for this slice but
|
|
17
|
+
* makes the intent explicit at the boundary.
|
|
18
|
+
*/
|
|
19
|
+
fromLiveSession: boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface ProjectResolverDeps {
|
|
22
|
+
/** Override for tests — must satisfy the same contract as `getProject`. */
|
|
23
|
+
getProject?: (name: string) => RegisteredProject | null;
|
|
24
|
+
/** Override the live-session existence probe. */
|
|
25
|
+
hasSession?: (session: string) => boolean;
|
|
26
|
+
/** Override the live-session cwd lookup. */
|
|
27
|
+
getSessionCwd?: (session: string) => string | null;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Resolve a project by name. The registry is the canonical source of
|
|
31
|
+
* truth, but as a fallback we also accept a live tmux session by the
|
|
32
|
+
* same name — the dashboard merges registered projects + live sessions
|
|
33
|
+
* in its sidebar, so action handlers must accept either. Throws an
|
|
34
|
+
* {@link ActionError} with code `project_not_found` when neither path
|
|
35
|
+
* succeeds.
|
|
36
|
+
*
|
|
37
|
+
* Note: the registry does not currently persist a session name distinct
|
|
38
|
+
* from the project name, so the session name returned here mirrors the
|
|
39
|
+
* project name. If they diverge in the future, this is the only call site
|
|
40
|
+
* that needs to change.
|
|
41
|
+
*/
|
|
42
|
+
export declare function resolveProject(name: string, deps?: ProjectResolverDeps): ResolvedProject;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared helper: resolve a registered project by name and project the
|
|
3
|
+
* fields the action handlers actually consume.
|
|
4
|
+
*
|
|
5
|
+
* Lives in handlers/ so the registry stays the only public surface; tests
|
|
6
|
+
* import from here directly.
|
|
7
|
+
*/
|
|
8
|
+
import { getProject as getRegisteredProject } from "../../../lib/project-registry.js";
|
|
9
|
+
import { getSessionCwd as getSessionCwdDefault, hasSession as hasSessionDefault, } from "@tmux-ide/tmux-bridge";
|
|
10
|
+
import { ActionError } from "../errors.js";
|
|
11
|
+
/**
|
|
12
|
+
* Resolve a project by name. The registry is the canonical source of
|
|
13
|
+
* truth, but as a fallback we also accept a live tmux session by the
|
|
14
|
+
* same name — the dashboard merges registered projects + live sessions
|
|
15
|
+
* in its sidebar, so action handlers must accept either. Throws an
|
|
16
|
+
* {@link ActionError} with code `project_not_found` when neither path
|
|
17
|
+
* succeeds.
|
|
18
|
+
*
|
|
19
|
+
* Note: the registry does not currently persist a session name distinct
|
|
20
|
+
* from the project name, so the session name returned here mirrors the
|
|
21
|
+
* project name. If they diverge in the future, this is the only call site
|
|
22
|
+
* that needs to change.
|
|
23
|
+
*/
|
|
24
|
+
export function resolveProject(name, deps = {}) {
|
|
25
|
+
const lookup = deps.getProject ?? getRegisteredProject;
|
|
26
|
+
const project = lookup(name);
|
|
27
|
+
if (project) {
|
|
28
|
+
return {
|
|
29
|
+
name: project.name,
|
|
30
|
+
dir: project.dir,
|
|
31
|
+
sessionName: project.name,
|
|
32
|
+
fromLiveSession: false,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
// Registry miss — fall back to a live tmux session of the same name.
|
|
36
|
+
const hasSession = deps.hasSession ?? hasSessionDefault;
|
|
37
|
+
if (hasSession(name)) {
|
|
38
|
+
const cwd = (deps.getSessionCwd ?? getSessionCwdDefault)(name);
|
|
39
|
+
if (cwd) {
|
|
40
|
+
return { name, dir: cwd, sessionName: name, fromLiveSession: true };
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
throw new ActionError({
|
|
44
|
+
code: "project_not_found",
|
|
45
|
+
message: `Project "${name}" not found in registry or as a live tmux session`,
|
|
46
|
+
details: { name },
|
|
47
|
+
});
|
|
48
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type AppSettings } from "../../../lib/app-settings.ts";
|
|
2
|
+
import type { ActionInput, ActionResult } from "../contract.ts";
|
|
3
|
+
export interface RemoteAccessRestartRequest {
|
|
4
|
+
enabled: boolean;
|
|
5
|
+
bindHostname: "0.0.0.0" | "127.0.0.1";
|
|
6
|
+
token: string | null;
|
|
7
|
+
port?: number;
|
|
8
|
+
}
|
|
9
|
+
export interface RemoteAccessRestartResult {
|
|
10
|
+
port?: number;
|
|
11
|
+
host?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface AppSetRemoteAccessDeps {
|
|
14
|
+
readSettings?: () => AppSettings;
|
|
15
|
+
writeSettings?: (next: AppSettings) => void;
|
|
16
|
+
generateToken?: () => string;
|
|
17
|
+
restartDaemon?: (request: RemoteAccessRestartRequest) => Promise<RemoteAccessRestartResult> | RemoteAccessRestartResult;
|
|
18
|
+
deferRestart?: (restart: () => void) => void;
|
|
19
|
+
port?: number;
|
|
20
|
+
host?: string;
|
|
21
|
+
}
|
|
22
|
+
export declare function setRemoteAccessRestartBackend(backend: ((request: RemoteAccessRestartRequest) => Promise<RemoteAccessRestartResult> | RemoteAccessRestartResult) | null): void;
|
|
23
|
+
export declare function appSetRemoteAccessHandler(input: ActionInput<"app.setRemoteAccess">, deps?: AppSetRemoteAccessDeps): Promise<ActionResult<"app.setRemoteAccess">>;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { hostname, networkInterfaces } from "node:os";
|
|
2
|
+
import { generateAuthToken } from "../../../lib/auth-token.js";
|
|
3
|
+
import { readAppSettings, writeAppSettings } from "../../../lib/app-settings.js";
|
|
4
|
+
let remoteAccessRestartBackend = null;
|
|
5
|
+
export function setRemoteAccessRestartBackend(backend) {
|
|
6
|
+
remoteAccessRestartBackend = backend;
|
|
7
|
+
}
|
|
8
|
+
function currentPort(deps) {
|
|
9
|
+
const envPort = Number(process.env.TMUX_IDE_DAEMON_PORT);
|
|
10
|
+
return deps.port ?? (Number.isInteger(envPort) && envPort > 0 ? envPort : 6060);
|
|
11
|
+
}
|
|
12
|
+
function primaryLanHost() {
|
|
13
|
+
const interfaces = networkInterfaces();
|
|
14
|
+
for (const entries of Object.values(interfaces)) {
|
|
15
|
+
for (const entry of entries ?? []) {
|
|
16
|
+
if (entry.family === "IPv4" && !entry.internal)
|
|
17
|
+
return entry.address;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return hostname();
|
|
21
|
+
}
|
|
22
|
+
function buildUrl(host, port) {
|
|
23
|
+
return `http://${host}:${port}`;
|
|
24
|
+
}
|
|
25
|
+
function defaultDeferRestart(restart) {
|
|
26
|
+
setImmediate(restart);
|
|
27
|
+
}
|
|
28
|
+
export async function appSetRemoteAccessHandler(input, deps = {}) {
|
|
29
|
+
const readSettings = deps.readSettings ?? readAppSettings;
|
|
30
|
+
const writeSettings = deps.writeSettings ?? writeAppSettings;
|
|
31
|
+
const nextEnabled = input.enabled;
|
|
32
|
+
const current = readSettings();
|
|
33
|
+
const token = nextEnabled
|
|
34
|
+
? (current.remoteAccess.token ?? (deps.generateToken ?? generateAuthToken)())
|
|
35
|
+
: null;
|
|
36
|
+
const next = {
|
|
37
|
+
...current,
|
|
38
|
+
remoteAccess: { enabled: nextEnabled, token },
|
|
39
|
+
};
|
|
40
|
+
writeSettings(next);
|
|
41
|
+
const port = currentPort(deps);
|
|
42
|
+
const request = {
|
|
43
|
+
enabled: nextEnabled,
|
|
44
|
+
bindHostname: nextEnabled ? "0.0.0.0" : "127.0.0.1",
|
|
45
|
+
token,
|
|
46
|
+
port,
|
|
47
|
+
};
|
|
48
|
+
const restartDaemon = deps.restartDaemon ?? remoteAccessRestartBackend;
|
|
49
|
+
if (restartDaemon) {
|
|
50
|
+
(deps.deferRestart ?? defaultDeferRestart)(() => {
|
|
51
|
+
void Promise.resolve(restartDaemon(request)).catch((err) => {
|
|
52
|
+
console.error(`[actions] Failed to restart daemon for remote access: ${err.message ?? String(err)}`);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
if (!nextEnabled) {
|
|
57
|
+
return { enabled: false, url: null, token: null, qrPayload: null };
|
|
58
|
+
}
|
|
59
|
+
const host = deps.host ?? primaryLanHost();
|
|
60
|
+
const url = buildUrl(host, port);
|
|
61
|
+
return {
|
|
62
|
+
enabled: true,
|
|
63
|
+
url,
|
|
64
|
+
token,
|
|
65
|
+
qrPayload: `${url}?token=${encodeURIComponent(token ?? "")}`,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ActionInput, ActionResult } from "../contract.ts";
|
|
2
|
+
import { type ProjectContextDeps } from "./_project-context.ts";
|
|
3
|
+
interface ConfigActionDeps extends ProjectContextDeps {
|
|
4
|
+
broadcastConfigChanged?: (sessionName: string) => void;
|
|
5
|
+
}
|
|
6
|
+
export declare function configSetHandler(input: ActionInput<"config.set">, deps?: ConfigActionDeps): ActionResult<"config.set">;
|
|
7
|
+
export declare function configAddPaneHandler(input: ActionInput<"config.addPane">, deps?: ConfigActionDeps): ActionResult<"config.addPane">;
|
|
8
|
+
export declare function configRemovePaneHandler(input: ActionInput<"config.removePane">, deps?: ConfigActionDeps): ActionResult<"config.removePane">;
|
|
9
|
+
export declare function configAddRowHandler(input: ActionInput<"config.addRow">, deps?: ConfigActionDeps): ActionResult<"config.addRow">;
|
|
10
|
+
export declare function configEnableTeamHandler(input: ActionInput<"config.enableTeam">, deps?: ConfigActionDeps): ActionResult<"config.enableTeam">;
|
|
11
|
+
export declare function configDisableTeamHandler(input: ActionInput<"config.disableTeam">, deps?: ConfigActionDeps): ActionResult<"config.disableTeam">;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { configAddPane, configAddRow, configDisableTeam, configEnableTeam, configRemovePane, configSetValue, } from "../../../config.js";
|
|
4
|
+
import { broadcastConfigChanged as broadcastConfigChangedDefault } from "../../ws-events.js";
|
|
5
|
+
import { ActionError } from "../errors.js";
|
|
6
|
+
import { resolveProjectContext } from "./_project-context.js";
|
|
7
|
+
function mutateConfigAction(input, deps, fn) {
|
|
8
|
+
const context = resolveProjectContext(input, deps);
|
|
9
|
+
if (!existsSync(join(context.dir, "ide.yml"))) {
|
|
10
|
+
throw new ActionError({
|
|
11
|
+
code: "ide_yml_missing",
|
|
12
|
+
message: "ide.yml was not found",
|
|
13
|
+
details: { dir: context.dir },
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
const result = fn(context.dir);
|
|
18
|
+
(deps.broadcastConfigChanged ?? broadcastConfigChangedDefault)(context.sessionName);
|
|
19
|
+
return result;
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
const message = err.message ?? String(err);
|
|
23
|
+
throw new ActionError({
|
|
24
|
+
code: message.toLowerCase().includes("path")
|
|
25
|
+
? "config_path_invalid"
|
|
26
|
+
: "config_validation_failed",
|
|
27
|
+
message,
|
|
28
|
+
cause: err,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export function configSetHandler(input, deps = {}) {
|
|
33
|
+
const config = mutateConfigAction(input, deps, (dir) => configSetValue(dir, input.path, input.value));
|
|
34
|
+
return { config };
|
|
35
|
+
}
|
|
36
|
+
export function configAddPaneHandler(input, deps = {}) {
|
|
37
|
+
const pane = {
|
|
38
|
+
title: input.title,
|
|
39
|
+
command: input.command,
|
|
40
|
+
type: input.type,
|
|
41
|
+
target: input.target,
|
|
42
|
+
dir: input.dir,
|
|
43
|
+
size: input.size,
|
|
44
|
+
focus: input.focus,
|
|
45
|
+
env: input.env,
|
|
46
|
+
role: input.role,
|
|
47
|
+
task: input.task,
|
|
48
|
+
specialty: input.specialty,
|
|
49
|
+
skill: input.skill,
|
|
50
|
+
};
|
|
51
|
+
const config = mutateConfigAction(input, deps, (dir) => configAddPane(dir, input.rowIndex, pane));
|
|
52
|
+
return { config };
|
|
53
|
+
}
|
|
54
|
+
export function configRemovePaneHandler(input, deps = {}) {
|
|
55
|
+
const config = mutateConfigAction(input, deps, (dir) => configRemovePane(dir, input.rowIndex, input.paneIndex)).config;
|
|
56
|
+
return { config };
|
|
57
|
+
}
|
|
58
|
+
export function configAddRowHandler(input, deps = {}) {
|
|
59
|
+
const config = mutateConfigAction(input, deps, (dir) => configAddRow(dir, input.size));
|
|
60
|
+
return { config };
|
|
61
|
+
}
|
|
62
|
+
export function configEnableTeamHandler(input, deps = {}) {
|
|
63
|
+
const config = mutateConfigAction(input, deps, (dir) => configEnableTeam(dir, input.name));
|
|
64
|
+
return { config };
|
|
65
|
+
}
|
|
66
|
+
export function configDisableTeamHandler(input, deps = {}) {
|
|
67
|
+
const config = mutateConfigAction(input, deps, (dir) => configDisableTeam(dir));
|
|
68
|
+
return { config };
|
|
69
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ActionInput, ActionResult } from "../contract.ts";
|
|
2
|
+
export interface DaemonShutdownDeps {
|
|
3
|
+
shutdown?: (reason: string | null) => Promise<void> | void;
|
|
4
|
+
}
|
|
5
|
+
export declare function setDaemonShutdownBackend(backend: ((reason: string | null) => Promise<void> | void) | null): void;
|
|
6
|
+
export declare function daemonShutdownHandler(input: ActionInput<"daemon.shutdown">, deps?: DaemonShutdownDeps): ActionResult<"daemon.shutdown">;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ActionError } from "../errors.js";
|
|
2
|
+
let shutdownBackend = null;
|
|
3
|
+
let shutdownInProgress = false;
|
|
4
|
+
export function setDaemonShutdownBackend(backend) {
|
|
5
|
+
shutdownBackend = backend;
|
|
6
|
+
if (!backend)
|
|
7
|
+
shutdownInProgress = false;
|
|
8
|
+
}
|
|
9
|
+
export function daemonShutdownHandler(input, deps = {}) {
|
|
10
|
+
if (shutdownInProgress) {
|
|
11
|
+
throw new ActionError({
|
|
12
|
+
code: "shutdown_already_in_progress",
|
|
13
|
+
message: "Daemon shutdown is already in progress",
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
shutdownInProgress = true;
|
|
17
|
+
const shutdown = deps.shutdown ?? shutdownBackend;
|
|
18
|
+
process.nextTick(() => {
|
|
19
|
+
void Promise.resolve(shutdown?.(input.reason ?? null)).catch((err) => {
|
|
20
|
+
console.error("[daemon] shutdown action failed:", err);
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
return { stopping: true };
|
|
24
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ProjectActivationOptions } from "../../../lib/active-projects.ts";
|
|
2
|
+
import type { ActionInput, ActionResult } from "../contract.ts";
|
|
3
|
+
import { type ProjectResolverDeps } from "./_resolve-project.ts";
|
|
4
|
+
export interface ProjectActivateDeps extends ProjectResolverDeps {
|
|
5
|
+
activateProject?: (name: string, options?: ProjectActivationOptions) => Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
export declare function projectActivateHandler(input: ActionInput<"project.activate">, deps?: ProjectActivateDeps): Promise<ActionResult<"project.activate">>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { activateProject as activateProjectDefault } from "../../../lib/active-projects.js";
|
|
2
|
+
import { ActionError } from "../errors.js";
|
|
3
|
+
import { resolveProject } from "./_resolve-project.js";
|
|
4
|
+
export async function projectActivateHandler(input, deps = {}) {
|
|
5
|
+
const project = resolveProject(input.name, deps);
|
|
6
|
+
const activateProject = deps.activateProject ?? activateProjectDefault;
|
|
7
|
+
try {
|
|
8
|
+
await activateProject(project.name);
|
|
9
|
+
}
|
|
10
|
+
catch (err) {
|
|
11
|
+
throw new ActionError({
|
|
12
|
+
code: "internal",
|
|
13
|
+
message: `Failed to activate project "${project.name}": ${err.message ?? String(err)}`,
|
|
14
|
+
details: { projectName: project.name },
|
|
15
|
+
cause: err,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
return { active: true, projectName: project.name };
|
|
19
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handler: `project.launch`.
|
|
3
|
+
*
|
|
4
|
+
* Idempotent programmatic launch. Resolves the project from the registry,
|
|
5
|
+
* checks whether a session is already running, and returns
|
|
6
|
+
* `{ started: false }` without invoking the launcher when so. Otherwise
|
|
7
|
+
* delegates to `src/launch.ts` with `attach: false`.
|
|
8
|
+
*/
|
|
9
|
+
import { type ActionInput, type ActionResult } from "../contract.ts";
|
|
10
|
+
import { type ProjectResolverDeps } from "./_resolve-project.ts";
|
|
11
|
+
export interface ProjectLaunchDeps extends ProjectResolverDeps {
|
|
12
|
+
hasSession?: (session: string) => boolean;
|
|
13
|
+
launch?: (dir: string, options: {
|
|
14
|
+
json: boolean;
|
|
15
|
+
attach: boolean;
|
|
16
|
+
}) => Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
export declare function projectLaunchHandler(input: ActionInput<"project.launch">, deps?: ProjectLaunchDeps): Promise<ActionResult<"project.launch">>;
|