harnery 0.30.0 → 0.31.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (517) hide show
  1. package/README.md +4 -4
  2. package/dist/commander.d.ts +8 -0
  3. package/dist/commander.d.ts.map +1 -1
  4. package/dist/commander.js +14 -13
  5. package/dist/commands/adapter.d.ts +12 -0
  6. package/dist/commands/adapter.d.ts.map +1 -0
  7. package/dist/commands/{harness.js → adapter.js} +35 -35
  8. package/dist/commands/agents.d.ts +3 -2
  9. package/dist/commands/agents.d.ts.map +1 -1
  10. package/dist/commands/agents.js +185 -74
  11. package/dist/commands/artifacts.d.ts +4 -0
  12. package/dist/commands/artifacts.d.ts.map +1 -0
  13. package/dist/commands/artifacts.js +143 -0
  14. package/dist/commands/backup.d.ts +1 -1
  15. package/dist/commands/backup.d.ts.map +1 -1
  16. package/dist/commands/backup.js +5 -2
  17. package/dist/commands/browse.d.ts.map +1 -1
  18. package/dist/commands/browse.js +310 -7
  19. package/dist/commands/checkpoint.d.ts +12 -0
  20. package/dist/commands/checkpoint.d.ts.map +1 -0
  21. package/dist/commands/checkpoint.js +162 -0
  22. package/dist/commands/context.d.ts +2 -2
  23. package/dist/commands/context.d.ts.map +1 -1
  24. package/dist/commands/context.js +3 -151
  25. package/dist/commands/decision.d.ts.map +1 -1
  26. package/dist/commands/decision.js +31 -7
  27. package/dist/commands/deinit.d.ts +2 -2
  28. package/dist/commands/deinit.js +15 -15
  29. package/dist/commands/doctor.js +23 -23
  30. package/dist/commands/governor.d.ts +4 -0
  31. package/dist/commands/governor.d.ts.map +1 -0
  32. package/dist/commands/{supervisor.js → governor.js} +133 -108
  33. package/dist/commands/grep.d.ts +1 -1
  34. package/dist/commands/grep.d.ts.map +1 -1
  35. package/dist/commands/grep.js +19 -2
  36. package/dist/commands/init.d.ts +12 -12
  37. package/dist/commands/init.d.ts.map +1 -1
  38. package/dist/commands/init.js +44 -30
  39. package/dist/commands/{session.d.ts → journal.d.ts} +2 -2
  40. package/dist/commands/journal.d.ts.map +1 -0
  41. package/dist/commands/{scratch.js → journal.js} +47 -47
  42. package/dist/commands/policy.js +1 -1
  43. package/dist/commands/presence.js +2 -2
  44. package/dist/commands/sync.d.ts +1 -1
  45. package/dist/commands/sync.js +3 -3
  46. package/dist/commands/tunnel.d.ts +16 -0
  47. package/dist/commands/tunnel.d.ts.map +1 -1
  48. package/dist/commands/tunnel.js +213 -27
  49. package/dist/commands/web-fetch.js +1 -1
  50. package/dist/commands/web.d.ts +19 -0
  51. package/dist/commands/web.d.ts.map +1 -1
  52. package/dist/commands/web.js +51 -0
  53. package/dist/commands/work.d.ts.map +1 -1
  54. package/dist/commands/work.js +38 -22
  55. package/dist/commands/workflow.d.ts.map +1 -1
  56. package/dist/commands/workflow.js +35 -28
  57. package/dist/core/{harnesses → adapters}/attest-projection.d.ts +2 -2
  58. package/dist/core/adapters/attest-projection.d.ts.map +1 -0
  59. package/dist/core/{harnesses → adapters}/attest.d.ts +16 -16
  60. package/dist/core/adapters/attest.d.ts.map +1 -0
  61. package/dist/core/{harnesses → adapters}/attest.js +9 -9
  62. package/dist/core/{harnesses → adapters}/attestation.d.ts +16 -16
  63. package/dist/core/adapters/attestation.d.ts.map +1 -0
  64. package/dist/core/{harnesses → adapters}/attestation.js +20 -20
  65. package/dist/core/{harnesses → adapters}/bench.d.ts +12 -12
  66. package/dist/core/adapters/bench.d.ts.map +1 -0
  67. package/dist/core/{harnesses → adapters}/bench.js +12 -12
  68. package/dist/core/adapters/index.d.ts +13 -0
  69. package/dist/core/adapters/index.d.ts.map +1 -0
  70. package/dist/core/adapters/index.js +6 -0
  71. package/dist/core/{harnesses → adapters}/profiles.d.ts +11 -11
  72. package/dist/core/adapters/profiles.d.ts.map +1 -0
  73. package/dist/core/{harnesses → adapters}/profiles.js +11 -11
  74. package/dist/core/adapters/registry.d.ts +15 -0
  75. package/dist/core/adapters/registry.d.ts.map +1 -0
  76. package/dist/core/{harnesses → adapters}/registry.js +11 -11
  77. package/dist/core/{harnesses → adapters}/types.d.ts +23 -23
  78. package/dist/core/adapters/types.d.ts.map +1 -0
  79. package/dist/core/{harnesses → adapters}/types.js +1 -1
  80. package/dist/core/agents/canonical-emit.d.ts +9 -14
  81. package/dist/core/agents/canonical-emit.d.ts.map +1 -1
  82. package/dist/core/agents/canonical-emit.js +15 -44
  83. package/dist/core/agents/cli-emit.js +1 -1
  84. package/dist/core/agents/cli.js +30 -26
  85. package/dist/core/agents/codex-replay.d.ts +1 -1
  86. package/dist/core/agents/codex-replay.js +6 -6
  87. package/dist/core/agents/coord-bin.d.ts +33 -0
  88. package/dist/core/agents/coord-bin.d.ts.map +1 -0
  89. package/dist/core/agents/coord-bin.js +89 -0
  90. package/dist/core/agents/coord-client.d.ts +78 -8
  91. package/dist/core/agents/coord-client.d.ts.map +1 -1
  92. package/dist/core/agents/coord-client.js +303 -75
  93. package/dist/core/agents/events/consume.d.ts +1 -1
  94. package/dist/core/agents/events/emit.d.ts +5 -6
  95. package/dist/core/agents/events/emit.d.ts.map +1 -1
  96. package/dist/core/agents/events/emit.js +2 -2
  97. package/dist/core/agents/paths.d.ts +5 -2
  98. package/dist/core/agents/paths.d.ts.map +1 -1
  99. package/dist/core/agents/paths.js +7 -13
  100. package/dist/core/agents/render/prompt-context.d.ts +21 -9
  101. package/dist/core/agents/render/prompt-context.d.ts.map +1 -1
  102. package/dist/core/agents/render/prompt-context.js +82 -30
  103. package/dist/core/agents/render/session-context.d.ts +1 -1
  104. package/dist/core/agents/render/session-context.js +5 -5
  105. package/dist/core/agents/rules/claim-conflict.d.ts +2 -6
  106. package/dist/core/agents/rules/claim-conflict.d.ts.map +1 -1
  107. package/dist/core/agents/rules/claim-conflict.js +1 -1
  108. package/dist/core/agents/rules/commit-conflict.js +98 -22
  109. package/dist/core/agents/rules/stop-hook.d.ts +9 -9
  110. package/dist/core/agents/rules/stop-hook.d.ts.map +1 -1
  111. package/dist/core/agents/rules/stop-hook.js +23 -5
  112. package/dist/core/agents/rules/verdict.d.ts +14 -0
  113. package/dist/core/agents/rules/verdict.d.ts.map +1 -0
  114. package/dist/core/agents/rules/verdict.js +1 -0
  115. package/dist/core/agents/session-events.js +3 -3
  116. package/dist/core/agents/state/council.d.ts +1 -1
  117. package/dist/core/agents/state/council.js +1 -1
  118. package/dist/core/agents/state/heartbeat-projector.d.ts +3 -2
  119. package/dist/core/agents/state/heartbeat-projector.d.ts.map +1 -1
  120. package/dist/core/agents/state/heartbeat-projector.js +14 -10
  121. package/dist/core/agents/state/heartbeat-writer.d.ts +1 -1
  122. package/dist/core/agents/state/heartbeat-writer.js +12 -12
  123. package/dist/core/agents/state/{scratch.d.ts → journal.d.ts} +7 -7
  124. package/dist/core/agents/state/{scratch.d.ts.map → journal.d.ts.map} +1 -1
  125. package/dist/core/agents/state/{scratch.js → journal.js} +12 -12
  126. package/dist/core/agents/state/pidmap.d.ts +28 -4
  127. package/dist/core/agents/state/pidmap.d.ts.map +1 -1
  128. package/dist/core/agents/state/pidmap.js +130 -15
  129. package/dist/core/agents/state/proc-start.d.ts +95 -0
  130. package/dist/core/agents/state/proc-start.d.ts.map +1 -0
  131. package/dist/core/agents/state/proc-start.js +199 -0
  132. package/dist/core/agents/state/shell-mutation.d.ts +1 -1
  133. package/dist/core/agents/state/shell-mutation.js +1 -1
  134. package/dist/core/agents/state/stale-sweep.js +7 -7
  135. package/dist/core/artifacts/index.d.ts +86 -0
  136. package/dist/core/artifacts/index.d.ts.map +1 -0
  137. package/dist/core/artifacts/index.js +421 -0
  138. package/dist/core/config.d.ts +9 -2
  139. package/dist/core/config.d.ts.map +1 -1
  140. package/dist/core/config.js +26 -2
  141. package/dist/core/context/index.d.ts +12 -12
  142. package/dist/core/context/index.js +10 -10
  143. package/dist/core/governor/adapter-spread.d.ts +52 -0
  144. package/dist/core/governor/adapter-spread.d.ts.map +1 -0
  145. package/dist/core/governor/adapter-spread.js +52 -0
  146. package/dist/core/governor/index.d.ts +7 -0
  147. package/dist/core/governor/index.d.ts.map +1 -0
  148. package/dist/core/governor/index.js +6 -0
  149. package/dist/core/governor/plan-api.d.ts +38 -0
  150. package/dist/core/governor/plan-api.d.ts.map +1 -0
  151. package/dist/core/governor/plan-api.js +83 -0
  152. package/dist/core/governor/plan-read.d.ts +5 -0
  153. package/dist/core/governor/plan-read.d.ts.map +1 -0
  154. package/dist/core/{supervisor → governor}/plan-read.js +66 -52
  155. package/dist/core/{supervisor → governor}/plan-types.d.ts +57 -56
  156. package/dist/core/governor/plan-types.d.ts.map +1 -0
  157. package/dist/core/{supervisor → governor}/plan-types.js +4 -4
  158. package/dist/core/governor/planning.d.ts +48 -0
  159. package/dist/core/governor/planning.d.ts.map +1 -0
  160. package/dist/core/{supervisor → governor}/planning.js +125 -94
  161. package/dist/core/governor/read.d.ts +6 -0
  162. package/dist/core/governor/read.d.ts.map +1 -0
  163. package/dist/core/governor/read.js +4 -0
  164. package/dist/core/governor/runner.d.ts +37 -0
  165. package/dist/core/governor/runner.d.ts.map +1 -0
  166. package/dist/core/{supervisor → governor}/runner.js +15 -15
  167. package/dist/core/governor/service-read.d.ts +6 -0
  168. package/dist/core/governor/service-read.d.ts.map +1 -0
  169. package/dist/core/{supervisor → governor}/service-read.js +12 -12
  170. package/dist/core/governor/service.d.ts +114 -0
  171. package/dist/core/governor/service.d.ts.map +1 -0
  172. package/dist/core/{supervisor → governor}/service.js +57 -57
  173. package/dist/core/governor/state.d.ts +116 -0
  174. package/dist/core/governor/state.d.ts.map +1 -0
  175. package/dist/core/{supervisor → governor}/state.js +228 -108
  176. package/dist/core/hooks/adapter/detect.d.ts +9 -0
  177. package/dist/core/hooks/{harness → adapter}/detect.d.ts.map +1 -1
  178. package/dist/core/hooks/{harness → adapter}/detect.js +8 -8
  179. package/dist/core/hooks/{harness → adapter}/events.d.ts +15 -14
  180. package/dist/core/hooks/adapter/events.d.ts.map +1 -0
  181. package/dist/core/hooks/{harness → adapter}/events.js +5 -5
  182. package/dist/core/hooks/{harness → adapter}/output.d.ts +20 -14
  183. package/dist/core/hooks/adapter/output.d.ts.map +1 -0
  184. package/dist/core/hooks/{harness → adapter}/output.js +30 -22
  185. package/dist/core/hooks/{harness → adapter}/parse.d.ts +5 -5
  186. package/dist/core/hooks/{harness → adapter}/parse.d.ts.map +1 -1
  187. package/dist/core/hooks/{harness → adapter}/parse.js +4 -4
  188. package/dist/core/hooks/{harness → adapter}/wiring.d.ts +15 -15
  189. package/dist/core/hooks/{harness → adapter}/wiring.d.ts.map +1 -1
  190. package/dist/core/hooks/{harness → adapter}/wiring.js +13 -13
  191. package/dist/core/hooks/cli.d.ts +3 -3
  192. package/dist/core/hooks/cli.js +187 -162
  193. package/dist/core/hooks/effects/image-capture.d.ts +5 -5
  194. package/dist/core/hooks/effects/image-capture.d.ts.map +1 -1
  195. package/dist/core/hooks/effects/image-capture.js +3 -3
  196. package/dist/core/hooks/effects/index.d.ts +12 -12
  197. package/dist/core/hooks/effects/index.d.ts.map +1 -1
  198. package/dist/core/hooks/effects/index.js +19 -19
  199. package/dist/core/hooks/events/emit.d.ts +2 -2
  200. package/dist/core/hooks/events/emit.d.ts.map +1 -1
  201. package/dist/core/hooks/events/emit.js +1 -1
  202. package/dist/core/hooks/events/rotate.js +1 -1
  203. package/dist/core/hooks/events/schema.d.ts +13 -5
  204. package/dist/core/hooks/events/schema.d.ts.map +1 -1
  205. package/dist/core/hooks/guard-path.d.ts +2 -2
  206. package/dist/core/hooks/guard-path.js +2 -2
  207. package/dist/core/hooks/index.d.ts +1 -1
  208. package/dist/core/hooks/index.d.ts.map +1 -1
  209. package/dist/core/hooks/resolve/anchor.d.ts +14 -5
  210. package/dist/core/hooks/resolve/anchor.d.ts.map +1 -1
  211. package/dist/core/hooks/resolve/anchor.js +64 -7
  212. package/dist/core/hooks/resolve/coord-root.d.ts +16 -11
  213. package/dist/core/hooks/resolve/coord-root.d.ts.map +1 -1
  214. package/dist/core/hooks/resolve/coord-root.js +18 -43
  215. package/dist/core/hooks/resolve/intent.js +1 -1
  216. package/dist/core/hooks/resolve/owner.d.ts +1 -1
  217. package/dist/core/hooks/resolve/owner.d.ts.map +1 -1
  218. package/dist/core/hooks/resolve/owner.js +11 -5
  219. package/dist/core/{scratch → journal}/index.d.ts +25 -25
  220. package/dist/core/{scratch → journal}/index.d.ts.map +1 -1
  221. package/dist/core/{scratch → journal}/index.js +38 -38
  222. package/dist/core/policy/evaluate.d.ts +1 -1
  223. package/dist/core/policy/evaluate.d.ts.map +1 -1
  224. package/dist/core/policy/evaluate.js +7 -7
  225. package/dist/core/policy/types.d.ts +3 -3
  226. package/dist/core/policy/types.d.ts.map +1 -1
  227. package/dist/core/work/state.d.ts +12 -4
  228. package/dist/core/work/state.d.ts.map +1 -1
  229. package/dist/core/work/state.js +50 -17
  230. package/dist/core/workflow/adapters.d.ts +17 -0
  231. package/dist/core/workflow/adapters.d.ts.map +1 -0
  232. package/dist/core/workflow/adapters.js +21 -0
  233. package/dist/core/workflow/approvals.js +6 -6
  234. package/dist/core/workflow/billing.d.ts +9 -9
  235. package/dist/core/workflow/billing.js +9 -9
  236. package/dist/core/workflow/child-env.d.ts +10 -2
  237. package/dist/core/workflow/child-env.d.ts.map +1 -1
  238. package/dist/core/workflow/child-env.js +12 -4
  239. package/dist/core/workflow/engine.d.ts +15 -5
  240. package/dist/core/workflow/engine.d.ts.map +1 -1
  241. package/dist/core/workflow/engine.js +138 -83
  242. package/dist/core/workflow/evidence-preflight.d.ts +24 -0
  243. package/dist/core/workflow/evidence-preflight.d.ts.map +1 -0
  244. package/dist/core/workflow/evidence-preflight.js +134 -0
  245. package/dist/core/workflow/index.d.ts +1 -1
  246. package/dist/core/workflow/index.d.ts.map +1 -1
  247. package/dist/core/workflow/proof.d.ts +11 -5
  248. package/dist/core/workflow/proof.d.ts.map +1 -1
  249. package/dist/core/workflow/proof.js +45 -36
  250. package/dist/core/workflow/run-state.d.ts +1 -1
  251. package/dist/core/workflow/run-state.js +7 -7
  252. package/dist/core/workflow/sandbox-projection.d.ts +6 -6
  253. package/dist/core/workflow/sandbox-projection.d.ts.map +1 -1
  254. package/dist/core/workflow/sandbox-projection.js +11 -11
  255. package/dist/core/workflow/spawn-claude.d.ts +3 -3
  256. package/dist/core/workflow/spawn-claude.d.ts.map +1 -1
  257. package/dist/core/workflow/spawn-claude.js +9 -6
  258. package/dist/core/workflow/spawn-codex.d.ts +4 -4
  259. package/dist/core/workflow/spawn-codex.d.ts.map +1 -1
  260. package/dist/core/workflow/spawn-codex.js +9 -6
  261. package/dist/core/workflow/spawn-cursor.d.ts +4 -4
  262. package/dist/core/workflow/spawn-cursor.d.ts.map +1 -1
  263. package/dist/core/workflow/spawn-cursor.js +9 -6
  264. package/dist/core/workflow/spawn-failure.d.ts +1 -1
  265. package/dist/core/workflow/spawn-failure.js +1 -1
  266. package/dist/core/workflow/specialists.js +2 -2
  267. package/dist/core/workflow/{journal.d.ts → transcript.d.ts} +8 -8
  268. package/dist/core/workflow/transcript.d.ts.map +1 -0
  269. package/dist/core/workflow/{journal.js → transcript.js} +14 -14
  270. package/dist/core/workflow/types.d.ts +98 -51
  271. package/dist/core/workflow/types.d.ts.map +1 -1
  272. package/dist/core/workflow/types.js +11 -1
  273. package/dist/core/workflow/validate.d.ts +1 -1
  274. package/dist/core/workflow/validate.js +1 -1
  275. package/dist/core/workflow/workspaces/cancellation.js +2 -2
  276. package/dist/core/workflow/workspaces/cleanup.js +2 -2
  277. package/dist/core/workflow/workspaces/execution.js +6 -6
  278. package/dist/core/workflow/workspaces/inspect.js +9 -9
  279. package/dist/core/workflow/workspaces/integration.js +14 -14
  280. package/dist/core/workflow/workspaces/lifecycle.d.ts +1 -1
  281. package/dist/core/workflow/workspaces/lifecycle.d.ts.map +1 -1
  282. package/dist/core/workflow/workspaces/lifecycle.js +9 -9
  283. package/dist/core/workflow/workspaces/local-git.d.ts.map +1 -1
  284. package/dist/core/workflow/workspaces/local-git.js +39 -5
  285. package/dist/core/workflow/workspaces/recovery.js +3 -3
  286. package/dist/core/workflow/workspaces/state.d.ts +1 -1
  287. package/dist/core/workflow/workspaces/state.d.ts.map +1 -1
  288. package/dist/core/workflow/workspaces/state.js +3 -3
  289. package/dist/core/workflow/workspaces/types.d.ts +1 -1
  290. package/dist/core/workflow/workspaces/types.d.ts.map +1 -1
  291. package/dist/lib/browser/asserts.d.ts +28 -0
  292. package/dist/lib/browser/asserts.d.ts.map +1 -0
  293. package/dist/lib/browser/asserts.js +152 -0
  294. package/dist/lib/browser/client.d.ts +49 -0
  295. package/dist/lib/browser/client.d.ts.map +1 -1
  296. package/dist/lib/browser/client.js +155 -14
  297. package/dist/lib/browser/content-checks.d.ts +108 -0
  298. package/dist/lib/browser/content-checks.d.ts.map +1 -0
  299. package/dist/lib/browser/content-checks.js +474 -0
  300. package/dist/lib/browser/critique.d.ts +91 -0
  301. package/dist/lib/browser/critique.d.ts.map +1 -0
  302. package/dist/lib/browser/critique.js +167 -0
  303. package/dist/lib/browser/geometry.d.ts +32 -0
  304. package/dist/lib/browser/geometry.d.ts.map +1 -1
  305. package/dist/lib/browser/geometry.js +244 -1
  306. package/dist/lib/browser/index.d.ts +4 -1
  307. package/dist/lib/browser/index.d.ts.map +1 -1
  308. package/dist/lib/browser/index.js +2 -0
  309. package/dist/lib/claude-desktop.d.ts.map +1 -1
  310. package/dist/lib/claude-desktop.js +4 -1
  311. package/dist/lib/context/index.js +9 -2
  312. package/dist/lib/council/index.d.ts +6 -6
  313. package/dist/lib/council/index.d.ts.map +1 -1
  314. package/dist/lib/council/index.js +8 -8
  315. package/dist/lib/identities/assume.d.ts +2 -2
  316. package/dist/lib/identities/assume.js +7 -7
  317. package/dist/lib/instructions/apply.d.ts +3 -3
  318. package/dist/lib/instructions/apply.d.ts.map +1 -1
  319. package/dist/lib/instructions/apply.js +75 -27
  320. package/dist/lib/instructions/host-addendum.d.ts +54 -0
  321. package/dist/lib/instructions/host-addendum.d.ts.map +1 -0
  322. package/dist/lib/instructions/host-addendum.js +107 -0
  323. package/dist/lib/instructions/templates.d.ts +10 -3
  324. package/dist/lib/instructions/templates.d.ts.map +1 -1
  325. package/dist/lib/instructions/templates.js +41 -12
  326. package/dist/lib/machine.d.ts +2 -2
  327. package/dist/lib/machine.js +2 -2
  328. package/package.json +26 -21
  329. package/schemas/config.schema.json +26 -1
  330. package/src/commander.ts +22 -13
  331. package/src/commands/{harness.ts → adapter.ts} +46 -46
  332. package/src/commands/agents.ts +200 -78
  333. package/src/commands/artifacts.ts +168 -0
  334. package/src/commands/backup.ts +47 -33
  335. package/src/commands/browse.ts +438 -2
  336. package/src/commands/checkpoint.ts +196 -0
  337. package/src/commands/context.ts +3 -176
  338. package/src/commands/decision.ts +41 -7
  339. package/src/commands/deinit.ts +16 -16
  340. package/src/commands/doctor.ts +28 -28
  341. package/src/commands/{supervisor.ts → governor.ts} +184 -154
  342. package/src/commands/grep.ts +19 -2
  343. package/src/commands/init.ts +50 -34
  344. package/src/commands/{scratch.ts → journal.ts} +60 -60
  345. package/src/commands/policy.ts +1 -1
  346. package/src/commands/presence.ts +2 -2
  347. package/src/commands/sync.ts +3 -3
  348. package/src/commands/tunnel.ts +256 -38
  349. package/src/commands/web-fetch.ts +1 -1
  350. package/src/commands/web.ts +56 -1
  351. package/src/commands/work.ts +50 -35
  352. package/src/commands/workflow.ts +43 -34
  353. package/src/core/{harnesses → adapters}/attest-projection.ts +2 -2
  354. package/src/core/{harnesses → adapters}/attest.ts +27 -27
  355. package/src/core/{harnesses → adapters}/attestation.ts +41 -41
  356. package/src/core/{harnesses → adapters}/bench.ts +34 -43
  357. package/src/core/adapters/index.ts +56 -0
  358. package/src/core/{harnesses → adapters}/profiles.ts +16 -16
  359. package/src/core/{harnesses → adapters}/registry.ts +23 -23
  360. package/src/core/{harnesses → adapters}/types.ts +23 -23
  361. package/src/core/agents/canonical-emit.ts +16 -43
  362. package/src/core/agents/cli-emit.ts +1 -1
  363. package/src/core/agents/cli.ts +30 -28
  364. package/src/core/agents/codex-replay.ts +6 -6
  365. package/src/core/agents/coord-bin.ts +92 -0
  366. package/src/core/agents/coord-client.ts +302 -78
  367. package/src/core/agents/events/consume.ts +1 -1
  368. package/src/core/agents/events/emit.ts +7 -6
  369. package/src/core/agents/paths.ts +7 -11
  370. package/src/core/agents/render/prompt-context.ts +107 -31
  371. package/src/core/agents/render/session-context.ts +6 -6
  372. package/src/core/agents/rules/claim-conflict.ts +4 -7
  373. package/src/core/agents/rules/commit-conflict.ts +103 -22
  374. package/src/core/agents/rules/stop-hook.ts +33 -17
  375. package/src/core/agents/rules/verdict.ts +13 -0
  376. package/src/core/agents/session-events.ts +4 -4
  377. package/src/core/agents/state/council.ts +1 -1
  378. package/src/core/agents/state/heartbeat-projector.ts +16 -12
  379. package/src/core/agents/state/heartbeat-writer.ts +12 -12
  380. package/src/core/agents/state/{scratch.ts → journal.ts} +12 -12
  381. package/src/core/agents/state/pidmap.ts +130 -15
  382. package/src/core/agents/state/proc-start.ts +208 -0
  383. package/src/core/agents/state/shell-mutation.ts +1 -1
  384. package/src/core/agents/state/stale-sweep.ts +7 -7
  385. package/src/core/artifacts/index.ts +557 -0
  386. package/src/core/config.ts +30 -2
  387. package/src/core/context/index.ts +15 -15
  388. package/src/core/governor/adapter-spread.ts +82 -0
  389. package/src/core/governor/index.ts +91 -0
  390. package/src/core/governor/plan-api.ts +115 -0
  391. package/src/core/{supervisor → governor}/plan-read.ts +112 -97
  392. package/src/core/{supervisor → governor}/plan-types.ts +59 -56
  393. package/src/core/{supervisor → governor}/planning.ts +223 -192
  394. package/src/core/governor/read.ts +59 -0
  395. package/src/core/{supervisor → governor}/runner.ts +39 -39
  396. package/src/core/{supervisor → governor}/service-read.ts +22 -22
  397. package/src/core/{supervisor → governor}/service.ts +117 -119
  398. package/src/core/{supervisor → governor}/state.ts +325 -167
  399. package/src/core/hooks/adapter/detect.ts +30 -0
  400. package/src/core/hooks/{harness → adapter}/events.ts +16 -14
  401. package/src/core/hooks/{harness → adapter}/output.ts +31 -23
  402. package/src/core/hooks/{harness → adapter}/parse.ts +5 -5
  403. package/src/core/hooks/{harness → adapter}/wiring.ts +21 -21
  404. package/src/core/hooks/cli.ts +197 -173
  405. package/src/core/hooks/effects/image-capture.ts +6 -6
  406. package/src/core/hooks/effects/index.ts +19 -19
  407. package/src/core/hooks/events/emit.ts +3 -3
  408. package/src/core/hooks/events/rotate.ts +1 -1
  409. package/src/core/hooks/events/schema.ts +15 -7
  410. package/src/core/hooks/guard-path.ts +2 -2
  411. package/src/core/hooks/index.ts +1 -1
  412. package/src/core/hooks/resolve/anchor.ts +63 -8
  413. package/src/core/hooks/resolve/coord-root.ts +18 -40
  414. package/src/core/hooks/resolve/intent.ts +1 -1
  415. package/src/core/hooks/resolve/owner.ts +11 -5
  416. package/src/core/{scratch → journal}/index.ts +53 -53
  417. package/src/core/policy/evaluate.ts +8 -8
  418. package/src/core/policy/types.ts +3 -3
  419. package/src/core/work/state.ts +65 -23
  420. package/src/core/workflow/adapters.ts +33 -0
  421. package/src/core/workflow/approvals.ts +7 -7
  422. package/src/core/workflow/billing.ts +12 -12
  423. package/src/core/workflow/child-env.ts +13 -4
  424. package/src/core/workflow/engine.ts +155 -90
  425. package/src/core/workflow/evidence-preflight.ts +165 -0
  426. package/src/core/workflow/index.ts +3 -3
  427. package/src/core/workflow/proof.ts +60 -50
  428. package/src/core/workflow/run-state.ts +7 -7
  429. package/src/core/workflow/sandbox-projection.ts +16 -16
  430. package/src/core/workflow/spawn-claude.ts +13 -10
  431. package/src/core/workflow/spawn-codex.ts +13 -10
  432. package/src/core/workflow/spawn-cursor.ts +13 -10
  433. package/src/core/workflow/spawn-failure.ts +1 -1
  434. package/src/core/workflow/specialists.ts +2 -2
  435. package/src/core/workflow/{journal.ts → transcript.ts} +16 -16
  436. package/src/core/workflow/types.ts +108 -51
  437. package/src/core/workflow/validate.ts +1 -1
  438. package/src/core/workflow/workspaces/cancellation.ts +2 -2
  439. package/src/core/workflow/workspaces/cleanup.ts +2 -2
  440. package/src/core/workflow/workspaces/execution.ts +6 -6
  441. package/src/core/workflow/workspaces/inspect.ts +14 -11
  442. package/src/core/workflow/workspaces/integration.ts +18 -14
  443. package/src/core/workflow/workspaces/lifecycle.ts +10 -10
  444. package/src/core/workflow/workspaces/local-git.ts +47 -5
  445. package/src/core/workflow/workspaces/recovery.ts +3 -3
  446. package/src/core/workflow/workspaces/state.ts +4 -3
  447. package/src/core/workflow/workspaces/types.ts +1 -1
  448. package/src/lib/browser/asserts.ts +177 -0
  449. package/src/lib/browser/client.ts +189 -14
  450. package/src/lib/browser/content-checks.ts +571 -0
  451. package/src/lib/browser/critique.ts +231 -0
  452. package/src/lib/browser/geometry.ts +297 -1
  453. package/src/lib/browser/index.ts +34 -0
  454. package/src/lib/claude-desktop.ts +4 -1
  455. package/src/lib/context/index.ts +11 -1
  456. package/src/lib/council/index.ts +9 -9
  457. package/src/lib/identities/assume.ts +7 -7
  458. package/src/lib/instructions/apply.ts +87 -25
  459. package/src/lib/instructions/host-addendum.ts +126 -0
  460. package/src/lib/instructions/templates.ts +44 -15
  461. package/src/lib/machine.ts +2 -2
  462. package/dist/commands/harness.d.ts +0 -12
  463. package/dist/commands/harness.d.ts.map +0 -1
  464. package/dist/commands/scratch.d.ts +0 -4
  465. package/dist/commands/scratch.d.ts.map +0 -1
  466. package/dist/commands/session.d.ts.map +0 -1
  467. package/dist/commands/session.js +0 -162
  468. package/dist/commands/supervisor.d.ts +0 -4
  469. package/dist/commands/supervisor.d.ts.map +0 -1
  470. package/dist/core/harnesses/attest-projection.d.ts.map +0 -1
  471. package/dist/core/harnesses/attest.d.ts.map +0 -1
  472. package/dist/core/harnesses/attestation.d.ts.map +0 -1
  473. package/dist/core/harnesses/bench.d.ts.map +0 -1
  474. package/dist/core/harnesses/index.d.ts +0 -13
  475. package/dist/core/harnesses/index.d.ts.map +0 -1
  476. package/dist/core/harnesses/index.js +0 -6
  477. package/dist/core/harnesses/profiles.d.ts.map +0 -1
  478. package/dist/core/harnesses/registry.d.ts +0 -15
  479. package/dist/core/harnesses/registry.d.ts.map +0 -1
  480. package/dist/core/harnesses/types.d.ts.map +0 -1
  481. package/dist/core/hooks/harness/detect.d.ts +0 -9
  482. package/dist/core/hooks/harness/events.d.ts.map +0 -1
  483. package/dist/core/hooks/harness/output.d.ts.map +0 -1
  484. package/dist/core/supervisor/index.d.ts +0 -7
  485. package/dist/core/supervisor/index.d.ts.map +0 -1
  486. package/dist/core/supervisor/index.js +0 -6
  487. package/dist/core/supervisor/plan-api.d.ts +0 -23
  488. package/dist/core/supervisor/plan-api.d.ts.map +0 -1
  489. package/dist/core/supervisor/plan-api.js +0 -50
  490. package/dist/core/supervisor/plan-read.d.ts +0 -5
  491. package/dist/core/supervisor/plan-read.d.ts.map +0 -1
  492. package/dist/core/supervisor/plan-types.d.ts.map +0 -1
  493. package/dist/core/supervisor/planning.d.ts +0 -33
  494. package/dist/core/supervisor/planning.d.ts.map +0 -1
  495. package/dist/core/supervisor/read.d.ts +0 -6
  496. package/dist/core/supervisor/read.d.ts.map +0 -1
  497. package/dist/core/supervisor/read.js +0 -4
  498. package/dist/core/supervisor/runner.d.ts +0 -37
  499. package/dist/core/supervisor/runner.d.ts.map +0 -1
  500. package/dist/core/supervisor/service-read.d.ts +0 -6
  501. package/dist/core/supervisor/service-read.d.ts.map +0 -1
  502. package/dist/core/supervisor/service.d.ts +0 -114
  503. package/dist/core/supervisor/service.d.ts.map +0 -1
  504. package/dist/core/supervisor/state.d.ts +0 -95
  505. package/dist/core/supervisor/state.d.ts.map +0 -1
  506. package/dist/core/workflow/harnesses.d.ts +0 -17
  507. package/dist/core/workflow/harnesses.d.ts.map +0 -1
  508. package/dist/core/workflow/harnesses.js +0 -21
  509. package/dist/core/workflow/journal.d.ts.map +0 -1
  510. package/src/commands/session.ts +0 -187
  511. package/src/core/harnesses/index.ts +0 -56
  512. package/src/core/hooks/harness/detect.ts +0 -30
  513. package/src/core/supervisor/index.ts +0 -89
  514. package/src/core/supervisor/plan-api.ts +0 -73
  515. package/src/core/supervisor/read.ts +0 -59
  516. package/src/core/workflow/harnesses.ts +0 -33
  517. /package/dist/core/{harnesses → adapters}/attest-projection.js +0 -0
@@ -0,0 +1,9 @@
1
+ import type { Adapter } from "../events/schema.js";
2
+ /**
3
+ * Resolve the adapter firing the hook. The dispatcher binary is always
4
+ * invoked with `--adapter <name>` per the wiring in each adapter's settings
5
+ * file (Phase 1). Returns null when the flag is missing; caller falls
6
+ * through to the env-based fallback or skips emission.
7
+ */
8
+ export declare function detectAdapter(argv: readonly string[]): Adapter | null;
9
+ //# sourceMappingURL=detect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../../../src/core/hooks/harness/detect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,GAAG,IAAI,CAWrE"}
1
+ {"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../../../src/core/hooks/adapter/detect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,GAAG,IAAI,CAWrE"}
@@ -1,26 +1,26 @@
1
1
  import { coordEnv } from "../../../lib/env.js";
2
2
  /**
3
- * Resolve the harness firing the hook. The dispatcher binary is always
4
- * invoked with `--harness <name>` per the wiring in each harness's settings
3
+ * Resolve the adapter firing the hook. The dispatcher binary is always
4
+ * invoked with `--adapter <name>` per the wiring in each adapter's settings
5
5
  * file (Phase 1). Returns null when the flag is missing; caller falls
6
6
  * through to the env-based fallback or skips emission.
7
7
  */
8
- export function detectHarness(argv) {
8
+ export function detectAdapter(argv) {
9
9
  for (let i = 0; i < argv.length; i++) {
10
10
  const a = argv[i];
11
- if (a === "--harness") {
11
+ if (a === "--adapter") {
12
12
  return validate(argv[i + 1]);
13
13
  }
14
- if (a.startsWith("--harness=")) {
15
- return validate(a.slice("--harness=".length));
14
+ if (a.startsWith("--adapter=")) {
15
+ return validate(a.slice("--adapter=".length));
16
16
  }
17
17
  }
18
- return validate(coordEnv("AGENT_COORD_HARNESS"));
18
+ return validate(coordEnv("AGENT_COORD_ADAPTER"));
19
19
  }
20
20
  function validate(v) {
21
21
  if (v === "claude-code" || v === "cursor" || v === "codex")
22
22
  return v;
23
- // Legacy: some harnesses use `claude_code` (underscore). Map
23
+ // Legacy: some adapters use `claude_code` (underscore). Map
24
24
  // it through so the env-based fallback works for callers that haven't
25
25
  // updated yet.
26
26
  if (v === "claude_code")
@@ -1,43 +1,44 @@
1
1
  /**
2
- * Canonical hook-wiring spec per harness: which settings file to write, which
3
- * event key maps to which `agent-hook <subcommand>`, and how each harness encodes
2
+ * Canonical hook-wiring spec per adapter: which settings file to write, which
3
+ * event key maps to which `agent-hook <subcommand>`, and how each adapter encodes
4
4
  * a command hook. Single source of truth for `harn init` (and any future docs /
5
5
  * installers) so the wired set can't drift from what agent-hook actually handles.
6
6
  *
7
7
  * The event lists + entry shapes mirror exactly what a fully-wired project uses
8
- * for each harness (Claude Code `.claude/settings.json`, Cursor `.cursor/hooks.json`,
8
+ * for each adapter (Claude Code `.claude/settings.json`, Cursor `.cursor/hooks.json`,
9
9
  * Codex `.codex/hooks.json`).
10
10
  */
11
- export type HarnessId = "claude-code" | "cursor" | "codex";
11
+ export type { Adapter as AdapterId } from "../events/schema.js";
12
+ import type { Adapter as AdapterId } from "../events/schema.js";
12
13
  export interface HookEvent {
13
- /** Key under the harness settings file's `hooks` map (e.g. `SessionStart`, `preToolUse`). */
14
+ /** Key under the adapter settings file's `hooks` map (e.g. `SessionStart`, `preToolUse`). */
14
15
  settingsKey: string;
15
16
  /** agent-hook subcommand to invoke for this event. */
16
17
  subcommand: string;
17
18
  }
18
19
  /**
19
- * How a harness encodes a single command hook under `hooks.<settingsKey>`:
20
+ * How a adapter encodes a single command hook under `hooks.<settingsKey>`:
20
21
  * - `claude`: `[{ hooks: [{ type: "command", command }] }]` (Claude Code + Codex)
21
22
  * - `cursor`: `[{ command }]` (Cursor: flat entry, no inner `hooks` array)
22
23
  */
23
24
  export type HookEntryShape = "claude" | "cursor";
24
- export interface HarnessSpec {
25
+ export interface AdapterSpec {
25
26
  /** Settings file to wire, relative to the project root. */
26
27
  settingsFile: string;
27
- /** Events this harness fires, mapped to agent-hook subcommands. */
28
+ /** Events this adapter fires, mapped to agent-hook subcommands. */
28
29
  events: HookEvent[];
29
30
  /** Per-entry encoding under the root `hooks` object. */
30
31
  entryShape: HookEntryShape;
31
32
  /** When set, ensure this top-level `version` key in the file (Cursor requires `1`). */
32
33
  rootVersion?: number;
33
- /** Harness-owned entries from older specs that `init` should remove during migration. */
34
+ /** Adapter-owned entries from older specs that `init` should remove during migration. */
34
35
  legacyEvents?: HookEvent[];
35
- /** Strict top-level settings keys accepted by this harness, when its parser is closed. */
36
+ /** Strict top-level settings keys accepted by this adapter, when its parser is closed. */
36
37
  allowedTopLevelKeys?: string[];
37
- /** Strict hook event keys accepted by this harness, including events harnery does not wire. */
38
+ /** Strict hook event keys accepted by this adapter, including events harnery does not wire. */
38
39
  allowedEventKeys?: string[];
39
40
  /**
40
- * Env var the harness exports to hook processes carrying the project root
41
+ * Env var the adapter exports to hook processes carrying the project root
41
42
  * (e.g. Claude Code's CLAUDE_PROJECT_DIR). When set, `init` anchors the
42
43
  * agent-hook path on it so the hook still spawns when the process cwd has
43
44
  * wandered (the session shell `cd`ing into a subdirectory or off-repo).
@@ -57,6 +58,6 @@ export declare const CODEX_EVENTS: HookEvent[];
57
58
  export declare const LEGACY_CODEX_EVENTS: HookEvent[];
58
59
  /** Every hook key accepted by Codex 0.144, including events harnery does not consume. */
59
60
  export declare const CODEX_ALLOWED_EVENT_KEYS: string[];
60
- /** Every supported harness, fully wireable by `harn init`. */
61
- export declare const HARNESS_SPECS: Record<HarnessId, HarnessSpec>;
61
+ /** Every supported adapter, fully wireable by `harn init`. */
62
+ export declare const ADAPTER_SPECS: Record<AdapterId, AdapterSpec>;
62
63
  //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../../src/core/hooks/adapter/events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,YAAY,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhE,OAAO,KAAK,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhE,MAAM,WAAW,SAAS;IACxB,6FAA6F;IAC7F,WAAW,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEjD,MAAM,WAAW,WAAW;IAC1B,2DAA2D;IAC3D,YAAY,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,wDAAwD;IACxD,UAAU,EAAE,cAAc,CAAC;IAC3B,uFAAuF;IACvF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yFAAyF;IACzF,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC;IAC3B,0FAA0F;IAC1F,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,+FAA+F;IAC/F,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,4CAA4C;AAC5C,eAAO,MAAM,kBAAkB,EAAE,SAAS,EAYzC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,EAWpC,CAAC;AAEF,gFAAgF;AAChF,eAAO,MAAM,YAAY,EAAE,SAAS,EAUnC,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,mBAAmB,EAAE,SAAS,EAI1C,CAAC;AAEF,yFAAyF;AACzF,eAAO,MAAM,wBAAwB,UAWpC,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,SAAS,EAAE,WAAW,CAqBxD,CAAC"}
@@ -1,11 +1,11 @@
1
1
  /**
2
- * Canonical hook-wiring spec per harness: which settings file to write, which
3
- * event key maps to which `agent-hook <subcommand>`, and how each harness encodes
2
+ * Canonical hook-wiring spec per adapter: which settings file to write, which
3
+ * event key maps to which `agent-hook <subcommand>`, and how each adapter encodes
4
4
  * a command hook. Single source of truth for `harn init` (and any future docs /
5
5
  * installers) so the wired set can't drift from what agent-hook actually handles.
6
6
  *
7
7
  * The event lists + entry shapes mirror exactly what a fully-wired project uses
8
- * for each harness (Claude Code `.claude/settings.json`, Cursor `.cursor/hooks.json`,
8
+ * for each adapter (Claude Code `.claude/settings.json`, Cursor `.cursor/hooks.json`,
9
9
  * Codex `.codex/hooks.json`).
10
10
  */
11
11
  /** Claude Code: `.claude/settings.json`. */
@@ -69,8 +69,8 @@ export const CODEX_ALLOWED_EVENT_KEYS = [
69
69
  "SubagentStop",
70
70
  "Stop",
71
71
  ];
72
- /** Every supported harness, fully wireable by `harn init`. */
73
- export const HARNESS_SPECS = {
72
+ /** Every supported adapter, fully wireable by `harn init`. */
73
+ export const ADAPTER_SPECS = {
74
74
  "claude-code": {
75
75
  settingsFile: ".claude/settings.json",
76
76
  events: CLAUDE_CODE_EVENTS,
@@ -1,37 +1,43 @@
1
1
  /**
2
- * Harness-aware hook output JSON. Each adapter target has its own protocol
2
+ * Adapter-aware hook output JSON. Each adapter target has its own protocol
3
3
  * shape, so encode it once here so post-emit handlers don't have to branch on
4
- * `harness` everywhere.
4
+ * `adapter` everywhere.
5
5
  *
6
- * Shapes (verified against live dispatchers + each harness's upstream hooks docs):
6
+ * Shapes (verified against live dispatchers + each adapter's upstream hooks docs):
7
7
  *
8
8
  * - **Claude Code**: `{hookSpecificOutput: {hookEventName, additionalContext}}`
9
9
  * for SessionStart / UserPromptSubmit / SubagentStart; deny uses
10
10
  * `{hookSpecificOutput: {hookEventName: "PreToolUse", permissionDecision: "deny", permissionDecisionReason}}`.
11
11
  * - **Cursor**: `{additional_context, env?}` flat for sessionStart /
12
12
  * beforeSubmitPrompt; deny uses `{permission: "deny", agent_message, user_message}`.
13
- * - **Codex**: structurally identical to Claude Code (confirmed by Phase 0
14
- * probe + the matching shape in the Codex harness adapter).
13
+ * - **Codex**: structurally identical to Claude Code for context and tool
14
+ * denials. Stop blocks are deliberately suppressed because their automatic
15
+ * continuation can replace a completed user-facing answer.
15
16
  *
16
17
  * Every helper writes to process.stdout + newline-terminates so callers can
17
18
  * fire-and-forget. Empty text → no-op (no JSON written).
18
19
  */
19
- import type { Harness } from "../events/schema.js";
20
+ import type { Adapter } from "../events/schema.js";
20
21
  export type SystemEvent = "SessionStart" | "UserPromptSubmit" | "SubagentStart";
21
22
  /** Emit a context-injection (peer table, wiring check, council pending, …). */
22
- export declare function emitContext(harness: Harness, event: SystemEvent, text: string): void;
23
+ export declare function emitContext(adapter: Adapter, event: SystemEvent, text: string): void;
23
24
  /** Emit a PreToolUse deny: blocks the tool call with `reason` shown to the model. */
24
- export declare function emitDeny(harness: Harness, reason: string): void;
25
+ export declare function emitDeny(adapter: Adapter, reason: string): void;
25
26
  /**
26
- * Emit a Stop-hook block in the firing harness's enforcement channel and return
27
+ * Emit a Stop-hook block in the firing adapter's enforcement channel and return
27
28
  * the process exit code the caller should use.
28
29
  *
29
- * The verdict (allow/block + reason) is computed harness-agnostically in
30
+ * The verdict (allow/block + reason) is computed adapter-agnostically in
30
31
  * agents/rules/stop-hook.ts; this function only shapes *how the block is
31
- * communicated back*, because each harness has a different mechanism:
32
+ * communicated back*, because each adapter has a different mechanism:
32
33
  *
33
- * - **Claude Code / Codex** honor `exit 2` + a stderr reason as a turn block,
34
- * and the harness re-prompts the model with the stderr text.
34
+ * - **Claude Code** honors `exit 2` + a stderr reason as a turn block, and the
35
+ * adapter re-prompts the model with the stderr text.
36
+ * - **Codex** also supports that channel, but Harnery must not use it for
37
+ * coordination reminders. A Stop continuation can replace the completed
38
+ * answer in clients that retain only the final continuation response. Return
39
+ * success without output as a defense in depth behind the observe-only
40
+ * verdict in `agents/rules/stop-hook.ts`.
35
41
  * - **Cursor** ignores stop-hook exit codes (non-zero = fail-open, the turn
36
42
  * proceeds) and re-prompts ONLY via a `followup_message` field in stdout
37
43
  * JSON, which it auto-submits as the next user message: the sanctioned
@@ -39,7 +45,7 @@ export declare function emitDeny(harness: Harness, reason: string): void;
39
45
  * We exit 0 so Cursor treats the run as a success and honors the output.
40
46
  * (Confirmed against cursor.com/docs/agent/hooks.)
41
47
  */
42
- export declare function emitStopBlock(harness: Harness, verdict: {
48
+ export declare function emitStopBlock(adapter: Adapter, verdict: {
43
49
  reason?: string;
44
50
  rule: string;
45
51
  }): 0 | 2;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../../../src/core/hooks/adapter/output.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,MAAM,WAAW,GAAG,cAAc,GAAG,kBAAkB,GAAG,eAAe,CAAC;AAEhF,+EAA+E;AAC/E,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAIpF;AAED,qFAAqF;AACrF,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAI/D;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,CAAC,GAAG,CAAC,CAYjG"}
@@ -1,45 +1,51 @@
1
1
  /**
2
- * Harness-aware hook output JSON. Each adapter target has its own protocol
2
+ * Adapter-aware hook output JSON. Each adapter target has its own protocol
3
3
  * shape, so encode it once here so post-emit handlers don't have to branch on
4
- * `harness` everywhere.
4
+ * `adapter` everywhere.
5
5
  *
6
- * Shapes (verified against live dispatchers + each harness's upstream hooks docs):
6
+ * Shapes (verified against live dispatchers + each adapter's upstream hooks docs):
7
7
  *
8
8
  * - **Claude Code**: `{hookSpecificOutput: {hookEventName, additionalContext}}`
9
9
  * for SessionStart / UserPromptSubmit / SubagentStart; deny uses
10
10
  * `{hookSpecificOutput: {hookEventName: "PreToolUse", permissionDecision: "deny", permissionDecisionReason}}`.
11
11
  * - **Cursor**: `{additional_context, env?}` flat for sessionStart /
12
12
  * beforeSubmitPrompt; deny uses `{permission: "deny", agent_message, user_message}`.
13
- * - **Codex**: structurally identical to Claude Code (confirmed by Phase 0
14
- * probe + the matching shape in the Codex harness adapter).
13
+ * - **Codex**: structurally identical to Claude Code for context and tool
14
+ * denials. Stop blocks are deliberately suppressed because their automatic
15
+ * continuation can replace a completed user-facing answer.
15
16
  *
16
17
  * Every helper writes to process.stdout + newline-terminates so callers can
17
18
  * fire-and-forget. Empty text → no-op (no JSON written).
18
19
  */
19
20
  /** Emit a context-injection (peer table, wiring check, council pending, …). */
20
- export function emitContext(harness, event, text) {
21
+ export function emitContext(adapter, event, text) {
21
22
  if (!text || text.length === 0)
22
23
  return;
23
- const json = buildContextJson(harness, event, text);
24
+ const json = buildContextJson(adapter, event, text);
24
25
  process.stdout.write(`${JSON.stringify(json)}\n`);
25
26
  }
26
27
  /** Emit a PreToolUse deny: blocks the tool call with `reason` shown to the model. */
27
- export function emitDeny(harness, reason) {
28
+ export function emitDeny(adapter, reason) {
28
29
  if (!reason)
29
30
  return;
30
- const json = buildDenyJson(harness, reason);
31
+ const json = buildDenyJson(adapter, reason);
31
32
  process.stdout.write(`${JSON.stringify(json)}\n`);
32
33
  }
33
34
  /**
34
- * Emit a Stop-hook block in the firing harness's enforcement channel and return
35
+ * Emit a Stop-hook block in the firing adapter's enforcement channel and return
35
36
  * the process exit code the caller should use.
36
37
  *
37
- * The verdict (allow/block + reason) is computed harness-agnostically in
38
+ * The verdict (allow/block + reason) is computed adapter-agnostically in
38
39
  * agents/rules/stop-hook.ts; this function only shapes *how the block is
39
- * communicated back*, because each harness has a different mechanism:
40
+ * communicated back*, because each adapter has a different mechanism:
40
41
  *
41
- * - **Claude Code / Codex** honor `exit 2` + a stderr reason as a turn block,
42
- * and the harness re-prompts the model with the stderr text.
42
+ * - **Claude Code** honors `exit 2` + a stderr reason as a turn block, and the
43
+ * adapter re-prompts the model with the stderr text.
44
+ * - **Codex** also supports that channel, but Harnery must not use it for
45
+ * coordination reminders. A Stop continuation can replace the completed
46
+ * answer in clients that retain only the final continuation response. Return
47
+ * success without output as a defense in depth behind the observe-only
48
+ * verdict in `agents/rules/stop-hook.ts`.
43
49
  * - **Cursor** ignores stop-hook exit codes (non-zero = fail-open, the turn
44
50
  * proceeds) and re-prompts ONLY via a `followup_message` field in stdout
45
51
  * JSON, which it auto-submits as the next user message: the sanctioned
@@ -47,22 +53,24 @@ export function emitDeny(harness, reason) {
47
53
  * We exit 0 so Cursor treats the run as a success and honors the output.
48
54
  * (Confirmed against cursor.com/docs/agent/hooks.)
49
55
  */
50
- export function emitStopBlock(harness, verdict) {
56
+ export function emitStopBlock(adapter, verdict) {
57
+ if (adapter === "codex")
58
+ return 0;
51
59
  const message = `${verdict.reason ?? "End-of-turn coordination ritual incomplete."}\n[agent-hook stop]: rule=${verdict.rule}`;
52
- if (harness === "cursor") {
60
+ if (adapter === "cursor") {
53
61
  process.stdout.write(`${JSON.stringify({ followup_message: message })}\n`);
54
62
  return 0;
55
63
  }
56
64
  process.stderr.write(`${message}\n`);
57
65
  return 2;
58
66
  }
59
- function buildContextJson(harness, event, text) {
60
- if (harness === "cursor") {
67
+ function buildContextJson(adapter, event, text) {
68
+ if (adapter === "cursor") {
61
69
  // Cursor uses a flat top-level key + an env block that survives across the
62
70
  // session. The dispatcher historically also wrote
63
- // `env: {HARNERY_AGENT_COORD_HARNESS, HARNERY_AGENT_COORD_PLATFORM}`. These are
71
+ // `env: {HARNERY_AGENT_COORD_ADAPTER, HARNERY_AGENT_COORD_PLATFORM}`. These are
64
72
  // observer hints, not load-bearing; agent-hook + agent-coord recover the
65
- // harness from event metadata. Drop them.
73
+ // adapter from event metadata. Drop them.
66
74
  return { additional_context: text };
67
75
  }
68
76
  // Claude Code + Codex share the `hookSpecificOutput` envelope.
@@ -73,8 +81,8 @@ function buildContextJson(harness, event, text) {
73
81
  },
74
82
  };
75
83
  }
76
- function buildDenyJson(harness, reason) {
77
- if (harness === "cursor") {
84
+ function buildDenyJson(adapter, reason) {
85
+ if (adapter === "cursor") {
78
86
  return { permission: "deny", agent_message: reason, user_message: reason };
79
87
  }
80
88
  return {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Harness payload parser. One file because all three harnesses (CC, Cursor,
2
+ * Adapter payload parser. One file because all three adapters (CC, Cursor,
3
3
  * Codex) share most of their PreToolUse / PostToolUse field names (Codex's
4
4
  * field names match CC's directly) and Cursor's deltas are small enough to
5
5
  * branch inline.
@@ -9,7 +9,7 @@
9
9
  * Phase 2 ship criterion is "parser correctness across thousands of real
10
10
  * events without affecting behavior": fail-soft beats fail-hard.
11
11
  */
12
- import type { Harness } from "../events/schema.js";
12
+ import type { Adapter } from "../events/schema.js";
13
13
  export interface ParsedPayload {
14
14
  hook_event_name?: string;
15
15
  session_id?: string;
@@ -37,10 +37,10 @@ export interface ParsedPayload {
37
37
  raw: Record<string, unknown>;
38
38
  }
39
39
  /**
40
- * Parse the raw stdin payload string for any harness. Returns null when JSON
40
+ * Parse the raw stdin payload string for any adapter. Returns null when JSON
41
41
  * parse fails (Cursor occasionally fires hooks with no payload).
42
42
  */
43
- export declare function parsePayload(raw: string, _harness: Harness): ParsedPayload | null;
43
+ export declare function parsePayload(raw: string, _adapter: Adapter): ParsedPayload | null;
44
44
  /**
45
45
  * Pull the bash command string out of a Bash/Shell tool_input. Returns
46
46
  * undefined for non-shell tools.
@@ -52,7 +52,7 @@ export declare function extractBashCommand(toolName: string | undefined, toolInp
52
52
  */
53
53
  export declare function extractToolDescription(toolInput: unknown): string | undefined;
54
54
  /**
55
- * Each harness uses a slightly different name for the "same" lifecycle event.
55
+ * Each adapter uses a slightly different name for the "same" lifecycle event.
56
56
  * Map the CLI-arg event-name (kebab-case, set by us in the wiring) to one of
57
57
  * the canonical event_types. Phase 2's CLI passes the kebab event
58
58
  * name; this returns the canonical event_type or null when the event has no
@@ -1 +1 @@
1
- {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../../src/core/hooks/harness/parse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uFAAuF;IACvF,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9B;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CAkCjF;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,SAAS,EAAE,OAAO,GACjB,MAAM,GAAG,SAAS,CASpB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAO7E;AAmBD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,GAChB;IAAE,UAAU,EAAE,mBAAmB,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAiCjE;AAED,MAAM,MAAM,mBAAmB,GAC3B,eAAe,GACf,aAAa,GACb,oBAAoB,GACpB,WAAW,GACX,gBAAgB,GAChB,eAAe,GACf,cAAc,GACd,eAAe,GACf,uBAAuB,GACvB,4BAA4B,GAC5B,8BAA8B,CAAC"}
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../../src/core/hooks/adapter/parse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uFAAuF;IACvF,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9B;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CAkCjF;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,SAAS,EAAE,OAAO,GACjB,MAAM,GAAG,SAAS,CASpB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAO7E;AAmBD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,GAChB;IAAE,UAAU,EAAE,mBAAmB,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAiCjE;AAED,MAAM,MAAM,mBAAmB,GAC3B,eAAe,GACf,aAAa,GACb,oBAAoB,GACpB,WAAW,GACX,gBAAgB,GAChB,eAAe,GACf,cAAc,GACd,eAAe,GACf,uBAAuB,GACvB,4BAA4B,GAC5B,8BAA8B,CAAC"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Harness payload parser. One file because all three harnesses (CC, Cursor,
2
+ * Adapter payload parser. One file because all three adapters (CC, Cursor,
3
3
  * Codex) share most of their PreToolUse / PostToolUse field names (Codex's
4
4
  * field names match CC's directly) and Cursor's deltas are small enough to
5
5
  * branch inline.
@@ -10,10 +10,10 @@
10
10
  * events without affecting behavior": fail-soft beats fail-hard.
11
11
  */
12
12
  /**
13
- * Parse the raw stdin payload string for any harness. Returns null when JSON
13
+ * Parse the raw stdin payload string for any adapter. Returns null when JSON
14
14
  * parse fails (Cursor occasionally fires hooks with no payload).
15
15
  */
16
- export function parsePayload(raw, _harness) {
16
+ export function parsePayload(raw, _adapter) {
17
17
  if (!raw || raw.trim().length === 0)
18
18
  return null;
19
19
  let json;
@@ -93,7 +93,7 @@ function pickBool(o, k) {
93
93
  }
94
94
  // ── Event-name normalization ────────────────────────────────────────────────
95
95
  /**
96
- * Each harness uses a slightly different name for the "same" lifecycle event.
96
+ * Each adapter uses a slightly different name for the "same" lifecycle event.
97
97
  * Map the CLI-arg event-name (kebab-case, set by us in the wiring) to one of
98
98
  * the canonical event_types. Phase 2's CLI passes the kebab event
99
99
  * name; this returns the canonical event_type or null when the event has no
@@ -1,7 +1,7 @@
1
1
  /**
2
- * Read-only harness-hook wiring inspection — the inverse of `harn init`'s
2
+ * Read-only adapter-hook wiring inspection — the inverse of `harn init`'s
3
3
  * writer (commands/init.ts `wireHooks`). Compares what `init` would wire
4
- * (HARNESS_SPECS) against what's actually present in a project's harness
4
+ * (ADAPTER_SPECS) against what's actually present in a project's adapter
5
5
  * settings file, so `harn doctor` and the SessionStart nudge can tell an agent
6
6
  * when a harnery upgrade changed the hook set but the project hasn't been
7
7
  * re-wired yet.
@@ -10,7 +10,7 @@
10
10
  * doctor check, and the session-start renderer all agree on what "wired" means
11
11
  * — there's exactly one definition of the `agent-hook <subcommand>` match.
12
12
  */
13
- import { type HarnessId, type HarnessSpec, type HookEntryShape, type HookEvent } from "./events.js";
13
+ import { type AdapterId, type AdapterSpec, type HookEntryShape, type HookEvent } from "./events.js";
14
14
  /** Claude Code + Codex entry: `{ hooks: [{ type, command }] }`. */
15
15
  export interface ClaudeHookGroup {
16
16
  matcher?: string;
@@ -32,7 +32,7 @@ export interface SettingsFile {
32
32
  hooks?: Record<string, HookGroup[]>;
33
33
  [k: string]: unknown;
34
34
  }
35
- /** Build a hook entry in the harness's shape. */
35
+ /** Build a hook entry in the adapter's shape. */
36
36
  export declare function makeEntry(shape: HookEntryShape, command: string): HookGroup;
37
37
  /** Pull every command string out of a hook entry, regardless of shape. */
38
38
  export declare function groupCommands(group: HookGroup): string[];
@@ -52,18 +52,18 @@ export interface WiringDiff {
52
52
  * these — they need explicit removal — so they're surfaced separately.
53
53
  */
54
54
  orphans: string[];
55
- /** Settings fields rejected by a harness with a strict top-level schema. */
55
+ /** Settings fields rejected by a adapter with a strict top-level schema. */
56
56
  invalidTopLevelKeys: string[];
57
- /** Hook event names rejected by a harness with a strict event schema. */
57
+ /** Hook event names rejected by a adapter with a strict event schema. */
58
58
  invalidEventKeys: string[];
59
59
  }
60
60
  /**
61
- * Pure diff of one settings object against one harness spec. Read-only inverse
61
+ * Pure diff of one settings object against one adapter spec. Read-only inverse
62
62
  * of `wireHooks`; no fs, so it's unit-testable.
63
63
  */
64
- export declare function diffWiring(settings: SettingsFile, spec: HarnessSpec): WiringDiff;
65
- export interface HarnessWiringStatus {
66
- harness: HarnessId;
64
+ export declare function diffWiring(settings: SettingsFile, spec: AdapterSpec): WiringDiff;
65
+ export interface AdapterWiringStatus {
66
+ adapter: AdapterId;
67
67
  /** Settings file path, relative to the project root. */
68
68
  settingsFile: string;
69
69
  missing: HookEvent[];
@@ -73,17 +73,17 @@ export interface HarnessWiringStatus {
73
73
  parseError?: string;
74
74
  }
75
75
  /**
76
- * Inspect every harness whose settings file exists under `projectRoot` and
76
+ * Inspect every adapter whose settings file exists under `projectRoot` and
77
77
  * return only those with *drift*. Read-only; never writes.
78
78
  *
79
- * Drift is reported only for a harness the project has **already opted into** —
79
+ * Drift is reported only for a adapter the project has **already opted into** —
80
80
  * i.e. at least one harnery hook is already wired. A settings file with zero
81
- * harnery hooks just means this harness isn't harnery-wired here (a bare
81
+ * harnery hooks just means this adapter isn't harnery-wired here (a bare
82
82
  * `.claude/settings.json` is a generic Claude Code file); that's `harn init`'s
83
- * job to surface on first run, not drift to nag about every session. A harness
83
+ * job to surface on first run, not drift to nag about every session. A adapter
84
84
  * with no settings file at all, or an unparseable one, is skipped.
85
85
  */
86
- export declare function loadHarnessWiring(projectRoot: string): HarnessWiringStatus[];
86
+ export declare function loadAdapterWiring(projectRoot: string): AdapterWiringStatus[];
87
87
  /**
88
88
  * Resolve the harnery package version for context in nudges/checks. Walks up
89
89
  * from this module to the package root (works under Bun from `src/` and Node
@@ -1 +1 @@
1
- {"version":3,"file":"wiring.d.ts","sourceRoot":"","sources":["../../../../src/core/hooks/harness/wiring.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,SAAS,EACf,MAAM,aAAa,CAAC;AAErB,mEAAmE;AACnE,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC5C;AACD,0CAA0C;AAC1C,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AACD,MAAM,MAAM,SAAS,GAAG,eAAe,GAAG,eAAe,CAAC;AAE1D,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IACpC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED,iDAAiD;AACjD,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAE3E;AAED,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,EAAE,CAMxD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAEnF;AAQD,MAAM,WAAW,UAAU;IACzB,kDAAkD;IAClD,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,iCAAiC;IACjC,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB;;;;OAIG;IACH,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,4EAA4E;IAC5E,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,yEAAyE;IACzE,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,GAAG,UAAU,CA2ChF;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,SAAS,CAAC;IACnB,wDAAwD;IACxD,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAwC5E;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAkBvC"}
1
+ {"version":3,"file":"wiring.d.ts","sourceRoot":"","sources":["../../../../src/core/hooks/adapter/wiring.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,SAAS,EACf,MAAM,aAAa,CAAC;AAErB,mEAAmE;AACnE,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC5C;AACD,0CAA0C;AAC1C,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AACD,MAAM,MAAM,SAAS,GAAG,eAAe,GAAG,eAAe,CAAC;AAE1D,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IACpC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED,iDAAiD;AACjD,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAE3E;AAED,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,EAAE,CAMxD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAEnF;AAQD,MAAM,WAAW,UAAU;IACzB,kDAAkD;IAClD,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,iCAAiC;IACjC,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB;;;;OAIG;IACH,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,4EAA4E;IAC5E,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,yEAAyE;IACzE,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,GAAG,UAAU,CA2ChF;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,SAAS,CAAC;IACnB,wDAAwD;IACxD,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAwC5E;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAkBvC"}
@@ -1,7 +1,7 @@
1
1
  /**
2
- * Read-only harness-hook wiring inspection — the inverse of `harn init`'s
2
+ * Read-only adapter-hook wiring inspection — the inverse of `harn init`'s
3
3
  * writer (commands/init.ts `wireHooks`). Compares what `init` would wire
4
- * (HARNESS_SPECS) against what's actually present in a project's harness
4
+ * (ADAPTER_SPECS) against what's actually present in a project's adapter
5
5
  * settings file, so `harn doctor` and the SessionStart nudge can tell an agent
6
6
  * when a harnery upgrade changed the hook set but the project hasn't been
7
7
  * re-wired yet.
@@ -13,8 +13,8 @@
13
13
  import { existsSync, readFileSync } from "node:fs";
14
14
  import { dirname, join, resolve } from "node:path";
15
15
  import { fileURLToPath } from "node:url";
16
- import { HARNESS_SPECS, } from "./events.js";
17
- /** Build a hook entry in the harness's shape. */
16
+ import { ADAPTER_SPECS, } from "./events.js";
17
+ /** Build a hook entry in the adapter's shape. */
18
18
  export function makeEntry(shape, command) {
19
19
  return shape === "cursor" ? { command } : { hooks: [{ type: "command", command }] };
20
20
  }
@@ -40,7 +40,7 @@ function commandSubcommand(command) {
40
40
  return m ? m[1] : null;
41
41
  }
42
42
  /**
43
- * Pure diff of one settings object against one harness spec. Read-only inverse
43
+ * Pure diff of one settings object against one adapter spec. Read-only inverse
44
44
  * of `wireHooks`; no fs, so it's unit-testable.
45
45
  */
46
46
  export function diffWiring(settings, spec) {
@@ -84,19 +84,19 @@ export function diffWiring(settings, spec) {
84
84
  };
85
85
  }
86
86
  /**
87
- * Inspect every harness whose settings file exists under `projectRoot` and
87
+ * Inspect every adapter whose settings file exists under `projectRoot` and
88
88
  * return only those with *drift*. Read-only; never writes.
89
89
  *
90
- * Drift is reported only for a harness the project has **already opted into** —
90
+ * Drift is reported only for a adapter the project has **already opted into** —
91
91
  * i.e. at least one harnery hook is already wired. A settings file with zero
92
- * harnery hooks just means this harness isn't harnery-wired here (a bare
92
+ * harnery hooks just means this adapter isn't harnery-wired here (a bare
93
93
  * `.claude/settings.json` is a generic Claude Code file); that's `harn init`'s
94
- * job to surface on first run, not drift to nag about every session. A harness
94
+ * job to surface on first run, not drift to nag about every session. A adapter
95
95
  * with no settings file at all, or an unparseable one, is skipped.
96
96
  */
97
- export function loadHarnessWiring(projectRoot) {
97
+ export function loadAdapterWiring(projectRoot) {
98
98
  const out = [];
99
- for (const [id, spec] of Object.entries(HARNESS_SPECS)) {
99
+ for (const [id, spec] of Object.entries(ADAPTER_SPECS)) {
100
100
  const settingsPath = resolve(projectRoot, spec.settingsFile);
101
101
  if (!existsSync(settingsPath))
102
102
  continue;
@@ -106,7 +106,7 @@ export function loadHarnessWiring(projectRoot) {
106
106
  }
107
107
  catch (error) {
108
108
  out.push({
109
- harness: id,
109
+ adapter: id,
110
110
  settingsFile: spec.settingsFile,
111
111
  missing: [],
112
112
  orphans: [],
@@ -126,7 +126,7 @@ export function loadHarnessWiring(projectRoot) {
126
126
  continue; // current
127
127
  }
128
128
  out.push({
129
- harness: id,
129
+ adapter: id,
130
130
  settingsFile: spec.settingsFile,
131
131
  missing: diff.missing,
132
132
  orphans: diff.orphans,
@@ -3,8 +3,8 @@
3
3
  * alongside the legacy stream.
4
4
  *
5
5
  * Flow:
6
- * 1. Parse argv → event-name + harness.
7
- * 2. Read stdin → harness payload (JSON or empty).
6
+ * 1. Parse argv → event-name + adapter.
7
+ * 2. Read stdin → adapter payload (JSON or empty).
8
8
  * 3. Find coord root (walk up for .harnery/).
9
9
  * 4. Resolve instance_id (env → payload → pid-map walk).
10
10
  * 5. Map event-name → canonical event_type.
@@ -15,7 +15,7 @@
15
15
  * Phase 2 ship criterion: confirms parser correctness across thousands of
16
16
  * real events without affecting behavior. Always exits 0. Failures land in
17
17
  * `.harnery/debug/agent-hook.errors.ndjson` for audit but never break the
18
- * harness flow.
18
+ * adapter flow.
19
19
  */
20
20
  export {};
21
21
  //# sourceMappingURL=cli.d.ts.map