harnery 0.33.0 → 0.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (657) hide show
  1. package/dist/commander.d.ts.map +1 -1
  2. package/dist/commander.js +4 -0
  3. package/dist/commands/adapter.js +2 -2
  4. package/dist/commands/agents.d.ts +144 -1
  5. package/dist/commands/agents.d.ts.map +1 -1
  6. package/dist/commands/agents.js +1220 -588
  7. package/dist/commands/artifacts.d.ts.map +1 -1
  8. package/dist/commands/artifacts.js +7 -6
  9. package/dist/commands/backup.d.ts +1 -1
  10. package/dist/commands/backup.d.ts.map +1 -1
  11. package/dist/commands/backup.js +29 -16
  12. package/dist/commands/browse.d.ts.map +1 -1
  13. package/dist/commands/browse.js +234 -12
  14. package/dist/commands/checkpoint.d.ts.map +1 -1
  15. package/dist/commands/checkpoint.js +3 -2
  16. package/dist/commands/claude-desktop.d.ts +1 -1
  17. package/dist/commands/claude-desktop.d.ts.map +1 -1
  18. package/dist/commands/claude-desktop.js +3 -74
  19. package/dist/commands/context.js +1 -6
  20. package/dist/commands/decision.d.ts.map +1 -1
  21. package/dist/commands/decision.js +22 -38
  22. package/dist/commands/docs.d.ts.map +1 -1
  23. package/dist/commands/docs.js +91 -28
  24. package/dist/commands/doctor.js +10 -1
  25. package/dist/commands/events.d.ts +5 -0
  26. package/dist/commands/events.d.ts.map +1 -0
  27. package/dist/commands/events.js +189 -0
  28. package/dist/commands/governor.d.ts.map +1 -1
  29. package/dist/commands/governor.js +13 -4
  30. package/dist/commands/init.d.ts +9 -2
  31. package/dist/commands/init.d.ts.map +1 -1
  32. package/dist/commands/init.js +223 -51
  33. package/dist/commands/journal.d.ts.map +1 -1
  34. package/dist/commands/journal.js +4 -13
  35. package/dist/commands/ledger-v3.d.ts +5 -0
  36. package/dist/commands/ledger-v3.d.ts.map +1 -0
  37. package/dist/commands/ledger-v3.js +91 -0
  38. package/dist/commands/presence.d.ts.map +1 -1
  39. package/dist/commands/presence.js +11 -5
  40. package/dist/commands/sync.d.ts +1 -1
  41. package/dist/commands/sync.js +1 -1
  42. package/dist/commands/web.d.ts +6 -0
  43. package/dist/commands/web.d.ts.map +1 -1
  44. package/dist/commands/web.js +67 -7
  45. package/dist/commands/work.d.ts.map +1 -1
  46. package/dist/commands/work.js +22 -5
  47. package/dist/core/adapter.d.ts +5 -0
  48. package/dist/core/adapter.d.ts.map +1 -0
  49. package/dist/core/adapter.js +1 -0
  50. package/dist/core/adapters/attest.d.ts +5 -2
  51. package/dist/core/adapters/attest.d.ts.map +1 -1
  52. package/dist/core/adapters/attest.js +8 -3
  53. package/dist/core/adapters/profiles.d.ts +6 -6
  54. package/dist/core/adapters/profiles.d.ts.map +1 -1
  55. package/dist/core/adapters/profiles.js +4 -4
  56. package/dist/core/agents/canonical-emit.d.ts +17 -15
  57. package/dist/core/agents/canonical-emit.d.ts.map +1 -1
  58. package/dist/core/agents/canonical-emit.js +22 -22
  59. package/dist/core/agents/cli.js +207 -234
  60. package/dist/core/agents/codex-archive-v3.d.ts +14 -0
  61. package/dist/core/agents/codex-archive-v3.d.ts.map +1 -0
  62. package/dist/core/agents/codex-archive-v3.js +110 -0
  63. package/dist/core/agents/coord-client.d.ts +19 -81
  64. package/dist/core/agents/coord-client.d.ts.map +1 -1
  65. package/dist/core/agents/coord-client.js +65 -155
  66. package/dist/core/agents/finalization.d.ts +4 -1
  67. package/dist/core/agents/finalization.d.ts.map +1 -1
  68. package/dist/core/agents/finalization.js +89 -32
  69. package/dist/core/agents/index.d.ts +4 -5
  70. package/dist/core/agents/index.d.ts.map +1 -1
  71. package/dist/core/agents/index.js +4 -5
  72. package/dist/core/agents/live-authority-v3.d.ts +59 -0
  73. package/dist/core/agents/live-authority-v3.d.ts.map +1 -0
  74. package/dist/core/agents/live-authority-v3.js +233 -0
  75. package/dist/core/agents/live-lifecycle-v3.d.ts +20 -0
  76. package/dist/core/agents/live-lifecycle-v3.d.ts.map +1 -0
  77. package/dist/core/agents/live-lifecycle-v3.js +91 -0
  78. package/dist/core/agents/live-observation-v3.d.ts +25 -0
  79. package/dist/core/agents/live-observation-v3.d.ts.map +1 -0
  80. package/dist/core/agents/live-observation-v3.js +157 -0
  81. package/dist/core/agents/render/prompt-context.d.ts +4 -4
  82. package/dist/core/agents/render/prompt-context.d.ts.map +1 -1
  83. package/dist/core/agents/render/prompt-context.js +23 -58
  84. package/dist/core/agents/render/session-context.d.ts +1 -1
  85. package/dist/core/agents/render/session-context.d.ts.map +1 -1
  86. package/dist/core/agents/render/session-context.js +8 -32
  87. package/dist/core/agents/rules/claim-conflict.d.ts +3 -3
  88. package/dist/core/agents/rules/claim-conflict.d.ts.map +1 -1
  89. package/dist/core/agents/rules/claim-conflict.js +79 -127
  90. package/dist/core/agents/rules/commit-conflict.d.ts.map +1 -1
  91. package/dist/core/agents/rules/commit-conflict.js +3 -18
  92. package/dist/core/agents/rules/stop-hook.d.ts +9 -50
  93. package/dist/core/agents/rules/stop-hook.d.ts.map +1 -1
  94. package/dist/core/agents/rules/stop-hook.js +193 -236
  95. package/dist/core/agents/session-events.d.ts +5 -7
  96. package/dist/core/agents/session-events.d.ts.map +1 -1
  97. package/dist/core/agents/session-events.js +127 -95
  98. package/dist/core/agents/session-finalization-state-v3.d.ts +30 -0
  99. package/dist/core/agents/session-finalization-state-v3.d.ts.map +1 -0
  100. package/dist/core/agents/session-finalization-state-v3.js +40 -0
  101. package/dist/core/agents/session-finalizer-v3.d.ts +107 -0
  102. package/dist/core/agents/session-finalizer-v3.d.ts.map +1 -0
  103. package/dist/core/agents/session-finalizer-v3.js +734 -0
  104. package/dist/core/agents/session-name-display.d.ts +40 -0
  105. package/dist/core/agents/session-name-display.d.ts.map +1 -0
  106. package/dist/core/agents/session-name-display.js +119 -0
  107. package/dist/core/agents/state/activity-log.d.ts +3 -3
  108. package/dist/core/agents/state/activity-log.d.ts.map +1 -1
  109. package/dist/core/agents/state/activity-log.js +7 -16
  110. package/dist/core/agents/state/heartbeat-writer.d.ts +23 -55
  111. package/dist/core/agents/state/heartbeat-writer.d.ts.map +1 -1
  112. package/dist/core/agents/state/heartbeat-writer.js +56 -228
  113. package/dist/core/agents/state/live-coordination-view.d.ts +31 -0
  114. package/dist/core/agents/state/live-coordination-view.d.ts.map +1 -0
  115. package/dist/core/agents/state/live-coordination-view.js +209 -0
  116. package/dist/core/agents/state/session-state.d.ts +4 -3
  117. package/dist/core/agents/state/session-state.d.ts.map +1 -1
  118. package/dist/core/agents/state/session-state.js +18 -9
  119. package/dist/core/agents/state/stale-sweep.d.ts +1 -1
  120. package/dist/core/agents/state/stale-sweep.d.ts.map +1 -1
  121. package/dist/core/agents/state/stale-sweep.js +26 -15
  122. package/dist/core/artifacts/index.d.ts.map +1 -1
  123. package/dist/core/artifacts/index.js +5 -7
  124. package/dist/core/config.d.ts +33 -2
  125. package/dist/core/config.d.ts.map +1 -1
  126. package/dist/core/config.js +98 -2
  127. package/dist/core/context/index.d.ts +1 -4
  128. package/dist/core/context/index.d.ts.map +1 -1
  129. package/dist/core/context/index.js +9 -9
  130. package/dist/core/events/span-parent.d.ts +15 -0
  131. package/dist/core/events/span-parent.d.ts.map +1 -0
  132. package/dist/core/events/span-parent.js +34 -0
  133. package/dist/core/events/v3/advance.d.ts +14 -0
  134. package/dist/core/events/v3/advance.d.ts.map +1 -0
  135. package/dist/core/events/v3/advance.js +134 -0
  136. package/dist/core/events/v3/authority-outbox.d.ts +78 -0
  137. package/dist/core/events/v3/authority-outbox.d.ts.map +1 -0
  138. package/dist/core/events/v3/authority-outbox.js +399 -0
  139. package/dist/core/events/v3/base-builder.d.ts +20 -0
  140. package/dist/core/events/v3/base-builder.d.ts.map +1 -0
  141. package/dist/core/events/v3/base-builder.js +29 -0
  142. package/dist/core/events/v3/base-contract.d.ts +7576 -0
  143. package/dist/core/events/v3/base-contract.d.ts.map +1 -0
  144. package/dist/core/events/v3/base-contract.js +647 -0
  145. package/dist/core/events/v3/bootstrap.d.ts +34 -0
  146. package/dist/core/events/v3/bootstrap.d.ts.map +1 -0
  147. package/dist/core/events/v3/bootstrap.js +175 -0
  148. package/dist/core/events/v3/builder.d.ts +20 -0
  149. package/dist/core/events/v3/builder.d.ts.map +1 -0
  150. package/dist/core/events/v3/builder.js +28 -0
  151. package/dist/core/events/v3/canonical.d.ts +31 -0
  152. package/dist/core/events/v3/canonical.d.ts.map +1 -0
  153. package/dist/core/events/v3/canonical.js +100 -0
  154. package/dist/core/events/v3/capabilities.d.ts +31 -0
  155. package/dist/core/events/v3/capabilities.d.ts.map +1 -0
  156. package/dist/core/events/v3/capabilities.js +107 -0
  157. package/dist/core/events/v3/capability-drift.d.ts +22 -0
  158. package/dist/core/events/v3/capability-drift.d.ts.map +1 -0
  159. package/dist/core/events/v3/capability-drift.js +134 -0
  160. package/dist/core/events/v3/catalog.d.ts +38 -0
  161. package/dist/core/events/v3/catalog.d.ts.map +1 -0
  162. package/dist/core/events/v3/catalog.js +135 -0
  163. package/dist/core/events/v3/clock-order.d.ts +34 -0
  164. package/dist/core/events/v3/clock-order.d.ts.map +1 -0
  165. package/dist/core/events/v3/clock-order.js +35 -0
  166. package/dist/core/events/v3/contract.d.ts +171 -0
  167. package/dist/core/events/v3/contract.d.ts.map +1 -0
  168. package/dist/core/events/v3/contract.js +180 -0
  169. package/dist/core/events/v3/control.d.ts +111 -0
  170. package/dist/core/events/v3/control.d.ts.map +1 -0
  171. package/dist/core/events/v3/control.js +419 -0
  172. package/dist/core/events/v3/coordination-view.d.ts +69 -0
  173. package/dist/core/events/v3/coordination-view.d.ts.map +1 -0
  174. package/dist/core/events/v3/coordination-view.js +119 -0
  175. package/dist/core/events/v3/economics.d.ts +77 -0
  176. package/dist/core/events/v3/economics.d.ts.map +1 -0
  177. package/dist/core/events/v3/economics.js +274 -0
  178. package/dist/core/events/v3/finalization-view.d.ts +26 -0
  179. package/dist/core/events/v3/finalization-view.d.ts.map +1 -0
  180. package/dist/core/events/v3/finalization-view.js +37 -0
  181. package/dist/core/events/v3/fingerprint-keys.d.ts +25 -0
  182. package/dist/core/events/v3/fingerprint-keys.d.ts.map +1 -0
  183. package/dist/core/events/v3/fingerprint-keys.js +217 -0
  184. package/dist/core/events/v3/generated.d.ts +4 -0
  185. package/dist/core/events/v3/generated.d.ts.map +1 -0
  186. package/dist/core/events/v3/generated.js +47 -0
  187. package/dist/core/events/v3/ids.d.ts +9 -0
  188. package/dist/core/events/v3/ids.d.ts.map +1 -0
  189. package/dist/core/events/v3/ids.js +25 -0
  190. package/dist/core/events/v3/index.d.ts +35 -0
  191. package/dist/core/events/v3/index.d.ts.map +1 -0
  192. package/dist/core/events/v3/index.js +33 -0
  193. package/dist/core/events/v3/latency.d.ts +63 -0
  194. package/dist/core/events/v3/latency.d.ts.map +1 -0
  195. package/dist/core/events/v3/latency.js +412 -0
  196. package/dist/core/events/v3/live-feed.d.ts +45 -0
  197. package/dist/core/events/v3/live-feed.d.ts.map +1 -0
  198. package/dist/core/events/v3/live-feed.js +246 -0
  199. package/dist/core/events/v3/live-observation.d.ts +35 -0
  200. package/dist/core/events/v3/live-observation.d.ts.map +1 -0
  201. package/dist/core/events/v3/live-observation.js +1 -0
  202. package/dist/core/events/v3/live-routing.d.ts +57 -0
  203. package/dist/core/events/v3/live-routing.d.ts.map +1 -0
  204. package/dist/core/events/v3/live-routing.js +107 -0
  205. package/dist/core/events/v3/producers/command-recorder.d.ts +67 -0
  206. package/dist/core/events/v3/producers/command-recorder.d.ts.map +1 -0
  207. package/dist/core/events/v3/producers/command-recorder.js +477 -0
  208. package/dist/core/events/v3/producers/command.d.ts +50 -0
  209. package/dist/core/events/v3/producers/command.d.ts.map +1 -0
  210. package/dist/core/events/v3/producers/command.js +135 -0
  211. package/dist/core/events/v3/producers/coordination-recorder.d.ts +53 -0
  212. package/dist/core/events/v3/producers/coordination-recorder.d.ts.map +1 -0
  213. package/dist/core/events/v3/producers/coordination-recorder.js +376 -0
  214. package/dist/core/events/v3/producers/coordination.d.ts +90 -0
  215. package/dist/core/events/v3/producers/coordination.d.ts.map +1 -0
  216. package/dist/core/events/v3/producers/coordination.js +229 -0
  217. package/dist/core/events/v3/producers/hook-base.d.ts +54 -0
  218. package/dist/core/events/v3/producers/hook-base.d.ts.map +1 -0
  219. package/dist/core/events/v3/producers/hook-base.js +424 -0
  220. package/dist/core/events/v3/producers/hook.d.ts +29 -0
  221. package/dist/core/events/v3/producers/hook.d.ts.map +1 -0
  222. package/dist/core/events/v3/producers/hook.js +71 -0
  223. package/dist/core/events/v3/producers/intake.d.ts +65 -0
  224. package/dist/core/events/v3/producers/intake.d.ts.map +1 -0
  225. package/dist/core/events/v3/producers/intake.js +244 -0
  226. package/dist/core/events/v3/producers/recorder.d.ts +240 -0
  227. package/dist/core/events/v3/producers/recorder.d.ts.map +1 -0
  228. package/dist/core/events/v3/producers/recorder.js +2176 -0
  229. package/dist/core/events/v3/projection.d.ts +101 -0
  230. package/dist/core/events/v3/projection.d.ts.map +1 -0
  231. package/dist/core/events/v3/projection.js +479 -0
  232. package/dist/core/events/v3/reader.d.ts +75 -0
  233. package/dist/core/events/v3/reader.d.ts.map +1 -0
  234. package/dist/core/events/v3/reader.js +778 -0
  235. package/dist/core/events/v3/recovery-record.d.ts +47 -0
  236. package/dist/core/events/v3/recovery-record.d.ts.map +1 -0
  237. package/dist/core/events/v3/recovery-record.js +167 -0
  238. package/dist/core/events/v3/recovery.d.ts +22 -0
  239. package/dist/core/events/v3/recovery.d.ts.map +1 -0
  240. package/dist/core/events/v3/recovery.js +227 -0
  241. package/dist/core/events/v3/span-state.d.ts +52 -0
  242. package/dist/core/events/v3/span-state.d.ts.map +1 -0
  243. package/dist/core/events/v3/span-state.js +142 -0
  244. package/dist/core/events/v3/targets.d.ts +23 -0
  245. package/dist/core/events/v3/targets.d.ts.map +1 -0
  246. package/dist/core/events/v3/targets.js +134 -0
  247. package/dist/core/events/v3/turn-telemetry.d.ts +41 -0
  248. package/dist/core/events/v3/turn-telemetry.d.ts.map +1 -0
  249. package/dist/core/events/v3/turn-telemetry.js +168 -0
  250. package/dist/core/events/v3/validate.d.ts +9 -0
  251. package/dist/core/events/v3/validate.d.ts.map +1 -0
  252. package/dist/core/events/v3/validate.js +281 -0
  253. package/dist/core/events/v3/writer.d.ts +56 -0
  254. package/dist/core/events/v3/writer.d.ts.map +1 -0
  255. package/dist/core/events/v3/writer.js +335 -0
  256. package/dist/core/governor/index.d.ts +1 -1
  257. package/dist/core/governor/index.d.ts.map +1 -1
  258. package/dist/core/governor/index.js +1 -1
  259. package/dist/core/governor/plan-api.d.ts +2 -1
  260. package/dist/core/governor/plan-api.d.ts.map +1 -1
  261. package/dist/core/governor/plan-api.js +6 -3
  262. package/dist/core/governor/read.d.ts +1 -1
  263. package/dist/core/governor/read.d.ts.map +1 -1
  264. package/dist/core/governor/read.js +1 -1
  265. package/dist/core/governor/state.d.ts +9 -0
  266. package/dist/core/governor/state.d.ts.map +1 -1
  267. package/dist/core/governor/state.js +40 -3
  268. package/dist/core/guard/config.d.ts +5 -0
  269. package/dist/core/guard/config.d.ts.map +1 -0
  270. package/dist/core/guard/config.js +157 -0
  271. package/dist/core/guard/coordinator.d.ts +14 -0
  272. package/dist/core/guard/coordinator.d.ts.map +1 -0
  273. package/dist/core/guard/coordinator.js +173 -0
  274. package/dist/core/guard/evaluator.d.ts +4 -0
  275. package/dist/core/guard/evaluator.d.ts.map +1 -0
  276. package/dist/core/guard/evaluator.js +242 -0
  277. package/dist/core/guard/evidence-v3.d.ts +15 -0
  278. package/dist/core/guard/evidence-v3.d.ts.map +1 -0
  279. package/dist/core/guard/evidence-v3.js +171 -0
  280. package/dist/core/guard/index.d.ts +10 -0
  281. package/dist/core/guard/index.d.ts.map +1 -0
  282. package/dist/core/guard/index.js +6 -0
  283. package/dist/core/guard/live-source-v3.d.ts +40 -0
  284. package/dist/core/guard/live-source-v3.d.ts.map +1 -0
  285. package/dist/core/guard/live-source-v3.js +128 -0
  286. package/dist/core/guard/storage.d.ts +27 -0
  287. package/dist/core/guard/storage.d.ts.map +1 -0
  288. package/dist/core/guard/storage.js +140 -0
  289. package/dist/core/guard/types.d.ts +119 -0
  290. package/dist/core/guard/types.d.ts.map +1 -0
  291. package/dist/core/guard/types.js +1 -0
  292. package/dist/core/hooks/adapter/detect.d.ts +18 -1
  293. package/dist/core/hooks/adapter/detect.d.ts.map +1 -1
  294. package/dist/core/hooks/adapter/detect.js +29 -0
  295. package/dist/core/hooks/adapter/events.d.ts +7 -4
  296. package/dist/core/hooks/adapter/events.d.ts.map +1 -1
  297. package/dist/core/hooks/adapter/events.js +12 -4
  298. package/dist/core/hooks/adapter/output.d.ts +2 -2
  299. package/dist/core/hooks/adapter/output.d.ts.map +1 -1
  300. package/dist/core/hooks/adapter/parse.d.ts +7 -4
  301. package/dist/core/hooks/adapter/parse.d.ts.map +1 -1
  302. package/dist/core/hooks/adapter/parse.js +63 -25
  303. package/dist/core/hooks/adapter/wiring.d.ts +30 -4
  304. package/dist/core/hooks/adapter/wiring.d.ts.map +1 -1
  305. package/dist/core/hooks/adapter/wiring.js +89 -11
  306. package/dist/core/hooks/cli.d.ts +1 -1
  307. package/dist/core/hooks/cli.js +305 -444
  308. package/dist/core/hooks/effects/image-capture.d.ts +20 -34
  309. package/dist/core/hooks/effects/image-capture.d.ts.map +1 -1
  310. package/dist/core/hooks/effects/image-capture.js +212 -221
  311. package/dist/core/hooks/effects/index.d.ts +1 -9
  312. package/dist/core/hooks/effects/index.d.ts.map +1 -1
  313. package/dist/core/hooks/effects/index.js +1 -24
  314. package/dist/core/hooks/events/input-hash.d.ts +7 -0
  315. package/dist/core/hooks/events/input-hash.d.ts.map +1 -0
  316. package/dist/core/hooks/events/input-hash.js +43 -0
  317. package/dist/core/hooks/index.d.ts +4 -3
  318. package/dist/core/hooks/index.d.ts.map +1 -1
  319. package/dist/core/hooks/index.js +2 -3
  320. package/dist/core/hooks/resolve/coord-root.d.ts +1 -1
  321. package/dist/core/hooks/resolve/coord-root.js +1 -1
  322. package/dist/core/hooks/resolve/owner.d.ts +16 -15
  323. package/dist/core/hooks/resolve/owner.d.ts.map +1 -1
  324. package/dist/core/hooks/resolve/owner.js +51 -42
  325. package/dist/core/hooks/resolve/transcript.d.ts +33 -3
  326. package/dist/core/hooks/resolve/transcript.d.ts.map +1 -1
  327. package/dist/core/hooks/resolve/transcript.js +155 -14
  328. package/dist/core/hooks/session-name-presence.d.ts +9 -10
  329. package/dist/core/hooks/session-name-presence.d.ts.map +1 -1
  330. package/dist/core/hooks/session-name-presence.js +15 -15
  331. package/dist/core/hooks/unsafe-cross-shell.d.ts +1 -1
  332. package/dist/core/hooks/unsafe-cross-shell.d.ts.map +1 -1
  333. package/dist/core/journal/index.d.ts +2 -2
  334. package/dist/core/journal/index.d.ts.map +1 -1
  335. package/dist/core/journal/index.js +9 -22
  336. package/dist/core/presence/blob.d.ts +4 -3
  337. package/dist/core/presence/blob.d.ts.map +1 -1
  338. package/dist/core/presence/blob.js +45 -44
  339. package/dist/core/presence/codec-digest.d.ts +29 -0
  340. package/dist/core/presence/codec-digest.d.ts.map +1 -0
  341. package/dist/core/presence/codec-digest.js +170 -0
  342. package/dist/core/presence/relay-client.d.ts +1 -1
  343. package/dist/core/presence/relay-client.d.ts.map +1 -1
  344. package/dist/core/presence/relay-client.js +5 -5
  345. package/dist/core/work/index.d.ts +1 -1
  346. package/dist/core/work/index.d.ts.map +1 -1
  347. package/dist/core/work/index.js +1 -1
  348. package/dist/core/work/read.d.ts +1 -1
  349. package/dist/core/work/read.d.ts.map +1 -1
  350. package/dist/core/work/read.js +1 -1
  351. package/dist/core/work/runner.d.ts.map +1 -1
  352. package/dist/core/work/runner.js +6 -0
  353. package/dist/core/work/state.d.ts +9 -0
  354. package/dist/core/work/state.d.ts.map +1 -1
  355. package/dist/core/work/state.js +17 -3
  356. package/dist/core/workflow/engine.js +24 -25
  357. package/dist/core/workflow/live-session-v3.d.ts +19 -0
  358. package/dist/core/workflow/live-session-v3.d.ts.map +1 -0
  359. package/dist/core/workflow/live-session-v3.js +86 -0
  360. package/dist/core/workflow/scope-id.d.ts +3 -0
  361. package/dist/core/workflow/scope-id.d.ts.map +1 -0
  362. package/dist/core/workflow/scope-id.js +5 -0
  363. package/dist/core/workflow/workspaces/leases.d.ts +4 -0
  364. package/dist/core/workflow/workspaces/leases.d.ts.map +1 -1
  365. package/dist/core/workflow/workspaces/leases.js +53 -19
  366. package/dist/index.d.ts +1 -1
  367. package/dist/index.js +1 -1
  368. package/dist/lib/browser/client.d.ts +41 -0
  369. package/dist/lib/browser/client.d.ts.map +1 -1
  370. package/dist/lib/browser/client.js +203 -0
  371. package/dist/lib/browser/critique.d.ts +28 -2
  372. package/dist/lib/browser/critique.d.ts.map +1 -1
  373. package/dist/lib/browser/critique.js +74 -18
  374. package/dist/lib/browser/geometry.d.ts +1 -1
  375. package/dist/lib/browser/geometry.d.ts.map +1 -1
  376. package/dist/lib/browser/geometry.js +130 -6
  377. package/dist/lib/browser/index.d.ts +3 -0
  378. package/dist/lib/browser/index.d.ts.map +1 -1
  379. package/dist/lib/browser/index.js +3 -0
  380. package/dist/lib/browser/qa-plan.d.ts +174 -0
  381. package/dist/lib/browser/qa-plan.d.ts.map +1 -0
  382. package/dist/lib/browser/qa-plan.js +321 -0
  383. package/dist/lib/browser/qa-reuse.d.ts +99 -0
  384. package/dist/lib/browser/qa-reuse.d.ts.map +1 -0
  385. package/dist/lib/browser/qa-reuse.js +222 -0
  386. package/dist/lib/browser/qa-snapshot.d.ts +64 -0
  387. package/dist/lib/browser/qa-snapshot.d.ts.map +1 -0
  388. package/dist/lib/browser/qa-snapshot.js +171 -0
  389. package/dist/lib/browser/runts.d.ts.map +1 -1
  390. package/dist/lib/browser/runts.js +22 -1
  391. package/dist/lib/browser/tiling.d.ts +71 -0
  392. package/dist/lib/browser/tiling.d.ts.map +1 -0
  393. package/dist/lib/browser/tiling.js +118 -0
  394. package/dist/lib/claude-desktop.d.ts +0 -47
  395. package/dist/lib/claude-desktop.d.ts.map +1 -1
  396. package/dist/lib/claude-desktop.js +1 -169
  397. package/dist/lib/context/index.d.ts +0 -3
  398. package/dist/lib/context/index.d.ts.map +1 -1
  399. package/dist/lib/context/index.js +20 -42
  400. package/dist/lib/council/index.d.ts +2 -2
  401. package/dist/lib/council/index.d.ts.map +1 -1
  402. package/dist/lib/council/index.js +9 -20
  403. package/dist/lib/docs-frontmatter.d.ts +1 -6
  404. package/dist/lib/docs-frontmatter.d.ts.map +1 -1
  405. package/dist/lib/docs-frontmatter.js +12 -78
  406. package/dist/lib/docs-index.d.ts +9 -0
  407. package/dist/lib/docs-index.d.ts.map +1 -1
  408. package/dist/lib/docs-index.js +32 -3
  409. package/dist/lib/docs-lint.d.ts.map +1 -1
  410. package/dist/lib/docs-lint.js +14 -30
  411. package/dist/lib/docs-metadata-audit.d.ts +19 -0
  412. package/dist/lib/docs-metadata-audit.d.ts.map +1 -0
  413. package/dist/lib/docs-metadata-audit.js +132 -0
  414. package/dist/lib/docs-metadata-managed.d.ts +23 -0
  415. package/dist/lib/docs-metadata-managed.d.ts.map +1 -0
  416. package/dist/lib/docs-metadata-managed.js +78 -0
  417. package/dist/lib/docs-metadata-sync.d.ts +20 -0
  418. package/dist/lib/docs-metadata-sync.d.ts.map +1 -0
  419. package/dist/lib/docs-metadata-sync.js +222 -0
  420. package/dist/lib/docs-metadata-v2-schema.d.ts +273 -0
  421. package/dist/lib/docs-metadata-v2-schema.d.ts.map +1 -0
  422. package/dist/lib/docs-metadata-v2-schema.js +134 -0
  423. package/dist/lib/docs-metadata-v2.d.ts +21 -0
  424. package/dist/lib/docs-metadata-v2.d.ts.map +1 -0
  425. package/dist/lib/docs-metadata-v2.js +424 -0
  426. package/dist/lib/docs-new.d.ts +11 -0
  427. package/dist/lib/docs-new.d.ts.map +1 -0
  428. package/dist/lib/docs-new.js +52 -0
  429. package/dist/lib/docs-sweep.d.ts.map +1 -1
  430. package/dist/lib/docs-sweep.js +45 -29
  431. package/dist/lib/headless/index.d.ts +98 -0
  432. package/dist/lib/headless/index.d.ts.map +1 -0
  433. package/dist/lib/headless/index.js +211 -0
  434. package/dist/lib/identities/assume.d.ts +4 -4
  435. package/dist/lib/identities/assume.d.ts.map +1 -1
  436. package/dist/lib/identities/assume.js +52 -68
  437. package/dist/lib/instructions/apply.d.ts +5 -4
  438. package/dist/lib/instructions/apply.d.ts.map +1 -1
  439. package/dist/lib/instructions/apply.js +32 -20
  440. package/dist/lib/instructions/bundle.d.ts +1 -1
  441. package/dist/lib/instructions/bundle.d.ts.map +1 -1
  442. package/dist/lib/instructions/bundle.js +1 -1
  443. package/dist/lib/instructions/splice.d.ts +0 -1
  444. package/dist/lib/instructions/splice.d.ts.map +1 -1
  445. package/dist/lib/instructions/splice.js +22 -6
  446. package/dist/lib/instructions/templates.d.ts +7 -5
  447. package/dist/lib/instructions/templates.d.ts.map +1 -1
  448. package/dist/lib/instructions/templates.js +79 -9
  449. package/package.json +26 -5
  450. package/schemas/config.schema.json +120 -2
  451. package/schemas/docs-metadata-v2.schema.json +441 -0
  452. package/schemas/event-v3.schema.json +24472 -0
  453. package/src/commander.ts +4 -0
  454. package/src/commands/adapter.ts +2 -2
  455. package/src/commands/agents.ts +1512 -592
  456. package/src/commands/artifacts.ts +7 -6
  457. package/src/commands/backup.ts +29 -21
  458. package/src/commands/browse.ts +349 -8
  459. package/src/commands/checkpoint.ts +4 -3
  460. package/src/commands/claude-desktop.ts +2 -101
  461. package/src/commands/context.ts +1 -6
  462. package/src/commands/decision.ts +27 -44
  463. package/src/commands/docs.ts +100 -33
  464. package/src/commands/doctor.ts +14 -1
  465. package/src/commands/events.ts +256 -0
  466. package/src/commands/governor.ts +18 -4
  467. package/src/commands/init.ts +253 -57
  468. package/src/commands/instructions.ts +1 -1
  469. package/src/commands/journal.ts +4 -13
  470. package/src/commands/ledger-v3.ts +111 -0
  471. package/src/commands/presence.ts +11 -10
  472. package/src/commands/sync.ts +1 -1
  473. package/src/commands/web.ts +67 -8
  474. package/src/commands/work.ts +28 -5
  475. package/src/core/adapter.ts +5 -0
  476. package/src/core/adapters/attest.ts +8 -3
  477. package/src/core/adapters/profiles.ts +4 -6
  478. package/src/core/agents/canonical-emit.ts +34 -25
  479. package/src/core/agents/cli.ts +236 -262
  480. package/src/core/agents/codex-archive-v3.ts +138 -0
  481. package/src/core/agents/coord-client.ts +75 -188
  482. package/src/core/agents/finalization.ts +120 -38
  483. package/src/core/agents/index.ts +4 -5
  484. package/src/core/agents/live-authority-v3.ts +375 -0
  485. package/src/core/agents/live-lifecycle-v3.ts +140 -0
  486. package/src/core/agents/live-observation-v3.ts +216 -0
  487. package/src/core/agents/render/prompt-context.ts +29 -60
  488. package/src/core/agents/render/session-context.ts +10 -31
  489. package/src/core/agents/rules/claim-conflict.ts +85 -126
  490. package/src/core/agents/rules/commit-conflict.ts +3 -14
  491. package/src/core/agents/rules/stop-hook.ts +239 -293
  492. package/src/core/agents/session-events.ts +137 -104
  493. package/src/core/agents/session-finalization-state-v3.ts +90 -0
  494. package/src/core/agents/session-finalizer-v3.ts +953 -0
  495. package/src/core/agents/session-name-display.ts +149 -0
  496. package/src/core/agents/state/activity-log.ts +6 -14
  497. package/src/core/agents/state/heartbeat-writer.ts +82 -277
  498. package/src/core/agents/state/live-coordination-view.ts +290 -0
  499. package/src/core/agents/state/session-state.ts +24 -12
  500. package/src/core/agents/state/stale-sweep.ts +40 -17
  501. package/src/core/artifacts/index.ts +4 -5
  502. package/src/core/config.ts +148 -3
  503. package/src/core/context/index.ts +9 -17
  504. package/src/core/events/span-parent.ts +46 -0
  505. package/src/core/events/v3/advance.ts +168 -0
  506. package/src/core/events/v3/authority-outbox.ts +548 -0
  507. package/src/core/events/v3/base-builder.ts +60 -0
  508. package/src/core/events/v3/base-contract.ts +882 -0
  509. package/src/core/events/v3/bootstrap.ts +226 -0
  510. package/src/core/events/v3/builder.ts +59 -0
  511. package/src/core/events/v3/canonical.ts +153 -0
  512. package/src/core/events/v3/capabilities.ts +171 -0
  513. package/src/core/events/v3/capability-drift.ts +177 -0
  514. package/src/core/events/v3/catalog.ts +202 -0
  515. package/src/core/events/v3/clock-order.ts +41 -0
  516. package/src/core/events/v3/contract.ts +365 -0
  517. package/src/core/events/v3/control.ts +576 -0
  518. package/src/core/events/v3/coordination-view.ts +193 -0
  519. package/src/core/events/v3/economics.ts +384 -0
  520. package/src/core/events/v3/finalization-view.ts +67 -0
  521. package/src/core/events/v3/fingerprint-keys.ts +260 -0
  522. package/src/core/events/v3/generated.ts +48 -0
  523. package/src/core/events/v3/ids.ts +33 -0
  524. package/src/core/events/v3/index.ts +322 -0
  525. package/src/core/events/v3/latency.ts +551 -0
  526. package/src/core/events/v3/live-feed.ts +319 -0
  527. package/src/core/events/v3/live-observation.ts +39 -0
  528. package/src/core/events/v3/live-routing.ts +135 -0
  529. package/src/core/events/v3/producers/command-recorder.ts +631 -0
  530. package/src/core/events/v3/producers/command.ts +201 -0
  531. package/src/core/events/v3/producers/coordination-recorder.ts +538 -0
  532. package/src/core/events/v3/producers/coordination.ts +355 -0
  533. package/src/core/events/v3/producers/hook-base.ts +578 -0
  534. package/src/core/events/v3/producers/hook.ts +119 -0
  535. package/src/core/events/v3/producers/intake.ts +319 -0
  536. package/src/core/events/v3/producers/recorder.ts +2805 -0
  537. package/src/core/events/v3/projection.ts +653 -0
  538. package/src/core/events/v3/reader.ts +1127 -0
  539. package/src/core/events/v3/recovery-record.ts +244 -0
  540. package/src/core/events/v3/recovery.ts +271 -0
  541. package/src/core/events/v3/span-state.ts +187 -0
  542. package/src/core/events/v3/targets.ts +182 -0
  543. package/src/core/events/v3/turn-telemetry.ts +259 -0
  544. package/src/core/events/v3/validate.ts +361 -0
  545. package/src/core/events/v3/writer.ts +419 -0
  546. package/src/core/governor/index.ts +3 -0
  547. package/src/core/governor/plan-api.ts +10 -2
  548. package/src/core/governor/read.ts +3 -0
  549. package/src/core/governor/state.ts +52 -5
  550. package/src/core/guard/config.ts +206 -0
  551. package/src/core/guard/coordinator.ts +227 -0
  552. package/src/core/guard/evaluator.ts +343 -0
  553. package/src/core/guard/evidence-v3.ts +227 -0
  554. package/src/core/guard/index.ts +35 -0
  555. package/src/core/guard/live-source-v3.ts +204 -0
  556. package/src/core/guard/storage.ts +188 -0
  557. package/src/core/guard/types.ts +152 -0
  558. package/src/core/hooks/adapter/detect.ts +28 -1
  559. package/src/core/hooks/adapter/events.ts +14 -6
  560. package/src/core/hooks/adapter/output.ts +7 -2
  561. package/src/core/hooks/adapter/parse.ts +80 -38
  562. package/src/core/hooks/adapter/wiring.ts +119 -13
  563. package/src/core/hooks/cli.ts +351 -466
  564. package/src/core/hooks/effects/image-capture.ts +228 -238
  565. package/src/core/hooks/effects/index.ts +1 -36
  566. package/src/core/hooks/events/input-hash.ts +47 -0
  567. package/src/core/hooks/index.ts +4 -11
  568. package/src/core/hooks/resolve/coord-root.ts +1 -1
  569. package/src/core/hooks/resolve/owner.ts +52 -45
  570. package/src/core/hooks/resolve/transcript.ts +165 -14
  571. package/src/core/hooks/session-name-presence.ts +14 -15
  572. package/src/core/hooks/unsafe-cross-shell.ts +1 -1
  573. package/src/core/journal/index.ts +15 -22
  574. package/src/core/presence/blob.ts +48 -41
  575. package/src/core/presence/codec-digest.ts +215 -0
  576. package/src/core/presence/relay-client.ts +5 -5
  577. package/src/core/work/index.ts +3 -0
  578. package/src/core/work/read.ts +3 -0
  579. package/src/core/work/runner.ts +6 -0
  580. package/src/core/work/state.ts +27 -3
  581. package/src/core/workflow/engine.ts +24 -24
  582. package/src/core/workflow/live-session-v3.ts +126 -0
  583. package/src/core/workflow/scope-id.ts +6 -0
  584. package/src/core/workflow/workspaces/leases.ts +56 -19
  585. package/src/index.ts +1 -1
  586. package/src/lib/browser/client.ts +230 -0
  587. package/src/lib/browser/critique.ts +104 -27
  588. package/src/lib/browser/geometry.ts +143 -14
  589. package/src/lib/browser/index.ts +34 -0
  590. package/src/lib/browser/qa-plan.ts +501 -0
  591. package/src/lib/browser/qa-reuse.ts +306 -0
  592. package/src/lib/browser/qa-snapshot.ts +223 -0
  593. package/src/lib/browser/runts.ts +27 -2
  594. package/src/lib/browser/tiling.ts +164 -0
  595. package/src/lib/claude-desktop.ts +1 -232
  596. package/src/lib/context/index.ts +22 -46
  597. package/src/lib/council/index.ts +9 -21
  598. package/src/lib/docs-frontmatter.ts +8 -79
  599. package/src/lib/docs-index.ts +33 -3
  600. package/src/lib/docs-lint.ts +15 -29
  601. package/src/lib/docs-metadata-audit.ts +166 -0
  602. package/src/lib/docs-metadata-managed.ts +83 -0
  603. package/src/lib/docs-metadata-sync.ts +262 -0
  604. package/src/lib/docs-metadata-v2-schema.ts +138 -0
  605. package/src/lib/docs-metadata-v2.ts +646 -0
  606. package/src/lib/docs-new.ts +63 -0
  607. package/src/lib/docs-sweep.ts +42 -28
  608. package/src/lib/headless/index.ts +287 -0
  609. package/src/lib/identities/assume.ts +67 -86
  610. package/src/lib/instructions/apply.ts +33 -20
  611. package/src/lib/instructions/bundle.ts +2 -2
  612. package/src/lib/instructions/splice.ts +21 -7
  613. package/src/lib/instructions/templates.ts +85 -13
  614. package/dist/core/agents/cli-emit.d.ts +0 -27
  615. package/dist/core/agents/cli-emit.d.ts.map +0 -1
  616. package/dist/core/agents/cli-emit.js +0 -57
  617. package/dist/core/agents/codex-replay.d.ts +0 -29
  618. package/dist/core/agents/codex-replay.d.ts.map +0 -1
  619. package/dist/core/agents/codex-replay.js +0 -138
  620. package/dist/core/agents/events/consume.d.ts +0 -82
  621. package/dist/core/agents/events/consume.d.ts.map +0 -1
  622. package/dist/core/agents/events/consume.js +0 -195
  623. package/dist/core/agents/events/emit.d.ts +0 -42
  624. package/dist/core/agents/events/emit.d.ts.map +0 -1
  625. package/dist/core/agents/events/emit.js +0 -75
  626. package/dist/core/agents/events/ulid.d.ts +0 -11
  627. package/dist/core/agents/events/ulid.d.ts.map +0 -1
  628. package/dist/core/agents/events/ulid.js +0 -47
  629. package/dist/core/agents/state/heartbeat-projector.d.ts +0 -76
  630. package/dist/core/agents/state/heartbeat-projector.d.ts.map +0 -1
  631. package/dist/core/agents/state/heartbeat-projector.js +0 -581
  632. package/dist/core/hooks/events/emit.d.ts +0 -31
  633. package/dist/core/hooks/events/emit.d.ts.map +0 -1
  634. package/dist/core/hooks/events/emit.js +0 -93
  635. package/dist/core/hooks/events/rotate.d.ts +0 -43
  636. package/dist/core/hooks/events/rotate.d.ts.map +0 -1
  637. package/dist/core/hooks/events/rotate.js +0 -142
  638. package/dist/core/hooks/events/schema.d.ts +0 -341
  639. package/dist/core/hooks/events/schema.d.ts.map +0 -1
  640. package/dist/core/hooks/events/schema.js +0 -12
  641. package/dist/core/hooks/events/ulid.d.ts +0 -10
  642. package/dist/core/hooks/events/ulid.d.ts.map +0 -1
  643. package/dist/core/hooks/events/ulid.js +0 -47
  644. package/dist/lib/docs-frontmatter-migrate.d.ts +0 -33
  645. package/dist/lib/docs-frontmatter-migrate.d.ts.map +0 -1
  646. package/dist/lib/docs-frontmatter-migrate.js +0 -364
  647. package/src/core/agents/cli-emit.ts +0 -64
  648. package/src/core/agents/codex-replay.ts +0 -163
  649. package/src/core/agents/events/consume.ts +0 -254
  650. package/src/core/agents/events/emit.ts +0 -115
  651. package/src/core/agents/events/ulid.ts +0 -51
  652. package/src/core/agents/state/heartbeat-projector.ts +0 -645
  653. package/src/core/hooks/events/emit.ts +0 -125
  654. package/src/core/hooks/events/rotate.ts +0 -151
  655. package/src/core/hooks/events/schema.ts +0 -582
  656. package/src/core/hooks/events/ulid.ts +0 -51
  657. package/src/lib/docs-frontmatter-migrate.ts +0 -427
@@ -112,30 +112,25 @@ async function handleVerdict(root) {
112
112
  return 0;
113
113
  }
114
114
  async function handleProject(root, rest) {
115
- const { consumeSince, writeCursor } = await import("./events/consume.js");
116
- const { projectHeartbeats } = await import("./state/heartbeat-projector.js");
117
- const replayAll = rest.includes("--replay-all");
118
- const result = consumeSince(root, { replayAll });
119
- const project = projectHeartbeats(root, result.events);
115
+ const { resolveLiveEventLedgerRouteV3 } = await import("../events/v3/live-routing.js");
116
+ const route = resolveLiveEventLedgerRouteV3(root);
117
+ if (route.state === "blocked") {
118
+ process.stderr.write(`agent-coord project: V3 route is unsafe (${route.reason})\n`);
119
+ return 1;
120
+ }
121
+ const { readCoordinationViewV3 } = await import("../events/v3/coordination-view.js");
122
+ const view = readCoordinationViewV3(root);
120
123
  const report = {
121
- events_consumed: result.events.length,
122
- stream_bytes: result.streamBytes,
123
- owners_projected: project.written.length,
124
- owners: project.written,
125
- cursor: result.lastEventId,
126
- replayed_all: replayAll,
124
+ contract_major: 2,
125
+ source_complete: view.source_complete,
126
+ authority_safe: view.authority_safe,
127
+ owners_projected: Object.keys(view.instances).length,
128
+ owners: Object.keys(view.instances).sort(),
129
+ diagnostics: view.diagnostics,
130
+ materialized: false,
127
131
  };
128
- if (result.lastEventId)
129
- writeCursor(root, result.lastEventId);
130
- if (rest.includes("--json")) {
131
- process.stdout.write(`${JSON.stringify(report, null, 2)}\n`);
132
- }
133
- else {
134
- process.stdout.write(`projected ${report.events_consumed} events across ${report.owners_projected} owners\n cursor → ${report.cursor ?? "<none>"}\n${report.owners.length
135
- ? ` owners: ${report.owners.map((o) => o.slice(0, 8)).join(", ")}\n`
136
- : ""}`);
137
- }
138
- return 0;
132
+ process.stdout.write(`${JSON.stringify(report, null, rest.includes("--json") ? 2 : 0)}\n`);
133
+ return view.authority_safe ? 0 : 1;
139
134
  }
140
135
  function adapterFromPlatform(platform) {
141
136
  if (platform === "cursor")
@@ -144,62 +139,6 @@ function adapterFromPlatform(platform) {
144
139
  return "codex";
145
140
  return "claude-code";
146
141
  }
147
- /**
148
- * Append a canonical `health.heartbeat_swept` event after an operator kill.
149
- * Same envelope stale-sweep emits, so the projector's terminal / ended_at
150
- * guards treat kill and sweep identically. Soft-fails: the unlink already
151
- * happened.
152
- */
153
- async function emitHeartbeatSwept(root, owner, hb) {
154
- try {
155
- const { emit } = await import("./events/emit.js");
156
- let ageSecs;
157
- if (hb.last_heartbeat) {
158
- const ts = Date.parse(hb.last_heartbeat);
159
- if (Number.isFinite(ts)) {
160
- ageSecs = Math.max(0, Math.floor((Date.now() - ts) / 1000));
161
- }
162
- }
163
- emit(root, {
164
- event_type: "health.heartbeat_swept",
165
- instance_id: owner,
166
- session_id: hb.session_id ?? owner,
167
- adapter: adapterFromPlatform(hb.platform),
168
- source: "agent-coord",
169
- data: {
170
- reason: "killed",
171
- ...(ageSecs !== undefined ? { age_secs: ageSecs } : {}),
172
- },
173
- });
174
- }
175
- catch {
176
- /* soft-fail: never break the caller */
177
- }
178
- }
179
- /**
180
- * Append a canonical `claim.release` event for a path dropped from an owner's
181
- * files_touched. The path is canonicalized to repo-relative (matching the
182
- * projector's normalization) so the subtraction matches on replay regardless
183
- * of the form the caller passed. Soft-fails: a failed emit must never break
184
- * the release/kill flow — the file mutation already happened.
185
- */
186
- async function emitClaimRelease(root, owner, hb, path, reason) {
187
- try {
188
- const { emit } = await import("./events/emit.js");
189
- const canonical = path.startsWith(`${root}/`) ? path.slice(root.length + 1) : path;
190
- emit(root, {
191
- event_type: "claim.release",
192
- instance_id: owner,
193
- session_id: hb.session_id ?? owner,
194
- adapter: adapterFromPlatform(hb.platform),
195
- source: "agent-coord",
196
- data: { path: canonical, reason },
197
- });
198
- }
199
- catch {
200
- /* soft-fail: never break the caller */
201
- }
202
- }
203
142
  async function handleStateAction(root, action, rest) {
204
143
  const writer = await import("./state/heartbeat-writer.js");
205
144
  const [owner, ...args] = rest;
@@ -210,7 +149,23 @@ async function handleStateAction(root, action, rest) {
210
149
  switch (action) {
211
150
  case "set-task": {
212
151
  const task = args.join(" ");
213
- const hb = writer.setTask(root, owner, task);
152
+ const before = writer.readHeartbeat(root, owner);
153
+ let hb;
154
+ try {
155
+ const { recordLiveTaskChangeV3 } = await import("./live-authority-v3.js");
156
+ recordLiveTaskChangeV3({
157
+ coordRoot: root,
158
+ owner,
159
+ nativeSessionId: before?.session_id ?? owner,
160
+ adapter: adapterFromPlatform(before?.platform),
161
+ task,
162
+ });
163
+ hb = writer.readHeartbeat(root, owner);
164
+ }
165
+ catch (error) {
166
+ process.stderr.write(`agent-coord set-task: V3 authority refused (${error instanceof Error ? error.message : String(error)})\n`);
167
+ return 1;
168
+ }
214
169
  if (!hb) {
215
170
  // Name the RESOLVED root: when a nested .harnery/ shadows the real
216
171
  // coordination home, the full path is what makes that diagnosable.
@@ -220,14 +175,6 @@ async function handleStateAction(root, action, rest) {
220
175
  process.stdout.write(`${JSON.stringify({ instance_id: owner, task: hb.task ?? null, cleared: !task })}\n`);
221
176
  return 0;
222
177
  }
223
- case "set-turn-summary": {
224
- const summary = args.join(" ");
225
- const hb = writer.setTurnSummary(root, owner, summary);
226
- if (!hb)
227
- return 1;
228
- process.stdout.write(`${JSON.stringify({ instance_id: owner, turn_summary: hb.turn_summary })}\n`);
229
- return 0;
230
- }
231
178
  case "release-claim": {
232
179
  const path = args[0];
233
180
  if (!path) {
@@ -235,46 +182,29 @@ async function handleStateAction(root, action, rest) {
235
182
  return 2;
236
183
  }
237
184
  const before = writer.readHeartbeat(root, owner);
238
- const hb = writer.releaseClaim(root, owner, path);
239
- if (!hb)
185
+ let hb;
186
+ try {
187
+ const { recordLiveClaimChangeV3 } = await import("./live-authority-v3.js");
188
+ recordLiveClaimChangeV3({
189
+ coordRoot: root,
190
+ owner,
191
+ nativeSessionId: before?.session_id ?? owner,
192
+ adapter: adapterFromPlatform(before?.platform),
193
+ operation: "released",
194
+ path,
195
+ access: "write",
196
+ });
197
+ hb = writer.readHeartbeat(root, owner);
198
+ }
199
+ catch (error) {
200
+ process.stderr.write(`agent-coord release-claim: V3 authority refused (${error instanceof Error ? error.message : String(error)})\n`);
240
201
  return 1;
241
- // Durability: the projector rebuilds files_touched by replaying the
242
- // permanent Edit/Write events, so a file-only release is silently
243
- // reverted by the next full replay. Emitting claim.release puts the
244
- // subtraction into the stream so every future replay honors it. Only
245
- // emit when the release actually removed a held path (idempotent
246
- // re-releases stay quiet).
247
- const heldBefore = before?.files_touched?.length ?? 0;
248
- const heldAfter = hb.files_touched?.length ?? 0;
249
- if (heldBefore > heldAfter) {
250
- await emitClaimRelease(root, owner, before ?? hb, path, "explicit");
251
202
  }
203
+ if (!hb)
204
+ return 1;
252
205
  process.stdout.write(`${JSON.stringify({ instance_id: owner, files_touched: hb.files_touched })}\n`);
253
206
  return 0;
254
207
  }
255
- case "kill-heartbeat": {
256
- // Read held claims BEFORE the unlink so they can be released durably —
257
- // killing only the file leaves the claims resurrectable from the
258
- // permanent Edit/Write events on the next full replay (observed: a
259
- // 6-day-dead agent's claims returning after its heartbeat was killed).
260
- //
261
- // Also emit health.heartbeat_swept so the stream records a terminal
262
- // marker. Without it, a later drain that replays [session.start …
263
- // tools … claim.release] treats the owner as still in-flight and
264
- // re-creates the file (kill→resurrect loop observed 2026-08-03: 21
265
- // killed zombies back within a minute via claim.release seeding +
266
- // historical replay).
267
- const before = writer.readHeartbeat(root, owner);
268
- const ok = writer.killHeartbeat(root, owner);
269
- if (ok && before) {
270
- await emitHeartbeatSwept(root, owner, before);
271
- for (const held of before.files_touched ?? []) {
272
- await emitClaimRelease(root, owner, before, held, "heal");
273
- }
274
- }
275
- process.stdout.write(`${JSON.stringify({ instance_id: owner, removed: ok })}\n`);
276
- return ok ? 0 : 1;
277
- }
278
208
  case "heal-pidmap": {
279
209
  const pidArg = args[0];
280
210
  const pid = pidArg ? Number(pidArg) : process.ppid;
@@ -282,40 +212,54 @@ async function handleStateAction(root, action, rest) {
282
212
  process.stderr.write(`agent-coord heal-pidmap: invalid pid ${pidArg}\n`);
283
213
  return 2;
284
214
  }
285
- writer.healPidmap(root, owner, pid);
215
+ try {
216
+ const { liveCoordinationWriteModeV3 } = await import("./live-authority-v3.js");
217
+ liveCoordinationWriteModeV3(root);
218
+ writer.healPidmap(root, owner, pid);
219
+ }
220
+ catch (error) {
221
+ process.stderr.write(`agent-coord heal-pidmap: V3 route refused (${error instanceof Error ? error.message : String(error)})\n`);
222
+ return 1;
223
+ }
286
224
  process.stdout.write(`${JSON.stringify({ instance_id: owner, pid })}\n`);
287
225
  return 0;
288
226
  }
289
- case "heal-heartbeat": {
227
+ case "repair-coordination-cache": {
290
228
  // adapter arrives as a `--adapter=<h>` flag (not positional) so the live
291
- // tool.pre_use heal and the manual `harn agents heal` path (which pass
229
+ // tool.requested repair and the manual `harn agents heal` path (which pass
292
230
  // different positional counts) can both supply it without arg-order
293
231
  // fragility. Positionals (sessionId, model) stay as-is once flags are
294
232
  // filtered out.
295
233
  const adapter = args.find((a) => a.startsWith("--adapter="))?.slice("--adapter=".length);
296
- const forkedFrom = args
297
- .find((a) => a.startsWith("--forked-from="))
298
- ?.slice("--forked-from=".length);
299
234
  const positional = args.filter((a) => !a.startsWith("--"));
300
235
  const sessionId = positional[0];
301
236
  const model = positional[1];
302
- const hb = writer.healHeartbeat(root, owner, sessionId, model, adapter, forkedFrom ? { forkedFrom } : undefined);
237
+ let hb;
238
+ try {
239
+ const { liveCoordinationWriteModeV3 } = await import("./live-authority-v3.js");
240
+ liveCoordinationWriteModeV3(root);
241
+ const { readCoordinationViewV3 } = await import("../events/v3/coordination-view.js");
242
+ const { liveInstanceIdV3 } = await import("../events/v3/live-routing.js");
243
+ const projected = readCoordinationViewV3(root).instances[liveInstanceIdV3(owner)];
244
+ if (projected?.provisional_termination) {
245
+ const { recordLiveResumeObservationV3 } = await import("./live-lifecycle-v3.js");
246
+ recordLiveResumeObservationV3({
247
+ coordRoot: root,
248
+ owner,
249
+ nativeSessionId: sessionId ?? owner,
250
+ adapter: adapterFromPlatform(adapter),
251
+ });
252
+ }
253
+ const { ensureLiveCoordinationHeartbeat } = await import("./state/live-coordination-view.js");
254
+ hb = ensureLiveCoordinationHeartbeat(root, owner, sessionId ?? owner, adapterFromPlatform(adapter), model);
255
+ }
256
+ catch (error) {
257
+ process.stderr.write(`agent-coord repair-coordination-cache: V3 route refused (${error instanceof Error ? error.message : String(error)})\n`);
258
+ return 1;
259
+ }
303
260
  process.stdout.write(`${JSON.stringify({ instance_id: owner, recreated: !!hb })}\n`);
304
261
  return hb ? 0 : 1;
305
262
  }
306
- case "stamp-tool-activity": {
307
- const toolName = args[0] ?? "";
308
- const target = args.slice(1).join(" ");
309
- const hb = writer.stampToolActivity(root, owner, toolName, target);
310
- if (!hb)
311
- return 1;
312
- process.stdout.write(`${JSON.stringify({
313
- instance_id: owner,
314
- last_tool: hb.last_tool,
315
- last_tool_target: hb.last_tool_target,
316
- })}\n`);
317
- return 0;
318
- }
319
263
  default:
320
264
  process.stderr.write(`agent-coord: unknown state action ${action}\n`);
321
265
  return 2;
@@ -507,33 +451,9 @@ async function handleShellMutationClaimLog(root, rest) {
507
451
  const platform = args.platform ?? "unknown";
508
452
  const owner = args.owner ?? null;
509
453
  const { shellMutationPaths } = await import("./state/shell-mutation.js");
510
- const { emit } = await import("./events/emit.js");
511
- const { readHeartbeat } = await import("./state/heartbeat-writer.js");
512
454
  const paths = shellMutationPaths(cmd, root);
513
455
  const truncated = cmd.length > 80 ? cmd.slice(0, 80) : cmd;
514
- // Warn-only peer-shell-mutation signal. Formerly a SHELL_CLAIM_CANDIDATE line
515
- // in a log file; now a canonical decision.warn so the
516
- // signal survives in events.ndjson. (The blocking claim-conflict path is
517
- // separate: claim.conflict / verdict, and unaffected.)
518
- const adapter = platform === "cursor" ? "cursor" : platform === "codex" ? "codex" : "claude-code";
519
- const hb = owner ? readHeartbeat(root, owner) : null;
520
- for (const p of paths) {
521
- try {
522
- emit(root, {
523
- event_type: "decision.warn",
524
- instance_id: owner ?? "unknown",
525
- session_id: hb?.session_id ?? owner ?? "unknown",
526
- adapter,
527
- data: {
528
- rule: "shell_mutation_candidate",
529
- reason: `path=${p} cmd=${truncated} platform=${platform}`,
530
- },
531
- });
532
- }
533
- catch {
534
- /* telemetry only, never break the dispatcher */
535
- }
536
- }
456
+ process.stdout.write(`${JSON.stringify({ schema_version: 2, owner, platform, command_preview: truncated, paths })}\n`);
537
457
  return 0;
538
458
  }
539
459
  async function handleStaleSweep(root, _rest) {
@@ -542,6 +462,38 @@ async function handleStaleSweep(root, _rest) {
542
462
  process.stdout.write(`${JSON.stringify(result)}\n`);
543
463
  return 0;
544
464
  }
465
+ async function handleReconcileFinalization(root) {
466
+ const { reconcileSessionFinalizationV3 } = await import("./session-finalizer-v3.js");
467
+ const result = reconcileSessionFinalizationV3(root);
468
+ process.stdout.write(`${JSON.stringify(result)}\n`);
469
+ return result.diagnostics.some((item) => item === "ledger_not_authority_safe") ? 2 : 0;
470
+ }
471
+ async function handleEndSession(root, rest) {
472
+ const instanceId = rest[0];
473
+ if (!instanceId || !/^inst_[A-Za-z0-9._-]+$/.test(instanceId))
474
+ return 2;
475
+ const { listHookProducerStateRecordsV3 } = await import("../events/v3/producers/recorder.js");
476
+ const record = listHookProducerStateRecordsV3(root, { includeTerminal: false }).find(({ state }) => state.instance_id === instanceId);
477
+ if (!record)
478
+ return 2;
479
+ const { requestSessionEndExplicitV3 } = await import("./session-finalizer-v3.js");
480
+ const result = requestSessionEndExplicitV3({
481
+ coordRoot: root,
482
+ instance_id: record.state.instance_id,
483
+ generation_id: record.state.generation_id,
484
+ outcome: "interrupted",
485
+ coordination_finalized: false,
486
+ });
487
+ process.stdout.write(`${JSON.stringify(result)}\n`);
488
+ return result.state === "recorded" ||
489
+ result.state === "already_ended" ||
490
+ result.state === "queued" ||
491
+ result.state === "already_requested"
492
+ ? 0
493
+ : result.state === "delegated_work_open"
494
+ ? 3
495
+ : 2;
496
+ }
545
497
  async function handlePromptContext(root, rest) {
546
498
  const args = {};
547
499
  for (let i = 0; i < rest.length; i++) {
@@ -620,41 +572,6 @@ async function handleSessionContext(root, rest) {
620
572
  process.stdout.write(text);
621
573
  return 0;
622
574
  }
623
- async function handleCodexReplay(root, rest) {
624
- const args = {};
625
- for (let i = 0; i < rest.length; i++) {
626
- const a = rest[i];
627
- if (a.startsWith("--")) {
628
- const key = a.slice(2);
629
- const val = rest[i + 1];
630
- if (val === undefined || val.startsWith("--")) {
631
- args[key] = "true";
632
- }
633
- else {
634
- args[key] = val;
635
- i++;
636
- }
637
- }
638
- }
639
- const jsonlPath = args.jsonl;
640
- const sessionId = args.session;
641
- const instanceId = args.owner ?? sessionId;
642
- const lastMsg = args["last-message"];
643
- if (!jsonlPath || !sessionId) {
644
- process.stderr.write("agent-coord codex-replay --jsonl <path> --session <id> [--owner <id>] [--last-message <text>]\n");
645
- return 2;
646
- }
647
- const { replayCodexJsonl } = await import("./codex-replay.js");
648
- const result = replayCodexJsonl({
649
- coordRoot: root,
650
- jsonlPath,
651
- sessionId,
652
- instanceId: instanceId,
653
- lastAssistantMessage: lastMsg,
654
- });
655
- process.stdout.write(`${JSON.stringify({ session_id: sessionId, emitted: result.emitted })}\n`);
656
- return 0;
657
- }
658
575
  async function handleResolveName(root, rest) {
659
576
  const { resolveName } = await import("./state/names.js");
660
577
  const [owner, session] = rest;
@@ -671,7 +588,6 @@ async function handleResolveName(root, rest) {
671
588
  return 0;
672
589
  }
673
590
  async function handleEmitEvent(root, rest) {
674
- const { emitAndProject } = await import("./cli-emit.js");
675
591
  const args = {};
676
592
  for (let i = 0; i < rest.length; i++) {
677
593
  const a = rest[i];
@@ -691,9 +607,9 @@ async function handleEmitEvent(root, rest) {
691
607
  const instanceId = args.owner;
692
608
  const sessionId = args.session;
693
609
  const adapter = args.adapter;
694
- const dataJson = args["data-json"] ?? "{}";
695
- if (!eventType || !instanceId || !sessionId || !adapter) {
696
- process.stderr.write("agent-coord emit-event --type <T> --owner <id> --session <id> --adapter <h> [--data-json '<json>']\n");
610
+ const dataJson = args["data-stdin"] === "true" ? await readStdin() : "";
611
+ if (!eventType || !instanceId || !sessionId || !adapter || !dataJson) {
612
+ process.stderr.write("agent-coord emit-event --type <V3_TYPE> --owner <id> --session <id> --adapter <h> --data-stdin\n");
697
613
  return 2;
698
614
  }
699
615
  let data;
@@ -703,30 +619,75 @@ async function handleEmitEvent(root, rest) {
703
619
  data = parsed;
704
620
  }
705
621
  else {
706
- process.stderr.write("agent-coord emit-event: --data-json must encode an object\n");
622
+ process.stderr.write("agent-coord emit-event: stdin must encode an object\n");
707
623
  return 2;
708
624
  }
709
625
  }
710
626
  catch (err) {
711
- process.stderr.write(`agent-coord emit-event: invalid --data-json (${err instanceof Error ? err.message : String(err)})\n`);
627
+ process.stderr.write(`agent-coord emit-event: invalid stdin JSON (${err instanceof Error ? err.message : String(err)})\n`);
712
628
  return 2;
713
629
  }
714
- const result = emitAndProject({
715
- event_type: eventType,
716
- instance_id: instanceId,
717
- session_id: sessionId,
718
- adapter,
719
- turn_id: args["turn-id"],
720
- parent_session_id: args["parent-session-id"],
721
- parent_turn_id: args["parent-turn-id"],
722
- data,
723
- }, { coordRoot: root });
724
- if (!result) {
725
- process.stderr.write("agent-coord emit-event: emission failed\n");
630
+ const { resolveLiveEventLedgerRouteV3 } = await import("../events/v3/live-routing.js");
631
+ const ledgerRoute = resolveLiveEventLedgerRouteV3(root);
632
+ if (ledgerRoute.state === "blocked") {
633
+ process.stderr.write(`agent-coord emit-event: V3 ledger route is unsafe (${ledgerRoute.reason})\n`);
726
634
  return 1;
727
635
  }
728
- process.stdout.write(`${JSON.stringify(result.envelope)}\n`);
729
- return 0;
636
+ if (data.event_type !== eventType) {
637
+ process.stderr.write("agent-coord emit-event: envelope type does not match stdin event_type\n");
638
+ return 2;
639
+ }
640
+ if (eventType === "coord.lifecycle_changed") {
641
+ const state = data.new_state;
642
+ if (state !== "active" && state !== "blocked" && state !== "done") {
643
+ process.stderr.write("agent-coord emit-event: invalid V3 lifecycle state\n");
644
+ return 2;
645
+ }
646
+ const { recordLiveLifecycleChangeV3 } = await import("./live-authority-v3.js");
647
+ try {
648
+ const routed = recordLiveLifecycleChangeV3({
649
+ coordRoot: root,
650
+ owner: instanceId,
651
+ nativeSessionId: sessionId,
652
+ adapter,
653
+ state,
654
+ reason: typeof data.reason === "string" && data.reason.length > 0 ? data.reason : undefined,
655
+ suggestedSessionName: typeof data.suggested_session_name === "string" && data.suggested_session_name.length > 0
656
+ ? data.suggested_session_name
657
+ : undefined,
658
+ });
659
+ process.stdout.write(`${JSON.stringify({ schema_version: 2, event_type: "coord.lifecycle_changed", state: routed.state })}\n`);
660
+ return 0;
661
+ }
662
+ catch (error) {
663
+ process.stderr.write(`agent-coord emit-event: V3 lifecycle authority refused (${error instanceof Error ? error.message : String(error)})\n`);
664
+ return 1;
665
+ }
666
+ }
667
+ if (eventType === "coord.status_observed" ||
668
+ eventType === "coord.presence_changed" ||
669
+ eventType === "coord.message_observed" ||
670
+ eventType === "council.state_changed" ||
671
+ eventType === "decision.state_changed") {
672
+ const { recordLiveCoordinationObservationV3 } = await import("./live-observation-v3.js");
673
+ try {
674
+ const routed = recordLiveCoordinationObservationV3({
675
+ coordRoot: root,
676
+ owner: instanceId,
677
+ nativeSessionId: sessionId,
678
+ adapter,
679
+ observation: data,
680
+ });
681
+ process.stdout.write(`${JSON.stringify({ schema_version: 2, event_type: routed.event.event_type, event_id: routed.event.event_id })}\n`);
682
+ return 0;
683
+ }
684
+ catch (error) {
685
+ process.stderr.write(`agent-coord emit-event: V3 observation refused (${error instanceof Error ? error.message : String(error)})\n`);
686
+ return 1;
687
+ }
688
+ }
689
+ process.stderr.write(`agent-coord emit-event: unsupported V3 event type ${eventType}\n`);
690
+ return 2;
730
691
  }
731
692
  /**
732
693
  * `agent-coord git-hook <event> [args]` — the single entry a host git hook
@@ -794,15 +755,27 @@ async function handleGitHook(fallbackRoot, rest) {
794
755
  if (paths.length === 0)
795
756
  return 0;
796
757
  const { resolveOwner } = await import("../hooks/resolve/owner.js");
797
- const owner = resolveOwner({ payload: null, coordRoot: root })?.instance_id;
758
+ const owner = resolveOwner({
759
+ payload: null,
760
+ coordRoot: root,
761
+ })?.instance_id;
798
762
  if (!owner)
799
763
  return 0;
800
- const { groupUnclaim } = await import("./state/heartbeat-writer.js");
801
- const reason = event === "post-commit" ? "commit" : "checkout";
764
+ const { findGroupClaims } = await import("./state/heartbeat-writer.js");
765
+ const { recordLiveClaimChangeV3 } = await import("./live-authority-v3.js");
802
766
  for (const path of paths) {
803
767
  try {
804
- for (const hit of groupUnclaim(root, owner, path)) {
805
- await emitClaimRelease(root, hit.instance_id, hit, path, reason);
768
+ for (const hit of findGroupClaims(root, owner, path)) {
769
+ recordLiveClaimChangeV3({
770
+ coordRoot: root,
771
+ owner,
772
+ subject: hit.instance_id,
773
+ nativeSessionId: hit.session_id ?? owner,
774
+ adapter: adapterFromPlatform(hit.platform),
775
+ operation: "released",
776
+ path,
777
+ access: "write",
778
+ });
806
779
  }
807
780
  }
808
781
  catch {
@@ -834,12 +807,9 @@ async function main() {
834
807
  return handleEmitEvent(root, rest);
835
808
  }
836
809
  if (subcommand === "set-task" ||
837
- subcommand === "set-turn-summary" ||
838
810
  subcommand === "release-claim" ||
839
- subcommand === "kill-heartbeat" ||
840
811
  subcommand === "heal-pidmap" ||
841
- subcommand === "heal-heartbeat" ||
842
- subcommand === "stamp-tool-activity") {
812
+ subcommand === "repair-coordination-cache") {
843
813
  return handleStateAction(root, subcommand, rest);
844
814
  }
845
815
  if (subcommand === "append-journal" || subcommand === "edit-journal") {
@@ -859,12 +829,15 @@ async function main() {
859
829
  if (subcommand === "resolve-name") {
860
830
  return handleResolveName(root, rest);
861
831
  }
862
- if (subcommand === "codex-replay") {
863
- return handleCodexReplay(root, rest);
864
- }
865
832
  if (subcommand === "stale-sweep") {
866
833
  return handleStaleSweep(root, rest);
867
834
  }
835
+ if (subcommand === "reconcile-finalization") {
836
+ return handleReconcileFinalization(root);
837
+ }
838
+ if (subcommand === "end-session") {
839
+ return handleEndSession(root, rest);
840
+ }
868
841
  if (subcommand === "session-context") {
869
842
  return handleSessionContext(root, rest);
870
843
  }
@@ -0,0 +1,14 @@
1
+ import type { SessionArchiveObservationV3 } from "./session-finalizer-v3.js";
2
+ export interface CodexArchiveScanResultV3 {
3
+ observations: SessionArchiveObservationV3[];
4
+ diagnostics: string[];
5
+ }
6
+ /**
7
+ * Read only Codex's durable lifecycle columns. Conversation content, titles,
8
+ * working directories, and model metadata never leave the adapter database.
9
+ */
10
+ export declare function readCodexArchiveObservationsV3(coordRoot: string, options?: {
11
+ databasePath?: string;
12
+ observedAt?: string;
13
+ }): CodexArchiveScanResultV3;
14
+ //# sourceMappingURL=codex-archive-v3.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-archive-v3.d.ts","sourceRoot":"","sources":["../../../src/core/agents/codex-archive-v3.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAyB7E,MAAM,WAAW,wBAAwB;IACvC,YAAY,EAAE,2BAA2B,EAAE,CAAC;IAC5C,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GAC3D,wBAAwB,CAmE1B"}