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
@@ -4,8 +4,8 @@ import type { TurnHarnessV3, TurnInferenceV3, TurnUsageV3 } from "./contract.js"
4
4
  export type TelemetryObservationV3<T> = {
5
5
  state: "observed";
6
6
  value: T;
7
- attestation: "native" | "derived";
8
- confidence: "exact" | "high";
7
+ attestation: "native" | "derived" | "inferred";
8
+ confidence: "exact" | "high" | "medium" | "low";
9
9
  } | {
10
10
  state: "unsupported";
11
11
  capability: string;
@@ -14,13 +14,18 @@ export type TelemetryObservationV3<T> = {
14
14
  capability: string;
15
15
  reason: string;
16
16
  };
17
- export interface ContextMeasurementV3 {
18
- used_tokens: number;
19
- limit_tokens: number;
20
- remaining_tokens?: number;
17
+ interface ContextMeasurementClockV3 {
21
18
  measured_at: string;
22
19
  method: string;
23
20
  }
21
+ export type ContextMeasurementV3 = ContextMeasurementClockV3 & ({
22
+ used_tokens: number;
23
+ limit_tokens: number;
24
+ remaining_tokens?: number;
25
+ } | {
26
+ used_percent: number;
27
+ remaining_percent?: number;
28
+ });
24
29
  export interface TurnTelemetryV3 {
25
30
  usage: TelemetryObservationV3<TurnUsageV3>;
26
31
  inference: TelemetryObservationV3<TurnInferenceV3>;
@@ -32,8 +37,8 @@ export interface ContextTelemetryProvenanceV3 {
32
37
  source_event: string;
33
38
  source_witness?: string;
34
39
  runtime_version?: string;
35
- attestation: "native" | "derived";
36
- confidence: "exact" | "high";
40
+ attestation: "native" | "derived" | "inferred";
41
+ confidence: "exact" | "high" | "medium" | "low";
37
42
  }
38
43
  export type TurnTelemetryCapabilitySupportV3 = Partial<Pick<Record<AdapterSignalV3, CapabilitySupportV3>, "model_usage" | "inference_timing" | "context_usage">>;
39
44
  export interface HarnessTimingAccumulatorV3 {
@@ -47,4 +52,5 @@ export declare function extractTurnTelemetryV3(adapter: Adapter, payload: Record
47
52
  export declare function emptyHarnessTimingV3(): HarnessTimingAccumulatorV3;
48
53
  export declare function recordHarnessTimingV3(accumulator: HarnessTimingAccumulatorV3, hook: string, durationMs: number): HarnessTimingAccumulatorV3;
49
54
  export declare function harnessObservationV3(accumulator: HarnessTimingAccumulatorV3): TelemetryObservationV3<TurnHarnessV3>;
55
+ export {};
50
56
  //# sourceMappingURL=turn-telemetry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"turn-telemetry.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/turn-telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EACL,KAAK,eAAe,EAEpB,KAAK,mBAAmB,EACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjF,MAAM,MAAM,sBAAsB,CAAC,CAAC,IAChC;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,CAAC,CAAC;IAAC,WAAW,EAAE,QAAQ,GAAG,SAAS,CAAC;IAAC,UAAU,EAAE,OAAO,GAAG,MAAM,CAAA;CAAE,GAChG;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,KAAK,EAAE,sBAAsB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1E,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,sBAAsB,CAAC,WAAW,CAAC,CAAC;IAC3C,SAAS,EAAE,sBAAsB,CAAC,eAAe,CAAC,CAAC;IACnD,OAAO,EAAE,sBAAsB,CAAC,oBAAoB,CAAC,CAAC;IACtD,kFAAkF;IAClF,kBAAkB,CAAC,EAAE,4BAA4B,CAAC;CACnD;AAED,MAAM,WAAW,4BAA4B;IAC3C,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,QAAQ,GAAG,SAAS,CAAC;IAClC,UAAU,EAAE,OAAO,GAAG,MAAM,CAAC;CAC9B;AAED,MAAM,MAAM,gCAAgC,GAAG,OAAO,CACpD,IAAI,CACF,MAAM,CAAC,eAAe,EAAE,mBAAmB,CAAC,EAC5C,aAAa,GAAG,kBAAkB,GAAG,eAAe,CACrD,CACF,CAAC;AAEF,MAAM,WAAW,0BAA0B;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,2EAA2E;AAC3E,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,UAAU,SAA2B,EACrC,OAAO,GAAE,gCAAqC,GAC7C,eAAe,CAgFjB;AAwCD,wBAAgB,oBAAoB,IAAI,0BAA0B,CAEjE;AAED,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,0BAA0B,EACvC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,GACjB,0BAA0B,CAU5B;AAED,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,0BAA0B,GACtC,sBAAsB,CAAC,aAAa,CAAC,CAsBvC"}
1
+ {"version":3,"file":"turn-telemetry.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/turn-telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EACL,KAAK,eAAe,EAEpB,KAAK,mBAAmB,EACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjF,MAAM,MAAM,sBAAsB,CAAC,CAAC,IAChC;IACE,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,CAAC,CAAC;IACT,WAAW,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;IAC/C,UAAU,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACjD,GACD;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,KAAK,EAAE,sBAAsB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1E,UAAU,yBAAyB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,oBAAoB,GAAG,yBAAyB,GAC1D,CACI;IACE,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,GACD;IACE,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CACJ,CAAC;AAEJ,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,sBAAsB,CAAC,WAAW,CAAC,CAAC;IAC3C,SAAS,EAAE,sBAAsB,CAAC,eAAe,CAAC,CAAC;IACnD,OAAO,EAAE,sBAAsB,CAAC,oBAAoB,CAAC,CAAC;IACtD,kFAAkF;IAClF,kBAAkB,CAAC,EAAE,4BAA4B,CAAC;CACnD;AAED,MAAM,WAAW,4BAA4B;IAC3C,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;IAC/C,UAAU,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACjD;AAED,MAAM,MAAM,gCAAgC,GAAG,OAAO,CACpD,IAAI,CACF,MAAM,CAAC,eAAe,EAAE,mBAAmB,CAAC,EAC5C,aAAa,GAAG,kBAAkB,GAAG,eAAe,CACrD,CACF,CAAC;AAEF,MAAM,WAAW,0BAA0B;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,2EAA2E;AAC3E,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,UAAU,SAA2B,EACrC,OAAO,GAAE,gCAAqC,GAC7C,eAAe,CAyFjB;AA+DD,wBAAgB,oBAAoB,IAAI,0BAA0B,CAEjE;AAED,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,0BAA0B,EACvC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,GACjB,0BAA0B,CAU5B;AAED,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,0BAA0B,GACtC,sBAAsB,CAAC,aAAa,CAAC,CAsBvC"}
@@ -40,9 +40,11 @@ export function extractTurnTelemetryV3(adapter, payload, observedAt = new Date()
40
40
  }
41
41
  : missing(adapter, "inference_timing", support.inference_timing);
42
42
  const usedTokens = number(context?.used_tokens) ??
43
+ number(context?.context_tokens) ??
43
44
  number(context?.input_tokens) ??
44
45
  number(context?.total_tokens) ??
45
46
  number(payload.used_tokens) ??
47
+ number(payload.context_tokens) ??
46
48
  number(payload.total_input_tokens) ??
47
49
  number(usage?.total_tokens) ??
48
50
  number(usage?.prompt_tokens) ??
@@ -60,10 +62,15 @@ export function extractTurnTelemetryV3(adapter, payload, observedAt = new Date()
60
62
  number(payload.context_window_size) ??
61
63
  number(payload.context_window_tokens) ??
62
64
  (typeof payload.context_window === "number" ? number(payload.context_window) : undefined);
63
- const contextMeasurement = contextObservation(adapter, usedTokens, limitTokens, observedAt, support.context_usage);
65
+ const usedPercent = finiteNumber(context?.context_usage_percent) ??
66
+ finiteNumber(context?.used_percent) ??
67
+ finiteNumber(context?.used_percentage) ??
68
+ finiteNumber(payload.context_usage_percent) ??
69
+ finiteNumber(payload.used_percent);
70
+ const contextMeasurement = contextObservation(adapter, usedTokens, limitTokens, usedPercent, observedAt, support.context_usage);
64
71
  return { usage: usageObservation, inference: inferenceObservation, context: contextMeasurement };
65
72
  }
66
- function contextObservation(adapter, usedTokens, limitTokens, observedAt, override) {
73
+ function contextObservation(adapter, usedTokens, limitTokens, usedPercent, observedAt, override) {
67
74
  if (usedTokens !== undefined && limitTokens !== undefined && limitTokens > 0) {
68
75
  return {
69
76
  state: "observed",
@@ -78,6 +85,26 @@ function contextObservation(adapter, usedTokens, limitTokens, observedAt, overri
78
85
  confidence: "exact",
79
86
  };
80
87
  }
88
+ if (usedPercent !== undefined && usedPercent >= 0 && usedPercent <= 100) {
89
+ return {
90
+ state: "observed",
91
+ value: {
92
+ used_percent: usedPercent,
93
+ remaining_percent: Math.max(0, 100 - usedPercent),
94
+ measured_at: observedAt,
95
+ method: `${adapter.replaceAll("-", "_")}_hook`,
96
+ },
97
+ attestation: "native",
98
+ confidence: "exact",
99
+ };
100
+ }
101
+ if (usedPercent !== undefined) {
102
+ return {
103
+ state: "expected_but_missing",
104
+ capability: "context_usage",
105
+ reason: "context_usage_percent_invalid",
106
+ };
107
+ }
81
108
  if (usedTokens !== undefined || limitTokens !== undefined) {
82
109
  return {
83
110
  state: "expected_but_missing",
@@ -151,6 +178,9 @@ function record(value) {
151
178
  function number(value) {
152
179
  return typeof value === "number" ? safeInteger(value) : undefined;
153
180
  }
181
+ function finiteNumber(value) {
182
+ return typeof value === "number" && Number.isFinite(value) ? value : undefined;
183
+ }
154
184
  function safeInteger(value) {
155
185
  return Number.isFinite(value) && value >= 0 ? Math.floor(value) : undefined;
156
186
  }
@@ -2,7 +2,7 @@ import type { EventV3 } from "./contract.js";
2
2
  export declare const EVENT_V3_LEDGER_RELATIVE_ROOT: ".harnery/ledgers/v3";
3
3
  export type EventV3DurabilityState = "committed" | "ready";
4
4
  export interface WriteEventV3Result {
5
- state: EventV3DurabilityState;
5
+ state: EventV3DurabilityState | "epoch_replaced";
6
6
  event_id: string;
7
7
  row_digest: `sha256:${string}`;
8
8
  ready_path?: string;
@@ -17,6 +17,16 @@ export interface WriteEventV3Options {
17
17
  * the option exists for matched harness-cost experiments.
18
18
  */
19
19
  deferDrain?: boolean;
20
+ /**
21
+ * Epoch fence: the genesis id of the epoch this event was produced for.
22
+ * An event carries per-epoch authority (producer boot sequences start at 1
23
+ * and every causal link must resolve inside its own epoch), so committing
24
+ * it into a replaced epoch would poison the new authority. When set, the
25
+ * write refuses with `epoch_replaced` if the live genesis no longer
26
+ * matches, the spooled ready row is tagged with the id, and the drain
27
+ * quarantines any tagged row whose epoch has been replaced underneath it.
28
+ */
29
+ expectedGenesisId?: `gex_${string}`;
20
30
  now?: () => number;
21
31
  onStep?: (step: EventV3WriteStep, eventId?: string) => void;
22
32
  }
@@ -34,6 +44,7 @@ export declare function drainReadyEventsV3(coordRoot: string, options?: WriteEve
34
44
  export declare function withEventV3LedgerLease<T>(coordRoot: string, options: WriteEventV3Options, operation: () => T): T;
35
45
  export declare function drainReadyEventsUnderLeaseV3(paths: ReturnType<typeof eventV3Paths>, options?: WriteEventV3Options): number;
36
46
  export declare function eventV3Paths(coordRoot: string): {
47
+ coordRoot: string;
37
48
  root: string;
38
49
  active: string;
39
50
  catalog: string;
@@ -44,6 +55,7 @@ export declare function eventV3Paths(coordRoot: string): {
44
55
  lease: string;
45
56
  };
46
57
  export declare function ensureEventV3Layout(coordRoot: string): {
58
+ coordRoot: string;
47
59
  root: string;
48
60
  active: string;
49
61
  catalog: string;
@@ -1 +1 @@
1
- {"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/writer.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAO7C,eAAO,MAAM,6BAA6B,EAAG,qBAA8B,CAAC;AAE5E,MAAM,MAAM,sBAAsB,GAAG,WAAW,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,sBAAsB,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,UAAU,MAAM,EAAE,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,kBAAkB,CAAC;CACtC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7D;AAED,MAAM,MAAM,gBAAgB,GACxB,oBAAoB,GACpB,iBAAiB,GACjB,sBAAsB,GACtB,qBAAqB,GACrB,oBAAoB,GACpB,mBAAmB,GACnB,iBAAiB,CAAC;AAEtB;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,mBAAwB,GAChC,kBAAkB,CA4CpB;AAED,sEAAsE;AACtE,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,MAAM,CAK/F;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EACtC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,mBAAmB,EAC5B,SAAS,EAAE,MAAM,CAAC,GACjB,CAAC,CAoBH;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,EACtC,OAAO,GAAE,mBAAwB,GAChC,MAAM,CA2CR;AAsDD,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM;;;;;;;;;EAY7C;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM;;;;;;;;;EA8BpD"}
1
+ {"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/writer.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAa7C,eAAO,MAAM,6BAA6B,EAAG,qBAA8B,CAAC;AAE5E,MAAM,MAAM,sBAAsB,GAAG,WAAW,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,sBAAsB,GAAG,gBAAgB,CAAC;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,UAAU,MAAM,EAAE,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,kBAAkB,CAAC;CACtC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,OAAO,MAAM,EAAE,CAAC;IACpC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7D;AAED,MAAM,MAAM,gBAAgB,GACxB,oBAAoB,GACpB,iBAAiB,GACjB,sBAAsB,GACtB,qBAAqB,GACrB,oBAAoB,GACpB,mBAAmB,GACnB,iBAAiB,CAAC;AAEtB;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,mBAAwB,GAChC,kBAAkB,CAoDpB;AAED,sEAAsE;AACtE,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,MAAM,CAK/F;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EACtC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,mBAAmB,EAC5B,SAAS,EAAE,MAAM,CAAC,GACjB,CAAC,CAoBH;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,EACtC,OAAO,GAAE,mBAAwB,GAChC,MAAM,CA4DR;AAkID,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM;;;;;;;;;;EAc7C;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM;;;;;;;;;;EA8BpD"}
@@ -5,7 +5,10 @@ import { join, resolve } from "node:path";
5
5
  import { fsyncParentDirectory } from "../../workflow/durable-record.js";
6
6
  import { acquireNoClobberLease } from "../../workflow/workspaces/leases.js";
7
7
  import { canonicalJsonV3, sha256V3 } from "./canonical.js";
8
+ import { genesisIdFromManifestV3, liveGenesisIdV3 } from "./control.js";
9
+ import { advanceControlWitnessV3, readAdvanceableControlWitnessV3 } from "./control-witness.js";
8
10
  import { EVENT_V3_SCHEMA_DIGEST } from "./generated.js";
11
+ import { readEventV3AppendValidationCheckpointV3, } from "./reader.js";
9
12
  import { assertEventV3 } from "./validate.js";
10
13
  const MAX_LINE_BYTES = 16 * 1024;
11
14
  const DEFAULT_LEASE_MS = 5_000;
@@ -29,7 +32,11 @@ export function writeEventV3(coordRoot, event, options = {}) {
29
32
  }
30
33
  const paths = ensureEventV3Layout(coordRoot);
31
34
  const rowDigest = sha256V3(row);
32
- const readyName = `${String(event.producer.sequence).padStart(16, "0")}-${event.event_id}-${rowDigest.slice(7)}.ready`;
35
+ if (options.expectedGenesisId && liveGenesisIdV3(coordRoot) !== options.expectedGenesisId) {
36
+ return { state: "epoch_replaced", event_id: event.event_id, row_digest: rowDigest };
37
+ }
38
+ const epochTag = options.expectedGenesisId ? `-${options.expectedGenesisId}` : "";
39
+ const readyName = `${String(event.producer.sequence).padStart(16, "0")}-${event.event_id}-${rowDigest.slice(7)}${epochTag}.ready`;
33
40
  const readyPath = join(paths.spool, readyName);
34
41
  writeReadyRecord(paths.spool, readyPath, row, event.event_id, options.onStep);
35
42
  if (options.deferDrain) {
@@ -52,14 +59,18 @@ export function writeEventV3(coordRoot, event, options = {}) {
52
59
  diagnostic_code: "wal_drain_failed",
53
60
  };
54
61
  }
55
- return existsSync(readyPath)
56
- ? {
62
+ if (existsSync(readyPath)) {
63
+ return {
57
64
  state: "ready",
58
65
  event_id: event.event_id,
59
66
  row_digest: rowDigest,
60
67
  ready_path: readyPath,
61
- }
62
- : { state: "committed", event_id: event.event_id, row_digest: rowDigest };
68
+ };
69
+ }
70
+ if (existsSync(`${readyPath.slice(0, -".ready".length)}.epoch-replaced`)) {
71
+ return { state: "epoch_replaced", event_id: event.event_id, row_digest: rowDigest };
72
+ }
73
+ return { state: "committed", event_id: event.event_id, row_digest: rowDigest };
63
74
  }
64
75
  /** Drain every durable ready record under the fenced append lease. */
65
76
  export function drainReadyEventsV3(coordRoot, options = {}) {
@@ -89,8 +100,12 @@ export function withEventV3LedgerLease(coordRoot, options, operation) {
89
100
  }
90
101
  }
91
102
  export function drainReadyEventsUnderLeaseV3(paths, options = {}) {
103
+ let priorWitness = readAdvanceableControlWitnessV3(paths.coordRoot);
92
104
  if (repairUnterminatedActiveFrame(paths.active)) {
93
105
  options.onStep?.("active_tail_repaired");
106
+ // The repair can remove IDs that the old witness considered committed.
107
+ // Never use that stale checkpoint to release a dependent ready row.
108
+ priorWitness = undefined;
94
109
  }
95
110
  requeueCommittedReceipts(paths.spool);
96
111
  const readyNames = readdirSync(paths.spool)
@@ -98,7 +113,11 @@ export function drainReadyEventsUnderLeaseV3(paths, options = {}) {
98
113
  .sort();
99
114
  if (readyNames.length === 0)
100
115
  return 0;
101
- const readyRows = causallyOrderedReadyRows(readyNames.map((readyName) => {
116
+ const drainableNames = quarantineReplacedEpochRows(paths, readyNames);
117
+ if (drainableNames.length === 0)
118
+ return 0;
119
+ const checkpoint = priorWitness?.checkpoint ?? readEventV3AppendValidationCheckpointV3(paths.coordRoot);
120
+ const readyRows = causallyOrderedReadyRows(drainableNames.map((readyName) => {
102
121
  const readyPath = join(paths.spool, readyName);
103
122
  const row = readAndValidateReadyRow(readyPath);
104
123
  return {
@@ -107,7 +126,9 @@ export function drainReadyEventsUnderLeaseV3(paths, options = {}) {
107
126
  row,
108
127
  event: JSON.parse(row),
109
128
  };
110
- }));
129
+ }), checkpoint?.genesis_id ? checkpoint : undefined);
130
+ if (readyRows.length === 0)
131
+ return 0;
111
132
  const activeFd = openSync(paths.active, "a", 0o600);
112
133
  let committed = 0;
113
134
  try {
@@ -130,14 +151,51 @@ export function drainReadyEventsUnderLeaseV3(paths, options = {}) {
130
151
  finally {
131
152
  closeSync(activeFd);
132
153
  }
154
+ if (committed > 0 && priorWitness) {
155
+ advanceControlWitnessV3(paths.coordRoot, priorWitness, genesisIdFromManifestV3(join(paths.root, "genesis.json")));
156
+ }
133
157
  return committed;
134
158
  }
135
159
  /**
136
- * Keep the spool's deterministic filename order except where a ready event
137
- * names another ready event as a cause. Those dependencies are committed
138
- * first; a cycle stays in the WAL and never poisons the active authority.
160
+ * Keep the spool's deterministic filename order except where an event depends
161
+ * on an uncommitted cause or attestation declaration. The authenticated
162
+ * checkpoint proves what the active authority already contains; rows whose
163
+ * prerequisite has not reached either the authority or this ready batch stay
164
+ * in the WAL. This covers the cross-process window where a dependent row is
165
+ * published before the row that mints its attestation.
139
166
  */
140
- function causallyOrderedReadyRows(rows) {
167
+ function causallyOrderedReadyRows(rows, checkpoint) {
168
+ // Bare writer fixtures and pre-genesis bootstrap rows have no semantic
169
+ // authority to consult. Preserve the original within-batch causal ordering;
170
+ // once a genesis exists, the validated checkpoint becomes the writer fence.
171
+ if (!checkpoint)
172
+ return causallyOrderedReadyRowsWithinBatch(rows);
173
+ const pending = new Map(rows.map((row) => [row.event.event_id, row]));
174
+ const ordered = [];
175
+ const committedEventIds = new Set(checkpoint.seen_event_ids);
176
+ const committedAttestationIds = new Set(checkpoint.attestation_ids);
177
+ while (pending.size > 0) {
178
+ const next = rows.find(({ event }) => {
179
+ const causes = event.links.caused_by;
180
+ return (pending.has(event.event_id) &&
181
+ causes.every((eventId) => committedEventIds.has(eventId)) &&
182
+ attestationPrerequisitesV3(event).every((attestationId) => committedAttestationIds.has(attestationId)));
183
+ });
184
+ if (!next)
185
+ break;
186
+ pending.delete(next.event.event_id);
187
+ ordered.push(next);
188
+ committedEventIds.add(next.event.event_id);
189
+ const minted = mintedAttestationV3(next.event);
190
+ if (minted)
191
+ committedAttestationIds.add(minted);
192
+ }
193
+ if (pending.size > 0 && dependenciesResolveInsidePendingV3(pending, committedEventIds)) {
194
+ throw new Error("ready V3 events contain a causal dependency cycle");
195
+ }
196
+ return ordered;
197
+ }
198
+ function causallyOrderedReadyRowsWithinBatch(rows) {
141
199
  const pending = new Map(rows.map((row) => [row.event.event_id, row]));
142
200
  const ordered = [];
143
201
  while (pending.size > 0) {
@@ -152,6 +210,31 @@ function causallyOrderedReadyRows(rows) {
152
210
  }
153
211
  return ordered;
154
212
  }
213
+ function mintedAttestationV3(event) {
214
+ return event.event_type === "session.started" ||
215
+ event.event_type === "session.attestation_changed"
216
+ ? event.attestation_id
217
+ : undefined;
218
+ }
219
+ function attestationPrerequisitesV3(event) {
220
+ if (event.event_type === "session.started")
221
+ return [];
222
+ if (event.event_type === "session.attestation_changed") {
223
+ return [event.payload.prior_attestation_id];
224
+ }
225
+ return event.attestation_id ? [event.attestation_id] : [];
226
+ }
227
+ function dependenciesResolveInsidePendingV3(pending, committedEventIds) {
228
+ const pendingAttestations = new Set([...pending.values()]
229
+ .map(({ event }) => mintedAttestationV3(event))
230
+ .filter((value) => value !== undefined));
231
+ return [...pending.values()].every(({ event }) => {
232
+ const causes = event.links.caused_by;
233
+ const causesStayInside = causes.every((eventId) => committedEventIds.has(eventId) || pending.has(eventId));
234
+ const attestationsStayInside = attestationPrerequisitesV3(event).every((attestationId) => pendingAttestations.has(attestationId));
235
+ return causesStayInside && attestationsStayInside;
236
+ });
237
+ }
155
238
  /**
156
239
  * A `.committed` receipt is created only after the active row is flushed. If
157
240
  * the process dies before unlinking it, replaying the exact canonical row is
@@ -178,8 +261,10 @@ function requeueCommittedReceipts(spool) {
178
261
  }
179
262
  }
180
263
  export function eventV3Paths(coordRoot) {
181
- const root = join(resolve(coordRoot), EVENT_V3_LEDGER_RELATIVE_ROOT);
264
+ const resolvedCoordRoot = resolve(coordRoot);
265
+ const root = join(resolvedCoordRoot, EVENT_V3_LEDGER_RELATIVE_ROOT);
182
266
  return {
267
+ coordRoot: resolvedCoordRoot,
183
268
  root,
184
269
  active: join(root, "active.ndjson"),
185
270
  catalog: join(root, "catalog.json"),
@@ -302,6 +387,35 @@ function eventIdFromReadyName(name) {
302
387
  const match = name.match(/^\d{16}-(evt_[0-9a-f-]{36})-/);
303
388
  return match?.[1];
304
389
  }
390
+ function epochTagFromReadyName(name) {
391
+ const match = name.match(/-(gex_[0-9a-f-]{36})\.ready$/);
392
+ return match ? match[1] : undefined;
393
+ }
394
+ /**
395
+ * Move every ready row tagged with a replaced epoch out of the drainable
396
+ * spool. A tagged row was produced for exactly one epoch; committing it into
397
+ * a successor would break that epoch's boot-sequence and causal-link
398
+ * authority, so the row is preserved beside the spool as `.epoch-replaced`
399
+ * evidence instead of ever reaching the active file.
400
+ */
401
+ function quarantineReplacedEpochRows(paths, readyNames) {
402
+ if (!readyNames.some((name) => epochTagFromReadyName(name) !== undefined))
403
+ return readyNames;
404
+ const liveGenesisId = genesisIdFromManifestV3(join(paths.root, "genesis.json"));
405
+ const drainable = [];
406
+ for (const name of readyNames) {
407
+ const tag = epochTagFromReadyName(name);
408
+ if (tag === undefined || tag === liveGenesisId) {
409
+ drainable.push(name);
410
+ continue;
411
+ }
412
+ const readyPath = join(paths.spool, name);
413
+ const quarantinePath = `${readyPath.slice(0, -".ready".length)}.epoch-replaced`;
414
+ renameSync(readyPath, quarantinePath);
415
+ fsyncParentDirectory(quarantinePath);
416
+ }
417
+ return drainable;
418
+ }
305
419
  function readFileTail(fd, buffer, position) {
306
420
  let read = 0;
307
421
  while (read < buffer.length) {
@@ -1 +1 @@
1
- {"version":3,"file":"plan-read.d.ts","sourceRoot":"","sources":["../../../src/core/governor/plan-read.ts"],"names":[],"mappings":"AAIA,OAAO,EAIL,KAAK,mBAAmB,EAExB,KAAK,kBAAkB,EAGvB,KAAK,yBAAyB,EAQ/B,MAAM,iBAAiB,CAAC;AA0BzB,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,MAAM,GACzB,mBAAmB,CAwErB;AAED,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,kBAAkB,CAsBpB;AAED,wBAAgB,6BAA6B,CAC3C,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,yBAAyB,GAAG,SAAS,CAWvC"}
1
+ {"version":3,"file":"plan-read.d.ts","sourceRoot":"","sources":["../../../src/core/governor/plan-read.ts"],"names":[],"mappings":"AAKA,OAAO,EAIL,KAAK,mBAAmB,EAExB,KAAK,kBAAkB,EAGvB,KAAK,yBAAyB,EAQ/B,MAAM,iBAAiB,CAAC;AAwBzB,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,MAAM,GACzB,mBAAmB,CAwErB;AAED,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,kBAAkB,CAsBpB;AAED,wBAAgB,6BAA6B,CAC3C,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,yBAAyB,GAAG,SAAS,CAWvC"}
@@ -1,6 +1,7 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
3
3
  import { join, resolve } from "node:path";
4
+ import { readSegmentedJsonlFileSync } from "../storage/durable-history.js";
4
5
  import { readWorkItem } from "../work/read.js";
5
6
  import { GOVERNOR_PLAN_SCHEMA_VERSION, MAX_GOVERNOR_PLAN_REVIEWERS, MAX_GOVERNOR_PLAN_REVISION_ROUNDS, } from "./plan-types.js";
6
7
  const PLAN_ID = /^plan-[0-9]{4}-[a-f0-9]{8}$/;
@@ -11,8 +12,6 @@ const PLAN_KEY = /^[a-z][a-z0-9-]{0,31}$/;
11
12
  const TEMPLATE_ID = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/;
12
13
  const MAX_PLANS = 100;
13
14
  const MAX_RECORD_BYTES = 256 * 1024;
14
- const MAX_EVENTS_BYTES = 512 * 1024;
15
- const MAX_EVENTS = 100;
16
15
  const EVENT_TYPES = new Set([
17
16
  "plan.awaiting_approval",
18
17
  "plan.resumed",
@@ -192,25 +191,10 @@ function deriveStatus(coordRoot, events, proposal) {
192
191
  return { status: "interrupted", work_ids: [], reason: latest?.reason };
193
192
  }
194
193
  function readEvents(path, planId) {
195
- if (!existsSync(path))
196
- return [];
197
- const size = statSync(path).size;
198
- if (size > MAX_EVENTS_BYTES)
199
- throw new Error("governor plan events exceed their byte limit");
200
- const body = readFileSync(path, "utf8");
201
- if (body && !body.endsWith("\n"))
202
- throw new Error(`governor plan ${planId} has a partial event`);
203
- const lines = body.split("\n").filter(Boolean);
204
- if (lines.length > MAX_EVENTS)
205
- throw new Error(`governor plan exceeds ${MAX_EVENTS} events`);
206
- return lines.map((line, index) => {
207
- let event;
208
- try {
209
- event = JSON.parse(line);
210
- }
211
- catch (error) {
212
- throw new Error(`cannot parse governor plan ${planId} event ${index + 1}: ${error.message}`);
213
- }
194
+ return readSegmentedJsonlFileSync(path, {
195
+ max_record_bytes: MAX_RECORD_BYTES,
196
+ max_records: 1_000_000,
197
+ }).map((event, index) => {
214
198
  validateEvent(event, planId, index + 1);
215
199
  return event;
216
200
  });
@@ -1,6 +1,7 @@
1
1
  import { createHash, randomBytes, randomUUID } from "node:crypto";
2
- import { appendFileSync, chmodSync, existsSync, linkSync, mkdirSync, readFileSync, statSync, unlinkSync, writeFileSync, } from "node:fs";
2
+ import { chmodSync, existsSync, linkSync, mkdirSync, readFileSync, statSync, unlinkSync, writeFileSync, } from "node:fs";
3
3
  import { dirname, join, resolve } from "node:path";
4
+ import { appendSegmentedJsonlFile } from "../storage/durable-history.js";
4
5
  import { createWorkItem, readWorkItem } from "../work/index.js";
5
6
  import { digestResult, readWorkflowProof, runWorkflow, WorkflowParkedError, workflowScriptDigest, } from "../workflow/index.js";
6
7
  import { readGovernorPlan, readGovernorPlanReviewReceipt, readGovernorPlans } from "./plan-read.js";
@@ -1253,13 +1254,10 @@ function appendPlanEvent(coordRootRaw, goalId, planId, input) {
1253
1254
  actor: bounded(input.actor, "plan actor", 200),
1254
1255
  reason: bounded(input.reason, "plan reason", MAX_REASON),
1255
1256
  };
1256
- const line = `${JSON.stringify(event)}\n`;
1257
- const existing = existsSync(path) ? statSync(path).size : 0;
1258
- if (existing + Buffer.byteLength(line) > MAX_EVENTS_BYTES) {
1259
- throw new Error("governor plan event log would exceed its byte limit");
1260
- }
1261
- appendFileSync(path, line, { encoding: "utf8", mode: 0o600 });
1262
- chmodSync(path, 0o600);
1257
+ appendSegmentedJsonlFile(path, event, {
1258
+ max_record_bytes: MAX_RECORD_BYTES,
1259
+ max_segment_bytes: MAX_EVENTS_BYTES,
1260
+ });
1263
1261
  }
1264
1262
  function appendPlanEventIfMissing(coordRoot, goalId, planId, eventType, input) {
1265
1263
  const plan = readGovernorPlan(coordRoot, goalId, planId);
@@ -3,4 +3,16 @@ export declare function readGovernorServiceConfig(coordRootRaw: string): Governo
3
3
  export declare function readGovernorServiceRuntime(coordRootRaw: string): GovernorServiceRuntime | undefined;
4
4
  export declare function readGovernorServiceStatus(coordRootRaw: string): GovernorServiceStatus;
5
5
  export declare function governorServiceLogPath(coordRoot: string): string;
6
+ export interface GovernorServiceLogReadOptions {
7
+ max_bytes?: number;
8
+ max_records?: number;
9
+ }
10
+ export interface GovernorServiceLogReadResult {
11
+ lines: readonly string[];
12
+ bytes_read: number;
13
+ records_examined: number;
14
+ truncated: boolean;
15
+ }
16
+ /** Read shared generations plus untouched legacy history under one aggregate budget. */
17
+ export declare function readGovernorServiceLogs(coordRootRaw: string, options?: GovernorServiceLogReadOptions): GovernorServiceLogReadResult;
6
18
  //# sourceMappingURL=service-read.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"service-read.d.ts","sourceRoot":"","sources":["../../../src/core/governor/service-read.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EAEtB,MAAM,cAAc,CAAC;AAMtB,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,qBAAqB,CA0BrF;AAED,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,MAAM,GACnB,sBAAsB,GAAG,SAAS,CAgBpC;AAED,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,qBAAqB,CAkBrF;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEhE"}
1
+ {"version":3,"file":"service-read.d.ts","sourceRoot":"","sources":["../../../src/core/governor/service-read.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EAEtB,MAAM,cAAc,CAAC;AAOtB,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,qBAAqB,CA0BrF;AAED,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,MAAM,GACnB,sBAAsB,GAAG,SAAS,CAgBpC;AAED,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,qBAAqB,CAkBrF;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAahE;AAED,MAAM,WAAW,6BAA6B;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;CACpB;AAeD,wFAAwF;AACxF,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,6BAAkC,GAC1C,4BAA4B,CA6D9B"}