harnery 0.30.0 → 0.31.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (517) hide show
  1. package/README.md +4 -4
  2. package/dist/commander.d.ts +8 -0
  3. package/dist/commander.d.ts.map +1 -1
  4. package/dist/commander.js +14 -13
  5. package/dist/commands/adapter.d.ts +12 -0
  6. package/dist/commands/adapter.d.ts.map +1 -0
  7. package/dist/commands/{harness.js → adapter.js} +35 -35
  8. package/dist/commands/agents.d.ts +3 -2
  9. package/dist/commands/agents.d.ts.map +1 -1
  10. package/dist/commands/agents.js +185 -74
  11. package/dist/commands/artifacts.d.ts +4 -0
  12. package/dist/commands/artifacts.d.ts.map +1 -0
  13. package/dist/commands/artifacts.js +143 -0
  14. package/dist/commands/backup.d.ts +1 -1
  15. package/dist/commands/backup.d.ts.map +1 -1
  16. package/dist/commands/backup.js +5 -2
  17. package/dist/commands/browse.d.ts.map +1 -1
  18. package/dist/commands/browse.js +310 -7
  19. package/dist/commands/checkpoint.d.ts +12 -0
  20. package/dist/commands/checkpoint.d.ts.map +1 -0
  21. package/dist/commands/checkpoint.js +162 -0
  22. package/dist/commands/context.d.ts +2 -2
  23. package/dist/commands/context.d.ts.map +1 -1
  24. package/dist/commands/context.js +3 -151
  25. package/dist/commands/decision.d.ts.map +1 -1
  26. package/dist/commands/decision.js +31 -7
  27. package/dist/commands/deinit.d.ts +2 -2
  28. package/dist/commands/deinit.js +15 -15
  29. package/dist/commands/doctor.js +23 -23
  30. package/dist/commands/governor.d.ts +4 -0
  31. package/dist/commands/governor.d.ts.map +1 -0
  32. package/dist/commands/{supervisor.js → governor.js} +133 -108
  33. package/dist/commands/grep.d.ts +1 -1
  34. package/dist/commands/grep.d.ts.map +1 -1
  35. package/dist/commands/grep.js +19 -2
  36. package/dist/commands/init.d.ts +12 -12
  37. package/dist/commands/init.d.ts.map +1 -1
  38. package/dist/commands/init.js +44 -30
  39. package/dist/commands/{session.d.ts → journal.d.ts} +2 -2
  40. package/dist/commands/journal.d.ts.map +1 -0
  41. package/dist/commands/{scratch.js → journal.js} +47 -47
  42. package/dist/commands/policy.js +1 -1
  43. package/dist/commands/presence.js +2 -2
  44. package/dist/commands/sync.d.ts +1 -1
  45. package/dist/commands/sync.js +3 -3
  46. package/dist/commands/tunnel.d.ts +16 -0
  47. package/dist/commands/tunnel.d.ts.map +1 -1
  48. package/dist/commands/tunnel.js +213 -27
  49. package/dist/commands/web-fetch.js +1 -1
  50. package/dist/commands/web.d.ts +19 -0
  51. package/dist/commands/web.d.ts.map +1 -1
  52. package/dist/commands/web.js +51 -0
  53. package/dist/commands/work.d.ts.map +1 -1
  54. package/dist/commands/work.js +38 -22
  55. package/dist/commands/workflow.d.ts.map +1 -1
  56. package/dist/commands/workflow.js +35 -28
  57. package/dist/core/{harnesses → adapters}/attest-projection.d.ts +2 -2
  58. package/dist/core/adapters/attest-projection.d.ts.map +1 -0
  59. package/dist/core/{harnesses → adapters}/attest.d.ts +16 -16
  60. package/dist/core/adapters/attest.d.ts.map +1 -0
  61. package/dist/core/{harnesses → adapters}/attest.js +9 -9
  62. package/dist/core/{harnesses → adapters}/attestation.d.ts +16 -16
  63. package/dist/core/adapters/attestation.d.ts.map +1 -0
  64. package/dist/core/{harnesses → adapters}/attestation.js +20 -20
  65. package/dist/core/{harnesses → adapters}/bench.d.ts +12 -12
  66. package/dist/core/adapters/bench.d.ts.map +1 -0
  67. package/dist/core/{harnesses → adapters}/bench.js +12 -12
  68. package/dist/core/adapters/index.d.ts +13 -0
  69. package/dist/core/adapters/index.d.ts.map +1 -0
  70. package/dist/core/adapters/index.js +6 -0
  71. package/dist/core/{harnesses → adapters}/profiles.d.ts +11 -11
  72. package/dist/core/adapters/profiles.d.ts.map +1 -0
  73. package/dist/core/{harnesses → adapters}/profiles.js +11 -11
  74. package/dist/core/adapters/registry.d.ts +15 -0
  75. package/dist/core/adapters/registry.d.ts.map +1 -0
  76. package/dist/core/{harnesses → adapters}/registry.js +11 -11
  77. package/dist/core/{harnesses → adapters}/types.d.ts +23 -23
  78. package/dist/core/adapters/types.d.ts.map +1 -0
  79. package/dist/core/{harnesses → adapters}/types.js +1 -1
  80. package/dist/core/agents/canonical-emit.d.ts +9 -14
  81. package/dist/core/agents/canonical-emit.d.ts.map +1 -1
  82. package/dist/core/agents/canonical-emit.js +15 -44
  83. package/dist/core/agents/cli-emit.js +1 -1
  84. package/dist/core/agents/cli.js +30 -26
  85. package/dist/core/agents/codex-replay.d.ts +1 -1
  86. package/dist/core/agents/codex-replay.js +6 -6
  87. package/dist/core/agents/coord-bin.d.ts +33 -0
  88. package/dist/core/agents/coord-bin.d.ts.map +1 -0
  89. package/dist/core/agents/coord-bin.js +89 -0
  90. package/dist/core/agents/coord-client.d.ts +78 -8
  91. package/dist/core/agents/coord-client.d.ts.map +1 -1
  92. package/dist/core/agents/coord-client.js +303 -75
  93. package/dist/core/agents/events/consume.d.ts +1 -1
  94. package/dist/core/agents/events/emit.d.ts +5 -6
  95. package/dist/core/agents/events/emit.d.ts.map +1 -1
  96. package/dist/core/agents/events/emit.js +2 -2
  97. package/dist/core/agents/paths.d.ts +5 -2
  98. package/dist/core/agents/paths.d.ts.map +1 -1
  99. package/dist/core/agents/paths.js +7 -13
  100. package/dist/core/agents/render/prompt-context.d.ts +21 -9
  101. package/dist/core/agents/render/prompt-context.d.ts.map +1 -1
  102. package/dist/core/agents/render/prompt-context.js +82 -30
  103. package/dist/core/agents/render/session-context.d.ts +1 -1
  104. package/dist/core/agents/render/session-context.js +5 -5
  105. package/dist/core/agents/rules/claim-conflict.d.ts +2 -6
  106. package/dist/core/agents/rules/claim-conflict.d.ts.map +1 -1
  107. package/dist/core/agents/rules/claim-conflict.js +1 -1
  108. package/dist/core/agents/rules/commit-conflict.js +98 -22
  109. package/dist/core/agents/rules/stop-hook.d.ts +9 -9
  110. package/dist/core/agents/rules/stop-hook.d.ts.map +1 -1
  111. package/dist/core/agents/rules/stop-hook.js +23 -5
  112. package/dist/core/agents/rules/verdict.d.ts +14 -0
  113. package/dist/core/agents/rules/verdict.d.ts.map +1 -0
  114. package/dist/core/agents/rules/verdict.js +1 -0
  115. package/dist/core/agents/session-events.js +3 -3
  116. package/dist/core/agents/state/council.d.ts +1 -1
  117. package/dist/core/agents/state/council.js +1 -1
  118. package/dist/core/agents/state/heartbeat-projector.d.ts +3 -2
  119. package/dist/core/agents/state/heartbeat-projector.d.ts.map +1 -1
  120. package/dist/core/agents/state/heartbeat-projector.js +14 -10
  121. package/dist/core/agents/state/heartbeat-writer.d.ts +1 -1
  122. package/dist/core/agents/state/heartbeat-writer.js +12 -12
  123. package/dist/core/agents/state/{scratch.d.ts → journal.d.ts} +7 -7
  124. package/dist/core/agents/state/{scratch.d.ts.map → journal.d.ts.map} +1 -1
  125. package/dist/core/agents/state/{scratch.js → journal.js} +12 -12
  126. package/dist/core/agents/state/pidmap.d.ts +28 -4
  127. package/dist/core/agents/state/pidmap.d.ts.map +1 -1
  128. package/dist/core/agents/state/pidmap.js +130 -15
  129. package/dist/core/agents/state/proc-start.d.ts +95 -0
  130. package/dist/core/agents/state/proc-start.d.ts.map +1 -0
  131. package/dist/core/agents/state/proc-start.js +199 -0
  132. package/dist/core/agents/state/shell-mutation.d.ts +1 -1
  133. package/dist/core/agents/state/shell-mutation.js +1 -1
  134. package/dist/core/agents/state/stale-sweep.js +7 -7
  135. package/dist/core/artifacts/index.d.ts +86 -0
  136. package/dist/core/artifacts/index.d.ts.map +1 -0
  137. package/dist/core/artifacts/index.js +421 -0
  138. package/dist/core/config.d.ts +9 -2
  139. package/dist/core/config.d.ts.map +1 -1
  140. package/dist/core/config.js +26 -2
  141. package/dist/core/context/index.d.ts +12 -12
  142. package/dist/core/context/index.js +10 -10
  143. package/dist/core/governor/adapter-spread.d.ts +52 -0
  144. package/dist/core/governor/adapter-spread.d.ts.map +1 -0
  145. package/dist/core/governor/adapter-spread.js +52 -0
  146. package/dist/core/governor/index.d.ts +7 -0
  147. package/dist/core/governor/index.d.ts.map +1 -0
  148. package/dist/core/governor/index.js +6 -0
  149. package/dist/core/governor/plan-api.d.ts +38 -0
  150. package/dist/core/governor/plan-api.d.ts.map +1 -0
  151. package/dist/core/governor/plan-api.js +83 -0
  152. package/dist/core/governor/plan-read.d.ts +5 -0
  153. package/dist/core/governor/plan-read.d.ts.map +1 -0
  154. package/dist/core/{supervisor → governor}/plan-read.js +66 -52
  155. package/dist/core/{supervisor → governor}/plan-types.d.ts +57 -56
  156. package/dist/core/governor/plan-types.d.ts.map +1 -0
  157. package/dist/core/{supervisor → governor}/plan-types.js +4 -4
  158. package/dist/core/governor/planning.d.ts +48 -0
  159. package/dist/core/governor/planning.d.ts.map +1 -0
  160. package/dist/core/{supervisor → governor}/planning.js +125 -94
  161. package/dist/core/governor/read.d.ts +6 -0
  162. package/dist/core/governor/read.d.ts.map +1 -0
  163. package/dist/core/governor/read.js +4 -0
  164. package/dist/core/governor/runner.d.ts +37 -0
  165. package/dist/core/governor/runner.d.ts.map +1 -0
  166. package/dist/core/{supervisor → governor}/runner.js +15 -15
  167. package/dist/core/governor/service-read.d.ts +6 -0
  168. package/dist/core/governor/service-read.d.ts.map +1 -0
  169. package/dist/core/{supervisor → governor}/service-read.js +12 -12
  170. package/dist/core/governor/service.d.ts +114 -0
  171. package/dist/core/governor/service.d.ts.map +1 -0
  172. package/dist/core/{supervisor → governor}/service.js +57 -57
  173. package/dist/core/governor/state.d.ts +116 -0
  174. package/dist/core/governor/state.d.ts.map +1 -0
  175. package/dist/core/{supervisor → governor}/state.js +228 -108
  176. package/dist/core/hooks/adapter/detect.d.ts +9 -0
  177. package/dist/core/hooks/{harness → adapter}/detect.d.ts.map +1 -1
  178. package/dist/core/hooks/{harness → adapter}/detect.js +8 -8
  179. package/dist/core/hooks/{harness → adapter}/events.d.ts +15 -14
  180. package/dist/core/hooks/adapter/events.d.ts.map +1 -0
  181. package/dist/core/hooks/{harness → adapter}/events.js +5 -5
  182. package/dist/core/hooks/{harness → adapter}/output.d.ts +20 -14
  183. package/dist/core/hooks/adapter/output.d.ts.map +1 -0
  184. package/dist/core/hooks/{harness → adapter}/output.js +30 -22
  185. package/dist/core/hooks/{harness → adapter}/parse.d.ts +5 -5
  186. package/dist/core/hooks/{harness → adapter}/parse.d.ts.map +1 -1
  187. package/dist/core/hooks/{harness → adapter}/parse.js +4 -4
  188. package/dist/core/hooks/{harness → adapter}/wiring.d.ts +15 -15
  189. package/dist/core/hooks/{harness → adapter}/wiring.d.ts.map +1 -1
  190. package/dist/core/hooks/{harness → adapter}/wiring.js +13 -13
  191. package/dist/core/hooks/cli.d.ts +3 -3
  192. package/dist/core/hooks/cli.js +187 -162
  193. package/dist/core/hooks/effects/image-capture.d.ts +5 -5
  194. package/dist/core/hooks/effects/image-capture.d.ts.map +1 -1
  195. package/dist/core/hooks/effects/image-capture.js +3 -3
  196. package/dist/core/hooks/effects/index.d.ts +12 -12
  197. package/dist/core/hooks/effects/index.d.ts.map +1 -1
  198. package/dist/core/hooks/effects/index.js +19 -19
  199. package/dist/core/hooks/events/emit.d.ts +2 -2
  200. package/dist/core/hooks/events/emit.d.ts.map +1 -1
  201. package/dist/core/hooks/events/emit.js +1 -1
  202. package/dist/core/hooks/events/rotate.js +1 -1
  203. package/dist/core/hooks/events/schema.d.ts +13 -5
  204. package/dist/core/hooks/events/schema.d.ts.map +1 -1
  205. package/dist/core/hooks/guard-path.d.ts +2 -2
  206. package/dist/core/hooks/guard-path.js +2 -2
  207. package/dist/core/hooks/index.d.ts +1 -1
  208. package/dist/core/hooks/index.d.ts.map +1 -1
  209. package/dist/core/hooks/resolve/anchor.d.ts +14 -5
  210. package/dist/core/hooks/resolve/anchor.d.ts.map +1 -1
  211. package/dist/core/hooks/resolve/anchor.js +64 -7
  212. package/dist/core/hooks/resolve/coord-root.d.ts +16 -11
  213. package/dist/core/hooks/resolve/coord-root.d.ts.map +1 -1
  214. package/dist/core/hooks/resolve/coord-root.js +18 -43
  215. package/dist/core/hooks/resolve/intent.js +1 -1
  216. package/dist/core/hooks/resolve/owner.d.ts +1 -1
  217. package/dist/core/hooks/resolve/owner.d.ts.map +1 -1
  218. package/dist/core/hooks/resolve/owner.js +11 -5
  219. package/dist/core/{scratch → journal}/index.d.ts +25 -25
  220. package/dist/core/{scratch → journal}/index.d.ts.map +1 -1
  221. package/dist/core/{scratch → journal}/index.js +38 -38
  222. package/dist/core/policy/evaluate.d.ts +1 -1
  223. package/dist/core/policy/evaluate.d.ts.map +1 -1
  224. package/dist/core/policy/evaluate.js +7 -7
  225. package/dist/core/policy/types.d.ts +3 -3
  226. package/dist/core/policy/types.d.ts.map +1 -1
  227. package/dist/core/work/state.d.ts +12 -4
  228. package/dist/core/work/state.d.ts.map +1 -1
  229. package/dist/core/work/state.js +50 -17
  230. package/dist/core/workflow/adapters.d.ts +17 -0
  231. package/dist/core/workflow/adapters.d.ts.map +1 -0
  232. package/dist/core/workflow/adapters.js +21 -0
  233. package/dist/core/workflow/approvals.js +6 -6
  234. package/dist/core/workflow/billing.d.ts +9 -9
  235. package/dist/core/workflow/billing.js +9 -9
  236. package/dist/core/workflow/child-env.d.ts +10 -2
  237. package/dist/core/workflow/child-env.d.ts.map +1 -1
  238. package/dist/core/workflow/child-env.js +12 -4
  239. package/dist/core/workflow/engine.d.ts +15 -5
  240. package/dist/core/workflow/engine.d.ts.map +1 -1
  241. package/dist/core/workflow/engine.js +138 -83
  242. package/dist/core/workflow/evidence-preflight.d.ts +24 -0
  243. package/dist/core/workflow/evidence-preflight.d.ts.map +1 -0
  244. package/dist/core/workflow/evidence-preflight.js +134 -0
  245. package/dist/core/workflow/index.d.ts +1 -1
  246. package/dist/core/workflow/index.d.ts.map +1 -1
  247. package/dist/core/workflow/proof.d.ts +11 -5
  248. package/dist/core/workflow/proof.d.ts.map +1 -1
  249. package/dist/core/workflow/proof.js +45 -36
  250. package/dist/core/workflow/run-state.d.ts +1 -1
  251. package/dist/core/workflow/run-state.js +7 -7
  252. package/dist/core/workflow/sandbox-projection.d.ts +6 -6
  253. package/dist/core/workflow/sandbox-projection.d.ts.map +1 -1
  254. package/dist/core/workflow/sandbox-projection.js +11 -11
  255. package/dist/core/workflow/spawn-claude.d.ts +3 -3
  256. package/dist/core/workflow/spawn-claude.d.ts.map +1 -1
  257. package/dist/core/workflow/spawn-claude.js +9 -6
  258. package/dist/core/workflow/spawn-codex.d.ts +4 -4
  259. package/dist/core/workflow/spawn-codex.d.ts.map +1 -1
  260. package/dist/core/workflow/spawn-codex.js +9 -6
  261. package/dist/core/workflow/spawn-cursor.d.ts +4 -4
  262. package/dist/core/workflow/spawn-cursor.d.ts.map +1 -1
  263. package/dist/core/workflow/spawn-cursor.js +9 -6
  264. package/dist/core/workflow/spawn-failure.d.ts +1 -1
  265. package/dist/core/workflow/spawn-failure.js +1 -1
  266. package/dist/core/workflow/specialists.js +2 -2
  267. package/dist/core/workflow/{journal.d.ts → transcript.d.ts} +8 -8
  268. package/dist/core/workflow/transcript.d.ts.map +1 -0
  269. package/dist/core/workflow/{journal.js → transcript.js} +14 -14
  270. package/dist/core/workflow/types.d.ts +98 -51
  271. package/dist/core/workflow/types.d.ts.map +1 -1
  272. package/dist/core/workflow/types.js +11 -1
  273. package/dist/core/workflow/validate.d.ts +1 -1
  274. package/dist/core/workflow/validate.js +1 -1
  275. package/dist/core/workflow/workspaces/cancellation.js +2 -2
  276. package/dist/core/workflow/workspaces/cleanup.js +2 -2
  277. package/dist/core/workflow/workspaces/execution.js +6 -6
  278. package/dist/core/workflow/workspaces/inspect.js +9 -9
  279. package/dist/core/workflow/workspaces/integration.js +14 -14
  280. package/dist/core/workflow/workspaces/lifecycle.d.ts +1 -1
  281. package/dist/core/workflow/workspaces/lifecycle.d.ts.map +1 -1
  282. package/dist/core/workflow/workspaces/lifecycle.js +9 -9
  283. package/dist/core/workflow/workspaces/local-git.d.ts.map +1 -1
  284. package/dist/core/workflow/workspaces/local-git.js +39 -5
  285. package/dist/core/workflow/workspaces/recovery.js +3 -3
  286. package/dist/core/workflow/workspaces/state.d.ts +1 -1
  287. package/dist/core/workflow/workspaces/state.d.ts.map +1 -1
  288. package/dist/core/workflow/workspaces/state.js +3 -3
  289. package/dist/core/workflow/workspaces/types.d.ts +1 -1
  290. package/dist/core/workflow/workspaces/types.d.ts.map +1 -1
  291. package/dist/lib/browser/asserts.d.ts +28 -0
  292. package/dist/lib/browser/asserts.d.ts.map +1 -0
  293. package/dist/lib/browser/asserts.js +152 -0
  294. package/dist/lib/browser/client.d.ts +49 -0
  295. package/dist/lib/browser/client.d.ts.map +1 -1
  296. package/dist/lib/browser/client.js +155 -14
  297. package/dist/lib/browser/content-checks.d.ts +108 -0
  298. package/dist/lib/browser/content-checks.d.ts.map +1 -0
  299. package/dist/lib/browser/content-checks.js +474 -0
  300. package/dist/lib/browser/critique.d.ts +91 -0
  301. package/dist/lib/browser/critique.d.ts.map +1 -0
  302. package/dist/lib/browser/critique.js +167 -0
  303. package/dist/lib/browser/geometry.d.ts +32 -0
  304. package/dist/lib/browser/geometry.d.ts.map +1 -1
  305. package/dist/lib/browser/geometry.js +244 -1
  306. package/dist/lib/browser/index.d.ts +4 -1
  307. package/dist/lib/browser/index.d.ts.map +1 -1
  308. package/dist/lib/browser/index.js +2 -0
  309. package/dist/lib/claude-desktop.d.ts.map +1 -1
  310. package/dist/lib/claude-desktop.js +4 -1
  311. package/dist/lib/context/index.js +9 -2
  312. package/dist/lib/council/index.d.ts +6 -6
  313. package/dist/lib/council/index.d.ts.map +1 -1
  314. package/dist/lib/council/index.js +8 -8
  315. package/dist/lib/identities/assume.d.ts +2 -2
  316. package/dist/lib/identities/assume.js +7 -7
  317. package/dist/lib/instructions/apply.d.ts +3 -3
  318. package/dist/lib/instructions/apply.d.ts.map +1 -1
  319. package/dist/lib/instructions/apply.js +75 -27
  320. package/dist/lib/instructions/host-addendum.d.ts +54 -0
  321. package/dist/lib/instructions/host-addendum.d.ts.map +1 -0
  322. package/dist/lib/instructions/host-addendum.js +107 -0
  323. package/dist/lib/instructions/templates.d.ts +10 -3
  324. package/dist/lib/instructions/templates.d.ts.map +1 -1
  325. package/dist/lib/instructions/templates.js +41 -12
  326. package/dist/lib/machine.d.ts +2 -2
  327. package/dist/lib/machine.js +2 -2
  328. package/package.json +26 -21
  329. package/schemas/config.schema.json +26 -1
  330. package/src/commander.ts +22 -13
  331. package/src/commands/{harness.ts → adapter.ts} +46 -46
  332. package/src/commands/agents.ts +200 -78
  333. package/src/commands/artifacts.ts +168 -0
  334. package/src/commands/backup.ts +47 -33
  335. package/src/commands/browse.ts +438 -2
  336. package/src/commands/checkpoint.ts +196 -0
  337. package/src/commands/context.ts +3 -176
  338. package/src/commands/decision.ts +41 -7
  339. package/src/commands/deinit.ts +16 -16
  340. package/src/commands/doctor.ts +28 -28
  341. package/src/commands/{supervisor.ts → governor.ts} +184 -154
  342. package/src/commands/grep.ts +19 -2
  343. package/src/commands/init.ts +50 -34
  344. package/src/commands/{scratch.ts → journal.ts} +60 -60
  345. package/src/commands/policy.ts +1 -1
  346. package/src/commands/presence.ts +2 -2
  347. package/src/commands/sync.ts +3 -3
  348. package/src/commands/tunnel.ts +256 -38
  349. package/src/commands/web-fetch.ts +1 -1
  350. package/src/commands/web.ts +56 -1
  351. package/src/commands/work.ts +50 -35
  352. package/src/commands/workflow.ts +43 -34
  353. package/src/core/{harnesses → adapters}/attest-projection.ts +2 -2
  354. package/src/core/{harnesses → adapters}/attest.ts +27 -27
  355. package/src/core/{harnesses → adapters}/attestation.ts +41 -41
  356. package/src/core/{harnesses → adapters}/bench.ts +34 -43
  357. package/src/core/adapters/index.ts +56 -0
  358. package/src/core/{harnesses → adapters}/profiles.ts +16 -16
  359. package/src/core/{harnesses → adapters}/registry.ts +23 -23
  360. package/src/core/{harnesses → adapters}/types.ts +23 -23
  361. package/src/core/agents/canonical-emit.ts +16 -43
  362. package/src/core/agents/cli-emit.ts +1 -1
  363. package/src/core/agents/cli.ts +30 -28
  364. package/src/core/agents/codex-replay.ts +6 -6
  365. package/src/core/agents/coord-bin.ts +92 -0
  366. package/src/core/agents/coord-client.ts +302 -78
  367. package/src/core/agents/events/consume.ts +1 -1
  368. package/src/core/agents/events/emit.ts +7 -6
  369. package/src/core/agents/paths.ts +7 -11
  370. package/src/core/agents/render/prompt-context.ts +107 -31
  371. package/src/core/agents/render/session-context.ts +6 -6
  372. package/src/core/agents/rules/claim-conflict.ts +4 -7
  373. package/src/core/agents/rules/commit-conflict.ts +103 -22
  374. package/src/core/agents/rules/stop-hook.ts +33 -17
  375. package/src/core/agents/rules/verdict.ts +13 -0
  376. package/src/core/agents/session-events.ts +4 -4
  377. package/src/core/agents/state/council.ts +1 -1
  378. package/src/core/agents/state/heartbeat-projector.ts +16 -12
  379. package/src/core/agents/state/heartbeat-writer.ts +12 -12
  380. package/src/core/agents/state/{scratch.ts → journal.ts} +12 -12
  381. package/src/core/agents/state/pidmap.ts +130 -15
  382. package/src/core/agents/state/proc-start.ts +208 -0
  383. package/src/core/agents/state/shell-mutation.ts +1 -1
  384. package/src/core/agents/state/stale-sweep.ts +7 -7
  385. package/src/core/artifacts/index.ts +557 -0
  386. package/src/core/config.ts +30 -2
  387. package/src/core/context/index.ts +15 -15
  388. package/src/core/governor/adapter-spread.ts +82 -0
  389. package/src/core/governor/index.ts +91 -0
  390. package/src/core/governor/plan-api.ts +115 -0
  391. package/src/core/{supervisor → governor}/plan-read.ts +112 -97
  392. package/src/core/{supervisor → governor}/plan-types.ts +59 -56
  393. package/src/core/{supervisor → governor}/planning.ts +223 -192
  394. package/src/core/governor/read.ts +59 -0
  395. package/src/core/{supervisor → governor}/runner.ts +39 -39
  396. package/src/core/{supervisor → governor}/service-read.ts +22 -22
  397. package/src/core/{supervisor → governor}/service.ts +117 -119
  398. package/src/core/{supervisor → governor}/state.ts +325 -167
  399. package/src/core/hooks/adapter/detect.ts +30 -0
  400. package/src/core/hooks/{harness → adapter}/events.ts +16 -14
  401. package/src/core/hooks/{harness → adapter}/output.ts +31 -23
  402. package/src/core/hooks/{harness → adapter}/parse.ts +5 -5
  403. package/src/core/hooks/{harness → adapter}/wiring.ts +21 -21
  404. package/src/core/hooks/cli.ts +197 -173
  405. package/src/core/hooks/effects/image-capture.ts +6 -6
  406. package/src/core/hooks/effects/index.ts +19 -19
  407. package/src/core/hooks/events/emit.ts +3 -3
  408. package/src/core/hooks/events/rotate.ts +1 -1
  409. package/src/core/hooks/events/schema.ts +15 -7
  410. package/src/core/hooks/guard-path.ts +2 -2
  411. package/src/core/hooks/index.ts +1 -1
  412. package/src/core/hooks/resolve/anchor.ts +63 -8
  413. package/src/core/hooks/resolve/coord-root.ts +18 -40
  414. package/src/core/hooks/resolve/intent.ts +1 -1
  415. package/src/core/hooks/resolve/owner.ts +11 -5
  416. package/src/core/{scratch → journal}/index.ts +53 -53
  417. package/src/core/policy/evaluate.ts +8 -8
  418. package/src/core/policy/types.ts +3 -3
  419. package/src/core/work/state.ts +65 -23
  420. package/src/core/workflow/adapters.ts +33 -0
  421. package/src/core/workflow/approvals.ts +7 -7
  422. package/src/core/workflow/billing.ts +12 -12
  423. package/src/core/workflow/child-env.ts +13 -4
  424. package/src/core/workflow/engine.ts +155 -90
  425. package/src/core/workflow/evidence-preflight.ts +165 -0
  426. package/src/core/workflow/index.ts +3 -3
  427. package/src/core/workflow/proof.ts +60 -50
  428. package/src/core/workflow/run-state.ts +7 -7
  429. package/src/core/workflow/sandbox-projection.ts +16 -16
  430. package/src/core/workflow/spawn-claude.ts +13 -10
  431. package/src/core/workflow/spawn-codex.ts +13 -10
  432. package/src/core/workflow/spawn-cursor.ts +13 -10
  433. package/src/core/workflow/spawn-failure.ts +1 -1
  434. package/src/core/workflow/specialists.ts +2 -2
  435. package/src/core/workflow/{journal.ts → transcript.ts} +16 -16
  436. package/src/core/workflow/types.ts +108 -51
  437. package/src/core/workflow/validate.ts +1 -1
  438. package/src/core/workflow/workspaces/cancellation.ts +2 -2
  439. package/src/core/workflow/workspaces/cleanup.ts +2 -2
  440. package/src/core/workflow/workspaces/execution.ts +6 -6
  441. package/src/core/workflow/workspaces/inspect.ts +14 -11
  442. package/src/core/workflow/workspaces/integration.ts +18 -14
  443. package/src/core/workflow/workspaces/lifecycle.ts +10 -10
  444. package/src/core/workflow/workspaces/local-git.ts +47 -5
  445. package/src/core/workflow/workspaces/recovery.ts +3 -3
  446. package/src/core/workflow/workspaces/state.ts +4 -3
  447. package/src/core/workflow/workspaces/types.ts +1 -1
  448. package/src/lib/browser/asserts.ts +177 -0
  449. package/src/lib/browser/client.ts +189 -14
  450. package/src/lib/browser/content-checks.ts +571 -0
  451. package/src/lib/browser/critique.ts +231 -0
  452. package/src/lib/browser/geometry.ts +297 -1
  453. package/src/lib/browser/index.ts +34 -0
  454. package/src/lib/claude-desktop.ts +4 -1
  455. package/src/lib/context/index.ts +11 -1
  456. package/src/lib/council/index.ts +9 -9
  457. package/src/lib/identities/assume.ts +7 -7
  458. package/src/lib/instructions/apply.ts +87 -25
  459. package/src/lib/instructions/host-addendum.ts +126 -0
  460. package/src/lib/instructions/templates.ts +44 -15
  461. package/src/lib/machine.ts +2 -2
  462. package/dist/commands/harness.d.ts +0 -12
  463. package/dist/commands/harness.d.ts.map +0 -1
  464. package/dist/commands/scratch.d.ts +0 -4
  465. package/dist/commands/scratch.d.ts.map +0 -1
  466. package/dist/commands/session.d.ts.map +0 -1
  467. package/dist/commands/session.js +0 -162
  468. package/dist/commands/supervisor.d.ts +0 -4
  469. package/dist/commands/supervisor.d.ts.map +0 -1
  470. package/dist/core/harnesses/attest-projection.d.ts.map +0 -1
  471. package/dist/core/harnesses/attest.d.ts.map +0 -1
  472. package/dist/core/harnesses/attestation.d.ts.map +0 -1
  473. package/dist/core/harnesses/bench.d.ts.map +0 -1
  474. package/dist/core/harnesses/index.d.ts +0 -13
  475. package/dist/core/harnesses/index.d.ts.map +0 -1
  476. package/dist/core/harnesses/index.js +0 -6
  477. package/dist/core/harnesses/profiles.d.ts.map +0 -1
  478. package/dist/core/harnesses/registry.d.ts +0 -15
  479. package/dist/core/harnesses/registry.d.ts.map +0 -1
  480. package/dist/core/harnesses/types.d.ts.map +0 -1
  481. package/dist/core/hooks/harness/detect.d.ts +0 -9
  482. package/dist/core/hooks/harness/events.d.ts.map +0 -1
  483. package/dist/core/hooks/harness/output.d.ts.map +0 -1
  484. package/dist/core/supervisor/index.d.ts +0 -7
  485. package/dist/core/supervisor/index.d.ts.map +0 -1
  486. package/dist/core/supervisor/index.js +0 -6
  487. package/dist/core/supervisor/plan-api.d.ts +0 -23
  488. package/dist/core/supervisor/plan-api.d.ts.map +0 -1
  489. package/dist/core/supervisor/plan-api.js +0 -50
  490. package/dist/core/supervisor/plan-read.d.ts +0 -5
  491. package/dist/core/supervisor/plan-read.d.ts.map +0 -1
  492. package/dist/core/supervisor/plan-types.d.ts.map +0 -1
  493. package/dist/core/supervisor/planning.d.ts +0 -33
  494. package/dist/core/supervisor/planning.d.ts.map +0 -1
  495. package/dist/core/supervisor/read.d.ts +0 -6
  496. package/dist/core/supervisor/read.d.ts.map +0 -1
  497. package/dist/core/supervisor/read.js +0 -4
  498. package/dist/core/supervisor/runner.d.ts +0 -37
  499. package/dist/core/supervisor/runner.d.ts.map +0 -1
  500. package/dist/core/supervisor/service-read.d.ts +0 -6
  501. package/dist/core/supervisor/service-read.d.ts.map +0 -1
  502. package/dist/core/supervisor/service.d.ts +0 -114
  503. package/dist/core/supervisor/service.d.ts.map +0 -1
  504. package/dist/core/supervisor/state.d.ts +0 -95
  505. package/dist/core/supervisor/state.d.ts.map +0 -1
  506. package/dist/core/workflow/harnesses.d.ts +0 -17
  507. package/dist/core/workflow/harnesses.d.ts.map +0 -1
  508. package/dist/core/workflow/harnesses.js +0 -21
  509. package/dist/core/workflow/journal.d.ts.map +0 -1
  510. package/src/commands/session.ts +0 -187
  511. package/src/core/harnesses/index.ts +0 -56
  512. package/src/core/hooks/harness/detect.ts +0 -30
  513. package/src/core/supervisor/index.ts +0 -89
  514. package/src/core/supervisor/plan-api.ts +0 -73
  515. package/src/core/supervisor/read.ts +0 -59
  516. package/src/core/workflow/harnesses.ts +0 -33
  517. /package/dist/core/{harnesses → adapters}/attest-projection.js +0 -0
@@ -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,7 +164,7 @@ 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
169
  // ADR 0046: a planner workflow that never touched the plan (its binary was
170
170
  // absent, or the vendor refused) writes a proof carrying run.class. Stamp it
@@ -196,7 +196,7 @@ async function recoverReviewedPlan(input) {
196
196
  const review = input.policy.review;
197
197
  if (!review)
198
198
  return undefined;
199
- 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);
200
200
  const receipt = existing ??
201
201
  reconstructReviewReceiptFromProof({
202
202
  coordRoot: input.coordRoot,
@@ -209,7 +209,7 @@ async function recoverReviewedPlan(input) {
209
209
  if (!receipt)
210
210
  return undefined;
211
211
  if (!existing) {
212
- 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");
213
213
  }
214
214
  return finalizeReviewedProposal({
215
215
  coordRoot: input.coordRoot,
@@ -221,17 +221,17 @@ async function recoverReviewedPlan(input) {
221
221
  });
222
222
  }
223
223
  async function ensurePlanReview(input) {
224
- 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);
225
225
  if (existing)
226
226
  return existing;
227
227
  const reconstructed = reconstructReviewReceiptFromProof(input);
228
228
  if (reconstructed) {
229
- 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");
230
230
  return reconstructed;
231
231
  }
232
232
  const reviewScript = reviewScriptPath(input.coordRoot, input.record.intent.id, input.request.id);
233
- writeExclusiveJson(reviewInputPath(input.coordRoot, input.record.intent.id, input.request.id), { candidate: input.proposal }, "supervisor plan review input");
234
- 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");
235
235
  const review = input.policy.review;
236
236
  const runId = reviewWorkflowRunId(input.request.id);
237
237
  const runExists = existsSync(join(input.coordRoot, ".harnery", "workflows", runId, "run.json"));
@@ -254,7 +254,7 @@ async function ensurePlanReview(input) {
254
254
  trigger: input.trigger,
255
255
  policy: input.policy,
256
256
  });
257
- 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");
258
258
  return receipt;
259
259
  }
260
260
  function finalizeReviewedProposal(input) {
@@ -265,7 +265,7 @@ function finalizeReviewedProposal(input) {
265
265
  actor: input.actor,
266
266
  reason: reviewStatusReason(input.receipt),
267
267
  });
268
- 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));
269
269
  }
270
270
  // The review authority must become durable before the proposal can become
271
271
  // visible. If the process stops after this event, the plan remains
@@ -276,22 +276,22 @@ function finalizeReviewedProposal(input) {
276
276
  actor: input.actor,
277
277
  reason: `plan review passed after ${input.receipt.rounds.length} round(s)`,
278
278
  });
279
- 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");
280
280
  appendPlanEventIfMissing(input.coordRoot, input.record.intent.id, input.request.id, "plan.proposed", {
281
281
  event: "plan.proposed",
282
282
  actor: input.actor,
283
283
  reason: input.receipt.final_candidate.rationale,
284
284
  });
285
285
  if (input.policy.auto_apply) {
286
- return applySupervisorPlanProposal({
286
+ return applyGovernorPlanProposal({
287
287
  coordRoot: input.coordRoot,
288
288
  record: input.record,
289
289
  planId: input.request.id,
290
290
  actor: input.actor,
291
- reason: "proposal applied by frozen supervisor replanning policy",
291
+ reason: "proposal applied by frozen governor replanning policy",
292
292
  });
293
293
  }
294
- 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));
295
295
  }
296
296
  function reviewStatusReason(receipt) {
297
297
  if (receipt.status === "revision_exhausted") {
@@ -301,35 +301,35 @@ function reviewStatusReason(receipt) {
301
301
  return "plan review failed";
302
302
  return "plan review requires attention";
303
303
  }
304
- export function applySupervisorPlanProposal(input) {
304
+ export function applyGovernorPlanProposal(input) {
305
305
  const coordRoot = resolve(input.coordRoot);
306
306
  const policy = input.record.intent.replanning;
307
307
  if (!policy)
308
- throw new Error(`supervisor ${input.record.intent.id} does not allow replanning`);
309
- 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);
310
310
  if (plan.status === "applied" || plan.status === "completed")
311
311
  return outcome(plan);
312
312
  if (plan.status !== "proposed" ||
313
313
  !plan.proposal ||
314
314
  !["apply", "complete"].includes(plan.proposal.decision)) {
315
- 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}`);
316
316
  }
317
317
  if (policy.review) {
318
- const receipt = readSupervisorPlanReviewReceipt(coordRoot, input.record.intent.id, input.planId);
318
+ const receipt = readGovernorPlanReviewReceipt(coordRoot, input.record.intent.id, input.planId);
319
319
  if (receipt?.status !== "passed") {
320
- 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`);
321
321
  }
322
322
  if (candidateDigest(plan.proposal) !== receipt.candidate_sha256) {
323
- 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`);
324
324
  }
325
325
  if (!plan.events.some((event) => event.event === "plan.reviewed")) {
326
- 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`);
327
327
  }
328
328
  }
329
329
  if (plan.request.prior_root_work_id !== input.record.projection.root_work_id) {
330
- 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}`);
331
331
  }
332
- 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);
333
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");
334
334
  if (proposal.decision === "complete") {
335
335
  appendPlanEvent(coordRoot, input.record.intent.id, input.planId, {
@@ -337,7 +337,7 @@ export function applySupervisorPlanProposal(input) {
337
337
  actor: input.actor,
338
338
  reason: input.reason ?? proposal.rationale,
339
339
  });
340
- return outcome(readSupervisorPlan(coordRoot, input.record.intent.id, input.planId));
340
+ return outcome(readGovernorPlan(coordRoot, input.record.intent.id, input.planId));
341
341
  }
342
342
  const ids = new Map();
343
343
  const created = [];
@@ -359,7 +359,7 @@ export function applySupervisorPlanProposal(input) {
359
359
  max_attempts: template.max_attempts,
360
360
  source: {
361
361
  kind: "workflow",
362
- ref: `supervisor:${input.record.intent.id}/plan:${input.planId}`,
362
+ ref: `governor:${input.record.intent.id}/plan:${input.planId}`,
363
363
  },
364
364
  };
365
365
  if (existsSync(join(coordRoot, ".harnery", "work", workId, "intent.json"))) {
@@ -400,74 +400,105 @@ export function applySupervisorPlanProposal(input) {
400
400
  appendPlanEvent(coordRoot, input.record.intent.id, input.planId, {
401
401
  event: "plan.applied",
402
402
  actor: input.actor,
403
- reason: input.reason ?? "supervisor plan explicitly approved",
403
+ reason: input.reason ?? "governor plan explicitly approved",
404
404
  root_work_id: rootWorkId,
405
405
  work_ids: created,
406
406
  });
407
- return outcome(readSupervisorPlan(coordRoot, input.record.intent.id, input.planId));
407
+ return outcome(readGovernorPlan(coordRoot, input.record.intent.id, input.planId));
408
408
  }
409
- export function rejectSupervisorPlanProposal(input) {
410
- const plan = readSupervisorPlan(input.coordRoot, input.goalId, input.planId);
409
+ export function rejectGovernorPlanProposal(input) {
410
+ const plan = readGovernorPlan(input.coordRoot, input.goalId, input.planId);
411
411
  if (plan.status === "rejected")
412
412
  return outcome(plan);
413
413
  if (plan.status !== "proposed") {
414
- 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}`);
415
415
  }
416
416
  appendPlanEvent(input.coordRoot, input.goalId, input.planId, {
417
417
  event: "plan.rejected",
418
418
  actor: input.actor,
419
419
  reason: input.reason,
420
420
  });
421
- return outcome(readSupervisorPlan(input.coordRoot, input.goalId, input.planId));
421
+ return outcome(readGovernorPlan(input.coordRoot, input.goalId, input.planId));
422
422
  }
423
- 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) {
424
455
  const policy = input.record.intent.replanning;
425
456
  if (!policy) {
426
- 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`);
427
458
  }
428
459
  const reason = bounded(input.reason, "plan retry reason", MAX_REASON);
429
- 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);
430
461
  const latest = history.latest;
431
462
  if (!latest || latest.request.id !== input.planId) {
432
- 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`);
433
464
  }
434
- const triggerFingerprint = supervisorGraphFingerprint({
465
+ const triggerFingerprint = governorGraphFingerprint({
435
466
  rootWorkId: history.active_root_work_id,
436
467
  generation: history.generation,
437
468
  work: input.record.work,
438
469
  });
439
470
  if (latest.request.trigger_fingerprint !== triggerFingerprint ||
440
471
  latest.request.prior_root_work_id !== history.active_root_work_id) {
441
- 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`);
442
473
  }
443
474
  if (history.completed) {
444
- 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`);
445
476
  }
446
477
  if (latest.status === "retry_requested")
447
478
  return outcome(latest);
448
479
  if (latest.status !== "attention") {
449
- 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}`);
450
481
  }
451
482
  if (history.plans.length >= policy.max_replans) {
452
- 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`);
453
484
  }
454
485
  appendPlanEvent(input.coordRoot, input.record.intent.id, input.planId, {
455
486
  event: "plan.retry_requested",
456
487
  actor: input.actor,
457
488
  reason,
458
489
  });
459
- return outcome(readSupervisorPlan(input.coordRoot, input.record.intent.id, input.planId));
490
+ return outcome(readGovernorPlan(input.coordRoot, input.record.intent.id, input.planId));
460
491
  }
461
492
  function createPlanRequest(coordRoot, record, sequence, triggerFingerprint, trigger) {
462
493
  const policy = record.intent.replanning;
463
494
  if (!policy)
464
- throw new Error(`supervisor ${record.intent.id} does not allow replanning`);
495
+ throw new Error(`governor ${record.intent.id} does not allow replanning`);
465
496
  if (sequence > policy.max_replans) {
466
- 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`);
467
498
  }
468
499
  const planId = `plan-${String(sequence).padStart(4, "0")}-${randomBytes(4).toString("hex")}`;
469
500
  const request = {
470
- schema_version: SUPERVISOR_PLAN_SCHEMA_VERSION,
501
+ schema_version: GOVERNOR_PLAN_SCHEMA_VERSION,
471
502
  id: planId,
472
503
  goal_id: record.intent.id,
473
504
  sequence,
@@ -481,14 +512,14 @@ function createPlanRequest(coordRoot, record, sequence, triggerFingerprint, trig
481
512
  const dir = planDir(coordRoot, record.intent.id, planId);
482
513
  mkdirSync(dir, { recursive: true, mode: 0o700 });
483
514
  chmodSync(dir, 0o700);
484
- writeExclusiveJson(join(dir, "request.json"), request, "supervisor plan request");
485
- 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");
486
517
  return request;
487
518
  }
488
519
  function plannerScript(coordRoot, record, planId, trigger) {
489
520
  const policy = record.intent.replanning;
490
521
  if (!policy)
491
- throw new Error(`supervisor ${record.intent.id} does not allow replanning`);
522
+ throw new Error(`governor ${record.intent.id} does not allow replanning`);
492
523
  const prompt = [
493
524
  "You are producing one bounded replacement plan or milestone decision for a durable supervised goal.",
494
525
  record.intent.mission
@@ -563,7 +594,7 @@ function plannerReviewScript(record, planId, initialCandidate, trigger) {
563
594
  const policy = record.intent.replanning;
564
595
  const review = policy?.review;
565
596
  if (!policy || !review)
566
- throw new Error(`supervisor ${record.intent.id} does not review plans`);
597
+ throw new Error(`governor ${record.intent.id} does not review plans`);
567
598
  const proposalSchema = planProposalSchema(record, trigger);
568
599
  const reviewerSchema = {
569
600
  type: "object",
@@ -624,7 +655,7 @@ function plannerReviewScript(record, planId, initialCandidate, trigger) {
624
655
  " stage('Review round ' + round);",
625
656
  " const reviewersOut = await Promise.all(reviewers.map(async (specialist) => {",
626
657
  " const prompt = [",
627
- " 'Review this bounded supervisor plan candidate independently.',",
658
+ " 'Review this bounded governor plan candidate independently.',",
628
659
  " 'Return approve only when the candidate is complete, scoped, and satisfies the goal context.',",
629
660
  " 'Return revise for blocking defects. Return attention when human judgment is required.',",
630
661
  " 'Apply proposal_root_rule exactly; never require proposal.root to equal active_root.',",
@@ -644,7 +675,7 @@ function plannerReviewScript(record, planId, initialCandidate, trigger) {
644
675
  " if (round > maxRevisionRounds) break;",
645
676
  " stage('Revise round ' + round);",
646
677
  " const revisionPrompt = [",
647
- " '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.',",
648
679
  " 'Do not merge reviewer text mechanically; satisfy the blocking findings within the frozen goal and template constraints.',",
649
680
  " 'Apply proposal_root_rule exactly; never require proposal.root to equal active_root.',",
650
681
  " 'Goal context: ' + JSON.stringify(goalContext),",
@@ -720,7 +751,7 @@ function normalizeReviewReceipt(input) {
720
751
  }
721
752
  status ??= "attention";
722
753
  return {
723
- schema_version: SUPERVISOR_PLAN_SCHEMA_VERSION,
754
+ schema_version: GOVERNOR_PLAN_SCHEMA_VERSION,
724
755
  plan_id: input.request.id,
725
756
  status,
726
757
  candidate_sha256: candidateDigest(candidate),
@@ -807,12 +838,12 @@ function reconstructReviewReceiptFromProof(input) {
807
838
  }
808
839
  function recoverReviewWorkflowResult(coordRoot, goalId, planId, proof, expectedSpecialists) {
809
840
  const inputPath = reviewInputPath(coordRoot, goalId, planId);
810
- const reviewInput = readBoundedJson(inputPath, "supervisor plan review input");
811
- const journal = readVerifiedWorkflowJournal(coordRoot, reviewWorkflowRunId(planId), proof);
841
+ const reviewInput = readBoundedJson(inputPath, "governor plan review input");
842
+ const transcript = readVerifiedWorkflowTranscript(coordRoot, reviewWorkflowRunId(planId), proof);
812
843
  const starts = new Map();
813
844
  const byRound = new Map();
814
845
  let currentCandidate = reviewInput.candidate;
815
- for (const line of journal.split("\n")) {
846
+ for (const line of transcript.split("\n")) {
816
847
  if (!line.trim())
817
848
  continue;
818
849
  const event = JSON.parse(line);
@@ -823,7 +854,7 @@ function recoverReviewWorkflowResult(coordRoot, goalId, planId, proof, expectedS
823
854
  }
824
855
  if (event.event !== "agent.end" || event.result_kind !== "json")
825
856
  continue;
826
- const round = workflowJournalRound(event.stage);
857
+ const round = workflowTranscriptRound(event.stage);
827
858
  if (!round)
828
859
  continue;
829
860
  let record = byRound.get(round.round);
@@ -834,7 +865,7 @@ function recoverReviewWorkflowResult(coordRoot, goalId, planId, proof, expectedS
834
865
  if (round.kind === "review") {
835
866
  const specialist = typeof event.id === "string" ? starts.get(event.id)?.specialist : undefined;
836
867
  if (!event.result || typeof event.result !== "object" || Array.isArray(event.result)) {
837
- 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");
838
869
  }
839
870
  record.reviewers.push({
840
871
  specialist,
@@ -866,18 +897,18 @@ function recoverReviewWorkflowResult(coordRoot, goalId, planId, proof, expectedS
866
897
  result: { rounds },
867
898
  };
868
899
  }
869
- function readVerifiedWorkflowJournal(coordRoot, runId, proof) {
870
- const journalPath = join(coordRoot, ".harnery", "workflows", runId, proof.integrity.journal.path);
871
- const journal = readFileSync(journalPath, "utf8");
872
- const bytes = Buffer.byteLength(journal);
873
- if (bytes <= 0 || bytes > MAX_RECORD_BYTES || bytes !== proof.integrity.journal.bytes) {
874
- throw new Error(`supervisor plan review journal does not match proof integrity`);
875
- }
876
- const sha256 = createHash("sha256").update(journal).digest("hex");
877
- if (sha256 !== proof.integrity.journal.sha256) {
878
- throw new Error(`supervisor plan review journal does not match proof integrity`);
879
- }
880
- 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;
881
912
  }
882
913
  function orderRecoveredReviewers(raw, expectedSpecialists) {
883
914
  if (!Array.isArray(raw) || raw.length !== expectedSpecialists.length)
@@ -921,16 +952,16 @@ function aggregateRecoveredReviewers(reviewers) {
921
952
  }
922
953
  function assertResultDigest(raw, expected, runId) {
923
954
  if (!expected) {
924
- 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`);
925
956
  }
926
957
  const actual = digestResult(raw, "json");
927
958
  if (actual.kind !== expected.kind ||
928
959
  actual.sha256 !== expected.sha256 ||
929
960
  actual.bytes !== expected.bytes) {
930
- 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`);
931
962
  }
932
963
  }
933
- function workflowJournalRound(stage) {
964
+ function workflowTranscriptRound(stage) {
934
965
  if (typeof stage !== "string")
935
966
  return undefined;
936
967
  const review = /^Review round ([1-9][0-9]*)$/.exec(stage);
@@ -964,7 +995,7 @@ function hasReviewRecoveryEvidence(coordRoot, goalId, planId) {
964
995
  function planProposalSchema(record, trigger) {
965
996
  const policy = record.intent.replanning;
966
997
  if (!policy)
967
- throw new Error(`supervisor ${record.intent.id} does not allow replanning`);
998
+ throw new Error(`governor ${record.intent.id} does not allow replanning`);
968
999
  const rationale = { type: "string", minLength: 1, maxLength: MAX_REASON };
969
1000
  const workItem = {
970
1001
  type: "object",
@@ -1055,7 +1086,7 @@ function planProposalSchema(record, trigger) {
1055
1086
  function normalizeProposal(planId, raw, record, previouslyApplied, trigger, preservedProposedAt) {
1056
1087
  const policy = record.intent.replanning;
1057
1088
  if (!policy)
1058
- throw new Error(`supervisor ${record.intent.id} does not allow replanning`);
1089
+ throw new Error(`governor ${record.intent.id} does not allow replanning`);
1059
1090
  if (!raw || typeof raw !== "object" || Array.isArray(raw)) {
1060
1091
  throw new Error("planner result must be an object");
1061
1092
  }
@@ -1074,7 +1105,7 @@ function normalizeProposal(planId, raw, record, previouslyApplied, trigger, pres
1074
1105
  throw new Error("mission completion may be proposed only at a milestone boundary");
1075
1106
  }
1076
1107
  return {
1077
- schema_version: SUPERVISOR_PLAN_SCHEMA_VERSION,
1108
+ schema_version: GOVERNOR_PLAN_SCHEMA_VERSION,
1078
1109
  plan_id: planId,
1079
1110
  decision,
1080
1111
  rationale,
@@ -1161,7 +1192,7 @@ function normalizeProposal(planId, raw, record, previouslyApplied, trigger, pres
1161
1192
  if (unused.length)
1162
1193
  throw new Error(`plan contains work not reachable from root: ${unused.map((item) => item.key).join(", ")}`);
1163
1194
  return {
1164
- schema_version: SUPERVISOR_PLAN_SCHEMA_VERSION,
1195
+ schema_version: GOVERNOR_PLAN_SCHEMA_VERSION,
1165
1196
  plan_id: planId,
1166
1197
  decision,
1167
1198
  rationale,
@@ -1213,9 +1244,9 @@ function planTrigger(record) {
1213
1244
  function appendPlanEvent(coordRootRaw, goalId, planId, input) {
1214
1245
  const coordRoot = resolve(coordRootRaw);
1215
1246
  const path = join(planDir(coordRoot, goalId, planId), "events.jsonl");
1216
- const current = readSupervisorPlan(coordRoot, goalId, planId).events;
1247
+ const current = readGovernorPlan(coordRoot, goalId, planId).events;
1217
1248
  const event = {
1218
- schema_version: SUPERVISOR_PLAN_SCHEMA_VERSION,
1249
+ schema_version: GOVERNOR_PLAN_SCHEMA_VERSION,
1219
1250
  plan_id: planId,
1220
1251
  seq: current.length + 1,
1221
1252
  ts: new Date().toISOString(),
@@ -1226,13 +1257,13 @@ function appendPlanEvent(coordRootRaw, goalId, planId, input) {
1226
1257
  const line = `${JSON.stringify(event)}\n`;
1227
1258
  const existing = existsSync(path) ? statSync(path).size : 0;
1228
1259
  if (existing + Buffer.byteLength(line) > MAX_EVENTS_BYTES) {
1229
- 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");
1230
1261
  }
1231
1262
  appendFileSync(path, line, { encoding: "utf8", mode: 0o600 });
1232
1263
  chmodSync(path, 0o600);
1233
1264
  }
1234
1265
  function appendPlanEventIfMissing(coordRoot, goalId, planId, eventType, input) {
1235
- const plan = readSupervisorPlan(coordRoot, goalId, planId);
1266
+ const plan = readGovernorPlan(coordRoot, goalId, planId);
1236
1267
  if (plan.events.some((event) => event.event === eventType))
1237
1268
  return;
1238
1269
  appendPlanEvent(coordRoot, goalId, planId, input);
@@ -1280,7 +1311,7 @@ function writeExclusive(path, body, label) {
1280
1311
  }
1281
1312
  }
1282
1313
  function planDir(coordRoot, goalId, planId) {
1283
- return join(coordRoot, ".harnery", "supervisors", goalId, "plans", planId);
1314
+ return join(coordRoot, ".harnery", "governors", goalId, "plans", planId);
1284
1315
  }
1285
1316
  function planScriptPath(coordRoot, goalId, planId) {
1286
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";
@@ -0,0 +1,37 @@
1
+ import { type RunWorkItemInput } from "../work/index.js";
2
+ import type { GovernorPlanOutcome } from "./plan-types.js";
3
+ import { type GovernorProjection } from "./state.js";
4
+ export type GovernorStopReason = "succeeded" | "awaiting_attention" | "blocked" | "budget_exhausted" | "no_progress" | "tick_complete";
5
+ export interface GovernorDispatchOutcome {
6
+ work_id: string;
7
+ action: "run" | "resume" | "retry";
8
+ status: "completed" | "parked" | "failed";
9
+ run_id?: string;
10
+ error?: string;
11
+ }
12
+ export interface GovernorRunReport {
13
+ goal_id: string;
14
+ mode: "tick" | "run";
15
+ stop_reason: GovernorStopReason;
16
+ reason: string;
17
+ started_at: string;
18
+ ended_at: string;
19
+ duration_ms: number;
20
+ cycles: number;
21
+ dispatches: number;
22
+ acceptances: number;
23
+ replans: number;
24
+ outcomes: GovernorDispatchOutcome[];
25
+ plan_outcomes: GovernorPlanOutcome[];
26
+ projection: GovernorProjection;
27
+ }
28
+ export interface RunGovernorInput {
29
+ coordRoot: string;
30
+ goalId: string;
31
+ mode?: "tick" | "run";
32
+ actor?: string;
33
+ engine: Omit<RunWorkItemInput["engine"], "maxAgents" | "concurrency" | "specialists">;
34
+ onLog?: (line: string) => void;
35
+ }
36
+ export declare function runGovernor(input: RunGovernorInput): Promise<GovernorRunReport>;
37
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/core/governor/runner.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,gBAAgB,EAItB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,EAEL,KAAK,kBAAkB,EAGxB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,kBAAkB,GAC1B,WAAW,GACX,oBAAoB,GACpB,SAAS,GACT,kBAAkB,GAClB,aAAa,GACb,eAAe,CAAC;AAEpB,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;IACnC,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,WAAW,EAAE,kBAAkB,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,uBAAuB,EAAE,CAAC;IACpC,aAAa,EAAE,mBAAmB,EAAE,CAAC;IACrC,UAAU,EAAE,kBAAkB,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,WAAW,GAAG,aAAa,GAAG,aAAa,CAAC,CAAC;IACtF,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC;AAQD,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA4LrF"}