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.
Files changed (484) hide show
  1. package/CLAUDE.md +213 -0
  2. package/LICENSE +21 -0
  3. package/README.md +289 -0
  4. package/assets/icon-32.png +0 -0
  5. package/assets/icon-512.png +0 -0
  6. package/assets/icon-64.png +0 -0
  7. package/assets/icon-dark-32.png +0 -0
  8. package/assets/icon-dark-64.png +0 -0
  9. package/assets/icon-dark.svg +9 -0
  10. package/assets/icon.svg +9 -0
  11. package/assets/logo-dark.svg +11 -0
  12. package/assets/logo-light.svg +11 -0
  13. package/dashboard/README.md +91 -0
  14. package/dashboard/dist/assets/index-CB78ToNE.css +2 -0
  15. package/dashboard/dist/assets/index-_5jV0Znu.js +62 -0
  16. package/dashboard/dist/assets/index-_5jV0Znu.js.map +1 -0
  17. package/dashboard/dist/index.html +21 -0
  18. package/dashboard/package.json +47 -0
  19. package/dist/activities/hard-terminate.d.ts +32 -0
  20. package/dist/activities/hard-terminate.js +460 -0
  21. package/dist/activities/maestro.d.ts +72 -0
  22. package/dist/activities/maestro.js +254 -0
  23. package/dist/activities/outbox.d.ts +188 -0
  24. package/dist/activities/outbox.js +849 -0
  25. package/dist/activities/resolve.d.ts +64 -0
  26. package/dist/activities/resolve.js +129 -0
  27. package/dist/activities/schedule-fire.d.ts +36 -0
  28. package/dist/activities/schedule-fire.js +147 -0
  29. package/dist/adapters/base.d.ts +426 -0
  30. package/dist/adapters/base.js +1270 -0
  31. package/dist/adapters/claude-api/adapter.d.ts +168 -0
  32. package/dist/adapters/claude-api/adapter.js +797 -0
  33. package/dist/adapters/claude-api/api-error.d.ts +96 -0
  34. package/dist/adapters/claude-api/api-error.js +191 -0
  35. package/dist/adapters/claude-api/index.d.ts +16 -0
  36. package/dist/adapters/claude-api/index.js +21 -0
  37. package/dist/adapters/claude-api/mcp-bridge.d.ts +50 -0
  38. package/dist/adapters/claude-api/mcp-bridge.js +157 -0
  39. package/dist/adapters/claude-code/adapter.d.ts +133 -0
  40. package/dist/adapters/claude-code/adapter.js +274 -0
  41. package/dist/adapters/claude-code/index.d.ts +15 -0
  42. package/dist/adapters/claude-code/index.js +20 -0
  43. package/dist/adapters/claude-code-headless/adapter.d.ts +131 -0
  44. package/dist/adapters/claude-code-headless/adapter.js +710 -0
  45. package/dist/adapters/claude-code-headless/error-mapper.d.ts +107 -0
  46. package/dist/adapters/claude-code-headless/error-mapper.js +281 -0
  47. package/dist/adapters/claude-code-headless/index.d.ts +17 -0
  48. package/dist/adapters/claude-code-headless/index.js +26 -0
  49. package/dist/adapters/claude-code-headless/pre-flight.d.ts +51 -0
  50. package/dist/adapters/claude-code-headless/pre-flight.js +207 -0
  51. package/dist/adapters/claude-code-headless/prompt.d.ts +93 -0
  52. package/dist/adapters/claude-code-headless/prompt.js +79 -0
  53. package/dist/adapters/claude-code-headless/stream-json.d.ts +242 -0
  54. package/dist/adapters/claude-code-headless/stream-json.js +208 -0
  55. package/dist/adapters/claude-code-headless/types.d.ts +28 -0
  56. package/dist/adapters/claude-code-headless/types.js +36 -0
  57. package/dist/adapters/copilot/adapter.d.ts +100 -0
  58. package/dist/adapters/copilot/adapter.js +730 -0
  59. package/dist/adapters/copilot/index.d.ts +15 -0
  60. package/dist/adapters/copilot/index.js +20 -0
  61. package/dist/adapters/index.d.ts +42 -0
  62. package/dist/adapters/index.js +115 -0
  63. package/dist/adapters/opencode/adapter.d.ts +82 -0
  64. package/dist/adapters/opencode/adapter.js +710 -0
  65. package/dist/adapters/opencode/config.d.ts +90 -0
  66. package/dist/adapters/opencode/config.js +137 -0
  67. package/dist/adapters/opencode/helpers.d.ts +40 -0
  68. package/dist/adapters/opencode/helpers.js +144 -0
  69. package/dist/adapters/opencode/index.d.ts +12 -0
  70. package/dist/adapters/opencode/index.js +17 -0
  71. package/dist/adapters/opencode/server-bridge.d.ts +124 -0
  72. package/dist/adapters/opencode/server-bridge.js +216 -0
  73. package/dist/adapters/sdk/base.d.ts +95 -0
  74. package/dist/adapters/sdk/base.js +134 -0
  75. package/dist/adapters/sdk/system-prompt.d.ts +64 -0
  76. package/dist/adapters/sdk/system-prompt.js +78 -0
  77. package/dist/adapters/terminal-error.d.ts +27 -0
  78. package/dist/adapters/terminal-error.js +39 -0
  79. package/dist/channel.d.ts +3 -0
  80. package/dist/channel.js +48 -0
  81. package/dist/cli/commands.d.ts +245 -0
  82. package/dist/cli/commands.js +2438 -0
  83. package/dist/cli/config-command.d.ts +8 -0
  84. package/dist/cli/config-command.js +254 -0
  85. package/dist/cli/daemon-command.d.ts +57 -0
  86. package/dist/cli/daemon-command.js +493 -0
  87. package/dist/cli/daemon.d.ts +217 -0
  88. package/dist/cli/daemon.js +632 -0
  89. package/dist/cli/dashboard-command.d.ts +20 -0
  90. package/dist/cli/dashboard-command.js +241 -0
  91. package/dist/cli/dev-banner.d.ts +107 -0
  92. package/dist/cli/dev-banner.js +190 -0
  93. package/dist/cli/dev-mode-bootstrap.d.ts +29 -0
  94. package/dist/cli/dev-mode-bootstrap.js +36 -0
  95. package/dist/cli/dev-verbs.d.ts +43 -0
  96. package/dist/cli/dev-verbs.js +254 -0
  97. package/dist/cli/help-text.d.ts +1 -0
  98. package/dist/cli/help-text.js +158 -0
  99. package/dist/cli/legacy-migration.d.ts +35 -0
  100. package/dist/cli/legacy-migration.js +335 -0
  101. package/dist/cli/mcp.d.ts +8 -0
  102. package/dist/cli/mcp.js +63 -0
  103. package/dist/cli/output.d.ts +12 -0
  104. package/dist/cli/output.js +37 -0
  105. package/dist/cli/preflight.d.ts +9 -0
  106. package/dist/cli/preflight.js +96 -0
  107. package/dist/cli/removed-verbs.d.ts +9 -0
  108. package/dist/cli/removed-verbs.js +78 -0
  109. package/dist/cli/sa-preflight.d.ts +99 -0
  110. package/dist/cli/sa-preflight.js +183 -0
  111. package/dist/cli/scenarios-command.d.ts +6 -0
  112. package/dist/cli/scenarios-command.js +167 -0
  113. package/dist/cli/startup.d.ts +112 -0
  114. package/dist/cli/startup.js +641 -0
  115. package/dist/cli/upgrade-command.d.ts +5 -0
  116. package/dist/cli/upgrade-command.js +240 -0
  117. package/dist/cli.d.ts +2 -0
  118. package/dist/cli.js +680 -0
  119. package/dist/client/core.d.ts +33 -0
  120. package/dist/client/core.js +1260 -0
  121. package/dist/client/ensure-conductor-spawned.d.ts +35 -0
  122. package/dist/client/ensure-conductor-spawned.js +48 -0
  123. package/dist/client/index.d.ts +32 -0
  124. package/dist/client/index.js +22 -0
  125. package/dist/client/interface.d.ts +461 -0
  126. package/dist/client/interface.js +2 -0
  127. package/dist/client/subscribe.d.ts +108 -0
  128. package/dist/client/subscribe.js +598 -0
  129. package/dist/client/with-spawn.d.ts +27 -0
  130. package/dist/client/with-spawn.js +87 -0
  131. package/dist/config.d.ts +323 -0
  132. package/dist/config.js +593 -0
  133. package/dist/connection.d.ts +7 -0
  134. package/dist/connection.js +46 -0
  135. package/dist/constants.d.ts +50 -0
  136. package/dist/constants.js +74 -0
  137. package/dist/copilot-bridge.d.ts +22 -0
  138. package/dist/copilot-bridge.js +565 -0
  139. package/dist/daemon-adapter-versions.d.ts +52 -0
  140. package/dist/daemon-adapter-versions.js +170 -0
  141. package/dist/daemon.d.ts +275 -0
  142. package/dist/daemon.js +989 -0
  143. package/dist/ensemble/agent-types.d.ts +23 -0
  144. package/dist/ensemble/agent-types.js +132 -0
  145. package/dist/ensemble/loader.d.ts +14 -0
  146. package/dist/ensemble/loader.js +140 -0
  147. package/dist/ensemble/saver.d.ts +49 -0
  148. package/dist/ensemble/saver.js +201 -0
  149. package/dist/ensemble/schema.d.ts +71 -0
  150. package/dist/ensemble/schema.js +3 -0
  151. package/dist/git-info.d.ts +4 -0
  152. package/dist/git-info.js +29 -0
  153. package/dist/http/aggregate.d.ts +319 -0
  154. package/dist/http/aggregate.js +684 -0
  155. package/dist/http/auth.d.ts +67 -0
  156. package/dist/http/auth.js +177 -0
  157. package/dist/http/body.d.ts +71 -0
  158. package/dist/http/body.js +121 -0
  159. package/dist/http/catalog.d.ts +67 -0
  160. package/dist/http/catalog.js +209 -0
  161. package/dist/http/cors.d.ts +42 -0
  162. package/dist/http/cors.js +111 -0
  163. package/dist/http/dashboard-pair.d.ts +94 -0
  164. package/dist/http/dashboard-pair.js +148 -0
  165. package/dist/http/dashboard.d.ts +20 -0
  166. package/dist/http/dashboard.js +160 -0
  167. package/dist/http/event-bus.d.ts +217 -0
  168. package/dist/http/event-bus.js +365 -0
  169. package/dist/http/event-id.d.ts +77 -0
  170. package/dist/http/event-id.js +117 -0
  171. package/dist/http/event-types.d.ts +348 -0
  172. package/dist/http/event-types.js +36 -0
  173. package/dist/http/fixtures/chat-stress.d.ts +8 -0
  174. package/dist/http/fixtures/chat-stress.js +63 -0
  175. package/dist/http/fixtures/conductor-leaving.d.ts +8 -0
  176. package/dist/http/fixtures/conductor-leaving.js +80 -0
  177. package/dist/http/fixtures/constants.d.ts +10 -0
  178. package/dist/http/fixtures/constants.js +13 -0
  179. package/dist/http/fixtures/eight-player-broadcast.d.ts +10 -0
  180. package/dist/http/fixtures/eight-player-broadcast.js +81 -0
  181. package/dist/http/fixtures/empty-ensemble.d.ts +6 -0
  182. package/dist/http/fixtures/empty-ensemble.js +26 -0
  183. package/dist/http/fixtures/index.d.ts +55 -0
  184. package/dist/http/fixtures/index.js +110 -0
  185. package/dist/http/fixtures/single-conductor.d.ts +7 -0
  186. package/dist/http/fixtures/single-conductor.js +46 -0
  187. package/dist/http/fixtures/sse-reconnect.d.ts +8 -0
  188. package/dist/http/fixtures/sse-reconnect.js +77 -0
  189. package/dist/http/index.d.ts +21 -0
  190. package/dist/http/index.js +61 -0
  191. package/dist/http/port-file.d.ts +22 -0
  192. package/dist/http/port-file.js +132 -0
  193. package/dist/http/responses.d.ts +27 -0
  194. package/dist/http/responses.js +40 -0
  195. package/dist/http/ring-buffer.d.ts +41 -0
  196. package/dist/http/ring-buffer.js +80 -0
  197. package/dist/http/server.d.ts +122 -0
  198. package/dist/http/server.js +459 -0
  199. package/dist/http/snapshot.d.ts +85 -0
  200. package/dist/http/snapshot.js +180 -0
  201. package/dist/http/sse-handler.d.ts +87 -0
  202. package/dist/http/sse-handler.js +294 -0
  203. package/dist/http/writes.d.ts +55 -0
  204. package/dist/http/writes.js +240 -0
  205. package/dist/palette/index.d.ts +138 -0
  206. package/dist/palette/index.js +221 -0
  207. package/dist/reconcile/orphans.d.ts +255 -0
  208. package/dist/reconcile/orphans.js +340 -0
  209. package/dist/scripts/258-spotcheck.js +303 -0
  210. package/dist/scripts/check-components-css-sync.js +199 -0
  211. package/dist/scripts/run-shard.js +121 -0
  212. package/dist/scripts/verify-daemon-isolation-guard.js +128 -0
  213. package/dist/server-tools.d.ts +87 -0
  214. package/dist/server-tools.js +146 -0
  215. package/dist/server.d.ts +2 -0
  216. package/dist/server.js +366 -0
  217. package/dist/spawn.d.ts +296 -0
  218. package/dist/spawn.js +747 -0
  219. package/dist/tools/agent-types.d.ts +2 -0
  220. package/dist/tools/agent-types.js +21 -0
  221. package/dist/tools/attachment-info.d.ts +4 -0
  222. package/dist/tools/attachment-info.js +48 -0
  223. package/dist/tools/broadcast.d.ts +4 -0
  224. package/dist/tools/broadcast.js +76 -0
  225. package/dist/tools/cancel-stage.d.ts +3 -0
  226. package/dist/tools/cancel-stage.js +20 -0
  227. package/dist/tools/clear-state.d.ts +3 -0
  228. package/dist/tools/clear-state.js +37 -0
  229. package/dist/tools/coat-check-evict.d.ts +4 -0
  230. package/dist/tools/coat-check-evict.js +43 -0
  231. package/dist/tools/coat-check-get.d.ts +4 -0
  232. package/dist/tools/coat-check-get.js +56 -0
  233. package/dist/tools/coat-check-list.d.ts +4 -0
  234. package/dist/tools/coat-check-list.js +60 -0
  235. package/dist/tools/coat-check-put.d.ts +4 -0
  236. package/dist/tools/coat-check-put.js +53 -0
  237. package/dist/tools/cue.d.ts +44 -0
  238. package/dist/tools/cue.js +201 -0
  239. package/dist/tools/destroy.d.ts +4 -0
  240. package/dist/tools/destroy.js +188 -0
  241. package/dist/tools/detach.d.ts +4 -0
  242. package/dist/tools/detach.js +45 -0
  243. package/dist/tools/encore.d.ts +4 -0
  244. package/dist/tools/encore.js +31 -0
  245. package/dist/tools/ensemble.d.ts +32 -0
  246. package/dist/tools/ensemble.js +198 -0
  247. package/dist/tools/evaluate-gate.d.ts +3 -0
  248. package/dist/tools/evaluate-gate.js +32 -0
  249. package/dist/tools/fetch-state.d.ts +13 -0
  250. package/dist/tools/fetch-state.js +78 -0
  251. package/dist/tools/gates.d.ts +3 -0
  252. package/dist/tools/gates.js +41 -0
  253. package/dist/tools/helpers.d.ts +21 -0
  254. package/dist/tools/helpers.js +25 -0
  255. package/dist/tools/hosts.d.ts +4 -0
  256. package/dist/tools/hosts.js +40 -0
  257. package/dist/tools/listen.d.ts +3 -0
  258. package/dist/tools/listen.js +22 -0
  259. package/dist/tools/load-lineup.d.ts +5 -0
  260. package/dist/tools/load-lineup.js +381 -0
  261. package/dist/tools/migrate.d.ts +4 -0
  262. package/dist/tools/migrate.js +60 -0
  263. package/dist/tools/pause-ensemble.d.ts +4 -0
  264. package/dist/tools/pause-ensemble.js +58 -0
  265. package/dist/tools/pause.d.ts +4 -0
  266. package/dist/tools/pause.js +36 -0
  267. package/dist/tools/play.d.ts +4 -0
  268. package/dist/tools/play.js +57 -0
  269. package/dist/tools/quality-gate.d.ts +3 -0
  270. package/dist/tools/quality-gate.js +26 -0
  271. package/dist/tools/recall.d.ts +3 -0
  272. package/dist/tools/recall.js +32 -0
  273. package/dist/tools/recruit.d.ts +38 -0
  274. package/dist/tools/recruit.js +447 -0
  275. package/dist/tools/release.d.ts +4 -0
  276. package/dist/tools/release.js +98 -0
  277. package/dist/tools/report.d.ts +3 -0
  278. package/dist/tools/report.js +29 -0
  279. package/dist/tools/resolve.d.ts +1 -0
  280. package/dist/tools/resolve.js +7 -0
  281. package/dist/tools/restart.d.ts +35 -0
  282. package/dist/tools/restart.js +131 -0
  283. package/dist/tools/restore.d.ts +4 -0
  284. package/dist/tools/restore.js +107 -0
  285. package/dist/tools/resume-ensemble.d.ts +4 -0
  286. package/dist/tools/resume-ensemble.js +79 -0
  287. package/dist/tools/save-lineup.d.ts +4 -0
  288. package/dist/tools/save-lineup.js +36 -0
  289. package/dist/tools/save-state.d.ts +3 -0
  290. package/dist/tools/save-state.js +57 -0
  291. package/dist/tools/schedule.d.ts +4 -0
  292. package/dist/tools/schedule.js +152 -0
  293. package/dist/tools/schedules.d.ts +4 -0
  294. package/dist/tools/schedules.js +54 -0
  295. package/dist/tools/set-ensemble-description.d.ts +4 -0
  296. package/dist/tools/set-ensemble-description.js +37 -0
  297. package/dist/tools/set-name.d.ts +4 -0
  298. package/dist/tools/set-name.js +45 -0
  299. package/dist/tools/set-part.d.ts +3 -0
  300. package/dist/tools/set-part.js +20 -0
  301. package/dist/tools/shutdown.d.ts +4 -0
  302. package/dist/tools/shutdown.js +54 -0
  303. package/dist/tools/stage.d.ts +3 -0
  304. package/dist/tools/stage.js +28 -0
  305. package/dist/tools/stages.d.ts +3 -0
  306. package/dist/tools/stages.js +35 -0
  307. package/dist/tools/stop.d.ts +4 -0
  308. package/dist/tools/stop.js +29 -0
  309. package/dist/tools/unschedule.d.ts +4 -0
  310. package/dist/tools/unschedule.js +35 -0
  311. package/dist/tools/who-am-i.d.ts +3 -0
  312. package/dist/tools/who-am-i.js +34 -0
  313. package/dist/tools/worktree.d.ts +4 -0
  314. package/dist/tools/worktree.js +181 -0
  315. package/dist/tui/App.d.ts +85 -0
  316. package/dist/tui/App.js +1791 -0
  317. package/dist/tui/bootstrap-types.d.ts +46 -0
  318. package/dist/tui/bootstrap-types.js +7 -0
  319. package/dist/tui/client.d.ts +6 -0
  320. package/dist/tui/client.js +9 -0
  321. package/dist/tui/commands.d.ts +71 -0
  322. package/dist/tui/commands.js +1375 -0
  323. package/dist/tui/components/ActivityLog.d.ts +16 -0
  324. package/dist/tui/components/ActivityLog.js +36 -0
  325. package/dist/tui/components/ChatView.d.ts +35 -0
  326. package/dist/tui/components/ChatView.js +54 -0
  327. package/dist/tui/components/CommandOverlay.d.ts +15 -0
  328. package/dist/tui/components/CommandOverlay.js +34 -0
  329. package/dist/tui/components/CommandPalette.d.ts +21 -0
  330. package/dist/tui/components/CommandPalette.js +67 -0
  331. package/dist/tui/components/ConductorChat.d.ts +16 -0
  332. package/dist/tui/components/ConductorChat.js +32 -0
  333. package/dist/tui/components/ConversationStream.d.ts +114 -0
  334. package/dist/tui/components/ConversationStream.js +307 -0
  335. package/dist/tui/components/CreateEnsembleWizard.d.ts +19 -0
  336. package/dist/tui/components/CreateEnsembleWizard.js +223 -0
  337. package/dist/tui/components/DestroyConfirmModal.d.ts +17 -0
  338. package/dist/tui/components/DestroyConfirmModal.js +62 -0
  339. package/dist/tui/components/EnsembleListView.d.ts +14 -0
  340. package/dist/tui/components/EnsembleListView.js +32 -0
  341. package/dist/tui/components/EnsemblePanel.d.ts +12 -0
  342. package/dist/tui/components/EnsemblePanel.js +40 -0
  343. package/dist/tui/components/ErrorView.d.ts +31 -0
  344. package/dist/tui/components/ErrorView.js +129 -0
  345. package/dist/tui/components/HomeView.d.ts +54 -0
  346. package/dist/tui/components/HomeView.js +306 -0
  347. package/dist/tui/components/InputBar.d.ts +13 -0
  348. package/dist/tui/components/InputBar.js +58 -0
  349. package/dist/tui/components/LoadLineupModal.d.ts +18 -0
  350. package/dist/tui/components/LoadLineupModal.js +79 -0
  351. package/dist/tui/components/MainView.d.ts +21 -0
  352. package/dist/tui/components/MainView.js +107 -0
  353. package/dist/tui/components/NewEnsembleModal.d.ts +9 -0
  354. package/dist/tui/components/NewEnsembleModal.js +73 -0
  355. package/dist/tui/components/Picker.d.ts +23 -0
  356. package/dist/tui/components/Picker.js +70 -0
  357. package/dist/tui/components/PlayerDetailView.d.ts +26 -0
  358. package/dist/tui/components/PlayerDetailView.js +118 -0
  359. package/dist/tui/components/PromptArea.d.ts +50 -0
  360. package/dist/tui/components/PromptArea.js +303 -0
  361. package/dist/tui/components/RecruitWizard.d.ts +17 -0
  362. package/dist/tui/components/RecruitWizard.js +221 -0
  363. package/dist/tui/components/RestoreConfirmModal.d.ts +18 -0
  364. package/dist/tui/components/RestoreConfirmModal.js +71 -0
  365. package/dist/tui/components/ScheduleOverlay.d.ts +13 -0
  366. package/dist/tui/components/ScheduleOverlay.js +113 -0
  367. package/dist/tui/components/ScheduleWizard.d.ts +19 -0
  368. package/dist/tui/components/ScheduleWizard.js +259 -0
  369. package/dist/tui/components/Splash.d.ts +23 -0
  370. package/dist/tui/components/Splash.js +221 -0
  371. package/dist/tui/components/StatusBar.d.ts +48 -0
  372. package/dist/tui/components/StatusBar.js +128 -0
  373. package/dist/tui/components/StatusOverlay.d.ts +15 -0
  374. package/dist/tui/components/StatusOverlay.js +76 -0
  375. package/dist/tui/components/TitleBar.d.ts +10 -0
  376. package/dist/tui/components/TitleBar.js +21 -0
  377. package/dist/tui/components/TopBar.d.ts +12 -0
  378. package/dist/tui/components/TopBar.js +15 -0
  379. package/dist/tui/core-api.d.ts +26 -0
  380. package/dist/tui/core-api.js +67 -0
  381. package/dist/tui/hooks/useEnsembleDiscovery.d.ts +3 -0
  382. package/dist/tui/hooks/useEnsembleDiscovery.js +30 -0
  383. package/dist/tui/hooks/useMaestroPoller.d.ts +3 -0
  384. package/dist/tui/hooks/useMaestroPoller.js +36 -0
  385. package/dist/tui/hooks/useSendCommand.d.ts +7 -0
  386. package/dist/tui/hooks/useSendCommand.js +29 -0
  387. package/dist/tui/index.d.ts +15 -0
  388. package/dist/tui/index.js +156 -0
  389. package/dist/tui/ink-context.d.ts +18 -0
  390. package/dist/tui/ink-context.js +59 -0
  391. package/dist/tui/ink-loader.d.ts +26 -0
  392. package/dist/tui/ink-loader.js +42 -0
  393. package/dist/tui/removed-commands.d.ts +9 -0
  394. package/dist/tui/removed-commands.js +22 -0
  395. package/dist/tui/sse-handler.d.ts +52 -0
  396. package/dist/tui/sse-handler.js +157 -0
  397. package/dist/tui/store.d.ts +598 -0
  398. package/dist/tui/store.js +753 -0
  399. package/dist/tui/utils/format.d.ts +56 -0
  400. package/dist/tui/utils/format.js +155 -0
  401. package/dist/tui/utils/fullscreen.d.ts +23 -0
  402. package/dist/tui/utils/fullscreen.js +71 -0
  403. package/dist/tui/utils/history.d.ts +10 -0
  404. package/dist/tui/utils/history.js +85 -0
  405. package/dist/tui/utils/platform.d.ts +45 -0
  406. package/dist/tui/utils/platform.js +258 -0
  407. package/dist/tui/utils/theme.d.ts +21 -0
  408. package/dist/tui/utils/theme.js +24 -0
  409. package/dist/types.d.ts +1020 -0
  410. package/dist/types.js +39 -0
  411. package/dist/utils/attachment-format.d.ts +22 -0
  412. package/dist/utils/attachment-format.js +32 -0
  413. package/dist/utils/default-part.d.ts +43 -0
  414. package/dist/utils/default-part.js +104 -0
  415. package/dist/utils/duration.d.ts +30 -0
  416. package/dist/utils/duration.js +69 -0
  417. package/dist/utils/ensemble-ops.d.ts +61 -0
  418. package/dist/utils/ensemble-ops.js +77 -0
  419. package/dist/utils/format-hosts.d.ts +21 -0
  420. package/dist/utils/format-hosts.js +73 -0
  421. package/dist/utils/hosts.d.ts +113 -0
  422. package/dist/utils/hosts.js +265 -0
  423. package/dist/utils/parent-death-watchdog.d.ts +1 -0
  424. package/dist/utils/parent-death-watchdog.js +47 -0
  425. package/dist/utils/query-timeout.d.ts +103 -0
  426. package/dist/utils/query-timeout.js +113 -0
  427. package/dist/utils/recall-format.d.ts +78 -0
  428. package/dist/utils/recall-format.js +105 -0
  429. package/dist/utils/restore-format.d.ts +49 -0
  430. package/dist/utils/restore-format.js +91 -0
  431. package/dist/utils/safe-path.d.ts +10 -0
  432. package/dist/utils/safe-path.js +43 -0
  433. package/dist/utils/sdk-probe.d.ts +9 -0
  434. package/dist/utils/sdk-probe.js +45 -0
  435. package/dist/utils/search-attributes.d.ts +76 -0
  436. package/dist/utils/search-attributes.js +86 -0
  437. package/dist/utils/validation.d.ts +113 -0
  438. package/dist/utils/validation.js +163 -0
  439. package/dist/utils/visibility-deadline.d.ts +186 -0
  440. package/dist/utils/visibility-deadline.js +158 -0
  441. package/dist/utils/worktree.d.ts +103 -0
  442. package/dist/utils/worktree.js +327 -0
  443. package/dist/worker.d.ts +14 -0
  444. package/dist/worker.js +146 -0
  445. package/dist/workflows/attachment-math.d.ts +56 -0
  446. package/dist/workflows/attachment-math.js +47 -0
  447. package/dist/workflows/index.d.ts +3 -0
  448. package/dist/workflows/index.js +11 -0
  449. package/dist/workflows/maestro-signals.d.ts +217 -0
  450. package/dist/workflows/maestro-signals.js +155 -0
  451. package/dist/workflows/maestro.d.ts +3 -0
  452. package/dist/workflows/maestro.js +812 -0
  453. package/dist/workflows/scheduler-signals.d.ts +10 -0
  454. package/dist/workflows/scheduler-signals.js +14 -0
  455. package/dist/workflows/scheduler.d.ts +17 -0
  456. package/dist/workflows/scheduler.js +143 -0
  457. package/dist/workflows/session.d.ts +2 -0
  458. package/dist/workflows/session.js +1638 -0
  459. package/dist/workflows/signals.d.ts +297 -0
  460. package/dist/workflows/signals.js +239 -0
  461. package/examples/agents/tempo-composer.md +56 -0
  462. package/examples/agents/tempo-conductor.md +117 -0
  463. package/examples/agents/tempo-critic.md +73 -0
  464. package/examples/agents/tempo-improv.md +74 -0
  465. package/examples/agents/tempo-liner.md +75 -0
  466. package/examples/agents/tempo-roadie.md +61 -0
  467. package/examples/agents/tempo-soloist.md +71 -0
  468. package/examples/agents/tempo-tuner.md +94 -0
  469. package/examples/ensembles/tempo-big-band.yaml +146 -0
  470. package/examples/ensembles/tempo-dev-team.yaml +58 -0
  471. package/examples/ensembles/tempo-headless-jam.yaml +77 -0
  472. package/examples/ensembles/tempo-jam-session.yaml +41 -0
  473. package/examples/ensembles/tempo-mock-jam.yaml +79 -0
  474. package/examples/ensembles/tempo-review-squad.yaml +32 -0
  475. package/package.json +172 -0
  476. package/packaging/launchd/com.agent.tempo.plist +46 -0
  477. package/packaging/systemd/agent-tempo.service +32 -0
  478. package/packaging/windows/install-task.ps1 +71 -0
  479. package/scenarios/conductor-recruit-mock.yaml +33 -0
  480. package/scenarios/echo-roundtrip.yaml +15 -0
  481. package/scenarios/multi-player-handoff.yaml +38 -0
  482. package/scenarios/recruit-cascade.yaml +38 -0
  483. package/scenarios/two-player-conversation.yaml +33 -0
  484. 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,3 @@
1
+ export { agentSessionWorkflow } from './session';
2
+ export { agentSchedulerWorkflow } from './scheduler';
3
+ export { agentMaestroWorkflow, agentGlobalMaestroWorkflow } from './maestro';
@@ -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');
@@ -0,0 +1,3 @@
1
+ import { MaestroInput, GlobalMaestroInput } from './maestro-signals';
2
+ export declare function agentMaestroWorkflow(input: MaestroInput): Promise<void>;
3
+ export declare function agentGlobalMaestroWorkflow(input: GlobalMaestroInput): Promise<void>;