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,208 @@
1
+ "use strict";
2
+ /**
3
+ * Stream-JSON frame parser for `claude -p --output-format stream-json`.
4
+ *
5
+ * Issue #520 PR-3. Parses the newline-delimited JSON envelope the Claude
6
+ * Code CLI emits during a per-turn invocation, accumulating the bits the
7
+ * adapter needs (assembled assistant text, stop reason, usage, cost, plus
8
+ * the fatal-/transient-classifier inputs).
9
+ *
10
+ * **Schema is grounded in the §11.1 spike fixtures** captured against
11
+ * `claude --version` 2.1.126 — see `tests/adapters/fixtures/claude-code-headless/`.
12
+ * Three deltas vs design §5.3 (documented in §16 spike-findings appendix):
13
+ *
14
+ * 1. **`result` frame has a `subtype: 'success' | 'error'`** — design listed
15
+ * `result` as a top-level type. Reality: `subtype` distinguishes success
16
+ * vs error envelopes. Bonus: `is_error: boolean` + `api_error_status:
17
+ * number | null` are clean classifier inputs (see {@link ResultFrame}).
18
+ * 2. **`system/hook_started` + `system/hook_response` + `system/status`** —
19
+ * not in design. Emitted whenever the host has Claude Code hooks
20
+ * configured (most operators do — SessionStart hooks for project
21
+ * context). The `output`/`stdout` fields can carry arbitrary user
22
+ * content, so we IGNORE them outright (the fixture corpus shows a
23
+ * 107KB SessionStart hook body in real captures).
24
+ * 3. **`rate_limit_event` is a top-level type** — design assumed it was
25
+ * a `system/api_retry` subtype. Reality: it's its own frame. AND it
26
+ * carries TWO signal modes (informational vs action-required) on the
27
+ * same wire shape, distinguished by `rate_limit_info.status`. See
28
+ * {@link RateLimitEvent}.
29
+ *
30
+ * Pure code; no I/O; trivially unit-testable with synthesized + captured
31
+ * fixtures. The error classifier (`./error-mapper.ts`) consumes the
32
+ * accumulator state to emit a single `ApiErrorCategory` per turn.
33
+ */
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.StreamJsonReader = void 0;
36
+ exports.newTurnAccumulator = newTurnAccumulator;
37
+ exports.applyFrame = applyFrame;
38
+ /** Build a fresh accumulator. */
39
+ function newTurnAccumulator() {
40
+ return {
41
+ assembledText: '',
42
+ stopReason: null,
43
+ usage: null,
44
+ totalCostUsd: null,
45
+ resultIsError: null,
46
+ resultApiErrorStatus: null,
47
+ resultSubtype: null,
48
+ resultFrameSeen: false,
49
+ apiRetryEvents: [],
50
+ rateLimitEvents: [],
51
+ pluginErrors: [],
52
+ initModel: null,
53
+ initApiKeySource: null,
54
+ };
55
+ }
56
+ /**
57
+ * Fold one stream-json frame into the accumulator. Pure mutation — return
58
+ * the same instance for chaining.
59
+ *
60
+ * Unknown frame types are silently passed through (the parser is tolerant
61
+ * by design — Claude Code may add new frame types between minor versions
62
+ * and we don't want to crash on them; the adapter only ever acts on the
63
+ * categories we recognize).
64
+ *
65
+ * The hook + status frames are explicitly enumerated as IGNORED rather
66
+ * than falling through `default`, so future readers don't think the
67
+ * pass-through is accidental.
68
+ */
69
+ function applyFrame(state, frame) {
70
+ switch (frame.type) {
71
+ case 'system':
72
+ switch (frame.subtype) {
73
+ case 'init': {
74
+ const init = frame;
75
+ state.initModel = init.model ?? null;
76
+ state.initApiKeySource = init.apiKeySource ?? null;
77
+ if (init.plugin_errors && init.plugin_errors.length > 0) {
78
+ state.pluginErrors = init.plugin_errors;
79
+ }
80
+ return state;
81
+ }
82
+ case 'api_retry':
83
+ state.apiRetryEvents.push(frame);
84
+ return state;
85
+ case 'hook_started':
86
+ case 'hook_response':
87
+ case 'status':
88
+ // Delta #2 — explicitly ignored. Hook output may carry arbitrary
89
+ // operator content (107KB+ in real captures); we don't need it.
90
+ return state;
91
+ default:
92
+ return state;
93
+ }
94
+ case 'rate_limit_event':
95
+ // Delta #3 — top-level frame, NOT a system subtype. Two signal modes
96
+ // overloaded on one type: informational (every turn) vs action-required
97
+ // (when capped). Classifier distinguishes by `rate_limit_info.status`.
98
+ state.rateLimitEvents.push(frame);
99
+ return state;
100
+ case 'assistant': {
101
+ // Telemetry only — the canonical assembled text comes from the closing
102
+ // `result` frame's `result` field. Architect-locked: assistant-frame
103
+ // text accumulator is observed-only; `result.result` wins.
104
+ //
105
+ // We DO opportunistically accumulate text-block content as a fallback
106
+ // for the case where the subprocess exits without a `result` frame
107
+ // (turn aborted mid-stream) — better to surface partial output than
108
+ // nothing. Filter on `c.type === 'text'` to skip thinking + tool_use
109
+ // blocks (Delta #1 bonus finding — Opus 4.7 emits 'thinking' blocks).
110
+ const a = frame;
111
+ const blocks = a.message?.content ?? [];
112
+ for (const block of blocks) {
113
+ if (block && block.type === 'text' && typeof block.text === 'string') {
114
+ state.assembledText += block.text;
115
+ }
116
+ }
117
+ return state;
118
+ }
119
+ case 'user':
120
+ case 'stream_event':
121
+ // Tool-result + token-delta frames — telemetry only. We let Claude
122
+ // Code own the entire tool-dispatch loop (it speaks MCP natively
123
+ // with the inline --mcp-config we synthesize); the adapter only
124
+ // observes the conversation, never participates in tool dispatch.
125
+ return state;
126
+ case 'result': {
127
+ const r = frame;
128
+ state.resultFrameSeen = true;
129
+ state.resultSubtype = r.subtype ?? null;
130
+ state.resultIsError = typeof r.is_error === 'boolean' ? r.is_error : null;
131
+ state.resultApiErrorStatus = typeof r.api_error_status === 'number' ? r.api_error_status : null;
132
+ if (typeof r.result === 'string') {
133
+ // Result frame's `result` field is the canonical assembled text.
134
+ // Overwrites the assistant-frame fallback we accumulated above —
135
+ // the CLI may have applied final formatting / truncation.
136
+ state.assembledText = r.result;
137
+ }
138
+ state.stopReason = r.stop_reason ?? state.stopReason;
139
+ if (r.usage)
140
+ state.usage = r.usage;
141
+ if (typeof r.total_cost_usd === 'number')
142
+ state.totalCostUsd = r.total_cost_usd;
143
+ return state;
144
+ }
145
+ default:
146
+ // Unknown frame type — defensive default. Future CLI versions may
147
+ // add new types and we don't want to crash; just observe and move on.
148
+ return state;
149
+ }
150
+ }
151
+ /**
152
+ * Stateful line-buffered stream-json reader. Feed it raw stdout chunks;
153
+ * call `flush()` after subprocess exit to emit any trailing partial line.
154
+ *
155
+ * Exposed as a class so the adapter can wire it to the `claude -p`
156
+ * subprocess's `stdout.on('data', ...)` event without needing a
157
+ * Transform stream subclass — keeps the dep surface minimal.
158
+ *
159
+ * Malformed JSON lines are skipped with a logged warning (defensive —
160
+ * shouldn't happen in practice but a single bad line shouldn't crash
161
+ * the turn).
162
+ */
163
+ class StreamJsonReader {
164
+ buffer = '';
165
+ state = newTurnAccumulator();
166
+ onParseError;
167
+ constructor(opts = {}) {
168
+ this.onParseError = opts.onParseError;
169
+ }
170
+ /** Feed a chunk of stdout. Triggers `applyFrame` for every complete line. */
171
+ feed(chunk) {
172
+ this.buffer += typeof chunk === 'string' ? chunk : chunk.toString('utf8');
173
+ let nl;
174
+ while ((nl = this.buffer.indexOf('\n')) !== -1) {
175
+ const line = this.buffer.slice(0, nl).trim();
176
+ this.buffer = this.buffer.slice(nl + 1);
177
+ this.parseLine(line);
178
+ }
179
+ }
180
+ /** Process any trailing line that didn't end with a newline. Idempotent. */
181
+ flush() {
182
+ const trailing = this.buffer.trim();
183
+ this.buffer = '';
184
+ this.parseLine(trailing);
185
+ }
186
+ /** Snapshot of the current accumulator. Caller may freely mutate. */
187
+ snapshot() {
188
+ return this.state;
189
+ }
190
+ parseLine(line) {
191
+ if (!line)
192
+ return;
193
+ let frame;
194
+ try {
195
+ frame = JSON.parse(line);
196
+ }
197
+ catch (err) {
198
+ this.onParseError?.(line, err);
199
+ return;
200
+ }
201
+ if (!frame || typeof frame !== 'object' || typeof frame.type !== 'string') {
202
+ this.onParseError?.(line, new Error('frame missing required `type` field'));
203
+ return;
204
+ }
205
+ this.state = applyFrame(this.state, frame);
206
+ }
207
+ }
208
+ exports.StreamJsonReader = StreamJsonReader;
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Pure-constant types for the claude-code-headless adapter.
3
+ *
4
+ * Lives in its own file so consumers (the adapter class, the spawn
5
+ * helper, the recruit tool's Zod schema, the `RecruitOutboxEntry` shape,
6
+ * the `SpawnProcessInput` shape) can import the canonical permission-mode
7
+ * tuple WITHOUT dragging in `@temporalio/client` (which the adapter class
8
+ * needs but the others don't). DRY single-source-of-truth — adding a new
9
+ * permission mode means editing exactly one tuple. Addresses QA Nit 3
10
+ * from PR-1's review.
11
+ */
12
+ /**
13
+ * Permission-mode tuple accepted by `claude -p --permission-mode`. Single
14
+ * source of truth — all of:
15
+ *
16
+ * - `ClaudeCodeHeadlessPermissionMode` type (this file)
17
+ * - `recruit` MCP tool Zod enum
18
+ * - `RecruitOutboxEntry.permissionMode`
19
+ * - `SpawnProcessInput.permissionMode`
20
+ * - `ClaudeCodeHeadlessAdapterOpts.permissionMode` (spawn helper)
21
+ * - `ClaudeCodeHeadlessAdapterOptions.permissionMode` (adapter class)
22
+ *
23
+ * import / re-derive from this tuple. Adding a new mode requires editing
24
+ * only this tuple; the type + Zod enum + every consumer's schema follow.
25
+ */
26
+ export declare const CLAUDE_CODE_PERMISSION_MODES: readonly ["acceptEdits", "auto", "bypassPermissions", "default", "dontAsk", "plan"];
27
+ /** Permission mode for `claude -p --permission-mode`. Derived from {@link CLAUDE_CODE_PERMISSION_MODES}. */
28
+ export type ClaudeCodeHeadlessPermissionMode = typeof CLAUDE_CODE_PERMISSION_MODES[number];
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ /**
3
+ * Pure-constant types for the claude-code-headless adapter.
4
+ *
5
+ * Lives in its own file so consumers (the adapter class, the spawn
6
+ * helper, the recruit tool's Zod schema, the `RecruitOutboxEntry` shape,
7
+ * the `SpawnProcessInput` shape) can import the canonical permission-mode
8
+ * tuple WITHOUT dragging in `@temporalio/client` (which the adapter class
9
+ * needs but the others don't). DRY single-source-of-truth — adding a new
10
+ * permission mode means editing exactly one tuple. Addresses QA Nit 3
11
+ * from PR-1's review.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.CLAUDE_CODE_PERMISSION_MODES = void 0;
15
+ /**
16
+ * Permission-mode tuple accepted by `claude -p --permission-mode`. Single
17
+ * source of truth — all of:
18
+ *
19
+ * - `ClaudeCodeHeadlessPermissionMode` type (this file)
20
+ * - `recruit` MCP tool Zod enum
21
+ * - `RecruitOutboxEntry.permissionMode`
22
+ * - `SpawnProcessInput.permissionMode`
23
+ * - `ClaudeCodeHeadlessAdapterOpts.permissionMode` (spawn helper)
24
+ * - `ClaudeCodeHeadlessAdapterOptions.permissionMode` (adapter class)
25
+ *
26
+ * import / re-derive from this tuple. Adding a new mode requires editing
27
+ * only this tuple; the type + Zod enum + every consumer's schema follow.
28
+ */
29
+ exports.CLAUDE_CODE_PERMISSION_MODES = [
30
+ 'acceptEdits',
31
+ 'auto',
32
+ 'bypassPermissions',
33
+ 'default',
34
+ 'dontAsk',
35
+ 'plan',
36
+ ];
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Copilot adapter — SDK class.
3
+ *
4
+ * Content lifted verbatim from `src/copilot-bridge.ts` into a class wrapper as
5
+ * part of PR-B (v0.25 rebuild step 2/7). Zero behavior change: the same
6
+ * createSession / event-logger / poll / sendAndWait / cleanup flow runs, and
7
+ * the PR-A compat shim in `src/workflows/session.ts` translates
8
+ * `updateMetadata({ status })` onto the attachment phase machine.
9
+ *
10
+ * Dual-purpose file:
11
+ * - `import { CopilotSdkAttachment } from '.../adapter'` → class reference for
12
+ * the adapter registry. `run()` is NOT invoked.
13
+ * - `node .../adapter.js` (or `ts-node .../adapter.ts`) → executes `run()` as
14
+ * the spawned subprocess entry point, gated by `require.main === module`.
15
+ *
16
+ * PR-C rewrites this adapter against the v0.25 attachment wire protocol —
17
+ * `claimAttachment` + heartbeat, `processingStart`/`End` via SdkAttachment.deliver()
18
+ * wrapper, `onSuperseded` cancellation hook. Until then, the bridge runs its
19
+ * lifecycle stand-alone.
20
+ *
21
+ * Usage (dev / prod):
22
+ * npx ts-node src/adapters/copilot/adapter.ts
23
+ * node dist/adapters/copilot/adapter.js
24
+ *
25
+ * Environment variables:
26
+ * AGENT_TEMPO_ENSEMBLE — ensemble name (default: "default")
27
+ * AGENT_TEMPO_PLAYER_NAME — player ID for workflow registration (set by spawner for deterministic workflow IDs)
28
+ * COPILOT_BRIDGE_NAME — player name for set_name (optional)
29
+ * COPILOT_BRIDGE_MODEL — model to use (optional)
30
+ * COPILOT_BRIDGE_SESSION_ID — deterministic session ID for resumable sessions (optional)
31
+ * GITHUB_TOKEN — GitHub auth token (optional, uses logged-in user by default)
32
+ *
33
+ * Design reference: docs/design/session-lifecycle-rebuild-v2.md §6 (Class 2 —
34
+ * SDK), §4.2, §4.4.
35
+ */
36
+ import type { AdapterDescriptor } from '../../types';
37
+ import { SdkAttachment } from '../sdk/base';
38
+ /**
39
+ * Descriptor for the copilot adapter. Kept colocated with the class so
40
+ * `adapter.ts` has no import dependency on `index.ts` (breaks the circular
41
+ * module-graph cycle flagged in QA review of PR-B). `index.ts` re-exports
42
+ * this constant alongside the class.
43
+ *
44
+ * Design reference: docs/design/session-lifecycle-rebuild-v2.md §4.2–4.3.
45
+ */
46
+ export declare const copilotDescriptor: AdapterDescriptor;
47
+ /**
48
+ * SDK-class adapter for the GitHub Copilot CLI.
49
+ *
50
+ * Delivery model is pull-based (blocks on LLM turn): the bridge polls the
51
+ * workflow for pending messages, injects them as prompts via the Copilot SDK's
52
+ * `session.sendAndWait`, then marks them delivered. `processingStart`/`End` are
53
+ * paired around each blocking call so the workflow's stale detection doesn't
54
+ * misclassify a long tool execution as a dead session (fix for #99).
55
+ *
56
+ * PR-B lands this as a verbatim lift from the old `src/copilot-bridge.ts`.
57
+ * PR-C moves the processingStart/End wrapping up into SdkAttachment.deliver()
58
+ * and introduces `claimAttachment` + heartbeat + `onSuperseded` hooks.
59
+ */
60
+ export declare class CopilotSdkAttachment extends SdkAttachment {
61
+ readonly descriptor: AdapterDescriptor;
62
+ /**
63
+ * The currently-active Copilot SDK session, stashed here so the
64
+ * `onSuperseded` hook can disconnect it on lease revocation. Populated in
65
+ * `run()` after `copilotClient.createSession(...)` and refreshed on each
66
+ * successful `recreateSession()`. `undefined` before the session is created
67
+ * and after shutdown.
68
+ */
69
+ private activeSession?;
70
+ /**
71
+ * Split-brain cancellation hook (§9.3). Called by `SdkAttachment` when the
72
+ * base-class phase watcher detects that our `attachmentId` no longer matches
73
+ * the current attachment on the workflow — i.e., another claimant stole the
74
+ * lease. We tear down the active Copilot session: it's the only
75
+ * cancellation primitive the SDK exposes, and the adapter is about to exit
76
+ * anyway.
77
+ *
78
+ * Residual ghost-reply window: if `sendAndWait` is already producing a reply
79
+ * over the network, disconnect may race the response. The reply is dropped
80
+ * (processingEnd will throw `AttachmentMismatch`, markDelivered never fires)
81
+ * so delivery semantics stay at-most-once. One LLM turn is wasted; this is
82
+ * documented in the adapter README per §9.3's guidance.
83
+ */
84
+ protected onSuperseded(): void;
85
+ /**
86
+ * Entry point for the bridge subprocess.
87
+ *
88
+ * Kept as a single async method (instead of being broken up into lifecycle
89
+ * hooks) to preserve the exact behavior of the pre-PR-B `main()` function.
90
+ * The bridge claims the attachment via `startV2Lifecycle`, drives
91
+ * `deliver()` through `SdkAttachment` (synchronous processingStart/End
92
+ * per §7.1, `expectedAttachmentId` carried on both), and installs
93
+ * `onSuperseded` to disconnect the Copilot session on lease revocation.
94
+ *
95
+ * PR-H (#132): the legacy fire-and-forget processingStart/End path
96
+ * gated on `AGENT_TEMPO_LIFECYCLE_V2=0` has been removed. V2 is the
97
+ * only path.
98
+ */
99
+ run(): Promise<void>;
100
+ }