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
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createMaestroActivities = createMaestroActivities;
|
|
4
|
+
const activity_1 = require("@temporalio/activity");
|
|
5
|
+
const config_1 = require("../config");
|
|
6
|
+
const types_1 = require("../types");
|
|
7
|
+
const resolve_1 = require("./resolve");
|
|
8
|
+
const visibility_deadline_1 = require("../utils/visibility-deadline");
|
|
9
|
+
const log = (...args) => console.error('[agent-tempo:maestro]', ...args);
|
|
10
|
+
/**
|
|
11
|
+
* Create the Maestro activity implementations bound to a Temporal client.
|
|
12
|
+
* Registered with the shared worker.
|
|
13
|
+
*/
|
|
14
|
+
function createMaestroActivities(client) {
|
|
15
|
+
return {
|
|
16
|
+
async refreshEnsembleState(ensemble) {
|
|
17
|
+
try {
|
|
18
|
+
const sessions = await (0, resolve_1.scanEnsembleSessions)(client, ensemble);
|
|
19
|
+
return sessions.map((s) => ({
|
|
20
|
+
playerId: s.playerId,
|
|
21
|
+
ensemble,
|
|
22
|
+
part: s.part,
|
|
23
|
+
hostname: s.hostname,
|
|
24
|
+
workDir: s.workDir,
|
|
25
|
+
gitRoot: s.gitRoot,
|
|
26
|
+
gitBranch: s.gitBranch,
|
|
27
|
+
isConductor: s.isConductor,
|
|
28
|
+
agentType: s.agentType,
|
|
29
|
+
playerType: s.playerType,
|
|
30
|
+
phase: s.phase,
|
|
31
|
+
// #399 W1 — forward the activity-counter pair so the maestro's
|
|
32
|
+
// tempo bucket can diff across refreshes.
|
|
33
|
+
activityCount: s.activityCount,
|
|
34
|
+
lastActivityAt: s.lastActivityAt,
|
|
35
|
+
}));
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
log('refreshEnsembleState failed:', err);
|
|
39
|
+
throw activity_1.ApplicationFailure.nonRetryable(`Failed to scan ensemble: ${err instanceof Error ? err.message : String(err)}`);
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
async fetchConductorHistory(input) {
|
|
43
|
+
try {
|
|
44
|
+
const wfId = (0, config_1.conductorWorkflowId)(input.ensemble);
|
|
45
|
+
const handle = client.workflow.getHandle(wfId);
|
|
46
|
+
const history = await handle.query('history');
|
|
47
|
+
return { success: true, history };
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
// ContinueAsNew transient errors and missing conductor are soft failures
|
|
51
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
52
|
+
log('fetchConductorHistory failed (soft):', msg);
|
|
53
|
+
return { success: false, history: [], error: msg };
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
async relayCommandToConductor(input) {
|
|
57
|
+
try {
|
|
58
|
+
const wfId = (0, config_1.conductorWorkflowId)(input.ensemble);
|
|
59
|
+
const handle = client.workflow.getHandle(wfId);
|
|
60
|
+
await handle.signal('command', {
|
|
61
|
+
text: input.text,
|
|
62
|
+
source: input.source,
|
|
63
|
+
...(input.replyTo ? { replyTo: input.replyTo } : {}),
|
|
64
|
+
});
|
|
65
|
+
return { success: true };
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
69
|
+
log('relayCommandToConductor failed:', msg);
|
|
70
|
+
return { success: false, error: msg };
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
async discoverEnsembles() {
|
|
74
|
+
// #336/#529 — bounded visibility iterator. On deadline, return
|
|
75
|
+
// the partial result rather than aborting; the maestro retries on
|
|
76
|
+
// its own schedule, so a truncated enumeration this tick self-heals
|
|
77
|
+
// on the next.
|
|
78
|
+
const ensembles = new Set();
|
|
79
|
+
const query = `WorkflowType = "agentSessionWorkflow" AND ExecutionStatus = "Running"`;
|
|
80
|
+
try {
|
|
81
|
+
for await (const wf of (0, visibility_deadline_1.iterateWithDeadline)(client.workflow.list({ query }), visibility_deadline_1.VISIBILITY_DEADLINES_MS.discoverEnsembles, 'discoverEnsembles')) {
|
|
82
|
+
try {
|
|
83
|
+
const handle = client.workflow.getHandle(wf.workflowId);
|
|
84
|
+
const metadata = await handle.query('getMetadata');
|
|
85
|
+
if (metadata.ensemble) {
|
|
86
|
+
ensembles.add(metadata.ensemble);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
// Workflow may have completed — skip
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return Array.from(ensembles).sort();
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
if ((0, visibility_deadline_1.isVisibilityTimeout)(err)) {
|
|
97
|
+
log(`discoverEnsembles: ${err.message} — returning partial (${ensembles.size} ensembles)`);
|
|
98
|
+
return Array.from(ensembles).sort();
|
|
99
|
+
}
|
|
100
|
+
// Discovery failures are typically transient (network, server restart) — allow retry
|
|
101
|
+
log('discoverEnsembles failed:', err);
|
|
102
|
+
throw new Error(`Failed to discover ensembles: ${err instanceof Error ? err.message : String(err)}`);
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
async deliverMaestroMessage(input) {
|
|
106
|
+
try {
|
|
107
|
+
const handle = await (0, resolve_1.resolveSession)(client, input.ensemble, input.to);
|
|
108
|
+
if (!handle) {
|
|
109
|
+
return { success: false, error: `Player '${input.to}' not found in ensemble '${input.ensemble}'` };
|
|
110
|
+
}
|
|
111
|
+
await handle.signal('receiveMessage', {
|
|
112
|
+
from: input.source,
|
|
113
|
+
text: input.text,
|
|
114
|
+
isMaestro: true,
|
|
115
|
+
});
|
|
116
|
+
return { success: true };
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
120
|
+
log('deliverMaestroMessage failed:', msg);
|
|
121
|
+
return { success: false, error: msg };
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
async fetchPlayerMessages(input) {
|
|
125
|
+
try {
|
|
126
|
+
const handle = await (0, resolve_1.resolveSession)(client, input.ensemble, input.playerId);
|
|
127
|
+
if (!handle) {
|
|
128
|
+
return { success: false, messages: [], error: `Player '${input.playerId}' not found in ensemble '${input.ensemble}'` };
|
|
129
|
+
}
|
|
130
|
+
const received = await handle.query('allMessages');
|
|
131
|
+
const sent = await handle.query('allSentMessages');
|
|
132
|
+
// Merge into a single timeline sorted by timestamp
|
|
133
|
+
const merged = [
|
|
134
|
+
...received.map((m) => ({ ...m, direction: 'received' })),
|
|
135
|
+
...sent.map((m) => ({ ...m, direction: 'sent' })),
|
|
136
|
+
];
|
|
137
|
+
merged.sort((a, b) => a.timestamp.localeCompare(b.timestamp));
|
|
138
|
+
return { success: true, messages: merged };
|
|
139
|
+
}
|
|
140
|
+
catch (err) {
|
|
141
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
142
|
+
log('fetchPlayerMessages failed (soft):', msg);
|
|
143
|
+
return { success: false, messages: [], error: msg };
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
async fetchEnsembleChat(input) {
|
|
147
|
+
const { ensemble, knownCounts } = input;
|
|
148
|
+
const hw = knownCounts ?? types_1.ZERO_CHAT_HIGH_WATER;
|
|
149
|
+
const TRUNC = 500;
|
|
150
|
+
const truncate = (t) => t.length > TRUNC ? t.slice(0, TRUNC - 1) + '...' : t;
|
|
151
|
+
try {
|
|
152
|
+
const maestroHandle = client.workflow.getHandle((0, config_1.sessionWorkflowId)(ensemble, 'maestro'));
|
|
153
|
+
let conductorHandle = null;
|
|
154
|
+
let conductorId = '';
|
|
155
|
+
const sessions = await (0, resolve_1.scanEnsembleSessions)(client, ensemble);
|
|
156
|
+
const conductorSession = sessions.find(s => s.isConductor);
|
|
157
|
+
if (conductorSession) {
|
|
158
|
+
conductorHandle = client.workflow.getHandle(conductorSession.workflowId);
|
|
159
|
+
conductorId = conductorSession.playerId;
|
|
160
|
+
}
|
|
161
|
+
const [maestroRecvRes, maestroSentRes, condRecvRes, condSentRes] = await Promise.allSettled([
|
|
162
|
+
maestroHandle.query('allMessages'),
|
|
163
|
+
maestroHandle.query('allSentMessages'),
|
|
164
|
+
conductorHandle ? conductorHandle.query('allMessages') : Promise.resolve([]),
|
|
165
|
+
conductorHandle ? conductorHandle.query('allSentMessages') : Promise.resolve([]),
|
|
166
|
+
]);
|
|
167
|
+
const maestroRecv = maestroRecvRes.status === 'fulfilled' ? maestroRecvRes.value : [];
|
|
168
|
+
const maestroSent = maestroSentRes.status === 'fulfilled' ? maestroSentRes.value : [];
|
|
169
|
+
const condRecv = condRecvRes.status === 'fulfilled' ? condRecvRes.value : [];
|
|
170
|
+
const condSent = condSentRes.status === 'fulfilled' ? condSentRes.value : [];
|
|
171
|
+
const newMessages = [];
|
|
172
|
+
// #357: each push site forwards the source's broadcastId (when
|
|
173
|
+
// present) onto the projected EnsembleChatMessage so the TUI's
|
|
174
|
+
// ConversationStream can fold fan-out deliveries into one row.
|
|
175
|
+
const maybeBroadcast = (m) => m.broadcastId !== undefined ? { broadcastId: m.broadcastId } : {};
|
|
176
|
+
for (const m of maestroRecv.slice(hw.maestroRecv)) {
|
|
177
|
+
newMessages.push({
|
|
178
|
+
id: m.id,
|
|
179
|
+
from: m.from,
|
|
180
|
+
to: 'maestro',
|
|
181
|
+
text: m.text,
|
|
182
|
+
timestamp: m.timestamp,
|
|
183
|
+
role: 'maestro-in',
|
|
184
|
+
...maybeBroadcast(m),
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
for (const m of maestroSent.slice(hw.maestroSent)) {
|
|
188
|
+
newMessages.push({
|
|
189
|
+
id: m.id,
|
|
190
|
+
from: 'maestro',
|
|
191
|
+
to: m.to,
|
|
192
|
+
text: m.text,
|
|
193
|
+
timestamp: m.timestamp,
|
|
194
|
+
role: 'maestro-out',
|
|
195
|
+
...maybeBroadcast(m),
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
for (const m of condRecv.slice(hw.conductorRecv)) {
|
|
199
|
+
if (m.from === 'maestro' || m.isMaestro)
|
|
200
|
+
continue; // Skip maestro<->conductor (already covered)
|
|
201
|
+
// Conductor self-reports (e.g. `tempo-conductor` calling `report`) land in the
|
|
202
|
+
// conductor's own `messages` array. Re-target them as inbound-to-maestro so the
|
|
203
|
+
// chat renders "tempo-conductor → maestro" instead of a confusing self-loop.
|
|
204
|
+
const isConductorSelfReport = m.from === conductorId;
|
|
205
|
+
newMessages.push({
|
|
206
|
+
id: `cond-${m.id}`,
|
|
207
|
+
from: m.from,
|
|
208
|
+
to: isConductorSelfReport ? 'maestro' : conductorId,
|
|
209
|
+
text: truncate(m.text),
|
|
210
|
+
timestamp: m.timestamp,
|
|
211
|
+
role: isConductorSelfReport ? 'maestro-in' : 'conductor-in',
|
|
212
|
+
...maybeBroadcast(m),
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
for (const m of condSent.slice(hw.conductorSent)) {
|
|
216
|
+
if (m.to === 'maestro')
|
|
217
|
+
continue; // Skip conductor->maestro (already covered)
|
|
218
|
+
newMessages.push({
|
|
219
|
+
id: `cond-${m.id}`,
|
|
220
|
+
from: conductorId,
|
|
221
|
+
to: m.to,
|
|
222
|
+
text: truncate(m.text),
|
|
223
|
+
timestamp: m.timestamp,
|
|
224
|
+
role: 'conductor-out',
|
|
225
|
+
...maybeBroadcast(m),
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
newMessages.sort((a, b) => a.timestamp.localeCompare(b.timestamp));
|
|
229
|
+
return {
|
|
230
|
+
success: true,
|
|
231
|
+
newMessages,
|
|
232
|
+
currentCounts: {
|
|
233
|
+
maestroRecv: maestroRecv.length,
|
|
234
|
+
maestroSent: maestroSent.length,
|
|
235
|
+
conductorRecv: condRecv.length,
|
|
236
|
+
conductorSent: condSent.length,
|
|
237
|
+
},
|
|
238
|
+
hasConductor: !!conductorHandle,
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
catch (err) {
|
|
242
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
243
|
+
log('fetchEnsembleChat failed:', msg);
|
|
244
|
+
return {
|
|
245
|
+
success: false,
|
|
246
|
+
newMessages: [],
|
|
247
|
+
currentCounts: hw,
|
|
248
|
+
hasConductor: false,
|
|
249
|
+
error: msg,
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
},
|
|
253
|
+
};
|
|
254
|
+
}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { Client } from '@temporalio/client';
|
|
2
|
+
import { Config } from '../config';
|
|
3
|
+
import { AgentType, MockMode, DetachReason } from '../types';
|
|
4
|
+
import type { ClaudeCodeHeadlessPermissionMode } from '../adapters/claude-code-headless/types';
|
|
5
|
+
import { type HardTerminateInput, type HardTerminateResult } from './hard-terminate';
|
|
6
|
+
export interface DeliverCueInput {
|
|
7
|
+
ensemble: string;
|
|
8
|
+
fromPlayerId: string;
|
|
9
|
+
targetPlayerId: string;
|
|
10
|
+
message: string;
|
|
11
|
+
/**
|
|
12
|
+
* #357: Stable id shared across every fan-out target of one
|
|
13
|
+
* `broadcast` invocation. Threaded through to the target's
|
|
14
|
+
* `receiveMessage` signal so the stored Message carries it for
|
|
15
|
+
* later TUI grouping. `undefined` for non-broadcast direct cues.
|
|
16
|
+
*/
|
|
17
|
+
broadcastId?: string;
|
|
18
|
+
/**
|
|
19
|
+
* #318: Coat-check ticket referencing content stashed via
|
|
20
|
+
* `coat_check_put`. Threaded through to the target's `receiveMessage`
|
|
21
|
+
* signal so the stored `Message` carries it and the recipient can
|
|
22
|
+
* pull the body via `coat_check_get`. `undefined` for cues without an
|
|
23
|
+
* attachment.
|
|
24
|
+
*/
|
|
25
|
+
attachmentTicket?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface DeliverReportInput {
|
|
28
|
+
ensemble: string;
|
|
29
|
+
fromPlayerId: string;
|
|
30
|
+
text: string;
|
|
31
|
+
reportType: 'result' | 'blocker' | 'question' | 'update';
|
|
32
|
+
}
|
|
33
|
+
export interface TerminateSessionInput {
|
|
34
|
+
ensemble: string;
|
|
35
|
+
targetPlayerId: string;
|
|
36
|
+
terminatedBy: string;
|
|
37
|
+
}
|
|
38
|
+
export interface StartRecruitedSessionInput {
|
|
39
|
+
ensemble: string;
|
|
40
|
+
targetName: string;
|
|
41
|
+
workDir: string;
|
|
42
|
+
isConductor: boolean;
|
|
43
|
+
initialMessage?: string;
|
|
44
|
+
fromPlayerId: string;
|
|
45
|
+
agent: AgentType;
|
|
46
|
+
systemPrompt?: string;
|
|
47
|
+
taskQueue: string;
|
|
48
|
+
agentDefinition?: string;
|
|
49
|
+
agentDefinitionDescription?: string;
|
|
50
|
+
allowedTools?: string[];
|
|
51
|
+
/** Custom claude binary path (from config.claudeBin). */
|
|
52
|
+
claudeBin?: string;
|
|
53
|
+
/** When true, spawn process but lock outbox and defer initial message until release (warm hold). */
|
|
54
|
+
held?: boolean;
|
|
55
|
+
/**
|
|
56
|
+
* #131 Phase C — model id for the claude-api adapter (e.g.
|
|
57
|
+
* `claude-opus-4-7`). Persisted onto `SessionMetadata.model` so restart
|
|
58
|
+
* can recover the original choice. Ignored when `agent !== 'claude-api'`.
|
|
59
|
+
*/
|
|
60
|
+
model?: string;
|
|
61
|
+
}
|
|
62
|
+
export interface ReleasePlayerInput {
|
|
63
|
+
ensemble: string;
|
|
64
|
+
targetPlayerId: string;
|
|
65
|
+
}
|
|
66
|
+
export interface DeliverDetachInput {
|
|
67
|
+
ensemble: string;
|
|
68
|
+
targetPlayerId: string;
|
|
69
|
+
reason?: DetachReason;
|
|
70
|
+
deadlineMs?: number;
|
|
71
|
+
}
|
|
72
|
+
export interface DeliverDestroyInput {
|
|
73
|
+
ensemble: string;
|
|
74
|
+
targetPlayerId: string;
|
|
75
|
+
reason?: string;
|
|
76
|
+
terminatedBy: string;
|
|
77
|
+
notifyConductor?: boolean;
|
|
78
|
+
}
|
|
79
|
+
export interface DeliverRestartInput {
|
|
80
|
+
ensemble: string;
|
|
81
|
+
targetPlayerId: string;
|
|
82
|
+
invokerPlayerId: string;
|
|
83
|
+
force?: boolean;
|
|
84
|
+
host?: string;
|
|
85
|
+
fresh?: boolean;
|
|
86
|
+
contextMessages?: number;
|
|
87
|
+
/** #334 PR-2 — see {@link RestartOutboxEntry.loadFromState}. */
|
|
88
|
+
loadFromState?: boolean | string;
|
|
89
|
+
/** #334 PR-2 — see {@link RestartOutboxEntry.transcript}. */
|
|
90
|
+
transcript?: 'suppress' | 'replay';
|
|
91
|
+
}
|
|
92
|
+
export interface SpawnProcessInput {
|
|
93
|
+
targetName: string;
|
|
94
|
+
workDir: string;
|
|
95
|
+
isConductor: boolean;
|
|
96
|
+
agent: AgentType;
|
|
97
|
+
systemPrompt?: string;
|
|
98
|
+
ensemble: string;
|
|
99
|
+
temporalAddress: string;
|
|
100
|
+
temporalNamespace: string;
|
|
101
|
+
agentDefinition?: string;
|
|
102
|
+
agentDefinitionPath?: string;
|
|
103
|
+
nativeResolvable?: boolean;
|
|
104
|
+
/** When true, use --resume instead of -n (reconnect to existing session). */
|
|
105
|
+
resume?: boolean;
|
|
106
|
+
/** Session UUID — used for Copilot SDK sessionId and Claude Code --resume/--session-id. */
|
|
107
|
+
sessionId?: string;
|
|
108
|
+
/** Tool restrictions from the agent definition frontmatter. */
|
|
109
|
+
allowedTools?: string[];
|
|
110
|
+
/** Custom claude binary path (from config.claudeBin). */
|
|
111
|
+
claudeBin?: string;
|
|
112
|
+
/**
|
|
113
|
+
* PR-D attachment-lease handoff. When present, the workflow has already
|
|
114
|
+
* called `claimAttachment` and the child process should boot and invoke
|
|
115
|
+
* `startV2Lifecycle(workflowId, attachmentId)` to renew (rather than fresh-claim)
|
|
116
|
+
* the lease using the pre-assigned id. See design §8.2 step 5.
|
|
117
|
+
*/
|
|
118
|
+
attachmentId?: string;
|
|
119
|
+
/** Pinned runId returned by `claimAttachment`; passed to the adapter for handle pinning. */
|
|
120
|
+
attachmentRunId?: string;
|
|
121
|
+
/** Resolved adapter descriptor id (e.g. 'claude-code', 'copilot'); mirrors SessionMetadata.adapterId. */
|
|
122
|
+
adapterId?: string;
|
|
123
|
+
/**
|
|
124
|
+
* Mock-adapter configuration (ADR 0014 §4.2). Only present when `agent === 'mock'`.
|
|
125
|
+
* Forwarded into the spawned subprocess as `AGENT_TEMPO_MOCK_MODE` /
|
|
126
|
+
* `AGENT_TEMPO_MOCK_SCENARIO` env vars. Chaos mode also reads
|
|
127
|
+
* `AGENT_TEMPO_MOCK_CHAOS_*` from the daemon's env (inherited via spawn).
|
|
128
|
+
*/
|
|
129
|
+
mockMode?: MockMode;
|
|
130
|
+
mockScenario?: string;
|
|
131
|
+
/**
|
|
132
|
+
* #131 / #449 Phase C — model id for the headless adapters.
|
|
133
|
+
* - `claude-api`: bare Anthropic id (e.g. `claude-opus-4-7`); forwarded
|
|
134
|
+
* as `AGENT_TEMPO_API_MODEL`.
|
|
135
|
+
* - `opencode`: combined provider/model (e.g. `anthropic/claude-opus-4-7`,
|
|
136
|
+
* `openai/gpt-4o`); forwarded as `AGENT_TEMPO_OPENCODE_MODEL`.
|
|
137
|
+
* The spawn dispatcher inspects `agent` to pick the right env var. Only
|
|
138
|
+
* meaningful for those two adapters; ignored otherwise. Falls back inside
|
|
139
|
+
* the adapter to its respective env var → constants-pinned default.
|
|
140
|
+
*/
|
|
141
|
+
model?: string;
|
|
142
|
+
/**
|
|
143
|
+
* #520 — claude-code-headless permission mode. Forwarded as
|
|
144
|
+
* `AGENT_TEMPO_PERMISSION_MODE` to the spawned adapter; the adapter
|
|
145
|
+
* passes it through to per-turn `claude -p --permission-mode <mode>`.
|
|
146
|
+
* Only meaningful when `agent === 'claude-code-headless'`. Mutually
|
|
147
|
+
* exclusive with {@link dangerouslySkipPermissions}. Type imported from
|
|
148
|
+
* the canonical {@link ClaudeCodeHeadlessPermissionMode} tuple.
|
|
149
|
+
*/
|
|
150
|
+
permissionMode?: ClaudeCodeHeadlessPermissionMode;
|
|
151
|
+
/**
|
|
152
|
+
* #520 — claude-code-headless dangerous-skip-permissions opt-in.
|
|
153
|
+
* Forwarded as `AGENT_TEMPO_DANGEROUSLY_SKIP_PERMISSIONS=1`. Only
|
|
154
|
+
* meaningful when `agent === 'claude-code-headless'`. Mutually
|
|
155
|
+
* exclusive with {@link permissionMode}.
|
|
156
|
+
*/
|
|
157
|
+
dangerouslySkipPermissions?: boolean;
|
|
158
|
+
}
|
|
159
|
+
export interface OutboxActivityResult {
|
|
160
|
+
success: boolean;
|
|
161
|
+
error?: string;
|
|
162
|
+
}
|
|
163
|
+
export interface RecruitResult extends OutboxActivityResult {
|
|
164
|
+
/** Session UUID assigned at recruit time. */
|
|
165
|
+
sessionId?: string;
|
|
166
|
+
}
|
|
167
|
+
export interface OutboxActivities {
|
|
168
|
+
deliverCue(input: DeliverCueInput): Promise<OutboxActivityResult>;
|
|
169
|
+
deliverReport(input: DeliverReportInput): Promise<OutboxActivityResult>;
|
|
170
|
+
terminateSession(input: TerminateSessionInput): Promise<OutboxActivityResult>;
|
|
171
|
+
startRecruitedSession(input: StartRecruitedSessionInput): Promise<RecruitResult>;
|
|
172
|
+
spawnProcess(input: SpawnProcessInput): Promise<OutboxActivityResult>;
|
|
173
|
+
releasePlayer(input: ReleasePlayerInput): Promise<OutboxActivityResult>;
|
|
174
|
+
deliverDetach(input: DeliverDetachInput): Promise<OutboxActivityResult>;
|
|
175
|
+
deliverDestroy(input: DeliverDestroyInput): Promise<OutboxActivityResult>;
|
|
176
|
+
deliverRestart(input: DeliverRestartInput): Promise<OutboxActivityResult>;
|
|
177
|
+
/**
|
|
178
|
+
* OS-level child-process-tree kill for the target session. Runs on the per-host
|
|
179
|
+
* task queue (`agent-tempo-{hostname}`) so the kill happens where the process
|
|
180
|
+
* actually lives. See `src/activities/hard-terminate.ts` and issue #159 Gap 2.
|
|
181
|
+
*/
|
|
182
|
+
hardTerminateAttachment(input: HardTerminateInput): Promise<HardTerminateResult>;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Create outbox delivery activities bound to a Temporal client and config.
|
|
186
|
+
* The returned object is registered with the worker as activities.
|
|
187
|
+
*/
|
|
188
|
+
export declare function createOutboxActivities(client: Client, config: Config): OutboxActivities;
|