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
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Workflow engine contracts. A workflow is a small throwaway JS script with
3
- * bounded, schema-gated stages that fan work out to headless harness-CLI
3
+ * bounded, schema-gated stages that fan work out to headless adapter-CLI
4
4
  * subagents; the SCRIPT (deterministic code), not any model, decides routing
5
5
  * between stages, and the run always terminates when the script returns.
6
6
  *
@@ -28,7 +28,18 @@ export const WORKFLOW_PROOF_SCHEMA_VERSION = 1 as const;
28
28
  export const WORKFLOW_WORK_CONTEXT_SCHEMA_VERSION = 1 as const;
29
29
  export const WORKFLOW_ATTEMPT_CONTEXT_SCHEMA_VERSION = 1 as const;
30
30
 
31
- export type EvidenceKind = "test" | "command" | "artifact" | "change" | "review" | "observation";
31
+ /** The evidence vocabulary, as a value so the runtime validator and the
32
+ * pre-flight source scan cannot drift from the type or from each other. */
33
+ export const EVIDENCE_KINDS = [
34
+ "test",
35
+ "command",
36
+ "artifact",
37
+ "change",
38
+ "review",
39
+ "observation",
40
+ ] as const;
41
+
42
+ export type EvidenceKind = (typeof EVIDENCE_KINDS)[number];
32
43
  export type EvidenceStatus = "passed" | "failed" | "observed" | "unknown";
33
44
  export type EvidenceSource = "workflow" | "engine";
34
45
  export type AcceptanceStatus = "satisfied" | "unsatisfied" | "unknown";
@@ -90,7 +101,7 @@ export interface WorkflowAgentProof {
90
101
  label: string;
91
102
  stage?: string;
92
103
  specialist?: string;
93
- harness: HarnessName;
104
+ adapter: AdapterName;
94
105
  model?: string;
95
106
  status: "succeeded" | "failed" | "cached";
96
107
  attempts: number;
@@ -99,6 +110,11 @@ export interface WorkflowAgentProof {
99
110
  session_id?: string;
100
111
  result?: ResultDigest;
101
112
  error?: string;
113
+ /** Set on a failed agent whose spawn was classified uninformative about the
114
+ * work (ADR 0046): environment (binary absent) or upstream (vendor refused).
115
+ * Absent ⇒ a work failure. Recorded even when a script's parallel() swallows
116
+ * the rejection, so the run-level class can still be derived from proof. */
117
+ class?: SpawnFailureClass;
102
118
  }
103
119
 
104
120
  export interface WorkflowRepoSnapshot {
@@ -126,16 +142,16 @@ export interface WorkflowRepoEvidence {
126
142
  };
127
143
  }
128
144
 
129
- /** Bounded pointer to the live attestation backing a harness's claims
145
+ /** Bounded pointer to the live attestation backing a adapter's claims
130
146
  * (ADR 0038). Structural facts only: no prompt text, no host paths. */
131
- export interface HarnessAttestationCitation {
147
+ export interface AdapterAttestationCitation {
132
148
  binary_version: string;
133
149
  observed_at: string;
134
150
  record_digest: string;
135
151
  }
136
152
 
137
- export interface HarnessEvidenceCoverage {
138
- harness: HarnessName;
153
+ export interface AdapterEvidenceCoverage {
154
+ adapter: AdapterName;
139
155
  tool_evidence: {
140
156
  support: "supported" | "partial" | "unsupported" | "unknown";
141
157
  note?: string;
@@ -145,10 +161,10 @@ export interface HarnessEvidenceCoverage {
145
161
  session_ids: number;
146
162
  costs: number;
147
163
  };
148
- /** What backs this harness's capability claims (ADR 0038). Absent when the
164
+ /** What backs this adapter's capability claims (ADR 0038). Absent when the
149
165
  * host recorded no live attestation, which is the common case and is not by
150
166
  * itself a proof unknown. */
151
- attestation?: HarnessAttestationCitation;
167
+ attestation?: AdapterAttestationCitation;
152
168
  }
153
169
 
154
170
  export interface WorkflowSandboxProjectionEvidence {
@@ -161,12 +177,12 @@ export interface WorkflowSandboxProjectionEvidence {
161
177
  export interface WorkflowProofUnknown {
162
178
  code:
163
179
  | "tool_evidence_unavailable"
164
- | "harness_capability_unregistered"
180
+ | "adapter_capability_unregistered"
165
181
  | "agent_cost_unreported"
166
182
  | "agent_session_unreported"
167
183
  | "repository_drift_incomplete";
168
184
  message: string;
169
- harness?: HarnessName;
185
+ adapter?: AdapterName;
170
186
  agent_id?: string;
171
187
  }
172
188
 
@@ -186,6 +202,17 @@ export interface WorkflowProof {
186
202
  objective?: string;
187
203
  error?: string;
188
204
  result?: ResultDigest;
205
+ /** Set on a failed run that was uninformative about the work (ADR 0046):
206
+ * environment, upstream, or decision. The first two are derived from the
207
+ * agents' classes when no agent produced a result; `decision` is declared by
208
+ * the script through ctx.blocked(). Absent ⇒ the attempt is charged as
209
+ * before. The durable work projection reads this to decide charging,
210
+ * stopping, and the uncharged-attempt bound. */
211
+ class?: RunFailureClass;
212
+ /** Docket id of the decision this run stopped on. Only ever set alongside
213
+ * class "decision", and only when the script named one. Carried so the work
214
+ * projection can point a human at the exact question rather than at prose. */
215
+ decision_id?: string;
189
216
  };
190
217
  acceptance: {
191
218
  criteria: AcceptanceResult[];
@@ -201,11 +228,11 @@ export interface WorkflowProof {
201
228
  * Absent means no projection was applied, which is the default. Present means
202
229
  * the run can be audited for exactly what its children could write. */
203
230
  sandbox_projection?: WorkflowSandboxProjectionEvidence;
204
- harnesses: HarnessEvidenceCoverage[];
231
+ adapters: AdapterEvidenceCoverage[];
205
232
  unknowns: WorkflowProofUnknown[];
206
233
  integrity: {
207
- journal: {
208
- path: "journal.jsonl";
234
+ transcript: {
235
+ path: "transcript.jsonl";
209
236
  sha256: string;
210
237
  bytes: number;
211
238
  };
@@ -228,8 +255,8 @@ export interface WorkflowPolicyProof {
228
255
  };
229
256
  }
230
257
 
231
- export interface HarnessEvidenceCapability {
232
- toolEvidence: HarnessEvidenceCoverage["tool_evidence"];
258
+ export interface AdapterEvidenceCapability {
259
+ toolEvidence: AdapterEvidenceCoverage["tool_evidence"];
233
260
  }
234
261
 
235
262
  /** JSON-schema *subset* accepted by stage gates (see validate.ts). */
@@ -261,36 +288,36 @@ export interface AgentOpts {
261
288
  * validate; the engine retries with the validation error appended, up to
262
289
  * `maxAttempts`. Without it, `agent()` resolves to the raw reply text. */
263
290
  schema?: StageSchema;
264
- /** Model slug passed through to the harness CLI (default: the CLI's default). */
291
+ /** Model slug passed through to the adapter CLI (default: the CLI's default). */
265
292
  model?: string;
266
- /** Reasoning effort mapped through the selected harness profile. Unsupported
293
+ /** Reasoning effort mapped through the selected adapter profile. Unsupported
267
294
  * values fail before the vendor process starts. */
268
295
  effort?: string;
269
296
  /** Attempt ceiling for the schema-retry loop (default 2). */
270
297
  maxAttempts?: number;
271
298
  /** Subprocess timeout ms (default 300_000). */
272
299
  timeoutMs?: number;
273
- /** Harness-turn ceiling for the child (default 25; use 1 for pure
300
+ /** Adapter-turn ceiling for the child (default 25; use 1 for pure
274
301
  * classification stages — cheaper and faster). */
275
302
  maxTurns?: number;
276
- /** Display label in the journal (default: prompt head). */
303
+ /** Display label in the transcript (default: prompt head). */
277
304
  label?: string;
278
- /** Which harness runs this agent (default: the run's default harness).
279
- * Mixed-harness workflows are legal: triage on one CLI, deep work on
305
+ /** Which adapter runs this agent (default: the run's default adapter).
306
+ * Mixed-adapter workflows are legal: triage on one CLI, deep work on
280
307
  * another. */
281
- harness?: HarnessName;
308
+ adapter?: AdapterName;
282
309
  }
283
310
 
284
311
  /** Open registry key. The built-in catalog currently contains Claude Code,
285
312
  * Codex, and Cursor; consumers may register another adapter without widening
286
313
  * a package-owned union first. */
287
- export type HarnessName = string;
314
+ export type AdapterName = string;
288
315
 
289
- /** Durable role defaults supplied by a goal supervisor or embedding host.
316
+ /** Durable role defaults supplied by a goal governor or embedding host.
290
317
  * Profiles are frozen into a workflow run manifest before the first spawn. */
291
318
  export interface WorkflowSpecialistProfile {
292
319
  instructions: string;
293
- harness?: HarnessName;
320
+ adapter?: AdapterName;
294
321
  model?: string;
295
322
  effort?: string;
296
323
  maxAttempts?: number;
@@ -298,17 +325,51 @@ export interface WorkflowSpecialistProfile {
298
325
  maxTurns?: number;
299
326
  }
300
327
 
328
+ /**
329
+ * Why a failed run was uninformative about the work (ADR 0046). Absent means
330
+ * the attempt produced information about the work (or succeeded), which is the
331
+ * default and is charged against the attempt budget exactly as before.
332
+ *
333
+ * - `environment`: the run never started — a precondition was missing (the
334
+ * vendor binary was absent). Uncharged AND not retried: retrying an unchanged
335
+ * environment cannot help, so the work item stops and names the precondition.
336
+ * - `upstream`: the vendor was reached and refused (5xx, 429, circuit open).
337
+ * Uncharged, but retry stays available (bounded by max_uncharged_attempts).
338
+ */
339
+ export type SpawnFailureClass = "environment" | "upstream";
340
+
341
+ /**
342
+ * Why a failed run was uninformative about the work. A superset of
343
+ * {@link SpawnFailureClass}: a spawn can fail for reasons outside the work, and
344
+ * so can the script itself.
345
+ *
346
+ * - `decision`: the script reached a correct conclusion and that conclusion is
347
+ * that a human must rule before the work can proceed. Nothing about the work
348
+ * was wrong, so the attempt is uncharged; nothing about a retry can help,
349
+ * because the blocker is a person, so the item stops and names the decision.
350
+ *
351
+ * This class exists because without it a correct refusal and a botched attempt
352
+ * are the same outcome to the engine. Automatic retry then re-issues work an
353
+ * agent already answered correctly, once per attempt budget, and the answer is
354
+ * identical every time — the loop cannot converge, because the thing it is
355
+ * waiting for is a person who was never told.
356
+ */
357
+ export type RunFailureClass = SpawnFailureClass | "decision";
358
+
301
359
  /** What a spawn adapter returns for one subagent run. */
302
360
  export interface SpawnResult {
303
361
  ok: boolean;
304
362
  /** The model's final reply text (envelope-unwrapped). */
305
363
  text: string;
306
- /** Child harness session id when the envelope carries one. */
364
+ /** Child adapter session id when the envelope carries one. */
307
365
  sessionId?: string;
308
366
  costUsd?: number;
309
367
  durationMs: number;
310
368
  /** Populated when ok=false. */
311
369
  error?: string;
370
+ /** Set when ok=false and the failure was positively identified as
371
+ * uninformative about the work. Absent ⇒ a work failure (charged). */
372
+ class?: SpawnFailureClass;
312
373
  }
313
374
 
314
375
  export interface SpawnRequest {
@@ -321,6 +382,10 @@ export interface SpawnRequest {
321
382
  /** Run id, stamped into the child env (HARNERY_WORKFLOW_RUN_ID) so the
322
383
  * coord layer can associate child sessions with their workflow run. */
323
384
  runId?: string;
385
+ /** Transcript agent id (`a1`, `a2`, …), stamped into the child env
386
+ * (HARNERY_WORKFLOW_AGENT_ID) so in-flight child activity attributes to one
387
+ * agent row rather than only to the run. */
388
+ agentId?: string;
324
389
  /** Scrub all API-key vars from the child env so it can only authenticate
325
390
  * via its stored (subscription) login. See billing.ts. */
326
391
  subscriptionOnly?: boolean;
@@ -370,14 +435,33 @@ export interface WorkflowContext {
370
435
  agent: (prompt: string, opts?: AgentOpts) => Promise<unknown>;
371
436
  /** Run thunks with bounded concurrency; a rejected thunk resolves to null. */
372
437
  parallel: <T>(thunks: Array<() => Promise<T>>) => Promise<Array<T | null>>;
373
- /** Declare the current stage (journal + progress grouping). */
438
+ /** Declare the current stage (transcript + progress grouping). */
374
439
  stage: (title: string) => void;
375
- /** Narrate progress (stderr + journal). */
440
+ /** Narrate progress (stderr + transcript). */
376
441
  log: (message: string) => void;
377
442
  /** Attach a bounded, sourced receipt to the run and optional acceptance criteria. */
378
443
  evidence: (input: WorkflowEvidenceInput) => string;
379
444
  /** Authorize one host-mediated external mutation before performing it. */
380
445
  authorize: (input: ExternalMutationRequest) => Promise<PolicyDecision>;
446
+ /** Stop the run because a human must rule before the work can proceed.
447
+ *
448
+ * This is not a failure and must not be used as one. Reach for it only when
449
+ * the script determined something *correct* — that the question in front of
450
+ * it belongs to a person. The run ends uncharged and the work item stops
451
+ * naming the decision, so no automatic retry re-issues work that was already
452
+ * answered correctly. A plain `throw` means the opposite: the work failed and
453
+ * a retry might do better. */
454
+ blocked: (input: BlockedInput) => never;
455
+ }
456
+
457
+ /** Why a run stopped on a human. */
458
+ export interface BlockedInput {
459
+ /** What a human has to settle, in one sentence. Shown verbatim to the
460
+ * operator as the work item's reason, so write it for them, not for a log. */
461
+ reason: string;
462
+ /** Docket id of the decision to resolve. Strongly preferred: without it the
463
+ * operator gets prose and has to go find the question themselves. */
464
+ decision?: string;
381
465
  }
382
466
 
383
467
  export interface WorkflowMeta {
@@ -442,18 +526,18 @@ export interface WorkflowOperatorFinding {
442
526
  }
443
527
 
444
528
  export interface EngineOpts {
445
- /** Repo root whose .harnery/ receives the run journal. */
529
+ /** Repo root whose .harnery/ receives the run transcript. */
446
530
  coordRoot: string;
447
- /** Spawner registry keyed by harness. A single-harness caller registers one
448
- * entry and names it in `defaultHarness`. */
449
- spawners: Readonly<Record<HarnessName, Spawner | undefined>>;
450
- /** Harness used when an agent() call doesn't name one (default "claude-code"). */
451
- defaultHarness?: HarnessName;
531
+ /** Spawner registry keyed by adapter. A single-adapter caller registers one
532
+ * entry and names it in `defaultAdapter`. */
533
+ spawners: Readonly<Record<AdapterName, Spawner | undefined>>;
534
+ /** Adapter used when an agent() call doesn't name one (default "claude-code"). */
535
+ defaultAdapter?: AdapterName;
452
536
  /** Named specialist roles available to agent(..., { specialist }). */
453
537
  specialists?: Readonly<Record<string, WorkflowSpecialistProfile>>;
454
- /** Resume: run id of a prior run whose journal supplies cached results.
538
+ /** Resume: run id of a prior run whose transcript supplies cached results.
455
539
  * agent() calls whose (stage, prompt, model, maxTurns, schema) key matches a
456
- * completed prior agent return the journaled result without spawning. */
540
+ * completed prior agent return the transcripted result without spawning. */
457
541
  resumeFrom?: string;
458
542
  /** Continue a parked run in its original directory after its durable
459
543
  * approval has been resolved. The frozen run manifest supplies execution
@@ -478,7 +562,7 @@ export interface EngineOpts {
478
562
  /** Progress sink (default: process.stderr). */
479
563
  onLog?: (line: string) => void;
480
564
  /** Guarantee subscription billing: API-key vars are scrubbed from every
481
- * child env, and a harness whose stored login is provably absent fails
565
+ * child env, and a adapter whose stored login is provably absent fails
482
566
  * loud before spawning. */
483
567
  subscriptionOnly?: boolean;
484
568
  /** Permit the api-key-override billing state (an exported API key silently
@@ -490,10 +574,10 @@ export interface EngineOpts {
490
574
  probeBilling?: BillingProber;
491
575
  /** Capability claims used to state whether adapter-native tool evidence was
492
576
  * available. Missing claims remain unknown. */
493
- harnessEvidence?: Readonly<Record<HarnessName, HarnessEvidenceCapability | undefined>>;
494
- /** Live attestations backing each harness's claims (ADR 0038). Read once by
577
+ adapterEvidence?: Readonly<Record<AdapterName, AdapterEvidenceCapability | undefined>>;
578
+ /** Live attestations backing each adapter's claims (ADR 0038). Read once by
495
579
  * the host and injected, so the engine performs no capability lookups. */
496
- harnessAttestations?: Readonly<Record<HarnessName, HarnessAttestationCitation | undefined>>;
580
+ adapterAttestations?: Readonly<Record<AdapterName, AdapterAttestationCitation | undefined>>;
497
581
  /** Filesystem policy projected into every child's own vendor sandbox
498
582
  * (ADR 0039). Validated against the workspace binding before the first spawn,
499
583
  * and recorded in proof. Absent leaves every adapter invocation unchanged. */
@@ -524,7 +608,7 @@ export interface EngineOpts {
524
608
  approvalAddressee?: string;
525
609
  /** Execution boundary created by the host (default shared). */
526
610
  isolation?: PolicyIsolation;
527
- /** Network state of spawned harness subprocesses (default unknown). */
611
+ /** Network state of spawned adapter subprocesses (default unknown). */
528
612
  networkAccess?: PolicyNetworkAccess;
529
613
  /** Explicit provider and host-owned roots. Omit for shared or declaration-only execution. */
530
614
  workspace?: {
@@ -540,19 +624,19 @@ export interface RunReport {
540
624
  /** What the script's default export returned. */
541
625
  result: unknown;
542
626
  agentsSpawned: number;
543
- /** agent() calls satisfied from the resumeFrom journal without spawning. */
627
+ /** agent() calls satisfied from the resumeFrom transcript without spawning. */
544
628
  agentsCached: number;
545
629
  costUsd: number;
546
630
  durationMs: number;
547
- journalPath: string;
631
+ transcriptPath: string;
548
632
  proofPath: string;
549
633
  acceptance: AcceptanceSummary;
550
634
  /** Estimated tokens of repo instructions (CLAUDE.md/AGENTS.md at the child
551
635
  * cwd) that EVERY child cache-writes on spawn — the fixed per-child context
552
636
  * overhead a fan-out multiplies. bytes/4 heuristic; 0 when no such file. */
553
637
  contextTokensPerChildEstimate: number;
554
- /** Billing mode per harness actually used this run (probed on first use). */
555
- billing: Array<{ harness: HarnessName; mode: BillingMode }>;
638
+ /** Billing mode per adapter actually used this run (probed on first use). */
639
+ billing: Array<{ adapter: AdapterName; mode: BillingMode }>;
556
640
  /** Policy verdict totals when the host supplied a policy. */
557
641
  policy?: WorkflowPolicyProof["summary"];
558
642
  /** Isolated workspace binding when this run requested a provider capability. */
@@ -114,7 +114,7 @@ export function validateAgainstSchema(value: unknown, schema: StageSchema, path
114
114
  /**
115
115
  * Parse one schema-gated JSON value.
116
116
  *
117
- * Exact JSON and a whole fenced value remain the normal paths. Some harnesses
117
+ * Exact JSON and a whole fenced value remain the normal paths. Some adapters
118
118
  * prepend a short narration despite an explicit JSON-only contract. Accept
119
119
  * that drift only when the reply contains exactly one unambiguous top-level
120
120
  * object or array, the value reaches the end of the reply, and JSON.parse
@@ -5,7 +5,7 @@ import {
5
5
  } from "../../work/state.ts";
6
6
  import { readWorkflowRunManifest } from "../run-state.ts";
7
7
  import {
8
- appendWorkflowJournalEvent,
8
+ appendWorkflowTranscriptEvent,
9
9
  readWorkflowSupplement,
10
10
  stableDigest,
11
11
  writeWorkflowSupplement,
@@ -72,7 +72,7 @@ export async function cancelWorkspace(
72
72
  reason: result.reason,
73
73
  };
74
74
  writeWorkflowSupplement(input.coordRoot, input.runId, "cancellation/outcome.json", receipt);
75
- appendWorkflowJournalEvent(input.coordRoot, input.runId, "workspace.cancel", {
75
+ appendWorkflowTranscriptEvent(input.coordRoot, input.runId, "workspace.cancel", {
76
76
  binding_id: binding.binding_id,
77
77
  provider_id: binding.provider.id,
78
78
  receipt_id: receipt.receipt_id,
@@ -5,7 +5,7 @@ import { acquireNoClobberLease } from "./leases.ts";
5
5
  import { containsPath } from "./paths.ts";
6
6
  import {
7
7
  appendCleanupAttempt,
8
- appendWorkflowJournalEvent,
8
+ appendWorkflowTranscriptEvent,
9
9
  readCleanupAttempts,
10
10
  readWorkflowSupplement,
11
11
  stableDigest,
@@ -112,7 +112,7 @@ async function cleanupWorkspaceUnderLease(
112
112
  reason: result.reason,
113
113
  recorded_at: result.recorded_at,
114
114
  });
115
- appendWorkflowJournalEvent(input.coordRoot, input.runId, "workspace.cleanup", {
115
+ appendWorkflowTranscriptEvent(input.coordRoot, input.runId, "workspace.cleanup", {
116
116
  binding_id: binding.binding_id,
117
117
  provider_id: binding.provider.id,
118
118
  operation_id: intent.operation_id,
@@ -10,7 +10,7 @@ import {
10
10
  sameFilesystemIdentity,
11
11
  validateConfiguredRoot,
12
12
  } from "./paths.ts";
13
- import { appendWorkflowJournalEvent, stableDigest, writeWorkspaceRequest } from "./state.ts";
13
+ import { appendWorkflowTranscriptEvent, stableDigest, writeWorkspaceRequest } from "./state.ts";
14
14
  import type {
15
15
  WorkspaceAttestation,
16
16
  WorkspaceBinding,
@@ -72,7 +72,7 @@ export async function resolveWorkspaceBinding(input: {
72
72
  unknowns: [],
73
73
  receipts: {},
74
74
  };
75
- appendWorkflowJournalEvent(input.opts.coordRoot, input.runId, "workspace.compatibility", {
75
+ appendWorkflowTranscriptEvent(input.opts.coordRoot, input.runId, "workspace.compatibility", {
76
76
  requested_isolation: fallback.requested_isolation,
77
77
  effective_isolation: fallback.effective_isolation,
78
78
  selection_reason: fallback.selection_reason,
@@ -114,7 +114,7 @@ export async function resolveWorkspaceBinding(input: {
114
114
  }
115
115
  throw new Error(`workflow run ${input.runId} could not reattach its frozen workspace`);
116
116
  }
117
- appendWorkflowJournalEvent(input.opts.coordRoot, input.runId, "workspace.reattach", {
117
+ appendWorkflowTranscriptEvent(input.opts.coordRoot, input.runId, "workspace.reattach", {
118
118
  binding_id: frozenBinding.binding_id,
119
119
  provider_id: frozenBinding.provider.id,
120
120
  attestation_sha256: stableDigest(reattached),
@@ -180,7 +180,7 @@ export async function resolveWorkspaceBinding(input: {
180
180
  unknowns: [...probe.unknowns],
181
181
  receipts: {},
182
182
  };
183
- appendWorkflowJournalEvent(input.opts.coordRoot, input.runId, "workspace.fallback", {
183
+ appendWorkflowTranscriptEvent(input.opts.coordRoot, input.runId, "workspace.fallback", {
184
184
  requested_isolation: fallback.requested_isolation,
185
185
  effective_isolation: fallback.effective_isolation,
186
186
  selection_reason: fallback.selection_reason,
@@ -226,7 +226,7 @@ export async function resolveWorkspaceBinding(input: {
226
226
  idempotency_key: stableDigest(requestWithoutKey),
227
227
  };
228
228
  writeWorkspaceRequest(input.opts.coordRoot, request);
229
- appendWorkflowJournalEvent(input.opts.coordRoot, input.runId, "execution.allocate.start", {
229
+ appendWorkflowTranscriptEvent(input.opts.coordRoot, input.runId, "execution.allocate.start", {
230
230
  provider_id: probe.capabilities.provider_id,
231
231
  request_sha256: stableDigest(request),
232
232
  });
@@ -261,7 +261,7 @@ export async function resolveWorkspaceBinding(input: {
261
261
  }
262
262
  throw new Error("workspace provider returned a binding that failed initial attestation");
263
263
  }
264
- appendWorkflowJournalEvent(input.opts.coordRoot, input.runId, "execution.allocate.end", {
264
+ appendWorkflowTranscriptEvent(input.opts.coordRoot, input.runId, "execution.allocate.end", {
265
265
  binding_id: binding.binding_id,
266
266
  provider_id: binding.provider.id,
267
267
  active_root: binding.active_root,
@@ -97,7 +97,7 @@ export type WorkflowWorkspaceInspection =
97
97
  | { ok: true; value: WorkflowWorkspaceStatus }
98
98
  | { ok: false; run_id: string; error: string };
99
99
 
100
- interface WorkflowJournalProjectionEvent {
100
+ interface WorkflowTranscriptProjectionEvent {
101
101
  event: string;
102
102
  ok?: boolean;
103
103
  status?: "blocked" | "lost" | "cancelled" | "unsupported" | "preserved_dirty";
@@ -119,7 +119,7 @@ export function readWorkflowWorkspaceStatus(
119
119
  const root = resolve(coordRoot);
120
120
  const runDir = workflowRunDir(root, runId);
121
121
  const manifest = readWorkflowRunManifest(root, runId);
122
- const journal = readWorkspaceJournal(runDir, runId);
122
+ const transcript = readWorkspaceTranscript(runDir, runId);
123
123
  const proofPath = join(runDir, "proof.json");
124
124
  const proof = existsSync(proofPath) ? readWorkflowProof(root, runId) : undefined;
125
125
  const proofSha256 = proof ? fileSha256(proofPath) : undefined;
@@ -129,7 +129,7 @@ export function readWorkflowWorkspaceStatus(
129
129
  if (!binding) {
130
130
  const lifecycle = deriveWorkspaceLifecycle({
131
131
  manifest,
132
- workflow_journal: journal,
132
+ workflow_transcript: transcript,
133
133
  proof,
134
134
  proof_sha256: proofSha256,
135
135
  allocation_unsupported: fallback !== undefined,
@@ -212,7 +212,7 @@ export function readWorkflowWorkspaceStatus(
212
212
  binding,
213
213
  provider_events: providerEvents,
214
214
  manifest,
215
- workflow_journal: journal,
215
+ workflow_transcript: transcript,
216
216
  proof,
217
217
  proof_sha256: proofSha256,
218
218
  integration_plan: integrationPlan,
@@ -355,8 +355,11 @@ export function renderWorkflowWorkspaceStatus(status: WorkflowWorkspaceStatus):
355
355
 
356
356
  const MAX_LISTED_DIRTY_PATHS = 12;
357
357
 
358
- function readWorkspaceJournal(runDir: string, runId: string): WorkflowJournalProjectionEvent[] {
359
- const path = join(runDir, "journal.jsonl");
358
+ function readWorkspaceTranscript(
359
+ runDir: string,
360
+ runId: string,
361
+ ): WorkflowTranscriptProjectionEvent[] {
362
+ const path = join(runDir, "transcript.jsonl");
360
363
  if (!existsSync(path)) return [];
361
364
  return readFileSync(path, "utf8")
362
365
  .split("\n")
@@ -367,7 +370,7 @@ function readWorkspaceJournal(runDir: string, runId: string): WorkflowJournalPro
367
370
  record = JSON.parse(line) as Record<string, unknown>;
368
371
  } catch (error) {
369
372
  throw new Error(
370
- `cannot parse workflow journal event ${index + 1}: ${
373
+ `cannot parse workflow transcript event ${index + 1}: ${
371
374
  error instanceof Error ? error.message : String(error)
372
375
  }`,
373
376
  );
@@ -376,12 +379,12 @@ function readWorkspaceJournal(runDir: string, runId: string): WorkflowJournalPro
376
379
  typeof record.event !== "string" ||
377
380
  (record.run_id !== undefined && record.run_id !== runId)
378
381
  ) {
379
- throw new Error(`workflow journal event ${index + 1} is foreign or unsupported`);
382
+ throw new Error(`workflow transcript event ${index + 1} is foreign or unsupported`);
380
383
  }
381
384
  return {
382
385
  event: record.event,
383
386
  ok: typeof record.ok === "boolean" ? record.ok : undefined,
384
- status: journalStatus(record.status),
387
+ status: transcriptStatus(record.status),
385
388
  work_event_seq:
386
389
  typeof record.work_event_seq === "number" ? record.work_event_seq : undefined,
387
390
  work_event_sha256:
@@ -424,10 +427,10 @@ function cleanupState(
424
427
  return intent || attemptStatus ? "pending" : "not_requested";
425
428
  }
426
429
 
427
- function journalStatus(value: unknown): WorkflowJournalProjectionEvent["status"] {
430
+ function transcriptStatus(value: unknown): WorkflowTranscriptProjectionEvent["status"] {
428
431
  return typeof value === "string" &&
429
432
  ["blocked", "lost", "cancelled", "unsupported", "preserved_dirty"].includes(value)
430
- ? (value as WorkflowJournalProjectionEvent["status"])
433
+ ? (value as WorkflowTranscriptProjectionEvent["status"])
431
434
  : undefined;
432
435
  }
433
436
 
@@ -16,7 +16,7 @@ import { readWorkflowRunManifest } from "../run-state.ts";
16
16
  import { acquireNoClobberLease } from "./leases.ts";
17
17
  import {
18
18
  appendIntegrationAttempt,
19
- appendWorkflowJournalEvent,
19
+ appendWorkflowTranscriptEvent,
20
20
  fileSha256,
21
21
  readIntegrationAttempts,
22
22
  readWorkflowSupplement,
@@ -177,7 +177,7 @@ export async function prepareIntegration(input: PrepareIntegrationInput): Promis
177
177
  }
178
178
  if (!prior) {
179
179
  writeWorkflowSupplement(input.coordRoot, input.runId, "integration/plan.json", plan);
180
- appendWorkflowJournalEvent(input.coordRoot, input.runId, "integration.plan", {
180
+ appendWorkflowTranscriptEvent(input.coordRoot, input.runId, "integration.plan", {
181
181
  plan_id: plan.plan_id,
182
182
  plan_sha256: stableDigest(plan),
183
183
  });
@@ -236,12 +236,12 @@ export async function applyIntegration(
236
236
  }
237
237
  if (
238
238
  authorization.decision_sha256 !== stableDigest(authorization.decision) ||
239
- authorization.journal_anchor.event !== "integration.plan" ||
240
- authorization.journal_anchor.plan_sha256 !== planSha256
239
+ authorization.transcript_anchor.event !== "integration.plan" ||
240
+ authorization.transcript_anchor.plan_sha256 !== planSha256
241
241
  ) {
242
- throw new Error("integration authorization digest or journal anchor is corrupt");
242
+ throw new Error("integration authorization digest or transcript anchor is corrupt");
243
243
  }
244
- assertIntegrationPlanJournal(input.coordRoot, input.runId, planSha256);
244
+ assertIntegrationPlanTranscript(input.coordRoot, input.runId, planSha256);
245
245
  if (authorization.approval_id) {
246
246
  const approval = readWorkflowApproval(input.coordRoot, authorization.approval_id);
247
247
  if (
@@ -397,7 +397,7 @@ export async function applyIntegration(
397
397
  applied_at: providerResult.applied_at,
398
398
  };
399
399
  writeWorkflowSupplement(input.coordRoot, input.runId, "integration/receipt.json", receipt);
400
- appendWorkflowJournalEvent(input.coordRoot, input.runId, "integration.apply", {
400
+ appendWorkflowTranscriptEvent(input.coordRoot, input.runId, "integration.apply", {
401
401
  receipt_id: receipt.receipt_id,
402
402
  status: receipt.status,
403
403
  target_commit: receipt.target_commit,
@@ -721,7 +721,7 @@ function authorizePlan(input: PrepareIntegrationInput, plan: IntegrationPlan): v
721
721
  approval_id: approvalId,
722
722
  approval_actor: approvalActor,
723
723
  approval_sha256: approvalSha256,
724
- journal_anchor: {
724
+ transcript_anchor: {
725
725
  event: "integration.plan",
726
726
  plan_sha256: stableDigest(plan),
727
727
  },
@@ -740,7 +740,7 @@ function authorizePlan(input: PrepareIntegrationInput, plan: IntegrationPlan): v
740
740
  prior.decision_sha256 !== stableDigest(prior.decision) ||
741
741
  prior.approval_id !== authorization.approval_id ||
742
742
  prior.approval_sha256 !== authorization.approval_sha256 ||
743
- stableDigest(prior.journal_anchor) !== stableDigest(authorization.journal_anchor)
743
+ stableDigest(prior.transcript_anchor) !== stableDigest(authorization.transcript_anchor)
744
744
  ) {
745
745
  throw new Error("existing integration authorization does not match the exact plan");
746
746
  }
@@ -752,7 +752,7 @@ function authorizePlan(input: PrepareIntegrationInput, plan: IntegrationPlan): v
752
752
  "integration/authorization.json",
753
753
  authorization,
754
754
  );
755
- appendWorkflowJournalEvent(input.coordRoot, input.runId, "integration.authorized", {
755
+ appendWorkflowTranscriptEvent(input.coordRoot, input.runId, "integration.authorized", {
756
756
  plan_id: plan.plan_id,
757
757
  authorization_sha256: stableDigest(authorization),
758
758
  policy_sha256: authorization.policy_sha256,
@@ -787,8 +787,12 @@ function requiredIntegrationRoot(binding: WorkspaceBinding): string {
787
787
  return binding.integration_root;
788
788
  }
789
789
 
790
- function assertIntegrationPlanJournal(coordRoot: string, runId: string, planSha256: string): void {
791
- const path = join(workflowRunDir(coordRoot, runId), "journal.jsonl");
790
+ function assertIntegrationPlanTranscript(
791
+ coordRoot: string,
792
+ runId: string,
793
+ planSha256: string,
794
+ ): void {
795
+ const path = join(workflowRunDir(coordRoot, runId), "transcript.jsonl");
792
796
  let records: Array<Record<string, unknown>>;
793
797
  try {
794
798
  records = readFileSync(path, "utf8")
@@ -796,7 +800,7 @@ function assertIntegrationPlanJournal(coordRoot: string, runId: string, planSha2
796
800
  .filter(Boolean)
797
801
  .map((line) => JSON.parse(line) as Record<string, unknown>);
798
802
  } catch (error) {
799
- throw new Error(`workflow journal is corrupt: ${(error as Error).message}`);
803
+ throw new Error(`workflow transcript is corrupt: ${(error as Error).message}`);
800
804
  }
801
805
  if (
802
806
  records.some((record) => record.run_id !== runId || typeof record.event !== "string") ||
@@ -804,7 +808,7 @@ function assertIntegrationPlanJournal(coordRoot: string, runId: string, planSha2
804
808
  (record) => record.event === "integration.plan" && record.plan_sha256 === planSha256,
805
809
  )
806
810
  ) {
807
- throw new Error("integration plan journal anchor is missing or mismatched");
811
+ throw new Error("integration plan transcript anchor is missing or mismatched");
808
812
  }
809
813
  }
810
814