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,11 +1,11 @@
1
1
  /**
2
2
  * Resolve a human-friendly label for the current machine. Used to tag
3
- * coordination artifacts (scratch-doc headers, session telemetry) by the host
3
+ * coordination artifacts (journal-doc headers, session telemetry) by the host
4
4
  * they originated on.
5
5
  *
6
6
  * Precedence (first non-empty wins):
7
7
  * 1. HARNERY_MACHINE env var: transient / per-launch / CI override
8
- * 2. ~/.config/harnery/machine file: persistent, harness-neutral identity
8
+ * 2. ~/.config/harnery/machine file: persistent, adapter-neutral identity
9
9
  * 3. os.hostname() (normalized): automatic floor; never empty
10
10
  *
11
11
  * The env var sits on top for ad-hoc overrides; the file is the durable home for
@@ -4,12 +4,12 @@ import { resolve } from "node:path";
4
4
  import { coordEnv } from "./env.js";
5
5
  /**
6
6
  * Resolve a human-friendly label for the current machine. Used to tag
7
- * coordination artifacts (scratch-doc headers, session telemetry) by the host
7
+ * coordination artifacts (journal-doc headers, session telemetry) by the host
8
8
  * they originated on.
9
9
  *
10
10
  * Precedence (first non-empty wins):
11
11
  * 1. HARNERY_MACHINE env var: transient / per-launch / CI override
12
- * 2. ~/.config/harnery/machine file: persistent, harness-neutral identity
12
+ * 2. ~/.config/harnery/machine file: persistent, adapter-neutral identity
13
13
  * 3. os.hostname() (normalized): automatic floor; never empty
14
14
  *
15
15
  * The env var sits on top for ad-hoc overrides; the file is the durable home for
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "harnery",
3
- "version": "0.30.0",
3
+ "version": "0.31.0",
4
4
  "description": "Multi-agent coordination for AI coding agents - Claude Code, Cursor, and Codex.",
5
5
  "license": "MIT",
6
6
  "author": "Ryan Kelly",
@@ -47,15 +47,20 @@
47
47
  "types": "./dist/core/agents/session-events.d.ts",
48
48
  "import": "./dist/core/agents/session-events.js"
49
49
  },
50
+ "./core/artifacts": {
51
+ "bun": "./src/core/artifacts/index.ts",
52
+ "types": "./dist/core/artifacts/index.d.ts",
53
+ "import": "./dist/core/artifacts/index.js"
54
+ },
50
55
  "./core/hooks": {
51
56
  "bun": "./src/core/hooks/index.ts",
52
57
  "types": "./dist/core/hooks/index.d.ts",
53
58
  "import": "./dist/core/hooks/index.js"
54
59
  },
55
- "./core/harnesses": {
56
- "bun": "./src/core/harnesses/index.ts",
57
- "types": "./dist/core/harnesses/index.d.ts",
58
- "import": "./dist/core/harnesses/index.js"
60
+ "./core/adapters": {
61
+ "bun": "./src/core/adapters/index.ts",
62
+ "types": "./dist/core/adapters/index.d.ts",
63
+ "import": "./dist/core/adapters/index.js"
59
64
  },
60
65
  "./core/context": {
61
66
  "bun": "./src/core/context/index.ts",
@@ -77,20 +82,20 @@
77
82
  "types": "./dist/core/work/read.d.ts",
78
83
  "import": "./dist/core/work/read.js"
79
84
  },
80
- "./core/supervisor": {
81
- "bun": "./src/core/supervisor/index.ts",
82
- "types": "./dist/core/supervisor/index.d.ts",
83
- "import": "./dist/core/supervisor/index.js"
85
+ "./core/governor": {
86
+ "bun": "./src/core/governor/index.ts",
87
+ "types": "./dist/core/governor/index.d.ts",
88
+ "import": "./dist/core/governor/index.js"
84
89
  },
85
- "./core/supervisor/state": {
86
- "bun": "./src/core/supervisor/read.ts",
87
- "types": "./dist/core/supervisor/read.d.ts",
88
- "import": "./dist/core/supervisor/read.js"
90
+ "./core/governor/state": {
91
+ "bun": "./src/core/governor/read.ts",
92
+ "types": "./dist/core/governor/read.d.ts",
93
+ "import": "./dist/core/governor/read.js"
89
94
  },
90
- "./core/supervisor/plans": {
91
- "bun": "./src/core/supervisor/plan-read.ts",
92
- "types": "./dist/core/supervisor/plan-read.d.ts",
93
- "import": "./dist/core/supervisor/plan-read.js"
95
+ "./core/governor/plans": {
96
+ "bun": "./src/core/governor/plan-read.ts",
97
+ "types": "./dist/core/governor/plan-read.d.ts",
98
+ "import": "./dist/core/governor/plan-read.js"
94
99
  },
95
100
  "./core/policy": {
96
101
  "bun": "./src/core/policy/index.ts",
@@ -132,10 +137,10 @@
132
137
  "types": "./dist/lib/readability/index.d.ts",
133
138
  "import": "./dist/lib/readability/index.js"
134
139
  },
135
- "./core/scratch": {
136
- "bun": "./src/core/scratch/index.ts",
137
- "types": "./dist/core/scratch/index.d.ts",
138
- "import": "./dist/core/scratch/index.js"
140
+ "./core/journal": {
141
+ "bun": "./src/core/journal/index.ts",
142
+ "types": "./dist/core/journal/index.d.ts",
143
+ "import": "./dist/core/journal/index.js"
139
144
  },
140
145
  "./lib/tunnel/state": {
141
146
  "bun": "./src/lib/tunnel/state.ts",
@@ -35,6 +35,20 @@
35
35
  }
36
36
  }
37
37
  },
38
+ "artifacts": {
39
+ "type": "object",
40
+ "additionalProperties": false,
41
+ "description": "Defaults for repository-local working artifacts under .harnery/artifacts/.",
42
+ "properties": {
43
+ "default_retention_days": {
44
+ "type": "number",
45
+ "exclusiveMinimum": 0,
46
+ "maximum": 3650,
47
+ "default": 3,
48
+ "description": "Retention for `harn artifacts create` when --days is absent. Env override: HARNERY_ARTIFACT_RETENTION_DAYS."
49
+ }
50
+ }
51
+ },
38
52
  "web": {
39
53
  "type": "object",
40
54
  "additionalProperties": false,
@@ -113,6 +127,17 @@
113
127
  }
114
128
  }
115
129
  },
130
+ "instructions": {
131
+ "type": "object",
132
+ "additionalProperties": false,
133
+ "description": "Agent-facing instructions harnery manages in AGENTS.md.",
134
+ "properties": {
135
+ "hostAddendumFile": {
136
+ "type": "string",
137
+ "description": "Repo-relative path to a markdown file holding this project's own coordination policy. `harn init` splices its contents into a second managed region in AGENTS.md, `init --check` reports drift against it, and `deinit` (or removing this key) takes the region back out. Harnery never parses the content. Must resolve inside the project and be non-empty."
138
+ }
139
+ }
140
+ },
116
141
  "presence": {
117
142
  "type": "object",
118
143
  "additionalProperties": false,
@@ -165,7 +190,7 @@
165
190
  "sync": {
166
191
  "type": "object",
167
192
  "additionalProperties": false,
168
- "description": "`harn sync` (rclone) defaults for the curated cross-machine subset (identities/, scratch/archived/, councils/). Env overrides: HARNERY_SYNC_REMOTE, HARNERY_SYNC_PREFIX. `harn sync init` also records these in ~/.config/harnery/sync.json (a lower-precedence fallback than this section).",
193
+ "description": "`harn sync` (rclone) defaults for the curated cross-machine subset (identities/, journal/archived/, councils/). Env overrides: HARNERY_SYNC_REMOTE, HARNERY_SYNC_PREFIX. `harn sync init` also records these in ~/.config/harnery/sync.json (a lower-precedence fallback than this section).",
169
194
  "properties": {
170
195
  "remote": {
171
196
  "type": "string",
package/src/commander.ts CHANGED
@@ -18,15 +18,17 @@ import { readFileSync } from "node:fs";
18
18
  import { dirname, join } from "node:path";
19
19
  import { fileURLToPath } from "node:url";
20
20
  import { Command } from "commander";
21
- import { registerAgentsCommand } from "./commands/agents.ts";
21
+ import { registerAdapterCommand } from "./commands/adapter.ts";
22
+ import { registerAgentsCommand, registerCouncilCommands } from "./commands/agents.ts";
23
+ import { registerArtifactsCommand } from "./commands/artifacts.ts";
22
24
  import { registerBackupCommand } from "./commands/backup.ts";
23
25
  import { registerBrowseCommand } from "./commands/browse.ts";
24
26
  import { registerBrowseAiCommand } from "./commands/browse-ai.ts";
25
27
  import { registerCallersCommand } from "./commands/callers.ts";
28
+ import { registerCheckpointCommand } from "./commands/checkpoint.ts";
26
29
  import { registerClaudeDesktopCommand } from "./commands/claude-desktop.ts";
27
30
  import { registerCompletionCommand } from "./commands/completion.ts";
28
31
  import { registerConfigGetCommand } from "./commands/config-get.ts";
29
- import { registerContextCommand } from "./commands/context.ts";
30
32
  import { registerCookiesCommand } from "./commands/cookies.ts";
31
33
  import { registerDecisionCommand } from "./commands/decision.ts";
32
34
  import { registerDeinitCommand } from "./commands/deinit.ts";
@@ -38,17 +40,15 @@ import { registerEmlCommand } from "./commands/eml.ts";
38
40
  import { registerEnvCommand } from "./commands/env.ts";
39
41
  import { registerFetchCommand } from "./commands/fetch.ts";
40
42
  import { registerFileHistoryCommand } from "./commands/file-history.ts";
43
+ import { registerGovernorCommand } from "./commands/governor.ts";
41
44
  import { registerGrepCommand } from "./commands/grep.ts";
42
- import { registerHarnessCommand } from "./commands/harness.ts";
43
45
  import { registerInitCommand } from "./commands/init.ts";
46
+ import { registerJournalCommand } from "./commands/journal.ts";
44
47
  import { registerOutlineCommand } from "./commands/outline.ts";
45
48
  import { registerPolicyCommand } from "./commands/policy.ts";
46
49
  import { registerPresenceCommand } from "./commands/presence.ts";
47
50
  import { registerReadCommand } from "./commands/read.ts";
48
51
  import { registerRelayCommand } from "./commands/relay.ts";
49
- import { registerScratchCommand } from "./commands/scratch.ts";
50
- import { registerSessionCommand } from "./commands/session.ts";
51
- import { registerSupervisorCommand } from "./commands/supervisor.ts";
52
52
  import { registerSyncCommand } from "./commands/sync.ts";
53
53
  import { registerSectionCommand, registerTocCommand } from "./commands/toc.ts";
54
54
  import { registerTokensCommand } from "./commands/tokens.ts";
@@ -143,6 +143,14 @@ export interface HarneryProgramContext {
143
143
  * zones behind a WAF). harn standalone skips the callback entirely.
144
144
  */
145
145
  extraHeaders?: (url: string) => Record<string, string>;
146
+ /**
147
+ * Host-injected vision-model call for `browse --check-critique`. harnery
148
+ * ships no model client or API key; a consumer wires this to its own
149
+ * multimodal provider (OpenAI/Anthropic/etc). Given one page tile + the
150
+ * rubric, it returns that tile's findings. When omitted, `--check-critique`
151
+ * reports `skipped` rather than a false pass.
152
+ */
153
+ critiqueProvider?: import("./lib/browser/critique.ts").CritiqueProvider;
146
154
  /**
147
155
  * Shell-completion provider-key lookup. Consumers wire this to a function
148
156
  * mapping (commandPath, option/positional) to a provider key, so that
@@ -250,7 +258,7 @@ export function createHarneryProgram(opts: HarneryContextOpts = {}): Command {
250
258
 
251
259
  program
252
260
  .name(opts.binName ?? "harn")
253
- .description("Multi-agent coordination + harness adapters + portable CLI utilities.")
261
+ .description("Multi-agent coordination + adapter adapters + portable CLI utilities.")
254
262
  .version(readVersion());
255
263
 
256
264
  registerTokensCommand(program, emit);
@@ -266,22 +274,23 @@ export function createHarneryProgram(opts: HarneryContextOpts = {}): Command {
266
274
  registerCallersCommand(program, emit, opts.context);
267
275
  registerEditBatchCommand(program, emit);
268
276
  registerGrepCommand(program, emit, opts.context);
269
- registerHarnessCommand(program, emit);
277
+ registerAdapterCommand(program, emit);
270
278
  registerPolicyCommand(program, emit);
271
279
  registerCookiesCommand(program, emit);
272
280
  registerFetchCommand(program, emit, opts.context);
273
281
  registerReadCommand(program, emit);
274
282
  registerBrowseCommand(program, emit, opts.context);
275
283
  registerBrowseAiCommand(program, emit);
276
- registerSessionCommand(program, emit);
277
284
  registerCompletionCommand(program, emit, opts.context);
278
- registerContextCommand(program, emit, opts.context);
279
- registerScratchCommand(program, emit);
285
+ registerCheckpointCommand(program, emit, opts.context);
286
+ registerJournalCommand(program, emit);
287
+ registerArtifactsCommand(program, emit, opts.context);
280
288
  registerDecisionCommand(program, emit);
281
289
  registerDevtoolsCommand(program, emit);
282
290
  registerTunnelCommand(program, emit, opts.context);
283
291
  registerDocsCommand(program, emit, opts.context);
284
- registerAgentsCommand(program, emit);
292
+ registerAgentsCommand(program, emit, opts.context);
293
+ registerCouncilCommands(program);
285
294
  registerDoctorCommand(program, emit);
286
295
  registerInitCommand(program, emit, opts.binName);
287
296
  registerDeinitCommand(program, emit, opts.binName);
@@ -290,7 +299,7 @@ export function createHarneryProgram(opts: HarneryContextOpts = {}): Command {
290
299
  registerSyncCommand(program, emit);
291
300
  registerWorkflowCommand(program, emit);
292
301
  registerWorkCommand(program, emit);
293
- registerSupervisorCommand(program, emit);
302
+ registerGovernorCommand(program, emit);
294
303
  if (include("web")) registerWebCommand(program, emit);
295
304
 
296
305
  return program;
@@ -1,16 +1,16 @@
1
1
  import type { Command } from "commander";
2
2
  import type { EmitContext } from "../commander.ts";
3
- import { workflowSubscriptionOnly } from "../core/config.ts";
4
3
  import {
4
+ type AdapterAttestationReport,
5
+ type AdapterBenchReport,
5
6
  type BenchResult,
6
- createBuiltinHarnessRegistry,
7
- type HarnessAttestationReport,
8
- type HarnessBenchReport,
7
+ createBuiltinAdapterRegistry,
9
8
  listAttestations,
10
- runHarnessAttestation,
11
- runHarnessBench,
12
- } from "../core/harnesses/index.ts";
13
- import type { HarnessProfile } from "../core/harnesses/types.ts";
9
+ runAdapterAttestation,
10
+ runAdapterBench,
11
+ } from "../core/adapters/index.ts";
12
+ import type { AdapterProfile } from "../core/adapters/types.ts";
13
+ import { workflowSubscriptionOnly } from "../core/config.ts";
14
14
 
15
15
  interface FormatOpts {
16
16
  json?: boolean;
@@ -27,22 +27,22 @@ interface AttestOpts extends FormatOpts {
27
27
  projection?: boolean;
28
28
  }
29
29
 
30
- const registry = createBuiltinHarnessRegistry();
30
+ const registry = createBuiltinAdapterRegistry();
31
31
 
32
- export function registerHarnessCommand(program: Command, emit: EmitContext): void {
32
+ export function registerAdapterCommand(program: Command, emit: EmitContext): void {
33
33
  const command = program
34
- .command("harness")
35
- .description("Inspect registered harness capabilities and run their conformance bench.");
34
+ .command("adapter")
35
+ .description("Inspect registered adapter capabilities and run their conformance bench.");
36
36
 
37
37
  command
38
38
  .command("list")
39
- .description("List registered harness adapters and their high-signal capability claims.")
39
+ .description("List registered adapter adapters and their high-signal capability claims.")
40
40
  .option("--json", "Machine-readable profile catalog")
41
41
  .action((opts: FormatOpts) => {
42
42
  const profiles = registry.list().map((adapter) => adapter.profile);
43
43
  if (opts.json) {
44
44
  emit.config({ format: "json" });
45
- emit.data({ harnesses: profiles });
45
+ emit.data({ adapters: profiles });
46
46
  } else {
47
47
  emit.text(renderProfileTable(profiles));
48
48
  }
@@ -50,14 +50,14 @@ export function registerHarnessCommand(program: Command, emit: EmitContext): voi
50
50
 
51
51
  command
52
52
  .command("show <id>")
53
- .description("Show one harness's complete capability declaration.")
53
+ .description("Show one adapter's complete capability declaration.")
54
54
  .option("--json", "Machine-readable profile")
55
55
  .action((id: string, opts: FormatOpts) => {
56
56
  const adapter = registry.get(id);
57
57
  if (!adapter) {
58
58
  emit.error({
59
- code: "unknown_harness",
60
- message: `unknown harness ${JSON.stringify(id)} (registered: ${registry.ids().join(", ")})`,
59
+ code: "unknown_adapter",
60
+ message: `unknown adapter ${JSON.stringify(id)} (registered: ${registry.ids().join(", ")})`,
61
61
  });
62
62
  emit.setExitCode(1);
63
63
  return;
@@ -71,13 +71,13 @@ export function registerHarnessCommand(program: Command, emit: EmitContext): voi
71
71
  });
72
72
 
73
73
  command
74
- .command("bench [harnesses...]")
74
+ .command("bench [adapters...]")
75
75
  .description("Run the offline adapter-contract bench (no model calls); drift exits non-zero.")
76
76
  .option("--require-installed", "Also fail when a registered vendor CLI is missing")
77
77
  .option("--json", "Machine-readable conformance report")
78
- .action((harnesses: string[], opts: BenchOpts) => {
78
+ .action((adapters: string[], opts: BenchOpts) => {
79
79
  try {
80
- const report = runHarnessBench(registry, { harnesses });
80
+ const report = runAdapterBench(registry, { adapters });
81
81
  if (opts.json) {
82
82
  emit.config({ format: "json" });
83
83
  emit.data(report);
@@ -86,13 +86,13 @@ export function registerHarnessCommand(program: Command, emit: EmitContext): voi
86
86
  }
87
87
  emit.setExitCode(report.drift || (opts.requireInstalled && report.skipped) ? 1 : 0);
88
88
  } catch (error) {
89
- emit.error({ code: "harness_bench_failed", message: (error as Error).message });
89
+ emit.error({ code: "adapter_bench_failed", message: (error as Error).message });
90
90
  emit.setExitCode(1);
91
91
  }
92
92
  });
93
93
 
94
94
  command
95
- .command("attest [harnesses...]")
95
+ .command("attest [adapters...]")
96
96
  .description(
97
97
  "Record what the installed vendor CLIs actually do. Runs one real model turn each; needs --yes.",
98
98
  )
@@ -101,18 +101,18 @@ export function registerHarnessCommand(program: Command, emit: EmitContext): voi
101
101
  "--subscription-only",
102
102
  "Scrub API-key vars so the child uses its stored login (repo default via config.jsonc workflow.subscriptionOnly)",
103
103
  )
104
- .option("--timeout <ms>", "Per-harness probe timeout in milliseconds")
104
+ .option("--timeout <ms>", "Per-adapter probe timeout in milliseconds")
105
105
  .option(
106
106
  "--projection",
107
- "Also probe whether a declared sandbox is enforced; costs two extra turns per capable harness",
107
+ "Also probe whether a declared sandbox is enforced; costs two extra turns per capable adapter",
108
108
  )
109
109
  .option("--json", "Machine-readable attestation report")
110
- .action(async (harnesses: string[], opts: AttestOpts) => {
110
+ .action(async (adapters: string[], opts: AttestOpts) => {
111
111
  if (!opts.yes) {
112
112
  emit.error({
113
- code: "harness_attest_unconfirmed",
113
+ code: "adapter_attest_unconfirmed",
114
114
  message:
115
- "harness attest runs one real model turn per harness and spends vendor tokens. Re-run with --yes.",
115
+ "adapter attest runs one real model turn per adapter and spends vendor tokens. Re-run with --yes.",
116
116
  });
117
117
  emit.setExitCode(1);
118
118
  return;
@@ -120,7 +120,7 @@ export function registerHarnessCommand(program: Command, emit: EmitContext): voi
120
120
  const timeoutMs = opts.timeout ? Number(opts.timeout) : undefined;
121
121
  if (timeoutMs !== undefined && (!Number.isFinite(timeoutMs) || timeoutMs <= 0)) {
122
122
  emit.error({
123
- code: "harness_attest_bad_timeout",
123
+ code: "adapter_attest_bad_timeout",
124
124
  message: "--timeout must be a positive number",
125
125
  });
126
126
  emit.setExitCode(1);
@@ -128,8 +128,8 @@ export function registerHarnessCommand(program: Command, emit: EmitContext): voi
128
128
  }
129
129
  try {
130
130
  const subscriptionOnly = opts.subscriptionOnly || workflowSubscriptionOnly();
131
- const report = await runHarnessAttestation(registry, {
132
- harnesses,
131
+ const report = await runAdapterAttestation(registry, {
132
+ adapters,
133
133
  timeoutMs,
134
134
  subscriptionOnly,
135
135
  projection: opts.projection === true,
@@ -145,7 +145,7 @@ export function registerHarnessCommand(program: Command, emit: EmitContext): voi
145
145
  // to install every vendor CLI.
146
146
  emit.setExitCode(report.recorded === 0 ? 1 : 0);
147
147
  } catch (error) {
148
- emit.error({ code: "harness_attest_failed", message: (error as Error).message });
148
+ emit.error({ code: "adapter_attest_failed", message: (error as Error).message });
149
149
  emit.setExitCode(1);
150
150
  }
151
151
  });
@@ -163,14 +163,14 @@ export function registerHarnessCommand(program: Command, emit: EmitContext): voi
163
163
  return;
164
164
  }
165
165
  if (records.length === 0) {
166
- emit.text("No attestations recorded. Run `harness attest --yes` to create one.");
166
+ emit.text("No attestations recorded. Run `adapter attest --yes` to create one.");
167
167
  return;
168
168
  }
169
169
  emit.text(
170
170
  renderTable(
171
- ["HARNESS", "VERSION", "BILLING", "OBSERVED AT", "OBSERVATIONS"],
171
+ ["ADAPTER", "VERSION", "BILLING", "OBSERVED AT", "OBSERVATIONS"],
172
172
  records.map((record) => [
173
- record.harness,
173
+ record.adapter,
174
174
  record.binary_version,
175
175
  record.subscription_only ? "subscription" : "any",
176
176
  record.observed_at,
@@ -181,15 +181,15 @@ export function registerHarnessCommand(program: Command, emit: EmitContext): voi
181
181
  ),
182
182
  );
183
183
  } catch (error) {
184
- emit.error({ code: "harness_attestations_failed", message: (error as Error).message });
184
+ emit.error({ code: "adapter_attestations_failed", message: (error as Error).message });
185
185
  emit.setExitCode(1);
186
186
  }
187
187
  });
188
188
  }
189
189
 
190
- export function renderAttestationReport(report: HarnessAttestationReport): string {
190
+ export function renderAttestationReport(report: AdapterAttestationReport): string {
191
191
  const rows = report.results.map((result) => [
192
- result.harness,
192
+ result.adapter,
193
193
  result.outcome,
194
194
  result.binaryVersion ?? "",
195
195
  result.observations
@@ -198,14 +198,14 @@ export function renderAttestationReport(report: HarnessAttestationReport): strin
198
198
  .join(" ")
199
199
  : result.note,
200
200
  ]);
201
- const table = renderTable(["HARNESS", "OUTCOME", "VERSION", "OBSERVED"], rows);
201
+ const table = renderTable(["ADAPTER", "OUTCOME", "VERSION", "OBSERVED"], rows);
202
202
  const tail = report.incomplete
203
- ? "Some harnesses were not attested; their bench rows keep an adapter basis."
204
- : "Every selected harness was attested.";
203
+ ? "Some adapters were not attested; their bench rows keep an adapter basis."
204
+ : "Every selected adapter was attested.";
205
205
  return `${table}\n\nrecorded: ${report.recorded}/${report.results.length}\n${tail}`;
206
206
  }
207
207
 
208
- export function renderProfileTable(profiles: readonly HarnessProfile[]): string {
208
+ export function renderProfileTable(profiles: readonly AdapterProfile[]): string {
209
209
  const rows = profiles.map((profile) => [
210
210
  profile.id,
211
211
  profile.binary,
@@ -214,10 +214,10 @@ export function renderProfileTable(profiles: readonly HarnessProfile[]): string
214
214
  profile.capabilities.sessionId.support,
215
215
  profile.capabilities.cost.support,
216
216
  ]);
217
- return renderTable(["HARNESS", "BINARY", "MODEL", "EFFORT", "SESSION", "COST"], rows);
217
+ return renderTable(["ADAPTER", "BINARY", "MODEL", "EFFORT", "SESSION", "COST"], rows);
218
218
  }
219
219
 
220
- export function renderProfile(profile: HarnessProfile): string {
220
+ export function renderProfile(profile: AdapterProfile): string {
221
221
  const lines = [
222
222
  `${profile.displayName} (${profile.id})`,
223
223
  `binary: ${profile.binary}`,
@@ -237,9 +237,9 @@ export function renderProfile(profile: HarnessProfile): string {
237
237
  return lines.join("\n");
238
238
  }
239
239
 
240
- export function renderBenchReport(report: HarnessBenchReport): string {
240
+ export function renderBenchReport(report: AdapterBenchReport): string {
241
241
  const rows = report.results.map((result) => [
242
- result.harness,
242
+ result.adapter,
243
243
  result.dimension,
244
244
  result.declared,
245
245
  result.observed,
@@ -247,7 +247,7 @@ export function renderBenchReport(report: HarnessBenchReport): string {
247
247
  result.basis,
248
248
  ]);
249
249
  const table = renderTable(
250
- ["HARNESS", "DIMENSION", "DECLARED", "OBSERVED", "VERDICT", "BASIS"],
250
+ ["ADAPTER", "DIMENSION", "DECLARED", "OBSERVED", "VERDICT", "BASIS"],
251
251
  rows,
252
252
  );
253
253
  const summary = Object.entries(report.summary)