agent-tempo 1.0.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/CLAUDE.md +213 -0
- package/LICENSE +21 -0
- package/README.md +289 -0
- package/assets/icon-32.png +0 -0
- package/assets/icon-512.png +0 -0
- package/assets/icon-64.png +0 -0
- package/assets/icon-dark-32.png +0 -0
- package/assets/icon-dark-64.png +0 -0
- package/assets/icon-dark.svg +9 -0
- package/assets/icon.svg +9 -0
- package/assets/logo-dark.svg +11 -0
- package/assets/logo-light.svg +11 -0
- package/dashboard/README.md +91 -0
- package/dashboard/dist/assets/index-CB78ToNE.css +2 -0
- package/dashboard/dist/assets/index-_5jV0Znu.js +62 -0
- package/dashboard/dist/assets/index-_5jV0Znu.js.map +1 -0
- package/dashboard/dist/index.html +21 -0
- package/dashboard/package.json +47 -0
- package/dist/activities/hard-terminate.d.ts +32 -0
- package/dist/activities/hard-terminate.js +460 -0
- package/dist/activities/maestro.d.ts +72 -0
- package/dist/activities/maestro.js +254 -0
- package/dist/activities/outbox.d.ts +188 -0
- package/dist/activities/outbox.js +849 -0
- package/dist/activities/resolve.d.ts +64 -0
- package/dist/activities/resolve.js +129 -0
- package/dist/activities/schedule-fire.d.ts +36 -0
- package/dist/activities/schedule-fire.js +147 -0
- package/dist/adapters/base.d.ts +426 -0
- package/dist/adapters/base.js +1270 -0
- package/dist/adapters/claude-api/adapter.d.ts +168 -0
- package/dist/adapters/claude-api/adapter.js +797 -0
- package/dist/adapters/claude-api/api-error.d.ts +96 -0
- package/dist/adapters/claude-api/api-error.js +191 -0
- package/dist/adapters/claude-api/index.d.ts +16 -0
- package/dist/adapters/claude-api/index.js +21 -0
- package/dist/adapters/claude-api/mcp-bridge.d.ts +50 -0
- package/dist/adapters/claude-api/mcp-bridge.js +157 -0
- package/dist/adapters/claude-code/adapter.d.ts +133 -0
- package/dist/adapters/claude-code/adapter.js +274 -0
- package/dist/adapters/claude-code/index.d.ts +15 -0
- package/dist/adapters/claude-code/index.js +20 -0
- package/dist/adapters/claude-code-headless/adapter.d.ts +131 -0
- package/dist/adapters/claude-code-headless/adapter.js +710 -0
- package/dist/adapters/claude-code-headless/error-mapper.d.ts +107 -0
- package/dist/adapters/claude-code-headless/error-mapper.js +281 -0
- package/dist/adapters/claude-code-headless/index.d.ts +17 -0
- package/dist/adapters/claude-code-headless/index.js +26 -0
- package/dist/adapters/claude-code-headless/pre-flight.d.ts +51 -0
- package/dist/adapters/claude-code-headless/pre-flight.js +207 -0
- package/dist/adapters/claude-code-headless/prompt.d.ts +93 -0
- package/dist/adapters/claude-code-headless/prompt.js +79 -0
- package/dist/adapters/claude-code-headless/stream-json.d.ts +242 -0
- package/dist/adapters/claude-code-headless/stream-json.js +208 -0
- package/dist/adapters/claude-code-headless/types.d.ts +28 -0
- package/dist/adapters/claude-code-headless/types.js +36 -0
- package/dist/adapters/copilot/adapter.d.ts +100 -0
- package/dist/adapters/copilot/adapter.js +730 -0
- package/dist/adapters/copilot/index.d.ts +15 -0
- package/dist/adapters/copilot/index.js +20 -0
- package/dist/adapters/index.d.ts +42 -0
- package/dist/adapters/index.js +115 -0
- package/dist/adapters/opencode/adapter.d.ts +82 -0
- package/dist/adapters/opencode/adapter.js +710 -0
- package/dist/adapters/opencode/config.d.ts +90 -0
- package/dist/adapters/opencode/config.js +137 -0
- package/dist/adapters/opencode/helpers.d.ts +40 -0
- package/dist/adapters/opencode/helpers.js +144 -0
- package/dist/adapters/opencode/index.d.ts +12 -0
- package/dist/adapters/opencode/index.js +17 -0
- package/dist/adapters/opencode/server-bridge.d.ts +124 -0
- package/dist/adapters/opencode/server-bridge.js +216 -0
- package/dist/adapters/sdk/base.d.ts +95 -0
- package/dist/adapters/sdk/base.js +134 -0
- package/dist/adapters/sdk/system-prompt.d.ts +64 -0
- package/dist/adapters/sdk/system-prompt.js +78 -0
- package/dist/adapters/terminal-error.d.ts +27 -0
- package/dist/adapters/terminal-error.js +39 -0
- package/dist/channel.d.ts +3 -0
- package/dist/channel.js +48 -0
- package/dist/cli/commands.d.ts +245 -0
- package/dist/cli/commands.js +2438 -0
- package/dist/cli/config-command.d.ts +8 -0
- package/dist/cli/config-command.js +254 -0
- package/dist/cli/daemon-command.d.ts +57 -0
- package/dist/cli/daemon-command.js +493 -0
- package/dist/cli/daemon.d.ts +217 -0
- package/dist/cli/daemon.js +632 -0
- package/dist/cli/dashboard-command.d.ts +20 -0
- package/dist/cli/dashboard-command.js +241 -0
- package/dist/cli/dev-banner.d.ts +107 -0
- package/dist/cli/dev-banner.js +190 -0
- package/dist/cli/dev-mode-bootstrap.d.ts +29 -0
- package/dist/cli/dev-mode-bootstrap.js +36 -0
- package/dist/cli/dev-verbs.d.ts +43 -0
- package/dist/cli/dev-verbs.js +254 -0
- package/dist/cli/help-text.d.ts +1 -0
- package/dist/cli/help-text.js +158 -0
- package/dist/cli/legacy-migration.d.ts +35 -0
- package/dist/cli/legacy-migration.js +335 -0
- package/dist/cli/mcp.d.ts +8 -0
- package/dist/cli/mcp.js +63 -0
- package/dist/cli/output.d.ts +12 -0
- package/dist/cli/output.js +37 -0
- package/dist/cli/preflight.d.ts +9 -0
- package/dist/cli/preflight.js +96 -0
- package/dist/cli/removed-verbs.d.ts +9 -0
- package/dist/cli/removed-verbs.js +78 -0
- package/dist/cli/sa-preflight.d.ts +99 -0
- package/dist/cli/sa-preflight.js +183 -0
- package/dist/cli/scenarios-command.d.ts +6 -0
- package/dist/cli/scenarios-command.js +167 -0
- package/dist/cli/startup.d.ts +112 -0
- package/dist/cli/startup.js +641 -0
- package/dist/cli/upgrade-command.d.ts +5 -0
- package/dist/cli/upgrade-command.js +240 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +680 -0
- package/dist/client/core.d.ts +33 -0
- package/dist/client/core.js +1260 -0
- package/dist/client/ensure-conductor-spawned.d.ts +35 -0
- package/dist/client/ensure-conductor-spawned.js +48 -0
- package/dist/client/index.d.ts +32 -0
- package/dist/client/index.js +22 -0
- package/dist/client/interface.d.ts +461 -0
- package/dist/client/interface.js +2 -0
- package/dist/client/subscribe.d.ts +108 -0
- package/dist/client/subscribe.js +598 -0
- package/dist/client/with-spawn.d.ts +27 -0
- package/dist/client/with-spawn.js +87 -0
- package/dist/config.d.ts +323 -0
- package/dist/config.js +593 -0
- package/dist/connection.d.ts +7 -0
- package/dist/connection.js +46 -0
- package/dist/constants.d.ts +50 -0
- package/dist/constants.js +74 -0
- package/dist/copilot-bridge.d.ts +22 -0
- package/dist/copilot-bridge.js +565 -0
- package/dist/daemon-adapter-versions.d.ts +52 -0
- package/dist/daemon-adapter-versions.js +170 -0
- package/dist/daemon.d.ts +275 -0
- package/dist/daemon.js +989 -0
- package/dist/ensemble/agent-types.d.ts +23 -0
- package/dist/ensemble/agent-types.js +132 -0
- package/dist/ensemble/loader.d.ts +14 -0
- package/dist/ensemble/loader.js +140 -0
- package/dist/ensemble/saver.d.ts +49 -0
- package/dist/ensemble/saver.js +201 -0
- package/dist/ensemble/schema.d.ts +71 -0
- package/dist/ensemble/schema.js +3 -0
- package/dist/git-info.d.ts +4 -0
- package/dist/git-info.js +29 -0
- package/dist/http/aggregate.d.ts +319 -0
- package/dist/http/aggregate.js +684 -0
- package/dist/http/auth.d.ts +67 -0
- package/dist/http/auth.js +177 -0
- package/dist/http/body.d.ts +71 -0
- package/dist/http/body.js +121 -0
- package/dist/http/catalog.d.ts +67 -0
- package/dist/http/catalog.js +209 -0
- package/dist/http/cors.d.ts +42 -0
- package/dist/http/cors.js +111 -0
- package/dist/http/dashboard-pair.d.ts +94 -0
- package/dist/http/dashboard-pair.js +148 -0
- package/dist/http/dashboard.d.ts +20 -0
- package/dist/http/dashboard.js +160 -0
- package/dist/http/event-bus.d.ts +217 -0
- package/dist/http/event-bus.js +365 -0
- package/dist/http/event-id.d.ts +77 -0
- package/dist/http/event-id.js +117 -0
- package/dist/http/event-types.d.ts +348 -0
- package/dist/http/event-types.js +36 -0
- package/dist/http/fixtures/chat-stress.d.ts +8 -0
- package/dist/http/fixtures/chat-stress.js +63 -0
- package/dist/http/fixtures/conductor-leaving.d.ts +8 -0
- package/dist/http/fixtures/conductor-leaving.js +80 -0
- package/dist/http/fixtures/constants.d.ts +10 -0
- package/dist/http/fixtures/constants.js +13 -0
- package/dist/http/fixtures/eight-player-broadcast.d.ts +10 -0
- package/dist/http/fixtures/eight-player-broadcast.js +81 -0
- package/dist/http/fixtures/empty-ensemble.d.ts +6 -0
- package/dist/http/fixtures/empty-ensemble.js +26 -0
- package/dist/http/fixtures/index.d.ts +55 -0
- package/dist/http/fixtures/index.js +110 -0
- package/dist/http/fixtures/single-conductor.d.ts +7 -0
- package/dist/http/fixtures/single-conductor.js +46 -0
- package/dist/http/fixtures/sse-reconnect.d.ts +8 -0
- package/dist/http/fixtures/sse-reconnect.js +77 -0
- package/dist/http/index.d.ts +21 -0
- package/dist/http/index.js +61 -0
- package/dist/http/port-file.d.ts +22 -0
- package/dist/http/port-file.js +132 -0
- package/dist/http/responses.d.ts +27 -0
- package/dist/http/responses.js +40 -0
- package/dist/http/ring-buffer.d.ts +41 -0
- package/dist/http/ring-buffer.js +80 -0
- package/dist/http/server.d.ts +122 -0
- package/dist/http/server.js +459 -0
- package/dist/http/snapshot.d.ts +85 -0
- package/dist/http/snapshot.js +180 -0
- package/dist/http/sse-handler.d.ts +87 -0
- package/dist/http/sse-handler.js +294 -0
- package/dist/http/writes.d.ts +55 -0
- package/dist/http/writes.js +240 -0
- package/dist/palette/index.d.ts +138 -0
- package/dist/palette/index.js +221 -0
- package/dist/reconcile/orphans.d.ts +255 -0
- package/dist/reconcile/orphans.js +340 -0
- package/dist/scripts/258-spotcheck.js +303 -0
- package/dist/scripts/check-components-css-sync.js +199 -0
- package/dist/scripts/run-shard.js +121 -0
- package/dist/scripts/verify-daemon-isolation-guard.js +128 -0
- package/dist/server-tools.d.ts +87 -0
- package/dist/server-tools.js +146 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.js +366 -0
- package/dist/spawn.d.ts +296 -0
- package/dist/spawn.js +747 -0
- package/dist/tools/agent-types.d.ts +2 -0
- package/dist/tools/agent-types.js +21 -0
- package/dist/tools/attachment-info.d.ts +4 -0
- package/dist/tools/attachment-info.js +48 -0
- package/dist/tools/broadcast.d.ts +4 -0
- package/dist/tools/broadcast.js +76 -0
- package/dist/tools/cancel-stage.d.ts +3 -0
- package/dist/tools/cancel-stage.js +20 -0
- package/dist/tools/clear-state.d.ts +3 -0
- package/dist/tools/clear-state.js +37 -0
- package/dist/tools/coat-check-evict.d.ts +4 -0
- package/dist/tools/coat-check-evict.js +43 -0
- package/dist/tools/coat-check-get.d.ts +4 -0
- package/dist/tools/coat-check-get.js +56 -0
- package/dist/tools/coat-check-list.d.ts +4 -0
- package/dist/tools/coat-check-list.js +60 -0
- package/dist/tools/coat-check-put.d.ts +4 -0
- package/dist/tools/coat-check-put.js +53 -0
- package/dist/tools/cue.d.ts +44 -0
- package/dist/tools/cue.js +201 -0
- package/dist/tools/destroy.d.ts +4 -0
- package/dist/tools/destroy.js +188 -0
- package/dist/tools/detach.d.ts +4 -0
- package/dist/tools/detach.js +45 -0
- package/dist/tools/encore.d.ts +4 -0
- package/dist/tools/encore.js +31 -0
- package/dist/tools/ensemble.d.ts +32 -0
- package/dist/tools/ensemble.js +198 -0
- package/dist/tools/evaluate-gate.d.ts +3 -0
- package/dist/tools/evaluate-gate.js +32 -0
- package/dist/tools/fetch-state.d.ts +13 -0
- package/dist/tools/fetch-state.js +78 -0
- package/dist/tools/gates.d.ts +3 -0
- package/dist/tools/gates.js +41 -0
- package/dist/tools/helpers.d.ts +21 -0
- package/dist/tools/helpers.js +25 -0
- package/dist/tools/hosts.d.ts +4 -0
- package/dist/tools/hosts.js +40 -0
- package/dist/tools/listen.d.ts +3 -0
- package/dist/tools/listen.js +22 -0
- package/dist/tools/load-lineup.d.ts +5 -0
- package/dist/tools/load-lineup.js +381 -0
- package/dist/tools/migrate.d.ts +4 -0
- package/dist/tools/migrate.js +60 -0
- package/dist/tools/pause-ensemble.d.ts +4 -0
- package/dist/tools/pause-ensemble.js +58 -0
- package/dist/tools/pause.d.ts +4 -0
- package/dist/tools/pause.js +36 -0
- package/dist/tools/play.d.ts +4 -0
- package/dist/tools/play.js +57 -0
- package/dist/tools/quality-gate.d.ts +3 -0
- package/dist/tools/quality-gate.js +26 -0
- package/dist/tools/recall.d.ts +3 -0
- package/dist/tools/recall.js +32 -0
- package/dist/tools/recruit.d.ts +38 -0
- package/dist/tools/recruit.js +447 -0
- package/dist/tools/release.d.ts +4 -0
- package/dist/tools/release.js +98 -0
- package/dist/tools/report.d.ts +3 -0
- package/dist/tools/report.js +29 -0
- package/dist/tools/resolve.d.ts +1 -0
- package/dist/tools/resolve.js +7 -0
- package/dist/tools/restart.d.ts +35 -0
- package/dist/tools/restart.js +131 -0
- package/dist/tools/restore.d.ts +4 -0
- package/dist/tools/restore.js +107 -0
- package/dist/tools/resume-ensemble.d.ts +4 -0
- package/dist/tools/resume-ensemble.js +79 -0
- package/dist/tools/save-lineup.d.ts +4 -0
- package/dist/tools/save-lineup.js +36 -0
- package/dist/tools/save-state.d.ts +3 -0
- package/dist/tools/save-state.js +57 -0
- package/dist/tools/schedule.d.ts +4 -0
- package/dist/tools/schedule.js +152 -0
- package/dist/tools/schedules.d.ts +4 -0
- package/dist/tools/schedules.js +54 -0
- package/dist/tools/set-ensemble-description.d.ts +4 -0
- package/dist/tools/set-ensemble-description.js +37 -0
- package/dist/tools/set-name.d.ts +4 -0
- package/dist/tools/set-name.js +45 -0
- package/dist/tools/set-part.d.ts +3 -0
- package/dist/tools/set-part.js +20 -0
- package/dist/tools/shutdown.d.ts +4 -0
- package/dist/tools/shutdown.js +54 -0
- package/dist/tools/stage.d.ts +3 -0
- package/dist/tools/stage.js +28 -0
- package/dist/tools/stages.d.ts +3 -0
- package/dist/tools/stages.js +35 -0
- package/dist/tools/stop.d.ts +4 -0
- package/dist/tools/stop.js +29 -0
- package/dist/tools/unschedule.d.ts +4 -0
- package/dist/tools/unschedule.js +35 -0
- package/dist/tools/who-am-i.d.ts +3 -0
- package/dist/tools/who-am-i.js +34 -0
- package/dist/tools/worktree.d.ts +4 -0
- package/dist/tools/worktree.js +181 -0
- package/dist/tui/App.d.ts +85 -0
- package/dist/tui/App.js +1791 -0
- package/dist/tui/bootstrap-types.d.ts +46 -0
- package/dist/tui/bootstrap-types.js +7 -0
- package/dist/tui/client.d.ts +6 -0
- package/dist/tui/client.js +9 -0
- package/dist/tui/commands.d.ts +71 -0
- package/dist/tui/commands.js +1375 -0
- package/dist/tui/components/ActivityLog.d.ts +16 -0
- package/dist/tui/components/ActivityLog.js +36 -0
- package/dist/tui/components/ChatView.d.ts +35 -0
- package/dist/tui/components/ChatView.js +54 -0
- package/dist/tui/components/CommandOverlay.d.ts +15 -0
- package/dist/tui/components/CommandOverlay.js +34 -0
- package/dist/tui/components/CommandPalette.d.ts +21 -0
- package/dist/tui/components/CommandPalette.js +67 -0
- package/dist/tui/components/ConductorChat.d.ts +16 -0
- package/dist/tui/components/ConductorChat.js +32 -0
- package/dist/tui/components/ConversationStream.d.ts +114 -0
- package/dist/tui/components/ConversationStream.js +307 -0
- package/dist/tui/components/CreateEnsembleWizard.d.ts +19 -0
- package/dist/tui/components/CreateEnsembleWizard.js +223 -0
- package/dist/tui/components/DestroyConfirmModal.d.ts +17 -0
- package/dist/tui/components/DestroyConfirmModal.js +62 -0
- package/dist/tui/components/EnsembleListView.d.ts +14 -0
- package/dist/tui/components/EnsembleListView.js +32 -0
- package/dist/tui/components/EnsemblePanel.d.ts +12 -0
- package/dist/tui/components/EnsemblePanel.js +40 -0
- package/dist/tui/components/ErrorView.d.ts +31 -0
- package/dist/tui/components/ErrorView.js +129 -0
- package/dist/tui/components/HomeView.d.ts +54 -0
- package/dist/tui/components/HomeView.js +306 -0
- package/dist/tui/components/InputBar.d.ts +13 -0
- package/dist/tui/components/InputBar.js +58 -0
- package/dist/tui/components/LoadLineupModal.d.ts +18 -0
- package/dist/tui/components/LoadLineupModal.js +79 -0
- package/dist/tui/components/MainView.d.ts +21 -0
- package/dist/tui/components/MainView.js +107 -0
- package/dist/tui/components/NewEnsembleModal.d.ts +9 -0
- package/dist/tui/components/NewEnsembleModal.js +73 -0
- package/dist/tui/components/Picker.d.ts +23 -0
- package/dist/tui/components/Picker.js +70 -0
- package/dist/tui/components/PlayerDetailView.d.ts +26 -0
- package/dist/tui/components/PlayerDetailView.js +118 -0
- package/dist/tui/components/PromptArea.d.ts +50 -0
- package/dist/tui/components/PromptArea.js +303 -0
- package/dist/tui/components/RecruitWizard.d.ts +17 -0
- package/dist/tui/components/RecruitWizard.js +221 -0
- package/dist/tui/components/RestoreConfirmModal.d.ts +18 -0
- package/dist/tui/components/RestoreConfirmModal.js +71 -0
- package/dist/tui/components/ScheduleOverlay.d.ts +13 -0
- package/dist/tui/components/ScheduleOverlay.js +113 -0
- package/dist/tui/components/ScheduleWizard.d.ts +19 -0
- package/dist/tui/components/ScheduleWizard.js +259 -0
- package/dist/tui/components/Splash.d.ts +23 -0
- package/dist/tui/components/Splash.js +221 -0
- package/dist/tui/components/StatusBar.d.ts +48 -0
- package/dist/tui/components/StatusBar.js +128 -0
- package/dist/tui/components/StatusOverlay.d.ts +15 -0
- package/dist/tui/components/StatusOverlay.js +76 -0
- package/dist/tui/components/TitleBar.d.ts +10 -0
- package/dist/tui/components/TitleBar.js +21 -0
- package/dist/tui/components/TopBar.d.ts +12 -0
- package/dist/tui/components/TopBar.js +15 -0
- package/dist/tui/core-api.d.ts +26 -0
- package/dist/tui/core-api.js +67 -0
- package/dist/tui/hooks/useEnsembleDiscovery.d.ts +3 -0
- package/dist/tui/hooks/useEnsembleDiscovery.js +30 -0
- package/dist/tui/hooks/useMaestroPoller.d.ts +3 -0
- package/dist/tui/hooks/useMaestroPoller.js +36 -0
- package/dist/tui/hooks/useSendCommand.d.ts +7 -0
- package/dist/tui/hooks/useSendCommand.js +29 -0
- package/dist/tui/index.d.ts +15 -0
- package/dist/tui/index.js +156 -0
- package/dist/tui/ink-context.d.ts +18 -0
- package/dist/tui/ink-context.js +59 -0
- package/dist/tui/ink-loader.d.ts +26 -0
- package/dist/tui/ink-loader.js +42 -0
- package/dist/tui/removed-commands.d.ts +9 -0
- package/dist/tui/removed-commands.js +22 -0
- package/dist/tui/sse-handler.d.ts +52 -0
- package/dist/tui/sse-handler.js +157 -0
- package/dist/tui/store.d.ts +598 -0
- package/dist/tui/store.js +753 -0
- package/dist/tui/utils/format.d.ts +56 -0
- package/dist/tui/utils/format.js +155 -0
- package/dist/tui/utils/fullscreen.d.ts +23 -0
- package/dist/tui/utils/fullscreen.js +71 -0
- package/dist/tui/utils/history.d.ts +10 -0
- package/dist/tui/utils/history.js +85 -0
- package/dist/tui/utils/platform.d.ts +45 -0
- package/dist/tui/utils/platform.js +258 -0
- package/dist/tui/utils/theme.d.ts +21 -0
- package/dist/tui/utils/theme.js +24 -0
- package/dist/types.d.ts +1020 -0
- package/dist/types.js +39 -0
- package/dist/utils/attachment-format.d.ts +22 -0
- package/dist/utils/attachment-format.js +32 -0
- package/dist/utils/default-part.d.ts +43 -0
- package/dist/utils/default-part.js +104 -0
- package/dist/utils/duration.d.ts +30 -0
- package/dist/utils/duration.js +69 -0
- package/dist/utils/ensemble-ops.d.ts +61 -0
- package/dist/utils/ensemble-ops.js +77 -0
- package/dist/utils/format-hosts.d.ts +21 -0
- package/dist/utils/format-hosts.js +73 -0
- package/dist/utils/hosts.d.ts +113 -0
- package/dist/utils/hosts.js +265 -0
- package/dist/utils/parent-death-watchdog.d.ts +1 -0
- package/dist/utils/parent-death-watchdog.js +47 -0
- package/dist/utils/query-timeout.d.ts +103 -0
- package/dist/utils/query-timeout.js +113 -0
- package/dist/utils/recall-format.d.ts +78 -0
- package/dist/utils/recall-format.js +105 -0
- package/dist/utils/restore-format.d.ts +49 -0
- package/dist/utils/restore-format.js +91 -0
- package/dist/utils/safe-path.d.ts +10 -0
- package/dist/utils/safe-path.js +43 -0
- package/dist/utils/sdk-probe.d.ts +9 -0
- package/dist/utils/sdk-probe.js +45 -0
- package/dist/utils/search-attributes.d.ts +76 -0
- package/dist/utils/search-attributes.js +86 -0
- package/dist/utils/validation.d.ts +113 -0
- package/dist/utils/validation.js +163 -0
- package/dist/utils/visibility-deadline.d.ts +186 -0
- package/dist/utils/visibility-deadline.js +158 -0
- package/dist/utils/worktree.d.ts +103 -0
- package/dist/utils/worktree.js +327 -0
- package/dist/worker.d.ts +14 -0
- package/dist/worker.js +146 -0
- package/dist/workflows/attachment-math.d.ts +56 -0
- package/dist/workflows/attachment-math.js +47 -0
- package/dist/workflows/index.d.ts +3 -0
- package/dist/workflows/index.js +11 -0
- package/dist/workflows/maestro-signals.d.ts +217 -0
- package/dist/workflows/maestro-signals.js +155 -0
- package/dist/workflows/maestro.d.ts +3 -0
- package/dist/workflows/maestro.js +812 -0
- package/dist/workflows/scheduler-signals.d.ts +10 -0
- package/dist/workflows/scheduler-signals.js +14 -0
- package/dist/workflows/scheduler.d.ts +17 -0
- package/dist/workflows/scheduler.js +143 -0
- package/dist/workflows/session.d.ts +2 -0
- package/dist/workflows/session.js +1638 -0
- package/dist/workflows/signals.d.ts +297 -0
- package/dist/workflows/signals.js +239 -0
- package/examples/agents/tempo-composer.md +56 -0
- package/examples/agents/tempo-conductor.md +117 -0
- package/examples/agents/tempo-critic.md +73 -0
- package/examples/agents/tempo-improv.md +74 -0
- package/examples/agents/tempo-liner.md +75 -0
- package/examples/agents/tempo-roadie.md +61 -0
- package/examples/agents/tempo-soloist.md +71 -0
- package/examples/agents/tempo-tuner.md +94 -0
- package/examples/ensembles/tempo-big-band.yaml +146 -0
- package/examples/ensembles/tempo-dev-team.yaml +58 -0
- package/examples/ensembles/tempo-headless-jam.yaml +77 -0
- package/examples/ensembles/tempo-jam-session.yaml +41 -0
- package/examples/ensembles/tempo-mock-jam.yaml +79 -0
- package/examples/ensembles/tempo-review-squad.yaml +32 -0
- package/package.json +172 -0
- package/packaging/launchd/com.agent.tempo.plist +46 -0
- package/packaging/systemd/agent-tempo.service +32 -0
- package/packaging/windows/install-task.ps1 +71 -0
- package/scenarios/conductor-recruit-mock.yaml +33 -0
- package/scenarios/echo-roundtrip.yaml +15 -0
- package/scenarios/multi-player-handoff.yaml +38 -0
- package/scenarios/recruit-cascade.yaml +38 -0
- package/scenarios/two-player-conversation.yaml +33 -0
- package/workflow-bundle.js +14146 -0
package/dist/cli.js
ADDED
|
@@ -0,0 +1,680 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
// Lazy-loaded command surfaces — see `main()` below. The CLI entrypoint
|
|
4
|
+
// avoids top-level imports of any module that transitively pulls in the
|
|
5
|
+
// Temporal SDK, so that recovery commands (`daemon stop`, `version`, `help`,
|
|
6
|
+
// `config show/set`, `upgrade`) stay operable on Node versions where the
|
|
7
|
+
// Temporal SDK's transitive deps fail to resolve (issue #157).
|
|
8
|
+
//
|
|
9
|
+
// Each command-specific handler lives in its own module:
|
|
10
|
+
// - `./cli/daemon-command` (PR A) — `daemon` subcommands
|
|
11
|
+
// - `./cli/help-text` (PR C) — `help` output
|
|
12
|
+
// - `./cli/upgrade-command` (PR C) — `upgrade`
|
|
13
|
+
// - `./cli/config-command` — `config` set/show/interactive
|
|
14
|
+
// - `./cli/preflight` — Temporal-touching, legitimately not crash-proof
|
|
15
|
+
// - `./cli/commands` — all Temporal-touching verbs (start, status, …)
|
|
16
|
+
// The `test/cli-crash-proof-isolation.test.ts` suite asserts the crash-proof
|
|
17
|
+
// modules carry no `@temporalio/*` / `rxjs` / `@grpc/*` leaks in their
|
|
18
|
+
// `require.cache` after load.
|
|
19
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
20
|
+
if (k2 === undefined) k2 = k;
|
|
21
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
22
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
23
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
24
|
+
}
|
|
25
|
+
Object.defineProperty(o, k2, desc);
|
|
26
|
+
}) : (function(o, m, k, k2) {
|
|
27
|
+
if (k2 === undefined) k2 = k;
|
|
28
|
+
o[k2] = m[k];
|
|
29
|
+
}));
|
|
30
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
31
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
32
|
+
}) : function(o, v) {
|
|
33
|
+
o["default"] = v;
|
|
34
|
+
});
|
|
35
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
36
|
+
var ownKeys = function(o) {
|
|
37
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
38
|
+
var ar = [];
|
|
39
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
40
|
+
return ar;
|
|
41
|
+
};
|
|
42
|
+
return ownKeys(o);
|
|
43
|
+
};
|
|
44
|
+
return function (mod) {
|
|
45
|
+
if (mod && mod.__esModule) return mod;
|
|
46
|
+
var result = {};
|
|
47
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
48
|
+
__setModuleDefault(result, mod);
|
|
49
|
+
return result;
|
|
50
|
+
};
|
|
51
|
+
})();
|
|
52
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
|
+
// MUST be the first import — promotes a top-level `--dev` flag into the
|
|
54
|
+
// `AGENT_TEMPO_DEV_MODE=1` env var BEFORE `./config` evaluates its
|
|
55
|
+
// module-load-time `AGENT_TEMPO_HOME` constant. ADR 0014 §5.4.
|
|
56
|
+
require("./cli/dev-mode-bootstrap");
|
|
57
|
+
const fs_1 = require("fs");
|
|
58
|
+
const path_1 = require("path");
|
|
59
|
+
const out = __importStar(require("./cli/output"));
|
|
60
|
+
const dev_banner_1 = require("./cli/dev-banner");
|
|
61
|
+
const types_1 = require("./types");
|
|
62
|
+
const config_1 = require("./config");
|
|
63
|
+
const legacy_migration_1 = require("./cli/legacy-migration");
|
|
64
|
+
/** Package root — cli.js compiles to dist/cli.js, so one level up. Used by the inline `version` handler. */
|
|
65
|
+
const PACKAGE_ROOT = (0, path_1.resolve)(__dirname, '..');
|
|
66
|
+
function parseArgs(argv) {
|
|
67
|
+
const result = {
|
|
68
|
+
command: 'tui',
|
|
69
|
+
positional: [],
|
|
70
|
+
dir: process.cwd(),
|
|
71
|
+
skipPreflight: false,
|
|
72
|
+
background: false,
|
|
73
|
+
keepMcp: false,
|
|
74
|
+
keepDaemon: false,
|
|
75
|
+
yes: false,
|
|
76
|
+
all: false,
|
|
77
|
+
allHosts: false,
|
|
78
|
+
project: false,
|
|
79
|
+
noHold: false,
|
|
80
|
+
destroy: false,
|
|
81
|
+
killSharedTemporal: false,
|
|
82
|
+
includeStale: false,
|
|
83
|
+
force: false,
|
|
84
|
+
includeSent: false,
|
|
85
|
+
json: false,
|
|
86
|
+
noOpen: false,
|
|
87
|
+
pair: false,
|
|
88
|
+
};
|
|
89
|
+
let i = 0;
|
|
90
|
+
while (i < argv.length) {
|
|
91
|
+
const arg = argv[i];
|
|
92
|
+
if (arg === '--temporal-address' && i + 1 < argv.length) {
|
|
93
|
+
result.temporalAddress = argv[++i];
|
|
94
|
+
}
|
|
95
|
+
else if (arg === '--temporal-namespace' && i + 1 < argv.length) {
|
|
96
|
+
result.temporalNamespace = argv[++i];
|
|
97
|
+
}
|
|
98
|
+
else if (arg === '--temporal-api-key' && i + 1 < argv.length) {
|
|
99
|
+
result.temporalApiKey = argv[++i];
|
|
100
|
+
}
|
|
101
|
+
else if (arg === '--temporal-tls-cert' && i + 1 < argv.length) {
|
|
102
|
+
result.temporalTlsCertPath = argv[++i];
|
|
103
|
+
}
|
|
104
|
+
else if (arg === '--temporal-tls-key' && i + 1 < argv.length) {
|
|
105
|
+
result.temporalTlsKeyPath = argv[++i];
|
|
106
|
+
}
|
|
107
|
+
else if (arg === '--lineup' && i + 1 < argv.length) {
|
|
108
|
+
result.lineup = argv[++i];
|
|
109
|
+
}
|
|
110
|
+
else if (arg === '--name' && i + 1 < argv.length) {
|
|
111
|
+
// Alias for the positional form on `recall` / `attachment-info`.
|
|
112
|
+
result.name = argv[++i];
|
|
113
|
+
}
|
|
114
|
+
else if ((arg === '-d' || arg === '--dir') && i + 1 < argv.length) {
|
|
115
|
+
result.dir = argv[++i];
|
|
116
|
+
}
|
|
117
|
+
else if (arg === '--skip-preflight') {
|
|
118
|
+
result.skipPreflight = true;
|
|
119
|
+
}
|
|
120
|
+
else if (arg === '--background') {
|
|
121
|
+
result.background = true;
|
|
122
|
+
}
|
|
123
|
+
else if (arg === '--keep-mcp') {
|
|
124
|
+
result.keepMcp = true;
|
|
125
|
+
}
|
|
126
|
+
else if (arg === '--keep-daemon') {
|
|
127
|
+
result.keepDaemon = true;
|
|
128
|
+
}
|
|
129
|
+
else if (arg === '--yes' || arg === '-y') {
|
|
130
|
+
result.yes = true;
|
|
131
|
+
}
|
|
132
|
+
else if (arg === '--all') {
|
|
133
|
+
result.all = true;
|
|
134
|
+
}
|
|
135
|
+
else if (arg === '--all-hosts') {
|
|
136
|
+
// #151: `restore --all-hosts` — cluster-view readonly orphan listing.
|
|
137
|
+
result.allHosts = true;
|
|
138
|
+
}
|
|
139
|
+
else if (arg === '--project') {
|
|
140
|
+
result.project = true;
|
|
141
|
+
}
|
|
142
|
+
else if (arg === '--no-hold') {
|
|
143
|
+
result.noHold = true;
|
|
144
|
+
}
|
|
145
|
+
else if (arg === '--destroy') {
|
|
146
|
+
result.destroy = true;
|
|
147
|
+
}
|
|
148
|
+
else if (arg === '--kill-shared-temporal') {
|
|
149
|
+
// #423 (down only): bypass the cross-profile coexistence guard and
|
|
150
|
+
// tear down the shared Temporal dev server even when the OPPOSITE
|
|
151
|
+
// profile is likely active. Without it, `--dev down` skips the
|
|
152
|
+
// Temporal kill to avoid collateral damage to the prod profile.
|
|
153
|
+
result.killSharedTemporal = true;
|
|
154
|
+
}
|
|
155
|
+
else if (arg === '--ensemble' && i + 1 < argv.length) {
|
|
156
|
+
result.ensemble = argv[++i];
|
|
157
|
+
}
|
|
158
|
+
else if (arg === '--type' && i + 1 < argv.length) {
|
|
159
|
+
result.type = argv[++i];
|
|
160
|
+
}
|
|
161
|
+
else if (arg === '--include-stale') {
|
|
162
|
+
result.includeStale = true;
|
|
163
|
+
}
|
|
164
|
+
else if (arg === '--host' && i + 1 < argv.length) {
|
|
165
|
+
result.host = argv[++i];
|
|
166
|
+
}
|
|
167
|
+
else if (arg === '--force') {
|
|
168
|
+
// Consumed by `daemon start --force` (bypass stale-PID guard) and by
|
|
169
|
+
// `migrate-from-claude-tempo --force` (bypass conflict + volatile-state guards).
|
|
170
|
+
result.force = true;
|
|
171
|
+
}
|
|
172
|
+
else if (arg === '--dry-run') {
|
|
173
|
+
// `migrate-from-claude-tempo --dry-run` — print the plan, write nothing.
|
|
174
|
+
result.dryRun = true;
|
|
175
|
+
}
|
|
176
|
+
else if (arg === '--no-open') {
|
|
177
|
+
// `dashboard --no-open` — print the URL without spawning a browser.
|
|
178
|
+
result.noOpen = true;
|
|
179
|
+
}
|
|
180
|
+
else if (arg === '--pair') {
|
|
181
|
+
// `dashboard --pair` — mint a single-use cross-device pairing token.
|
|
182
|
+
result.pair = true;
|
|
183
|
+
}
|
|
184
|
+
else if (arg === '--port' && i + 1 < argv.length) {
|
|
185
|
+
const n = Number(argv[++i]);
|
|
186
|
+
if (!Number.isInteger(n) || n < 1 || n > 65535) {
|
|
187
|
+
out.error(`Invalid --port: ${argv[i]} (expected 1-65535)`);
|
|
188
|
+
process.exit(1);
|
|
189
|
+
}
|
|
190
|
+
result.port = n;
|
|
191
|
+
}
|
|
192
|
+
else if (arg === '--bind' && i + 1 < argv.length) {
|
|
193
|
+
result.bind = argv[++i];
|
|
194
|
+
}
|
|
195
|
+
else if (arg === '--bearer' && i + 1 < argv.length) {
|
|
196
|
+
result.bearer = argv[++i];
|
|
197
|
+
}
|
|
198
|
+
else if (arg === '--scenario' && i + 1 < argv.length) {
|
|
199
|
+
// PR-3 of #340-followup. Threaded through to mock-player spawn envs by
|
|
200
|
+
// `up`'s `applyLineupPlayersAndSchedules`. Dev-mode only — silently
|
|
201
|
+
// no-ops outside dev mode because mock players can't exist there.
|
|
202
|
+
result.scenario = argv[++i];
|
|
203
|
+
}
|
|
204
|
+
else if (arg === '--limit' && i + 1 < argv.length) {
|
|
205
|
+
const raw = argv[++i];
|
|
206
|
+
const n = Number(raw);
|
|
207
|
+
if (!Number.isInteger(n) || n < 1) {
|
|
208
|
+
out.error(`Invalid --limit: ${raw}`);
|
|
209
|
+
process.exit(1);
|
|
210
|
+
}
|
|
211
|
+
// #270: cap at 100 to match the MCP Zod schema. Recall queries load
|
|
212
|
+
// the full inbox/sent history from the workflow; the cap bounds the
|
|
213
|
+
// worst-case payload across every surface. Use `--offset` to page.
|
|
214
|
+
if (n > 100) {
|
|
215
|
+
out.error(`--limit exceeds max (100). Use --offset N to page through more results.`);
|
|
216
|
+
process.exit(1);
|
|
217
|
+
}
|
|
218
|
+
result.limit = n;
|
|
219
|
+
}
|
|
220
|
+
else if (arg === '--offset' && i + 1 < argv.length) {
|
|
221
|
+
const n = Number(argv[++i]);
|
|
222
|
+
if (Number.isInteger(n) && n >= 0)
|
|
223
|
+
result.offset = n;
|
|
224
|
+
else {
|
|
225
|
+
out.error(`Invalid --offset: ${argv[i]}`);
|
|
226
|
+
process.exit(1);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
else if (arg === '--preview' && i + 1 < argv.length) {
|
|
230
|
+
const n = Number(argv[++i]);
|
|
231
|
+
if (Number.isInteger(n) && n >= 1)
|
|
232
|
+
result.previewLength = n;
|
|
233
|
+
else {
|
|
234
|
+
out.error(`Invalid --preview: ${argv[i]}`);
|
|
235
|
+
process.exit(1);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
else if (arg === '--since' && i + 1 < argv.length) {
|
|
239
|
+
result.since = argv[++i];
|
|
240
|
+
}
|
|
241
|
+
else if (arg === '--from' && i + 1 < argv.length) {
|
|
242
|
+
result.from = argv[++i];
|
|
243
|
+
}
|
|
244
|
+
else if (arg === '--include-sent') {
|
|
245
|
+
result.includeSent = true;
|
|
246
|
+
}
|
|
247
|
+
else if (arg === '--json') {
|
|
248
|
+
result.json = true;
|
|
249
|
+
}
|
|
250
|
+
else if (arg === '--agent' && i + 1 < argv.length) {
|
|
251
|
+
const val = argv[++i];
|
|
252
|
+
// #476: source the allowlist from the canonical `AGENT_TYPES` tuple in
|
|
253
|
+
// `src/types.ts` so the CLI surface tracks the union automatically when
|
|
254
|
+
// a new adapter lands. Pre-#476 this was a hardcoded `'claude'|'copilot'`
|
|
255
|
+
// pair that fell out of sync when `'mock'` (#220) and `'claude-api'`
|
|
256
|
+
// (#131) were added — `agent-tempo recruit --agent claude-api` errored
|
|
257
|
+
// out here even though the recruit MCP tool accepted it. Dev-mode gating
|
|
258
|
+
// for `'mock'` lives downstream at the recruit boundary (`src/tools/
|
|
259
|
+
// recruit.ts`, ADR 0014 §7 gate 3); we don't double-gate it here.
|
|
260
|
+
if (!types_1.AGENT_TYPES.includes(val)) {
|
|
261
|
+
out.error(`Invalid agent type: "${val}". Must be one of: ${types_1.AGENT_TYPES.join(', ')}.`);
|
|
262
|
+
process.exit(1);
|
|
263
|
+
}
|
|
264
|
+
result.agent = val;
|
|
265
|
+
}
|
|
266
|
+
else if (arg === '--help' || arg === '-h') {
|
|
267
|
+
result.command = 'help';
|
|
268
|
+
}
|
|
269
|
+
else if (arg === '--version' || arg === '-v') {
|
|
270
|
+
result.command = 'version';
|
|
271
|
+
}
|
|
272
|
+
else if (!arg.startsWith('-')) {
|
|
273
|
+
result.positional.push(arg);
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
out.error(`Unknown option: ${arg}`);
|
|
277
|
+
out.log(`Run ${out.dim('agent-tempo help')} for usage.`);
|
|
278
|
+
process.exit(1);
|
|
279
|
+
}
|
|
280
|
+
i++;
|
|
281
|
+
}
|
|
282
|
+
if (result.positional.length > 0) {
|
|
283
|
+
result.command = result.positional[0];
|
|
284
|
+
}
|
|
285
|
+
return result;
|
|
286
|
+
}
|
|
287
|
+
/** Extract CLI overrides for config resolution. */
|
|
288
|
+
function cliOverrides(args) {
|
|
289
|
+
return {
|
|
290
|
+
temporalAddress: args.temporalAddress,
|
|
291
|
+
temporalNamespace: args.temporalNamespace,
|
|
292
|
+
temporalApiKey: args.temporalApiKey,
|
|
293
|
+
temporalTlsCertPath: args.temporalTlsCertPath,
|
|
294
|
+
temporalTlsKeyPath: args.temporalTlsKeyPath,
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Format + print a {@link LegacyMigrationResult} from
|
|
299
|
+
* `migrate-from-claude-tempo`. Extracted to module scope (an if/else cascade
|
|
300
|
+
* rather than a nested switch) so the body doesn't trip the CLI surface-drift
|
|
301
|
+
* detector, which scans top-level `case '...':` labels in this file.
|
|
302
|
+
*/
|
|
303
|
+
function reportMigrationResult(result) {
|
|
304
|
+
const msg = (0, legacy_migration_1.formatMigrationResult)(result);
|
|
305
|
+
if (result.status === 'no-legacy' || result.status === 'already-migrated') {
|
|
306
|
+
out.success(msg);
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
if (result.status === 'migrated') {
|
|
310
|
+
out.success(msg);
|
|
311
|
+
if (result.copiedFiles?.length) {
|
|
312
|
+
for (const f of result.copiedFiles)
|
|
313
|
+
out.log(` ${out.dim('+')} ${f}`);
|
|
314
|
+
}
|
|
315
|
+
if (result.errors?.length) {
|
|
316
|
+
for (const e of result.errors)
|
|
317
|
+
out.warn(e);
|
|
318
|
+
}
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
if (result.status === 'skipped') {
|
|
322
|
+
out.warn(msg);
|
|
323
|
+
process.exitCode = 1;
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
// 'failed'
|
|
327
|
+
out.error(msg);
|
|
328
|
+
process.exitCode = 1;
|
|
329
|
+
}
|
|
330
|
+
async function main() {
|
|
331
|
+
const args = parseArgs(process.argv.slice(2));
|
|
332
|
+
const overrides = cliOverrides(args);
|
|
333
|
+
// ADR 0014 §5.4 / gate 4: every dev-mode CLI invocation prints the
|
|
334
|
+
// `[DEV MODE]` banner so operators (and operators' daemon log files)
|
|
335
|
+
// self-identify as the dev profile. Banner emits to stderr — keeps
|
|
336
|
+
// `--json` stdout consumers clean.
|
|
337
|
+
(0, dev_banner_1.emitDevBannerIfActive)();
|
|
338
|
+
// ── Crash-proof fast paths (#157 PR C) ────────────────────────────────
|
|
339
|
+
// These handlers MUST NOT reach `./cli/commands`, `./cli/preflight`, or
|
|
340
|
+
// any other module that transitively imports `@temporalio/*` / `rxjs` /
|
|
341
|
+
// `@grpc/*`. Keeping their dispatch ABOVE the `import('./cli/commands')`
|
|
342
|
+
// line is what makes them resilient to a broken Temporal SDK install —
|
|
343
|
+
// the scenario users are often trying to recover from by running one of
|
|
344
|
+
// these very commands. Any future crash-proof candidate should slot in
|
|
345
|
+
// here AND get added to CRASH_PROOF_MODULES in the isolation test.
|
|
346
|
+
//
|
|
347
|
+
// Enumerated crash-proof entrypoints:
|
|
348
|
+
// version / --version / -v (inline below)
|
|
349
|
+
// help / --help / -h (→ ./cli/help-text)
|
|
350
|
+
// daemon <sub> (→ ./cli/daemon-command) [PR A]
|
|
351
|
+
// upgrade [version] (→ ./cli/upgrade-command) [PR C]
|
|
352
|
+
// config / config show / config set (→ ./cli/config-command) [PR C]
|
|
353
|
+
if (args.command === 'version') {
|
|
354
|
+
try {
|
|
355
|
+
const pkg = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(PACKAGE_ROOT, 'package.json'), 'utf8'));
|
|
356
|
+
out.log(`agent-tempo v${pkg.version}`);
|
|
357
|
+
}
|
|
358
|
+
catch {
|
|
359
|
+
out.log('agent-tempo (unknown version)');
|
|
360
|
+
}
|
|
361
|
+
return;
|
|
362
|
+
}
|
|
363
|
+
if (args.command === 'help') {
|
|
364
|
+
const { printHelp } = await Promise.resolve().then(() => __importStar(require('./cli/help-text')));
|
|
365
|
+
printHelp();
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
368
|
+
if (args.command === 'daemon') {
|
|
369
|
+
const { daemon } = await Promise.resolve().then(() => __importStar(require('./cli/daemon-command')));
|
|
370
|
+
await daemon({
|
|
371
|
+
subcommand: args.positional[1],
|
|
372
|
+
force: args.force,
|
|
373
|
+
...overrides,
|
|
374
|
+
});
|
|
375
|
+
return;
|
|
376
|
+
}
|
|
377
|
+
if (args.command === 'upgrade') {
|
|
378
|
+
const { upgrade } = await Promise.resolve().then(() => __importStar(require('./cli/upgrade-command')));
|
|
379
|
+
await upgrade({
|
|
380
|
+
version: args.positional[1], // "0.20.0" | "latest" | undefined
|
|
381
|
+
...overrides,
|
|
382
|
+
});
|
|
383
|
+
return;
|
|
384
|
+
}
|
|
385
|
+
if (args.command === 'config') {
|
|
386
|
+
const { configCommand } = await Promise.resolve().then(() => __importStar(require('./cli/config-command')));
|
|
387
|
+
await configCommand(args.positional);
|
|
388
|
+
return;
|
|
389
|
+
}
|
|
390
|
+
if (args.command === 'dashboard') {
|
|
391
|
+
// PR-8 of #340. Crash-proof — stays out of `./cli/commands` so a
|
|
392
|
+
// broken Temporal SDK doesn't block operators from opening the
|
|
393
|
+
// dashboard against an already-running daemon.
|
|
394
|
+
const { dashboardCommand } = await Promise.resolve().then(() => __importStar(require('./cli/dashboard-command')));
|
|
395
|
+
await dashboardCommand({
|
|
396
|
+
port: args.port,
|
|
397
|
+
bind: args.bind,
|
|
398
|
+
noOpen: args.noOpen,
|
|
399
|
+
pair: args.pair,
|
|
400
|
+
bearer: args.bearer,
|
|
401
|
+
json: args.json,
|
|
402
|
+
...overrides,
|
|
403
|
+
});
|
|
404
|
+
return;
|
|
405
|
+
}
|
|
406
|
+
// Dev-mode scriptable verbs (#432). Gated on `isDevMode()` AND an explicit
|
|
407
|
+
// allowlist (`DEV_VERBS`); intercepts BEFORE the removed-verbs check so
|
|
408
|
+
// verbs like `pause` (collapsed by #288) can act on the live ensemble in
|
|
409
|
+
// dev mode. NOT crash-proof — dev mode requires Temporal anyway, and the
|
|
410
|
+
// dynamic-import keeps `cli.ts` itself out of `dev-verbs.ts`'s module
|
|
411
|
+
// graph at the top level. The DEV_VERBS ↔ REMOVED_VERBS ↔ cli.ts switch
|
|
412
|
+
// invariants are mechanically asserted by `test/cli-dev-verbs.test.ts`.
|
|
413
|
+
if ((0, config_1.isDevMode)()) {
|
|
414
|
+
const { DEV_VERBS, dispatchDevVerb } = await Promise.resolve().then(() => __importStar(require('./cli/dev-verbs')));
|
|
415
|
+
if (DEV_VERBS.has(args.command)) {
|
|
416
|
+
const ensemble = args.ensemble || process.env[config_1.ENV.ENSEMBLE] || 'default';
|
|
417
|
+
await dispatchDevVerb(args.command, {
|
|
418
|
+
positional: args.positional,
|
|
419
|
+
ensemble,
|
|
420
|
+
...overrides,
|
|
421
|
+
});
|
|
422
|
+
return;
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
// Removed-verb fast path (#288). Intercepted BEFORE the Temporal-touching
|
|
426
|
+
// `./cli/commands` import so the friendly error message works even when
|
|
427
|
+
// Temporal is broken — same reasoning as the crash-proof `help` path.
|
|
428
|
+
const { REMOVED_VERBS, printRemovedVerbMessage } = await Promise.resolve().then(() => __importStar(require('./cli/removed-verbs')));
|
|
429
|
+
if (Object.prototype.hasOwnProperty.call(REMOVED_VERBS, args.command)) {
|
|
430
|
+
printRemovedVerbMessage(args.command);
|
|
431
|
+
process.exit(1);
|
|
432
|
+
}
|
|
433
|
+
// All other commands: lazy-load the full command surface now.
|
|
434
|
+
const { status, init, server, up, down, ensembleCommand, agentTypesCommand, broadcast, release, destroy, attachmentInfo, recall, hosts, refreshHostProfile, restore, } = await Promise.resolve().then(() => __importStar(require('./cli/commands')));
|
|
435
|
+
const ensemble = args.positional[1] || process.env[config_1.ENV.ENSEMBLE] || 'default';
|
|
436
|
+
// Resolve the default agent from config (only needed for commands that use it)
|
|
437
|
+
const resolvedAgent = () => args.agent ?? (0, config_1.getConfig)(overrides).defaultAgent;
|
|
438
|
+
switch (args.command) {
|
|
439
|
+
case 'status':
|
|
440
|
+
await status({
|
|
441
|
+
ensemble: args.positional[1], // undefined = show all
|
|
442
|
+
...overrides,
|
|
443
|
+
});
|
|
444
|
+
break;
|
|
445
|
+
case 'server':
|
|
446
|
+
await server({
|
|
447
|
+
background: args.background,
|
|
448
|
+
...overrides,
|
|
449
|
+
});
|
|
450
|
+
break;
|
|
451
|
+
case 'down':
|
|
452
|
+
await down({
|
|
453
|
+
removeMcp: !args.keepMcp,
|
|
454
|
+
keepDaemon: args.keepDaemon,
|
|
455
|
+
killSharedTemporal: args.killSharedTemporal,
|
|
456
|
+
yes: args.yes,
|
|
457
|
+
destroy: args.destroy,
|
|
458
|
+
dir: args.dir,
|
|
459
|
+
...overrides,
|
|
460
|
+
});
|
|
461
|
+
break;
|
|
462
|
+
case 'up':
|
|
463
|
+
await up({
|
|
464
|
+
ensemble,
|
|
465
|
+
name: args.name,
|
|
466
|
+
lineup: args.lineup,
|
|
467
|
+
noHold: args.noHold,
|
|
468
|
+
agent: resolvedAgent(),
|
|
469
|
+
...(args.scenario ? { scenario: args.scenario } : {}),
|
|
470
|
+
...overrides,
|
|
471
|
+
});
|
|
472
|
+
break;
|
|
473
|
+
case 'broadcast': {
|
|
474
|
+
const msg = args.positional.slice(1).join(' ');
|
|
475
|
+
if (!msg) {
|
|
476
|
+
out.error('Usage: agent-tempo broadcast <message> [--ensemble <name>] [--type <player-type>] [--include-stale]');
|
|
477
|
+
process.exit(1);
|
|
478
|
+
}
|
|
479
|
+
await broadcast({
|
|
480
|
+
message: msg,
|
|
481
|
+
ensemble: args.ensemble || ensemble,
|
|
482
|
+
type: args.type,
|
|
483
|
+
includeStale: args.includeStale,
|
|
484
|
+
...overrides,
|
|
485
|
+
});
|
|
486
|
+
break;
|
|
487
|
+
}
|
|
488
|
+
case 'release':
|
|
489
|
+
await release({
|
|
490
|
+
ensemble: args.ensemble || ensemble,
|
|
491
|
+
...overrides,
|
|
492
|
+
});
|
|
493
|
+
break;
|
|
494
|
+
case 'destroy': {
|
|
495
|
+
const target = args.positional[1] || args.ensemble || process.env[config_1.ENV.ENSEMBLE];
|
|
496
|
+
if (!target) {
|
|
497
|
+
out.error('Usage: agent-tempo destroy <ensemble> [-y]');
|
|
498
|
+
process.exit(1);
|
|
499
|
+
}
|
|
500
|
+
await destroy({
|
|
501
|
+
ensemble: target,
|
|
502
|
+
yes: args.yes,
|
|
503
|
+
...overrides,
|
|
504
|
+
});
|
|
505
|
+
break;
|
|
506
|
+
}
|
|
507
|
+
case 'attachment-info':
|
|
508
|
+
case 'attachment': {
|
|
509
|
+
const name = args.positional[1] || args.name;
|
|
510
|
+
if (!name) {
|
|
511
|
+
out.error('Usage: agent-tempo attachment-info <name>');
|
|
512
|
+
process.exit(1);
|
|
513
|
+
}
|
|
514
|
+
await attachmentInfo({
|
|
515
|
+
name,
|
|
516
|
+
ensemble: args.ensemble || ensemble,
|
|
517
|
+
...overrides,
|
|
518
|
+
});
|
|
519
|
+
break;
|
|
520
|
+
}
|
|
521
|
+
case 'hosts': {
|
|
522
|
+
await hosts({
|
|
523
|
+
ensemble: args.ensemble || ensemble,
|
|
524
|
+
...(args.all ? { all: true } : {}),
|
|
525
|
+
...(args.json ? { json: true } : {}),
|
|
526
|
+
...overrides,
|
|
527
|
+
});
|
|
528
|
+
break;
|
|
529
|
+
}
|
|
530
|
+
case 'refresh-host-profile': {
|
|
531
|
+
await refreshHostProfile({
|
|
532
|
+
ensemble: args.ensemble || ensemble,
|
|
533
|
+
...overrides,
|
|
534
|
+
});
|
|
535
|
+
break;
|
|
536
|
+
}
|
|
537
|
+
case 'recall': {
|
|
538
|
+
// Positional player is required — matches the #128 design.
|
|
539
|
+
const name = args.positional[1] || args.name;
|
|
540
|
+
if (!name) {
|
|
541
|
+
out.error('Usage: agent-tempo recall <player> [--limit N] [--offset N] [--preview N] [--from X] [--since ISO] [--include-sent] [--json]');
|
|
542
|
+
process.exit(1);
|
|
543
|
+
}
|
|
544
|
+
await recall({
|
|
545
|
+
name,
|
|
546
|
+
ensemble: args.ensemble || ensemble,
|
|
547
|
+
...(args.limit !== undefined ? { limit: args.limit } : {}),
|
|
548
|
+
...(args.offset !== undefined ? { offset: args.offset } : {}),
|
|
549
|
+
...(args.previewLength !== undefined ? { previewLength: args.previewLength } : {}),
|
|
550
|
+
...(args.since !== undefined ? { since: args.since } : {}),
|
|
551
|
+
...(args.from !== undefined ? { from: args.from } : {}),
|
|
552
|
+
...(args.includeSent ? { includeSent: true } : {}),
|
|
553
|
+
...(args.json ? { json: true } : {}),
|
|
554
|
+
...overrides,
|
|
555
|
+
});
|
|
556
|
+
break;
|
|
557
|
+
}
|
|
558
|
+
case 'restore': {
|
|
559
|
+
// #288: ensemble-scoped local mode requires a positional name.
|
|
560
|
+
// #151: `--all-hosts` switches to cluster-view readonly listing
|
|
561
|
+
// — ensemble becomes optional (when set, narrows the listing).
|
|
562
|
+
const target = args.positional[1] || args.ensemble || process.env[config_1.ENV.ENSEMBLE];
|
|
563
|
+
if (!args.allHosts && !target) {
|
|
564
|
+
out.error('Usage: agent-tempo restore <ensemble> (or --all-hosts for cluster-view)');
|
|
565
|
+
process.exit(1);
|
|
566
|
+
}
|
|
567
|
+
await restore({
|
|
568
|
+
...(target ? { ensemble: target } : {}),
|
|
569
|
+
...(args.allHosts ? { allHosts: true } : {}),
|
|
570
|
+
...overrides,
|
|
571
|
+
});
|
|
572
|
+
break;
|
|
573
|
+
}
|
|
574
|
+
case 'ensemble':
|
|
575
|
+
await ensembleCommand({
|
|
576
|
+
subcommand: args.positional[1],
|
|
577
|
+
name: args.positional[2],
|
|
578
|
+
...overrides,
|
|
579
|
+
});
|
|
580
|
+
break;
|
|
581
|
+
case 'agent-types':
|
|
582
|
+
await agentTypesCommand({
|
|
583
|
+
subcommand: args.positional[1],
|
|
584
|
+
name: args.positional[2],
|
|
585
|
+
});
|
|
586
|
+
break;
|
|
587
|
+
case 'scenarios': {
|
|
588
|
+
// ADR 0014 PR-2 — mock-adapter scenario library discovery surface.
|
|
589
|
+
// Available regardless of `--dev` so users investigating a published
|
|
590
|
+
// agent-tempo can see the shipped library; but the actual recruit
|
|
591
|
+
// gate (`agent: 'mock'`) still rejects without dev mode.
|
|
592
|
+
const { scenariosCommand } = await Promise.resolve().then(() => __importStar(require('./cli/scenarios-command')));
|
|
593
|
+
await scenariosCommand({
|
|
594
|
+
subcommand: args.positional[1],
|
|
595
|
+
name: args.positional[2],
|
|
596
|
+
json: args.json,
|
|
597
|
+
});
|
|
598
|
+
break;
|
|
599
|
+
}
|
|
600
|
+
case 'init':
|
|
601
|
+
await init({ dir: args.dir, project: args.project });
|
|
602
|
+
break;
|
|
603
|
+
case 'migrate-from-claude-tempo': {
|
|
604
|
+
// PR-2 of the v1.0 rebrand — one-shot copy of `~/.agent-tempo/` →
|
|
605
|
+
// `~/.agent-tempo/`. Crash-proof (no Temporal deps). The `--dev`
|
|
606
|
+
// top-level flag selects the dev profile (`~/.agent-tempo-dev/` →
|
|
607
|
+
// `~/.agent-tempo-dev/`) via {@link isDevMode}.
|
|
608
|
+
const { migrateLegacyHome } = await Promise.resolve().then(() => __importStar(require('./cli/legacy-migration')));
|
|
609
|
+
const result = await migrateLegacyHome({
|
|
610
|
+
dryRun: !!args.dryRun,
|
|
611
|
+
force: !!args.force,
|
|
612
|
+
profile: (0, config_1.isDevMode)() ? 'dev' : 'prod',
|
|
613
|
+
});
|
|
614
|
+
reportMigrationResult(result);
|
|
615
|
+
break;
|
|
616
|
+
}
|
|
617
|
+
case 'preflight': {
|
|
618
|
+
// Preflight legitimately requires Temporal (that's what it tests), so
|
|
619
|
+
// it's NOT in the crash-proof module set. Dynamic-imported here so its
|
|
620
|
+
// static import doesn't leak into the top-level module graph of cli.ts
|
|
621
|
+
// (which would undo the crash-proofing of version/help/daemon/etc).
|
|
622
|
+
const { runPreflight } = await Promise.resolve().then(() => __importStar(require('./cli/preflight')));
|
|
623
|
+
const result = await runPreflight({
|
|
624
|
+
dir: args.dir,
|
|
625
|
+
...overrides,
|
|
626
|
+
});
|
|
627
|
+
for (const w of result.warnings)
|
|
628
|
+
out.warn(w);
|
|
629
|
+
if (!result.ok) {
|
|
630
|
+
for (const e of result.errors)
|
|
631
|
+
out.error(e);
|
|
632
|
+
process.exit(1);
|
|
633
|
+
}
|
|
634
|
+
out.success('All checks passed');
|
|
635
|
+
break;
|
|
636
|
+
}
|
|
637
|
+
case 'tui': {
|
|
638
|
+
const config = (0, config_1.getConfig)(overrides);
|
|
639
|
+
// If --ensemble or positional arg given, start in single-ensemble view.
|
|
640
|
+
// Otherwise, start in multi-ensemble home view.
|
|
641
|
+
const tuiEnsemble = args.ensemble || args.positional[1] || undefined;
|
|
642
|
+
// #289 / S7: run the auto-provisioning bootstrap before handing off
|
|
643
|
+
// to the TUI. Steps 1–6 register MCP, ensure Temporal reachability,
|
|
644
|
+
// boot the daemon, and prefetch badges + ensembles so the TUI home
|
|
645
|
+
// view renders instantly. `skipPreflight` bypass: power users can
|
|
646
|
+
// opt out if the cache / disk-probe cost ever regresses (no current
|
|
647
|
+
// way to trigger, but the flag is already on the parser).
|
|
648
|
+
let bootstrapResult;
|
|
649
|
+
if (!args.skipPreflight) {
|
|
650
|
+
const { bootstrap } = await Promise.resolve().then(() => __importStar(require('./cli/startup')));
|
|
651
|
+
try {
|
|
652
|
+
bootstrapResult = await bootstrap({ config });
|
|
653
|
+
}
|
|
654
|
+
catch (err) {
|
|
655
|
+
// Bootstrap is best-effort — per-step failures degrade into
|
|
656
|
+
// `StepOutcome.status: 'failed'` and a usable result. A thrown
|
|
657
|
+
// error means something outside the step boundaries broke
|
|
658
|
+
// (e.g. cache-dir creation). Log + continue with an undefined
|
|
659
|
+
// bootstrap payload so the TUI still launches.
|
|
660
|
+
out.warn(`Bootstrap hit an unexpected error: ${err instanceof Error ? err.message : String(err)}`);
|
|
661
|
+
}
|
|
662
|
+
}
|
|
663
|
+
// Dynamic import — TUI module uses ESM ink
|
|
664
|
+
const { run: runTui } = await Promise.resolve().then(() => __importStar(require('./tui/index')));
|
|
665
|
+
await runTui({ config, ensemble: tuiEnsemble, ...(bootstrapResult ? { bootstrap: bootstrapResult } : {}) });
|
|
666
|
+
break;
|
|
667
|
+
}
|
|
668
|
+
// `version`, `help`, `upgrade`, `config`, `daemon`, and removed-verb
|
|
669
|
+
// dispatch handled above the `./cli/commands` import — crash-proof
|
|
670
|
+
// fast paths (#157 PR C + #288).
|
|
671
|
+
default:
|
|
672
|
+
out.error(`Unknown command: ${args.command}`);
|
|
673
|
+
out.log(`Run ${out.dim('agent-tempo --help')} for usage.`);
|
|
674
|
+
process.exit(1);
|
|
675
|
+
}
|
|
676
|
+
}
|
|
677
|
+
main().catch((err) => {
|
|
678
|
+
out.error(err.message || String(err));
|
|
679
|
+
process.exit(1);
|
|
680
|
+
});
|