harnery 0.30.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 (501) 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.map +1 -1
  51. package/dist/commands/work.js +38 -22
  52. package/dist/commands/workflow.d.ts.map +1 -1
  53. package/dist/commands/workflow.js +35 -28
  54. package/dist/core/{harnesses → adapters}/attest-projection.d.ts +2 -2
  55. package/dist/core/adapters/attest-projection.d.ts.map +1 -0
  56. package/dist/core/{harnesses → adapters}/attest.d.ts +16 -16
  57. package/dist/core/adapters/attest.d.ts.map +1 -0
  58. package/dist/core/{harnesses → adapters}/attest.js +9 -9
  59. package/dist/core/{harnesses → adapters}/attestation.d.ts +16 -16
  60. package/dist/core/adapters/attestation.d.ts.map +1 -0
  61. package/dist/core/{harnesses → adapters}/attestation.js +20 -20
  62. package/dist/core/{harnesses → adapters}/bench.d.ts +12 -12
  63. package/dist/core/adapters/bench.d.ts.map +1 -0
  64. package/dist/core/{harnesses → adapters}/bench.js +12 -12
  65. package/dist/core/adapters/index.d.ts +13 -0
  66. package/dist/core/adapters/index.d.ts.map +1 -0
  67. package/dist/core/adapters/index.js +6 -0
  68. package/dist/core/{harnesses → adapters}/profiles.d.ts +11 -11
  69. package/dist/core/adapters/profiles.d.ts.map +1 -0
  70. package/dist/core/{harnesses → adapters}/profiles.js +11 -11
  71. package/dist/core/adapters/registry.d.ts +15 -0
  72. package/dist/core/adapters/registry.d.ts.map +1 -0
  73. package/dist/core/{harnesses → adapters}/registry.js +11 -11
  74. package/dist/core/{harnesses → adapters}/types.d.ts +23 -23
  75. package/dist/core/adapters/types.d.ts.map +1 -0
  76. package/dist/core/{harnesses → adapters}/types.js +1 -1
  77. package/dist/core/agents/canonical-emit.d.ts +4 -4
  78. package/dist/core/agents/canonical-emit.js +5 -5
  79. package/dist/core/agents/cli-emit.js +1 -1
  80. package/dist/core/agents/cli.js +30 -26
  81. package/dist/core/agents/codex-replay.d.ts +1 -1
  82. package/dist/core/agents/codex-replay.js +6 -6
  83. package/dist/core/agents/coord-client.d.ts +21 -2
  84. package/dist/core/agents/coord-client.d.ts.map +1 -1
  85. package/dist/core/agents/coord-client.js +122 -27
  86. package/dist/core/agents/events/consume.d.ts +1 -1
  87. package/dist/core/agents/events/emit.d.ts +5 -6
  88. package/dist/core/agents/events/emit.d.ts.map +1 -1
  89. package/dist/core/agents/events/emit.js +2 -2
  90. package/dist/core/agents/render/prompt-context.d.ts +21 -9
  91. package/dist/core/agents/render/prompt-context.d.ts.map +1 -1
  92. package/dist/core/agents/render/prompt-context.js +82 -30
  93. package/dist/core/agents/render/session-context.d.ts +1 -1
  94. package/dist/core/agents/render/session-context.js +5 -5
  95. package/dist/core/agents/rules/claim-conflict.d.ts +2 -6
  96. package/dist/core/agents/rules/claim-conflict.d.ts.map +1 -1
  97. package/dist/core/agents/rules/claim-conflict.js +1 -1
  98. package/dist/core/agents/rules/commit-conflict.js +98 -22
  99. package/dist/core/agents/rules/stop-hook.d.ts +9 -9
  100. package/dist/core/agents/rules/stop-hook.d.ts.map +1 -1
  101. package/dist/core/agents/rules/stop-hook.js +23 -5
  102. package/dist/core/agents/rules/verdict.d.ts +14 -0
  103. package/dist/core/agents/rules/verdict.d.ts.map +1 -0
  104. package/dist/core/agents/rules/verdict.js +1 -0
  105. package/dist/core/agents/session-events.js +3 -3
  106. package/dist/core/agents/state/council.d.ts +1 -1
  107. package/dist/core/agents/state/council.js +1 -1
  108. package/dist/core/agents/state/heartbeat-projector.d.ts +3 -2
  109. package/dist/core/agents/state/heartbeat-projector.d.ts.map +1 -1
  110. package/dist/core/agents/state/heartbeat-projector.js +14 -10
  111. package/dist/core/agents/state/heartbeat-writer.d.ts +1 -1
  112. package/dist/core/agents/state/heartbeat-writer.js +12 -12
  113. package/dist/core/agents/state/{scratch.d.ts → journal.d.ts} +7 -7
  114. package/dist/core/agents/state/{scratch.d.ts.map → journal.d.ts.map} +1 -1
  115. package/dist/core/agents/state/{scratch.js → journal.js} +12 -12
  116. package/dist/core/agents/state/pidmap.d.ts +28 -4
  117. package/dist/core/agents/state/pidmap.d.ts.map +1 -1
  118. package/dist/core/agents/state/pidmap.js +130 -15
  119. package/dist/core/agents/state/proc-start.d.ts +95 -0
  120. package/dist/core/agents/state/proc-start.d.ts.map +1 -0
  121. package/dist/core/agents/state/proc-start.js +199 -0
  122. package/dist/core/agents/state/shell-mutation.d.ts +1 -1
  123. package/dist/core/agents/state/shell-mutation.js +1 -1
  124. package/dist/core/agents/state/stale-sweep.js +7 -7
  125. package/dist/core/artifacts/index.d.ts +86 -0
  126. package/dist/core/artifacts/index.d.ts.map +1 -0
  127. package/dist/core/artifacts/index.js +421 -0
  128. package/dist/core/config.d.ts +9 -2
  129. package/dist/core/config.d.ts.map +1 -1
  130. package/dist/core/config.js +26 -2
  131. package/dist/core/context/index.d.ts +12 -12
  132. package/dist/core/context/index.js +10 -10
  133. package/dist/core/governor/adapter-spread.d.ts +52 -0
  134. package/dist/core/governor/adapter-spread.d.ts.map +1 -0
  135. package/dist/core/governor/adapter-spread.js +52 -0
  136. package/dist/core/governor/index.d.ts +7 -0
  137. package/dist/core/governor/index.d.ts.map +1 -0
  138. package/dist/core/governor/index.js +6 -0
  139. package/dist/core/governor/plan-api.d.ts +38 -0
  140. package/dist/core/governor/plan-api.d.ts.map +1 -0
  141. package/dist/core/governor/plan-api.js +83 -0
  142. package/dist/core/governor/plan-read.d.ts +5 -0
  143. package/dist/core/governor/plan-read.d.ts.map +1 -0
  144. package/dist/core/{supervisor → governor}/plan-read.js +66 -52
  145. package/dist/core/{supervisor → governor}/plan-types.d.ts +57 -56
  146. package/dist/core/governor/plan-types.d.ts.map +1 -0
  147. package/dist/core/{supervisor → governor}/plan-types.js +4 -4
  148. package/dist/core/governor/planning.d.ts +48 -0
  149. package/dist/core/governor/planning.d.ts.map +1 -0
  150. package/dist/core/{supervisor → governor}/planning.js +125 -94
  151. package/dist/core/governor/read.d.ts +6 -0
  152. package/dist/core/governor/read.d.ts.map +1 -0
  153. package/dist/core/governor/read.js +4 -0
  154. package/dist/core/governor/runner.d.ts +37 -0
  155. package/dist/core/governor/runner.d.ts.map +1 -0
  156. package/dist/core/{supervisor → governor}/runner.js +15 -15
  157. package/dist/core/governor/service-read.d.ts +6 -0
  158. package/dist/core/governor/service-read.d.ts.map +1 -0
  159. package/dist/core/{supervisor → governor}/service-read.js +12 -12
  160. package/dist/core/governor/service.d.ts +114 -0
  161. package/dist/core/governor/service.d.ts.map +1 -0
  162. package/dist/core/{supervisor → governor}/service.js +57 -57
  163. package/dist/core/governor/state.d.ts +116 -0
  164. package/dist/core/governor/state.d.ts.map +1 -0
  165. package/dist/core/{supervisor → governor}/state.js +228 -108
  166. package/dist/core/hooks/adapter/detect.d.ts +9 -0
  167. package/dist/core/hooks/{harness → adapter}/detect.d.ts.map +1 -1
  168. package/dist/core/hooks/{harness → adapter}/detect.js +8 -8
  169. package/dist/core/hooks/{harness → adapter}/events.d.ts +15 -14
  170. package/dist/core/hooks/adapter/events.d.ts.map +1 -0
  171. package/dist/core/hooks/{harness → adapter}/events.js +5 -5
  172. package/dist/core/hooks/{harness → adapter}/output.d.ts +20 -14
  173. package/dist/core/hooks/adapter/output.d.ts.map +1 -0
  174. package/dist/core/hooks/{harness → adapter}/output.js +30 -22
  175. package/dist/core/hooks/{harness → adapter}/parse.d.ts +5 -5
  176. package/dist/core/hooks/{harness → adapter}/parse.d.ts.map +1 -1
  177. package/dist/core/hooks/{harness → adapter}/parse.js +4 -4
  178. package/dist/core/hooks/{harness → adapter}/wiring.d.ts +15 -15
  179. package/dist/core/hooks/{harness → adapter}/wiring.d.ts.map +1 -1
  180. package/dist/core/hooks/{harness → adapter}/wiring.js +13 -13
  181. package/dist/core/hooks/cli.d.ts +3 -3
  182. package/dist/core/hooks/cli.js +175 -151
  183. package/dist/core/hooks/effects/image-capture.d.ts +5 -5
  184. package/dist/core/hooks/effects/image-capture.d.ts.map +1 -1
  185. package/dist/core/hooks/effects/image-capture.js +3 -3
  186. package/dist/core/hooks/effects/index.d.ts +12 -12
  187. package/dist/core/hooks/effects/index.d.ts.map +1 -1
  188. package/dist/core/hooks/effects/index.js +17 -17
  189. package/dist/core/hooks/events/emit.d.ts +2 -2
  190. package/dist/core/hooks/events/emit.d.ts.map +1 -1
  191. package/dist/core/hooks/events/emit.js +1 -1
  192. package/dist/core/hooks/events/rotate.js +1 -1
  193. package/dist/core/hooks/events/schema.d.ts +13 -5
  194. package/dist/core/hooks/events/schema.d.ts.map +1 -1
  195. package/dist/core/hooks/guard-path.d.ts +2 -2
  196. package/dist/core/hooks/guard-path.js +2 -2
  197. package/dist/core/hooks/index.d.ts +1 -1
  198. package/dist/core/hooks/index.d.ts.map +1 -1
  199. package/dist/core/hooks/resolve/anchor.d.ts +14 -5
  200. package/dist/core/hooks/resolve/anchor.d.ts.map +1 -1
  201. package/dist/core/hooks/resolve/anchor.js +64 -7
  202. package/dist/core/hooks/resolve/coord-root.d.ts +3 -3
  203. package/dist/core/hooks/resolve/coord-root.js +4 -4
  204. package/dist/core/hooks/resolve/intent.js +1 -1
  205. package/dist/core/hooks/resolve/owner.d.ts +1 -1
  206. package/dist/core/hooks/resolve/owner.d.ts.map +1 -1
  207. package/dist/core/hooks/resolve/owner.js +11 -5
  208. package/dist/core/{scratch → journal}/index.d.ts +25 -25
  209. package/dist/core/{scratch → journal}/index.d.ts.map +1 -1
  210. package/dist/core/{scratch → journal}/index.js +38 -38
  211. package/dist/core/policy/evaluate.d.ts +1 -1
  212. package/dist/core/policy/evaluate.d.ts.map +1 -1
  213. package/dist/core/policy/evaluate.js +7 -7
  214. package/dist/core/policy/types.d.ts +3 -3
  215. package/dist/core/policy/types.d.ts.map +1 -1
  216. package/dist/core/work/state.d.ts +12 -4
  217. package/dist/core/work/state.d.ts.map +1 -1
  218. package/dist/core/work/state.js +50 -17
  219. package/dist/core/workflow/adapters.d.ts +17 -0
  220. package/dist/core/workflow/adapters.d.ts.map +1 -0
  221. package/dist/core/workflow/adapters.js +21 -0
  222. package/dist/core/workflow/approvals.js +6 -6
  223. package/dist/core/workflow/billing.d.ts +9 -9
  224. package/dist/core/workflow/billing.js +9 -9
  225. package/dist/core/workflow/child-env.d.ts +10 -2
  226. package/dist/core/workflow/child-env.d.ts.map +1 -1
  227. package/dist/core/workflow/child-env.js +12 -4
  228. package/dist/core/workflow/engine.d.ts +15 -5
  229. package/dist/core/workflow/engine.d.ts.map +1 -1
  230. package/dist/core/workflow/engine.js +138 -83
  231. package/dist/core/workflow/evidence-preflight.d.ts +24 -0
  232. package/dist/core/workflow/evidence-preflight.d.ts.map +1 -0
  233. package/dist/core/workflow/evidence-preflight.js +134 -0
  234. package/dist/core/workflow/index.d.ts +1 -1
  235. package/dist/core/workflow/index.d.ts.map +1 -1
  236. package/dist/core/workflow/proof.d.ts +11 -5
  237. package/dist/core/workflow/proof.d.ts.map +1 -1
  238. package/dist/core/workflow/proof.js +45 -36
  239. package/dist/core/workflow/run-state.d.ts +1 -1
  240. package/dist/core/workflow/run-state.js +7 -7
  241. package/dist/core/workflow/sandbox-projection.d.ts +6 -6
  242. package/dist/core/workflow/sandbox-projection.d.ts.map +1 -1
  243. package/dist/core/workflow/sandbox-projection.js +11 -11
  244. package/dist/core/workflow/spawn-claude.d.ts +3 -3
  245. package/dist/core/workflow/spawn-claude.d.ts.map +1 -1
  246. package/dist/core/workflow/spawn-claude.js +9 -6
  247. package/dist/core/workflow/spawn-codex.d.ts +4 -4
  248. package/dist/core/workflow/spawn-codex.d.ts.map +1 -1
  249. package/dist/core/workflow/spawn-codex.js +9 -6
  250. package/dist/core/workflow/spawn-cursor.d.ts +4 -4
  251. package/dist/core/workflow/spawn-cursor.d.ts.map +1 -1
  252. package/dist/core/workflow/spawn-cursor.js +9 -6
  253. package/dist/core/workflow/spawn-failure.d.ts +1 -1
  254. package/dist/core/workflow/spawn-failure.js +1 -1
  255. package/dist/core/workflow/specialists.js +2 -2
  256. package/dist/core/workflow/{journal.d.ts → transcript.d.ts} +8 -8
  257. package/dist/core/workflow/transcript.d.ts.map +1 -0
  258. package/dist/core/workflow/{journal.js → transcript.js} +14 -14
  259. package/dist/core/workflow/types.d.ts +98 -51
  260. package/dist/core/workflow/types.d.ts.map +1 -1
  261. package/dist/core/workflow/types.js +11 -1
  262. package/dist/core/workflow/validate.d.ts +1 -1
  263. package/dist/core/workflow/validate.js +1 -1
  264. package/dist/core/workflow/workspaces/cancellation.js +2 -2
  265. package/dist/core/workflow/workspaces/cleanup.js +2 -2
  266. package/dist/core/workflow/workspaces/execution.js +6 -6
  267. package/dist/core/workflow/workspaces/inspect.js +9 -9
  268. package/dist/core/workflow/workspaces/integration.js +14 -14
  269. package/dist/core/workflow/workspaces/lifecycle.d.ts +1 -1
  270. package/dist/core/workflow/workspaces/lifecycle.d.ts.map +1 -1
  271. package/dist/core/workflow/workspaces/lifecycle.js +9 -9
  272. package/dist/core/workflow/workspaces/local-git.d.ts.map +1 -1
  273. package/dist/core/workflow/workspaces/local-git.js +39 -5
  274. package/dist/core/workflow/workspaces/recovery.js +3 -3
  275. package/dist/core/workflow/workspaces/state.d.ts +1 -1
  276. package/dist/core/workflow/workspaces/state.d.ts.map +1 -1
  277. package/dist/core/workflow/workspaces/state.js +3 -3
  278. package/dist/core/workflow/workspaces/types.d.ts +1 -1
  279. package/dist/core/workflow/workspaces/types.d.ts.map +1 -1
  280. package/dist/lib/browser/asserts.d.ts +28 -0
  281. package/dist/lib/browser/asserts.d.ts.map +1 -0
  282. package/dist/lib/browser/asserts.js +152 -0
  283. package/dist/lib/browser/client.d.ts +49 -0
  284. package/dist/lib/browser/client.d.ts.map +1 -1
  285. package/dist/lib/browser/client.js +155 -14
  286. package/dist/lib/browser/content-checks.d.ts +108 -0
  287. package/dist/lib/browser/content-checks.d.ts.map +1 -0
  288. package/dist/lib/browser/content-checks.js +474 -0
  289. package/dist/lib/browser/critique.d.ts +91 -0
  290. package/dist/lib/browser/critique.d.ts.map +1 -0
  291. package/dist/lib/browser/critique.js +167 -0
  292. package/dist/lib/browser/geometry.d.ts +32 -0
  293. package/dist/lib/browser/geometry.d.ts.map +1 -1
  294. package/dist/lib/browser/geometry.js +244 -1
  295. package/dist/lib/browser/index.d.ts +4 -1
  296. package/dist/lib/browser/index.d.ts.map +1 -1
  297. package/dist/lib/browser/index.js +2 -0
  298. package/dist/lib/claude-desktop.d.ts.map +1 -1
  299. package/dist/lib/claude-desktop.js +4 -1
  300. package/dist/lib/council/index.d.ts +6 -6
  301. package/dist/lib/council/index.d.ts.map +1 -1
  302. package/dist/lib/council/index.js +8 -8
  303. package/dist/lib/identities/assume.d.ts +2 -2
  304. package/dist/lib/identities/assume.js +7 -7
  305. package/dist/lib/instructions/apply.d.ts +3 -3
  306. package/dist/lib/instructions/apply.d.ts.map +1 -1
  307. package/dist/lib/instructions/apply.js +75 -27
  308. package/dist/lib/instructions/host-addendum.d.ts +54 -0
  309. package/dist/lib/instructions/host-addendum.d.ts.map +1 -0
  310. package/dist/lib/instructions/host-addendum.js +107 -0
  311. package/dist/lib/instructions/templates.d.ts +10 -3
  312. package/dist/lib/instructions/templates.d.ts.map +1 -1
  313. package/dist/lib/instructions/templates.js +41 -12
  314. package/dist/lib/machine.d.ts +2 -2
  315. package/dist/lib/machine.js +2 -2
  316. package/package.json +26 -21
  317. package/schemas/config.schema.json +26 -1
  318. package/src/commander.ts +22 -13
  319. package/src/commands/{harness.ts → adapter.ts} +46 -46
  320. package/src/commands/agents.ts +71 -64
  321. package/src/commands/artifacts.ts +168 -0
  322. package/src/commands/backup.ts +47 -33
  323. package/src/commands/browse.ts +438 -2
  324. package/src/commands/checkpoint.ts +196 -0
  325. package/src/commands/context.ts +3 -176
  326. package/src/commands/decision.ts +41 -7
  327. package/src/commands/deinit.ts +16 -16
  328. package/src/commands/doctor.ts +28 -28
  329. package/src/commands/{supervisor.ts → governor.ts} +184 -154
  330. package/src/commands/init.ts +50 -34
  331. package/src/commands/{scratch.ts → journal.ts} +60 -60
  332. package/src/commands/policy.ts +1 -1
  333. package/src/commands/presence.ts +2 -2
  334. package/src/commands/sync.ts +3 -3
  335. package/src/commands/tunnel.ts +237 -34
  336. package/src/commands/web-fetch.ts +1 -1
  337. package/src/commands/web.ts +56 -1
  338. package/src/commands/work.ts +50 -35
  339. package/src/commands/workflow.ts +43 -34
  340. package/src/core/{harnesses → adapters}/attest-projection.ts +2 -2
  341. package/src/core/{harnesses → adapters}/attest.ts +27 -27
  342. package/src/core/{harnesses → adapters}/attestation.ts +41 -41
  343. package/src/core/{harnesses → adapters}/bench.ts +34 -43
  344. package/src/core/adapters/index.ts +56 -0
  345. package/src/core/{harnesses → adapters}/profiles.ts +16 -16
  346. package/src/core/{harnesses → adapters}/registry.ts +23 -23
  347. package/src/core/{harnesses → adapters}/types.ts +23 -23
  348. package/src/core/agents/canonical-emit.ts +6 -6
  349. package/src/core/agents/cli-emit.ts +1 -1
  350. package/src/core/agents/cli.ts +30 -28
  351. package/src/core/agents/codex-replay.ts +6 -6
  352. package/src/core/agents/coord-client.ts +119 -28
  353. package/src/core/agents/events/consume.ts +1 -1
  354. package/src/core/agents/events/emit.ts +7 -6
  355. package/src/core/agents/render/prompt-context.ts +107 -31
  356. package/src/core/agents/render/session-context.ts +6 -6
  357. package/src/core/agents/rules/claim-conflict.ts +4 -7
  358. package/src/core/agents/rules/commit-conflict.ts +103 -22
  359. package/src/core/agents/rules/stop-hook.ts +33 -17
  360. package/src/core/agents/rules/verdict.ts +13 -0
  361. package/src/core/agents/session-events.ts +4 -4
  362. package/src/core/agents/state/council.ts +1 -1
  363. package/src/core/agents/state/heartbeat-projector.ts +16 -12
  364. package/src/core/agents/state/heartbeat-writer.ts +12 -12
  365. package/src/core/agents/state/{scratch.ts → journal.ts} +12 -12
  366. package/src/core/agents/state/pidmap.ts +130 -15
  367. package/src/core/agents/state/proc-start.ts +208 -0
  368. package/src/core/agents/state/shell-mutation.ts +1 -1
  369. package/src/core/agents/state/stale-sweep.ts +7 -7
  370. package/src/core/artifacts/index.ts +557 -0
  371. package/src/core/config.ts +30 -2
  372. package/src/core/context/index.ts +15 -15
  373. package/src/core/governor/adapter-spread.ts +82 -0
  374. package/src/core/governor/index.ts +91 -0
  375. package/src/core/governor/plan-api.ts +115 -0
  376. package/src/core/{supervisor → governor}/plan-read.ts +112 -97
  377. package/src/core/{supervisor → governor}/plan-types.ts +59 -56
  378. package/src/core/{supervisor → governor}/planning.ts +223 -192
  379. package/src/core/governor/read.ts +59 -0
  380. package/src/core/{supervisor → governor}/runner.ts +39 -39
  381. package/src/core/{supervisor → governor}/service-read.ts +22 -22
  382. package/src/core/{supervisor → governor}/service.ts +117 -119
  383. package/src/core/{supervisor → governor}/state.ts +325 -167
  384. package/src/core/hooks/adapter/detect.ts +30 -0
  385. package/src/core/hooks/{harness → adapter}/events.ts +16 -14
  386. package/src/core/hooks/{harness → adapter}/output.ts +31 -23
  387. package/src/core/hooks/{harness → adapter}/parse.ts +5 -5
  388. package/src/core/hooks/{harness → adapter}/wiring.ts +21 -21
  389. package/src/core/hooks/cli.ts +185 -162
  390. package/src/core/hooks/effects/image-capture.ts +6 -6
  391. package/src/core/hooks/effects/index.ts +17 -17
  392. package/src/core/hooks/events/emit.ts +3 -3
  393. package/src/core/hooks/events/rotate.ts +1 -1
  394. package/src/core/hooks/events/schema.ts +15 -7
  395. package/src/core/hooks/guard-path.ts +2 -2
  396. package/src/core/hooks/index.ts +1 -1
  397. package/src/core/hooks/resolve/anchor.ts +63 -8
  398. package/src/core/hooks/resolve/coord-root.ts +4 -4
  399. package/src/core/hooks/resolve/intent.ts +1 -1
  400. package/src/core/hooks/resolve/owner.ts +11 -5
  401. package/src/core/{scratch → journal}/index.ts +53 -53
  402. package/src/core/policy/evaluate.ts +8 -8
  403. package/src/core/policy/types.ts +3 -3
  404. package/src/core/work/state.ts +65 -23
  405. package/src/core/workflow/adapters.ts +33 -0
  406. package/src/core/workflow/approvals.ts +7 -7
  407. package/src/core/workflow/billing.ts +12 -12
  408. package/src/core/workflow/child-env.ts +13 -4
  409. package/src/core/workflow/engine.ts +155 -90
  410. package/src/core/workflow/evidence-preflight.ts +165 -0
  411. package/src/core/workflow/index.ts +3 -3
  412. package/src/core/workflow/proof.ts +60 -50
  413. package/src/core/workflow/run-state.ts +7 -7
  414. package/src/core/workflow/sandbox-projection.ts +16 -16
  415. package/src/core/workflow/spawn-claude.ts +13 -10
  416. package/src/core/workflow/spawn-codex.ts +13 -10
  417. package/src/core/workflow/spawn-cursor.ts +13 -10
  418. package/src/core/workflow/spawn-failure.ts +1 -1
  419. package/src/core/workflow/specialists.ts +2 -2
  420. package/src/core/workflow/{journal.ts → transcript.ts} +16 -16
  421. package/src/core/workflow/types.ts +108 -51
  422. package/src/core/workflow/validate.ts +1 -1
  423. package/src/core/workflow/workspaces/cancellation.ts +2 -2
  424. package/src/core/workflow/workspaces/cleanup.ts +2 -2
  425. package/src/core/workflow/workspaces/execution.ts +6 -6
  426. package/src/core/workflow/workspaces/inspect.ts +14 -11
  427. package/src/core/workflow/workspaces/integration.ts +18 -14
  428. package/src/core/workflow/workspaces/lifecycle.ts +10 -10
  429. package/src/core/workflow/workspaces/local-git.ts +47 -5
  430. package/src/core/workflow/workspaces/recovery.ts +3 -3
  431. package/src/core/workflow/workspaces/state.ts +4 -3
  432. package/src/core/workflow/workspaces/types.ts +1 -1
  433. package/src/lib/browser/asserts.ts +177 -0
  434. package/src/lib/browser/client.ts +189 -14
  435. package/src/lib/browser/content-checks.ts +571 -0
  436. package/src/lib/browser/critique.ts +231 -0
  437. package/src/lib/browser/geometry.ts +297 -1
  438. package/src/lib/browser/index.ts +34 -0
  439. package/src/lib/claude-desktop.ts +4 -1
  440. package/src/lib/council/index.ts +9 -9
  441. package/src/lib/identities/assume.ts +7 -7
  442. package/src/lib/instructions/apply.ts +87 -25
  443. package/src/lib/instructions/host-addendum.ts +126 -0
  444. package/src/lib/instructions/templates.ts +44 -15
  445. package/src/lib/machine.ts +2 -2
  446. package/dist/commands/harness.d.ts +0 -12
  447. package/dist/commands/harness.d.ts.map +0 -1
  448. package/dist/commands/scratch.d.ts +0 -4
  449. package/dist/commands/scratch.d.ts.map +0 -1
  450. package/dist/commands/session.d.ts.map +0 -1
  451. package/dist/commands/session.js +0 -162
  452. package/dist/commands/supervisor.d.ts +0 -4
  453. package/dist/commands/supervisor.d.ts.map +0 -1
  454. package/dist/core/harnesses/attest-projection.d.ts.map +0 -1
  455. package/dist/core/harnesses/attest.d.ts.map +0 -1
  456. package/dist/core/harnesses/attestation.d.ts.map +0 -1
  457. package/dist/core/harnesses/bench.d.ts.map +0 -1
  458. package/dist/core/harnesses/index.d.ts +0 -13
  459. package/dist/core/harnesses/index.d.ts.map +0 -1
  460. package/dist/core/harnesses/index.js +0 -6
  461. package/dist/core/harnesses/profiles.d.ts.map +0 -1
  462. package/dist/core/harnesses/registry.d.ts +0 -15
  463. package/dist/core/harnesses/registry.d.ts.map +0 -1
  464. package/dist/core/harnesses/types.d.ts.map +0 -1
  465. package/dist/core/hooks/harness/detect.d.ts +0 -9
  466. package/dist/core/hooks/harness/events.d.ts.map +0 -1
  467. package/dist/core/hooks/harness/output.d.ts.map +0 -1
  468. package/dist/core/supervisor/index.d.ts +0 -7
  469. package/dist/core/supervisor/index.d.ts.map +0 -1
  470. package/dist/core/supervisor/index.js +0 -6
  471. package/dist/core/supervisor/plan-api.d.ts +0 -23
  472. package/dist/core/supervisor/plan-api.d.ts.map +0 -1
  473. package/dist/core/supervisor/plan-api.js +0 -50
  474. package/dist/core/supervisor/plan-read.d.ts +0 -5
  475. package/dist/core/supervisor/plan-read.d.ts.map +0 -1
  476. package/dist/core/supervisor/plan-types.d.ts.map +0 -1
  477. package/dist/core/supervisor/planning.d.ts +0 -33
  478. package/dist/core/supervisor/planning.d.ts.map +0 -1
  479. package/dist/core/supervisor/read.d.ts +0 -6
  480. package/dist/core/supervisor/read.d.ts.map +0 -1
  481. package/dist/core/supervisor/read.js +0 -4
  482. package/dist/core/supervisor/runner.d.ts +0 -37
  483. package/dist/core/supervisor/runner.d.ts.map +0 -1
  484. package/dist/core/supervisor/service-read.d.ts +0 -6
  485. package/dist/core/supervisor/service-read.d.ts.map +0 -1
  486. package/dist/core/supervisor/service.d.ts +0 -114
  487. package/dist/core/supervisor/service.d.ts.map +0 -1
  488. package/dist/core/supervisor/state.d.ts +0 -95
  489. package/dist/core/supervisor/state.d.ts.map +0 -1
  490. package/dist/core/workflow/harnesses.d.ts +0 -17
  491. package/dist/core/workflow/harnesses.d.ts.map +0 -1
  492. package/dist/core/workflow/harnesses.js +0 -21
  493. package/dist/core/workflow/journal.d.ts.map +0 -1
  494. package/src/commands/session.ts +0 -187
  495. package/src/core/harnesses/index.ts +0 -56
  496. package/src/core/hooks/harness/detect.ts +0 -30
  497. package/src/core/supervisor/index.ts +0 -89
  498. package/src/core/supervisor/plan-api.ts +0 -73
  499. package/src/core/supervisor/read.ts +0 -59
  500. package/src/core/workflow/harnesses.ts +0 -33
  501. /package/dist/core/{harnesses → adapters}/attest-projection.js +0 -0
@@ -1,16 +1,11 @@
1
1
  import { spawnSync } from "node:child_process";
2
- import { HARNESS_SPECS } from "../hooks/harness/events.ts";
2
+ import { ADAPTER_SPECS } from "../hooks/adapter/events.ts";
3
3
  import type { SpawnRequest, SpawnResult } from "../workflow/types.ts";
4
- import type { AttestableDimension, HarnessAttestation } from "./attestation.ts";
4
+ import type { AdapterAttestation, AttestableDimension } from "./attestation.ts";
5
5
  import { isAttestationCurrent, readAttestation } from "./attestation.ts";
6
- import type { HarnessRegistry } from "./registry.ts";
7
- import type {
8
- CapabilitySupport,
9
- HarnessAdapter,
10
- HarnessCapabilityDimension,
11
- HarnessId,
12
- } from "./types.ts";
13
- import { HARNESS_CAPABILITY_DIMENSIONS } from "./types.ts";
6
+ import type { AdapterRegistry } from "./registry.ts";
7
+ import type { Adapter, AdapterCapabilityDimension, AdapterId, CapabilitySupport } from "./types.ts";
8
+ import { ADAPTER_CAPABILITY_DIMENSIONS } from "./types.ts";
14
9
 
15
10
  export type BenchVerdict =
16
11
  | "supported"
@@ -21,7 +16,7 @@ export type BenchVerdict =
21
16
  | "skipped"
22
17
  | "drift";
23
18
 
24
- export type BenchDimension = "registration" | "binary" | "contract" | HarnessCapabilityDimension;
19
+ export type BenchDimension = "registration" | "binary" | "contract" | AdapterCapabilityDimension;
25
20
 
26
21
  /** How a result was established (ADR 0037). Orthogonal to the verdict: this
27
22
  * answers "how do we know", not "what is true".
@@ -33,7 +28,7 @@ export type BenchDimension = "registration" | "binary" | "contract" | HarnessCap
33
28
  export type BenchBasis = "adapter" | "attested" | "declared";
34
29
 
35
30
  export interface BenchResult {
36
- harness: HarnessId;
31
+ adapter: AdapterId;
37
32
  dimension: BenchDimension;
38
33
  declared: CapabilitySupport | "not_applicable";
39
34
  observed: BenchVerdict;
@@ -42,10 +37,10 @@ export interface BenchResult {
42
37
  note?: string;
43
38
  }
44
39
 
45
- export interface HarnessBenchReport {
40
+ export interface AdapterBenchReport {
46
41
  generatedAt: string;
47
42
  mode: "offline";
48
- harnesses: HarnessId[];
43
+ adapters: AdapterId[];
49
44
  results: BenchResult[];
50
45
  summary: Record<BenchVerdict, number>;
51
46
  /** Result counts per basis, so a caller can tell a clean report from an
@@ -55,16 +50,16 @@ export interface HarnessBenchReport {
55
50
  skipped: boolean;
56
51
  }
57
52
 
58
- export interface HarnessBenchOptions {
59
- harnesses?: readonly string[];
60
- dimensions?: readonly HarnessCapabilityDimension[];
53
+ export interface AdapterBenchOptions {
54
+ adapters?: readonly string[];
55
+ dimensions?: readonly AdapterCapabilityDimension[];
61
56
  /** Test seam and alternate host probe. A null version means unavailable. */
62
57
  versionProbe?: (binary: string) => string | null;
63
58
  /** Where to look for live attestations (ADR 0038). Defaults to the coord
64
59
  * root. Reading them never runs a model turn. */
65
60
  coordRoot?: string;
66
61
  /** Test seam. Defaults to reading the attestation store. */
67
- attestationReader?: (harness: HarnessId) => HarnessAttestation | null;
62
+ attestationReader?: (adapter: AdapterId) => AdapterAttestation | null;
68
63
  /** Only cite attestations recorded under this billing mode. Omitted means
69
64
  * any mode is acceptable for reporting purposes. */
70
65
  subscriptionOnly?: boolean;
@@ -90,12 +85,12 @@ const EMPTY_BASIS_SUMMARY: Record<BenchBasis, number> = {
90
85
  * version and the current declaration. A stale one is ignored rather than
91
86
  * trusted, so an upgraded vendor CLI silently drops back to adapter basis. */
92
87
  function loadAttestation(
93
- id: HarnessId,
88
+ id: AdapterId,
94
89
  version: string | null,
95
- adapter: HarnessAdapter,
96
- opts: HarnessBenchOptions,
97
- ): HarnessAttestation | null {
98
- let record: HarnessAttestation | null = null;
90
+ adapter: Adapter,
91
+ opts: AdapterBenchOptions,
92
+ ): AdapterAttestation | null {
93
+ let record: AdapterAttestation | null = null;
99
94
  try {
100
95
  record = opts.attestationReader
101
96
  ? opts.attestationReader(id)
@@ -118,21 +113,21 @@ function versionToken(value: string | null | undefined): string | null {
118
113
  return match ? match[0].toLowerCase() : null;
119
114
  }
120
115
 
121
- export function runHarnessBench(
122
- registry: HarnessRegistry,
123
- opts: HarnessBenchOptions = {},
124
- ): HarnessBenchReport {
125
- const ids = opts.harnesses?.length ? [...opts.harnesses] : registry.ids();
116
+ export function runAdapterBench(
117
+ registry: AdapterRegistry,
118
+ opts: AdapterBenchOptions = {},
119
+ ): AdapterBenchReport {
120
+ const ids = opts.adapters?.length ? [...opts.adapters] : registry.ids();
126
121
  const dimensions = opts.dimensions?.length
127
122
  ? [...new Set(opts.dimensions)]
128
- : [...HARNESS_CAPABILITY_DIMENSIONS];
123
+ : [...ADAPTER_CAPABILITY_DIMENSIONS];
129
124
  const versionProbe = opts.versionProbe ?? probeBinaryVersion;
130
125
  const results: BenchResult[] = [];
131
126
 
132
127
  for (const id of ids) {
133
128
  const adapter = registry.require(id);
134
129
  results.push({
135
- harness: id,
130
+ adapter: id,
136
131
  dimension: "registration",
137
132
  declared: "supported",
138
133
  observed: "supported",
@@ -143,7 +138,7 @@ export function runHarnessBench(
143
138
 
144
139
  const version = versionProbe(adapter.profile.binary);
145
140
  results.push({
146
- harness: id,
141
+ adapter: id,
147
142
  dimension: "binary",
148
143
  declared: "supported",
149
144
  observed: version ? "supported" : "skipped",
@@ -166,7 +161,7 @@ export function runHarnessBench(
166
161
  ? { observed: live, basis: "attested" }
167
162
  : observations[dimension];
168
163
  results.push({
169
- harness: id,
164
+ adapter: id,
170
165
  dimension,
171
166
  declared: claim.support,
172
167
  observed,
@@ -186,7 +181,7 @@ export function runHarnessBench(
186
181
  return {
187
182
  generatedAt: new Date().toISOString(),
188
183
  mode: "offline",
189
- harnesses: ids,
184
+ adapters: ids,
190
185
  results,
191
186
  summary,
192
187
  basisSummary,
@@ -203,13 +198,9 @@ export function runHarnessBench(
203
198
  * broken, but the declaration is no longer backed by an observation. An
204
199
  * unrecorded or unparseable declared version stays `unknown` rather than being
205
200
  * inferred from the installed one. */
206
- function contractResult(
207
- id: HarnessId,
208
- adapter: HarnessAdapter,
209
- version: string | null,
210
- ): BenchResult {
201
+ function contractResult(id: AdapterId, adapter: Adapter, version: string | null): BenchResult {
211
202
  const recorded = adapter.profile.verified;
212
- const base = { harness: id, dimension: "contract" as const, declared: "supported" as const };
203
+ const base = { adapter: id, dimension: "contract" as const, declared: "supported" as const };
213
204
 
214
205
  if (!version) {
215
206
  return {
@@ -265,8 +256,8 @@ function fromAdapter(observed: BenchVerdict): DimensionObservation {
265
256
  const NOT_CHECKED: DimensionObservation = { observed: "unknown", basis: "declared" };
266
257
 
267
258
  function observeAdapter(
268
- adapter: HarnessAdapter,
269
- ): Record<HarnessCapabilityDimension, DimensionObservation> {
259
+ adapter: Adapter,
260
+ ): Record<AdapterCapabilityDimension, DimensionObservation> {
270
261
  const profile = adapter.profile;
271
262
  const effort = profile.effortValues[0];
272
263
  const request: SpawnRequest = {
@@ -312,8 +303,8 @@ function observeAdapter(
312
303
  const sessionObserved = normalized?.sessionId !== undefined ? "supported" : "unsupported";
313
304
  const costObserved = normalized?.costUsd !== undefined ? "supported" : "unsupported";
314
305
  const hookSpec =
315
- adapter.profile.id in HARNESS_SPECS
316
- ? HARNESS_SPECS[adapter.profile.id as keyof typeof HARNESS_SPECS]
306
+ adapter.profile.id in ADAPTER_SPECS
307
+ ? ADAPTER_SPECS[adapter.profile.id as keyof typeof ADAPTER_SPECS]
317
308
  : undefined;
318
309
  const hookSubcommands = new Set(hookSpec?.events.map((event) => event.subcommand) ?? []);
319
310
 
@@ -0,0 +1,56 @@
1
+ export type { Spawner, SpawnRequest, SpawnResult } from "../workflow/types.ts";
2
+ export type {
3
+ AdapterAttestationReport,
4
+ AdapterAttestationResult,
5
+ AttestationOutcome,
6
+ RunAdapterAttestationOptions,
7
+ } from "./attest.ts";
8
+ export { ATTESTATION_PROMPT, runAdapterAttestation } from "./attest.ts";
9
+ export type {
10
+ AdapterAttestation,
11
+ AttestableDimension,
12
+ AttestationStoreOptions,
13
+ } from "./attestation.ts";
14
+ export {
15
+ ATTESTABLE_DIMENSIONS,
16
+ ATTESTATION_SCHEMA_VERSION,
17
+ adapterProofInputs,
18
+ attestationsDir,
19
+ isAttestationCurrent,
20
+ listAttestations,
21
+ profileDigest,
22
+ readAttestation,
23
+ validateAttestation,
24
+ writeAttestation,
25
+ } from "./attestation.ts";
26
+ export type {
27
+ AdapterBenchOptions,
28
+ AdapterBenchReport,
29
+ BenchBasis,
30
+ BenchDimension,
31
+ BenchResult,
32
+ BenchVerdict,
33
+ } from "./bench.ts";
34
+ export { probeBinaryVersion, runAdapterBench } from "./bench.ts";
35
+ export type { BuiltinAdapterId } from "./profiles.ts";
36
+ export {
37
+ BUILTIN_ADAPTER_IDS,
38
+ BUILTIN_ADAPTER_PROFILES,
39
+ builtinAdapterProfile,
40
+ isBuiltinAdapter,
41
+ validateAdapterEffort,
42
+ } from "./profiles.ts";
43
+ export { AdapterRegistry, createBuiltinAdapterRegistry } from "./registry.ts";
44
+ export type {
45
+ Adapter,
46
+ AdapterBenchFixture,
47
+ AdapterCapabilities,
48
+ AdapterCapabilityDimension,
49
+ AdapterId,
50
+ AdapterInvocation,
51
+ AdapterProfile,
52
+ AdapterRawResult,
53
+ CapabilityClaim,
54
+ CapabilitySupport,
55
+ } from "./types.ts";
56
+ export { ADAPTER_CAPABILITY_DIMENSIONS } from "./types.ts";
@@ -1,11 +1,11 @@
1
- import type { CapabilityClaim, HarnessCapabilities, HarnessProfile } from "./types.ts";
1
+ import type { AdapterCapabilities, AdapterProfile, CapabilityClaim } from "./types.ts";
2
2
 
3
3
  const supported = (note?: string): CapabilityClaim => ({ support: "supported", note });
4
4
  const unsupported = (note?: string): CapabilityClaim => ({ support: "unsupported", note });
5
5
  const partial = (note: string): CapabilityClaim => ({ support: "partial", note });
6
6
  const unknown = (note: string): CapabilityClaim => ({ support: "unknown", note });
7
7
 
8
- function capabilities(overrides: Partial<HarnessCapabilities>): HarnessCapabilities {
8
+ function capabilities(overrides: Partial<AdapterCapabilities>): AdapterCapabilities {
9
9
  return {
10
10
  invocation: supported("Headless CLI subprocess."),
11
11
  modelSelection: supported("Explicit model flag is mapped by the adapter."),
@@ -25,14 +25,14 @@ function capabilities(overrides: Partial<HarnessCapabilities>): HarnessCapabilit
25
25
  contextTelemetry: unknown("The workflow adapter does not expose live context usage."),
26
26
  preCompactionSignal: unknown("No compaction lifecycle probe has certified this adapter."),
27
27
  postCompactionSignal: unknown("No compaction lifecycle probe has certified this adapter."),
28
- compaction: unsupported("Harnery does not initiate native harness compaction."),
28
+ compaction: unsupported("Harnery does not initiate native adapter compaction."),
29
29
  ...overrides,
30
30
  };
31
31
  }
32
32
 
33
- /** The one built-in profile catalog. Adding a fourth harness starts here; CLI
33
+ /** The one built-in profile catalog. Adding a fourth adapter starts here; CLI
34
34
  * choices, doctor metadata, workflow dispatch, and the bench derive from it. */
35
- export const BUILTIN_HARNESS_PROFILES = {
35
+ export const BUILTIN_ADAPTER_PROFILES = {
36
36
  "claude-code": {
37
37
  id: "claude-code",
38
38
  displayName: "Claude Code",
@@ -123,26 +123,26 @@ export const BUILTIN_HARNESS_PROFILES = {
123
123
  ),
124
124
  }),
125
125
  },
126
- } as const satisfies Record<string, HarnessProfile>;
126
+ } as const satisfies Record<string, AdapterProfile>;
127
127
 
128
- export type BuiltinHarnessId = keyof typeof BUILTIN_HARNESS_PROFILES;
128
+ export type BuiltinAdapterId = keyof typeof BUILTIN_ADAPTER_PROFILES;
129
129
 
130
- export const BUILTIN_HARNESS_IDS = Object.freeze(
131
- Object.keys(BUILTIN_HARNESS_PROFILES) as BuiltinHarnessId[],
130
+ export const BUILTIN_ADAPTER_IDS = Object.freeze(
131
+ Object.keys(BUILTIN_ADAPTER_PROFILES) as BuiltinAdapterId[],
132
132
  );
133
133
 
134
- export function isBuiltinHarness(id: string): id is BuiltinHarnessId {
135
- return Object.hasOwn(BUILTIN_HARNESS_PROFILES, id);
134
+ export function isBuiltinAdapter(id: string): id is BuiltinAdapterId {
135
+ return Object.hasOwn(BUILTIN_ADAPTER_PROFILES, id);
136
136
  }
137
137
 
138
- export function builtinHarnessProfile(id: string): HarnessProfile | undefined {
139
- return isBuiltinHarness(id) ? BUILTIN_HARNESS_PROFILES[id] : undefined;
138
+ export function builtinAdapterProfile(id: string): AdapterProfile | undefined {
139
+ return isBuiltinAdapter(id) ? BUILTIN_ADAPTER_PROFILES[id] : undefined;
140
140
  }
141
141
 
142
- export function validateHarnessEffort(id: string, effort: string | undefined): void {
142
+ export function validateAdapterEffort(id: string, effort: string | undefined): void {
143
143
  if (!effort) return;
144
- const profile = builtinHarnessProfile(id);
145
- if (!profile) throw new Error(`unknown harness ${JSON.stringify(id)}`);
144
+ const profile = builtinAdapterProfile(id);
145
+ if (!profile) throw new Error(`unknown adapter ${JSON.stringify(id)}`);
146
146
  if (!profile.effortValues.includes(effort)) {
147
147
  const supportedValues = profile.effortValues.length ? profile.effortValues.join(", ") : "none";
148
148
  throw new Error(
@@ -14,15 +14,15 @@ import {
14
14
  normalizeCursorResult,
15
15
  } from "../workflow/spawn-cursor.ts";
16
16
  import {
17
- BUILTIN_HARNESS_IDS,
18
- BUILTIN_HARNESS_PROFILES,
19
- type BuiltinHarnessId,
17
+ BUILTIN_ADAPTER_IDS,
18
+ BUILTIN_ADAPTER_PROFILES,
19
+ type BuiltinAdapterId,
20
20
  } from "./profiles.ts";
21
- import type { HarnessAdapter, HarnessId } from "./types.ts";
21
+ import type { Adapter, AdapterId } from "./types.ts";
22
22
 
23
- const BUILTIN_ADAPTERS: Record<BuiltinHarnessId, HarnessAdapter> = {
23
+ const BUILTIN_ADAPTERS: Record<BuiltinAdapterId, Adapter> = {
24
24
  "claude-code": {
25
- profile: BUILTIN_HARNESS_PROFILES["claude-code"],
25
+ profile: BUILTIN_ADAPTER_PROFILES["claude-code"],
26
26
  spawn: claudeCodeSpawner,
27
27
  buildInvocation: buildClaudeInvocation,
28
28
  normalizeResult: normalizeClaudeResult,
@@ -47,7 +47,7 @@ const BUILTIN_ADAPTERS: Record<BuiltinHarnessId, HarnessAdapter> = {
47
47
  },
48
48
  },
49
49
  codex: {
50
- profile: BUILTIN_HARNESS_PROFILES.codex,
50
+ profile: BUILTIN_ADAPTER_PROFILES.codex,
51
51
  spawn: codexSpawner,
52
52
  buildInvocation: buildCodexInvocation,
53
53
  normalizeResult: normalizeCodexResult,
@@ -63,7 +63,7 @@ const BUILTIN_ADAPTERS: Record<BuiltinHarnessId, HarnessAdapter> = {
63
63
  },
64
64
  },
65
65
  cursor: {
66
- profile: BUILTIN_HARNESS_PROFILES.cursor,
66
+ profile: BUILTIN_ADAPTER_PROFILES.cursor,
67
67
  spawn: cursorSpawner,
68
68
  buildInvocation: buildCursorInvocation,
69
69
  normalizeResult: normalizeCursorResult,
@@ -89,52 +89,52 @@ const BUILTIN_ADAPTERS: Record<BuiltinHarnessId, HarnessAdapter> = {
89
89
 
90
90
  /** Mutable registry for embedders, initialized empty unless adapters are
91
91
  * provided. Duplicate ids fail loud instead of silently replacing behavior. */
92
- export class HarnessRegistry {
93
- readonly #adapters = new Map<HarnessId, HarnessAdapter>();
92
+ export class AdapterRegistry {
93
+ readonly #adapters = new Map<AdapterId, Adapter>();
94
94
 
95
- constructor(adapters: Iterable<HarnessAdapter> = []) {
95
+ constructor(adapters: Iterable<Adapter> = []) {
96
96
  for (const adapter of adapters) this.register(adapter);
97
97
  }
98
98
 
99
- register(adapter: HarnessAdapter): this {
99
+ register(adapter: Adapter): this {
100
100
  const id = adapter.profile.id.trim();
101
- if (!id) throw new Error("harness adapter id cannot be empty");
101
+ if (!id) throw new Error("adapter adapter id cannot be empty");
102
102
  if (this.#adapters.has(id))
103
- throw new Error(`harness adapter ${JSON.stringify(id)} is already registered`);
103
+ throw new Error(`adapter adapter ${JSON.stringify(id)} is already registered`);
104
104
  if (adapter.profile.binary.trim() === "") {
105
- throw new Error(`harness adapter ${JSON.stringify(id)} has no binary`);
105
+ throw new Error(`adapter adapter ${JSON.stringify(id)} has no binary`);
106
106
  }
107
107
  this.#adapters.set(id, adapter);
108
108
  return this;
109
109
  }
110
110
 
111
- get(id: HarnessId): HarnessAdapter | undefined {
111
+ get(id: AdapterId): Adapter | undefined {
112
112
  return this.#adapters.get(id);
113
113
  }
114
114
 
115
- require(id: HarnessId): HarnessAdapter {
115
+ require(id: AdapterId): Adapter {
116
116
  const adapter = this.get(id);
117
117
  if (!adapter) {
118
118
  throw new Error(
119
- `unknown harness ${JSON.stringify(id)} (registered: ${this.ids().join(", ") || "none"})`,
119
+ `unknown adapter ${JSON.stringify(id)} (registered: ${this.ids().join(", ") || "none"})`,
120
120
  );
121
121
  }
122
122
  return adapter;
123
123
  }
124
124
 
125
- list(): HarnessAdapter[] {
125
+ list(): Adapter[] {
126
126
  return Array.from(this.#adapters.values());
127
127
  }
128
128
 
129
- ids(): HarnessId[] {
129
+ ids(): AdapterId[] {
130
130
  return Array.from(this.#adapters.keys());
131
131
  }
132
132
 
133
- spawners(): Record<HarnessId, HarnessAdapter["spawn"]> {
133
+ spawners(): Record<AdapterId, Adapter["spawn"]> {
134
134
  return Object.fromEntries(this.list().map((adapter) => [adapter.profile.id, adapter.spawn]));
135
135
  }
136
136
  }
137
137
 
138
- export function createBuiltinHarnessRegistry(): HarnessRegistry {
139
- return new HarnessRegistry(BUILTIN_HARNESS_IDS.map((id) => BUILTIN_ADAPTERS[id]));
138
+ export function createBuiltinAdapterRegistry(): AdapterRegistry {
139
+ return new AdapterRegistry(BUILTIN_ADAPTER_IDS.map((id) => BUILTIN_ADAPTERS[id]));
140
140
  }
@@ -1,12 +1,12 @@
1
1
  import type { Spawner, SpawnRequest, SpawnResult } from "../workflow/types.ts";
2
2
 
3
- /** Open harness identifier. Built-ins are registered at runtime rather than
3
+ /** Open adapter identifier. Built-ins are registered at runtime rather than
4
4
  * repeated through closed unions in every consumer. */
5
- export type HarnessId = string;
5
+ export type AdapterId = string;
6
6
 
7
7
  export type CapabilitySupport = "supported" | "partial" | "unsupported" | "unknown";
8
8
 
9
- export const HARNESS_CAPABILITY_DIMENSIONS = [
9
+ export const ADAPTER_CAPABILITY_DIMENSIONS = [
10
10
  "invocation",
11
11
  "modelSelection",
12
12
  "effortSelection",
@@ -28,7 +28,7 @@ export const HARNESS_CAPABILITY_DIMENSIONS = [
28
28
  "compaction",
29
29
  ] as const;
30
30
 
31
- export type HarnessCapabilityDimension = (typeof HARNESS_CAPABILITY_DIMENSIONS)[number];
31
+ export type AdapterCapabilityDimension = (typeof ADAPTER_CAPABILITY_DIMENSIONS)[number];
32
32
 
33
33
  export interface CapabilityClaim {
34
34
  support: CapabilitySupport;
@@ -37,21 +37,21 @@ export interface CapabilityClaim {
37
37
  note?: string;
38
38
  }
39
39
 
40
- export type HarnessCapabilities = Record<HarnessCapabilityDimension, CapabilityClaim>;
40
+ export type AdapterCapabilities = Record<AdapterCapabilityDimension, CapabilityClaim>;
41
41
 
42
- /** What one harness can represent of a filesystem-policy projection
43
- * (ADR 0039). `null` means the harness does not distinguish that, which is a
44
- * fact about the harness rather than something to paper over: a projection the
42
+ /** What one adapter can represent of a filesystem-policy projection
43
+ * (ADR 0039). `null` means the adapter does not distinguish that, which is a
44
+ * fact about the adapter rather than something to paper over: a projection the
45
45
  * adapter would silently drop must be refused instead. */
46
- export interface HarnessSandboxProjection {
46
+ export interface AdapterSandboxProjection {
47
47
  /** Native representation per canonical mode, or null when unrepresentable. */
48
48
  modes: Record<"read-only" | "workspace-write", string | null>;
49
- /** Whether the harness accepts an explicit writable-root set. */
49
+ /** Whether the adapter accepts an explicit writable-root set. */
50
50
  writableRoots: boolean;
51
51
  }
52
52
 
53
- export interface HarnessProfile {
54
- id: HarnessId;
53
+ export interface AdapterProfile {
54
+ id: AdapterId;
55
55
  displayName: string;
56
56
  binary: string;
57
57
  installHint: string;
@@ -61,23 +61,23 @@ export interface HarnessProfile {
61
61
  authModel: "own-auth";
62
62
  modelFamily: "claude" | "gpt" | "multi";
63
63
  effortValues: readonly string[];
64
- capabilities: HarnessCapabilities;
64
+ capabilities: AdapterCapabilities;
65
65
  /** The last real vendor CLI contract used to validate this declaration. */
66
66
  verified?: { date: string; version: string };
67
67
  /** How this adapter projects host filesystem policy into the vendor's own
68
68
  * sandbox (ADR 0039). Absent means it cannot project any of it. */
69
- sandboxProjection?: HarnessSandboxProjection;
69
+ sandboxProjection?: AdapterSandboxProjection;
70
70
  }
71
71
 
72
72
  /** Fully planned child invocation. `resultFile` is used by adapters such as
73
73
  * Codex that deliver the authoritative final answer out-of-band. */
74
- export interface HarnessInvocation {
74
+ export interface AdapterInvocation {
75
75
  argv: string[];
76
76
  resultFile?: string;
77
77
  }
78
78
 
79
79
  /** Vendor subprocess material passed through an adapter's normalizer. */
80
- export interface HarnessRawResult {
80
+ export interface AdapterRawResult {
81
81
  stdout: string;
82
82
  stderr: string;
83
83
  exitCode: number;
@@ -95,8 +95,8 @@ export interface HarnessRawResult {
95
95
  spawnErrno?: string;
96
96
  }
97
97
 
98
- export interface HarnessBenchFixture {
99
- raw: HarnessRawResult;
98
+ export interface AdapterBenchFixture {
99
+ raw: AdapterRawResult;
100
100
  expected: Pick<SpawnResult, "ok" | "text"> & {
101
101
  sessionId?: string;
102
102
  costUsd?: number;
@@ -106,10 +106,10 @@ export interface HarnessBenchFixture {
106
106
  /** One registered executable adapter. The same planner and normalizer power
107
107
  * production workflow runs and the offline conformance bench, preventing the
108
108
  * bench from testing a parallel mock implementation. */
109
- export interface HarnessAdapter {
110
- profile: HarnessProfile;
109
+ export interface Adapter {
110
+ profile: AdapterProfile;
111
111
  spawn: Spawner;
112
- buildInvocation: (request: SpawnRequest, resultFile?: string) => HarnessInvocation;
113
- normalizeResult: (raw: HarnessRawResult) => SpawnResult;
114
- fixture: HarnessBenchFixture;
112
+ buildInvocation: (request: SpawnRequest, resultFile?: string) => AdapterInvocation;
113
+ normalizeResult: (raw: AdapterRawResult) => SpawnResult;
114
+ fixture: AdapterBenchFixture;
115
115
  }
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Emit canonical events by spawning `agent-coord emit-event`. Used by every
3
- * `agents …` / `scratch` / `presence` write that has a canonical state event.
3
+ * `agents …` / `journal` / `presence` write that has a canonical state event.
4
4
  *
5
5
  * Soft-fails: never throws into the caller. A failed emit logs to stderr
6
6
  * (visible to operators in their terminal) but never breaks the CLI flow.
@@ -18,7 +18,7 @@ export interface CanonicalEmitInput {
18
18
  type: string;
19
19
  owner: string;
20
20
  session: string;
21
- harness: "claude-code" | "cursor" | "codex";
21
+ adapter: "claude-code" | "cursor" | "codex";
22
22
  data: Record<string, unknown>;
23
23
  turnId?: string;
24
24
  parentSessionId?: string;
@@ -68,8 +68,8 @@ export function emitCanonical(input: CanonicalEmitInput): void {
68
68
  input.owner,
69
69
  "--session",
70
70
  input.session,
71
- "--harness",
72
- input.harness,
71
+ "--adapter",
72
+ input.adapter,
73
73
  "--data-json",
74
74
  JSON.stringify(input.data),
75
75
  ];
@@ -96,9 +96,9 @@ export function emitCanonical(input: CanonicalEmitInput): void {
96
96
 
97
97
  /**
98
98
  * Normalize the heartbeat's `platform` field (which uses snake_case
99
- * `claude_code`) to the canonical kebab-case Harness type.
99
+ * `claude_code`) to the canonical kebab-case Adapter type.
100
100
  */
101
- export function normalizeHarness(platform: string | undefined): "claude-code" | "cursor" | "codex" {
101
+ export function normalizeAdapter(platform: string | undefined): "claude-code" | "cursor" | "codex" {
102
102
  if (platform === "cursor") return "cursor";
103
103
  if (platform === "codex") return "codex";
104
104
  return "claude-code";
@@ -47,7 +47,7 @@ export function emitAndProject(
47
47
  parent_session_id: envelope.parent_session_id,
48
48
  turn_id: envelope.turn_id,
49
49
  parent_turn_id: envelope.parent_turn_id,
50
- harness: envelope.harness,
50
+ adapter: envelope.adapter,
51
51
  source: envelope.source,
52
52
  data: envelope.data,
53
53
  },