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
@@ -112,30 +112,25 @@ async function handleVerdict(root) {
112
112
  return 0;
113
113
  }
114
114
  async function handleProject(root, rest) {
115
- const { consumeSince, writeCursor } = await import("./events/consume.js");
116
- const { projectHeartbeats } = await import("./state/heartbeat-projector.js");
117
- const replayAll = rest.includes("--replay-all");
118
- const result = consumeSince(root, { replayAll });
119
- const project = projectHeartbeats(root, result.events);
115
+ const { resolveLiveEventLedgerRouteV3 } = await import("../events/v3/live-routing.js");
116
+ const route = resolveLiveEventLedgerRouteV3(root);
117
+ if (route.state === "blocked") {
118
+ process.stderr.write(`agent-coord project: V3 route is unsafe (${route.reason})\n`);
119
+ return 1;
120
+ }
121
+ const { readCoordinationViewV3 } = await import("../events/v3/coordination-view.js");
122
+ const view = readCoordinationViewV3(root);
120
123
  const report = {
121
- events_consumed: result.events.length,
122
- stream_bytes: result.streamBytes,
123
- owners_projected: project.written.length,
124
- owners: project.written,
125
- cursor: result.lastEventId,
126
- replayed_all: replayAll,
124
+ contract_major: 2,
125
+ source_complete: view.source_complete,
126
+ authority_safe: view.authority_safe,
127
+ owners_projected: Object.keys(view.instances).length,
128
+ owners: Object.keys(view.instances).sort(),
129
+ diagnostics: view.diagnostics,
130
+ materialized: false,
127
131
  };
128
- if (result.lastEventId)
129
- writeCursor(root, result.lastEventId);
130
- if (rest.includes("--json")) {
131
- process.stdout.write(`${JSON.stringify(report, null, 2)}\n`);
132
- }
133
- else {
134
- process.stdout.write(`projected ${report.events_consumed} events across ${report.owners_projected} owners\n cursor → ${report.cursor ?? "<none>"}\n${report.owners.length
135
- ? ` owners: ${report.owners.map((o) => o.slice(0, 8)).join(", ")}\n`
136
- : ""}`);
137
- }
138
- return 0;
132
+ process.stdout.write(`${JSON.stringify(report, null, rest.includes("--json") ? 2 : 0)}\n`);
133
+ return view.authority_safe ? 0 : 1;
139
134
  }
140
135
  function adapterFromPlatform(platform) {
141
136
  if (platform === "cursor")
@@ -144,62 +139,6 @@ function adapterFromPlatform(platform) {
144
139
  return "codex";
145
140
  return "claude-code";
146
141
  }
147
- /**
148
- * Append a canonical `health.heartbeat_swept` event after an operator kill.
149
- * Same envelope stale-sweep emits, so the projector's terminal / ended_at
150
- * guards treat kill and sweep identically. Soft-fails: the unlink already
151
- * happened.
152
- */
153
- async function emitHeartbeatSwept(root, owner, hb) {
154
- try {
155
- const { emit } = await import("./events/emit.js");
156
- let ageSecs;
157
- if (hb.last_heartbeat) {
158
- const ts = Date.parse(hb.last_heartbeat);
159
- if (Number.isFinite(ts)) {
160
- ageSecs = Math.max(0, Math.floor((Date.now() - ts) / 1000));
161
- }
162
- }
163
- emit(root, {
164
- event_type: "health.heartbeat_swept",
165
- instance_id: owner,
166
- session_id: hb.session_id ?? owner,
167
- adapter: adapterFromPlatform(hb.platform),
168
- source: "agent-coord",
169
- data: {
170
- reason: "killed",
171
- ...(ageSecs !== undefined ? { age_secs: ageSecs } : {}),
172
- },
173
- });
174
- }
175
- catch {
176
- /* soft-fail: never break the caller */
177
- }
178
- }
179
- /**
180
- * Append a canonical `claim.release` event for a path dropped from an owner's
181
- * files_touched. The path is canonicalized to repo-relative (matching the
182
- * projector's normalization) so the subtraction matches on replay regardless
183
- * of the form the caller passed. Soft-fails: a failed emit must never break
184
- * the release/kill flow — the file mutation already happened.
185
- */
186
- async function emitClaimRelease(root, owner, hb, path, reason) {
187
- try {
188
- const { emit } = await import("./events/emit.js");
189
- const canonical = path.startsWith(`${root}/`) ? path.slice(root.length + 1) : path;
190
- emit(root, {
191
- event_type: "claim.release",
192
- instance_id: owner,
193
- session_id: hb.session_id ?? owner,
194
- adapter: adapterFromPlatform(hb.platform),
195
- source: "agent-coord",
196
- data: { path: canonical, reason },
197
- });
198
- }
199
- catch {
200
- /* soft-fail: never break the caller */
201
- }
202
- }
203
142
  async function handleStateAction(root, action, rest) {
204
143
  const writer = await import("./state/heartbeat-writer.js");
205
144
  const [owner, ...args] = rest;
@@ -210,7 +149,23 @@ async function handleStateAction(root, action, rest) {
210
149
  switch (action) {
211
150
  case "set-task": {
212
151
  const task = args.join(" ");
213
- const hb = writer.setTask(root, owner, task);
152
+ const before = writer.readHeartbeat(root, owner);
153
+ let hb;
154
+ try {
155
+ const { recordLiveTaskChangeV3 } = await import("./live-authority-v3.js");
156
+ recordLiveTaskChangeV3({
157
+ coordRoot: root,
158
+ owner,
159
+ nativeSessionId: before?.session_id ?? owner,
160
+ adapter: adapterFromPlatform(before?.platform),
161
+ task,
162
+ });
163
+ hb = writer.readHeartbeat(root, owner);
164
+ }
165
+ catch (error) {
166
+ process.stderr.write(`agent-coord set-task: V3 authority refused (${error instanceof Error ? error.message : String(error)})\n`);
167
+ return 1;
168
+ }
214
169
  if (!hb) {
215
170
  // Name the RESOLVED root: when a nested .harnery/ shadows the real
216
171
  // coordination home, the full path is what makes that diagnosable.
@@ -220,14 +175,6 @@ async function handleStateAction(root, action, rest) {
220
175
  process.stdout.write(`${JSON.stringify({ instance_id: owner, task: hb.task ?? null, cleared: !task })}\n`);
221
176
  return 0;
222
177
  }
223
- case "set-turn-summary": {
224
- const summary = args.join(" ");
225
- const hb = writer.setTurnSummary(root, owner, summary);
226
- if (!hb)
227
- return 1;
228
- process.stdout.write(`${JSON.stringify({ instance_id: owner, turn_summary: hb.turn_summary })}\n`);
229
- return 0;
230
- }
231
178
  case "release-claim": {
232
179
  const path = args[0];
233
180
  if (!path) {
@@ -235,46 +182,29 @@ async function handleStateAction(root, action, rest) {
235
182
  return 2;
236
183
  }
237
184
  const before = writer.readHeartbeat(root, owner);
238
- const hb = writer.releaseClaim(root, owner, path);
239
- if (!hb)
185
+ let hb;
186
+ try {
187
+ const { recordLiveClaimChangeV3 } = await import("./live-authority-v3.js");
188
+ recordLiveClaimChangeV3({
189
+ coordRoot: root,
190
+ owner,
191
+ nativeSessionId: before?.session_id ?? owner,
192
+ adapter: adapterFromPlatform(before?.platform),
193
+ operation: "released",
194
+ path,
195
+ access: "write",
196
+ });
197
+ hb = writer.readHeartbeat(root, owner);
198
+ }
199
+ catch (error) {
200
+ process.stderr.write(`agent-coord release-claim: V3 authority refused (${error instanceof Error ? error.message : String(error)})\n`);
240
201
  return 1;
241
- // Durability: the projector rebuilds files_touched by replaying the
242
- // permanent Edit/Write events, so a file-only release is silently
243
- // reverted by the next full replay. Emitting claim.release puts the
244
- // subtraction into the stream so every future replay honors it. Only
245
- // emit when the release actually removed a held path (idempotent
246
- // re-releases stay quiet).
247
- const heldBefore = before?.files_touched?.length ?? 0;
248
- const heldAfter = hb.files_touched?.length ?? 0;
249
- if (heldBefore > heldAfter) {
250
- await emitClaimRelease(root, owner, before ?? hb, path, "explicit");
251
202
  }
203
+ if (!hb)
204
+ return 1;
252
205
  process.stdout.write(`${JSON.stringify({ instance_id: owner, files_touched: hb.files_touched })}\n`);
253
206
  return 0;
254
207
  }
255
- case "kill-heartbeat": {
256
- // Read held claims BEFORE the unlink so they can be released durably —
257
- // killing only the file leaves the claims resurrectable from the
258
- // permanent Edit/Write events on the next full replay (observed: a
259
- // 6-day-dead agent's claims returning after its heartbeat was killed).
260
- //
261
- // Also emit health.heartbeat_swept so the stream records a terminal
262
- // marker. Without it, a later drain that replays [session.start …
263
- // tools … claim.release] treats the owner as still in-flight and
264
- // re-creates the file (kill→resurrect loop observed 2026-08-03: 21
265
- // killed zombies back within a minute via claim.release seeding +
266
- // historical replay).
267
- const before = writer.readHeartbeat(root, owner);
268
- const ok = writer.killHeartbeat(root, owner);
269
- if (ok && before) {
270
- await emitHeartbeatSwept(root, owner, before);
271
- for (const held of before.files_touched ?? []) {
272
- await emitClaimRelease(root, owner, before, held, "heal");
273
- }
274
- }
275
- process.stdout.write(`${JSON.stringify({ instance_id: owner, removed: ok })}\n`);
276
- return ok ? 0 : 1;
277
- }
278
208
  case "heal-pidmap": {
279
209
  const pidArg = args[0];
280
210
  const pid = pidArg ? Number(pidArg) : process.ppid;
@@ -282,40 +212,54 @@ async function handleStateAction(root, action, rest) {
282
212
  process.stderr.write(`agent-coord heal-pidmap: invalid pid ${pidArg}\n`);
283
213
  return 2;
284
214
  }
285
- writer.healPidmap(root, owner, pid);
215
+ try {
216
+ const { liveCoordinationWriteModeV3 } = await import("./live-authority-v3.js");
217
+ liveCoordinationWriteModeV3(root);
218
+ writer.healPidmap(root, owner, pid);
219
+ }
220
+ catch (error) {
221
+ process.stderr.write(`agent-coord heal-pidmap: V3 route refused (${error instanceof Error ? error.message : String(error)})\n`);
222
+ return 1;
223
+ }
286
224
  process.stdout.write(`${JSON.stringify({ instance_id: owner, pid })}\n`);
287
225
  return 0;
288
226
  }
289
- case "heal-heartbeat": {
227
+ case "repair-coordination-cache": {
290
228
  // adapter arrives as a `--adapter=<h>` flag (not positional) so the live
291
- // tool.pre_use heal and the manual `harn agents heal` path (which pass
229
+ // tool.requested repair and the manual `harn agents heal` path (which pass
292
230
  // different positional counts) can both supply it without arg-order
293
231
  // fragility. Positionals (sessionId, model) stay as-is once flags are
294
232
  // filtered out.
295
233
  const adapter = args.find((a) => a.startsWith("--adapter="))?.slice("--adapter=".length);
296
- const forkedFrom = args
297
- .find((a) => a.startsWith("--forked-from="))
298
- ?.slice("--forked-from=".length);
299
234
  const positional = args.filter((a) => !a.startsWith("--"));
300
235
  const sessionId = positional[0];
301
236
  const model = positional[1];
302
- const hb = writer.healHeartbeat(root, owner, sessionId, model, adapter, forkedFrom ? { forkedFrom } : undefined);
237
+ let hb;
238
+ try {
239
+ const { liveCoordinationWriteModeV3 } = await import("./live-authority-v3.js");
240
+ liveCoordinationWriteModeV3(root);
241
+ const { readCoordinationViewV3 } = await import("../events/v3/coordination-view.js");
242
+ const { liveInstanceIdV3 } = await import("../events/v3/live-routing.js");
243
+ const projected = readCoordinationViewV3(root).instances[liveInstanceIdV3(owner)];
244
+ if (projected?.provisional_termination) {
245
+ const { recordLiveResumeObservationV3 } = await import("./live-lifecycle-v3.js");
246
+ recordLiveResumeObservationV3({
247
+ coordRoot: root,
248
+ owner,
249
+ nativeSessionId: sessionId ?? owner,
250
+ adapter: adapterFromPlatform(adapter),
251
+ });
252
+ }
253
+ const { ensureLiveCoordinationHeartbeat } = await import("./state/live-coordination-view.js");
254
+ hb = ensureLiveCoordinationHeartbeat(root, owner, sessionId ?? owner, adapterFromPlatform(adapter), model);
255
+ }
256
+ catch (error) {
257
+ process.stderr.write(`agent-coord repair-coordination-cache: V3 route refused (${error instanceof Error ? error.message : String(error)})\n`);
258
+ return 1;
259
+ }
303
260
  process.stdout.write(`${JSON.stringify({ instance_id: owner, recreated: !!hb })}\n`);
304
261
  return hb ? 0 : 1;
305
262
  }
306
- case "stamp-tool-activity": {
307
- const toolName = args[0] ?? "";
308
- const target = args.slice(1).join(" ");
309
- const hb = writer.stampToolActivity(root, owner, toolName, target);
310
- if (!hb)
311
- return 1;
312
- process.stdout.write(`${JSON.stringify({
313
- instance_id: owner,
314
- last_tool: hb.last_tool,
315
- last_tool_target: hb.last_tool_target,
316
- })}\n`);
317
- return 0;
318
- }
319
263
  default:
320
264
  process.stderr.write(`agent-coord: unknown state action ${action}\n`);
321
265
  return 2;
@@ -507,33 +451,9 @@ async function handleShellMutationClaimLog(root, rest) {
507
451
  const platform = args.platform ?? "unknown";
508
452
  const owner = args.owner ?? null;
509
453
  const { shellMutationPaths } = await import("./state/shell-mutation.js");
510
- const { emit } = await import("./events/emit.js");
511
- const { readHeartbeat } = await import("./state/heartbeat-writer.js");
512
454
  const paths = shellMutationPaths(cmd, root);
513
455
  const truncated = cmd.length > 80 ? cmd.slice(0, 80) : cmd;
514
- // Warn-only peer-shell-mutation signal. Formerly a SHELL_CLAIM_CANDIDATE line
515
- // in a log file; now a canonical decision.warn so the
516
- // signal survives in events.ndjson. (The blocking claim-conflict path is
517
- // separate: claim.conflict / verdict, and unaffected.)
518
- const adapter = platform === "cursor" ? "cursor" : platform === "codex" ? "codex" : "claude-code";
519
- const hb = owner ? readHeartbeat(root, owner) : null;
520
- for (const p of paths) {
521
- try {
522
- emit(root, {
523
- event_type: "decision.warn",
524
- instance_id: owner ?? "unknown",
525
- session_id: hb?.session_id ?? owner ?? "unknown",
526
- adapter,
527
- data: {
528
- rule: "shell_mutation_candidate",
529
- reason: `path=${p} cmd=${truncated} platform=${platform}`,
530
- },
531
- });
532
- }
533
- catch {
534
- /* telemetry only, never break the dispatcher */
535
- }
536
- }
456
+ process.stdout.write(`${JSON.stringify({ schema_version: 2, owner, platform, command_preview: truncated, paths })}\n`);
537
457
  return 0;
538
458
  }
539
459
  async function handleStaleSweep(root, _rest) {
@@ -542,6 +462,38 @@ async function handleStaleSweep(root, _rest) {
542
462
  process.stdout.write(`${JSON.stringify(result)}\n`);
543
463
  return 0;
544
464
  }
465
+ async function handleReconcileFinalization(root) {
466
+ const { reconcileSessionFinalizationV3 } = await import("./session-finalizer-v3.js");
467
+ const result = reconcileSessionFinalizationV3(root);
468
+ process.stdout.write(`${JSON.stringify(result)}\n`);
469
+ return result.diagnostics.some((item) => item === "ledger_not_authority_safe") ? 2 : 0;
470
+ }
471
+ async function handleEndSession(root, rest) {
472
+ const instanceId = rest[0];
473
+ if (!instanceId || !/^inst_[A-Za-z0-9._-]+$/.test(instanceId))
474
+ return 2;
475
+ const { listHookProducerStateRecordsV3 } = await import("../events/v3/producers/recorder.js");
476
+ const record = listHookProducerStateRecordsV3(root, { includeTerminal: false }).find(({ state }) => state.instance_id === instanceId);
477
+ if (!record)
478
+ return 2;
479
+ const { requestSessionEndExplicitV3 } = await import("./session-finalizer-v3.js");
480
+ const result = requestSessionEndExplicitV3({
481
+ coordRoot: root,
482
+ instance_id: record.state.instance_id,
483
+ generation_id: record.state.generation_id,
484
+ outcome: "interrupted",
485
+ coordination_finalized: false,
486
+ });
487
+ process.stdout.write(`${JSON.stringify(result)}\n`);
488
+ return result.state === "recorded" ||
489
+ result.state === "already_ended" ||
490
+ result.state === "queued" ||
491
+ result.state === "already_requested"
492
+ ? 0
493
+ : result.state === "delegated_work_open"
494
+ ? 3
495
+ : 2;
496
+ }
545
497
  async function handlePromptContext(root, rest) {
546
498
  const args = {};
547
499
  for (let i = 0; i < rest.length; i++) {
@@ -564,8 +516,11 @@ async function handlePromptContext(root, rest) {
564
516
  const sessionNameNudge = args["session-name-nudge"] === "true";
565
517
  const taskNudge = args["task-nudge"] === "true";
566
518
  const statusFooterNudge = args["status-footer-nudge"] === "true";
519
+ // Value is the adapter id; a bare flag (parsed as "true") still enables the
520
+ // reminder with the adapter-neutral wording.
521
+ const turnRitualNudge = args["turn-ritual-nudge"] === "true" ? "generic" : args["turn-ritual-nudge"];
567
522
  if (!instanceId) {
568
- process.stderr.write("agent-coord prompt-context --instance <id> [--session <id>] [--name <agent-name>] [--session-name-nudge] [--task-nudge] [--status-footer-nudge]\n");
523
+ process.stderr.write("agent-coord prompt-context --instance <id> [--session <id>] [--name <agent-name>] [--session-name-nudge] [--task-nudge] [--status-footer-nudge] [--turn-ritual-nudge <adapter>]\n");
569
524
  return 2;
570
525
  }
571
526
  const { renderPromptContext } = await import("./render/prompt-context.js");
@@ -577,6 +532,7 @@ async function handlePromptContext(root, rest) {
577
532
  sessionNameNudge,
578
533
  taskNudge,
579
534
  statusFooterNudge,
535
+ turnRitualNudge,
580
536
  });
581
537
  process.stdout.write(text);
582
538
  return 0;
@@ -616,41 +572,6 @@ async function handleSessionContext(root, rest) {
616
572
  process.stdout.write(text);
617
573
  return 0;
618
574
  }
619
- async function handleCodexReplay(root, rest) {
620
- const args = {};
621
- for (let i = 0; i < rest.length; i++) {
622
- const a = rest[i];
623
- if (a.startsWith("--")) {
624
- const key = a.slice(2);
625
- const val = rest[i + 1];
626
- if (val === undefined || val.startsWith("--")) {
627
- args[key] = "true";
628
- }
629
- else {
630
- args[key] = val;
631
- i++;
632
- }
633
- }
634
- }
635
- const jsonlPath = args.jsonl;
636
- const sessionId = args.session;
637
- const instanceId = args.owner ?? sessionId;
638
- const lastMsg = args["last-message"];
639
- if (!jsonlPath || !sessionId) {
640
- process.stderr.write("agent-coord codex-replay --jsonl <path> --session <id> [--owner <id>] [--last-message <text>]\n");
641
- return 2;
642
- }
643
- const { replayCodexJsonl } = await import("./codex-replay.js");
644
- const result = replayCodexJsonl({
645
- coordRoot: root,
646
- jsonlPath,
647
- sessionId,
648
- instanceId: instanceId,
649
- lastAssistantMessage: lastMsg,
650
- });
651
- process.stdout.write(`${JSON.stringify({ session_id: sessionId, emitted: result.emitted })}\n`);
652
- return 0;
653
- }
654
575
  async function handleResolveName(root, rest) {
655
576
  const { resolveName } = await import("./state/names.js");
656
577
  const [owner, session] = rest;
@@ -667,7 +588,6 @@ async function handleResolveName(root, rest) {
667
588
  return 0;
668
589
  }
669
590
  async function handleEmitEvent(root, rest) {
670
- const { emitAndProject } = await import("./cli-emit.js");
671
591
  const args = {};
672
592
  for (let i = 0; i < rest.length; i++) {
673
593
  const a = rest[i];
@@ -687,9 +607,9 @@ async function handleEmitEvent(root, rest) {
687
607
  const instanceId = args.owner;
688
608
  const sessionId = args.session;
689
609
  const adapter = args.adapter;
690
- const dataJson = args["data-json"] ?? "{}";
691
- if (!eventType || !instanceId || !sessionId || !adapter) {
692
- process.stderr.write("agent-coord emit-event --type <T> --owner <id> --session <id> --adapter <h> [--data-json '<json>']\n");
610
+ const dataJson = args["data-stdin"] === "true" ? await readStdin() : "";
611
+ if (!eventType || !instanceId || !sessionId || !adapter || !dataJson) {
612
+ process.stderr.write("agent-coord emit-event --type <V3_TYPE> --owner <id> --session <id> --adapter <h> --data-stdin\n");
693
613
  return 2;
694
614
  }
695
615
  let data;
@@ -699,30 +619,75 @@ async function handleEmitEvent(root, rest) {
699
619
  data = parsed;
700
620
  }
701
621
  else {
702
- process.stderr.write("agent-coord emit-event: --data-json must encode an object\n");
622
+ process.stderr.write("agent-coord emit-event: stdin must encode an object\n");
703
623
  return 2;
704
624
  }
705
625
  }
706
626
  catch (err) {
707
- process.stderr.write(`agent-coord emit-event: invalid --data-json (${err instanceof Error ? err.message : String(err)})\n`);
627
+ process.stderr.write(`agent-coord emit-event: invalid stdin JSON (${err instanceof Error ? err.message : String(err)})\n`);
708
628
  return 2;
709
629
  }
710
- const result = emitAndProject({
711
- event_type: eventType,
712
- instance_id: instanceId,
713
- session_id: sessionId,
714
- adapter,
715
- turn_id: args["turn-id"],
716
- parent_session_id: args["parent-session-id"],
717
- parent_turn_id: args["parent-turn-id"],
718
- data,
719
- }, { coordRoot: root });
720
- if (!result) {
721
- process.stderr.write("agent-coord emit-event: emission failed\n");
630
+ const { resolveLiveEventLedgerRouteV3 } = await import("../events/v3/live-routing.js");
631
+ const ledgerRoute = resolveLiveEventLedgerRouteV3(root);
632
+ if (ledgerRoute.state === "blocked") {
633
+ process.stderr.write(`agent-coord emit-event: V3 ledger route is unsafe (${ledgerRoute.reason})\n`);
722
634
  return 1;
723
635
  }
724
- process.stdout.write(`${JSON.stringify(result.envelope)}\n`);
725
- return 0;
636
+ if (data.event_type !== eventType) {
637
+ process.stderr.write("agent-coord emit-event: envelope type does not match stdin event_type\n");
638
+ return 2;
639
+ }
640
+ if (eventType === "coord.lifecycle_changed") {
641
+ const state = data.new_state;
642
+ if (state !== "active" && state !== "blocked" && state !== "done") {
643
+ process.stderr.write("agent-coord emit-event: invalid V3 lifecycle state\n");
644
+ return 2;
645
+ }
646
+ const { recordLiveLifecycleChangeV3 } = await import("./live-authority-v3.js");
647
+ try {
648
+ const routed = recordLiveLifecycleChangeV3({
649
+ coordRoot: root,
650
+ owner: instanceId,
651
+ nativeSessionId: sessionId,
652
+ adapter,
653
+ state,
654
+ reason: typeof data.reason === "string" && data.reason.length > 0 ? data.reason : undefined,
655
+ suggestedSessionName: typeof data.suggested_session_name === "string" && data.suggested_session_name.length > 0
656
+ ? data.suggested_session_name
657
+ : undefined,
658
+ });
659
+ process.stdout.write(`${JSON.stringify({ schema_version: 2, event_type: "coord.lifecycle_changed", state: routed.state })}\n`);
660
+ return 0;
661
+ }
662
+ catch (error) {
663
+ process.stderr.write(`agent-coord emit-event: V3 lifecycle authority refused (${error instanceof Error ? error.message : String(error)})\n`);
664
+ return 1;
665
+ }
666
+ }
667
+ if (eventType === "coord.status_observed" ||
668
+ eventType === "coord.presence_changed" ||
669
+ eventType === "coord.message_observed" ||
670
+ eventType === "council.state_changed" ||
671
+ eventType === "decision.state_changed") {
672
+ const { recordLiveCoordinationObservationV3 } = await import("./live-observation-v3.js");
673
+ try {
674
+ const routed = recordLiveCoordinationObservationV3({
675
+ coordRoot: root,
676
+ owner: instanceId,
677
+ nativeSessionId: sessionId,
678
+ adapter,
679
+ observation: data,
680
+ });
681
+ process.stdout.write(`${JSON.stringify({ schema_version: 2, event_type: routed.event.event_type, event_id: routed.event.event_id })}\n`);
682
+ return 0;
683
+ }
684
+ catch (error) {
685
+ process.stderr.write(`agent-coord emit-event: V3 observation refused (${error instanceof Error ? error.message : String(error)})\n`);
686
+ return 1;
687
+ }
688
+ }
689
+ process.stderr.write(`agent-coord emit-event: unsupported V3 event type ${eventType}\n`);
690
+ return 2;
726
691
  }
727
692
  /**
728
693
  * `agent-coord git-hook <event> [args]` — the single entry a host git hook
@@ -790,15 +755,27 @@ async function handleGitHook(fallbackRoot, rest) {
790
755
  if (paths.length === 0)
791
756
  return 0;
792
757
  const { resolveOwner } = await import("../hooks/resolve/owner.js");
793
- const owner = resolveOwner({ payload: null, coordRoot: root })?.instance_id;
758
+ const owner = resolveOwner({
759
+ payload: null,
760
+ coordRoot: root,
761
+ })?.instance_id;
794
762
  if (!owner)
795
763
  return 0;
796
- const { groupUnclaim } = await import("./state/heartbeat-writer.js");
797
- const reason = event === "post-commit" ? "commit" : "checkout";
764
+ const { findGroupClaims } = await import("./state/heartbeat-writer.js");
765
+ const { recordLiveClaimChangeV3 } = await import("./live-authority-v3.js");
798
766
  for (const path of paths) {
799
767
  try {
800
- for (const hit of groupUnclaim(root, owner, path)) {
801
- await emitClaimRelease(root, hit.instance_id, hit, path, reason);
768
+ for (const hit of findGroupClaims(root, owner, path)) {
769
+ recordLiveClaimChangeV3({
770
+ coordRoot: root,
771
+ owner,
772
+ subject: hit.instance_id,
773
+ nativeSessionId: hit.session_id ?? owner,
774
+ adapter: adapterFromPlatform(hit.platform),
775
+ operation: "released",
776
+ path,
777
+ access: "write",
778
+ });
802
779
  }
803
780
  }
804
781
  catch {
@@ -830,12 +807,9 @@ async function main() {
830
807
  return handleEmitEvent(root, rest);
831
808
  }
832
809
  if (subcommand === "set-task" ||
833
- subcommand === "set-turn-summary" ||
834
810
  subcommand === "release-claim" ||
835
- subcommand === "kill-heartbeat" ||
836
811
  subcommand === "heal-pidmap" ||
837
- subcommand === "heal-heartbeat" ||
838
- subcommand === "stamp-tool-activity") {
812
+ subcommand === "repair-coordination-cache") {
839
813
  return handleStateAction(root, subcommand, rest);
840
814
  }
841
815
  if (subcommand === "append-journal" || subcommand === "edit-journal") {
@@ -855,12 +829,15 @@ async function main() {
855
829
  if (subcommand === "resolve-name") {
856
830
  return handleResolveName(root, rest);
857
831
  }
858
- if (subcommand === "codex-replay") {
859
- return handleCodexReplay(root, rest);
860
- }
861
832
  if (subcommand === "stale-sweep") {
862
833
  return handleStaleSweep(root, rest);
863
834
  }
835
+ if (subcommand === "reconcile-finalization") {
836
+ return handleReconcileFinalization(root);
837
+ }
838
+ if (subcommand === "end-session") {
839
+ return handleEndSession(root, rest);
840
+ }
864
841
  if (subcommand === "session-context") {
865
842
  return handleSessionContext(root, rest);
866
843
  }
@@ -0,0 +1,14 @@
1
+ import type { SessionArchiveObservationV3 } from "./session-finalizer-v3.js";
2
+ export interface CodexArchiveScanResultV3 {
3
+ observations: SessionArchiveObservationV3[];
4
+ diagnostics: string[];
5
+ }
6
+ /**
7
+ * Read only Codex's durable lifecycle columns. Conversation content, titles,
8
+ * working directories, and model metadata never leave the adapter database.
9
+ */
10
+ export declare function readCodexArchiveObservationsV3(coordRoot: string, options?: {
11
+ databasePath?: string;
12
+ observedAt?: string;
13
+ }): CodexArchiveScanResultV3;
14
+ //# sourceMappingURL=codex-archive-v3.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-archive-v3.d.ts","sourceRoot":"","sources":["../../../src/core/agents/codex-archive-v3.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAyB7E,MAAM,WAAW,wBAAwB;IACvC,YAAY,EAAE,2BAA2B,EAAE,CAAC;IAC5C,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GAC3D,wBAAwB,CAmE1B"}