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
@@ -1,17 +1,22 @@
1
1
  /**
2
- * Walk up from `start` looking for a directory containing `.harnery/`. The
3
- * single coord-root resolution so every adapter agrees on the same root.
2
+ * The hooks-side name for THE coordination-root resolution.
4
3
  *
5
- * Resolution precedence:
4
+ * Delegates to `resolveCoordRoot()` so the hooks and the CLI cannot resolve
5
+ * different roots. They used to: this walked up from `CLAUDE_PROJECT_DIR` or
6
+ * cwd while the CLI's `monorepoRoot()` asked git for the superproject first, so
7
+ * with a shell inside a submodule that carries its own `.harnery/`, the CLI's
8
+ * `state.status_checked` landed in a stream this side never read and rule 1/3
9
+ * blocked every turn.
10
+ *
11
+ * Resolution precedence (see `resolveCoordRoot` for the full rationale):
6
12
  * 1. HARNERY_COORD_ROOT_OVERRIDE — explicit pin (tests, git hooks).
7
- * 2. The harness's project dir (CLAUDE_PROJECT_DIR) — hook processes
8
- * inherit the session's *shell* cwd, which follows `cd` into
9
- * subdirectories/submodules that may carry a `.harnery/` of their own
10
- * (or none at all, e.g. a scratch dir under /tmp). The session's
11
- * coordination home is the project the harness opened, not wherever the
12
- * shell happens to sit, so a project dir that resolves to a coord root
13
- * wins over the cwd walk.
14
- * 3. Walk up from `start` (default cwd).
13
+ * 2. The adapter's project dir (CLAUDE_PROJECT_DIR) — hook processes inherit
14
+ * the session's *shell* cwd, which follows `cd` into subdirectories or
15
+ * submodules that may carry a `.harnery/` of their own (or none at all,
16
+ * e.g. a journal dir under /tmp). The session's coordination home is the
17
+ * project the adapter opened, not wherever the shell happens to sit.
18
+ * 3. The root that already holds this session's heartbeat.
19
+ * 4. The nearest enclosing `.harnery/`, then a git-derived root.
15
20
  */
16
21
  export declare function findCoordRoot(start?: string): string | null;
17
22
  //# sourceMappingURL=coord-root.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"coord-root.d.ts","sourceRoot":"","sources":["../../../../src/core/hooks/resolve/coord-root.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,KAAK,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CAiB1E"}
1
+ {"version":3,"file":"coord-root.d.ts","sourceRoot":"","sources":["../../../../src/core/hooks/resolve/coord-root.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,aAAa,CAAC,KAAK,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CAE1E"}
@@ -1,49 +1,24 @@
1
- import { existsSync } from "node:fs";
2
- import { dirname, join, resolve } from "node:path";
3
- import { coordEnv } from "../../../lib/env.js";
1
+ import { resolveCoordRoot } from "../../agents/coord-client.js";
4
2
  /**
5
- * Walk up from `start` looking for a directory containing `.harnery/`. The
6
- * single coord-root resolution so every adapter agrees on the same root.
3
+ * The hooks-side name for THE coordination-root resolution.
7
4
  *
8
- * Resolution precedence:
5
+ * Delegates to `resolveCoordRoot()` so the hooks and the CLI cannot resolve
6
+ * different roots. They used to: this walked up from `CLAUDE_PROJECT_DIR` or
7
+ * cwd while the CLI's `monorepoRoot()` asked git for the superproject first, so
8
+ * with a shell inside a submodule that carries its own `.harnery/`, the CLI's
9
+ * `state.status_checked` landed in a stream this side never read and rule 1/3
10
+ * blocked every turn.
11
+ *
12
+ * Resolution precedence (see `resolveCoordRoot` for the full rationale):
9
13
  * 1. HARNERY_COORD_ROOT_OVERRIDE — explicit pin (tests, git hooks).
10
- * 2. The harness's project dir (CLAUDE_PROJECT_DIR) — hook processes
11
- * inherit the session's *shell* cwd, which follows `cd` into
12
- * subdirectories/submodules that may carry a `.harnery/` of their own
13
- * (or none at all, e.g. a scratch dir under /tmp). The session's
14
- * coordination home is the project the harness opened, not wherever the
15
- * shell happens to sit, so a project dir that resolves to a coord root
16
- * wins over the cwd walk.
17
- * 3. Walk up from `start` (default cwd).
14
+ * 2. The adapter's project dir (CLAUDE_PROJECT_DIR) — hook processes inherit
15
+ * the session's *shell* cwd, which follows `cd` into subdirectories or
16
+ * submodules that may carry a `.harnery/` of their own (or none at all,
17
+ * e.g. a journal dir under /tmp). The session's coordination home is the
18
+ * project the adapter opened, not wherever the shell happens to sit.
19
+ * 3. The root that already holds this session's heartbeat.
20
+ * 4. The nearest enclosing `.harnery/`, then a git-derived root.
18
21
  */
19
22
  export function findCoordRoot(start = process.cwd()) {
20
- // HARNERY_COORD_ROOT_OVERRIDE: explicit pin matched by agent-coord and the
21
- // bash side. Lets the sandboxed coord-test suite run against a temp
22
- // directory rather than the real monorepo root. agent-hook's session.start
23
- // handler may be the FIRST thing to create .harnery/ in a fresh sandbox,
24
- // so the override is honored unconditionally (we don't require .harnery/
25
- // to pre-exist).
26
- const override = coordEnv("COORD_ROOT_OVERRIDE");
27
- if (override)
28
- return override;
29
- // Claude Code exports CLAUDE_PROJECT_DIR to every hook process; other
30
- // harnesses don't set it, so this is inert outside claude-code hooks.
31
- const projectDir = process.env.CLAUDE_PROJECT_DIR;
32
- if (projectDir) {
33
- const fromProject = walkUp(projectDir);
34
- if (fromProject)
35
- return fromProject;
36
- }
37
- return walkUp(start);
38
- }
39
- function walkUp(start) {
40
- let dir = resolve(start);
41
- while (true) {
42
- if (existsSync(join(dir, ".harnery")))
43
- return dir;
44
- const parent = dirname(dir);
45
- if (parent === dir)
46
- return null;
47
- dir = parent;
48
- }
23
+ return resolveCoordRoot(start);
49
24
  }
@@ -17,7 +17,7 @@ import { join } from "node:path";
17
17
  */
18
18
  export function resolveIntent(opts) {
19
19
  const stampPath = join(opts.coordRoot, ".harnery", `.last-intent.${opts.instanceId}`);
20
- // 1. Fresh from the command itself (most reliable, cross-harness).
20
+ // 1. Fresh from the command itself (most reliable, cross-adapter).
21
21
  if (opts.commandIntentComment) {
22
22
  const cleaned = clamp(opts.commandIntentComment);
23
23
  if (cleaned) {
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Precedence:
5
5
  *
6
- * 1. `HARNERY_AGENT_COORD_OWNER` env var. Set by harness adapters when they know
6
+ * 1. `HARNERY_AGENT_COORD_OWNER` env var. Set by adapter adapters when they know
7
7
  * the owner identity at spawn time (Codex's apply_patch tool path uses
8
8
  * this).
9
9
  * 2. Hook payload fields, in order: `agent_id` → `subagent_id` →
@@ -1 +1 @@
1
- {"version":3,"file":"owner.d.ts","sourceRoot":"","sources":["../../../../src/core/hooks/resolve/owner.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE;IACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,KAAK,GAAG,SAAS,GAAG,aAAa,GAAG,iBAAiB,CAAA;CAAE,GAAG,IAAI,CA+ChG;AA2BD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ7E;AAED,wEAAwE;AACxE,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUxF;AAED,2DAA2D;AAC3D,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAgBnF"}
1
+ {"version":3,"file":"owner.d.ts","sourceRoot":"","sources":["../../../../src/core/hooks/resolve/owner.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE;IACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,KAAK,GAAG,SAAS,GAAG,aAAa,GAAG,iBAAiB,CAAA;CAAE,GAAG,IAAI,CAoDhG;AA2BD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ7E;AAED,wEAAwE;AACxE,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUxF;AAED,2DAA2D;AAC3D,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAgBnF"}
@@ -2,12 +2,13 @@ import { spawnSync } from "node:child_process";
2
2
  import { existsSync, readdirSync, readFileSync } from "node:fs";
3
3
  import { join } from "node:path";
4
4
  import { coordEnv } from "../../../lib/env.js";
5
+ import { checkPidToken } from "../../agents/state/proc-start.js";
5
6
  /**
6
7
  * Resolve the canonical `instance_id` for the current hook invocation.
7
8
  *
8
9
  * Precedence:
9
10
  *
10
- * 1. `HARNERY_AGENT_COORD_OWNER` env var. Set by harness adapters when they know
11
+ * 1. `HARNERY_AGENT_COORD_OWNER` env var. Set by adapter adapters when they know
11
12
  * the owner identity at spawn time (Codex's apply_patch tool path uses
12
13
  * this).
13
14
  * 2. Hook payload fields, in order: `agent_id` → `subagent_id` →
@@ -34,7 +35,7 @@ export function resolveOwner(opts) {
34
35
  }
35
36
  }
36
37
  // Pid-map ancestor walk. Start at own pid (the bash wrapper's bun child),
37
- // walk up through ppids. The pid-map is stamped keyed by the harness PID, so
38
+ // walk up through ppids. The pid-map is stamped keyed by the adapter PID, so
38
39
  // we'll usually find it 1-3 hops up.
39
40
  const pidmap = join(opts.coordRoot, ".harnery", "pid-map");
40
41
  if (existsSync(pidmap)) {
@@ -45,9 +46,14 @@ export function resolveOwner(opts) {
45
46
  if (existsSync(file)) {
46
47
  try {
47
48
  const row = readFileSync(file, "utf8").trim();
48
- // Row shape: "<instance_id>" or "<instance_id>\t<platform>"
49
- const owner = row.split("\t")[0];
50
- if (owner && owner.length > 0) {
49
+ // Row shape: "<instance_id>", "<instance_id>\t<platform>", or
50
+ // "<instance_id>\t<platform>\t<start_token>".
51
+ const [owner, , startToken] = row.split("\t");
52
+ // A row whose start token disagrees with the process now holding this
53
+ // pid is about a different, earlier process. Believing it hands this
54
+ // session another agent's identity, so walk past it.
55
+ const recycled = checkPidToken(pid, startToken || undefined) === "mismatch";
56
+ if (owner && owner.length > 0 && !recycled) {
51
57
  return {
52
58
  instance_id: owner,
53
59
  source: hops === 0 ? "pidmap-self" : "pidmap-ancestor",
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Agent scratchpad: per-agent markdown journal at `.harnery/scratch/<instance_id>.md`.
2
+ * Agent journal: per-agent markdown journal at `.harnery/journal/<instance_id>.md`.
3
3
  *
4
4
  * Rules:
5
5
  * - Single writer (the agent itself, via this lib). Peers read but never write.
@@ -7,59 +7,59 @@
7
7
  * - Strict entry-header format: `## <Chicago datetime> · <category>`. The
8
8
  * linter enforces this so format violations are impossible at the write path.
9
9
  * - 50 KB hard cap; auto-prunes oldest entries when exceeded.
10
- * - SessionEnd hook archives to `.harnery/scratch/archived/<instance_id>-<ts>.md`;
10
+ * - SessionEnd hook archives to `.harnery/journal/archived/<instance_id>-<ts>.md`;
11
11
  * SessionStart janitor deletes archives older than 7 days + surfaces the
12
12
  * most-recent archive as a recovery cue.
13
13
  */
14
- export declare const SCRATCH_CATEGORIES: readonly ["note", "plan", "decision", "blocker", "question", "done", "handoff"];
15
- export type ScratchCategory = (typeof SCRATCH_CATEGORIES)[number];
16
- export declare const MAX_SCRATCH_BYTES: number;
17
- export declare const WARN_SCRATCH_BYTES: number;
14
+ export declare const JOURNAL_CATEGORIES: readonly ["note", "plan", "decision", "blocker", "question", "done", "handoff"];
15
+ export type JournalCategory = (typeof JOURNAL_CATEGORIES)[number];
16
+ export declare const MAX_JOURNAL_BYTES: number;
17
+ export declare const WARN_JOURNAL_BYTES: number;
18
18
  export declare const ARCHIVE_RETENTION_DAYS = 7;
19
19
  /** Entry-header regex: `## 2026-05-15 1:48 AM CDT · note` */
20
20
  export declare const ENTRY_HEADER_RE: RegExp;
21
- /** First line of every scratchpad file: this prefix followed by the agent name. */
22
- export declare const SCRATCHPAD_HEADER_PREFIX = "# Scratchpad: agent-";
23
- export interface ScratchEntry {
21
+ /** First line of every journal file: this prefix followed by the agent name. */
22
+ export declare const JOURNAL_HEADER_PREFIX = "# Journal: agent-";
23
+ export interface JournalEntry {
24
24
  ts_iso: string;
25
25
  ts_display: string;
26
- category: ScratchCategory;
26
+ category: JournalCategory;
27
27
  body: string;
28
28
  }
29
- export interface ScratchHeader {
29
+ export interface JournalHeader {
30
30
  name: string;
31
31
  session_id: string;
32
32
  machine: string;
33
33
  started: string;
34
34
  last_updated: string;
35
35
  }
36
- export interface ScratchDoc {
36
+ export interface JournalDoc {
37
37
  path: string;
38
- header: ScratchHeader;
39
- entries: ScratchEntry[];
38
+ header: JournalHeader;
39
+ entries: JournalEntry[];
40
40
  bytes: number;
41
41
  }
42
- export declare function scratchDir(): string;
42
+ export declare function journalDir(): string;
43
43
  export declare function archiveDir(): string;
44
- export declare function scratchPath(instanceId: string): string;
44
+ export declare function journalPath(instanceId: string): string;
45
45
  /** Format `Date` as `2026-05-15 1:48 AM CDT`, what we write into the file. */
46
46
  export declare function formatChicago(d?: Date): string;
47
- /** Parse a scratchpad file (or empty content) into a structured doc. */
48
- export declare function parseScratch(path: string, content: string): ScratchDoc;
47
+ /** Parse a journal file (or empty content) into a structured doc. */
48
+ export declare function parseJournal(path: string, content: string): JournalDoc;
49
49
  /** Serialize a parsed doc back to markdown. */
50
- export declare function serializeScratch(doc: ScratchDoc): string;
50
+ export declare function serializeJournal(doc: JournalDoc): string;
51
51
  export interface LintIssue {
52
52
  line: number;
53
53
  message: string;
54
54
  }
55
- export declare function lintScratch(content: string, byteCap?: number): LintIssue[];
56
- export declare function appendEntry(instanceId: string, category: ScratchCategory, body: string): ScratchDoc;
55
+ export declare function lintJournal(content: string, byteCap?: number): LintIssue[];
56
+ export declare function appendEntry(instanceId: string, category: JournalCategory, body: string): JournalDoc;
57
57
  /** Move `<owner>.md` → `archived/<owner>-<ts>.md`. No-op if missing. Returns archive path (or null). */
58
- export declare function archiveScratch(instanceId: string): string | null;
58
+ export declare function archiveJournal(instanceId: string): string | null;
59
59
  /** Delete archives older than `days`. Returns number deleted. */
60
60
  export declare function pruneArchives(days?: number): number;
61
- /** Sweep `.harnery/scratch/<owner>.md` files whose corresponding heartbeat is gone. */
62
- export declare function sweepOrphanScratchpads(): string[];
61
+ /** Sweep `.harnery/journal/<owner>.md` files whose corresponding heartbeat is gone. */
62
+ export declare function sweepOrphanJournals(): string[];
63
63
  /** List archive files sorted by mtime descending. */
64
64
  export declare function listArchives(): {
65
65
  path: string;
@@ -68,7 +68,7 @@ export declare function listArchives(): {
68
68
  bytes: number;
69
69
  }[];
70
70
  export declare function currentOwnerOrThrow(): string;
71
- export declare function loadScratch(instanceId: string): ScratchDoc | null;
71
+ export declare function loadJournal(instanceId: string): JournalDoc | null;
72
72
  /** Resolve an agent name → instance_id by walking active heartbeats (case-insensitive). */
73
73
  export declare function resolveOwnerByName(name: string): string | null;
74
74
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/scratch/index.ts"],"names":[],"mappings":"AAoBA;;;;;;;;;;;;GAYG;AAEH,eAAO,MAAM,kBAAkB,iFAQrB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAElE,eAAO,MAAM,iBAAiB,QAAY,CAAC;AAC3C,eAAO,MAAM,kBAAkB,QAAY,CAAC;AAC5C,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC,6DAA6D;AAC7D,eAAO,MAAM,eAAe,QACyF,CAAC;AAEtH,mFAAmF;AACnF,eAAO,MAAM,wBAAwB,yBAAyB,CAAC;AAE/D,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,eAAe,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACf;AAID,wBAAgB,UAAU,IAAI,MAAM,CAMnC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAInC;AAED,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAGtD;AAeD,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,CAAC,GAAE,IAAiB,GAAG,MAAM,CAW1D;AAID,wEAAwE;AACxE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,CAwEtE;AAED,+CAA+C;AAC/C,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAkBxD;AAmBD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,SAAoB,GAAG,SAAS,EAAE,CA2DrF;AAID,wBAAgB,WAAW,CACzB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,eAAe,EACzB,IAAI,EAAE,MAAM,GACX,UAAU,CAgEZ;AAID,wGAAwG;AACxG,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQhE;AAED,iEAAiE;AACjE,wBAAgB,aAAa,CAAC,IAAI,SAAyB,GAAG,MAAM,CAkBnE;AAED,uFAAuF;AACvF,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CAajD;AAED,qDAAqD;AACrD,wBAAgB,YAAY,IAAI;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf,EAAE,CAWF;AAID,wBAAgB,mBAAmB,IAAI,MAAM,CAM5C;AAED,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAIjE;AAED,2FAA2F;AAC3F,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAoB9D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/journal/index.ts"],"names":[],"mappings":"AAoBA;;;;;;;;;;;;GAYG;AAEH,eAAO,MAAM,kBAAkB,iFAQrB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAElE,eAAO,MAAM,iBAAiB,QAAY,CAAC;AAC3C,eAAO,MAAM,kBAAkB,QAAY,CAAC;AAC5C,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC,6DAA6D;AAC7D,eAAO,MAAM,eAAe,QACyF,CAAC;AAEtH,gFAAgF;AAChF,eAAO,MAAM,qBAAqB,sBAAsB,CAAC;AAEzD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,eAAe,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACf;AAID,wBAAgB,UAAU,IAAI,MAAM,CAMnC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAInC;AAED,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAGtD;AAeD,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,CAAC,GAAE,IAAiB,GAAG,MAAM,CAW1D;AAID,qEAAqE;AACrE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,CAwEtE;AAED,+CAA+C;AAC/C,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAkBxD;AAmBD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,SAAoB,GAAG,SAAS,EAAE,CA2DrF;AAID,wBAAgB,WAAW,CACzB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,eAAe,EACzB,IAAI,EAAE,MAAM,GACX,UAAU,CAgEZ;AAID,wGAAwG;AACxG,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQhE;AAED,iEAAiE;AACjE,wBAAgB,aAAa,CAAC,IAAI,SAAyB,GAAG,MAAM,CAkBnE;AAED,uFAAuF;AACvF,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAa9C;AAED,qDAAqD;AACrD,wBAAgB,YAAY,IAAI;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf,EAAE,CAWF;AAID,wBAAgB,mBAAmB,IAAI,MAAM,CAM5C;AAED,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAIjE;AAED,2FAA2F;AAC3F,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAoB9D"}
@@ -3,7 +3,7 @@ import { dirname, resolve } from "node:path";
3
3
  import { resolveMachineLabel } from "../../lib/machine.js";
4
4
  import { assertSafeInstanceId, monorepoRoot, readHeartbeat, resolveContainedFile, resolveOwner, } from "../agents/index.js";
5
5
  /**
6
- * Agent scratchpad: per-agent markdown journal at `.harnery/scratch/<instance_id>.md`.
6
+ * Agent journal: per-agent markdown journal at `.harnery/journal/<instance_id>.md`.
7
7
  *
8
8
  * Rules:
9
9
  * - Single writer (the agent itself, via this lib). Peers read but never write.
@@ -11,11 +11,11 @@ import { assertSafeInstanceId, monorepoRoot, readHeartbeat, resolveContainedFile
11
11
  * - Strict entry-header format: `## <Chicago datetime> · <category>`. The
12
12
  * linter enforces this so format violations are impossible at the write path.
13
13
  * - 50 KB hard cap; auto-prunes oldest entries when exceeded.
14
- * - SessionEnd hook archives to `.harnery/scratch/archived/<instance_id>-<ts>.md`;
14
+ * - SessionEnd hook archives to `.harnery/journal/archived/<instance_id>-<ts>.md`;
15
15
  * SessionStart janitor deletes archives older than 7 days + surfaces the
16
16
  * most-recent archive as a recovery cue.
17
17
  */
18
- export const SCRATCH_CATEGORIES = [
18
+ export const JOURNAL_CATEGORIES = [
19
19
  "note",
20
20
  "plan",
21
21
  "decision",
@@ -24,30 +24,30 @@ export const SCRATCH_CATEGORIES = [
24
24
  "done",
25
25
  "handoff",
26
26
  ];
27
- export const MAX_SCRATCH_BYTES = 50 * 1024;
28
- export const WARN_SCRATCH_BYTES = 40 * 1024;
27
+ export const MAX_JOURNAL_BYTES = 50 * 1024;
28
+ export const WARN_JOURNAL_BYTES = 40 * 1024;
29
29
  export const ARCHIVE_RETENTION_DAYS = 7;
30
30
  /** Entry-header regex: `## 2026-05-15 1:48 AM CDT · note` */
31
31
  export const ENTRY_HEADER_RE = /^## (\d{4}-\d{2}-\d{2}) (\d{1,2}):(\d{2}) (AM|PM) (CDT|CST) · (note|plan|decision|blocker|question|done|handoff)$/;
32
- /** First line of every scratchpad file: this prefix followed by the agent name. */
33
- export const SCRATCHPAD_HEADER_PREFIX = "# Scratchpad: agent-";
32
+ /** First line of every journal file: this prefix followed by the agent name. */
33
+ export const JOURNAL_HEADER_PREFIX = "# Journal: agent-";
34
34
  // ─── Paths ────────────────────────────────────────────────────────────────
35
- export function scratchDir() {
35
+ export function journalDir() {
36
36
  const root = monorepoRoot();
37
37
  if (!root)
38
38
  throw new Error("Not in a coord-aware repo (coord_root() returned null).");
39
- const dir = resolve(root, ".harnery", "scratch");
39
+ const dir = resolve(root, ".harnery", "journal");
40
40
  mkdirSync(dir, { recursive: true });
41
41
  return dir;
42
42
  }
43
43
  export function archiveDir() {
44
- const dir = resolve(scratchDir(), "archived");
44
+ const dir = resolve(journalDir(), "archived");
45
45
  mkdirSync(dir, { recursive: true });
46
46
  return dir;
47
47
  }
48
- export function scratchPath(instanceId) {
48
+ export function journalPath(instanceId) {
49
49
  assertSafeInstanceId(instanceId);
50
- return resolveContainedFile(scratchDir(), `${instanceId}.md`);
50
+ return resolveContainedFile(journalDir(), `${instanceId}.md`);
51
51
  }
52
52
  // ─── Chicago time formatting ──────────────────────────────────────────────
53
53
  const CHICAGO_FORMATTER = new Intl.DateTimeFormat("en-US", {
@@ -74,8 +74,8 @@ export function formatChicago(d = new Date()) {
74
74
  return `${year}-${month}-${day} ${hour}:${minute} ${dayPeriod} ${tz}`;
75
75
  }
76
76
  // ─── Parse / serialize ────────────────────────────────────────────────────
77
- /** Parse a scratchpad file (or empty content) into a structured doc. */
78
- export function parseScratch(path, content) {
77
+ /** Parse a journal file (or empty content) into a structured doc. */
78
+ export function parseJournal(path, content) {
79
79
  const lines = content.split("\n");
80
80
  const header = {
81
81
  name: "unknown",
@@ -87,8 +87,8 @@ export function parseScratch(path, content) {
87
87
  const entries = [];
88
88
  let i = 0;
89
89
  // ── header ──
90
- if (lines[i]?.startsWith(SCRATCHPAD_HEADER_PREFIX)) {
91
- header.name = lines[i].replace(SCRATCHPAD_HEADER_PREFIX, "").trim();
90
+ if (lines[i]?.startsWith(JOURNAL_HEADER_PREFIX)) {
91
+ header.name = lines[i].replace(JOURNAL_HEADER_PREFIX, "").trim();
92
92
  i++;
93
93
  }
94
94
  for (; i < lines.length; i++) {
@@ -146,9 +146,9 @@ export function parseScratch(path, content) {
146
146
  return { path, header, entries, bytes: Buffer.byteLength(content, "utf8") };
147
147
  }
148
148
  /** Serialize a parsed doc back to markdown. */
149
- export function serializeScratch(doc) {
149
+ export function serializeJournal(doc) {
150
150
  const lines = [];
151
- lines.push(`${SCRATCHPAD_HEADER_PREFIX}${doc.header.name}`);
151
+ lines.push(`${JOURNAL_HEADER_PREFIX}${doc.header.name}`);
152
152
  if (doc.header.session_id)
153
153
  lines.push(`session_id: ${doc.header.session_id}`);
154
154
  if (doc.header.machine)
@@ -179,12 +179,12 @@ function chicagoToIso(date, hourStr, minute, period, tz) {
179
179
  const hh = String(hour).padStart(2, "0");
180
180
  return `${date}T${hh}:${minute}:00${offset}`;
181
181
  }
182
- export function lintScratch(content, byteCap = MAX_SCRATCH_BYTES) {
182
+ export function lintJournal(content, byteCap = MAX_JOURNAL_BYTES) {
183
183
  const issues = [];
184
184
  const lines = content.split("\n");
185
185
  // Frontmatter checks
186
- if (!lines[0]?.startsWith(SCRATCHPAD_HEADER_PREFIX)) {
187
- issues.push({ line: 1, message: `missing '${SCRATCHPAD_HEADER_PREFIX}<name>' header` });
186
+ if (!lines[0]?.startsWith(JOURNAL_HEADER_PREFIX)) {
187
+ issues.push({ line: 1, message: `missing '${JOURNAL_HEADER_PREFIX}<name>' header` });
188
188
  }
189
189
  for (const required of ["session_id:", "machine:", "started:"]) {
190
190
  if (!lines.slice(0, 10).some((l) => l.startsWith(required))) {
@@ -239,14 +239,14 @@ export function lintScratch(content, byteCap = MAX_SCRATCH_BYTES) {
239
239
  // ─── Append + prune ───────────────────────────────────────────────────────
240
240
  export function appendEntry(instanceId, category, body) {
241
241
  const hb = readHeartbeat(instanceId);
242
- const path = scratchPath(instanceId);
242
+ const path = journalPath(instanceId);
243
243
  let doc;
244
244
  if (existsSync(path)) {
245
- doc = parseScratch(path, readFileSync(path, "utf8"));
245
+ doc = parseJournal(path, readFileSync(path, "utf8"));
246
246
  }
247
247
  else {
248
248
  // Seed `started` from the heartbeat's session start so cross-agent writes
249
- // (`harn agents ping`) don't stamp the peer's scratchpad with our wall-clock.
249
+ // (`harn agents ping`) don't stamp the peer's journal with our wall-clock.
250
250
  const startedSeed = hb?.started_at ? formatChicago(new Date(hb.started_at)) : formatChicago();
251
251
  doc = {
252
252
  path,
@@ -274,22 +274,22 @@ export function appendEntry(instanceId, category, body) {
274
274
  doc.header.name = hb?.name ?? doc.header.name;
275
275
  }
276
276
  // Prune from the tail until under cap.
277
- let serialized = serializeScratch(doc);
277
+ let serialized = serializeJournal(doc);
278
278
  let pruned = 0;
279
- while (Buffer.byteLength(serialized, "utf8") > MAX_SCRATCH_BYTES && doc.entries.length > 1) {
279
+ while (Buffer.byteLength(serialized, "utf8") > MAX_JOURNAL_BYTES && doc.entries.length > 1) {
280
280
  doc.entries.pop();
281
281
  pruned++;
282
- serialized = serializeScratch(doc);
282
+ serialized = serializeJournal(doc);
283
283
  }
284
284
  if (pruned > 0) {
285
285
  const pruneEntry = {
286
286
  ts_iso: new Date().toISOString(),
287
287
  ts_display: formatChicago(),
288
288
  category: "note",
289
- body: `(auto-pruned ${pruned} oldest entries to stay under ${MAX_SCRATCH_BYTES}-byte cap)`,
289
+ body: `(auto-pruned ${pruned} oldest entries to stay under ${MAX_JOURNAL_BYTES}-byte cap)`,
290
290
  };
291
291
  doc.entries.unshift(pruneEntry);
292
- serialized = serializeScratch(doc);
292
+ serialized = serializeJournal(doc);
293
293
  }
294
294
  doc.bytes = Buffer.byteLength(serialized, "utf8");
295
295
  // Atomic write
@@ -301,9 +301,9 @@ export function appendEntry(instanceId, category, body) {
301
301
  }
302
302
  // ─── Archive lifecycle ────────────────────────────────────────────────────
303
303
  /** Move `<owner>.md` → `archived/<owner>-<ts>.md`. No-op if missing. Returns archive path (or null). */
304
- export function archiveScratch(instanceId) {
304
+ export function archiveJournal(instanceId) {
305
305
  assertSafeInstanceId(instanceId);
306
- const src = scratchPath(instanceId);
306
+ const src = journalPath(instanceId);
307
307
  if (!existsSync(src))
308
308
  return null;
309
309
  const ts = new Date().toISOString().replace(/[:.]/g, "-");
@@ -333,9 +333,9 @@ export function pruneArchives(days = ARCHIVE_RETENTION_DAYS) {
333
333
  }
334
334
  return deleted;
335
335
  }
336
- /** Sweep `.harnery/scratch/<owner>.md` files whose corresponding heartbeat is gone. */
337
- export function sweepOrphanScratchpads() {
338
- const dir = scratchDir();
336
+ /** Sweep `.harnery/journal/<owner>.md` files whose corresponding heartbeat is gone. */
337
+ export function sweepOrphanJournals() {
338
+ const dir = journalDir();
339
339
  const archived = [];
340
340
  for (const f of readdirSync(dir)) {
341
341
  if (!f.endsWith(".md"))
@@ -343,7 +343,7 @@ export function sweepOrphanScratchpads() {
343
343
  const instanceId = f.replace(/\.md$/, "");
344
344
  const hb = readHeartbeat(instanceId);
345
345
  if (!hb) {
346
- const dest = archiveScratch(instanceId);
346
+ const dest = archiveJournal(instanceId);
347
347
  if (dest)
348
348
  archived.push(dest);
349
349
  }
@@ -372,11 +372,11 @@ export function currentOwnerOrThrow() {
372
372
  }
373
373
  return owner;
374
374
  }
375
- export function loadScratch(instanceId) {
376
- const path = scratchPath(instanceId);
375
+ export function loadJournal(instanceId) {
376
+ const path = journalPath(instanceId);
377
377
  if (!existsSync(path))
378
378
  return null;
379
- return parseScratch(path, readFileSync(path, "utf8"));
379
+ return parseJournal(path, readFileSync(path, "utf8"));
380
380
  }
381
381
  /** Resolve an agent name → instance_id by walking active heartbeats (case-insensitive). */
382
382
  export function resolveOwnerByName(name) {
@@ -8,7 +8,7 @@ export declare function normalizePolicy(input: PolicySpec, options?: {
8
8
  }): Readonly<NormalizedPolicy>;
9
9
  export declare function policyDigest(policy: NormalizedPolicy): string;
10
10
  export declare function evaluatePolicy(policy: Readonly<NormalizedPolicy>, rawRequest: PolicyRequest): PolicyEvaluation;
11
- /** Bound and normalize the receipt-safe subset before it reaches a journal or proof. */
11
+ /** Bound and normalize the receipt-safe subset before it reaches a transcript or proof. */
12
12
  export declare function summarizePolicyRequest(input: PolicyRequest): PolicyRequestSummary;
13
13
  export type { PolicyIsolation };
14
14
  //# sourceMappingURL=evaluate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../../src/core/policy/evaluate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,oBAAoB,EAEpB,UAAU,EAEX,MAAM,YAAY,CAAC;AAqBpB,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAEhB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;CAKhD;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,UAAU,EACjB,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GACjC,QAAQ,CAAC,gBAAgB,CAAC,CAwB5B;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAE7D;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAClC,UAAU,EAAE,aAAa,GACxB,gBAAgB,CA8FlB;AAED,wFAAwF;AACxF,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,aAAa,GAAG,oBAAoB,CA8BjF;AAyGD,YAAY,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../../src/core/policy/evaluate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,oBAAoB,EAEpB,UAAU,EAEX,MAAM,YAAY,CAAC;AAqBpB,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAEhB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;CAKhD;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,UAAU,EACjB,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GACjC,QAAQ,CAAC,gBAAgB,CAAC,CAwB5B;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAE7D;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAClC,UAAU,EAAE,aAAa,GACxB,gBAAgB,CA8FlB;AAED,2FAA2F;AAC3F,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,aAAa,GAAG,oBAAoB,CA8BjF;AAyGD,YAAY,EAAE,eAAe,EAAE,CAAC"}
@@ -11,7 +11,7 @@ const POLICY_FIELDS = new Set([
11
11
  "name",
12
12
  "max_cost_usd",
13
13
  "unknown_cost",
14
- "allowed_harnesses",
14
+ "allowed_adapters",
15
15
  "allowed_models",
16
16
  "allowed_paths",
17
17
  "network",
@@ -43,7 +43,7 @@ export function normalizePolicy(input, options = {}) {
43
43
  name: boundedString(input.name ?? "workflow policy", "policy name", MAX_NAME),
44
44
  max_cost_usd: optionalMoney(input.max_cost_usd, "max_cost_usd"),
45
45
  unknown_cost: enumValue(input.unknown_cost ?? "deny", ["ask", "deny"], "unknown_cost"),
46
- allowed_harnesses: optionalStringList(input.allowed_harnesses, "allowed_harnesses"),
46
+ allowed_adapters: optionalStringList(input.allowed_adapters, "allowed_adapters"),
47
47
  allowed_models: optionalStringList(input.allowed_models, "allowed_models"),
48
48
  allowed_paths: optionalPathList(input.allowed_paths, baseDir),
49
49
  network: enumValue(input.network ?? "deny", VERDICTS, "network"),
@@ -61,9 +61,9 @@ export function evaluatePolicy(policy, rawRequest) {
61
61
  const add = (code, verdict, reason) => {
62
62
  rules.push({ code, verdict, reason });
63
63
  };
64
- if (policy.allowed_harnesses && request.phase === "dispatch") {
65
- if (!request.harness || !policy.allowed_harnesses.includes(request.harness)) {
66
- add("harness_not_allowed", "deny", `harness ${JSON.stringify(request.harness ?? "unknown")} is not allowed`);
64
+ if (policy.allowed_adapters && request.phase === "dispatch") {
65
+ if (!request.adapter || !policy.allowed_adapters.includes(request.adapter)) {
66
+ add("adapter_not_allowed", "deny", `adapter ${JSON.stringify(request.adapter ?? "unknown")} is not allowed`);
67
67
  }
68
68
  }
69
69
  if (policy.allowed_models && request.phase === "dispatch") {
@@ -114,7 +114,7 @@ export function evaluatePolicy(policy, rawRequest) {
114
114
  rules,
115
115
  };
116
116
  }
117
- /** Bound and normalize the receipt-safe subset before it reaches a journal or proof. */
117
+ /** Bound and normalize the receipt-safe subset before it reaches a transcript or proof. */
118
118
  export function summarizePolicyRequest(input) {
119
119
  if (!isRecord(input))
120
120
  throw new Error("policy request must be an object");
@@ -125,7 +125,7 @@ export function summarizePolicyRequest(input) {
125
125
  phase,
126
126
  action: boundedString(input.action, "policy action", MAX_FIELD),
127
127
  path: optionalBounded(input.path, "policy path"),
128
- harness: optionalBounded(input.harness, "policy harness"),
128
+ adapter: optionalBounded(input.adapter, "policy adapter"),
129
129
  model: optionalBounded(input.model, "policy model"),
130
130
  effort: optionalBounded(input.effort, "policy effort"),
131
131
  max_attempts: optionalWholeNumber(input.max_attempts, "policy max_attempts", 1),
@@ -10,7 +10,7 @@ export interface PolicySpec {
10
10
  max_cost_usd?: number;
11
11
  /** Applied when a cost ceiling exists but the host cannot price a dispatch. */
12
12
  unknown_cost?: Exclude<PolicyVerdict, "allow">;
13
- allowed_harnesses?: readonly string[];
13
+ allowed_adapters?: readonly string[];
14
14
  allowed_models?: readonly string[];
15
15
  /** Absolute paths, or paths relative to the policy file. */
16
16
  allowed_paths?: readonly string[];
@@ -24,7 +24,7 @@ export interface NormalizedPolicy {
24
24
  name: string;
25
25
  max_cost_usd?: number;
26
26
  unknown_cost: Exclude<PolicyVerdict, "allow">;
27
- allowed_harnesses?: readonly string[];
27
+ allowed_adapters?: readonly string[];
28
28
  allowed_models?: readonly string[];
29
29
  allowed_paths?: readonly string[];
30
30
  network: PolicyVerdict;
@@ -35,7 +35,7 @@ export interface PolicyRequest {
35
35
  phase: PolicyPhase;
36
36
  action: string;
37
37
  path?: string;
38
- harness?: string;
38
+ adapter?: string;
39
39
  model?: string;
40
40
  effort?: string;
41
41
  max_attempts?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/policy/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/policy/types.ts"],"names":[],"mappings":"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"}