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,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 {};