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,58 @@
|
|
|
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 { hasSession as hasSessionDefault } from "@tmux-ide/tmux-bridge";
|
|
10
|
+
import { launch as launchDefault } from "../../../launch.js";
|
|
11
|
+
import { ActionError } from "../errors.js";
|
|
12
|
+
import { resolveProject } from "./_resolve-project.js";
|
|
13
|
+
import { getDefaultWorkspaceRegistry } from "../../../lib/workspace-registry.js";
|
|
14
|
+
/**
|
|
15
|
+
* Ensure the workspace registry knows about this project. The project
|
|
16
|
+
* registry (`registerProject`) only updates the project-list — but
|
|
17
|
+
* `discoverSessions` / `/api/project/:name` consult the WORKSPACE registry
|
|
18
|
+
* before returning anything. Without this sync, every dashboard fetch
|
|
19
|
+
* 404s for projects that weren't passed as the daemon's primary sessionName.
|
|
20
|
+
*/
|
|
21
|
+
function ensureWorkspaceRegistered(name, sessionName, dir) {
|
|
22
|
+
const reg = getDefaultWorkspaceRegistry();
|
|
23
|
+
if (reg.has(name))
|
|
24
|
+
return;
|
|
25
|
+
try {
|
|
26
|
+
reg.add({ name, sessionName, projectDir: dir });
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
// ALREADY_EXISTS or persistence error — non-fatal; the next discover
|
|
30
|
+
// pass will pick it up if persistence eventually succeeds.
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export async function projectLaunchHandler(input, deps = {}) {
|
|
34
|
+
const project = resolveProject(input.name, deps);
|
|
35
|
+
const hasSession = deps.hasSession ?? hasSessionDefault;
|
|
36
|
+
if (hasSession(project.sessionName)) {
|
|
37
|
+
// Session already running — but the workspace registry may still be
|
|
38
|
+
// stale (e.g. tmux session created via curl, or daemon restarted).
|
|
39
|
+
// Sync before returning so /api/project/:name resolves.
|
|
40
|
+
ensureWorkspaceRegistered(project.name, project.sessionName, project.dir);
|
|
41
|
+
return { sessionName: project.sessionName, started: false };
|
|
42
|
+
}
|
|
43
|
+
const launch = deps.launch ?? launchDefault;
|
|
44
|
+
try {
|
|
45
|
+
await launch(project.dir, { json: false, attach: false });
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
throw new ActionError({
|
|
49
|
+
code: "launch_failed",
|
|
50
|
+
message: `Failed to launch session "${project.sessionName}": ${err.message ?? String(err)}`,
|
|
51
|
+
details: { sessionName: project.sessionName, dir: project.dir },
|
|
52
|
+
cause: err,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
// Freshly launched — workspace registry definitely needs the entry.
|
|
56
|
+
ensureWorkspaceRegistered(project.name, project.sessionName, project.dir);
|
|
57
|
+
return { sessionName: project.sessionName, started: true };
|
|
58
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handler: `project.openTerminal`.
|
|
3
|
+
*
|
|
4
|
+
* Resolves the project's cwd from the registry, ensures the tmux session is
|
|
5
|
+
* running (launching it if necessary), and asserts the resolved cwd is a
|
|
6
|
+
* real directory. Returns the dashboard's stable terminal tab id together
|
|
7
|
+
* with the resolved cwd so the dashboard does not need to stitch together
|
|
8
|
+
* the registry / session / cwd paths itself.
|
|
9
|
+
*
|
|
10
|
+
* This is the action that swallows the seam where the dashboard previously
|
|
11
|
+
* juggled `/api/projects` + `/api/project/:name` to figure out where to
|
|
12
|
+
* open a terminal.
|
|
13
|
+
*/
|
|
14
|
+
import type { Stats } from "node:fs";
|
|
15
|
+
import { type ActionInput, type ActionResult } from "../contract.ts";
|
|
16
|
+
import { type ProjectResolverDeps } from "./_resolve-project.ts";
|
|
17
|
+
/**
|
|
18
|
+
* Build the dashboard-facing terminal tab id for a session's default
|
|
19
|
+
* terminal. Mirrors the layout state convention `terminal:<session>:default`.
|
|
20
|
+
* Centralised here so both this handler and tests share the source of truth.
|
|
21
|
+
*/
|
|
22
|
+
export declare function defaultTerminalTabId(sessionName: string): string;
|
|
23
|
+
export interface ProjectOpenTerminalDeps extends ProjectResolverDeps {
|
|
24
|
+
hasSession?: (session: string) => boolean;
|
|
25
|
+
launch?: (dir: string, options: {
|
|
26
|
+
json: boolean;
|
|
27
|
+
attach: boolean;
|
|
28
|
+
}) => Promise<void>;
|
|
29
|
+
statCwd?: (cwd: string) => Stats;
|
|
30
|
+
activateProject?: (name: string) => Promise<void>;
|
|
31
|
+
}
|
|
32
|
+
export declare function projectOpenTerminalHandler(input: ActionInput<"project.openTerminal">, deps?: ProjectOpenTerminalDeps): Promise<ActionResult<"project.openTerminal">>;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handler: `project.openTerminal`.
|
|
3
|
+
*
|
|
4
|
+
* Resolves the project's cwd from the registry, ensures the tmux session is
|
|
5
|
+
* running (launching it if necessary), and asserts the resolved cwd is a
|
|
6
|
+
* real directory. Returns the dashboard's stable terminal tab id together
|
|
7
|
+
* with the resolved cwd so the dashboard does not need to stitch together
|
|
8
|
+
* the registry / session / cwd paths itself.
|
|
9
|
+
*
|
|
10
|
+
* This is the action that swallows the seam where the dashboard previously
|
|
11
|
+
* juggled `/api/projects` + `/api/project/:name` to figure out where to
|
|
12
|
+
* open a terminal.
|
|
13
|
+
*/
|
|
14
|
+
import { hasSession as hasSessionDefault } from "@tmux-ide/tmux-bridge";
|
|
15
|
+
import { launch as launchDefault } from "../../../launch.js";
|
|
16
|
+
import { activateProject as activateProjectDefault } from "../../../lib/active-projects.js";
|
|
17
|
+
import { assertValidCwd, TerminalCwdError } from "../../../server/pty-bridge.js";
|
|
18
|
+
import { ActionError, actionErrorFromCwdError } from "../errors.js";
|
|
19
|
+
import { resolveProject } from "./_resolve-project.js";
|
|
20
|
+
const TERMINAL_TAB_ID_PREFIX = "terminal";
|
|
21
|
+
const TERMINAL_TAB_ID_SUFFIX = "default";
|
|
22
|
+
/**
|
|
23
|
+
* Build the dashboard-facing terminal tab id for a session's default
|
|
24
|
+
* terminal. Mirrors the layout state convention `terminal:<session>:default`.
|
|
25
|
+
* Centralised here so both this handler and tests share the source of truth.
|
|
26
|
+
*/
|
|
27
|
+
export function defaultTerminalTabId(sessionName) {
|
|
28
|
+
return `${TERMINAL_TAB_ID_PREFIX}:${sessionName}:${TERMINAL_TAB_ID_SUFFIX}`;
|
|
29
|
+
}
|
|
30
|
+
export async function projectOpenTerminalHandler(input, deps = {}) {
|
|
31
|
+
const project = resolveProject(input.name, deps);
|
|
32
|
+
const activateProject = deps.activateProject ?? activateProjectDefault;
|
|
33
|
+
await activateProject(project.name);
|
|
34
|
+
// Always validate cwd up-front. A missing/broken project dir is the most
|
|
35
|
+
// common cause of the bugs this slice exists to eliminate.
|
|
36
|
+
try {
|
|
37
|
+
assertValidCwd(project.dir, deps.statCwd);
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
if (err instanceof TerminalCwdError) {
|
|
41
|
+
throw actionErrorFromCwdError(err);
|
|
42
|
+
}
|
|
43
|
+
throw err;
|
|
44
|
+
}
|
|
45
|
+
const hasSession = deps.hasSession ?? hasSessionDefault;
|
|
46
|
+
const launch = deps.launch ?? launchDefault;
|
|
47
|
+
let launched = false;
|
|
48
|
+
if (!hasSession(project.sessionName)) {
|
|
49
|
+
try {
|
|
50
|
+
// attach: false — we run inside the daemon HTTP server, not a TTY.
|
|
51
|
+
await launch(project.dir, { json: false, attach: false });
|
|
52
|
+
launched = true;
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
throw new ActionError({
|
|
56
|
+
code: "launch_failed",
|
|
57
|
+
message: `Failed to launch session "${project.sessionName}": ${err.message ?? String(err)}`,
|
|
58
|
+
details: { sessionName: project.sessionName, dir: project.dir },
|
|
59
|
+
cause: err,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
sessionName: project.sessionName,
|
|
65
|
+
cwd: project.dir,
|
|
66
|
+
terminalTabId: defaultTerminalTabId(project.sessionName),
|
|
67
|
+
launched,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handler: `project.restart`.
|
|
3
|
+
*
|
|
4
|
+
* Programmatic version of `tmux-ide restart`. Stops the session monitor +
|
|
5
|
+
* kills the existing tmux session (when present), then re-launches with
|
|
6
|
+
* `attach: false`. Always reports `restarted: true` on success — the call
|
|
7
|
+
* is meaningful whether or not a session was previously running.
|
|
8
|
+
*/
|
|
9
|
+
import { type ActionInput, type ActionResult } from "../contract.ts";
|
|
10
|
+
import { type ProjectResolverDeps } from "./_resolve-project.ts";
|
|
11
|
+
export interface ProjectRestartDeps extends ProjectResolverDeps {
|
|
12
|
+
restart?: (dir: string, options: {
|
|
13
|
+
json?: boolean;
|
|
14
|
+
attach?: boolean;
|
|
15
|
+
}) => Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
export declare function projectRestartHandler(input: ActionInput<"project.restart">, deps?: ProjectRestartDeps): Promise<ActionResult<"project.restart">>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handler: `project.restart`.
|
|
3
|
+
*
|
|
4
|
+
* Programmatic version of `tmux-ide restart`. Stops the session monitor +
|
|
5
|
+
* kills the existing tmux session (when present), then re-launches with
|
|
6
|
+
* `attach: false`. Always reports `restarted: true` on success — the call
|
|
7
|
+
* is meaningful whether or not a session was previously running.
|
|
8
|
+
*/
|
|
9
|
+
import { restart as restartDefault } from "../../../restart.js";
|
|
10
|
+
import { ActionError } from "../errors.js";
|
|
11
|
+
import { resolveProject } from "./_resolve-project.js";
|
|
12
|
+
export async function projectRestartHandler(input, deps = {}) {
|
|
13
|
+
const project = resolveProject(input.name, deps);
|
|
14
|
+
const restart = deps.restart ?? restartDefault;
|
|
15
|
+
try {
|
|
16
|
+
await restart(project.dir, { json: false, attach: false });
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
throw new ActionError({
|
|
20
|
+
code: "launch_failed",
|
|
21
|
+
message: `Failed to restart session "${project.sessionName}": ${err.message ?? String(err)}`,
|
|
22
|
+
details: { sessionName: project.sessionName, dir: project.dir },
|
|
23
|
+
cause: err,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
return { sessionName: project.sessionName, restarted: true };
|
|
27
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handler: `project.stop`.
|
|
3
|
+
*
|
|
4
|
+
* Wraps the CLI `tmux-ide stop` flow programmatically: stop the session
|
|
5
|
+
* monitor, then `killSession`. Idempotent —
|
|
6
|
+
* returns `{ stopped: false }` when no session was running rather than
|
|
7
|
+
* throwing, so the dashboard can call this freely.
|
|
8
|
+
*/
|
|
9
|
+
import { type ActionInput, type ActionResult } from "../contract.ts";
|
|
10
|
+
import { type ProjectResolverDeps } from "./_resolve-project.ts";
|
|
11
|
+
export interface ProjectStopDeps extends ProjectResolverDeps {
|
|
12
|
+
hasSession?: (session: string) => boolean;
|
|
13
|
+
killSession?: (session: string) => {
|
|
14
|
+
stopped: boolean;
|
|
15
|
+
reason: string | null;
|
|
16
|
+
};
|
|
17
|
+
stopSessionMonitor?: (session: string) => void;
|
|
18
|
+
/**
|
|
19
|
+
* Legacy hook retained for tests. Per-session daemon cleanup is no longer
|
|
20
|
+
* needed because the canonical daemon is app/headless owned.
|
|
21
|
+
*/
|
|
22
|
+
killOrphanDaemons?: (session: string) => void;
|
|
23
|
+
}
|
|
24
|
+
export declare function projectStopHandler(input: ActionInput<"project.stop">, deps?: ProjectStopDeps): Promise<ActionResult<"project.stop">>;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handler: `project.stop`.
|
|
3
|
+
*
|
|
4
|
+
* Wraps the CLI `tmux-ide stop` flow programmatically: stop the session
|
|
5
|
+
* monitor, then `killSession`. Idempotent —
|
|
6
|
+
* returns `{ stopped: false }` when no session was running rather than
|
|
7
|
+
* throwing, so the dashboard can call this freely.
|
|
8
|
+
*/
|
|
9
|
+
import { hasSession as hasSessionDefault, killSession as killSessionDefault, stopSessionMonitor as stopSessionMonitorDefault, } from "@tmux-ide/tmux-bridge";
|
|
10
|
+
import { ActionError } from "../errors.js";
|
|
11
|
+
import { resolveProject } from "./_resolve-project.js";
|
|
12
|
+
function defaultKillOrphanDaemons(_session) {
|
|
13
|
+
// No-op: per-session daemons are no longer spawned.
|
|
14
|
+
}
|
|
15
|
+
export async function projectStopHandler(input, deps = {}) {
|
|
16
|
+
const project = resolveProject(input.name, deps);
|
|
17
|
+
const hasSession = deps.hasSession ?? hasSessionDefault;
|
|
18
|
+
if (!hasSession(project.sessionName)) {
|
|
19
|
+
return { sessionName: project.sessionName, stopped: false };
|
|
20
|
+
}
|
|
21
|
+
const stopSessionMonitor = deps.stopSessionMonitor ?? stopSessionMonitorDefault;
|
|
22
|
+
const killSession = deps.killSession ?? killSessionDefault;
|
|
23
|
+
const killOrphanDaemons = deps.killOrphanDaemons ?? defaultKillOrphanDaemons;
|
|
24
|
+
try {
|
|
25
|
+
stopSessionMonitor(project.sessionName);
|
|
26
|
+
killOrphanDaemons(project.sessionName);
|
|
27
|
+
const result = killSession(project.sessionName);
|
|
28
|
+
return { sessionName: project.sessionName, stopped: result.stopped };
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
throw new ActionError({
|
|
32
|
+
code: "stop_failed",
|
|
33
|
+
message: `Failed to stop session "${project.sessionName}": ${err.message ?? String(err)}`,
|
|
34
|
+
details: { sessionName: project.sessionName },
|
|
35
|
+
cause: err,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handler: `terminal.respawn`.
|
|
3
|
+
*
|
|
4
|
+
* Server-side equivalent of the dashboard's `bridge.restartWith(...)` call.
|
|
5
|
+
* Looks up the PTY bridge by id; if a cwd is supplied it validates the
|
|
6
|
+
* directory and passes it through; otherwise it respawns at the bridge's
|
|
7
|
+
* recorded `lastCwd`.
|
|
8
|
+
*
|
|
9
|
+
* Why server-side? The dashboard previously had to do the cwd resolution
|
|
10
|
+
* itself before it could ask the bridge to restart. Centralising it here
|
|
11
|
+
* keeps the cwd contract on the server, where it has direct access to the
|
|
12
|
+
* project registry and the bridge's filesystem.
|
|
13
|
+
*/
|
|
14
|
+
import { type PtyBridgeRegistry } from "../../../server/ws-route.ts";
|
|
15
|
+
import type { Stats } from "node:fs";
|
|
16
|
+
import { type ActionInput, type ActionResult } from "../contract.ts";
|
|
17
|
+
export interface TerminalRespawnDeps {
|
|
18
|
+
registry?: PtyBridgeRegistry;
|
|
19
|
+
/** Override for the bridge dimensions used on respawn. Tests inject these. */
|
|
20
|
+
cols?: number;
|
|
21
|
+
rows?: number;
|
|
22
|
+
statCwd?: (cwd: string) => Stats;
|
|
23
|
+
}
|
|
24
|
+
export declare function terminalRespawnHandler(input: ActionInput<"terminal.respawn">, deps?: TerminalRespawnDeps): ActionResult<"terminal.respawn">;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handler: `terminal.respawn`.
|
|
3
|
+
*
|
|
4
|
+
* Server-side equivalent of the dashboard's `bridge.restartWith(...)` call.
|
|
5
|
+
* Looks up the PTY bridge by id; if a cwd is supplied it validates the
|
|
6
|
+
* directory and passes it through; otherwise it respawns at the bridge's
|
|
7
|
+
* recorded `lastCwd`.
|
|
8
|
+
*
|
|
9
|
+
* Why server-side? The dashboard previously had to do the cwd resolution
|
|
10
|
+
* itself before it could ask the bridge to restart. Centralising it here
|
|
11
|
+
* keeps the cwd contract on the server, where it has direct access to the
|
|
12
|
+
* project registry and the bridge's filesystem.
|
|
13
|
+
*/
|
|
14
|
+
import { defaultPtyBridgeRegistry as defaultRegistry, } from "../../../server/ws-route.js";
|
|
15
|
+
import { assertValidCwd, TerminalCwdError } from "../../../server/pty-bridge.js";
|
|
16
|
+
import { ActionError, actionErrorFromCwdError } from "../errors.js";
|
|
17
|
+
const DEFAULT_RESPAWN_COLS = 80;
|
|
18
|
+
const DEFAULT_RESPAWN_ROWS = 24;
|
|
19
|
+
export function terminalRespawnHandler(input, deps = {}) {
|
|
20
|
+
const registry = deps.registry ?? defaultRegistry;
|
|
21
|
+
const bridge = registry.peek(input.terminalId);
|
|
22
|
+
if (!bridge) {
|
|
23
|
+
throw new ActionError({
|
|
24
|
+
code: "terminal_not_found",
|
|
25
|
+
message: `No running terminal bridge for id "${input.terminalId}"`,
|
|
26
|
+
details: { terminalId: input.terminalId, sessionName: input.sessionName },
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
if (!bridge.restartWith) {
|
|
30
|
+
throw new ActionError({
|
|
31
|
+
code: "internal",
|
|
32
|
+
message: "Bridge does not support restartWith",
|
|
33
|
+
details: { terminalId: input.terminalId },
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
const cwd = resolveRespawnCwd(input, bridge, deps.statCwd);
|
|
37
|
+
const cols = deps.cols ?? bridge.cols ?? DEFAULT_RESPAWN_COLS;
|
|
38
|
+
const rows = deps.rows ?? bridge.rows ?? DEFAULT_RESPAWN_ROWS;
|
|
39
|
+
try {
|
|
40
|
+
bridge.restartWith(cols, rows, { cwd });
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
if (err instanceof TerminalCwdError) {
|
|
44
|
+
throw actionErrorFromCwdError(err);
|
|
45
|
+
}
|
|
46
|
+
throw new ActionError({
|
|
47
|
+
code: "internal",
|
|
48
|
+
message: `Failed to respawn terminal "${input.terminalId}": ${err.message ?? String(err)}`,
|
|
49
|
+
details: { terminalId: input.terminalId },
|
|
50
|
+
cause: err,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
return { respawned: true, cwd };
|
|
54
|
+
}
|
|
55
|
+
function resolveRespawnCwd(input, bridge, statCwd) {
|
|
56
|
+
if (input.cwd) {
|
|
57
|
+
try {
|
|
58
|
+
assertValidCwd(input.cwd, statCwd);
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
if (err instanceof TerminalCwdError) {
|
|
62
|
+
throw actionErrorFromCwdError(err);
|
|
63
|
+
}
|
|
64
|
+
throw err;
|
|
65
|
+
}
|
|
66
|
+
return input.cwd;
|
|
67
|
+
}
|
|
68
|
+
const last = bridge.getCwd?.() ?? null;
|
|
69
|
+
if (!last) {
|
|
70
|
+
throw new ActionError({
|
|
71
|
+
code: "internal",
|
|
72
|
+
message: "Cannot respawn terminal without an explicit cwd: bridge has no recorded cwd",
|
|
73
|
+
details: { terminalId: input.terminalId },
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
// Validate the recorded cwd too — the directory may have been deleted
|
|
77
|
+
// since the bridge first spawned.
|
|
78
|
+
try {
|
|
79
|
+
assertValidCwd(last, statCwd);
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
if (err instanceof TerminalCwdError) {
|
|
83
|
+
throw actionErrorFromCwdError(err);
|
|
84
|
+
}
|
|
85
|
+
throw err;
|
|
86
|
+
}
|
|
87
|
+
return last;
|
|
88
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handler: `terminal.stop`.
|
|
3
|
+
*
|
|
4
|
+
* Kill a running PTY bridge by id. Wraps {@link PtyBridgeRegistry.delete} —
|
|
5
|
+
* the registry delete is what resets the entry's clients counter, clears
|
|
6
|
+
* any idle timer, and emits SIGTERM. Returns `{ stopped: true }` only when
|
|
7
|
+
* a bridge actually existed; otherwise raises `terminal_not_found`.
|
|
8
|
+
*/
|
|
9
|
+
import { type PtyBridgeRegistry } from "../../../server/ws-route.ts";
|
|
10
|
+
import { type ActionInput, type ActionResult } from "../contract.ts";
|
|
11
|
+
export interface TerminalStopDeps {
|
|
12
|
+
registry?: PtyBridgeRegistry;
|
|
13
|
+
}
|
|
14
|
+
export declare function terminalStopHandler(input: ActionInput<"terminal.stop">, deps?: TerminalStopDeps): ActionResult<"terminal.stop">;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handler: `terminal.stop`.
|
|
3
|
+
*
|
|
4
|
+
* Kill a running PTY bridge by id. Wraps {@link PtyBridgeRegistry.delete} —
|
|
5
|
+
* the registry delete is what resets the entry's clients counter, clears
|
|
6
|
+
* any idle timer, and emits SIGTERM. Returns `{ stopped: true }` only when
|
|
7
|
+
* a bridge actually existed; otherwise raises `terminal_not_found`.
|
|
8
|
+
*/
|
|
9
|
+
import { defaultPtyBridgeRegistry as defaultRegistry, } from "../../../server/ws-route.js";
|
|
10
|
+
import { ActionError } from "../errors.js";
|
|
11
|
+
export function terminalStopHandler(input, deps = {}) {
|
|
12
|
+
const registry = deps.registry ?? defaultRegistry;
|
|
13
|
+
const ok = registry.delete(input.terminalId);
|
|
14
|
+
if (!ok) {
|
|
15
|
+
throw new ActionError({
|
|
16
|
+
code: "terminal_not_found",
|
|
17
|
+
message: `No terminal bridge for id "${input.terminalId}"`,
|
|
18
|
+
details: { terminalId: input.terminalId, sessionName: input.sessionName },
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
return { stopped: true };
|
|
22
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registry: maps each action name to its input/output schemas and handler.
|
|
3
|
+
*
|
|
4
|
+
* The dispatcher in `dispatcher.ts` is the only consumer — it parses the
|
|
5
|
+
* URL `:name` against `ACTION_NAMES`, then looks up the handler here. Every
|
|
6
|
+
* handler accepts a typed input and returns the typed result; the
|
|
7
|
+
* dispatcher applies output-side Zod validation as defense in depth.
|
|
8
|
+
*
|
|
9
|
+
* Adding a new action: define schemas in `contract.ts`, add a handler in
|
|
10
|
+
* `handlers/`, then wire it here.
|
|
11
|
+
*/
|
|
12
|
+
import type { z } from "zod";
|
|
13
|
+
import { ActionContractsZ, type ActionInput, type ActionName, type ActionResult } from "./contract.ts";
|
|
14
|
+
export type ActionHandler<N extends ActionName> = (input: ActionInput<N>) => Promise<ActionResult<N>> | ActionResult<N>;
|
|
15
|
+
export interface ActionRegistryEntry<N extends ActionName> {
|
|
16
|
+
inputSchema: (typeof ActionContractsZ)[N]["input"];
|
|
17
|
+
resultSchema: (typeof ActionContractsZ)[N]["result"];
|
|
18
|
+
handler: ActionHandler<N>;
|
|
19
|
+
}
|
|
20
|
+
type RegistryShape = {
|
|
21
|
+
[N in ActionName]: ActionRegistryEntry<N>;
|
|
22
|
+
};
|
|
23
|
+
export declare const actionRegistry: RegistryShape;
|
|
24
|
+
/**
|
|
25
|
+
* Generic accessor that preserves the `N` type binding. Exposed as a
|
|
26
|
+
* convenience for tests; the dispatcher uses the registry directly.
|
|
27
|
+
*/
|
|
28
|
+
export declare function getActionEntry<N extends ActionName>(name: N): ActionRegistryEntry<N>;
|
|
29
|
+
export type LooseActionEntry = ActionRegistryEntry<ActionName> & {
|
|
30
|
+
inputSchema: z.ZodTypeAny;
|
|
31
|
+
resultSchema: z.ZodTypeAny;
|
|
32
|
+
handler: (input: unknown) => Promise<unknown> | unknown;
|
|
33
|
+
};
|
|
34
|
+
export declare function getLooseActionEntry(name: ActionName): LooseActionEntry;
|
|
35
|
+
export {};
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registry: maps each action name to its input/output schemas and handler.
|
|
3
|
+
*
|
|
4
|
+
* The dispatcher in `dispatcher.ts` is the only consumer — it parses the
|
|
5
|
+
* URL `:name` against `ACTION_NAMES`, then looks up the handler here. Every
|
|
6
|
+
* handler accepts a typed input and returns the typed result; the
|
|
7
|
+
* dispatcher applies output-side Zod validation as defense in depth.
|
|
8
|
+
*
|
|
9
|
+
* Adding a new action: define schemas in `contract.ts`, add a handler in
|
|
10
|
+
* `handlers/`, then wire it here.
|
|
11
|
+
*/
|
|
12
|
+
import { ActionContractsZ, } from "./contract.js";
|
|
13
|
+
import { projectOpenTerminalHandler } from "./handlers/project-open-terminal.js";
|
|
14
|
+
import { projectActivateHandler } from "./handlers/project-activate.js";
|
|
15
|
+
import { projectLaunchHandler } from "./handlers/project-launch.js";
|
|
16
|
+
import { projectStopHandler } from "./handlers/project-stop.js";
|
|
17
|
+
import { projectRestartHandler } from "./handlers/project-restart.js";
|
|
18
|
+
import { terminalRespawnHandler } from "./handlers/terminal-respawn.js";
|
|
19
|
+
import { terminalStopHandler } from "./handlers/terminal-stop.js";
|
|
20
|
+
import { configAddPaneHandler, configAddRowHandler, configDisableTeamHandler, configEnableTeamHandler, configRemovePaneHandler, configSetHandler, } from "./handlers/config-actions.js";
|
|
21
|
+
import { appSetRemoteAccessHandler } from "./handlers/app-set-remote-access.js";
|
|
22
|
+
import { daemonShutdownHandler } from "./handlers/daemon-shutdown.js";
|
|
23
|
+
export const actionRegistry = {
|
|
24
|
+
"project.openTerminal": {
|
|
25
|
+
inputSchema: ActionContractsZ["project.openTerminal"].input,
|
|
26
|
+
resultSchema: ActionContractsZ["project.openTerminal"].result,
|
|
27
|
+
handler: projectOpenTerminalHandler,
|
|
28
|
+
},
|
|
29
|
+
"project.launch": {
|
|
30
|
+
inputSchema: ActionContractsZ["project.launch"].input,
|
|
31
|
+
resultSchema: ActionContractsZ["project.launch"].result,
|
|
32
|
+
handler: projectLaunchHandler,
|
|
33
|
+
},
|
|
34
|
+
"project.stop": {
|
|
35
|
+
inputSchema: ActionContractsZ["project.stop"].input,
|
|
36
|
+
resultSchema: ActionContractsZ["project.stop"].result,
|
|
37
|
+
handler: projectStopHandler,
|
|
38
|
+
},
|
|
39
|
+
"project.restart": {
|
|
40
|
+
inputSchema: ActionContractsZ["project.restart"].input,
|
|
41
|
+
resultSchema: ActionContractsZ["project.restart"].result,
|
|
42
|
+
handler: projectRestartHandler,
|
|
43
|
+
},
|
|
44
|
+
"project.activate": {
|
|
45
|
+
inputSchema: ActionContractsZ["project.activate"].input,
|
|
46
|
+
resultSchema: ActionContractsZ["project.activate"].result,
|
|
47
|
+
handler: projectActivateHandler,
|
|
48
|
+
},
|
|
49
|
+
"terminal.respawn": {
|
|
50
|
+
inputSchema: ActionContractsZ["terminal.respawn"].input,
|
|
51
|
+
resultSchema: ActionContractsZ["terminal.respawn"].result,
|
|
52
|
+
handler: terminalRespawnHandler,
|
|
53
|
+
},
|
|
54
|
+
"terminal.stop": {
|
|
55
|
+
inputSchema: ActionContractsZ["terminal.stop"].input,
|
|
56
|
+
resultSchema: ActionContractsZ["terminal.stop"].result,
|
|
57
|
+
handler: terminalStopHandler,
|
|
58
|
+
},
|
|
59
|
+
"config.set": {
|
|
60
|
+
inputSchema: ActionContractsZ["config.set"].input,
|
|
61
|
+
resultSchema: ActionContractsZ["config.set"].result,
|
|
62
|
+
handler: configSetHandler,
|
|
63
|
+
},
|
|
64
|
+
"config.addPane": {
|
|
65
|
+
inputSchema: ActionContractsZ["config.addPane"].input,
|
|
66
|
+
resultSchema: ActionContractsZ["config.addPane"].result,
|
|
67
|
+
handler: configAddPaneHandler,
|
|
68
|
+
},
|
|
69
|
+
"config.removePane": {
|
|
70
|
+
inputSchema: ActionContractsZ["config.removePane"].input,
|
|
71
|
+
resultSchema: ActionContractsZ["config.removePane"].result,
|
|
72
|
+
handler: configRemovePaneHandler,
|
|
73
|
+
},
|
|
74
|
+
"config.addRow": {
|
|
75
|
+
inputSchema: ActionContractsZ["config.addRow"].input,
|
|
76
|
+
resultSchema: ActionContractsZ["config.addRow"].result,
|
|
77
|
+
handler: configAddRowHandler,
|
|
78
|
+
},
|
|
79
|
+
"config.enableTeam": {
|
|
80
|
+
inputSchema: ActionContractsZ["config.enableTeam"].input,
|
|
81
|
+
resultSchema: ActionContractsZ["config.enableTeam"].result,
|
|
82
|
+
handler: configEnableTeamHandler,
|
|
83
|
+
},
|
|
84
|
+
"config.disableTeam": {
|
|
85
|
+
inputSchema: ActionContractsZ["config.disableTeam"].input,
|
|
86
|
+
resultSchema: ActionContractsZ["config.disableTeam"].result,
|
|
87
|
+
handler: configDisableTeamHandler,
|
|
88
|
+
},
|
|
89
|
+
"app.setRemoteAccess": {
|
|
90
|
+
inputSchema: ActionContractsZ["app.setRemoteAccess"].input,
|
|
91
|
+
resultSchema: ActionContractsZ["app.setRemoteAccess"].result,
|
|
92
|
+
handler: appSetRemoteAccessHandler,
|
|
93
|
+
},
|
|
94
|
+
"daemon.shutdown": {
|
|
95
|
+
inputSchema: ActionContractsZ["daemon.shutdown"].input,
|
|
96
|
+
resultSchema: ActionContractsZ["daemon.shutdown"].result,
|
|
97
|
+
handler: daemonShutdownHandler,
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* Generic accessor that preserves the `N` type binding. Exposed as a
|
|
102
|
+
* convenience for tests; the dispatcher uses the registry directly.
|
|
103
|
+
*/
|
|
104
|
+
export function getActionEntry(name) {
|
|
105
|
+
return actionRegistry[name];
|
|
106
|
+
}
|
|
107
|
+
export function getLooseActionEntry(name) {
|
|
108
|
+
return actionRegistry[name];
|
|
109
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { PaneInfo } from "@tmux-ide/contracts";
|
|
2
|
+
export interface SessionInfo {
|
|
3
|
+
name: string;
|
|
4
|
+
dir: string;
|
|
5
|
+
panes: PaneInfo[];
|
|
6
|
+
}
|
|
7
|
+
export interface SessionOverview {
|
|
8
|
+
name: string;
|
|
9
|
+
dir: string;
|
|
10
|
+
}
|
|
11
|
+
export interface ProjectDetail {
|
|
12
|
+
session: string;
|
|
13
|
+
dir: string;
|
|
14
|
+
panes: PaneInfo[];
|
|
15
|
+
}
|
|
16
|
+
type TmuxRunner = (args: string[]) => string;
|
|
17
|
+
export declare function _setTmuxRunner(fn: TmuxRunner): () => void;
|
|
18
|
+
export declare function listTmuxSessions(): string[];
|
|
19
|
+
export declare function getSessionCwd(session: string): string;
|
|
20
|
+
export declare function discoverSessions(): SessionInfo[];
|
|
21
|
+
export declare function buildOverviews(sessions: SessionInfo[]): SessionOverview[];
|
|
22
|
+
export declare function buildProjectDetail(info: SessionInfo): ProjectDetail;
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
import { listSessionPanes } from "../widgets/lib/pane-comms.js";
|
|
3
|
+
import { getDefaultWorkspaceRegistry } from "../lib/workspace-registry.js";
|
|
4
|
+
let _tmuxRunner = (args) => execFileSync("tmux", args, {
|
|
5
|
+
encoding: "utf-8",
|
|
6
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
7
|
+
}).trim();
|
|
8
|
+
export function _setTmuxRunner(fn) {
|
|
9
|
+
const prev = _tmuxRunner;
|
|
10
|
+
_tmuxRunner = fn;
|
|
11
|
+
return () => {
|
|
12
|
+
_tmuxRunner = prev;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function tmuxSilent(args) {
|
|
16
|
+
try {
|
|
17
|
+
return _tmuxRunner(args);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return "";
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export function listTmuxSessions() {
|
|
24
|
+
const raw = tmuxSilent(["list-sessions", "-F", "#{session_name}"]);
|
|
25
|
+
if (!raw)
|
|
26
|
+
return [];
|
|
27
|
+
return raw.split("\n").filter(Boolean);
|
|
28
|
+
}
|
|
29
|
+
export function getSessionCwd(session) {
|
|
30
|
+
return tmuxSilent(["display-message", "-t", session, "-p", "#{pane_current_path}"]);
|
|
31
|
+
}
|
|
32
|
+
export function discoverSessions() {
|
|
33
|
+
const sessionNames = listTmuxSessions();
|
|
34
|
+
const results = [];
|
|
35
|
+
// Once the workspace registry is loaded (post daemon-embed startup),
|
|
36
|
+
// discovery is gated by registry membership: only registered workspaces
|
|
37
|
+
// are visible. Pre-load (e.g. unit tests that bypass daemon-embed) we
|
|
38
|
+
// fall through to the legacy "any tmux session with a cwd" behavior.
|
|
39
|
+
const registry = getDefaultWorkspaceRegistry();
|
|
40
|
+
const enforceRegistry = registry._isLoaded();
|
|
41
|
+
for (const name of sessionNames) {
|
|
42
|
+
if (enforceRegistry && !registry.has(name))
|
|
43
|
+
continue;
|
|
44
|
+
const dir = getSessionCwd(name);
|
|
45
|
+
if (!dir)
|
|
46
|
+
continue;
|
|
47
|
+
let panes = [];
|
|
48
|
+
try {
|
|
49
|
+
panes = listSessionPanes(name);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// session may have vanished
|
|
53
|
+
}
|
|
54
|
+
results.push({ name, dir, panes });
|
|
55
|
+
}
|
|
56
|
+
return results;
|
|
57
|
+
}
|
|
58
|
+
export function buildOverviews(sessions) {
|
|
59
|
+
return sessions.map((s) => ({ name: s.name, dir: s.dir }));
|
|
60
|
+
}
|
|
61
|
+
export function buildProjectDetail(info) {
|
|
62
|
+
return {
|
|
63
|
+
session: info.name,
|
|
64
|
+
dir: info.dir,
|
|
65
|
+
panes: info.panes,
|
|
66
|
+
};
|
|
67
|
+
}
|