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
@@ -16,12 +16,18 @@
16
16
  * already wired, so it's safe to re-run. `--dry-run` previews without writing.
17
17
  */
18
18
  import { spawnSync } from "node:child_process";
19
+ import { createHash } from "node:crypto";
19
20
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
20
21
  import { dirname, relative, resolve } from "node:path";
21
22
  import { fileURLToPath } from "node:url";
22
23
  import { DEFAULT_BIN_NAME, pinnedBinName, stripJsonComments } from "../core/config.js";
24
+ import { canonicalJsonV3 } from "../core/events/v3/canonical.js";
25
+ import { ADAPTER_CAPABILITY_PROFILES_V3 } from "../core/events/v3/capabilities.js";
26
+ import { EVENT_V3_SCHEMA_DIGEST } from "../core/events/v3/generated.js";
27
+ import { initializeEventLedgerV3, readEventV3ControlState, sha256V3, } from "../core/events/v3/index.js";
28
+ import { liveEventV3BuildId } from "../core/events/v3/live-routing.js";
23
29
  import { ADAPTER_SPECS } from "../core/hooks/adapter/events.js";
24
- import { commandWiresSubcommand, groupCommands, makeEntry, } from "../core/hooks/adapter/wiring.js";
30
+ import { agentHookPathForProject, commandWiresSubcommand, diffWiring, groupCommands, hookCommand, isAgentHookCommand, makeEntry, } from "../core/hooks/adapter/wiring.js";
25
31
  import { applyInstructions, checkInstructions, } from "../lib/instructions/apply.js";
26
32
  import { applyGitHooks, checkGitHooks } from "../lib/instructions/git-hooks.js";
27
33
  import { HostAddendumError } from "../lib/instructions/host-addendum.js";
@@ -53,15 +59,76 @@ export function registerInitCommand(program, emit, binName) {
53
59
  // init inside any checkout). Without this, re-running init from a host
54
60
  // CLI re-stamps the host's name into committed agent-facing surfaces.
55
61
  const bin = pinnedBinName(projectRoot) ?? (binName?.trim() ? binName : DEFAULT_BIN_NAME);
56
- // ── --check: read-only drift report on the block + skills ──────────────
62
+ // ── --check: read-only drift report on every init-managed surface ─────
57
63
  if (opts.check === true) {
58
64
  const { status, issues } = checkInstructions(projectRoot, { binName: bin, adapter });
65
+ let hookCheckError = false;
66
+ let hookDrift = false;
67
+ const settingsPath = resolve(projectRoot, spec.settingsFile);
68
+ const agentHook = agentHookPathForProject(projectRoot, HARNERY_ROOT);
69
+ if (!existsSync(settingsPath)) {
70
+ hookDrift = true;
71
+ issues.push(`${spec.settingsFile}: missing (re-run init)`);
72
+ }
73
+ else {
74
+ try {
75
+ const settings = JSON.parse(readFileSync(settingsPath, "utf8"));
76
+ const hookDiff = diffWiring(settings, spec, { agentHookPath: agentHook, adapter });
77
+ hookDrift =
78
+ hookDiff.missing.length > 0 ||
79
+ hookDiff.stale.length > 0 ||
80
+ hookDiff.duplicates.length > 0 ||
81
+ hookDiff.misplaced.length > 0 ||
82
+ hookDiff.orphans.length > 0 ||
83
+ hookDiff.invalidTopLevelKeys.length > 0 ||
84
+ hookDiff.invalidEventKeys.length > 0;
85
+ if (hookDiff.missing.length > 0) {
86
+ issues.push(`${spec.settingsFile}: missing hooks (${hookDiff.missing.map((e) => e.settingsKey).join(", ")})`);
87
+ }
88
+ if (hookDiff.stale.length > 0) {
89
+ issues.push(`${spec.settingsFile}: stale hook commands (${hookDiff.stale.map((e) => e.settingsKey).join(", ")})`);
90
+ }
91
+ if (hookDiff.duplicates.length > 0) {
92
+ issues.push(`${spec.settingsFile}: duplicate hooks (${hookDiff.duplicates.map((e) => e.settingsKey).join(", ")})`);
93
+ }
94
+ if (hookDiff.misplaced.length > 0) {
95
+ issues.push(`${spec.settingsFile}: hooks under the wrong event (${hookDiff.misplaced.map((e) => e.subcommand).join(", ")})`);
96
+ }
97
+ if (hookDiff.orphans.length > 0) {
98
+ issues.push(`${spec.settingsFile}: obsolete hooks (${hookDiff.orphans.join(", ")})`);
99
+ }
100
+ if (hookDiff.invalidTopLevelKeys.length > 0) {
101
+ issues.push(`${spec.settingsFile}: invalid fields (${hookDiff.invalidTopLevelKeys.join(", ")})`);
102
+ }
103
+ if (hookDiff.invalidEventKeys.length > 0) {
104
+ issues.push(`${spec.settingsFile}: unsupported events (${hookDiff.invalidEventKeys.join(", ")})`);
105
+ }
106
+ }
107
+ catch (error) {
108
+ hookCheckError = true;
109
+ issues.push(`${spec.settingsFile}: invalid JSON (${error.message})`);
110
+ }
111
+ }
59
112
  const gitHooks = checkGitHooks(projectRoot);
60
113
  if (gitHooks.status !== "fresh")
61
114
  issues.push(...gitHooks.issues);
62
- const merged = status === "error" ? "error" : gitHooks.status !== "fresh" ? "drift" : status;
115
+ const ledger = readEventV3ControlState(projectRoot);
116
+ if (ledger.state !== "active")
117
+ issues.push(`event ledger V3 is ${ledger.state}`);
118
+ const ledgerRuntimeIssues = eventLedgerV3RuntimeIssues(ledger, gitBuild(HARNERY_ROOT));
119
+ if (ledgerRuntimeIssues.length > 0) {
120
+ issues.push(`event ledger V3 is runtime-stale (${ledgerRuntimeIssues.join(", ")})`);
121
+ }
122
+ const merged = status === "error" || hookCheckError
123
+ ? "error"
124
+ : hookDrift ||
125
+ gitHooks.status !== "fresh" ||
126
+ ledger.state !== "active" ||
127
+ ledgerRuntimeIssues.length > 0
128
+ ? "drift"
129
+ : status;
63
130
  const head = merged === "fresh"
64
- ? "harn init --check: instructions + skills + git hooks are current"
131
+ ? "harn init --check: hooks + instructions + skills + event ledger V3 are current"
65
132
  : merged === "drift"
66
133
  ? "harn init --check: drift found (re-run `init` to refresh)"
67
134
  : "harn init --check: error";
@@ -109,9 +176,37 @@ export function registerInitCommand(program, emit, binName) {
109
176
  if (stamp)
110
177
  actions.push(stamp);
111
178
  }
179
+ // ── 1d. universal V3 event ledger ────────────────────────────────────
180
+ if (dryRun) {
181
+ const ledger = readEventV3ControlState(projectRoot);
182
+ const runtimeIssues = eventLedgerV3RuntimeIssues(ledger, gitBuild(HARNERY_ROOT));
183
+ actions.push(ledger.state === "active" && runtimeIssues.length === 0
184
+ ? "· event ledger V3 is active"
185
+ : ledger.state === "active"
186
+ ? `+ would refresh event ledger V3 runtime profile (${runtimeIssues.join(", ")})`
187
+ : `+ would initialize event ledger V3 (current state: ${ledger.state})`);
188
+ }
189
+ else {
190
+ const harneryBuild = gitBuild(HARNERY_ROOT);
191
+ const ledgerBefore = readEventV3ControlState(projectRoot);
192
+ const runtimeIssues = eventLedgerV3RuntimeIssues(ledgerBefore, harneryBuild);
193
+ const initialized = initializeEventLedgerV3({
194
+ coordRoot: projectRoot,
195
+ harneryBuild,
196
+ hostBuild: gitBuild(projectRoot),
197
+ configDigest: digestConfig(resolve(coordDir, "config.jsonc")),
198
+ approvalRecordId: "harnery-init-v3-universal",
199
+ forceNewEpoch: runtimeIssues.length > 0,
200
+ });
201
+ actions.push(initialized.archived_epoch
202
+ ? `+ refreshed event ledger V3 runtime profile (${runtimeIssues.join(", ")}); archived the prior epoch intact`
203
+ : initialized.initialized
204
+ ? "+ initialized event ledger V3"
205
+ : "· event ledger V3 already active");
206
+ }
112
207
  // ── 2. adapter hooks ───────────────────────────────────────────────────
113
208
  const settingsPath = resolve(projectRoot, spec.settingsFile);
114
- const agentHook = relative(projectRoot, resolve(HARNERY_ROOT, "bin", "agent-hook"));
209
+ const agentHook = agentHookPathForProject(projectRoot, HARNERY_ROOT);
115
210
  let settings;
116
211
  if (existsSync(settingsPath)) {
117
212
  try {
@@ -133,13 +228,13 @@ export function registerInitCommand(program, emit, binName) {
133
228
  }
134
229
  else if (dryRun) {
135
230
  actions.push(`+ would wire ${wired} hook(s), upgrade ${upgraded} stale command(s), and remove ` +
136
- `${removed} legacy hook(s) in ${rel(projectRoot, settingsPath)} (${already} already present)`);
231
+ `${removed} obsolete/duplicate command(s) in ${rel(projectRoot, settingsPath)} (${already} already present)`);
137
232
  }
138
233
  else {
139
234
  mkdirSync(dirname(settingsPath), { recursive: true });
140
235
  writeFileSync(settingsPath, `${JSON.stringify(settings, null, 2)}\n`);
141
236
  actions.push(`+ wired ${wired} hook(s), upgraded ${upgraded} stale command(s), and removed ` +
142
- `${removed} legacy hook(s) in ${rel(projectRoot, settingsPath)} (${already} already present)`);
237
+ `${removed} obsolete/duplicate command(s) in ${rel(projectRoot, settingsPath)} (${already} already present)`);
143
238
  }
144
239
  const authorizationReview = codexHookReviewAction(adapter);
145
240
  if (authorizationReview)
@@ -169,6 +264,43 @@ export function registerInitCommand(program, emit, binName) {
169
264
  emit.text(render(projectRoot, dryRun, actions, [...applied.warnings, ...gitHooks.warnings]));
170
265
  });
171
266
  }
267
+ function gitBuild(root) {
268
+ const result = spawnSync("git", ["-C", root, "rev-parse", "HEAD"], {
269
+ encoding: "utf8",
270
+ timeout: 5000,
271
+ });
272
+ const commit = result.status === 0 ? result.stdout.trim() : "";
273
+ return /^[0-9a-f]{40,64}$/.test(commit)
274
+ ? commit
275
+ : createHash("sha256").update(resolve(root)).digest("hex");
276
+ }
277
+ function digestConfig(path) {
278
+ return sha256V3(existsSync(path) ? readFileSync(path) : Buffer.from("{}\n"));
279
+ }
280
+ /**
281
+ * Runtime gates bound into an immutable V3 epoch. `init` is the explicit
282
+ * upgrade boundary: when code or capability profiles change, it archives the
283
+ * old epoch intact and activates a compatible one instead of letting upgraded
284
+ * hooks fail closed against stale approvals.
285
+ */
286
+ export function eventLedgerV3RuntimeIssues(control, harneryBuild) {
287
+ if (control.state !== "active")
288
+ return [];
289
+ const issues = [];
290
+ const profile = control.genesis.profile;
291
+ if (profile.initial_schema_digest !== EVENT_V3_SCHEMA_DIGEST)
292
+ issues.push("schema digest");
293
+ if (profile.contract_source_digest !== EVENT_V3_SCHEMA_DIGEST)
294
+ issues.push("contract digest");
295
+ if (!profile.producer_build_ids.includes(liveEventV3BuildId(harneryBuild))) {
296
+ issues.push("producer build");
297
+ }
298
+ const expectedCapabilities = Object.values(ADAPTER_CAPABILITY_PROFILES_V3).map((value) => sha256V3(canonicalJsonV3(value)));
299
+ if (expectedCapabilities.some((digest) => !profile.adapter_capability_profile_digests.includes(digest))) {
300
+ issues.push("adapter capabilities");
301
+ }
302
+ return issues;
303
+ }
172
304
  export function codexHookReviewAction(adapter) {
173
305
  if (adapter !== "codex")
174
306
  return null;
@@ -185,8 +317,7 @@ export function codexHookReviewAction(adapter) {
185
317
  * `{ command }`) and ensures the root `version` key when the adapter requires
186
318
  * one. Pure (no fs/git) so it's unit-testable.
187
319
  *
188
- * The trailing space in the match (`agent-hook ${subcommand} `) is load-bearing:
189
- * it keeps `stop` from matching `stop-failure`.
320
+ * Token-aware matching keeps `stop` from matching `stop-failure`.
190
321
  */
191
322
  export function wireHooks(settings, spec, agentHookPath, adapter) {
192
323
  if (spec.rootVersion !== undefined && settings.version === undefined) {
@@ -198,30 +329,41 @@ export function wireHooks(settings, spec, agentHookPath, adapter) {
198
329
  let already = 0;
199
330
  let removed = 0;
200
331
  let upgraded = 0;
201
- for (const { settingsKey, subcommand } of spec.legacyEvents ?? []) {
202
- const groups = settings.hooks[settingsKey] ?? [];
203
- const kept = groups.filter((group) => !groupCommands(group).some((command) => commandWiresSubcommand(command, subcommand)));
204
- removed += groups.length - kept.length;
205
- if (kept.length === 0)
206
- delete settings.hooks[settingsKey];
207
- else
208
- settings.hooks[settingsKey] = kept;
332
+ for (const { subcommand } of spec.legacyEvents ?? []) {
333
+ for (const settingsKey of Object.keys(settings.hooks)) {
334
+ removed += removeCommandsFromKey(settings, settingsKey, (command) => commandWiresSubcommand(command, subcommand));
335
+ }
209
336
  }
210
337
  for (const { settingsKey, subcommand } of spec.events) {
211
338
  const command = hookCommand(spec, agentHookPath, subcommand, adapter);
212
- const groups = settings.hooks[settingsKey] ?? [];
213
339
  let present = false;
340
+ for (const key of Object.keys(settings.hooks)) {
341
+ if (key === settingsKey)
342
+ continue;
343
+ removed += removeCommandsFromKey(settings, key, (candidate) => commandWiresSubcommand(candidate, subcommand));
344
+ }
345
+ const groups = settings.hooks[settingsKey] ?? [];
346
+ const nextGroups = [];
214
347
  for (const group of groups) {
215
- upgraded += rewriteStaleCommands(group, subcommand, command, () => {
348
+ const normalized = normalizeEventGroup(group, subcommand, command, present);
349
+ if (normalized.found && !present)
216
350
  present = true;
217
- });
351
+ upgraded += normalized.upgraded;
352
+ removed += normalized.removed;
353
+ if (normalized.group)
354
+ nextGroups.push(normalized.group);
218
355
  }
356
+ if (nextGroups.length > 0)
357
+ settings.hooks[settingsKey] = nextGroups;
358
+ else
359
+ delete settings.hooks[settingsKey];
219
360
  if (present) {
220
361
  already++;
221
362
  continue;
222
363
  }
223
- groups.push(makeEntry(spec.entryShape, command));
224
- settings.hooks[settingsKey] = groups;
364
+ const current = settings.hooks[settingsKey] ?? [];
365
+ current.push(makeEntry(spec.entryShape, command));
366
+ settings.hooks[settingsKey] = current;
225
367
  wired++;
226
368
  }
227
369
  return { wired, already, removed, upgraded };
@@ -236,40 +378,79 @@ export function wireHooks(settings, spec, agentHookPath, adapter) {
236
378
  * that don't set the var. Only the env expansion is quoted so the
237
379
  * `agent-hook <subcommand> ` wiring match stays byte-identical.
238
380
  */
239
- function hookCommand(spec, agentHookPath, subcommand, adapter) {
240
- const anchor = spec.projectDirEnv ? `"\${${spec.projectDirEnv}:-.}"/` : "";
241
- return `bash ${anchor}${agentHookPath} ${subcommand} --adapter ${adapter}`;
242
- }
243
- /**
244
- * Rewrite any harnery-owned command for `subcommand` inside one hook group to
245
- * the canonical form, in place. Returns the number of commands rewritten and
246
- * calls `onPresent` when the subcommand is wired in this group at all.
247
- */
248
- function rewriteStaleCommands(group, subcommand, canonical, onPresent) {
249
- let rewritten = 0;
381
+ function normalizeEventGroup(group, subcommand, canonical, alreadyFound) {
382
+ let found = false;
383
+ let upgraded = 0;
384
+ let removed = 0;
250
385
  if ("command" in group && typeof group.command === "string") {
251
386
  if (commandWiresSubcommand(group.command, subcommand)) {
252
- onPresent();
387
+ if (alreadyFound)
388
+ return { group: null, found: true, upgraded: 0, removed: 1 };
389
+ found = true;
253
390
  if (group.command !== canonical) {
254
391
  group.command = canonical;
255
- rewritten++;
392
+ upgraded++;
256
393
  }
257
394
  }
258
395
  }
259
396
  if ("hooks" in group && Array.isArray(group.hooks)) {
397
+ const kept = [];
260
398
  for (const hook of group.hooks) {
261
- if (typeof hook.command !== "string")
399
+ if (typeof hook.command !== "string" || !commandWiresSubcommand(hook.command, subcommand)) {
400
+ kept.push(hook);
262
401
  continue;
263
- if (!commandWiresSubcommand(hook.command, subcommand))
402
+ }
403
+ if (alreadyFound || found) {
404
+ removed++;
264
405
  continue;
265
- onPresent();
406
+ }
407
+ found = true;
266
408
  if (hook.command !== canonical) {
267
409
  hook.command = canonical;
268
- rewritten++;
410
+ upgraded++;
269
411
  }
412
+ kept.push(hook);
270
413
  }
414
+ group.hooks = kept;
415
+ if (group.hooks.length === 0)
416
+ return { group: null, found, upgraded, removed };
271
417
  }
272
- return rewritten;
418
+ return { group, found, upgraded, removed };
419
+ }
420
+ /** Remove matching command handlers while preserving unrelated handlers in a mixed group. */
421
+ function removeCommandsFromKey(settings, settingsKey, predicate) {
422
+ const groups = settings.hooks?.[settingsKey];
423
+ if (!Array.isArray(groups))
424
+ return 0;
425
+ let removed = 0;
426
+ const kept = [];
427
+ for (const group of groups) {
428
+ if ("command" in group && typeof group.command === "string") {
429
+ if (predicate(group.command))
430
+ removed++;
431
+ else
432
+ kept.push(group);
433
+ continue;
434
+ }
435
+ if ("hooks" in group && Array.isArray(group.hooks)) {
436
+ const handlers = group.hooks.filter((hook) => {
437
+ if (typeof hook.command !== "string" || !predicate(hook.command))
438
+ return true;
439
+ removed++;
440
+ return false;
441
+ });
442
+ group.hooks = handlers;
443
+ if (handlers.length > 0)
444
+ kept.push(group);
445
+ continue;
446
+ }
447
+ kept.push(group);
448
+ }
449
+ if (kept.length === 0)
450
+ delete settings.hooks?.[settingsKey];
451
+ else
452
+ settings.hooks[settingsKey] = kept;
453
+ return removed;
273
454
  }
274
455
  /**
275
456
  * Inverse of {@link wireHooks}: strip every harnery-owned hook entry from a
@@ -286,21 +467,12 @@ export function unwireHooks(settings) {
286
467
  return { removed: 0, remaining: 0 };
287
468
  let removed = 0;
288
469
  for (const key of Object.keys(settings.hooks)) {
289
- const groups = settings.hooks[key];
290
- if (!Array.isArray(groups))
291
- continue;
292
- const kept = groups.filter((g) => !groupCommands(g).some((c) => c.includes("agent-hook ")));
293
- removed += groups.length - kept.length;
294
- // removing the emptied hook key is the intent (tiny one-shot object)
295
- if (kept.length === 0)
296
- delete settings.hooks[key];
297
- else
298
- settings.hooks[key] = kept;
470
+ removed += removeCommandsFromKey(settings, key, isAgentHookCommand);
299
471
  }
300
472
  let remaining = 0;
301
473
  for (const groups of Object.values(settings.hooks)) {
302
474
  if (Array.isArray(groups))
303
- remaining += groups.length;
475
+ remaining += groups.flatMap(groupCommands).length;
304
476
  }
305
477
  // drop the now-empty hooks object so callers see a clean shape
306
478
  if (Object.keys(settings.hooks).length === 0)
@@ -1 +1 @@
1
- {"version":3,"file":"journal.d.ts","sourceRoot":"","sources":["../../src/commands/journal.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AA6BnD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,GAAG,IAAI,CA2RrF"}
1
+ {"version":3,"file":"journal.d.ts","sourceRoot":"","sources":["../../src/commands/journal.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AA8BnD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,GAAG,IAAI,CAgRrF"}
@@ -1,6 +1,7 @@
1
1
  import { existsSync, readdirSync, readFileSync, statSync, unlinkSync, watch } from "node:fs";
2
2
  import { resolve as resolvePath } from "node:path";
3
- import { emitCanonical, normalizeAdapter, readHeartbeat } from "../core/agents/index.js";
3
+ import { monorepoRoot } from "../core/agents/index.js";
4
+ import { readLiveCoordinationRow } from "../core/agents/state/live-coordination-view.js";
4
5
  import { resolveBinName } from "../core/config.js";
5
6
  import { appendEntry, archiveJournal, currentOwnerOrThrow, JOURNAL_CATEGORIES, journalDir, journalPath, lintJournal, listArchives, loadJournal, parseJournal, pruneArchives, resolveOwnerByName, sweepOrphanJournals, } from "../core/journal/index.js";
6
7
  /**
@@ -30,17 +31,6 @@ export function registerJournalCommand(program, emitParam) {
30
31
  try {
31
32
  const owner = currentOwnerOrThrow();
32
33
  const doc = appendEntry(owner, cat, body);
33
- const hb = readHeartbeat(owner);
34
- emitCanonical({
35
- type: "state.journal_append",
36
- owner,
37
- session: hb?.session_id ?? owner,
38
- adapter: normalizeAdapter(hb?.platform),
39
- data: {
40
- category: cat,
41
- body_summary: body.length > 1000 ? `${body.slice(0, 997)}...` : body,
42
- },
43
- });
44
34
  emit.data({
45
35
  instance_id: owner,
46
36
  name: doc.header.name,
@@ -313,7 +303,8 @@ function runRead(opts) {
313
303
  });
314
304
  process.exit(1);
315
305
  }
316
- const hb = readHeartbeat(owner);
306
+ const root = monorepoRoot();
307
+ const hb = root ? readLiveCoordinationRow(root, owner) : null;
317
308
  const staleBanner = renderStaleBannerIfNeeded(hb?.last_heartbeat);
318
309
  process.stdout.write(`${staleBanner + renderJournal(doc, limit)}\n`); // lint-ok-emission: pretty render, multi-line markdown for direct TTY/pipe consumption
319
310
  }
@@ -0,0 +1,5 @@
1
+ import type { Command } from "commander";
2
+ import type { EmitContext, HarneryProgramContext } from "../commander.js";
3
+ /** Inspect or initialize the universal V3 event ledger. */
4
+ export declare function registerLedgerV3Command(program: Command, emit: EmitContext, context?: HarneryProgramContext): void;
5
+ //# sourceMappingURL=ledger-v3.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ledger-v3.d.ts","sourceRoot":"","sources":["../../src/commands/ledger-v3.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAQ1E,2DAA2D;AAC3D,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,EACjB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,CA+DN"}
@@ -0,0 +1,91 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { createHash } from "node:crypto";
3
+ import { existsSync, readFileSync } from "node:fs";
4
+ import { resolve } from "node:path";
5
+ import { initializeEventLedgerV3, readEventV3ControlState, recoverInvalidEventLedgerV3, sha256V3, } from "../core/events/v3/index.js";
6
+ /** Inspect or initialize the universal V3 event ledger. */
7
+ export function registerLedgerV3Command(program, emit, context) {
8
+ const command = program
9
+ .command("ledger-v3")
10
+ .description("Inspect or initialize the universal event-ledger V3 epoch");
11
+ command
12
+ .command("status")
13
+ .description("Read the V3 control boundary without changing it")
14
+ .action(() => {
15
+ try {
16
+ emit.data(readEventV3ControlState(coordRoot(context)));
17
+ }
18
+ catch (error) {
19
+ emitFailure(emit, "ledger_v3_status_failed", error);
20
+ }
21
+ });
22
+ command
23
+ .command("initialize")
24
+ .description("Create V3 control state, or archive and replace the current V3 epoch")
25
+ .option("--root <path>", "Explicit coordination root")
26
+ .requiredOption("--approval-record-id <id>", "Durable approval record identifier")
27
+ .option("--force-new-epoch", "Archive the current V3 epoch and create a new one")
28
+ .action((options) => {
29
+ try {
30
+ const root = resolve(options.root ?? coordRoot(context));
31
+ emit.data(initializeEventLedgerV3({
32
+ coordRoot: root,
33
+ harneryBuild: repositoryBuild(resolve(import.meta.dir, "..", "..")),
34
+ hostBuild: repositoryBuild(root),
35
+ configDigest: configDigest(root),
36
+ approvalRecordId: options.approvalRecordId,
37
+ forceNewEpoch: options.forceNewEpoch === true,
38
+ }));
39
+ }
40
+ catch (error) {
41
+ emitFailure(emit, "ledger_v3_initialize_failed", error);
42
+ }
43
+ });
44
+ command
45
+ .command("recover")
46
+ .description("Quarantine one invalid active authority and start a clean V3 epoch")
47
+ .option("--root <path>", "Explicit coordination root")
48
+ .requiredOption("--approval-record-id <id>", "Durable approval record identifier")
49
+ .option("--yes", "Confirm the failed authority should be quarantined")
50
+ .action((options) => {
51
+ try {
52
+ if (!options.yes)
53
+ throw new Error("--yes is required to recover an invalid V3 authority");
54
+ const root = resolve(options.root ?? coordRoot(context));
55
+ emit.data(recoverInvalidEventLedgerV3({
56
+ coordRoot: root,
57
+ harneryBuild: repositoryBuild(resolve(import.meta.dir, "..", "..")),
58
+ hostBuild: repositoryBuild(root),
59
+ configDigest: configDigest(root),
60
+ approvalRecordId: options.approvalRecordId,
61
+ }));
62
+ }
63
+ catch (error) {
64
+ emitFailure(emit, "ledger_v3_recovery_failed", error);
65
+ }
66
+ });
67
+ }
68
+ function coordRoot(context) {
69
+ return resolve(context?.resolveCoordRoot?.() ??
70
+ context?.repoRoot ??
71
+ process.env.HARNERY_COORD_ROOT ??
72
+ process.cwd());
73
+ }
74
+ function repositoryBuild(root) {
75
+ const result = spawnSync("git", ["-C", root, "rev-parse", "HEAD"], {
76
+ encoding: "utf8",
77
+ timeout: 5000,
78
+ });
79
+ const commit = result.status === 0 ? result.stdout.trim() : "";
80
+ if (/^[0-9a-f]{40,64}$/.test(commit))
81
+ return commit;
82
+ return createHash("sha256").update(resolve(root)).digest("hex");
83
+ }
84
+ function configDigest(root) {
85
+ const path = resolve(root, ".harnery", "config.jsonc");
86
+ return sha256V3(existsSync(path) ? readFileSync(path) : Buffer.from("{}\n"));
87
+ }
88
+ function emitFailure(emit, code, error) {
89
+ emit.error({ code, message: error instanceof Error ? error.message : String(error) });
90
+ throw error;
91
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"presence.d.ts","sourceRoot":"","sources":["../../src/commands/presence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AA0BnD;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CA8KjF"}
1
+ {"version":3,"file":"presence.d.ts","sourceRoot":"","sources":["../../src/commands/presence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAsBnD;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CA8KjF"}
@@ -1,5 +1,6 @@
1
1
  import { monorepoRoot } from "../core/agents/coord-client.js";
2
- import { emitCanonical, normalizeAdapter, readHeartbeat, resolveOwner, } from "../core/agents/index.js";
2
+ import { emitEventV3, normalizeAdapter, resolveOwner } from "../core/agents/index.js";
3
+ import { readLiveCoordinationRow } from "../core/agents/state/live-coordination-view.js";
3
4
  import { fetchPresence, publishPresence, readRemoteMachines, relayDaemonStatus, runRelayDaemon, } from "../core/presence/index.js";
4
5
  import { ageSeconds, applyDetection, clearPresence, formatAge, presenceFilePath, readPresence, writePresence, } from "../lib/presence.js";
5
6
  /**
@@ -198,12 +199,17 @@ function emitPresenceChange(from, to, source) {
198
199
  const owner = resolveOwner();
199
200
  if (!owner)
200
201
  return;
201
- const hb = readHeartbeat(owner);
202
- emitCanonical({
203
- type: "state.presence_change",
202
+ const root = monorepoRoot();
203
+ const hb = root ? readLiveCoordinationRow(root, owner) : null;
204
+ emitEventV3({
204
205
  owner,
205
206
  session: hb?.session_id ?? owner,
206
207
  adapter: normalizeAdapter(hb?.platform),
207
- data: { from, to, source },
208
+ observation: {
209
+ event_type: "coord.presence_changed",
210
+ prior_state: from,
211
+ new_state: to,
212
+ reason: `presence_${source}`,
213
+ },
208
214
  });
209
215
  }
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Scope: a deliberately small set of file types: durable identities,
6
6
  * archived journals, council manifests. The high-churn machine-local
7
- * stuff (events.ndjson, .pid-map/, active/, .last-intent.*) stays put.
7
+ * state (ledgers/, .pid-map/, active/, .last-intent.*) stays put.
8
8
  *
9
9
  * Subcommands:
10
10
  * init: interactive: `rclone config` walks through Google OAuth, then
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Scope: a deliberately small set of file types: durable identities,
6
6
  * archived journals, council manifests. The high-churn machine-local
7
- * stuff (events.ndjson, .pid-map/, active/, .last-intent.*) stays put.
7
+ * state (ledgers/, .pid-map/, active/, .last-intent.*) stays put.
8
8
  *
9
9
  * Subcommands:
10
10
  * init: interactive: `rclone config` walks through Google OAuth, then
@@ -19,5 +19,11 @@ export declare function resolveMaxOldSpaceMb(flag?: string): number;
19
19
  * wins without clobbering flags the caller set (source maps, inspector, …).
20
20
  */
21
21
  export declare function nodeOptionsWithHeapCap(mb: number): string | undefined;
22
+ /**
23
+ * Probe the exact localhost socket Next will claim. This is deliberately a
24
+ * check-and-report step, not an alternate-port allocator: Harnery keeps one
25
+ * memorable URL and asks the caller to resolve a real conflict explicitly.
26
+ */
27
+ export declare function isWebPortAvailable(port: number): Promise<boolean>;
22
28
  export declare function registerWebCommand(program: Command, emit: EmitContext): void;
23
29
  //# sourceMappingURL=web.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../src/commands/web.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAgCnD;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAM1D;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKrE;AA8BD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CA2J5E"}
1
+ {"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../src/commands/web.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAiCnD;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAM1D;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKrE;AA8BD;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAevE;AAsBD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CA0K5E"}