harnery 0.35.0 → 0.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (616) hide show
  1. package/dist/commander.d.ts +30 -5
  2. package/dist/commander.d.ts.map +1 -1
  3. package/dist/commander.js +124 -96
  4. package/dist/commands/agents.d.ts +23 -3
  5. package/dist/commands/agents.d.ts.map +1 -1
  6. package/dist/commands/agents.js +379 -198
  7. package/dist/commands/backup.d.ts.map +1 -1
  8. package/dist/commands/backup.js +10 -10
  9. package/dist/commands/browse-session.d.ts.map +1 -1
  10. package/dist/commands/browse-session.js +12 -0
  11. package/dist/commands/browse.d.ts +1 -1
  12. package/dist/commands/browse.d.ts.map +1 -1
  13. package/dist/commands/browse.js +5 -4
  14. package/dist/commands/conversations.d.ts +10 -0
  15. package/dist/commands/conversations.d.ts.map +1 -0
  16. package/dist/commands/conversations.js +201 -0
  17. package/dist/commands/deinit.d.ts.map +1 -1
  18. package/dist/commands/deinit.js +5 -0
  19. package/dist/commands/docs.d.ts.map +1 -1
  20. package/dist/commands/docs.js +13 -2
  21. package/dist/commands/doctor.d.ts +5 -0
  22. package/dist/commands/doctor.d.ts.map +1 -1
  23. package/dist/commands/doctor.js +51 -7
  24. package/dist/commands/fetch.js +6 -5
  25. package/dist/commands/files.d.ts +22 -0
  26. package/dist/commands/files.d.ts.map +1 -0
  27. package/dist/commands/files.js +113 -0
  28. package/dist/commands/governor.js +14 -12
  29. package/dist/commands/inbox.d.ts +5 -0
  30. package/dist/commands/inbox.d.ts.map +1 -0
  31. package/dist/commands/inbox.js +57 -0
  32. package/dist/commands/init.d.ts +4 -5
  33. package/dist/commands/init.d.ts.map +1 -1
  34. package/dist/commands/init.js +63 -13
  35. package/dist/commands/ledger-v3.d.ts.map +1 -1
  36. package/dist/commands/ledger-v3.js +347 -1
  37. package/dist/commands/logs.d.ts +4 -0
  38. package/dist/commands/logs.d.ts.map +1 -0
  39. package/dist/commands/logs.js +169 -0
  40. package/dist/commands/messages.d.ts +5 -0
  41. package/dist/commands/messages.d.ts.map +1 -0
  42. package/dist/commands/messages.js +45 -0
  43. package/dist/commands/outline.d.ts +1 -1
  44. package/dist/commands/outline.d.ts.map +1 -1
  45. package/dist/commands/outline.js +2 -2
  46. package/dist/commands/read.d.ts +1 -1
  47. package/dist/commands/read.d.ts.map +1 -1
  48. package/dist/commands/read.js +2 -2
  49. package/dist/commands/semantic.d.ts.map +1 -1
  50. package/dist/commands/semantic.js +54 -2
  51. package/dist/commands/storage.d.ts +4 -0
  52. package/dist/commands/storage.d.ts.map +1 -0
  53. package/dist/commands/storage.js +238 -0
  54. package/dist/commands/tunnel.d.ts +5 -1
  55. package/dist/commands/tunnel.d.ts.map +1 -1
  56. package/dist/commands/tunnel.js +44 -31
  57. package/dist/commands/web.d.ts +3 -0
  58. package/dist/commands/web.d.ts.map +1 -1
  59. package/dist/commands/web.js +67 -7
  60. package/dist/commands/work.js +3 -3
  61. package/dist/commands/workflow.js +13 -13
  62. package/dist/core/adapters/profiles.d.ts +1 -1
  63. package/dist/core/agents/cli.js +209 -39
  64. package/dist/core/agents/live-authority-v3.d.ts +47 -1
  65. package/dist/core/agents/live-authority-v3.d.ts.map +1 -1
  66. package/dist/core/agents/live-authority-v3.js +244 -10
  67. package/dist/core/agents/live-lifecycle-v3.js +6 -1
  68. package/dist/core/agents/live-observation-v3.d.ts.map +1 -1
  69. package/dist/core/agents/live-observation-v3.js +6 -1
  70. package/dist/core/agents/render/prompt-context.d.ts +9 -3
  71. package/dist/core/agents/render/prompt-context.d.ts.map +1 -1
  72. package/dist/core/agents/render/prompt-context.js +24 -7
  73. package/dist/core/agents/rules/stop-hook.d.ts +2 -0
  74. package/dist/core/agents/rules/stop-hook.d.ts.map +1 -1
  75. package/dist/core/agents/rules/stop-hook.js +94 -13
  76. package/dist/core/agents/rules/verdict.d.ts +1 -0
  77. package/dist/core/agents/rules/verdict.d.ts.map +1 -1
  78. package/dist/core/agents/session-events.d.ts.map +1 -1
  79. package/dist/core/agents/session-events.js +4 -0
  80. package/dist/core/agents/session-finalization-state-v3.js +1 -1
  81. package/dist/core/agents/session-finalizer-v3.js +5 -1
  82. package/dist/core/agents/state/activity-log.d.ts +3 -0
  83. package/dist/core/agents/state/activity-log.d.ts.map +1 -1
  84. package/dist/core/agents/state/activity-log.js +6 -3
  85. package/dist/core/agents/state/heartbeat-writer.d.ts +6 -0
  86. package/dist/core/agents/state/heartbeat-writer.d.ts.map +1 -1
  87. package/dist/core/agents/state/heartbeat-writer.js +18 -0
  88. package/dist/core/agents/state/live-coordination-view.d.ts +5 -7
  89. package/dist/core/agents/state/live-coordination-view.d.ts.map +1 -1
  90. package/dist/core/agents/state/live-coordination-view.js +15 -90
  91. package/dist/core/agents/state/live-coordination-writer.d.ts +12 -0
  92. package/dist/core/agents/state/live-coordination-writer.d.ts.map +1 -0
  93. package/dist/core/agents/state/live-coordination-writer.js +92 -0
  94. package/dist/core/artifacts/index.d.ts +21 -0
  95. package/dist/core/artifacts/index.d.ts.map +1 -1
  96. package/dist/core/artifacts/index.js +46 -1
  97. package/dist/core/config.d.ts +62 -4
  98. package/dist/core/config.d.ts.map +1 -1
  99. package/dist/core/config.js +98 -4
  100. package/dist/core/conversations/archive.d.ts +49 -0
  101. package/dist/core/conversations/archive.d.ts.map +1 -0
  102. package/dist/core/conversations/archive.js +136 -0
  103. package/dist/core/conversations/catalog.d.ts +10 -0
  104. package/dist/core/conversations/catalog.d.ts.map +1 -0
  105. package/dist/core/conversations/catalog.js +72 -0
  106. package/dist/core/conversations/context-pack.d.ts +6 -0
  107. package/dist/core/conversations/context-pack.d.ts.map +1 -0
  108. package/dist/core/conversations/context-pack.js +60 -0
  109. package/dist/core/conversations/contract.d.ts +155 -0
  110. package/dist/core/conversations/contract.d.ts.map +1 -0
  111. package/dist/core/conversations/contract.js +1 -0
  112. package/dist/core/conversations/evaluation.d.ts +16 -0
  113. package/dist/core/conversations/evaluation.d.ts.map +1 -0
  114. package/dist/core/conversations/evaluation.js +9 -0
  115. package/dist/core/conversations/index.d.ts +10 -0
  116. package/dist/core/conversations/index.d.ts.map +1 -0
  117. package/dist/core/conversations/index.js +9 -0
  118. package/dist/core/conversations/lifecycle.d.ts +28 -0
  119. package/dist/core/conversations/lifecycle.d.ts.map +1 -0
  120. package/dist/core/conversations/lifecycle.js +29 -0
  121. package/dist/core/conversations/normalize.d.ts +14 -0
  122. package/dist/core/conversations/normalize.d.ts.map +1 -0
  123. package/dist/core/conversations/normalize.js +82 -0
  124. package/dist/core/conversations/query.d.ts +8 -0
  125. package/dist/core/conversations/query.d.ts.map +1 -0
  126. package/dist/core/conversations/query.js +280 -0
  127. package/dist/core/conversations/search-index.d.ts +9 -0
  128. package/dist/core/conversations/search-index.d.ts.map +1 -0
  129. package/dist/core/conversations/search-index.js +29 -0
  130. package/dist/core/events/legacy-storage/canary.d.ts +18 -0
  131. package/dist/core/events/legacy-storage/canary.d.ts.map +1 -0
  132. package/dist/core/events/legacy-storage/canary.js +150 -0
  133. package/dist/core/events/legacy-storage/fence.d.ts +15 -0
  134. package/dist/core/events/legacy-storage/fence.d.ts.map +1 -0
  135. package/dist/core/events/legacy-storage/fence.js +115 -0
  136. package/dist/core/events/legacy-storage/index.d.ts +6 -0
  137. package/dist/core/events/legacy-storage/index.d.ts.map +1 -0
  138. package/dist/core/events/legacy-storage/index.js +5 -0
  139. package/dist/core/events/legacy-storage/inventory.d.ts +10 -0
  140. package/dist/core/events/legacy-storage/inventory.d.ts.map +1 -0
  141. package/dist/core/events/legacy-storage/inventory.js +40 -0
  142. package/dist/core/events/legacy-storage/manifest.d.ts +23 -0
  143. package/dist/core/events/legacy-storage/manifest.d.ts.map +1 -0
  144. package/dist/core/events/legacy-storage/manifest.js +108 -0
  145. package/dist/core/events/legacy-storage/reader.d.ts +15 -0
  146. package/dist/core/events/legacy-storage/reader.d.ts.map +1 -0
  147. package/dist/core/events/legacy-storage/reader.js +154 -0
  148. package/dist/core/events/v3/authority-outbox.d.ts +7 -2
  149. package/dist/core/events/v3/authority-outbox.d.ts.map +1 -1
  150. package/dist/core/events/v3/authority-outbox.js +16 -3
  151. package/dist/core/events/v3/base-contract.d.ts +81 -41
  152. package/dist/core/events/v3/base-contract.d.ts.map +1 -1
  153. package/dist/core/events/v3/base-contract.js +17 -7
  154. package/dist/core/events/v3/bootstrap.d.ts +39 -0
  155. package/dist/core/events/v3/bootstrap.d.ts.map +1 -1
  156. package/dist/core/events/v3/bootstrap.js +167 -3
  157. package/dist/core/events/v3/capabilities.js +3 -3
  158. package/dist/core/events/v3/control-witness.d.ts +44 -0
  159. package/dist/core/events/v3/control-witness.d.ts.map +1 -0
  160. package/dist/core/events/v3/control-witness.js +233 -0
  161. package/dist/core/events/v3/control-writer.d.ts +4 -0
  162. package/dist/core/events/v3/control-writer.d.ts.map +1 -0
  163. package/dist/core/events/v3/control-writer.js +16 -0
  164. package/dist/core/events/v3/control.d.ts +8 -2
  165. package/dist/core/events/v3/control.d.ts.map +1 -1
  166. package/dist/core/events/v3/control.js +46 -18
  167. package/dist/core/events/v3/coordination-transaction-recovery.d.ts +42 -0
  168. package/dist/core/events/v3/coordination-transaction-recovery.d.ts.map +1 -0
  169. package/dist/core/events/v3/coordination-transaction-recovery.js +342 -0
  170. package/dist/core/events/v3/coordination-view.d.ts.map +1 -1
  171. package/dist/core/events/v3/coordination-view.js +16 -1
  172. package/dist/core/events/v3/generated.d.ts +1 -1
  173. package/dist/core/events/v3/generated.js +1 -1
  174. package/dist/core/events/v3/index.d.ts +4 -2
  175. package/dist/core/events/v3/index.d.ts.map +1 -1
  176. package/dist/core/events/v3/index.js +3 -1
  177. package/dist/core/events/v3/live-route-observer.d.ts +31 -0
  178. package/dist/core/events/v3/live-route-observer.d.ts.map +1 -0
  179. package/dist/core/events/v3/live-route-observer.js +58 -0
  180. package/dist/core/events/v3/live-routing.d.ts +13 -21
  181. package/dist/core/events/v3/live-routing.d.ts.map +1 -1
  182. package/dist/core/events/v3/live-routing.js +45 -41
  183. package/dist/core/events/v3/producers/coordination-recorder.d.ts +11 -1
  184. package/dist/core/events/v3/producers/coordination-recorder.d.ts.map +1 -1
  185. package/dist/core/events/v3/producers/coordination-recorder.js +76 -10
  186. package/dist/core/events/v3/producers/diagnostic-summaries.d.ts +129 -0
  187. package/dist/core/events/v3/producers/diagnostic-summaries.d.ts.map +1 -0
  188. package/dist/core/events/v3/producers/diagnostic-summaries.js +499 -0
  189. package/dist/core/events/v3/producers/hook-base.js +1 -1
  190. package/dist/core/events/v3/producers/intake.d.ts +7 -0
  191. package/dist/core/events/v3/producers/intake.d.ts.map +1 -1
  192. package/dist/core/events/v3/producers/intake.js +25 -2
  193. package/dist/core/events/v3/producers/producer-state-observer.d.ts +8 -0
  194. package/dist/core/events/v3/producers/producer-state-observer.d.ts.map +1 -0
  195. package/dist/core/events/v3/producers/producer-state-observer.js +45 -0
  196. package/dist/core/events/v3/producers/recorder.d.ts +55 -1
  197. package/dist/core/events/v3/producers/recorder.d.ts.map +1 -1
  198. package/dist/core/events/v3/producers/recorder.js +353 -24
  199. package/dist/core/events/v3/reader.d.ts +51 -0
  200. package/dist/core/events/v3/reader.d.ts.map +1 -1
  201. package/dist/core/events/v3/reader.js +181 -1
  202. package/dist/core/events/v3/rotation-config.d.ts +9 -0
  203. package/dist/core/events/v3/rotation-config.d.ts.map +1 -0
  204. package/dist/core/events/v3/rotation-config.js +91 -0
  205. package/dist/core/events/v3/runtime-build.d.ts +11 -0
  206. package/dist/core/events/v3/runtime-build.d.ts.map +1 -0
  207. package/dist/core/events/v3/runtime-build.js +39 -0
  208. package/dist/core/events/v3/runtime-identity.d.ts +5 -0
  209. package/dist/core/events/v3/runtime-identity.d.ts.map +1 -0
  210. package/dist/core/events/v3/runtime-identity.js +18 -0
  211. package/dist/core/events/v3/runtime-telemetry-capabilities.d.ts +6 -5
  212. package/dist/core/events/v3/runtime-telemetry-capabilities.d.ts.map +1 -1
  213. package/dist/core/events/v3/runtime-telemetry-capabilities.js +1 -1
  214. package/dist/core/events/v3/support-storage/classify.d.ts +46 -0
  215. package/dist/core/events/v3/support-storage/classify.d.ts.map +1 -0
  216. package/dist/core/events/v3/support-storage/classify.js +149 -0
  217. package/dist/core/events/v3/support-storage/eligibility.d.ts +29 -0
  218. package/dist/core/events/v3/support-storage/eligibility.d.ts.map +1 -0
  219. package/dist/core/events/v3/support-storage/eligibility.js +35 -0
  220. package/dist/core/events/v3/support-storage/index.d.ts +10 -0
  221. package/dist/core/events/v3/support-storage/index.d.ts.map +1 -0
  222. package/dist/core/events/v3/support-storage/index.js +9 -0
  223. package/dist/core/events/v3/support-storage/inventory.d.ts +30 -0
  224. package/dist/core/events/v3/support-storage/inventory.d.ts.map +1 -0
  225. package/dist/core/events/v3/support-storage/inventory.js +94 -0
  226. package/dist/core/events/v3/support-storage/logical-authority.d.ts +14 -0
  227. package/dist/core/events/v3/support-storage/logical-authority.d.ts.map +1 -0
  228. package/dist/core/events/v3/support-storage/logical-authority.js +104 -0
  229. package/dist/core/events/v3/support-storage/maintenance.d.ts +98 -0
  230. package/dist/core/events/v3/support-storage/maintenance.d.ts.map +1 -0
  231. package/dist/core/events/v3/support-storage/maintenance.js +352 -0
  232. package/dist/core/events/v3/support-storage/pack-contract.d.ts +59 -0
  233. package/dist/core/events/v3/support-storage/pack-contract.d.ts.map +1 -0
  234. package/dist/core/events/v3/support-storage/pack-contract.js +249 -0
  235. package/dist/core/events/v3/support-storage/pack-reader.d.ts +34 -0
  236. package/dist/core/events/v3/support-storage/pack-reader.d.ts.map +1 -0
  237. package/dist/core/events/v3/support-storage/pack-reader.js +258 -0
  238. package/dist/core/events/v3/support-storage/pack-writer.d.ts +30 -0
  239. package/dist/core/events/v3/support-storage/pack-writer.d.ts.map +1 -0
  240. package/dist/core/events/v3/support-storage/pack-writer.js +268 -0
  241. package/dist/core/events/v3/support-storage/recovery.d.ts +15 -0
  242. package/dist/core/events/v3/support-storage/recovery.d.ts.map +1 -0
  243. package/dist/core/events/v3/support-storage/recovery.js +22 -0
  244. package/dist/core/events/v3/turn-telemetry.d.ts +14 -8
  245. package/dist/core/events/v3/turn-telemetry.d.ts.map +1 -1
  246. package/dist/core/events/v3/turn-telemetry.js +32 -2
  247. package/dist/core/events/v3/writer.d.ts +13 -1
  248. package/dist/core/events/v3/writer.d.ts.map +1 -1
  249. package/dist/core/events/v3/writer.js +126 -12
  250. package/dist/core/governor/plan-read.d.ts.map +1 -1
  251. package/dist/core/governor/plan-read.js +5 -21
  252. package/dist/core/governor/planning.js +6 -8
  253. package/dist/core/governor/service-read.d.ts +12 -0
  254. package/dist/core/governor/service-read.d.ts.map +1 -1
  255. package/dist/core/governor/service-read.js +266 -2
  256. package/dist/core/governor/service.d.ts +1 -0
  257. package/dist/core/governor/service.d.ts.map +1 -1
  258. package/dist/core/governor/service.js +53 -18
  259. package/dist/core/guard/evidence-v3.d.ts.map +1 -1
  260. package/dist/core/guard/evidence-v3.js +2 -0
  261. package/dist/core/hooks/adapter/events.d.ts.map +1 -1
  262. package/dist/core/hooks/adapter/events.js +1 -0
  263. package/dist/core/hooks/adapter/output.d.ts +4 -2
  264. package/dist/core/hooks/adapter/output.d.ts.map +1 -1
  265. package/dist/core/hooks/adapter/output.js +13 -5
  266. package/dist/core/hooks/adapter/runtime-telemetry.d.ts +27 -4
  267. package/dist/core/hooks/adapter/runtime-telemetry.d.ts.map +1 -1
  268. package/dist/core/hooks/adapter/runtime-telemetry.js +307 -6
  269. package/dist/core/hooks/cli.js +212 -30
  270. package/dist/core/hooks/effects/image-capture.d.ts +1 -1
  271. package/dist/core/hooks/effects/image-capture.d.ts.map +1 -1
  272. package/dist/core/hooks/effects/image-capture.js +4 -2
  273. package/dist/core/hooks/remediation-cap.d.ts +8 -3
  274. package/dist/core/hooks/remediation-cap.d.ts.map +1 -1
  275. package/dist/core/hooks/remediation-cap.js +3 -11
  276. package/dist/core/hooks/resolve/coord-root.d.ts +22 -9
  277. package/dist/core/hooks/resolve/coord-root.d.ts.map +1 -1
  278. package/dist/core/hooks/resolve/coord-root.js +92 -11
  279. package/dist/core/hooks/resolve/owner.d.ts.map +1 -1
  280. package/dist/core/hooks/resolve/owner.js +5 -0
  281. package/dist/core/hooks/resolve/transcript.d.ts +8 -0
  282. package/dist/core/hooks/resolve/transcript.d.ts.map +1 -1
  283. package/dist/core/hooks/resolve/transcript.js +11 -0
  284. package/dist/core/inbox/contract.d.ts +64 -0
  285. package/dist/core/inbox/contract.d.ts.map +1 -0
  286. package/dist/core/inbox/contract.js +13 -0
  287. package/dist/core/inbox/index.d.ts +5 -0
  288. package/dist/core/inbox/index.d.ts.map +1 -0
  289. package/dist/core/inbox/index.js +4 -0
  290. package/dist/core/inbox/lifecycle.d.ts +22 -0
  291. package/dist/core/inbox/lifecycle.d.ts.map +1 -0
  292. package/dist/core/inbox/lifecycle.js +41 -0
  293. package/dist/core/inbox/service.d.ts +36 -0
  294. package/dist/core/inbox/service.d.ts.map +1 -0
  295. package/dist/core/inbox/service.js +210 -0
  296. package/dist/core/inbox/watcher.d.ts +7 -0
  297. package/dist/core/inbox/watcher.d.ts.map +1 -0
  298. package/dist/core/inbox/watcher.js +26 -0
  299. package/dist/core/presence/codec-digest.d.ts.map +1 -1
  300. package/dist/core/presence/codec-digest.js +14 -3
  301. package/dist/core/presence/relay-client.d.ts +1 -0
  302. package/dist/core/presence/relay-client.d.ts.map +1 -1
  303. package/dist/core/presence/relay-client.js +52 -8
  304. package/dist/core/semantic/adapters.d.ts +11 -8
  305. package/dist/core/semantic/adapters.d.ts.map +1 -1
  306. package/dist/core/semantic/adapters.js +169 -31
  307. package/dist/core/semantic/contract.d.ts +532 -48
  308. package/dist/core/semantic/contract.d.ts.map +1 -1
  309. package/dist/core/semantic/contract.js +104 -3
  310. package/dist/core/semantic/index.d.ts +7 -3
  311. package/dist/core/semantic/index.d.ts.map +1 -1
  312. package/dist/core/semantic/index.js +7 -3
  313. package/dist/core/semantic/once.d.ts +6 -1
  314. package/dist/core/semantic/once.d.ts.map +1 -1
  315. package/dist/core/semantic/once.js +80 -9
  316. package/dist/core/semantic/prompt.d.ts.map +1 -1
  317. package/dist/core/semantic/prompt.js +14 -1
  318. package/dist/core/semantic/review.d.ts +144 -0
  319. package/dist/core/semantic/review.d.ts.map +1 -0
  320. package/dist/core/semantic/review.js +544 -0
  321. package/dist/core/semantic/routes.d.ts +10 -0
  322. package/dist/core/semantic/routes.d.ts.map +1 -0
  323. package/dist/core/semantic/routes.js +21 -0
  324. package/dist/core/semantic/scheduler.d.ts +14 -3
  325. package/dist/core/semantic/scheduler.d.ts.map +1 -1
  326. package/dist/core/semantic/scheduler.js +30 -6
  327. package/dist/core/semantic/service-status.d.ts +20 -0
  328. package/dist/core/semantic/service-status.d.ts.map +1 -1
  329. package/dist/core/semantic/service-status.js +60 -4
  330. package/dist/core/semantic/service.d.ts +1 -0
  331. package/dist/core/semantic/service.d.ts.map +1 -1
  332. package/dist/core/semantic/service.js +104 -15
  333. package/dist/core/semantic/soak.d.ts +75 -0
  334. package/dist/core/semantic/soak.d.ts.map +1 -0
  335. package/dist/core/semantic/soak.js +476 -0
  336. package/dist/core/semantic/storage.d.ts +11 -1
  337. package/dist/core/semantic/storage.d.ts.map +1 -1
  338. package/dist/core/semantic/storage.js +4 -3
  339. package/dist/core/semantic/usage.d.ts +43 -0
  340. package/dist/core/semantic/usage.d.ts.map +1 -0
  341. package/dist/core/semantic/usage.js +193 -0
  342. package/dist/core/semantic/validate.d.ts +3 -1
  343. package/dist/core/semantic/validate.d.ts.map +1 -1
  344. package/dist/core/semantic/validate.js +34 -1
  345. package/dist/core/storage/buffer.d.ts +28 -0
  346. package/dist/core/storage/buffer.d.ts.map +1 -0
  347. package/dist/core/storage/buffer.js +101 -0
  348. package/dist/core/storage/builtins.d.ts +3 -0
  349. package/dist/core/storage/builtins.d.ts.map +1 -0
  350. package/dist/core/storage/builtins.js +683 -0
  351. package/dist/core/storage/catalog.d.ts +19 -0
  352. package/dist/core/storage/catalog.d.ts.map +1 -0
  353. package/dist/core/storage/catalog.js +365 -0
  354. package/dist/core/storage/config.d.ts +16 -0
  355. package/dist/core/storage/config.d.ts.map +1 -0
  356. package/dist/core/storage/config.js +311 -0
  357. package/dist/core/storage/contract.d.ts +275 -0
  358. package/dist/core/storage/contract.d.ts.map +1 -0
  359. package/dist/core/storage/contract.js +3 -0
  360. package/dist/core/storage/durable-history.d.ts +36 -0
  361. package/dist/core/storage/durable-history.d.ts.map +1 -0
  362. package/dist/core/storage/durable-history.js +606 -0
  363. package/dist/core/storage/health.d.ts +4 -0
  364. package/dist/core/storage/health.d.ts.map +1 -0
  365. package/dist/core/storage/health.js +65 -0
  366. package/dist/core/storage/index.d.ts +16 -0
  367. package/dist/core/storage/index.d.ts.map +1 -0
  368. package/dist/core/storage/index.js +15 -0
  369. package/dist/core/storage/inventory.d.ts +25 -0
  370. package/dist/core/storage/inventory.d.ts.map +1 -0
  371. package/dist/core/storage/inventory.js +666 -0
  372. package/dist/core/storage/jsonl.d.ts +52 -0
  373. package/dist/core/storage/jsonl.d.ts.map +1 -0
  374. package/dist/core/storage/jsonl.js +156 -0
  375. package/dist/core/storage/log-retention.d.ts +52 -0
  376. package/dist/core/storage/log-retention.d.ts.map +1 -0
  377. package/dist/core/storage/log-retention.js +419 -0
  378. package/dist/core/storage/logger.d.ts +82 -0
  379. package/dist/core/storage/logger.d.ts.map +1 -0
  380. package/dist/core/storage/logger.js +411 -0
  381. package/dist/core/storage/maintenance-providers.d.ts +26 -0
  382. package/dist/core/storage/maintenance-providers.d.ts.map +1 -0
  383. package/dist/core/storage/maintenance-providers.js +141 -0
  384. package/dist/core/storage/maintenance.d.ts +125 -0
  385. package/dist/core/storage/maintenance.d.ts.map +1 -0
  386. package/dist/core/storage/maintenance.js +609 -0
  387. package/dist/core/storage/metrics.d.ts +60 -0
  388. package/dist/core/storage/metrics.d.ts.map +1 -0
  389. package/dist/core/storage/metrics.js +134 -0
  390. package/dist/core/storage/policy.d.ts +7 -0
  391. package/dist/core/storage/policy.d.ts.map +1 -0
  392. package/dist/core/storage/policy.js +110 -0
  393. package/dist/core/storage/process-log.d.ts +38 -0
  394. package/dist/core/storage/process-log.d.ts.map +1 -0
  395. package/dist/core/storage/process-log.js +165 -0
  396. package/dist/core/storage/query.d.ts +34 -0
  397. package/dist/core/storage/query.d.ts.map +1 -0
  398. package/dist/core/storage/query.js +295 -0
  399. package/dist/core/storage/receipts.d.ts +23 -0
  400. package/dist/core/storage/receipts.d.ts.map +1 -0
  401. package/dist/core/storage/receipts.js +117 -0
  402. package/dist/core/storage/segments.d.ts +84 -0
  403. package/dist/core/storage/segments.d.ts.map +1 -0
  404. package/dist/core/storage/segments.js +542 -0
  405. package/dist/core/storage/sink-graph.d.ts +65 -0
  406. package/dist/core/storage/sink-graph.d.ts.map +1 -0
  407. package/dist/core/storage/sink-graph.js +213 -0
  408. package/dist/core/storage/storm-control.d.ts +23 -0
  409. package/dist/core/storage/storm-control.d.ts.map +1 -0
  410. package/dist/core/storage/storm-control.js +59 -0
  411. package/dist/core/work/state.d.ts.map +1 -1
  412. package/dist/core/work/state.js +10 -14
  413. package/dist/core/workflow/live-session-v3.d.ts.map +1 -1
  414. package/dist/core/workflow/live-session-v3.js +2 -1
  415. package/dist/index.d.ts +2 -0
  416. package/dist/index.d.ts.map +1 -1
  417. package/dist/index.js +2 -0
  418. package/dist/lazy-commands.d.ts +26 -0
  419. package/dist/lazy-commands.d.ts.map +1 -0
  420. package/dist/lazy-commands.js +210 -0
  421. package/dist/lib/docs-lint.d.ts +2 -0
  422. package/dist/lib/docs-lint.d.ts.map +1 -1
  423. package/dist/lib/docs-lint.js +45 -80
  424. package/dist/lib/docs-metadata-audit.d.ts +3 -0
  425. package/dist/lib/docs-metadata-audit.d.ts.map +1 -1
  426. package/dist/lib/docs-metadata-audit.js +13 -23
  427. package/dist/lib/docs-metadata-sync.d.ts +1 -0
  428. package/dist/lib/docs-metadata-sync.d.ts.map +1 -1
  429. package/dist/lib/docs-metadata-sync.js +28 -10
  430. package/dist/lib/docs-repository-view.d.ts +22 -0
  431. package/dist/lib/docs-repository-view.d.ts.map +1 -0
  432. package/dist/lib/docs-repository-view.js +185 -0
  433. package/dist/lib/http/client.d.ts +11 -5
  434. package/dist/lib/http/client.d.ts.map +1 -1
  435. package/dist/lib/http/client.js +22 -4
  436. package/dist/lib/http/index.d.ts +1 -1
  437. package/dist/lib/http/index.d.ts.map +1 -1
  438. package/dist/lib/http/index.js +1 -1
  439. package/dist/lib/indexer-exclusions.d.ts +27 -0
  440. package/dist/lib/indexer-exclusions.d.ts.map +1 -0
  441. package/dist/lib/indexer-exclusions.js +176 -0
  442. package/dist/lib/instructions/templates.d.ts.map +1 -1
  443. package/dist/lib/instructions/templates.js +5 -0
  444. package/dist/lib/local-file-url.d.ts +9 -0
  445. package/dist/lib/local-file-url.d.ts.map +1 -0
  446. package/dist/lib/local-file-url.js +20 -0
  447. package/dist/lib/web-performance.d.ts +118 -0
  448. package/dist/lib/web-performance.d.ts.map +1 -0
  449. package/dist/lib/web-performance.js +192 -0
  450. package/package.json +29 -2
  451. package/schemas/config.schema.json +58 -0
  452. package/schemas/event-v3.schema.json +324 -112
  453. package/src/commander.ts +462 -95
  454. package/src/commands/agents.ts +517 -190
  455. package/src/commands/backup.ts +18 -14
  456. package/src/commands/browse-session.ts +12 -0
  457. package/src/commands/browse.ts +6 -7
  458. package/src/commands/conversations.ts +279 -0
  459. package/src/commands/deinit.ts +6 -0
  460. package/src/commands/docs.ts +25 -6
  461. package/src/commands/doctor.ts +75 -9
  462. package/src/commands/fetch.ts +7 -6
  463. package/src/commands/files.ts +143 -0
  464. package/src/commands/governor.ts +13 -12
  465. package/src/commands/inbox.ts +61 -0
  466. package/src/commands/init.ts +78 -16
  467. package/src/commands/ledger-v3.ts +421 -1
  468. package/src/commands/logs.ts +224 -0
  469. package/src/commands/messages.ts +61 -0
  470. package/src/commands/outline.ts +6 -2
  471. package/src/commands/read.ts +6 -2
  472. package/src/commands/semantic.ts +66 -1
  473. package/src/commands/storage.ts +310 -0
  474. package/src/commands/tunnel.ts +66 -52
  475. package/src/commands/web.ts +77 -7
  476. package/src/commands/work.ts +3 -3
  477. package/src/commands/workflow.ts +13 -13
  478. package/src/core/agents/cli.ts +259 -53
  479. package/src/core/agents/live-authority-v3.ts +341 -10
  480. package/src/core/agents/live-lifecycle-v3.ts +6 -1
  481. package/src/core/agents/live-observation-v3.ts +6 -1
  482. package/src/core/agents/render/prompt-context.ts +27 -6
  483. package/src/core/agents/rules/stop-hook.ts +107 -16
  484. package/src/core/agents/rules/verdict.ts +1 -0
  485. package/src/core/agents/session-events.ts +4 -0
  486. package/src/core/agents/session-finalization-state-v3.ts +1 -1
  487. package/src/core/agents/session-finalizer-v3.ts +4 -1
  488. package/src/core/agents/state/activity-log.ts +7 -2
  489. package/src/core/agents/state/heartbeat-writer.ts +27 -0
  490. package/src/core/agents/state/live-coordination-view.ts +16 -105
  491. package/src/core/agents/state/live-coordination-writer.ts +141 -0
  492. package/src/core/artifacts/index.ts +64 -1
  493. package/src/core/config.ts +126 -5
  494. package/src/core/conversations/archive.ts +237 -0
  495. package/src/core/conversations/catalog.ts +79 -0
  496. package/src/core/conversations/context-pack.ts +72 -0
  497. package/src/core/conversations/contract.ts +178 -0
  498. package/src/core/conversations/evaluation.ts +30 -0
  499. package/src/core/conversations/index.ts +9 -0
  500. package/src/core/conversations/lifecycle.ts +63 -0
  501. package/src/core/conversations/normalize.ts +105 -0
  502. package/src/core/conversations/query.ts +318 -0
  503. package/src/core/conversations/search-index.ts +48 -0
  504. package/src/core/events/legacy-storage/canary.ts +177 -0
  505. package/src/core/events/legacy-storage/fence.ts +129 -0
  506. package/src/core/events/legacy-storage/index.ts +5 -0
  507. package/src/core/events/legacy-storage/inventory.ts +51 -0
  508. package/src/core/events/legacy-storage/manifest.ts +136 -0
  509. package/src/core/events/legacy-storage/reader.ts +178 -0
  510. package/src/core/events/v3/authority-outbox.ts +22 -1
  511. package/src/core/events/v3/base-contract.ts +17 -7
  512. package/src/core/events/v3/bootstrap.ts +195 -2
  513. package/src/core/events/v3/capabilities.ts +3 -3
  514. package/src/core/events/v3/control-witness.ts +339 -0
  515. package/src/core/events/v3/control-writer.ts +16 -0
  516. package/src/core/events/v3/control.ts +54 -18
  517. package/src/core/events/v3/coordination-transaction-recovery.ts +477 -0
  518. package/src/core/events/v3/coordination-view.ts +17 -1
  519. package/src/core/events/v3/generated.ts +1 -1
  520. package/src/core/events/v3/index.ts +5 -2
  521. package/src/core/events/v3/live-route-observer.ts +80 -0
  522. package/src/core/events/v3/live-routing.ts +64 -46
  523. package/src/core/events/v3/producers/coordination-recorder.ts +95 -10
  524. package/src/core/events/v3/producers/diagnostic-summaries.ts +593 -0
  525. package/src/core/events/v3/producers/hook-base.ts +1 -1
  526. package/src/core/events/v3/producers/intake.ts +30 -2
  527. package/src/core/events/v3/producers/producer-state-observer.ts +52 -0
  528. package/src/core/events/v3/producers/recorder.ts +571 -33
  529. package/src/core/events/v3/reader.ts +243 -2
  530. package/src/core/events/v3/rotation-config.ts +98 -0
  531. package/src/core/events/v3/runtime-build.ts +41 -0
  532. package/src/core/events/v3/runtime-identity.ts +16 -0
  533. package/src/core/events/v3/runtime-telemetry-capabilities.ts +14 -8
  534. package/src/core/events/v3/support-storage/classify.ts +209 -0
  535. package/src/core/events/v3/support-storage/eligibility.ts +58 -0
  536. package/src/core/events/v3/support-storage/index.ts +9 -0
  537. package/src/core/events/v3/support-storage/inventory.ts +135 -0
  538. package/src/core/events/v3/support-storage/logical-authority.ts +117 -0
  539. package/src/core/events/v3/support-storage/maintenance.ts +501 -0
  540. package/src/core/events/v3/support-storage/pack-contract.ts +337 -0
  541. package/src/core/events/v3/support-storage/pack-reader.ts +346 -0
  542. package/src/core/events/v3/support-storage/pack-writer.ts +352 -0
  543. package/src/core/events/v3/support-storage/recovery.ts +43 -0
  544. package/src/core/events/v3/turn-telemetry.ts +58 -7
  545. package/src/core/events/v3/writer.ts +168 -16
  546. package/src/core/governor/plan-read.ts +5 -18
  547. package/src/core/governor/planning.ts +5 -8
  548. package/src/core/governor/service-read.ts +320 -2
  549. package/src/core/governor/service.ts +49 -22
  550. package/src/core/guard/evidence-v3.ts +1 -0
  551. package/src/core/hooks/adapter/events.ts +1 -0
  552. package/src/core/hooks/adapter/output.ts +12 -5
  553. package/src/core/hooks/adapter/runtime-telemetry.ts +408 -13
  554. package/src/core/hooks/cli.ts +226 -32
  555. package/src/core/hooks/effects/image-capture.ts +4 -1
  556. package/src/core/hooks/remediation-cap.ts +12 -6
  557. package/src/core/hooks/resolve/coord-root.ts +91 -11
  558. package/src/core/hooks/resolve/owner.ts +4 -0
  559. package/src/core/hooks/resolve/transcript.ts +18 -0
  560. package/src/core/inbox/contract.ts +81 -0
  561. package/src/core/inbox/index.ts +4 -0
  562. package/src/core/inbox/lifecycle.ts +104 -0
  563. package/src/core/inbox/service.ts +305 -0
  564. package/src/core/inbox/watcher.ts +36 -0
  565. package/src/core/presence/codec-digest.ts +15 -9
  566. package/src/core/presence/relay-client.ts +55 -7
  567. package/src/core/semantic/adapters.ts +200 -41
  568. package/src/core/semantic/contract.ts +135 -3
  569. package/src/core/semantic/index.ts +76 -2
  570. package/src/core/semantic/once.ts +93 -7
  571. package/src/core/semantic/prompt.ts +13 -1
  572. package/src/core/semantic/review.ts +803 -0
  573. package/src/core/semantic/routes.ts +30 -0
  574. package/src/core/semantic/scheduler.ts +49 -5
  575. package/src/core/semantic/service-status.ts +99 -5
  576. package/src/core/semantic/service.ts +116 -15
  577. package/src/core/semantic/soak.ts +638 -0
  578. package/src/core/semantic/storage.ts +20 -6
  579. package/src/core/semantic/usage.ts +272 -0
  580. package/src/core/semantic/validate.ts +31 -0
  581. package/src/core/storage/buffer.ts +124 -0
  582. package/src/core/storage/builtins.ts +916 -0
  583. package/src/core/storage/catalog.ts +467 -0
  584. package/src/core/storage/config.ts +423 -0
  585. package/src/core/storage/contract.ts +342 -0
  586. package/src/core/storage/durable-history.ts +738 -0
  587. package/src/core/storage/health.ts +76 -0
  588. package/src/core/storage/index.ts +15 -0
  589. package/src/core/storage/inventory.ts +859 -0
  590. package/src/core/storage/jsonl.ts +213 -0
  591. package/src/core/storage/log-retention.ts +555 -0
  592. package/src/core/storage/logger.ts +546 -0
  593. package/src/core/storage/maintenance-providers.ts +200 -0
  594. package/src/core/storage/maintenance.ts +929 -0
  595. package/src/core/storage/metrics.ts +199 -0
  596. package/src/core/storage/policy.ts +141 -0
  597. package/src/core/storage/process-log.ts +203 -0
  598. package/src/core/storage/query.ts +360 -0
  599. package/src/core/storage/receipts.ts +162 -0
  600. package/src/core/storage/segments.ts +721 -0
  601. package/src/core/storage/sink-graph.ts +343 -0
  602. package/src/core/storage/storm-control.ts +91 -0
  603. package/src/core/work/state.ts +12 -21
  604. package/src/core/workflow/live-session-v3.ts +2 -4
  605. package/src/index.ts +2 -0
  606. package/src/lazy-commands.ts +294 -0
  607. package/src/lib/docs-lint.ts +58 -77
  608. package/src/lib/docs-metadata-audit.ts +26 -21
  609. package/src/lib/docs-metadata-sync.ts +32 -9
  610. package/src/lib/docs-repository-view.ts +220 -0
  611. package/src/lib/http/client.ts +44 -8
  612. package/src/lib/http/index.ts +6 -1
  613. package/src/lib/indexer-exclusions.ts +173 -0
  614. package/src/lib/instructions/templates.ts +5 -0
  615. package/src/lib/local-file-url.ts +31 -0
  616. package/src/lib/web-performance.ts +335 -0
@@ -0,0 +1,30 @@
1
+ import type { SemanticConfiguredModel, SemanticHarness } from "./contract.ts";
2
+
3
+ export interface SemanticReaderRoute {
4
+ harness: SemanticHarness;
5
+ binary: string;
6
+ configured_model: SemanticConfiguredModel;
7
+ invocation_model_id: string;
8
+ }
9
+
10
+ /** Pure route data shared by the adapters, CLI status, and read-only Codec path. */
11
+ export const SEMANTIC_READER_ROUTES: Record<SemanticHarness, SemanticReaderRoute> = {
12
+ "claude-code": {
13
+ harness: "claude-code",
14
+ binary: "claude",
15
+ configured_model: "haiku-4.5",
16
+ invocation_model_id: "claude-haiku-4-5-20251001",
17
+ },
18
+ codex: {
19
+ harness: "codex",
20
+ binary: "codex",
21
+ configured_model: "gpt-5.6-luna",
22
+ invocation_model_id: "gpt-5.6-luna",
23
+ },
24
+ cursor: {
25
+ harness: "cursor",
26
+ binary: "cursor-agent",
27
+ configured_model: "composer-2.5",
28
+ invocation_model_id: "composer-2.5",
29
+ },
30
+ };
@@ -1,14 +1,17 @@
1
1
  import type { SemanticAgentReadModelV2, SemanticEvidenceV1 } from "./contract.ts";
2
2
  import type { SemanticCallReceipt, SemanticPendingItem } from "./storage.ts";
3
3
 
4
- export const SEMANTIC_HARD_CALLS_PER_HOUR = 60;
4
+ export const SEMANTIC_HARD_CALLS_PER_HOUR = 120;
5
5
  export const SEMANTIC_INVALID_RETRY_COOLDOWN_MS = 5 * 60_000;
6
- export const SEMANTIC_MIN_GENERATION_CALL_INTERVAL_MS = 30_000;
6
+ export const SEMANTIC_MIN_PRIORITY_GENERATION_CALL_INTERVAL_MS = 2 * 60_000;
7
+ export const SEMANTIC_MIN_AMBIENT_GENERATION_CALL_INTERVAL_MS = 5 * 60_000;
8
+ export const SEMANTIC_MIN_GENERATION_CALL_INTERVAL_MS =
9
+ SEMANTIC_MIN_PRIORITY_GENERATION_CALL_INTERVAL_MS;
7
10
 
8
11
  export function semanticPriorityBand(evidence: SemanticEvidenceV1): 1 | 2 {
9
12
  if (
10
13
  evidence.attention ||
11
- evidence.lifecycle ||
14
+ (evidence.lifecycle && evidence.lifecycle.state !== "active") ||
12
15
  evidence.recent.some((item) => item.kind === "terminal")
13
16
  ) {
14
17
  return 1;
@@ -16,6 +19,12 @@ export function semanticPriorityBand(evidence: SemanticEvidenceV1): 1 | 2 {
16
19
  return 2;
17
20
  }
18
21
 
22
+ export function semanticPendingCallIntervalMs(pending: SemanticPendingItem): number {
23
+ return pending.band === 1
24
+ ? SEMANTIC_MIN_PRIORITY_GENERATION_CALL_INTERVAL_MS
25
+ : SEMANTIC_MIN_AMBIENT_GENERATION_CALL_INTERVAL_MS;
26
+ }
27
+
19
28
  export function enqueueSemanticPending(
20
29
  pending: readonly SemanticPendingItem[],
21
30
  evidence: SemanticEvidenceV1,
@@ -35,6 +44,7 @@ export function enqueueSemanticPending(
35
44
  export function selectSemanticPending(
36
45
  pending: readonly SemanticPendingItem[],
37
46
  lastFirstBandGenerationId?: string,
47
+ callHistory: readonly SemanticCallReceipt[] = [],
38
48
  ): SemanticPendingItem | undefined {
39
49
  const sorted = [...pending].sort(
40
50
  (left, right) =>
@@ -42,14 +52,17 @@ export function selectSemanticPending(
42
52
  left.pending_since.localeCompare(right.pending_since) ||
43
53
  left.generation_id.localeCompare(right.generation_id),
44
54
  );
45
- const firstBand = sorted.filter((item) => item.band === 1);
55
+ const recentlyCalled = new Set(callHistory.map((call) => call.generation_id));
56
+ const uncovered = sorted.filter((item) => !recentlyCalled.has(item.generation_id));
57
+ const eligible = uncovered.length > 0 ? uncovered : sorted;
58
+ const firstBand = eligible.filter((item) => item.band === 1);
46
59
  if (firstBand.length > 0) {
47
60
  const lastIndex = firstBand.findIndex(
48
61
  (item) => item.generation_id === lastFirstBandGenerationId,
49
62
  );
50
63
  return firstBand[lastIndex >= 0 ? (lastIndex + 1) % firstBand.length : 0];
51
64
  }
52
- return sorted[0];
65
+ return eligible[0];
53
66
  }
54
67
 
55
68
  export function activeSemanticCallHistory(
@@ -92,6 +105,37 @@ export function semanticGenerationCallEligible(
92
105
  return newest === undefined || nowMs - newest >= Math.max(0, minimumIntervalMs);
93
106
  }
94
107
 
108
+ export function semanticPendingPassDue(input: {
109
+ pending: readonly SemanticPendingItem[];
110
+ callHistory: readonly SemanticCallReceipt[];
111
+ nowMs: number;
112
+ debounceMs: number;
113
+ callsPerHour?: number;
114
+ minimumGenerationCallIntervalMs?: number;
115
+ }): boolean {
116
+ const matured = input.pending.filter((item) => {
117
+ const pendingSince = Date.parse(item.pending_since);
118
+ return (
119
+ !Number.isFinite(pendingSince) || input.nowMs - pendingSince >= Math.max(0, input.debounceMs)
120
+ );
121
+ });
122
+ if (matured.length === 0) return false;
123
+
124
+ const cap = semanticRateCap(input.callHistory, input.nowMs, input.callsPerHour);
125
+ // One pass is still required at the cap so runSemanticOnce can publish
126
+ // deferred receipts and remove the matured items from the pending queue.
127
+ if (cap.available === 0) return true;
128
+
129
+ return matured.some((item) =>
130
+ semanticGenerationCallEligible(
131
+ input.callHistory,
132
+ item.generation_id,
133
+ input.nowMs,
134
+ input.minimumGenerationCallIntervalMs ?? semanticPendingCallIntervalMs(item),
135
+ ),
136
+ );
137
+ }
138
+
95
139
  export function semanticDocumentEligible(
96
140
  document: SemanticAgentReadModelV2 | undefined,
97
141
  evidence: SemanticEvidenceV1,
@@ -2,7 +2,19 @@ import { existsSync, readFileSync, statSync } from "node:fs";
2
2
  import { hostname } from "node:os";
3
3
  import { resolve } from "node:path";
4
4
 
5
- import { readSemanticManifest, semanticPaths } from "./storage.ts";
5
+ import type { SemanticHarness } from "./contract.ts";
6
+ import { SEMANTIC_READER_ROUTES } from "./routes.ts";
7
+ import {
8
+ activeSemanticCallHistory,
9
+ SEMANTIC_HARD_CALLS_PER_HOUR,
10
+ semanticRateCap,
11
+ } from "./scheduler.ts";
12
+ import { readSemanticManifest, type SemanticReaderResolution, semanticPaths } from "./storage.ts";
13
+ import {
14
+ aggregateSemanticUsage,
15
+ emptySemanticUsageAggregate,
16
+ type SemanticUsageAggregate,
17
+ } from "./usage.ts";
6
18
 
7
19
  export const SEMANTIC_SERVICE_STATUS_SCHEMA_VERSION = 1 as const;
8
20
  const FOREIGN_STATUS_STALE_MS = 2 * 60_000;
@@ -24,6 +36,7 @@ export interface SemanticServiceStatusRecord {
24
36
  pass_count: number;
25
37
  model_calls: number;
26
38
  cache_hits: number;
39
+ process_usage?: SemanticUsageAggregate;
27
40
  last_sweep_at?: string;
28
41
  last_pass_at?: string;
29
42
  last_error_code?: SemanticServiceErrorCode;
@@ -36,6 +49,23 @@ export interface SemanticServiceStatus {
36
49
  record?: SemanticServiceStatusRecord;
37
50
  newest_successful_pass?: string;
38
51
  pending_count: number;
52
+ rolling_calls?: {
53
+ used: number;
54
+ limit: number;
55
+ available: number;
56
+ eligible_after?: string;
57
+ };
58
+ routes?: Array<{
59
+ harness: keyof typeof SEMANTIC_READER_ROUTES;
60
+ configured_model: string;
61
+ invocation_model_id: string;
62
+ resolved_model_id?: string;
63
+ model_attestation?: "verified" | "requested-only";
64
+ available?: boolean;
65
+ reason_code?: string;
66
+ }>;
67
+ rolling_usage?: SemanticUsageAggregate;
68
+ process_usage?: SemanticUsageAggregate;
39
69
  }
40
70
 
41
71
  /** Read-only service health. This module cannot spawn, signal, or write. */
@@ -43,12 +73,46 @@ export function readSemanticServiceStatus(coordRootRaw: string): SemanticService
43
73
  const coordRoot = resolve(coordRootRaw);
44
74
  const record = readStatusRecord(coordRoot);
45
75
  const manifest = safeManifest(coordRoot);
76
+ const now = Date.now();
77
+ const history = activeSemanticCallHistory(manifest?.call_history ?? [], now);
78
+ const limit = Math.min(
79
+ SEMANTIC_HARD_CALLS_PER_HOUR,
80
+ Math.max(1, Math.floor(record?.calls_per_hour ?? SEMANTIC_HARD_CALLS_PER_HOUR)),
81
+ );
82
+ const cap = semanticRateCap(history, now, limit);
83
+ const rollingUsage = aggregateSemanticUsage(
84
+ history.map((call) => ({
85
+ source_harness: call.source_harness,
86
+ configured_model: call.configured_model,
87
+ resolved_model_id: call.resolved_model_id,
88
+ model_attestation: call.model_attestation,
89
+ action: call.outcome,
90
+ model_call: true,
91
+ usage: call.usage,
92
+ invalid_reason_codes: call.invalid_reason_codes,
93
+ })),
94
+ );
95
+ const processUsage = record?.process_usage ?? legacyProcessUsage(record?.model_calls ?? 0);
96
+ const shared = {
97
+ ...(manifest?.newest_successful_pass
98
+ ? { newest_successful_pass: manifest.newest_successful_pass }
99
+ : {}),
100
+ pending_count: manifest?.pending.length ?? 0,
101
+ rolling_calls: {
102
+ used: history.length,
103
+ limit,
104
+ available: cap.available,
105
+ ...(cap.eligible_after ? { eligible_after: cap.eligible_after } : {}),
106
+ },
107
+ routes: semanticStatusRoutes(manifest?.adapter_resolutions),
108
+ rolling_usage: rollingUsage,
109
+ process_usage: processUsage,
110
+ };
46
111
  if (!record) {
47
112
  return {
48
113
  running: false,
49
114
  stale: false,
50
- newest_successful_pass: manifest?.newest_successful_pass,
51
- pending_count: manifest?.pending.length ?? 0,
115
+ ...shared,
52
116
  };
53
117
  }
54
118
  const running = statusOwnerIsLive(record);
@@ -56,11 +120,41 @@ export function readSemanticServiceStatus(coordRootRaw: string): SemanticService
56
120
  running,
57
121
  stale: !running && record.state !== "stopped",
58
122
  record,
59
- newest_successful_pass: manifest?.newest_successful_pass,
60
- pending_count: manifest?.pending.length ?? 0,
123
+ ...shared,
61
124
  };
62
125
  }
63
126
 
127
+ function semanticStatusRoutes(
128
+ resolutions: Partial<Record<SemanticHarness, SemanticReaderResolution>> | undefined,
129
+ ): NonNullable<SemanticServiceStatus["routes"]> {
130
+ return (Object.keys(SEMANTIC_READER_ROUTES) as Array<keyof typeof SEMANTIC_READER_ROUTES>).map(
131
+ (harness) => {
132
+ const route = SEMANTIC_READER_ROUTES[harness];
133
+ const resolution = resolutions?.[harness];
134
+ return {
135
+ harness,
136
+ configured_model: route.configured_model,
137
+ invocation_model_id: route.invocation_model_id,
138
+ ...(resolution?.resolved_model_id
139
+ ? { resolved_model_id: resolution.resolved_model_id }
140
+ : {}),
141
+ ...(resolution?.model_attestation
142
+ ? { model_attestation: resolution.model_attestation }
143
+ : {}),
144
+ ...(resolution ? { available: resolution.available } : {}),
145
+ ...(resolution?.reason_code ? { reason_code: resolution.reason_code } : {}),
146
+ };
147
+ },
148
+ );
149
+ }
150
+
151
+ function legacyProcessUsage(modelCalls: number): SemanticUsageAggregate {
152
+ const aggregate = emptySemanticUsageAggregate();
153
+ aggregate.call_count = modelCalls;
154
+ aggregate.unreported_calls = modelCalls;
155
+ return aggregate;
156
+ }
157
+
64
158
  function safeManifest(coordRoot: string) {
65
159
  try {
66
160
  return readSemanticManifest(coordRoot);
@@ -16,15 +16,23 @@ import {
16
16
  writeFileSync,
17
17
  } from "node:fs";
18
18
  import { hostname } from "node:os";
19
- import { dirname, resolve } from "node:path";
19
+ import { dirname, join, resolve } from "node:path";
20
+ import { coordEnv } from "../../lib/env.ts";
20
21
  import {
21
22
  type ReadLedgerV3SinceResult,
22
23
  readEventV3ControlState,
23
24
  readLedgerV3Since,
24
25
  } from "../events/v3/index.ts";
25
26
  import { eventV3ActiveWatchPath } from "../events/v3/reader.ts";
27
+ import {
28
+ closeProcessLoggers,
29
+ encodeBoundedLogObjectArray,
30
+ legacyLogFields,
31
+ processLogger,
32
+ } from "../storage/logger.ts";
26
33
  import type { SemanticHarness } from "./contract.ts";
27
34
  import { runSemanticOnce, type SemanticOnceReport } from "./once.ts";
35
+ import { semanticPendingPassDue } from "./scheduler.ts";
28
36
  import {
29
37
  readSemanticServiceStatus,
30
38
  SEMANTIC_SERVICE_STATUS_SCHEMA_VERSION,
@@ -32,12 +40,18 @@ import {
32
40
  type SemanticServiceStatus,
33
41
  type SemanticServiceStatusRecord,
34
42
  } from "./service-status.ts";
43
+ import { semanticSoakReadings } from "./soak.ts";
35
44
  import {
36
45
  listSemanticAgentDocuments,
37
46
  readSemanticManifest,
38
47
  semanticPaths,
39
48
  writeSemanticManifest,
40
49
  } from "./storage.ts";
50
+ import {
51
+ aggregateSemanticUsage,
52
+ emptySemanticUsageAggregate,
53
+ mergeSemanticUsageAggregates,
54
+ } from "./usage.ts";
41
55
 
42
56
  export {
43
57
  readSemanticServiceStatus,
@@ -55,6 +69,20 @@ const FOREIGN_STATUS_STALE_MS = 2 * 60_000;
55
69
  const MAX_FILE_BYTES = 512 * 1024;
56
70
  const MAX_LOG_BYTES = 512 * 1024;
57
71
  const REPEATED_ERROR_LOG_INTERVAL_MS = 60_000;
72
+ const SEMANTIC_READINGS_FIELD_MAX_BYTES = 4_096;
73
+ const SEMANTIC_READING_FIELDS = [
74
+ "subject_id",
75
+ "generated_at",
76
+ "source_harness",
77
+ "configured_model",
78
+ "resolved_model_id",
79
+ "model_attestation",
80
+ "origin",
81
+ "phase",
82
+ "phase_confidence",
83
+ "expression_cue",
84
+ "expression_confidence",
85
+ ] as const;
58
86
 
59
87
  interface SemanticServiceLease {
60
88
  pid: number;
@@ -112,11 +140,12 @@ export async function spawnSemanticService(
112
140
  }
113
141
  const paths = semanticPaths(coordRoot);
114
142
  mkdirSync(paths.root, { recursive: true, mode: 0o700 });
115
- const logFd = openSync(paths.log, "a", 0o600);
116
- chmodSync(paths.log, 0o600);
143
+ const sharedLogs = coordEnv("SHARED_LOGS") !== "0";
144
+ const logFd = sharedLogs ? undefined : openSync(paths.log, "a", 0o600);
145
+ if (logFd !== undefined) chmodSync(paths.log, 0o600);
117
146
  const harnBin = new URL("../../../bin/harn", import.meta.url).pathname;
118
147
  if (!existsSync(harnBin)) {
119
- closeSync(logFd);
148
+ if (logFd !== undefined) closeSync(logFd);
120
149
  throw new Error(`cannot find harn executable at ${harnBin}`);
121
150
  }
122
151
  const args = ["semantic", "service", "daemon", "--root", coordRoot];
@@ -127,7 +156,7 @@ export async function spawnSemanticService(
127
156
  const child = spawn(harnBin, args, {
128
157
  cwd: coordRoot,
129
158
  detached: true,
130
- stdio: ["ignore", logFd, logFd],
159
+ stdio: logFd === undefined ? ["ignore", "ignore", "ignore"] : ["ignore", logFd, logFd],
131
160
  env: {
132
161
  ...process.env,
133
162
  HARNERY_COORD_ROOT_OVERRIDE: coordRoot,
@@ -137,7 +166,7 @@ export async function spawnSemanticService(
137
166
  child.once("error", (error) => {
138
167
  spawnError = error;
139
168
  });
140
- closeSync(logFd);
169
+ if (logFd !== undefined) closeSync(logFd);
141
170
  child.unref();
142
171
  const deadline = Date.now() + 5_000;
143
172
  while (Date.now() < deadline) {
@@ -147,7 +176,10 @@ export async function spawnSemanticService(
147
176
  if (status.running && status.record?.pid === child.pid) return status;
148
177
  if (child.exitCode !== null) break;
149
178
  }
150
- throw new Error(`semantic service failed to start; inspect ${paths.log}`);
179
+ const diagnosticPath = sharedLogs
180
+ ? join(coordRoot, ".harnery", "logs", "semantic-service", "active.jsonl")
181
+ : paths.log;
182
+ throw new Error(`semantic service failed to start; inspect ${diagnosticPath}`);
151
183
  }
152
184
 
153
185
  /**
@@ -243,6 +275,7 @@ export async function runSemanticServiceDaemon(
243
275
  pass_count: 0,
244
276
  model_calls: 0,
245
277
  cache_hits: 0,
278
+ process_usage: emptySemanticUsageAggregate(),
246
279
  };
247
280
  let stopRequested = false;
248
281
  let dirtySince: number | undefined;
@@ -261,7 +294,7 @@ export async function runSemanticServiceDaemon(
261
294
  process.on("SIGTERM", requestStop);
262
295
  status.state = "running";
263
296
  writeStatus();
264
- appendSemanticServiceLog(coordRoot, { event: "service_started" });
297
+ appendSemanticServiceDiagnostic(coordRoot, { event: "service_started" });
265
298
  const heartbeat = setInterval(() => {
266
299
  try {
267
300
  writeStatus();
@@ -283,14 +316,22 @@ export async function runSemanticServiceDaemon(
283
316
  if (read.events.length > 0 || !before?.cursor) {
284
317
  dirtySince ??= sweepAt.getTime();
285
318
  }
286
- const hasPending = (before?.pending.length ?? 0) > 0;
319
+ const hasPendingPassDue = before
320
+ ? semanticPendingPassDue({
321
+ pending: before.pending,
322
+ callHistory: before.call_history,
323
+ nowMs: sweepAt.getTime(),
324
+ debounceMs,
325
+ ...(input.callsPerHour !== undefined ? { callsPerHour: input.callsPerHour } : {}),
326
+ })
327
+ : false;
287
328
  const hasEligibleDeferred = listSemanticAgentDocuments(coordRoot).some(
288
329
  (document) =>
289
330
  document.reader_outcome === "deferred" &&
290
331
  Date.parse(document.receipt.eligible_after) <= sweepAt.getTime(),
291
332
  );
292
333
  if (
293
- hasPending ||
334
+ hasPendingPassDue ||
294
335
  hasEligibleDeferred ||
295
336
  (dirtySince !== undefined && sweepAt.getTime() - dirtySince >= debounceMs)
296
337
  ) {
@@ -303,6 +344,10 @@ export async function runSemanticServiceDaemon(
303
344
  status.pass_count += 1;
304
345
  status.model_calls += report.model_calls;
305
346
  status.cache_hits += report.cache_hits;
347
+ status.process_usage = mergeSemanticUsageAggregates(
348
+ status.process_usage ?? emptySemanticUsageAggregate(),
349
+ aggregateSemanticUsage(report.outcomes),
350
+ );
306
351
  status.last_pass_at = report.completed_at;
307
352
  status.last_error_code = undefined;
308
353
  lastLoggedErrorCode = undefined;
@@ -324,9 +369,11 @@ export async function runSemanticServiceDaemon(
324
369
  invalid: report.outcomes.filter((outcome) => outcome.action === "invalid").length,
325
370
  deferred: report.outcomes.filter((outcome) => outcome.action === "deferred").length,
326
371
  harness_metrics: semanticHarnessMetrics(report),
372
+ usage: aggregateSemanticUsage(report.outcomes),
373
+ semantic_readings: semanticSoakReadings(coordRoot, report.outcomes),
327
374
  };
328
375
  if (report.model_calls > 0 || report.cache_hits > 0 || logEntry.unavailable > 0) {
329
- appendSemanticServiceLog(coordRoot, logEntry);
376
+ appendSemanticServiceDiagnostic(coordRoot, logEntry);
330
377
  }
331
378
  }
332
379
  } catch (error) {
@@ -335,7 +382,7 @@ export async function runSemanticServiceDaemon(
335
382
  status.last_error_code !== lastLoggedErrorCode ||
336
383
  sweepAt.getTime() - lastLoggedErrorAt >= REPEATED_ERROR_LOG_INTERVAL_MS
337
384
  ) {
338
- appendSemanticServiceLog(coordRoot, {
385
+ appendSemanticServiceDiagnostic(coordRoot, {
339
386
  event: "sweep_error",
340
387
  reason_code: status.last_error_code,
341
388
  });
@@ -358,13 +405,18 @@ export async function runSemanticServiceDaemon(
358
405
  status.state = "stopped";
359
406
  status.stopped_at = now().toISOString();
360
407
  writeStatus();
361
- appendSemanticServiceLog(coordRoot, {
408
+ appendSemanticServiceDiagnostic(coordRoot, {
362
409
  event: "service_stopped",
363
410
  sweeps: status.sweep_count,
364
411
  passes: status.pass_count,
365
412
  model_calls: status.model_calls,
413
+ usage: status.process_usage,
366
414
  });
367
- release();
415
+ try {
416
+ await closeProcessLoggers();
417
+ } finally {
418
+ release();
419
+ }
368
420
  }
369
421
  return status;
370
422
  }
@@ -534,7 +586,56 @@ async function waitForLedgerWake(path: string, milliseconds: number): Promise<vo
534
586
  });
535
587
  }
536
588
 
537
- function appendSemanticServiceLog(coordRoot: string, entry: Record<string, unknown>): void {
589
+ export function appendSemanticServiceDiagnostic(
590
+ coordRoot: string,
591
+ entry: Record<string, unknown>,
592
+ ): "shared" | "legacy" {
593
+ const prepared = prepareSemanticServiceDiagnostic(entry);
594
+ if (coordEnv("SHARED_LOGS") !== "0") {
595
+ try {
596
+ const logger = processLogger(coordRoot, "semantic-service");
597
+ if (prepared.event.includes("error")) {
598
+ logger.error(prepared.event, legacyLogFields(prepared.fields));
599
+ } else logger.info(prepared.event, legacyLogFields(prepared.fields));
600
+ return "shared";
601
+ } catch {
602
+ // Bootstrap failures retain the bounded legacy writer as the process fallback.
603
+ }
604
+ }
605
+ appendSemanticServiceLegacyLog(coordRoot, prepared.legacyEntry);
606
+ return "legacy";
607
+ }
608
+
609
+ function prepareSemanticServiceDiagnostic(entry: Record<string, unknown>): {
610
+ event: string;
611
+ fields: Record<string, unknown>;
612
+ legacyEntry: Record<string, unknown>;
613
+ } {
614
+ const event = typeof entry.event === "string" ? entry.event : "service_event";
615
+ const fields = { ...entry };
616
+ delete fields.event;
617
+ const legacyEntry: Record<string, unknown> = { ...entry, event };
618
+ const semanticReadings = fields.semantic_readings;
619
+ if (semanticReadings === undefined) return { event, fields, legacyEntry };
620
+ if (!Array.isArray(semanticReadings)) throw new Error("semantic_readings must be an array");
621
+ const bounded = encodeBoundedLogObjectArray(semanticReadings, {
622
+ max_bytes: SEMANTIC_READINGS_FIELD_MAX_BYTES,
623
+ allowed_fields: SEMANTIC_READING_FIELDS,
624
+ });
625
+ fields.semantic_readings = bounded.json;
626
+ fields.semantic_readings_count = bounded.included;
627
+ legacyEntry.semantic_readings = JSON.parse(bounded.json) as unknown[];
628
+ legacyEntry.semantic_readings_count = bounded.included;
629
+ if (bounded.truncated) {
630
+ fields.semantic_readings_truncated = true;
631
+ fields.semantic_readings_omitted = bounded.omitted;
632
+ legacyEntry.semantic_readings_truncated = true;
633
+ legacyEntry.semantic_readings_omitted = bounded.omitted;
634
+ }
635
+ return { event, fields, legacyEntry };
636
+ }
637
+
638
+ function appendSemanticServiceLegacyLog(coordRoot: string, entry: Record<string, unknown>): void {
538
639
  const path = semanticPaths(coordRoot).log;
539
640
  mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
540
641
  appendFileSync(