harnery 0.33.0 → 0.34.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 (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 +1237 -590
  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 +306 -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 +161 -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 +1530 -593
  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 +352 -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 +171 -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
@@ -1,5 +1,6 @@
1
1
  import { existsSync, readFileSync } from "node:fs";
2
- import { emitCanonical, monorepoRoot, normalizeAdapter, readHeartbeat, resolveOwner, } from "../core/agents/index.js";
2
+ import { emitEventV3, monorepoRoot, normalizeAdapter, resolveOwner } from "../core/agents/index.js";
3
+ import { readLiveCoordinationRow } from "../core/agents/state/live-coordination-view.js";
3
4
  import { resolveBinName } from "../core/config.js";
4
5
  import { archiveDecision, claimDecision, DECISION_STAKES, fileDecision, isStakes, isStatus, isTier, isVerdict, listDecisions, reopenDecision, resolveDecision, reviewDecision, searchDecisions, showDecision, supersedeDecision, triageDecision, wontfixDecision, } from "../lib/decision/index.js";
5
6
  /**
@@ -43,7 +44,7 @@ export function registerDecisionCommand(program, emitParam) {
43
44
  brief = readFileSync(opts.brief, "utf8");
44
45
  }
45
46
  const owner = resolveOwner();
46
- const hb = owner ? readHeartbeat(owner) : null;
47
+ const hb = owner ? readLiveCoordinationRow(coordRoot, owner) : null;
47
48
  const r = fileDecision(coordRoot, {
48
49
  question: question.join(" "),
49
50
  tier,
@@ -56,11 +57,7 @@ export function registerDecisionCommand(program, emitParam) {
56
57
  });
57
58
  if (!r.ok)
58
59
  return fail("file_failed", r.reason);
59
- emitDecisionEvent("decision.filed", {
60
- decision_id: r.manifest.decision_id,
61
- tier,
62
- stakes,
63
- });
60
+ emitDecisionEvent("filed", r.manifest);
64
61
  emit.data(r.manifest);
65
62
  });
66
63
  // ── list ─────────────────────────────────────────────────────────────────
@@ -162,7 +159,7 @@ export function registerDecisionCommand(program, emitParam) {
162
159
  .action((id, opts) => {
163
160
  const coordRoot = coordRootOrExit();
164
161
  const owner = resolveOwner();
165
- const resolvedBy = opts.resolvedBy ?? (owner ? readHeartbeat(owner)?.name : undefined);
162
+ const resolvedBy = opts.resolvedBy ?? (owner ? readLiveCoordinationRow(coordRoot, owner)?.name : undefined);
166
163
  if (!resolvedBy) {
167
164
  return fail("no_resolver", "pass --resolved-by (no agent session to infer it from)");
168
165
  }
@@ -177,12 +174,7 @@ export function registerDecisionCommand(program, emitParam) {
177
174
  });
178
175
  if (!r.ok)
179
176
  return fail("resolve_failed", r.reason);
180
- emitDecisionEvent("decision.resolved", {
181
- decision_id: id,
182
- tier: r.manifest.tier,
183
- stakes: r.manifest.stakes,
184
- confidence: opts.confidence ?? null,
185
- });
177
+ emitDecisionEvent("resolved", r.manifest);
186
178
  emit.data(r.manifest);
187
179
  });
188
180
  // ── review ───────────────────────────────────────────────────────────────
@@ -202,11 +194,7 @@ export function registerDecisionCommand(program, emitParam) {
202
194
  });
203
195
  if (!r.ok)
204
196
  return fail("review_failed", r.reason);
205
- emitDecisionEvent("decision.reviewed", {
206
- decision_id: id,
207
- verdict: opts.verdict,
208
- tier: r.manifest.tier,
209
- });
197
+ emitDecisionEvent("reviewed", r.manifest);
210
198
  emit.data(r.manifest);
211
199
  });
212
200
  // ── triage ─────────────────────────────────────────────────────────────────
@@ -243,11 +231,7 @@ export function registerDecisionCommand(program, emitParam) {
243
231
  const r = archiveDecision(coordRoot, id, opts.graduatedTo);
244
232
  if (!r.ok)
245
233
  return fail("archive_failed", r.reason);
246
- emitDecisionEvent("decision.archived", {
247
- decision_id: id,
248
- tier: r.manifest.tier,
249
- graduated_to: opts.graduatedTo ?? null,
250
- });
234
+ emitDecisionEvent("archived", r.manifest);
251
235
  emit.data(r.manifest);
252
236
  });
253
237
  // ── reopen ───────────────────────────────────────────────────────────────────
@@ -263,7 +247,7 @@ export function registerDecisionCommand(program, emitParam) {
263
247
  const r = reopenDecision(coordRoot, id);
264
248
  if (!r.ok)
265
249
  return fail("reopen_failed", r.reason);
266
- emitDecisionEvent("decision.reopened", { decision_id: id, tier: r.manifest.tier });
250
+ emitDecisionEvent("reviewed", r.manifest, "archived");
267
251
  emit.data(r.manifest);
268
252
  });
269
253
  // ── supersede ────────────────────────────────────────────────────────────────
@@ -276,10 +260,7 @@ export function registerDecisionCommand(program, emitParam) {
276
260
  const r = supersedeDecision(coordRoot, id, opts.by);
277
261
  if (!r.ok)
278
262
  return fail("supersede_failed", r.reason);
279
- emitDecisionEvent("decision.superseded", {
280
- decision_id: id,
281
- superseded_by: opts.by ?? null,
282
- });
263
+ emitDecisionEvent("superseded", r.manifest);
283
264
  emit.data(r.manifest);
284
265
  });
285
266
  // ── wontfix ──────────────────────────────────────────────────────────────────
@@ -292,10 +273,7 @@ export function registerDecisionCommand(program, emitParam) {
292
273
  const r = wontfixDecision(coordRoot, id, opts.reason);
293
274
  if (!r.ok)
294
275
  return fail("wontfix_failed", r.reason);
295
- emitDecisionEvent("decision.wontfix", {
296
- decision_id: id,
297
- reason: opts.reason ?? null,
298
- });
276
+ emitDecisionEvent("wontfix", r.manifest);
299
277
  emit.data(r.manifest);
300
278
  });
301
279
  }
@@ -363,16 +341,22 @@ function summarize(m) {
363
341
  * session to attribute it to (operator-side filing). Powers the docket metrics
364
342
  * without new telemetry plumbing.
365
343
  */
366
- function emitDecisionEvent(type, data) {
344
+ function emitDecisionEvent(newState, manifest, priorState) {
367
345
  const owner = resolveOwner();
368
346
  if (!owner)
369
347
  return;
370
- const hb = readHeartbeat(owner);
371
- emitCanonical({
372
- type,
348
+ const root = monorepoRoot();
349
+ const hb = root ? readLiveCoordinationRow(root, owner) : null;
350
+ emitEventV3({
373
351
  owner,
374
352
  session: hb?.session_id ?? owner,
375
353
  adapter: normalizeAdapter(hb?.platform),
376
- data,
354
+ observation: {
355
+ event_type: "decision.state_changed",
356
+ decision_id: manifest.decision_id,
357
+ ...(priorState ? { prior_state: priorState } : {}),
358
+ new_state: newState,
359
+ record: manifest,
360
+ },
377
361
  });
378
362
  }
@@ -1 +1 @@
1
- {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAmC1E,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,WAAW,EACtB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,CA0IN"}
1
+ {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAmC1E,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,WAAW,EACtB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,CAkON"}
@@ -1,9 +1,11 @@
1
1
  import { initDocsContext as initDocs, scanDocs } from "../lib/docs.js";
2
- import { initDocsMigrationContext, runFrontmatterMigration, } from "../lib/docs-frontmatter-migrate.js";
3
2
  import { initDocsContext as initDocsIndex, runIndex } from "../lib/docs-index.js";
4
3
  import { initDocsContext as initDocsLinks, runLinks } from "../lib/docs-links.js";
5
4
  import { initDocsContext as initDocsLint, runLint } from "../lib/docs-lint.js";
6
5
  import { readDocsMetadata, readDocsMetadataKey } from "../lib/docs-meta.js";
6
+ import { initDocsMetadataAuditContext, runDocsMetadataAudit } from "../lib/docs-metadata-audit.js";
7
+ import { initDocsMetadataSyncContext, runDocsMetadataSync } from "../lib/docs-metadata-sync.js";
8
+ import { createDocsFile } from "../lib/docs-new.js";
7
9
  import { countColdHandoffs, initDocsContext as initDocsSweep, runSweep, } from "../lib/docs-sweep.js";
8
10
  function ensureContext(context) {
9
11
  if (!context?.repoRoot || !context?.submodules) {
@@ -11,7 +13,6 @@ function ensureContext(context) {
11
13
  }
12
14
  const opts = { repoRoot: context.repoRoot, submodules: context.submodules };
13
15
  initDocs(opts);
14
- initDocsMigrationContext(opts);
15
16
  initDocsIndex(opts);
16
17
  initDocsLint({
17
18
  ...opts,
@@ -19,6 +20,8 @@ function ensureContext(context) {
19
20
  docsRootAllowlist: context.docsRootAllowlist,
20
21
  });
21
22
  initDocsLinks({ ...opts, extraExcludedPrefixes: context.extraDocsExcludedPrefixes });
23
+ initDocsMetadataAuditContext(opts);
24
+ initDocsMetadataSyncContext(opts);
22
25
  initDocsSweep(opts);
23
26
  }
24
27
  let emit;
@@ -60,21 +63,101 @@ export function registerDocsCommand(program, emitParam, context) {
60
63
  emit.error({ code: "docs_error", message: msg });
61
64
  }
62
65
  });
63
- docs
64
- .command("frontmatter-migrate")
65
- .description("Convert lifecycle docs from bold metadata headers to YAML frontmatter")
66
+ const metadata = docs
67
+ .command("metadata")
68
+ .description("Validate and maintain the versioned markdown metadata contract");
69
+ metadata
70
+ .command("validate")
71
+ .description("Validate every managed Markdown file against harnery-doc/v2")
66
72
  .option("--repo <name>", "Limit to one submodule or '.' for parent")
67
- .option("--yes", "Apply changes; without this flag the command is a dry-run")
68
73
  .action(async (opts) => {
69
74
  try {
70
75
  ensureContext(context);
71
- handleFrontmatterMigration(opts);
76
+ const rows = await runDocsMetadataAudit(opts);
77
+ const errors = rows
78
+ .flatMap((row) => row.issues)
79
+ .filter((issue) => issue.severity === "error");
80
+ const warnings = rows
81
+ .flatMap((row) => row.issues)
82
+ .filter((issue) => issue.severity === "warning");
83
+ emit.data({
84
+ repo: opts.repo ?? null,
85
+ counts: {
86
+ files: rows.length,
87
+ valid: rows.filter((row) => row.state === "valid").length,
88
+ invalid: rows.filter((row) => row.state === "invalid").length,
89
+ legacy: rows.filter((row) => row.state === "legacy").length,
90
+ missing: rows.filter((row) => row.state === "missing").length,
91
+ errors: errors.length,
92
+ warnings: warnings.length,
93
+ },
94
+ rows,
95
+ });
96
+ if (errors.length > 0)
97
+ emit.setExitCode(1);
72
98
  }
73
99
  catch (err) {
74
100
  const msg = err instanceof Error ? err.message : String(err);
75
101
  emit.error({ code: "docs_error", message: msg });
76
102
  }
77
103
  });
104
+ metadata
105
+ .command("sync")
106
+ .description("Synchronize semantic and lifecycle timestamps on staged v2 documents")
107
+ .argument("[files...]", "Explicit repository-relative Markdown files; defaults to staged files")
108
+ .option("--repo <name>", "Limit to one submodule or '.' for parent")
109
+ .option("--check", "Report timestamp drift without writing")
110
+ .option("--reviewed", "Record an explicit runbook review and move its due date")
111
+ .action(async (files, opts) => {
112
+ try {
113
+ ensureContext(context);
114
+ const rows = await runDocsMetadataSync({ ...opts, files });
115
+ emit.data({
116
+ check: !!opts.check,
117
+ counts: {
118
+ files: rows.length,
119
+ updated: rows.filter((row) => row.status === "updated").length,
120
+ drift: rows.filter((row) => row.status === "drift").length,
121
+ invalid: rows.filter((row) => row.status === "invalid").length,
122
+ },
123
+ rows,
124
+ });
125
+ if (rows.some((row) => row.status === "drift" || row.status === "invalid")) {
126
+ emit.setExitCode(1);
127
+ }
128
+ }
129
+ catch (err) {
130
+ emit.error({
131
+ code: "docs_error",
132
+ message: err instanceof Error ? err.message : String(err),
133
+ });
134
+ }
135
+ });
136
+ docs
137
+ .command("new")
138
+ .description("Create a document with canonical harnery-doc/v2 metadata")
139
+ .argument("<type>", "plan, issue, handoff, runbook, or topic")
140
+ .argument("<path>", "Repository-relative Markdown path")
141
+ .requiredOption("--summary <text>", "One-sentence document summary")
142
+ .requiredOption("--owner <id>", "Canonical lowercase kebab-case owner id")
143
+ .option("--status <status>", "Initial lifecycle status")
144
+ .option("--severity <severity>", "Issue severity", "medium")
145
+ .action((type, path, opts) => {
146
+ try {
147
+ ensureContext(context);
148
+ if (!["plan", "issue", "handoff", "runbook", "topic"].includes(type)) {
149
+ throw new Error(`unsupported document type '${type}'`);
150
+ }
151
+ const file = createDocsFile(context.repoRoot, { type, path, ...opts });
152
+ emit.data({ path: file, schema: "harnery-doc/v2", type });
153
+ }
154
+ catch (err) {
155
+ emit.error({
156
+ code: "docs_error",
157
+ message: err instanceof Error ? err.message : String(err),
158
+ });
159
+ }
160
+ });
78
161
  docs
79
162
  .command("lint")
80
163
  .description("Verify every repo matches the documentation contract (directory layout + naming rules)")
@@ -129,7 +212,7 @@ export function registerDocsCommand(program, emitParam, context) {
129
212
  .command("index")
130
213
  .description("Regenerate index READMEs for docs/audits/ and docs/issues/ directories")
131
214
  .option("--dry-run", "Show what would change, don't write files")
132
- .option("--repo <name>", "Limit to one submodule or '.' for parent")
215
+ .option("--repo <name>", "Limit to one package (in-tree or submodule) or '.' for parent")
133
216
  .action(async (opts) => {
134
217
  try {
135
218
  ensureContext(context);
@@ -141,26 +224,6 @@ export function registerDocsCommand(program, emitParam, context) {
141
224
  }
142
225
  });
143
226
  }
144
- // --- `harn docs frontmatter-migrate` ---
145
- function handleFrontmatterMigration(opts) {
146
- const rows = runFrontmatterMigration({ repo: opts.repo, apply: !!opts.yes });
147
- const counts = {
148
- would_update: rows.filter((row) => row.status === "would-update").length,
149
- updated: rows.filter((row) => row.status === "updated").length,
150
- skipped: rows.filter((row) => row.status === "skipped").length,
151
- errors: rows.filter((row) => row.status === "error").length,
152
- };
153
- emit.data({
154
- dry_run: !opts.yes,
155
- applied: !!opts.yes && counts.errors === 0,
156
- aborted: !!opts.yes && counts.errors > 0,
157
- repo: opts.repo ?? null,
158
- counts,
159
- rows,
160
- });
161
- if (counts.errors > 0)
162
- emit.setExitCode(1);
163
- }
164
227
  // --- `harn docs meta` ---
165
228
  function handleMeta(repoRoot, path, key, opts) {
166
229
  const metadata = readDocsMetadata(repoRoot, path).data;
@@ -379,7 +379,7 @@ function checkHarneryDir() {
379
379
  name: ".harnery/",
380
380
  severity: "warn",
381
381
  detail: "no .harnery/ found above cwd",
382
- hint: "create one with `mkdir -p .harnery/active` from your monorepo root",
382
+ hint: "initialize the project with `harn init` from the repository root",
383
383
  };
384
384
  }
385
385
  /**
@@ -417,6 +417,15 @@ function checkAdapterHooks(installedAdapters = []) {
417
417
  }
418
418
  if (d.orphans.length > 0)
419
419
  bits.push(`${d.orphans.length} orphaned (${d.orphans.join(", ")})`);
420
+ if (d.duplicates.length > 0) {
421
+ bits.push(`${d.duplicates.length} duplicated (${d.duplicates.map((e) => e.settingsKey).join(", ")})`);
422
+ }
423
+ if (d.misplaced.length > 0) {
424
+ bits.push(`${d.misplaced.length} misplaced (${d.misplaced.map((e) => e.subcommand).join(", ")})`);
425
+ }
426
+ if (d.stale.length > 0) {
427
+ bits.push(`${d.stale.length} stale (${d.stale.map((e) => e.settingsKey).join(", ")})`);
428
+ }
420
429
  if (d.invalidTopLevelKeys.length > 0) {
421
430
  bits.push(`invalid fields (${d.invalidTopLevelKeys.join(", ")})`);
422
431
  }
@@ -0,0 +1,5 @@
1
+ import type { Command } from "commander";
2
+ import type { EmitContext, HarneryProgramContext } from "../commander.js";
3
+ /** Read-only projections over the canonical Event Ledger V3 stream. */
4
+ export declare function registerEventsCommand(program: Command, emit: EmitContext, context?: HarneryProgramContext): void;
5
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/commands/events.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAkC1E,uEAAuE;AACvE,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,EACjB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,CA+CN"}
@@ -0,0 +1,189 @@
1
+ import { resolve } from "node:path";
2
+ import { projectEconomicsV3, projectLatencyV3, readLedgerV3, } from "../core/events/v3/index.js";
3
+ /** Read-only projections over the canonical Event Ledger V3 stream. */
4
+ export function registerEventsCommand(program, emit, context) {
5
+ const command = program.command("events").description("Inspect the canonical event ledger");
6
+ command
7
+ .command("latency")
8
+ .description("Project turn latency, token economics, and attribution from Event Ledger V3")
9
+ .option("--root <path>", "Explicit coordination root")
10
+ .option("--candidate", "Read a pre-activation candidate ledger instead of active authority")
11
+ .option("--by-tool", "Aggregate inclusive tool latency")
12
+ .option("--by-generation", "Aggregate latency by generation")
13
+ .option("--json", "Emit the complete projections and selected view as JSON")
14
+ .action((options) => {
15
+ try {
16
+ if (options.byTool && options.byGeneration) {
17
+ throw new Error("--by-tool and --by-generation are mutually exclusive");
18
+ }
19
+ const root = resolve(options.root ?? coordRoot(context));
20
+ const authority = options.candidate ? "candidate" : "active";
21
+ const read = readLedgerV3(root, { authority });
22
+ if (!read.complete) {
23
+ const diagnostics = read.diagnostics.map(({ code }) => code).join(", ") || "unknown";
24
+ throw new Error(`V3 ledger read is incomplete: ${diagnostics}`);
25
+ }
26
+ const latency = projectLatencyV3(read);
27
+ const economics = projectEconomicsV3(read);
28
+ const view = options.byTool
29
+ ? { kind: "tool", rows: summarizeByTool(latency.turns) }
30
+ : options.byGeneration
31
+ ? { kind: "generation", rows: summarizeByGeneration(latency.turns) }
32
+ : { kind: "turn", rows: latency.turns };
33
+ if (options.json) {
34
+ emit.config({ format: "json" });
35
+ emit.data({ root, authority, view, latency, economics });
36
+ return;
37
+ }
38
+ if (view.kind === "tool")
39
+ emit.text(renderTools(view.rows));
40
+ else if (view.kind === "generation")
41
+ emit.text(renderGenerations(view.rows));
42
+ else
43
+ emit.text(renderTurns(view.rows));
44
+ }
45
+ catch (error) {
46
+ emit.error({
47
+ code: "event_v3_latency_failed",
48
+ message: error instanceof Error ? error.message : String(error),
49
+ });
50
+ throw error;
51
+ }
52
+ });
53
+ }
54
+ function coordRoot(context) {
55
+ return resolve(context?.resolveCoordRoot?.() ??
56
+ context?.repoRoot ??
57
+ process.env.HARNERY_COORD_ROOT ??
58
+ process.cwd());
59
+ }
60
+ function summarizeByGeneration(turns) {
61
+ const groups = new Map();
62
+ for (const turn of turns) {
63
+ const group = groups.get(turn.generation_id) ?? [];
64
+ group.push(turn);
65
+ groups.set(turn.generation_id, group);
66
+ }
67
+ return [...groups.entries()]
68
+ .map(([generationId, group]) => ({
69
+ generation_id: generationId,
70
+ turns: group.length,
71
+ wall_ms: sumMetrics(group.map(({ wall_ms }) => wall_ms)),
72
+ tool_ms: sumMetrics(group.map(({ tool_ms }) => tool_ms)),
73
+ command_ms: sumMetrics(group.map(({ command_exclusive_ms }) => command_exclusive_ms)),
74
+ wait_ms: sumMetrics(group.map(({ wait_ms }) => wait_ms)),
75
+ inference_ms: sumMetrics(group.map(({ inference_ms }) => inference_ms)),
76
+ harness_ms: sumMetrics(group.map(({ harness_ms }) => harness_ms)),
77
+ residual_ms: sumMetrics(group.map(({ residual_ms }) => residual_ms)),
78
+ }))
79
+ .sort((left, right) => left.generation_id.localeCompare(right.generation_id));
80
+ }
81
+ function summarizeByTool(turns) {
82
+ const groups = new Map();
83
+ for (const turn of turns) {
84
+ for (const tool of turn.tool_breakdown) {
85
+ const key = `${tool.namespace}\0${tool.name}`;
86
+ const group = groups.get(key) ?? [];
87
+ group.push(tool);
88
+ groups.set(key, group);
89
+ }
90
+ }
91
+ const rows = [...groups.entries()].map(([key, group]) => {
92
+ const [namespace, name] = key.split("\0");
93
+ return {
94
+ namespace: namespace ?? "",
95
+ name: name ?? "",
96
+ count: group.reduce((total, tool) => total + tool.count, 0),
97
+ duration_ms: sumMetrics(group.map(({ duration_ms }) => duration_ms)),
98
+ coverage: "complete",
99
+ };
100
+ });
101
+ const incomplete = turns.filter(({ tool_ms }) => tool_ms.state === "unknown");
102
+ if (incomplete.length > 0) {
103
+ rows.push({
104
+ namespace: "?",
105
+ name: "unattributed",
106
+ count: 0,
107
+ duration_ms: {
108
+ state: "unknown",
109
+ known_ms: 0,
110
+ reasons: unique(incomplete.flatMap(({ tool_ms }) => (tool_ms.state === "unknown" ? tool_ms.reasons : []))),
111
+ },
112
+ coverage: "partial",
113
+ });
114
+ }
115
+ return rows.sort((left, right) => left.namespace.localeCompare(right.namespace) || left.name.localeCompare(right.name));
116
+ }
117
+ function sumMetrics(metrics) {
118
+ const known = metrics.reduce((total, metric) => total + metricValue(metric), 0);
119
+ const reasons = unique(metrics.flatMap((metric) => (metric.state === "unknown" ? metric.reasons : [])));
120
+ return reasons.length === 0
121
+ ? { state: "observed", value_ms: known }
122
+ : { state: "unknown", known_ms: known, reasons };
123
+ }
124
+ function renderTurns(turns) {
125
+ return renderTable([
126
+ "GENERATION",
127
+ "TURN",
128
+ "WALL",
129
+ "TOOL",
130
+ "COMMAND",
131
+ "WAIT",
132
+ "INFERENCE",
133
+ "HARNESS",
134
+ "RESIDUAL",
135
+ "CONTEXT",
136
+ ], turns.map((turn) => [
137
+ turn.generation_id,
138
+ turn.turn_id,
139
+ formatMetric(turn.wall_ms),
140
+ formatMetric(turn.tool_ms),
141
+ formatMetric(turn.command_exclusive_ms),
142
+ formatMetric(turn.wait_ms),
143
+ formatMetric(turn.inference_ms),
144
+ formatMetric(turn.harness_ms),
145
+ formatMetric(turn.residual_ms),
146
+ turn.context_percent === null ? "?" : `${turn.context_percent.toFixed(1)}%`,
147
+ ]));
148
+ }
149
+ function renderGenerations(rows) {
150
+ return renderTable(["GENERATION", "TURNS", "WALL", "TOOL", "COMMAND", "WAIT", "INFERENCE", "HARNESS", "RESIDUAL"], rows.map((row) => [
151
+ row.generation_id,
152
+ String(row.turns),
153
+ formatMetric(row.wall_ms),
154
+ formatMetric(row.tool_ms),
155
+ formatMetric(row.command_ms),
156
+ formatMetric(row.wait_ms),
157
+ formatMetric(row.inference_ms),
158
+ formatMetric(row.harness_ms),
159
+ formatMetric(row.residual_ms),
160
+ ]));
161
+ }
162
+ function renderTools(rows) {
163
+ return renderTable(["NAMESPACE", "TOOL", "CALLS", "INCLUSIVE", "COVERAGE"], rows.map((row) => [
164
+ row.namespace,
165
+ row.name,
166
+ String(row.count),
167
+ formatMetric(row.duration_ms),
168
+ row.coverage,
169
+ ]));
170
+ }
171
+ function renderTable(headers, rows) {
172
+ const widths = headers.map((header, index) => Math.max(header.length, ...rows.map((row) => row[index]?.length ?? 0)));
173
+ const line = (row) => row
174
+ .map((cell, index) => cell.padEnd(widths[index] ?? cell.length))
175
+ .join(" ")
176
+ .trimEnd();
177
+ return `${[line(headers), line(widths.map((width) => "-".repeat(width))), ...rows.map(line)].join("\n")}\n`;
178
+ }
179
+ function formatMetric(metric) {
180
+ if (metric.state === "observed")
181
+ return `${metric.value_ms}ms`;
182
+ return metric.known_ms > 0 ? `>=${metric.known_ms}ms?` : "?";
183
+ }
184
+ function metricValue(metric) {
185
+ return metric.state === "observed" ? metric.value_ms : metric.known_ms;
186
+ }
187
+ function unique(values) {
188
+ return [...new Set(values)].sort();
189
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"governor.d.ts","sourceRoot":"","sources":["../../src/commands/governor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AA6EnD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CAmHjF"}
1
+ {"version":3,"file":"governor.d.ts","sourceRoot":"","sources":["../../src/commands/governor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AA6EnD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CA6HjF"}
@@ -3,7 +3,7 @@ import { dirname, isAbsolute, resolve } from "node:path";
3
3
  import { adapterProofInputs, createBuiltinAdapterRegistry, probeBinaryVersion, readAttestation, } from "../core/adapters/index.js";
4
4
  import { workflowSubscriptionOnly } from "../core/config.js";
5
5
  import { inspectAdapterSpread } from "../core/governor/adapter-spread.js";
6
- import { approveGovernorPlan, configureGovernorService, createGovernor, governorServiceLogPath, listGovernors, readGovernor, readGovernorPlan, readGovernorServiceConfig, readGovernorServiceStatus, rejectGovernorPlan, requestGovernorServiceStop, retryGovernorPlan, runGovernor, runGovernorServiceDaemon, spawnGovernorService, } from "../core/governor/index.js";
6
+ import { approveGovernorPlan, configureGovernorService, createGovernor, governorServiceLogPath, listGovernorsWithWarnings, readGovernor, readGovernorPlan, readGovernorServiceConfig, readGovernorServiceStatus, rejectGovernorPlan, requestGovernorServiceStop, retryGovernorPlan, runGovernor, runGovernorServiceDaemon, spawnGovernorService, } from "../core/governor/index.js";
7
7
  import { findCoordRoot } from "../core/hooks/resolve/coord-root.js";
8
8
  import { loadPolicyFile } from "../core/policy/index.js";
9
9
  export function registerGovernorCommand(program, emit) {
@@ -83,16 +83,22 @@ export function registerGovernorCommand(program, emit) {
83
83
  .option("--json", "Emit complete governor records as JSON")
84
84
  .action((opts) => {
85
85
  withGovernorRoot(emit, (coordRoot) => {
86
- const records = listGovernors(coordRoot);
86
+ const { records, warnings } = listGovernorsWithWarnings(coordRoot);
87
87
  if (opts.json) {
88
88
  emit.config({ format: "json" });
89
89
  emit.data(records);
90
+ for (const warning of warnings) {
91
+ emit.log(renderGovernorListWarning(warning.goal_id, warning.reason), "warn");
92
+ }
90
93
  }
91
- else if (records.length === 0) {
94
+ else if (records.length === 0 && warnings.length === 0) {
92
95
  emit.text("no durable governors\n");
93
96
  }
94
97
  else {
95
- emit.text(`${records.map(renderGovernorRow).join("\n")}\n`);
98
+ emit.text(`${[
99
+ ...records.map(renderGovernorRow),
100
+ ...warnings.map((warning) => renderGovernorListWarning(warning.goal_id, warning.reason)),
101
+ ].join("\n")}\n`);
96
102
  }
97
103
  });
98
104
  });
@@ -693,6 +699,9 @@ function renderPlanRow(plan) {
693
699
  const review = plan.review ? ` review:${plan.review.status}` : "";
694
700
  return `${plan.request.id} ${plan.status.padEnd(18)} ${plan.request.prior_root_work_id}${review}`;
695
701
  }
702
+ function renderGovernorListWarning(goalId, reason) {
703
+ return `warning ${goalId} unreadable: ${reason}`;
704
+ }
696
705
  function delay(ms) {
697
706
  return new Promise((resolveDelay) => setTimeout(resolveDelay, ms));
698
707
  }
@@ -17,9 +17,17 @@
17
17
  */
18
18
  import type { Command } from "commander";
19
19
  import type { EmitContext } from "../commander.js";
20
+ import type { EventV3ControlState } from "../core/events/v3/control.js";
20
21
  import { type AdapterId, type AdapterSpec } from "../core/hooks/adapter/events.js";
21
22
  import { type SettingsFile } from "../core/hooks/adapter/wiring.js";
22
23
  export declare function registerInitCommand(program: Command, emit: EmitContext, binName?: string): void;
24
+ /**
25
+ * Runtime gates bound into an immutable V3 epoch. `init` is the explicit
26
+ * upgrade boundary: when code or capability profiles change, it archives the
27
+ * old epoch intact and activates a compatible one instead of letting upgraded
28
+ * hooks fail closed against stale approvals.
29
+ */
30
+ export declare function eventLedgerV3RuntimeIssues(control: EventV3ControlState, harneryBuild: string): string[];
23
31
  export declare function codexHookReviewAction(adapter: AdapterId): string | null;
24
32
  /**
25
33
  * Merge agent-hook entries into a adapter settings object in place, idempotently.
@@ -30,8 +38,7 @@ export declare function codexHookReviewAction(adapter: AdapterId): string | null
30
38
  * `{ command }`) and ensures the root `version` key when the adapter requires
31
39
  * one. Pure (no fs/git) so it's unit-testable.
32
40
  *
33
- * The trailing space in the match (`agent-hook ${subcommand} `) is load-bearing:
34
- * it keeps `stop` from matching `stop-failure`.
41
+ * Token-aware matching keeps `stop` from matching `stop-failure`.
35
42
  */
36
43
  export declare function wireHooks(settings: SettingsFile, spec: AdapterSpec, agentHookPath: string, adapter: AdapterId): {
37
44
  wired: number;
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,EAAiB,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAClG,OAAO,EAKL,KAAK,YAAY,EAClB,MAAM,iCAAiC,CAAC;AAmBzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAyJ/F;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAOvE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CACvB,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAE,WAAW,EACjB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,SAAS,GACjB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAqCvE;AAyDD;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,YAAY,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAmB1F;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAmDhG;AASD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAkCxF"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAOH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAInD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAQxE,OAAO,EAAiB,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAClG,OAAO,EASL,KAAK,YAAY,EAClB,MAAM,iCAAiC,CAAC;AAmBzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CA+P/F;AAiBD;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,mBAAmB,EAC5B,YAAY,EAAE,MAAM,GACnB,MAAM,EAAE,CAoBV;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAOvE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CACvB,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAE,WAAW,EACjB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,SAAS,GACjB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CA8CvE;AAwFD;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,YAAY,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAa1F;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAmDhG;AASD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAkCxF"}