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,21 +0,0 @@
1
- export interface ClaudeStopInput {
2
- /** Supervisor's 8-char short id from `SessionMetadata.bgShortId`. */
3
- shortId: string;
4
- /** Custom claude binary path (defaults to `'claude'` on PATH). */
5
- claudeBin?: string;
6
- }
7
- export interface ClaudeStopResult {
8
- success: boolean;
9
- /** One of `'stopped'` | `'already-gone'` | `'error'`. */
10
- outcome: 'stopped' | 'already-gone' | 'error';
11
- /** Populated on `outcome === 'error'` — the raw stderr/stdout snippet for diagnostics. */
12
- detail?: string;
13
- /** Exit code from `claude stop`. Undefined on spawn-side failure. */
14
- exitCode?: number;
15
- }
16
- /**
17
- * Invoke `claude stop <shortId>` synchronously. Never throws — returns a
18
- * structured `ClaudeStopResult` the workflow can act on. Routes through
19
- * `resolveClaudePath` so the `claudeBin` config option is honoured.
20
- */
21
- export declare function claudeStop(input: ClaudeStopInput): Promise<ClaudeStopResult>;
@@ -1,94 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.claudeStop = claudeStop;
4
- /**
5
- * #596 / ADR 0016 — `claude stop <shortId>` per-host activity.
6
- *
7
- * `claude --bg` hands the session to Anthropic's per-user Claude Code
8
- * supervisor. We don't own the PID anymore (the supervisor does), so the
9
- * existing `hard-terminate` PID-scan helper would always return
10
- * `strategy: 'none'` and leak the supervisor job. Instead, ask the
11
- * supervisor to stop the job via its documented CLI verb.
12
- *
13
- * **Routing**: registered on the per-host activity queue
14
- * (`agent-tempo-{hostname}`) so the `claude` CLI runs on the same machine
15
- * the supervisor lives on. The workflow proxy in `src/workflows/session.ts`
16
- * picks the right host via `AgentTempoHostname` exactly the same way
17
- * `hardTerminateAttachment` already does.
18
- *
19
- * **Idempotency**: `claude stop` exits 1 with `No job matching '<id>'` when
20
- * the job is already gone. We classify that as success — destroy must be
21
- * idempotent and a re-run of an already-stopped session is a normal flow.
22
- * Any other non-zero exit (network/socket failure, supervisor itself wedged,
23
- * unexpected CLI shape) is reported as `success: false` so the workflow's
24
- * destroy path can fall back to the existing `hardTerminateAttachment`
25
- * PID-scan as defense in depth.
26
- *
27
- * **Timing**: 15-second timeout. The supervisor responds in <100ms on a
28
- * healthy host, but Windows process-spawn overhead and antivirus scanners
29
- * can stretch the worst case. 15s leaves slack without holding up destroy.
30
- */
31
- const child_process_1 = require("child_process");
32
- const activity_1 = require("@temporalio/activity");
33
- const spawn_1 = require("../spawn");
34
- const log = (...args) => console.error('[agent-tempo:claude-stop]', ...args);
35
- /**
36
- * Validate the supervisor short id before shelling out. Anthropic uses
37
- * lowercase hex from the full UUID's first 8 chars; reject anything else
38
- * to avoid passing user-influenced strings into argv.
39
- */
40
- function isValidShortId(s) {
41
- return typeof s === 'string' && /^[0-9a-f]{8}$/.test(s);
42
- }
43
- /**
44
- * Invoke `claude stop <shortId>` synchronously. Never throws — returns a
45
- * structured `ClaudeStopResult` the workflow can act on. Routes through
46
- * `resolveClaudePath` so the `claudeBin` config option is honoured.
47
- */
48
- async function claudeStop(input) {
49
- const { shortId, claudeBin } = input;
50
- if (!isValidShortId(shortId)) {
51
- throw activity_1.ApplicationFailure.nonRetryable(`claudeStop: invalid shortId "${shortId}" (must be 8 lowercase hex chars). ` +
52
- `This indicates corrupt SessionMetadata.bgShortId — check the recruit path.`);
53
- }
54
- const bin = (0, spawn_1.resolveClaudePath)(claudeBin);
55
- let result;
56
- try {
57
- result = (0, child_process_1.spawnSync)(bin, ['stop', shortId], {
58
- encoding: 'utf8',
59
- timeout: 15_000,
60
- shell: process.platform === 'win32',
61
- });
62
- }
63
- catch (err) {
64
- const detail = err instanceof Error ? err.message : String(err);
65
- log(`claude stop ${shortId} failed to launch: ${detail}`);
66
- return { success: false, outcome: 'error', detail };
67
- }
68
- if (result.error) {
69
- log(`claude stop ${shortId} spawn error: ${result.error.message}`);
70
- return { success: false, outcome: 'error', detail: result.error.message };
71
- }
72
- const exitCode = result.status ?? -1;
73
- const stderr = (result.stderr || '').toString();
74
- const stdout = (result.stdout || '').toString();
75
- const combined = `${stderr}\n${stdout}`.trim();
76
- if (exitCode === 0) {
77
- log(`claude stop ${shortId} → stopped`);
78
- return { success: true, outcome: 'stopped', exitCode };
79
- }
80
- // Anthropic's "already gone" signal — exit 1 with `No job matching '<id>'`
81
- // somewhere in the combined output. Match case-insensitively to absorb
82
- // small phrasing drift across CLI versions.
83
- if (/no job matching/i.test(combined)) {
84
- log(`claude stop ${shortId} → already-gone (exit ${exitCode}, idempotent success)`);
85
- return { success: true, outcome: 'already-gone', exitCode };
86
- }
87
- log(`claude stop ${shortId} → error (exit ${exitCode}): ${combined || '(no output)'}`);
88
- return {
89
- success: false,
90
- outcome: 'error',
91
- exitCode,
92
- detail: combined || `exit ${exitCode} with no output`,
93
- };
94
- }
package/dist/channel.d.ts DELETED
@@ -1,3 +0,0 @@
1
- import { WorkflowHandle } from '@temporalio/client';
2
- import { Message } from './types';
3
- export declare function startMessagePoller(handle: WorkflowHandle, onMessages: (messages: Message[]) => Promise<void> | void): () => void;
package/dist/channel.js DELETED
@@ -1,48 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.startMessagePoller = startMessagePoller;
4
- const log = (...args) => console.error('[claude-tempo:poller]', ...args);
5
- const POLL_BASE_MS = 2000;
6
- const POLL_BACKOFF_FACTOR = 1.5;
7
- const POLL_MAX_MS = 30000;
8
- function startMessagePoller(handle, onMessages) {
9
- let stopped = false;
10
- let timeout = null;
11
- let currentInterval = POLL_BASE_MS;
12
- let consecutiveErrors = 0;
13
- const poll = async () => {
14
- if (stopped)
15
- return;
16
- try {
17
- const messages = await handle.query('pendingMessages');
18
- if (messages.length > 0) {
19
- const ids = messages.map((m) => m.id);
20
- // Deliver messages first — only mark delivered after successful notification.
21
- // If onMessages throws, messages stay undelivered and retry on next poll cycle.
22
- await onMessages(messages);
23
- await handle.signal('markDelivered', ids);
24
- }
25
- // Reset backoff on successful poll
26
- currentInterval = POLL_BASE_MS;
27
- consecutiveErrors = 0;
28
- }
29
- catch (err) {
30
- consecutiveErrors++;
31
- // Apply exponential backoff on errors
32
- currentInterval = Math.min(currentInterval * POLL_BACKOFF_FACTOR, POLL_MAX_MS);
33
- log(`Poll error (attempt ${consecutiveErrors}, next in ${Math.round(currentInterval)}ms):`, err);
34
- }
35
- if (!stopped) {
36
- timeout = setTimeout(poll, currentInterval);
37
- }
38
- };
39
- // Start the first poll
40
- timeout = setTimeout(poll, POLL_BASE_MS);
41
- return () => {
42
- stopped = true;
43
- if (timeout) {
44
- clearTimeout(timeout);
45
- timeout = null;
46
- }
47
- };
48
- }
@@ -1,22 +0,0 @@
1
- /**
2
- * Copilot Bridge — allows GitHub Copilot CLI sessions to participate
3
- * as players in a claude-tempo ensemble.
4
- *
5
- * The bridge:
6
- * 1. Spawns a Copilot CLI session via the Copilot SDK
7
- * 2. Configures it with claude-tempo as an MCP server (so it gets all tools)
8
- * 3. Polls the Temporal workflow for pending messages
9
- * 4. Injects messages as prompts via the SDK
10
- *
11
- * Usage:
12
- * npx ts-node src/copilot-bridge.ts
13
- *
14
- * Environment variables:
15
- * CLAUDE_TEMPO_ENSEMBLE — ensemble name (default: "default")
16
- * CLAUDE_TEMPO_PLAYER_NAME — player ID for workflow registration (set by spawner for deterministic workflow IDs)
17
- * COPILOT_BRIDGE_NAME — player name for set_name (optional)
18
- * COPILOT_BRIDGE_MODEL — model to use (optional)
19
- * COPILOT_BRIDGE_SESSION_ID — deterministic session ID for resumable sessions (optional)
20
- * GITHUB_TOKEN — GitHub auth token (optional, uses logged-in user by default)
21
- */
22
- export {};