harnery 0.34.1 → 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 (692) 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 -94
  4. package/dist/commands/agents.d.ts +37 -6
  5. package/dist/commands/agents.d.ts.map +1 -1
  6. package/dist/commands/agents.js +466 -371
  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 +31 -6
  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/decision.d.ts.map +1 -1
  18. package/dist/commands/decision.js +2 -2
  19. package/dist/commands/deinit.d.ts.map +1 -1
  20. package/dist/commands/deinit.js +5 -0
  21. package/dist/commands/docs.d.ts.map +1 -1
  22. package/dist/commands/docs.js +13 -2
  23. package/dist/commands/doctor.d.ts +5 -0
  24. package/dist/commands/doctor.d.ts.map +1 -1
  25. package/dist/commands/doctor.js +51 -7
  26. package/dist/commands/events.d.ts.map +1 -1
  27. package/dist/commands/events.js +18 -1
  28. package/dist/commands/fetch.js +6 -5
  29. package/dist/commands/files.d.ts +22 -0
  30. package/dist/commands/files.d.ts.map +1 -0
  31. package/dist/commands/files.js +113 -0
  32. package/dist/commands/governor.js +14 -12
  33. package/dist/commands/inbox.d.ts +5 -0
  34. package/dist/commands/inbox.d.ts.map +1 -0
  35. package/dist/commands/inbox.js +57 -0
  36. package/dist/commands/init.d.ts +4 -5
  37. package/dist/commands/init.d.ts.map +1 -1
  38. package/dist/commands/init.js +63 -13
  39. package/dist/commands/ledger-v3.d.ts.map +1 -1
  40. package/dist/commands/ledger-v3.js +347 -1
  41. package/dist/commands/logs.d.ts +4 -0
  42. package/dist/commands/logs.d.ts.map +1 -0
  43. package/dist/commands/logs.js +169 -0
  44. package/dist/commands/messages.d.ts +5 -0
  45. package/dist/commands/messages.d.ts.map +1 -0
  46. package/dist/commands/messages.js +45 -0
  47. package/dist/commands/outline.d.ts +1 -1
  48. package/dist/commands/outline.d.ts.map +1 -1
  49. package/dist/commands/outline.js +2 -2
  50. package/dist/commands/presence.d.ts.map +1 -1
  51. package/dist/commands/presence.js +2 -2
  52. package/dist/commands/read.d.ts +1 -1
  53. package/dist/commands/read.d.ts.map +1 -1
  54. package/dist/commands/read.js +2 -2
  55. package/dist/commands/semantic.d.ts +4 -0
  56. package/dist/commands/semantic.d.ts.map +1 -0
  57. package/dist/commands/semantic.js +199 -0
  58. package/dist/commands/storage.d.ts +4 -0
  59. package/dist/commands/storage.d.ts.map +1 -0
  60. package/dist/commands/storage.js +238 -0
  61. package/dist/commands/tunnel.d.ts +5 -1
  62. package/dist/commands/tunnel.d.ts.map +1 -1
  63. package/dist/commands/tunnel.js +44 -31
  64. package/dist/commands/web.d.ts +3 -0
  65. package/dist/commands/web.d.ts.map +1 -1
  66. package/dist/commands/web.js +84 -7
  67. package/dist/commands/work.js +3 -3
  68. package/dist/commands/workflow.js +13 -13
  69. package/dist/core/adapters/profiles.d.ts +1 -1
  70. package/dist/core/agents/canonical-emit.d.ts +3 -0
  71. package/dist/core/agents/canonical-emit.d.ts.map +1 -1
  72. package/dist/core/agents/canonical-emit.js +12 -0
  73. package/dist/core/agents/claim-path.d.ts +11 -0
  74. package/dist/core/agents/claim-path.d.ts.map +1 -0
  75. package/dist/core/agents/claim-path.js +22 -0
  76. package/dist/core/agents/cli.js +209 -39
  77. package/dist/core/agents/coord-client.d.ts +29 -3
  78. package/dist/core/agents/coord-client.d.ts.map +1 -1
  79. package/dist/core/agents/coord-client.js +88 -9
  80. package/dist/core/agents/live-authority-v3.d.ts +47 -1
  81. package/dist/core/agents/live-authority-v3.d.ts.map +1 -1
  82. package/dist/core/agents/live-authority-v3.js +245 -13
  83. package/dist/core/agents/live-lifecycle-v3.js +9 -4
  84. package/dist/core/agents/live-observation-v3.d.ts.map +1 -1
  85. package/dist/core/agents/live-observation-v3.js +8 -3
  86. package/dist/core/agents/render/prompt-context.d.ts +9 -3
  87. package/dist/core/agents/render/prompt-context.d.ts.map +1 -1
  88. package/dist/core/agents/render/prompt-context.js +36 -17
  89. package/dist/core/agents/rules/stop-hook.d.ts +2 -0
  90. package/dist/core/agents/rules/stop-hook.d.ts.map +1 -1
  91. package/dist/core/agents/rules/stop-hook.js +115 -22
  92. package/dist/core/agents/rules/verdict.d.ts +1 -0
  93. package/dist/core/agents/rules/verdict.d.ts.map +1 -1
  94. package/dist/core/agents/session-events.d.ts.map +1 -1
  95. package/dist/core/agents/session-events.js +4 -0
  96. package/dist/core/agents/session-finalization-state-v3.js +1 -1
  97. package/dist/core/agents/session-finalizer-v3.js +5 -1
  98. package/dist/core/agents/session-name-display.d.ts +1 -0
  99. package/dist/core/agents/session-name-display.d.ts.map +1 -1
  100. package/dist/core/agents/session-name-display.js +8 -1
  101. package/dist/core/agents/state/activity-log.d.ts +3 -0
  102. package/dist/core/agents/state/activity-log.d.ts.map +1 -1
  103. package/dist/core/agents/state/activity-log.js +6 -3
  104. package/dist/core/agents/state/heartbeat-reader.d.ts +46 -0
  105. package/dist/core/agents/state/heartbeat-reader.d.ts.map +1 -0
  106. package/dist/core/agents/state/heartbeat-reader.js +25 -0
  107. package/dist/core/agents/state/heartbeat-writer.d.ts +9 -48
  108. package/dist/core/agents/state/heartbeat-writer.d.ts.map +1 -1
  109. package/dist/core/agents/state/heartbeat-writer.js +34 -34
  110. package/dist/core/agents/state/live-coordination-view.d.ts +6 -8
  111. package/dist/core/agents/state/live-coordination-view.d.ts.map +1 -1
  112. package/dist/core/agents/state/live-coordination-view.js +16 -67
  113. package/dist/core/agents/state/live-coordination-writer.d.ts +12 -0
  114. package/dist/core/agents/state/live-coordination-writer.d.ts.map +1 -0
  115. package/dist/core/agents/state/live-coordination-writer.js +92 -0
  116. package/dist/core/agents/state/names.d.ts +9 -1
  117. package/dist/core/agents/state/names.d.ts.map +1 -1
  118. package/dist/core/agents/state/names.js +190 -182
  119. package/dist/core/agents/state/stale-sweep.d.ts.map +1 -1
  120. package/dist/core/agents/state/stale-sweep.js +23 -5
  121. package/dist/core/artifacts/constants.d.ts +5 -0
  122. package/dist/core/artifacts/constants.d.ts.map +1 -0
  123. package/dist/core/artifacts/constants.js +4 -0
  124. package/dist/core/artifacts/index.d.ts +24 -3
  125. package/dist/core/artifacts/index.d.ts.map +1 -1
  126. package/dist/core/artifacts/index.js +96 -8
  127. package/dist/core/config.d.ts +62 -4
  128. package/dist/core/config.d.ts.map +1 -1
  129. package/dist/core/config.js +98 -4
  130. package/dist/core/conversations/archive.d.ts +49 -0
  131. package/dist/core/conversations/archive.d.ts.map +1 -0
  132. package/dist/core/conversations/archive.js +136 -0
  133. package/dist/core/conversations/catalog.d.ts +10 -0
  134. package/dist/core/conversations/catalog.d.ts.map +1 -0
  135. package/dist/core/conversations/catalog.js +72 -0
  136. package/dist/core/conversations/context-pack.d.ts +6 -0
  137. package/dist/core/conversations/context-pack.d.ts.map +1 -0
  138. package/dist/core/conversations/context-pack.js +60 -0
  139. package/dist/core/conversations/contract.d.ts +155 -0
  140. package/dist/core/conversations/contract.d.ts.map +1 -0
  141. package/dist/core/conversations/contract.js +1 -0
  142. package/dist/core/conversations/evaluation.d.ts +16 -0
  143. package/dist/core/conversations/evaluation.d.ts.map +1 -0
  144. package/dist/core/conversations/evaluation.js +9 -0
  145. package/dist/core/conversations/index.d.ts +10 -0
  146. package/dist/core/conversations/index.d.ts.map +1 -0
  147. package/dist/core/conversations/index.js +9 -0
  148. package/dist/core/conversations/lifecycle.d.ts +28 -0
  149. package/dist/core/conversations/lifecycle.d.ts.map +1 -0
  150. package/dist/core/conversations/lifecycle.js +29 -0
  151. package/dist/core/conversations/normalize.d.ts +14 -0
  152. package/dist/core/conversations/normalize.d.ts.map +1 -0
  153. package/dist/core/conversations/normalize.js +82 -0
  154. package/dist/core/conversations/query.d.ts +8 -0
  155. package/dist/core/conversations/query.d.ts.map +1 -0
  156. package/dist/core/conversations/query.js +280 -0
  157. package/dist/core/conversations/search-index.d.ts +9 -0
  158. package/dist/core/conversations/search-index.d.ts.map +1 -0
  159. package/dist/core/conversations/search-index.js +29 -0
  160. package/dist/core/events/legacy-storage/canary.d.ts +18 -0
  161. package/dist/core/events/legacy-storage/canary.d.ts.map +1 -0
  162. package/dist/core/events/legacy-storage/canary.js +150 -0
  163. package/dist/core/events/legacy-storage/fence.d.ts +15 -0
  164. package/dist/core/events/legacy-storage/fence.d.ts.map +1 -0
  165. package/dist/core/events/legacy-storage/fence.js +115 -0
  166. package/dist/core/events/legacy-storage/index.d.ts +6 -0
  167. package/dist/core/events/legacy-storage/index.d.ts.map +1 -0
  168. package/dist/core/events/legacy-storage/index.js +5 -0
  169. package/dist/core/events/legacy-storage/inventory.d.ts +10 -0
  170. package/dist/core/events/legacy-storage/inventory.d.ts.map +1 -0
  171. package/dist/core/events/legacy-storage/inventory.js +40 -0
  172. package/dist/core/events/legacy-storage/manifest.d.ts +23 -0
  173. package/dist/core/events/legacy-storage/manifest.d.ts.map +1 -0
  174. package/dist/core/events/legacy-storage/manifest.js +108 -0
  175. package/dist/core/events/legacy-storage/reader.d.ts +15 -0
  176. package/dist/core/events/legacy-storage/reader.d.ts.map +1 -0
  177. package/dist/core/events/legacy-storage/reader.js +154 -0
  178. package/dist/core/events/v3/authority-outbox.d.ts +7 -2
  179. package/dist/core/events/v3/authority-outbox.d.ts.map +1 -1
  180. package/dist/core/events/v3/authority-outbox.js +16 -3
  181. package/dist/core/events/v3/base-contract.d.ts +851 -16
  182. package/dist/core/events/v3/base-contract.d.ts.map +1 -1
  183. package/dist/core/events/v3/base-contract.js +50 -7
  184. package/dist/core/events/v3/bootstrap.d.ts +39 -0
  185. package/dist/core/events/v3/bootstrap.d.ts.map +1 -1
  186. package/dist/core/events/v3/bootstrap.js +167 -3
  187. package/dist/core/events/v3/capabilities.d.ts +11 -0
  188. package/dist/core/events/v3/capabilities.d.ts.map +1 -1
  189. package/dist/core/events/v3/capabilities.js +26 -3
  190. package/dist/core/events/v3/control-witness.d.ts +44 -0
  191. package/dist/core/events/v3/control-witness.d.ts.map +1 -0
  192. package/dist/core/events/v3/control-witness.js +233 -0
  193. package/dist/core/events/v3/control-writer.d.ts +4 -0
  194. package/dist/core/events/v3/control-writer.d.ts.map +1 -0
  195. package/dist/core/events/v3/control-writer.js +16 -0
  196. package/dist/core/events/v3/control.d.ts +8 -2
  197. package/dist/core/events/v3/control.d.ts.map +1 -1
  198. package/dist/core/events/v3/control.js +46 -18
  199. package/dist/core/events/v3/coordination-transaction-recovery.d.ts +42 -0
  200. package/dist/core/events/v3/coordination-transaction-recovery.d.ts.map +1 -0
  201. package/dist/core/events/v3/coordination-transaction-recovery.js +342 -0
  202. package/dist/core/events/v3/coordination-view.d.ts.map +1 -1
  203. package/dist/core/events/v3/coordination-view.js +16 -1
  204. package/dist/core/events/v3/generated.d.ts +1 -1
  205. package/dist/core/events/v3/generated.js +1 -1
  206. package/dist/core/events/v3/index.d.ts +8 -5
  207. package/dist/core/events/v3/index.d.ts.map +1 -1
  208. package/dist/core/events/v3/index.js +7 -4
  209. package/dist/core/events/v3/latency.d.ts +31 -1
  210. package/dist/core/events/v3/latency.d.ts.map +1 -1
  211. package/dist/core/events/v3/latency.js +127 -3
  212. package/dist/core/events/v3/live-route-observer.d.ts +31 -0
  213. package/dist/core/events/v3/live-route-observer.d.ts.map +1 -0
  214. package/dist/core/events/v3/live-route-observer.js +58 -0
  215. package/dist/core/events/v3/live-routing.d.ts +42 -20
  216. package/dist/core/events/v3/live-routing.d.ts.map +1 -1
  217. package/dist/core/events/v3/live-routing.js +153 -41
  218. package/dist/core/events/v3/producers/command-recorder.d.ts.map +1 -1
  219. package/dist/core/events/v3/producers/command-recorder.js +10 -1
  220. package/dist/core/events/v3/producers/coordination-recorder.d.ts +11 -1
  221. package/dist/core/events/v3/producers/coordination-recorder.d.ts.map +1 -1
  222. package/dist/core/events/v3/producers/coordination-recorder.js +90 -13
  223. package/dist/core/events/v3/producers/diagnostic-summaries.d.ts +129 -0
  224. package/dist/core/events/v3/producers/diagnostic-summaries.d.ts.map +1 -0
  225. package/dist/core/events/v3/producers/diagnostic-summaries.js +499 -0
  226. package/dist/core/events/v3/producers/hook-base.d.ts +17 -1
  227. package/dist/core/events/v3/producers/hook-base.d.ts.map +1 -1
  228. package/dist/core/events/v3/producers/hook-base.js +83 -2
  229. package/dist/core/events/v3/producers/intake.d.ts +13 -0
  230. package/dist/core/events/v3/producers/intake.d.ts.map +1 -1
  231. package/dist/core/events/v3/producers/intake.js +36 -2
  232. package/dist/core/events/v3/producers/producer-state-observer.d.ts +8 -0
  233. package/dist/core/events/v3/producers/producer-state-observer.d.ts.map +1 -0
  234. package/dist/core/events/v3/producers/producer-state-observer.js +45 -0
  235. package/dist/core/events/v3/producers/recorder.d.ts +117 -1
  236. package/dist/core/events/v3/producers/recorder.d.ts.map +1 -1
  237. package/dist/core/events/v3/producers/recorder.js +992 -27
  238. package/dist/core/events/v3/reader.d.ts +51 -0
  239. package/dist/core/events/v3/reader.d.ts.map +1 -1
  240. package/dist/core/events/v3/reader.js +181 -1
  241. package/dist/core/events/v3/rotation-config.d.ts +9 -0
  242. package/dist/core/events/v3/rotation-config.d.ts.map +1 -0
  243. package/dist/core/events/v3/rotation-config.js +91 -0
  244. package/dist/core/events/v3/runtime-build.d.ts +11 -0
  245. package/dist/core/events/v3/runtime-build.d.ts.map +1 -0
  246. package/dist/core/events/v3/runtime-build.js +39 -0
  247. package/dist/core/events/v3/runtime-identity.d.ts +5 -0
  248. package/dist/core/events/v3/runtime-identity.d.ts.map +1 -0
  249. package/dist/core/events/v3/runtime-identity.js +18 -0
  250. package/dist/core/events/v3/runtime-telemetry-capabilities.d.ts +52 -0
  251. package/dist/core/events/v3/runtime-telemetry-capabilities.d.ts.map +1 -0
  252. package/dist/core/events/v3/runtime-telemetry-capabilities.js +54 -0
  253. package/dist/core/events/v3/support-storage/classify.d.ts +46 -0
  254. package/dist/core/events/v3/support-storage/classify.d.ts.map +1 -0
  255. package/dist/core/events/v3/support-storage/classify.js +149 -0
  256. package/dist/core/events/v3/support-storage/eligibility.d.ts +29 -0
  257. package/dist/core/events/v3/support-storage/eligibility.d.ts.map +1 -0
  258. package/dist/core/events/v3/support-storage/eligibility.js +35 -0
  259. package/dist/core/events/v3/support-storage/index.d.ts +10 -0
  260. package/dist/core/events/v3/support-storage/index.d.ts.map +1 -0
  261. package/dist/core/events/v3/support-storage/index.js +9 -0
  262. package/dist/core/events/v3/support-storage/inventory.d.ts +30 -0
  263. package/dist/core/events/v3/support-storage/inventory.d.ts.map +1 -0
  264. package/dist/core/events/v3/support-storage/inventory.js +94 -0
  265. package/dist/core/events/v3/support-storage/logical-authority.d.ts +14 -0
  266. package/dist/core/events/v3/support-storage/logical-authority.d.ts.map +1 -0
  267. package/dist/core/events/v3/support-storage/logical-authority.js +104 -0
  268. package/dist/core/events/v3/support-storage/maintenance.d.ts +98 -0
  269. package/dist/core/events/v3/support-storage/maintenance.d.ts.map +1 -0
  270. package/dist/core/events/v3/support-storage/maintenance.js +352 -0
  271. package/dist/core/events/v3/support-storage/pack-contract.d.ts +59 -0
  272. package/dist/core/events/v3/support-storage/pack-contract.d.ts.map +1 -0
  273. package/dist/core/events/v3/support-storage/pack-contract.js +249 -0
  274. package/dist/core/events/v3/support-storage/pack-reader.d.ts +34 -0
  275. package/dist/core/events/v3/support-storage/pack-reader.d.ts.map +1 -0
  276. package/dist/core/events/v3/support-storage/pack-reader.js +258 -0
  277. package/dist/core/events/v3/support-storage/pack-writer.d.ts +30 -0
  278. package/dist/core/events/v3/support-storage/pack-writer.d.ts.map +1 -0
  279. package/dist/core/events/v3/support-storage/pack-writer.js +268 -0
  280. package/dist/core/events/v3/support-storage/recovery.d.ts +15 -0
  281. package/dist/core/events/v3/support-storage/recovery.d.ts.map +1 -0
  282. package/dist/core/events/v3/support-storage/recovery.js +22 -0
  283. package/dist/core/events/v3/turn-telemetry.d.ts +21 -6
  284. package/dist/core/events/v3/turn-telemetry.d.ts.map +1 -1
  285. package/dist/core/events/v3/turn-telemetry.js +32 -2
  286. package/dist/core/events/v3/writer.d.ts +13 -1
  287. package/dist/core/events/v3/writer.d.ts.map +1 -1
  288. package/dist/core/events/v3/writer.js +126 -12
  289. package/dist/core/governor/plan-read.d.ts.map +1 -1
  290. package/dist/core/governor/plan-read.js +5 -21
  291. package/dist/core/governor/planning.js +6 -8
  292. package/dist/core/governor/service-read.d.ts +12 -0
  293. package/dist/core/governor/service-read.d.ts.map +1 -1
  294. package/dist/core/governor/service-read.js +266 -2
  295. package/dist/core/governor/service.d.ts +1 -0
  296. package/dist/core/governor/service.d.ts.map +1 -1
  297. package/dist/core/governor/service.js +53 -18
  298. package/dist/core/guard/evidence-v3.d.ts.map +1 -1
  299. package/dist/core/guard/evidence-v3.js +2 -0
  300. package/dist/core/hooks/adapter/events.d.ts.map +1 -1
  301. package/dist/core/hooks/adapter/events.js +1 -0
  302. package/dist/core/hooks/adapter/output.d.ts +4 -2
  303. package/dist/core/hooks/adapter/output.d.ts.map +1 -1
  304. package/dist/core/hooks/adapter/output.js +13 -5
  305. package/dist/core/hooks/adapter/parse.d.ts +3 -0
  306. package/dist/core/hooks/adapter/parse.d.ts.map +1 -1
  307. package/dist/core/hooks/adapter/parse.js +14 -0
  308. package/dist/core/hooks/adapter/runtime-telemetry.d.ts +142 -0
  309. package/dist/core/hooks/adapter/runtime-telemetry.d.ts.map +1 -0
  310. package/dist/core/hooks/adapter/runtime-telemetry.js +869 -0
  311. package/dist/core/hooks/cli.js +318 -61
  312. package/dist/core/hooks/effects/image-capture.d.ts +1 -1
  313. package/dist/core/hooks/effects/image-capture.d.ts.map +1 -1
  314. package/dist/core/hooks/effects/image-capture.js +4 -2
  315. package/dist/core/hooks/remediation-cap.d.ts +39 -0
  316. package/dist/core/hooks/remediation-cap.d.ts.map +1 -0
  317. package/dist/core/hooks/remediation-cap.js +63 -0
  318. package/dist/core/hooks/resolve/coord-root.d.ts +22 -9
  319. package/dist/core/hooks/resolve/coord-root.d.ts.map +1 -1
  320. package/dist/core/hooks/resolve/coord-root.js +92 -11
  321. package/dist/core/hooks/resolve/owner.d.ts.map +1 -1
  322. package/dist/core/hooks/resolve/owner.js +5 -0
  323. package/dist/core/hooks/resolve/transcript.d.ts +33 -9
  324. package/dist/core/hooks/resolve/transcript.d.ts.map +1 -1
  325. package/dist/core/hooks/resolve/transcript.js +33 -10
  326. package/dist/core/inbox/contract.d.ts +64 -0
  327. package/dist/core/inbox/contract.d.ts.map +1 -0
  328. package/dist/core/inbox/contract.js +13 -0
  329. package/dist/core/inbox/index.d.ts +5 -0
  330. package/dist/core/inbox/index.d.ts.map +1 -0
  331. package/dist/core/inbox/index.js +4 -0
  332. package/dist/core/inbox/lifecycle.d.ts +22 -0
  333. package/dist/core/inbox/lifecycle.d.ts.map +1 -0
  334. package/dist/core/inbox/lifecycle.js +41 -0
  335. package/dist/core/inbox/service.d.ts +36 -0
  336. package/dist/core/inbox/service.d.ts.map +1 -0
  337. package/dist/core/inbox/service.js +210 -0
  338. package/dist/core/inbox/watcher.d.ts +7 -0
  339. package/dist/core/inbox/watcher.d.ts.map +1 -0
  340. package/dist/core/inbox/watcher.js +26 -0
  341. package/dist/core/presence/codec-digest.d.ts.map +1 -1
  342. package/dist/core/presence/codec-digest.js +14 -3
  343. package/dist/core/presence/relay-client.d.ts +1 -0
  344. package/dist/core/presence/relay-client.d.ts.map +1 -1
  345. package/dist/core/presence/relay-client.js +52 -8
  346. package/dist/core/semantic/adapters.d.ts +37 -0
  347. package/dist/core/semantic/adapters.d.ts.map +1 -0
  348. package/dist/core/semantic/adapters.js +360 -0
  349. package/dist/core/semantic/contract.d.ts +1072 -0
  350. package/dist/core/semantic/contract.d.ts.map +1 -0
  351. package/dist/core/semantic/contract.js +331 -0
  352. package/dist/core/semantic/evidence.d.ts +11 -0
  353. package/dist/core/semantic/evidence.d.ts.map +1 -0
  354. package/dist/core/semantic/evidence.js +262 -0
  355. package/dist/core/semantic/index.d.ts +14 -0
  356. package/dist/core/semantic/index.d.ts.map +1 -0
  357. package/dist/core/semantic/index.js +13 -0
  358. package/dist/core/semantic/once.d.ts +38 -0
  359. package/dist/core/semantic/once.d.ts.map +1 -0
  360. package/dist/core/semantic/once.js +364 -0
  361. package/dist/core/semantic/prompt.d.ts +12 -0
  362. package/dist/core/semantic/prompt.d.ts.map +1 -0
  363. package/dist/core/semantic/prompt.js +83 -0
  364. package/dist/core/semantic/review.d.ts +144 -0
  365. package/dist/core/semantic/review.d.ts.map +1 -0
  366. package/dist/core/semantic/review.js +544 -0
  367. package/dist/core/semantic/routes.d.ts +10 -0
  368. package/dist/core/semantic/routes.d.ts.map +1 -0
  369. package/dist/core/semantic/routes.js +21 -0
  370. package/dist/core/semantic/scheduler.d.ts +27 -0
  371. package/dist/core/semantic/scheduler.d.ts.map +1 -0
  372. package/dist/core/semantic/scheduler.js +91 -0
  373. package/dist/core/semantic/service-status.d.ts +51 -0
  374. package/dist/core/semantic/service-status.d.ts.map +1 -0
  375. package/dist/core/semantic/service-status.js +140 -0
  376. package/dist/core/semantic/service.d.ts +52 -0
  377. package/dist/core/semantic/service.d.ts.map +1 -0
  378. package/dist/core/semantic/service.js +559 -0
  379. package/dist/core/semantic/soak.d.ts +75 -0
  380. package/dist/core/semantic/soak.d.ts.map +1 -0
  381. package/dist/core/semantic/soak.js +476 -0
  382. package/dist/core/semantic/storage.d.ts +81 -0
  383. package/dist/core/semantic/storage.d.ts.map +1 -0
  384. package/dist/core/semantic/storage.js +180 -0
  385. package/dist/core/semantic/usage.d.ts +43 -0
  386. package/dist/core/semantic/usage.d.ts.map +1 -0
  387. package/dist/core/semantic/usage.js +193 -0
  388. package/dist/core/semantic/validate.d.ts +18 -0
  389. package/dist/core/semantic/validate.d.ts.map +1 -0
  390. package/dist/core/semantic/validate.js +207 -0
  391. package/dist/core/storage/buffer.d.ts +28 -0
  392. package/dist/core/storage/buffer.d.ts.map +1 -0
  393. package/dist/core/storage/buffer.js +101 -0
  394. package/dist/core/storage/builtins.d.ts +3 -0
  395. package/dist/core/storage/builtins.d.ts.map +1 -0
  396. package/dist/core/storage/builtins.js +683 -0
  397. package/dist/core/storage/catalog.d.ts +19 -0
  398. package/dist/core/storage/catalog.d.ts.map +1 -0
  399. package/dist/core/storage/catalog.js +365 -0
  400. package/dist/core/storage/config.d.ts +16 -0
  401. package/dist/core/storage/config.d.ts.map +1 -0
  402. package/dist/core/storage/config.js +311 -0
  403. package/dist/core/storage/contract.d.ts +275 -0
  404. package/dist/core/storage/contract.d.ts.map +1 -0
  405. package/dist/core/storage/contract.js +3 -0
  406. package/dist/core/storage/durable-history.d.ts +36 -0
  407. package/dist/core/storage/durable-history.d.ts.map +1 -0
  408. package/dist/core/storage/durable-history.js +606 -0
  409. package/dist/core/storage/health.d.ts +4 -0
  410. package/dist/core/storage/health.d.ts.map +1 -0
  411. package/dist/core/storage/health.js +65 -0
  412. package/dist/core/storage/index.d.ts +16 -0
  413. package/dist/core/storage/index.d.ts.map +1 -0
  414. package/dist/core/storage/index.js +15 -0
  415. package/dist/core/storage/inventory.d.ts +25 -0
  416. package/dist/core/storage/inventory.d.ts.map +1 -0
  417. package/dist/core/storage/inventory.js +666 -0
  418. package/dist/core/storage/jsonl.d.ts +52 -0
  419. package/dist/core/storage/jsonl.d.ts.map +1 -0
  420. package/dist/core/storage/jsonl.js +156 -0
  421. package/dist/core/storage/log-retention.d.ts +52 -0
  422. package/dist/core/storage/log-retention.d.ts.map +1 -0
  423. package/dist/core/storage/log-retention.js +419 -0
  424. package/dist/core/storage/logger.d.ts +82 -0
  425. package/dist/core/storage/logger.d.ts.map +1 -0
  426. package/dist/core/storage/logger.js +411 -0
  427. package/dist/core/storage/maintenance-providers.d.ts +26 -0
  428. package/dist/core/storage/maintenance-providers.d.ts.map +1 -0
  429. package/dist/core/storage/maintenance-providers.js +141 -0
  430. package/dist/core/storage/maintenance.d.ts +125 -0
  431. package/dist/core/storage/maintenance.d.ts.map +1 -0
  432. package/dist/core/storage/maintenance.js +609 -0
  433. package/dist/core/storage/metrics.d.ts +60 -0
  434. package/dist/core/storage/metrics.d.ts.map +1 -0
  435. package/dist/core/storage/metrics.js +134 -0
  436. package/dist/core/storage/policy.d.ts +7 -0
  437. package/dist/core/storage/policy.d.ts.map +1 -0
  438. package/dist/core/storage/policy.js +110 -0
  439. package/dist/core/storage/process-log.d.ts +38 -0
  440. package/dist/core/storage/process-log.d.ts.map +1 -0
  441. package/dist/core/storage/process-log.js +165 -0
  442. package/dist/core/storage/query.d.ts +34 -0
  443. package/dist/core/storage/query.d.ts.map +1 -0
  444. package/dist/core/storage/query.js +295 -0
  445. package/dist/core/storage/receipts.d.ts +23 -0
  446. package/dist/core/storage/receipts.d.ts.map +1 -0
  447. package/dist/core/storage/receipts.js +117 -0
  448. package/dist/core/storage/segments.d.ts +84 -0
  449. package/dist/core/storage/segments.d.ts.map +1 -0
  450. package/dist/core/storage/segments.js +542 -0
  451. package/dist/core/storage/sink-graph.d.ts +65 -0
  452. package/dist/core/storage/sink-graph.d.ts.map +1 -0
  453. package/dist/core/storage/sink-graph.js +213 -0
  454. package/dist/core/storage/storm-control.d.ts +23 -0
  455. package/dist/core/storage/storm-control.d.ts.map +1 -0
  456. package/dist/core/storage/storm-control.js +59 -0
  457. package/dist/core/work/state.d.ts.map +1 -1
  458. package/dist/core/work/state.js +10 -14
  459. package/dist/core/workflow/live-session-v3.d.ts.map +1 -1
  460. package/dist/core/workflow/live-session-v3.js +2 -1
  461. package/dist/index.d.ts +2 -0
  462. package/dist/index.d.ts.map +1 -1
  463. package/dist/index.js +2 -0
  464. package/dist/lazy-commands.d.ts +26 -0
  465. package/dist/lazy-commands.d.ts.map +1 -0
  466. package/dist/lazy-commands.js +210 -0
  467. package/dist/lib/browser/client.d.ts +11 -0
  468. package/dist/lib/browser/client.d.ts.map +1 -1
  469. package/dist/lib/browser/client.js +13 -0
  470. package/dist/lib/browser/index.d.ts +1 -0
  471. package/dist/lib/browser/index.d.ts.map +1 -1
  472. package/dist/lib/browser/standalone-html.d.ts +25 -0
  473. package/dist/lib/browser/standalone-html.d.ts.map +1 -0
  474. package/dist/lib/browser/standalone-html.js +284 -0
  475. package/dist/lib/docs-lint.d.ts +2 -0
  476. package/dist/lib/docs-lint.d.ts.map +1 -1
  477. package/dist/lib/docs-lint.js +45 -80
  478. package/dist/lib/docs-metadata-audit.d.ts +3 -0
  479. package/dist/lib/docs-metadata-audit.d.ts.map +1 -1
  480. package/dist/lib/docs-metadata-audit.js +13 -23
  481. package/dist/lib/docs-metadata-sync.d.ts +1 -0
  482. package/dist/lib/docs-metadata-sync.d.ts.map +1 -1
  483. package/dist/lib/docs-metadata-sync.js +28 -10
  484. package/dist/lib/docs-repository-view.d.ts +22 -0
  485. package/dist/lib/docs-repository-view.d.ts.map +1 -0
  486. package/dist/lib/docs-repository-view.js +185 -0
  487. package/dist/lib/http/client.d.ts +11 -5
  488. package/dist/lib/http/client.d.ts.map +1 -1
  489. package/dist/lib/http/client.js +22 -4
  490. package/dist/lib/http/index.d.ts +1 -1
  491. package/dist/lib/http/index.d.ts.map +1 -1
  492. package/dist/lib/http/index.js +1 -1
  493. package/dist/lib/indexer-exclusions.d.ts +27 -0
  494. package/dist/lib/indexer-exclusions.d.ts.map +1 -0
  495. package/dist/lib/indexer-exclusions.js +176 -0
  496. package/dist/lib/instructions/apply.d.ts.map +1 -1
  497. package/dist/lib/instructions/apply.js +1 -0
  498. package/dist/lib/instructions/templates.d.ts +2 -0
  499. package/dist/lib/instructions/templates.d.ts.map +1 -1
  500. package/dist/lib/instructions/templates.js +149 -4
  501. package/dist/lib/local-file-url.d.ts +9 -0
  502. package/dist/lib/local-file-url.d.ts.map +1 -0
  503. package/dist/lib/local-file-url.js +20 -0
  504. package/dist/lib/web-performance.d.ts +118 -0
  505. package/dist/lib/web-performance.d.ts.map +1 -0
  506. package/dist/lib/web-performance.js +192 -0
  507. package/package.json +34 -2
  508. package/schemas/config.schema.json +58 -0
  509. package/schemas/event-v3.schema.json +3073 -581
  510. package/src/commander.ts +462 -93
  511. package/src/commands/agents.ts +617 -355
  512. package/src/commands/backup.ts +18 -14
  513. package/src/commands/browse-session.ts +12 -0
  514. package/src/commands/browse.ts +31 -9
  515. package/src/commands/conversations.ts +279 -0
  516. package/src/commands/decision.ts +8 -2
  517. package/src/commands/deinit.ts +6 -0
  518. package/src/commands/docs.ts +25 -6
  519. package/src/commands/doctor.ts +75 -9
  520. package/src/commands/events.ts +21 -1
  521. package/src/commands/fetch.ts +7 -6
  522. package/src/commands/files.ts +143 -0
  523. package/src/commands/governor.ts +13 -12
  524. package/src/commands/inbox.ts +61 -0
  525. package/src/commands/init.ts +78 -16
  526. package/src/commands/ledger-v3.ts +421 -1
  527. package/src/commands/logs.ts +224 -0
  528. package/src/commands/messages.ts +61 -0
  529. package/src/commands/outline.ts +6 -2
  530. package/src/commands/presence.ts +7 -2
  531. package/src/commands/read.ts +6 -2
  532. package/src/commands/semantic.ts +244 -0
  533. package/src/commands/storage.ts +310 -0
  534. package/src/commands/tunnel.ts +66 -52
  535. package/src/commands/web.ts +92 -7
  536. package/src/commands/work.ts +3 -3
  537. package/src/commands/workflow.ts +13 -13
  538. package/src/core/agents/canonical-emit.ts +15 -0
  539. package/src/core/agents/claim-path.ts +23 -0
  540. package/src/core/agents/cli.ts +259 -53
  541. package/src/core/agents/coord-client.ts +92 -8
  542. package/src/core/agents/live-authority-v3.ts +342 -14
  543. package/src/core/agents/live-lifecycle-v3.ts +14 -4
  544. package/src/core/agents/live-observation-v3.ts +13 -3
  545. package/src/core/agents/render/prompt-context.ts +40 -16
  546. package/src/core/agents/rules/stop-hook.ts +129 -25
  547. package/src/core/agents/rules/verdict.ts +1 -0
  548. package/src/core/agents/session-events.ts +4 -0
  549. package/src/core/agents/session-finalization-state-v3.ts +1 -1
  550. package/src/core/agents/session-finalizer-v3.ts +4 -1
  551. package/src/core/agents/session-name-display.ts +9 -1
  552. package/src/core/agents/state/activity-log.ts +7 -2
  553. package/src/core/agents/state/heartbeat-reader.ts +69 -0
  554. package/src/core/agents/state/heartbeat-writer.ts +47 -84
  555. package/src/core/agents/state/live-coordination-view.ts +17 -81
  556. package/src/core/agents/state/live-coordination-writer.ts +141 -0
  557. package/src/core/agents/state/names.ts +190 -182
  558. package/src/core/agents/state/stale-sweep.ts +25 -5
  559. package/src/core/artifacts/constants.ts +4 -0
  560. package/src/core/artifacts/index.ts +113 -8
  561. package/src/core/config.ts +126 -5
  562. package/src/core/conversations/archive.ts +237 -0
  563. package/src/core/conversations/catalog.ts +79 -0
  564. package/src/core/conversations/context-pack.ts +72 -0
  565. package/src/core/conversations/contract.ts +178 -0
  566. package/src/core/conversations/evaluation.ts +30 -0
  567. package/src/core/conversations/index.ts +9 -0
  568. package/src/core/conversations/lifecycle.ts +63 -0
  569. package/src/core/conversations/normalize.ts +105 -0
  570. package/src/core/conversations/query.ts +318 -0
  571. package/src/core/conversations/search-index.ts +48 -0
  572. package/src/core/events/legacy-storage/canary.ts +177 -0
  573. package/src/core/events/legacy-storage/fence.ts +129 -0
  574. package/src/core/events/legacy-storage/index.ts +5 -0
  575. package/src/core/events/legacy-storage/inventory.ts +51 -0
  576. package/src/core/events/legacy-storage/manifest.ts +136 -0
  577. package/src/core/events/legacy-storage/reader.ts +178 -0
  578. package/src/core/events/v3/authority-outbox.ts +22 -1
  579. package/src/core/events/v3/base-contract.ts +56 -7
  580. package/src/core/events/v3/bootstrap.ts +195 -2
  581. package/src/core/events/v3/capabilities.ts +37 -3
  582. package/src/core/events/v3/control-witness.ts +339 -0
  583. package/src/core/events/v3/control-writer.ts +16 -0
  584. package/src/core/events/v3/control.ts +54 -18
  585. package/src/core/events/v3/coordination-transaction-recovery.ts +477 -0
  586. package/src/core/events/v3/coordination-view.ts +17 -1
  587. package/src/core/events/v3/generated.ts +1 -1
  588. package/src/core/events/v3/index.ts +26 -2
  589. package/src/core/events/v3/latency.ts +213 -2
  590. package/src/core/events/v3/live-route-observer.ts +80 -0
  591. package/src/core/events/v3/live-routing.ts +182 -45
  592. package/src/core/events/v3/producers/command-recorder.ts +10 -1
  593. package/src/core/events/v3/producers/coordination-recorder.ts +112 -15
  594. package/src/core/events/v3/producers/diagnostic-summaries.ts +593 -0
  595. package/src/core/events/v3/producers/hook-base.ts +116 -2
  596. package/src/core/events/v3/producers/intake.ts +48 -2
  597. package/src/core/events/v3/producers/producer-state-observer.ts +52 -0
  598. package/src/core/events/v3/producers/recorder.ts +1403 -30
  599. package/src/core/events/v3/reader.ts +243 -2
  600. package/src/core/events/v3/rotation-config.ts +98 -0
  601. package/src/core/events/v3/runtime-build.ts +41 -0
  602. package/src/core/events/v3/runtime-identity.ts +16 -0
  603. package/src/core/events/v3/runtime-telemetry-capabilities.ts +143 -0
  604. package/src/core/events/v3/support-storage/classify.ts +209 -0
  605. package/src/core/events/v3/support-storage/eligibility.ts +58 -0
  606. package/src/core/events/v3/support-storage/index.ts +9 -0
  607. package/src/core/events/v3/support-storage/inventory.ts +135 -0
  608. package/src/core/events/v3/support-storage/logical-authority.ts +117 -0
  609. package/src/core/events/v3/support-storage/maintenance.ts +501 -0
  610. package/src/core/events/v3/support-storage/pack-contract.ts +337 -0
  611. package/src/core/events/v3/support-storage/pack-reader.ts +346 -0
  612. package/src/core/events/v3/support-storage/pack-writer.ts +352 -0
  613. package/src/core/events/v3/support-storage/recovery.ts +43 -0
  614. package/src/core/events/v3/turn-telemetry.ts +66 -5
  615. package/src/core/events/v3/writer.ts +168 -16
  616. package/src/core/governor/plan-read.ts +5 -18
  617. package/src/core/governor/planning.ts +5 -8
  618. package/src/core/governor/service-read.ts +320 -2
  619. package/src/core/governor/service.ts +49 -22
  620. package/src/core/guard/evidence-v3.ts +1 -0
  621. package/src/core/hooks/adapter/events.ts +1 -0
  622. package/src/core/hooks/adapter/output.ts +12 -5
  623. package/src/core/hooks/adapter/parse.ts +16 -0
  624. package/src/core/hooks/adapter/runtime-telemetry.ts +1200 -0
  625. package/src/core/hooks/cli.ts +342 -64
  626. package/src/core/hooks/effects/image-capture.ts +4 -1
  627. package/src/core/hooks/remediation-cap.ts +83 -0
  628. package/src/core/hooks/resolve/coord-root.ts +91 -11
  629. package/src/core/hooks/resolve/owner.ts +4 -0
  630. package/src/core/hooks/resolve/transcript.ts +55 -11
  631. package/src/core/inbox/contract.ts +81 -0
  632. package/src/core/inbox/index.ts +4 -0
  633. package/src/core/inbox/lifecycle.ts +104 -0
  634. package/src/core/inbox/service.ts +305 -0
  635. package/src/core/inbox/watcher.ts +36 -0
  636. package/src/core/presence/codec-digest.ts +15 -9
  637. package/src/core/presence/relay-client.ts +55 -7
  638. package/src/core/semantic/adapters.ts +452 -0
  639. package/src/core/semantic/contract.ts +430 -0
  640. package/src/core/semantic/evidence.ts +336 -0
  641. package/src/core/semantic/index.ts +201 -0
  642. package/src/core/semantic/once.ts +496 -0
  643. package/src/core/semantic/prompt.ts +96 -0
  644. package/src/core/semantic/review.ts +803 -0
  645. package/src/core/semantic/routes.ts +30 -0
  646. package/src/core/semantic/scheduler.ts +151 -0
  647. package/src/core/semantic/service-status.ts +212 -0
  648. package/src/core/semantic/service.ts +681 -0
  649. package/src/core/semantic/soak.ts +638 -0
  650. package/src/core/semantic/storage.ts +300 -0
  651. package/src/core/semantic/usage.ts +272 -0
  652. package/src/core/semantic/validate.ts +243 -0
  653. package/src/core/storage/buffer.ts +124 -0
  654. package/src/core/storage/builtins.ts +916 -0
  655. package/src/core/storage/catalog.ts +467 -0
  656. package/src/core/storage/config.ts +423 -0
  657. package/src/core/storage/contract.ts +342 -0
  658. package/src/core/storage/durable-history.ts +738 -0
  659. package/src/core/storage/health.ts +76 -0
  660. package/src/core/storage/index.ts +15 -0
  661. package/src/core/storage/inventory.ts +859 -0
  662. package/src/core/storage/jsonl.ts +213 -0
  663. package/src/core/storage/log-retention.ts +555 -0
  664. package/src/core/storage/logger.ts +546 -0
  665. package/src/core/storage/maintenance-providers.ts +200 -0
  666. package/src/core/storage/maintenance.ts +929 -0
  667. package/src/core/storage/metrics.ts +199 -0
  668. package/src/core/storage/policy.ts +141 -0
  669. package/src/core/storage/process-log.ts +203 -0
  670. package/src/core/storage/query.ts +360 -0
  671. package/src/core/storage/receipts.ts +162 -0
  672. package/src/core/storage/segments.ts +721 -0
  673. package/src/core/storage/sink-graph.ts +343 -0
  674. package/src/core/storage/storm-control.ts +91 -0
  675. package/src/core/work/state.ts +12 -21
  676. package/src/core/workflow/live-session-v3.ts +2 -4
  677. package/src/index.ts +2 -0
  678. package/src/lazy-commands.ts +294 -0
  679. package/src/lib/browser/client.ts +21 -0
  680. package/src/lib/browser/index.ts +4 -0
  681. package/src/lib/browser/standalone-html.ts +312 -0
  682. package/src/lib/docs-lint.ts +58 -77
  683. package/src/lib/docs-metadata-audit.ts +26 -21
  684. package/src/lib/docs-metadata-sync.ts +32 -9
  685. package/src/lib/docs-repository-view.ts +220 -0
  686. package/src/lib/http/client.ts +44 -8
  687. package/src/lib/http/index.ts +6 -1
  688. package/src/lib/indexer-exclusions.ts +173 -0
  689. package/src/lib/instructions/apply.ts +1 -0
  690. package/src/lib/instructions/templates.ts +154 -4
  691. package/src/lib/local-file-url.ts +31 -0
  692. package/src/lib/web-performance.ts +335 -0
@@ -1,10 +1,13 @@
1
- export const EVENT_V3_LATENCY_PROJECTION_VERSION = "event-v3-latency-v1";
1
+ import { canonicalJsonV3, sha256V3 } from "./canonical.js";
2
+ import { ADAPTER_WAIT_KINDS_V3 } from "./capabilities.js";
3
+ export const EVENT_V3_LATENCY_PROJECTION_VERSION = "event-v3-latency-v3";
2
4
  export function projectLatencyV3(read) {
3
5
  if (!read.complete)
4
6
  throw new Error("latency projection requires a complete V3 ledger read");
5
7
  const events = read.events.map(({ event }) => event);
6
8
  const diagnostics = [];
7
9
  const terminalByTurn = new Map();
10
+ const telemetryByGeneration = latestTelemetryByGeneration(events);
8
11
  for (const event of events) {
9
12
  if (event.event_type !== "turn.completed")
10
13
  continue;
@@ -18,13 +21,13 @@ export function projectLatencyV3(read) {
18
21
  const turns = [...terminalByTurn.values()].map((terminal) => {
19
22
  const key = turnKey(terminal);
20
23
  const turnEvents = events.filter((event) => turnKey(event) === key);
21
- return projectTurn(terminal, turnEvents, diagnostics);
24
+ return projectTurn(terminal, turnEvents, diagnostics, telemetryByGeneration.get(terminal.scope.generation_id ?? "") ?? null);
22
25
  });
23
26
  turns.sort((left, right) => left.generation_id.localeCompare(right.generation_id) ||
24
27
  left.turn_id.localeCompare(right.turn_id));
25
28
  return { projection_version: EVENT_V3_LATENCY_PROJECTION_VERSION, turns, diagnostics };
26
29
  }
27
- function projectTurn(terminal, events, diagnostics) {
30
+ function projectTurn(terminal, events, diagnostics, telemetryCapabilities) {
28
31
  const span = record(terminal.payload.span);
29
32
  const wall = metricFromObservation(span.duration_ms, "turn_duration_unknown");
30
33
  const wallInterval = intervalFromSpan(terminal);
@@ -60,6 +63,9 @@ function projectTurn(terminal, events, diagnostics) {
60
63
  (expectedWaitCount !== undefined && expectedWaitCount !== endedWaitIds.size)) {
61
64
  waits.reasons.push("wait_terminal_count_mismatch");
62
65
  }
66
+ const waitCoverageComplete = expectedWaitCount !== undefined &&
67
+ expectedWaitCount === endedWaitIds.size &&
68
+ !waitStartEvents.some(({ payload }) => !endedWaitIds.has(string(record(payload).wait_id)));
63
69
  const tool = metricFromIntervals(tools);
64
70
  const command = metricFromIntervals(commands);
65
71
  const wait = metricFromIntervals(waits);
@@ -74,6 +80,7 @@ function projectTurn(terminal, events, diagnostics) {
74
80
  reasons: [...tools.reasons, ...commands.reasons, ...waits.reasons],
75
81
  });
76
82
  const inference = metricFromNestedObservation(terminal.payload.inference, "api_time_ms", "inference_timing_unknown");
83
+ const responseLatency = projectResponseLatency(terminal, events, wall, tools, expectedToolCount);
77
84
  const harness = metricFromNestedObservation(terminal.payload.harness, "hook_time_ms", "harness_timing_unknown");
78
85
  const slowestHook = slowestHookFromObservation(terminal.payload.harness);
79
86
  const residual = residualMetric(wall, occupied, inference, harness);
@@ -107,6 +114,7 @@ function projectTurn(terminal, events, diagnostics) {
107
114
  wait_ms: wait,
108
115
  occupied_ms: occupied,
109
116
  inference_ms: inference,
117
+ response_latency: responseLatency,
110
118
  harness_ms: harness,
111
119
  slowest_hook: slowestHook.name,
112
120
  slowest_hook_ms: slowestHook.duration_ms,
@@ -114,6 +122,11 @@ function projectTurn(terminal, events, diagnostics) {
114
122
  over_attributed_ms: overAttributed,
115
123
  context_percent: context.percent,
116
124
  context_coverage: context.coverage,
125
+ telemetry_capabilities: telemetryCapabilities,
126
+ telemetry_evidence_key: telemetryCapabilities
127
+ ? runtimeTelemetryEvidenceKeyV3(telemetryCapabilities)
128
+ : null,
129
+ wait_coverage_by_kind: projectWaitCoverageByKind(waitStartEvents, waitEvents, wallInterval, waitCoverageComplete, waitCount, diagnostics),
117
130
  span_counts: {
118
131
  tool: toolEvents.length,
119
132
  command: commandEvents.length,
@@ -122,6 +135,117 @@ function projectTurn(terminal, events, diagnostics) {
122
135
  tool_breakdown: toolBreakdown,
123
136
  };
124
137
  }
138
+ /** Reports may compare a telemetry-backed channel only inside one evidence key. */
139
+ export function runtimeTelemetryEvidenceKeyV3(telemetry) {
140
+ return sha256V3(canonicalJsonV3(telemetry));
141
+ }
142
+ function latestTelemetryByGeneration(events) {
143
+ const result = new Map();
144
+ for (const event of events) {
145
+ if (event.event_type !== "session.started" &&
146
+ event.event_type !== "session.attestation_changed") {
147
+ continue;
148
+ }
149
+ const attestation = record(event.payload.runtime_attestation);
150
+ const telemetry = record(attestation.telemetry);
151
+ if (Object.keys(telemetry).length === 0)
152
+ continue;
153
+ result.set(event.scope.generation_id ?? "", telemetry);
154
+ }
155
+ return result;
156
+ }
157
+ function projectResponseLatency(terminal, events, wall, tools, expectedToolCount) {
158
+ const turnStart = Date.parse(string(record(terminal.payload.span).opened_at));
159
+ const turnEnd = Number.isFinite(turnStart) && wall.state === "observed" ? turnStart + wall.value_ms : undefined;
160
+ const requests = events
161
+ .filter(({ event_type }) => event_type === "tool.requested")
162
+ .map(({ time }) => Date.parse(string(time.observed_at)))
163
+ .filter(Number.isFinite)
164
+ .sort((left, right) => left - right);
165
+ const firstRequest = requests[0];
166
+ const firstTool = Number.isFinite(turnStart) && firstRequest !== undefined
167
+ ? observedLatency(firstRequest - turnStart)
168
+ : unknownLatency(expectedToolCount === 0 ? "no_tool_request" : "tool_request_unobserved");
169
+ const noToolTerminal = expectedToolCount === 0
170
+ ? wall
171
+ : unknownLatency(expectedToolCount === undefined ? "tool_channel_unattested" : "turn_contains_tools");
172
+ const agentAction = firstRequest !== undefined
173
+ ? firstTool
174
+ : expectedToolCount === 0
175
+ ? noToolTerminal
176
+ : unknownLatency(expectedToolCount === undefined ? "tool_channel_unattested" : "tool_request_unobserved");
177
+ let postTool = unknownLatency(expectedToolCount === 0
178
+ ? "no_tool_completion"
179
+ : expectedToolCount === undefined
180
+ ? "tool_channel_unattested"
181
+ : "final_tool_completion_unknown");
182
+ if (turnEnd !== undefined &&
183
+ expectedToolCount !== undefined &&
184
+ expectedToolCount > 0 &&
185
+ tools.reasons.length === 0 &&
186
+ tools.intervals.length === expectedToolCount) {
187
+ postTool = observedLatency(turnEnd - Math.max(...tools.intervals.map(({ end }) => end)));
188
+ }
189
+ return {
190
+ agent_action_ms: agentAction,
191
+ first_tool_request_ms: firstTool,
192
+ post_tool_response_ms: postTool,
193
+ no_tool_terminal_response_ms: noToolTerminal,
194
+ method: "canonical_event_timestamps_v1",
195
+ };
196
+ }
197
+ function projectWaitCoverageByKind(starts, ends, wall, complete, waitCount, diagnostics) {
198
+ const endedIds = new Set(ends.map(({ payload }) => string(record(payload).wait_id)));
199
+ const unsupported = waitCount.state === "unsupported";
200
+ return Object.fromEntries(ADAPTER_WAIT_KINDS_V3.map((kind) => {
201
+ const kindStarts = starts.filter(({ payload }) => waitKind(payload) === kind);
202
+ const kindEnds = ends.filter(({ payload }) => waitKind(payload) === kind);
203
+ const openCount = kindStarts.filter(({ payload }) => !endedIds.has(string(record(payload).wait_id))).length;
204
+ const set = intervalSet(kindEnds, wall, diagnostics);
205
+ if (!complete)
206
+ set.reasons.push("wait_kind_completeness_unattested");
207
+ const completeness = complete
208
+ ? "complete"
209
+ : unsupported
210
+ ? kindStarts.length > 0 || kindEnds.length > 0
211
+ ? "lower_bound"
212
+ : "unsupported"
213
+ : kindStarts.length > 0 || kindEnds.length > 0
214
+ ? "lower_bound"
215
+ : "unknown";
216
+ const reason = complete
217
+ ? null
218
+ : unsupported
219
+ ? "turn_wait_count_unsupported"
220
+ : "turn_wait_count_unattested";
221
+ return [
222
+ kind,
223
+ {
224
+ kind,
225
+ started_count: kindStarts.length,
226
+ ended_count: kindEnds.length,
227
+ open_count: openCount,
228
+ duration_ms: metricFromIntervals(set),
229
+ completeness,
230
+ reason,
231
+ },
232
+ ];
233
+ }));
234
+ }
235
+ function waitKind(payload) {
236
+ const value = string(record(payload).kind);
237
+ return ADAPTER_WAIT_KINDS_V3.includes(value)
238
+ ? value
239
+ : "unknown";
240
+ }
241
+ function observedLatency(value) {
242
+ return Number.isFinite(value) && value >= 0
243
+ ? { state: "observed", value_ms: Math.floor(value) }
244
+ : unknownLatency("event_time_order_invalid");
245
+ }
246
+ function unknownLatency(reason) {
247
+ return { state: "unknown", known_ms: 0, reasons: [reason] };
248
+ }
125
249
  function groupByTool(events) {
126
250
  const groups = new Map();
127
251
  for (const event of events) {
@@ -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,28 @@
1
1
  import type { Adapter } from "../../adapter.js";
2
2
  import type { ParsedPayload } from "../../hooks/adapter/parse.js";
3
- import { type EventV3WriteMode } from "./control.js";
3
+ import type { EventV3 } from "./contract.js";
4
+ import { type LiveEventLedgerRouteV3 } from "./live-route-observer.js";
4
5
  import type { HookSignalV3 } from "./producers/hook.js";
5
6
  import type { TurnRitualEvidenceV3 } from "./producers/hook-base.js";
6
- 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";
7
10
  export declare const LIVE_HOOK_V3_PRODUCER_ID: "prd_agent-hook";
8
11
  export declare const LIVE_COMMAND_V3_PRODUCER_ID: "prd_session-tee";
9
- export type LiveEventLedgerRouteV3 = {
10
- state: "v3";
11
- mode: EventV3WriteMode;
12
- build_id: `build_${string}`;
13
- } | {
14
- state: "blocked";
15
- reason: string;
16
- };
17
12
  /**
18
13
  * Resolve the V3-only ledger route. A root without an initialized V3 control
19
- * 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.
20
15
  * Manifest-first crashes are repaired from the immutable packet and every
21
16
  * other invalid state closes the writer gate.
22
17
  */
23
18
  export declare function resolveLiveEventLedgerRouteV3(coordRoot: string): LiveEventLedgerRouteV3;
24
- export declare function liveEventV3BuildId(harneryCommit: string): `build_${string}`;
25
- export declare function liveInstanceIdV3(instanceId: string): `inst_${string}`;
19
+ export declare function hookSignalV3(eventName: string): HookSignalV3 | undefined;
26
20
  /**
27
- * The adapter-native id a canonical `inst_*` id carries, for display and for
28
- * joins against native-keyed records. Only the direct prefix form round-trips:
29
- * a hashed id has no recoverable native form and is returned unchanged, so
30
- * never treat this as a guaranteed inverse of `liveInstanceIdV3`.
21
+ * Tool lifecycle hooks may stop after publishing their event to the durable
22
+ * ready WAL. The next non-tool hook drains the causal batch into the active
23
+ * ledger, avoiding one global append-lease cycle for every tool boundary.
31
24
  */
32
- export declare function nativeInstanceIdV3(instanceId: string): string;
33
- export declare function hookSignalV3(eventName: string): HookSignalV3 | undefined;
25
+ export declare function liveHookSignalDefersDrainV3(eventName: string, override?: string): boolean;
34
26
  export declare function recordLiveHookSignalV3(input: {
35
27
  coordRoot: string;
36
28
  route: Extract<LiveEventLedgerRouteV3, {
@@ -53,5 +45,35 @@ export declare function recordLiveHookSignalV3(input: {
53
45
  }): RecordHookSignalV3Result | {
54
46
  state: "ignored";
55
47
  };
56
- export declare function livePlatformV3(): "linux" | "windows" | "macos" | "unknown";
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;
56
+ /**
57
+ * Open the child generation named by a native SubagentStart event.
58
+ *
59
+ * The parent producer owns the delegation span and mints its child generation
60
+ * id. This second crash-safe session-start gives that exact generation its own
61
+ * producer authority, so later child tool hooks can resolve away from the
62
+ * parent session and the disposable heartbeat projection has a real source.
63
+ */
64
+ export declare function recordLiveDelegatedChildSessionV3(input: {
65
+ coordRoot: string;
66
+ route: Extract<LiveEventLedgerRouteV3, {
67
+ state: "v3";
68
+ }>;
69
+ parentEvent: Extract<EventV3, {
70
+ event_type: "agent.started";
71
+ }>;
72
+ payload: ParsedPayload;
73
+ adapter: Adapter;
74
+ bridge?: "codex-wsl";
75
+ monotonic_ns?: string;
76
+ }): RecordHookSignalV3Result | {
77
+ state: "ignored";
78
+ };
57
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":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EACL,KAAK,gBAAgB,EAGtB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,KAAK,wBAAwB,EAAsB,MAAM,yBAAyB,CAAC;AAE5F,eAAO,MAAM,wBAAwB,EAAG,gBAAyB,CAAC;AAClE,eAAO,MAAM,2BAA2B,EAAG,iBAA0B,CAAC;AAEtE,MAAM,MAAM,sBAAsB,GAC9B;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,gBAAgB,CAAC;IAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GACpE;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzC;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,MAAM,GAAG,sBAAsB,CAYvF;AAED,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAI3E;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,MAAM,EAAE,CAIrE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAuBxE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC,sBAAsB,EAAE;QAAE,KAAK,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,MAAM,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,MAAM,EAAE,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GAAG,wBAAwB,GAAG;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,CAwBlD;AAED,wBAAgB,cAAc,IAAI,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAK1E"}
1
+ {"version":3,"file":"live-routing.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/live-routing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,OAAO,EACL,KAAK,sBAAsB,EAI5B,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EACL,KAAK,sCAAsC,EAC3C,KAAK,wBAAwB,EAG9B,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,KAAK,sBAAsB,EAC3B,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE3E,eAAO,MAAM,wBAAwB,EAAG,gBAAyB,CAAC;AAClE,eAAO,MAAM,2BAA2B,EAAG,iBAA0B,CAAC;AAEtE;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,MAAM,GAAG,sBAAsB,CA8BvF;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAuBxE;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAOzF;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC,sBAAsB,EAAE;QAAE,KAAK,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,MAAM,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,MAAM,EAAE,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GAAG,wBAAwB,GAAG;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,CAwClD;AAED,wBAAgB,oCAAoC,CAAC,KAAK,EAAE;IAC1D,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC,sBAAsB,EAAE;QAAE,KAAK,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IACxD,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,GAAG,sCAAsC,CAUzC;AAED;;;;;;;GAOG;AACH,wBAAgB,iCAAiC,CAAC,KAAK,EAAE;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC,sBAAsB,EAAE;QAAE,KAAK,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IACxD,WAAW,EAAE,OAAO,CAAC,OAAO,EAAE;QAAE,UAAU,EAAE,eAAe,CAAA;KAAE,CAAC,CAAC;IAC/D,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,wBAAwB,GAAG;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,CAsElD"}
@@ -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) {
@@ -70,15 +72,43 @@ export function hookSignalV3(eventName) {
70
72
  return undefined;
71
73
  }
72
74
  }
75
+ /**
76
+ * Tool lifecycle hooks may stop after publishing their event to the durable
77
+ * ready WAL. The next non-tool hook drains the causal batch into the active
78
+ * ledger, avoiding one global append-lease cycle for every tool boundary.
79
+ */
80
+ export function liveHookSignalDefersDrainV3(eventName, override) {
81
+ if (override === "1")
82
+ return true;
83
+ if (override === "0")
84
+ return false;
85
+ const signal = hookSignalV3(eventName);
86
+ return (signal === "pre-tool-use" || signal === "post-tool-use" || signal === "post-tool-use-failure");
87
+ }
73
88
  export function recordLiveHookSignalV3(input) {
74
89
  const signal = hookSignalV3(input.eventName);
75
90
  if (!signal)
76
91
  return { state: "ignored" };
92
+ const nativeChild = input.payload?.subagent_id ?? input.payload?.agent_id;
93
+ const childOwnsSignal = signal !== "sub-agent-start" &&
94
+ signal !== "sub-agent-stop" &&
95
+ nativeChild !== undefined &&
96
+ liveInstanceIdV3(input.instanceId) === liveInstanceIdV3(nativeChild);
97
+ const payload = input.payload
98
+ ? childOwnsSignal
99
+ ? {
100
+ ...input.payload,
101
+ session_id: nativeChild,
102
+ conversation_id: undefined,
103
+ parent_session_id: input.payload.session_id ?? input.payload.conversation_id,
104
+ }
105
+ : input.payload
106
+ : { raw: {} };
77
107
  return recordHookSignalV3({
78
108
  coordRoot: input.coordRoot,
79
109
  mode: input.route.mode,
80
110
  signal,
81
- payload: input.payload ?? { raw: {} },
111
+ payload,
82
112
  adapter: input.adapter,
83
113
  instance_id: liveInstanceIdV3(input.instanceId),
84
114
  run_id: input.run_id,
@@ -96,12 +126,94 @@ export function recordLiveHookSignalV3(input) {
96
126
  ...(input.defer_drain ? { writerOptions: { deferDrain: true } } : {}),
97
127
  });
98
128
  }
99
- export function livePlatformV3() {
100
- if (process.platform === "linux")
101
- return "linux";
102
- if (process.platform === "win32")
103
- return "windows";
104
- if (process.platform === "darwin")
105
- return "macos";
106
- return "unknown";
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
+ }
140
+ /**
141
+ * Open the child generation named by a native SubagentStart event.
142
+ *
143
+ * The parent producer owns the delegation span and mints its child generation
144
+ * id. This second crash-safe session-start gives that exact generation its own
145
+ * producer authority, so later child tool hooks can resolve away from the
146
+ * parent session and the disposable heartbeat projection has a real source.
147
+ */
148
+ export function recordLiveDelegatedChildSessionV3(input) {
149
+ const nativeChild = input.payload.subagent_id ?? input.payload.agent_id;
150
+ if (!nativeChild)
151
+ return { state: "ignored" };
152
+ const parentGeneration = input.parentEvent.links
153
+ .parent_generation_id;
154
+ if (!parentGeneration)
155
+ return { state: "ignored" };
156
+ const nativeParent = input.payload.session_id ?? input.payload.conversation_id;
157
+ const childPayload = {
158
+ session_id: nativeChild,
159
+ agent_id: nativeChild,
160
+ parent_session_id: nativeParent,
161
+ source: "startup",
162
+ model: input.payload.model,
163
+ cwd: input.payload.cwd,
164
+ raw: {
165
+ session_id: nativeChild,
166
+ agent_id: nativeChild,
167
+ ...(nativeParent ? { parent_session_id: nativeParent } : {}),
168
+ ...(input.payload.raw.agent_type ? { agent_type: input.payload.raw.agent_type } : {}),
169
+ },
170
+ };
171
+ const started = recordHookSignalV3({
172
+ coordRoot: input.coordRoot,
173
+ mode: input.route.mode,
174
+ signal: "session-start",
175
+ payload: childPayload,
176
+ adapter: input.adapter,
177
+ instance_id: liveInstanceIdV3(nativeChild),
178
+ producer_id: LIVE_HOOK_V3_PRODUCER_ID,
179
+ build_id: input.route.build_id,
180
+ platform: livePlatformV3(),
181
+ ...(input.bridge ? { bridge: input.bridge } : {}),
182
+ monotonic_ns: input.monotonic_ns,
183
+ hook_name: "sub-agent-start-child-session",
184
+ delegated_child: {
185
+ generation_id: input.parentEvent.payload.child_generation_id,
186
+ parent_generation_id: parentGeneration,
187
+ delegation_id: input.parentEvent.payload.delegation_id,
188
+ caused_by_event_id: input.parentEvent.event_id,
189
+ },
190
+ });
191
+ if (started.state !== "recorded" && started.state !== "already_started")
192
+ return started;
193
+ const childStartEventId = (started.state === "recorded" ? started.event.event_id : started.event_id);
194
+ recordHookSignalV3({
195
+ coordRoot: input.coordRoot,
196
+ mode: input.route.mode,
197
+ signal: "user-prompt-submit",
198
+ payload: {
199
+ ...childPayload,
200
+ turn_id: `delegated:${nativeChild}`,
201
+ raw: { ...childPayload.raw, turn_id: `delegated:${nativeChild}` },
202
+ },
203
+ adapter: input.adapter,
204
+ instance_id: liveInstanceIdV3(nativeChild),
205
+ producer_id: LIVE_HOOK_V3_PRODUCER_ID,
206
+ build_id: input.route.build_id,
207
+ platform: livePlatformV3(),
208
+ ...(input.bridge ? { bridge: input.bridge } : {}),
209
+ monotonic_ns: input.monotonic_ns,
210
+ hook_name: "sub-agent-start-child-turn",
211
+ delegated_child: {
212
+ generation_id: input.parentEvent.payload.child_generation_id,
213
+ parent_generation_id: parentGeneration,
214
+ delegation_id: input.parentEvent.payload.delegation_id,
215
+ caused_by_event_id: childStartEventId,
216
+ },
217
+ });
218
+ return started;
107
219
  }
@@ -1 +1 @@
1
- {"version":3,"file":"command-recorder.d.ts","sourceRoot":"","sources":["../../../../../src/core/events/v3/producers/command-recorder.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAOnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,KAAK,gBAAgB,EAA2B,MAAM,eAAe,CAAC;AAM/E,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EAExB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,eAAe,EAErB,MAAM,cAAc,CAAC;AA0CtB,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,eAAe,CAAC;IACxB,WAAW,EAAE,oBAAoB,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,QAAQ,MAAM,EAAE,CAAC;IAC9B,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,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACrC;AAED,MAAM,MAAM,2BAA2B,GACnC;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,wBAAwB,CAAA;CAAE,GACnC;IAAE,KAAK,EAAE,wBAAwB,CAAA;CAAE,GACnC;IAAE,KAAK,EAAE,kBAAkB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,kBAAkB,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC;AAE9F;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,0BAA0B,GAChC,2BAA2B,CAgI7B;AAED,MAAM,WAAW,iCAAiC;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,gBAAgB,CAAC;IACvB,aAAa,EAAE,OAAO,MAAM,EAAE,CAAC;IAC/B,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACrC;AAED,MAAM,WAAW,kCAAkC;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,iCAAiC,GACvC,kCAAkC,CA8HpC"}
1
+ {"version":3,"file":"command-recorder.d.ts","sourceRoot":"","sources":["../../../../../src/core/events/v3/producers/command-recorder.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAOnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,KAAK,gBAAgB,EAA2B,MAAM,eAAe,CAAC;AAM/E,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EAExB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,eAAe,EAErB,MAAM,cAAc,CAAC;AA0CtB,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,eAAe,CAAC;IACxB,WAAW,EAAE,oBAAoB,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,QAAQ,MAAM,EAAE,CAAC;IAC9B,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,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACrC;AAED,MAAM,MAAM,2BAA2B,GACnC;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,wBAAwB,CAAA;CAAE,GACnC;IAAE,KAAK,EAAE,wBAAwB,CAAA;CAAE,GACnC;IAAE,KAAK,EAAE,kBAAkB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,kBAAkB,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC;AAE9F;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,0BAA0B,GAChC,2BAA2B,CAwI7B;AAED,MAAM,WAAW,iCAAiC;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,gBAAgB,CAAC;IACvB,aAAa,EAAE,OAAO,MAAM,EAAE,CAAC;IAC/B,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACrC;AAED,MAAM,WAAW,kCAAkC;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,iCAAiC,GACvC,kCAAkC,CA8HpC"}
@@ -51,6 +51,14 @@ export function recordCommandSignalV3(input) {
51
51
  if (state && !matchesHookState(state, hook, input, epochId)) {
52
52
  throw new Error("V3 command producer state does not match the joined hook generation");
53
53
  }
54
+ if (state && state.attestation_id !== hook.attestation_id) {
55
+ // A mid-generation re-attestation (session.attestation_changed) moves
56
+ // the hook's attestation id without opening a new generation or turn. A
57
+ // command span that straddles the change keeps its span, sequence, and
58
+ // dedupe state; later events ride the live attestation, the same
59
+ // in-place adoption the hook producer performs.
60
+ state.attestation_id = hook.attestation_id;
61
+ }
54
62
  let recovered = false;
55
63
  if (state?.pending) {
56
64
  const pending = state.pending;
@@ -309,7 +317,8 @@ function matchesHookState(state, hook, input, epochId) {
309
317
  state.session_id === hook.session_id &&
310
318
  state.generation_id === hook.generation_id &&
311
319
  state.turn_id === hook.current_turn_id &&
312
- state.attestation_id === hook.attestation_id &&
320
+ // attestation_id is deliberately absent: a re-attestation within the
321
+ // generation is a continuation, adopted by the caller, not a mismatch.
313
322
  state.privacy_epoch_id === epochId);
314
323
  }
315
324
  function observationSourceId(input, context) {