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,128 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ /**
38
+ * Manual verification script for the #157 isolation guard
39
+ * (`test/daemon-command-isolation.test.ts`).
40
+ *
41
+ * QA observation on PR #218: the isolation test asserts the guard PASSES on
42
+ * the current daemon-command module, but never empirically verifies the
43
+ * guard would FAIL if a forbidden import leaked in. This script plugs that
44
+ * gap — run it as a one-shot sanity check (e.g. before a release or after
45
+ * touching CLI imports) to confirm the detector's fail-side actually works.
46
+ *
47
+ * Usage:
48
+ * npm run build:scripts && node dist/scripts/verify-daemon-isolation-guard.js
49
+ *
50
+ * How it works:
51
+ * Spawns a child `node -e "..."` that (a) requires the compiled
52
+ * daemon-command module, then (b) ALSO requires `@temporalio/client` —
53
+ * simulating a hypothetical regression where daemon-command grew a
54
+ * forbidden import. Runs the same require.cache scan logic as the
55
+ * isolation test and asserts it DOES find `@temporalio/*` entries.
56
+ *
57
+ * The test in test/daemon-command-isolation.test.ts guards the pass path
58
+ * (no Temporal leaks via daemon-command's own dep chain). This script
59
+ * guards the detector itself — it confirms the scan would catch a leak.
60
+ *
61
+ * Exit 0 = guard-detector works correctly on a simulated regression.
62
+ * Exit 1 = guard-detector silently accepted a forbidden import (bug in
63
+ * the detector itself, or the test's FORBIDDEN_PATTERNS array is
64
+ * missing a case).
65
+ */
66
+ const path = __importStar(require("path"));
67
+ const fs = __importStar(require("fs"));
68
+ const child_process_1 = require("child_process");
69
+ const REPO_ROOT = path.resolve(__dirname, '..', '..');
70
+ const DAEMON_COMMAND_DIST = path.join(REPO_ROOT, 'dist', 'cli', 'daemon-command.js');
71
+ if (!fs.existsSync(DAEMON_COMMAND_DIST)) {
72
+ console.error('dist/cli/daemon-command.js not found. Run `npm run build` before this script.');
73
+ process.exit(1);
74
+ }
75
+ let temporalClientPath;
76
+ try {
77
+ temporalClientPath = require.resolve('@temporalio/client', { paths: [REPO_ROOT] });
78
+ }
79
+ catch (err) {
80
+ console.error('Could not resolve @temporalio/client from repo node_modules. Run `npm install` first.');
81
+ console.error(err && err.message);
82
+ process.exit(1);
83
+ }
84
+ const detector = `
85
+ // Step 1: load daemon-command (should leave require.cache clean of Temporal).
86
+ require(${JSON.stringify(DAEMON_COMMAND_DIST)});
87
+ // Step 2: simulate a regression — load @temporalio/client directly.
88
+ // This is what would happen if a future edit to daemon-command (or one of
89
+ // its deps) accidentally imported something Temporal-adjacent.
90
+ require(${JSON.stringify(temporalClientPath)});
91
+ // Step 3: run the same detector as test/daemon-command-isolation.test.ts.
92
+ const forbidden = [
93
+ /[\\\\/]@temporalio[\\\\/]/,
94
+ /[\\\\/]rxjs[\\\\/]/,
95
+ /[\\\\/]@grpc[\\\\/]/,
96
+ /[\\\\/]nice-grpc(?:-[^\\\\/]+)?[\\\\/]/,
97
+ /[\\\\/]long[\\\\/]umd[\\\\/]/,
98
+ ];
99
+ const hits = Object.keys(require.cache).filter((k) => forbidden.some((re) => re.test(k)));
100
+ if (hits.length > 0) {
101
+ console.log('Detector found ' + hits.length + ' forbidden module(s) in require.cache:');
102
+ for (const h of hits.slice(0, 3)) console.log(' ' + h);
103
+ if (hits.length > 3) console.log(' ... (' + (hits.length - 3) + ' more)');
104
+ process.exit(0);
105
+ }
106
+ console.error('BUG: detector did not flag any of the injected forbidden modules.');
107
+ process.exit(1);
108
+ `;
109
+ const result = (0, child_process_1.spawnSync)(process.execPath, ['-e', detector], {
110
+ stdio: ['ignore', 'inherit', 'inherit'],
111
+ cwd: REPO_ROOT,
112
+ });
113
+ if (result.status === 0) {
114
+ console.log('\nIsolation guard fail-path verified. The detector correctly flags forbidden imports.');
115
+ console.log(' (The isolation test in test/daemon-command-isolation.test.ts will catch a real regression.)');
116
+ process.exit(0);
117
+ }
118
+ else {
119
+ console.error('\nIsolation guard fail-path NOT verified.');
120
+ if (result.status === 1) {
121
+ console.error(' The detector silently accepted injected forbidden imports — regression in the detector itself,');
122
+ console.error(' OR the FORBIDDEN_PATTERNS array in test/daemon-command-isolation.test.ts is missing a case.');
123
+ }
124
+ else {
125
+ console.error(` Child exited with status ${result.status}. See output above for the cause.`);
126
+ }
127
+ process.exit(1);
128
+ }
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Shared tool-registration + instructions helpers.
3
+ *
4
+ * `src/server.ts` builds an MCP server backed by stdio and registers every
5
+ * tempo tool onto it. The `claude-api` adapter (#131 Phase C) builds a
6
+ * second MCP server backed by `InMemoryTransport` and needs the **same**
7
+ * tool surface registered onto it. Extracting both helpers here keeps the
8
+ * two callsites in lock-step — adding a new tool to one surface lights it
9
+ * up on the other automatically.
10
+ *
11
+ * Mirrors the dual-purpose pattern used elsewhere (e.g. `src/connection.ts`
12
+ * shared by daemon + adapter subprocesses): keep cross-surface knowledge
13
+ * in a single module rather than letting drift accumulate.
14
+ *
15
+ * Design reference: `docs/design/131-claude-api-adapter.md` §4 (in-process
16
+ * MCP bridge) — engineer pickup explicitly calls out a `registerAllTempoTools`
17
+ * helper at line ~478.
18
+ */
19
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
20
+ import { Client, WorkflowHandle } from '@temporalio/client';
21
+ import { Config } from './config';
22
+ import { AgentType } from './types';
23
+ /**
24
+ * Identity + state context every tool registration consumes. The two
25
+ * surfaces (stdio MCP server in `src/server.ts`, in-process MCP server in
26
+ * the claude-api adapter) build the same struct from their respective
27
+ * boot paths and pass it to {@link registerAllTempoTools}.
28
+ *
29
+ * Note: `setPlayerId` is the rename hook used by `set_name`. The adapter
30
+ * passes a no-op for headless players that don't need rename support; the
31
+ * stdio server passes its real setter so a `set_name` call from the LLM
32
+ * updates the in-process identity used by subsequent tool invocations.
33
+ */
34
+ export interface RegisterAllTempoToolsOpts {
35
+ client: Client;
36
+ config: Config;
37
+ /** Returns the current player id. Mutates over a session via `set_name`. */
38
+ getPlayerId: () => string;
39
+ /** Update the player id (drives `set_name`). Adapter callers may pass a no-op. */
40
+ setPlayerId: (id: string) => void;
41
+ /** Handle to the player's own session workflow. */
42
+ handle: WorkflowHandle;
43
+ /** Workflow id of the player's session. Forwarded to ensemble tool. */
44
+ workflowId: string;
45
+ /** Default agent for `recruit` when the caller doesn't override. */
46
+ ownAgentType: AgentType;
47
+ /** Whether this player is the ensemble's conductor (gates conductor-only tools). */
48
+ isConductor: boolean;
49
+ }
50
+ /**
51
+ * Register every tempo MCP tool onto `server`. Single source of truth — the
52
+ * stdio MCP server (`src/server.ts`) and the in-process MCP server in the
53
+ * claude-api adapter both call this with the same option struct. Adding a
54
+ * new tool here lights it up on every surface without per-callsite drift.
55
+ *
56
+ * Conductor-only tools (quality gates, worktrees, stages) are gated by
57
+ * `opts.isConductor` — non-conductor players don't see them on either
58
+ * surface.
59
+ */
60
+ export declare function registerAllTempoTools(server: McpServer, opts: RegisterAllTempoToolsOpts): void;
61
+ /**
62
+ * Identity + ensemble context for {@link buildServerInstructions}.
63
+ * Same struct shape across the two callers (stdio server + claude-api
64
+ * adapter); the latter appends a headless-only addendum after the shared
65
+ * instructions land in the cached system prompt.
66
+ */
67
+ export interface BuildServerInstructionsOpts {
68
+ ensemble: string;
69
+ playerId: string;
70
+ playerType?: string;
71
+ playerTypeDescription?: string;
72
+ isConductor: boolean;
73
+ /** Whether the player's name was set at startup (vs needing a `set_name` cue). */
74
+ hasRequestedName: boolean;
75
+ }
76
+ /**
77
+ * Build the `instructions` string that lands in `McpServer`'s `instructions`
78
+ * option (or in the claude-api adapter's cached system prompt). Captures
79
+ * identity, role, the `set_name` first-cue contract, and the conductor /
80
+ * non-conductor operational rules around branch switches and worktree
81
+ * provisioning.
82
+ *
83
+ * Verbatim port of the inline string `src/server.ts` used to build pre-#131
84
+ * — extracted so the claude-api adapter (and any future MCP-server caller)
85
+ * can reuse the same identity framing without copy-paste drift.
86
+ */
87
+ export declare function buildServerInstructions(opts: BuildServerInstructionsOpts): string;
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerAllTempoTools = registerAllTempoTools;
4
+ exports.buildServerInstructions = buildServerInstructions;
5
+ const ensemble_1 = require("./tools/ensemble");
6
+ const cue_1 = require("./tools/cue");
7
+ const set_part_1 = require("./tools/set-part");
8
+ const listen_1 = require("./tools/listen");
9
+ const recruit_1 = require("./tools/recruit");
10
+ const report_1 = require("./tools/report");
11
+ const set_name_1 = require("./tools/set-name");
12
+ const schedule_1 = require("./tools/schedule");
13
+ const unschedule_1 = require("./tools/unschedule");
14
+ const schedules_1 = require("./tools/schedules");
15
+ const save_lineup_1 = require("./tools/save-lineup");
16
+ const load_lineup_1 = require("./tools/load-lineup");
17
+ const agent_types_1 = require("./tools/agent-types");
18
+ const who_am_i_1 = require("./tools/who-am-i");
19
+ const broadcast_1 = require("./tools/broadcast");
20
+ const recall_1 = require("./tools/recall");
21
+ const release_1 = require("./tools/release");
22
+ const pause_1 = require("./tools/pause");
23
+ const play_1 = require("./tools/play");
24
+ const shutdown_1 = require("./tools/shutdown");
25
+ const restore_1 = require("./tools/restore");
26
+ const quality_gate_1 = require("./tools/quality-gate");
27
+ const evaluate_gate_1 = require("./tools/evaluate-gate");
28
+ const gates_1 = require("./tools/gates");
29
+ const worktree_1 = require("./tools/worktree");
30
+ const stage_1 = require("./tools/stage");
31
+ const stages_1 = require("./tools/stages");
32
+ const cancel_stage_1 = require("./tools/cancel-stage");
33
+ const restart_1 = require("./tools/restart");
34
+ const destroy_1 = require("./tools/destroy");
35
+ const migrate_1 = require("./tools/migrate");
36
+ const attachment_info_1 = require("./tools/attachment-info");
37
+ const hosts_1 = require("./tools/hosts");
38
+ const set_ensemble_description_1 = require("./tools/set-ensemble-description");
39
+ // #334 PR-1 — player saveable state (save_state / fetch_state / clear_state).
40
+ const save_state_1 = require("./tools/save-state");
41
+ const fetch_state_1 = require("./tools/fetch-state");
42
+ const clear_state_1 = require("./tools/clear-state");
43
+ // #318 — ensemble-shared coat-check (put / get / list / evict).
44
+ const coat_check_put_1 = require("./tools/coat-check-put");
45
+ const coat_check_get_1 = require("./tools/coat-check-get");
46
+ const coat_check_list_1 = require("./tools/coat-check-list");
47
+ const coat_check_evict_1 = require("./tools/coat-check-evict");
48
+ /**
49
+ * Register every tempo MCP tool onto `server`. Single source of truth — the
50
+ * stdio MCP server (`src/server.ts`) and the in-process MCP server in the
51
+ * claude-api adapter both call this with the same option struct. Adding a
52
+ * new tool here lights it up on every surface without per-callsite drift.
53
+ *
54
+ * Conductor-only tools (quality gates, worktrees, stages) are gated by
55
+ * `opts.isConductor` — non-conductor players don't see them on either
56
+ * surface.
57
+ */
58
+ function registerAllTempoTools(server, opts) {
59
+ const { client, config, getPlayerId, setPlayerId, handle, workflowId, ownAgentType, isConductor } = opts;
60
+ (0, ensemble_1.registerEnsembleTool)(server, client, config, getPlayerId, workflowId);
61
+ (0, cue_1.registerCueTool)(server, client, config, getPlayerId, handle);
62
+ (0, set_part_1.registerSetPartTool)(server, handle);
63
+ (0, set_name_1.registerSetNameTool)(server, client, config, handle, getPlayerId, setPlayerId);
64
+ (0, listen_1.registerListenTool)(server, handle);
65
+ (0, recruit_1.registerRecruitTool)(server, client, config, getPlayerId, handle, ownAgentType);
66
+ (0, report_1.registerReportTool)(server, handle);
67
+ (0, schedule_1.registerScheduleTool)(server, client, config, getPlayerId);
68
+ (0, unschedule_1.registerUnscheduleTool)(server, client, config);
69
+ (0, schedules_1.registerSchedulesTool)(server, client, config);
70
+ (0, save_lineup_1.registerSaveLineupTool)(server, client, config, getPlayerId, isConductor);
71
+ (0, load_lineup_1.registerLoadLineupTool)(server, client, config, getPlayerId, ownAgentType, handle, setPlayerId, isConductor);
72
+ (0, agent_types_1.registerAgentTypesTool)(server);
73
+ (0, who_am_i_1.registerWhoAmITool)(server, handle, getPlayerId);
74
+ (0, broadcast_1.registerBroadcastTool)(server, client, config, getPlayerId, handle);
75
+ (0, recall_1.registerRecallTool)(server, handle, getPlayerId);
76
+ (0, release_1.registerReleaseTool)(server, client, config, getPlayerId, handle);
77
+ (0, pause_1.registerPauseTool)(server, client, config, getPlayerId);
78
+ (0, play_1.registerPlayTool)(server, client, config, getPlayerId);
79
+ (0, shutdown_1.registerShutdownTool)(server, client, config, getPlayerId);
80
+ (0, restore_1.registerRestoreTool)(server, client, config, getPlayerId);
81
+ (0, restart_1.registerRestartTool)(server, client, config, getPlayerId, handle);
82
+ (0, destroy_1.registerDestroyTool)(server, client, config, getPlayerId, handle);
83
+ (0, migrate_1.registerMigrateTool)(server, client, config, getPlayerId, handle);
84
+ (0, attachment_info_1.registerAttachmentInfoTool)(server, client, config);
85
+ (0, hosts_1.registerHostsTool)(server, client, config);
86
+ (0, set_ensemble_description_1.registerSetEnsembleDescriptionTool)(server, client, config);
87
+ // #334 PR-1 — owner-write / peer-read player saveable state.
88
+ (0, save_state_1.registerSaveStateTool)(server, handle, getPlayerId);
89
+ (0, fetch_state_1.registerFetchStateTool)(server, client, config, handle, getPlayerId);
90
+ (0, clear_state_1.registerClearStateTool)(server, handle);
91
+ // #318 — ensemble-shared coat-check (put/get/list/evict). Any player can put;
92
+ // any player can get/list; owner-or-conductor can evict. Audit identity is
93
+ // set at the tool layer via getPlayerId() — no playerId arg on any schema.
94
+ (0, coat_check_put_1.registerCoatCheckPutTool)(server, client, config, getPlayerId);
95
+ (0, coat_check_get_1.registerCoatCheckGetTool)(server, client, config, getPlayerId);
96
+ (0, coat_check_list_1.registerCoatCheckListTool)(server, client, config);
97
+ (0, coat_check_evict_1.registerCoatCheckEvictTool)(server, client, config, getPlayerId);
98
+ if (isConductor) {
99
+ (0, quality_gate_1.registerQualityGateTool)(server, handle, getPlayerId);
100
+ (0, evaluate_gate_1.registerEvaluateGateTool)(server, handle, getPlayerId);
101
+ (0, gates_1.registerGatesTool)(server, handle);
102
+ (0, worktree_1.registerWorktreeTool)(server, client, config, handle, getPlayerId);
103
+ (0, stage_1.registerStageTool)(server, handle, getPlayerId);
104
+ (0, stages_1.registerStagesTool)(server, handle);
105
+ (0, cancel_stage_1.registerCancelStageTool)(server, handle);
106
+ }
107
+ }
108
+ /**
109
+ * Build the `instructions` string that lands in `McpServer`'s `instructions`
110
+ * option (or in the claude-api adapter's cached system prompt). Captures
111
+ * identity, role, the `set_name` first-cue contract, and the conductor /
112
+ * non-conductor operational rules around branch switches and worktree
113
+ * provisioning.
114
+ *
115
+ * Verbatim port of the inline string `src/server.ts` used to build pre-#131
116
+ * — extracted so the claude-api adapter (and any future MCP-server caller)
117
+ * can reuse the same identity framing without copy-paste drift.
118
+ */
119
+ function buildServerInstructions(opts) {
120
+ const { ensemble, playerId, playerType, playerTypeDescription, isConductor, hasRequestedName } = opts;
121
+ const playerTypeLine = playerType
122
+ ? `Your player type is "${playerType}"${playerTypeDescription ? ` (${playerTypeDescription})` : ''}. `
123
+ : '';
124
+ return `You are part of the "${ensemble}" ensemble of Claude Code sessions coordinated via Temporal. ` +
125
+ `Your player name is "${playerId}". ` +
126
+ playerTypeLine +
127
+ (hasRequestedName
128
+ ? `This name was assigned at startup — do NOT call \`set_name\` unless explicitly asked to rename. `
129
+ : `IMPORTANT: If you receive a message instructing you to call \`set_name\`, do so immediately before anything else. Use \`set_name\` to give yourself a human-readable name. `) +
130
+ `When you receive a message from another session, treat it like a coworker asking for help — respond promptly, then resume your work. ` +
131
+ `Use \`ensemble\` to see who else is active. ` +
132
+ `Use \`cue\` to reply directly to the player who messaged you, or to ask others for help. ` +
133
+ `Use \`recruit\` if you need a session in a directory where none exists. ` +
134
+ `Use \`report\` to notify the conductor of task completion, blockers, or questions — always report when you finish a recruited task.` +
135
+ `\n\nCommunication discipline:\n` +
136
+ `- Drafting a response in your turn is not the same as sending one. The conductor and other players cannot read your reasoning — only your \`cue\` and \`report\` tool calls cross the channel boundary. If you reach a decision, ruling, or status update, fire the appropriate tool before moving on. If you find yourself thinking "I already answered that," verify the tool was actually invoked.` +
137
+ (isConductor
138
+ ? `\n\nOperational rules:\n` +
139
+ `- Before assigning parallel work on different branches, provision git worktrees via the \`worktree\` tool so each player has an isolated checkout.\n` +
140
+ `- No player should switch branches without your approval — if a player needs a different branch, provision a worktree for them.\n` +
141
+ `- Before shipping, verify the branch diff scope matches the assigned task (no unrelated changes).`
142
+ : `\n\nPlayer rules:\n` +
143
+ `- Do not switch git branches without the conductor's approval. If no conductor exists, broadcast your intent to the ensemble first. Prefer using the \`worktree\` tool for branch isolation.\n` +
144
+ `- Silent conductor = HOLD indefinitely. Never default to act on an unanswered cue. The conductor may be coordinating other streams, making a different decision than you expected, recovering from comms issues, or awaiting human input. Idle has zero cost. Acting on assumed approval compounds cost across the ensemble. If a conductor decision genuinely blocks you and time matters, send a follow-up \`cue\` reiterating the question — silence is never greenlight.\n` +
145
+ `- When CI surfaces a blocker on a PR you opened (or any task you're driving), escalate to the conductor with diagnosis and proposed routing. Wait for the conductor's dispatch decision. Never \`cue\` other players directly to fix issues — bypassing the conductor invites collisions on shared branches and breaks player-load tracking.`);
146
+ }
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};