harnery 0.35.0 → 0.36.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 (616) hide show
  1. package/dist/commander.d.ts +30 -5
  2. package/dist/commander.d.ts.map +1 -1
  3. package/dist/commander.js +124 -96
  4. package/dist/commands/agents.d.ts +23 -3
  5. package/dist/commands/agents.d.ts.map +1 -1
  6. package/dist/commands/agents.js +379 -198
  7. package/dist/commands/backup.d.ts.map +1 -1
  8. package/dist/commands/backup.js +10 -10
  9. package/dist/commands/browse-session.d.ts.map +1 -1
  10. package/dist/commands/browse-session.js +12 -0
  11. package/dist/commands/browse.d.ts +1 -1
  12. package/dist/commands/browse.d.ts.map +1 -1
  13. package/dist/commands/browse.js +5 -4
  14. package/dist/commands/conversations.d.ts +10 -0
  15. package/dist/commands/conversations.d.ts.map +1 -0
  16. package/dist/commands/conversations.js +201 -0
  17. package/dist/commands/deinit.d.ts.map +1 -1
  18. package/dist/commands/deinit.js +5 -0
  19. package/dist/commands/docs.d.ts.map +1 -1
  20. package/dist/commands/docs.js +13 -2
  21. package/dist/commands/doctor.d.ts +5 -0
  22. package/dist/commands/doctor.d.ts.map +1 -1
  23. package/dist/commands/doctor.js +51 -7
  24. package/dist/commands/fetch.js +6 -5
  25. package/dist/commands/files.d.ts +22 -0
  26. package/dist/commands/files.d.ts.map +1 -0
  27. package/dist/commands/files.js +113 -0
  28. package/dist/commands/governor.js +14 -12
  29. package/dist/commands/inbox.d.ts +5 -0
  30. package/dist/commands/inbox.d.ts.map +1 -0
  31. package/dist/commands/inbox.js +57 -0
  32. package/dist/commands/init.d.ts +4 -5
  33. package/dist/commands/init.d.ts.map +1 -1
  34. package/dist/commands/init.js +63 -13
  35. package/dist/commands/ledger-v3.d.ts.map +1 -1
  36. package/dist/commands/ledger-v3.js +347 -1
  37. package/dist/commands/logs.d.ts +4 -0
  38. package/dist/commands/logs.d.ts.map +1 -0
  39. package/dist/commands/logs.js +169 -0
  40. package/dist/commands/messages.d.ts +5 -0
  41. package/dist/commands/messages.d.ts.map +1 -0
  42. package/dist/commands/messages.js +45 -0
  43. package/dist/commands/outline.d.ts +1 -1
  44. package/dist/commands/outline.d.ts.map +1 -1
  45. package/dist/commands/outline.js +2 -2
  46. package/dist/commands/read.d.ts +1 -1
  47. package/dist/commands/read.d.ts.map +1 -1
  48. package/dist/commands/read.js +2 -2
  49. package/dist/commands/semantic.d.ts.map +1 -1
  50. package/dist/commands/semantic.js +54 -2
  51. package/dist/commands/storage.d.ts +4 -0
  52. package/dist/commands/storage.d.ts.map +1 -0
  53. package/dist/commands/storage.js +238 -0
  54. package/dist/commands/tunnel.d.ts +5 -1
  55. package/dist/commands/tunnel.d.ts.map +1 -1
  56. package/dist/commands/tunnel.js +44 -31
  57. package/dist/commands/web.d.ts +3 -0
  58. package/dist/commands/web.d.ts.map +1 -1
  59. package/dist/commands/web.js +67 -7
  60. package/dist/commands/work.js +3 -3
  61. package/dist/commands/workflow.js +13 -13
  62. package/dist/core/adapters/profiles.d.ts +1 -1
  63. package/dist/core/agents/cli.js +209 -39
  64. package/dist/core/agents/live-authority-v3.d.ts +47 -1
  65. package/dist/core/agents/live-authority-v3.d.ts.map +1 -1
  66. package/dist/core/agents/live-authority-v3.js +244 -10
  67. package/dist/core/agents/live-lifecycle-v3.js +6 -1
  68. package/dist/core/agents/live-observation-v3.d.ts.map +1 -1
  69. package/dist/core/agents/live-observation-v3.js +6 -1
  70. package/dist/core/agents/render/prompt-context.d.ts +9 -3
  71. package/dist/core/agents/render/prompt-context.d.ts.map +1 -1
  72. package/dist/core/agents/render/prompt-context.js +24 -7
  73. package/dist/core/agents/rules/stop-hook.d.ts +2 -0
  74. package/dist/core/agents/rules/stop-hook.d.ts.map +1 -1
  75. package/dist/core/agents/rules/stop-hook.js +94 -13
  76. package/dist/core/agents/rules/verdict.d.ts +1 -0
  77. package/dist/core/agents/rules/verdict.d.ts.map +1 -1
  78. package/dist/core/agents/session-events.d.ts.map +1 -1
  79. package/dist/core/agents/session-events.js +4 -0
  80. package/dist/core/agents/session-finalization-state-v3.js +1 -1
  81. package/dist/core/agents/session-finalizer-v3.js +5 -1
  82. package/dist/core/agents/state/activity-log.d.ts +3 -0
  83. package/dist/core/agents/state/activity-log.d.ts.map +1 -1
  84. package/dist/core/agents/state/activity-log.js +6 -3
  85. package/dist/core/agents/state/heartbeat-writer.d.ts +6 -0
  86. package/dist/core/agents/state/heartbeat-writer.d.ts.map +1 -1
  87. package/dist/core/agents/state/heartbeat-writer.js +18 -0
  88. package/dist/core/agents/state/live-coordination-view.d.ts +5 -7
  89. package/dist/core/agents/state/live-coordination-view.d.ts.map +1 -1
  90. package/dist/core/agents/state/live-coordination-view.js +15 -90
  91. package/dist/core/agents/state/live-coordination-writer.d.ts +12 -0
  92. package/dist/core/agents/state/live-coordination-writer.d.ts.map +1 -0
  93. package/dist/core/agents/state/live-coordination-writer.js +92 -0
  94. package/dist/core/artifacts/index.d.ts +21 -0
  95. package/dist/core/artifacts/index.d.ts.map +1 -1
  96. package/dist/core/artifacts/index.js +46 -1
  97. package/dist/core/config.d.ts +62 -4
  98. package/dist/core/config.d.ts.map +1 -1
  99. package/dist/core/config.js +98 -4
  100. package/dist/core/conversations/archive.d.ts +49 -0
  101. package/dist/core/conversations/archive.d.ts.map +1 -0
  102. package/dist/core/conversations/archive.js +136 -0
  103. package/dist/core/conversations/catalog.d.ts +10 -0
  104. package/dist/core/conversations/catalog.d.ts.map +1 -0
  105. package/dist/core/conversations/catalog.js +72 -0
  106. package/dist/core/conversations/context-pack.d.ts +6 -0
  107. package/dist/core/conversations/context-pack.d.ts.map +1 -0
  108. package/dist/core/conversations/context-pack.js +60 -0
  109. package/dist/core/conversations/contract.d.ts +155 -0
  110. package/dist/core/conversations/contract.d.ts.map +1 -0
  111. package/dist/core/conversations/contract.js +1 -0
  112. package/dist/core/conversations/evaluation.d.ts +16 -0
  113. package/dist/core/conversations/evaluation.d.ts.map +1 -0
  114. package/dist/core/conversations/evaluation.js +9 -0
  115. package/dist/core/conversations/index.d.ts +10 -0
  116. package/dist/core/conversations/index.d.ts.map +1 -0
  117. package/dist/core/conversations/index.js +9 -0
  118. package/dist/core/conversations/lifecycle.d.ts +28 -0
  119. package/dist/core/conversations/lifecycle.d.ts.map +1 -0
  120. package/dist/core/conversations/lifecycle.js +29 -0
  121. package/dist/core/conversations/normalize.d.ts +14 -0
  122. package/dist/core/conversations/normalize.d.ts.map +1 -0
  123. package/dist/core/conversations/normalize.js +82 -0
  124. package/dist/core/conversations/query.d.ts +8 -0
  125. package/dist/core/conversations/query.d.ts.map +1 -0
  126. package/dist/core/conversations/query.js +280 -0
  127. package/dist/core/conversations/search-index.d.ts +9 -0
  128. package/dist/core/conversations/search-index.d.ts.map +1 -0
  129. package/dist/core/conversations/search-index.js +29 -0
  130. package/dist/core/events/legacy-storage/canary.d.ts +18 -0
  131. package/dist/core/events/legacy-storage/canary.d.ts.map +1 -0
  132. package/dist/core/events/legacy-storage/canary.js +150 -0
  133. package/dist/core/events/legacy-storage/fence.d.ts +15 -0
  134. package/dist/core/events/legacy-storage/fence.d.ts.map +1 -0
  135. package/dist/core/events/legacy-storage/fence.js +115 -0
  136. package/dist/core/events/legacy-storage/index.d.ts +6 -0
  137. package/dist/core/events/legacy-storage/index.d.ts.map +1 -0
  138. package/dist/core/events/legacy-storage/index.js +5 -0
  139. package/dist/core/events/legacy-storage/inventory.d.ts +10 -0
  140. package/dist/core/events/legacy-storage/inventory.d.ts.map +1 -0
  141. package/dist/core/events/legacy-storage/inventory.js +40 -0
  142. package/dist/core/events/legacy-storage/manifest.d.ts +23 -0
  143. package/dist/core/events/legacy-storage/manifest.d.ts.map +1 -0
  144. package/dist/core/events/legacy-storage/manifest.js +108 -0
  145. package/dist/core/events/legacy-storage/reader.d.ts +15 -0
  146. package/dist/core/events/legacy-storage/reader.d.ts.map +1 -0
  147. package/dist/core/events/legacy-storage/reader.js +154 -0
  148. package/dist/core/events/v3/authority-outbox.d.ts +7 -2
  149. package/dist/core/events/v3/authority-outbox.d.ts.map +1 -1
  150. package/dist/core/events/v3/authority-outbox.js +16 -3
  151. package/dist/core/events/v3/base-contract.d.ts +81 -41
  152. package/dist/core/events/v3/base-contract.d.ts.map +1 -1
  153. package/dist/core/events/v3/base-contract.js +17 -7
  154. package/dist/core/events/v3/bootstrap.d.ts +39 -0
  155. package/dist/core/events/v3/bootstrap.d.ts.map +1 -1
  156. package/dist/core/events/v3/bootstrap.js +167 -3
  157. package/dist/core/events/v3/capabilities.js +3 -3
  158. package/dist/core/events/v3/control-witness.d.ts +44 -0
  159. package/dist/core/events/v3/control-witness.d.ts.map +1 -0
  160. package/dist/core/events/v3/control-witness.js +233 -0
  161. package/dist/core/events/v3/control-writer.d.ts +4 -0
  162. package/dist/core/events/v3/control-writer.d.ts.map +1 -0
  163. package/dist/core/events/v3/control-writer.js +16 -0
  164. package/dist/core/events/v3/control.d.ts +8 -2
  165. package/dist/core/events/v3/control.d.ts.map +1 -1
  166. package/dist/core/events/v3/control.js +46 -18
  167. package/dist/core/events/v3/coordination-transaction-recovery.d.ts +42 -0
  168. package/dist/core/events/v3/coordination-transaction-recovery.d.ts.map +1 -0
  169. package/dist/core/events/v3/coordination-transaction-recovery.js +342 -0
  170. package/dist/core/events/v3/coordination-view.d.ts.map +1 -1
  171. package/dist/core/events/v3/coordination-view.js +16 -1
  172. package/dist/core/events/v3/generated.d.ts +1 -1
  173. package/dist/core/events/v3/generated.js +1 -1
  174. package/dist/core/events/v3/index.d.ts +4 -2
  175. package/dist/core/events/v3/index.d.ts.map +1 -1
  176. package/dist/core/events/v3/index.js +3 -1
  177. package/dist/core/events/v3/live-route-observer.d.ts +31 -0
  178. package/dist/core/events/v3/live-route-observer.d.ts.map +1 -0
  179. package/dist/core/events/v3/live-route-observer.js +58 -0
  180. package/dist/core/events/v3/live-routing.d.ts +13 -21
  181. package/dist/core/events/v3/live-routing.d.ts.map +1 -1
  182. package/dist/core/events/v3/live-routing.js +45 -41
  183. package/dist/core/events/v3/producers/coordination-recorder.d.ts +11 -1
  184. package/dist/core/events/v3/producers/coordination-recorder.d.ts.map +1 -1
  185. package/dist/core/events/v3/producers/coordination-recorder.js +76 -10
  186. package/dist/core/events/v3/producers/diagnostic-summaries.d.ts +129 -0
  187. package/dist/core/events/v3/producers/diagnostic-summaries.d.ts.map +1 -0
  188. package/dist/core/events/v3/producers/diagnostic-summaries.js +499 -0
  189. package/dist/core/events/v3/producers/hook-base.js +1 -1
  190. package/dist/core/events/v3/producers/intake.d.ts +7 -0
  191. package/dist/core/events/v3/producers/intake.d.ts.map +1 -1
  192. package/dist/core/events/v3/producers/intake.js +25 -2
  193. package/dist/core/events/v3/producers/producer-state-observer.d.ts +8 -0
  194. package/dist/core/events/v3/producers/producer-state-observer.d.ts.map +1 -0
  195. package/dist/core/events/v3/producers/producer-state-observer.js +45 -0
  196. package/dist/core/events/v3/producers/recorder.d.ts +55 -1
  197. package/dist/core/events/v3/producers/recorder.d.ts.map +1 -1
  198. package/dist/core/events/v3/producers/recorder.js +353 -24
  199. package/dist/core/events/v3/reader.d.ts +51 -0
  200. package/dist/core/events/v3/reader.d.ts.map +1 -1
  201. package/dist/core/events/v3/reader.js +181 -1
  202. package/dist/core/events/v3/rotation-config.d.ts +9 -0
  203. package/dist/core/events/v3/rotation-config.d.ts.map +1 -0
  204. package/dist/core/events/v3/rotation-config.js +91 -0
  205. package/dist/core/events/v3/runtime-build.d.ts +11 -0
  206. package/dist/core/events/v3/runtime-build.d.ts.map +1 -0
  207. package/dist/core/events/v3/runtime-build.js +39 -0
  208. package/dist/core/events/v3/runtime-identity.d.ts +5 -0
  209. package/dist/core/events/v3/runtime-identity.d.ts.map +1 -0
  210. package/dist/core/events/v3/runtime-identity.js +18 -0
  211. package/dist/core/events/v3/runtime-telemetry-capabilities.d.ts +6 -5
  212. package/dist/core/events/v3/runtime-telemetry-capabilities.d.ts.map +1 -1
  213. package/dist/core/events/v3/runtime-telemetry-capabilities.js +1 -1
  214. package/dist/core/events/v3/support-storage/classify.d.ts +46 -0
  215. package/dist/core/events/v3/support-storage/classify.d.ts.map +1 -0
  216. package/dist/core/events/v3/support-storage/classify.js +149 -0
  217. package/dist/core/events/v3/support-storage/eligibility.d.ts +29 -0
  218. package/dist/core/events/v3/support-storage/eligibility.d.ts.map +1 -0
  219. package/dist/core/events/v3/support-storage/eligibility.js +35 -0
  220. package/dist/core/events/v3/support-storage/index.d.ts +10 -0
  221. package/dist/core/events/v3/support-storage/index.d.ts.map +1 -0
  222. package/dist/core/events/v3/support-storage/index.js +9 -0
  223. package/dist/core/events/v3/support-storage/inventory.d.ts +30 -0
  224. package/dist/core/events/v3/support-storage/inventory.d.ts.map +1 -0
  225. package/dist/core/events/v3/support-storage/inventory.js +94 -0
  226. package/dist/core/events/v3/support-storage/logical-authority.d.ts +14 -0
  227. package/dist/core/events/v3/support-storage/logical-authority.d.ts.map +1 -0
  228. package/dist/core/events/v3/support-storage/logical-authority.js +104 -0
  229. package/dist/core/events/v3/support-storage/maintenance.d.ts +98 -0
  230. package/dist/core/events/v3/support-storage/maintenance.d.ts.map +1 -0
  231. package/dist/core/events/v3/support-storage/maintenance.js +352 -0
  232. package/dist/core/events/v3/support-storage/pack-contract.d.ts +59 -0
  233. package/dist/core/events/v3/support-storage/pack-contract.d.ts.map +1 -0
  234. package/dist/core/events/v3/support-storage/pack-contract.js +249 -0
  235. package/dist/core/events/v3/support-storage/pack-reader.d.ts +34 -0
  236. package/dist/core/events/v3/support-storage/pack-reader.d.ts.map +1 -0
  237. package/dist/core/events/v3/support-storage/pack-reader.js +258 -0
  238. package/dist/core/events/v3/support-storage/pack-writer.d.ts +30 -0
  239. package/dist/core/events/v3/support-storage/pack-writer.d.ts.map +1 -0
  240. package/dist/core/events/v3/support-storage/pack-writer.js +268 -0
  241. package/dist/core/events/v3/support-storage/recovery.d.ts +15 -0
  242. package/dist/core/events/v3/support-storage/recovery.d.ts.map +1 -0
  243. package/dist/core/events/v3/support-storage/recovery.js +22 -0
  244. package/dist/core/events/v3/turn-telemetry.d.ts +14 -8
  245. package/dist/core/events/v3/turn-telemetry.d.ts.map +1 -1
  246. package/dist/core/events/v3/turn-telemetry.js +32 -2
  247. package/dist/core/events/v3/writer.d.ts +13 -1
  248. package/dist/core/events/v3/writer.d.ts.map +1 -1
  249. package/dist/core/events/v3/writer.js +126 -12
  250. package/dist/core/governor/plan-read.d.ts.map +1 -1
  251. package/dist/core/governor/plan-read.js +5 -21
  252. package/dist/core/governor/planning.js +6 -8
  253. package/dist/core/governor/service-read.d.ts +12 -0
  254. package/dist/core/governor/service-read.d.ts.map +1 -1
  255. package/dist/core/governor/service-read.js +266 -2
  256. package/dist/core/governor/service.d.ts +1 -0
  257. package/dist/core/governor/service.d.ts.map +1 -1
  258. package/dist/core/governor/service.js +53 -18
  259. package/dist/core/guard/evidence-v3.d.ts.map +1 -1
  260. package/dist/core/guard/evidence-v3.js +2 -0
  261. package/dist/core/hooks/adapter/events.d.ts.map +1 -1
  262. package/dist/core/hooks/adapter/events.js +1 -0
  263. package/dist/core/hooks/adapter/output.d.ts +4 -2
  264. package/dist/core/hooks/adapter/output.d.ts.map +1 -1
  265. package/dist/core/hooks/adapter/output.js +13 -5
  266. package/dist/core/hooks/adapter/runtime-telemetry.d.ts +27 -4
  267. package/dist/core/hooks/adapter/runtime-telemetry.d.ts.map +1 -1
  268. package/dist/core/hooks/adapter/runtime-telemetry.js +307 -6
  269. package/dist/core/hooks/cli.js +212 -30
  270. package/dist/core/hooks/effects/image-capture.d.ts +1 -1
  271. package/dist/core/hooks/effects/image-capture.d.ts.map +1 -1
  272. package/dist/core/hooks/effects/image-capture.js +4 -2
  273. package/dist/core/hooks/remediation-cap.d.ts +8 -3
  274. package/dist/core/hooks/remediation-cap.d.ts.map +1 -1
  275. package/dist/core/hooks/remediation-cap.js +3 -11
  276. package/dist/core/hooks/resolve/coord-root.d.ts +22 -9
  277. package/dist/core/hooks/resolve/coord-root.d.ts.map +1 -1
  278. package/dist/core/hooks/resolve/coord-root.js +92 -11
  279. package/dist/core/hooks/resolve/owner.d.ts.map +1 -1
  280. package/dist/core/hooks/resolve/owner.js +5 -0
  281. package/dist/core/hooks/resolve/transcript.d.ts +8 -0
  282. package/dist/core/hooks/resolve/transcript.d.ts.map +1 -1
  283. package/dist/core/hooks/resolve/transcript.js +11 -0
  284. package/dist/core/inbox/contract.d.ts +64 -0
  285. package/dist/core/inbox/contract.d.ts.map +1 -0
  286. package/dist/core/inbox/contract.js +13 -0
  287. package/dist/core/inbox/index.d.ts +5 -0
  288. package/dist/core/inbox/index.d.ts.map +1 -0
  289. package/dist/core/inbox/index.js +4 -0
  290. package/dist/core/inbox/lifecycle.d.ts +22 -0
  291. package/dist/core/inbox/lifecycle.d.ts.map +1 -0
  292. package/dist/core/inbox/lifecycle.js +41 -0
  293. package/dist/core/inbox/service.d.ts +36 -0
  294. package/dist/core/inbox/service.d.ts.map +1 -0
  295. package/dist/core/inbox/service.js +210 -0
  296. package/dist/core/inbox/watcher.d.ts +7 -0
  297. package/dist/core/inbox/watcher.d.ts.map +1 -0
  298. package/dist/core/inbox/watcher.js +26 -0
  299. package/dist/core/presence/codec-digest.d.ts.map +1 -1
  300. package/dist/core/presence/codec-digest.js +14 -3
  301. package/dist/core/presence/relay-client.d.ts +1 -0
  302. package/dist/core/presence/relay-client.d.ts.map +1 -1
  303. package/dist/core/presence/relay-client.js +52 -8
  304. package/dist/core/semantic/adapters.d.ts +11 -8
  305. package/dist/core/semantic/adapters.d.ts.map +1 -1
  306. package/dist/core/semantic/adapters.js +169 -31
  307. package/dist/core/semantic/contract.d.ts +532 -48
  308. package/dist/core/semantic/contract.d.ts.map +1 -1
  309. package/dist/core/semantic/contract.js +104 -3
  310. package/dist/core/semantic/index.d.ts +7 -3
  311. package/dist/core/semantic/index.d.ts.map +1 -1
  312. package/dist/core/semantic/index.js +7 -3
  313. package/dist/core/semantic/once.d.ts +6 -1
  314. package/dist/core/semantic/once.d.ts.map +1 -1
  315. package/dist/core/semantic/once.js +80 -9
  316. package/dist/core/semantic/prompt.d.ts.map +1 -1
  317. package/dist/core/semantic/prompt.js +14 -1
  318. package/dist/core/semantic/review.d.ts +144 -0
  319. package/dist/core/semantic/review.d.ts.map +1 -0
  320. package/dist/core/semantic/review.js +544 -0
  321. package/dist/core/semantic/routes.d.ts +10 -0
  322. package/dist/core/semantic/routes.d.ts.map +1 -0
  323. package/dist/core/semantic/routes.js +21 -0
  324. package/dist/core/semantic/scheduler.d.ts +14 -3
  325. package/dist/core/semantic/scheduler.d.ts.map +1 -1
  326. package/dist/core/semantic/scheduler.js +30 -6
  327. package/dist/core/semantic/service-status.d.ts +20 -0
  328. package/dist/core/semantic/service-status.d.ts.map +1 -1
  329. package/dist/core/semantic/service-status.js +60 -4
  330. package/dist/core/semantic/service.d.ts +1 -0
  331. package/dist/core/semantic/service.d.ts.map +1 -1
  332. package/dist/core/semantic/service.js +104 -15
  333. package/dist/core/semantic/soak.d.ts +75 -0
  334. package/dist/core/semantic/soak.d.ts.map +1 -0
  335. package/dist/core/semantic/soak.js +476 -0
  336. package/dist/core/semantic/storage.d.ts +11 -1
  337. package/dist/core/semantic/storage.d.ts.map +1 -1
  338. package/dist/core/semantic/storage.js +4 -3
  339. package/dist/core/semantic/usage.d.ts +43 -0
  340. package/dist/core/semantic/usage.d.ts.map +1 -0
  341. package/dist/core/semantic/usage.js +193 -0
  342. package/dist/core/semantic/validate.d.ts +3 -1
  343. package/dist/core/semantic/validate.d.ts.map +1 -1
  344. package/dist/core/semantic/validate.js +34 -1
  345. package/dist/core/storage/buffer.d.ts +28 -0
  346. package/dist/core/storage/buffer.d.ts.map +1 -0
  347. package/dist/core/storage/buffer.js +101 -0
  348. package/dist/core/storage/builtins.d.ts +3 -0
  349. package/dist/core/storage/builtins.d.ts.map +1 -0
  350. package/dist/core/storage/builtins.js +683 -0
  351. package/dist/core/storage/catalog.d.ts +19 -0
  352. package/dist/core/storage/catalog.d.ts.map +1 -0
  353. package/dist/core/storage/catalog.js +365 -0
  354. package/dist/core/storage/config.d.ts +16 -0
  355. package/dist/core/storage/config.d.ts.map +1 -0
  356. package/dist/core/storage/config.js +311 -0
  357. package/dist/core/storage/contract.d.ts +275 -0
  358. package/dist/core/storage/contract.d.ts.map +1 -0
  359. package/dist/core/storage/contract.js +3 -0
  360. package/dist/core/storage/durable-history.d.ts +36 -0
  361. package/dist/core/storage/durable-history.d.ts.map +1 -0
  362. package/dist/core/storage/durable-history.js +606 -0
  363. package/dist/core/storage/health.d.ts +4 -0
  364. package/dist/core/storage/health.d.ts.map +1 -0
  365. package/dist/core/storage/health.js +65 -0
  366. package/dist/core/storage/index.d.ts +16 -0
  367. package/dist/core/storage/index.d.ts.map +1 -0
  368. package/dist/core/storage/index.js +15 -0
  369. package/dist/core/storage/inventory.d.ts +25 -0
  370. package/dist/core/storage/inventory.d.ts.map +1 -0
  371. package/dist/core/storage/inventory.js +666 -0
  372. package/dist/core/storage/jsonl.d.ts +52 -0
  373. package/dist/core/storage/jsonl.d.ts.map +1 -0
  374. package/dist/core/storage/jsonl.js +156 -0
  375. package/dist/core/storage/log-retention.d.ts +52 -0
  376. package/dist/core/storage/log-retention.d.ts.map +1 -0
  377. package/dist/core/storage/log-retention.js +419 -0
  378. package/dist/core/storage/logger.d.ts +82 -0
  379. package/dist/core/storage/logger.d.ts.map +1 -0
  380. package/dist/core/storage/logger.js +411 -0
  381. package/dist/core/storage/maintenance-providers.d.ts +26 -0
  382. package/dist/core/storage/maintenance-providers.d.ts.map +1 -0
  383. package/dist/core/storage/maintenance-providers.js +141 -0
  384. package/dist/core/storage/maintenance.d.ts +125 -0
  385. package/dist/core/storage/maintenance.d.ts.map +1 -0
  386. package/dist/core/storage/maintenance.js +609 -0
  387. package/dist/core/storage/metrics.d.ts +60 -0
  388. package/dist/core/storage/metrics.d.ts.map +1 -0
  389. package/dist/core/storage/metrics.js +134 -0
  390. package/dist/core/storage/policy.d.ts +7 -0
  391. package/dist/core/storage/policy.d.ts.map +1 -0
  392. package/dist/core/storage/policy.js +110 -0
  393. package/dist/core/storage/process-log.d.ts +38 -0
  394. package/dist/core/storage/process-log.d.ts.map +1 -0
  395. package/dist/core/storage/process-log.js +165 -0
  396. package/dist/core/storage/query.d.ts +34 -0
  397. package/dist/core/storage/query.d.ts.map +1 -0
  398. package/dist/core/storage/query.js +295 -0
  399. package/dist/core/storage/receipts.d.ts +23 -0
  400. package/dist/core/storage/receipts.d.ts.map +1 -0
  401. package/dist/core/storage/receipts.js +117 -0
  402. package/dist/core/storage/segments.d.ts +84 -0
  403. package/dist/core/storage/segments.d.ts.map +1 -0
  404. package/dist/core/storage/segments.js +542 -0
  405. package/dist/core/storage/sink-graph.d.ts +65 -0
  406. package/dist/core/storage/sink-graph.d.ts.map +1 -0
  407. package/dist/core/storage/sink-graph.js +213 -0
  408. package/dist/core/storage/storm-control.d.ts +23 -0
  409. package/dist/core/storage/storm-control.d.ts.map +1 -0
  410. package/dist/core/storage/storm-control.js +59 -0
  411. package/dist/core/work/state.d.ts.map +1 -1
  412. package/dist/core/work/state.js +10 -14
  413. package/dist/core/workflow/live-session-v3.d.ts.map +1 -1
  414. package/dist/core/workflow/live-session-v3.js +2 -1
  415. package/dist/index.d.ts +2 -0
  416. package/dist/index.d.ts.map +1 -1
  417. package/dist/index.js +2 -0
  418. package/dist/lazy-commands.d.ts +26 -0
  419. package/dist/lazy-commands.d.ts.map +1 -0
  420. package/dist/lazy-commands.js +210 -0
  421. package/dist/lib/docs-lint.d.ts +2 -0
  422. package/dist/lib/docs-lint.d.ts.map +1 -1
  423. package/dist/lib/docs-lint.js +45 -80
  424. package/dist/lib/docs-metadata-audit.d.ts +3 -0
  425. package/dist/lib/docs-metadata-audit.d.ts.map +1 -1
  426. package/dist/lib/docs-metadata-audit.js +13 -23
  427. package/dist/lib/docs-metadata-sync.d.ts +1 -0
  428. package/dist/lib/docs-metadata-sync.d.ts.map +1 -1
  429. package/dist/lib/docs-metadata-sync.js +28 -10
  430. package/dist/lib/docs-repository-view.d.ts +22 -0
  431. package/dist/lib/docs-repository-view.d.ts.map +1 -0
  432. package/dist/lib/docs-repository-view.js +185 -0
  433. package/dist/lib/http/client.d.ts +11 -5
  434. package/dist/lib/http/client.d.ts.map +1 -1
  435. package/dist/lib/http/client.js +22 -4
  436. package/dist/lib/http/index.d.ts +1 -1
  437. package/dist/lib/http/index.d.ts.map +1 -1
  438. package/dist/lib/http/index.js +1 -1
  439. package/dist/lib/indexer-exclusions.d.ts +27 -0
  440. package/dist/lib/indexer-exclusions.d.ts.map +1 -0
  441. package/dist/lib/indexer-exclusions.js +176 -0
  442. package/dist/lib/instructions/templates.d.ts.map +1 -1
  443. package/dist/lib/instructions/templates.js +5 -0
  444. package/dist/lib/local-file-url.d.ts +9 -0
  445. package/dist/lib/local-file-url.d.ts.map +1 -0
  446. package/dist/lib/local-file-url.js +20 -0
  447. package/dist/lib/web-performance.d.ts +118 -0
  448. package/dist/lib/web-performance.d.ts.map +1 -0
  449. package/dist/lib/web-performance.js +192 -0
  450. package/package.json +29 -2
  451. package/schemas/config.schema.json +58 -0
  452. package/schemas/event-v3.schema.json +324 -112
  453. package/src/commander.ts +462 -95
  454. package/src/commands/agents.ts +517 -190
  455. package/src/commands/backup.ts +18 -14
  456. package/src/commands/browse-session.ts +12 -0
  457. package/src/commands/browse.ts +6 -7
  458. package/src/commands/conversations.ts +279 -0
  459. package/src/commands/deinit.ts +6 -0
  460. package/src/commands/docs.ts +25 -6
  461. package/src/commands/doctor.ts +75 -9
  462. package/src/commands/fetch.ts +7 -6
  463. package/src/commands/files.ts +143 -0
  464. package/src/commands/governor.ts +13 -12
  465. package/src/commands/inbox.ts +61 -0
  466. package/src/commands/init.ts +78 -16
  467. package/src/commands/ledger-v3.ts +421 -1
  468. package/src/commands/logs.ts +224 -0
  469. package/src/commands/messages.ts +61 -0
  470. package/src/commands/outline.ts +6 -2
  471. package/src/commands/read.ts +6 -2
  472. package/src/commands/semantic.ts +66 -1
  473. package/src/commands/storage.ts +310 -0
  474. package/src/commands/tunnel.ts +66 -52
  475. package/src/commands/web.ts +77 -7
  476. package/src/commands/work.ts +3 -3
  477. package/src/commands/workflow.ts +13 -13
  478. package/src/core/agents/cli.ts +259 -53
  479. package/src/core/agents/live-authority-v3.ts +341 -10
  480. package/src/core/agents/live-lifecycle-v3.ts +6 -1
  481. package/src/core/agents/live-observation-v3.ts +6 -1
  482. package/src/core/agents/render/prompt-context.ts +27 -6
  483. package/src/core/agents/rules/stop-hook.ts +107 -16
  484. package/src/core/agents/rules/verdict.ts +1 -0
  485. package/src/core/agents/session-events.ts +4 -0
  486. package/src/core/agents/session-finalization-state-v3.ts +1 -1
  487. package/src/core/agents/session-finalizer-v3.ts +4 -1
  488. package/src/core/agents/state/activity-log.ts +7 -2
  489. package/src/core/agents/state/heartbeat-writer.ts +27 -0
  490. package/src/core/agents/state/live-coordination-view.ts +16 -105
  491. package/src/core/agents/state/live-coordination-writer.ts +141 -0
  492. package/src/core/artifacts/index.ts +64 -1
  493. package/src/core/config.ts +126 -5
  494. package/src/core/conversations/archive.ts +237 -0
  495. package/src/core/conversations/catalog.ts +79 -0
  496. package/src/core/conversations/context-pack.ts +72 -0
  497. package/src/core/conversations/contract.ts +178 -0
  498. package/src/core/conversations/evaluation.ts +30 -0
  499. package/src/core/conversations/index.ts +9 -0
  500. package/src/core/conversations/lifecycle.ts +63 -0
  501. package/src/core/conversations/normalize.ts +105 -0
  502. package/src/core/conversations/query.ts +318 -0
  503. package/src/core/conversations/search-index.ts +48 -0
  504. package/src/core/events/legacy-storage/canary.ts +177 -0
  505. package/src/core/events/legacy-storage/fence.ts +129 -0
  506. package/src/core/events/legacy-storage/index.ts +5 -0
  507. package/src/core/events/legacy-storage/inventory.ts +51 -0
  508. package/src/core/events/legacy-storage/manifest.ts +136 -0
  509. package/src/core/events/legacy-storage/reader.ts +178 -0
  510. package/src/core/events/v3/authority-outbox.ts +22 -1
  511. package/src/core/events/v3/base-contract.ts +17 -7
  512. package/src/core/events/v3/bootstrap.ts +195 -2
  513. package/src/core/events/v3/capabilities.ts +3 -3
  514. package/src/core/events/v3/control-witness.ts +339 -0
  515. package/src/core/events/v3/control-writer.ts +16 -0
  516. package/src/core/events/v3/control.ts +54 -18
  517. package/src/core/events/v3/coordination-transaction-recovery.ts +477 -0
  518. package/src/core/events/v3/coordination-view.ts +17 -1
  519. package/src/core/events/v3/generated.ts +1 -1
  520. package/src/core/events/v3/index.ts +5 -2
  521. package/src/core/events/v3/live-route-observer.ts +80 -0
  522. package/src/core/events/v3/live-routing.ts +64 -46
  523. package/src/core/events/v3/producers/coordination-recorder.ts +95 -10
  524. package/src/core/events/v3/producers/diagnostic-summaries.ts +593 -0
  525. package/src/core/events/v3/producers/hook-base.ts +1 -1
  526. package/src/core/events/v3/producers/intake.ts +30 -2
  527. package/src/core/events/v3/producers/producer-state-observer.ts +52 -0
  528. package/src/core/events/v3/producers/recorder.ts +571 -33
  529. package/src/core/events/v3/reader.ts +243 -2
  530. package/src/core/events/v3/rotation-config.ts +98 -0
  531. package/src/core/events/v3/runtime-build.ts +41 -0
  532. package/src/core/events/v3/runtime-identity.ts +16 -0
  533. package/src/core/events/v3/runtime-telemetry-capabilities.ts +14 -8
  534. package/src/core/events/v3/support-storage/classify.ts +209 -0
  535. package/src/core/events/v3/support-storage/eligibility.ts +58 -0
  536. package/src/core/events/v3/support-storage/index.ts +9 -0
  537. package/src/core/events/v3/support-storage/inventory.ts +135 -0
  538. package/src/core/events/v3/support-storage/logical-authority.ts +117 -0
  539. package/src/core/events/v3/support-storage/maintenance.ts +501 -0
  540. package/src/core/events/v3/support-storage/pack-contract.ts +337 -0
  541. package/src/core/events/v3/support-storage/pack-reader.ts +346 -0
  542. package/src/core/events/v3/support-storage/pack-writer.ts +352 -0
  543. package/src/core/events/v3/support-storage/recovery.ts +43 -0
  544. package/src/core/events/v3/turn-telemetry.ts +58 -7
  545. package/src/core/events/v3/writer.ts +168 -16
  546. package/src/core/governor/plan-read.ts +5 -18
  547. package/src/core/governor/planning.ts +5 -8
  548. package/src/core/governor/service-read.ts +320 -2
  549. package/src/core/governor/service.ts +49 -22
  550. package/src/core/guard/evidence-v3.ts +1 -0
  551. package/src/core/hooks/adapter/events.ts +1 -0
  552. package/src/core/hooks/adapter/output.ts +12 -5
  553. package/src/core/hooks/adapter/runtime-telemetry.ts +408 -13
  554. package/src/core/hooks/cli.ts +226 -32
  555. package/src/core/hooks/effects/image-capture.ts +4 -1
  556. package/src/core/hooks/remediation-cap.ts +12 -6
  557. package/src/core/hooks/resolve/coord-root.ts +91 -11
  558. package/src/core/hooks/resolve/owner.ts +4 -0
  559. package/src/core/hooks/resolve/transcript.ts +18 -0
  560. package/src/core/inbox/contract.ts +81 -0
  561. package/src/core/inbox/index.ts +4 -0
  562. package/src/core/inbox/lifecycle.ts +104 -0
  563. package/src/core/inbox/service.ts +305 -0
  564. package/src/core/inbox/watcher.ts +36 -0
  565. package/src/core/presence/codec-digest.ts +15 -9
  566. package/src/core/presence/relay-client.ts +55 -7
  567. package/src/core/semantic/adapters.ts +200 -41
  568. package/src/core/semantic/contract.ts +135 -3
  569. package/src/core/semantic/index.ts +76 -2
  570. package/src/core/semantic/once.ts +93 -7
  571. package/src/core/semantic/prompt.ts +13 -1
  572. package/src/core/semantic/review.ts +803 -0
  573. package/src/core/semantic/routes.ts +30 -0
  574. package/src/core/semantic/scheduler.ts +49 -5
  575. package/src/core/semantic/service-status.ts +99 -5
  576. package/src/core/semantic/service.ts +116 -15
  577. package/src/core/semantic/soak.ts +638 -0
  578. package/src/core/semantic/storage.ts +20 -6
  579. package/src/core/semantic/usage.ts +272 -0
  580. package/src/core/semantic/validate.ts +31 -0
  581. package/src/core/storage/buffer.ts +124 -0
  582. package/src/core/storage/builtins.ts +916 -0
  583. package/src/core/storage/catalog.ts +467 -0
  584. package/src/core/storage/config.ts +423 -0
  585. package/src/core/storage/contract.ts +342 -0
  586. package/src/core/storage/durable-history.ts +738 -0
  587. package/src/core/storage/health.ts +76 -0
  588. package/src/core/storage/index.ts +15 -0
  589. package/src/core/storage/inventory.ts +859 -0
  590. package/src/core/storage/jsonl.ts +213 -0
  591. package/src/core/storage/log-retention.ts +555 -0
  592. package/src/core/storage/logger.ts +546 -0
  593. package/src/core/storage/maintenance-providers.ts +200 -0
  594. package/src/core/storage/maintenance.ts +929 -0
  595. package/src/core/storage/metrics.ts +199 -0
  596. package/src/core/storage/policy.ts +141 -0
  597. package/src/core/storage/process-log.ts +203 -0
  598. package/src/core/storage/query.ts +360 -0
  599. package/src/core/storage/receipts.ts +162 -0
  600. package/src/core/storage/segments.ts +721 -0
  601. package/src/core/storage/sink-graph.ts +343 -0
  602. package/src/core/storage/storm-control.ts +91 -0
  603. package/src/core/work/state.ts +12 -21
  604. package/src/core/workflow/live-session-v3.ts +2 -4
  605. package/src/index.ts +2 -0
  606. package/src/lazy-commands.ts +294 -0
  607. package/src/lib/docs-lint.ts +58 -77
  608. package/src/lib/docs-metadata-audit.ts +26 -21
  609. package/src/lib/docs-metadata-sync.ts +32 -9
  610. package/src/lib/docs-repository-view.ts +220 -0
  611. package/src/lib/http/client.ts +44 -8
  612. package/src/lib/http/index.ts +6 -1
  613. package/src/lib/indexer-exclusions.ts +173 -0
  614. package/src/lib/instructions/templates.ts +5 -0
  615. package/src/lib/local-file-url.ts +31 -0
  616. package/src/lib/web-performance.ts +335 -0
@@ -0,0 +1,31 @@
1
+ import { type EventV3ControlState, type EventV3WriteMode } from "./control.js";
2
+ export type LiveEventLedgerRouteV3 = {
3
+ state: "v3";
4
+ mode: EventV3WriteMode;
5
+ build_id: `build_${string}`;
6
+ /** Genesis id of the epoch this route was resolved against: the epoch fence for derived writes. */
7
+ genesis_id: `gex_${string}`;
8
+ } | {
9
+ state: "blocked";
10
+ reason: string;
11
+ };
12
+ /**
13
+ * Observe the V3-only ledger route without repairing control pairs, replacing
14
+ * epochs, launching processes, or writing files. Read-only consumers fail
15
+ * closed until a command or producer repairs the route.
16
+ */
17
+ export declare function observeLiveEventLedgerRouteV3(coordRoot: string): LiveEventLedgerRouteV3;
18
+ /** Project one already-read control state into the passive route contract. */
19
+ export declare function liveEventLedgerRouteFromControlV3(control: EventV3ControlState): LiveEventLedgerRouteV3;
20
+ export declare function runtimeCapabilityProfileCurrentV3(control: Extract<EventV3ControlState, {
21
+ state: "candidate" | "active";
22
+ }>): boolean;
23
+ export declare function liveInstanceIdV3(instanceId: string): `inst_${string}`;
24
+ /**
25
+ * The adapter-native id a canonical `inst_*` id carries, for display and for
26
+ * joins against native-keyed records. Only the direct prefix form round-trips:
27
+ * a hashed id has no recoverable native form and is returned unchanged, so
28
+ * never treat this as a guaranteed inverse of `liveInstanceIdV3`.
29
+ */
30
+ export declare function nativeInstanceIdV3(instanceId: string): string;
31
+ //# sourceMappingURL=live-route-observer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-route-observer.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/live-route-observer.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EAEtB,MAAM,cAAc,CAAC;AAGtB,MAAM,MAAM,sBAAsB,GAC9B;IACE,KAAK,EAAE,IAAI,CAAC;IACZ,IAAI,EAAE,gBAAgB,CAAC;IACvB,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,mGAAmG;IACnG,UAAU,EAAE,OAAO,MAAM,EAAE,CAAC;CAC7B,GACD;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzC;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,MAAM,GAAG,sBAAsB,CAEvF;AAED,8EAA8E;AAC9E,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,mBAAmB,GAC3B,sBAAsB,CAkBxB;AAED,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,OAAO,CAAC,mBAAmB,EAAE;IAAE,KAAK,EAAE,WAAW,GAAG,QAAQ,CAAA;CAAE,CAAC,GACvE,OAAO,CAST;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,MAAM,EAAE,CAIrE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE7D"}
@@ -0,0 +1,58 @@
1
+ import { createHash } from "node:crypto";
2
+ import { canonicalJsonV3, sha256V3 } from "./canonical.js";
3
+ import { ADAPTER_CAPABILITY_PROFILES_V3 } from "./capabilities.js";
4
+ import { readEventV3ControlState, } from "./control.js";
5
+ import { liveEventV3BuildId } from "./runtime-identity.js";
6
+ /**
7
+ * Observe the V3-only ledger route without repairing control pairs, replacing
8
+ * epochs, launching processes, or writing files. Read-only consumers fail
9
+ * closed until a command or producer repairs the route.
10
+ */
11
+ export function observeLiveEventLedgerRouteV3(coordRoot) {
12
+ return liveEventLedgerRouteFromControlV3(readEventV3ControlState(coordRoot));
13
+ }
14
+ /** Project one already-read control state into the passive route contract. */
15
+ export function liveEventLedgerRouteFromControlV3(control) {
16
+ if (control.state === "closed")
17
+ return { state: "blocked", reason: "v3_not_initialized" };
18
+ if (control.state !== "candidate" && control.state !== "active") {
19
+ return { state: "blocked", reason: `${control.state}:${control.reason}` };
20
+ }
21
+ if (!runtimeCapabilityProfileCurrentV3(control)) {
22
+ return { state: "blocked", reason: "runtime_capability_profile_incompatible" };
23
+ }
24
+ const buildId = liveEventV3BuildId(control.genesis.profile.harnery_commit);
25
+ if (!control.genesis.profile.producer_build_ids.includes(buildId)) {
26
+ return { state: "blocked", reason: "live_producer_build_not_approved" };
27
+ }
28
+ return {
29
+ state: "v3",
30
+ mode: control.state,
31
+ build_id: buildId,
32
+ genesis_id: control.genesis.event.payload.genesis_id,
33
+ };
34
+ }
35
+ export function runtimeCapabilityProfileCurrentV3(control) {
36
+ const expected = Object.values(ADAPTER_CAPABILITY_PROFILES_V3).map((profile) => sha256V3(canonicalJsonV3(profile)));
37
+ const approved = control.genesis.profile.adapter_capability_profile_digests;
38
+ const expectedDigests = new Set(expected);
39
+ return control.state === "candidate"
40
+ ? approved.some((digest) => expectedDigests.has(digest))
41
+ : expected.every((digest) => approved.includes(digest));
42
+ }
43
+ export function liveInstanceIdV3(instanceId) {
44
+ if (/^inst_[a-zA-Z0-9._-]{1,128}$/.test(instanceId))
45
+ return instanceId;
46
+ if (/^[a-zA-Z0-9._-]{1,128}$/.test(instanceId))
47
+ return `inst_${instanceId}`;
48
+ return `inst_${createHash("sha256").update(instanceId.normalize("NFC")).digest("hex")}`;
49
+ }
50
+ /**
51
+ * The adapter-native id a canonical `inst_*` id carries, for display and for
52
+ * joins against native-keyed records. Only the direct prefix form round-trips:
53
+ * a hashed id has no recoverable native form and is returned unchanged, so
54
+ * never treat this as a guaranteed inverse of `liveInstanceIdV3`.
55
+ */
56
+ export function nativeInstanceIdV3(instanceId) {
57
+ return instanceId.startsWith("inst_") ? instanceId.slice("inst_".length) : instanceId;
58
+ }
@@ -1,36 +1,21 @@
1
1
  import type { Adapter } from "../../adapter.js";
2
2
  import type { ParsedPayload } from "../../hooks/adapter/parse.js";
3
3
  import type { EventV3 } from "./contract.js";
4
- import { type EventV3WriteMode } from "./control.js";
4
+ import { type LiveEventLedgerRouteV3 } from "./live-route-observer.js";
5
5
  import type { HookSignalV3 } from "./producers/hook.js";
6
6
  import type { TurnRitualEvidenceV3 } from "./producers/hook-base.js";
7
- import { type RecordHookSignalV3Result } from "./producers/recorder.js";
7
+ import { type ReconcilePendingRuntimeContextV3Result, type RecordHookSignalV3Result } from "./producers/recorder.js";
8
+ export { type LiveEventLedgerRouteV3, liveInstanceIdV3, nativeInstanceIdV3, } from "./live-route-observer.js";
9
+ export { liveEventV3BuildId, livePlatformV3 } from "./runtime-identity.js";
8
10
  export declare const LIVE_HOOK_V3_PRODUCER_ID: "prd_agent-hook";
9
11
  export declare const LIVE_COMMAND_V3_PRODUCER_ID: "prd_session-tee";
10
- export type LiveEventLedgerRouteV3 = {
11
- state: "v3";
12
- mode: EventV3WriteMode;
13
- build_id: `build_${string}`;
14
- } | {
15
- state: "blocked";
16
- reason: string;
17
- };
18
12
  /**
19
13
  * Resolve the V3-only ledger route. A root without an initialized V3 control
20
- * packet is blocked; no producer or consumer may fall back to an older ledger.
14
+ * packet is blocked; no mutating producer may fall back to an older ledger.
21
15
  * Manifest-first crashes are repaired from the immutable packet and every
22
16
  * other invalid state closes the writer gate.
23
17
  */
24
18
  export declare function resolveLiveEventLedgerRouteV3(coordRoot: string): LiveEventLedgerRouteV3;
25
- export declare function liveEventV3BuildId(harneryCommit: string): `build_${string}`;
26
- export declare function liveInstanceIdV3(instanceId: string): `inst_${string}`;
27
- /**
28
- * The adapter-native id a canonical `inst_*` id carries, for display and for
29
- * joins against native-keyed records. Only the direct prefix form round-trips:
30
- * a hashed id has no recoverable native form and is returned unchanged, so
31
- * never treat this as a guaranteed inverse of `liveInstanceIdV3`.
32
- */
33
- export declare function nativeInstanceIdV3(instanceId: string): string;
34
19
  export declare function hookSignalV3(eventName: string): HookSignalV3 | undefined;
35
20
  /**
36
21
  * Tool lifecycle hooks may stop after publishing their event to the durable
@@ -60,6 +45,14 @@ export declare function recordLiveHookSignalV3(input: {
60
45
  }): RecordHookSignalV3Result | {
61
46
  state: "ignored";
62
47
  };
48
+ export declare function reconcileLivePendingRuntimeContextV3(input: {
49
+ coordRoot: string;
50
+ route: Extract<LiveEventLedgerRouteV3, {
51
+ state: "v3";
52
+ }>;
53
+ nativeSessionId: string;
54
+ finalAttempt?: boolean;
55
+ }): ReconcilePendingRuntimeContextV3Result;
63
56
  /**
64
57
  * Open the child generation named by a native SubagentStart event.
65
58
  *
@@ -83,5 +76,4 @@ export declare function recordLiveDelegatedChildSessionV3(input: {
83
76
  }): RecordHookSignalV3Result | {
84
77
  state: "ignored";
85
78
  };
86
- export declare function livePlatformV3(): "linux" | "windows" | "macos" | "unknown";
87
79
  //# sourceMappingURL=live-routing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"live-routing.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/live-routing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"live-routing.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/live-routing.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,16 @@
1
- import { createHash } from "node:crypto";
2
- import { readEventV3ControlState, repairEventV3ControlPair, } from "./control.js";
3
- import { recordHookSignalV3 } from "./producers/recorder.js";
1
+ import { refreshIncompatibleEventLedgerV3, rotateOversizedEventLedgerV3 } from "./bootstrap.js";
2
+ import { readEventV3ControlState } from "./control.js";
3
+ import { repairEventV3ControlPair } from "./control-writer.js";
4
+ import { liveEventLedgerRouteFromControlV3, liveInstanceIdV3, runtimeCapabilityProfileCurrentV3, } from "./live-route-observer.js";
5
+ import { reconcilePendingRuntimeContextV3, recordHookSignalV3, } from "./producers/recorder.js";
6
+ import { livePlatformV3 } from "./runtime-identity.js";
7
+ export { liveInstanceIdV3, nativeInstanceIdV3, } from "./live-route-observer.js";
8
+ export { liveEventV3BuildId, livePlatformV3 } from "./runtime-identity.js";
4
9
  export const LIVE_HOOK_V3_PRODUCER_ID = "prd_agent-hook";
5
10
  export const LIVE_COMMAND_V3_PRODUCER_ID = "prd_session-tee";
6
11
  /**
7
12
  * Resolve the V3-only ledger route. A root without an initialized V3 control
8
- * packet is blocked; no producer or consumer may fall back to an older ledger.
13
+ * packet is blocked; no mutating producer may fall back to an older ledger.
9
14
  * Manifest-first crashes are repaired from the immutable packet and every
10
15
  * other invalid state closes the writer gate.
11
16
  */
@@ -15,36 +20,33 @@ export function resolveLiveEventLedgerRouteV3(coordRoot) {
15
20
  return { state: "blocked", reason: "v3_not_initialized" };
16
21
  if (control.state === "repairable")
17
22
  control = repairEventV3ControlPair(coordRoot);
18
- if (control.state !== "candidate" && control.state !== "active") {
19
- return { state: "blocked", reason: `${control.state}:${control.reason}` };
23
+ if ((control.state === "invalid" && control.reason === "genesis_schema_digest_incompatible") ||
24
+ ((control.state === "candidate" || control.state === "active") &&
25
+ !runtimeCapabilityProfileCurrentV3(control))) {
26
+ try {
27
+ control = refreshIncompatibleEventLedgerV3(coordRoot).control;
28
+ }
29
+ catch (error) {
30
+ return {
31
+ state: "blocked",
32
+ reason: `runtime_refresh_failed:${error instanceof Error ? error.message : String(error)}`,
33
+ };
34
+ }
20
35
  }
21
- const buildId = liveEventV3BuildId(control.genesis.profile.harnery_commit);
22
- if (!control.genesis.profile.producer_build_ids.includes(buildId)) {
23
- return { state: "blocked", reason: "live_producer_build_not_approved" };
36
+ if (control.state === "active") {
37
+ // Bound the epoch every producer must re-validate: an oversized active
38
+ // segment rotates into the archive here, on the shared route boundary.
39
+ // Rotation failure never blocks recording; the current epoch stays live.
40
+ try {
41
+ const rotated = rotateOversizedEventLedgerV3(coordRoot);
42
+ if (rotated.state === "rotated" && rotated.control)
43
+ control = rotated.control;
44
+ }
45
+ catch {
46
+ // The oversized epoch keeps serving; the next route resolution retries.
47
+ }
24
48
  }
25
- return { state: "v3", mode: control.state, build_id: buildId };
26
- }
27
- export function liveEventV3BuildId(harneryCommit) {
28
- const exact = harneryCommit.normalize("NFC");
29
- if (/^[a-zA-Z0-9._-]{1,120}$/.test(exact))
30
- return `build_${exact}`;
31
- return `build_${createHash("sha256").update(exact).digest("hex")}`;
32
- }
33
- export function liveInstanceIdV3(instanceId) {
34
- if (/^inst_[a-zA-Z0-9._-]{1,128}$/.test(instanceId))
35
- return instanceId;
36
- if (/^[a-zA-Z0-9._-]{1,128}$/.test(instanceId))
37
- return `inst_${instanceId}`;
38
- return `inst_${createHash("sha256").update(instanceId.normalize("NFC")).digest("hex")}`;
39
- }
40
- /**
41
- * The adapter-native id a canonical `inst_*` id carries, for display and for
42
- * joins against native-keyed records. Only the direct prefix form round-trips:
43
- * a hashed id has no recoverable native form and is returned unchanged, so
44
- * never treat this as a guaranteed inverse of `liveInstanceIdV3`.
45
- */
46
- export function nativeInstanceIdV3(instanceId) {
47
- return instanceId.startsWith("inst_") ? instanceId.slice("inst_".length) : instanceId;
49
+ return liveEventLedgerRouteFromControlV3(control);
48
50
  }
49
51
  export function hookSignalV3(eventName) {
50
52
  switch (eventName) {
@@ -124,6 +126,17 @@ export function recordLiveHookSignalV3(input) {
124
126
  ...(input.defer_drain ? { writerOptions: { deferDrain: true } } : {}),
125
127
  });
126
128
  }
129
+ export function reconcileLivePendingRuntimeContextV3(input) {
130
+ return reconcilePendingRuntimeContextV3({
131
+ coordRoot: input.coordRoot,
132
+ mode: input.route.mode,
133
+ nativeSessionId: input.nativeSessionId,
134
+ producer_id: LIVE_HOOK_V3_PRODUCER_ID,
135
+ build_id: input.route.build_id,
136
+ platform: livePlatformV3(),
137
+ finalAttempt: input.finalAttempt,
138
+ });
139
+ }
127
140
  /**
128
141
  * Open the child generation named by a native SubagentStart event.
129
142
  *
@@ -204,12 +217,3 @@ export function recordLiveDelegatedChildSessionV3(input) {
204
217
  });
205
218
  return started;
206
219
  }
207
- export function livePlatformV3() {
208
- if (process.platform === "linux")
209
- return "linux";
210
- if (process.platform === "win32")
211
- return "windows";
212
- if (process.platform === "darwin")
213
- return "macos";
214
- return "unknown";
215
- }
@@ -1,8 +1,12 @@
1
1
  import type { Adapter } from "../../../adapter.js";
2
- import { type AuthorityReceiptV3, type AuthorityReconcilerV3 } from "../authority-outbox.js";
2
+ import { type AuthorityReceiptV3, type AuthorityReconcilerV3, type AuthorityTransactionV3 } from "../authority-outbox.js";
3
3
  import type { EventV3 } from "../contract.js";
4
4
  import { type EventV3WriteMode } from "../control.js";
5
5
  import { type CoordinationAuthoritySignalV3, type CoordinationObservationBySignalV3 } from "./coordination.js";
6
+ export interface PendingCoordinationTransactionV3Location {
7
+ producer_state_file: string;
8
+ transaction: AuthorityTransactionV3;
9
+ }
6
10
  export interface RecordCoordinationAuthorityV3Input<S extends CoordinationAuthoritySignalV3 = CoordinationAuthoritySignalV3> {
7
11
  coordRoot: string;
8
12
  mode: EventV3WriteMode;
@@ -50,4 +54,10 @@ export type RecordCoordinationAuthorityV3Result = {
50
54
  * settled is refused rather than guessed at.
51
55
  */
52
56
  export declare function recordCoordinationAuthorityV3<S extends CoordinationAuthoritySignalV3>(input: RecordCoordinationAuthorityV3Input<S>): RecordCoordinationAuthorityV3Result;
57
+ /** Locate the one private producer state that owns a pending authority transaction. */
58
+ export declare function findPendingCoordinationTransactionV3(coordRoot: string, transactionId: string): PendingCoordinationTransactionV3Location | null;
59
+ /** Clear one transaction from its exact producer state after durable quarantine is established. */
60
+ export declare function withPendingCoordinationTransactionRecoveryV3<T>(coordRoot: string, producerStateFile: string, transaction: AuthorityTransactionV3, allowAlreadyCleared: boolean, operation: (control: {
61
+ clearPending: () => "cleared" | "already_cleared";
62
+ }) => T): T;
53
63
  //# sourceMappingURL=coordination-recorder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"coordination-recorder.d.ts","sourceRoot":"","sources":["../../../../../src/core/events/v3/producers/coordination-recorder.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAGnD,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAK3B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,KAAK,gBAAgB,EAA2B,MAAM,eAAe,CAAC;AAK/E,OAAO,EACL,KAAK,6BAA6B,EAClC,KAAK,iCAAiC,EAEvC,MAAM,mBAAmB,CAAC;AAyC3B,MAAM,WAAW,kCAAkC,CACjD,CAAC,SAAS,6BAA6B,GAAG,6BAA6B;IAEvE,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,CAAC,CAAC;IACV,WAAW,EAAE,iCAAiC,CAAC,CAAC,CAAC,CAAC;IAClD,OAAO,EAAE,OAAO,CAAC;IACjB,uBAAuB,EAAE,MAAM,CAAC;IAChC,iBAAiB,EAAE,QAAQ,MAAM,EAAE,CAAC;IACpC,mBAAmB,EAAE,QAAQ,MAAM,EAAE,CAAC;IACtC,WAAW,EAAE,OAAO,MAAM,EAAE,CAAC;IAC7B,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACpD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,2BAA2B,EAAE,UAAU,MAAM,EAAE,CAAC;IAChD,oBAAoB,EAAE,UAAU,MAAM,EAAE,CAAC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,qBAAqB,CAAC;CACnC;AAED,MAAM,MAAM,mCAAmC,GAC3C;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,KAAK,EAAE,wBAAwB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,KAAK,EAAE,kBAAkB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GACvE;IAAE,KAAK,EAAE,qBAAqB,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GAC/E;IACE,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,kBAAkB,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEN;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,CAAC,SAAS,6BAA6B,EACnF,KAAK,EAAE,kCAAkC,CAAC,CAAC,CAAC,GAC3C,mCAAmC,CAuMrC"}
1
+ {"version":3,"file":"coordination-recorder.d.ts","sourceRoot":"","sources":["../../../../../src/core/events/v3/producers/coordination-recorder.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAGnD,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAK5B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,KAAK,gBAAgB,EAA2B,MAAM,eAAe,CAAC;AAK/E,OAAO,EACL,KAAK,6BAA6B,EAClC,KAAK,iCAAiC,EAEvC,MAAM,mBAAmB,CAAC;AAyC3B,MAAM,WAAW,wCAAwC;IACvD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,sBAAsB,CAAC;CACrC;AAED,MAAM,WAAW,kCAAkC,CACjD,CAAC,SAAS,6BAA6B,GAAG,6BAA6B;IAEvE,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,CAAC,CAAC;IACV,WAAW,EAAE,iCAAiC,CAAC,CAAC,CAAC,CAAC;IAClD,OAAO,EAAE,OAAO,CAAC;IACjB,uBAAuB,EAAE,MAAM,CAAC;IAChC,iBAAiB,EAAE,QAAQ,MAAM,EAAE,CAAC;IACpC,mBAAmB,EAAE,QAAQ,MAAM,EAAE,CAAC;IACtC,WAAW,EAAE,OAAO,MAAM,EAAE,CAAC;IAC7B,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACpD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,2BAA2B,EAAE,UAAU,MAAM,EAAE,CAAC;IAChD,oBAAoB,EAAE,UAAU,MAAM,EAAE,CAAC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,qBAAqB,CAAC;CACnC;AAED,MAAM,MAAM,mCAAmC,GAC3C;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,KAAK,EAAE,wBAAwB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,KAAK,EAAE,kBAAkB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GACvE;IAAE,KAAK,EAAE,qBAAqB,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GAC/E;IACE,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,kBAAkB,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEN;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,CAAC,SAAS,6BAA6B,EACnF,KAAK,EAAE,kCAAkC,CAAC,CAAC,CAAC,GAC3C,mCAAmC,CAwNrC;AAED,uFAAuF;AACvF,wBAAgB,oCAAoC,CAClD,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,GACpB,wCAAwC,GAAG,IAAI,CAgBjD;AAED,mGAAmG;AACnG,wBAAgB,4CAA4C,CAAC,CAAC,EAC5D,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,EACzB,WAAW,EAAE,sBAAsB,EACnC,mBAAmB,EAAE,OAAO,EAC5B,SAAS,EAAE,CAAC,OAAO,EAAE;IAAE,YAAY,EAAE,MAAM,SAAS,GAAG,iBAAiB,CAAA;CAAE,KAAK,CAAC,GAC/E,CAAC,CA+BH"}
@@ -1,10 +1,10 @@
1
1
  import { createHash, randomUUID } from "node:crypto";
2
- import { chmodSync, closeSync, existsSync, fsyncSync, mkdirSync, openSync, readFileSync, renameSync, statSync, unlinkSync, writeFileSync, } from "node:fs";
2
+ import { chmodSync, closeSync, existsSync, fsyncSync, mkdirSync, openSync, readdirSync, readFileSync, renameSync, statSync, unlinkSync, writeFileSync, } from "node:fs";
3
3
  import { hostname } from "node:os";
4
- import { join, resolve } from "node:path";
4
+ import { basename, join, resolve } from "node:path";
5
5
  import { fsyncParentDirectory } from "../../../workflow/durable-record.js";
6
6
  import { acquireNoClobberLease } from "../../../workflow/workspaces/leases.js";
7
- import { buildAuthorityTransactionV3, publishAuthorityTransactionV3, reconcileAuthorityTransactionV3, } from "../authority-outbox.js";
7
+ import { authorityRecoveryIntentPathV3, buildAuthorityTransactionV3, publishAuthorityTransactionV3, reconcileAuthorityTransactionV3, } from "../authority-outbox.js";
8
8
  import { canonicalJsonV3, normalizeNativeIdV3 } from "../canonical.js";
9
9
  import { markObservedClockRegressionV3 } from "../clock-order.js";
10
10
  import { readEventV3ControlState } from "../control.js";
@@ -37,6 +37,9 @@ export function recordCoordinationAuthorityV3(input) {
37
37
  }
38
38
  const rootId = control.genesis.event.scope.root_id;
39
39
  const epochId = control.genesis.profile.privacy_key_epoch;
40
+ const epochFence = {
41
+ expectedGenesisId: control.genesis.event.payload.genesis_id,
42
+ };
40
43
  const rootContext = fingerprintContextV3(input.coordRoot, rootId, undefined, epochId);
41
44
  const producerSource = normalizeNativeIdV3(rootContext, "agent-coord.producer", `${input.adapter}\0${input.native_actor_session_id}\0${hook.generation_id}`);
42
45
  const sourceId = normalizeNativeIdV3(rootContext, "agent-coord.observation", input.observation.native_observation_id);
@@ -58,6 +61,13 @@ export function recordCoordinationAuthorityV3(input) {
58
61
  state.attestation_id = hook.attestation_id;
59
62
  }
60
63
  if (state?.pending) {
64
+ if (existsSync(authorityRecoveryIntentPathV3(input.coordRoot, state.pending.transaction.transaction_id))) {
65
+ return {
66
+ state: "pending_transaction",
67
+ transaction_id: state.pending.transaction.transaction_id,
68
+ mutation_kind: state.pending.transaction.mutation.kind,
69
+ };
70
+ }
61
71
  if (state.pending.source_id !== sourceId) {
62
72
  // A writer that died mid-commit leaves `pending` owned by an
63
73
  // observation that will never retry (hook observations are one-shot).
@@ -68,8 +78,8 @@ export function recordCoordinationAuthorityV3(input) {
68
78
  // still refuses rather than guessing at a conflicting mutation.
69
79
  const stale = state.pending;
70
80
  try {
71
- publishAuthorityTransactionV3(input.coordRoot, stale.transaction);
72
- reconcileAuthorityTransactionV3(input.coordRoot, stale.transaction.transaction_id, input.reconciler);
81
+ publishAuthorityTransactionV3(input.coordRoot, stale.transaction, epochFence);
82
+ reconcileAuthorityTransactionV3(input.coordRoot, stale.transaction.transaction_id, input.reconciler, epochFence);
73
83
  }
74
84
  catch {
75
85
  return {
@@ -84,8 +94,8 @@ export function recordCoordinationAuthorityV3(input) {
84
94
  }
85
95
  else {
86
96
  const pending = state.pending;
87
- publishAuthorityTransactionV3(input.coordRoot, pending.transaction);
88
- const receipt = reconcileAuthorityTransactionV3(input.coordRoot, pending.transaction.transaction_id, input.reconciler);
97
+ publishAuthorityTransactionV3(input.coordRoot, pending.transaction, epochFence);
98
+ const receipt = reconcileAuthorityTransactionV3(input.coordRoot, pending.transaction.transaction_id, input.reconciler, epochFence);
89
99
  const event = eventFromTransaction(pending.transaction);
90
100
  applyCoordinationEvent(state, pending.source_id, pending.transaction, event);
91
101
  state.pending = undefined;
@@ -178,8 +188,8 @@ export function recordCoordinationAuthorityV3(input) {
178
188
  delete state.open_waits[waitId];
179
189
  state.pending = { source_id: sourceId, transaction };
180
190
  publishCoordinationState(path, state);
181
- publishAuthorityTransactionV3(input.coordRoot, transaction);
182
- const receipt = reconcileAuthorityTransactionV3(input.coordRoot, transaction.transaction_id, input.reconciler);
191
+ publishAuthorityTransactionV3(input.coordRoot, transaction, epochFence);
192
+ const receipt = reconcileAuthorityTransactionV3(input.coordRoot, transaction.transaction_id, input.reconciler, epochFence);
183
193
  applyCoordinationEvent(state, sourceId, transaction, normalized.event);
184
194
  state.pending = undefined;
185
195
  publishCoordinationState(path, state);
@@ -189,6 +199,59 @@ export function recordCoordinationAuthorityV3(input) {
189
199
  lease.release();
190
200
  }
191
201
  }
202
+ /** Locate the one private producer state that owns a pending authority transaction. */
203
+ export function findPendingCoordinationTransactionV3(coordRoot, transactionId) {
204
+ const directory = coordinationProducerDirectory(coordRoot);
205
+ if (!existsSync(directory))
206
+ return null;
207
+ const matches = readdirSync(directory)
208
+ .filter((name) => /^hid_[a-f0-9]{64}\.json$/.test(name))
209
+ .sort()
210
+ .flatMap((name) => {
211
+ const state = readCoordinationState(join(directory, name));
212
+ return state.pending?.transaction.transaction_id === transactionId
213
+ ? [{ producer_state_file: name, transaction: state.pending.transaction }]
214
+ : [];
215
+ });
216
+ if (matches.length > 1) {
217
+ throw new Error("authority transaction is pending in more than one coordination producer");
218
+ }
219
+ return matches[0] ?? null;
220
+ }
221
+ /** Clear one transaction from its exact producer state after durable quarantine is established. */
222
+ export function withPendingCoordinationTransactionRecoveryV3(coordRoot, producerStateFile, transaction, allowAlreadyCleared, operation) {
223
+ if (!/^hid_[a-f0-9]{64}\.json$/.test(producerStateFile)) {
224
+ throw new Error("coordination producer state file is invalid");
225
+ }
226
+ const path = join(coordinationProducerDirectory(coordRoot), basename(producerStateFile));
227
+ if (!existsSync(path))
228
+ throw new Error("coordination producer state is missing");
229
+ const lease = acquireCoordinationLease(coordRoot, path);
230
+ try {
231
+ const state = readCoordinationState(path);
232
+ if (!state.pending && !allowAlreadyCleared) {
233
+ throw new Error("coordination producer no longer owns the pending transaction");
234
+ }
235
+ if (state.pending) {
236
+ if (state.pending.transaction.transaction_id !== transaction.transaction_id ||
237
+ canonicalJsonV3(state.pending.transaction) !== canonicalJsonV3(transaction)) {
238
+ throw new Error("coordination producer pending transaction changed during recovery");
239
+ }
240
+ }
241
+ return operation({
242
+ clearPending: () => {
243
+ if (!state.pending)
244
+ return "already_cleared";
245
+ state.pending = undefined;
246
+ publishCoordinationState(path, state);
247
+ return "cleared";
248
+ },
249
+ });
250
+ }
251
+ finally {
252
+ lease.release();
253
+ }
254
+ }
192
255
  function newCoordinationState(input, hook, epochId) {
193
256
  return {
194
257
  format: COORDINATION_STATE_FORMAT,
@@ -240,7 +303,10 @@ function eventFromTransaction(transaction) {
240
303
  return JSON.parse(transaction.event_row);
241
304
  }
242
305
  function coordinationStatePath(coordRoot, producerSource) {
243
- return join(resolve(coordRoot), EVENT_V3_LEDGER_RELATIVE_ROOT, "private-producers/agent-coord", `${producerSource}.json`);
306
+ return join(coordinationProducerDirectory(coordRoot), `${producerSource}.json`);
307
+ }
308
+ function coordinationProducerDirectory(coordRoot) {
309
+ return join(resolve(coordRoot), EVENT_V3_LEDGER_RELATIVE_ROOT, "private-producers/agent-coord");
244
310
  }
245
311
  function acquireCoordinationLease(coordRoot, statePath) {
246
312
  const directory = join(statePath, "..");
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Producer-side bound on duplicate diagnostic file creation.
3
+ *
4
+ * A producer fault can emit the same diagnostic thousands of times per day,
5
+ * and every emission used to become one loose file in the diagnostics spool.
6
+ * This module keeps the first bounded loose exemplars per
7
+ * (category, reason, instance) key and UTC day unchanged, then coalesces
8
+ * further identical emissions into one deterministic summary file per key and
9
+ * window, preserving the exact logical count, first and last times,
10
+ * represented bytes, hourly rate buckets, and bounded exemplar digests.
11
+ *
12
+ * Below the bound the gate creates no state at all: admitted loose filenames
13
+ * carry the key digest as a suffix, and the gate counts a key's emissions for
14
+ * the window from those filenames alone. A summary file and its short-lived
15
+ * per-key lease exist only for a key that actually crossed the bound, so a
16
+ * healthy spool gains zero files and zero directories from this mitigation.
17
+ *
18
+ * The mitigation is fail-open: any count, lease, read, or publish failure
19
+ * admits the loose diagnostic exactly as before and appends to a lock-free,
20
+ * size-capped emergency log. It never deletes, moves, or rewrites an existing
21
+ * loose diagnostic, and it never calls back into the diagnostic writer.
22
+ */
23
+ export declare const DIAGNOSTIC_SUMMARY_FORMAT: "harnery-v3-diagnostic-summary";
24
+ export declare const DIAGNOSTIC_SUMMARY_VERSION: 1;
25
+ /**
26
+ * Loose exemplars admitted per (category, reason, instance) key per UTC day
27
+ * before identical emissions coalesce into the key's summary. Frozen from a
28
+ * whole-history measurement: healthy categories peak well under this value
29
+ * per day across ALL keys combined, while a producer fault exceeds it within
30
+ * minutes. The bound is enforced from filename counts without cross-process
31
+ * locking, so simultaneous writers straddling the crossing can admit a few
32
+ * extra exemplars; the bound is a flood stop, not an exact quota.
33
+ */
34
+ export declare const DIAGNOSTIC_LOOSE_EXEMPLAR_LIMIT = 32;
35
+ export declare const DIAGNOSTIC_MITIGATION_HEALTH_FILE = "mitigation-health.ndjson";
36
+ export interface DiagnosticContentFingerprint {
37
+ bytes: number;
38
+ sha256: string;
39
+ }
40
+ export interface DiagnosticGateInputV3 {
41
+ /** Already sanitized by the diagnostic writer. */
42
+ category: string;
43
+ reason?: string;
44
+ instanceId?: string;
45
+ fingerprint: DiagnosticContentFingerprint;
46
+ /** Approved scalar metadata only; stored once per summary. */
47
+ metadata: Record<string, string | number | boolean | null>;
48
+ }
49
+ export type DiagnosticGateDecisionV3 = {
50
+ admit: true;
51
+ /**
52
+ * Appended to the loose filename before `.json` so future gate calls
53
+ * can count the key's admitted exemplars from the directory listing.
54
+ * Empty when the gate is disabled.
55
+ */
56
+ loose_name_suffix: string;
57
+ } | {
58
+ admit: false;
59
+ /** The summary file the emission was durably coalesced into. */
60
+ summary_path: string;
61
+ };
62
+ export interface DiagnosticSummaryV3 {
63
+ format: typeof DIAGNOSTIC_SUMMARY_FORMAT;
64
+ format_version: typeof DIAGNOSTIC_SUMMARY_VERSION;
65
+ category: string;
66
+ reason: string;
67
+ instance_id: string;
68
+ /** UTC day this summary covers, as YYYY-MM-DD. */
69
+ window: string;
70
+ /** Loose exemplar files observed for the key when the bound was crossed. */
71
+ loose_count: number;
72
+ /** Identical emissions coalesced here instead of becoming loose files. */
73
+ summarized_count: number;
74
+ first_summarized_at: string | null;
75
+ last_summarized_at: string | null;
76
+ /** Sum of content-fingerprint bytes across summarized emissions. */
77
+ represented_bytes: number;
78
+ /** Digests of the first summarized emissions, bounded. */
79
+ exemplars: DiagnosticContentFingerprint[];
80
+ /** Approved scalar metadata from the first summarized emission. */
81
+ metadata: Record<string, string | number | boolean | null>;
82
+ /** Summarized-only counts per UTC hour ("YYYY-MM-DDTHH"), pruned. */
83
+ recent_hours: Record<string, number>;
84
+ }
85
+ /** Aggregate of the append-only emergency fail-open log. */
86
+ export interface DiagnosticMitigationHealthV3 {
87
+ fail_open_count: number;
88
+ last_fail_open_at: string | null;
89
+ by_stage: Record<string, number>;
90
+ /** True when the log hit its size cap and later fail-opens were dropped. */
91
+ truncated: boolean;
92
+ }
93
+ export declare function diagnosticSummariesRootV3(coordRoot: string): string;
94
+ export declare function diagnosticSummariesEnabledV3(): boolean;
95
+ /**
96
+ * Decide whether one diagnostic emission may become a loose file.
97
+ *
98
+ * Below the per-key bound (counted from digest-suffixed loose filenames) the
99
+ * emission is admitted with the suffix to append, and no summary or lease
100
+ * state is created. At or past the bound the emission is durably coalesced
101
+ * into the key's summary under a short per-key lease and `admit: false` is
102
+ * returned with the summary path. Any mitigation failure, and the disabled
103
+ * gate, admit the loose write exactly as before.
104
+ */
105
+ export declare function gateProducerDiagnosticV3(coordRoot: string, input: DiagnosticGateInputV3, nowMs?: number): DiagnosticGateDecisionV3;
106
+ export interface DiagnosticSummaryListingV3 {
107
+ summaries: DiagnosticSummaryV3[];
108
+ /** Physical summary files, including any that failed validation. */
109
+ file_count: number;
110
+ unreadable_count: number;
111
+ mitigation_health: DiagnosticMitigationHealthV3 | null;
112
+ }
113
+ /**
114
+ * Read every summary in the active epoch's `diagnostic-summaries/` subtree.
115
+ * Skips lease state, temp files, and the mitigation health log (which is
116
+ * aggregated into `mitigation_health` instead). Never throws; a missing
117
+ * subtree returns an empty listing.
118
+ */
119
+ export declare function listDiagnosticSummariesV3(coordRoot: string): DiagnosticSummaryListingV3;
120
+ /**
121
+ * Sum summarized-only occurrences inside a lookback window, from hour
122
+ * buckets. Hour-granular and conservative: a bucket is counted only when its
123
+ * whole hour lies inside `[sinceMs, nowMs]`, so a boundary bucket is excluded
124
+ * (up to 59 minutes undercounted) rather than fully included (up to 59
125
+ * minutes overcounted), and a future-dated bucket from clock skew never
126
+ * inflates a window.
127
+ */
128
+ export declare function countSummarizedSinceV3(summaries: readonly DiagnosticSummaryV3[], sinceMs: number, filter?: (summary: DiagnosticSummaryV3) => boolean, nowMs?: number): number;
129
+ //# sourceMappingURL=diagnostic-summaries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostic-summaries.d.ts","sourceRoot":"","sources":["../../../../../src/core/events/v3/producers/diagnostic-summaries.ts"],"names":[],"mappings":"AAyBA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,eAAO,MAAM,yBAAyB,EAAG,+BAAwC,CAAC;AAClF,eAAO,MAAM,0BAA0B,EAAG,CAAU,CAAC;AAErD;;;;;;;;GAQG;AACH,eAAO,MAAM,+BAA+B,KAAK,CAAC;AAkBlD,eAAO,MAAM,iCAAiC,6BAA6B,CAAC;AAW5E,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,4BAA4B,CAAC;IAC1C,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;CAC5D;AAED,MAAM,MAAM,wBAAwB,GAChC;IACE,KAAK,EAAE,IAAI,CAAC;IACZ;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,CAAC;CAC3B,GACD;IACE,KAAK,EAAE,KAAK,CAAC;IACb,gEAAgE;IAChE,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEN,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,OAAO,yBAAyB,CAAC;IACzC,cAAc,EAAE,OAAO,0BAA0B,CAAC;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,WAAW,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,oEAAoE;IACpE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,0DAA0D;IAC1D,SAAS,EAAE,4BAA4B,EAAE,CAAC;IAC1C,mEAAmE;IACnE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;IAC3D,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED,4DAA4D;AAC5D,MAAM,WAAW,4BAA4B;IAC3C,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,4EAA4E;IAC5E,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEnE;AAMD,wBAAgB,4BAA4B,IAAI,OAAO,CAEtD;AA2RD;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,qBAAqB,EAC5B,KAAK,SAAa,GACjB,wBAAwB,CAoD1B;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,mBAAmB,EAAE,CAAC;IACjC,oEAAoE;IACpE,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,4BAA4B,GAAG,IAAI,CAAC;CACxD;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,0BAA0B,CA+BvF;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,SAAS,mBAAmB,EAAE,EACzC,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,EAClD,KAAK,SAAa,GACjB,MAAM,CAkBR"}