harnery 0.34.1 → 0.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (692) hide show
  1. package/dist/commander.d.ts +30 -5
  2. package/dist/commander.d.ts.map +1 -1
  3. package/dist/commander.js +124 -94
  4. package/dist/commands/agents.d.ts +37 -6
  5. package/dist/commands/agents.d.ts.map +1 -1
  6. package/dist/commands/agents.js +466 -371
  7. package/dist/commands/backup.d.ts.map +1 -1
  8. package/dist/commands/backup.js +10 -10
  9. package/dist/commands/browse-session.d.ts.map +1 -1
  10. package/dist/commands/browse-session.js +12 -0
  11. package/dist/commands/browse.d.ts +1 -1
  12. package/dist/commands/browse.d.ts.map +1 -1
  13. package/dist/commands/browse.js +31 -6
  14. package/dist/commands/conversations.d.ts +10 -0
  15. package/dist/commands/conversations.d.ts.map +1 -0
  16. package/dist/commands/conversations.js +201 -0
  17. package/dist/commands/decision.d.ts.map +1 -1
  18. package/dist/commands/decision.js +2 -2
  19. package/dist/commands/deinit.d.ts.map +1 -1
  20. package/dist/commands/deinit.js +5 -0
  21. package/dist/commands/docs.d.ts.map +1 -1
  22. package/dist/commands/docs.js +13 -2
  23. package/dist/commands/doctor.d.ts +5 -0
  24. package/dist/commands/doctor.d.ts.map +1 -1
  25. package/dist/commands/doctor.js +51 -7
  26. package/dist/commands/events.d.ts.map +1 -1
  27. package/dist/commands/events.js +18 -1
  28. package/dist/commands/fetch.js +6 -5
  29. package/dist/commands/files.d.ts +22 -0
  30. package/dist/commands/files.d.ts.map +1 -0
  31. package/dist/commands/files.js +113 -0
  32. package/dist/commands/governor.js +14 -12
  33. package/dist/commands/inbox.d.ts +5 -0
  34. package/dist/commands/inbox.d.ts.map +1 -0
  35. package/dist/commands/inbox.js +57 -0
  36. package/dist/commands/init.d.ts +4 -5
  37. package/dist/commands/init.d.ts.map +1 -1
  38. package/dist/commands/init.js +63 -13
  39. package/dist/commands/ledger-v3.d.ts.map +1 -1
  40. package/dist/commands/ledger-v3.js +347 -1
  41. package/dist/commands/logs.d.ts +4 -0
  42. package/dist/commands/logs.d.ts.map +1 -0
  43. package/dist/commands/logs.js +169 -0
  44. package/dist/commands/messages.d.ts +5 -0
  45. package/dist/commands/messages.d.ts.map +1 -0
  46. package/dist/commands/messages.js +45 -0
  47. package/dist/commands/outline.d.ts +1 -1
  48. package/dist/commands/outline.d.ts.map +1 -1
  49. package/dist/commands/outline.js +2 -2
  50. package/dist/commands/presence.d.ts.map +1 -1
  51. package/dist/commands/presence.js +2 -2
  52. package/dist/commands/read.d.ts +1 -1
  53. package/dist/commands/read.d.ts.map +1 -1
  54. package/dist/commands/read.js +2 -2
  55. package/dist/commands/semantic.d.ts +4 -0
  56. package/dist/commands/semantic.d.ts.map +1 -0
  57. package/dist/commands/semantic.js +199 -0
  58. package/dist/commands/storage.d.ts +4 -0
  59. package/dist/commands/storage.d.ts.map +1 -0
  60. package/dist/commands/storage.js +238 -0
  61. package/dist/commands/tunnel.d.ts +5 -1
  62. package/dist/commands/tunnel.d.ts.map +1 -1
  63. package/dist/commands/tunnel.js +44 -31
  64. package/dist/commands/web.d.ts +3 -0
  65. package/dist/commands/web.d.ts.map +1 -1
  66. package/dist/commands/web.js +84 -7
  67. package/dist/commands/work.js +3 -3
  68. package/dist/commands/workflow.js +13 -13
  69. package/dist/core/adapters/profiles.d.ts +1 -1
  70. package/dist/core/agents/canonical-emit.d.ts +3 -0
  71. package/dist/core/agents/canonical-emit.d.ts.map +1 -1
  72. package/dist/core/agents/canonical-emit.js +12 -0
  73. package/dist/core/agents/claim-path.d.ts +11 -0
  74. package/dist/core/agents/claim-path.d.ts.map +1 -0
  75. package/dist/core/agents/claim-path.js +22 -0
  76. package/dist/core/agents/cli.js +209 -39
  77. package/dist/core/agents/coord-client.d.ts +29 -3
  78. package/dist/core/agents/coord-client.d.ts.map +1 -1
  79. package/dist/core/agents/coord-client.js +88 -9
  80. package/dist/core/agents/live-authority-v3.d.ts +47 -1
  81. package/dist/core/agents/live-authority-v3.d.ts.map +1 -1
  82. package/dist/core/agents/live-authority-v3.js +245 -13
  83. package/dist/core/agents/live-lifecycle-v3.js +9 -4
  84. package/dist/core/agents/live-observation-v3.d.ts.map +1 -1
  85. package/dist/core/agents/live-observation-v3.js +8 -3
  86. package/dist/core/agents/render/prompt-context.d.ts +9 -3
  87. package/dist/core/agents/render/prompt-context.d.ts.map +1 -1
  88. package/dist/core/agents/render/prompt-context.js +36 -17
  89. package/dist/core/agents/rules/stop-hook.d.ts +2 -0
  90. package/dist/core/agents/rules/stop-hook.d.ts.map +1 -1
  91. package/dist/core/agents/rules/stop-hook.js +115 -22
  92. package/dist/core/agents/rules/verdict.d.ts +1 -0
  93. package/dist/core/agents/rules/verdict.d.ts.map +1 -1
  94. package/dist/core/agents/session-events.d.ts.map +1 -1
  95. package/dist/core/agents/session-events.js +4 -0
  96. package/dist/core/agents/session-finalization-state-v3.js +1 -1
  97. package/dist/core/agents/session-finalizer-v3.js +5 -1
  98. package/dist/core/agents/session-name-display.d.ts +1 -0
  99. package/dist/core/agents/session-name-display.d.ts.map +1 -1
  100. package/dist/core/agents/session-name-display.js +8 -1
  101. package/dist/core/agents/state/activity-log.d.ts +3 -0
  102. package/dist/core/agents/state/activity-log.d.ts.map +1 -1
  103. package/dist/core/agents/state/activity-log.js +6 -3
  104. package/dist/core/agents/state/heartbeat-reader.d.ts +46 -0
  105. package/dist/core/agents/state/heartbeat-reader.d.ts.map +1 -0
  106. package/dist/core/agents/state/heartbeat-reader.js +25 -0
  107. package/dist/core/agents/state/heartbeat-writer.d.ts +9 -48
  108. package/dist/core/agents/state/heartbeat-writer.d.ts.map +1 -1
  109. package/dist/core/agents/state/heartbeat-writer.js +34 -34
  110. package/dist/core/agents/state/live-coordination-view.d.ts +6 -8
  111. package/dist/core/agents/state/live-coordination-view.d.ts.map +1 -1
  112. package/dist/core/agents/state/live-coordination-view.js +16 -67
  113. package/dist/core/agents/state/live-coordination-writer.d.ts +12 -0
  114. package/dist/core/agents/state/live-coordination-writer.d.ts.map +1 -0
  115. package/dist/core/agents/state/live-coordination-writer.js +92 -0
  116. package/dist/core/agents/state/names.d.ts +9 -1
  117. package/dist/core/agents/state/names.d.ts.map +1 -1
  118. package/dist/core/agents/state/names.js +190 -182
  119. package/dist/core/agents/state/stale-sweep.d.ts.map +1 -1
  120. package/dist/core/agents/state/stale-sweep.js +23 -5
  121. package/dist/core/artifacts/constants.d.ts +5 -0
  122. package/dist/core/artifacts/constants.d.ts.map +1 -0
  123. package/dist/core/artifacts/constants.js +4 -0
  124. package/dist/core/artifacts/index.d.ts +24 -3
  125. package/dist/core/artifacts/index.d.ts.map +1 -1
  126. package/dist/core/artifacts/index.js +96 -8
  127. package/dist/core/config.d.ts +62 -4
  128. package/dist/core/config.d.ts.map +1 -1
  129. package/dist/core/config.js +98 -4
  130. package/dist/core/conversations/archive.d.ts +49 -0
  131. package/dist/core/conversations/archive.d.ts.map +1 -0
  132. package/dist/core/conversations/archive.js +136 -0
  133. package/dist/core/conversations/catalog.d.ts +10 -0
  134. package/dist/core/conversations/catalog.d.ts.map +1 -0
  135. package/dist/core/conversations/catalog.js +72 -0
  136. package/dist/core/conversations/context-pack.d.ts +6 -0
  137. package/dist/core/conversations/context-pack.d.ts.map +1 -0
  138. package/dist/core/conversations/context-pack.js +60 -0
  139. package/dist/core/conversations/contract.d.ts +155 -0
  140. package/dist/core/conversations/contract.d.ts.map +1 -0
  141. package/dist/core/conversations/contract.js +1 -0
  142. package/dist/core/conversations/evaluation.d.ts +16 -0
  143. package/dist/core/conversations/evaluation.d.ts.map +1 -0
  144. package/dist/core/conversations/evaluation.js +9 -0
  145. package/dist/core/conversations/index.d.ts +10 -0
  146. package/dist/core/conversations/index.d.ts.map +1 -0
  147. package/dist/core/conversations/index.js +9 -0
  148. package/dist/core/conversations/lifecycle.d.ts +28 -0
  149. package/dist/core/conversations/lifecycle.d.ts.map +1 -0
  150. package/dist/core/conversations/lifecycle.js +29 -0
  151. package/dist/core/conversations/normalize.d.ts +14 -0
  152. package/dist/core/conversations/normalize.d.ts.map +1 -0
  153. package/dist/core/conversations/normalize.js +82 -0
  154. package/dist/core/conversations/query.d.ts +8 -0
  155. package/dist/core/conversations/query.d.ts.map +1 -0
  156. package/dist/core/conversations/query.js +280 -0
  157. package/dist/core/conversations/search-index.d.ts +9 -0
  158. package/dist/core/conversations/search-index.d.ts.map +1 -0
  159. package/dist/core/conversations/search-index.js +29 -0
  160. package/dist/core/events/legacy-storage/canary.d.ts +18 -0
  161. package/dist/core/events/legacy-storage/canary.d.ts.map +1 -0
  162. package/dist/core/events/legacy-storage/canary.js +150 -0
  163. package/dist/core/events/legacy-storage/fence.d.ts +15 -0
  164. package/dist/core/events/legacy-storage/fence.d.ts.map +1 -0
  165. package/dist/core/events/legacy-storage/fence.js +115 -0
  166. package/dist/core/events/legacy-storage/index.d.ts +6 -0
  167. package/dist/core/events/legacy-storage/index.d.ts.map +1 -0
  168. package/dist/core/events/legacy-storage/index.js +5 -0
  169. package/dist/core/events/legacy-storage/inventory.d.ts +10 -0
  170. package/dist/core/events/legacy-storage/inventory.d.ts.map +1 -0
  171. package/dist/core/events/legacy-storage/inventory.js +40 -0
  172. package/dist/core/events/legacy-storage/manifest.d.ts +23 -0
  173. package/dist/core/events/legacy-storage/manifest.d.ts.map +1 -0
  174. package/dist/core/events/legacy-storage/manifest.js +108 -0
  175. package/dist/core/events/legacy-storage/reader.d.ts +15 -0
  176. package/dist/core/events/legacy-storage/reader.d.ts.map +1 -0
  177. package/dist/core/events/legacy-storage/reader.js +154 -0
  178. package/dist/core/events/v3/authority-outbox.d.ts +7 -2
  179. package/dist/core/events/v3/authority-outbox.d.ts.map +1 -1
  180. package/dist/core/events/v3/authority-outbox.js +16 -3
  181. package/dist/core/events/v3/base-contract.d.ts +851 -16
  182. package/dist/core/events/v3/base-contract.d.ts.map +1 -1
  183. package/dist/core/events/v3/base-contract.js +50 -7
  184. package/dist/core/events/v3/bootstrap.d.ts +39 -0
  185. package/dist/core/events/v3/bootstrap.d.ts.map +1 -1
  186. package/dist/core/events/v3/bootstrap.js +167 -3
  187. package/dist/core/events/v3/capabilities.d.ts +11 -0
  188. package/dist/core/events/v3/capabilities.d.ts.map +1 -1
  189. package/dist/core/events/v3/capabilities.js +26 -3
  190. package/dist/core/events/v3/control-witness.d.ts +44 -0
  191. package/dist/core/events/v3/control-witness.d.ts.map +1 -0
  192. package/dist/core/events/v3/control-witness.js +233 -0
  193. package/dist/core/events/v3/control-writer.d.ts +4 -0
  194. package/dist/core/events/v3/control-writer.d.ts.map +1 -0
  195. package/dist/core/events/v3/control-writer.js +16 -0
  196. package/dist/core/events/v3/control.d.ts +8 -2
  197. package/dist/core/events/v3/control.d.ts.map +1 -1
  198. package/dist/core/events/v3/control.js +46 -18
  199. package/dist/core/events/v3/coordination-transaction-recovery.d.ts +42 -0
  200. package/dist/core/events/v3/coordination-transaction-recovery.d.ts.map +1 -0
  201. package/dist/core/events/v3/coordination-transaction-recovery.js +342 -0
  202. package/dist/core/events/v3/coordination-view.d.ts.map +1 -1
  203. package/dist/core/events/v3/coordination-view.js +16 -1
  204. package/dist/core/events/v3/generated.d.ts +1 -1
  205. package/dist/core/events/v3/generated.js +1 -1
  206. package/dist/core/events/v3/index.d.ts +8 -5
  207. package/dist/core/events/v3/index.d.ts.map +1 -1
  208. package/dist/core/events/v3/index.js +7 -4
  209. package/dist/core/events/v3/latency.d.ts +31 -1
  210. package/dist/core/events/v3/latency.d.ts.map +1 -1
  211. package/dist/core/events/v3/latency.js +127 -3
  212. package/dist/core/events/v3/live-route-observer.d.ts +31 -0
  213. package/dist/core/events/v3/live-route-observer.d.ts.map +1 -0
  214. package/dist/core/events/v3/live-route-observer.js +58 -0
  215. package/dist/core/events/v3/live-routing.d.ts +42 -20
  216. package/dist/core/events/v3/live-routing.d.ts.map +1 -1
  217. package/dist/core/events/v3/live-routing.js +153 -41
  218. package/dist/core/events/v3/producers/command-recorder.d.ts.map +1 -1
  219. package/dist/core/events/v3/producers/command-recorder.js +10 -1
  220. package/dist/core/events/v3/producers/coordination-recorder.d.ts +11 -1
  221. package/dist/core/events/v3/producers/coordination-recorder.d.ts.map +1 -1
  222. package/dist/core/events/v3/producers/coordination-recorder.js +90 -13
  223. package/dist/core/events/v3/producers/diagnostic-summaries.d.ts +129 -0
  224. package/dist/core/events/v3/producers/diagnostic-summaries.d.ts.map +1 -0
  225. package/dist/core/events/v3/producers/diagnostic-summaries.js +499 -0
  226. package/dist/core/events/v3/producers/hook-base.d.ts +17 -1
  227. package/dist/core/events/v3/producers/hook-base.d.ts.map +1 -1
  228. package/dist/core/events/v3/producers/hook-base.js +83 -2
  229. package/dist/core/events/v3/producers/intake.d.ts +13 -0
  230. package/dist/core/events/v3/producers/intake.d.ts.map +1 -1
  231. package/dist/core/events/v3/producers/intake.js +36 -2
  232. package/dist/core/events/v3/producers/producer-state-observer.d.ts +8 -0
  233. package/dist/core/events/v3/producers/producer-state-observer.d.ts.map +1 -0
  234. package/dist/core/events/v3/producers/producer-state-observer.js +45 -0
  235. package/dist/core/events/v3/producers/recorder.d.ts +117 -1
  236. package/dist/core/events/v3/producers/recorder.d.ts.map +1 -1
  237. package/dist/core/events/v3/producers/recorder.js +992 -27
  238. package/dist/core/events/v3/reader.d.ts +51 -0
  239. package/dist/core/events/v3/reader.d.ts.map +1 -1
  240. package/dist/core/events/v3/reader.js +181 -1
  241. package/dist/core/events/v3/rotation-config.d.ts +9 -0
  242. package/dist/core/events/v3/rotation-config.d.ts.map +1 -0
  243. package/dist/core/events/v3/rotation-config.js +91 -0
  244. package/dist/core/events/v3/runtime-build.d.ts +11 -0
  245. package/dist/core/events/v3/runtime-build.d.ts.map +1 -0
  246. package/dist/core/events/v3/runtime-build.js +39 -0
  247. package/dist/core/events/v3/runtime-identity.d.ts +5 -0
  248. package/dist/core/events/v3/runtime-identity.d.ts.map +1 -0
  249. package/dist/core/events/v3/runtime-identity.js +18 -0
  250. package/dist/core/events/v3/runtime-telemetry-capabilities.d.ts +52 -0
  251. package/dist/core/events/v3/runtime-telemetry-capabilities.d.ts.map +1 -0
  252. package/dist/core/events/v3/runtime-telemetry-capabilities.js +54 -0
  253. package/dist/core/events/v3/support-storage/classify.d.ts +46 -0
  254. package/dist/core/events/v3/support-storage/classify.d.ts.map +1 -0
  255. package/dist/core/events/v3/support-storage/classify.js +149 -0
  256. package/dist/core/events/v3/support-storage/eligibility.d.ts +29 -0
  257. package/dist/core/events/v3/support-storage/eligibility.d.ts.map +1 -0
  258. package/dist/core/events/v3/support-storage/eligibility.js +35 -0
  259. package/dist/core/events/v3/support-storage/index.d.ts +10 -0
  260. package/dist/core/events/v3/support-storage/index.d.ts.map +1 -0
  261. package/dist/core/events/v3/support-storage/index.js +9 -0
  262. package/dist/core/events/v3/support-storage/inventory.d.ts +30 -0
  263. package/dist/core/events/v3/support-storage/inventory.d.ts.map +1 -0
  264. package/dist/core/events/v3/support-storage/inventory.js +94 -0
  265. package/dist/core/events/v3/support-storage/logical-authority.d.ts +14 -0
  266. package/dist/core/events/v3/support-storage/logical-authority.d.ts.map +1 -0
  267. package/dist/core/events/v3/support-storage/logical-authority.js +104 -0
  268. package/dist/core/events/v3/support-storage/maintenance.d.ts +98 -0
  269. package/dist/core/events/v3/support-storage/maintenance.d.ts.map +1 -0
  270. package/dist/core/events/v3/support-storage/maintenance.js +352 -0
  271. package/dist/core/events/v3/support-storage/pack-contract.d.ts +59 -0
  272. package/dist/core/events/v3/support-storage/pack-contract.d.ts.map +1 -0
  273. package/dist/core/events/v3/support-storage/pack-contract.js +249 -0
  274. package/dist/core/events/v3/support-storage/pack-reader.d.ts +34 -0
  275. package/dist/core/events/v3/support-storage/pack-reader.d.ts.map +1 -0
  276. package/dist/core/events/v3/support-storage/pack-reader.js +258 -0
  277. package/dist/core/events/v3/support-storage/pack-writer.d.ts +30 -0
  278. package/dist/core/events/v3/support-storage/pack-writer.d.ts.map +1 -0
  279. package/dist/core/events/v3/support-storage/pack-writer.js +268 -0
  280. package/dist/core/events/v3/support-storage/recovery.d.ts +15 -0
  281. package/dist/core/events/v3/support-storage/recovery.d.ts.map +1 -0
  282. package/dist/core/events/v3/support-storage/recovery.js +22 -0
  283. package/dist/core/events/v3/turn-telemetry.d.ts +21 -6
  284. package/dist/core/events/v3/turn-telemetry.d.ts.map +1 -1
  285. package/dist/core/events/v3/turn-telemetry.js +32 -2
  286. package/dist/core/events/v3/writer.d.ts +13 -1
  287. package/dist/core/events/v3/writer.d.ts.map +1 -1
  288. package/dist/core/events/v3/writer.js +126 -12
  289. package/dist/core/governor/plan-read.d.ts.map +1 -1
  290. package/dist/core/governor/plan-read.js +5 -21
  291. package/dist/core/governor/planning.js +6 -8
  292. package/dist/core/governor/service-read.d.ts +12 -0
  293. package/dist/core/governor/service-read.d.ts.map +1 -1
  294. package/dist/core/governor/service-read.js +266 -2
  295. package/dist/core/governor/service.d.ts +1 -0
  296. package/dist/core/governor/service.d.ts.map +1 -1
  297. package/dist/core/governor/service.js +53 -18
  298. package/dist/core/guard/evidence-v3.d.ts.map +1 -1
  299. package/dist/core/guard/evidence-v3.js +2 -0
  300. package/dist/core/hooks/adapter/events.d.ts.map +1 -1
  301. package/dist/core/hooks/adapter/events.js +1 -0
  302. package/dist/core/hooks/adapter/output.d.ts +4 -2
  303. package/dist/core/hooks/adapter/output.d.ts.map +1 -1
  304. package/dist/core/hooks/adapter/output.js +13 -5
  305. package/dist/core/hooks/adapter/parse.d.ts +3 -0
  306. package/dist/core/hooks/adapter/parse.d.ts.map +1 -1
  307. package/dist/core/hooks/adapter/parse.js +14 -0
  308. package/dist/core/hooks/adapter/runtime-telemetry.d.ts +142 -0
  309. package/dist/core/hooks/adapter/runtime-telemetry.d.ts.map +1 -0
  310. package/dist/core/hooks/adapter/runtime-telemetry.js +869 -0
  311. package/dist/core/hooks/cli.js +318 -61
  312. package/dist/core/hooks/effects/image-capture.d.ts +1 -1
  313. package/dist/core/hooks/effects/image-capture.d.ts.map +1 -1
  314. package/dist/core/hooks/effects/image-capture.js +4 -2
  315. package/dist/core/hooks/remediation-cap.d.ts +39 -0
  316. package/dist/core/hooks/remediation-cap.d.ts.map +1 -0
  317. package/dist/core/hooks/remediation-cap.js +63 -0
  318. package/dist/core/hooks/resolve/coord-root.d.ts +22 -9
  319. package/dist/core/hooks/resolve/coord-root.d.ts.map +1 -1
  320. package/dist/core/hooks/resolve/coord-root.js +92 -11
  321. package/dist/core/hooks/resolve/owner.d.ts.map +1 -1
  322. package/dist/core/hooks/resolve/owner.js +5 -0
  323. package/dist/core/hooks/resolve/transcript.d.ts +33 -9
  324. package/dist/core/hooks/resolve/transcript.d.ts.map +1 -1
  325. package/dist/core/hooks/resolve/transcript.js +33 -10
  326. package/dist/core/inbox/contract.d.ts +64 -0
  327. package/dist/core/inbox/contract.d.ts.map +1 -0
  328. package/dist/core/inbox/contract.js +13 -0
  329. package/dist/core/inbox/index.d.ts +5 -0
  330. package/dist/core/inbox/index.d.ts.map +1 -0
  331. package/dist/core/inbox/index.js +4 -0
  332. package/dist/core/inbox/lifecycle.d.ts +22 -0
  333. package/dist/core/inbox/lifecycle.d.ts.map +1 -0
  334. package/dist/core/inbox/lifecycle.js +41 -0
  335. package/dist/core/inbox/service.d.ts +36 -0
  336. package/dist/core/inbox/service.d.ts.map +1 -0
  337. package/dist/core/inbox/service.js +210 -0
  338. package/dist/core/inbox/watcher.d.ts +7 -0
  339. package/dist/core/inbox/watcher.d.ts.map +1 -0
  340. package/dist/core/inbox/watcher.js +26 -0
  341. package/dist/core/presence/codec-digest.d.ts.map +1 -1
  342. package/dist/core/presence/codec-digest.js +14 -3
  343. package/dist/core/presence/relay-client.d.ts +1 -0
  344. package/dist/core/presence/relay-client.d.ts.map +1 -1
  345. package/dist/core/presence/relay-client.js +52 -8
  346. package/dist/core/semantic/adapters.d.ts +37 -0
  347. package/dist/core/semantic/adapters.d.ts.map +1 -0
  348. package/dist/core/semantic/adapters.js +360 -0
  349. package/dist/core/semantic/contract.d.ts +1072 -0
  350. package/dist/core/semantic/contract.d.ts.map +1 -0
  351. package/dist/core/semantic/contract.js +331 -0
  352. package/dist/core/semantic/evidence.d.ts +11 -0
  353. package/dist/core/semantic/evidence.d.ts.map +1 -0
  354. package/dist/core/semantic/evidence.js +262 -0
  355. package/dist/core/semantic/index.d.ts +14 -0
  356. package/dist/core/semantic/index.d.ts.map +1 -0
  357. package/dist/core/semantic/index.js +13 -0
  358. package/dist/core/semantic/once.d.ts +38 -0
  359. package/dist/core/semantic/once.d.ts.map +1 -0
  360. package/dist/core/semantic/once.js +364 -0
  361. package/dist/core/semantic/prompt.d.ts +12 -0
  362. package/dist/core/semantic/prompt.d.ts.map +1 -0
  363. package/dist/core/semantic/prompt.js +83 -0
  364. package/dist/core/semantic/review.d.ts +144 -0
  365. package/dist/core/semantic/review.d.ts.map +1 -0
  366. package/dist/core/semantic/review.js +544 -0
  367. package/dist/core/semantic/routes.d.ts +10 -0
  368. package/dist/core/semantic/routes.d.ts.map +1 -0
  369. package/dist/core/semantic/routes.js +21 -0
  370. package/dist/core/semantic/scheduler.d.ts +27 -0
  371. package/dist/core/semantic/scheduler.d.ts.map +1 -0
  372. package/dist/core/semantic/scheduler.js +91 -0
  373. package/dist/core/semantic/service-status.d.ts +51 -0
  374. package/dist/core/semantic/service-status.d.ts.map +1 -0
  375. package/dist/core/semantic/service-status.js +140 -0
  376. package/dist/core/semantic/service.d.ts +52 -0
  377. package/dist/core/semantic/service.d.ts.map +1 -0
  378. package/dist/core/semantic/service.js +559 -0
  379. package/dist/core/semantic/soak.d.ts +75 -0
  380. package/dist/core/semantic/soak.d.ts.map +1 -0
  381. package/dist/core/semantic/soak.js +476 -0
  382. package/dist/core/semantic/storage.d.ts +81 -0
  383. package/dist/core/semantic/storage.d.ts.map +1 -0
  384. package/dist/core/semantic/storage.js +180 -0
  385. package/dist/core/semantic/usage.d.ts +43 -0
  386. package/dist/core/semantic/usage.d.ts.map +1 -0
  387. package/dist/core/semantic/usage.js +193 -0
  388. package/dist/core/semantic/validate.d.ts +18 -0
  389. package/dist/core/semantic/validate.d.ts.map +1 -0
  390. package/dist/core/semantic/validate.js +207 -0
  391. package/dist/core/storage/buffer.d.ts +28 -0
  392. package/dist/core/storage/buffer.d.ts.map +1 -0
  393. package/dist/core/storage/buffer.js +101 -0
  394. package/dist/core/storage/builtins.d.ts +3 -0
  395. package/dist/core/storage/builtins.d.ts.map +1 -0
  396. package/dist/core/storage/builtins.js +683 -0
  397. package/dist/core/storage/catalog.d.ts +19 -0
  398. package/dist/core/storage/catalog.d.ts.map +1 -0
  399. package/dist/core/storage/catalog.js +365 -0
  400. package/dist/core/storage/config.d.ts +16 -0
  401. package/dist/core/storage/config.d.ts.map +1 -0
  402. package/dist/core/storage/config.js +311 -0
  403. package/dist/core/storage/contract.d.ts +275 -0
  404. package/dist/core/storage/contract.d.ts.map +1 -0
  405. package/dist/core/storage/contract.js +3 -0
  406. package/dist/core/storage/durable-history.d.ts +36 -0
  407. package/dist/core/storage/durable-history.d.ts.map +1 -0
  408. package/dist/core/storage/durable-history.js +606 -0
  409. package/dist/core/storage/health.d.ts +4 -0
  410. package/dist/core/storage/health.d.ts.map +1 -0
  411. package/dist/core/storage/health.js +65 -0
  412. package/dist/core/storage/index.d.ts +16 -0
  413. package/dist/core/storage/index.d.ts.map +1 -0
  414. package/dist/core/storage/index.js +15 -0
  415. package/dist/core/storage/inventory.d.ts +25 -0
  416. package/dist/core/storage/inventory.d.ts.map +1 -0
  417. package/dist/core/storage/inventory.js +666 -0
  418. package/dist/core/storage/jsonl.d.ts +52 -0
  419. package/dist/core/storage/jsonl.d.ts.map +1 -0
  420. package/dist/core/storage/jsonl.js +156 -0
  421. package/dist/core/storage/log-retention.d.ts +52 -0
  422. package/dist/core/storage/log-retention.d.ts.map +1 -0
  423. package/dist/core/storage/log-retention.js +419 -0
  424. package/dist/core/storage/logger.d.ts +82 -0
  425. package/dist/core/storage/logger.d.ts.map +1 -0
  426. package/dist/core/storage/logger.js +411 -0
  427. package/dist/core/storage/maintenance-providers.d.ts +26 -0
  428. package/dist/core/storage/maintenance-providers.d.ts.map +1 -0
  429. package/dist/core/storage/maintenance-providers.js +141 -0
  430. package/dist/core/storage/maintenance.d.ts +125 -0
  431. package/dist/core/storage/maintenance.d.ts.map +1 -0
  432. package/dist/core/storage/maintenance.js +609 -0
  433. package/dist/core/storage/metrics.d.ts +60 -0
  434. package/dist/core/storage/metrics.d.ts.map +1 -0
  435. package/dist/core/storage/metrics.js +134 -0
  436. package/dist/core/storage/policy.d.ts +7 -0
  437. package/dist/core/storage/policy.d.ts.map +1 -0
  438. package/dist/core/storage/policy.js +110 -0
  439. package/dist/core/storage/process-log.d.ts +38 -0
  440. package/dist/core/storage/process-log.d.ts.map +1 -0
  441. package/dist/core/storage/process-log.js +165 -0
  442. package/dist/core/storage/query.d.ts +34 -0
  443. package/dist/core/storage/query.d.ts.map +1 -0
  444. package/dist/core/storage/query.js +295 -0
  445. package/dist/core/storage/receipts.d.ts +23 -0
  446. package/dist/core/storage/receipts.d.ts.map +1 -0
  447. package/dist/core/storage/receipts.js +117 -0
  448. package/dist/core/storage/segments.d.ts +84 -0
  449. package/dist/core/storage/segments.d.ts.map +1 -0
  450. package/dist/core/storage/segments.js +542 -0
  451. package/dist/core/storage/sink-graph.d.ts +65 -0
  452. package/dist/core/storage/sink-graph.d.ts.map +1 -0
  453. package/dist/core/storage/sink-graph.js +213 -0
  454. package/dist/core/storage/storm-control.d.ts +23 -0
  455. package/dist/core/storage/storm-control.d.ts.map +1 -0
  456. package/dist/core/storage/storm-control.js +59 -0
  457. package/dist/core/work/state.d.ts.map +1 -1
  458. package/dist/core/work/state.js +10 -14
  459. package/dist/core/workflow/live-session-v3.d.ts.map +1 -1
  460. package/dist/core/workflow/live-session-v3.js +2 -1
  461. package/dist/index.d.ts +2 -0
  462. package/dist/index.d.ts.map +1 -1
  463. package/dist/index.js +2 -0
  464. package/dist/lazy-commands.d.ts +26 -0
  465. package/dist/lazy-commands.d.ts.map +1 -0
  466. package/dist/lazy-commands.js +210 -0
  467. package/dist/lib/browser/client.d.ts +11 -0
  468. package/dist/lib/browser/client.d.ts.map +1 -1
  469. package/dist/lib/browser/client.js +13 -0
  470. package/dist/lib/browser/index.d.ts +1 -0
  471. package/dist/lib/browser/index.d.ts.map +1 -1
  472. package/dist/lib/browser/standalone-html.d.ts +25 -0
  473. package/dist/lib/browser/standalone-html.d.ts.map +1 -0
  474. package/dist/lib/browser/standalone-html.js +284 -0
  475. package/dist/lib/docs-lint.d.ts +2 -0
  476. package/dist/lib/docs-lint.d.ts.map +1 -1
  477. package/dist/lib/docs-lint.js +45 -80
  478. package/dist/lib/docs-metadata-audit.d.ts +3 -0
  479. package/dist/lib/docs-metadata-audit.d.ts.map +1 -1
  480. package/dist/lib/docs-metadata-audit.js +13 -23
  481. package/dist/lib/docs-metadata-sync.d.ts +1 -0
  482. package/dist/lib/docs-metadata-sync.d.ts.map +1 -1
  483. package/dist/lib/docs-metadata-sync.js +28 -10
  484. package/dist/lib/docs-repository-view.d.ts +22 -0
  485. package/dist/lib/docs-repository-view.d.ts.map +1 -0
  486. package/dist/lib/docs-repository-view.js +185 -0
  487. package/dist/lib/http/client.d.ts +11 -5
  488. package/dist/lib/http/client.d.ts.map +1 -1
  489. package/dist/lib/http/client.js +22 -4
  490. package/dist/lib/http/index.d.ts +1 -1
  491. package/dist/lib/http/index.d.ts.map +1 -1
  492. package/dist/lib/http/index.js +1 -1
  493. package/dist/lib/indexer-exclusions.d.ts +27 -0
  494. package/dist/lib/indexer-exclusions.d.ts.map +1 -0
  495. package/dist/lib/indexer-exclusions.js +176 -0
  496. package/dist/lib/instructions/apply.d.ts.map +1 -1
  497. package/dist/lib/instructions/apply.js +1 -0
  498. package/dist/lib/instructions/templates.d.ts +2 -0
  499. package/dist/lib/instructions/templates.d.ts.map +1 -1
  500. package/dist/lib/instructions/templates.js +149 -4
  501. package/dist/lib/local-file-url.d.ts +9 -0
  502. package/dist/lib/local-file-url.d.ts.map +1 -0
  503. package/dist/lib/local-file-url.js +20 -0
  504. package/dist/lib/web-performance.d.ts +118 -0
  505. package/dist/lib/web-performance.d.ts.map +1 -0
  506. package/dist/lib/web-performance.js +192 -0
  507. package/package.json +34 -2
  508. package/schemas/config.schema.json +58 -0
  509. package/schemas/event-v3.schema.json +3073 -581
  510. package/src/commander.ts +462 -93
  511. package/src/commands/agents.ts +617 -355
  512. package/src/commands/backup.ts +18 -14
  513. package/src/commands/browse-session.ts +12 -0
  514. package/src/commands/browse.ts +31 -9
  515. package/src/commands/conversations.ts +279 -0
  516. package/src/commands/decision.ts +8 -2
  517. package/src/commands/deinit.ts +6 -0
  518. package/src/commands/docs.ts +25 -6
  519. package/src/commands/doctor.ts +75 -9
  520. package/src/commands/events.ts +21 -1
  521. package/src/commands/fetch.ts +7 -6
  522. package/src/commands/files.ts +143 -0
  523. package/src/commands/governor.ts +13 -12
  524. package/src/commands/inbox.ts +61 -0
  525. package/src/commands/init.ts +78 -16
  526. package/src/commands/ledger-v3.ts +421 -1
  527. package/src/commands/logs.ts +224 -0
  528. package/src/commands/messages.ts +61 -0
  529. package/src/commands/outline.ts +6 -2
  530. package/src/commands/presence.ts +7 -2
  531. package/src/commands/read.ts +6 -2
  532. package/src/commands/semantic.ts +244 -0
  533. package/src/commands/storage.ts +310 -0
  534. package/src/commands/tunnel.ts +66 -52
  535. package/src/commands/web.ts +92 -7
  536. package/src/commands/work.ts +3 -3
  537. package/src/commands/workflow.ts +13 -13
  538. package/src/core/agents/canonical-emit.ts +15 -0
  539. package/src/core/agents/claim-path.ts +23 -0
  540. package/src/core/agents/cli.ts +259 -53
  541. package/src/core/agents/coord-client.ts +92 -8
  542. package/src/core/agents/live-authority-v3.ts +342 -14
  543. package/src/core/agents/live-lifecycle-v3.ts +14 -4
  544. package/src/core/agents/live-observation-v3.ts +13 -3
  545. package/src/core/agents/render/prompt-context.ts +40 -16
  546. package/src/core/agents/rules/stop-hook.ts +129 -25
  547. package/src/core/agents/rules/verdict.ts +1 -0
  548. package/src/core/agents/session-events.ts +4 -0
  549. package/src/core/agents/session-finalization-state-v3.ts +1 -1
  550. package/src/core/agents/session-finalizer-v3.ts +4 -1
  551. package/src/core/agents/session-name-display.ts +9 -1
  552. package/src/core/agents/state/activity-log.ts +7 -2
  553. package/src/core/agents/state/heartbeat-reader.ts +69 -0
  554. package/src/core/agents/state/heartbeat-writer.ts +47 -84
  555. package/src/core/agents/state/live-coordination-view.ts +17 -81
  556. package/src/core/agents/state/live-coordination-writer.ts +141 -0
  557. package/src/core/agents/state/names.ts +190 -182
  558. package/src/core/agents/state/stale-sweep.ts +25 -5
  559. package/src/core/artifacts/constants.ts +4 -0
  560. package/src/core/artifacts/index.ts +113 -8
  561. package/src/core/config.ts +126 -5
  562. package/src/core/conversations/archive.ts +237 -0
  563. package/src/core/conversations/catalog.ts +79 -0
  564. package/src/core/conversations/context-pack.ts +72 -0
  565. package/src/core/conversations/contract.ts +178 -0
  566. package/src/core/conversations/evaluation.ts +30 -0
  567. package/src/core/conversations/index.ts +9 -0
  568. package/src/core/conversations/lifecycle.ts +63 -0
  569. package/src/core/conversations/normalize.ts +105 -0
  570. package/src/core/conversations/query.ts +318 -0
  571. package/src/core/conversations/search-index.ts +48 -0
  572. package/src/core/events/legacy-storage/canary.ts +177 -0
  573. package/src/core/events/legacy-storage/fence.ts +129 -0
  574. package/src/core/events/legacy-storage/index.ts +5 -0
  575. package/src/core/events/legacy-storage/inventory.ts +51 -0
  576. package/src/core/events/legacy-storage/manifest.ts +136 -0
  577. package/src/core/events/legacy-storage/reader.ts +178 -0
  578. package/src/core/events/v3/authority-outbox.ts +22 -1
  579. package/src/core/events/v3/base-contract.ts +56 -7
  580. package/src/core/events/v3/bootstrap.ts +195 -2
  581. package/src/core/events/v3/capabilities.ts +37 -3
  582. package/src/core/events/v3/control-witness.ts +339 -0
  583. package/src/core/events/v3/control-writer.ts +16 -0
  584. package/src/core/events/v3/control.ts +54 -18
  585. package/src/core/events/v3/coordination-transaction-recovery.ts +477 -0
  586. package/src/core/events/v3/coordination-view.ts +17 -1
  587. package/src/core/events/v3/generated.ts +1 -1
  588. package/src/core/events/v3/index.ts +26 -2
  589. package/src/core/events/v3/latency.ts +213 -2
  590. package/src/core/events/v3/live-route-observer.ts +80 -0
  591. package/src/core/events/v3/live-routing.ts +182 -45
  592. package/src/core/events/v3/producers/command-recorder.ts +10 -1
  593. package/src/core/events/v3/producers/coordination-recorder.ts +112 -15
  594. package/src/core/events/v3/producers/diagnostic-summaries.ts +593 -0
  595. package/src/core/events/v3/producers/hook-base.ts +116 -2
  596. package/src/core/events/v3/producers/intake.ts +48 -2
  597. package/src/core/events/v3/producers/producer-state-observer.ts +52 -0
  598. package/src/core/events/v3/producers/recorder.ts +1403 -30
  599. package/src/core/events/v3/reader.ts +243 -2
  600. package/src/core/events/v3/rotation-config.ts +98 -0
  601. package/src/core/events/v3/runtime-build.ts +41 -0
  602. package/src/core/events/v3/runtime-identity.ts +16 -0
  603. package/src/core/events/v3/runtime-telemetry-capabilities.ts +143 -0
  604. package/src/core/events/v3/support-storage/classify.ts +209 -0
  605. package/src/core/events/v3/support-storage/eligibility.ts +58 -0
  606. package/src/core/events/v3/support-storage/index.ts +9 -0
  607. package/src/core/events/v3/support-storage/inventory.ts +135 -0
  608. package/src/core/events/v3/support-storage/logical-authority.ts +117 -0
  609. package/src/core/events/v3/support-storage/maintenance.ts +501 -0
  610. package/src/core/events/v3/support-storage/pack-contract.ts +337 -0
  611. package/src/core/events/v3/support-storage/pack-reader.ts +346 -0
  612. package/src/core/events/v3/support-storage/pack-writer.ts +352 -0
  613. package/src/core/events/v3/support-storage/recovery.ts +43 -0
  614. package/src/core/events/v3/turn-telemetry.ts +66 -5
  615. package/src/core/events/v3/writer.ts +168 -16
  616. package/src/core/governor/plan-read.ts +5 -18
  617. package/src/core/governor/planning.ts +5 -8
  618. package/src/core/governor/service-read.ts +320 -2
  619. package/src/core/governor/service.ts +49 -22
  620. package/src/core/guard/evidence-v3.ts +1 -0
  621. package/src/core/hooks/adapter/events.ts +1 -0
  622. package/src/core/hooks/adapter/output.ts +12 -5
  623. package/src/core/hooks/adapter/parse.ts +16 -0
  624. package/src/core/hooks/adapter/runtime-telemetry.ts +1200 -0
  625. package/src/core/hooks/cli.ts +342 -64
  626. package/src/core/hooks/effects/image-capture.ts +4 -1
  627. package/src/core/hooks/remediation-cap.ts +83 -0
  628. package/src/core/hooks/resolve/coord-root.ts +91 -11
  629. package/src/core/hooks/resolve/owner.ts +4 -0
  630. package/src/core/hooks/resolve/transcript.ts +55 -11
  631. package/src/core/inbox/contract.ts +81 -0
  632. package/src/core/inbox/index.ts +4 -0
  633. package/src/core/inbox/lifecycle.ts +104 -0
  634. package/src/core/inbox/service.ts +305 -0
  635. package/src/core/inbox/watcher.ts +36 -0
  636. package/src/core/presence/codec-digest.ts +15 -9
  637. package/src/core/presence/relay-client.ts +55 -7
  638. package/src/core/semantic/adapters.ts +452 -0
  639. package/src/core/semantic/contract.ts +430 -0
  640. package/src/core/semantic/evidence.ts +336 -0
  641. package/src/core/semantic/index.ts +201 -0
  642. package/src/core/semantic/once.ts +496 -0
  643. package/src/core/semantic/prompt.ts +96 -0
  644. package/src/core/semantic/review.ts +803 -0
  645. package/src/core/semantic/routes.ts +30 -0
  646. package/src/core/semantic/scheduler.ts +151 -0
  647. package/src/core/semantic/service-status.ts +212 -0
  648. package/src/core/semantic/service.ts +681 -0
  649. package/src/core/semantic/soak.ts +638 -0
  650. package/src/core/semantic/storage.ts +300 -0
  651. package/src/core/semantic/usage.ts +272 -0
  652. package/src/core/semantic/validate.ts +243 -0
  653. package/src/core/storage/buffer.ts +124 -0
  654. package/src/core/storage/builtins.ts +916 -0
  655. package/src/core/storage/catalog.ts +467 -0
  656. package/src/core/storage/config.ts +423 -0
  657. package/src/core/storage/contract.ts +342 -0
  658. package/src/core/storage/durable-history.ts +738 -0
  659. package/src/core/storage/health.ts +76 -0
  660. package/src/core/storage/index.ts +15 -0
  661. package/src/core/storage/inventory.ts +859 -0
  662. package/src/core/storage/jsonl.ts +213 -0
  663. package/src/core/storage/log-retention.ts +555 -0
  664. package/src/core/storage/logger.ts +546 -0
  665. package/src/core/storage/maintenance-providers.ts +200 -0
  666. package/src/core/storage/maintenance.ts +929 -0
  667. package/src/core/storage/metrics.ts +199 -0
  668. package/src/core/storage/policy.ts +141 -0
  669. package/src/core/storage/process-log.ts +203 -0
  670. package/src/core/storage/query.ts +360 -0
  671. package/src/core/storage/receipts.ts +162 -0
  672. package/src/core/storage/segments.ts +721 -0
  673. package/src/core/storage/sink-graph.ts +343 -0
  674. package/src/core/storage/storm-control.ts +91 -0
  675. package/src/core/work/state.ts +12 -21
  676. package/src/core/workflow/live-session-v3.ts +2 -4
  677. package/src/index.ts +2 -0
  678. package/src/lazy-commands.ts +294 -0
  679. package/src/lib/browser/client.ts +21 -0
  680. package/src/lib/browser/index.ts +4 -0
  681. package/src/lib/browser/standalone-html.ts +312 -0
  682. package/src/lib/docs-lint.ts +58 -77
  683. package/src/lib/docs-metadata-audit.ts +26 -21
  684. package/src/lib/docs-metadata-sync.ts +32 -9
  685. package/src/lib/docs-repository-view.ts +220 -0
  686. package/src/lib/http/client.ts +44 -8
  687. package/src/lib/http/index.ts +6 -1
  688. package/src/lib/indexer-exclusions.ts +173 -0
  689. package/src/lib/instructions/apply.ts +1 -0
  690. package/src/lib/instructions/templates.ts +154 -4
  691. package/src/lib/local-file-url.ts +31 -0
  692. package/src/lib/web-performance.ts +335 -0
@@ -1,11 +1,15 @@
1
1
  import { randomUUID } from "node:crypto";
2
- import { canonicalJsonV3, sha256V3 } from "../events/v3/canonical.js";
2
+ import { canonicalJsonV3, normalizeNativeIdV3, sha256V3 } from "../events/v3/canonical.js";
3
+ import { readEventV3ControlState } from "../events/v3/control.js";
3
4
  import { readCoordinationViewV3, requireAuthoritySafeCoordinationViewV3, } from "../events/v3/coordination-view.js";
5
+ import { fingerprintContextV3 } from "../events/v3/fingerprint-keys.js";
4
6
  import { LIVE_HOOK_V3_PRODUCER_ID, liveInstanceIdV3, livePlatformV3, resolveLiveEventLedgerRouteV3, } from "../events/v3/live-routing.js";
5
7
  import { recordCoordinationAuthorityV3, } from "../events/v3/producers/coordination-recorder.js";
6
- import { readTerminalHookProducerStateV3, recordHookSignalV3, } from "../events/v3/producers/recorder.js";
8
+ import { listHookProducerStateRecordsV3, readHookProducerStateV3, readTerminalHookProducerStateV3, recordHookSignalV3, } from "../events/v3/producers/recorder.js";
9
+ import { canonicalClaimPath } from "./claim-path.js";
7
10
  import { acquireClaim, readHeartbeat, releaseClaim, setIdentityCache, setLifecycleCache, setTask, } from "./state/heartbeat-writer.js";
8
- import { ensureLiveCoordinationHeartbeat, liveCoordinationAdapterV3, } from "./state/live-coordination-view.js";
11
+ import { liveCoordinationAdapterV3, readLiveCoordinationRow, } from "./state/live-coordination-view.js";
12
+ import { ensureLiveCoordinationHeartbeat } from "./state/live-coordination-writer.js";
9
13
  import { recordNameAssumption } from "./state/names.js";
10
14
  export const LIVE_COORDINATION_V3_PRODUCER_ID = "prd_agent-coord";
11
15
  export class LiveCoordinationAuthorityV3Error extends Error {
@@ -16,6 +20,237 @@ export class LiveCoordinationAuthorityV3Error extends Error {
16
20
  this.name = "LiveCoordinationAuthorityV3Error";
17
21
  }
18
22
  }
23
+ /**
24
+ * Establish the missing generation authority for one adapter-native session,
25
+ * then reconstruct its disposable heartbeat cache.
26
+ *
27
+ * This is intentionally narrower than mid-flight hook onboarding. The caller
28
+ * must supply an already validated native session, adapter, and current
29
+ * instance identity. Existing authority is reused only when all three bind to
30
+ * the same non-terminal producer generation. A terminal generation, an
31
+ * adapter/session collision, or any disagreement between private producer
32
+ * control and the public projection fails closed. No turn is synthesized.
33
+ */
34
+ export function bootstrapLiveCoordinationAuthorityV3(input) {
35
+ if (!/^[a-zA-Z0-9._-]{1,128}$/.test(input.owner)) {
36
+ throw new LiveCoordinationAuthorityV3Error("invalid_instance_identity");
37
+ }
38
+ if (input.nativeSessionId.length === 0 ||
39
+ input.nativeSessionId.length > 512 ||
40
+ input.nativeSessionId.includes("\0")) {
41
+ throw new LiveCoordinationAuthorityV3Error("invalid_native_session_identity");
42
+ }
43
+ const route = resolveLiveEventLedgerRouteV3(input.coordRoot);
44
+ if (route.state === "blocked")
45
+ throw new LiveCoordinationAuthorityV3Error(route.reason);
46
+ const control = readEventV3ControlState(input.coordRoot);
47
+ if (control.state !== route.mode) {
48
+ throw new LiveCoordinationAuthorityV3Error("control_state_mismatch");
49
+ }
50
+ const instanceId = liveInstanceIdV3(input.owner);
51
+ const rootId = control.genesis.event.scope.root_id;
52
+ const context = fingerprintContextV3(input.coordRoot, rootId, undefined, control.genesis.profile.privacy_key_epoch);
53
+ const sessionId = `sid_${normalizeNativeIdV3(context, `${input.adapter}.session`, input.nativeSessionId).slice(4)}`;
54
+ const view = readAuthoritySafeViewForBootstrap(input.coordRoot);
55
+ const existing = view.instances[instanceId];
56
+ const sessionStates = readSessionProducerStatesForBootstrap(input.coordRoot, input.nativeSessionId);
57
+ const instanceStates = readInstanceProducerStatesForBootstrap(input.coordRoot, instanceId);
58
+ const crossAdapter = sessionStates.find((state) => state.adapter !== input.adapter);
59
+ if (crossAdapter) {
60
+ throw new LiveCoordinationAuthorityV3Error("cross_adapter_identity");
61
+ }
62
+ const crossInstance = sessionStates.find((state) => state.instance_id !== instanceId);
63
+ if (crossInstance) {
64
+ throw new LiveCoordinationAuthorityV3Error("cross_instance_identity");
65
+ }
66
+ const direct = sessionStates.find((state) => state.adapter === input.adapter);
67
+ if (direct?.terminal ||
68
+ (!existing && terminalGenerationForSession(view, instanceId, sessionId))) {
69
+ throw new LiveCoordinationAuthorityV3Error("terminal_generation_forbidden");
70
+ }
71
+ const liveInstanceStates = instanceStates.filter((state) => !state.terminal);
72
+ if (liveInstanceStates.length > 1 || sessionStates.length > 1) {
73
+ throw new LiveCoordinationAuthorityV3Error("generation_ambiguous");
74
+ }
75
+ if (existing) {
76
+ const observedAdapter = existing.runtime_attestation.adapter;
77
+ if (observedAdapter.state !== "observed" || observedAdapter.value.id !== input.adapter) {
78
+ throw new LiveCoordinationAuthorityV3Error("cross_adapter_identity");
79
+ }
80
+ if (existing.session_id !== sessionId) {
81
+ throw new LiveCoordinationAuthorityV3Error("cross_session_identity");
82
+ }
83
+ if (!direct ||
84
+ direct.terminal ||
85
+ direct.generation_id !== existing.generation_id ||
86
+ liveInstanceStates.length !== 1 ||
87
+ liveInstanceStates[0]?.generation_id !== existing.generation_id) {
88
+ throw new LiveCoordinationAuthorityV3Error("generation_control_mismatch");
89
+ }
90
+ return materializeBootstrappedAuthority(input, existing.generation_id, "reused");
91
+ }
92
+ if (direct || liveInstanceStates.length > 0) {
93
+ throw new LiveCoordinationAuthorityV3Error("generation_control_mismatch");
94
+ }
95
+ const started = recordHookSignalV3({
96
+ coordRoot: input.coordRoot,
97
+ mode: route.mode,
98
+ signal: "session-start",
99
+ payload: { raw: {}, session_id: input.nativeSessionId },
100
+ adapter: input.adapter,
101
+ instance_id: instanceId,
102
+ producer_id: LIVE_HOOK_V3_PRODUCER_ID,
103
+ build_id: route.build_id,
104
+ platform: livePlatformV3(),
105
+ session_start_derivation: "validated_current_session_heal",
106
+ });
107
+ if (started.state !== "recorded" && started.state !== "already_started") {
108
+ const reason = "reason" in started ? `:${started.reason}` : "";
109
+ throw new LiveCoordinationAuthorityV3Error(`generation_bootstrap_failed:${started.state}${reason}`);
110
+ }
111
+ const after = readAuthoritySafeViewForBootstrap(input.coordRoot).instances[instanceId];
112
+ const producer = readSessionProducerStatesForBootstrap(input.coordRoot, input.nativeSessionId).filter((state) => state.adapter === input.adapter && state.instance_id === instanceId);
113
+ if (!after ||
114
+ after.session_id !== sessionId ||
115
+ producer.length !== 1 ||
116
+ producer[0]?.terminal ||
117
+ producer[0]?.generation_id !== after.generation_id) {
118
+ throw new LiveCoordinationAuthorityV3Error("generation_control_mismatch");
119
+ }
120
+ return materializeBootstrappedAuthority(input, after.generation_id, started.state === "recorded" ? "created" : "reused");
121
+ }
122
+ function readAuthoritySafeViewForBootstrap(coordRoot) {
123
+ try {
124
+ return requireAuthoritySafeCoordinationViewV3(readCoordinationViewV3(coordRoot));
125
+ }
126
+ catch (error) {
127
+ if (error instanceof LiveCoordinationAuthorityV3Error)
128
+ throw error;
129
+ throw new LiveCoordinationAuthorityV3Error("coordination_view_unsafe");
130
+ }
131
+ }
132
+ function readSessionProducerStatesForBootstrap(coordRoot, nativeSessionId) {
133
+ try {
134
+ return ["claude-code", "codex", "cursor"]
135
+ .map((adapter) => readHookProducerStateV3(coordRoot, adapter, nativeSessionId))
136
+ .filter((state) => state !== undefined);
137
+ }
138
+ catch {
139
+ throw new LiveCoordinationAuthorityV3Error("producer_state_unsafe");
140
+ }
141
+ }
142
+ function readInstanceProducerStatesForBootstrap(coordRoot, instanceId) {
143
+ try {
144
+ return listHookProducerStateRecordsV3(coordRoot, { includeTerminal: true })
145
+ .map((record) => record.state)
146
+ .filter((state) => state.instance_id === instanceId);
147
+ }
148
+ catch {
149
+ throw new LiveCoordinationAuthorityV3Error("producer_state_unsafe");
150
+ }
151
+ }
152
+ function terminalGenerationForSession(view, instanceId, sessionId) {
153
+ return Object.values(view.terminal_generations).some((generation) => generation.instance_id === instanceId && generation.session_id === sessionId);
154
+ }
155
+ function materializeBootstrappedAuthority(input, generationId, state) {
156
+ const heartbeat = ensureLiveCoordinationHeartbeat(input.coordRoot, input.owner, input.nativeSessionId, input.adapter);
157
+ if (!heartbeat || heartbeat.v3_generation_id !== generationId) {
158
+ throw new LiveCoordinationAuthorityV3Error("generation_materialization_failed");
159
+ }
160
+ return {
161
+ state,
162
+ adapter: input.adapter,
163
+ generation_id: generationId,
164
+ heartbeat,
165
+ };
166
+ }
167
+ /**
168
+ * Reapply private, generation-bound coordination state after a runtime epoch
169
+ * replaces the canonical ledger. The old heartbeat is only accepted for the
170
+ * same native session and a different V3 generation. Its task prose and
171
+ * lifecycle reason remain in the disposable cache; canonical events retain
172
+ * only the privacy-safe authority signals.
173
+ */
174
+ export function restoreLiveCoordinationStateAfterEpochV3(input) {
175
+ const unchanged = {
176
+ state: "unchanged",
177
+ task: false,
178
+ claims: 0,
179
+ lifecycle: false,
180
+ };
181
+ const prior = input.prior;
182
+ if (!prior || prior.instance_id !== input.owner)
183
+ return unchanged;
184
+ if (prior.session_id !== input.nativeSessionId &&
185
+ prior.native_session_id !== input.nativeSessionId) {
186
+ return unchanged;
187
+ }
188
+ // The recorder just committed this hook under the named generation. When
189
+ // it is the cache's generation, no epoch replacement occurred and the
190
+ // expensive complete coordination projection cannot change the answer.
191
+ if (input.currentGenerationId && prior.v3_generation_id === input.currentGenerationId) {
192
+ return unchanged;
193
+ }
194
+ const view = requireAuthoritySafeCoordinationViewV3(readCoordinationViewV3(input.coordRoot));
195
+ const priorGenerationStillCurrent = [
196
+ ...Object.values(view.instances),
197
+ ...Object.values(view.terminal_generations),
198
+ ].some((generation) => generation.generation_id === prior.v3_generation_id);
199
+ if (priorGenerationStillCurrent)
200
+ return unchanged;
201
+ const current = readLiveCoordinationRow(input.coordRoot, input.owner);
202
+ if (!current || !prior.v3_generation_id || current.v3_generation_id === prior.v3_generation_id) {
203
+ return unchanged;
204
+ }
205
+ let task = false;
206
+ let claims = 0;
207
+ let lifecycle = false;
208
+ if (typeof prior.task === "string" && prior.task.length > 0 && current.task !== prior.task) {
209
+ recordLiveTaskChangeV3({
210
+ coordRoot: input.coordRoot,
211
+ owner: input.owner,
212
+ nativeSessionId: input.nativeSessionId,
213
+ adapter: input.adapter,
214
+ task: prior.task,
215
+ });
216
+ task = true;
217
+ }
218
+ const currentClaims = new Set((current.files_touched ?? []).map((path) => canonicalClaimPath(input.coordRoot, path)));
219
+ for (const path of [...new Set(prior.files_touched ?? [])].sort()) {
220
+ const canonical = canonicalClaimPath(input.coordRoot, path);
221
+ if (currentClaims.has(canonical))
222
+ continue;
223
+ recordLiveClaimChangeV3({
224
+ coordRoot: input.coordRoot,
225
+ owner: input.owner,
226
+ nativeSessionId: input.nativeSessionId,
227
+ adapter: input.adapter,
228
+ operation: "acquired",
229
+ path: canonical,
230
+ });
231
+ currentClaims.add(canonical);
232
+ claims += 1;
233
+ }
234
+ const priorLifecycle = prior.task_state ?? "active";
235
+ if (priorLifecycle !== "active" &&
236
+ (current.task_state !== priorLifecycle || current.task_state_reason !== prior.task_state_reason)) {
237
+ recordLiveLifecycleChangeV3({
238
+ coordRoot: input.coordRoot,
239
+ owner: input.owner,
240
+ nativeSessionId: input.nativeSessionId,
241
+ adapter: input.adapter,
242
+ state: priorLifecycle,
243
+ ...(prior.task_state_reason ? { reason: prior.task_state_reason } : {}),
244
+ ...(prior.suggested_session_name
245
+ ? { suggestedSessionName: prior.suggested_session_name }
246
+ : {}),
247
+ });
248
+ lifecycle = true;
249
+ }
250
+ return task || claims > 0 || lifecycle
251
+ ? { state: "restored", task, claims, lifecycle }
252
+ : unchanged;
253
+ }
19
254
  /**
20
255
  * Open a fresh derived generation for a human-facing session that is executing
21
256
  * again after an authoritative terminal. The terminal generation is never
@@ -101,7 +336,7 @@ export function recordLiveLifecycleChangeV3(input) {
101
336
  task_state_reason: input.state === "active" ? undefined : input.reason,
102
337
  ...(input.suggestedSessionName ? { suggested_session_name: input.suggestedSessionName } : {}),
103
338
  };
104
- if (authorityStateDigest(before) === authorityStateDigest(desired))
339
+ if (coordinationAuthorityStateDigestV3(before) === coordinationAuthorityStateDigestV3(desired))
105
340
  return { state: "unchanged" };
106
341
  return recordLiveAuthority(input, "lifecycle-changed", {
107
342
  native_observation_id: input.observationId ?? `lifecycle-${randomUUID()}`,
@@ -127,7 +362,7 @@ export function recordLiveClaimChangeV3(input) {
127
362
  ].sort()
128
363
  : (before.files_touched ?? []).filter((path) => canonicalClaimPath(input.coordRoot, path) !== canonical);
129
364
  const desired = { ...before, files_touched: desiredFiles };
130
- if (authorityStateDigest(before) === authorityStateDigest(desired))
365
+ if (coordinationAuthorityStateDigestV3(before) === coordinationAuthorityStateDigestV3(desired))
131
366
  return { state: "unchanged" };
132
367
  return recordLiveAuthority(input, "claim-changed", {
133
368
  native_observation_id: input.observationId ?? `claim-${randomUUID()}`,
@@ -147,7 +382,7 @@ export function recordLiveIdentityChangeV3(input) {
147
382
  const subject = input.subject ?? input.owner;
148
383
  const before = requireHeartbeat(input, subject);
149
384
  const desired = { ...before, name: input.name, agent_id: input.identityId };
150
- if (authorityStateDigest(before) === authorityStateDigest(desired))
385
+ if (coordinationAuthorityStateDigestV3(before) === coordinationAuthorityStateDigestV3(desired))
151
386
  return { state: "unchanged" };
152
387
  return recordLiveAuthority(input, "identity-attested", {
153
388
  native_observation_id: input.observationId ?? `identity-${randomUUID()}`,
@@ -180,15 +415,15 @@ function recordLiveAuthority(input, signal, observation, expected, desired, appl
180
415
  producer_id: LIVE_COORDINATION_V3_PRODUCER_ID,
181
416
  build_id: route.build_id,
182
417
  platform: livePlatformV3(),
183
- expected_prior_state_digest: authorityStateDigest(expected),
184
- desired_state_digest: authorityStateDigest(desired),
418
+ expected_prior_state_digest: coordinationAuthorityStateDigestV3(expected),
419
+ desired_state_digest: coordinationAuthorityStateDigestV3(desired),
185
420
  reconciler: {
186
421
  readStateDigest: () => {
187
422
  const heartbeat = readHeartbeat(input.coordRoot, subject);
188
423
  if (!heartbeat || heartbeat.v3_generation_id !== expected.v3_generation_id) {
189
424
  throw new LiveCoordinationAuthorityV3Error(`heartbeat_generation_mismatch:${subject}`);
190
425
  }
191
- return authorityStateDigest(heartbeat);
426
+ return coordinationAuthorityStateDigestV3(heartbeat);
192
427
  },
193
428
  apply: (_mutation) => apply(),
194
429
  },
@@ -216,7 +451,7 @@ function requireHeartbeat(input, owner) {
216
451
  throw new LiveCoordinationAuthorityV3Error(`heartbeat_missing:${owner}`);
217
452
  return heartbeat;
218
453
  }
219
- function authorityStateDigest(heartbeat) {
454
+ export function coordinationAuthorityStateDigestV3(heartbeat) {
220
455
  return sha256V3(canonicalJsonV3({
221
456
  instance_id: heartbeat.v3_instance_id ?? heartbeat.instance_id,
222
457
  generation_id: heartbeat.v3_generation_id ?? null,
@@ -228,6 +463,3 @@ function authorityStateDigest(heartbeat) {
228
463
  display_name: heartbeat.name ?? null,
229
464
  }));
230
465
  }
231
- function canonicalClaimPath(coordRoot, path) {
232
- return path.startsWith(`${coordRoot}/`) ? path.slice(coordRoot.length + 1) : path;
233
- }
@@ -4,7 +4,7 @@ import { normalizeNativeIdV3 } from "../events/v3/canonical.js";
4
4
  import { readEventV3ControlState } from "../events/v3/control.js";
5
5
  import { fingerprintContextV3 } from "../events/v3/fingerprint-keys.js";
6
6
  import { liveInstanceIdV3, livePlatformV3, resolveLiveEventLedgerRouteV3, } from "../events/v3/live-routing.js";
7
- import { readHookProducerStateV3 } from "../events/v3/producers/recorder.js";
7
+ import { readJoinableHookProducerStateV3 } from "../events/v3/producers/recorder.js";
8
8
  import { writeEventV3 } from "../events/v3/writer.js";
9
9
  import { LiveCoordinationAuthorityV3Error } from "./live-authority-v3.js";
10
10
  import { liveCoordinationAdapterV3 } from "./state/live-coordination-view.js";
@@ -73,7 +73,12 @@ function recordObservation(input, eventType, payload) {
73
73
  monotonic_ns: process.hrtime.bigint().toString(),
74
74
  };
75
75
  const event = buildEventV3(eventType, { ...common, payload });
76
- writeEventV3(input.coordRoot, event);
76
+ const durability = writeEventV3(input.coordRoot, event, {
77
+ expectedGenesisId: control.genesis.event.payload.genesis_id,
78
+ });
79
+ if (durability.state === "epoch_replaced") {
80
+ throw new LiveCoordinationAuthorityV3Error("epoch_replaced");
81
+ }
77
82
  return { state: "recorded", event };
78
83
  }
79
84
  function withAttestedAdapter(input) {
@@ -83,8 +88,8 @@ function withAttestedAdapter(input) {
83
88
  return { ...input, adapter };
84
89
  }
85
90
  function requireHookState(input) {
86
- const hook = readHookProducerStateV3(input.coordRoot, input.adapter, input.nativeSessionId);
87
- if (!hook || hook.instance_id !== liveInstanceIdV3(input.owner)) {
91
+ const hook = readJoinableHookProducerStateV3(input.coordRoot, input.adapter, input.nativeSessionId, liveInstanceIdV3(input.owner));
92
+ if (!hook) {
88
93
  throw new LiveCoordinationAuthorityV3Error("hook_generation_not_joinable");
89
94
  }
90
95
  return hook;
@@ -1 +1 @@
1
- {"version":3,"file":"live-observation-v3.d.ts","sourceRoot":"","sources":["../../../src/core/agents/live-observation-v3.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAQ7C,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAIrE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,kCAAkC,CAAC;AAWtF,YAAY,EAAE,6BAA6B,EAAE,MAAM,kCAAkC,CAAC;AAEtF,MAAM,WAAW,wCAAwC;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,6BAA6B,CAAC;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,yCAAyC;IACxD,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,wCAAwC,GAC9C,yCAAyC,CAkJ3C;AAkBD,MAAM,MAAM,sCAAsC,GAAG,OAAO,CAC1D,WAAW,EACX,6BAA6B,CAAC,YAAY,CAAC,CAC5C,CAAC"}
1
+ {"version":3,"file":"live-observation-v3.d.ts","sourceRoot":"","sources":["../../../src/core/agents/live-observation-v3.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAQ7C,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAIrE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,kCAAkC,CAAC;AAWtF,YAAY,EAAE,6BAA6B,EAAE,MAAM,kCAAkC,CAAC;AAEtF,MAAM,WAAW,wCAAwC;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,6BAA6B,CAAC;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,yCAAyC;IACxD,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,wCAAwC,GAC9C,yCAAyC,CA4J3C;AAkBD,MAAM,MAAM,sCAAsC,GAAG,OAAO,CAC1D,WAAW,EACX,6BAA6B,CAAC,YAAY,CAAC,CAC5C,CAAC"}
@@ -5,7 +5,7 @@ import { readEventV3ControlState } from "../events/v3/control.js";
5
5
  import { readCoordinationViewV3 } from "../events/v3/coordination-view.js";
6
6
  import { fingerprintContextV3 } from "../events/v3/fingerprint-keys.js";
7
7
  import { liveInstanceIdV3, livePlatformV3, resolveLiveEventLedgerRouteV3, } from "../events/v3/live-routing.js";
8
- import { readHookProducerStateV3 } from "../events/v3/producers/recorder.js";
8
+ import { readJoinableHookProducerStateV3 } from "../events/v3/producers/recorder.js";
9
9
  import { writeEventV3 } from "../events/v3/writer.js";
10
10
  import { LiveCoordinationAuthorityV3Error } from "./live-authority-v3.js";
11
11
  import { liveCoordinationAdapterV3 } from "./state/live-coordination-view.js";
@@ -23,7 +23,7 @@ export function recordLiveCoordinationObservationV3(input) {
23
23
  throw new LiveCoordinationAuthorityV3Error("control_state_changed");
24
24
  }
25
25
  const adapter = liveCoordinationAdapterV3(input.coordRoot, input.owner) ?? input.adapter;
26
- const hook = readHookProducerStateV3(input.coordRoot, adapter, input.nativeSessionId);
26
+ const hook = readJoinableHookProducerStateV3(input.coordRoot, adapter, input.nativeSessionId, liveInstanceIdV3(input.owner));
27
27
  if (!hook ||
28
28
  hook.terminal ||
29
29
  !hook.last_event_id ||
@@ -138,7 +138,12 @@ export function recordLiveCoordinationObservationV3(input) {
138
138
  break;
139
139
  }
140
140
  }
141
- writeEventV3(input.coordRoot, event);
141
+ const durability = writeEventV3(input.coordRoot, event, {
142
+ expectedGenesisId: control.genesis.event.payload.genesis_id,
143
+ });
144
+ if (durability.state === "epoch_replaced") {
145
+ throw new LiveCoordinationAuthorityV3Error("epoch_replaced");
146
+ }
142
147
  return { state: "recorded", event };
143
148
  }
144
149
  function safeToken(value) {
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * UserPromptSubmit UX renderer. Combines the peer-refresh dedup, the
3
3
  * council-pending hash-dedup, the cross-adapter first-session naming nudge,
4
- * the Cursor/Codex set-task staleness nudge, and the Codex status-footer
5
- * reminder.
4
+ * the Cursor/Codex set-task staleness nudge, a host-configured prompt reminder,
5
+ * and the Codex status-footer reminder.
6
6
  * agent-hook's turn.started post-emit handler calls this
7
7
  * and forwards the result as the adapter-shaped additionalContext payload.
8
8
  *
@@ -18,7 +18,10 @@
18
18
  * Cursor/Codex additionally get the existing unset/stale-task reminder
19
19
  * because their Stop hooks do not enforce task declarations as reliably
20
20
  * as Claude Code's.
21
- * 4. Codex status footer: a non-deduplicated reminder to put the live status
21
+ * 4. Host prompt reminder: a project-owned, non-deduplicated line for
22
+ * adapters whose prompt hook can inject context and which lack a native
23
+ * reminder mechanism. Hook routing decides which adapters enable it.
24
+ * 5. Codex status footer: a non-deduplicated reminder to put the live status
22
25
  * box after the substantive answer. Stop stays observe-only, so missing the
23
26
  * footer can never trigger a replacement response.
24
27
  *
@@ -40,6 +43,9 @@ export interface PromptContextOpts {
40
43
  /** When true, run the unset/stale-task check after the first set-task.
41
44
  * Cursor/Codex use this; Claude Code has Stop-hook transcript enforcement. */
42
45
  taskNudge?: boolean;
46
+ /** When true, append the project-configured prompt reminder without hash
47
+ * deduplication. The caller enables this only on supported adapter routes. */
48
+ hostPromptReminder?: boolean;
43
49
  /** When true, append the non-deduplicated Codex status-footer reminder.
44
50
  * The caller enables this only for human-facing Codex sessions. */
45
51
  statusFooterNudge?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-context.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/render/prompt-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AA4CH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;8EAC0E;IAC1E,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;kFAC8E;IAC9E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;uEACmE;IACnE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;wBAIoB;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAqDnE"}
1
+ {"version":3,"file":"prompt-context.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/render/prompt-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AA4CH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;8EAC0E;IAC1E,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;kFAC8E;IAC9E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;kFAC8E;IAC9E,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;uEACmE;IACnE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;wBAIoB;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CA8DnE"}
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * UserPromptSubmit UX renderer. Combines the peer-refresh dedup, the
3
3
  * council-pending hash-dedup, the cross-adapter first-session naming nudge,
4
- * the Cursor/Codex set-task staleness nudge, and the Codex status-footer
5
- * reminder.
4
+ * the Cursor/Codex set-task staleness nudge, a host-configured prompt reminder,
5
+ * and the Codex status-footer reminder.
6
6
  * agent-hook's turn.started post-emit handler calls this
7
7
  * and forwards the result as the adapter-shaped additionalContext payload.
8
8
  *
@@ -18,7 +18,10 @@
18
18
  * Cursor/Codex additionally get the existing unset/stale-task reminder
19
19
  * because their Stop hooks do not enforce task declarations as reliably
20
20
  * as Claude Code's.
21
- * 4. Codex status footer: a non-deduplicated reminder to put the live status
21
+ * 4. Host prompt reminder: a project-owned, non-deduplicated line for
22
+ * adapters whose prompt hook can inject context and which lack a native
23
+ * reminder mechanism. Hook routing decides which adapters enable it.
24
+ * 5. Codex status footer: a non-deduplicated reminder to put the live status
22
25
  * box after the substantive answer. Stop stays observe-only, so missing the
23
26
  * footer can never trigger a replacement response.
24
27
  *
@@ -33,7 +36,7 @@ import { createHash } from "node:crypto";
33
36
  import { existsSync, mkdirSync, readdirSync, readFileSync, renameSync, rmSync, writeFileSync, } from "node:fs";
34
37
  import { join } from "node:path";
35
38
  import { coordEnv } from "../../../lib/env.js";
36
- import { endOfTurnStatusCommand, resolveBinName } from "../../config.js";
39
+ import { endOfTurnStatusCommand, hostPromptReminder, resolveBinName } from "../../config.js";
37
40
  import { readRemoteMachines } from "../../presence/index.js";
38
41
  import { sessionNameDisplayBlock, sessionNameDisplayPending } from "../session-name-display.js";
39
42
  import { readLiveCoordinationRow, readLiveCoordinationRows, } from "../state/live-coordination-view.js";
@@ -47,7 +50,7 @@ import { formatPendingCouncils } from "./session-context.js";
47
50
  * councils are pending, matching the bash behavior).
48
51
  */
49
52
  export function renderPromptContext(opts) {
50
- const { coordRoot, instanceId, sessionId, agentName, sessionNameNudge, taskNudge, statusFooterNudge, turnRitualNudge, } = opts;
53
+ const { coordRoot, instanceId, sessionId, agentName, sessionNameNudge, taskNudge, hostPromptReminder: promptReminderEnabled, statusFooterNudge, turnRitualNudge, } = opts;
51
54
  const sections = [];
52
55
  // 1. Peer table with hash dedup.
53
56
  const peerTable = computePeerTableIfChanged(coordRoot, instanceId, sessionId);
@@ -70,7 +73,15 @@ export function renderPromptContext(opts) {
70
73
  if (nudgeMsg)
71
74
  sections.push(nudgeMsg);
72
75
  }
73
- // 4. Codex gets this on every prompt. It is intentionally not hash-deduped:
76
+ // 4. A supported adapter gets the host reminder on every prompt. The text is
77
+ // intentionally not hash-deduped or persisted into runtime state: freshness
78
+ // is the feature, and the project config remains its only durable copy.
79
+ if (promptReminderEnabled) {
80
+ const reminder = renderHostPromptReminder(coordRoot, instanceId);
81
+ if (reminder)
82
+ sections.push(reminder);
83
+ }
84
+ // 5. Codex gets this on every prompt. It is intentionally not hash-deduped:
74
85
  // the reminder must be fresh in the model's context when it writes the reply.
75
86
  // Missing it is harmless because Codex Stop enforcement remains observe-only.
76
87
  if (statusFooterNudge) {
@@ -78,7 +89,7 @@ export function renderPromptContext(opts) {
78
89
  if (statusMsg)
79
90
  sections.push(statusMsg);
80
91
  }
81
- // 5. Adapters whose Stop hook ENFORCES the turn ritual get a fresh reminder
92
+ // 6. Adapters whose Stop hook ENFORCES the turn ritual get a fresh reminder
82
93
  // on every prompt. Reminding before the reply is drafted is far cheaper than
83
94
  // the bounce-and-retry the Stop hook otherwise forces: enforcement-only
84
95
  // compliance was measured missing on a double-digit share of turns. Not
@@ -90,6 +101,12 @@ export function renderPromptContext(opts) {
90
101
  }
91
102
  return sections.join("\n\n");
92
103
  }
104
+ function renderHostPromptReminder(coordRoot, selfInstanceId) {
105
+ const hb = readLiveCoordinationRow(coordRoot, selfInstanceId);
106
+ if (!hb || hb.kind === "subagent" || hb.kind === "transient" || hb.workflow_run_id)
107
+ return "";
108
+ return hostPromptReminder(coordRoot) ?? "";
109
+ }
93
110
  function renderTurnRitualReminder(coordRoot, selfInstanceId, adapter) {
94
111
  const hb = readLiveCoordinationRow(coordRoot, selfInstanceId);
95
112
  if (!hb || hb.kind === "subagent" || hb.kind === "transient" || hb.workflow_run_id)
@@ -140,7 +157,7 @@ function computeFocusNudgeIfChanged(coordRoot, selfInstanceId, opts) {
140
157
  // Keyed on "a name was ever produced", not task_updated_at: a bare clear
141
158
  // as the first declaration must not end the naming window.
142
159
  needsNudge = true;
143
- nudgeKind = "session-name";
160
+ nudgeKind = pendingSessionName ? "session-name-pending" : "session-name-unminted";
144
161
  message = pendingSessionName
145
162
  ? `This session name is still pending display. Before any prose or another tool call, send this exact block as your next assistant text:\n\n${sessionNameDisplayBlock(pendingSessionName)}`
146
163
  : `This session has no name yet: run \`${bin} agents set-task "<2-5 word session topic>"\` as your first tool call. ` +
@@ -170,18 +187,20 @@ function computeFocusNudgeIfChanged(coordRoot, selfInstanceId, opts) {
170
187
  clearHashFile(hashFile);
171
188
  return "";
172
189
  }
173
- // The session-name reminder is deliberately NOT deduped: it re-emits on
174
- // every prompt until a name is produced, because the "still unnamed" state
175
- // is the failure state — deduping it erases the only reminder after one
176
- // ignored prompt (the miss mode operators reported). Bounded in practice:
177
- // Stop rule 3/3 forces a set-task on the first tool-using turn.
178
- if (nudgeKind === "session-name") {
190
+ // An unminted session still gets a fresh reminder on every prompt until its
191
+ // first focus declaration. Once a name exists, the exact pending-name prompt
192
+ // is delivered once per minted value. Repeating it on every prompt creates
193
+ // an unbounded loop on adapters that cannot verify assistant reply text.
194
+ if (nudgeKind === "session-name-unminted") {
179
195
  clearHashFile(hashFile);
180
196
  return message;
181
197
  }
182
- // Dedup the task-unset/stale reminders on kind + task state so a repeat
183
- // prompt in the same state stays quiet.
184
- const state = `${nudgeKind}|task=${taskValue}|updated=${hb.task_updated_at ?? ""}|threshold=${threshold}`;
198
+ // A pending reminder is keyed only to the minted name: changing the task
199
+ // must not reconstruct or re-request that older title. Task reminders retain
200
+ // their own task-state key.
201
+ const state = nudgeKind === "session-name-pending"
202
+ ? `${nudgeKind}|name=${pendingSessionName ?? ""}`
203
+ : `${nudgeKind}|task=${taskValue}|updated=${hb.task_updated_at ?? ""}|threshold=${threshold}`;
185
204
  const newHash = sha256Hex16(state);
186
205
  const oldHash = safeRead(hashFile);
187
206
  if (oldHash && oldHash === newHash)
@@ -20,6 +20,8 @@ export interface StopHookRequest {
20
20
  start_ms: number;
21
21
  end_ms: number;
22
22
  };
23
+ stop_hook_active?: boolean;
24
+ status_box_present_strict?: boolean;
23
25
  bypass?: boolean;
24
26
  workflow_child?: boolean;
25
27
  }
@@ -1 +1 @@
1
- {"version":3,"file":"stop-hook.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/rules/stop-hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAM3D,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,WAAW,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,eAAO,MAAM,uBAAuB,8BAA8B,CAAC;AAInE,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,GAAG,aAAa,CA6BvF;AAED,oFAAoF;AACpF,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,SAAS,OAAO,EAAE,GACzB,aAAa,CA2Gf"}
1
+ {"version":3,"file":"stop-hook.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/rules/stop-hook.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAM3D,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,WAAW,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,eAAO,MAAM,uBAAuB,8BAA8B,CAAC;AAInE,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,GAAG,aAAa,CA6BvF;AAED,oFAAoF;AACpF,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,SAAS,OAAO,EAAE,GACzB,aAAa,CAuIf"}