harnery 0.30.0 → 0.31.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (517) hide show
  1. package/README.md +4 -4
  2. package/dist/commander.d.ts +8 -0
  3. package/dist/commander.d.ts.map +1 -1
  4. package/dist/commander.js +14 -13
  5. package/dist/commands/adapter.d.ts +12 -0
  6. package/dist/commands/adapter.d.ts.map +1 -0
  7. package/dist/commands/{harness.js → adapter.js} +35 -35
  8. package/dist/commands/agents.d.ts +3 -2
  9. package/dist/commands/agents.d.ts.map +1 -1
  10. package/dist/commands/agents.js +185 -74
  11. package/dist/commands/artifacts.d.ts +4 -0
  12. package/dist/commands/artifacts.d.ts.map +1 -0
  13. package/dist/commands/artifacts.js +143 -0
  14. package/dist/commands/backup.d.ts +1 -1
  15. package/dist/commands/backup.d.ts.map +1 -1
  16. package/dist/commands/backup.js +5 -2
  17. package/dist/commands/browse.d.ts.map +1 -1
  18. package/dist/commands/browse.js +310 -7
  19. package/dist/commands/checkpoint.d.ts +12 -0
  20. package/dist/commands/checkpoint.d.ts.map +1 -0
  21. package/dist/commands/checkpoint.js +162 -0
  22. package/dist/commands/context.d.ts +2 -2
  23. package/dist/commands/context.d.ts.map +1 -1
  24. package/dist/commands/context.js +3 -151
  25. package/dist/commands/decision.d.ts.map +1 -1
  26. package/dist/commands/decision.js +31 -7
  27. package/dist/commands/deinit.d.ts +2 -2
  28. package/dist/commands/deinit.js +15 -15
  29. package/dist/commands/doctor.js +23 -23
  30. package/dist/commands/governor.d.ts +4 -0
  31. package/dist/commands/governor.d.ts.map +1 -0
  32. package/dist/commands/{supervisor.js → governor.js} +133 -108
  33. package/dist/commands/grep.d.ts +1 -1
  34. package/dist/commands/grep.d.ts.map +1 -1
  35. package/dist/commands/grep.js +19 -2
  36. package/dist/commands/init.d.ts +12 -12
  37. package/dist/commands/init.d.ts.map +1 -1
  38. package/dist/commands/init.js +44 -30
  39. package/dist/commands/{session.d.ts → journal.d.ts} +2 -2
  40. package/dist/commands/journal.d.ts.map +1 -0
  41. package/dist/commands/{scratch.js → journal.js} +47 -47
  42. package/dist/commands/policy.js +1 -1
  43. package/dist/commands/presence.js +2 -2
  44. package/dist/commands/sync.d.ts +1 -1
  45. package/dist/commands/sync.js +3 -3
  46. package/dist/commands/tunnel.d.ts +16 -0
  47. package/dist/commands/tunnel.d.ts.map +1 -1
  48. package/dist/commands/tunnel.js +213 -27
  49. package/dist/commands/web-fetch.js +1 -1
  50. package/dist/commands/web.d.ts +19 -0
  51. package/dist/commands/web.d.ts.map +1 -1
  52. package/dist/commands/web.js +51 -0
  53. package/dist/commands/work.d.ts.map +1 -1
  54. package/dist/commands/work.js +38 -22
  55. package/dist/commands/workflow.d.ts.map +1 -1
  56. package/dist/commands/workflow.js +35 -28
  57. package/dist/core/{harnesses → adapters}/attest-projection.d.ts +2 -2
  58. package/dist/core/adapters/attest-projection.d.ts.map +1 -0
  59. package/dist/core/{harnesses → adapters}/attest.d.ts +16 -16
  60. package/dist/core/adapters/attest.d.ts.map +1 -0
  61. package/dist/core/{harnesses → adapters}/attest.js +9 -9
  62. package/dist/core/{harnesses → adapters}/attestation.d.ts +16 -16
  63. package/dist/core/adapters/attestation.d.ts.map +1 -0
  64. package/dist/core/{harnesses → adapters}/attestation.js +20 -20
  65. package/dist/core/{harnesses → adapters}/bench.d.ts +12 -12
  66. package/dist/core/adapters/bench.d.ts.map +1 -0
  67. package/dist/core/{harnesses → adapters}/bench.js +12 -12
  68. package/dist/core/adapters/index.d.ts +13 -0
  69. package/dist/core/adapters/index.d.ts.map +1 -0
  70. package/dist/core/adapters/index.js +6 -0
  71. package/dist/core/{harnesses → adapters}/profiles.d.ts +11 -11
  72. package/dist/core/adapters/profiles.d.ts.map +1 -0
  73. package/dist/core/{harnesses → adapters}/profiles.js +11 -11
  74. package/dist/core/adapters/registry.d.ts +15 -0
  75. package/dist/core/adapters/registry.d.ts.map +1 -0
  76. package/dist/core/{harnesses → adapters}/registry.js +11 -11
  77. package/dist/core/{harnesses → adapters}/types.d.ts +23 -23
  78. package/dist/core/adapters/types.d.ts.map +1 -0
  79. package/dist/core/{harnesses → adapters}/types.js +1 -1
  80. package/dist/core/agents/canonical-emit.d.ts +9 -14
  81. package/dist/core/agents/canonical-emit.d.ts.map +1 -1
  82. package/dist/core/agents/canonical-emit.js +15 -44
  83. package/dist/core/agents/cli-emit.js +1 -1
  84. package/dist/core/agents/cli.js +30 -26
  85. package/dist/core/agents/codex-replay.d.ts +1 -1
  86. package/dist/core/agents/codex-replay.js +6 -6
  87. package/dist/core/agents/coord-bin.d.ts +33 -0
  88. package/dist/core/agents/coord-bin.d.ts.map +1 -0
  89. package/dist/core/agents/coord-bin.js +89 -0
  90. package/dist/core/agents/coord-client.d.ts +78 -8
  91. package/dist/core/agents/coord-client.d.ts.map +1 -1
  92. package/dist/core/agents/coord-client.js +303 -75
  93. package/dist/core/agents/events/consume.d.ts +1 -1
  94. package/dist/core/agents/events/emit.d.ts +5 -6
  95. package/dist/core/agents/events/emit.d.ts.map +1 -1
  96. package/dist/core/agents/events/emit.js +2 -2
  97. package/dist/core/agents/paths.d.ts +5 -2
  98. package/dist/core/agents/paths.d.ts.map +1 -1
  99. package/dist/core/agents/paths.js +7 -13
  100. package/dist/core/agents/render/prompt-context.d.ts +21 -9
  101. package/dist/core/agents/render/prompt-context.d.ts.map +1 -1
  102. package/dist/core/agents/render/prompt-context.js +82 -30
  103. package/dist/core/agents/render/session-context.d.ts +1 -1
  104. package/dist/core/agents/render/session-context.js +5 -5
  105. package/dist/core/agents/rules/claim-conflict.d.ts +2 -6
  106. package/dist/core/agents/rules/claim-conflict.d.ts.map +1 -1
  107. package/dist/core/agents/rules/claim-conflict.js +1 -1
  108. package/dist/core/agents/rules/commit-conflict.js +98 -22
  109. package/dist/core/agents/rules/stop-hook.d.ts +9 -9
  110. package/dist/core/agents/rules/stop-hook.d.ts.map +1 -1
  111. package/dist/core/agents/rules/stop-hook.js +23 -5
  112. package/dist/core/agents/rules/verdict.d.ts +14 -0
  113. package/dist/core/agents/rules/verdict.d.ts.map +1 -0
  114. package/dist/core/agents/rules/verdict.js +1 -0
  115. package/dist/core/agents/session-events.js +3 -3
  116. package/dist/core/agents/state/council.d.ts +1 -1
  117. package/dist/core/agents/state/council.js +1 -1
  118. package/dist/core/agents/state/heartbeat-projector.d.ts +3 -2
  119. package/dist/core/agents/state/heartbeat-projector.d.ts.map +1 -1
  120. package/dist/core/agents/state/heartbeat-projector.js +14 -10
  121. package/dist/core/agents/state/heartbeat-writer.d.ts +1 -1
  122. package/dist/core/agents/state/heartbeat-writer.js +12 -12
  123. package/dist/core/agents/state/{scratch.d.ts → journal.d.ts} +7 -7
  124. package/dist/core/agents/state/{scratch.d.ts.map → journal.d.ts.map} +1 -1
  125. package/dist/core/agents/state/{scratch.js → journal.js} +12 -12
  126. package/dist/core/agents/state/pidmap.d.ts +28 -4
  127. package/dist/core/agents/state/pidmap.d.ts.map +1 -1
  128. package/dist/core/agents/state/pidmap.js +130 -15
  129. package/dist/core/agents/state/proc-start.d.ts +95 -0
  130. package/dist/core/agents/state/proc-start.d.ts.map +1 -0
  131. package/dist/core/agents/state/proc-start.js +199 -0
  132. package/dist/core/agents/state/shell-mutation.d.ts +1 -1
  133. package/dist/core/agents/state/shell-mutation.js +1 -1
  134. package/dist/core/agents/state/stale-sweep.js +7 -7
  135. package/dist/core/artifacts/index.d.ts +86 -0
  136. package/dist/core/artifacts/index.d.ts.map +1 -0
  137. package/dist/core/artifacts/index.js +421 -0
  138. package/dist/core/config.d.ts +9 -2
  139. package/dist/core/config.d.ts.map +1 -1
  140. package/dist/core/config.js +26 -2
  141. package/dist/core/context/index.d.ts +12 -12
  142. package/dist/core/context/index.js +10 -10
  143. package/dist/core/governor/adapter-spread.d.ts +52 -0
  144. package/dist/core/governor/adapter-spread.d.ts.map +1 -0
  145. package/dist/core/governor/adapter-spread.js +52 -0
  146. package/dist/core/governor/index.d.ts +7 -0
  147. package/dist/core/governor/index.d.ts.map +1 -0
  148. package/dist/core/governor/index.js +6 -0
  149. package/dist/core/governor/plan-api.d.ts +38 -0
  150. package/dist/core/governor/plan-api.d.ts.map +1 -0
  151. package/dist/core/governor/plan-api.js +83 -0
  152. package/dist/core/governor/plan-read.d.ts +5 -0
  153. package/dist/core/governor/plan-read.d.ts.map +1 -0
  154. package/dist/core/{supervisor → governor}/plan-read.js +66 -52
  155. package/dist/core/{supervisor → governor}/plan-types.d.ts +57 -56
  156. package/dist/core/governor/plan-types.d.ts.map +1 -0
  157. package/dist/core/{supervisor → governor}/plan-types.js +4 -4
  158. package/dist/core/governor/planning.d.ts +48 -0
  159. package/dist/core/governor/planning.d.ts.map +1 -0
  160. package/dist/core/{supervisor → governor}/planning.js +125 -94
  161. package/dist/core/governor/read.d.ts +6 -0
  162. package/dist/core/governor/read.d.ts.map +1 -0
  163. package/dist/core/governor/read.js +4 -0
  164. package/dist/core/governor/runner.d.ts +37 -0
  165. package/dist/core/governor/runner.d.ts.map +1 -0
  166. package/dist/core/{supervisor → governor}/runner.js +15 -15
  167. package/dist/core/governor/service-read.d.ts +6 -0
  168. package/dist/core/governor/service-read.d.ts.map +1 -0
  169. package/dist/core/{supervisor → governor}/service-read.js +12 -12
  170. package/dist/core/governor/service.d.ts +114 -0
  171. package/dist/core/governor/service.d.ts.map +1 -0
  172. package/dist/core/{supervisor → governor}/service.js +57 -57
  173. package/dist/core/governor/state.d.ts +116 -0
  174. package/dist/core/governor/state.d.ts.map +1 -0
  175. package/dist/core/{supervisor → governor}/state.js +228 -108
  176. package/dist/core/hooks/adapter/detect.d.ts +9 -0
  177. package/dist/core/hooks/{harness → adapter}/detect.d.ts.map +1 -1
  178. package/dist/core/hooks/{harness → adapter}/detect.js +8 -8
  179. package/dist/core/hooks/{harness → adapter}/events.d.ts +15 -14
  180. package/dist/core/hooks/adapter/events.d.ts.map +1 -0
  181. package/dist/core/hooks/{harness → adapter}/events.js +5 -5
  182. package/dist/core/hooks/{harness → adapter}/output.d.ts +20 -14
  183. package/dist/core/hooks/adapter/output.d.ts.map +1 -0
  184. package/dist/core/hooks/{harness → adapter}/output.js +30 -22
  185. package/dist/core/hooks/{harness → adapter}/parse.d.ts +5 -5
  186. package/dist/core/hooks/{harness → adapter}/parse.d.ts.map +1 -1
  187. package/dist/core/hooks/{harness → adapter}/parse.js +4 -4
  188. package/dist/core/hooks/{harness → adapter}/wiring.d.ts +15 -15
  189. package/dist/core/hooks/{harness → adapter}/wiring.d.ts.map +1 -1
  190. package/dist/core/hooks/{harness → adapter}/wiring.js +13 -13
  191. package/dist/core/hooks/cli.d.ts +3 -3
  192. package/dist/core/hooks/cli.js +187 -162
  193. package/dist/core/hooks/effects/image-capture.d.ts +5 -5
  194. package/dist/core/hooks/effects/image-capture.d.ts.map +1 -1
  195. package/dist/core/hooks/effects/image-capture.js +3 -3
  196. package/dist/core/hooks/effects/index.d.ts +12 -12
  197. package/dist/core/hooks/effects/index.d.ts.map +1 -1
  198. package/dist/core/hooks/effects/index.js +19 -19
  199. package/dist/core/hooks/events/emit.d.ts +2 -2
  200. package/dist/core/hooks/events/emit.d.ts.map +1 -1
  201. package/dist/core/hooks/events/emit.js +1 -1
  202. package/dist/core/hooks/events/rotate.js +1 -1
  203. package/dist/core/hooks/events/schema.d.ts +13 -5
  204. package/dist/core/hooks/events/schema.d.ts.map +1 -1
  205. package/dist/core/hooks/guard-path.d.ts +2 -2
  206. package/dist/core/hooks/guard-path.js +2 -2
  207. package/dist/core/hooks/index.d.ts +1 -1
  208. package/dist/core/hooks/index.d.ts.map +1 -1
  209. package/dist/core/hooks/resolve/anchor.d.ts +14 -5
  210. package/dist/core/hooks/resolve/anchor.d.ts.map +1 -1
  211. package/dist/core/hooks/resolve/anchor.js +64 -7
  212. package/dist/core/hooks/resolve/coord-root.d.ts +16 -11
  213. package/dist/core/hooks/resolve/coord-root.d.ts.map +1 -1
  214. package/dist/core/hooks/resolve/coord-root.js +18 -43
  215. package/dist/core/hooks/resolve/intent.js +1 -1
  216. package/dist/core/hooks/resolve/owner.d.ts +1 -1
  217. package/dist/core/hooks/resolve/owner.d.ts.map +1 -1
  218. package/dist/core/hooks/resolve/owner.js +11 -5
  219. package/dist/core/{scratch → journal}/index.d.ts +25 -25
  220. package/dist/core/{scratch → journal}/index.d.ts.map +1 -1
  221. package/dist/core/{scratch → journal}/index.js +38 -38
  222. package/dist/core/policy/evaluate.d.ts +1 -1
  223. package/dist/core/policy/evaluate.d.ts.map +1 -1
  224. package/dist/core/policy/evaluate.js +7 -7
  225. package/dist/core/policy/types.d.ts +3 -3
  226. package/dist/core/policy/types.d.ts.map +1 -1
  227. package/dist/core/work/state.d.ts +12 -4
  228. package/dist/core/work/state.d.ts.map +1 -1
  229. package/dist/core/work/state.js +50 -17
  230. package/dist/core/workflow/adapters.d.ts +17 -0
  231. package/dist/core/workflow/adapters.d.ts.map +1 -0
  232. package/dist/core/workflow/adapters.js +21 -0
  233. package/dist/core/workflow/approvals.js +6 -6
  234. package/dist/core/workflow/billing.d.ts +9 -9
  235. package/dist/core/workflow/billing.js +9 -9
  236. package/dist/core/workflow/child-env.d.ts +10 -2
  237. package/dist/core/workflow/child-env.d.ts.map +1 -1
  238. package/dist/core/workflow/child-env.js +12 -4
  239. package/dist/core/workflow/engine.d.ts +15 -5
  240. package/dist/core/workflow/engine.d.ts.map +1 -1
  241. package/dist/core/workflow/engine.js +138 -83
  242. package/dist/core/workflow/evidence-preflight.d.ts +24 -0
  243. package/dist/core/workflow/evidence-preflight.d.ts.map +1 -0
  244. package/dist/core/workflow/evidence-preflight.js +134 -0
  245. package/dist/core/workflow/index.d.ts +1 -1
  246. package/dist/core/workflow/index.d.ts.map +1 -1
  247. package/dist/core/workflow/proof.d.ts +11 -5
  248. package/dist/core/workflow/proof.d.ts.map +1 -1
  249. package/dist/core/workflow/proof.js +45 -36
  250. package/dist/core/workflow/run-state.d.ts +1 -1
  251. package/dist/core/workflow/run-state.js +7 -7
  252. package/dist/core/workflow/sandbox-projection.d.ts +6 -6
  253. package/dist/core/workflow/sandbox-projection.d.ts.map +1 -1
  254. package/dist/core/workflow/sandbox-projection.js +11 -11
  255. package/dist/core/workflow/spawn-claude.d.ts +3 -3
  256. package/dist/core/workflow/spawn-claude.d.ts.map +1 -1
  257. package/dist/core/workflow/spawn-claude.js +9 -6
  258. package/dist/core/workflow/spawn-codex.d.ts +4 -4
  259. package/dist/core/workflow/spawn-codex.d.ts.map +1 -1
  260. package/dist/core/workflow/spawn-codex.js +9 -6
  261. package/dist/core/workflow/spawn-cursor.d.ts +4 -4
  262. package/dist/core/workflow/spawn-cursor.d.ts.map +1 -1
  263. package/dist/core/workflow/spawn-cursor.js +9 -6
  264. package/dist/core/workflow/spawn-failure.d.ts +1 -1
  265. package/dist/core/workflow/spawn-failure.js +1 -1
  266. package/dist/core/workflow/specialists.js +2 -2
  267. package/dist/core/workflow/{journal.d.ts → transcript.d.ts} +8 -8
  268. package/dist/core/workflow/transcript.d.ts.map +1 -0
  269. package/dist/core/workflow/{journal.js → transcript.js} +14 -14
  270. package/dist/core/workflow/types.d.ts +98 -51
  271. package/dist/core/workflow/types.d.ts.map +1 -1
  272. package/dist/core/workflow/types.js +11 -1
  273. package/dist/core/workflow/validate.d.ts +1 -1
  274. package/dist/core/workflow/validate.js +1 -1
  275. package/dist/core/workflow/workspaces/cancellation.js +2 -2
  276. package/dist/core/workflow/workspaces/cleanup.js +2 -2
  277. package/dist/core/workflow/workspaces/execution.js +6 -6
  278. package/dist/core/workflow/workspaces/inspect.js +9 -9
  279. package/dist/core/workflow/workspaces/integration.js +14 -14
  280. package/dist/core/workflow/workspaces/lifecycle.d.ts +1 -1
  281. package/dist/core/workflow/workspaces/lifecycle.d.ts.map +1 -1
  282. package/dist/core/workflow/workspaces/lifecycle.js +9 -9
  283. package/dist/core/workflow/workspaces/local-git.d.ts.map +1 -1
  284. package/dist/core/workflow/workspaces/local-git.js +39 -5
  285. package/dist/core/workflow/workspaces/recovery.js +3 -3
  286. package/dist/core/workflow/workspaces/state.d.ts +1 -1
  287. package/dist/core/workflow/workspaces/state.d.ts.map +1 -1
  288. package/dist/core/workflow/workspaces/state.js +3 -3
  289. package/dist/core/workflow/workspaces/types.d.ts +1 -1
  290. package/dist/core/workflow/workspaces/types.d.ts.map +1 -1
  291. package/dist/lib/browser/asserts.d.ts +28 -0
  292. package/dist/lib/browser/asserts.d.ts.map +1 -0
  293. package/dist/lib/browser/asserts.js +152 -0
  294. package/dist/lib/browser/client.d.ts +49 -0
  295. package/dist/lib/browser/client.d.ts.map +1 -1
  296. package/dist/lib/browser/client.js +155 -14
  297. package/dist/lib/browser/content-checks.d.ts +108 -0
  298. package/dist/lib/browser/content-checks.d.ts.map +1 -0
  299. package/dist/lib/browser/content-checks.js +474 -0
  300. package/dist/lib/browser/critique.d.ts +91 -0
  301. package/dist/lib/browser/critique.d.ts.map +1 -0
  302. package/dist/lib/browser/critique.js +167 -0
  303. package/dist/lib/browser/geometry.d.ts +32 -0
  304. package/dist/lib/browser/geometry.d.ts.map +1 -1
  305. package/dist/lib/browser/geometry.js +244 -1
  306. package/dist/lib/browser/index.d.ts +4 -1
  307. package/dist/lib/browser/index.d.ts.map +1 -1
  308. package/dist/lib/browser/index.js +2 -0
  309. package/dist/lib/claude-desktop.d.ts.map +1 -1
  310. package/dist/lib/claude-desktop.js +4 -1
  311. package/dist/lib/context/index.js +9 -2
  312. package/dist/lib/council/index.d.ts +6 -6
  313. package/dist/lib/council/index.d.ts.map +1 -1
  314. package/dist/lib/council/index.js +8 -8
  315. package/dist/lib/identities/assume.d.ts +2 -2
  316. package/dist/lib/identities/assume.js +7 -7
  317. package/dist/lib/instructions/apply.d.ts +3 -3
  318. package/dist/lib/instructions/apply.d.ts.map +1 -1
  319. package/dist/lib/instructions/apply.js +75 -27
  320. package/dist/lib/instructions/host-addendum.d.ts +54 -0
  321. package/dist/lib/instructions/host-addendum.d.ts.map +1 -0
  322. package/dist/lib/instructions/host-addendum.js +107 -0
  323. package/dist/lib/instructions/templates.d.ts +10 -3
  324. package/dist/lib/instructions/templates.d.ts.map +1 -1
  325. package/dist/lib/instructions/templates.js +41 -12
  326. package/dist/lib/machine.d.ts +2 -2
  327. package/dist/lib/machine.js +2 -2
  328. package/package.json +26 -21
  329. package/schemas/config.schema.json +26 -1
  330. package/src/commander.ts +22 -13
  331. package/src/commands/{harness.ts → adapter.ts} +46 -46
  332. package/src/commands/agents.ts +200 -78
  333. package/src/commands/artifacts.ts +168 -0
  334. package/src/commands/backup.ts +47 -33
  335. package/src/commands/browse.ts +438 -2
  336. package/src/commands/checkpoint.ts +196 -0
  337. package/src/commands/context.ts +3 -176
  338. package/src/commands/decision.ts +41 -7
  339. package/src/commands/deinit.ts +16 -16
  340. package/src/commands/doctor.ts +28 -28
  341. package/src/commands/{supervisor.ts → governor.ts} +184 -154
  342. package/src/commands/grep.ts +19 -2
  343. package/src/commands/init.ts +50 -34
  344. package/src/commands/{scratch.ts → journal.ts} +60 -60
  345. package/src/commands/policy.ts +1 -1
  346. package/src/commands/presence.ts +2 -2
  347. package/src/commands/sync.ts +3 -3
  348. package/src/commands/tunnel.ts +256 -38
  349. package/src/commands/web-fetch.ts +1 -1
  350. package/src/commands/web.ts +56 -1
  351. package/src/commands/work.ts +50 -35
  352. package/src/commands/workflow.ts +43 -34
  353. package/src/core/{harnesses → adapters}/attest-projection.ts +2 -2
  354. package/src/core/{harnesses → adapters}/attest.ts +27 -27
  355. package/src/core/{harnesses → adapters}/attestation.ts +41 -41
  356. package/src/core/{harnesses → adapters}/bench.ts +34 -43
  357. package/src/core/adapters/index.ts +56 -0
  358. package/src/core/{harnesses → adapters}/profiles.ts +16 -16
  359. package/src/core/{harnesses → adapters}/registry.ts +23 -23
  360. package/src/core/{harnesses → adapters}/types.ts +23 -23
  361. package/src/core/agents/canonical-emit.ts +16 -43
  362. package/src/core/agents/cli-emit.ts +1 -1
  363. package/src/core/agents/cli.ts +30 -28
  364. package/src/core/agents/codex-replay.ts +6 -6
  365. package/src/core/agents/coord-bin.ts +92 -0
  366. package/src/core/agents/coord-client.ts +302 -78
  367. package/src/core/agents/events/consume.ts +1 -1
  368. package/src/core/agents/events/emit.ts +7 -6
  369. package/src/core/agents/paths.ts +7 -11
  370. package/src/core/agents/render/prompt-context.ts +107 -31
  371. package/src/core/agents/render/session-context.ts +6 -6
  372. package/src/core/agents/rules/claim-conflict.ts +4 -7
  373. package/src/core/agents/rules/commit-conflict.ts +103 -22
  374. package/src/core/agents/rules/stop-hook.ts +33 -17
  375. package/src/core/agents/rules/verdict.ts +13 -0
  376. package/src/core/agents/session-events.ts +4 -4
  377. package/src/core/agents/state/council.ts +1 -1
  378. package/src/core/agents/state/heartbeat-projector.ts +16 -12
  379. package/src/core/agents/state/heartbeat-writer.ts +12 -12
  380. package/src/core/agents/state/{scratch.ts → journal.ts} +12 -12
  381. package/src/core/agents/state/pidmap.ts +130 -15
  382. package/src/core/agents/state/proc-start.ts +208 -0
  383. package/src/core/agents/state/shell-mutation.ts +1 -1
  384. package/src/core/agents/state/stale-sweep.ts +7 -7
  385. package/src/core/artifacts/index.ts +557 -0
  386. package/src/core/config.ts +30 -2
  387. package/src/core/context/index.ts +15 -15
  388. package/src/core/governor/adapter-spread.ts +82 -0
  389. package/src/core/governor/index.ts +91 -0
  390. package/src/core/governor/plan-api.ts +115 -0
  391. package/src/core/{supervisor → governor}/plan-read.ts +112 -97
  392. package/src/core/{supervisor → governor}/plan-types.ts +59 -56
  393. package/src/core/{supervisor → governor}/planning.ts +223 -192
  394. package/src/core/governor/read.ts +59 -0
  395. package/src/core/{supervisor → governor}/runner.ts +39 -39
  396. package/src/core/{supervisor → governor}/service-read.ts +22 -22
  397. package/src/core/{supervisor → governor}/service.ts +117 -119
  398. package/src/core/{supervisor → governor}/state.ts +325 -167
  399. package/src/core/hooks/adapter/detect.ts +30 -0
  400. package/src/core/hooks/{harness → adapter}/events.ts +16 -14
  401. package/src/core/hooks/{harness → adapter}/output.ts +31 -23
  402. package/src/core/hooks/{harness → adapter}/parse.ts +5 -5
  403. package/src/core/hooks/{harness → adapter}/wiring.ts +21 -21
  404. package/src/core/hooks/cli.ts +197 -173
  405. package/src/core/hooks/effects/image-capture.ts +6 -6
  406. package/src/core/hooks/effects/index.ts +19 -19
  407. package/src/core/hooks/events/emit.ts +3 -3
  408. package/src/core/hooks/events/rotate.ts +1 -1
  409. package/src/core/hooks/events/schema.ts +15 -7
  410. package/src/core/hooks/guard-path.ts +2 -2
  411. package/src/core/hooks/index.ts +1 -1
  412. package/src/core/hooks/resolve/anchor.ts +63 -8
  413. package/src/core/hooks/resolve/coord-root.ts +18 -40
  414. package/src/core/hooks/resolve/intent.ts +1 -1
  415. package/src/core/hooks/resolve/owner.ts +11 -5
  416. package/src/core/{scratch → journal}/index.ts +53 -53
  417. package/src/core/policy/evaluate.ts +8 -8
  418. package/src/core/policy/types.ts +3 -3
  419. package/src/core/work/state.ts +65 -23
  420. package/src/core/workflow/adapters.ts +33 -0
  421. package/src/core/workflow/approvals.ts +7 -7
  422. package/src/core/workflow/billing.ts +12 -12
  423. package/src/core/workflow/child-env.ts +13 -4
  424. package/src/core/workflow/engine.ts +155 -90
  425. package/src/core/workflow/evidence-preflight.ts +165 -0
  426. package/src/core/workflow/index.ts +3 -3
  427. package/src/core/workflow/proof.ts +60 -50
  428. package/src/core/workflow/run-state.ts +7 -7
  429. package/src/core/workflow/sandbox-projection.ts +16 -16
  430. package/src/core/workflow/spawn-claude.ts +13 -10
  431. package/src/core/workflow/spawn-codex.ts +13 -10
  432. package/src/core/workflow/spawn-cursor.ts +13 -10
  433. package/src/core/workflow/spawn-failure.ts +1 -1
  434. package/src/core/workflow/specialists.ts +2 -2
  435. package/src/core/workflow/{journal.ts → transcript.ts} +16 -16
  436. package/src/core/workflow/types.ts +108 -51
  437. package/src/core/workflow/validate.ts +1 -1
  438. package/src/core/workflow/workspaces/cancellation.ts +2 -2
  439. package/src/core/workflow/workspaces/cleanup.ts +2 -2
  440. package/src/core/workflow/workspaces/execution.ts +6 -6
  441. package/src/core/workflow/workspaces/inspect.ts +14 -11
  442. package/src/core/workflow/workspaces/integration.ts +18 -14
  443. package/src/core/workflow/workspaces/lifecycle.ts +10 -10
  444. package/src/core/workflow/workspaces/local-git.ts +47 -5
  445. package/src/core/workflow/workspaces/recovery.ts +3 -3
  446. package/src/core/workflow/workspaces/state.ts +4 -3
  447. package/src/core/workflow/workspaces/types.ts +1 -1
  448. package/src/lib/browser/asserts.ts +177 -0
  449. package/src/lib/browser/client.ts +189 -14
  450. package/src/lib/browser/content-checks.ts +571 -0
  451. package/src/lib/browser/critique.ts +231 -0
  452. package/src/lib/browser/geometry.ts +297 -1
  453. package/src/lib/browser/index.ts +34 -0
  454. package/src/lib/claude-desktop.ts +4 -1
  455. package/src/lib/context/index.ts +11 -1
  456. package/src/lib/council/index.ts +9 -9
  457. package/src/lib/identities/assume.ts +7 -7
  458. package/src/lib/instructions/apply.ts +87 -25
  459. package/src/lib/instructions/host-addendum.ts +126 -0
  460. package/src/lib/instructions/templates.ts +44 -15
  461. package/src/lib/machine.ts +2 -2
  462. package/dist/commands/harness.d.ts +0 -12
  463. package/dist/commands/harness.d.ts.map +0 -1
  464. package/dist/commands/scratch.d.ts +0 -4
  465. package/dist/commands/scratch.d.ts.map +0 -1
  466. package/dist/commands/session.d.ts.map +0 -1
  467. package/dist/commands/session.js +0 -162
  468. package/dist/commands/supervisor.d.ts +0 -4
  469. package/dist/commands/supervisor.d.ts.map +0 -1
  470. package/dist/core/harnesses/attest-projection.d.ts.map +0 -1
  471. package/dist/core/harnesses/attest.d.ts.map +0 -1
  472. package/dist/core/harnesses/attestation.d.ts.map +0 -1
  473. package/dist/core/harnesses/bench.d.ts.map +0 -1
  474. package/dist/core/harnesses/index.d.ts +0 -13
  475. package/dist/core/harnesses/index.d.ts.map +0 -1
  476. package/dist/core/harnesses/index.js +0 -6
  477. package/dist/core/harnesses/profiles.d.ts.map +0 -1
  478. package/dist/core/harnesses/registry.d.ts +0 -15
  479. package/dist/core/harnesses/registry.d.ts.map +0 -1
  480. package/dist/core/harnesses/types.d.ts.map +0 -1
  481. package/dist/core/hooks/harness/detect.d.ts +0 -9
  482. package/dist/core/hooks/harness/events.d.ts.map +0 -1
  483. package/dist/core/hooks/harness/output.d.ts.map +0 -1
  484. package/dist/core/supervisor/index.d.ts +0 -7
  485. package/dist/core/supervisor/index.d.ts.map +0 -1
  486. package/dist/core/supervisor/index.js +0 -6
  487. package/dist/core/supervisor/plan-api.d.ts +0 -23
  488. package/dist/core/supervisor/plan-api.d.ts.map +0 -1
  489. package/dist/core/supervisor/plan-api.js +0 -50
  490. package/dist/core/supervisor/plan-read.d.ts +0 -5
  491. package/dist/core/supervisor/plan-read.d.ts.map +0 -1
  492. package/dist/core/supervisor/plan-types.d.ts.map +0 -1
  493. package/dist/core/supervisor/planning.d.ts +0 -33
  494. package/dist/core/supervisor/planning.d.ts.map +0 -1
  495. package/dist/core/supervisor/read.d.ts +0 -6
  496. package/dist/core/supervisor/read.d.ts.map +0 -1
  497. package/dist/core/supervisor/read.js +0 -4
  498. package/dist/core/supervisor/runner.d.ts +0 -37
  499. package/dist/core/supervisor/runner.d.ts.map +0 -1
  500. package/dist/core/supervisor/service-read.d.ts +0 -6
  501. package/dist/core/supervisor/service-read.d.ts.map +0 -1
  502. package/dist/core/supervisor/service.d.ts +0 -114
  503. package/dist/core/supervisor/service.d.ts.map +0 -1
  504. package/dist/core/supervisor/state.d.ts +0 -95
  505. package/dist/core/supervisor/state.d.ts.map +0 -1
  506. package/dist/core/workflow/harnesses.d.ts +0 -17
  507. package/dist/core/workflow/harnesses.d.ts.map +0 -1
  508. package/dist/core/workflow/harnesses.js +0 -21
  509. package/dist/core/workflow/journal.d.ts.map +0 -1
  510. package/src/commands/session.ts +0 -187
  511. package/src/core/harnesses/index.ts +0 -56
  512. package/src/core/hooks/harness/detect.ts +0 -30
  513. package/src/core/supervisor/index.ts +0 -89
  514. package/src/core/supervisor/plan-api.ts +0 -73
  515. package/src/core/supervisor/read.ts +0 -59
  516. package/src/core/workflow/harnesses.ts +0 -33
  517. /package/dist/core/{harnesses → adapters}/attest-projection.js +0 -0
@@ -18,20 +18,20 @@ import { hostname } from "node:os";
18
18
  import { dirname, join, resolve } from "node:path";
19
19
  import { type NormalizedPolicy, normalizePolicy, type PolicyIsolation } from "../policy/index.ts";
20
20
  import type { RunWorkItemInput } from "../work/index.ts";
21
- import { runSupervisor, type SupervisorRunReport, type SupervisorStopReason } from "./runner.ts";
22
- import { readSupervisor, type SupervisorRecord } from "./state.ts";
21
+ import { type GovernorRunReport, type GovernorStopReason, runGovernor } from "./runner.ts";
22
+ import { type GovernorRecord, readGovernor } from "./state.ts";
23
23
 
24
- export const SUPERVISOR_SERVICE_CONFIG_SCHEMA_VERSION = 1 as const;
25
- export const SUPERVISOR_SERVICE_RUNTIME_SCHEMA_VERSION = 1 as const;
26
- export const SUPERVISOR_SERVICE_STATUS_SCHEMA_VERSION = 1 as const;
24
+ export const GOVERNOR_SERVICE_CONFIG_SCHEMA_VERSION = 1 as const;
25
+ export const GOVERNOR_SERVICE_RUNTIME_SCHEMA_VERSION = 1 as const;
26
+ export const GOVERNOR_SERVICE_STATUS_SCHEMA_VERSION = 1 as const;
27
27
 
28
28
  const MAX_FILE_BYTES = 512 * 1024;
29
29
  const MAX_GOALS = 100;
30
30
  const MAX_ERROR = 2_000;
31
31
  const FOREIGN_STATUS_STALE_MS = 30_000;
32
32
 
33
- export interface SupervisorServiceEngineConfig {
34
- default_harness?: string;
33
+ export interface GovernorServiceEngineConfig {
34
+ default_adapter?: string;
35
35
  cwd?: string;
36
36
  subscription_only: boolean;
37
37
  allow_api_billing: boolean;
@@ -40,54 +40,54 @@ export interface SupervisorServiceEngineConfig {
40
40
  approval_addressee?: string;
41
41
  }
42
42
 
43
- export interface SupervisorServiceConfig {
44
- schema_version: typeof SUPERVISOR_SERVICE_CONFIG_SCHEMA_VERSION;
43
+ export interface GovernorServiceConfig {
44
+ schema_version: typeof GOVERNOR_SERVICE_CONFIG_SCHEMA_VERSION;
45
45
  goal_ids: string[];
46
46
  wake_interval_ms: number;
47
47
  heartbeat_interval_ms: number;
48
48
  error_backoff_base_ms: number;
49
49
  error_backoff_max_ms: number;
50
- engine: SupervisorServiceEngineConfig;
50
+ engine: GovernorServiceEngineConfig;
51
51
  created_at: string;
52
52
  }
53
53
 
54
- export interface ConfigureSupervisorServiceInput {
54
+ export interface ConfigureGovernorServiceInput {
55
55
  coordRoot: string;
56
56
  goalIds: readonly string[];
57
57
  wakeIntervalMs?: number;
58
58
  heartbeatIntervalMs?: number;
59
59
  errorBackoffBaseMs?: number;
60
60
  errorBackoffMaxMs?: number;
61
- engine?: Partial<SupervisorServiceEngineConfig>;
61
+ engine?: Partial<GovernorServiceEngineConfig>;
62
62
  }
63
63
 
64
- export type SupervisorServiceGoalState = "idle" | "backoff" | "awaiting_change";
64
+ export type GovernorServiceGoalState = "idle" | "backoff" | "awaiting_change";
65
65
 
66
- export interface SupervisorServiceGoalRuntime {
67
- state: SupervisorServiceGoalState;
66
+ export interface GovernorServiceGoalRuntime {
67
+ state: GovernorServiceGoalState;
68
68
  consecutive_errors: number;
69
69
  observed_fingerprint?: string;
70
70
  next_wake_at?: string;
71
71
  last_tick_at?: string;
72
- last_stop_reason?: SupervisorStopReason;
72
+ last_stop_reason?: GovernorStopReason;
73
73
  last_error?: string;
74
74
  }
75
75
 
76
- export interface SupervisorServiceRuntime {
77
- schema_version: typeof SUPERVISOR_SERVICE_RUNTIME_SCHEMA_VERSION;
76
+ export interface GovernorServiceRuntime {
77
+ schema_version: typeof GOVERNOR_SERVICE_RUNTIME_SCHEMA_VERSION;
78
78
  config_created_at: string;
79
79
  updated_at: string;
80
- goals: Record<string, SupervisorServiceGoalRuntime>;
80
+ goals: Record<string, GovernorServiceGoalRuntime>;
81
81
  }
82
82
 
83
- export type SupervisorServiceProcessState = "starting" | "running" | "stopping" | "stopped";
83
+ export type GovernorServiceProcessState = "starting" | "running" | "stopping" | "stopped";
84
84
 
85
- export interface SupervisorServiceStatusRecord {
86
- schema_version: typeof SUPERVISOR_SERVICE_STATUS_SCHEMA_VERSION;
85
+ export interface GovernorServiceStatusRecord {
86
+ schema_version: typeof GOVERNOR_SERVICE_STATUS_SCHEMA_VERSION;
87
87
  pid: number;
88
88
  host: string;
89
89
  nonce: string;
90
- state: SupervisorServiceProcessState;
90
+ state: GovernorServiceProcessState;
91
91
  started_at: string;
92
92
  heartbeat_at: string;
93
93
  config_created_at: string;
@@ -99,40 +99,40 @@ export interface SupervisorServiceStatusRecord {
99
99
  stopped_at?: string;
100
100
  }
101
101
 
102
- export interface SupervisorServiceStatus {
102
+ export interface GovernorServiceStatus {
103
103
  running: boolean;
104
104
  stale: boolean;
105
- record?: SupervisorServiceStatusRecord;
106
- config?: SupervisorServiceConfig;
107
- runtime?: SupervisorServiceRuntime;
105
+ record?: GovernorServiceStatusRecord;
106
+ config?: GovernorServiceConfig;
107
+ runtime?: GovernorServiceRuntime;
108
108
  }
109
109
 
110
- export interface SupervisorServiceSweepOutcome {
110
+ export interface GovernorServiceSweepOutcome {
111
111
  goal_id: string;
112
112
  action: "tick" | "skip" | "backoff";
113
113
  reason: string;
114
- stop_reason?: SupervisorStopReason;
114
+ stop_reason?: GovernorStopReason;
115
115
  next_wake_at?: string;
116
116
  }
117
117
 
118
- export interface SupervisorServiceSweepReport {
118
+ export interface GovernorServiceSweepReport {
119
119
  started_at: string;
120
120
  ended_at: string;
121
- outcomes: SupervisorServiceSweepOutcome[];
121
+ outcomes: GovernorServiceSweepOutcome[];
122
122
  }
123
123
 
124
- export interface RunSupervisorServiceSweepInput {
124
+ export interface RunGovernorServiceSweepInput {
125
125
  coordRoot: string;
126
- config: SupervisorServiceConfig;
126
+ config: GovernorServiceConfig;
127
127
  engine?: Omit<RunWorkItemInput["engine"], "maxAgents" | "concurrency" | "specialists">;
128
128
  actor?: string;
129
129
  now?: () => number;
130
- readGoal?: (coordRoot: string, goalId: string) => SupervisorRecord;
131
- runGoal?: (goalId: string) => Promise<SupervisorRunReport>;
130
+ readGoal?: (coordRoot: string, goalId: string) => GovernorRecord;
131
+ runGoal?: (goalId: string) => Promise<GovernorRunReport>;
132
132
  onGoalStart?: (goalId: string) => void;
133
133
  }
134
134
 
135
- export interface RunSupervisorServiceDaemonInput {
135
+ export interface RunGovernorServiceDaemonInput {
136
136
  coordRoot: string;
137
137
  engine: Omit<RunWorkItemInput["engine"], "maxAgents" | "concurrency" | "specialists">;
138
138
  actor?: string;
@@ -147,19 +147,19 @@ interface ServiceLease {
147
147
  created_at: string;
148
148
  }
149
149
 
150
- export function configureSupervisorService(
151
- input: ConfigureSupervisorServiceInput,
152
- ): SupervisorServiceConfig {
150
+ export function configureGovernorService(
151
+ input: ConfigureGovernorServiceInput,
152
+ ): GovernorServiceConfig {
153
153
  const coordRoot = resolve(input.coordRoot);
154
154
  const active = readStatusRecord(coordRoot);
155
155
  if (active && statusOwnerIsLive(active)) {
156
- throw new Error(`stop supervisor service pid ${active.pid} before changing its configuration`);
156
+ throw new Error(`stop governor service pid ${active.pid} before changing its configuration`);
157
157
  }
158
158
  const goalIds = unique(input.goalIds.map((value) => value.trim()).filter(Boolean));
159
159
  if (goalIds.length < 1 || goalIds.length > MAX_GOALS) {
160
- throw new Error(`supervisor service requires from 1 to ${MAX_GOALS} unique goal ids`);
160
+ throw new Error(`governor service requires from 1 to ${MAX_GOALS} unique goal ids`);
161
161
  }
162
- for (const goalId of goalIds) readSupervisor(coordRoot, goalId);
162
+ for (const goalId of goalIds) readGovernor(coordRoot, goalId);
163
163
  const wakeIntervalMs = positive(
164
164
  input.wakeIntervalMs ?? 5_000,
165
165
  "service wake_interval_ms",
@@ -183,8 +183,8 @@ export function configureSupervisorService(
183
183
  if (errorBackoffMaxMs < errorBackoffBaseMs) {
184
184
  throw new Error("service error_backoff_max_ms must be at least error_backoff_base_ms");
185
185
  }
186
- const config: SupervisorServiceConfig = {
187
- schema_version: SUPERVISOR_SERVICE_CONFIG_SCHEMA_VERSION,
186
+ const config: GovernorServiceConfig = {
187
+ schema_version: GOVERNOR_SERVICE_CONFIG_SCHEMA_VERSION,
188
188
  goal_ids: goalIds,
189
189
  wake_interval_ms: wakeIntervalMs,
190
190
  heartbeat_interval_ms: heartbeatIntervalMs,
@@ -197,53 +197,53 @@ export function configureSupervisorService(
197
197
  mkdirSync(dir, { recursive: true, mode: 0o700 });
198
198
  chmodSync(dir, 0o700);
199
199
  writePrivateJsonAtomic(serviceConfigPath(coordRoot), config);
200
- return readSupervisorServiceConfig(coordRoot);
200
+ return readGovernorServiceConfig(coordRoot);
201
201
  }
202
202
 
203
- export function readSupervisorServiceConfig(coordRootRaw: string): SupervisorServiceConfig {
203
+ export function readGovernorServiceConfig(coordRootRaw: string): GovernorServiceConfig {
204
204
  const coordRoot = resolve(coordRootRaw);
205
- const config = readBoundedJson<SupervisorServiceConfig>(
205
+ const config = readBoundedJson<GovernorServiceConfig>(
206
206
  serviceConfigPath(coordRoot),
207
- "supervisor service configuration",
207
+ "governor service configuration",
208
208
  );
209
209
  validateConfig(coordRoot, config);
210
210
  return config;
211
211
  }
212
212
 
213
- export function readSupervisorServiceRuntime(
213
+ export function readGovernorServiceRuntime(
214
214
  coordRootRaw: string,
215
- ): SupervisorServiceRuntime | undefined {
215
+ ): GovernorServiceRuntime | undefined {
216
216
  const coordRoot = resolve(coordRootRaw);
217
217
  if (!existsSync(serviceRuntimePath(coordRoot))) return undefined;
218
- const runtime = readBoundedJson<SupervisorServiceRuntime>(
218
+ const runtime = readBoundedJson<GovernorServiceRuntime>(
219
219
  serviceRuntimePath(coordRoot),
220
- "supervisor service runtime",
220
+ "governor service runtime",
221
221
  );
222
222
  if (
223
- runtime.schema_version !== SUPERVISOR_SERVICE_RUNTIME_SCHEMA_VERSION ||
223
+ runtime.schema_version !== GOVERNOR_SERVICE_RUNTIME_SCHEMA_VERSION ||
224
224
  !validTimestamp(runtime.config_created_at) ||
225
225
  !validTimestamp(runtime.updated_at) ||
226
226
  !runtime.goals ||
227
227
  typeof runtime.goals !== "object" ||
228
228
  Array.isArray(runtime.goals)
229
229
  ) {
230
- throw new Error("supervisor service runtime has an unsupported schema");
230
+ throw new Error("governor service runtime has an unsupported schema");
231
231
  }
232
232
  return runtime;
233
233
  }
234
234
 
235
- export function readSupervisorServiceStatus(coordRootRaw: string): SupervisorServiceStatus {
235
+ export function readGovernorServiceStatus(coordRootRaw: string): GovernorServiceStatus {
236
236
  const coordRoot = resolve(coordRootRaw);
237
237
  const record = readStatusRecord(coordRoot);
238
- let config: SupervisorServiceConfig | undefined;
239
- let runtime: SupervisorServiceRuntime | undefined;
238
+ let config: GovernorServiceConfig | undefined;
239
+ let runtime: GovernorServiceRuntime | undefined;
240
240
  try {
241
- config = readSupervisorServiceConfig(coordRoot);
241
+ config = readGovernorServiceConfig(coordRoot);
242
242
  } catch {
243
243
  // A service has no usable configuration until explicitly configured.
244
244
  }
245
245
  try {
246
- runtime = readSupervisorServiceRuntime(coordRoot);
246
+ runtime = readGovernorServiceRuntime(coordRoot);
247
247
  } catch {
248
248
  // Status remains readable when recoverable runtime state is corrupt.
249
249
  }
@@ -252,14 +252,12 @@ export function readSupervisorServiceStatus(coordRootRaw: string): SupervisorSer
252
252
  return { running, stale: !running && record.state !== "stopped", record, config, runtime };
253
253
  }
254
254
 
255
- export async function spawnSupervisorService(
256
- coordRootRaw: string,
257
- ): Promise<SupervisorServiceStatus> {
255
+ export async function spawnGovernorService(coordRootRaw: string): Promise<GovernorServiceStatus> {
258
256
  const coordRoot = resolve(coordRootRaw);
259
- readSupervisorServiceConfig(coordRoot);
260
- const current = readSupervisorServiceStatus(coordRoot);
257
+ readGovernorServiceConfig(coordRoot);
258
+ const current = readGovernorServiceStatus(coordRoot);
261
259
  if (current.running) {
262
- throw new Error(`supervisor service is already running under pid ${current.record?.pid}`);
260
+ throw new Error(`governor service is already running under pid ${current.record?.pid}`);
263
261
  }
264
262
  mkdirSync(serviceDir(coordRoot), { recursive: true, mode: 0o700 });
265
263
  const logFd = openSync(serviceLogPath(coordRoot), "a", 0o600);
@@ -270,7 +268,7 @@ export async function spawnSupervisorService(
270
268
  throw new Error(`cannot find harn executable at ${harnBin}`);
271
269
  }
272
270
  let spawnError: Error | undefined;
273
- const child = spawn(harnBin, ["supervisor", "service", "daemon"], {
271
+ const child = spawn(harnBin, ["governor", "service", "daemon"], {
274
272
  cwd: coordRoot,
275
273
  detached: true,
276
274
  stdio: ["ignore", logFd, logFd],
@@ -289,16 +287,16 @@ export async function spawnSupervisorService(
289
287
  while (Date.now() < deadline) {
290
288
  await delay(50);
291
289
  if (spawnError) throw spawnError;
292
- const status = readSupervisorServiceStatus(coordRoot);
290
+ const status = readGovernorServiceStatus(coordRoot);
293
291
  if (status.running && status.record?.pid === child.pid) return status;
294
292
  if (child.exitCode !== null) break;
295
293
  }
296
- throw new Error(`supervisor service failed to start; inspect ${serviceLogPath(coordRoot)}`);
294
+ throw new Error(`governor service failed to start; inspect ${serviceLogPath(coordRoot)}`);
297
295
  }
298
296
 
299
- export function requestSupervisorServiceStop(coordRootRaw: string): SupervisorServiceStatus {
297
+ export function requestGovernorServiceStop(coordRootRaw: string): GovernorServiceStatus {
300
298
  const coordRoot = resolve(coordRootRaw);
301
- const status = readSupervisorServiceStatus(coordRoot);
299
+ const status = readGovernorServiceStatus(coordRoot);
302
300
  if (!status.running || !status.record) return status;
303
301
  writePrivateJsonAtomic(serviceStopPath(coordRoot), {
304
302
  requested_at: new Date().toISOString(),
@@ -311,27 +309,27 @@ export function requestSupervisorServiceStop(coordRootRaw: string): SupervisorSe
311
309
  // The durable stop request remains for a racing or restarted daemon.
312
310
  }
313
311
  }
314
- return readSupervisorServiceStatus(coordRoot);
312
+ return readGovernorServiceStatus(coordRoot);
315
313
  }
316
314
 
317
- export async function runSupervisorServiceSweep(
318
- input: RunSupervisorServiceSweepInput,
319
- ): Promise<SupervisorServiceSweepReport> {
315
+ export async function runGovernorServiceSweep(
316
+ input: RunGovernorServiceSweepInput,
317
+ ): Promise<GovernorServiceSweepReport> {
320
318
  const coordRoot = resolve(input.coordRoot);
321
319
  const now = input.now ?? Date.now;
322
- const readGoal = input.readGoal ?? readSupervisor;
320
+ const readGoal = input.readGoal ?? readGovernor;
323
321
  const runtime = runtimeForConfig(coordRoot, input.config, now());
324
322
  const startedAt = new Date(now()).toISOString();
325
- const outcomes: SupervisorServiceSweepOutcome[] = [];
323
+ const outcomes: GovernorServiceSweepOutcome[] = [];
326
324
  const runGoal =
327
325
  input.runGoal ??
328
326
  (async (goalId: string) => {
329
- if (!input.engine) throw new Error("supervisor service sweep requires an engine");
330
- return await runSupervisor({
327
+ if (!input.engine) throw new Error("governor service sweep requires an engine");
328
+ return await runGovernor({
331
329
  coordRoot,
332
330
  goalId,
333
331
  mode: "tick",
334
- actor: input.actor ?? "supervisor-service",
332
+ actor: input.actor ?? "governor-service",
335
333
  engine: input.engine,
336
334
  });
337
335
  });
@@ -454,16 +452,16 @@ export async function runSupervisorServiceSweep(
454
452
  return { started_at: startedAt, ended_at: endedAt, outcomes };
455
453
  }
456
454
 
457
- export async function runSupervisorServiceDaemon(
458
- input: RunSupervisorServiceDaemonInput,
459
- ): Promise<SupervisorServiceStatusRecord> {
455
+ export async function runGovernorServiceDaemon(
456
+ input: RunGovernorServiceDaemonInput,
457
+ ): Promise<GovernorServiceStatusRecord> {
460
458
  const coordRoot = resolve(input.coordRoot);
461
- const config = readSupervisorServiceConfig(coordRoot);
459
+ const config = readGovernorServiceConfig(coordRoot);
462
460
  const release = acquireServiceLease(coordRoot);
463
461
  rmSync(serviceStopPath(coordRoot), { force: true });
464
462
  const now = new Date().toISOString();
465
- const status: SupervisorServiceStatusRecord = {
466
- schema_version: SUPERVISOR_SERVICE_STATUS_SCHEMA_VERSION,
463
+ const status: GovernorServiceStatusRecord = {
464
+ schema_version: GOVERNOR_SERVICE_STATUS_SCHEMA_VERSION,
467
465
  pid: process.pid,
468
466
  host: hostname(),
469
467
  nonce: randomUUID(),
@@ -494,19 +492,19 @@ export async function runSupervisorServiceDaemon(
494
492
  goals: config.goal_ids,
495
493
  config_created_at: config.created_at,
496
494
  });
497
- log(`supervisor service started for ${config.goal_ids.length} goal(s)`);
495
+ log(`governor service started for ${config.goal_ids.length} goal(s)`);
498
496
  const heartbeat = setInterval(() => {
499
497
  try {
500
498
  writeStatus();
501
499
  } catch (error) {
502
- log(`supervisor service heartbeat error: ${boundedError((error as Error).message)}`);
500
+ log(`governor service heartbeat error: ${boundedError((error as Error).message)}`);
503
501
  }
504
502
  }, config.heartbeat_interval_ms);
505
503
  try {
506
504
  while (!stopRequested && !existsSync(serviceStopPath(coordRoot))) {
507
505
  let sleepMs = config.wake_interval_ms;
508
506
  try {
509
- const report = await runSupervisorServiceSweep({
507
+ const report = await runGovernorServiceSweep({
510
508
  coordRoot,
511
509
  config,
512
510
  engine: input.engine,
@@ -534,7 +532,7 @@ export async function runSupervisorServiceDaemon(
534
532
  event: "service.sweep_error",
535
533
  error: status.last_error,
536
534
  });
537
- log(`supervisor service sweep error: ${status.last_error}`);
535
+ log(`governor service sweep error: ${status.last_error}`);
538
536
  }
539
537
  if (input.maxSweeps !== undefined && status.sweep_count >= input.maxSweeps) break;
540
538
  if (!stopRequested && !existsSync(serviceStopPath(coordRoot))) {
@@ -563,18 +561,18 @@ export async function runSupervisorServiceDaemon(
563
561
  return status;
564
562
  }
565
563
 
566
- export function supervisorServiceLogPath(coordRoot: string): string {
564
+ export function governorServiceLogPath(coordRoot: string): string {
567
565
  return serviceLogPath(resolve(coordRoot));
568
566
  }
569
567
 
570
568
  function runtimeForConfig(
571
569
  coordRoot: string,
572
- config: SupervisorServiceConfig,
570
+ config: GovernorServiceConfig,
573
571
  timestamp: number,
574
- ): SupervisorServiceRuntime {
575
- let existing: SupervisorServiceRuntime | undefined;
572
+ ): GovernorServiceRuntime {
573
+ let existing: GovernorServiceRuntime | undefined;
576
574
  try {
577
- existing = readSupervisorServiceRuntime(coordRoot);
575
+ existing = readGovernorServiceRuntime(coordRoot);
578
576
  } catch {
579
577
  // Runtime is a recoverable scheduling hint; durable goal state remains authoritative.
580
578
  }
@@ -585,31 +583,31 @@ function runtimeForConfig(
585
583
  return { ...existing, goals };
586
584
  }
587
585
  return {
588
- schema_version: SUPERVISOR_SERVICE_RUNTIME_SCHEMA_VERSION,
586
+ schema_version: GOVERNOR_SERVICE_RUNTIME_SCHEMA_VERSION,
589
587
  config_created_at: config.created_at,
590
588
  updated_at: new Date(timestamp).toISOString(),
591
589
  goals: Object.fromEntries(config.goal_ids.map((goalId) => [goalId, emptyGoalRuntime()])),
592
590
  };
593
591
  }
594
592
 
595
- function emptyGoalRuntime(): SupervisorServiceGoalRuntime {
593
+ function emptyGoalRuntime(): GovernorServiceGoalRuntime {
596
594
  return { state: "idle", consecutive_errors: 0 };
597
595
  }
598
596
 
599
597
  function persistRuntime(
600
598
  coordRoot: string,
601
- runtime: SupervisorServiceRuntime,
599
+ runtime: GovernorServiceRuntime,
602
600
  timestamp: number,
603
601
  ): void {
604
602
  runtime.updated_at = new Date(timestamp).toISOString();
605
603
  writePrivateJsonAtomic(serviceRuntimePath(coordRoot), runtime);
606
604
  }
607
605
 
608
- function goalFingerprint(record: SupervisorRecord): string {
606
+ function goalFingerprint(record: GovernorRecord): string {
609
607
  return projectionFingerprint(record.projection);
610
608
  }
611
609
 
612
- function projectionFingerprint(projection: SupervisorRecord["projection"]): string {
610
+ function projectionFingerprint(projection: GovernorRecord["projection"]): string {
613
611
  return JSON.stringify([
614
612
  projection.state,
615
613
  projection.next_action,
@@ -637,10 +635,10 @@ function wakeDue(value: string | undefined, now: number): boolean {
637
635
 
638
636
  function normalizeEngineConfig(
639
637
  coordRoot: string,
640
- input: Partial<SupervisorServiceEngineConfig> | undefined,
641
- ): SupervisorServiceEngineConfig {
638
+ input: Partial<GovernorServiceEngineConfig> | undefined,
639
+ ): GovernorServiceEngineConfig {
642
640
  return {
643
- default_harness: optionalBounded(input?.default_harness, "default_harness", 100),
641
+ default_adapter: optionalBounded(input?.default_adapter, "default_adapter", 100),
644
642
  cwd: input?.cwd ? resolve(input.cwd) : coordRoot,
645
643
  subscription_only: bool(input?.subscription_only ?? false, "subscription_only"),
646
644
  allow_api_billing: bool(input?.allow_api_billing ?? false, "allow_api_billing"),
@@ -650,16 +648,16 @@ function normalizeEngineConfig(
650
648
  };
651
649
  }
652
650
 
653
- function validateConfig(coordRoot: string, config: SupervisorServiceConfig): void {
651
+ function validateConfig(coordRoot: string, config: GovernorServiceConfig): void {
654
652
  if (
655
- config.schema_version !== SUPERVISOR_SERVICE_CONFIG_SCHEMA_VERSION ||
653
+ config.schema_version !== GOVERNOR_SERVICE_CONFIG_SCHEMA_VERSION ||
656
654
  !validTimestamp(config.created_at) ||
657
655
  !Array.isArray(config.goal_ids)
658
656
  ) {
659
- throw new Error("supervisor service configuration has an unsupported schema");
657
+ throw new Error("governor service configuration has an unsupported schema");
660
658
  }
661
- const normalized: SupervisorServiceConfig = {
662
- schema_version: SUPERVISOR_SERVICE_CONFIG_SCHEMA_VERSION,
659
+ const normalized: GovernorServiceConfig = {
660
+ schema_version: GOVERNOR_SERVICE_CONFIG_SCHEMA_VERSION,
663
661
  goal_ids: unique(config.goal_ids.map((goalId) => goalId.trim()).filter(Boolean)),
664
662
  wake_interval_ms: positive(
665
663
  config.wake_interval_ms,
@@ -690,7 +688,7 @@ function validateConfig(coordRoot: string, config: SupervisorServiceConfig): voi
690
688
  normalized.error_backoff_max_ms < normalized.error_backoff_base_ms ||
691
689
  JSON.stringify(normalized) !== JSON.stringify(config)
692
690
  ) {
693
- throw new Error("supervisor service configuration is not canonical");
691
+ throw new Error("governor service configuration is not canonical");
694
692
  }
695
693
  }
696
694
 
@@ -728,10 +726,10 @@ function acquireServiceLease(coordRoot: string): () => void {
728
726
  if (!acquire()) {
729
727
  const existing = readLease(path);
730
728
  if (existing && leaseOwnerIsLive(existing)) {
731
- throw new Error(`supervisor service is already running under pid ${existing.pid}`);
729
+ throw new Error(`governor service is already running under pid ${existing.pid}`);
732
730
  }
733
731
  unlinkSync(path);
734
- if (!acquire()) throw new Error("supervisor service lease raced with another process");
732
+ if (!acquire()) throw new Error("governor service lease raced with another process");
735
733
  }
736
734
  return () => {
737
735
  try {
@@ -766,15 +764,15 @@ function leaseOwnerIsLive(lease: ServiceLease): boolean {
766
764
  return pidAlive(lease.pid);
767
765
  }
768
766
 
769
- function readStatusRecord(coordRoot: string): SupervisorServiceStatusRecord | undefined {
767
+ function readStatusRecord(coordRoot: string): GovernorServiceStatusRecord | undefined {
770
768
  if (!existsSync(serviceStatusPath(coordRoot))) return undefined;
771
769
  try {
772
- const value = readBoundedJson<SupervisorServiceStatusRecord>(
770
+ const value = readBoundedJson<GovernorServiceStatusRecord>(
773
771
  serviceStatusPath(coordRoot),
774
- "supervisor service status",
772
+ "governor service status",
775
773
  );
776
774
  if (
777
- value.schema_version !== SUPERVISOR_SERVICE_STATUS_SCHEMA_VERSION ||
775
+ value.schema_version !== GOVERNOR_SERVICE_STATUS_SCHEMA_VERSION ||
778
776
  !Number.isSafeInteger(value.pid) ||
779
777
  value.pid < 1 ||
780
778
  typeof value.host !== "string" ||
@@ -790,7 +788,7 @@ function readStatusRecord(coordRoot: string): SupervisorServiceStatusRecord | un
790
788
  }
791
789
  }
792
790
 
793
- function statusOwnerIsLive(record: SupervisorServiceStatusRecord): boolean {
791
+ function statusOwnerIsLive(record: GovernorServiceStatusRecord): boolean {
794
792
  if (record.state === "stopped") return false;
795
793
  if (record.host === hostname()) return pidAlive(record.pid);
796
794
  const age = Date.now() - Date.parse(record.heartbeat_at);
@@ -817,13 +815,13 @@ function appendServiceEvent(coordRoot: string, data: Record<string, unknown>): v
817
815
  chmodSync(path, 0o600);
818
816
  }
819
817
 
820
- function renderSweepLog(report: SupervisorServiceSweepReport): string | undefined {
818
+ function renderSweepLog(report: GovernorServiceSweepReport): string | undefined {
821
819
  const counts = report.outcomes.reduce<Record<string, number>>((acc, outcome) => {
822
820
  acc[outcome.action] = (acc[outcome.action] ?? 0) + 1;
823
821
  return acc;
824
822
  }, {});
825
823
  if (!counts.tick && !counts.backoff) return undefined;
826
- return `supervisor service sweep: ${counts.tick ?? 0} tick, ${counts.skip ?? 0} skip, ${counts.backoff ?? 0} backoff`;
824
+ return `governor service sweep: ${counts.tick ?? 0} tick, ${counts.skip ?? 0} skip, ${counts.backoff ?? 0} backoff`;
827
825
  }
828
826
 
829
827
  function readBoundedJson<T>(path: string, label: string): T {
@@ -840,7 +838,7 @@ function readBoundedJson<T>(path: string, label: string): T {
840
838
  function writePrivateJsonAtomic(path: string, value: unknown): void {
841
839
  const body = `${JSON.stringify(value, null, 2)}\n`;
842
840
  if (Buffer.byteLength(body) > MAX_FILE_BYTES) {
843
- throw new Error(`supervisor service file exceeds ${MAX_FILE_BYTES} bytes`);
841
+ throw new Error(`governor service file exceeds ${MAX_FILE_BYTES} bytes`);
844
842
  }
845
843
  mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
846
844
  chmodSync(dirname(path), 0o700);
@@ -851,7 +849,7 @@ function writePrivateJsonAtomic(path: string, value: unknown): void {
851
849
  }
852
850
 
853
851
  function serviceDir(coordRoot: string): string {
854
- return join(resolve(coordRoot), ".harnery", "supervisor-service");
852
+ return join(resolve(coordRoot), ".harnery", "governor-service");
855
853
  }
856
854
 
857
855
  function serviceConfigPath(coordRoot: string): string {