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,319 @@
|
|
|
1
|
+
import type { TempoClient } from '../client/interface';
|
|
2
|
+
import type { HostProfile, EnsembleChatMessage, ScheduleEntry } from '../types';
|
|
3
|
+
import { EnsembleEventBus, type EventBus } from './event-bus';
|
|
4
|
+
import { SeqAllocator } from './event-id';
|
|
5
|
+
import type { PlayerSummaryV1 } from './event-types';
|
|
6
|
+
/** Default cadence per spec §8. */
|
|
7
|
+
export declare const DEFAULT_POLL_INTERVAL_MS = 750;
|
|
8
|
+
/**
|
|
9
|
+
* #336/#529 site 6 — correctness deadline for `listEnsemblesBounded()`
|
|
10
|
+
* inside `collect()`. 500ms < 750ms cadence leaves ≥250ms headroom for
|
|
11
|
+
* `applyDiff()` + per-ensemble fan-out + emission. Architect's call:
|
|
12
|
+
* the 15s `tickWatchdogMs` is the *liveness* guard; this 500ms is the
|
|
13
|
+
* *correctness* guard preventing partial-input ensemble diffs.
|
|
14
|
+
*/
|
|
15
|
+
export declare const AGGREGATE_LIST_DEADLINE_MS = 500;
|
|
16
|
+
/**
|
|
17
|
+
* #550 — consecutive-failure cap for the per-ensemble fan-out
|
|
18
|
+
* carry-forward. After this many `'failed'` outcomes in a row, the
|
|
19
|
+
* ensemble is promoted from `'failed'` (carry-forward in liveNames) to
|
|
20
|
+
* `'gone'` (excluded → emits `ensemble.destroyed`). Matches the
|
|
21
|
+
* 15s tick watchdog ceiling at 750ms cadence: 20 ticks × 750ms ≈ 15s.
|
|
22
|
+
* Operator-coherent: "can't observe → eventually treat as gone."
|
|
23
|
+
*
|
|
24
|
+
* Counted as the threshold to EXCEED (cf > K) so the spec table holds:
|
|
25
|
+
* 20 consecutive `'failed'` ticks stay 'failed'; the 21st promotes.
|
|
26
|
+
*/
|
|
27
|
+
export declare const MAX_CONSECUTIVE_FAILURES = 20;
|
|
28
|
+
/**
|
|
29
|
+
* #336/#529 site 6 — sentinel thrown by `collect()` when the
|
|
30
|
+
* visibility-iterator deadline trips. `tick()`'s catch logs it calmly
|
|
31
|
+
* and SKIPS `applyDiff()`, preserving `knownEnsembles` so the next
|
|
32
|
+
* successful tick diffs against the truthful prior set rather than
|
|
33
|
+
* emitting phantom `ensemble.destroyed` events.
|
|
34
|
+
*
|
|
35
|
+
* Modeled as a distinct error class so the catch can branch
|
|
36
|
+
* informatively (`if (err instanceof TickSkipped)`) without parsing
|
|
37
|
+
* error messages — and so callers downstream don't accidentally
|
|
38
|
+
* propagate it as a fatal error.
|
|
39
|
+
*/
|
|
40
|
+
export declare class TickSkipped extends Error {
|
|
41
|
+
readonly name = "TickSkipped";
|
|
42
|
+
constructor(reason: string);
|
|
43
|
+
}
|
|
44
|
+
/** Per-ensemble tracking state across ticks. */
|
|
45
|
+
interface EnsembleTrack {
|
|
46
|
+
bus: EnsembleEventBus;
|
|
47
|
+
/**
|
|
48
|
+
* #550 — consecutive `'failed'` outcomes since the last `'ok'` in
|
|
49
|
+
* `collect()`'s per-ensemble fan-out. Reset to 0 on a successful
|
|
50
|
+
* fan-out; incremented on `'failed'`. When it exceeds
|
|
51
|
+
* {@link MAX_CONSECUTIVE_FAILURES} the ensemble is promoted to
|
|
52
|
+
* `'gone'` and its track torn down by `applyDiff`. While this
|
|
53
|
+
* counter is `> 0` the cluster diff still treats the ensemble as
|
|
54
|
+
* alive (no phantom `ensemble.destroyed`).
|
|
55
|
+
*/
|
|
56
|
+
consecutiveFailures: number;
|
|
57
|
+
/** Last seen player phase, keyed by playerId. */
|
|
58
|
+
playerPhases: Map<string, string | undefined>;
|
|
59
|
+
/**
|
|
60
|
+
* Adapter family per playerId — used to faithfully reconstruct the
|
|
61
|
+
* prior `AggregateEnsembleSnapshot` view at tick boundaries (see #535).
|
|
62
|
+
* Pre-#535 the prior carried a hardcoded `agentType: 'claude'` because
|
|
63
|
+
* the wire union was closed at `'claude' | 'copilot' | 'mock'`; once the
|
|
64
|
+
* union mirrors `AgentType`, the prior must carry a real adapter type
|
|
65
|
+
* so the type system can't be blindsided by a future entry. Set in
|
|
66
|
+
* lockstep with `playerPhases` (`player.added` → `set`, `player.removed`
|
|
67
|
+
* → `delete`); agentType is treated as immutable for a player's
|
|
68
|
+
* lifetime (matches `MaestroPlayerInfo` semantics).
|
|
69
|
+
*/
|
|
70
|
+
playerAgentTypes: Map<string, PlayerSummaryV1['agentType']>;
|
|
71
|
+
/** Last (paused, held) tuple. */
|
|
72
|
+
flags: {
|
|
73
|
+
paused: boolean;
|
|
74
|
+
held: boolean;
|
|
75
|
+
} | null;
|
|
76
|
+
/** SHA-256 of last emitted schedules JSON. */
|
|
77
|
+
schedulesHash: string | null;
|
|
78
|
+
/** Recently-emitted chat ids — bounded LRU set. */
|
|
79
|
+
chatIds: Set<string>;
|
|
80
|
+
/** Insertion-order list backing the LRU eviction. */
|
|
81
|
+
chatIdOrder: string[];
|
|
82
|
+
}
|
|
83
|
+
/** Aggregate-level snapshot — small projection of `EnsembleStateV1` plus the bits we diff. */
|
|
84
|
+
export interface AggregateEnsembleSnapshot {
|
|
85
|
+
ensemble: string;
|
|
86
|
+
hasConductor: boolean;
|
|
87
|
+
flags: {
|
|
88
|
+
paused: boolean;
|
|
89
|
+
held: boolean;
|
|
90
|
+
};
|
|
91
|
+
players: PlayerSummaryV1[];
|
|
92
|
+
schedules: ScheduleEntry[];
|
|
93
|
+
chat: EnsembleChatMessage[];
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* #550 — Per-ensemble fan-out outcome. The discriminated union lets
|
|
97
|
+
* `collect()` distinguish "we observed full state" (`'ok'`) from
|
|
98
|
+
* "ensemble is genuinely destroyed per Temporal" (`'gone'`, only on
|
|
99
|
+
* `EnsembleNotFoundError`) from "we couldn't observe this tick — try
|
|
100
|
+
* again next time" (`'failed'`, any other error).
|
|
101
|
+
*
|
|
102
|
+
* The classification decision lives in `collect()`'s `Promise.all`
|
|
103
|
+
* body; `applyDiff` stays ignorant of the failure mode and just
|
|
104
|
+
* consumes the resulting `AggregateSnapshot.liveEnsembleNames` set
|
|
105
|
+
* plus the `'ok'`-only `ensembles` array.
|
|
106
|
+
*
|
|
107
|
+
* Why this matters: lumping both into `null` (pre-#550 behavior)
|
|
108
|
+
* caused the cluster diff to emit `ensemble.destroyed` for ensembles
|
|
109
|
+
* whose fan-out merely timed out, producing phantom destroy events
|
|
110
|
+
* to every SSE subscriber every time a single per-ensemble query
|
|
111
|
+
* stalled.
|
|
112
|
+
*/
|
|
113
|
+
export type FanoutResult = {
|
|
114
|
+
kind: 'ok';
|
|
115
|
+
snapshot: AggregateEnsembleSnapshot;
|
|
116
|
+
} | {
|
|
117
|
+
kind: 'gone';
|
|
118
|
+
name: string;
|
|
119
|
+
} | {
|
|
120
|
+
kind: 'failed';
|
|
121
|
+
name: string;
|
|
122
|
+
};
|
|
123
|
+
/** Aggregate cluster snapshot — what one tick gathers. */
|
|
124
|
+
export interface AggregateSnapshot {
|
|
125
|
+
capturedAt: string;
|
|
126
|
+
/**
|
|
127
|
+
* Only `'ok'` fan-out results — i.e. ensembles for which we observed
|
|
128
|
+
* full per-ensemble state this tick. `applyDiff` iterates this for
|
|
129
|
+
* per-ensemble diff events (player.added, flags.changed, …).
|
|
130
|
+
*/
|
|
131
|
+
ensembles: AggregateEnsembleSnapshot[];
|
|
132
|
+
/**
|
|
133
|
+
* #550 — Cluster-diff input. Slim `{ensemble, hasConductor}` entries
|
|
134
|
+
* for the union of `'ok'` + `'failed'` outcomes (`'gone'` results
|
|
135
|
+
* excluded — they're the only kind that should trigger
|
|
136
|
+
* `ensemble.destroyed`).
|
|
137
|
+
*
|
|
138
|
+
* `hasConductor` for `'ok'` entries reflects the truthful
|
|
139
|
+
* fresh-this-tick value from `buildEnsembleSnapshot`; for `'failed'`
|
|
140
|
+
* entries it carries forward from the listEnsembles prelude (the
|
|
141
|
+
* cluster-list result already knew `hasConductor` per ensemble,
|
|
142
|
+
* even if the per-ensemble fan-out timed out). This keeps
|
|
143
|
+
* `ensemble.created` payloads truthful even when the very first
|
|
144
|
+
* tick for a new ensemble is a fan-out failure (researcher's
|
|
145
|
+
* "one-tick-delayed" carry-forward semantics).
|
|
146
|
+
*
|
|
147
|
+
* `applyDiff` consumes this directly without re-classifying the
|
|
148
|
+
* failure mode — the carry-forward decision is fully encoded by
|
|
149
|
+
* `collect()` upstream (architect's spec).
|
|
150
|
+
*/
|
|
151
|
+
livePrelude: Array<{
|
|
152
|
+
ensemble: string;
|
|
153
|
+
hasConductor: boolean;
|
|
154
|
+
}>;
|
|
155
|
+
hostProfiles: Record<string, HostProfile>;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Stable JSON canonicalization — keys sorted, no extraneous whitespace.
|
|
159
|
+
* Used for SHA-256 diff suppression so reordered key emits don't
|
|
160
|
+
* produce false-positive `*.changed` events.
|
|
161
|
+
*/
|
|
162
|
+
export declare function canonicalize(value: unknown): string;
|
|
163
|
+
/** SHA-256 of `canonicalize(value)`. */
|
|
164
|
+
export declare function hashOf(value: unknown): string;
|
|
165
|
+
/**
|
|
166
|
+
* Diff two AggregateEnsembleSnapshots and the prior tracking state to
|
|
167
|
+
* produce the events the bus should emit. Pure function — no I/O,
|
|
168
|
+
* easily unit-testable.
|
|
169
|
+
*
|
|
170
|
+
* Mutates `track` to reflect the post-emit state (this is intentional;
|
|
171
|
+
* the caller calls `emit` for each returned event and trusts the
|
|
172
|
+
* tracker is now current).
|
|
173
|
+
*/
|
|
174
|
+
export interface DiffEvent {
|
|
175
|
+
type: import('./event-types').SseEventKind;
|
|
176
|
+
payload: unknown;
|
|
177
|
+
}
|
|
178
|
+
export declare function diffEnsembleSnapshot(prev: AggregateEnsembleSnapshot | null, next: AggregateEnsembleSnapshot, track: Pick<EnsembleTrack, 'playerPhases' | 'playerAgentTypes' | 'flags' | 'schedulesHash' | 'chatIds' | 'chatIdOrder'>, capturedAt: string): DiffEvent[];
|
|
179
|
+
/**
|
|
180
|
+
* Diff host profiles map → per-host events. Pure function.
|
|
181
|
+
*/
|
|
182
|
+
export declare function diffHostProfiles(prevHashes: Map<string, string>, nextProfiles: Record<string, HostProfile>): {
|
|
183
|
+
events: DiffEvent[];
|
|
184
|
+
hashes: Map<string, string>;
|
|
185
|
+
};
|
|
186
|
+
/**
|
|
187
|
+
* Diff ensemble-name set → ensemble.created / ensemble.destroyed events.
|
|
188
|
+
*
|
|
189
|
+
* #550 — accepts the slim `{ensemble, hasConductor}` shape rather than
|
|
190
|
+
* a full `AggregateEnsembleSnapshot[]`. The full-snapshot type still
|
|
191
|
+
* satisfies it structurally, so existing tests passing
|
|
192
|
+
* `AggregateEnsembleSnapshot[]` continue to compile. The slimmer
|
|
193
|
+
* input lets `applyDiff` feed the `livePrelude` carry-forward set
|
|
194
|
+
* (which contains stub entries for `'failed'` outcomes that have no
|
|
195
|
+
* full snapshot this tick).
|
|
196
|
+
*/
|
|
197
|
+
export declare function diffEnsembleSet(prev: ReadonlySet<string>, nextEnsembles: ReadonlyArray<{
|
|
198
|
+
ensemble: string;
|
|
199
|
+
hasConductor: boolean;
|
|
200
|
+
}>, capturedAt: string): {
|
|
201
|
+
events: DiffEvent[];
|
|
202
|
+
names: Set<string>;
|
|
203
|
+
};
|
|
204
|
+
export interface AggregateRunnerOptions {
|
|
205
|
+
client: TempoClient;
|
|
206
|
+
/** Shared per-process bootEpoch — same value used everywhere. */
|
|
207
|
+
bootEpoch: number;
|
|
208
|
+
/** Default 750 ms; tests pin lower values. */
|
|
209
|
+
pollIntervalMs?: number;
|
|
210
|
+
/** Test seam — defaults to `Date.now`. */
|
|
211
|
+
now?: () => number;
|
|
212
|
+
/** Per-ensemble bus override (mainly tests). Default constructs `EnsembleEventBus`. */
|
|
213
|
+
busFactory?: (ensemble: string, allocator: SeqAllocator) => EnsembleEventBus;
|
|
214
|
+
/**
|
|
215
|
+
* Issue #433 — watchdog ceiling for an in-flight tick. If a tick exceeds
|
|
216
|
+
* this without finishing, the watchdog force-clears `inFlight` so the
|
|
217
|
+
* next scheduled tick can run. Defaults to `20 × pollIntervalMs` (15s
|
|
218
|
+
* at the production default). Tests pin a small value to assert the
|
|
219
|
+
* unwedge behavior.
|
|
220
|
+
*/
|
|
221
|
+
tickWatchdogMs?: number;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Coordinates the poll loop and owns the per-ensemble + global buses.
|
|
225
|
+
* Daemon constructs one of these after `runDaemonBoot`. Hot path is
|
|
226
|
+
* `tick()` — production schedules it on a timer, tests call it
|
|
227
|
+
* directly for deterministic diffing.
|
|
228
|
+
*/
|
|
229
|
+
export declare class AggregateRunner {
|
|
230
|
+
private readonly client;
|
|
231
|
+
readonly bootEpoch: number;
|
|
232
|
+
private readonly pollIntervalMs;
|
|
233
|
+
private readonly now;
|
|
234
|
+
private readonly busFactory;
|
|
235
|
+
/** Per-ensemble bus + tracking state. */
|
|
236
|
+
private readonly tracks;
|
|
237
|
+
/** Global bus — handles `ensemble.created/destroyed` + `host_profile.changed`. */
|
|
238
|
+
private readonly _globalBus;
|
|
239
|
+
private readonly globalSeqAllocator;
|
|
240
|
+
/** Last seen ensemble names + host profile hashes for diff. */
|
|
241
|
+
private knownEnsembles;
|
|
242
|
+
private hostHashes;
|
|
243
|
+
/** Loop state. */
|
|
244
|
+
private timer;
|
|
245
|
+
private inFlight;
|
|
246
|
+
private skipCount;
|
|
247
|
+
/** Last skip-warning emit time — rate-limited so a wedged Temporal doesn't drown the log. */
|
|
248
|
+
private lastSkipWarn;
|
|
249
|
+
private stopped;
|
|
250
|
+
/**
|
|
251
|
+
* Issue #433 — tick generation counter. Incremented each time a tick
|
|
252
|
+
* starts. The watchdog stamps the current generation when it force-clears
|
|
253
|
+
* `inFlight`; a late-arriving completion checks `myGen === currentGen`
|
|
254
|
+
* before resetting state so it doesn't clobber a fresh tick that the
|
|
255
|
+
* watchdog already handed to the loop.
|
|
256
|
+
*/
|
|
257
|
+
private tickGen;
|
|
258
|
+
/**
|
|
259
|
+
* Watchdog ceiling — if a tick exceeds this without finishing, the
|
|
260
|
+
* watchdog force-clears `inFlight` so the next scheduled tick can run.
|
|
261
|
+
* Default: 20 × poll interval (15s at the 750ms default). Should be
|
|
262
|
+
* comfortably larger than `pollIntervalMs × DEFAULT_QUERY_TIMEOUT_MS /
|
|
263
|
+
* pollInterval` so `queryHandleWithTimeout`-bounded ticks finish well
|
|
264
|
+
* inside the watchdog window in normal operation.
|
|
265
|
+
*/
|
|
266
|
+
private readonly tickWatchdogMs;
|
|
267
|
+
constructor(opts: AggregateRunnerOptions);
|
|
268
|
+
/**
|
|
269
|
+
* Begin polling on the configured cadence.
|
|
270
|
+
*
|
|
271
|
+
* **One-shot by design**: a single `start()` schedules the first
|
|
272
|
+
* tick immediately and chains subsequent ticks via `setTimeout` —
|
|
273
|
+
* each tick reschedules the next as it completes. Repeated
|
|
274
|
+
* `start()` calls are no-ops once the chain is running (and after
|
|
275
|
+
* `stop()` flips `stopped = true`, future `start()` calls are
|
|
276
|
+
* also no-ops). Tests that want to drive ticks deterministically
|
|
277
|
+
* skip `start()` and call `tick()` directly. PR #324 review nit
|
|
278
|
+
* folded in.
|
|
279
|
+
*/
|
|
280
|
+
start(): void;
|
|
281
|
+
/** Stop polling. Buses stay alive — daemon owns their close lifecycle. */
|
|
282
|
+
stop(): void;
|
|
283
|
+
/** Drain every bus + clear tracking. */
|
|
284
|
+
close(): void;
|
|
285
|
+
/** The global bus — exposed for the SSE handler's `/v1/events` route. */
|
|
286
|
+
globalBus(): EventBus;
|
|
287
|
+
/**
|
|
288
|
+
* Look up (or lazily build) the per-ensemble bus. SSE handler uses
|
|
289
|
+
* this to subscribe a new client; aggregate diff uses it to emit
|
|
290
|
+
* `player.added`-and-friends.
|
|
291
|
+
*/
|
|
292
|
+
getOrCreateEnsembleBus(ensemble: string): EnsembleEventBus;
|
|
293
|
+
/** Returns the bus for an ensemble if one exists, else `null`. */
|
|
294
|
+
getEnsembleBus(ensemble: string): EnsembleEventBus | null;
|
|
295
|
+
/** Total live subscriber count across all buses — `/v1/health.subscriberCount`. */
|
|
296
|
+
totalSubscriberCount(): number;
|
|
297
|
+
/**
|
|
298
|
+
* Run one diff pass. Production schedules this on a timer; tests
|
|
299
|
+
* call it directly. Serial-with-skip per §8 — if a previous tick
|
|
300
|
+
* is still in flight, this one skips with a warn-log.
|
|
301
|
+
*
|
|
302
|
+
* **Watchdog (#433)**. Each tick takes a generation stamp. After
|
|
303
|
+
* `tickWatchdogMs` elapses without completion, the watchdog bumps
|
|
304
|
+
* the generation and clears `inFlight` so the next scheduled tick
|
|
305
|
+
* can run. The hung tick's eventual completion checks its own
|
|
306
|
+
* generation against the current one; if it's stale (watchdog
|
|
307
|
+
* already advanced past it), it returns without touching `inFlight`
|
|
308
|
+
* — the new tick owns that flag now.
|
|
309
|
+
*/
|
|
310
|
+
tick(): Promise<void>;
|
|
311
|
+
/** Fetch the current cluster state via `TempoClient`. */
|
|
312
|
+
collect(): Promise<AggregateSnapshot>;
|
|
313
|
+
/** Apply diff and emit events — exposed for tests that want to inject fixtures. */
|
|
314
|
+
applyDiff(snapshot: AggregateSnapshot): void;
|
|
315
|
+
private ensureTrack;
|
|
316
|
+
/** Test-only — skip count for assertions. */
|
|
317
|
+
get _skipCount(): number;
|
|
318
|
+
}
|
|
319
|
+
export {};
|