@sentropic/h2a-runtime 0.81.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 (253) hide show
  1. package/dist/account-pool.d.ts +168 -0
  2. package/dist/account-pool.d.ts.map +1 -0
  3. package/dist/account-pool.js +385 -0
  4. package/dist/account-pool.js.map +1 -0
  5. package/dist/agents-projection.d.ts +56 -0
  6. package/dist/agents-projection.d.ts.map +1 -0
  7. package/dist/agents-projection.js +82 -0
  8. package/dist/agents-projection.js.map +1 -0
  9. package/dist/attach.d.ts +75 -0
  10. package/dist/attach.d.ts.map +1 -0
  11. package/dist/attach.js +432 -0
  12. package/dist/attach.js.map +1 -0
  13. package/dist/auth-bundle.d.ts +21 -0
  14. package/dist/auth-bundle.d.ts.map +1 -0
  15. package/dist/auth-bundle.js +112 -0
  16. package/dist/auth-bundle.js.map +1 -0
  17. package/dist/auth-diagnostics.d.ts +18 -0
  18. package/dist/auth-diagnostics.d.ts.map +1 -0
  19. package/dist/auth-diagnostics.js +23 -0
  20. package/dist/auth-diagnostics.js.map +1 -0
  21. package/dist/auth-login.d.ts +9 -0
  22. package/dist/auth-login.d.ts.map +1 -0
  23. package/dist/auth-login.js +21 -0
  24. package/dist/auth-login.js.map +1 -0
  25. package/dist/auth-refresh.d.ts +32 -0
  26. package/dist/auth-refresh.d.ts.map +1 -0
  27. package/dist/auth-refresh.js +83 -0
  28. package/dist/auth-refresh.js.map +1 -0
  29. package/dist/auth-tools.d.ts +55 -0
  30. package/dist/auth-tools.d.ts.map +1 -0
  31. package/dist/auth-tools.js +163 -0
  32. package/dist/auth-tools.js.map +1 -0
  33. package/dist/browser-bridge-local.d.ts +27 -0
  34. package/dist/browser-bridge-local.d.ts.map +1 -0
  35. package/dist/browser-bridge-local.js +51 -0
  36. package/dist/browser-bridge-local.js.map +1 -0
  37. package/dist/browser.d.ts +53 -0
  38. package/dist/browser.d.ts.map +1 -0
  39. package/dist/browser.js +61 -0
  40. package/dist/browser.js.map +1 -0
  41. package/dist/conductor-launch.d.ts +179 -0
  42. package/dist/conductor-launch.d.ts.map +1 -0
  43. package/dist/conductor-launch.js +414 -0
  44. package/dist/conductor-launch.js.map +1 -0
  45. package/dist/config.d.ts +182 -0
  46. package/dist/config.d.ts.map +1 -0
  47. package/dist/config.js +334 -0
  48. package/dist/config.js.map +1 -0
  49. package/dist/conv-guard.d.ts +76 -0
  50. package/dist/conv-guard.d.ts.map +1 -0
  51. package/dist/conv-guard.js +131 -0
  52. package/dist/conv-guard.js.map +1 -0
  53. package/dist/convsync.d.ts +24 -0
  54. package/dist/convsync.d.ts.map +1 -0
  55. package/dist/convsync.js +108 -0
  56. package/dist/convsync.js.map +1 -0
  57. package/dist/cred-health.d.ts +96 -0
  58. package/dist/cred-health.d.ts.map +1 -0
  59. package/dist/cred-health.js +170 -0
  60. package/dist/cred-health.js.map +1 -0
  61. package/dist/delegate.d.ts +406 -0
  62. package/dist/delegate.d.ts.map +1 -0
  63. package/dist/delegate.js +739 -0
  64. package/dist/delegate.js.map +1 -0
  65. package/dist/enroll.d.ts +91 -0
  66. package/dist/enroll.d.ts.map +1 -0
  67. package/dist/enroll.js +248 -0
  68. package/dist/enroll.js.map +1 -0
  69. package/dist/fanout.d.ts +63 -0
  70. package/dist/fanout.d.ts.map +1 -0
  71. package/dist/fanout.js +115 -0
  72. package/dist/fanout.js.map +1 -0
  73. package/dist/forward.d.ts +66 -0
  74. package/dist/forward.d.ts.map +1 -0
  75. package/dist/forward.js +141 -0
  76. package/dist/forward.js.map +1 -0
  77. package/dist/gitdiff.d.ts +31 -0
  78. package/dist/gitdiff.d.ts.map +1 -0
  79. package/dist/gitdiff.js +133 -0
  80. package/dist/gitdiff.js.map +1 -0
  81. package/dist/h2a-bridge.d.ts +102 -0
  82. package/dist/h2a-bridge.d.ts.map +1 -0
  83. package/dist/h2a-bridge.js +333 -0
  84. package/dist/h2a-bridge.js.map +1 -0
  85. package/dist/h2a-jobs.d.ts +235 -0
  86. package/dist/h2a-jobs.d.ts.map +1 -0
  87. package/dist/h2a-jobs.js +388 -0
  88. package/dist/h2a-jobs.js.map +1 -0
  89. package/dist/h2a-ping.d.ts +38 -0
  90. package/dist/h2a-ping.d.ts.map +1 -0
  91. package/dist/h2a-ping.js +58 -0
  92. package/dist/h2a-ping.js.map +1 -0
  93. package/dist/index.d.ts +98 -0
  94. package/dist/index.d.ts.map +1 -0
  95. package/dist/index.js +5887 -0
  96. package/dist/index.js.map +1 -0
  97. package/dist/interactive-throttle.d.ts +164 -0
  98. package/dist/interactive-throttle.d.ts.map +1 -0
  99. package/dist/interactive-throttle.js +194 -0
  100. package/dist/interactive-throttle.js.map +1 -0
  101. package/dist/lineage-client.d.ts +77 -0
  102. package/dist/lineage-client.d.ts.map +1 -0
  103. package/dist/lineage-client.js +117 -0
  104. package/dist/lineage-client.js.map +1 -0
  105. package/dist/lineage-lease.d.ts +152 -0
  106. package/dist/lineage-lease.d.ts.map +1 -0
  107. package/dist/lineage-lease.js +303 -0
  108. package/dist/lineage-lease.js.map +1 -0
  109. package/dist/llm-gateway-runtime/accounts.d.ts +48 -0
  110. package/dist/llm-gateway-runtime/accounts.d.ts.map +1 -0
  111. package/dist/llm-gateway-runtime/accounts.js +226 -0
  112. package/dist/llm-gateway-runtime/accounts.js.map +1 -0
  113. package/dist/llm-gateway-runtime/index.d.ts +4 -0
  114. package/dist/llm-gateway-runtime/index.d.ts.map +1 -0
  115. package/dist/llm-gateway-runtime/index.js +58 -0
  116. package/dist/llm-gateway-runtime/index.js.map +1 -0
  117. package/dist/llm-gateway-runtime/model-catalog.d.ts +36 -0
  118. package/dist/llm-gateway-runtime/model-catalog.d.ts.map +1 -0
  119. package/dist/llm-gateway-runtime/model-catalog.js +146 -0
  120. package/dist/llm-gateway-runtime/model-catalog.js.map +1 -0
  121. package/dist/llm-gateway-runtime/proxy-anthropic.d.ts +3 -0
  122. package/dist/llm-gateway-runtime/proxy-anthropic.d.ts.map +1 -0
  123. package/dist/llm-gateway-runtime/proxy-anthropic.js +139 -0
  124. package/dist/llm-gateway-runtime/proxy-anthropic.js.map +1 -0
  125. package/dist/llm-gateway-runtime/proxy-openai.d.ts +117 -0
  126. package/dist/llm-gateway-runtime/proxy-openai.d.ts.map +1 -0
  127. package/dist/llm-gateway-runtime/proxy-openai.js +1132 -0
  128. package/dist/llm-gateway-runtime/proxy-openai.js.map +1 -0
  129. package/dist/llm-gateway-runtime/session-ledger.d.ts +32 -0
  130. package/dist/llm-gateway-runtime/session-ledger.d.ts.map +1 -0
  131. package/dist/llm-gateway-runtime/session-ledger.js +62 -0
  132. package/dist/llm-gateway-runtime/session-ledger.js.map +1 -0
  133. package/dist/llm-gateway-runtime/sticky.d.ts +40 -0
  134. package/dist/llm-gateway-runtime/sticky.d.ts.map +1 -0
  135. package/dist/llm-gateway-runtime/sticky.js +254 -0
  136. package/dist/llm-gateway-runtime/sticky.js.map +1 -0
  137. package/dist/llm-mesh.d.ts +102 -0
  138. package/dist/llm-mesh.d.ts.map +1 -0
  139. package/dist/llm-mesh.js +433 -0
  140. package/dist/llm-mesh.js.map +1 -0
  141. package/dist/migrate-candidates.d.ts +35 -0
  142. package/dist/migrate-candidates.d.ts.map +1 -0
  143. package/dist/migrate-candidates.js +128 -0
  144. package/dist/migrate-candidates.js.map +1 -0
  145. package/dist/migrate.d.ts +125 -0
  146. package/dist/migrate.d.ts.map +1 -0
  147. package/dist/migrate.js +561 -0
  148. package/dist/migrate.js.map +1 -0
  149. package/dist/plugin-manifest.d.ts +143 -0
  150. package/dist/plugin-manifest.d.ts.map +1 -0
  151. package/dist/plugin-manifest.js +233 -0
  152. package/dist/plugin-manifest.js.map +1 -0
  153. package/dist/plugin.d.ts +274 -0
  154. package/dist/plugin.d.ts.map +1 -0
  155. package/dist/plugin.js +919 -0
  156. package/dist/plugin.js.map +1 -0
  157. package/dist/pod-liveness.d.ts +51 -0
  158. package/dist/pod-liveness.d.ts.map +1 -0
  159. package/dist/pod-liveness.js +80 -0
  160. package/dist/pod-liveness.js.map +1 -0
  161. package/dist/profile-menu.d.ts +7 -0
  162. package/dist/profile-menu.d.ts.map +1 -0
  163. package/dist/profile-menu.js +52 -0
  164. package/dist/profile-menu.js.map +1 -0
  165. package/dist/profiles.d.ts +23 -0
  166. package/dist/profiles.d.ts.map +1 -0
  167. package/dist/profiles.js +66 -0
  168. package/dist/profiles.js.map +1 -0
  169. package/dist/protocol-local.d.ts +27 -0
  170. package/dist/protocol-local.d.ts.map +1 -0
  171. package/dist/protocol-local.js +12 -0
  172. package/dist/protocol-local.js.map +1 -0
  173. package/dist/pty.d.ts +26 -0
  174. package/dist/pty.d.ts.map +1 -0
  175. package/dist/pty.js +45 -0
  176. package/dist/pty.js.map +1 -0
  177. package/dist/readiness.d.ts +38 -0
  178. package/dist/readiness.d.ts.map +1 -0
  179. package/dist/readiness.js +169 -0
  180. package/dist/readiness.js.map +1 -0
  181. package/dist/registry.d.ts +258 -0
  182. package/dist/registry.d.ts.map +1 -0
  183. package/dist/registry.js +570 -0
  184. package/dist/registry.js.map +1 -0
  185. package/dist/relaunch.d.ts +52 -0
  186. package/dist/relaunch.d.ts.map +1 -0
  187. package/dist/relaunch.js +76 -0
  188. package/dist/relaunch.js.map +1 -0
  189. package/dist/restore.d.ts +165 -0
  190. package/dist/restore.d.ts.map +1 -0
  191. package/dist/restore.js +530 -0
  192. package/dist/restore.js.map +1 -0
  193. package/dist/run.d.ts +29 -0
  194. package/dist/run.d.ts.map +1 -0
  195. package/dist/run.js +206 -0
  196. package/dist/run.js.map +1 -0
  197. package/dist/secrets.d.ts +25 -0
  198. package/dist/secrets.d.ts.map +1 -0
  199. package/dist/secrets.js +98 -0
  200. package/dist/secrets.js.map +1 -0
  201. package/dist/session-restore.d.ts +26 -0
  202. package/dist/session-restore.d.ts.map +1 -0
  203. package/dist/session-restore.js +122 -0
  204. package/dist/session-restore.js.map +1 -0
  205. package/dist/skills-sync.d.ts +126 -0
  206. package/dist/skills-sync.d.ts.map +1 -0
  207. package/dist/skills-sync.js +255 -0
  208. package/dist/skills-sync.js.map +1 -0
  209. package/dist/smoke.d.ts +23 -0
  210. package/dist/smoke.d.ts.map +1 -0
  211. package/dist/smoke.js +138 -0
  212. package/dist/smoke.js.map +1 -0
  213. package/dist/soft-refresh.d.ts +107 -0
  214. package/dist/soft-refresh.d.ts.map +1 -0
  215. package/dist/soft-refresh.js +426 -0
  216. package/dist/soft-refresh.js.map +1 -0
  217. package/dist/sync-status.d.ts +22 -0
  218. package/dist/sync-status.d.ts.map +1 -0
  219. package/dist/sync-status.js +41 -0
  220. package/dist/sync-status.js.map +1 -0
  221. package/dist/sync.d.ts +77 -0
  222. package/dist/sync.d.ts.map +1 -0
  223. package/dist/sync.js +302 -0
  224. package/dist/sync.js.map +1 -0
  225. package/dist/throttle-signatures.d.ts +43 -0
  226. package/dist/throttle-signatures.d.ts.map +1 -0
  227. package/dist/throttle-signatures.js +116 -0
  228. package/dist/throttle-signatures.js.map +1 -0
  229. package/dist/tmux.d.ts +286 -0
  230. package/dist/tmux.d.ts.map +1 -0
  231. package/dist/tmux.js +970 -0
  232. package/dist/tmux.js.map +1 -0
  233. package/dist/tunnel.d.ts +25 -0
  234. package/dist/tunnel.d.ts.map +1 -0
  235. package/dist/tunnel.js +127 -0
  236. package/dist/tunnel.js.map +1 -0
  237. package/dist/workspace-merge.d.ts +17 -0
  238. package/dist/workspace-merge.d.ts.map +1 -0
  239. package/dist/workspace-merge.js +153 -0
  240. package/dist/workspace-merge.js.map +1 -0
  241. package/dist/workspace-sync-incremental.d.ts +64 -0
  242. package/dist/workspace-sync-incremental.d.ts.map +1 -0
  243. package/dist/workspace-sync-incremental.js +199 -0
  244. package/dist/workspace-sync-incremental.js.map +1 -0
  245. package/dist/workspace-sync.d.ts +3 -0
  246. package/dist/workspace-sync.d.ts.map +1 -0
  247. package/dist/workspace-sync.js +187 -0
  248. package/dist/workspace-sync.js.map +1 -0
  249. package/dist/workspace.d.ts +70 -0
  250. package/dist/workspace.d.ts.map +1 -0
  251. package/dist/workspace.js +173 -0
  252. package/dist/workspace.js.map +1 -0
  253. package/package.json +44 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delegate.js","sourceRoot":"","sources":["../src/delegate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * `remote enroll` plumbing — feeds the live-session registry.
3
+ *
4
+ * - Hook mode (`--hook claude-start|claude-end`): called by Claude Code's
5
+ * SessionStart/SessionEnd hooks with the hook JSON on stdin. This path MUST
6
+ * never break the host session: parse errors are reported on stderr only
7
+ * and the command always exits 0.
8
+ * - `--install-hooks`: idempotent merge of those two hooks into
9
+ * ~/.claude/settings.json (path injectable for tests), with a
10
+ * settings.json.bak.<epoch> backup before the first modification. Existing
11
+ * hooks are NEVER overwritten; our entry is detected by its command string.
12
+ * - Manual mode (`--tool …`): direct enrolment for scripts.
13
+ *
14
+ * codex has no reliable session hook: codex sessions enter the registry via
15
+ * `remote run` (source "run") and the restore filesystem-scan fallback.
16
+ */
17
+ import { type RegistryEntry } from "./registry.js";
18
+ import { type EmitJobDoneResult } from "./h2a-jobs.js";
19
+ /** Subset of the JSON Claude Code pipes to SessionStart/SessionEnd hooks. */
20
+ export type ClaudeHookPayload = {
21
+ session_id?: string;
22
+ cwd?: string;
23
+ transcript_path?: string;
24
+ };
25
+ export declare function readStdin(stream?: NodeJS.ReadStream): Promise<string>;
26
+ export type HookResult = {
27
+ ok: boolean;
28
+ error?: string;
29
+ /** Set when claude-end finished a delegated job (role:"job") and a job.done
30
+ * callback was attempted. For diagnostics/tests only. */
31
+ callback?: EmitJobDoneResult;
32
+ /** The job id this hook resolved/finished (diagnostics/tests only). */
33
+ jobId?: string;
34
+ };
35
+ /** Injectable so tests never touch the real ~/h2a-workspace / process.env. */
36
+ export type HandleClaudeHookOpts = {
37
+ emit?: (job: RegistryEntry) => EmitJobDoneResult;
38
+ /** Process env (so tests can inject REMOTE_JOB_ID). Defaults to process.env. */
39
+ env?: Record<string, string | undefined>;
40
+ };
41
+ /**
42
+ * Resolve the delegated JOB an ending/starting claude session belongs to.
43
+ *
44
+ * H1 — a job spawned via `remote delegate` is enrolled under a SLUG (the jobId),
45
+ * NOT under claude's conversation uuid (`session_id`). The SessionEnd hook only
46
+ * receives `session_id`, so matching the job by `id === session_id` NEVER hits →
47
+ * an interactive tmux job stays `running` forever. The fix gives the hook a
48
+ * stable handle on the jobId, two complementary ways:
49
+ * 1. `REMOTE_JOB_ID` — stamped into the tmux session's env by `startJob`, so the
50
+ * claude process (and its hook child) inherit it. Authoritative when present.
51
+ * 2. `convId` link — at SessionStart we record `session_id` onto the job entry's
52
+ * convId (a no-op when no REMOTE_JOB_ID), so SessionEnd can also resolve a job
53
+ * whose env didn't survive (some shells scrub it) by `convId === session_id`.
54
+ * Pure over the registry snapshot, exported for tests.
55
+ */
56
+ export declare function resolveJobForHook(entries: ReadonlyArray<RegistryEntry>, sessionId: string, envJobId: string | undefined): RegistryEntry | undefined;
57
+ /**
58
+ * Handle a Claude Code hook payload. Never throws — the caller reports
59
+ * `error` on stderr and exits 0 regardless (a registry bug must not take the
60
+ * user's claude session down with it).
61
+ *
62
+ * P3: on claude-end, if the ending session is a DELEGATED JOB (role:"job" in
63
+ * the registry), advance it to `done` and emit a best-effort `job.done` h2a
64
+ * envelope to its parent (callbackTo). The hook STILL always succeeds — a
65
+ * callback failure is recorded in `callback`, never surfaced as `ok:false`.
66
+ */
67
+ export declare function handleClaudeHook(hook: string, rawPayload: string, registryPath?: string, opts?: HandleClaudeHookOpts): HookResult;
68
+ export type ManualEnrollOpts = {
69
+ tool: string;
70
+ cwd?: string;
71
+ conv?: string;
72
+ pid?: string;
73
+ label?: string;
74
+ };
75
+ export declare function manualEnroll(opts: ManualEnrollOpts, registryPath?: string): HookResult;
76
+ export declare function defaultClaudeSettingsPath(): string;
77
+ export type InstallHooksResult = {
78
+ settingsPath: string;
79
+ changed: boolean;
80
+ /** Hook events newly added by this run (empty when already installed). */
81
+ installed: string[];
82
+ backupPath?: string;
83
+ };
84
+ /**
85
+ * Idempotently merge the enroll hooks into Claude Code's settings.json.
86
+ * Duplicate detection is by command string; existing hooks are kept verbatim.
87
+ * The pre-existing file is backed up to settings.json.bak.<epoch> before the
88
+ * first modification. A corrupt settings file ABORTS (never overwritten).
89
+ */
90
+ export declare function installClaudeHooks(settingsPath?: string): InstallHooksResult;
91
+ //# sourceMappingURL=enroll.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enroll.d.ts","sourceRoot":"","sources":["../src/enroll.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,OAAO,EAOL,KAAK,aAAa,EACnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAe,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAMpE,6EAA6E;AAC7E,MAAM,MAAM,iBAAiB,GAAG;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,wBAAgB,SAAS,CACvB,MAAM,GAAE,MAAM,CAAC,UAA0B,GACxC,OAAO,CAAC,MAAM,CAAC,CAUjB;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;6DACyD;IACzD,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,8EAA8E;AAC9E,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,iBAAiB,CAAC;IACjD,gFAAgF;IAChF,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1C,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,aAAa,CAAC,aAAa,CAAC,EACrC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,aAAa,GAAG,SAAS,CAY3B;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,YAAY,GAAE,MAA8B,EAC5C,IAAI,GAAE,oBAAyB,GAC9B,UAAU,CA6EZ;AAMD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAgB,YAAY,CAC1B,IAAI,EAAE,gBAAgB,EACtB,YAAY,GAAE,MAA8B,GAC3C,UAAU,CA4BZ;AAWD,wBAAgB,yBAAyB,IAAI,MAAM,CAElD;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,0EAA0E;IAC1E,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAIF;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,GAAE,MAAoC,GACjD,kBAAkB,CAwEpB"}
package/dist/enroll.js ADDED
@@ -0,0 +1,248 @@
1
+ /**
2
+ * `remote enroll` plumbing — feeds the live-session registry.
3
+ *
4
+ * - Hook mode (`--hook claude-start|claude-end`): called by Claude Code's
5
+ * SessionStart/SessionEnd hooks with the hook JSON on stdin. This path MUST
6
+ * never break the host session: parse errors are reported on stderr only
7
+ * and the command always exits 0.
8
+ * - `--install-hooks`: idempotent merge of those two hooks into
9
+ * ~/.claude/settings.json (path injectable for tests), with a
10
+ * settings.json.bak.<epoch> backup before the first modification. Existing
11
+ * hooks are NEVER overwritten; our entry is detected by its command string.
12
+ * - Manual mode (`--tool …`): direct enrolment for scripts.
13
+ *
14
+ * codex has no reliable session hook: codex sessions enter the registry via
15
+ * `remote run` (source "run") and the restore filesystem-scan fallback.
16
+ */
17
+ import { copyFileSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
18
+ import { homedir } from "node:os";
19
+ import { basename, dirname, join, resolve } from "node:path";
20
+ import { advanceJob, coerceRegistryTool, enroll, loadRegistry, markEnded, resolveRegistryPath, } from "./registry.js";
21
+ import { emitJobDone } from "./h2a-jobs.js";
22
+ export function readStdin(stream = process.stdin) {
23
+ return new Promise((resolvePromise) => {
24
+ let data = "";
25
+ stream.setEncoding("utf8");
26
+ stream.on("data", (chunk) => {
27
+ data += chunk;
28
+ });
29
+ stream.on("end", () => resolvePromise(data));
30
+ stream.on("error", () => resolvePromise(data));
31
+ });
32
+ }
33
+ /**
34
+ * Resolve the delegated JOB an ending/starting claude session belongs to.
35
+ *
36
+ * H1 — a job spawned via `remote delegate` is enrolled under a SLUG (the jobId),
37
+ * NOT under claude's conversation uuid (`session_id`). The SessionEnd hook only
38
+ * receives `session_id`, so matching the job by `id === session_id` NEVER hits →
39
+ * an interactive tmux job stays `running` forever. The fix gives the hook a
40
+ * stable handle on the jobId, two complementary ways:
41
+ * 1. `REMOTE_JOB_ID` — stamped into the tmux session's env by `startJob`, so the
42
+ * claude process (and its hook child) inherit it. Authoritative when present.
43
+ * 2. `convId` link — at SessionStart we record `session_id` onto the job entry's
44
+ * convId (a no-op when no REMOTE_JOB_ID), so SessionEnd can also resolve a job
45
+ * whose env didn't survive (some shells scrub it) by `convId === session_id`.
46
+ * Pure over the registry snapshot, exported for tests.
47
+ */
48
+ export function resolveJobForHook(entries, sessionId, envJobId) {
49
+ // 1. REMOTE_JOB_ID — authoritative (the slug stamped on the tmux env).
50
+ if (envJobId) {
51
+ const byEnv = entries.find((e) => e.id === envJobId && e.role === "job");
52
+ if (byEnv)
53
+ return byEnv;
54
+ }
55
+ // 2. convId link recorded at SessionStart (env didn't survive into the hook).
56
+ const byConv = entries.find((e) => e.role === "job" && e.convId === sessionId);
57
+ if (byConv)
58
+ return byConv;
59
+ // 3. Back-compat: a job whose registry id IS the conversation uuid (e.g. a
60
+ // manually-enrolled job, or one keyed by its session_id).
61
+ return entries.find((e) => e.id === sessionId && e.role === "job");
62
+ }
63
+ /**
64
+ * Handle a Claude Code hook payload. Never throws — the caller reports
65
+ * `error` on stderr and exits 0 regardless (a registry bug must not take the
66
+ * user's claude session down with it).
67
+ *
68
+ * P3: on claude-end, if the ending session is a DELEGATED JOB (role:"job" in
69
+ * the registry), advance it to `done` and emit a best-effort `job.done` h2a
70
+ * envelope to its parent (callbackTo). The hook STILL always succeeds — a
71
+ * callback failure is recorded in `callback`, never surfaced as `ok:false`.
72
+ */
73
+ export function handleClaudeHook(hook, rawPayload, registryPath = resolveRegistryPath(), opts = {}) {
74
+ try {
75
+ if (hook !== "claude-start" && hook !== "claude-end") {
76
+ return { ok: false, error: `unknown hook "${hook}"` };
77
+ }
78
+ const payload = JSON.parse(rawPayload);
79
+ const id = payload.session_id;
80
+ if (!id || typeof id !== "string") {
81
+ return { ok: false, error: "hook payload has no session_id" };
82
+ }
83
+ const cwd = typeof payload.cwd === "string" ? payload.cwd : process.cwd();
84
+ const env = opts.env ?? process.env;
85
+ const envJobId = env.REMOTE_JOB_ID;
86
+ if (hook === "claude-start") {
87
+ // H1 — if this claude session IS a delegated job (REMOTE_JOB_ID stamped on
88
+ // its tmux env by startJob), LINK its conversation uuid onto the job entry
89
+ // (convId) so SessionEnd can resolve the job even if the env is later
90
+ // scrubbed. Otherwise enroll a plain session as before.
91
+ if (envJobId) {
92
+ const job = loadRegistry(registryPath).find((e) => e.id === envJobId && e.role === "job");
93
+ if (job) {
94
+ enroll({
95
+ id: job.id,
96
+ tool: job.tool,
97
+ kind: job.kind,
98
+ cwd: job.cwd,
99
+ source: job.source,
100
+ convId: id,
101
+ role: "job",
102
+ }, registryPath);
103
+ return { ok: true, jobId: job.id };
104
+ }
105
+ }
106
+ enroll({ id, tool: "claude", kind: "local", cwd, convId: id, source: "hook" }, registryPath);
107
+ return { ok: true };
108
+ }
109
+ // claude-end: is this session a DELEGATED JOB? Resolve by REMOTE_JOB_ID (the
110
+ // env stamped by startJob) or by the convId link recorded at SessionStart —
111
+ // NOT by `id === session_id` (the job lives under its slug, not the uuid).
112
+ const job = resolveJobForHook(loadRegistry(registryPath), id, envJobId);
113
+ if (job) {
114
+ // Advance to done (no-op if already terminal), keyed by the JOB's id (its
115
+ // slug) — NOT the session uuid. The interactive agent ending its session IS
116
+ // the success signal; a non-zero exit isn't observable from SessionEnd, so
117
+ // "done" is the right default.
118
+ const advanced = advanceJob(job.id, "done", registryPath) ?? job;
119
+ let callback;
120
+ try {
121
+ const emit = opts.emit ?? ((j) => emitJobDone(j, { state: advanced.jobState ?? "done" }));
122
+ callback = emit(advanced);
123
+ }
124
+ catch (error) {
125
+ // a callback failure must NEVER fail the hook
126
+ callback = { emitted: false, reason: "error", error: String(error) };
127
+ }
128
+ return { ok: true, callback, jobId: job.id };
129
+ }
130
+ // Not a job — enroll-if-missing so the end of an unknown session still
131
+ // leaves a (terminated) trace, then mark it ended.
132
+ if (!markEnded(id, registryPath)) {
133
+ enroll({ id, tool: "claude", kind: "local", cwd, convId: id, source: "hook" }, registryPath);
134
+ markEnded(id, registryPath);
135
+ }
136
+ return { ok: true };
137
+ }
138
+ catch (error) {
139
+ return { ok: false, error: String(error) };
140
+ }
141
+ }
142
+ export function manualEnroll(opts, registryPath = resolveRegistryPath()) {
143
+ const tool = coerceRegistryTool(opts.tool);
144
+ if (!tool) {
145
+ return {
146
+ ok: false,
147
+ error: `unknown tool "${opts.tool}" (known: claude, codex, agy)`,
148
+ };
149
+ }
150
+ const cwd = resolve(opts.cwd ?? process.cwd());
151
+ const id = opts.conv ?? opts.label ?? basename(cwd);
152
+ const pid = opts.pid !== undefined ? Number.parseInt(opts.pid, 10) : undefined;
153
+ if (opts.pid !== undefined && !Number.isInteger(pid)) {
154
+ return { ok: false, error: `invalid --pid "${opts.pid}"` };
155
+ }
156
+ enroll({
157
+ id,
158
+ tool,
159
+ kind: "local",
160
+ cwd,
161
+ source: "run",
162
+ ...(opts.conv !== undefined ? { convId: opts.conv } : {}),
163
+ ...(opts.label !== undefined ? { label: opts.label } : {}),
164
+ ...(pid !== undefined ? { pid } : {}),
165
+ }, registryPath);
166
+ return { ok: true };
167
+ }
168
+ // ---------------------------------------------------------------------------
169
+ // --install-hooks
170
+ // ---------------------------------------------------------------------------
171
+ const HOOK_COMMANDS = [
172
+ ["SessionStart", "remote enroll --hook claude-start"],
173
+ ["SessionEnd", "remote enroll --hook claude-end"],
174
+ ];
175
+ export function defaultClaudeSettingsPath() {
176
+ return join(homedir(), ".claude", "settings.json");
177
+ }
178
+ /**
179
+ * Idempotently merge the enroll hooks into Claude Code's settings.json.
180
+ * Duplicate detection is by command string; existing hooks are kept verbatim.
181
+ * The pre-existing file is backed up to settings.json.bak.<epoch> before the
182
+ * first modification. A corrupt settings file ABORTS (never overwritten).
183
+ */
184
+ export function installClaudeHooks(settingsPath = defaultClaudeSettingsPath()) {
185
+ let settings = {};
186
+ let existed = false;
187
+ let raw;
188
+ try {
189
+ raw = readFileSync(settingsPath, "utf8");
190
+ existed = true;
191
+ }
192
+ catch (error) {
193
+ if (error.code !== "ENOENT") {
194
+ throw new Error(`cannot read ${settingsPath}: ${error.message}`);
195
+ }
196
+ }
197
+ if (raw !== undefined) {
198
+ let parsed;
199
+ try {
200
+ parsed = JSON.parse(raw);
201
+ }
202
+ catch (error) {
203
+ throw new Error(`${settingsPath} is not valid JSON (${error.message}); fix it manually — refusing to overwrite`);
204
+ }
205
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
206
+ throw new Error(`${settingsPath} is not a JSON object; refusing to modify`);
207
+ }
208
+ settings = parsed;
209
+ }
210
+ const hooksRaw = settings.hooks ?? {};
211
+ if (!hooksRaw || typeof hooksRaw !== "object" || Array.isArray(hooksRaw)) {
212
+ throw new Error(`${settingsPath} has a non-object "hooks" field; refusing to modify`);
213
+ }
214
+ const hooks = hooksRaw;
215
+ const installed = [];
216
+ for (const [event, command] of HOOK_COMMANDS) {
217
+ const matchers = Array.isArray(hooks[event])
218
+ ? hooks[event]
219
+ : [];
220
+ const already = matchers.some((m) => Array.isArray(m?.hooks) &&
221
+ m.hooks.some((h) => h?.command === command));
222
+ if (already)
223
+ continue;
224
+ matchers.push({ hooks: [{ type: "command", command }] });
225
+ hooks[event] = matchers;
226
+ installed.push(event);
227
+ }
228
+ if (installed.length === 0) {
229
+ return { settingsPath, changed: false, installed };
230
+ }
231
+ settings.hooks = hooks;
232
+ let backupPath;
233
+ if (existed) {
234
+ backupPath = `${settingsPath}.bak.${Math.floor(Date.now() / 1000)}`;
235
+ copyFileSync(settingsPath, backupPath);
236
+ }
237
+ mkdirSync(dirname(settingsPath), { recursive: true });
238
+ const tmp = `${settingsPath}.tmp.${process.pid}`;
239
+ writeFileSync(tmp, JSON.stringify(settings, null, 2) + "\n", "utf8");
240
+ renameSync(tmp, settingsPath);
241
+ return {
242
+ settingsPath,
243
+ changed: true,
244
+ installed,
245
+ ...(backupPath !== undefined ? { backupPath } : {}),
246
+ };
247
+ }
248
+ //# sourceMappingURL=enroll.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enroll.js","sourceRoot":"","sources":["../src/enroll.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Default concurrency cap for the REMOTE fan-out, mirroring the delegate path's
3
+ * shared-RWX cap (`DEFAULT_MAX_CONCURRENT = 16`): the volume is multi-node RW so
4
+ * N concurrent creations are safe, but we still bound the burst so a single
5
+ * `--count` cannot blow past the cluster's per-user session budget. Reversible:
6
+ * raise via the command's own cap if SCW quota allows.
7
+ */
8
+ export declare const DEFAULT_FANOUT_MAX = 16;
9
+ /**
10
+ * One member of a remote fan-out. PURE data:
11
+ * - `index` 1-based position in the fleet (1..count).
12
+ * - `name` the session displayName, `<base>-NN` (zero-padded), SAFE-NAME
13
+ * safe (letters/digits/`_`/`-`) so it is also a valid k8s object
14
+ * name component and path segment.
15
+ * - `workspaceName` the workspace displayName passed to `createWorkspace`; the
16
+ * server assigns the real workspaceId (→ the subPath on the shared
17
+ * RWX PVC). Distinct per member so the fleet never shares a tree.
18
+ * - `subPath` the INTENDED, deterministic subPath label for this member
19
+ * (== `name`). The server's assigned workspaceId is the EFFECTIVE
20
+ * subPath; this field documents the plan and proves collision-free
21
+ * derivation in tests. Each member gets its OWN subPath because
22
+ * each does its OWN createWorkspace — never a shared tree.
23
+ */
24
+ export interface RemoteFanoutMember {
25
+ readonly index: number;
26
+ readonly name: string;
27
+ readonly workspaceName: string;
28
+ readonly subPath: string;
29
+ }
30
+ export interface PlanRemoteFanoutInput {
31
+ /** Base label for the fleet (e.g. the cwd basename or an explicit --name). */
32
+ readonly base: string;
33
+ /** How many concurrent remote sessions to fan out (>= 1). */
34
+ readonly count: number;
35
+ /** Upper bound; rejects count>max. Defaults to DEFAULT_FANOUT_MAX. */
36
+ readonly max?: number;
37
+ }
38
+ /**
39
+ * Plan a REMOTE fan-out: derive N distinct, collision-free session descriptors
40
+ * from a base + index, bounded by max. PURE — no spawning, no cluster call.
41
+ *
42
+ * Naming scheme (reversible default, DOCUMENTED): `<base>-NN`, zero-padded to the
43
+ * count's width. SAFE-NAME safe so each name is a valid session displayName AND a
44
+ * valid workspace displayName AND a valid path/k8s-name segment. `count === 1`
45
+ * yields a single member named exactly `<base>` (no suffix) — a 1:1 passthrough
46
+ * to the existing single-session path.
47
+ *
48
+ * Rejects (throws) on:
49
+ * - non-integer / count < 1
50
+ * - count > max (the cap; default DEFAULT_FANOUT_MAX)
51
+ * - a base that is not SAFE-NAME safe (would yield an invalid subPath/k8s name)
52
+ */
53
+ export declare function planRemoteFanout(input: PlanRemoteFanoutInput): RemoteFanoutMember[];
54
+ /**
55
+ * Run `task` over `items` with at most `limit` in flight, preserving input order
56
+ * in the returned settled results. Bounded concurrency for the fan-out CREATION
57
+ * (each task is one createWorkspace + createRemoteSession): N pods on a multi-node
58
+ * RWX volume are safe, but we still cap the burst so we never open N sockets to
59
+ * the control-plane at once. NOT pure (runs the tasks) but cluster-agnostic — the
60
+ * task is injected, so it is unit-testable without a live control-plane.
61
+ */
62
+ export declare function mapWithConcurrency<T, R>(items: ReadonlyArray<T>, limit: number, task: (item: T, index: number) => Promise<R>): Promise<Array<PromiseSettledResult<R>>>;
63
+ //# sourceMappingURL=fanout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fanout.d.ts","sourceRoot":"","sources":["../src/fanout.ts"],"names":[],"mappings":"AAoBA;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC,8EAA8E;IAC9E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,sEAAsE;IACtE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAeD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,qBAAqB,GAC3B,kBAAkB,EAAE,CAmCtB;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAC3C,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EACvB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAC3C,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAkBzC"}
package/dist/fanout.js ADDED
@@ -0,0 +1,115 @@
1
+ // ---------------------------------------------------------------------------
2
+ // WP6 — REMOTE fan-out planner: N concurrent remote-session Pods, each on the
3
+ // ONE shared RWX File-Storage volume with its OWN workspace subPath. PURE (no
4
+ // spawn, no cluster call): turns a (base, count, max) request into N distinct
5
+ // session descriptors. The actual createWorkspace + createRemoteSession stay
6
+ // behind the existing seam in index.ts (`startRemoteFanout`).
7
+ //
8
+ // ARCHITECTURE (do NOT regress): there is exactly ONE shared RWX PVC per user;
9
+ // every workspace lives as a `<workspaceId>/` subPath of it (see k8s spec.ts
10
+ // `sharedWorkspacePvc` + `wsSubPath`). RWX mounts RW on MANY nodes at once
11
+ // (Scaleway File Storage), so N concurrent remote Pods is fine — no per-node
12
+ // CSI attach limit (same correction as the delegate remote path, design F3).
13
+ // We therefore NEVER create one PVC per session; each fan-out member just does
14
+ // its OWN `createWorkspace` call → the server assigns it a distinct workspaceId
15
+ // → a distinct subPath on the shared volume. The planner's job is to hand each
16
+ // member a deterministic, collision-free NAME (session displayName + workspace
17
+ // displayName) derived from base + index; distinct subPaths follow for free
18
+ // from the N distinct server-assigned workspaceIds.
19
+ // ---------------------------------------------------------------------------
20
+ /**
21
+ * Default concurrency cap for the REMOTE fan-out, mirroring the delegate path's
22
+ * shared-RWX cap (`DEFAULT_MAX_CONCURRENT = 16`): the volume is multi-node RW so
23
+ * N concurrent creations are safe, but we still bound the burst so a single
24
+ * `--count` cannot blow past the cluster's per-user session budget. Reversible:
25
+ * raise via the command's own cap if SCW quota allows.
26
+ */
27
+ export const DEFAULT_FANOUT_MAX = 16;
28
+ /** Job id / k8s name / subPath segment: keep it tame (same rule as delegate). */
29
+ const SAFE_BASE = /^[A-Za-z0-9_-]+$/;
30
+ /**
31
+ * Zero-pad the 1-based index to a stable width so member names sort lexically
32
+ * (`-01`..`-16`) and never collide by prefix. Width tracks the count so a fleet
33
+ * of 9 uses `-1..-9` and a fleet of 12 uses `-01..-12`.
34
+ */
35
+ function pad(index, count) {
36
+ const width = String(count).length;
37
+ return String(index).padStart(width, "0");
38
+ }
39
+ /**
40
+ * Plan a REMOTE fan-out: derive N distinct, collision-free session descriptors
41
+ * from a base + index, bounded by max. PURE — no spawning, no cluster call.
42
+ *
43
+ * Naming scheme (reversible default, DOCUMENTED): `<base>-NN`, zero-padded to the
44
+ * count's width. SAFE-NAME safe so each name is a valid session displayName AND a
45
+ * valid workspace displayName AND a valid path/k8s-name segment. `count === 1`
46
+ * yields a single member named exactly `<base>` (no suffix) — a 1:1 passthrough
47
+ * to the existing single-session path.
48
+ *
49
+ * Rejects (throws) on:
50
+ * - non-integer / count < 1
51
+ * - count > max (the cap; default DEFAULT_FANOUT_MAX)
52
+ * - a base that is not SAFE-NAME safe (would yield an invalid subPath/k8s name)
53
+ */
54
+ export function planRemoteFanout(input) {
55
+ const { base, count } = input;
56
+ const max = input.max ?? DEFAULT_FANOUT_MAX;
57
+ if (!Number.isInteger(max) || max < 1) {
58
+ throw new Error(`fan-out max must be a whole number >= 1 (got ${max})`);
59
+ }
60
+ if (!Number.isInteger(count) || count < 1) {
61
+ throw new Error(`--count must be a whole number >= 1 (got ${count})`);
62
+ }
63
+ if (count > max) {
64
+ throw new Error(`--count ${count} exceeds the fan-out cap of ${max} (raise the cap only if your SCW session quota allows it)`);
65
+ }
66
+ if (!SAFE_BASE.test(base)) {
67
+ throw new Error(`fan-out base "${base}" is not name-safe (allowed: letters, digits, "_", "-"); pass --name with a tame label`);
68
+ }
69
+ // count === 1: 1:1 passthrough — the single member keeps the bare base, so the
70
+ // existing single-session naming is byte-for-byte unchanged.
71
+ if (count === 1) {
72
+ return [{ index: 1, name: base, workspaceName: base, subPath: base }];
73
+ }
74
+ const members = Array.from({ length: count }, (_v, i) => {
75
+ const index = i + 1;
76
+ const name = `${base}-${pad(index, count)}`;
77
+ return { index, name, workspaceName: name, subPath: name };
78
+ });
79
+ // Defensive: prove (and guarantee for callers) collision-free subPaths.
80
+ const subPaths = new Set(members.map((m) => m.subPath));
81
+ if (subPaths.size !== members.length) {
82
+ throw new Error("fan-out produced colliding subPaths (internal error)");
83
+ }
84
+ return members;
85
+ }
86
+ /**
87
+ * Run `task` over `items` with at most `limit` in flight, preserving input order
88
+ * in the returned settled results. Bounded concurrency for the fan-out CREATION
89
+ * (each task is one createWorkspace + createRemoteSession): N pods on a multi-node
90
+ * RWX volume are safe, but we still cap the burst so we never open N sockets to
91
+ * the control-plane at once. NOT pure (runs the tasks) but cluster-agnostic — the
92
+ * task is injected, so it is unit-testable without a live control-plane.
93
+ */
94
+ export async function mapWithConcurrency(items, limit, task) {
95
+ const results = new Array(items.length);
96
+ const width = Math.max(1, Math.min(limit, items.length));
97
+ let next = 0;
98
+ const worker = async () => {
99
+ for (;;) {
100
+ const i = next;
101
+ next += 1;
102
+ if (i >= items.length)
103
+ return;
104
+ try {
105
+ results[i] = { status: "fulfilled", value: await task(items[i], i) };
106
+ }
107
+ catch (reason) {
108
+ results[i] = { status: "rejected", reason };
109
+ }
110
+ }
111
+ };
112
+ await Promise.all(Array.from({ length: width }, () => worker()));
113
+ return results;
114
+ }
115
+ //# sourceMappingURL=fanout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fanout.js","sourceRoot":"","sources":["../src/fanout.ts"],"names":[],"mappings":"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"}