harnery 0.29.0 → 0.31.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 (512) 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 +61 -60
  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/init.d.ts +12 -12
  34. package/dist/commands/init.d.ts.map +1 -1
  35. package/dist/commands/init.js +44 -30
  36. package/dist/commands/{session.d.ts → journal.d.ts} +2 -2
  37. package/dist/commands/journal.d.ts.map +1 -0
  38. package/dist/commands/{scratch.js → journal.js} +47 -47
  39. package/dist/commands/policy.js +1 -1
  40. package/dist/commands/presence.js +2 -2
  41. package/dist/commands/sync.d.ts +1 -1
  42. package/dist/commands/sync.js +3 -3
  43. package/dist/commands/tunnel.d.ts +16 -0
  44. package/dist/commands/tunnel.d.ts.map +1 -1
  45. package/dist/commands/tunnel.js +193 -23
  46. package/dist/commands/web-fetch.js +1 -1
  47. package/dist/commands/web.d.ts +19 -0
  48. package/dist/commands/web.d.ts.map +1 -1
  49. package/dist/commands/web.js +51 -0
  50. package/dist/commands/work.d.ts +2 -1
  51. package/dist/commands/work.d.ts.map +1 -1
  52. package/dist/commands/work.js +55 -25
  53. package/dist/commands/workflow.d.ts.map +1 -1
  54. package/dist/commands/workflow.js +35 -28
  55. package/dist/core/{harnesses → adapters}/attest-projection.d.ts +2 -2
  56. package/dist/core/adapters/attest-projection.d.ts.map +1 -0
  57. package/dist/core/{harnesses → adapters}/attest.d.ts +16 -16
  58. package/dist/core/adapters/attest.d.ts.map +1 -0
  59. package/dist/core/{harnesses → adapters}/attest.js +9 -9
  60. package/dist/core/{harnesses → adapters}/attestation.d.ts +16 -16
  61. package/dist/core/adapters/attestation.d.ts.map +1 -0
  62. package/dist/core/{harnesses → adapters}/attestation.js +20 -20
  63. package/dist/core/{harnesses → adapters}/bench.d.ts +12 -12
  64. package/dist/core/adapters/bench.d.ts.map +1 -0
  65. package/dist/core/{harnesses → adapters}/bench.js +12 -12
  66. package/dist/core/adapters/index.d.ts +13 -0
  67. package/dist/core/adapters/index.d.ts.map +1 -0
  68. package/dist/core/adapters/index.js +6 -0
  69. package/dist/core/{harnesses → adapters}/profiles.d.ts +11 -11
  70. package/dist/core/adapters/profiles.d.ts.map +1 -0
  71. package/dist/core/{harnesses → adapters}/profiles.js +11 -11
  72. package/dist/core/adapters/registry.d.ts +15 -0
  73. package/dist/core/adapters/registry.d.ts.map +1 -0
  74. package/dist/core/{harnesses → adapters}/registry.js +11 -11
  75. package/dist/core/{harnesses → adapters}/types.d.ts +28 -23
  76. package/dist/core/adapters/types.d.ts.map +1 -0
  77. package/dist/core/{harnesses → adapters}/types.js +1 -1
  78. package/dist/core/agents/canonical-emit.d.ts +4 -4
  79. package/dist/core/agents/canonical-emit.js +5 -5
  80. package/dist/core/agents/cli-emit.js +1 -1
  81. package/dist/core/agents/cli.js +30 -26
  82. package/dist/core/agents/codex-replay.d.ts +1 -1
  83. package/dist/core/agents/codex-replay.js +6 -6
  84. package/dist/core/agents/coord-client.d.ts +21 -2
  85. package/dist/core/agents/coord-client.d.ts.map +1 -1
  86. package/dist/core/agents/coord-client.js +122 -27
  87. package/dist/core/agents/events/consume.d.ts +1 -1
  88. package/dist/core/agents/events/emit.d.ts +5 -6
  89. package/dist/core/agents/events/emit.d.ts.map +1 -1
  90. package/dist/core/agents/events/emit.js +2 -2
  91. package/dist/core/agents/render/prompt-context.d.ts +21 -9
  92. package/dist/core/agents/render/prompt-context.d.ts.map +1 -1
  93. package/dist/core/agents/render/prompt-context.js +82 -30
  94. package/dist/core/agents/render/session-context.d.ts +1 -1
  95. package/dist/core/agents/render/session-context.js +5 -5
  96. package/dist/core/agents/rules/claim-conflict.d.ts +2 -6
  97. package/dist/core/agents/rules/claim-conflict.d.ts.map +1 -1
  98. package/dist/core/agents/rules/claim-conflict.js +1 -1
  99. package/dist/core/agents/rules/commit-conflict.js +98 -22
  100. package/dist/core/agents/rules/stop-hook.d.ts +9 -9
  101. package/dist/core/agents/rules/stop-hook.d.ts.map +1 -1
  102. package/dist/core/agents/rules/stop-hook.js +23 -5
  103. package/dist/core/agents/rules/verdict.d.ts +14 -0
  104. package/dist/core/agents/rules/verdict.d.ts.map +1 -0
  105. package/dist/core/agents/rules/verdict.js +1 -0
  106. package/dist/core/agents/session-events.js +3 -3
  107. package/dist/core/agents/state/council.d.ts +1 -1
  108. package/dist/core/agents/state/council.js +1 -1
  109. package/dist/core/agents/state/heartbeat-projector.d.ts +3 -2
  110. package/dist/core/agents/state/heartbeat-projector.d.ts.map +1 -1
  111. package/dist/core/agents/state/heartbeat-projector.js +14 -10
  112. package/dist/core/agents/state/heartbeat-writer.d.ts +1 -1
  113. package/dist/core/agents/state/heartbeat-writer.js +12 -12
  114. package/dist/core/agents/state/{scratch.d.ts → journal.d.ts} +7 -7
  115. package/dist/core/agents/state/{scratch.d.ts.map → journal.d.ts.map} +1 -1
  116. package/dist/core/agents/state/{scratch.js → journal.js} +12 -12
  117. package/dist/core/agents/state/pidmap.d.ts +28 -4
  118. package/dist/core/agents/state/pidmap.d.ts.map +1 -1
  119. package/dist/core/agents/state/pidmap.js +130 -15
  120. package/dist/core/agents/state/proc-start.d.ts +95 -0
  121. package/dist/core/agents/state/proc-start.d.ts.map +1 -0
  122. package/dist/core/agents/state/proc-start.js +199 -0
  123. package/dist/core/agents/state/shell-mutation.d.ts +1 -1
  124. package/dist/core/agents/state/shell-mutation.js +1 -1
  125. package/dist/core/agents/state/stale-sweep.js +7 -7
  126. package/dist/core/artifacts/index.d.ts +86 -0
  127. package/dist/core/artifacts/index.d.ts.map +1 -0
  128. package/dist/core/artifacts/index.js +421 -0
  129. package/dist/core/config.d.ts +9 -2
  130. package/dist/core/config.d.ts.map +1 -1
  131. package/dist/core/config.js +26 -2
  132. package/dist/core/context/index.d.ts +12 -12
  133. package/dist/core/context/index.js +10 -10
  134. package/dist/core/governor/adapter-spread.d.ts +52 -0
  135. package/dist/core/governor/adapter-spread.d.ts.map +1 -0
  136. package/dist/core/governor/adapter-spread.js +52 -0
  137. package/dist/core/governor/index.d.ts +7 -0
  138. package/dist/core/governor/index.d.ts.map +1 -0
  139. package/dist/core/governor/index.js +6 -0
  140. package/dist/core/governor/plan-api.d.ts +38 -0
  141. package/dist/core/governor/plan-api.d.ts.map +1 -0
  142. package/dist/core/governor/plan-api.js +83 -0
  143. package/dist/core/governor/plan-read.d.ts +5 -0
  144. package/dist/core/governor/plan-read.d.ts.map +1 -0
  145. package/dist/core/{supervisor → governor}/plan-read.js +71 -51
  146. package/dist/core/governor/plan-types.d.ts +181 -0
  147. package/dist/core/governor/plan-types.d.ts.map +1 -0
  148. package/dist/core/{supervisor → governor}/plan-types.js +4 -4
  149. package/dist/core/governor/planning.d.ts +48 -0
  150. package/dist/core/governor/planning.d.ts.map +1 -0
  151. package/dist/core/{supervisor → governor}/planning.js +143 -94
  152. package/dist/core/governor/read.d.ts +6 -0
  153. package/dist/core/governor/read.d.ts.map +1 -0
  154. package/dist/core/governor/read.js +4 -0
  155. package/dist/core/governor/runner.d.ts +37 -0
  156. package/dist/core/governor/runner.d.ts.map +1 -0
  157. package/dist/core/{supervisor → governor}/runner.js +15 -15
  158. package/dist/core/governor/service-read.d.ts +6 -0
  159. package/dist/core/governor/service-read.d.ts.map +1 -0
  160. package/dist/core/{supervisor → governor}/service-read.js +12 -12
  161. package/dist/core/governor/service.d.ts +114 -0
  162. package/dist/core/governor/service.d.ts.map +1 -0
  163. package/dist/core/{supervisor → governor}/service.js +57 -57
  164. package/dist/core/governor/state.d.ts +116 -0
  165. package/dist/core/governor/state.d.ts.map +1 -0
  166. package/dist/core/{supervisor → governor}/state.js +290 -116
  167. package/dist/core/hooks/adapter/detect.d.ts +9 -0
  168. package/dist/core/hooks/{harness → adapter}/detect.d.ts.map +1 -1
  169. package/dist/core/hooks/{harness → adapter}/detect.js +8 -8
  170. package/dist/core/hooks/{harness → adapter}/events.d.ts +15 -14
  171. package/dist/core/hooks/adapter/events.d.ts.map +1 -0
  172. package/dist/core/hooks/{harness → adapter}/events.js +5 -5
  173. package/dist/core/hooks/{harness → adapter}/output.d.ts +20 -14
  174. package/dist/core/hooks/adapter/output.d.ts.map +1 -0
  175. package/dist/core/hooks/{harness → adapter}/output.js +30 -22
  176. package/dist/core/hooks/{harness → adapter}/parse.d.ts +5 -5
  177. package/dist/core/hooks/{harness → adapter}/parse.d.ts.map +1 -1
  178. package/dist/core/hooks/{harness → adapter}/parse.js +4 -4
  179. package/dist/core/hooks/{harness → adapter}/wiring.d.ts +15 -15
  180. package/dist/core/hooks/{harness → adapter}/wiring.d.ts.map +1 -1
  181. package/dist/core/hooks/{harness → adapter}/wiring.js +13 -13
  182. package/dist/core/hooks/cli.d.ts +3 -3
  183. package/dist/core/hooks/cli.js +175 -151
  184. package/dist/core/hooks/effects/image-capture.d.ts +5 -5
  185. package/dist/core/hooks/effects/image-capture.d.ts.map +1 -1
  186. package/dist/core/hooks/effects/image-capture.js +3 -3
  187. package/dist/core/hooks/effects/index.d.ts +12 -12
  188. package/dist/core/hooks/effects/index.d.ts.map +1 -1
  189. package/dist/core/hooks/effects/index.js +17 -17
  190. package/dist/core/hooks/events/emit.d.ts +2 -2
  191. package/dist/core/hooks/events/emit.d.ts.map +1 -1
  192. package/dist/core/hooks/events/emit.js +1 -1
  193. package/dist/core/hooks/events/rotate.js +1 -1
  194. package/dist/core/hooks/events/schema.d.ts +13 -5
  195. package/dist/core/hooks/events/schema.d.ts.map +1 -1
  196. package/dist/core/hooks/guard-path.d.ts +2 -2
  197. package/dist/core/hooks/guard-path.js +2 -2
  198. package/dist/core/hooks/index.d.ts +1 -1
  199. package/dist/core/hooks/index.d.ts.map +1 -1
  200. package/dist/core/hooks/resolve/anchor.d.ts +14 -5
  201. package/dist/core/hooks/resolve/anchor.d.ts.map +1 -1
  202. package/dist/core/hooks/resolve/anchor.js +64 -7
  203. package/dist/core/hooks/resolve/coord-root.d.ts +3 -3
  204. package/dist/core/hooks/resolve/coord-root.js +4 -4
  205. package/dist/core/hooks/resolve/intent.js +1 -1
  206. package/dist/core/hooks/resolve/owner.d.ts +1 -1
  207. package/dist/core/hooks/resolve/owner.d.ts.map +1 -1
  208. package/dist/core/hooks/resolve/owner.js +11 -5
  209. package/dist/core/{scratch → journal}/index.d.ts +25 -25
  210. package/dist/core/{scratch → journal}/index.d.ts.map +1 -1
  211. package/dist/core/{scratch → journal}/index.js +38 -38
  212. package/dist/core/policy/evaluate.d.ts +1 -1
  213. package/dist/core/policy/evaluate.d.ts.map +1 -1
  214. package/dist/core/policy/evaluate.js +7 -7
  215. package/dist/core/policy/types.d.ts +3 -3
  216. package/dist/core/policy/types.d.ts.map +1 -1
  217. package/dist/core/work/runner.d.ts.map +1 -1
  218. package/dist/core/work/runner.js +11 -2
  219. package/dist/core/work/state.d.ts +28 -3
  220. package/dist/core/work/state.d.ts.map +1 -1
  221. package/dist/core/work/state.js +148 -16
  222. package/dist/core/workflow/adapters.d.ts +17 -0
  223. package/dist/core/workflow/adapters.d.ts.map +1 -0
  224. package/dist/core/workflow/adapters.js +21 -0
  225. package/dist/core/workflow/approvals.js +6 -6
  226. package/dist/core/workflow/billing.d.ts +9 -9
  227. package/dist/core/workflow/billing.js +9 -9
  228. package/dist/core/workflow/child-env.d.ts +10 -2
  229. package/dist/core/workflow/child-env.d.ts.map +1 -1
  230. package/dist/core/workflow/child-env.js +12 -4
  231. package/dist/core/workflow/engine.d.ts +15 -5
  232. package/dist/core/workflow/engine.d.ts.map +1 -1
  233. package/dist/core/workflow/engine.js +151 -83
  234. package/dist/core/workflow/evidence-preflight.d.ts +24 -0
  235. package/dist/core/workflow/evidence-preflight.d.ts.map +1 -0
  236. package/dist/core/workflow/evidence-preflight.js +134 -0
  237. package/dist/core/workflow/index.d.ts +3 -2
  238. package/dist/core/workflow/index.d.ts.map +1 -1
  239. package/dist/core/workflow/index.js +2 -1
  240. package/dist/core/workflow/proof.d.ts +28 -5
  241. package/dist/core/workflow/proof.d.ts.map +1 -1
  242. package/dist/core/workflow/proof.js +77 -34
  243. package/dist/core/workflow/run-state.d.ts +1 -1
  244. package/dist/core/workflow/run-state.js +7 -7
  245. package/dist/core/workflow/sandbox-projection.d.ts +6 -6
  246. package/dist/core/workflow/sandbox-projection.d.ts.map +1 -1
  247. package/dist/core/workflow/sandbox-projection.js +11 -11
  248. package/dist/core/workflow/spawn-claude.d.ts +3 -3
  249. package/dist/core/workflow/spawn-claude.d.ts.map +1 -1
  250. package/dist/core/workflow/spawn-claude.js +28 -8
  251. package/dist/core/workflow/spawn-codex.d.ts +4 -4
  252. package/dist/core/workflow/spawn-codex.d.ts.map +1 -1
  253. package/dist/core/workflow/spawn-codex.js +26 -8
  254. package/dist/core/workflow/spawn-cursor.d.ts +4 -4
  255. package/dist/core/workflow/spawn-cursor.d.ts.map +1 -1
  256. package/dist/core/workflow/spawn-cursor.js +27 -8
  257. package/dist/core/workflow/spawn-failure.d.ts +15 -1
  258. package/dist/core/workflow/spawn-failure.d.ts.map +1 -1
  259. package/dist/core/workflow/spawn-failure.js +35 -1
  260. package/dist/core/workflow/specialists.js +2 -2
  261. package/dist/core/workflow/{journal.d.ts → transcript.d.ts} +8 -8
  262. package/dist/core/workflow/transcript.d.ts.map +1 -0
  263. package/dist/core/workflow/{journal.js → transcript.js} +14 -14
  264. package/dist/core/workflow/types.d.ts +119 -46
  265. package/dist/core/workflow/types.d.ts.map +1 -1
  266. package/dist/core/workflow/types.js +11 -1
  267. package/dist/core/workflow/validate.d.ts +1 -1
  268. package/dist/core/workflow/validate.js +1 -1
  269. package/dist/core/workflow/workspaces/cancellation.js +2 -2
  270. package/dist/core/workflow/workspaces/cleanup.js +2 -2
  271. package/dist/core/workflow/workspaces/execution.js +6 -6
  272. package/dist/core/workflow/workspaces/inspect.js +9 -9
  273. package/dist/core/workflow/workspaces/integration.js +14 -14
  274. package/dist/core/workflow/workspaces/lifecycle.d.ts +1 -1
  275. package/dist/core/workflow/workspaces/lifecycle.d.ts.map +1 -1
  276. package/dist/core/workflow/workspaces/lifecycle.js +9 -9
  277. package/dist/core/workflow/workspaces/local-git.d.ts.map +1 -1
  278. package/dist/core/workflow/workspaces/local-git.js +39 -5
  279. package/dist/core/workflow/workspaces/recovery.js +3 -3
  280. package/dist/core/workflow/workspaces/state.d.ts +1 -1
  281. package/dist/core/workflow/workspaces/state.d.ts.map +1 -1
  282. package/dist/core/workflow/workspaces/state.js +3 -3
  283. package/dist/core/workflow/workspaces/types.d.ts +1 -1
  284. package/dist/core/workflow/workspaces/types.d.ts.map +1 -1
  285. package/dist/lib/browser/asserts.d.ts +28 -0
  286. package/dist/lib/browser/asserts.d.ts.map +1 -0
  287. package/dist/lib/browser/asserts.js +152 -0
  288. package/dist/lib/browser/client.d.ts +49 -0
  289. package/dist/lib/browser/client.d.ts.map +1 -1
  290. package/dist/lib/browser/client.js +155 -14
  291. package/dist/lib/browser/content-checks.d.ts +108 -0
  292. package/dist/lib/browser/content-checks.d.ts.map +1 -0
  293. package/dist/lib/browser/content-checks.js +474 -0
  294. package/dist/lib/browser/critique.d.ts +91 -0
  295. package/dist/lib/browser/critique.d.ts.map +1 -0
  296. package/dist/lib/browser/critique.js +167 -0
  297. package/dist/lib/browser/geometry.d.ts +32 -0
  298. package/dist/lib/browser/geometry.d.ts.map +1 -1
  299. package/dist/lib/browser/geometry.js +244 -1
  300. package/dist/lib/browser/index.d.ts +4 -1
  301. package/dist/lib/browser/index.d.ts.map +1 -1
  302. package/dist/lib/browser/index.js +2 -0
  303. package/dist/lib/claude-desktop.d.ts.map +1 -1
  304. package/dist/lib/claude-desktop.js +4 -1
  305. package/dist/lib/council/index.d.ts +6 -6
  306. package/dist/lib/council/index.d.ts.map +1 -1
  307. package/dist/lib/council/index.js +8 -8
  308. package/dist/lib/exec.d.ts +7 -0
  309. package/dist/lib/exec.d.ts.map +1 -1
  310. package/dist/lib/exec.js +6 -3
  311. package/dist/lib/identities/assume.d.ts +2 -2
  312. package/dist/lib/identities/assume.js +7 -7
  313. package/dist/lib/instructions/apply.d.ts +3 -3
  314. package/dist/lib/instructions/apply.d.ts.map +1 -1
  315. package/dist/lib/instructions/apply.js +75 -27
  316. package/dist/lib/instructions/host-addendum.d.ts +54 -0
  317. package/dist/lib/instructions/host-addendum.d.ts.map +1 -0
  318. package/dist/lib/instructions/host-addendum.js +107 -0
  319. package/dist/lib/instructions/templates.d.ts +10 -3
  320. package/dist/lib/instructions/templates.d.ts.map +1 -1
  321. package/dist/lib/instructions/templates.js +41 -12
  322. package/dist/lib/machine.d.ts +2 -2
  323. package/dist/lib/machine.js +2 -2
  324. package/package.json +26 -21
  325. package/schemas/config.schema.json +26 -1
  326. package/src/commander.ts +22 -13
  327. package/src/commands/{harness.ts → adapter.ts} +46 -46
  328. package/src/commands/agents.ts +71 -64
  329. package/src/commands/artifacts.ts +168 -0
  330. package/src/commands/backup.ts +47 -33
  331. package/src/commands/browse.ts +438 -2
  332. package/src/commands/checkpoint.ts +196 -0
  333. package/src/commands/context.ts +3 -176
  334. package/src/commands/decision.ts +41 -7
  335. package/src/commands/deinit.ts +16 -16
  336. package/src/commands/doctor.ts +28 -28
  337. package/src/commands/{supervisor.ts → governor.ts} +184 -154
  338. package/src/commands/init.ts +50 -34
  339. package/src/commands/{scratch.ts → journal.ts} +60 -60
  340. package/src/commands/policy.ts +1 -1
  341. package/src/commands/presence.ts +2 -2
  342. package/src/commands/sync.ts +3 -3
  343. package/src/commands/tunnel.ts +237 -34
  344. package/src/commands/web-fetch.ts +1 -1
  345. package/src/commands/web.ts +56 -1
  346. package/src/commands/work.ts +72 -38
  347. package/src/commands/workflow.ts +43 -34
  348. package/src/core/{harnesses → adapters}/attest-projection.ts +2 -2
  349. package/src/core/{harnesses → adapters}/attest.ts +27 -27
  350. package/src/core/{harnesses → adapters}/attestation.ts +41 -41
  351. package/src/core/{harnesses → adapters}/bench.ts +34 -43
  352. package/src/core/adapters/index.ts +56 -0
  353. package/src/core/{harnesses → adapters}/profiles.ts +16 -16
  354. package/src/core/{harnesses → adapters}/registry.ts +23 -23
  355. package/src/core/{harnesses → adapters}/types.ts +28 -23
  356. package/src/core/agents/canonical-emit.ts +6 -6
  357. package/src/core/agents/cli-emit.ts +1 -1
  358. package/src/core/agents/cli.ts +30 -28
  359. package/src/core/agents/codex-replay.ts +6 -6
  360. package/src/core/agents/coord-client.ts +119 -28
  361. package/src/core/agents/events/consume.ts +1 -1
  362. package/src/core/agents/events/emit.ts +7 -6
  363. package/src/core/agents/render/prompt-context.ts +107 -31
  364. package/src/core/agents/render/session-context.ts +6 -6
  365. package/src/core/agents/rules/claim-conflict.ts +4 -7
  366. package/src/core/agents/rules/commit-conflict.ts +103 -22
  367. package/src/core/agents/rules/stop-hook.ts +33 -17
  368. package/src/core/agents/rules/verdict.ts +13 -0
  369. package/src/core/agents/session-events.ts +4 -4
  370. package/src/core/agents/state/council.ts +1 -1
  371. package/src/core/agents/state/heartbeat-projector.ts +16 -12
  372. package/src/core/agents/state/heartbeat-writer.ts +12 -12
  373. package/src/core/agents/state/{scratch.ts → journal.ts} +12 -12
  374. package/src/core/agents/state/pidmap.ts +130 -15
  375. package/src/core/agents/state/proc-start.ts +208 -0
  376. package/src/core/agents/state/shell-mutation.ts +1 -1
  377. package/src/core/agents/state/stale-sweep.ts +7 -7
  378. package/src/core/artifacts/index.ts +557 -0
  379. package/src/core/config.ts +30 -2
  380. package/src/core/context/index.ts +15 -15
  381. package/src/core/governor/adapter-spread.ts +82 -0
  382. package/src/core/governor/index.ts +91 -0
  383. package/src/core/governor/plan-api.ts +115 -0
  384. package/src/core/{supervisor → governor}/plan-read.ts +120 -96
  385. package/src/core/{supervisor → governor}/plan-types.ts +64 -50
  386. package/src/core/{supervisor → governor}/planning.ts +240 -188
  387. package/src/core/governor/read.ts +59 -0
  388. package/src/core/{supervisor → governor}/runner.ts +39 -39
  389. package/src/core/{supervisor → governor}/service-read.ts +22 -22
  390. package/src/core/{supervisor → governor}/service.ts +117 -119
  391. package/src/core/{supervisor → governor}/state.ts +389 -174
  392. package/src/core/hooks/adapter/detect.ts +30 -0
  393. package/src/core/hooks/{harness → adapter}/events.ts +16 -14
  394. package/src/core/hooks/{harness → adapter}/output.ts +31 -23
  395. package/src/core/hooks/{harness → adapter}/parse.ts +5 -5
  396. package/src/core/hooks/{harness → adapter}/wiring.ts +21 -21
  397. package/src/core/hooks/cli.ts +185 -162
  398. package/src/core/hooks/effects/image-capture.ts +6 -6
  399. package/src/core/hooks/effects/index.ts +17 -17
  400. package/src/core/hooks/events/emit.ts +3 -3
  401. package/src/core/hooks/events/rotate.ts +1 -1
  402. package/src/core/hooks/events/schema.ts +15 -7
  403. package/src/core/hooks/guard-path.ts +2 -2
  404. package/src/core/hooks/index.ts +1 -1
  405. package/src/core/hooks/resolve/anchor.ts +63 -8
  406. package/src/core/hooks/resolve/coord-root.ts +4 -4
  407. package/src/core/hooks/resolve/intent.ts +1 -1
  408. package/src/core/hooks/resolve/owner.ts +11 -5
  409. package/src/core/{scratch → journal}/index.ts +53 -53
  410. package/src/core/policy/evaluate.ts +8 -8
  411. package/src/core/policy/types.ts +3 -3
  412. package/src/core/work/runner.ts +11 -2
  413. package/src/core/work/state.ts +185 -21
  414. package/src/core/workflow/adapters.ts +33 -0
  415. package/src/core/workflow/approvals.ts +7 -7
  416. package/src/core/workflow/billing.ts +12 -12
  417. package/src/core/workflow/child-env.ts +13 -4
  418. package/src/core/workflow/engine.ts +166 -90
  419. package/src/core/workflow/evidence-preflight.ts +165 -0
  420. package/src/core/workflow/index.ts +6 -3
  421. package/src/core/workflow/proof.ts +94 -48
  422. package/src/core/workflow/run-state.ts +7 -7
  423. package/src/core/workflow/sandbox-projection.ts +16 -16
  424. package/src/core/workflow/spawn-claude.ts +34 -12
  425. package/src/core/workflow/spawn-codex.ts +30 -12
  426. package/src/core/workflow/spawn-cursor.ts +31 -12
  427. package/src/core/workflow/spawn-failure.ts +41 -1
  428. package/src/core/workflow/specialists.ts +2 -2
  429. package/src/core/workflow/{journal.ts → transcript.ts} +16 -16
  430. package/src/core/workflow/types.ts +130 -46
  431. package/src/core/workflow/validate.ts +1 -1
  432. package/src/core/workflow/workspaces/cancellation.ts +2 -2
  433. package/src/core/workflow/workspaces/cleanup.ts +2 -2
  434. package/src/core/workflow/workspaces/execution.ts +6 -6
  435. package/src/core/workflow/workspaces/inspect.ts +14 -11
  436. package/src/core/workflow/workspaces/integration.ts +18 -14
  437. package/src/core/workflow/workspaces/lifecycle.ts +10 -10
  438. package/src/core/workflow/workspaces/local-git.ts +47 -5
  439. package/src/core/workflow/workspaces/recovery.ts +3 -3
  440. package/src/core/workflow/workspaces/state.ts +4 -3
  441. package/src/core/workflow/workspaces/types.ts +1 -1
  442. package/src/lib/browser/asserts.ts +177 -0
  443. package/src/lib/browser/client.ts +189 -14
  444. package/src/lib/browser/content-checks.ts +571 -0
  445. package/src/lib/browser/critique.ts +231 -0
  446. package/src/lib/browser/geometry.ts +297 -1
  447. package/src/lib/browser/index.ts +34 -0
  448. package/src/lib/claude-desktop.ts +4 -1
  449. package/src/lib/council/index.ts +9 -9
  450. package/src/lib/exec.ts +13 -3
  451. package/src/lib/identities/assume.ts +7 -7
  452. package/src/lib/instructions/apply.ts +87 -25
  453. package/src/lib/instructions/host-addendum.ts +126 -0
  454. package/src/lib/instructions/templates.ts +44 -15
  455. package/src/lib/machine.ts +2 -2
  456. package/dist/commands/harness.d.ts +0 -12
  457. package/dist/commands/harness.d.ts.map +0 -1
  458. package/dist/commands/scratch.d.ts +0 -4
  459. package/dist/commands/scratch.d.ts.map +0 -1
  460. package/dist/commands/session.d.ts.map +0 -1
  461. package/dist/commands/session.js +0 -162
  462. package/dist/commands/supervisor.d.ts +0 -4
  463. package/dist/commands/supervisor.d.ts.map +0 -1
  464. package/dist/core/harnesses/attest-projection.d.ts.map +0 -1
  465. package/dist/core/harnesses/attest.d.ts.map +0 -1
  466. package/dist/core/harnesses/attestation.d.ts.map +0 -1
  467. package/dist/core/harnesses/bench.d.ts.map +0 -1
  468. package/dist/core/harnesses/index.d.ts +0 -13
  469. package/dist/core/harnesses/index.d.ts.map +0 -1
  470. package/dist/core/harnesses/index.js +0 -6
  471. package/dist/core/harnesses/profiles.d.ts.map +0 -1
  472. package/dist/core/harnesses/registry.d.ts +0 -15
  473. package/dist/core/harnesses/registry.d.ts.map +0 -1
  474. package/dist/core/harnesses/types.d.ts.map +0 -1
  475. package/dist/core/hooks/harness/detect.d.ts +0 -9
  476. package/dist/core/hooks/harness/events.d.ts.map +0 -1
  477. package/dist/core/hooks/harness/output.d.ts.map +0 -1
  478. package/dist/core/supervisor/index.d.ts +0 -7
  479. package/dist/core/supervisor/index.d.ts.map +0 -1
  480. package/dist/core/supervisor/index.js +0 -6
  481. package/dist/core/supervisor/plan-api.d.ts +0 -23
  482. package/dist/core/supervisor/plan-api.d.ts.map +0 -1
  483. package/dist/core/supervisor/plan-api.js +0 -50
  484. package/dist/core/supervisor/plan-read.d.ts +0 -5
  485. package/dist/core/supervisor/plan-read.d.ts.map +0 -1
  486. package/dist/core/supervisor/plan-types.d.ts +0 -170
  487. package/dist/core/supervisor/plan-types.d.ts.map +0 -1
  488. package/dist/core/supervisor/planning.d.ts +0 -33
  489. package/dist/core/supervisor/planning.d.ts.map +0 -1
  490. package/dist/core/supervisor/read.d.ts +0 -6
  491. package/dist/core/supervisor/read.d.ts.map +0 -1
  492. package/dist/core/supervisor/read.js +0 -4
  493. package/dist/core/supervisor/runner.d.ts +0 -37
  494. package/dist/core/supervisor/runner.d.ts.map +0 -1
  495. package/dist/core/supervisor/service-read.d.ts +0 -6
  496. package/dist/core/supervisor/service-read.d.ts.map +0 -1
  497. package/dist/core/supervisor/service.d.ts +0 -114
  498. package/dist/core/supervisor/service.d.ts.map +0 -1
  499. package/dist/core/supervisor/state.d.ts +0 -95
  500. package/dist/core/supervisor/state.d.ts.map +0 -1
  501. package/dist/core/workflow/harnesses.d.ts +0 -17
  502. package/dist/core/workflow/harnesses.d.ts.map +0 -1
  503. package/dist/core/workflow/harnesses.js +0 -21
  504. package/dist/core/workflow/journal.d.ts.map +0 -1
  505. package/src/commands/session.ts +0 -187
  506. package/src/core/harnesses/index.ts +0 -56
  507. package/src/core/hooks/harness/detect.ts +0 -30
  508. package/src/core/supervisor/index.ts +0 -89
  509. package/src/core/supervisor/plan-api.ts +0 -73
  510. package/src/core/supervisor/read.ts +0 -59
  511. package/src/core/workflow/harnesses.ts +0 -33
  512. /package/dist/core/{harnesses → adapters}/attest-projection.js +0 -0
@@ -4,27 +4,27 @@ import { appendFileSync, chmodSync, closeSync, existsSync, mkdirSync, openSync,
4
4
  import { hostname } from "node:os";
5
5
  import { dirname, join, resolve } from "node:path";
6
6
  import { normalizePolicy } from "../policy/index.js";
7
- import { runSupervisor } from "./runner.js";
8
- import { readSupervisor } from "./state.js";
9
- export const SUPERVISOR_SERVICE_CONFIG_SCHEMA_VERSION = 1;
10
- export const SUPERVISOR_SERVICE_RUNTIME_SCHEMA_VERSION = 1;
11
- export const SUPERVISOR_SERVICE_STATUS_SCHEMA_VERSION = 1;
7
+ import { runGovernor } from "./runner.js";
8
+ import { readGovernor } from "./state.js";
9
+ export const GOVERNOR_SERVICE_CONFIG_SCHEMA_VERSION = 1;
10
+ export const GOVERNOR_SERVICE_RUNTIME_SCHEMA_VERSION = 1;
11
+ export const GOVERNOR_SERVICE_STATUS_SCHEMA_VERSION = 1;
12
12
  const MAX_FILE_BYTES = 512 * 1024;
13
13
  const MAX_GOALS = 100;
14
14
  const MAX_ERROR = 2_000;
15
15
  const FOREIGN_STATUS_STALE_MS = 30_000;
16
- export function configureSupervisorService(input) {
16
+ export function configureGovernorService(input) {
17
17
  const coordRoot = resolve(input.coordRoot);
18
18
  const active = readStatusRecord(coordRoot);
19
19
  if (active && statusOwnerIsLive(active)) {
20
- throw new Error(`stop supervisor service pid ${active.pid} before changing its configuration`);
20
+ throw new Error(`stop governor service pid ${active.pid} before changing its configuration`);
21
21
  }
22
22
  const goalIds = unique(input.goalIds.map((value) => value.trim()).filter(Boolean));
23
23
  if (goalIds.length < 1 || goalIds.length > MAX_GOALS) {
24
- throw new Error(`supervisor service requires from 1 to ${MAX_GOALS} unique goal ids`);
24
+ throw new Error(`governor service requires from 1 to ${MAX_GOALS} unique goal ids`);
25
25
  }
26
26
  for (const goalId of goalIds)
27
- readSupervisor(coordRoot, goalId);
27
+ readGovernor(coordRoot, goalId);
28
28
  const wakeIntervalMs = positive(input.wakeIntervalMs ?? 5_000, "service wake_interval_ms", 60 * 60 * 1_000);
29
29
  const heartbeatIntervalMs = positive(input.heartbeatIntervalMs ?? 2_000, "service heartbeat_interval_ms", 60_000);
30
30
  const errorBackoffBaseMs = positive(input.errorBackoffBaseMs ?? 2_000, "service error_backoff_base_ms", 60 * 60 * 1_000);
@@ -33,7 +33,7 @@ export function configureSupervisorService(input) {
33
33
  throw new Error("service error_backoff_max_ms must be at least error_backoff_base_ms");
34
34
  }
35
35
  const config = {
36
- schema_version: SUPERVISOR_SERVICE_CONFIG_SCHEMA_VERSION,
36
+ schema_version: GOVERNOR_SERVICE_CONFIG_SCHEMA_VERSION,
37
37
  goal_ids: goalIds,
38
38
  wake_interval_ms: wakeIntervalMs,
39
39
  heartbeat_interval_ms: heartbeatIntervalMs,
@@ -46,42 +46,42 @@ export function configureSupervisorService(input) {
46
46
  mkdirSync(dir, { recursive: true, mode: 0o700 });
47
47
  chmodSync(dir, 0o700);
48
48
  writePrivateJsonAtomic(serviceConfigPath(coordRoot), config);
49
- return readSupervisorServiceConfig(coordRoot);
49
+ return readGovernorServiceConfig(coordRoot);
50
50
  }
51
- export function readSupervisorServiceConfig(coordRootRaw) {
51
+ export function readGovernorServiceConfig(coordRootRaw) {
52
52
  const coordRoot = resolve(coordRootRaw);
53
- const config = readBoundedJson(serviceConfigPath(coordRoot), "supervisor service configuration");
53
+ const config = readBoundedJson(serviceConfigPath(coordRoot), "governor service configuration");
54
54
  validateConfig(coordRoot, config);
55
55
  return config;
56
56
  }
57
- export function readSupervisorServiceRuntime(coordRootRaw) {
57
+ export function readGovernorServiceRuntime(coordRootRaw) {
58
58
  const coordRoot = resolve(coordRootRaw);
59
59
  if (!existsSync(serviceRuntimePath(coordRoot)))
60
60
  return undefined;
61
- const runtime = readBoundedJson(serviceRuntimePath(coordRoot), "supervisor service runtime");
62
- if (runtime.schema_version !== SUPERVISOR_SERVICE_RUNTIME_SCHEMA_VERSION ||
61
+ const runtime = readBoundedJson(serviceRuntimePath(coordRoot), "governor service runtime");
62
+ if (runtime.schema_version !== GOVERNOR_SERVICE_RUNTIME_SCHEMA_VERSION ||
63
63
  !validTimestamp(runtime.config_created_at) ||
64
64
  !validTimestamp(runtime.updated_at) ||
65
65
  !runtime.goals ||
66
66
  typeof runtime.goals !== "object" ||
67
67
  Array.isArray(runtime.goals)) {
68
- throw new Error("supervisor service runtime has an unsupported schema");
68
+ throw new Error("governor service runtime has an unsupported schema");
69
69
  }
70
70
  return runtime;
71
71
  }
72
- export function readSupervisorServiceStatus(coordRootRaw) {
72
+ export function readGovernorServiceStatus(coordRootRaw) {
73
73
  const coordRoot = resolve(coordRootRaw);
74
74
  const record = readStatusRecord(coordRoot);
75
75
  let config;
76
76
  let runtime;
77
77
  try {
78
- config = readSupervisorServiceConfig(coordRoot);
78
+ config = readGovernorServiceConfig(coordRoot);
79
79
  }
80
80
  catch {
81
81
  // A service has no usable configuration until explicitly configured.
82
82
  }
83
83
  try {
84
- runtime = readSupervisorServiceRuntime(coordRoot);
84
+ runtime = readGovernorServiceRuntime(coordRoot);
85
85
  }
86
86
  catch {
87
87
  // Status remains readable when recoverable runtime state is corrupt.
@@ -91,12 +91,12 @@ export function readSupervisorServiceStatus(coordRootRaw) {
91
91
  const running = statusOwnerIsLive(record);
92
92
  return { running, stale: !running && record.state !== "stopped", record, config, runtime };
93
93
  }
94
- export async function spawnSupervisorService(coordRootRaw) {
94
+ export async function spawnGovernorService(coordRootRaw) {
95
95
  const coordRoot = resolve(coordRootRaw);
96
- readSupervisorServiceConfig(coordRoot);
97
- const current = readSupervisorServiceStatus(coordRoot);
96
+ readGovernorServiceConfig(coordRoot);
97
+ const current = readGovernorServiceStatus(coordRoot);
98
98
  if (current.running) {
99
- throw new Error(`supervisor service is already running under pid ${current.record?.pid}`);
99
+ throw new Error(`governor service is already running under pid ${current.record?.pid}`);
100
100
  }
101
101
  mkdirSync(serviceDir(coordRoot), { recursive: true, mode: 0o700 });
102
102
  const logFd = openSync(serviceLogPath(coordRoot), "a", 0o600);
@@ -107,7 +107,7 @@ export async function spawnSupervisorService(coordRootRaw) {
107
107
  throw new Error(`cannot find harn executable at ${harnBin}`);
108
108
  }
109
109
  let spawnError;
110
- const child = spawn(harnBin, ["supervisor", "service", "daemon"], {
110
+ const child = spawn(harnBin, ["governor", "service", "daemon"], {
111
111
  cwd: coordRoot,
112
112
  detached: true,
113
113
  stdio: ["ignore", logFd, logFd],
@@ -127,17 +127,17 @@ export async function spawnSupervisorService(coordRootRaw) {
127
127
  await delay(50);
128
128
  if (spawnError)
129
129
  throw spawnError;
130
- const status = readSupervisorServiceStatus(coordRoot);
130
+ const status = readGovernorServiceStatus(coordRoot);
131
131
  if (status.running && status.record?.pid === child.pid)
132
132
  return status;
133
133
  if (child.exitCode !== null)
134
134
  break;
135
135
  }
136
- throw new Error(`supervisor service failed to start; inspect ${serviceLogPath(coordRoot)}`);
136
+ throw new Error(`governor service failed to start; inspect ${serviceLogPath(coordRoot)}`);
137
137
  }
138
- export function requestSupervisorServiceStop(coordRootRaw) {
138
+ export function requestGovernorServiceStop(coordRootRaw) {
139
139
  const coordRoot = resolve(coordRootRaw);
140
- const status = readSupervisorServiceStatus(coordRoot);
140
+ const status = readGovernorServiceStatus(coordRoot);
141
141
  if (!status.running || !status.record)
142
142
  return status;
143
143
  writePrivateJsonAtomic(serviceStopPath(coordRoot), {
@@ -152,24 +152,24 @@ export function requestSupervisorServiceStop(coordRootRaw) {
152
152
  // The durable stop request remains for a racing or restarted daemon.
153
153
  }
154
154
  }
155
- return readSupervisorServiceStatus(coordRoot);
155
+ return readGovernorServiceStatus(coordRoot);
156
156
  }
157
- export async function runSupervisorServiceSweep(input) {
157
+ export async function runGovernorServiceSweep(input) {
158
158
  const coordRoot = resolve(input.coordRoot);
159
159
  const now = input.now ?? Date.now;
160
- const readGoal = input.readGoal ?? readSupervisor;
160
+ const readGoal = input.readGoal ?? readGovernor;
161
161
  const runtime = runtimeForConfig(coordRoot, input.config, now());
162
162
  const startedAt = new Date(now()).toISOString();
163
163
  const outcomes = [];
164
164
  const runGoal = input.runGoal ??
165
165
  (async (goalId) => {
166
166
  if (!input.engine)
167
- throw new Error("supervisor service sweep requires an engine");
168
- return await runSupervisor({
167
+ throw new Error("governor service sweep requires an engine");
168
+ return await runGovernor({
169
169
  coordRoot,
170
170
  goalId,
171
171
  mode: "tick",
172
- actor: input.actor ?? "supervisor-service",
172
+ actor: input.actor ?? "governor-service",
173
173
  engine: input.engine,
174
174
  });
175
175
  });
@@ -287,14 +287,14 @@ export async function runSupervisorServiceSweep(input) {
287
287
  persistRuntime(coordRoot, runtime, Date.parse(endedAt));
288
288
  return { started_at: startedAt, ended_at: endedAt, outcomes };
289
289
  }
290
- export async function runSupervisorServiceDaemon(input) {
290
+ export async function runGovernorServiceDaemon(input) {
291
291
  const coordRoot = resolve(input.coordRoot);
292
- const config = readSupervisorServiceConfig(coordRoot);
292
+ const config = readGovernorServiceConfig(coordRoot);
293
293
  const release = acquireServiceLease(coordRoot);
294
294
  rmSync(serviceStopPath(coordRoot), { force: true });
295
295
  const now = new Date().toISOString();
296
296
  const status = {
297
- schema_version: SUPERVISOR_SERVICE_STATUS_SCHEMA_VERSION,
297
+ schema_version: GOVERNOR_SERVICE_STATUS_SCHEMA_VERSION,
298
298
  pid: process.pid,
299
299
  host: hostname(),
300
300
  nonce: randomUUID(),
@@ -325,20 +325,20 @@ export async function runSupervisorServiceDaemon(input) {
325
325
  goals: config.goal_ids,
326
326
  config_created_at: config.created_at,
327
327
  });
328
- log(`supervisor service started for ${config.goal_ids.length} goal(s)`);
328
+ log(`governor service started for ${config.goal_ids.length} goal(s)`);
329
329
  const heartbeat = setInterval(() => {
330
330
  try {
331
331
  writeStatus();
332
332
  }
333
333
  catch (error) {
334
- log(`supervisor service heartbeat error: ${boundedError(error.message)}`);
334
+ log(`governor service heartbeat error: ${boundedError(error.message)}`);
335
335
  }
336
336
  }, config.heartbeat_interval_ms);
337
337
  try {
338
338
  while (!stopRequested && !existsSync(serviceStopPath(coordRoot))) {
339
339
  let sleepMs = config.wake_interval_ms;
340
340
  try {
341
- const report = await runSupervisorServiceSweep({
341
+ const report = await runGovernorServiceSweep({
342
342
  coordRoot,
343
343
  config,
344
344
  engine: input.engine,
@@ -368,7 +368,7 @@ export async function runSupervisorServiceDaemon(input) {
368
368
  event: "service.sweep_error",
369
369
  error: status.last_error,
370
370
  });
371
- log(`supervisor service sweep error: ${status.last_error}`);
371
+ log(`governor service sweep error: ${status.last_error}`);
372
372
  }
373
373
  if (input.maxSweeps !== undefined && status.sweep_count >= input.maxSweeps)
374
374
  break;
@@ -395,13 +395,13 @@ export async function runSupervisorServiceDaemon(input) {
395
395
  }
396
396
  return status;
397
397
  }
398
- export function supervisorServiceLogPath(coordRoot) {
398
+ export function governorServiceLogPath(coordRoot) {
399
399
  return serviceLogPath(resolve(coordRoot));
400
400
  }
401
401
  function runtimeForConfig(coordRoot, config, timestamp) {
402
402
  let existing;
403
403
  try {
404
- existing = readSupervisorServiceRuntime(coordRoot);
404
+ existing = readGovernorServiceRuntime(coordRoot);
405
405
  }
406
406
  catch {
407
407
  // Runtime is a recoverable scheduling hint; durable goal state remains authoritative.
@@ -411,7 +411,7 @@ function runtimeForConfig(coordRoot, config, timestamp) {
411
411
  return { ...existing, goals };
412
412
  }
413
413
  return {
414
- schema_version: SUPERVISOR_SERVICE_RUNTIME_SCHEMA_VERSION,
414
+ schema_version: GOVERNOR_SERVICE_RUNTIME_SCHEMA_VERSION,
415
415
  config_created_at: config.created_at,
416
416
  updated_at: new Date(timestamp).toISOString(),
417
417
  goals: Object.fromEntries(config.goal_ids.map((goalId) => [goalId, emptyGoalRuntime()])),
@@ -453,7 +453,7 @@ function wakeDue(value, now) {
453
453
  }
454
454
  function normalizeEngineConfig(coordRoot, input) {
455
455
  return {
456
- default_harness: optionalBounded(input?.default_harness, "default_harness", 100),
456
+ default_adapter: optionalBounded(input?.default_adapter, "default_adapter", 100),
457
457
  cwd: input?.cwd ? resolve(input.cwd) : coordRoot,
458
458
  subscription_only: bool(input?.subscription_only ?? false, "subscription_only"),
459
459
  allow_api_billing: bool(input?.allow_api_billing ?? false, "allow_api_billing"),
@@ -463,13 +463,13 @@ function normalizeEngineConfig(coordRoot, input) {
463
463
  };
464
464
  }
465
465
  function validateConfig(coordRoot, config) {
466
- if (config.schema_version !== SUPERVISOR_SERVICE_CONFIG_SCHEMA_VERSION ||
466
+ if (config.schema_version !== GOVERNOR_SERVICE_CONFIG_SCHEMA_VERSION ||
467
467
  !validTimestamp(config.created_at) ||
468
468
  !Array.isArray(config.goal_ids)) {
469
- throw new Error("supervisor service configuration has an unsupported schema");
469
+ throw new Error("governor service configuration has an unsupported schema");
470
470
  }
471
471
  const normalized = {
472
- schema_version: SUPERVISOR_SERVICE_CONFIG_SCHEMA_VERSION,
472
+ schema_version: GOVERNOR_SERVICE_CONFIG_SCHEMA_VERSION,
473
473
  goal_ids: unique(config.goal_ids.map((goalId) => goalId.trim()).filter(Boolean)),
474
474
  wake_interval_ms: positive(config.wake_interval_ms, "service wake_interval_ms", 60 * 60 * 1_000),
475
475
  heartbeat_interval_ms: positive(config.heartbeat_interval_ms, "service heartbeat_interval_ms", 60_000),
@@ -482,7 +482,7 @@ function validateConfig(coordRoot, config) {
482
482
  normalized.goal_ids.length > MAX_GOALS ||
483
483
  normalized.error_backoff_max_ms < normalized.error_backoff_base_ms ||
484
484
  JSON.stringify(normalized) !== JSON.stringify(config)) {
485
- throw new Error("supervisor service configuration is not canonical");
485
+ throw new Error("governor service configuration is not canonical");
486
486
  }
487
487
  }
488
488
  function normalizeIsolation(value) {
@@ -522,11 +522,11 @@ function acquireServiceLease(coordRoot) {
522
522
  if (!acquire()) {
523
523
  const existing = readLease(path);
524
524
  if (existing && leaseOwnerIsLive(existing)) {
525
- throw new Error(`supervisor service is already running under pid ${existing.pid}`);
525
+ throw new Error(`governor service is already running under pid ${existing.pid}`);
526
526
  }
527
527
  unlinkSync(path);
528
528
  if (!acquire())
529
- throw new Error("supervisor service lease raced with another process");
529
+ throw new Error("governor service lease raced with another process");
530
530
  }
531
531
  return () => {
532
532
  try {
@@ -565,8 +565,8 @@ function readStatusRecord(coordRoot) {
565
565
  if (!existsSync(serviceStatusPath(coordRoot)))
566
566
  return undefined;
567
567
  try {
568
- const value = readBoundedJson(serviceStatusPath(coordRoot), "supervisor service status");
569
- if (value.schema_version !== SUPERVISOR_SERVICE_STATUS_SCHEMA_VERSION ||
568
+ const value = readBoundedJson(serviceStatusPath(coordRoot), "governor service status");
569
+ if (value.schema_version !== GOVERNOR_SERVICE_STATUS_SCHEMA_VERSION ||
570
570
  !Number.isSafeInteger(value.pid) ||
571
571
  value.pid < 1 ||
572
572
  typeof value.host !== "string" ||
@@ -611,7 +611,7 @@ function renderSweepLog(report) {
611
611
  }, {});
612
612
  if (!counts.tick && !counts.backoff)
613
613
  return undefined;
614
- return `supervisor service sweep: ${counts.tick ?? 0} tick, ${counts.skip ?? 0} skip, ${counts.backoff ?? 0} backoff`;
614
+ return `governor service sweep: ${counts.tick ?? 0} tick, ${counts.skip ?? 0} skip, ${counts.backoff ?? 0} backoff`;
615
615
  }
616
616
  function readBoundedJson(path, label) {
617
617
  if (!existsSync(path))
@@ -629,7 +629,7 @@ function readBoundedJson(path, label) {
629
629
  function writePrivateJsonAtomic(path, value) {
630
630
  const body = `${JSON.stringify(value, null, 2)}\n`;
631
631
  if (Buffer.byteLength(body) > MAX_FILE_BYTES) {
632
- throw new Error(`supervisor service file exceeds ${MAX_FILE_BYTES} bytes`);
632
+ throw new Error(`governor service file exceeds ${MAX_FILE_BYTES} bytes`);
633
633
  }
634
634
  mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
635
635
  chmodSync(dirname(path), 0o700);
@@ -639,7 +639,7 @@ function writePrivateJsonAtomic(path, value) {
639
639
  chmodSync(path, 0o600);
640
640
  }
641
641
  function serviceDir(coordRoot) {
642
- return join(resolve(coordRoot), ".harnery", "supervisor-service");
642
+ return join(resolve(coordRoot), ".harnery", "governor-service");
643
643
  }
644
644
  function serviceConfigPath(coordRoot) {
645
645
  return join(serviceDir(coordRoot), "config.json");
@@ -0,0 +1,116 @@
1
+ import { type WorkRecord } from "../work/read.js";
2
+ import type { WorkflowSpecialistProfile } from "../workflow/types.js";
3
+ import { type CreateGovernorReplanningInput, type GovernorPlanRecord, type GovernorReplanningPolicy } from "./plan-types.js";
4
+ export declare const GOVERNOR_INTENT_SCHEMA_VERSION: 1;
5
+ export interface GovernorLimits {
6
+ max_cycles: number;
7
+ max_runtime_ms: number;
8
+ max_parallel_work: number;
9
+ max_total_attempts: number;
10
+ max_agents_per_work: number;
11
+ agent_concurrency: number;
12
+ }
13
+ export interface GovernorAutomationPolicy {
14
+ accept_passing_proof: boolean;
15
+ resume_approved: boolean;
16
+ retry_blocked: boolean;
17
+ }
18
+ export interface GovernorMission {
19
+ objective: string;
20
+ acceptance: string[];
21
+ max_milestones: number;
22
+ }
23
+ export interface CreateGovernorMissionInput {
24
+ objective: string;
25
+ acceptance: readonly string[];
26
+ maxMilestones?: number;
27
+ }
28
+ export interface GovernorIntent {
29
+ schema_version: typeof GOVERNOR_INTENT_SCHEMA_VERSION;
30
+ id: string;
31
+ title: string;
32
+ root_work_id: string;
33
+ specialists: Record<string, WorkflowSpecialistProfile>;
34
+ limits: GovernorLimits;
35
+ automation: GovernorAutomationPolicy;
36
+ mission?: GovernorMission;
37
+ replanning?: GovernorReplanningPolicy;
38
+ created_at: string;
39
+ }
40
+ export type GovernorState = "ready" | "running" | "awaiting_attention" | "blocked" | "budget_exhausted" | "succeeded";
41
+ export type GovernorNextAction = "run" | "wait_for_run" | "resolve_approval" | "review" | "retry" | "replan" | "plan_initial" | "plan_milestone" | "review_plan" | "retry_plan" | "none";
42
+ export interface GovernorProjection {
43
+ id: string;
44
+ title: string;
45
+ root_work_id: string;
46
+ root_materialized: boolean;
47
+ state: GovernorState;
48
+ reason: string;
49
+ next_action: GovernorNextAction;
50
+ work_ids: string[];
51
+ ready_work: string[];
52
+ resumable_work: string[];
53
+ retryable_work: string[];
54
+ attention_work: string[];
55
+ /** Work stopped because a human must rule, with the docket id when the script
56
+ * named one. Empty in the ordinary case. A reader that wants to tell an
57
+ * operator what is actually waiting on them should start here. */
58
+ decision_blocked_work: Array<{
59
+ work_id: string;
60
+ decision_id?: string;
61
+ }>;
62
+ attempts_used: number;
63
+ attempts_remaining: number;
64
+ specialists: string[];
65
+ plan_generation: number;
66
+ replans_used: number;
67
+ replans_remaining: number;
68
+ milestones_completed: number;
69
+ milestones_remaining: number;
70
+ pending_plan_id?: string;
71
+ attention_plan_id?: string;
72
+ latest_plan_status?: GovernorPlanRecord["status"];
73
+ /**
74
+ * How consumed (charged) replans that did not advance the graph broke down,
75
+ * present only when at least one replan was spent by a planner run that
76
+ * produced no proposal. `reviewer_rejection` counts replans where a proposal
77
+ * was produced and independent review rejected it (review-round exhaustion,
78
+ * reviewer attention, or review failure); `planner_no_proposal` counts replans
79
+ * where the planner run produced no reviewable proposal at all. Absent when a
80
+ * goal has no planner no-proposal history, so goals that only ever reached
81
+ * review project exactly as before this field existed.
82
+ */
83
+ replan_consumption?: {
84
+ reviewer_rejection: number;
85
+ planner_no_proposal: number;
86
+ };
87
+ governed_work_ids: string[];
88
+ }
89
+ export interface GovernorRecord {
90
+ intent: GovernorIntent;
91
+ projection: GovernorProjection;
92
+ work: WorkRecord[];
93
+ plans: GovernorPlanRecord[];
94
+ }
95
+ export interface CreateGovernorInput {
96
+ coordRoot: string;
97
+ rootWorkId?: string;
98
+ specialists: Readonly<Record<string, WorkflowSpecialistProfile>>;
99
+ title?: string;
100
+ id?: string;
101
+ limits?: Partial<GovernorLimits>;
102
+ automation?: Partial<GovernorAutomationPolicy>;
103
+ mission?: CreateGovernorMissionInput;
104
+ replanning?: CreateGovernorReplanningInput;
105
+ }
106
+ export declare function createGovernor(input: CreateGovernorInput): GovernorRecord;
107
+ export declare function readGovernor(coordRoot: string, goalId: string): GovernorRecord;
108
+ /** @internal Runner seam; ignores the lease held by this governor process. */
109
+ export declare function readGovernorIgnoringLease(coordRoot: string, goalId: string): GovernorRecord;
110
+ export declare function listGovernors(coordRoot: string): GovernorRecord[];
111
+ export declare function collectGovernorWork(coordRoot: string, rootWorkId: string): WorkRecord[];
112
+ export declare function assertGovernorId(goalId: string): void;
113
+ export declare function newGovernorId(): string;
114
+ /** @internal Runner seam; one exclusive crash-recoverable governor lease. */
115
+ export declare function acquireGovernorLease(coordRoot: string, goalId: string): () => void;
116
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/core/governor/state.ts"],"names":[],"mappings":"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"}