agent-tempo 1.2.0 → 1.4.0

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 (281) hide show
  1. package/CLAUDE.md +253 -219
  2. package/LICENSE +21 -21
  3. package/README.md +293 -289
  4. package/assets/icon-dark.svg +9 -9
  5. package/assets/icon.svg +9 -9
  6. package/assets/logo-dark.svg +11 -11
  7. package/assets/logo-light.svg +11 -11
  8. package/dashboard/README.md +91 -91
  9. package/dashboard/dist/assets/{index-D6Xyje_n.js → index-jmYe6rmS.js} +2 -2
  10. package/dashboard/dist/assets/index-jmYe6rmS.js.map +1 -0
  11. package/dashboard/dist/index.html +20 -20
  12. package/dashboard/package.json +47 -47
  13. package/dist/activities/outbox.d.ts +30 -1
  14. package/dist/activities/outbox.js +96 -3
  15. package/dist/adapters/base.js +5 -0
  16. package/dist/adapters/copilot/adapter.js +12 -1
  17. package/dist/adapters/index.d.ts +1 -1
  18. package/dist/adapters/index.js +7 -0
  19. package/dist/adapters/pi/adapter.d.ts +2 -0
  20. package/dist/adapters/pi/adapter.js +43 -0
  21. package/dist/adapters/pi/index.d.ts +16 -0
  22. package/dist/adapters/pi/index.js +10 -0
  23. package/dist/cli/global-wrapper.d.ts +19 -0
  24. package/dist/cli/global-wrapper.js +169 -0
  25. package/dist/cli/help-text.js +97 -97
  26. package/dist/cli/startup.js +11 -0
  27. package/dist/cli/upgrade-command.js +81 -81
  28. package/dist/cli.js +12 -0
  29. package/dist/client/core.js +9 -2
  30. package/dist/client/interface.d.ts +6 -0
  31. package/dist/config.d.ts +79 -0
  32. package/dist/config.js +74 -0
  33. package/dist/daemon.js +37 -1
  34. package/dist/http/aggregate.d.ts +22 -1
  35. package/dist/http/aggregate.js +41 -0
  36. package/dist/http/auth.d.ts +94 -8
  37. package/dist/http/auth.js +93 -9
  38. package/dist/http/body.d.ts +4 -1
  39. package/dist/http/body.js +6 -3
  40. package/dist/http/event-bus.js +1 -0
  41. package/dist/http/event-types.d.ts +34 -2
  42. package/dist/http/event-types.js +1 -0
  43. package/dist/http/gate-audit.d.ts +12 -0
  44. package/dist/http/gate-audit.js +95 -0
  45. package/dist/http/gate-registry.d.ts +167 -0
  46. package/dist/http/gate-registry.js +163 -0
  47. package/dist/http/gate-routes.d.ts +48 -0
  48. package/dist/http/gate-routes.js +102 -0
  49. package/dist/http/ingest-registry.d.ts +30 -0
  50. package/dist/http/ingest-registry.js +108 -0
  51. package/dist/http/inner-loop-routes.d.ts +66 -0
  52. package/dist/http/inner-loop-routes.js +182 -0
  53. package/dist/http/inner-loop.d.ts +92 -0
  54. package/dist/http/inner-loop.js +155 -0
  55. package/dist/http/server.d.ts +38 -3
  56. package/dist/http/server.js +211 -6
  57. package/dist/http/snapshot.d.ts +6 -0
  58. package/dist/http/snapshot.js +6 -0
  59. package/dist/pi/cue-pump.d.ts +61 -0
  60. package/dist/pi/cue-pump.js +95 -0
  61. package/dist/pi/extension.d.ts +45 -0
  62. package/dist/pi/extension.js +407 -0
  63. package/dist/pi/gate-client.d.ts +54 -0
  64. package/dist/pi/gate-client.js +136 -0
  65. package/dist/pi/headless.d.ts +85 -0
  66. package/dist/pi/headless.js +224 -0
  67. package/dist/pi/index.d.ts +28 -0
  68. package/dist/pi/index.js +43 -0
  69. package/dist/pi/inner-loop-client.d.ts +67 -0
  70. package/dist/pi/inner-loop-client.js +164 -0
  71. package/dist/pi/inner-loop-publisher.d.ts +187 -0
  72. package/dist/pi/inner-loop-publisher.js +236 -0
  73. package/dist/pi/lazy-proxy.d.ts +37 -0
  74. package/dist/pi/lazy-proxy.js +55 -0
  75. package/dist/pi/mission-control/actions.d.ts +48 -0
  76. package/dist/pi/mission-control/actions.js +98 -0
  77. package/dist/pi/mission-control/board.d.ts +53 -0
  78. package/dist/pi/mission-control/board.js +104 -0
  79. package/dist/pi/mission-control/extension.d.ts +44 -0
  80. package/dist/pi/mission-control/extension.js +251 -0
  81. package/dist/pi/mission-control/index.d.ts +15 -0
  82. package/dist/pi/mission-control/index.js +32 -0
  83. package/dist/pi/mission-control/inner-tail.d.ts +48 -0
  84. package/dist/pi/mission-control/inner-tail.js +76 -0
  85. package/dist/pi/mission-control/pi-ui.d.ts +43 -0
  86. package/dist/pi/mission-control/pi-ui.js +10 -0
  87. package/dist/pi/mission-control/render.d.ts +6 -0
  88. package/dist/pi/mission-control/render.js +95 -0
  89. package/dist/pi/phase-driver.d.ts +74 -0
  90. package/dist/pi/phase-driver.js +122 -0
  91. package/dist/pi/pi-types.d.ts +208 -0
  92. package/dist/pi/pi-types.js +21 -0
  93. package/dist/pi/probe.d.ts +80 -0
  94. package/dist/pi/probe.js +154 -0
  95. package/dist/pi/render-tools.d.ts +17 -0
  96. package/dist/pi/render-tools.js +51 -0
  97. package/dist/pi/reset-pump.d.ts +47 -0
  98. package/dist/pi/reset-pump.js +85 -0
  99. package/dist/pi/tool-capability.d.ts +60 -0
  100. package/dist/pi/tool-capability.js +156 -0
  101. package/dist/pi/workflow-client.d.ts +158 -0
  102. package/dist/pi/workflow-client.js +289 -0
  103. package/dist/pi/zod-to-typebox.d.ts +74 -0
  104. package/dist/pi/zod-to-typebox.js +191 -0
  105. package/dist/scripts/verify-daemon-isolation-guard.js +24 -24
  106. package/dist/server-tools.d.ts +2 -0
  107. package/dist/server-tools.js +50 -46
  108. package/dist/server.js +4 -0
  109. package/dist/spawn.d.ts +55 -0
  110. package/dist/spawn.js +84 -12
  111. package/dist/tools/agent-types.d.ts +2 -2
  112. package/dist/tools/agent-types.js +22 -17
  113. package/dist/tools/attachment-info.d.ts +2 -2
  114. package/dist/tools/attachment-info.js +38 -33
  115. package/dist/tools/broadcast.d.ts +2 -2
  116. package/dist/tools/broadcast.js +69 -64
  117. package/dist/tools/cancel-stage.d.ts +2 -2
  118. package/dist/tools/cancel-stage.js +20 -15
  119. package/dist/tools/clear-state.d.ts +2 -2
  120. package/dist/tools/clear-state.js +25 -20
  121. package/dist/tools/coat-check-evict.d.ts +2 -2
  122. package/dist/tools/coat-check-evict.js +30 -25
  123. package/dist/tools/coat-check-get.d.ts +2 -2
  124. package/dist/tools/coat-check-get.js +39 -34
  125. package/dist/tools/coat-check-list.d.ts +2 -2
  126. package/dist/tools/coat-check-list.js +48 -43
  127. package/dist/tools/coat-check-put.d.ts +2 -2
  128. package/dist/tools/coat-check-put.js +41 -36
  129. package/dist/tools/cue.d.ts +2 -2
  130. package/dist/tools/cue.js +57 -52
  131. package/dist/tools/descriptor.d.ts +72 -0
  132. package/dist/tools/descriptor.js +39 -0
  133. package/dist/tools/destroy.d.ts +2 -2
  134. package/dist/tools/destroy.js +153 -148
  135. package/dist/tools/ensemble.d.ts +2 -2
  136. package/dist/tools/ensemble.js +71 -66
  137. package/dist/tools/evaluate-gate.d.ts +2 -2
  138. package/dist/tools/evaluate-gate.js +33 -27
  139. package/dist/tools/fetch-state.d.ts +2 -2
  140. package/dist/tools/fetch-state.js +43 -38
  141. package/dist/tools/gates.d.ts +2 -2
  142. package/dist/tools/gates.js +39 -34
  143. package/dist/tools/hosts.d.ts +2 -2
  144. package/dist/tools/hosts.js +25 -20
  145. package/dist/tools/listen.d.ts +2 -2
  146. package/dist/tools/listen.js +23 -18
  147. package/dist/tools/load-lineup.d.ts +2 -2
  148. package/dist/tools/load-lineup.js +324 -319
  149. package/dist/tools/migrate.d.ts +2 -2
  150. package/dist/tools/migrate.js +45 -40
  151. package/dist/tools/pause.d.ts +2 -2
  152. package/dist/tools/pause.js +34 -29
  153. package/dist/tools/play.d.ts +2 -2
  154. package/dist/tools/play.js +53 -48
  155. package/dist/tools/quality-gate.d.ts +2 -2
  156. package/dist/tools/quality-gate.js +26 -21
  157. package/dist/tools/recall.d.ts +2 -2
  158. package/dist/tools/recall.js +32 -27
  159. package/dist/tools/recruit.d.ts +2 -2
  160. package/dist/tools/recruit.js +325 -256
  161. package/dist/tools/release.d.ts +2 -2
  162. package/dist/tools/release.js +85 -80
  163. package/dist/tools/report.d.ts +2 -2
  164. package/dist/tools/report.js +28 -23
  165. package/dist/tools/reset.d.ts +3 -0
  166. package/dist/tools/reset.js +51 -0
  167. package/dist/tools/restart.d.ts +2 -2
  168. package/dist/tools/restart.js +51 -46
  169. package/dist/tools/restore.d.ts +2 -2
  170. package/dist/tools/restore.js +76 -71
  171. package/dist/tools/save-lineup.d.ts +2 -2
  172. package/dist/tools/save-lineup.js +32 -27
  173. package/dist/tools/save-state.d.ts +2 -2
  174. package/dist/tools/save-state.js +43 -38
  175. package/dist/tools/schedule.d.ts +2 -2
  176. package/dist/tools/schedule.js +133 -128
  177. package/dist/tools/schedules.d.ts +2 -2
  178. package/dist/tools/schedules.js +41 -36
  179. package/dist/tools/set-ensemble-description.d.ts +2 -2
  180. package/dist/tools/set-ensemble-description.js +26 -21
  181. package/dist/tools/set-name.d.ts +2 -2
  182. package/dist/tools/set-name.js +38 -33
  183. package/dist/tools/set-part.d.ts +2 -2
  184. package/dist/tools/set-part.js +20 -15
  185. package/dist/tools/shutdown.d.ts +2 -2
  186. package/dist/tools/shutdown.js +39 -34
  187. package/dist/tools/stage.d.ts +2 -2
  188. package/dist/tools/stage.js +28 -23
  189. package/dist/tools/stages.d.ts +2 -2
  190. package/dist/tools/stages.js +36 -31
  191. package/dist/tools/unschedule.d.ts +2 -2
  192. package/dist/tools/unschedule.js +30 -25
  193. package/dist/tools/who-am-i.d.ts +2 -2
  194. package/dist/tools/who-am-i.js +36 -31
  195. package/dist/tools/worktree.d.ts +2 -2
  196. package/dist/tools/worktree.js +134 -129
  197. package/dist/tui/index.js +6 -6
  198. package/dist/types.d.ts +47 -2
  199. package/dist/types.js +1 -1
  200. package/dist/utils/default-part.js +1 -0
  201. package/dist/utils/grpc-shutdown-guard.d.ts +52 -0
  202. package/dist/utils/grpc-shutdown-guard.js +88 -0
  203. package/dist/utils/sdk-probe.d.ts +23 -0
  204. package/dist/utils/sdk-probe.js +46 -7
  205. package/dist/worker.d.ts +3 -1
  206. package/dist/worker.js +6 -2
  207. package/dist/workflows/session.js +70 -2
  208. package/dist/workflows/signals.d.ts +32 -2
  209. package/dist/workflows/signals.js +25 -2
  210. package/examples/agents/tempo-composer.md +56 -56
  211. package/examples/agents/tempo-conductor.md +117 -117
  212. package/examples/agents/tempo-critic.md +73 -73
  213. package/examples/agents/tempo-improv.md +74 -74
  214. package/examples/agents/tempo-liner.md +75 -75
  215. package/examples/agents/tempo-roadie.md +61 -61
  216. package/examples/agents/tempo-soloist.md +71 -71
  217. package/examples/agents/tempo-tuner.md +94 -94
  218. package/examples/ensembles/tempo-big-band.yaml +146 -146
  219. package/examples/ensembles/tempo-dev-team.yaml +58 -58
  220. package/examples/ensembles/tempo-headless-jam.yaml +77 -77
  221. package/examples/ensembles/tempo-jam-session.yaml +41 -41
  222. package/examples/ensembles/tempo-mock-jam.yaml +79 -79
  223. package/examples/ensembles/tempo-review-squad.yaml +32 -32
  224. package/package.json +176 -173
  225. package/packaging/launchd/com.agent.tempo.plist +46 -46
  226. package/packaging/systemd/agent-tempo.service +32 -32
  227. package/packaging/windows/install-task.ps1 +71 -71
  228. package/scenarios/conductor-recruit-mock.yaml +33 -33
  229. package/scenarios/echo-roundtrip.yaml +15 -15
  230. package/scenarios/multi-player-handoff.yaml +38 -38
  231. package/scenarios/recruit-cascade.yaml +38 -38
  232. package/scenarios/two-player-conversation.yaml +33 -33
  233. package/workflow-bundle.js +97 -6
  234. package/dashboard/dist/assets/index-D6Xyje_n.js.map +0 -1
  235. package/dist/activities/claude-stop.d.ts +0 -21
  236. package/dist/activities/claude-stop.js +0 -94
  237. package/dist/channel.d.ts +0 -3
  238. package/dist/channel.js +0 -48
  239. package/dist/copilot-bridge.d.ts +0 -22
  240. package/dist/copilot-bridge.js +0 -565
  241. package/dist/scripts/258-spotcheck.js +0 -303
  242. package/dist/tools/detach.d.ts +0 -4
  243. package/dist/tools/detach.js +0 -45
  244. package/dist/tools/encore.d.ts +0 -4
  245. package/dist/tools/encore.js +0 -31
  246. package/dist/tools/helpers.d.ts +0 -21
  247. package/dist/tools/helpers.js +0 -25
  248. package/dist/tools/pause-ensemble.d.ts +0 -4
  249. package/dist/tools/pause-ensemble.js +0 -58
  250. package/dist/tools/resume-ensemble.d.ts +0 -4
  251. package/dist/tools/resume-ensemble.js +0 -79
  252. package/dist/tools/stop.d.ts +0 -4
  253. package/dist/tools/stop.js +0 -29
  254. package/dist/tui/client.d.ts +0 -6
  255. package/dist/tui/client.js +0 -9
  256. package/dist/tui/components/ActivityLog.d.ts +0 -16
  257. package/dist/tui/components/ActivityLog.js +0 -36
  258. package/dist/tui/components/CommandOverlay.d.ts +0 -15
  259. package/dist/tui/components/CommandOverlay.js +0 -34
  260. package/dist/tui/components/ConductorChat.d.ts +0 -16
  261. package/dist/tui/components/ConductorChat.js +0 -32
  262. package/dist/tui/components/EnsembleListView.d.ts +0 -14
  263. package/dist/tui/components/EnsembleListView.js +0 -32
  264. package/dist/tui/components/EnsemblePanel.d.ts +0 -12
  265. package/dist/tui/components/EnsemblePanel.js +0 -40
  266. package/dist/tui/components/InputBar.d.ts +0 -13
  267. package/dist/tui/components/InputBar.js +0 -58
  268. package/dist/tui/components/ScheduleOverlay.d.ts +0 -13
  269. package/dist/tui/components/ScheduleOverlay.js +0 -113
  270. package/dist/tui/components/TopBar.d.ts +0 -12
  271. package/dist/tui/components/TopBar.js +0 -15
  272. package/dist/tui/core-api.d.ts +0 -26
  273. package/dist/tui/core-api.js +0 -67
  274. package/dist/tui/hooks/useEnsembleDiscovery.d.ts +0 -3
  275. package/dist/tui/hooks/useEnsembleDiscovery.js +0 -30
  276. package/dist/tui/hooks/useMaestroPoller.d.ts +0 -3
  277. package/dist/tui/hooks/useMaestroPoller.js +0 -36
  278. package/dist/tui/hooks/useSendCommand.d.ts +0 -7
  279. package/dist/tui/hooks/useSendCommand.js +0 -29
  280. package/dist/utils/bg-preflight.d.ts +0 -25
  281. package/dist/utils/bg-preflight.js +0 -154
@@ -1,79 +1,79 @@
1
- name: tempo-mock-jam
2
- description: >
3
- All-mock ensemble for autonomous validation harnesses (ADR 0014 §5.5).
4
- One-command spin-up of a multi-player dev environment with mixed modes —
5
- no real LLM calls, no terminal windows, no "trust this folder" prompts.
6
- Pair with `agent-tempo --dev up --lineup tempo-mock-jam` and drive via
7
- Chrome MCP / dashboard / `cue`.
8
-
9
- Mode mix exercises every PR-3 mock surface in one ensemble:
10
- - conductor → scripted (conductor-recruit-mock scenario)
11
- - alice → scripted (multi-player-handoff scenario)
12
- - bob → echo (baseline round-trip; default mock behavior)
13
- - silent-witness → silent (heartbeat-stale phase validation)
14
- - chaos-monkey → chaos (probabilistic fail/crash injection)
15
-
16
- All five slots are mock — zero real LLM calls, zero terminal windows,
17
- zero "trust this folder" prompts. Use the dashboard / TUI / `cue` to
18
- drive the ensemble from outside.
19
-
20
- To swap the conductor back to real Claude (human-driven demo):
21
- open the TUI (/recruit-conductor) or use the MCP `recruit` tool with
22
- agent: "claude" — the mock conductor will be replaced on the next
23
- `claimAttachment`.
24
-
25
- Override the scripted player's scenario per-run via the CLI:
26
- agent-tempo --dev up --lineup tempo-mock-jam --scenario echo-roundtrip
27
- That forces EVERY mock player into `mockMode: scripted` with the named
28
- scenario regardless of the per-player `mockMode` here. Useful for
29
- one-command "all mocks reply via this scenario" runs.
30
-
31
- conductor:
32
- type: tempo-conductor
33
- agent: mock
34
- mockMode: scripted
35
- mockScenario: conductor-recruit-mock
36
- instructions: >
37
- You're driving a mock-only ensemble for autonomous validation. The
38
- players reply deterministically — no real LLM calls, no terminal
39
- windows, no human-in-the-loop. Cue them, watch the dashboard, capture
40
- bugs as scenario YAMLs.
41
-
42
- players:
43
- - name: alice
44
- agent: mock
45
- mockMode: scripted
46
- mockScenario: multi-player-handoff
47
- instructions: >
48
- Scripted three-way handoff player. Try: `cue alice "ship feature
49
- caching"`. Splits the task to bob + carol-shaped peers, reports
50
- progress through the conductor's outbox.
51
-
52
- - name: bob
53
- agent: mock
54
- mockMode: echo
55
- instructions: >
56
- Echo round-trip baseline. Used as the receiving end of multi-player
57
- handoff scenarios; every inbound cue comes back as `[ECHO] <text>`.
58
-
59
- - name: silent-witness
60
- agent: mock
61
- mockMode: silent
62
- instructions: >
63
- Drains messages without ever replying. The heartbeat watcher should
64
- transition this player to `awaiting` after the staleness threshold;
65
- the dashboard should render the staleness indicator. Useful for
66
- validating timeout / encore / pause flows.
67
-
68
- - name: chaos-monkey
69
- agent: mock
70
- mockMode: chaos
71
- instructions: >
72
- Probabilistic failure injection. Configure rates via env vars on the
73
- daemon: `AGENT_TEMPO_MOCK_CHAOS_DELAY_MS`,
74
- `AGENT_TEMPO_MOCK_CHAOS_FAIL_RATE`,
75
- `AGENT_TEMPO_MOCK_CHAOS_CRASH_RATE`,
76
- `AGENT_TEMPO_MOCK_CHAOS_SEED` (pin for reproducibility). Defaults
77
- are conservative (5 % fail, 1 % crash, no delay) so an idle ensemble
78
- doesn't churn — set higher rates explicitly to stress the
79
- supervisor-restart + outbox-retry paths.
1
+ name: tempo-mock-jam
2
+ description: >
3
+ All-mock ensemble for autonomous validation harnesses (ADR 0014 §5.5).
4
+ One-command spin-up of a multi-player dev environment with mixed modes —
5
+ no real LLM calls, no terminal windows, no "trust this folder" prompts.
6
+ Pair with `agent-tempo --dev up --lineup tempo-mock-jam` and drive via
7
+ Chrome MCP / dashboard / `cue`.
8
+
9
+ Mode mix exercises every PR-3 mock surface in one ensemble:
10
+ - conductor → scripted (conductor-recruit-mock scenario)
11
+ - alice → scripted (multi-player-handoff scenario)
12
+ - bob → echo (baseline round-trip; default mock behavior)
13
+ - silent-witness → silent (heartbeat-stale phase validation)
14
+ - chaos-monkey → chaos (probabilistic fail/crash injection)
15
+
16
+ All five slots are mock — zero real LLM calls, zero terminal windows,
17
+ zero "trust this folder" prompts. Use the dashboard / TUI / `cue` to
18
+ drive the ensemble from outside.
19
+
20
+ To swap the conductor back to real Claude (human-driven demo):
21
+ open the TUI (/recruit-conductor) or use the MCP `recruit` tool with
22
+ agent: "claude" — the mock conductor will be replaced on the next
23
+ `claimAttachment`.
24
+
25
+ Override the scripted player's scenario per-run via the CLI:
26
+ agent-tempo --dev up --lineup tempo-mock-jam --scenario echo-roundtrip
27
+ That forces EVERY mock player into `mockMode: scripted` with the named
28
+ scenario regardless of the per-player `mockMode` here. Useful for
29
+ one-command "all mocks reply via this scenario" runs.
30
+
31
+ conductor:
32
+ type: tempo-conductor
33
+ agent: mock
34
+ mockMode: scripted
35
+ mockScenario: conductor-recruit-mock
36
+ instructions: >
37
+ You're driving a mock-only ensemble for autonomous validation. The
38
+ players reply deterministically — no real LLM calls, no terminal
39
+ windows, no human-in-the-loop. Cue them, watch the dashboard, capture
40
+ bugs as scenario YAMLs.
41
+
42
+ players:
43
+ - name: alice
44
+ agent: mock
45
+ mockMode: scripted
46
+ mockScenario: multi-player-handoff
47
+ instructions: >
48
+ Scripted three-way handoff player. Try: `cue alice "ship feature
49
+ caching"`. Splits the task to bob + carol-shaped peers, reports
50
+ progress through the conductor's outbox.
51
+
52
+ - name: bob
53
+ agent: mock
54
+ mockMode: echo
55
+ instructions: >
56
+ Echo round-trip baseline. Used as the receiving end of multi-player
57
+ handoff scenarios; every inbound cue comes back as `[ECHO] <text>`.
58
+
59
+ - name: silent-witness
60
+ agent: mock
61
+ mockMode: silent
62
+ instructions: >
63
+ Drains messages without ever replying. The heartbeat watcher should
64
+ transition this player to `awaiting` after the staleness threshold;
65
+ the dashboard should render the staleness indicator. Useful for
66
+ validating timeout / encore / pause flows.
67
+
68
+ - name: chaos-monkey
69
+ agent: mock
70
+ mockMode: chaos
71
+ instructions: >
72
+ Probabilistic failure injection. Configure rates via env vars on the
73
+ daemon: `AGENT_TEMPO_MOCK_CHAOS_DELAY_MS`,
74
+ `AGENT_TEMPO_MOCK_CHAOS_FAIL_RATE`,
75
+ `AGENT_TEMPO_MOCK_CHAOS_CRASH_RATE`,
76
+ `AGENT_TEMPO_MOCK_CHAOS_SEED` (pin for reproducibility). Defaults
77
+ are conservative (5 % fail, 1 % crash, no delay) so an idle ensemble
78
+ doesn't churn — set higher rates explicitly to stress the
79
+ supervisor-restart + outbox-retry paths.
@@ -1,32 +1,32 @@
1
- name: tempo-review-squad
2
- description: Three critics with different focus areas for thorough parallel code review
3
-
4
- conductor:
5
- type: tempo-conductor
6
- instructions: >
7
- You are coordinating a code review squad. Assign code areas or PRs to critics
8
- based on their specialization. Each critic reviews the same changes but focuses
9
- on their area. Collect their feedback, synthesize findings into a unified review,
10
- and report the overall verdict.
11
-
12
- players:
13
- - name: security-critic
14
- type: tempo-critic
15
- instructions: >
16
- Focus your review on security: input validation, authentication, authorization,
17
- injection vulnerabilities, secrets handling, OWASP top 10, and dependency risks.
18
- Flag anything that could be exploited. Blockers only for real vulnerabilities.
19
-
20
- - name: perf-critic
21
- type: tempo-critic
22
- instructions: >
23
- Focus your review on performance: algorithmic complexity, memory usage, unnecessary
24
- allocations, N+1 queries, caching opportunities, bundle size, and hot paths.
25
- Flag anything that would degrade user experience under load.
26
-
27
- - name: quality-critic
28
- type: tempo-critic
29
- instructions: >
30
- Focus your review on code quality: readability, maintainability, test coverage,
31
- error handling, naming conventions, and adherence to project standards. Flag
32
- anything that would make the code harder to work with in six months.
1
+ name: tempo-review-squad
2
+ description: Three critics with different focus areas for thorough parallel code review
3
+
4
+ conductor:
5
+ type: tempo-conductor
6
+ instructions: >
7
+ You are coordinating a code review squad. Assign code areas or PRs to critics
8
+ based on their specialization. Each critic reviews the same changes but focuses
9
+ on their area. Collect their feedback, synthesize findings into a unified review,
10
+ and report the overall verdict.
11
+
12
+ players:
13
+ - name: security-critic
14
+ type: tempo-critic
15
+ instructions: >
16
+ Focus your review on security: input validation, authentication, authorization,
17
+ injection vulnerabilities, secrets handling, OWASP top 10, and dependency risks.
18
+ Flag anything that could be exploited. Blockers only for real vulnerabilities.
19
+
20
+ - name: perf-critic
21
+ type: tempo-critic
22
+ instructions: >
23
+ Focus your review on performance: algorithmic complexity, memory usage, unnecessary
24
+ allocations, N+1 queries, caching opportunities, bundle size, and hot paths.
25
+ Flag anything that would degrade user experience under load.
26
+
27
+ - name: quality-critic
28
+ type: tempo-critic
29
+ instructions: >
30
+ Focus your review on code quality: readability, maintainability, test coverage,
31
+ error handling, naming conventions, and adherence to project standards. Flag
32
+ anything that would make the code harder to work with in six months.
package/package.json CHANGED
@@ -1,173 +1,176 @@
1
- {
2
- "name": "agent-tempo",
3
- "version": "1.2.0",
4
- "description": "Many agents, one tempo. Durable coordination for multi-agent work via Temporal.",
5
- "keywords": [
6
- "mcp",
7
- "claude",
8
- "temporal",
9
- "multi-agent",
10
- "orchestration",
11
- "claude-code"
12
- ],
13
- "homepage": "https://github.com/vinceblank/agent-tempo",
14
- "bugs": {
15
- "url": "https://github.com/vinceblank/agent-tempo/issues"
16
- },
17
- "repository": {
18
- "type": "git",
19
- "url": "https://github.com/vinceblank/agent-tempo.git"
20
- },
21
- "types": "./dist/server.d.ts",
22
- "type": "commonjs",
23
- "main": "dist/server.js",
24
- "exports": {
25
- ".": "./dist/server.js",
26
- "./types": {
27
- "types": "./dist/types.d.ts",
28
- "default": "./dist/types.js"
29
- },
30
- "./config": {
31
- "types": "./dist/config.d.ts",
32
- "default": "./dist/config.js"
33
- },
34
- "./spawn": {
35
- "types": "./dist/spawn.d.ts",
36
- "default": "./dist/spawn.js"
37
- },
38
- "./signals": {
39
- "types": "./dist/workflows/signals.d.ts",
40
- "default": "./dist/workflows/signals.js"
41
- },
42
- "./connection": {
43
- "types": "./dist/connection.d.ts",
44
- "default": "./dist/connection.js"
45
- },
46
- "./palette": {
47
- "types": "./dist/palette/index.d.ts",
48
- "default": "./dist/palette/index.js"
49
- },
50
- "./workflow-bundle": "./workflow-bundle.js",
51
- "./package.json": "./package.json"
52
- },
53
- "bin": {
54
- "agent-tempo": "dist/cli.js",
55
- "agent-tempo-server": "dist/server.js"
56
- },
57
- "scripts": {
58
- "build": "tsc && npm run build:scripts && npm run build:dashboard && node -e \"const{bundleWorkflowCode}=require('@temporalio/worker');const path=require('path');const fs=require('fs');bundleWorkflowCode({workflowsPath:path.resolve('dist/workflows/index.js')}).then(b=>{fs.writeFileSync('workflow-bundle.js',b.code);console.log('Workflow bundle created')})\"",
59
- "build:scripts": "tsc -p scripts/tsconfig.json",
60
- "build:dashboard": "npm --prefix dashboard ci && npm --prefix dashboard run build",
61
- "size-limit": "size-limit",
62
- "prepack": "node scripts/strip-mock-adapter.js",
63
- "verify-tarball": "node scripts/verify-tarball.js",
64
- "prepublishOnly": "npm run build && npm test && npm run verify-tarball",
65
- "dev": "ts-node src/server.ts",
66
- "copilot-bridge": "ts-node src/adapters/copilot/adapter.ts",
67
- "clean:test": "node -e \"require('fs').rmSync('dist-test',{recursive:true,force:true})\"",
68
- "build:test": "npm run clean:test && tsc -p test/tsconfig.json",
69
- "pretest": "npm run build:test",
70
- "test:tui": "vitest run",
71
- "test:conformance": "npm run build:test && mocha --config .mocharc.conformance.yml",
72
- "pretest:shard-1": "npm run build:test && npm run build:scripts",
73
- "test:shard-1": "node dist/scripts/run-shard.js 1",
74
- "pretest:shard-2": "npm run build:test && npm run build:scripts",
75
- "test:shard-2": "node dist/scripts/run-shard.js 2",
76
- "test": "mocha && vitest run",
77
- "lint:surface-drift": "node scripts/check-surface-drift.js",
78
- "lint:no-stale-scaffold": "node scripts/check-no-stale-scaffold.js",
79
- "lint:test-ensemble-literals": "bash scripts/check-test-ensemble-literals.sh",
80
- "lint:skip-reasons": "node scripts/lint-skip-reasons.js",
81
- "lint:lockstep-version": "node -e \"const r=require('./package.json').version,d=require('./dashboard/package.json').version;if(r!==d){console.error('Version drift: root='+r+' dashboard='+d+'. Bump dashboard/package.json#version to match root.');process.exit(1);}console.log('Lockstep OK: '+r);\"",
82
- "lint:lockfile-canonical": "bash scripts/check-lockfile-canonical.sh",
83
- "lint:dashboard-css-sync": "npm run build:scripts && node dist/scripts/check-components-css-sync.js",
84
- "check:all": "npm run lint:test-ensemble-literals && npm run lint:skip-reasons && npm run lint:lockstep-version && npm run lint:lockfile-canonical && npm run lint:surface-drift && npm run lint:no-stale-scaffold && npm run build && npm run lint:dashboard-css-sync && npm test && npm --prefix dashboard run lint && npm --prefix dashboard run test && npm run size-limit && npm run verify-tarball"
85
- },
86
- "optionalDependencies": {
87
- "@github/copilot-sdk": "^0.2.0",
88
- "@anthropic-ai/sdk": "~0.91.1",
89
- "@opencode-ai/sdk": "~1.14.29"
90
- },
91
- "dependencies": {
92
- "@modelcontextprotocol/sdk": "~1.28.0",
93
- "@temporalio/activity": "~1.15.0",
94
- "@temporalio/client": "~1.15.0",
95
- "@temporalio/common": "~1.15.0",
96
- "@temporalio/proto": "~1.15.0",
97
- "@temporalio/worker": "~1.15.0",
98
- "@temporalio/workflow": "~1.15.0",
99
- "croner": "^10.0.1",
100
- "ink": "^6.8.0",
101
- "ink-spinner": "^5.0.0",
102
- "ink-text-input": "^6.0.0",
103
- "p-limit": "^3.1.0",
104
- "qrcode-terminal": "^0.12.0",
105
- "react": "^19.2.4",
106
- "semver": "^7.7.4",
107
- "yaml": "^2.8.3",
108
- "zod": "~3.25.76"
109
- },
110
- "devDependencies": {
111
- "@size-limit/preset-app": "^12.1.0",
112
- "@temporalio/testing": "~1.15.0",
113
- "@types/chai": "^4.3.20",
114
- "@types/mocha": "^10.0.10",
115
- "@types/node": "^20.0.0",
116
- "@types/react": "^19.2.14",
117
- "@types/semver": "^7.7.1",
118
- "chai": "^4.5.0",
119
- "mocha": "^11.7.5",
120
- "size-limit": "^12.1.0",
121
- "ts-morph": "^28.0.0",
122
- "ts-node": "^10.9.0",
123
- "tsx": "^4.21.0",
124
- "typescript": "^5.5.0",
125
- "vitest": "^2.1.9"
126
- },
127
- "typesVersions": {
128
- "*": {
129
- "types": [
130
- "dist/types.d.ts"
131
- ],
132
- "config": [
133
- "dist/config.d.ts"
134
- ],
135
- "spawn": [
136
- "dist/spawn.d.ts"
137
- ],
138
- "signals": [
139
- "dist/workflows/signals.d.ts"
140
- ],
141
- "connection": [
142
- "dist/connection.d.ts"
143
- ],
144
- "palette": [
145
- "dist/palette/index.d.ts"
146
- ]
147
- }
148
- },
149
- "files": [
150
- "dist",
151
- "workflow-bundle.js",
152
- "assets",
153
- "examples",
154
- "packaging",
155
- "scenarios",
156
- "dashboard/dist",
157
- "dashboard/package.json",
158
- "CLAUDE.md",
159
- "README.md"
160
- ],
161
- "engines": {
162
- "node": ">=20"
163
- },
164
- "license": "MIT",
165
- "trustedDependencies": [
166
- "@swc/core",
167
- "protobufjs"
168
- ],
169
- "overrides": {
170
- "rxjs": "^7.8.1"
171
- },
172
- "packageManager": "npm@10.9.2"
173
- }
1
+ {
2
+ "name": "agent-tempo",
3
+ "version": "1.4.0",
4
+ "description": "Many agents, one tempo. Durable coordination for multi-agent work via Temporal.",
5
+ "keywords": [
6
+ "mcp",
7
+ "claude",
8
+ "temporal",
9
+ "multi-agent",
10
+ "orchestration",
11
+ "claude-code"
12
+ ],
13
+ "homepage": "https://github.com/vinceblank/agent-tempo",
14
+ "bugs": {
15
+ "url": "https://github.com/vinceblank/agent-tempo/issues"
16
+ },
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "https://github.com/vinceblank/agent-tempo.git"
20
+ },
21
+ "types": "./dist/server.d.ts",
22
+ "type": "commonjs",
23
+ "main": "dist/server.js",
24
+ "exports": {
25
+ ".": "./dist/server.js",
26
+ "./types": {
27
+ "types": "./dist/types.d.ts",
28
+ "default": "./dist/types.js"
29
+ },
30
+ "./config": {
31
+ "types": "./dist/config.d.ts",
32
+ "default": "./dist/config.js"
33
+ },
34
+ "./spawn": {
35
+ "types": "./dist/spawn.d.ts",
36
+ "default": "./dist/spawn.js"
37
+ },
38
+ "./signals": {
39
+ "types": "./dist/workflows/signals.d.ts",
40
+ "default": "./dist/workflows/signals.js"
41
+ },
42
+ "./connection": {
43
+ "types": "./dist/connection.d.ts",
44
+ "default": "./dist/connection.js"
45
+ },
46
+ "./palette": {
47
+ "types": "./dist/palette/index.d.ts",
48
+ "default": "./dist/palette/index.js"
49
+ },
50
+ "./workflow-bundle": "./workflow-bundle.js",
51
+ "./package.json": "./package.json"
52
+ },
53
+ "bin": {
54
+ "agent-tempo": "dist/cli.js",
55
+ "agent-tempo-server": "dist/server.js"
56
+ },
57
+ "scripts": {
58
+ "build": "tsc && npm run build:scripts && npm run build:dashboard && node -e \"const{bundleWorkflowCode}=require('@temporalio/worker');const path=require('path');const fs=require('fs');bundleWorkflowCode({workflowsPath:path.resolve('dist/workflows/index.js')}).then(b=>{fs.writeFileSync('workflow-bundle.js',b.code);console.log('Workflow bundle created')})\"",
59
+ "build:scripts": "tsc -p scripts/tsconfig.json",
60
+ "build:dashboard": "npm --prefix dashboard ci && npm --prefix dashboard run build",
61
+ "size-limit": "size-limit",
62
+ "prepack": "node scripts/strip-mock-adapter.js",
63
+ "verify-tarball": "node scripts/verify-tarball.js",
64
+ "prepublishOnly": "npm run build && npm test && npm run verify-tarball",
65
+ "dev": "ts-node src/server.ts",
66
+ "copilot-bridge": "ts-node src/adapters/copilot/adapter.ts",
67
+ "clean:test": "node -e \"require('fs').rmSync('dist-test',{recursive:true,force:true})\"",
68
+ "build:test": "npm run clean:test && tsc -p test/tsconfig.json",
69
+ "pretest": "npm run build:test",
70
+ "test:tui": "vitest run",
71
+ "test:conformance": "npm run build:test && mocha --config .mocharc.conformance.yml",
72
+ "pretest:shard-1": "npm run build:test && npm run build:scripts",
73
+ "test:shard-1": "node dist/scripts/run-shard.js 1",
74
+ "pretest:shard-2": "npm run build:test && npm run build:scripts",
75
+ "test:shard-2": "node dist/scripts/run-shard.js 2",
76
+ "test": "mocha && vitest run",
77
+ "lint:surface-drift": "node scripts/check-surface-drift.js",
78
+ "lint:no-stale-scaffold": "node scripts/check-no-stale-scaffold.js",
79
+ "lint:test-ensemble-literals": "bash scripts/check-test-ensemble-literals.sh",
80
+ "lint:skip-reasons": "node scripts/lint-skip-reasons.js",
81
+ "lint:lockstep-version": "node -e \"const r=require('./package.json').version,d=require('./dashboard/package.json').version;if(r!==d){console.error('Version drift: root='+r+' dashboard='+d+'. Bump dashboard/package.json#version to match root.');process.exit(1);}console.log('Lockstep OK: '+r);\"",
82
+ "lint:lockfile-canonical": "bash scripts/check-lockfile-canonical.sh",
83
+ "lint:dashboard-css-sync": "npm run build:scripts && node dist/scripts/check-components-css-sync.js",
84
+ "check:all": "npm run lint:test-ensemble-literals && npm run lint:skip-reasons && npm run lint:lockstep-version && npm run lint:lockfile-canonical && npm run lint:surface-drift && npm run lint:no-stale-scaffold && npm run build && npm run lint:dashboard-css-sync && npm test && npm --prefix dashboard run lint && npm --prefix dashboard run test && npm run size-limit && npm run verify-tarball"
85
+ },
86
+ "optionalDependencies": {
87
+ "@anthropic-ai/sdk": "~0.91.1",
88
+ "@earendil-works/pi-ai": "~0.78",
89
+ "@earendil-works/pi-coding-agent": "~0.78",
90
+ "@github/copilot-sdk": "1.0.0-beta.6",
91
+ "@opencode-ai/sdk": "~1.14.29"
92
+ },
93
+ "dependencies": {
94
+ "@modelcontextprotocol/sdk": "~1.28.0",
95
+ "@temporalio/activity": "~1.15.0",
96
+ "@temporalio/client": "~1.15.0",
97
+ "@temporalio/common": "~1.15.0",
98
+ "@temporalio/proto": "~1.15.0",
99
+ "@temporalio/worker": "~1.15.0",
100
+ "@temporalio/workflow": "~1.15.0",
101
+ "croner": "^10.0.1",
102
+ "ink": "^6.8.0",
103
+ "ink-spinner": "^5.0.0",
104
+ "ink-text-input": "^6.0.0",
105
+ "p-limit": "^3.1.0",
106
+ "qrcode-terminal": "^0.12.0",
107
+ "react": "^19.2.4",
108
+ "semver": "^7.7.4",
109
+ "typebox": "^1.0.1",
110
+ "yaml": "^2.8.3",
111
+ "zod": "~3.25.76"
112
+ },
113
+ "devDependencies": {
114
+ "@size-limit/preset-app": "^12.1.0",
115
+ "@temporalio/testing": "~1.15.0",
116
+ "@types/chai": "^4.3.20",
117
+ "@types/mocha": "^10.0.10",
118
+ "@types/node": "^20.0.0",
119
+ "@types/react": "^19.2.14",
120
+ "@types/semver": "^7.7.1",
121
+ "chai": "^4.5.0",
122
+ "mocha": "^11.7.5",
123
+ "size-limit": "^12.1.0",
124
+ "ts-morph": "^28.0.0",
125
+ "ts-node": "^10.9.0",
126
+ "tsx": "^4.21.0",
127
+ "typescript": "^5.5.0",
128
+ "vitest": "^2.1.9"
129
+ },
130
+ "typesVersions": {
131
+ "*": {
132
+ "types": [
133
+ "dist/types.d.ts"
134
+ ],
135
+ "config": [
136
+ "dist/config.d.ts"
137
+ ],
138
+ "spawn": [
139
+ "dist/spawn.d.ts"
140
+ ],
141
+ "signals": [
142
+ "dist/workflows/signals.d.ts"
143
+ ],
144
+ "connection": [
145
+ "dist/connection.d.ts"
146
+ ],
147
+ "palette": [
148
+ "dist/palette/index.d.ts"
149
+ ]
150
+ }
151
+ },
152
+ "files": [
153
+ "dist",
154
+ "workflow-bundle.js",
155
+ "assets",
156
+ "examples",
157
+ "packaging",
158
+ "scenarios",
159
+ "dashboard/dist",
160
+ "dashboard/package.json",
161
+ "CLAUDE.md",
162
+ "README.md"
163
+ ],
164
+ "engines": {
165
+ "node": ">=20"
166
+ },
167
+ "license": "MIT",
168
+ "trustedDependencies": [
169
+ "@swc/core",
170
+ "protobufjs"
171
+ ],
172
+ "overrides": {
173
+ "rxjs": "^7.8.1"
174
+ },
175
+ "packageManager": "npm@10.9.2"
176
+ }