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,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.extendAttachmentForCAN = extendAttachmentForCAN;
|
|
4
|
+
/**
|
|
5
|
+
* Produce a new {@link Attachment} whose lease window is extended so an
|
|
6
|
+
* adapter that was beating normally at the moment of `continueAsNew` has room
|
|
7
|
+
* to land its next heartbeat before the new execution's first main-loop tick
|
|
8
|
+
* reaps the lease.
|
|
9
|
+
*
|
|
10
|
+
* **Design rationale (session-lifecycle-rebuild-v2.md §2.3):** the CAN
|
|
11
|
+
* transition is not instantaneous. If we were to write the pre-CAN
|
|
12
|
+
* `expiresAt` verbatim into the new execution, a transition that takes
|
|
13
|
+
* ~100-500ms could leave the new run's first deadline race observing an
|
|
14
|
+
* already-expired lease and reaping a healthy attachment. Pushing
|
|
15
|
+
* `expiresAt` out to `now + extendMs` guarantees the adapter has room to land
|
|
16
|
+
* its next heartbeat.
|
|
17
|
+
*
|
|
18
|
+
* Why this is a total function (returns a new object unconditionally,
|
|
19
|
+
* rather than accepting `null` and returning `undefined`): null-handling is
|
|
20
|
+
* the caller's business — a workflow that has no current attachment simply
|
|
21
|
+
* skips the call. Keeping this function non-nullable keeps the unit tests
|
|
22
|
+
* focused on math rather than null-propagation.
|
|
23
|
+
*
|
|
24
|
+
* @param attachment - the pre-CAN attachment record. All non-timestamp
|
|
25
|
+
* fields (`attachmentId`, `hostname`, `adapterId`, `adapterClass`,
|
|
26
|
+
* `claimedAt`, `leaseMs`, `runId`) are carried forward verbatim.
|
|
27
|
+
* @param extendMs - how far past `now` to push `expiresAt`, in milliseconds.
|
|
28
|
+
* Post-#249 callers pass `attachment.leaseMs` (= 3 × heartbeatMs — covers one
|
|
29
|
+
* full lease window and therefore at least one full heartbeat interval for
|
|
30
|
+
* every adapter class). Pre-#249 callers passed a hardcoded 30_000 constant
|
|
31
|
+
* which under-covered the claude-code adapter's 60s cadence — the rename
|
|
32
|
+
* from `heartbeatMs` disambiguates that the parameter is a raw extension
|
|
33
|
+
* duration, not a cadence. The function does not validate — any non-negative
|
|
34
|
+
* integer is accepted.
|
|
35
|
+
* @param now - current time in epoch milliseconds. In workflow context
|
|
36
|
+
* callers pass `new Date().getTime()` (the Temporal SDK intercepts `new
|
|
37
|
+
* Date()` to return replay-consistent time). In unit tests callers pass
|
|
38
|
+
* an arbitrary fixed value.
|
|
39
|
+
* @returns a new `Attachment` object — the input is not mutated.
|
|
40
|
+
*/
|
|
41
|
+
function extendAttachmentForCAN(attachment, extendMs, now) {
|
|
42
|
+
return {
|
|
43
|
+
...attachment,
|
|
44
|
+
lastHeartbeatAt: new Date(now).toISOString(),
|
|
45
|
+
expiresAt: new Date(now + extendMs).toISOString(),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.agentGlobalMaestroWorkflow = exports.agentMaestroWorkflow = exports.agentSchedulerWorkflow = exports.agentSessionWorkflow = void 0;
|
|
4
|
+
// Workflow entry point — re-exports all workflows for bundling.
|
|
5
|
+
var session_1 = require("./session");
|
|
6
|
+
Object.defineProperty(exports, "agentSessionWorkflow", { enumerable: true, get: function () { return session_1.agentSessionWorkflow; } });
|
|
7
|
+
var scheduler_1 = require("./scheduler");
|
|
8
|
+
Object.defineProperty(exports, "agentSchedulerWorkflow", { enumerable: true, get: function () { return scheduler_1.agentSchedulerWorkflow; } });
|
|
9
|
+
var maestro_1 = require("./maestro");
|
|
10
|
+
Object.defineProperty(exports, "agentMaestroWorkflow", { enumerable: true, get: function () { return maestro_1.agentMaestroWorkflow; } });
|
|
11
|
+
Object.defineProperty(exports, "agentGlobalMaestroWorkflow", { enumerable: true, get: function () { return maestro_1.agentGlobalMaestroWorkflow; } });
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import type { MaestroPlayerInfo, MaestroEvent, MaestroPendingCommand, MaestroRelayMessage, EnsembleChatResult, EnsembleChatQuery, Message, SentMessage, HostProfile, CoatCheckEntry, CoatCheckEntryHeader } from '../types';
|
|
2
|
+
export type { MaestroPlayerInfo, MaestroEvent, MaestroPendingCommand, MaestroInput, MaestroRelayMessage, GlobalMaestroInput, EnsembleChatMessage, EnsembleChatResult, EnsembleChatQuery, ChatHighWater, } from '../types';
|
|
3
|
+
export { ZERO_CHAT_HIGH_WATER } from '../types';
|
|
4
|
+
/** Gracefully shut down the Maestro workflow. */
|
|
5
|
+
export declare const maestroShutdownSignal: import("@temporalio/workflow").SignalDefinition<[], "maestroShutdown">;
|
|
6
|
+
/** Set the ensemble-wide paused state. */
|
|
7
|
+
export declare const maestroSetPausedSignal: import("@temporalio/workflow").SignalDefinition<[boolean], string>;
|
|
8
|
+
/**
|
|
9
|
+
* #399 W1 (Q5.1) — set the ensemble's mission-flavor description.
|
|
10
|
+
*
|
|
11
|
+
* Surfaced on the dashboard EnsembleCard. Conductors are encouraged to
|
|
12
|
+
* keep this short (~80 chars, soft cap 100) and refresh at milestone
|
|
13
|
+
* boundaries — see the conductor agent definition for the responsibility
|
|
14
|
+
* note. Empty string clears the description.
|
|
15
|
+
*/
|
|
16
|
+
export declare const setEnsembleDescriptionSignal: import("@temporalio/workflow").SignalDefinition<[string], string>;
|
|
17
|
+
/** Get the current snapshot of all players in the ensemble. */
|
|
18
|
+
export declare const maestroPlayersQuery: import("@temporalio/workflow").QueryDefinition<MaestroPlayerInfo[], [], string>;
|
|
19
|
+
/** Get the event log (ring buffer, max 200 entries). */
|
|
20
|
+
export declare const maestroEventsQuery: import("@temporalio/workflow").QueryDefinition<MaestroEvent[], [], string>;
|
|
21
|
+
/** Query whether the ensemble is paused. */
|
|
22
|
+
export declare const maestroPausedQuery: import("@temporalio/workflow").QueryDefinition<boolean, [], string>;
|
|
23
|
+
/** Get pending commands (queued but not yet relayed to conductor). */
|
|
24
|
+
export declare const maestroPendingCommandsQuery: import("@temporalio/workflow").QueryDefinition<MaestroPendingCommand[], [], string>;
|
|
25
|
+
/** Paginated ensemble chat from cached state (maestro + conductor traffic). */
|
|
26
|
+
export declare const maestroEnsembleChatQuery: import("@temporalio/workflow").QueryDefinition<EnsembleChatResult, [EnsembleChatQuery], string>;
|
|
27
|
+
/**
|
|
28
|
+
* #399 W1 (Q5.1) — current ensemble description (mission-flavor text).
|
|
29
|
+
* Empty string when no description has been set.
|
|
30
|
+
*/
|
|
31
|
+
export declare const getEnsembleDescriptionQuery: import("@temporalio/workflow").QueryDefinition<string, [], string>;
|
|
32
|
+
/**
|
|
33
|
+
* #399 W1 (Q5.3a) — ISO timestamp of the maestro's first start
|
|
34
|
+
* (`workflowInfo().startTime`, preserved across continueAsNew via
|
|
35
|
+
* `MaestroInput.startTimeIso`). Dashboard derives uptime client-side.
|
|
36
|
+
*/
|
|
37
|
+
export declare const getEnsembleStartTimeQuery: import("@temporalio/workflow").QueryDefinition<string, [], string>;
|
|
38
|
+
/**
|
|
39
|
+
* #399 W1 (Q5.6 Flavor B) — current ensemble BPM derived from the last
|
|
40
|
+
* minute of activity (the two most recent 30-second buckets). Returns
|
|
41
|
+
* `0` when activity hasn't yet accumulated a bucket.
|
|
42
|
+
*/
|
|
43
|
+
export declare const getCurrentBpmQuery: import("@temporalio/workflow").QueryDefinition<number, [], string>;
|
|
44
|
+
/**
|
|
45
|
+
* #399 W1 (Q5.6 Flavor B) — most recent 60 finished 30-second activity
|
|
46
|
+
* buckets (oldest-first). Each entry is a count of player-activity
|
|
47
|
+
* deltas accumulated during that window. Used by the dashboard's
|
|
48
|
+
* `TempoStrip` sparkline.
|
|
49
|
+
*/
|
|
50
|
+
export declare const getTempoSeriesQuery: import("@temporalio/workflow").QueryDefinition<number[], [], string>;
|
|
51
|
+
/** Queue a command to be relayed to the conductor. Returns the command ID. */
|
|
52
|
+
export declare const maestroSendCommandUpdate: import("@temporalio/common").UpdateDefinition<string, [{
|
|
53
|
+
text: string;
|
|
54
|
+
source: string;
|
|
55
|
+
replyTo?: string;
|
|
56
|
+
}], string>;
|
|
57
|
+
export interface CoatCheckPutInput {
|
|
58
|
+
summary: string;
|
|
59
|
+
content: string;
|
|
60
|
+
contentType?: string;
|
|
61
|
+
ttlMs?: number;
|
|
62
|
+
/** Audit identity — set by the tool layer, NOT a caller-supplied MCP arg. */
|
|
63
|
+
putBy: string;
|
|
64
|
+
}
|
|
65
|
+
export interface CoatCheckPutResult {
|
|
66
|
+
ticket: string;
|
|
67
|
+
expiresAt: string;
|
|
68
|
+
slotsUsed: number;
|
|
69
|
+
slotsTotal: number;
|
|
70
|
+
}
|
|
71
|
+
export interface CoatCheckGetInput {
|
|
72
|
+
ticket: string;
|
|
73
|
+
/** Audit identity — set by the tool layer, NOT a caller-supplied MCP arg. */
|
|
74
|
+
fetchedBy: string;
|
|
75
|
+
}
|
|
76
|
+
export interface CoatCheckListInput {
|
|
77
|
+
/** Optional `putBy` filter — audit lens for "what did <player> stash?" */
|
|
78
|
+
putBy?: string;
|
|
79
|
+
/** Optional summary-prefix filter. */
|
|
80
|
+
prefix?: string;
|
|
81
|
+
/**
|
|
82
|
+
* When `true`, only return entries with `fetchCount === 0`. Owner cleanup
|
|
83
|
+
* workflow: "show me what nobody's picked up yet."
|
|
84
|
+
*/
|
|
85
|
+
unfetchedOnly?: boolean;
|
|
86
|
+
}
|
|
87
|
+
export interface CoatCheckEvictInput {
|
|
88
|
+
ticket: string;
|
|
89
|
+
/**
|
|
90
|
+
* Audit identity — set by the tool layer. Workflow validator enforces
|
|
91
|
+
* `evictedBy === entry.putBy` OR `evictedBy === <conductor playerId>` so
|
|
92
|
+
* eviction is owner-or-conductor; everyone else gets a
|
|
93
|
+
* `CoatCheckEvictPermissionDenied` ApplicationFailure.
|
|
94
|
+
*/
|
|
95
|
+
evictedBy: string;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Admit a new coat-check entry. Saturation (20-slot cap exhausted) rejects
|
|
99
|
+
* with `CoatCheckSlotsFull` ApplicationFailure carrying the oldest 3 ticket
|
|
100
|
+
* ids in the message. Oversize content rejects with `CoatCheckEntryTooLarge`.
|
|
101
|
+
* Re-export the entry-and-result types so workflow code and tools share one
|
|
102
|
+
* shape.
|
|
103
|
+
*/
|
|
104
|
+
export declare const coatCheckPutUpdate: import("@temporalio/common").UpdateDefinition<CoatCheckPutResult, [CoatCheckPutInput], string>;
|
|
105
|
+
/**
|
|
106
|
+
* Fetch a coat-check entry by ticket. Returns the full entry (including
|
|
107
|
+
* content body) on success, or `null` when the ticket is missing / expired /
|
|
108
|
+
* evicted — no error class proliferation for the common "ticket already
|
|
109
|
+
* gone" case. Successful reads mutate `lastFetchedAt` / `lastFetchedBy` /
|
|
110
|
+
* `fetchCount` on the entry; failed reads do not.
|
|
111
|
+
*/
|
|
112
|
+
export declare const coatCheckGetUpdate: import("@temporalio/common").UpdateDefinition<CoatCheckEntry | null, [CoatCheckGetInput], string>;
|
|
113
|
+
/**
|
|
114
|
+
* List coat-check entry headers (content omitted) newest-first. Read-only —
|
|
115
|
+
* does NOT bump fetch-audit counters. Optional `putBy` / `prefix` /
|
|
116
|
+
* `unfetchedOnly` filters narrow the result.
|
|
117
|
+
*/
|
|
118
|
+
export declare const coatCheckListQuery: import("@temporalio/workflow").QueryDefinition<CoatCheckEntryHeader[], [(CoatCheckListInput | undefined)?], string>;
|
|
119
|
+
/**
|
|
120
|
+
* Evict a coat-check entry by ticket. Owner-or-conductor only — workflow
|
|
121
|
+
* validator rejects mismatched `evictedBy` with `CoatCheckEvictPermissionDenied`.
|
|
122
|
+
* `evicted: false` when the ticket was missing / already expired before the
|
|
123
|
+
* call landed.
|
|
124
|
+
*/
|
|
125
|
+
export declare const coatCheckEvictUpdate: import("@temporalio/common").UpdateDefinition<{
|
|
126
|
+
evicted: boolean;
|
|
127
|
+
}, [CoatCheckEvictInput], string>;
|
|
128
|
+
/** Notify the global Maestro of a relayed message (for Phase 2 push-based updates). */
|
|
129
|
+
export declare const maestroNotifyMessageSignal: import("@temporalio/workflow").SignalDefinition<[MaestroRelayMessage], string>;
|
|
130
|
+
/**
|
|
131
|
+
* #274 — daemon advertises its capability profile at boot.
|
|
132
|
+
*
|
|
133
|
+
* Payload typed as `Record<string, unknown>` at the wire boundary so the
|
|
134
|
+
* global maestro handler can accept additive fields from future daemon
|
|
135
|
+
* versions without breaking. Handler validates ONLY `hostname` (required,
|
|
136
|
+
* `PLAYER_NAME_REGEX`, ≤64 chars); all other fields stored opaquely. Per-
|
|
137
|
+
* field Zod validation happens at the `listHosts` join site in
|
|
138
|
+
* `src/utils/hosts.ts`, never here. See #274 architect delta AC3c (M9).
|
|
139
|
+
*
|
|
140
|
+
* Daemons MUST scrub PII before signaling (AC5c / M10) — claudeBin is
|
|
141
|
+
* basename only; availableAgentTypes is type names only; no absolute
|
|
142
|
+
* paths, env vars, or user-home fragments.
|
|
143
|
+
*/
|
|
144
|
+
export declare const hostProfileSignal: import("@temporalio/workflow").SignalDefinition<[Record<string, unknown>], string>;
|
|
145
|
+
/** Get the list of known ensembles. */
|
|
146
|
+
export declare const maestroEnsemblesQuery: import("@temporalio/workflow").QueryDefinition<string[], [], string>;
|
|
147
|
+
/** Get players grouped by ensemble. */
|
|
148
|
+
export declare const maestroPlayersByEnsembleQuery: import("@temporalio/workflow").QueryDefinition<Record<string, MaestroPlayerInfo[]>, [], string>;
|
|
149
|
+
/** Get recent messages across all ensembles (ring buffer, max 500). */
|
|
150
|
+
export declare const maestroRecentMessagesQuery: import("@temporalio/workflow").QueryDefinition<MaestroRelayMessage[], [], string>;
|
|
151
|
+
/**
|
|
152
|
+
* #274 — the `hostname → HostProfile` map maintained by the global maestro.
|
|
153
|
+
*
|
|
154
|
+
* Returned as a plain `Record<string, HostProfile>` (not a `Map`) so the
|
|
155
|
+
* default Temporal payload converter serializes it without a codec tweak.
|
|
156
|
+
* The `src/utils/hosts.ts` join helper consumes this and reconstructs a
|
|
157
|
+
* `Map`-shaped view at the consumer boundary if callers find it useful.
|
|
158
|
+
*
|
|
159
|
+
* Consumers MUST treat the returned profiles as opaque beyond the
|
|
160
|
+
* `hostname` field — per-field validation happens at the join site, not
|
|
161
|
+
* at query time.
|
|
162
|
+
*/
|
|
163
|
+
export declare const hostProfilesQuery: import("@temporalio/workflow").QueryDefinition<Record<string, HostProfile>, [], string>;
|
|
164
|
+
/**
|
|
165
|
+
* #280 — combined existence + profiles query.
|
|
166
|
+
*
|
|
167
|
+
* Saves a round-trip on the `listHosts` cache-miss path: the prior
|
|
168
|
+
* implementation called `handle.describe()` to confirm the workflow was
|
|
169
|
+
* `RUNNING` then `handle.query('hostProfiles')` to fetch the data — two
|
|
170
|
+
* sequential RPCs against the same handle. Callers can now hit a single
|
|
171
|
+
* query: success → `{ exists: true, profiles }`; transport failure
|
|
172
|
+
* (workflow not found, terminated, unreachable) → caller catches and
|
|
173
|
+
* treats as `null` (i.e. "missing"). The `exists: true` flag is set
|
|
174
|
+
* explicitly by the handler so future variants — e.g. an "I'm running
|
|
175
|
+
* but in degraded mode" signal — could carry `exists: false` over the
|
|
176
|
+
* wire without breaking older clients.
|
|
177
|
+
*
|
|
178
|
+
* Wire-protocol additive change (new query, no rename) — the legacy
|
|
179
|
+
* `hostProfiles` query stays for backwards compatibility.
|
|
180
|
+
*/
|
|
181
|
+
export declare const hostProfilesWithExistenceQuery: import("@temporalio/workflow").QueryDefinition<{
|
|
182
|
+
exists: boolean;
|
|
183
|
+
profiles: Record<string, HostProfile>;
|
|
184
|
+
}, [], string>;
|
|
185
|
+
/** Send a message to a player in a specific ensemble. Returns the message ID. */
|
|
186
|
+
export declare const maestroSendMessageUpdate: import("@temporalio/common").UpdateDefinition<string, [{
|
|
187
|
+
ensemble: string;
|
|
188
|
+
to: string;
|
|
189
|
+
text: string;
|
|
190
|
+
source: string;
|
|
191
|
+
}], string>;
|
|
192
|
+
/** Fetch a player's message history (received + sent). Returns merged timeline. */
|
|
193
|
+
export declare const maestroFetchPlayerMessagesUpdate: import("@temporalio/common").UpdateDefinition<(Message | (SentMessage & {
|
|
194
|
+
direction: "sent";
|
|
195
|
+
}))[], [{
|
|
196
|
+
ensemble: string;
|
|
197
|
+
playerId: string;
|
|
198
|
+
}], string>;
|
|
199
|
+
/** Fetch a conductor's command/report history for an ensemble. */
|
|
200
|
+
export declare const maestroFetchConductorHistoryUpdate: import("@temporalio/common").UpdateDefinition<{
|
|
201
|
+
success: boolean;
|
|
202
|
+
history: Array<{
|
|
203
|
+
type: string;
|
|
204
|
+
timestamp: string;
|
|
205
|
+
data: unknown;
|
|
206
|
+
}>;
|
|
207
|
+
error?: string;
|
|
208
|
+
}, [{
|
|
209
|
+
ensemble: string;
|
|
210
|
+
}], string>;
|
|
211
|
+
/** Queue a command to be relayed to a specific ensemble's conductor. Returns the command ID. */
|
|
212
|
+
export declare const maestroGlobalSendCommandUpdate: import("@temporalio/common").UpdateDefinition<string, [{
|
|
213
|
+
ensemble: string;
|
|
214
|
+
text: string;
|
|
215
|
+
source: string;
|
|
216
|
+
replyTo?: string;
|
|
217
|
+
}], string>;
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.maestroGlobalSendCommandUpdate = exports.maestroFetchConductorHistoryUpdate = exports.maestroFetchPlayerMessagesUpdate = exports.maestroSendMessageUpdate = exports.hostProfilesWithExistenceQuery = exports.hostProfilesQuery = exports.maestroRecentMessagesQuery = exports.maestroPlayersByEnsembleQuery = exports.maestroEnsemblesQuery = exports.hostProfileSignal = exports.maestroNotifyMessageSignal = exports.coatCheckEvictUpdate = exports.coatCheckListQuery = exports.coatCheckGetUpdate = exports.coatCheckPutUpdate = exports.maestroSendCommandUpdate = exports.getTempoSeriesQuery = exports.getCurrentBpmQuery = exports.getEnsembleStartTimeQuery = exports.getEnsembleDescriptionQuery = exports.maestroEnsembleChatQuery = exports.maestroPendingCommandsQuery = exports.maestroPausedQuery = exports.maestroEventsQuery = exports.maestroPlayersQuery = exports.setEnsembleDescriptionSignal = exports.maestroSetPausedSignal = exports.maestroShutdownSignal = exports.ZERO_CHAT_HIGH_WATER = void 0;
|
|
4
|
+
const workflow_1 = require("@temporalio/workflow");
|
|
5
|
+
var types_1 = require("../types");
|
|
6
|
+
Object.defineProperty(exports, "ZERO_CHAT_HIGH_WATER", { enumerable: true, get: function () { return types_1.ZERO_CHAT_HIGH_WATER; } });
|
|
7
|
+
// ── Per-Ensemble Maestro Signals (existing) ──
|
|
8
|
+
/** Gracefully shut down the Maestro workflow. */
|
|
9
|
+
exports.maestroShutdownSignal = (0, workflow_1.defineSignal)('maestroShutdown');
|
|
10
|
+
/** Set the ensemble-wide paused state. */
|
|
11
|
+
exports.maestroSetPausedSignal = (0, workflow_1.defineSignal)('maestroSetPaused');
|
|
12
|
+
/**
|
|
13
|
+
* #399 W1 (Q5.1) — set the ensemble's mission-flavor description.
|
|
14
|
+
*
|
|
15
|
+
* Surfaced on the dashboard EnsembleCard. Conductors are encouraged to
|
|
16
|
+
* keep this short (~80 chars, soft cap 100) and refresh at milestone
|
|
17
|
+
* boundaries — see the conductor agent definition for the responsibility
|
|
18
|
+
* note. Empty string clears the description.
|
|
19
|
+
*/
|
|
20
|
+
exports.setEnsembleDescriptionSignal = (0, workflow_1.defineSignal)('setEnsembleDescription');
|
|
21
|
+
// ── Per-Ensemble Maestro Queries (existing) ──
|
|
22
|
+
/** Get the current snapshot of all players in the ensemble. */
|
|
23
|
+
exports.maestroPlayersQuery = (0, workflow_1.defineQuery)('maestroPlayers');
|
|
24
|
+
/** Get the event log (ring buffer, max 200 entries). */
|
|
25
|
+
exports.maestroEventsQuery = (0, workflow_1.defineQuery)('maestroEvents');
|
|
26
|
+
/** Query whether the ensemble is paused. */
|
|
27
|
+
exports.maestroPausedQuery = (0, workflow_1.defineQuery)('maestroPaused');
|
|
28
|
+
/** Get pending commands (queued but not yet relayed to conductor). */
|
|
29
|
+
exports.maestroPendingCommandsQuery = (0, workflow_1.defineQuery)('maestroPendingCommands');
|
|
30
|
+
/** Paginated ensemble chat from cached state (maestro + conductor traffic). */
|
|
31
|
+
exports.maestroEnsembleChatQuery = (0, workflow_1.defineQuery)('maestroEnsembleChat');
|
|
32
|
+
/**
|
|
33
|
+
* #399 W1 (Q5.1) — current ensemble description (mission-flavor text).
|
|
34
|
+
* Empty string when no description has been set.
|
|
35
|
+
*/
|
|
36
|
+
exports.getEnsembleDescriptionQuery = (0, workflow_1.defineQuery)('getEnsembleDescription');
|
|
37
|
+
/**
|
|
38
|
+
* #399 W1 (Q5.3a) — ISO timestamp of the maestro's first start
|
|
39
|
+
* (`workflowInfo().startTime`, preserved across continueAsNew via
|
|
40
|
+
* `MaestroInput.startTimeIso`). Dashboard derives uptime client-side.
|
|
41
|
+
*/
|
|
42
|
+
exports.getEnsembleStartTimeQuery = (0, workflow_1.defineQuery)('getEnsembleStartTime');
|
|
43
|
+
/**
|
|
44
|
+
* #399 W1 (Q5.6 Flavor B) — current ensemble BPM derived from the last
|
|
45
|
+
* minute of activity (the two most recent 30-second buckets). Returns
|
|
46
|
+
* `0` when activity hasn't yet accumulated a bucket.
|
|
47
|
+
*/
|
|
48
|
+
exports.getCurrentBpmQuery = (0, workflow_1.defineQuery)('getCurrentBpm');
|
|
49
|
+
/**
|
|
50
|
+
* #399 W1 (Q5.6 Flavor B) — most recent 60 finished 30-second activity
|
|
51
|
+
* buckets (oldest-first). Each entry is a count of player-activity
|
|
52
|
+
* deltas accumulated during that window. Used by the dashboard's
|
|
53
|
+
* `TempoStrip` sparkline.
|
|
54
|
+
*/
|
|
55
|
+
exports.getTempoSeriesQuery = (0, workflow_1.defineQuery)('getTempoSeries');
|
|
56
|
+
// ── Per-Ensemble Maestro Updates (existing) ──
|
|
57
|
+
/** Queue a command to be relayed to the conductor. Returns the command ID. */
|
|
58
|
+
exports.maestroSendCommandUpdate = (0, workflow_1.defineUpdate)('maestroSendCommand');
|
|
59
|
+
/**
|
|
60
|
+
* Admit a new coat-check entry. Saturation (20-slot cap exhausted) rejects
|
|
61
|
+
* with `CoatCheckSlotsFull` ApplicationFailure carrying the oldest 3 ticket
|
|
62
|
+
* ids in the message. Oversize content rejects with `CoatCheckEntryTooLarge`.
|
|
63
|
+
* Re-export the entry-and-result types so workflow code and tools share one
|
|
64
|
+
* shape.
|
|
65
|
+
*/
|
|
66
|
+
exports.coatCheckPutUpdate = (0, workflow_1.defineUpdate)('coatCheckPut');
|
|
67
|
+
/**
|
|
68
|
+
* Fetch a coat-check entry by ticket. Returns the full entry (including
|
|
69
|
+
* content body) on success, or `null` when the ticket is missing / expired /
|
|
70
|
+
* evicted — no error class proliferation for the common "ticket already
|
|
71
|
+
* gone" case. Successful reads mutate `lastFetchedAt` / `lastFetchedBy` /
|
|
72
|
+
* `fetchCount` on the entry; failed reads do not.
|
|
73
|
+
*/
|
|
74
|
+
exports.coatCheckGetUpdate = (0, workflow_1.defineUpdate)('coatCheckGet');
|
|
75
|
+
/**
|
|
76
|
+
* List coat-check entry headers (content omitted) newest-first. Read-only —
|
|
77
|
+
* does NOT bump fetch-audit counters. Optional `putBy` / `prefix` /
|
|
78
|
+
* `unfetchedOnly` filters narrow the result.
|
|
79
|
+
*/
|
|
80
|
+
exports.coatCheckListQuery = (0, workflow_1.defineQuery)('coatCheckList');
|
|
81
|
+
/**
|
|
82
|
+
* Evict a coat-check entry by ticket. Owner-or-conductor only — workflow
|
|
83
|
+
* validator rejects mismatched `evictedBy` with `CoatCheckEvictPermissionDenied`.
|
|
84
|
+
* `evicted: false` when the ticket was missing / already expired before the
|
|
85
|
+
* call landed.
|
|
86
|
+
*/
|
|
87
|
+
exports.coatCheckEvictUpdate = (0, workflow_1.defineUpdate)('coatCheckEvict');
|
|
88
|
+
// ══════════════════════════════════════════════════════════════════════════════
|
|
89
|
+
// Global Maestro — single instance handling ALL ensembles
|
|
90
|
+
// ══════════════════════════════════════════════════════════════════════════════
|
|
91
|
+
// ── Global Maestro Signals ──
|
|
92
|
+
/** Notify the global Maestro of a relayed message (for Phase 2 push-based updates). */
|
|
93
|
+
exports.maestroNotifyMessageSignal = (0, workflow_1.defineSignal)('maestroNotifyMessage');
|
|
94
|
+
/**
|
|
95
|
+
* #274 — daemon advertises its capability profile at boot.
|
|
96
|
+
*
|
|
97
|
+
* Payload typed as `Record<string, unknown>` at the wire boundary so the
|
|
98
|
+
* global maestro handler can accept additive fields from future daemon
|
|
99
|
+
* versions without breaking. Handler validates ONLY `hostname` (required,
|
|
100
|
+
* `PLAYER_NAME_REGEX`, ≤64 chars); all other fields stored opaquely. Per-
|
|
101
|
+
* field Zod validation happens at the `listHosts` join site in
|
|
102
|
+
* `src/utils/hosts.ts`, never here. See #274 architect delta AC3c (M9).
|
|
103
|
+
*
|
|
104
|
+
* Daemons MUST scrub PII before signaling (AC5c / M10) — claudeBin is
|
|
105
|
+
* basename only; availableAgentTypes is type names only; no absolute
|
|
106
|
+
* paths, env vars, or user-home fragments.
|
|
107
|
+
*/
|
|
108
|
+
exports.hostProfileSignal = (0, workflow_1.defineSignal)('hostProfile');
|
|
109
|
+
// ── Global Maestro Queries ──
|
|
110
|
+
/** Get the list of known ensembles. */
|
|
111
|
+
exports.maestroEnsemblesQuery = (0, workflow_1.defineQuery)('maestroEnsembles');
|
|
112
|
+
/** Get players grouped by ensemble. */
|
|
113
|
+
exports.maestroPlayersByEnsembleQuery = (0, workflow_1.defineQuery)('maestroPlayersByEnsemble');
|
|
114
|
+
/** Get recent messages across all ensembles (ring buffer, max 500). */
|
|
115
|
+
exports.maestroRecentMessagesQuery = (0, workflow_1.defineQuery)('maestroRecentMessages');
|
|
116
|
+
/**
|
|
117
|
+
* #274 — the `hostname → HostProfile` map maintained by the global maestro.
|
|
118
|
+
*
|
|
119
|
+
* Returned as a plain `Record<string, HostProfile>` (not a `Map`) so the
|
|
120
|
+
* default Temporal payload converter serializes it without a codec tweak.
|
|
121
|
+
* The `src/utils/hosts.ts` join helper consumes this and reconstructs a
|
|
122
|
+
* `Map`-shaped view at the consumer boundary if callers find it useful.
|
|
123
|
+
*
|
|
124
|
+
* Consumers MUST treat the returned profiles as opaque beyond the
|
|
125
|
+
* `hostname` field — per-field validation happens at the join site, not
|
|
126
|
+
* at query time.
|
|
127
|
+
*/
|
|
128
|
+
exports.hostProfilesQuery = (0, workflow_1.defineQuery)('hostProfiles');
|
|
129
|
+
/**
|
|
130
|
+
* #280 — combined existence + profiles query.
|
|
131
|
+
*
|
|
132
|
+
* Saves a round-trip on the `listHosts` cache-miss path: the prior
|
|
133
|
+
* implementation called `handle.describe()` to confirm the workflow was
|
|
134
|
+
* `RUNNING` then `handle.query('hostProfiles')` to fetch the data — two
|
|
135
|
+
* sequential RPCs against the same handle. Callers can now hit a single
|
|
136
|
+
* query: success → `{ exists: true, profiles }`; transport failure
|
|
137
|
+
* (workflow not found, terminated, unreachable) → caller catches and
|
|
138
|
+
* treats as `null` (i.e. "missing"). The `exists: true` flag is set
|
|
139
|
+
* explicitly by the handler so future variants — e.g. an "I'm running
|
|
140
|
+
* but in degraded mode" signal — could carry `exists: false` over the
|
|
141
|
+
* wire without breaking older clients.
|
|
142
|
+
*
|
|
143
|
+
* Wire-protocol additive change (new query, no rename) — the legacy
|
|
144
|
+
* `hostProfiles` query stays for backwards compatibility.
|
|
145
|
+
*/
|
|
146
|
+
exports.hostProfilesWithExistenceQuery = (0, workflow_1.defineQuery)('hostProfilesWithExistence');
|
|
147
|
+
// ── Global Maestro Updates ──
|
|
148
|
+
/** Send a message to a player in a specific ensemble. Returns the message ID. */
|
|
149
|
+
exports.maestroSendMessageUpdate = (0, workflow_1.defineUpdate)('maestroSendMessage');
|
|
150
|
+
/** Fetch a player's message history (received + sent). Returns merged timeline. */
|
|
151
|
+
exports.maestroFetchPlayerMessagesUpdate = (0, workflow_1.defineUpdate)('maestroFetchPlayerMessages');
|
|
152
|
+
/** Fetch a conductor's command/report history for an ensemble. */
|
|
153
|
+
exports.maestroFetchConductorHistoryUpdate = (0, workflow_1.defineUpdate)('maestroFetchConductorHistory');
|
|
154
|
+
/** Queue a command to be relayed to a specific ensemble's conductor. Returns the command ID. */
|
|
155
|
+
exports.maestroGlobalSendCommandUpdate = (0, workflow_1.defineUpdate)('maestroGlobalSendCommand');
|