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
@@ -3,21 +3,21 @@ import { appendFileSync, chmodSync, existsSync, linkSync, mkdirSync, readFileSyn
3
3
  import { dirname, join, resolve } from "node:path";
4
4
  import { createWorkItem, readWorkItem } from "../work/index.js";
5
5
  import { digestResult, readWorkflowProof, runWorkflow, WorkflowParkedError, workflowScriptDigest, } from "../workflow/index.js";
6
- import { readSupervisorPlan, readSupervisorPlanReviewReceipt, readSupervisorPlans, } from "./plan-read.js";
7
- import { SUPERVISOR_PLAN_SCHEMA_VERSION, supervisorGraphFingerprint, } from "./plan-types.js";
6
+ import { readGovernorPlan, readGovernorPlanReviewReceipt, readGovernorPlans } from "./plan-read.js";
7
+ import { GOVERNOR_PLAN_SCHEMA_VERSION, governorGraphFingerprint, } from "./plan-types.js";
8
8
  const PLAN_KEY = /^[a-z][a-z0-9-]{0,31}$/;
9
9
  const TEMPLATE_ID = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/;
10
10
  const MAX_RECORD_BYTES = 256 * 1024;
11
11
  const MAX_EVENTS_BYTES = 512 * 1024;
12
12
  const MAX_REASON = 2_000;
13
13
  const PROPOSAL_ROOT_RULE = "proposal.root names one newly proposed work key using a root-capable template; it does not preserve or repeat active_root, which is context only";
14
- export async function runSupervisorPlanner(input) {
14
+ export async function runGovernorPlanner(input) {
15
15
  const coordRoot = resolve(input.coordRoot);
16
16
  const policy = input.record.intent.replanning;
17
17
  if (!policy)
18
- throw new Error(`supervisor ${input.record.intent.id} does not allow replanning`);
19
- const history = readSupervisorPlans(coordRoot, input.record.intent.id, input.record.intent.root_work_id);
20
- const triggerFingerprint = supervisorGraphFingerprint({
18
+ throw new Error(`governor ${input.record.intent.id} does not allow replanning`);
19
+ const history = readGovernorPlans(coordRoot, input.record.intent.id, input.record.intent.root_work_id);
20
+ const triggerFingerprint = governorGraphFingerprint({
21
21
  rootWorkId: input.record.projection.root_work_id,
22
22
  generation: input.record.projection.plan_generation,
23
23
  work: input.record.work,
@@ -69,7 +69,7 @@ export async function runSupervisorPlanner(input) {
69
69
  existsSync(reviewInputPath(coordRoot, input.record.intent.id, request.id)) &&
70
70
  existsSync(join(coordRoot, ".harnery", "workflows", reviewRunId, "run.json")));
71
71
  const reviewInput = resumingReview
72
- ? readBoundedJson(reviewInputPath(coordRoot, input.record.intent.id, request.id), "supervisor plan review input")
72
+ ? readBoundedJson(reviewInputPath(coordRoot, input.record.intent.id, request.id), "governor plan review input")
73
73
  : undefined;
74
74
  const rawProposal = reviewInput
75
75
  ? reviewInput.candidate
@@ -92,7 +92,7 @@ export async function runSupervisorPlanner(input) {
92
92
  actor: input.actor,
93
93
  reason: proposal.rationale,
94
94
  });
95
- return outcome(readSupervisorPlan(coordRoot, input.record.intent.id, request.id));
95
+ return outcome(readGovernorPlan(coordRoot, input.record.intent.id, request.id));
96
96
  }
97
97
  let receipt;
98
98
  try {
@@ -117,7 +117,7 @@ export async function runSupervisorPlanner(input) {
117
117
  actor: input.actor,
118
118
  reason: bounded(`plan review requires attention: ${error.message}`, "plan review attention", MAX_REASON),
119
119
  });
120
- return outcome(readSupervisorPlan(coordRoot, input.record.intent.id, request.id));
120
+ return outcome(readGovernorPlan(coordRoot, input.record.intent.id, request.id));
121
121
  }
122
122
  return finalizeReviewedProposal({
123
123
  coordRoot,
@@ -128,7 +128,7 @@ export async function runSupervisorPlanner(input) {
128
128
  actor: input.actor,
129
129
  });
130
130
  }
131
- writeExclusiveJson(planProposalPath(coordRoot, input.record.intent.id, request.id), proposal, "supervisor plan proposal");
131
+ writeExclusiveJson(planProposalPath(coordRoot, input.record.intent.id, request.id), proposal, "governor plan proposal");
132
132
  appendPlanEvent(coordRoot, input.record.intent.id, request.id, {
133
133
  event: "plan.proposed",
134
134
  actor: input.actor,
@@ -141,18 +141,18 @@ export async function runSupervisorPlanner(input) {
141
141
  actor: input.actor,
142
142
  reason: proposal.rationale,
143
143
  });
144
- return outcome(readSupervisorPlan(coordRoot, input.record.intent.id, request.id));
144
+ return outcome(readGovernorPlan(coordRoot, input.record.intent.id, request.id));
145
145
  }
146
146
  if (policy.auto_apply) {
147
- return applySupervisorPlanProposal({
147
+ return applyGovernorPlanProposal({
148
148
  coordRoot,
149
149
  record: input.record,
150
150
  planId: request.id,
151
151
  actor: input.actor,
152
- reason: "proposal applied by frozen supervisor replanning policy",
152
+ reason: "proposal applied by frozen governor replanning policy",
153
153
  });
154
154
  }
155
- return outcome(readSupervisorPlan(coordRoot, input.record.intent.id, request.id));
155
+ return outcome(readGovernorPlan(coordRoot, input.record.intent.id, request.id));
156
156
  }
157
157
  catch (error) {
158
158
  if (proposalWritten)
@@ -164,21 +164,39 @@ export async function runSupervisorPlanner(input) {
164
164
  reason: `planning workflow parked for approval ${error.approvalId}`,
165
165
  approval_id: error.approvalId,
166
166
  });
167
- return outcome(readSupervisorPlan(coordRoot, input.record.intent.id, request.id));
167
+ return outcome(readGovernorPlan(coordRoot, input.record.intent.id, request.id));
168
168
  }
169
+ // ADR 0046: a planner workflow that never touched the plan (its binary was
170
+ // absent, or the vendor refused) writes a proof carrying run.class. Stamp it
171
+ // on the failure so the projection can stop an environment failure and bound
172
+ // consecutive upstream ones, instead of replanning an unchanged environment
173
+ // to budget exhaustion — the failure mode that burned the measured 19.
174
+ const failureClass = plannerFailureClass(coordRoot, request.workflow_run_id);
169
175
  appendPlanEvent(coordRoot, input.record.intent.id, request.id, {
170
176
  event: "plan.failed",
171
177
  actor: input.actor,
172
178
  reason: bounded(error.message, "plan failure", MAX_REASON),
179
+ ...(failureClass ? { class: failureClass } : {}),
173
180
  });
174
181
  throw error;
175
182
  }
176
183
  }
184
+ /** The failure class (ADR 0046) of a planner workflow run, read from its proof.
185
+ * Undefined when no proof was written, the proof is unreadable, or the run was
186
+ * informative about the plan — all of which default to a charged replan. */
187
+ function plannerFailureClass(coordRoot, workflowRunId) {
188
+ try {
189
+ return readWorkflowProof(coordRoot, workflowRunId).run.class;
190
+ }
191
+ catch {
192
+ return undefined;
193
+ }
194
+ }
177
195
  async function recoverReviewedPlan(input) {
178
196
  const review = input.policy.review;
179
197
  if (!review)
180
198
  return undefined;
181
- const existing = readSupervisorPlanReviewReceipt(input.coordRoot, input.record.intent.id, input.request.id);
199
+ const existing = readGovernorPlanReviewReceipt(input.coordRoot, input.record.intent.id, input.request.id);
182
200
  const receipt = existing ??
183
201
  reconstructReviewReceiptFromProof({
184
202
  coordRoot: input.coordRoot,
@@ -191,7 +209,7 @@ async function recoverReviewedPlan(input) {
191
209
  if (!receipt)
192
210
  return undefined;
193
211
  if (!existing) {
194
- writeExclusiveJson(reviewReceiptPath(input.coordRoot, input.record.intent.id, input.request.id), receipt, "supervisor plan review receipt");
212
+ writeExclusiveJson(reviewReceiptPath(input.coordRoot, input.record.intent.id, input.request.id), receipt, "governor plan review receipt");
195
213
  }
196
214
  return finalizeReviewedProposal({
197
215
  coordRoot: input.coordRoot,
@@ -203,17 +221,17 @@ async function recoverReviewedPlan(input) {
203
221
  });
204
222
  }
205
223
  async function ensurePlanReview(input) {
206
- const existing = readSupervisorPlanReviewReceipt(input.coordRoot, input.record.intent.id, input.request.id);
224
+ const existing = readGovernorPlanReviewReceipt(input.coordRoot, input.record.intent.id, input.request.id);
207
225
  if (existing)
208
226
  return existing;
209
227
  const reconstructed = reconstructReviewReceiptFromProof(input);
210
228
  if (reconstructed) {
211
- writeExclusiveJson(reviewReceiptPath(input.coordRoot, input.record.intent.id, input.request.id), reconstructed, "supervisor plan review receipt");
229
+ writeExclusiveJson(reviewReceiptPath(input.coordRoot, input.record.intent.id, input.request.id), reconstructed, "governor plan review receipt");
212
230
  return reconstructed;
213
231
  }
214
232
  const reviewScript = reviewScriptPath(input.coordRoot, input.record.intent.id, input.request.id);
215
- writeExclusiveJson(reviewInputPath(input.coordRoot, input.record.intent.id, input.request.id), { candidate: input.proposal }, "supervisor plan review input");
216
- writeExclusive(reviewScript, plannerReviewScript(input.record, input.request.id, input.proposal, input.trigger), "supervisor plan review script");
233
+ writeExclusiveJson(reviewInputPath(input.coordRoot, input.record.intent.id, input.request.id), { candidate: input.proposal }, "governor plan review input");
234
+ writeExclusive(reviewScript, plannerReviewScript(input.record, input.request.id, input.proposal, input.trigger), "governor plan review script");
217
235
  const review = input.policy.review;
218
236
  const runId = reviewWorkflowRunId(input.request.id);
219
237
  const runExists = existsSync(join(input.coordRoot, ".harnery", "workflows", runId, "run.json"));
@@ -236,7 +254,7 @@ async function ensurePlanReview(input) {
236
254
  trigger: input.trigger,
237
255
  policy: input.policy,
238
256
  });
239
- writeExclusiveJson(reviewReceiptPath(input.coordRoot, input.record.intent.id, input.request.id), receipt, "supervisor plan review receipt");
257
+ writeExclusiveJson(reviewReceiptPath(input.coordRoot, input.record.intent.id, input.request.id), receipt, "governor plan review receipt");
240
258
  return receipt;
241
259
  }
242
260
  function finalizeReviewedProposal(input) {
@@ -247,7 +265,7 @@ function finalizeReviewedProposal(input) {
247
265
  actor: input.actor,
248
266
  reason: reviewStatusReason(input.receipt),
249
267
  });
250
- return outcome(readSupervisorPlan(input.coordRoot, input.record.intent.id, input.request.id));
268
+ return outcome(readGovernorPlan(input.coordRoot, input.record.intent.id, input.request.id));
251
269
  }
252
270
  // The review authority must become durable before the proposal can become
253
271
  // visible. If the process stops after this event, the plan remains
@@ -258,22 +276,22 @@ function finalizeReviewedProposal(input) {
258
276
  actor: input.actor,
259
277
  reason: `plan review passed after ${input.receipt.rounds.length} round(s)`,
260
278
  });
261
- writeExclusiveJson(planProposalPath(input.coordRoot, input.record.intent.id, input.request.id), input.receipt.final_candidate, "supervisor plan proposal");
279
+ writeExclusiveJson(planProposalPath(input.coordRoot, input.record.intent.id, input.request.id), input.receipt.final_candidate, "governor plan proposal");
262
280
  appendPlanEventIfMissing(input.coordRoot, input.record.intent.id, input.request.id, "plan.proposed", {
263
281
  event: "plan.proposed",
264
282
  actor: input.actor,
265
283
  reason: input.receipt.final_candidate.rationale,
266
284
  });
267
285
  if (input.policy.auto_apply) {
268
- return applySupervisorPlanProposal({
286
+ return applyGovernorPlanProposal({
269
287
  coordRoot: input.coordRoot,
270
288
  record: input.record,
271
289
  planId: input.request.id,
272
290
  actor: input.actor,
273
- reason: "proposal applied by frozen supervisor replanning policy",
291
+ reason: "proposal applied by frozen governor replanning policy",
274
292
  });
275
293
  }
276
- return outcome(readSupervisorPlan(input.coordRoot, input.record.intent.id, input.request.id));
294
+ return outcome(readGovernorPlan(input.coordRoot, input.record.intent.id, input.request.id));
277
295
  }
278
296
  function reviewStatusReason(receipt) {
279
297
  if (receipt.status === "revision_exhausted") {
@@ -283,35 +301,35 @@ function reviewStatusReason(receipt) {
283
301
  return "plan review failed";
284
302
  return "plan review requires attention";
285
303
  }
286
- export function applySupervisorPlanProposal(input) {
304
+ export function applyGovernorPlanProposal(input) {
287
305
  const coordRoot = resolve(input.coordRoot);
288
306
  const policy = input.record.intent.replanning;
289
307
  if (!policy)
290
- throw new Error(`supervisor ${input.record.intent.id} does not allow replanning`);
291
- const plan = readSupervisorPlan(coordRoot, input.record.intent.id, input.planId);
308
+ throw new Error(`governor ${input.record.intent.id} does not allow replanning`);
309
+ const plan = readGovernorPlan(coordRoot, input.record.intent.id, input.planId);
292
310
  if (plan.status === "applied" || plan.status === "completed")
293
311
  return outcome(plan);
294
312
  if (plan.status !== "proposed" ||
295
313
  !plan.proposal ||
296
314
  !["apply", "complete"].includes(plan.proposal.decision)) {
297
- throw new Error(`supervisor plan ${input.planId} cannot be applied from ${plan.status}`);
315
+ throw new Error(`governor plan ${input.planId} cannot be applied from ${plan.status}`);
298
316
  }
299
317
  if (policy.review) {
300
- const receipt = readSupervisorPlanReviewReceipt(coordRoot, input.record.intent.id, input.planId);
318
+ const receipt = readGovernorPlanReviewReceipt(coordRoot, input.record.intent.id, input.planId);
301
319
  if (receipt?.status !== "passed") {
302
- throw new Error(`supervisor plan ${input.planId} has no passed review receipt`);
320
+ throw new Error(`governor plan ${input.planId} has no passed review receipt`);
303
321
  }
304
322
  if (candidateDigest(plan.proposal) !== receipt.candidate_sha256) {
305
- throw new Error(`supervisor plan ${input.planId} proposal does not match its passed review`);
323
+ throw new Error(`governor plan ${input.planId} proposal does not match its passed review`);
306
324
  }
307
325
  if (!plan.events.some((event) => event.event === "plan.reviewed")) {
308
- throw new Error(`supervisor plan ${input.planId} has no reviewed authority event`);
326
+ throw new Error(`governor plan ${input.planId} has no reviewed authority event`);
309
327
  }
310
328
  }
311
329
  if (plan.request.prior_root_work_id !== input.record.projection.root_work_id) {
312
- throw new Error(`supervisor plan ${input.planId} targets stale root ${plan.request.prior_root_work_id}`);
330
+ throw new Error(`governor plan ${input.planId} targets stale root ${plan.request.prior_root_work_id}`);
313
331
  }
314
- const history = readSupervisorPlans(coordRoot, input.record.intent.id, input.record.intent.root_work_id);
332
+ const history = readGovernorPlans(coordRoot, input.record.intent.id, input.record.intent.root_work_id);
315
333
  const proposal = normalizeProposal(input.planId, plan.proposal, input.record, history.materialized_work_ids.filter((workId) => !workId.startsWith(`${input.planId}-`)).length, plan.request.trigger ?? "recovery");
316
334
  if (proposal.decision === "complete") {
317
335
  appendPlanEvent(coordRoot, input.record.intent.id, input.planId, {
@@ -319,7 +337,7 @@ export function applySupervisorPlanProposal(input) {
319
337
  actor: input.actor,
320
338
  reason: input.reason ?? proposal.rationale,
321
339
  });
322
- return outcome(readSupervisorPlan(coordRoot, input.record.intent.id, input.planId));
340
+ return outcome(readGovernorPlan(coordRoot, input.record.intent.id, input.planId));
323
341
  }
324
342
  const ids = new Map();
325
343
  const created = [];
@@ -341,7 +359,7 @@ export function applySupervisorPlanProposal(input) {
341
359
  max_attempts: template.max_attempts,
342
360
  source: {
343
361
  kind: "workflow",
344
- ref: `supervisor:${input.record.intent.id}/plan:${input.planId}`,
362
+ ref: `governor:${input.record.intent.id}/plan:${input.planId}`,
345
363
  },
346
364
  };
347
365
  if (existsSync(join(coordRoot, ".harnery", "work", workId, "intent.json"))) {
@@ -382,74 +400,105 @@ export function applySupervisorPlanProposal(input) {
382
400
  appendPlanEvent(coordRoot, input.record.intent.id, input.planId, {
383
401
  event: "plan.applied",
384
402
  actor: input.actor,
385
- reason: input.reason ?? "supervisor plan explicitly approved",
403
+ reason: input.reason ?? "governor plan explicitly approved",
386
404
  root_work_id: rootWorkId,
387
405
  work_ids: created,
388
406
  });
389
- return outcome(readSupervisorPlan(coordRoot, input.record.intent.id, input.planId));
407
+ return outcome(readGovernorPlan(coordRoot, input.record.intent.id, input.planId));
390
408
  }
391
- export function rejectSupervisorPlanProposal(input) {
392
- const plan = readSupervisorPlan(input.coordRoot, input.goalId, input.planId);
409
+ export function rejectGovernorPlanProposal(input) {
410
+ const plan = readGovernorPlan(input.coordRoot, input.goalId, input.planId);
393
411
  if (plan.status === "rejected")
394
412
  return outcome(plan);
395
413
  if (plan.status !== "proposed") {
396
- throw new Error(`supervisor plan ${input.planId} cannot be rejected from ${plan.status}`);
414
+ throw new Error(`governor plan ${input.planId} cannot be rejected from ${plan.status}`);
397
415
  }
398
416
  appendPlanEvent(input.coordRoot, input.goalId, input.planId, {
399
417
  event: "plan.rejected",
400
418
  actor: input.actor,
401
419
  reason: input.reason,
402
420
  });
403
- return outcome(readSupervisorPlan(input.coordRoot, input.goalId, input.planId));
421
+ return outcome(readGovernorPlan(input.coordRoot, input.goalId, input.planId));
404
422
  }
405
- export function retrySupervisorPlanProposal(input) {
423
+ /** ADR 0050: reopen a mission whose completion was already accepted, so an operator
424
+ * finding on work beneath it can be dispatched through the normal governor rather
425
+ * than only by running the work item by hand.
426
+ *
427
+ * The accepted `plan.completed` event is never rewritten. This appends a superseding
428
+ * `plan.reopened` alongside it, which is why the prior completion survives as history
429
+ * and why a reader that cannot understand the new event still sees a completed plan
430
+ * rather than a silently altered one. Refuses when the mission is not complete, so a
431
+ * caller cannot use it to skip the ordinary completion path. */
432
+ export function reopenGovernorMissionPlan(input) {
433
+ const goalId = input.record.intent.id;
434
+ if (!input.record.intent.mission) {
435
+ throw new Error(`governor ${goalId} is not a mission`);
436
+ }
437
+ const history = readGovernorPlans(input.coordRoot, goalId, input.record.intent.root_work_id);
438
+ const latest = history.latest;
439
+ if (!latest) {
440
+ throw new Error(`governor ${goalId} has no plan to reopen`);
441
+ }
442
+ if (latest.status === "reopened")
443
+ return outcome(latest);
444
+ if (!history.completed || latest.status !== "completed") {
445
+ throw new Error(`governor ${goalId} mission is not complete, so there is nothing to reopen`);
446
+ }
447
+ appendPlanEvent(input.coordRoot, goalId, latest.request.id, {
448
+ event: "plan.reopened",
449
+ actor: input.actor,
450
+ reason: bounded(input.reason, "mission reopen reason", MAX_REASON),
451
+ });
452
+ return outcome(readGovernorPlan(input.coordRoot, goalId, latest.request.id));
453
+ }
454
+ export function retryGovernorPlanProposal(input) {
406
455
  const policy = input.record.intent.replanning;
407
456
  if (!policy) {
408
- throw new Error(`supervisor ${input.record.intent.id} does not allow replanning`);
457
+ throw new Error(`governor ${input.record.intent.id} does not allow replanning`);
409
458
  }
410
459
  const reason = bounded(input.reason, "plan retry reason", MAX_REASON);
411
- const history = readSupervisorPlans(input.coordRoot, input.record.intent.id, input.record.intent.root_work_id);
460
+ const history = readGovernorPlans(input.coordRoot, input.record.intent.id, input.record.intent.root_work_id);
412
461
  const latest = history.latest;
413
462
  if (!latest || latest.request.id !== input.planId) {
414
- throw new Error(`supervisor plan ${input.planId} is not the latest plan`);
463
+ throw new Error(`governor plan ${input.planId} is not the latest plan`);
415
464
  }
416
- const triggerFingerprint = supervisorGraphFingerprint({
465
+ const triggerFingerprint = governorGraphFingerprint({
417
466
  rootWorkId: history.active_root_work_id,
418
467
  generation: history.generation,
419
468
  work: input.record.work,
420
469
  });
421
470
  if (latest.request.trigger_fingerprint !== triggerFingerprint ||
422
471
  latest.request.prior_root_work_id !== history.active_root_work_id) {
423
- throw new Error(`supervisor plan ${input.planId} no longer matches the active graph`);
472
+ throw new Error(`governor plan ${input.planId} no longer matches the active graph`);
424
473
  }
425
474
  if (history.completed) {
426
- throw new Error(`supervisor ${input.record.intent.id} mission is already complete`);
475
+ throw new Error(`governor ${input.record.intent.id} mission is already complete`);
427
476
  }
428
477
  if (latest.status === "retry_requested")
429
478
  return outcome(latest);
430
479
  if (latest.status !== "attention") {
431
- throw new Error(`supervisor plan ${input.planId} cannot be retried from ${latest.status}`);
480
+ throw new Error(`governor plan ${input.planId} cannot be retried from ${latest.status}`);
432
481
  }
433
482
  if (history.plans.length >= policy.max_replans) {
434
- throw new Error(`supervisor ${input.record.intent.id} exhausted its ${policy.max_replans} replans`);
483
+ throw new Error(`governor ${input.record.intent.id} exhausted its ${policy.max_replans} replans`);
435
484
  }
436
485
  appendPlanEvent(input.coordRoot, input.record.intent.id, input.planId, {
437
486
  event: "plan.retry_requested",
438
487
  actor: input.actor,
439
488
  reason,
440
489
  });
441
- return outcome(readSupervisorPlan(input.coordRoot, input.record.intent.id, input.planId));
490
+ return outcome(readGovernorPlan(input.coordRoot, input.record.intent.id, input.planId));
442
491
  }
443
492
  function createPlanRequest(coordRoot, record, sequence, triggerFingerprint, trigger) {
444
493
  const policy = record.intent.replanning;
445
494
  if (!policy)
446
- throw new Error(`supervisor ${record.intent.id} does not allow replanning`);
495
+ throw new Error(`governor ${record.intent.id} does not allow replanning`);
447
496
  if (sequence > policy.max_replans) {
448
- throw new Error(`supervisor ${record.intent.id} exhausted its ${policy.max_replans} replans`);
497
+ throw new Error(`governor ${record.intent.id} exhausted its ${policy.max_replans} replans`);
449
498
  }
450
499
  const planId = `plan-${String(sequence).padStart(4, "0")}-${randomBytes(4).toString("hex")}`;
451
500
  const request = {
452
- schema_version: SUPERVISOR_PLAN_SCHEMA_VERSION,
501
+ schema_version: GOVERNOR_PLAN_SCHEMA_VERSION,
453
502
  id: planId,
454
503
  goal_id: record.intent.id,
455
504
  sequence,
@@ -463,14 +512,14 @@ function createPlanRequest(coordRoot, record, sequence, triggerFingerprint, trig
463
512
  const dir = planDir(coordRoot, record.intent.id, planId);
464
513
  mkdirSync(dir, { recursive: true, mode: 0o700 });
465
514
  chmodSync(dir, 0o700);
466
- writeExclusiveJson(join(dir, "request.json"), request, "supervisor plan request");
467
- writeExclusive(join(dir, "planner.mjs"), script, "supervisor planner script");
515
+ writeExclusiveJson(join(dir, "request.json"), request, "governor plan request");
516
+ writeExclusive(join(dir, "planner.mjs"), script, "governor planner script");
468
517
  return request;
469
518
  }
470
519
  function plannerScript(coordRoot, record, planId, trigger) {
471
520
  const policy = record.intent.replanning;
472
521
  if (!policy)
473
- throw new Error(`supervisor ${record.intent.id} does not allow replanning`);
522
+ throw new Error(`governor ${record.intent.id} does not allow replanning`);
474
523
  const prompt = [
475
524
  "You are producing one bounded replacement plan or milestone decision for a durable supervised goal.",
476
525
  record.intent.mission
@@ -545,7 +594,7 @@ function plannerReviewScript(record, planId, initialCandidate, trigger) {
545
594
  const policy = record.intent.replanning;
546
595
  const review = policy?.review;
547
596
  if (!policy || !review)
548
- throw new Error(`supervisor ${record.intent.id} does not review plans`);
597
+ throw new Error(`governor ${record.intent.id} does not review plans`);
549
598
  const proposalSchema = planProposalSchema(record, trigger);
550
599
  const reviewerSchema = {
551
600
  type: "object",
@@ -606,7 +655,7 @@ function plannerReviewScript(record, planId, initialCandidate, trigger) {
606
655
  " stage('Review round ' + round);",
607
656
  " const reviewersOut = await Promise.all(reviewers.map(async (specialist) => {",
608
657
  " const prompt = [",
609
- " 'Review this bounded supervisor plan candidate independently.',",
658
+ " 'Review this bounded governor plan candidate independently.',",
610
659
  " 'Return approve only when the candidate is complete, scoped, and satisfies the goal context.',",
611
660
  " 'Return revise for blocking defects. Return attention when human judgment is required.',",
612
661
  " 'Apply proposal_root_rule exactly; never require proposal.root to equal active_root.',",
@@ -626,7 +675,7 @@ function plannerReviewScript(record, planId, initialCandidate, trigger) {
626
675
  " if (round > maxRevisionRounds) break;",
627
676
  " stage('Revise round ' + round);",
628
677
  " const revisionPrompt = [",
629
- " 'Revise this supervisor plan candidate. Return a complete replacement candidate, not a patch.',",
678
+ " 'Revise this governor plan candidate. Return a complete replacement candidate, not a patch.',",
630
679
  " 'Do not merge reviewer text mechanically; satisfy the blocking findings within the frozen goal and template constraints.',",
631
680
  " 'Apply proposal_root_rule exactly; never require proposal.root to equal active_root.',",
632
681
  " 'Goal context: ' + JSON.stringify(goalContext),",
@@ -702,7 +751,7 @@ function normalizeReviewReceipt(input) {
702
751
  }
703
752
  status ??= "attention";
704
753
  return {
705
- schema_version: SUPERVISOR_PLAN_SCHEMA_VERSION,
754
+ schema_version: GOVERNOR_PLAN_SCHEMA_VERSION,
706
755
  plan_id: input.request.id,
707
756
  status,
708
757
  candidate_sha256: candidateDigest(candidate),
@@ -789,12 +838,12 @@ function reconstructReviewReceiptFromProof(input) {
789
838
  }
790
839
  function recoverReviewWorkflowResult(coordRoot, goalId, planId, proof, expectedSpecialists) {
791
840
  const inputPath = reviewInputPath(coordRoot, goalId, planId);
792
- const reviewInput = readBoundedJson(inputPath, "supervisor plan review input");
793
- const journal = readVerifiedWorkflowJournal(coordRoot, reviewWorkflowRunId(planId), proof);
841
+ const reviewInput = readBoundedJson(inputPath, "governor plan review input");
842
+ const transcript = readVerifiedWorkflowTranscript(coordRoot, reviewWorkflowRunId(planId), proof);
794
843
  const starts = new Map();
795
844
  const byRound = new Map();
796
845
  let currentCandidate = reviewInput.candidate;
797
- for (const line of journal.split("\n")) {
846
+ for (const line of transcript.split("\n")) {
798
847
  if (!line.trim())
799
848
  continue;
800
849
  const event = JSON.parse(line);
@@ -805,7 +854,7 @@ function recoverReviewWorkflowResult(coordRoot, goalId, planId, proof, expectedS
805
854
  }
806
855
  if (event.event !== "agent.end" || event.result_kind !== "json")
807
856
  continue;
808
- const round = workflowJournalRound(event.stage);
857
+ const round = workflowTranscriptRound(event.stage);
809
858
  if (!round)
810
859
  continue;
811
860
  let record = byRound.get(round.round);
@@ -816,7 +865,7 @@ function recoverReviewWorkflowResult(coordRoot, goalId, planId, proof, expectedS
816
865
  if (round.kind === "review") {
817
866
  const specialist = typeof event.id === "string" ? starts.get(event.id)?.specialist : undefined;
818
867
  if (!event.result || typeof event.result !== "object" || Array.isArray(event.result)) {
819
- throw new Error("supervisor plan review journal contains an invalid reviewer result");
868
+ throw new Error("governor plan review transcript contains an invalid reviewer result");
820
869
  }
821
870
  record.reviewers.push({
822
871
  specialist,
@@ -848,18 +897,18 @@ function recoverReviewWorkflowResult(coordRoot, goalId, planId, proof, expectedS
848
897
  result: { rounds },
849
898
  };
850
899
  }
851
- function readVerifiedWorkflowJournal(coordRoot, runId, proof) {
852
- const journalPath = join(coordRoot, ".harnery", "workflows", runId, proof.integrity.journal.path);
853
- const journal = readFileSync(journalPath, "utf8");
854
- const bytes = Buffer.byteLength(journal);
855
- if (bytes <= 0 || bytes > MAX_RECORD_BYTES || bytes !== proof.integrity.journal.bytes) {
856
- throw new Error(`supervisor plan review journal does not match proof integrity`);
857
- }
858
- const sha256 = createHash("sha256").update(journal).digest("hex");
859
- if (sha256 !== proof.integrity.journal.sha256) {
860
- throw new Error(`supervisor plan review journal does not match proof integrity`);
861
- }
862
- return journal;
900
+ function readVerifiedWorkflowTranscript(coordRoot, runId, proof) {
901
+ const transcriptPath = join(coordRoot, ".harnery", "workflows", runId, proof.integrity.transcript.path);
902
+ const transcript = readFileSync(transcriptPath, "utf8");
903
+ const bytes = Buffer.byteLength(transcript);
904
+ if (bytes <= 0 || bytes > MAX_RECORD_BYTES || bytes !== proof.integrity.transcript.bytes) {
905
+ throw new Error(`governor plan review transcript does not match proof integrity`);
906
+ }
907
+ const sha256 = createHash("sha256").update(transcript).digest("hex");
908
+ if (sha256 !== proof.integrity.transcript.sha256) {
909
+ throw new Error(`governor plan review transcript does not match proof integrity`);
910
+ }
911
+ return transcript;
863
912
  }
864
913
  function orderRecoveredReviewers(raw, expectedSpecialists) {
865
914
  if (!Array.isArray(raw) || raw.length !== expectedSpecialists.length)
@@ -903,16 +952,16 @@ function aggregateRecoveredReviewers(reviewers) {
903
952
  }
904
953
  function assertResultDigest(raw, expected, runId) {
905
954
  if (!expected) {
906
- throw new Error(`supervisor plan review proof ${runId} is missing its result digest`);
955
+ throw new Error(`governor plan review proof ${runId} is missing its result digest`);
907
956
  }
908
957
  const actual = digestResult(raw, "json");
909
958
  if (actual.kind !== expected.kind ||
910
959
  actual.sha256 !== expected.sha256 ||
911
960
  actual.bytes !== expected.bytes) {
912
- throw new Error(`supervisor plan review result does not match proof digest`);
961
+ throw new Error(`governor plan review result does not match proof digest`);
913
962
  }
914
963
  }
915
- function workflowJournalRound(stage) {
964
+ function workflowTranscriptRound(stage) {
916
965
  if (typeof stage !== "string")
917
966
  return undefined;
918
967
  const review = /^Review round ([1-9][0-9]*)$/.exec(stage);
@@ -946,7 +995,7 @@ function hasReviewRecoveryEvidence(coordRoot, goalId, planId) {
946
995
  function planProposalSchema(record, trigger) {
947
996
  const policy = record.intent.replanning;
948
997
  if (!policy)
949
- throw new Error(`supervisor ${record.intent.id} does not allow replanning`);
998
+ throw new Error(`governor ${record.intent.id} does not allow replanning`);
950
999
  const rationale = { type: "string", minLength: 1, maxLength: MAX_REASON };
951
1000
  const workItem = {
952
1001
  type: "object",
@@ -1037,7 +1086,7 @@ function planProposalSchema(record, trigger) {
1037
1086
  function normalizeProposal(planId, raw, record, previouslyApplied, trigger, preservedProposedAt) {
1038
1087
  const policy = record.intent.replanning;
1039
1088
  if (!policy)
1040
- throw new Error(`supervisor ${record.intent.id} does not allow replanning`);
1089
+ throw new Error(`governor ${record.intent.id} does not allow replanning`);
1041
1090
  if (!raw || typeof raw !== "object" || Array.isArray(raw)) {
1042
1091
  throw new Error("planner result must be an object");
1043
1092
  }
@@ -1056,7 +1105,7 @@ function normalizeProposal(planId, raw, record, previouslyApplied, trigger, pres
1056
1105
  throw new Error("mission completion may be proposed only at a milestone boundary");
1057
1106
  }
1058
1107
  return {
1059
- schema_version: SUPERVISOR_PLAN_SCHEMA_VERSION,
1108
+ schema_version: GOVERNOR_PLAN_SCHEMA_VERSION,
1060
1109
  plan_id: planId,
1061
1110
  decision,
1062
1111
  rationale,
@@ -1143,7 +1192,7 @@ function normalizeProposal(planId, raw, record, previouslyApplied, trigger, pres
1143
1192
  if (unused.length)
1144
1193
  throw new Error(`plan contains work not reachable from root: ${unused.map((item) => item.key).join(", ")}`);
1145
1194
  return {
1146
- schema_version: SUPERVISOR_PLAN_SCHEMA_VERSION,
1195
+ schema_version: GOVERNOR_PLAN_SCHEMA_VERSION,
1147
1196
  plan_id: planId,
1148
1197
  decision,
1149
1198
  rationale,
@@ -1195,9 +1244,9 @@ function planTrigger(record) {
1195
1244
  function appendPlanEvent(coordRootRaw, goalId, planId, input) {
1196
1245
  const coordRoot = resolve(coordRootRaw);
1197
1246
  const path = join(planDir(coordRoot, goalId, planId), "events.jsonl");
1198
- const current = readSupervisorPlan(coordRoot, goalId, planId).events;
1247
+ const current = readGovernorPlan(coordRoot, goalId, planId).events;
1199
1248
  const event = {
1200
- schema_version: SUPERVISOR_PLAN_SCHEMA_VERSION,
1249
+ schema_version: GOVERNOR_PLAN_SCHEMA_VERSION,
1201
1250
  plan_id: planId,
1202
1251
  seq: current.length + 1,
1203
1252
  ts: new Date().toISOString(),
@@ -1208,13 +1257,13 @@ function appendPlanEvent(coordRootRaw, goalId, planId, input) {
1208
1257
  const line = `${JSON.stringify(event)}\n`;
1209
1258
  const existing = existsSync(path) ? statSync(path).size : 0;
1210
1259
  if (existing + Buffer.byteLength(line) > MAX_EVENTS_BYTES) {
1211
- throw new Error("supervisor plan event log would exceed its byte limit");
1260
+ throw new Error("governor plan event log would exceed its byte limit");
1212
1261
  }
1213
1262
  appendFileSync(path, line, { encoding: "utf8", mode: 0o600 });
1214
1263
  chmodSync(path, 0o600);
1215
1264
  }
1216
1265
  function appendPlanEventIfMissing(coordRoot, goalId, planId, eventType, input) {
1217
- const plan = readSupervisorPlan(coordRoot, goalId, planId);
1266
+ const plan = readGovernorPlan(coordRoot, goalId, planId);
1218
1267
  if (plan.events.some((event) => event.event === eventType))
1219
1268
  return;
1220
1269
  appendPlanEvent(coordRoot, goalId, planId, input);
@@ -1262,7 +1311,7 @@ function writeExclusive(path, body, label) {
1262
1311
  }
1263
1312
  }
1264
1313
  function planDir(coordRoot, goalId, planId) {
1265
- return join(coordRoot, ".harnery", "supervisors", goalId, "plans", planId);
1314
+ return join(coordRoot, ".harnery", "governors", goalId, "plans", planId);
1266
1315
  }
1267
1316
  function planScriptPath(coordRoot, goalId, planId) {
1268
1317
  return join(planDir(coordRoot, goalId, planId), "planner.mjs");
@@ -0,0 +1,6 @@
1
+ export { readGovernorPlan, readGovernorPlanReviewReceipt, readGovernorPlans, } from "./plan-read.js";
2
+ export { GOVERNOR_PLAN_SCHEMA_VERSION, type GovernorPlanEvent, type GovernorPlanEventType, type GovernorPlanHistory, type GovernorPlanMilestone, type GovernorPlanOutcome, type GovernorPlanProposal, type GovernorPlanRecord, type GovernorPlanRequest, type GovernorPlanReviewFinding, type GovernorPlanReviewReceipt, type GovernorPlanReviewReviewer, type GovernorPlanReviewRound, type GovernorPlanReviewStatus, type GovernorPlanReviewSummary, type GovernorPlanReviewVerdict, type GovernorPlanStatus, type GovernorPlanTemplate, type GovernorPlanWorkSpec, type GovernorReplanningPolicy, MAX_GOVERNOR_PLAN_REVIEWERS, MAX_GOVERNOR_PLAN_REVISION_ROUNDS, } from "./plan-types.js";
3
+ export type { GovernorServiceConfig, GovernorServiceGoalRuntime, GovernorServiceGoalState, GovernorServiceProcessState, GovernorServiceRuntime, GovernorServiceStatus, GovernorServiceStatusRecord, } from "./service.js";
4
+ export { governorServiceLogPath, readGovernorServiceConfig, readGovernorServiceRuntime, readGovernorServiceStatus, } from "./service-read.js";
5
+ export { assertGovernorId, collectGovernorWork, GOVERNOR_INTENT_SCHEMA_VERSION, type GovernorAutomationPolicy, type GovernorIntent, type GovernorLimits, type GovernorMission, type GovernorNextAction, type GovernorProjection, type GovernorRecord, type GovernorState, listGovernors, readGovernor, } from "./state.js";
6
+ //# sourceMappingURL=read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../../src/core/governor/read.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,6BAA6B,EAC7B,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,4BAA4B,EAC5B,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC9B,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,2BAA2B,EAC3B,iCAAiC,GAClC,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,qBAAqB,EACrB,0BAA0B,EAC1B,wBAAwB,EACxB,2BAA2B,EAC3B,sBAAsB,EACtB,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,8BAA8B,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,aAAa,EACb,YAAY,GACb,MAAM,YAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { readGovernorPlan, readGovernorPlanReviewReceipt, readGovernorPlans, } from "./plan-read.js";
2
+ export { GOVERNOR_PLAN_SCHEMA_VERSION, MAX_GOVERNOR_PLAN_REVIEWERS, MAX_GOVERNOR_PLAN_REVISION_ROUNDS, } from "./plan-types.js";
3
+ export { governorServiceLogPath, readGovernorServiceConfig, readGovernorServiceRuntime, readGovernorServiceStatus, } from "./service-read.js";
4
+ export { assertGovernorId, collectGovernorWork, GOVERNOR_INTENT_SCHEMA_VERSION, listGovernors, readGovernor, } from "./state.js";