harnery 0.32.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 (665) hide show
  1. package/README.md +2 -0
  2. package/dist/commander.d.ts.map +1 -1
  3. package/dist/commander.js +7 -1
  4. package/dist/commands/adapter.js +2 -2
  5. package/dist/commands/agents.d.ts +144 -1
  6. package/dist/commands/agents.d.ts.map +1 -1
  7. package/dist/commands/agents.js +1408 -565
  8. package/dist/commands/artifacts.d.ts.map +1 -1
  9. package/dist/commands/artifacts.js +7 -6
  10. package/dist/commands/backup.d.ts +1 -1
  11. package/dist/commands/backup.d.ts.map +1 -1
  12. package/dist/commands/backup.js +29 -16
  13. package/dist/commands/browse.d.ts.map +1 -1
  14. package/dist/commands/browse.js +234 -12
  15. package/dist/commands/checkpoint.d.ts.map +1 -1
  16. package/dist/commands/checkpoint.js +3 -2
  17. package/dist/commands/claude-desktop.d.ts +2 -2
  18. package/dist/commands/claude-desktop.d.ts.map +1 -1
  19. package/dist/commands/claude-desktop.js +2 -2
  20. package/dist/commands/context.js +1 -6
  21. package/dist/commands/decision.d.ts.map +1 -1
  22. package/dist/commands/decision.js +22 -38
  23. package/dist/commands/docs.d.ts.map +1 -1
  24. package/dist/commands/docs.js +91 -28
  25. package/dist/commands/doctor.d.ts +4 -2
  26. package/dist/commands/doctor.d.ts.map +1 -1
  27. package/dist/commands/doctor.js +55 -7
  28. package/dist/commands/events.d.ts +5 -0
  29. package/dist/commands/events.d.ts.map +1 -0
  30. package/dist/commands/events.js +189 -0
  31. package/dist/commands/governor.d.ts.map +1 -1
  32. package/dist/commands/governor.js +13 -4
  33. package/dist/commands/init.d.ts +10 -2
  34. package/dist/commands/init.d.ts.map +1 -1
  35. package/dist/commands/init.js +233 -51
  36. package/dist/commands/instructions.d.ts +4 -0
  37. package/dist/commands/instructions.d.ts.map +1 -0
  38. package/dist/commands/instructions.js +100 -0
  39. package/dist/commands/journal.d.ts.map +1 -1
  40. package/dist/commands/journal.js +4 -13
  41. package/dist/commands/ledger-v3.d.ts +5 -0
  42. package/dist/commands/ledger-v3.d.ts.map +1 -0
  43. package/dist/commands/ledger-v3.js +91 -0
  44. package/dist/commands/presence.d.ts.map +1 -1
  45. package/dist/commands/presence.js +15 -6
  46. package/dist/commands/sync.d.ts +1 -1
  47. package/dist/commands/sync.js +1 -1
  48. package/dist/commands/web.d.ts +6 -0
  49. package/dist/commands/web.d.ts.map +1 -1
  50. package/dist/commands/web.js +67 -7
  51. package/dist/commands/work.d.ts.map +1 -1
  52. package/dist/commands/work.js +22 -5
  53. package/dist/core/adapter.d.ts +5 -0
  54. package/dist/core/adapter.d.ts.map +1 -0
  55. package/dist/core/adapter.js +1 -0
  56. package/dist/core/adapters/attest.d.ts +5 -2
  57. package/dist/core/adapters/attest.d.ts.map +1 -1
  58. package/dist/core/adapters/attest.js +8 -3
  59. package/dist/core/adapters/profiles.d.ts +6 -6
  60. package/dist/core/adapters/profiles.d.ts.map +1 -1
  61. package/dist/core/adapters/profiles.js +4 -4
  62. package/dist/core/agents/canonical-emit.d.ts +17 -15
  63. package/dist/core/agents/canonical-emit.d.ts.map +1 -1
  64. package/dist/core/agents/canonical-emit.js +27 -25
  65. package/dist/core/agents/cli.js +212 -235
  66. package/dist/core/agents/codex-archive-v3.d.ts +14 -0
  67. package/dist/core/agents/codex-archive-v3.d.ts.map +1 -0
  68. package/dist/core/agents/codex-archive-v3.js +110 -0
  69. package/dist/core/agents/coord-client.d.ts +19 -70
  70. package/dist/core/agents/coord-client.d.ts.map +1 -1
  71. package/dist/core/agents/coord-client.js +65 -155
  72. package/dist/core/agents/finalization.d.ts +4 -1
  73. package/dist/core/agents/finalization.d.ts.map +1 -1
  74. package/dist/core/agents/finalization.js +89 -32
  75. package/dist/core/agents/index.d.ts +5 -5
  76. package/dist/core/agents/index.d.ts.map +1 -1
  77. package/dist/core/agents/index.js +5 -5
  78. package/dist/core/agents/live-authority-v3.d.ts +59 -0
  79. package/dist/core/agents/live-authority-v3.d.ts.map +1 -0
  80. package/dist/core/agents/live-authority-v3.js +233 -0
  81. package/dist/core/agents/live-lifecycle-v3.d.ts +20 -0
  82. package/dist/core/agents/live-lifecycle-v3.d.ts.map +1 -0
  83. package/dist/core/agents/live-lifecycle-v3.js +91 -0
  84. package/dist/core/agents/live-observation-v3.d.ts +25 -0
  85. package/dist/core/agents/live-observation-v3.d.ts.map +1 -0
  86. package/dist/core/agents/live-observation-v3.js +157 -0
  87. package/dist/core/agents/render/prompt-context.d.ts +10 -4
  88. package/dist/core/agents/render/prompt-context.d.ts.map +1 -1
  89. package/dist/core/agents/render/prompt-context.js +61 -55
  90. package/dist/core/agents/render/session-context.d.ts +1 -1
  91. package/dist/core/agents/render/session-context.d.ts.map +1 -1
  92. package/dist/core/agents/render/session-context.js +15 -33
  93. package/dist/core/agents/rules/claim-conflict.d.ts +3 -3
  94. package/dist/core/agents/rules/claim-conflict.d.ts.map +1 -1
  95. package/dist/core/agents/rules/claim-conflict.js +79 -127
  96. package/dist/core/agents/rules/commit-conflict.d.ts.map +1 -1
  97. package/dist/core/agents/rules/commit-conflict.js +3 -18
  98. package/dist/core/agents/rules/stop-hook.d.ts +9 -50
  99. package/dist/core/agents/rules/stop-hook.d.ts.map +1 -1
  100. package/dist/core/agents/rules/stop-hook.js +193 -236
  101. package/dist/core/agents/session-events.d.ts +5 -7
  102. package/dist/core/agents/session-events.d.ts.map +1 -1
  103. package/dist/core/agents/session-events.js +127 -95
  104. package/dist/core/agents/session-finalization-state-v3.d.ts +30 -0
  105. package/dist/core/agents/session-finalization-state-v3.d.ts.map +1 -0
  106. package/dist/core/agents/session-finalization-state-v3.js +40 -0
  107. package/dist/core/agents/session-finalizer-v3.d.ts +107 -0
  108. package/dist/core/agents/session-finalizer-v3.d.ts.map +1 -0
  109. package/dist/core/agents/session-finalizer-v3.js +734 -0
  110. package/dist/core/agents/session-name-display.d.ts +40 -0
  111. package/dist/core/agents/session-name-display.d.ts.map +1 -0
  112. package/dist/core/agents/session-name-display.js +119 -0
  113. package/dist/core/agents/state/activity-log.d.ts +3 -3
  114. package/dist/core/agents/state/activity-log.d.ts.map +1 -1
  115. package/dist/core/agents/state/activity-log.js +7 -16
  116. package/dist/core/agents/state/heartbeat-writer.d.ts +29 -46
  117. package/dist/core/agents/state/heartbeat-writer.d.ts.map +1 -1
  118. package/dist/core/agents/state/heartbeat-writer.js +59 -199
  119. package/dist/core/agents/state/live-coordination-view.d.ts +31 -0
  120. package/dist/core/agents/state/live-coordination-view.d.ts.map +1 -0
  121. package/dist/core/agents/state/live-coordination-view.js +209 -0
  122. package/dist/core/agents/state/session-state.d.ts +45 -0
  123. package/dist/core/agents/state/session-state.d.ts.map +1 -0
  124. package/dist/core/agents/state/session-state.js +90 -0
  125. package/dist/core/agents/state/stale-sweep.d.ts +1 -1
  126. package/dist/core/agents/state/stale-sweep.d.ts.map +1 -1
  127. package/dist/core/agents/state/stale-sweep.js +26 -15
  128. package/dist/core/artifacts/index.d.ts.map +1 -1
  129. package/dist/core/artifacts/index.js +5 -7
  130. package/dist/core/config.d.ts +33 -2
  131. package/dist/core/config.d.ts.map +1 -1
  132. package/dist/core/config.js +98 -2
  133. package/dist/core/context/index.d.ts +1 -4
  134. package/dist/core/context/index.d.ts.map +1 -1
  135. package/dist/core/context/index.js +9 -9
  136. package/dist/core/events/span-parent.d.ts +15 -0
  137. package/dist/core/events/span-parent.d.ts.map +1 -0
  138. package/dist/core/events/span-parent.js +34 -0
  139. package/dist/core/events/v3/advance.d.ts +14 -0
  140. package/dist/core/events/v3/advance.d.ts.map +1 -0
  141. package/dist/core/events/v3/advance.js +134 -0
  142. package/dist/core/events/v3/authority-outbox.d.ts +78 -0
  143. package/dist/core/events/v3/authority-outbox.d.ts.map +1 -0
  144. package/dist/core/events/v3/authority-outbox.js +399 -0
  145. package/dist/core/events/v3/base-builder.d.ts +20 -0
  146. package/dist/core/events/v3/base-builder.d.ts.map +1 -0
  147. package/dist/core/events/v3/base-builder.js +29 -0
  148. package/dist/core/events/v3/base-contract.d.ts +7576 -0
  149. package/dist/core/events/v3/base-contract.d.ts.map +1 -0
  150. package/dist/core/events/v3/base-contract.js +647 -0
  151. package/dist/core/events/v3/bootstrap.d.ts +34 -0
  152. package/dist/core/events/v3/bootstrap.d.ts.map +1 -0
  153. package/dist/core/events/v3/bootstrap.js +175 -0
  154. package/dist/core/events/v3/builder.d.ts +20 -0
  155. package/dist/core/events/v3/builder.d.ts.map +1 -0
  156. package/dist/core/events/v3/builder.js +28 -0
  157. package/dist/core/events/v3/canonical.d.ts +31 -0
  158. package/dist/core/events/v3/canonical.d.ts.map +1 -0
  159. package/dist/core/events/v3/canonical.js +100 -0
  160. package/dist/core/events/v3/capabilities.d.ts +31 -0
  161. package/dist/core/events/v3/capabilities.d.ts.map +1 -0
  162. package/dist/core/events/v3/capabilities.js +107 -0
  163. package/dist/core/events/v3/capability-drift.d.ts +22 -0
  164. package/dist/core/events/v3/capability-drift.d.ts.map +1 -0
  165. package/dist/core/events/v3/capability-drift.js +134 -0
  166. package/dist/core/events/v3/catalog.d.ts +38 -0
  167. package/dist/core/events/v3/catalog.d.ts.map +1 -0
  168. package/dist/core/events/v3/catalog.js +135 -0
  169. package/dist/core/events/v3/clock-order.d.ts +34 -0
  170. package/dist/core/events/v3/clock-order.d.ts.map +1 -0
  171. package/dist/core/events/v3/clock-order.js +35 -0
  172. package/dist/core/events/v3/contract.d.ts +171 -0
  173. package/dist/core/events/v3/contract.d.ts.map +1 -0
  174. package/dist/core/events/v3/contract.js +180 -0
  175. package/dist/core/events/v3/control.d.ts +111 -0
  176. package/dist/core/events/v3/control.d.ts.map +1 -0
  177. package/dist/core/events/v3/control.js +419 -0
  178. package/dist/core/events/v3/coordination-view.d.ts +69 -0
  179. package/dist/core/events/v3/coordination-view.d.ts.map +1 -0
  180. package/dist/core/events/v3/coordination-view.js +119 -0
  181. package/dist/core/events/v3/economics.d.ts +77 -0
  182. package/dist/core/events/v3/economics.d.ts.map +1 -0
  183. package/dist/core/events/v3/economics.js +274 -0
  184. package/dist/core/events/v3/finalization-view.d.ts +26 -0
  185. package/dist/core/events/v3/finalization-view.d.ts.map +1 -0
  186. package/dist/core/events/v3/finalization-view.js +37 -0
  187. package/dist/core/events/v3/fingerprint-keys.d.ts +25 -0
  188. package/dist/core/events/v3/fingerprint-keys.d.ts.map +1 -0
  189. package/dist/core/events/v3/fingerprint-keys.js +217 -0
  190. package/dist/core/events/v3/generated.d.ts +4 -0
  191. package/dist/core/events/v3/generated.d.ts.map +1 -0
  192. package/dist/core/events/v3/generated.js +47 -0
  193. package/dist/core/events/v3/ids.d.ts +9 -0
  194. package/dist/core/events/v3/ids.d.ts.map +1 -0
  195. package/dist/core/events/v3/ids.js +25 -0
  196. package/dist/core/events/v3/index.d.ts +35 -0
  197. package/dist/core/events/v3/index.d.ts.map +1 -0
  198. package/dist/core/events/v3/index.js +33 -0
  199. package/dist/core/events/v3/latency.d.ts +63 -0
  200. package/dist/core/events/v3/latency.d.ts.map +1 -0
  201. package/dist/core/events/v3/latency.js +412 -0
  202. package/dist/core/events/v3/live-feed.d.ts +45 -0
  203. package/dist/core/events/v3/live-feed.d.ts.map +1 -0
  204. package/dist/core/events/v3/live-feed.js +246 -0
  205. package/dist/core/events/v3/live-observation.d.ts +35 -0
  206. package/dist/core/events/v3/live-observation.d.ts.map +1 -0
  207. package/dist/core/events/v3/live-observation.js +1 -0
  208. package/dist/core/events/v3/live-routing.d.ts +57 -0
  209. package/dist/core/events/v3/live-routing.d.ts.map +1 -0
  210. package/dist/core/events/v3/live-routing.js +107 -0
  211. package/dist/core/events/v3/producers/command-recorder.d.ts +67 -0
  212. package/dist/core/events/v3/producers/command-recorder.d.ts.map +1 -0
  213. package/dist/core/events/v3/producers/command-recorder.js +477 -0
  214. package/dist/core/events/v3/producers/command.d.ts +50 -0
  215. package/dist/core/events/v3/producers/command.d.ts.map +1 -0
  216. package/dist/core/events/v3/producers/command.js +135 -0
  217. package/dist/core/events/v3/producers/coordination-recorder.d.ts +53 -0
  218. package/dist/core/events/v3/producers/coordination-recorder.d.ts.map +1 -0
  219. package/dist/core/events/v3/producers/coordination-recorder.js +376 -0
  220. package/dist/core/events/v3/producers/coordination.d.ts +90 -0
  221. package/dist/core/events/v3/producers/coordination.d.ts.map +1 -0
  222. package/dist/core/events/v3/producers/coordination.js +229 -0
  223. package/dist/core/events/v3/producers/hook-base.d.ts +54 -0
  224. package/dist/core/events/v3/producers/hook-base.d.ts.map +1 -0
  225. package/dist/core/events/v3/producers/hook-base.js +424 -0
  226. package/dist/core/events/v3/producers/hook.d.ts +29 -0
  227. package/dist/core/events/v3/producers/hook.d.ts.map +1 -0
  228. package/dist/core/events/v3/producers/hook.js +71 -0
  229. package/dist/core/events/v3/producers/intake.d.ts +65 -0
  230. package/dist/core/events/v3/producers/intake.d.ts.map +1 -0
  231. package/dist/core/events/v3/producers/intake.js +244 -0
  232. package/dist/core/events/v3/producers/recorder.d.ts +240 -0
  233. package/dist/core/events/v3/producers/recorder.d.ts.map +1 -0
  234. package/dist/core/events/v3/producers/recorder.js +2176 -0
  235. package/dist/core/events/v3/projection.d.ts +101 -0
  236. package/dist/core/events/v3/projection.d.ts.map +1 -0
  237. package/dist/core/events/v3/projection.js +479 -0
  238. package/dist/core/events/v3/reader.d.ts +75 -0
  239. package/dist/core/events/v3/reader.d.ts.map +1 -0
  240. package/dist/core/events/v3/reader.js +778 -0
  241. package/dist/core/events/v3/recovery-record.d.ts +47 -0
  242. package/dist/core/events/v3/recovery-record.d.ts.map +1 -0
  243. package/dist/core/events/v3/recovery-record.js +167 -0
  244. package/dist/core/events/v3/recovery.d.ts +22 -0
  245. package/dist/core/events/v3/recovery.d.ts.map +1 -0
  246. package/dist/core/events/v3/recovery.js +227 -0
  247. package/dist/core/events/v3/span-state.d.ts +52 -0
  248. package/dist/core/events/v3/span-state.d.ts.map +1 -0
  249. package/dist/core/events/v3/span-state.js +142 -0
  250. package/dist/core/events/v3/targets.d.ts +23 -0
  251. package/dist/core/events/v3/targets.d.ts.map +1 -0
  252. package/dist/core/events/v3/targets.js +134 -0
  253. package/dist/core/events/v3/turn-telemetry.d.ts +41 -0
  254. package/dist/core/events/v3/turn-telemetry.d.ts.map +1 -0
  255. package/dist/core/events/v3/turn-telemetry.js +168 -0
  256. package/dist/core/events/v3/validate.d.ts +9 -0
  257. package/dist/core/events/v3/validate.d.ts.map +1 -0
  258. package/dist/core/events/v3/validate.js +281 -0
  259. package/dist/core/events/v3/writer.d.ts +56 -0
  260. package/dist/core/events/v3/writer.d.ts.map +1 -0
  261. package/dist/core/events/v3/writer.js +335 -0
  262. package/dist/core/governor/index.d.ts +1 -1
  263. package/dist/core/governor/index.d.ts.map +1 -1
  264. package/dist/core/governor/index.js +1 -1
  265. package/dist/core/governor/plan-api.d.ts +2 -1
  266. package/dist/core/governor/plan-api.d.ts.map +1 -1
  267. package/dist/core/governor/plan-api.js +6 -3
  268. package/dist/core/governor/read.d.ts +1 -1
  269. package/dist/core/governor/read.d.ts.map +1 -1
  270. package/dist/core/governor/read.js +1 -1
  271. package/dist/core/governor/state.d.ts +9 -0
  272. package/dist/core/governor/state.d.ts.map +1 -1
  273. package/dist/core/governor/state.js +40 -3
  274. package/dist/core/guard/config.d.ts +5 -0
  275. package/dist/core/guard/config.d.ts.map +1 -0
  276. package/dist/core/guard/config.js +157 -0
  277. package/dist/core/guard/coordinator.d.ts +14 -0
  278. package/dist/core/guard/coordinator.d.ts.map +1 -0
  279. package/dist/core/guard/coordinator.js +173 -0
  280. package/dist/core/guard/evaluator.d.ts +4 -0
  281. package/dist/core/guard/evaluator.d.ts.map +1 -0
  282. package/dist/core/guard/evaluator.js +242 -0
  283. package/dist/core/guard/evidence-v3.d.ts +15 -0
  284. package/dist/core/guard/evidence-v3.d.ts.map +1 -0
  285. package/dist/core/guard/evidence-v3.js +171 -0
  286. package/dist/core/guard/index.d.ts +10 -0
  287. package/dist/core/guard/index.d.ts.map +1 -0
  288. package/dist/core/guard/index.js +6 -0
  289. package/dist/core/guard/live-source-v3.d.ts +40 -0
  290. package/dist/core/guard/live-source-v3.d.ts.map +1 -0
  291. package/dist/core/guard/live-source-v3.js +128 -0
  292. package/dist/core/guard/storage.d.ts +27 -0
  293. package/dist/core/guard/storage.d.ts.map +1 -0
  294. package/dist/core/guard/storage.js +140 -0
  295. package/dist/core/guard/types.d.ts +119 -0
  296. package/dist/core/guard/types.d.ts.map +1 -0
  297. package/dist/core/guard/types.js +1 -0
  298. package/dist/core/hooks/adapter/detect.d.ts +18 -1
  299. package/dist/core/hooks/adapter/detect.d.ts.map +1 -1
  300. package/dist/core/hooks/adapter/detect.js +29 -0
  301. package/dist/core/hooks/adapter/events.d.ts +7 -4
  302. package/dist/core/hooks/adapter/events.d.ts.map +1 -1
  303. package/dist/core/hooks/adapter/events.js +13 -4
  304. package/dist/core/hooks/adapter/output.d.ts +2 -2
  305. package/dist/core/hooks/adapter/output.d.ts.map +1 -1
  306. package/dist/core/hooks/adapter/parse.d.ts +7 -4
  307. package/dist/core/hooks/adapter/parse.d.ts.map +1 -1
  308. package/dist/core/hooks/adapter/parse.js +64 -24
  309. package/dist/core/hooks/adapter/wiring.d.ts +30 -4
  310. package/dist/core/hooks/adapter/wiring.d.ts.map +1 -1
  311. package/dist/core/hooks/adapter/wiring.js +89 -11
  312. package/dist/core/hooks/cli.d.ts +1 -1
  313. package/dist/core/hooks/cli.js +345 -400
  314. package/dist/core/hooks/codex-authorization.d.ts +30 -0
  315. package/dist/core/hooks/codex-authorization.d.ts.map +1 -0
  316. package/dist/core/hooks/codex-authorization.js +199 -0
  317. package/dist/core/hooks/effects/image-capture.d.ts +20 -34
  318. package/dist/core/hooks/effects/image-capture.d.ts.map +1 -1
  319. package/dist/core/hooks/effects/image-capture.js +212 -221
  320. package/dist/core/hooks/effects/index.d.ts +1 -9
  321. package/dist/core/hooks/effects/index.d.ts.map +1 -1
  322. package/dist/core/hooks/effects/index.js +1 -24
  323. package/dist/core/hooks/events/input-hash.d.ts +7 -0
  324. package/dist/core/hooks/events/input-hash.d.ts.map +1 -0
  325. package/dist/core/hooks/events/input-hash.js +43 -0
  326. package/dist/core/hooks/index.d.ts +4 -3
  327. package/dist/core/hooks/index.d.ts.map +1 -1
  328. package/dist/core/hooks/index.js +2 -3
  329. package/dist/core/hooks/resolve/coord-root.d.ts +1 -1
  330. package/dist/core/hooks/resolve/coord-root.js +1 -1
  331. package/dist/core/hooks/resolve/owner.d.ts +16 -15
  332. package/dist/core/hooks/resolve/owner.d.ts.map +1 -1
  333. package/dist/core/hooks/resolve/owner.js +51 -42
  334. package/dist/core/hooks/resolve/transcript.d.ts +33 -3
  335. package/dist/core/hooks/resolve/transcript.d.ts.map +1 -1
  336. package/dist/core/hooks/resolve/transcript.js +155 -14
  337. package/dist/core/hooks/session-name-presence.d.ts +9 -10
  338. package/dist/core/hooks/session-name-presence.d.ts.map +1 -1
  339. package/dist/core/hooks/session-name-presence.js +15 -15
  340. package/dist/core/hooks/unsafe-cross-shell.d.ts +1 -1
  341. package/dist/core/hooks/unsafe-cross-shell.d.ts.map +1 -1
  342. package/dist/core/journal/index.d.ts +2 -2
  343. package/dist/core/journal/index.d.ts.map +1 -1
  344. package/dist/core/journal/index.js +9 -22
  345. package/dist/core/presence/blob.d.ts +8 -3
  346. package/dist/core/presence/blob.d.ts.map +1 -1
  347. package/dist/core/presence/blob.js +54 -41
  348. package/dist/core/presence/codec-digest.d.ts +29 -0
  349. package/dist/core/presence/codec-digest.d.ts.map +1 -0
  350. package/dist/core/presence/codec-digest.js +170 -0
  351. package/dist/core/presence/index.js +15 -1
  352. package/dist/core/presence/relay-client.d.ts +1 -1
  353. package/dist/core/presence/relay-client.d.ts.map +1 -1
  354. package/dist/core/presence/relay-client.js +5 -5
  355. package/dist/core/work/index.d.ts +1 -1
  356. package/dist/core/work/index.d.ts.map +1 -1
  357. package/dist/core/work/index.js +1 -1
  358. package/dist/core/work/read.d.ts +1 -1
  359. package/dist/core/work/read.d.ts.map +1 -1
  360. package/dist/core/work/read.js +1 -1
  361. package/dist/core/work/runner.d.ts.map +1 -1
  362. package/dist/core/work/runner.js +6 -0
  363. package/dist/core/work/state.d.ts +9 -0
  364. package/dist/core/work/state.d.ts.map +1 -1
  365. package/dist/core/work/state.js +17 -3
  366. package/dist/core/workflow/engine.js +24 -25
  367. package/dist/core/workflow/live-session-v3.d.ts +19 -0
  368. package/dist/core/workflow/live-session-v3.d.ts.map +1 -0
  369. package/dist/core/workflow/live-session-v3.js +86 -0
  370. package/dist/core/workflow/scope-id.d.ts +3 -0
  371. package/dist/core/workflow/scope-id.d.ts.map +1 -0
  372. package/dist/core/workflow/scope-id.js +5 -0
  373. package/dist/core/workflow/workspaces/leases.d.ts +4 -0
  374. package/dist/core/workflow/workspaces/leases.d.ts.map +1 -1
  375. package/dist/core/workflow/workspaces/leases.js +53 -19
  376. package/dist/index.d.ts +1 -1
  377. package/dist/index.js +1 -1
  378. package/dist/lib/browser/client.d.ts +41 -0
  379. package/dist/lib/browser/client.d.ts.map +1 -1
  380. package/dist/lib/browser/client.js +203 -0
  381. package/dist/lib/browser/critique.d.ts +28 -2
  382. package/dist/lib/browser/critique.d.ts.map +1 -1
  383. package/dist/lib/browser/critique.js +74 -18
  384. package/dist/lib/browser/geometry.d.ts +1 -1
  385. package/dist/lib/browser/geometry.d.ts.map +1 -1
  386. package/dist/lib/browser/geometry.js +130 -6
  387. package/dist/lib/browser/index.d.ts +3 -0
  388. package/dist/lib/browser/index.d.ts.map +1 -1
  389. package/dist/lib/browser/index.js +3 -0
  390. package/dist/lib/browser/qa-plan.d.ts +174 -0
  391. package/dist/lib/browser/qa-plan.d.ts.map +1 -0
  392. package/dist/lib/browser/qa-plan.js +321 -0
  393. package/dist/lib/browser/qa-reuse.d.ts +99 -0
  394. package/dist/lib/browser/qa-reuse.d.ts.map +1 -0
  395. package/dist/lib/browser/qa-reuse.js +222 -0
  396. package/dist/lib/browser/qa-snapshot.d.ts +64 -0
  397. package/dist/lib/browser/qa-snapshot.d.ts.map +1 -0
  398. package/dist/lib/browser/qa-snapshot.js +171 -0
  399. package/dist/lib/browser/runts.d.ts.map +1 -1
  400. package/dist/lib/browser/runts.js +22 -1
  401. package/dist/lib/browser/tiling.d.ts +71 -0
  402. package/dist/lib/browser/tiling.d.ts.map +1 -0
  403. package/dist/lib/browser/tiling.js +118 -0
  404. package/dist/lib/context/index.d.ts +0 -3
  405. package/dist/lib/context/index.d.ts.map +1 -1
  406. package/dist/lib/context/index.js +20 -42
  407. package/dist/lib/council/index.d.ts +2 -2
  408. package/dist/lib/council/index.d.ts.map +1 -1
  409. package/dist/lib/council/index.js +9 -20
  410. package/dist/lib/docs-frontmatter.d.ts +1 -6
  411. package/dist/lib/docs-frontmatter.d.ts.map +1 -1
  412. package/dist/lib/docs-frontmatter.js +12 -78
  413. package/dist/lib/docs-index.d.ts +9 -0
  414. package/dist/lib/docs-index.d.ts.map +1 -1
  415. package/dist/lib/docs-index.js +32 -3
  416. package/dist/lib/docs-lint.d.ts.map +1 -1
  417. package/dist/lib/docs-lint.js +14 -30
  418. package/dist/lib/docs-metadata-audit.d.ts +19 -0
  419. package/dist/lib/docs-metadata-audit.d.ts.map +1 -0
  420. package/dist/lib/docs-metadata-audit.js +132 -0
  421. package/dist/lib/docs-metadata-managed.d.ts +23 -0
  422. package/dist/lib/docs-metadata-managed.d.ts.map +1 -0
  423. package/dist/lib/docs-metadata-managed.js +78 -0
  424. package/dist/lib/docs-metadata-sync.d.ts +20 -0
  425. package/dist/lib/docs-metadata-sync.d.ts.map +1 -0
  426. package/dist/lib/docs-metadata-sync.js +222 -0
  427. package/dist/lib/docs-metadata-v2-schema.d.ts +273 -0
  428. package/dist/lib/docs-metadata-v2-schema.d.ts.map +1 -0
  429. package/dist/lib/docs-metadata-v2-schema.js +134 -0
  430. package/dist/lib/docs-metadata-v2.d.ts +21 -0
  431. package/dist/lib/docs-metadata-v2.d.ts.map +1 -0
  432. package/dist/lib/docs-metadata-v2.js +424 -0
  433. package/dist/lib/docs-new.d.ts +11 -0
  434. package/dist/lib/docs-new.d.ts.map +1 -0
  435. package/dist/lib/docs-new.js +52 -0
  436. package/dist/lib/docs-sweep.d.ts.map +1 -1
  437. package/dist/lib/docs-sweep.js +45 -29
  438. package/dist/lib/headless/index.d.ts +98 -0
  439. package/dist/lib/headless/index.d.ts.map +1 -0
  440. package/dist/lib/headless/index.js +211 -0
  441. package/dist/lib/identities/assume.d.ts +4 -4
  442. package/dist/lib/identities/assume.d.ts.map +1 -1
  443. package/dist/lib/identities/assume.js +52 -68
  444. package/dist/lib/instructions/apply.d.ts +5 -4
  445. package/dist/lib/instructions/apply.d.ts.map +1 -1
  446. package/dist/lib/instructions/apply.js +32 -20
  447. package/dist/lib/instructions/bundle.d.ts +33 -0
  448. package/dist/lib/instructions/bundle.d.ts.map +1 -0
  449. package/dist/lib/instructions/bundle.js +149 -0
  450. package/dist/lib/instructions/splice.d.ts +0 -1
  451. package/dist/lib/instructions/splice.d.ts.map +1 -1
  452. package/dist/lib/instructions/splice.js +22 -6
  453. package/dist/lib/instructions/templates.d.ts +7 -5
  454. package/dist/lib/instructions/templates.d.ts.map +1 -1
  455. package/dist/lib/instructions/templates.js +79 -9
  456. package/package.json +27 -6
  457. package/schemas/config.schema.json +120 -2
  458. package/schemas/docs-metadata-v2.schema.json +441 -0
  459. package/schemas/event-v3.schema.json +24472 -0
  460. package/src/commander.ts +7 -1
  461. package/src/commands/adapter.ts +2 -2
  462. package/src/commands/agents.ts +1737 -570
  463. package/src/commands/artifacts.ts +7 -6
  464. package/src/commands/backup.ts +29 -21
  465. package/src/commands/browse.ts +349 -8
  466. package/src/commands/checkpoint.ts +4 -3
  467. package/src/commands/claude-desktop.ts +7 -5
  468. package/src/commands/context.ts +1 -6
  469. package/src/commands/decision.ts +27 -44
  470. package/src/commands/docs.ts +100 -33
  471. package/src/commands/doctor.ts +73 -8
  472. package/src/commands/events.ts +256 -0
  473. package/src/commands/governor.ts +18 -4
  474. package/src/commands/init.ts +264 -57
  475. package/src/commands/instructions.ts +129 -0
  476. package/src/commands/journal.ts +4 -13
  477. package/src/commands/ledger-v3.ts +111 -0
  478. package/src/commands/presence.ts +18 -11
  479. package/src/commands/sync.ts +1 -1
  480. package/src/commands/web.ts +67 -8
  481. package/src/commands/work.ts +28 -5
  482. package/src/core/adapter.ts +5 -0
  483. package/src/core/adapters/attest.ts +8 -3
  484. package/src/core/adapters/profiles.ts +4 -6
  485. package/src/core/agents/canonical-emit.ts +39 -28
  486. package/src/core/agents/cli.ts +242 -263
  487. package/src/core/agents/codex-archive-v3.ts +138 -0
  488. package/src/core/agents/coord-client.ts +75 -177
  489. package/src/core/agents/finalization.ts +120 -38
  490. package/src/core/agents/index.ts +5 -5
  491. package/src/core/agents/live-authority-v3.ts +375 -0
  492. package/src/core/agents/live-lifecycle-v3.ts +140 -0
  493. package/src/core/agents/live-observation-v3.ts +216 -0
  494. package/src/core/agents/render/prompt-context.ts +89 -55
  495. package/src/core/agents/render/session-context.ts +23 -32
  496. package/src/core/agents/rules/claim-conflict.ts +85 -126
  497. package/src/core/agents/rules/commit-conflict.ts +3 -14
  498. package/src/core/agents/rules/stop-hook.ts +239 -293
  499. package/src/core/agents/session-events.ts +137 -104
  500. package/src/core/agents/session-finalization-state-v3.ts +90 -0
  501. package/src/core/agents/session-finalizer-v3.ts +953 -0
  502. package/src/core/agents/session-name-display.ts +149 -0
  503. package/src/core/agents/state/activity-log.ts +6 -14
  504. package/src/core/agents/state/heartbeat-writer.ts +98 -242
  505. package/src/core/agents/state/live-coordination-view.ts +290 -0
  506. package/src/core/agents/state/session-state.ts +143 -0
  507. package/src/core/agents/state/stale-sweep.ts +40 -17
  508. package/src/core/artifacts/index.ts +4 -5
  509. package/src/core/config.ts +148 -3
  510. package/src/core/context/index.ts +9 -17
  511. package/src/core/events/span-parent.ts +46 -0
  512. package/src/core/events/v3/advance.ts +168 -0
  513. package/src/core/events/v3/authority-outbox.ts +548 -0
  514. package/src/core/events/v3/base-builder.ts +60 -0
  515. package/src/core/events/v3/base-contract.ts +882 -0
  516. package/src/core/events/v3/bootstrap.ts +226 -0
  517. package/src/core/events/v3/builder.ts +59 -0
  518. package/src/core/events/v3/canonical.ts +153 -0
  519. package/src/core/events/v3/capabilities.ts +171 -0
  520. package/src/core/events/v3/capability-drift.ts +177 -0
  521. package/src/core/events/v3/catalog.ts +202 -0
  522. package/src/core/events/v3/clock-order.ts +41 -0
  523. package/src/core/events/v3/contract.ts +365 -0
  524. package/src/core/events/v3/control.ts +576 -0
  525. package/src/core/events/v3/coordination-view.ts +193 -0
  526. package/src/core/events/v3/economics.ts +384 -0
  527. package/src/core/events/v3/finalization-view.ts +67 -0
  528. package/src/core/events/v3/fingerprint-keys.ts +260 -0
  529. package/src/core/events/v3/generated.ts +48 -0
  530. package/src/core/events/v3/ids.ts +33 -0
  531. package/src/core/events/v3/index.ts +322 -0
  532. package/src/core/events/v3/latency.ts +551 -0
  533. package/src/core/events/v3/live-feed.ts +319 -0
  534. package/src/core/events/v3/live-observation.ts +39 -0
  535. package/src/core/events/v3/live-routing.ts +135 -0
  536. package/src/core/events/v3/producers/command-recorder.ts +631 -0
  537. package/src/core/events/v3/producers/command.ts +201 -0
  538. package/src/core/events/v3/producers/coordination-recorder.ts +538 -0
  539. package/src/core/events/v3/producers/coordination.ts +355 -0
  540. package/src/core/events/v3/producers/hook-base.ts +578 -0
  541. package/src/core/events/v3/producers/hook.ts +119 -0
  542. package/src/core/events/v3/producers/intake.ts +319 -0
  543. package/src/core/events/v3/producers/recorder.ts +2805 -0
  544. package/src/core/events/v3/projection.ts +653 -0
  545. package/src/core/events/v3/reader.ts +1127 -0
  546. package/src/core/events/v3/recovery-record.ts +244 -0
  547. package/src/core/events/v3/recovery.ts +271 -0
  548. package/src/core/events/v3/span-state.ts +187 -0
  549. package/src/core/events/v3/targets.ts +182 -0
  550. package/src/core/events/v3/turn-telemetry.ts +259 -0
  551. package/src/core/events/v3/validate.ts +361 -0
  552. package/src/core/events/v3/writer.ts +419 -0
  553. package/src/core/governor/index.ts +3 -0
  554. package/src/core/governor/plan-api.ts +10 -2
  555. package/src/core/governor/read.ts +3 -0
  556. package/src/core/governor/state.ts +52 -5
  557. package/src/core/guard/config.ts +206 -0
  558. package/src/core/guard/coordinator.ts +227 -0
  559. package/src/core/guard/evaluator.ts +343 -0
  560. package/src/core/guard/evidence-v3.ts +227 -0
  561. package/src/core/guard/index.ts +35 -0
  562. package/src/core/guard/live-source-v3.ts +204 -0
  563. package/src/core/guard/storage.ts +188 -0
  564. package/src/core/guard/types.ts +152 -0
  565. package/src/core/hooks/adapter/detect.ts +28 -1
  566. package/src/core/hooks/adapter/events.ts +15 -6
  567. package/src/core/hooks/adapter/output.ts +7 -2
  568. package/src/core/hooks/adapter/parse.ts +81 -36
  569. package/src/core/hooks/adapter/wiring.ts +119 -13
  570. package/src/core/hooks/cli.ts +398 -422
  571. package/src/core/hooks/codex-authorization.ts +253 -0
  572. package/src/core/hooks/effects/image-capture.ts +228 -238
  573. package/src/core/hooks/effects/index.ts +1 -36
  574. package/src/core/hooks/events/input-hash.ts +47 -0
  575. package/src/core/hooks/index.ts +4 -11
  576. package/src/core/hooks/resolve/coord-root.ts +1 -1
  577. package/src/core/hooks/resolve/owner.ts +52 -45
  578. package/src/core/hooks/resolve/transcript.ts +165 -14
  579. package/src/core/hooks/session-name-presence.ts +14 -15
  580. package/src/core/hooks/unsafe-cross-shell.ts +1 -1
  581. package/src/core/journal/index.ts +15 -22
  582. package/src/core/presence/blob.ts +63 -38
  583. package/src/core/presence/codec-digest.ts +215 -0
  584. package/src/core/presence/index.ts +18 -1
  585. package/src/core/presence/relay-client.ts +5 -5
  586. package/src/core/work/index.ts +3 -0
  587. package/src/core/work/read.ts +3 -0
  588. package/src/core/work/runner.ts +6 -0
  589. package/src/core/work/state.ts +27 -3
  590. package/src/core/workflow/engine.ts +24 -24
  591. package/src/core/workflow/live-session-v3.ts +126 -0
  592. package/src/core/workflow/scope-id.ts +6 -0
  593. package/src/core/workflow/workspaces/leases.ts +56 -19
  594. package/src/index.ts +1 -1
  595. package/src/lib/browser/client.ts +230 -0
  596. package/src/lib/browser/critique.ts +104 -27
  597. package/src/lib/browser/geometry.ts +143 -14
  598. package/src/lib/browser/index.ts +34 -0
  599. package/src/lib/browser/qa-plan.ts +501 -0
  600. package/src/lib/browser/qa-reuse.ts +306 -0
  601. package/src/lib/browser/qa-snapshot.ts +223 -0
  602. package/src/lib/browser/runts.ts +27 -2
  603. package/src/lib/browser/tiling.ts +164 -0
  604. package/src/lib/context/index.ts +22 -46
  605. package/src/lib/council/index.ts +9 -21
  606. package/src/lib/docs-frontmatter.ts +8 -79
  607. package/src/lib/docs-index.ts +33 -3
  608. package/src/lib/docs-lint.ts +15 -29
  609. package/src/lib/docs-metadata-audit.ts +166 -0
  610. package/src/lib/docs-metadata-managed.ts +83 -0
  611. package/src/lib/docs-metadata-sync.ts +262 -0
  612. package/src/lib/docs-metadata-v2-schema.ts +138 -0
  613. package/src/lib/docs-metadata-v2.ts +646 -0
  614. package/src/lib/docs-new.ts +63 -0
  615. package/src/lib/docs-sweep.ts +42 -28
  616. package/src/lib/headless/index.ts +287 -0
  617. package/src/lib/identities/assume.ts +67 -86
  618. package/src/lib/instructions/apply.ts +33 -20
  619. package/src/lib/instructions/bundle.ts +199 -0
  620. package/src/lib/instructions/splice.ts +21 -7
  621. package/src/lib/instructions/templates.ts +85 -13
  622. package/dist/core/agents/cli-emit.d.ts +0 -27
  623. package/dist/core/agents/cli-emit.d.ts.map +0 -1
  624. package/dist/core/agents/cli-emit.js +0 -57
  625. package/dist/core/agents/codex-replay.d.ts +0 -29
  626. package/dist/core/agents/codex-replay.d.ts.map +0 -1
  627. package/dist/core/agents/codex-replay.js +0 -138
  628. package/dist/core/agents/events/consume.d.ts +0 -82
  629. package/dist/core/agents/events/consume.d.ts.map +0 -1
  630. package/dist/core/agents/events/consume.js +0 -195
  631. package/dist/core/agents/events/emit.d.ts +0 -42
  632. package/dist/core/agents/events/emit.d.ts.map +0 -1
  633. package/dist/core/agents/events/emit.js +0 -75
  634. package/dist/core/agents/events/ulid.d.ts +0 -11
  635. package/dist/core/agents/events/ulid.d.ts.map +0 -1
  636. package/dist/core/agents/events/ulid.js +0 -47
  637. package/dist/core/agents/state/heartbeat-projector.d.ts +0 -65
  638. package/dist/core/agents/state/heartbeat-projector.d.ts.map +0 -1
  639. package/dist/core/agents/state/heartbeat-projector.js +0 -527
  640. package/dist/core/hooks/events/emit.d.ts +0 -31
  641. package/dist/core/hooks/events/emit.d.ts.map +0 -1
  642. package/dist/core/hooks/events/emit.js +0 -93
  643. package/dist/core/hooks/events/rotate.d.ts +0 -43
  644. package/dist/core/hooks/events/rotate.d.ts.map +0 -1
  645. package/dist/core/hooks/events/rotate.js +0 -142
  646. package/dist/core/hooks/events/schema.d.ts +0 -312
  647. package/dist/core/hooks/events/schema.d.ts.map +0 -1
  648. package/dist/core/hooks/events/schema.js +0 -12
  649. package/dist/core/hooks/events/ulid.d.ts +0 -10
  650. package/dist/core/hooks/events/ulid.d.ts.map +0 -1
  651. package/dist/core/hooks/events/ulid.js +0 -47
  652. package/dist/lib/docs-frontmatter-migrate.d.ts +0 -33
  653. package/dist/lib/docs-frontmatter-migrate.d.ts.map +0 -1
  654. package/dist/lib/docs-frontmatter-migrate.js +0 -364
  655. package/src/core/agents/cli-emit.ts +0 -64
  656. package/src/core/agents/codex-replay.ts +0 -163
  657. package/src/core/agents/events/consume.ts +0 -254
  658. package/src/core/agents/events/emit.ts +0 -115
  659. package/src/core/agents/events/ulid.ts +0 -51
  660. package/src/core/agents/state/heartbeat-projector.ts +0 -582
  661. package/src/core/hooks/events/emit.ts +0 -125
  662. package/src/core/hooks/events/rotate.ts +0 -151
  663. package/src/core/hooks/events/schema.ts +0 -538
  664. package/src/core/hooks/events/ulid.ts +0 -51
  665. 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;
@@ -12,14 +12,16 @@
12
12
  */
13
13
  import type { Command } from "commander";
14
14
  import type { EmitContext } from "../commander.js";
15
+ import { type CodexHookAuthorizationResult } from "../core/hooks/codex-authorization.js";
15
16
  type Severity = "ok" | "warn" | "fail";
16
- interface Check {
17
+ export interface Check {
17
18
  name: string;
18
19
  severity: Severity;
19
20
  detail: string;
20
21
  hint?: string;
21
22
  }
22
23
  export declare function registerDoctorCommand(program: Command, emit: EmitContext): void;
23
- export declare function runChecks(): Check[];
24
+ export declare function runChecks(): Promise<Check[]>;
25
+ export declare function codexAuthorizationCheck(result: CodexHookAuthorizationResult): Check;
24
26
  export {};
25
27
  //# sourceMappingURL=doctor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAgBnD,KAAK,QAAQ,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;AAEvC,UAAU,KAAK;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAOD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CAmD/E;AAED,wBAAgB,SAAS,IAAI,KAAK,EAAE,CAsBnC"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAKnD,OAAO,EACL,KAAK,4BAA4B,EAElC,MAAM,sCAAsC,CAAC;AAe9C,KAAK,QAAQ,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;AAEvC,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAOD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CAmD/E;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CAyBlD;AA4CD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,4BAA4B,GAAG,KAAK,CAoBnF"}
@@ -18,7 +18,8 @@ import { BUILTIN_ADAPTER_IDS } from "../core/adapters/index.js";
18
18
  import { resolveBinName, ripgrepAutoInstall } from "../core/config.js";
19
19
  import { ADAPTER_SPECS } from "../core/hooks/adapter/events.js";
20
20
  import { loadAdapterWiring, summarizeAdapterWiring } from "../core/hooks/adapter/wiring.js";
21
- import { inspectCodexWslBridge } from "../core/hooks/codex-wsl-bridge.js";
21
+ import { probeCodexHookAuthorization, } from "../core/hooks/codex-authorization.js";
22
+ import { inspectCodexWslBridge, } from "../core/hooks/codex-wsl-bridge.js";
22
23
  import { ADAPTER_BINARIES, ADAPTER_INSTALL_HINTS, ADAPTER_LOGIN_HINTS, } from "../core/workflow/adapters.js";
23
24
  import { probeBilling } from "../core/workflow/billing.js";
24
25
  import { checkGitHooks, gitHooksInstalled } from "../lib/instructions/git-hooks.js";
@@ -39,7 +40,7 @@ export function registerDoctorCommand(program, emit) {
39
40
  emit.text(`ripgrep install failed: ${err.message}\n`);
40
41
  }
41
42
  }
42
- const checks = runChecks();
43
+ const checks = await runChecks();
43
44
  const requiredFailed = checks.some((c) => c.severity === "fail");
44
45
  if (opts.json) {
45
46
  emit.data({
@@ -67,13 +68,15 @@ export function registerDoctorCommand(program, emit) {
67
68
  emit.setExitCode(requiredFailed ? 1 : 0);
68
69
  });
69
70
  }
70
- export function runChecks() {
71
- const codexWslBridge = checkCodexWslBridge();
71
+ export async function runChecks() {
72
+ const codexWslStatus = inspectCodexWslBridge();
73
+ const codexWslBridge = checkCodexWslBridge(codexWslStatus);
72
74
  // Probe the adapter CLIs before the hook check runs, not in output order:
73
75
  // an unwired adapter only matters if its CLI is actually installed, and
74
76
  // probing once here keeps that join to one spawn per CLI.
75
77
  const workflow = BUILTIN_ADAPTER_IDS.map((id) => ({ id, ...checkWorkflowAdapter(id) }));
76
78
  const installed = workflow.filter((w) => w.installed).map((w) => w.id);
79
+ const codexAuthorization = await checkCodexHookAuthorization(installed, codexWslStatus);
77
80
  return [
78
81
  checkNode(),
79
82
  checkGit(),
@@ -81,6 +84,7 @@ export function runChecks() {
81
84
  checkRipgrep(),
82
85
  checkHarneryDir(),
83
86
  checkAdapterHooks(installed),
87
+ ...(codexAuthorization ? [codexAuthorization] : []),
84
88
  checkGitHookRegions(),
85
89
  ...(codexWslBridge ? [codexWslBridge] : []),
86
90
  ...workflow.map((w) => w.check),
@@ -119,8 +123,7 @@ function checkGitHookRegions() {
119
123
  };
120
124
  }
121
125
  }
122
- function checkCodexWslBridge() {
123
- const status = inspectCodexWslBridge();
126
+ function checkCodexWslBridge(status) {
124
127
  if (!status)
125
128
  return null;
126
129
  return {
@@ -132,6 +135,42 @@ function checkCodexWslBridge() {
132
135
  : "forward CODEX_THREAD_ID through WSLENV in the Codex shell environment policy, then start a fresh task",
133
136
  };
134
137
  }
138
+ export function codexAuthorizationCheck(result) {
139
+ const reviewHint = "terminal UI: run `/hooks`; Codex Desktop: open Settings > Hooks; after approval, start a fresh task";
140
+ if (result.status === "runnable") {
141
+ return { name: "codex:hook authorization", severity: "ok", detail: result.detail };
142
+ }
143
+ if (result.status === "review_required" || result.status === "disabled") {
144
+ return {
145
+ name: "codex:hook authorization",
146
+ severity: "warn",
147
+ detail: result.detail,
148
+ hint: reviewHint,
149
+ };
150
+ }
151
+ return {
152
+ name: "codex:hook authorization",
153
+ severity: "warn",
154
+ detail: `authorization unverified: ${result.detail}`,
155
+ hint: reviewHint,
156
+ };
157
+ }
158
+ async function checkCodexHookAuthorization(installedAdapters, codexWslStatus) {
159
+ const root = findCoordProjectRoot();
160
+ if (!root || !summarizeAdapterWiring(root).wired.includes("codex"))
161
+ return null;
162
+ if (codexWslStatus) {
163
+ return {
164
+ name: "codex:hook authorization",
165
+ severity: "warn",
166
+ detail: "unverified from WSL; the Windows-native Codex runtime owns this workspace's trust state",
167
+ hint: "run the host's Windows bridge doctor, or open Codex Desktop Settings > Hooks; start a fresh task after approval",
168
+ };
169
+ }
170
+ if (!installedAdapters.includes("codex"))
171
+ return null;
172
+ return codexAuthorizationCheck(await probeCodexHookAuthorization({ cwd: root }));
173
+ }
135
174
  function checkRipgrep() {
136
175
  const found = findRg();
137
176
  if (found) {
@@ -340,7 +379,7 @@ function checkHarneryDir() {
340
379
  name: ".harnery/",
341
380
  severity: "warn",
342
381
  detail: "no .harnery/ found above cwd",
343
- hint: "create one with `mkdir -p .harnery/active` from your monorepo root",
382
+ hint: "initialize the project with `harn init` from the repository root",
344
383
  };
345
384
  }
346
385
  /**
@@ -378,6 +417,15 @@ function checkAdapterHooks(installedAdapters = []) {
378
417
  }
379
418
  if (d.orphans.length > 0)
380
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
+ }
381
429
  if (d.invalidTopLevelKeys.length > 0) {
382
430
  bits.push(`invalid fields (${d.invalidTopLevelKeys.join(", ")})`);
383
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"}