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
@@ -11,11 +11,12 @@
11
11
  * Exits 0 unless a required dep is missing.
12
12
  */
13
13
  import { spawnSync } from "node:child_process";
14
- import { existsSync } from "node:fs";
14
+ import { existsSync, readdirSync, readFileSync } from "node:fs";
15
15
  import os from "node:os";
16
16
  import path from "node:path";
17
17
  import { BUILTIN_ADAPTER_IDS } from "../core/adapters/index.js";
18
18
  import { resolveBinName, ripgrepAutoInstall } from "../core/config.js";
19
+ import { countSummarizedSinceV3, listDiagnosticSummariesV3, } from "../core/events/v3/producers/diagnostic-summaries.js";
19
20
  import { ADAPTER_SPECS } from "../core/hooks/adapter/events.js";
20
21
  import { loadAdapterWiring, summarizeAdapterWiring } from "../core/hooks/adapter/wiring.js";
21
22
  import { probeCodexHookAuthorization, } from "../core/hooks/codex-authorization.js";
@@ -69,8 +70,10 @@ export function registerDoctorCommand(program, emit) {
69
70
  });
70
71
  }
71
72
  export async function runChecks() {
73
+ const root = findCoordProjectRoot();
72
74
  const codexWslStatus = inspectCodexWslBridge();
73
- const codexWslBridge = checkCodexWslBridge(codexWslStatus);
75
+ const recentCodexMidFlightCount = root ? countRecentCodexMidFlightOnboardings(root) : 0;
76
+ const codexWslBridge = codexWslBridgeCheck(codexWslStatus, recentCodexMidFlightCount);
74
77
  // Probe the adapter CLIs before the hook check runs, not in output order:
75
78
  // an unwired adapter only matters if its CLI is actually installed, and
76
79
  // probing once here keeps that join to one spawn per CLI.
@@ -123,18 +126,59 @@ function checkGitHookRegions() {
123
126
  };
124
127
  }
125
128
  }
126
- function checkCodexWslBridge(status) {
127
- if (!status)
129
+ export function codexWslBridgeCheck(status, recentMidFlightCount = 0) {
130
+ if (!status && recentMidFlightCount === 0)
128
131
  return null;
132
+ const historical = recentMidFlightCount === 0
133
+ ? null
134
+ : `${recentMidFlightCount} Codex mid-flight onboarding${recentMidFlightCount === 1 ? "" : "s"} recorded in the last 48h`;
129
135
  return {
130
136
  name: "codex:WSL bridge",
131
- severity: status.ok ? "ok" : "warn",
132
- detail: status.detail,
133
- hint: status.ok
137
+ severity: status?.ok && !historical ? "ok" : "warn",
138
+ detail: [status?.detail, historical].filter(Boolean).join("; "),
139
+ hint: status?.ok && !historical
134
140
  ? undefined
135
141
  : "forward CODEX_THREAD_ID through WSLENV in the Codex shell environment policy, then start a fresh task",
136
142
  };
137
143
  }
144
+ const CODEX_MID_FLIGHT_HISTORY_WINDOW_MS = 48 * 60 * 60 * 1000;
145
+ /** Count bounded, privacy-safe recovery diagnostics so a healthy environment
146
+ * now does not hide an intermittent Codex-to-WSL identity drop. */
147
+ export function countRecentCodexMidFlightOnboardings(coordRoot, nowMs = Date.now(), windowMs = CODEX_MID_FLIGHT_HISTORY_WINDOW_MS) {
148
+ // Occurrences past the producer's loose-exemplar bound live in summary
149
+ // files instead of loose diagnostics; count them too so the mitigation
150
+ // cannot hide an active Codex identity drop from this warning.
151
+ let count = 0;
152
+ try {
153
+ const listing = listDiagnosticSummariesV3(coordRoot);
154
+ count += countSummarizedSinceV3(listing.summaries, nowMs - windowMs, (summary) => summary.category === "mid_flight_onboarding" && summary.metadata.adapter === "codex", nowMs);
155
+ }
156
+ catch {
157
+ // Summary reads are best-effort; loose diagnostics below still count.
158
+ }
159
+ const directory = path.join(coordRoot, ".harnery", "ledgers", "v3", "diagnostics");
160
+ if (!existsSync(directory))
161
+ return count;
162
+ for (const name of readdirSync(directory)) {
163
+ if (!name.startsWith("mid_flight_onboarding-") || !name.endsWith(".json"))
164
+ continue;
165
+ try {
166
+ const row = JSON.parse(readFileSync(path.join(directory, name), "utf8"));
167
+ const recordedAt = typeof row.recorded_at === "string" ? Date.parse(row.recorded_at) : NaN;
168
+ if (row.category === "mid_flight_onboarding" &&
169
+ row.adapter === "codex" &&
170
+ Number.isFinite(recordedAt) &&
171
+ recordedAt <= nowMs &&
172
+ nowMs - recordedAt <= windowMs) {
173
+ count += 1;
174
+ }
175
+ }
176
+ catch {
177
+ // A malformed best-effort diagnostic cannot make doctor fail.
178
+ }
179
+ }
180
+ return count;
181
+ }
138
182
  export function codexAuthorizationCheck(result) {
139
183
  const reviewHint = "terminal UI: run `/hooks`; Codex Desktop: open Settings > Hooks; after approval, start a fresh task";
140
184
  if (result.status === "runnable") {
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/commands/events.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAkC1E,uEAAuE;AACvE,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,EACjB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,CA+CN"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/commands/events.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAmC1E,uEAAuE;AACvE,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,EACjB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,CA+CN"}
@@ -72,6 +72,7 @@ function summarizeByGeneration(turns) {
72
72
  tool_ms: sumMetrics(group.map(({ tool_ms }) => tool_ms)),
73
73
  command_ms: sumMetrics(group.map(({ command_exclusive_ms }) => command_exclusive_ms)),
74
74
  wait_ms: sumMetrics(group.map(({ wait_ms }) => wait_ms)),
75
+ agent_action_ms: sumMetrics(group.map(({ response_latency }) => response_latency.agent_action_ms)),
75
76
  inference_ms: sumMetrics(group.map(({ inference_ms }) => inference_ms)),
76
77
  harness_ms: sumMetrics(group.map(({ harness_ms }) => harness_ms)),
77
78
  residual_ms: sumMetrics(group.map(({ residual_ms }) => residual_ms)),
@@ -129,6 +130,8 @@ function renderTurns(turns) {
129
130
  "TOOL",
130
131
  "COMMAND",
131
132
  "WAIT",
133
+ "ACTION",
134
+ "POST-TOOL",
132
135
  "INFERENCE",
133
136
  "HARNESS",
134
137
  "RESIDUAL",
@@ -140,6 +143,8 @@ function renderTurns(turns) {
140
143
  formatMetric(turn.tool_ms),
141
144
  formatMetric(turn.command_exclusive_ms),
142
145
  formatMetric(turn.wait_ms),
146
+ formatMetric(turn.response_latency.agent_action_ms),
147
+ formatMetric(turn.response_latency.post_tool_response_ms),
143
148
  formatMetric(turn.inference_ms),
144
149
  formatMetric(turn.harness_ms),
145
150
  formatMetric(turn.residual_ms),
@@ -147,13 +152,25 @@ function renderTurns(turns) {
147
152
  ]));
148
153
  }
149
154
  function renderGenerations(rows) {
150
- return renderTable(["GENERATION", "TURNS", "WALL", "TOOL", "COMMAND", "WAIT", "INFERENCE", "HARNESS", "RESIDUAL"], rows.map((row) => [
155
+ return renderTable([
156
+ "GENERATION",
157
+ "TURNS",
158
+ "WALL",
159
+ "TOOL",
160
+ "COMMAND",
161
+ "WAIT",
162
+ "ACTION",
163
+ "INFERENCE",
164
+ "HARNESS",
165
+ "RESIDUAL",
166
+ ], rows.map((row) => [
151
167
  row.generation_id,
152
168
  String(row.turns),
153
169
  formatMetric(row.wall_ms),
154
170
  formatMetric(row.tool_ms),
155
171
  formatMetric(row.command_ms),
156
172
  formatMetric(row.wait_ms),
173
+ formatMetric(row.agent_action_ms),
157
174
  formatMetric(row.inference_ms),
158
175
  formatMetric(row.harness_ms),
159
176
  formatMetric(row.residual_ms),
@@ -63,13 +63,14 @@ async function runFetch(url, opts, emit, context) {
63
63
  redirect: opts.redirect,
64
64
  signal: ac.signal,
65
65
  extraHeaders: context?.extraHeaders,
66
+ responseType: "bytes",
66
67
  });
67
68
  }
68
69
  finally {
69
70
  clearTimeout(timer);
70
71
  }
71
72
  if (opts.json) {
72
- emit.data(result);
73
+ emit.data({ ...result, body: new TextDecoder().decode(result.body) });
73
74
  return;
74
75
  }
75
76
  if (opts.status) {
@@ -83,15 +84,15 @@ async function runFetch(url, opts, emit, context) {
83
84
  if (opts.output) {
84
85
  writeFileSync(opts.output, result.body);
85
86
  emit.file(opts.output, {
86
- bytes: result.body.length,
87
+ bytes: result.body.byteLength,
87
88
  status: result.status,
88
89
  status_text: result.statusText,
89
90
  });
90
91
  }
91
92
  else {
92
- // Body is potentially binary; route as text since most fetch responses
93
- // are text/HTML/JSON. Binary callers should use --output.
94
- emit.text(result.body);
93
+ // Text destinations decode at the presentation boundary. File output
94
+ // above keeps the response bytes intact regardless of MIME type.
95
+ emit.text(new TextDecoder().decode(result.body));
95
96
  }
96
97
  if (jar && result.cookiesSaved > 0) {
97
98
  emit.log(`saved ${result.cookiesSaved} cookie${result.cookiesSaved === 1 ? "" : "s"} to ${jar.path}`, "info");
@@ -0,0 +1,22 @@
1
+ import type { Command } from "commander";
2
+ import type { EmitContext, HarneryProgramContext } from "../commander.js";
3
+ export { FILES_ORIGIN_HOST } from "../lib/local-file-url.js";
4
+ export type LocalFileUrlMode = "auto" | "raw" | "viewer";
5
+ export interface LocalFileUrlOptions {
6
+ coordRoot: string;
7
+ port: number;
8
+ mode?: LocalFileUrlMode;
9
+ }
10
+ export interface LocalFileUrl {
11
+ url: string;
12
+ relPath: string;
13
+ mode: Exclude<LocalFileUrlMode, "auto">;
14
+ }
15
+ /**
16
+ * Mint the local browser URL for a file under the dashboard's coord root.
17
+ * HTML defaults to the isolated files origin so scripts and relative assets
18
+ * work. Other files default to the dashboard viewer.
19
+ */
20
+ export declare function mintLocalFileUrl(input: string, options: LocalFileUrlOptions): LocalFileUrl;
21
+ export declare function registerFilesCommand(program: Command, emit: EmitContext, context?: HarneryProgramContext): void;
22
+ //# sourceMappingURL=files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/commands/files.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAK1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEzD,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,gBAAgB,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;CACzC;AAuCD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,YAAY,CAS1F;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,EACjB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,CA6DN"}
@@ -0,0 +1,113 @@
1
+ import { realpathSync, statSync } from "node:fs";
2
+ import path from "node:path";
3
+ import { resolveCoordRoot } from "../core/agents/coord-client.js";
4
+ import { DEFAULT_WEB_PORT, resolveWebPort } from "../core/config.js";
5
+ import { localFilesOriginUrl, localFileViewerUrl } from "../lib/local-file-url.js";
6
+ export { FILES_ORIGIN_HOST } from "../lib/local-file-url.js";
7
+ function isOutsideRoot(relPath) {
8
+ return relPath === "" || relPath === ".." || relPath.startsWith(`..${path.sep}`);
9
+ }
10
+ function canonicalRepoPath(input, coordRoot) {
11
+ if (input.trim() === "")
12
+ throw new Error("path must not be empty");
13
+ // biome-ignore lint/suspicious/noControlCharactersInRegex: URL output must stay one clean line
14
+ if (/[\u0000-\u001f\u007f]/.test(input))
15
+ throw new Error("path contains control bytes");
16
+ let root;
17
+ try {
18
+ root = realpathSync(coordRoot);
19
+ }
20
+ catch {
21
+ throw new Error(`coord root does not exist: ${coordRoot}`);
22
+ }
23
+ const candidate = path.isAbsolute(input) ? input : path.resolve(root, input);
24
+ let canonical;
25
+ try {
26
+ canonical = realpathSync(candidate);
27
+ }
28
+ catch {
29
+ throw new Error(`file does not exist: ${input}`);
30
+ }
31
+ const relPath = path.relative(root, canonical);
32
+ if (isOutsideRoot(relPath) || path.isAbsolute(relPath)) {
33
+ throw new Error(`file is outside the coord root: ${input}`);
34
+ }
35
+ if (!statSync(canonical).isFile())
36
+ throw new Error(`path is not a file: ${input}`);
37
+ return relPath.split(path.sep).join("/");
38
+ }
39
+ function isHtmlPath(relPath) {
40
+ const lower = relPath.toLowerCase();
41
+ return lower.endsWith(".html") || lower.endsWith(".htm");
42
+ }
43
+ /**
44
+ * Mint the local browser URL for a file under the dashboard's coord root.
45
+ * HTML defaults to the isolated files origin so scripts and relative assets
46
+ * work. Other files default to the dashboard viewer.
47
+ */
48
+ export function mintLocalFileUrl(input, options) {
49
+ const relPath = canonicalRepoPath(input, options.coordRoot);
50
+ const requestedMode = options.mode ?? "auto";
51
+ const mode = requestedMode === "auto" ? (isHtmlPath(relPath) ? "raw" : "viewer") : requestedMode;
52
+ const url = mode === "raw"
53
+ ? localFilesOriginUrl(relPath, options.port)
54
+ : localFileViewerUrl(relPath, options.port);
55
+ return { url, relPath, mode };
56
+ }
57
+ export function registerFilesCommand(program, emit, context) {
58
+ const files = program
59
+ .command("files")
60
+ .description("Mint browser links for files served by the local dashboard");
61
+ files
62
+ .command("url")
63
+ .description("Mint the local browser URL for a repo file")
64
+ .argument("<path>", "Repo-relative path, or an absolute path inside the coord root")
65
+ .option("-p, --port <port>", `Dashboard port (default ${DEFAULT_WEB_PORT})`)
66
+ .option("--coord-root <dir>", "Override the coord root")
67
+ .option("--raw", "Use the isolated files origin, regardless of extension")
68
+ .option("--viewer", "Use the dashboard file viewer, regardless of extension")
69
+ .action((filePath, opts) => {
70
+ if (opts.raw && opts.viewer) {
71
+ emit.error({
72
+ code: "conflicting_url_modes",
73
+ message: "--raw and --viewer cannot be used together",
74
+ });
75
+ emit.setExitCode(1);
76
+ return;
77
+ }
78
+ const coordRoot = opts.coordRoot ??
79
+ context?.resolveCoordRoot?.() ??
80
+ context?.repoRoot ??
81
+ resolveCoordRoot(process.cwd()) ??
82
+ process.cwd();
83
+ let port;
84
+ try {
85
+ port = resolveWebPort(opts.port, coordRoot);
86
+ }
87
+ catch (error) {
88
+ emit.error({
89
+ code: "invalid_web_port",
90
+ message: error instanceof Error ? error.message : "invalid web port",
91
+ hint: `Use an integer from 1024 through 65535; the default is ${DEFAULT_WEB_PORT}.`,
92
+ });
93
+ emit.setExitCode(1);
94
+ return;
95
+ }
96
+ try {
97
+ const result = mintLocalFileUrl(filePath, {
98
+ coordRoot,
99
+ port,
100
+ mode: opts.raw ? "raw" : opts.viewer ? "viewer" : "auto",
101
+ });
102
+ emit.text(`${result.url}\n`);
103
+ }
104
+ catch (error) {
105
+ emit.error({
106
+ code: "invalid_local_file",
107
+ message: error instanceof Error ? error.message : "invalid local file path",
108
+ hint: "Pass an existing file inside the dashboard coord root.",
109
+ });
110
+ emit.setExitCode(1);
111
+ }
112
+ });
113
+ }
@@ -1,10 +1,11 @@
1
- import { existsSync, readFileSync } from "node:fs";
1
+ import { readFileSync } from "node:fs";
2
2
  import { dirname, isAbsolute, resolve } from "node:path";
3
3
  import { adapterProofInputs, createBuiltinAdapterRegistry, probeBinaryVersion, readAttestation, } from "../core/adapters/index.js";
4
+ import { resolveCoordRoot } from "../core/agents/coord-client.js";
4
5
  import { workflowSubscriptionOnly } from "../core/config.js";
5
6
  import { inspectAdapterSpread } from "../core/governor/adapter-spread.js";
6
- import { approveGovernorPlan, configureGovernorService, createGovernor, governorServiceLogPath, listGovernorsWithWarnings, readGovernor, readGovernorPlan, readGovernorServiceConfig, readGovernorServiceStatus, rejectGovernorPlan, requestGovernorServiceStop, retryGovernorPlan, runGovernor, runGovernorServiceDaemon, spawnGovernorService, } from "../core/governor/index.js";
7
- import { findCoordRoot } from "../core/hooks/resolve/coord-root.js";
7
+ import { approveGovernorPlan, configureGovernorService, createGovernor, listGovernorsWithWarnings, readGovernor, readGovernorPlan, readGovernorServiceConfig, readGovernorServiceStatus, rejectGovernorPlan, requestGovernorServiceStop, retryGovernorPlan, runGovernor, runGovernorServiceDaemon, spawnGovernorService, } from "../core/governor/index.js";
8
+ import { readGovernorServiceLogs } from "../core/governor/service-read.js";
8
9
  import { loadPolicyFile } from "../core/policy/index.js";
9
10
  export function registerGovernorCommand(program, emit) {
10
11
  const registry = createBuiltinAdapterRegistry();
@@ -266,16 +267,17 @@ function registerServiceCommand(governor, registry, emit) {
266
267
  const lines = integer(opts.lines) ?? 50;
267
268
  if (lines > 10_000)
268
269
  throw new Error("service log lines must not exceed 10000");
269
- const path = governorServiceLogPath(coordRoot);
270
- if (!existsSync(path)) {
270
+ const result = readGovernorServiceLogs(coordRoot, {
271
+ max_bytes: 512 * 1024,
272
+ max_records: 10_000,
273
+ });
274
+ if (result.lines.length === 0) {
271
275
  emit.text("no governor service log\n");
272
276
  return;
273
277
  }
274
- const selected = readFileSync(path, "utf8")
275
- .split("\n")
276
- .slice(-(lines + 1))
277
- .join("\n");
278
- emit.text(selected.endsWith("\n") ? selected : `${selected}\n`);
278
+ emit.text(`${result.lines.slice(-lines).join("\n")}\n`);
279
+ if (result.truncated)
280
+ emit.log("governor service log read stopped at its bounded budget", "warn");
279
281
  });
280
282
  });
281
283
  service
@@ -706,7 +708,7 @@ function delay(ms) {
706
708
  return new Promise((resolveDelay) => setTimeout(resolveDelay, ms));
707
709
  }
708
710
  function withGovernorRoot(emit, fn) {
709
- const coordRoot = findCoordRoot();
711
+ const coordRoot = resolveCoordRoot();
710
712
  if (!coordRoot) {
711
713
  emit.error({
712
714
  code: "no_coord_root",
@@ -724,7 +726,7 @@ function withGovernorRoot(emit, fn) {
724
726
  }
725
727
  }
726
728
  async function withGovernorRootAsync(emit, fn) {
727
- const coordRoot = findCoordRoot();
729
+ const coordRoot = resolveCoordRoot();
728
730
  if (!coordRoot) {
729
731
  emit.error({
730
732
  code: "no_coord_root",
@@ -0,0 +1,5 @@
1
+ import type { Command } from "commander";
2
+ import type { EmitContext } from "../commander.js";
3
+ import type { HarneryInboxService } from "../core/inbox/service.js";
4
+ export declare function registerInboxCommand(program: Command, emit: EmitContext, service?: HarneryInboxService): void;
5
+ //# sourceMappingURL=inbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../src/commands/inbox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,EACjB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,IAAI,CAmCN"}
@@ -0,0 +1,57 @@
1
+ export function registerInboxCommand(program, emit, service) {
2
+ const inbox = program.command("inbox").description("Inspect private coordination inbox state");
3
+ inbox
4
+ .command("list <recipient>")
5
+ .option("--json", "Emit stable JSON")
6
+ .action((recipient, options) => {
7
+ run(emit, () => {
8
+ const rows = requireInboxService(service)
9
+ .pending(recipient)
10
+ .map((record) => ({
11
+ message_id: record.message_id,
12
+ sender_instance_id: record.sender_instance_id,
13
+ sender_display_name: record.sender_display_name,
14
+ created_at: record.created_at,
15
+ body_bytes: record.body_bytes,
16
+ body: record.body,
17
+ }));
18
+ if (options.json) {
19
+ emit.config({ format: "json" });
20
+ emit.data({ schema: "harnery.inbox-list/v1", recipient_instance_id: recipient, rows });
21
+ }
22
+ else
23
+ emit.rows(rows);
24
+ });
25
+ });
26
+ inbox
27
+ .command("status <recipient>")
28
+ .option("--json", "Emit stable JSON")
29
+ .action((recipient, options) => {
30
+ run(emit, () => {
31
+ const status = requireInboxService(service).status(recipient);
32
+ if (options.json) {
33
+ emit.config({ format: "json" });
34
+ emit.data(status);
35
+ }
36
+ else
37
+ emit.rows([status]);
38
+ });
39
+ });
40
+ }
41
+ function requireInboxService(service) {
42
+ if (!service)
43
+ throw new Error("coordination inbox is not configured by this host");
44
+ return service;
45
+ }
46
+ function run(emit, action) {
47
+ try {
48
+ action();
49
+ }
50
+ catch (error) {
51
+ emit.error({
52
+ code: "inbox_failed",
53
+ message: error instanceof Error ? error.message : String(error),
54
+ });
55
+ emit.setExitCode(1);
56
+ }
57
+ }
@@ -22,12 +22,11 @@ import { type AdapterId, type AdapterSpec } from "../core/hooks/adapter/events.j
22
22
  import { type SettingsFile } from "../core/hooks/adapter/wiring.js";
23
23
  export declare function registerInitCommand(program: Command, emit: EmitContext, binName?: string): void;
24
24
  /**
25
- * Runtime gates bound into an immutable V3 epoch. `init` is the explicit
26
- * upgrade boundary: when code or capability profiles change, it archives the
27
- * old epoch intact and activates a compatible one instead of letting upgraded
28
- * hooks fail closed against stale approvals.
25
+ * Runtime contracts bound into an immutable V3 epoch. `init` replaces the
26
+ * epoch only when the schema or adapter capability contract changed. A new
27
+ * Harnery build alone keeps the current epoch and its live session generations.
29
28
  */
30
- export declare function eventLedgerV3RuntimeIssues(control: EventV3ControlState, harneryBuild: string): string[];
29
+ export declare function eventLedgerV3RuntimeIssues(control: EventV3ControlState): string[];
31
30
  export declare function codexHookReviewAction(adapter: AdapterId): string | null;
32
31
  /**
33
32
  * Merge agent-hook entries into a adapter settings object in place, idempotently.
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAOH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAInD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAQxE,OAAO,EAAiB,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAClG,OAAO,EASL,KAAK,YAAY,EAClB,MAAM,iCAAiC,CAAC;AAmBzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CA+P/F;AAiBD;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,mBAAmB,EAC5B,YAAY,EAAE,MAAM,GACnB,MAAM,EAAE,CAoBV;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAOvE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CACvB,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAE,WAAW,EACjB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,SAAS,GACjB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CA8CvE;AAwFD;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,YAAY,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAa1F;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAmDhG;AASD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAkCxF"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAOH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAInD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAOxE,OAAO,EAAiB,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAClG,OAAO,EASL,KAAK,YAAY,EAClB,MAAM,iCAAiC,CAAC;AAqBzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAgT/F;AAiBD;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,EAAE,CAiBjF;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAOvE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CACvB,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAE,WAAW,EACjB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,SAAS,GACjB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CA8CvE;AAwFD;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,YAAY,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAa1F;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAmDhG;AASD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAkCxF"}
@@ -25,9 +25,9 @@ import { canonicalJsonV3 } from "../core/events/v3/canonical.js";
25
25
  import { ADAPTER_CAPABILITY_PROFILES_V3 } from "../core/events/v3/capabilities.js";
26
26
  import { EVENT_V3_SCHEMA_DIGEST } from "../core/events/v3/generated.js";
27
27
  import { initializeEventLedgerV3, readEventV3ControlState, sha256V3, } from "../core/events/v3/index.js";
28
- import { liveEventV3BuildId } from "../core/events/v3/live-routing.js";
29
28
  import { ADAPTER_SPECS } from "../core/hooks/adapter/events.js";
30
29
  import { agentHookPathForProject, commandWiresSubcommand, diffWiring, groupCommands, hookCommand, isAgentHookCommand, makeEntry, } from "../core/hooks/adapter/wiring.js";
30
+ import { applyIndexerExclusions } from "../lib/indexer-exclusions.js";
31
31
  import { applyInstructions, checkInstructions, } from "../lib/instructions/apply.js";
32
32
  import { applyGitHooks, checkGitHooks } from "../lib/instructions/git-hooks.js";
33
33
  import { HostAddendumError } from "../lib/instructions/host-addendum.js";
@@ -42,7 +42,8 @@ export function registerInitCommand(program, emit, binName) {
42
42
  "report drift without writing (exit 0 fresh / 2 drift / 1 error).")
43
43
  .option("--adapter <id>", "claude-code | cursor | codex", "claude-code")
44
44
  .option("--dry-run", "Show what would change without writing")
45
- .option("--check", "Report instructions/skills drift without writing; exit 0/2/1")
45
+ .option("--check", "Report managed-surface drift without writing; exit 0/2/1")
46
+ .option("--instructions-only", "Refresh only AGENTS.md regions and Harnery-owned skills; leave runtime wiring untouched")
46
47
  .option("--project-root <path>", "Project root (default: git toplevel, else cwd)")
47
48
  .action((opts) => {
48
49
  const adapter = opts.adapter;
@@ -59,6 +60,41 @@ export function registerInitCommand(program, emit, binName) {
59
60
  // init inside any checkout). Without this, re-running init from a host
60
61
  // CLI re-stamps the host's name into committed agent-facing surfaces.
61
62
  const bin = pinnedBinName(projectRoot) ?? (binName?.trim() ? binName : DEFAULT_BIN_NAME);
63
+ // ── --instructions-only: committed guidance, never runtime wiring ────
64
+ // Some hosts consume Harnery's managed instruction bundle without
65
+ // enabling local adapter hooks or an event ledger. Keep this branch
66
+ // before every coord-root, config, ledger, adapter-settings, and Git-hook
67
+ // operation so its no-runtime-writes contract is structural.
68
+ if (opts.instructionsOnly === true) {
69
+ if (opts.check === true) {
70
+ const { status, issues } = checkInstructions(projectRoot, { binName: bin, adapter });
71
+ const head = status === "fresh"
72
+ ? `${bin} init --instructions-only --check: instructions + skills are current`
73
+ : status === "drift"
74
+ ? `${bin} init --instructions-only --check: drift found (re-run \`init --instructions-only\` to refresh)`
75
+ : `${bin} init --instructions-only --check: error`;
76
+ const lines = issues.length
77
+ ? `\n${issues.map((issue) => ` ✗ ${issue}`).join("\n")}`
78
+ : "";
79
+ emit.text(`${head}${lines}`);
80
+ emit.setExitCode(status === "fresh" ? 0 : status === "drift" ? 2 : 1);
81
+ return;
82
+ }
83
+ const dryRun = opts.dryRun === true;
84
+ let applied;
85
+ try {
86
+ applied = applyInstructions(projectRoot, { binName: bin, adapter, dryRun });
87
+ }
88
+ catch (err) {
89
+ if (!(err instanceof HostAddendumError))
90
+ throw err;
91
+ emit.text(`${bin} init --instructions-only: ${err.message}`);
92
+ emit.setExitCode(1);
93
+ return;
94
+ }
95
+ emit.text(renderInstructionsOnly(projectRoot, bin, dryRun, applied.actions, applied.warnings));
96
+ return;
97
+ }
62
98
  // ── --check: read-only drift report on every init-managed surface ─────
63
99
  if (opts.check === true) {
64
100
  const { status, issues } = checkInstructions(projectRoot, { binName: bin, adapter });
@@ -115,7 +151,7 @@ export function registerInitCommand(program, emit, binName) {
115
151
  const ledger = readEventV3ControlState(projectRoot);
116
152
  if (ledger.state !== "active")
117
153
  issues.push(`event ledger V3 is ${ledger.state}`);
118
- const ledgerRuntimeIssues = eventLedgerV3RuntimeIssues(ledger, gitBuild(HARNERY_ROOT));
154
+ const ledgerRuntimeIssues = eventLedgerV3RuntimeIssues(ledger);
119
155
  if (ledgerRuntimeIssues.length > 0) {
120
156
  issues.push(`event ledger V3 is runtime-stale (${ledgerRuntimeIssues.join(", ")})`);
121
157
  }
@@ -153,6 +189,12 @@ export function registerInitCommand(program, emit, binName) {
153
189
  writeFileSync(resolve(coordDir, ".gitignore"), "*\n!.gitignore\n");
154
190
  actions.push("+ created .harnery/ (+ .harnery/.gitignore)");
155
191
  }
192
+ // ── 1a′. editor indexer exclusions ─────────────────────────────────────
193
+ // .harnery/.gitignore keeps git-aware tools out, but Cursor's codebase
194
+ // indexer and the VS Code/Cursor file watcher do not respect gitignore.
195
+ // A busy coord root holds enough ledger events and artifacts to become a
196
+ // boot-time indexing storm, so exclude it from both here.
197
+ actions.push(...applyIndexerExclusions(projectRoot, dryRun));
156
198
  // ── 1b. stamp the host bin name ────────────────────────────────────────
157
199
  // The coord binaries (agent-hook/agent-coord) and web UI run as harnery
158
200
  // itself, so they can't see a consumer CLI's name; they read it back from
@@ -179,7 +221,7 @@ export function registerInitCommand(program, emit, binName) {
179
221
  // ── 1d. universal V3 event ledger ────────────────────────────────────
180
222
  if (dryRun) {
181
223
  const ledger = readEventV3ControlState(projectRoot);
182
- const runtimeIssues = eventLedgerV3RuntimeIssues(ledger, gitBuild(HARNERY_ROOT));
224
+ const runtimeIssues = eventLedgerV3RuntimeIssues(ledger);
183
225
  actions.push(ledger.state === "active" && runtimeIssues.length === 0
184
226
  ? "· event ledger V3 is active"
185
227
  : ledger.state === "active"
@@ -189,7 +231,7 @@ export function registerInitCommand(program, emit, binName) {
189
231
  else {
190
232
  const harneryBuild = gitBuild(HARNERY_ROOT);
191
233
  const ledgerBefore = readEventV3ControlState(projectRoot);
192
- const runtimeIssues = eventLedgerV3RuntimeIssues(ledgerBefore, harneryBuild);
234
+ const runtimeIssues = eventLedgerV3RuntimeIssues(ledgerBefore);
193
235
  const initialized = initializeEventLedgerV3({
194
236
  coordRoot: projectRoot,
195
237
  harneryBuild,
@@ -278,12 +320,11 @@ function digestConfig(path) {
278
320
  return sha256V3(existsSync(path) ? readFileSync(path) : Buffer.from("{}\n"));
279
321
  }
280
322
  /**
281
- * Runtime gates bound into an immutable V3 epoch. `init` is the explicit
282
- * upgrade boundary: when code or capability profiles change, it archives the
283
- * old epoch intact and activates a compatible one instead of letting upgraded
284
- * hooks fail closed against stale approvals.
323
+ * Runtime contracts bound into an immutable V3 epoch. `init` replaces the
324
+ * epoch only when the schema or adapter capability contract changed. A new
325
+ * Harnery build alone keeps the current epoch and its live session generations.
285
326
  */
286
- export function eventLedgerV3RuntimeIssues(control, harneryBuild) {
327
+ export function eventLedgerV3RuntimeIssues(control) {
287
328
  if (control.state !== "active")
288
329
  return [];
289
330
  const issues = [];
@@ -292,9 +333,6 @@ export function eventLedgerV3RuntimeIssues(control, harneryBuild) {
292
333
  issues.push("schema digest");
293
334
  if (profile.contract_source_digest !== EVENT_V3_SCHEMA_DIGEST)
294
335
  issues.push("contract digest");
295
- if (!profile.producer_build_ids.includes(liveEventV3BuildId(harneryBuild))) {
296
- issues.push("producer build");
297
- }
298
336
  const expectedCapabilities = Object.values(ADAPTER_CAPABILITY_PROFILES_V3).map((value) => sha256V3(canonicalJsonV3(value)));
299
337
  if (expectedCapabilities.some((digest) => !profile.adapter_capability_profile_digests.includes(digest))) {
300
338
  issues.push("adapter capabilities");
@@ -623,6 +661,18 @@ function render(projectRoot, dryRun, actions, warnings = []) {
623
661
  : "\nDone. Start a session and check `harn agents whoami`.";
624
662
  return `${head}\n root: ${projectRoot}\n${actions.map((a) => ` ${a}`).join("\n")}${warnBlock}${tail}`;
625
663
  }
664
+ function renderInstructionsOnly(projectRoot, binName, dryRun, actions, warnings = []) {
665
+ const head = dryRun
666
+ ? `${binName} init --instructions-only (dry run): no changes written`
667
+ : `${binName} init --instructions-only`;
668
+ const warnBlock = warnings.length
669
+ ? `\n${warnings.map((warning) => ` ! ${warning}`).join("\n")}`
670
+ : "";
671
+ const tail = dryRun
672
+ ? "\nRe-run without --dry-run to apply."
673
+ : "\nDone. Adapter hooks, managed Git hooks, configuration, and event ledger state were left unchanged.";
674
+ return `${head}\n root: ${projectRoot}\n${actions.map((action) => ` ${action}`).join("\n")}${warnBlock}${tail}`;
675
+ }
626
676
  function gitTopLevel() {
627
677
  const r = spawnSync("git", ["rev-parse", "--show-toplevel"], { encoding: "utf8" });
628
678
  const out = r.status === 0 ? r.stdout.trim() : "";
@@ -1 +1 @@
1
- {"version":3,"file":"ledger-v3.d.ts","sourceRoot":"","sources":["../../src/commands/ledger-v3.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAQ1E,2DAA2D;AAC3D,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,EACjB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,CA+DN"}
1
+ {"version":3,"file":"ledger-v3.d.ts","sourceRoot":"","sources":["../../src/commands/ledger-v3.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAmC1E,2DAA2D;AAC3D,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,EACjB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,CAsWN"}