harnery 0.32.0 → 0.34.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 (665) hide show
  1. package/README.md +2 -0
  2. package/dist/commander.d.ts.map +1 -1
  3. package/dist/commander.js +7 -1
  4. package/dist/commands/adapter.js +2 -2
  5. package/dist/commands/agents.d.ts +144 -1
  6. package/dist/commands/agents.d.ts.map +1 -1
  7. package/dist/commands/agents.js +1408 -565
  8. package/dist/commands/artifacts.d.ts.map +1 -1
  9. package/dist/commands/artifacts.js +7 -6
  10. package/dist/commands/backup.d.ts +1 -1
  11. package/dist/commands/backup.d.ts.map +1 -1
  12. package/dist/commands/backup.js +29 -16
  13. package/dist/commands/browse.d.ts.map +1 -1
  14. package/dist/commands/browse.js +234 -12
  15. package/dist/commands/checkpoint.d.ts.map +1 -1
  16. package/dist/commands/checkpoint.js +3 -2
  17. package/dist/commands/claude-desktop.d.ts +2 -2
  18. package/dist/commands/claude-desktop.d.ts.map +1 -1
  19. package/dist/commands/claude-desktop.js +2 -2
  20. package/dist/commands/context.js +1 -6
  21. package/dist/commands/decision.d.ts.map +1 -1
  22. package/dist/commands/decision.js +22 -38
  23. package/dist/commands/docs.d.ts.map +1 -1
  24. package/dist/commands/docs.js +91 -28
  25. package/dist/commands/doctor.d.ts +4 -2
  26. package/dist/commands/doctor.d.ts.map +1 -1
  27. package/dist/commands/doctor.js +55 -7
  28. package/dist/commands/events.d.ts +5 -0
  29. package/dist/commands/events.d.ts.map +1 -0
  30. package/dist/commands/events.js +189 -0
  31. package/dist/commands/governor.d.ts.map +1 -1
  32. package/dist/commands/governor.js +13 -4
  33. package/dist/commands/init.d.ts +10 -2
  34. package/dist/commands/init.d.ts.map +1 -1
  35. package/dist/commands/init.js +233 -51
  36. package/dist/commands/instructions.d.ts +4 -0
  37. package/dist/commands/instructions.d.ts.map +1 -0
  38. package/dist/commands/instructions.js +100 -0
  39. package/dist/commands/journal.d.ts.map +1 -1
  40. package/dist/commands/journal.js +4 -13
  41. package/dist/commands/ledger-v3.d.ts +5 -0
  42. package/dist/commands/ledger-v3.d.ts.map +1 -0
  43. package/dist/commands/ledger-v3.js +91 -0
  44. package/dist/commands/presence.d.ts.map +1 -1
  45. package/dist/commands/presence.js +15 -6
  46. package/dist/commands/sync.d.ts +1 -1
  47. package/dist/commands/sync.js +1 -1
  48. package/dist/commands/web.d.ts +6 -0
  49. package/dist/commands/web.d.ts.map +1 -1
  50. package/dist/commands/web.js +67 -7
  51. package/dist/commands/work.d.ts.map +1 -1
  52. package/dist/commands/work.js +22 -5
  53. package/dist/core/adapter.d.ts +5 -0
  54. package/dist/core/adapter.d.ts.map +1 -0
  55. package/dist/core/adapter.js +1 -0
  56. package/dist/core/adapters/attest.d.ts +5 -2
  57. package/dist/core/adapters/attest.d.ts.map +1 -1
  58. package/dist/core/adapters/attest.js +8 -3
  59. package/dist/core/adapters/profiles.d.ts +6 -6
  60. package/dist/core/adapters/profiles.d.ts.map +1 -1
  61. package/dist/core/adapters/profiles.js +4 -4
  62. package/dist/core/agents/canonical-emit.d.ts +17 -15
  63. package/dist/core/agents/canonical-emit.d.ts.map +1 -1
  64. package/dist/core/agents/canonical-emit.js +27 -25
  65. package/dist/core/agents/cli.js +212 -235
  66. package/dist/core/agents/codex-archive-v3.d.ts +14 -0
  67. package/dist/core/agents/codex-archive-v3.d.ts.map +1 -0
  68. package/dist/core/agents/codex-archive-v3.js +110 -0
  69. package/dist/core/agents/coord-client.d.ts +19 -70
  70. package/dist/core/agents/coord-client.d.ts.map +1 -1
  71. package/dist/core/agents/coord-client.js +65 -155
  72. package/dist/core/agents/finalization.d.ts +4 -1
  73. package/dist/core/agents/finalization.d.ts.map +1 -1
  74. package/dist/core/agents/finalization.js +89 -32
  75. package/dist/core/agents/index.d.ts +5 -5
  76. package/dist/core/agents/index.d.ts.map +1 -1
  77. package/dist/core/agents/index.js +5 -5
  78. package/dist/core/agents/live-authority-v3.d.ts +59 -0
  79. package/dist/core/agents/live-authority-v3.d.ts.map +1 -0
  80. package/dist/core/agents/live-authority-v3.js +233 -0
  81. package/dist/core/agents/live-lifecycle-v3.d.ts +20 -0
  82. package/dist/core/agents/live-lifecycle-v3.d.ts.map +1 -0
  83. package/dist/core/agents/live-lifecycle-v3.js +91 -0
  84. package/dist/core/agents/live-observation-v3.d.ts +25 -0
  85. package/dist/core/agents/live-observation-v3.d.ts.map +1 -0
  86. package/dist/core/agents/live-observation-v3.js +157 -0
  87. package/dist/core/agents/render/prompt-context.d.ts +10 -4
  88. package/dist/core/agents/render/prompt-context.d.ts.map +1 -1
  89. package/dist/core/agents/render/prompt-context.js +61 -55
  90. package/dist/core/agents/render/session-context.d.ts +1 -1
  91. package/dist/core/agents/render/session-context.d.ts.map +1 -1
  92. package/dist/core/agents/render/session-context.js +15 -33
  93. package/dist/core/agents/rules/claim-conflict.d.ts +3 -3
  94. package/dist/core/agents/rules/claim-conflict.d.ts.map +1 -1
  95. package/dist/core/agents/rules/claim-conflict.js +79 -127
  96. package/dist/core/agents/rules/commit-conflict.d.ts.map +1 -1
  97. package/dist/core/agents/rules/commit-conflict.js +3 -18
  98. package/dist/core/agents/rules/stop-hook.d.ts +9 -50
  99. package/dist/core/agents/rules/stop-hook.d.ts.map +1 -1
  100. package/dist/core/agents/rules/stop-hook.js +193 -236
  101. package/dist/core/agents/session-events.d.ts +5 -7
  102. package/dist/core/agents/session-events.d.ts.map +1 -1
  103. package/dist/core/agents/session-events.js +127 -95
  104. package/dist/core/agents/session-finalization-state-v3.d.ts +30 -0
  105. package/dist/core/agents/session-finalization-state-v3.d.ts.map +1 -0
  106. package/dist/core/agents/session-finalization-state-v3.js +40 -0
  107. package/dist/core/agents/session-finalizer-v3.d.ts +107 -0
  108. package/dist/core/agents/session-finalizer-v3.d.ts.map +1 -0
  109. package/dist/core/agents/session-finalizer-v3.js +734 -0
  110. package/dist/core/agents/session-name-display.d.ts +40 -0
  111. package/dist/core/agents/session-name-display.d.ts.map +1 -0
  112. package/dist/core/agents/session-name-display.js +119 -0
  113. package/dist/core/agents/state/activity-log.d.ts +3 -3
  114. package/dist/core/agents/state/activity-log.d.ts.map +1 -1
  115. package/dist/core/agents/state/activity-log.js +7 -16
  116. package/dist/core/agents/state/heartbeat-writer.d.ts +29 -46
  117. package/dist/core/agents/state/heartbeat-writer.d.ts.map +1 -1
  118. package/dist/core/agents/state/heartbeat-writer.js +59 -199
  119. package/dist/core/agents/state/live-coordination-view.d.ts +31 -0
  120. package/dist/core/agents/state/live-coordination-view.d.ts.map +1 -0
  121. package/dist/core/agents/state/live-coordination-view.js +209 -0
  122. package/dist/core/agents/state/session-state.d.ts +45 -0
  123. package/dist/core/agents/state/session-state.d.ts.map +1 -0
  124. package/dist/core/agents/state/session-state.js +90 -0
  125. package/dist/core/agents/state/stale-sweep.d.ts +1 -1
  126. package/dist/core/agents/state/stale-sweep.d.ts.map +1 -1
  127. package/dist/core/agents/state/stale-sweep.js +26 -15
  128. package/dist/core/artifacts/index.d.ts.map +1 -1
  129. package/dist/core/artifacts/index.js +5 -7
  130. package/dist/core/config.d.ts +33 -2
  131. package/dist/core/config.d.ts.map +1 -1
  132. package/dist/core/config.js +98 -2
  133. package/dist/core/context/index.d.ts +1 -4
  134. package/dist/core/context/index.d.ts.map +1 -1
  135. package/dist/core/context/index.js +9 -9
  136. package/dist/core/events/span-parent.d.ts +15 -0
  137. package/dist/core/events/span-parent.d.ts.map +1 -0
  138. package/dist/core/events/span-parent.js +34 -0
  139. package/dist/core/events/v3/advance.d.ts +14 -0
  140. package/dist/core/events/v3/advance.d.ts.map +1 -0
  141. package/dist/core/events/v3/advance.js +134 -0
  142. package/dist/core/events/v3/authority-outbox.d.ts +78 -0
  143. package/dist/core/events/v3/authority-outbox.d.ts.map +1 -0
  144. package/dist/core/events/v3/authority-outbox.js +399 -0
  145. package/dist/core/events/v3/base-builder.d.ts +20 -0
  146. package/dist/core/events/v3/base-builder.d.ts.map +1 -0
  147. package/dist/core/events/v3/base-builder.js +29 -0
  148. package/dist/core/events/v3/base-contract.d.ts +7576 -0
  149. package/dist/core/events/v3/base-contract.d.ts.map +1 -0
  150. package/dist/core/events/v3/base-contract.js +647 -0
  151. package/dist/core/events/v3/bootstrap.d.ts +34 -0
  152. package/dist/core/events/v3/bootstrap.d.ts.map +1 -0
  153. package/dist/core/events/v3/bootstrap.js +175 -0
  154. package/dist/core/events/v3/builder.d.ts +20 -0
  155. package/dist/core/events/v3/builder.d.ts.map +1 -0
  156. package/dist/core/events/v3/builder.js +28 -0
  157. package/dist/core/events/v3/canonical.d.ts +31 -0
  158. package/dist/core/events/v3/canonical.d.ts.map +1 -0
  159. package/dist/core/events/v3/canonical.js +100 -0
  160. package/dist/core/events/v3/capabilities.d.ts +31 -0
  161. package/dist/core/events/v3/capabilities.d.ts.map +1 -0
  162. package/dist/core/events/v3/capabilities.js +107 -0
  163. package/dist/core/events/v3/capability-drift.d.ts +22 -0
  164. package/dist/core/events/v3/capability-drift.d.ts.map +1 -0
  165. package/dist/core/events/v3/capability-drift.js +134 -0
  166. package/dist/core/events/v3/catalog.d.ts +38 -0
  167. package/dist/core/events/v3/catalog.d.ts.map +1 -0
  168. package/dist/core/events/v3/catalog.js +135 -0
  169. package/dist/core/events/v3/clock-order.d.ts +34 -0
  170. package/dist/core/events/v3/clock-order.d.ts.map +1 -0
  171. package/dist/core/events/v3/clock-order.js +35 -0
  172. package/dist/core/events/v3/contract.d.ts +171 -0
  173. package/dist/core/events/v3/contract.d.ts.map +1 -0
  174. package/dist/core/events/v3/contract.js +180 -0
  175. package/dist/core/events/v3/control.d.ts +111 -0
  176. package/dist/core/events/v3/control.d.ts.map +1 -0
  177. package/dist/core/events/v3/control.js +419 -0
  178. package/dist/core/events/v3/coordination-view.d.ts +69 -0
  179. package/dist/core/events/v3/coordination-view.d.ts.map +1 -0
  180. package/dist/core/events/v3/coordination-view.js +119 -0
  181. package/dist/core/events/v3/economics.d.ts +77 -0
  182. package/dist/core/events/v3/economics.d.ts.map +1 -0
  183. package/dist/core/events/v3/economics.js +274 -0
  184. package/dist/core/events/v3/finalization-view.d.ts +26 -0
  185. package/dist/core/events/v3/finalization-view.d.ts.map +1 -0
  186. package/dist/core/events/v3/finalization-view.js +37 -0
  187. package/dist/core/events/v3/fingerprint-keys.d.ts +25 -0
  188. package/dist/core/events/v3/fingerprint-keys.d.ts.map +1 -0
  189. package/dist/core/events/v3/fingerprint-keys.js +217 -0
  190. package/dist/core/events/v3/generated.d.ts +4 -0
  191. package/dist/core/events/v3/generated.d.ts.map +1 -0
  192. package/dist/core/events/v3/generated.js +47 -0
  193. package/dist/core/events/v3/ids.d.ts +9 -0
  194. package/dist/core/events/v3/ids.d.ts.map +1 -0
  195. package/dist/core/events/v3/ids.js +25 -0
  196. package/dist/core/events/v3/index.d.ts +35 -0
  197. package/dist/core/events/v3/index.d.ts.map +1 -0
  198. package/dist/core/events/v3/index.js +33 -0
  199. package/dist/core/events/v3/latency.d.ts +63 -0
  200. package/dist/core/events/v3/latency.d.ts.map +1 -0
  201. package/dist/core/events/v3/latency.js +412 -0
  202. package/dist/core/events/v3/live-feed.d.ts +45 -0
  203. package/dist/core/events/v3/live-feed.d.ts.map +1 -0
  204. package/dist/core/events/v3/live-feed.js +246 -0
  205. package/dist/core/events/v3/live-observation.d.ts +35 -0
  206. package/dist/core/events/v3/live-observation.d.ts.map +1 -0
  207. package/dist/core/events/v3/live-observation.js +1 -0
  208. package/dist/core/events/v3/live-routing.d.ts +57 -0
  209. package/dist/core/events/v3/live-routing.d.ts.map +1 -0
  210. package/dist/core/events/v3/live-routing.js +107 -0
  211. package/dist/core/events/v3/producers/command-recorder.d.ts +67 -0
  212. package/dist/core/events/v3/producers/command-recorder.d.ts.map +1 -0
  213. package/dist/core/events/v3/producers/command-recorder.js +477 -0
  214. package/dist/core/events/v3/producers/command.d.ts +50 -0
  215. package/dist/core/events/v3/producers/command.d.ts.map +1 -0
  216. package/dist/core/events/v3/producers/command.js +135 -0
  217. package/dist/core/events/v3/producers/coordination-recorder.d.ts +53 -0
  218. package/dist/core/events/v3/producers/coordination-recorder.d.ts.map +1 -0
  219. package/dist/core/events/v3/producers/coordination-recorder.js +376 -0
  220. package/dist/core/events/v3/producers/coordination.d.ts +90 -0
  221. package/dist/core/events/v3/producers/coordination.d.ts.map +1 -0
  222. package/dist/core/events/v3/producers/coordination.js +229 -0
  223. package/dist/core/events/v3/producers/hook-base.d.ts +54 -0
  224. package/dist/core/events/v3/producers/hook-base.d.ts.map +1 -0
  225. package/dist/core/events/v3/producers/hook-base.js +424 -0
  226. package/dist/core/events/v3/producers/hook.d.ts +29 -0
  227. package/dist/core/events/v3/producers/hook.d.ts.map +1 -0
  228. package/dist/core/events/v3/producers/hook.js +71 -0
  229. package/dist/core/events/v3/producers/intake.d.ts +65 -0
  230. package/dist/core/events/v3/producers/intake.d.ts.map +1 -0
  231. package/dist/core/events/v3/producers/intake.js +244 -0
  232. package/dist/core/events/v3/producers/recorder.d.ts +240 -0
  233. package/dist/core/events/v3/producers/recorder.d.ts.map +1 -0
  234. package/dist/core/events/v3/producers/recorder.js +2176 -0
  235. package/dist/core/events/v3/projection.d.ts +101 -0
  236. package/dist/core/events/v3/projection.d.ts.map +1 -0
  237. package/dist/core/events/v3/projection.js +479 -0
  238. package/dist/core/events/v3/reader.d.ts +75 -0
  239. package/dist/core/events/v3/reader.d.ts.map +1 -0
  240. package/dist/core/events/v3/reader.js +778 -0
  241. package/dist/core/events/v3/recovery-record.d.ts +47 -0
  242. package/dist/core/events/v3/recovery-record.d.ts.map +1 -0
  243. package/dist/core/events/v3/recovery-record.js +167 -0
  244. package/dist/core/events/v3/recovery.d.ts +22 -0
  245. package/dist/core/events/v3/recovery.d.ts.map +1 -0
  246. package/dist/core/events/v3/recovery.js +227 -0
  247. package/dist/core/events/v3/span-state.d.ts +52 -0
  248. package/dist/core/events/v3/span-state.d.ts.map +1 -0
  249. package/dist/core/events/v3/span-state.js +142 -0
  250. package/dist/core/events/v3/targets.d.ts +23 -0
  251. package/dist/core/events/v3/targets.d.ts.map +1 -0
  252. package/dist/core/events/v3/targets.js +134 -0
  253. package/dist/core/events/v3/turn-telemetry.d.ts +41 -0
  254. package/dist/core/events/v3/turn-telemetry.d.ts.map +1 -0
  255. package/dist/core/events/v3/turn-telemetry.js +168 -0
  256. package/dist/core/events/v3/validate.d.ts +9 -0
  257. package/dist/core/events/v3/validate.d.ts.map +1 -0
  258. package/dist/core/events/v3/validate.js +281 -0
  259. package/dist/core/events/v3/writer.d.ts +56 -0
  260. package/dist/core/events/v3/writer.d.ts.map +1 -0
  261. package/dist/core/events/v3/writer.js +335 -0
  262. package/dist/core/governor/index.d.ts +1 -1
  263. package/dist/core/governor/index.d.ts.map +1 -1
  264. package/dist/core/governor/index.js +1 -1
  265. package/dist/core/governor/plan-api.d.ts +2 -1
  266. package/dist/core/governor/plan-api.d.ts.map +1 -1
  267. package/dist/core/governor/plan-api.js +6 -3
  268. package/dist/core/governor/read.d.ts +1 -1
  269. package/dist/core/governor/read.d.ts.map +1 -1
  270. package/dist/core/governor/read.js +1 -1
  271. package/dist/core/governor/state.d.ts +9 -0
  272. package/dist/core/governor/state.d.ts.map +1 -1
  273. package/dist/core/governor/state.js +40 -3
  274. package/dist/core/guard/config.d.ts +5 -0
  275. package/dist/core/guard/config.d.ts.map +1 -0
  276. package/dist/core/guard/config.js +157 -0
  277. package/dist/core/guard/coordinator.d.ts +14 -0
  278. package/dist/core/guard/coordinator.d.ts.map +1 -0
  279. package/dist/core/guard/coordinator.js +173 -0
  280. package/dist/core/guard/evaluator.d.ts +4 -0
  281. package/dist/core/guard/evaluator.d.ts.map +1 -0
  282. package/dist/core/guard/evaluator.js +242 -0
  283. package/dist/core/guard/evidence-v3.d.ts +15 -0
  284. package/dist/core/guard/evidence-v3.d.ts.map +1 -0
  285. package/dist/core/guard/evidence-v3.js +171 -0
  286. package/dist/core/guard/index.d.ts +10 -0
  287. package/dist/core/guard/index.d.ts.map +1 -0
  288. package/dist/core/guard/index.js +6 -0
  289. package/dist/core/guard/live-source-v3.d.ts +40 -0
  290. package/dist/core/guard/live-source-v3.d.ts.map +1 -0
  291. package/dist/core/guard/live-source-v3.js +128 -0
  292. package/dist/core/guard/storage.d.ts +27 -0
  293. package/dist/core/guard/storage.d.ts.map +1 -0
  294. package/dist/core/guard/storage.js +140 -0
  295. package/dist/core/guard/types.d.ts +119 -0
  296. package/dist/core/guard/types.d.ts.map +1 -0
  297. package/dist/core/guard/types.js +1 -0
  298. package/dist/core/hooks/adapter/detect.d.ts +18 -1
  299. package/dist/core/hooks/adapter/detect.d.ts.map +1 -1
  300. package/dist/core/hooks/adapter/detect.js +29 -0
  301. package/dist/core/hooks/adapter/events.d.ts +7 -4
  302. package/dist/core/hooks/adapter/events.d.ts.map +1 -1
  303. package/dist/core/hooks/adapter/events.js +13 -4
  304. package/dist/core/hooks/adapter/output.d.ts +2 -2
  305. package/dist/core/hooks/adapter/output.d.ts.map +1 -1
  306. package/dist/core/hooks/adapter/parse.d.ts +7 -4
  307. package/dist/core/hooks/adapter/parse.d.ts.map +1 -1
  308. package/dist/core/hooks/adapter/parse.js +64 -24
  309. package/dist/core/hooks/adapter/wiring.d.ts +30 -4
  310. package/dist/core/hooks/adapter/wiring.d.ts.map +1 -1
  311. package/dist/core/hooks/adapter/wiring.js +89 -11
  312. package/dist/core/hooks/cli.d.ts +1 -1
  313. package/dist/core/hooks/cli.js +345 -400
  314. package/dist/core/hooks/codex-authorization.d.ts +30 -0
  315. package/dist/core/hooks/codex-authorization.d.ts.map +1 -0
  316. package/dist/core/hooks/codex-authorization.js +199 -0
  317. package/dist/core/hooks/effects/image-capture.d.ts +20 -34
  318. package/dist/core/hooks/effects/image-capture.d.ts.map +1 -1
  319. package/dist/core/hooks/effects/image-capture.js +212 -221
  320. package/dist/core/hooks/effects/index.d.ts +1 -9
  321. package/dist/core/hooks/effects/index.d.ts.map +1 -1
  322. package/dist/core/hooks/effects/index.js +1 -24
  323. package/dist/core/hooks/events/input-hash.d.ts +7 -0
  324. package/dist/core/hooks/events/input-hash.d.ts.map +1 -0
  325. package/dist/core/hooks/events/input-hash.js +43 -0
  326. package/dist/core/hooks/index.d.ts +4 -3
  327. package/dist/core/hooks/index.d.ts.map +1 -1
  328. package/dist/core/hooks/index.js +2 -3
  329. package/dist/core/hooks/resolve/coord-root.d.ts +1 -1
  330. package/dist/core/hooks/resolve/coord-root.js +1 -1
  331. package/dist/core/hooks/resolve/owner.d.ts +16 -15
  332. package/dist/core/hooks/resolve/owner.d.ts.map +1 -1
  333. package/dist/core/hooks/resolve/owner.js +51 -42
  334. package/dist/core/hooks/resolve/transcript.d.ts +33 -3
  335. package/dist/core/hooks/resolve/transcript.d.ts.map +1 -1
  336. package/dist/core/hooks/resolve/transcript.js +155 -14
  337. package/dist/core/hooks/session-name-presence.d.ts +9 -10
  338. package/dist/core/hooks/session-name-presence.d.ts.map +1 -1
  339. package/dist/core/hooks/session-name-presence.js +15 -15
  340. package/dist/core/hooks/unsafe-cross-shell.d.ts +1 -1
  341. package/dist/core/hooks/unsafe-cross-shell.d.ts.map +1 -1
  342. package/dist/core/journal/index.d.ts +2 -2
  343. package/dist/core/journal/index.d.ts.map +1 -1
  344. package/dist/core/journal/index.js +9 -22
  345. package/dist/core/presence/blob.d.ts +8 -3
  346. package/dist/core/presence/blob.d.ts.map +1 -1
  347. package/dist/core/presence/blob.js +54 -41
  348. package/dist/core/presence/codec-digest.d.ts +29 -0
  349. package/dist/core/presence/codec-digest.d.ts.map +1 -0
  350. package/dist/core/presence/codec-digest.js +170 -0
  351. package/dist/core/presence/index.js +15 -1
  352. package/dist/core/presence/relay-client.d.ts +1 -1
  353. package/dist/core/presence/relay-client.d.ts.map +1 -1
  354. package/dist/core/presence/relay-client.js +5 -5
  355. package/dist/core/work/index.d.ts +1 -1
  356. package/dist/core/work/index.d.ts.map +1 -1
  357. package/dist/core/work/index.js +1 -1
  358. package/dist/core/work/read.d.ts +1 -1
  359. package/dist/core/work/read.d.ts.map +1 -1
  360. package/dist/core/work/read.js +1 -1
  361. package/dist/core/work/runner.d.ts.map +1 -1
  362. package/dist/core/work/runner.js +6 -0
  363. package/dist/core/work/state.d.ts +9 -0
  364. package/dist/core/work/state.d.ts.map +1 -1
  365. package/dist/core/work/state.js +17 -3
  366. package/dist/core/workflow/engine.js +24 -25
  367. package/dist/core/workflow/live-session-v3.d.ts +19 -0
  368. package/dist/core/workflow/live-session-v3.d.ts.map +1 -0
  369. package/dist/core/workflow/live-session-v3.js +86 -0
  370. package/dist/core/workflow/scope-id.d.ts +3 -0
  371. package/dist/core/workflow/scope-id.d.ts.map +1 -0
  372. package/dist/core/workflow/scope-id.js +5 -0
  373. package/dist/core/workflow/workspaces/leases.d.ts +4 -0
  374. package/dist/core/workflow/workspaces/leases.d.ts.map +1 -1
  375. package/dist/core/workflow/workspaces/leases.js +53 -19
  376. package/dist/index.d.ts +1 -1
  377. package/dist/index.js +1 -1
  378. package/dist/lib/browser/client.d.ts +41 -0
  379. package/dist/lib/browser/client.d.ts.map +1 -1
  380. package/dist/lib/browser/client.js +203 -0
  381. package/dist/lib/browser/critique.d.ts +28 -2
  382. package/dist/lib/browser/critique.d.ts.map +1 -1
  383. package/dist/lib/browser/critique.js +74 -18
  384. package/dist/lib/browser/geometry.d.ts +1 -1
  385. package/dist/lib/browser/geometry.d.ts.map +1 -1
  386. package/dist/lib/browser/geometry.js +130 -6
  387. package/dist/lib/browser/index.d.ts +3 -0
  388. package/dist/lib/browser/index.d.ts.map +1 -1
  389. package/dist/lib/browser/index.js +3 -0
  390. package/dist/lib/browser/qa-plan.d.ts +174 -0
  391. package/dist/lib/browser/qa-plan.d.ts.map +1 -0
  392. package/dist/lib/browser/qa-plan.js +321 -0
  393. package/dist/lib/browser/qa-reuse.d.ts +99 -0
  394. package/dist/lib/browser/qa-reuse.d.ts.map +1 -0
  395. package/dist/lib/browser/qa-reuse.js +222 -0
  396. package/dist/lib/browser/qa-snapshot.d.ts +64 -0
  397. package/dist/lib/browser/qa-snapshot.d.ts.map +1 -0
  398. package/dist/lib/browser/qa-snapshot.js +171 -0
  399. package/dist/lib/browser/runts.d.ts.map +1 -1
  400. package/dist/lib/browser/runts.js +22 -1
  401. package/dist/lib/browser/tiling.d.ts +71 -0
  402. package/dist/lib/browser/tiling.d.ts.map +1 -0
  403. package/dist/lib/browser/tiling.js +118 -0
  404. package/dist/lib/context/index.d.ts +0 -3
  405. package/dist/lib/context/index.d.ts.map +1 -1
  406. package/dist/lib/context/index.js +20 -42
  407. package/dist/lib/council/index.d.ts +2 -2
  408. package/dist/lib/council/index.d.ts.map +1 -1
  409. package/dist/lib/council/index.js +9 -20
  410. package/dist/lib/docs-frontmatter.d.ts +1 -6
  411. package/dist/lib/docs-frontmatter.d.ts.map +1 -1
  412. package/dist/lib/docs-frontmatter.js +12 -78
  413. package/dist/lib/docs-index.d.ts +9 -0
  414. package/dist/lib/docs-index.d.ts.map +1 -1
  415. package/dist/lib/docs-index.js +32 -3
  416. package/dist/lib/docs-lint.d.ts.map +1 -1
  417. package/dist/lib/docs-lint.js +14 -30
  418. package/dist/lib/docs-metadata-audit.d.ts +19 -0
  419. package/dist/lib/docs-metadata-audit.d.ts.map +1 -0
  420. package/dist/lib/docs-metadata-audit.js +132 -0
  421. package/dist/lib/docs-metadata-managed.d.ts +23 -0
  422. package/dist/lib/docs-metadata-managed.d.ts.map +1 -0
  423. package/dist/lib/docs-metadata-managed.js +78 -0
  424. package/dist/lib/docs-metadata-sync.d.ts +20 -0
  425. package/dist/lib/docs-metadata-sync.d.ts.map +1 -0
  426. package/dist/lib/docs-metadata-sync.js +222 -0
  427. package/dist/lib/docs-metadata-v2-schema.d.ts +273 -0
  428. package/dist/lib/docs-metadata-v2-schema.d.ts.map +1 -0
  429. package/dist/lib/docs-metadata-v2-schema.js +134 -0
  430. package/dist/lib/docs-metadata-v2.d.ts +21 -0
  431. package/dist/lib/docs-metadata-v2.d.ts.map +1 -0
  432. package/dist/lib/docs-metadata-v2.js +424 -0
  433. package/dist/lib/docs-new.d.ts +11 -0
  434. package/dist/lib/docs-new.d.ts.map +1 -0
  435. package/dist/lib/docs-new.js +52 -0
  436. package/dist/lib/docs-sweep.d.ts.map +1 -1
  437. package/dist/lib/docs-sweep.js +45 -29
  438. package/dist/lib/headless/index.d.ts +98 -0
  439. package/dist/lib/headless/index.d.ts.map +1 -0
  440. package/dist/lib/headless/index.js +211 -0
  441. package/dist/lib/identities/assume.d.ts +4 -4
  442. package/dist/lib/identities/assume.d.ts.map +1 -1
  443. package/dist/lib/identities/assume.js +52 -68
  444. package/dist/lib/instructions/apply.d.ts +5 -4
  445. package/dist/lib/instructions/apply.d.ts.map +1 -1
  446. package/dist/lib/instructions/apply.js +32 -20
  447. package/dist/lib/instructions/bundle.d.ts +33 -0
  448. package/dist/lib/instructions/bundle.d.ts.map +1 -0
  449. package/dist/lib/instructions/bundle.js +149 -0
  450. package/dist/lib/instructions/splice.d.ts +0 -1
  451. package/dist/lib/instructions/splice.d.ts.map +1 -1
  452. package/dist/lib/instructions/splice.js +22 -6
  453. package/dist/lib/instructions/templates.d.ts +7 -5
  454. package/dist/lib/instructions/templates.d.ts.map +1 -1
  455. package/dist/lib/instructions/templates.js +79 -9
  456. package/package.json +27 -6
  457. package/schemas/config.schema.json +120 -2
  458. package/schemas/docs-metadata-v2.schema.json +441 -0
  459. package/schemas/event-v3.schema.json +24472 -0
  460. package/src/commander.ts +7 -1
  461. package/src/commands/adapter.ts +2 -2
  462. package/src/commands/agents.ts +1737 -570
  463. package/src/commands/artifacts.ts +7 -6
  464. package/src/commands/backup.ts +29 -21
  465. package/src/commands/browse.ts +349 -8
  466. package/src/commands/checkpoint.ts +4 -3
  467. package/src/commands/claude-desktop.ts +7 -5
  468. package/src/commands/context.ts +1 -6
  469. package/src/commands/decision.ts +27 -44
  470. package/src/commands/docs.ts +100 -33
  471. package/src/commands/doctor.ts +73 -8
  472. package/src/commands/events.ts +256 -0
  473. package/src/commands/governor.ts +18 -4
  474. package/src/commands/init.ts +264 -57
  475. package/src/commands/instructions.ts +129 -0
  476. package/src/commands/journal.ts +4 -13
  477. package/src/commands/ledger-v3.ts +111 -0
  478. package/src/commands/presence.ts +18 -11
  479. package/src/commands/sync.ts +1 -1
  480. package/src/commands/web.ts +67 -8
  481. package/src/commands/work.ts +28 -5
  482. package/src/core/adapter.ts +5 -0
  483. package/src/core/adapters/attest.ts +8 -3
  484. package/src/core/adapters/profiles.ts +4 -6
  485. package/src/core/agents/canonical-emit.ts +39 -28
  486. package/src/core/agents/cli.ts +242 -263
  487. package/src/core/agents/codex-archive-v3.ts +138 -0
  488. package/src/core/agents/coord-client.ts +75 -177
  489. package/src/core/agents/finalization.ts +120 -38
  490. package/src/core/agents/index.ts +5 -5
  491. package/src/core/agents/live-authority-v3.ts +375 -0
  492. package/src/core/agents/live-lifecycle-v3.ts +140 -0
  493. package/src/core/agents/live-observation-v3.ts +216 -0
  494. package/src/core/agents/render/prompt-context.ts +89 -55
  495. package/src/core/agents/render/session-context.ts +23 -32
  496. package/src/core/agents/rules/claim-conflict.ts +85 -126
  497. package/src/core/agents/rules/commit-conflict.ts +3 -14
  498. package/src/core/agents/rules/stop-hook.ts +239 -293
  499. package/src/core/agents/session-events.ts +137 -104
  500. package/src/core/agents/session-finalization-state-v3.ts +90 -0
  501. package/src/core/agents/session-finalizer-v3.ts +953 -0
  502. package/src/core/agents/session-name-display.ts +149 -0
  503. package/src/core/agents/state/activity-log.ts +6 -14
  504. package/src/core/agents/state/heartbeat-writer.ts +98 -242
  505. package/src/core/agents/state/live-coordination-view.ts +290 -0
  506. package/src/core/agents/state/session-state.ts +143 -0
  507. package/src/core/agents/state/stale-sweep.ts +40 -17
  508. package/src/core/artifacts/index.ts +4 -5
  509. package/src/core/config.ts +148 -3
  510. package/src/core/context/index.ts +9 -17
  511. package/src/core/events/span-parent.ts +46 -0
  512. package/src/core/events/v3/advance.ts +168 -0
  513. package/src/core/events/v3/authority-outbox.ts +548 -0
  514. package/src/core/events/v3/base-builder.ts +60 -0
  515. package/src/core/events/v3/base-contract.ts +882 -0
  516. package/src/core/events/v3/bootstrap.ts +226 -0
  517. package/src/core/events/v3/builder.ts +59 -0
  518. package/src/core/events/v3/canonical.ts +153 -0
  519. package/src/core/events/v3/capabilities.ts +171 -0
  520. package/src/core/events/v3/capability-drift.ts +177 -0
  521. package/src/core/events/v3/catalog.ts +202 -0
  522. package/src/core/events/v3/clock-order.ts +41 -0
  523. package/src/core/events/v3/contract.ts +365 -0
  524. package/src/core/events/v3/control.ts +576 -0
  525. package/src/core/events/v3/coordination-view.ts +193 -0
  526. package/src/core/events/v3/economics.ts +384 -0
  527. package/src/core/events/v3/finalization-view.ts +67 -0
  528. package/src/core/events/v3/fingerprint-keys.ts +260 -0
  529. package/src/core/events/v3/generated.ts +48 -0
  530. package/src/core/events/v3/ids.ts +33 -0
  531. package/src/core/events/v3/index.ts +322 -0
  532. package/src/core/events/v3/latency.ts +551 -0
  533. package/src/core/events/v3/live-feed.ts +319 -0
  534. package/src/core/events/v3/live-observation.ts +39 -0
  535. package/src/core/events/v3/live-routing.ts +135 -0
  536. package/src/core/events/v3/producers/command-recorder.ts +631 -0
  537. package/src/core/events/v3/producers/command.ts +201 -0
  538. package/src/core/events/v3/producers/coordination-recorder.ts +538 -0
  539. package/src/core/events/v3/producers/coordination.ts +355 -0
  540. package/src/core/events/v3/producers/hook-base.ts +578 -0
  541. package/src/core/events/v3/producers/hook.ts +119 -0
  542. package/src/core/events/v3/producers/intake.ts +319 -0
  543. package/src/core/events/v3/producers/recorder.ts +2805 -0
  544. package/src/core/events/v3/projection.ts +653 -0
  545. package/src/core/events/v3/reader.ts +1127 -0
  546. package/src/core/events/v3/recovery-record.ts +244 -0
  547. package/src/core/events/v3/recovery.ts +271 -0
  548. package/src/core/events/v3/span-state.ts +187 -0
  549. package/src/core/events/v3/targets.ts +182 -0
  550. package/src/core/events/v3/turn-telemetry.ts +259 -0
  551. package/src/core/events/v3/validate.ts +361 -0
  552. package/src/core/events/v3/writer.ts +419 -0
  553. package/src/core/governor/index.ts +3 -0
  554. package/src/core/governor/plan-api.ts +10 -2
  555. package/src/core/governor/read.ts +3 -0
  556. package/src/core/governor/state.ts +52 -5
  557. package/src/core/guard/config.ts +206 -0
  558. package/src/core/guard/coordinator.ts +227 -0
  559. package/src/core/guard/evaluator.ts +343 -0
  560. package/src/core/guard/evidence-v3.ts +227 -0
  561. package/src/core/guard/index.ts +35 -0
  562. package/src/core/guard/live-source-v3.ts +204 -0
  563. package/src/core/guard/storage.ts +188 -0
  564. package/src/core/guard/types.ts +152 -0
  565. package/src/core/hooks/adapter/detect.ts +28 -1
  566. package/src/core/hooks/adapter/events.ts +15 -6
  567. package/src/core/hooks/adapter/output.ts +7 -2
  568. package/src/core/hooks/adapter/parse.ts +81 -36
  569. package/src/core/hooks/adapter/wiring.ts +119 -13
  570. package/src/core/hooks/cli.ts +398 -422
  571. package/src/core/hooks/codex-authorization.ts +253 -0
  572. package/src/core/hooks/effects/image-capture.ts +228 -238
  573. package/src/core/hooks/effects/index.ts +1 -36
  574. package/src/core/hooks/events/input-hash.ts +47 -0
  575. package/src/core/hooks/index.ts +4 -11
  576. package/src/core/hooks/resolve/coord-root.ts +1 -1
  577. package/src/core/hooks/resolve/owner.ts +52 -45
  578. package/src/core/hooks/resolve/transcript.ts +165 -14
  579. package/src/core/hooks/session-name-presence.ts +14 -15
  580. package/src/core/hooks/unsafe-cross-shell.ts +1 -1
  581. package/src/core/journal/index.ts +15 -22
  582. package/src/core/presence/blob.ts +63 -38
  583. package/src/core/presence/codec-digest.ts +215 -0
  584. package/src/core/presence/index.ts +18 -1
  585. package/src/core/presence/relay-client.ts +5 -5
  586. package/src/core/work/index.ts +3 -0
  587. package/src/core/work/read.ts +3 -0
  588. package/src/core/work/runner.ts +6 -0
  589. package/src/core/work/state.ts +27 -3
  590. package/src/core/workflow/engine.ts +24 -24
  591. package/src/core/workflow/live-session-v3.ts +126 -0
  592. package/src/core/workflow/scope-id.ts +6 -0
  593. package/src/core/workflow/workspaces/leases.ts +56 -19
  594. package/src/index.ts +1 -1
  595. package/src/lib/browser/client.ts +230 -0
  596. package/src/lib/browser/critique.ts +104 -27
  597. package/src/lib/browser/geometry.ts +143 -14
  598. package/src/lib/browser/index.ts +34 -0
  599. package/src/lib/browser/qa-plan.ts +501 -0
  600. package/src/lib/browser/qa-reuse.ts +306 -0
  601. package/src/lib/browser/qa-snapshot.ts +223 -0
  602. package/src/lib/browser/runts.ts +27 -2
  603. package/src/lib/browser/tiling.ts +164 -0
  604. package/src/lib/context/index.ts +22 -46
  605. package/src/lib/council/index.ts +9 -21
  606. package/src/lib/docs-frontmatter.ts +8 -79
  607. package/src/lib/docs-index.ts +33 -3
  608. package/src/lib/docs-lint.ts +15 -29
  609. package/src/lib/docs-metadata-audit.ts +166 -0
  610. package/src/lib/docs-metadata-managed.ts +83 -0
  611. package/src/lib/docs-metadata-sync.ts +262 -0
  612. package/src/lib/docs-metadata-v2-schema.ts +138 -0
  613. package/src/lib/docs-metadata-v2.ts +646 -0
  614. package/src/lib/docs-new.ts +63 -0
  615. package/src/lib/docs-sweep.ts +42 -28
  616. package/src/lib/headless/index.ts +287 -0
  617. package/src/lib/identities/assume.ts +67 -86
  618. package/src/lib/instructions/apply.ts +33 -20
  619. package/src/lib/instructions/bundle.ts +199 -0
  620. package/src/lib/instructions/splice.ts +21 -7
  621. package/src/lib/instructions/templates.ts +85 -13
  622. package/dist/core/agents/cli-emit.d.ts +0 -27
  623. package/dist/core/agents/cli-emit.d.ts.map +0 -1
  624. package/dist/core/agents/cli-emit.js +0 -57
  625. package/dist/core/agents/codex-replay.d.ts +0 -29
  626. package/dist/core/agents/codex-replay.d.ts.map +0 -1
  627. package/dist/core/agents/codex-replay.js +0 -138
  628. package/dist/core/agents/events/consume.d.ts +0 -82
  629. package/dist/core/agents/events/consume.d.ts.map +0 -1
  630. package/dist/core/agents/events/consume.js +0 -195
  631. package/dist/core/agents/events/emit.d.ts +0 -42
  632. package/dist/core/agents/events/emit.d.ts.map +0 -1
  633. package/dist/core/agents/events/emit.js +0 -75
  634. package/dist/core/agents/events/ulid.d.ts +0 -11
  635. package/dist/core/agents/events/ulid.d.ts.map +0 -1
  636. package/dist/core/agents/events/ulid.js +0 -47
  637. package/dist/core/agents/state/heartbeat-projector.d.ts +0 -65
  638. package/dist/core/agents/state/heartbeat-projector.d.ts.map +0 -1
  639. package/dist/core/agents/state/heartbeat-projector.js +0 -527
  640. package/dist/core/hooks/events/emit.d.ts +0 -31
  641. package/dist/core/hooks/events/emit.d.ts.map +0 -1
  642. package/dist/core/hooks/events/emit.js +0 -93
  643. package/dist/core/hooks/events/rotate.d.ts +0 -43
  644. package/dist/core/hooks/events/rotate.d.ts.map +0 -1
  645. package/dist/core/hooks/events/rotate.js +0 -142
  646. package/dist/core/hooks/events/schema.d.ts +0 -312
  647. package/dist/core/hooks/events/schema.d.ts.map +0 -1
  648. package/dist/core/hooks/events/schema.js +0 -12
  649. package/dist/core/hooks/events/ulid.d.ts +0 -10
  650. package/dist/core/hooks/events/ulid.d.ts.map +0 -1
  651. package/dist/core/hooks/events/ulid.js +0 -47
  652. package/dist/lib/docs-frontmatter-migrate.d.ts +0 -33
  653. package/dist/lib/docs-frontmatter-migrate.d.ts.map +0 -1
  654. package/dist/lib/docs-frontmatter-migrate.js +0 -364
  655. package/src/core/agents/cli-emit.ts +0 -64
  656. package/src/core/agents/codex-replay.ts +0 -163
  657. package/src/core/agents/events/consume.ts +0 -254
  658. package/src/core/agents/events/emit.ts +0 -115
  659. package/src/core/agents/events/ulid.ts +0 -51
  660. package/src/core/agents/state/heartbeat-projector.ts +0 -582
  661. package/src/core/hooks/events/emit.ts +0 -125
  662. package/src/core/hooks/events/rotate.ts +0 -151
  663. package/src/core/hooks/events/schema.ts +0 -538
  664. package/src/core/hooks/events/ulid.ts +0 -51
  665. package/src/lib/docs-frontmatter-migrate.ts +0 -427
@@ -0,0 +1,34 @@
1
+ import { type EventV3ControlState } from "./control.js";
2
+ export interface InitializeEventLedgerV3Input {
3
+ coordRoot: string;
4
+ harneryBuild: string;
5
+ hostBuild: string;
6
+ configDigest: `sha256:${string}`;
7
+ approvalRecordId: string;
8
+ forceNewEpoch?: boolean;
9
+ resumeCandidate?: boolean;
10
+ now?: () => Date;
11
+ }
12
+ export interface InitializeEventLedgerV3Result {
13
+ state: "active";
14
+ initialized: boolean;
15
+ archived_epoch?: string;
16
+ control: Extract<EventV3ControlState, {
17
+ state: "active";
18
+ }>;
19
+ }
20
+ /**
21
+ * Ensure programmatic Harnery entry points have the same universal V3
22
+ * boundary as `harn init`. Only a genuinely absent control pair is created;
23
+ * candidate, damaged, or incompatible state still fails closed.
24
+ */
25
+ export declare function ensureEventLedgerV3(coordRoot: string, approvalRecordId?: string): Extract<EventV3ControlState, {
26
+ state: "active";
27
+ }>;
28
+ /**
29
+ * Ensure a root has one current V3 epoch. An incompatible or explicitly
30
+ * replaced epoch is moved intact to the V3 archive before the new control
31
+ * pair is published. No historical ledger bytes are rewritten or deleted.
32
+ */
33
+ export declare function initializeEventLedgerV3(input: InitializeEventLedgerV3Input): InitializeEventLedgerV3Result;
34
+ //# sourceMappingURL=bootstrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/bootstrap.ts"],"names":[],"mappings":"AAiBA,OAAO,EAML,KAAK,mBAAmB,EAGzB,MAAM,cAAc,CAAC;AAKtB,MAAM,WAAW,4BAA4B;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,UAAU,MAAM,EAAE,CAAC;IACjC,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,6BAA6B;IAC5C,KAAK,EAAE,QAAQ,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC,mBAAmB,EAAE;QAAE,KAAK,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAC;CAC5D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,gBAAgB,SAAiC,GAChD,OAAO,CAAC,mBAAmB,EAAE;IAAE,KAAK,EAAE,QAAQ,CAAA;CAAE,CAAC,CAenD;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,4BAA4B,GAClC,6BAA6B,CAkE/B"}
@@ -0,0 +1,175 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { createHash } from "node:crypto";
3
+ import { chmodSync, closeSync, existsSync, fsyncSync, mkdirSync, openSync, readFileSync, renameSync, writeFileSync, } from "node:fs";
4
+ import { dirname, join, resolve } from "node:path";
5
+ import { fsyncParentDirectory } from "../../workflow/durable-record.js";
6
+ import { canonicalJsonV3, sha256V3 } from "./canonical.js";
7
+ import { ADAPTER_CAPABILITY_PROFILES_V3 } from "./capabilities.js";
8
+ import { buildActivationManifestV3, buildCandidateGenesisManifestV3, EVENT_V3_ACTIVATION_MANIFEST, EVENT_V3_GENESIS_MANIFEST, readEventV3ControlState, repairEventV3ControlPair, } from "./control.js";
9
+ import { loadOrCreateFingerprintKeyStoreV3 } from "./fingerprint-keys.js";
10
+ import { EVENT_V3_SCHEMA_DIGEST } from "./generated.js";
11
+ import { liveEventV3BuildId, livePlatformV3 } from "./live-routing.js";
12
+ /**
13
+ * Ensure programmatic Harnery entry points have the same universal V3
14
+ * boundary as `harn init`. Only a genuinely absent control pair is created;
15
+ * candidate, damaged, or incompatible state still fails closed.
16
+ */
17
+ export function ensureEventLedgerV3(coordRoot, approvalRecordId = "harnery-runtime-v3-universal") {
18
+ const root = resolve(coordRoot);
19
+ const current = readEventV3ControlState(root);
20
+ if (current.state === "active")
21
+ return current;
22
+ if (current.state !== "closed") {
23
+ throw new Error(`event_v3_control_unavailable:${current.state}`);
24
+ }
25
+ const configPath = join(root, ".harnery", "config.jsonc");
26
+ return initializeEventLedgerV3({
27
+ coordRoot: root,
28
+ harneryBuild: repositoryBuild(rootOfHarnery()),
29
+ hostBuild: repositoryBuild(root),
30
+ configDigest: sha256V3(existsSync(configPath) ? readFileSync(configPath) : Buffer.from("{}\n")),
31
+ approvalRecordId,
32
+ }).control;
33
+ }
34
+ /**
35
+ * Ensure a root has one current V3 epoch. An incompatible or explicitly
36
+ * replaced epoch is moved intact to the V3 archive before the new control
37
+ * pair is published. No historical ledger bytes are rewritten or deleted.
38
+ */
39
+ export function initializeEventLedgerV3(input) {
40
+ const root = resolve(input.coordRoot);
41
+ let current = readEventV3ControlState(root);
42
+ if (input.resumeCandidate && current.state === "repairable") {
43
+ current = repairEventV3ControlPair(root);
44
+ }
45
+ if (!input.forceNewEpoch && current.state === "active") {
46
+ return { state: "active", initialized: false, control: current };
47
+ }
48
+ if (!input.forceNewEpoch && input.resumeCandidate && current.state === "candidate") {
49
+ return activateCandidateEpoch(root, current.genesis, input.approvalRecordId);
50
+ }
51
+ if (!input.forceNewEpoch && current.state === "candidate") {
52
+ throw new Error("event_v3_candidate_requires_explicit_activation_or_epoch_replacement");
53
+ }
54
+ const now = input.now ?? (() => new Date());
55
+ const createdAt = now().toISOString();
56
+ const archivedEpoch = archiveCurrentEpoch(root, createdAt);
57
+ const keys = loadOrCreateFingerprintKeyStoreV3(root, now);
58
+ const harneryBuild = safeBuild(input.harneryBuild);
59
+ const hostBuild = safeBuild(input.hostBuild);
60
+ const producerId = "prd_harnery-init";
61
+ const bootId = `boot_${createHash("sha256").update(`${root}\0${createdAt}`).digest("hex")}`;
62
+ const buildId = liveEventV3BuildId(harneryBuild);
63
+ const rootId = `root_${createHash("sha256").update(root).digest("hex")}`;
64
+ const instanceId = `inst_init_${createHash("sha256").update(`${root}\0${createdAt}`).digest("hex")}`;
65
+ const capabilityDigests = Object.values(ADAPTER_CAPABILITY_PROFILES_V3)
66
+ .map((profile) => sha256V3(canonicalJsonV3(profile)))
67
+ .sort();
68
+ const candidate = buildCandidateGenesisManifestV3({
69
+ profile: {
70
+ initial_schema_digest: EVENT_V3_SCHEMA_DIGEST,
71
+ contract_source_digest: EVENT_V3_SCHEMA_DIGEST,
72
+ harnery_commit: harneryBuild,
73
+ host_repository_commit: hostBuild,
74
+ producer_build_ids: [buildId],
75
+ adapter_capability_profile_digests: capabilityDigests,
76
+ config_digest: input.configDigest,
77
+ canonicalizer_version: "harnery-jcs-nfc-v1",
78
+ fingerprint_version: "hmac-sha256-v1",
79
+ privacy_key_epoch: keys.active_epoch_id,
80
+ candidate_created_at: createdAt,
81
+ },
82
+ root_id: rootId,
83
+ instance_id: instanceId,
84
+ producer: {
85
+ producer_id: producerId,
86
+ boot_id: bootId,
87
+ sequence: 1,
88
+ build_id: buildId,
89
+ platform: livePlatformV3(),
90
+ },
91
+ });
92
+ publishControlFile(join(root, EVENT_V3_GENESIS_MANIFEST), candidate);
93
+ const candidateState = repairEventV3ControlPair(root);
94
+ if (candidateState.state !== "candidate") {
95
+ throw new Error(`event_v3_candidate_initialization_failed:${candidateState.state}`);
96
+ }
97
+ const activated = activateCandidateEpoch(root, candidate, input.approvalRecordId);
98
+ return {
99
+ ...activated,
100
+ ...(archivedEpoch ? { archived_epoch: archivedEpoch } : {}),
101
+ };
102
+ }
103
+ function activateCandidateEpoch(root, candidate, approvalRecordId) {
104
+ const producer = candidate.event.producer;
105
+ const activation = buildActivationManifestV3({
106
+ candidate,
107
+ approval_record_id: approvalRecordId,
108
+ activation_approved_at: candidate.profile.candidate_created_at,
109
+ producer: {
110
+ producer_id: producer.producer_id,
111
+ boot_id: producer.boot_id,
112
+ sequence: producer.sequence + 1,
113
+ build_id: producer.build_id,
114
+ platform: producer.platform,
115
+ ...(producer.bridge ? { bridge: producer.bridge } : {}),
116
+ },
117
+ });
118
+ publishControlFile(join(root, EVENT_V3_ACTIVATION_MANIFEST), activation);
119
+ const active = repairEventV3ControlPair(root);
120
+ if (active.state !== "active") {
121
+ throw new Error(`event_v3_activation_failed:${active.state}`);
122
+ }
123
+ return { state: "active", initialized: true, control: active };
124
+ }
125
+ function archiveCurrentEpoch(root, createdAt) {
126
+ const current = join(root, ".harnery", "ledgers", "v3");
127
+ if (!existsSync(current))
128
+ return undefined;
129
+ const archives = join(root, ".harnery", "ledgers", "v3-archives");
130
+ mkdirSync(archives, { recursive: true, mode: 0o700 });
131
+ const stamp = createdAt.replace(/[^0-9]/g, "");
132
+ let target = join(archives, `epoch-${stamp}`);
133
+ let suffix = 0;
134
+ while (existsSync(target))
135
+ target = join(archives, `epoch-${stamp}-${++suffix}`);
136
+ renameSync(current, target);
137
+ fsyncParentDirectory(target);
138
+ return target;
139
+ }
140
+ function publishControlFile(path, value) {
141
+ mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
142
+ const temp = `${path}.tmp.${process.pid}`;
143
+ const fd = openSync(temp, "wx", 0o600);
144
+ try {
145
+ writeFileSync(fd, `${canonicalJsonV3(value)}\n`, "utf8");
146
+ fsyncSync(fd);
147
+ }
148
+ finally {
149
+ closeSync(fd);
150
+ }
151
+ chmodSync(temp, 0o600);
152
+ renameSync(temp, path);
153
+ fsyncParentDirectory(path);
154
+ }
155
+ function safeBuild(value) {
156
+ const normalized = value.normalize("NFC").trim();
157
+ if (/^[a-zA-Z0-9._-]{1,120}$/.test(normalized))
158
+ return normalized;
159
+ return createHash("sha256")
160
+ .update(normalized || "unknown")
161
+ .digest("hex");
162
+ }
163
+ function rootOfHarnery() {
164
+ return resolve(import.meta.dir, "../../../..");
165
+ }
166
+ function repositoryBuild(root) {
167
+ const result = spawnSync("git", ["-C", root, "rev-parse", "HEAD"], {
168
+ encoding: "utf8",
169
+ timeout: 5000,
170
+ });
171
+ const commit = result.status === 0 ? result.stdout.trim() : "";
172
+ if (/^[0-9a-f]{40,64}$/.test(commit))
173
+ return commit;
174
+ return createHash("sha256").update(resolve(root)).digest("hex");
175
+ }
@@ -0,0 +1,20 @@
1
+ import type { EventOfTypeV3, EventPayloadV3, EventTypeV3 } from "./contract.js";
2
+ type EventWithoutDiscriminator<T extends EventTypeV3> = Omit<EventOfTypeV3<T>, "attestation_id" | "contract" | "event_id" | "event_type" | "payload" | "time">;
3
+ type RootEventTypeV3 = "ledger.genesis" | "ledger.activated" | "ledger.schema_advanced" | "ledger.comparability_advanced";
4
+ type AttestationInputV3<T extends EventTypeV3> = T extends RootEventTypeV3 ? {
5
+ attestation_id?: never;
6
+ } : {
7
+ attestation_id: `att_${string}`;
8
+ };
9
+ export type BuildEventV3Input<T extends EventTypeV3> = EventWithoutDiscriminator<T> & AttestationInputV3<T> & {
10
+ payload: EventPayloadV3<T>;
11
+ event_id?: `evt_${string}`;
12
+ observed_at?: string;
13
+ recorded_at?: string;
14
+ monotonic_ns?: string;
15
+ clock_id?: `clk_${string}`;
16
+ skew?: "normal" | "regressed" | "unknown";
17
+ };
18
+ export declare function buildEventV3<T extends EventTypeV3>(eventType: T, input: BuildEventV3Input<T>): EventOfTypeV3<T>;
19
+ export {};
20
+ //# sourceMappingURL=builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAKhF,KAAK,yBAAyB,CAAC,CAAC,SAAS,WAAW,IAAI,IAAI,CAC1D,aAAa,CAAC,CAAC,CAAC,EAChB,gBAAgB,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,SAAS,GAAG,MAAM,CAC/E,CAAC;AAEF,KAAK,eAAe,GAChB,gBAAgB,GAChB,kBAAkB,GAClB,wBAAwB,GACxB,+BAA+B,CAAC;AAEpC,KAAK,kBAAkB,CAAC,CAAC,SAAS,WAAW,IAAI,CAAC,SAAS,eAAe,GACtE;IAAE,cAAc,CAAC,EAAE,KAAK,CAAA;CAAE,GAC1B;IAAE,cAAc,EAAE,OAAO,MAAM,EAAE,CAAA;CAAE,CAAC;AAExC,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,WAAW,IAAI,yBAAyB,CAAC,CAAC,CAAC,GACjF,kBAAkB,CAAC,CAAC,CAAC,GAAG;IACtB,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,MAAM,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,MAAM,EAAE,CAAC;IAC3B,IAAI,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC;CAC3C,CAAC;AAEJ,wBAAgB,YAAY,CAAC,CAAC,SAAS,WAAW,EAChD,SAAS,EAAE,CAAC,EACZ,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAC1B,aAAa,CAAC,CAAC,CAAC,CAwBlB"}
@@ -0,0 +1,28 @@
1
+ import { EVENT_V3_CONTRACT_MAJOR, EVENT_V3_CONTRACT_NAME } from "./contract.js";
2
+ import { EVENT_V3_SCHEMA_DIGEST } from "./generated.js";
3
+ import { clockIdV3, eventIdV3 } from "./ids.js";
4
+ export function buildEventV3(eventType, input) {
5
+ const now = input.recorded_at ?? new Date().toISOString();
6
+ return {
7
+ contract: {
8
+ name: EVENT_V3_CONTRACT_NAME,
9
+ major: EVENT_V3_CONTRACT_MAJOR,
10
+ schema_digest: EVENT_V3_SCHEMA_DIGEST,
11
+ },
12
+ event_id: input.event_id ?? eventIdV3(),
13
+ event_type: eventType,
14
+ time: {
15
+ observed_at: input.observed_at ?? now,
16
+ recorded_at: now,
17
+ ...(input.monotonic_ns ? { monotonic_ns: input.monotonic_ns } : {}),
18
+ clock_id: input.clock_id ?? clockIdV3(),
19
+ skew: input.skew ?? "unknown",
20
+ },
21
+ producer: input.producer,
22
+ scope: input.scope,
23
+ ...(input.attestation_id ? { attestation_id: input.attestation_id } : {}),
24
+ links: input.links,
25
+ provenance: input.provenance,
26
+ payload: input.payload,
27
+ };
28
+ }
@@ -0,0 +1,31 @@
1
+ export declare const EVENT_V3_CANONICALIZER: "harnery-jcs-nfc-v1";
2
+ export type JsonPrimitive = null | boolean | number | string;
3
+ export type JsonValue = JsonPrimitive | JsonValue[] | {
4
+ [key: string]: JsonValue;
5
+ };
6
+ /**
7
+ * Canonical JSON used for V3 contract digests, event bytes, and fingerprints.
8
+ *
9
+ * It follows RFC 8785's ECMAScript number and string serialization, adds the
10
+ * V3 NFC rule for keys and values, and rejects values that JSON would silently
11
+ * erase or reinterpret. Object keys are serialized directly instead of via an
12
+ * intermediate object so integer-looking keys remain in lexical order.
13
+ */
14
+ export declare function canonicalJsonV3(value: unknown): string;
15
+ export declare function sha256V3(value: string | Uint8Array): `sha256:${string}`;
16
+ export interface FingerprintV3 {
17
+ algorithm: "hmac-sha256";
18
+ canonicalizer: typeof EVENT_V3_CANONICALIZER;
19
+ key_epoch: `pep_${string}`;
20
+ scope: "generation" | "root";
21
+ digest: `sha256:${string}`;
22
+ }
23
+ export interface FingerprintContextV3 {
24
+ epochId: `pep_${string}`;
25
+ epochKey: Uint8Array;
26
+ rootId: `root_${string}`;
27
+ generationId?: `gen_${string}`;
28
+ }
29
+ export declare function fingerprintV3(context: FingerprintContextV3, domain: string, value: unknown, scope?: "generation" | "root"): FingerprintV3;
30
+ export declare function normalizeNativeIdV3(context: FingerprintContextV3, namespace: string, nativeId: string): `hid_${string}`;
31
+ //# sourceMappingURL=canonical.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/canonical.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,sBAAsB,EAAG,oBAA6B,CAAC;AAEpE,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAC7D,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,SAAS,EAAE,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAEnF;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEtD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,MAAM,EAAE,CAEvE;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,aAAa,CAAC;IACzB,aAAa,EAAE,OAAO,sBAAsB,CAAC;IAC7C,SAAS,EAAE,OAAO,MAAM,EAAE,CAAC;IAC3B,KAAK,EAAE,YAAY,GAAG,MAAM,CAAC;IAC7B,MAAM,EAAE,UAAU,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,MAAM,EAAE,CAAC;IACzB,QAAQ,EAAE,UAAU,CAAC;IACrB,MAAM,EAAE,QAAQ,MAAM,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,MAAM,EAAE,CAAC;CAChC;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,oBAAoB,EAC7B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,OAAO,EACd,KAAK,GAAE,YAAY,GAAG,MAAqB,GAC1C,aAAa,CAqCf;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,oBAAoB,EAC7B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,OAAO,MAAM,EAAE,CAkBjB"}
@@ -0,0 +1,100 @@
1
+ import { createHash, createHmac, hkdfSync } from "node:crypto";
2
+ export const EVENT_V3_CANONICALIZER = "harnery-jcs-nfc-v1";
3
+ /**
4
+ * Canonical JSON used for V3 contract digests, event bytes, and fingerprints.
5
+ *
6
+ * It follows RFC 8785's ECMAScript number and string serialization, adds the
7
+ * V3 NFC rule for keys and values, and rejects values that JSON would silently
8
+ * erase or reinterpret. Object keys are serialized directly instead of via an
9
+ * intermediate object so integer-looking keys remain in lexical order.
10
+ */
11
+ export function canonicalJsonV3(value) {
12
+ return serialize(value, new Set());
13
+ }
14
+ export function sha256V3(value) {
15
+ return `sha256:${createHash("sha256").update(value).digest("hex")}`;
16
+ }
17
+ export function fingerprintV3(context, domain, value, scope = "generation") {
18
+ assertDomain(domain);
19
+ const rootKey = Buffer.from(hkdfSync("sha256", context.epochKey, Buffer.from(context.epochId, "utf8"), Buffer.from(`harnery:v3:root\0${context.rootId}`, "utf8"), 32));
20
+ let comparisonKey = rootKey;
21
+ if (scope === "generation") {
22
+ if (!context.generationId) {
23
+ throw new Error("generation-scoped fingerprint requires a generation ID");
24
+ }
25
+ comparisonKey = Buffer.from(hkdfSync("sha256", rootKey, Buffer.from(context.generationId, "utf8"), Buffer.from("harnery:v3:generation", "utf8"), 32));
26
+ }
27
+ const digest = createHmac("sha256", comparisonKey)
28
+ .update(`harnery:v3:${domain}\0`, "utf8")
29
+ .update(canonicalJsonV3(value), "utf8")
30
+ .digest("hex");
31
+ return {
32
+ algorithm: "hmac-sha256",
33
+ canonicalizer: EVENT_V3_CANONICALIZER,
34
+ key_epoch: context.epochId,
35
+ scope,
36
+ digest: `sha256:${digest}`,
37
+ };
38
+ }
39
+ export function normalizeNativeIdV3(context, namespace, nativeId) {
40
+ if (!/^[a-z][a-z0-9._-]{0,63}$/.test(namespace)) {
41
+ throw new Error("native ID namespace is invalid");
42
+ }
43
+ const rootKey = Buffer.from(hkdfSync("sha256", context.epochKey, Buffer.from(context.epochId, "utf8"), Buffer.from(`harnery:v3:root\0${context.rootId}`, "utf8"), 32));
44
+ const digest = createHmac("sha256", rootKey)
45
+ .update(`harnery:v3:native-id\0${namespace}\0`, "utf8")
46
+ .update(nativeId.normalize("NFC"), "utf8")
47
+ .digest("hex");
48
+ return `hid_${digest}`;
49
+ }
50
+ function serialize(value, ancestors) {
51
+ if (value === null)
52
+ return "null";
53
+ if (typeof value === "boolean")
54
+ return value ? "true" : "false";
55
+ if (typeof value === "string")
56
+ return JSON.stringify(value.normalize("NFC"));
57
+ if (typeof value === "number") {
58
+ if (!Number.isFinite(value))
59
+ throw new Error("canonical JSON rejects non-finite numbers");
60
+ return JSON.stringify(Object.is(value, -0) ? 0 : value);
61
+ }
62
+ if (typeof value !== "object") {
63
+ throw new Error(`canonical JSON rejects ${typeof value}`);
64
+ }
65
+ if (ancestors.has(value))
66
+ throw new Error("canonical JSON rejects cycles");
67
+ ancestors.add(value);
68
+ try {
69
+ if (Array.isArray(value)) {
70
+ return `[${value.map((item) => serialize(item, ancestors)).join(",")}]`;
71
+ }
72
+ const prototype = Object.getPrototypeOf(value);
73
+ if (prototype !== Object.prototype && prototype !== null) {
74
+ throw new Error("canonical JSON accepts only plain objects");
75
+ }
76
+ const normalized = new Map();
77
+ for (const [key, item] of Object.entries(value)) {
78
+ const normalizedKey = key.normalize("NFC");
79
+ if (normalized.has(normalizedKey)) {
80
+ throw new Error("canonical JSON key collision after Unicode normalization");
81
+ }
82
+ normalized.set(normalizedKey, item);
83
+ }
84
+ const keys = [...normalized.keys()].sort(compareUtf16);
85
+ return `{${keys
86
+ .map((key) => `${JSON.stringify(key)}:${serialize(normalized.get(key), ancestors)}`)
87
+ .join(",")}}`;
88
+ }
89
+ finally {
90
+ ancestors.delete(value);
91
+ }
92
+ }
93
+ function compareUtf16(left, right) {
94
+ return left < right ? -1 : left > right ? 1 : 0;
95
+ }
96
+ function assertDomain(domain) {
97
+ if (!/^[a-z][a-z0-9._-]{0,63}$/.test(domain)) {
98
+ throw new Error("fingerprint domain is invalid");
99
+ }
100
+ }
@@ -0,0 +1,31 @@
1
+ import type { Adapter } from "../../adapter.js";
2
+ export type CapabilitySupportV3 = "native" | "derived" | "conditional" | "unsupported";
3
+ export type CursorExecutionModeV3 = "local" | "cloud" | "unknown";
4
+ export type AdapterWaitKindV3 = "permission" | "needs_input" | "decision" | "approval" | "scheduled" | "rate_limit" | "unknown";
5
+ export type BaseAdapterSignalV3 = "session_start" | "session_end" | "prompt" | "turn_id" | "turn_completion" | "tool_request" | "tool_result" | "tool_failure" | "tool_call_id" | "tool_duration" | "permission" | "subagent" | "shell" | "pre_compaction" | "post_compaction" | "context_usage" | "model_identity";
6
+ export type AdapterSignalV3 = BaseAdapterSignalV3 | "model_usage" | "inference_timing" | "harness_timing" | "capability_drift";
7
+ export interface AdapterCapabilityProfileV3 {
8
+ format: "harnery-v3-adapter-capabilities";
9
+ format_version: 1;
10
+ adapter: Adapter;
11
+ signals: Record<AdapterSignalV3, CapabilitySupportV3>;
12
+ }
13
+ export declare const ADAPTER_CAPABILITY_PROFILES_V3: Record<Adapter, AdapterCapabilityProfileV3>;
14
+ export declare function adapterCapabilityProfileV3(adapter: Adapter): AdapterCapabilityProfileV3;
15
+ export declare function adapterCapabilityProfileDigestV3(adapter: Adapter): `cap_${string}`;
16
+ export declare function adapterSignalSupportV3(adapter: Adapter, signal: AdapterSignalV3): CapabilitySupportV3;
17
+ /**
18
+ * Adapter hooks only expose permission waits today. Other wait kinds can be
19
+ * authored by coordination producers, but they are not observable from an
20
+ * adapter's native turn channel.
21
+ */
22
+ export declare function adapterWaitKindSupportV3(adapter: Adapter, kind: AdapterWaitKindV3): CapabilitySupportV3;
23
+ /** No current adapter supplies an independent completed-turn wait aggregate. */
24
+ export declare function adapterTurnWaitCountSupportV3(_adapter: Adapter): CapabilitySupportV3;
25
+ /**
26
+ * Local Cursor sessions expose the generic tool channel. Cloud/private-worker
27
+ * sessions cannot guarantee whole-turn delivery because hooks may start only
28
+ * after the execution environment becomes writable.
29
+ */
30
+ export declare function cursorToolChannelSupportV3(mode: CursorExecutionModeV3): CapabilitySupportV3;
31
+ //# sourceMappingURL=capabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAGhD,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,SAAS,GAAG,aAAa,GAAG,aAAa,CAAC;AAEvF,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;AAElE,MAAM,MAAM,iBAAiB,GACzB,YAAY,GACZ,aAAa,GACb,UAAU,GACV,UAAU,GACV,WAAW,GACX,YAAY,GACZ,SAAS,CAAC;AAEd,MAAM,MAAM,mBAAmB,GAC3B,eAAe,GACf,aAAa,GACb,QAAQ,GACR,SAAS,GACT,iBAAiB,GACjB,cAAc,GACd,aAAa,GACb,cAAc,GACd,cAAc,GACd,eAAe,GACf,YAAY,GACZ,UAAU,GACV,OAAO,GACP,gBAAgB,GAChB,iBAAiB,GACjB,eAAe,GACf,gBAAgB,CAAC;AAErB,MAAM,MAAM,eAAe,GACvB,mBAAmB,GACnB,aAAa,GACb,kBAAkB,GAClB,gBAAgB,GAChB,kBAAkB,CAAC;AAEvB,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,iCAAiC,CAAC;IAC1C,cAAc,EAAE,CAAC,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAC;CACvD;AAmED,eAAO,MAAM,8BAA8B,EAAE,MAAM,CAAC,OAAO,EAAE,0BAA0B,CAatF,CAAC;AAEF,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,0BAA0B,CAEvF;AAED,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,MAAM,EAAE,CAElF;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,eAAe,GACtB,mBAAmB,CAErB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,iBAAiB,GACtB,mBAAmB,CAErB;AAED,gFAAgF;AAChF,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,OAAO,GAAG,mBAAmB,CAEpF;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,qBAAqB,GAAG,mBAAmB,CAI3F"}
@@ -0,0 +1,107 @@
1
+ import { canonicalJsonV3, sha256V3 } from "./canonical.js";
2
+ const SHARED_SIGNAL_SUPPORT = {
3
+ session_start: "native",
4
+ prompt: "native",
5
+ turn_completion: "native",
6
+ tool_request: "native",
7
+ tool_result: "native",
8
+ tool_failure: "native",
9
+ tool_call_id: "native",
10
+ tool_duration: "derived",
11
+ subagent: "native",
12
+ shell: "native",
13
+ pre_compaction: "native",
14
+ model_identity: "conditional",
15
+ };
16
+ const BASE_SIGNAL_SUPPORT = {
17
+ "claude-code": {
18
+ ...SHARED_SIGNAL_SUPPORT,
19
+ session_end: "native",
20
+ turn_id: "conditional",
21
+ permission: "native",
22
+ post_compaction: "native",
23
+ context_usage: "unsupported",
24
+ },
25
+ codex: {
26
+ ...SHARED_SIGNAL_SUPPORT,
27
+ session_end: "native",
28
+ turn_id: "native",
29
+ permission: "native",
30
+ post_compaction: "native",
31
+ context_usage: "unsupported",
32
+ },
33
+ cursor: {
34
+ ...SHARED_SIGNAL_SUPPORT,
35
+ session_end: "native",
36
+ turn_id: "unsupported",
37
+ tool_request: "conditional",
38
+ tool_result: "conditional",
39
+ tool_failure: "conditional",
40
+ tool_call_id: "conditional",
41
+ tool_duration: "conditional",
42
+ shell: "conditional",
43
+ permission: "conditional",
44
+ post_compaction: "unsupported",
45
+ context_usage: "unsupported",
46
+ },
47
+ };
48
+ function profile(adapter, economics) {
49
+ return {
50
+ format: "harnery-v3-adapter-capabilities",
51
+ format_version: 1,
52
+ adapter,
53
+ signals: {
54
+ ...BASE_SIGNAL_SUPPORT[adapter],
55
+ ...economics,
56
+ harness_timing: "derived",
57
+ capability_drift: "derived",
58
+ },
59
+ };
60
+ }
61
+ export const ADAPTER_CAPABILITY_PROFILES_V3 = {
62
+ "claude-code": profile("claude-code", {
63
+ model_usage: "conditional",
64
+ inference_timing: "unsupported",
65
+ }),
66
+ codex: profile("codex", {
67
+ model_usage: "conditional",
68
+ inference_timing: "unsupported",
69
+ }),
70
+ cursor: profile("cursor", {
71
+ model_usage: "unsupported",
72
+ inference_timing: "unsupported",
73
+ }),
74
+ };
75
+ export function adapterCapabilityProfileV3(adapter) {
76
+ return ADAPTER_CAPABILITY_PROFILES_V3[adapter];
77
+ }
78
+ export function adapterCapabilityProfileDigestV3(adapter) {
79
+ return `cap_${sha256V3(canonicalJsonV3(adapterCapabilityProfileV3(adapter))).slice(7)}`;
80
+ }
81
+ export function adapterSignalSupportV3(adapter, signal) {
82
+ return adapterCapabilityProfileV3(adapter).signals[signal];
83
+ }
84
+ /**
85
+ * Adapter hooks only expose permission waits today. Other wait kinds can be
86
+ * authored by coordination producers, but they are not observable from an
87
+ * adapter's native turn channel.
88
+ */
89
+ export function adapterWaitKindSupportV3(adapter, kind) {
90
+ return kind === "permission" ? adapterSignalSupportV3(adapter, "permission") : "unsupported";
91
+ }
92
+ /** No current adapter supplies an independent completed-turn wait aggregate. */
93
+ export function adapterTurnWaitCountSupportV3(_adapter) {
94
+ return "unsupported";
95
+ }
96
+ /**
97
+ * Local Cursor sessions expose the generic tool channel. Cloud/private-worker
98
+ * sessions cannot guarantee whole-turn delivery because hooks may start only
99
+ * after the execution environment becomes writable.
100
+ */
101
+ export function cursorToolChannelSupportV3(mode) {
102
+ if (mode === "local")
103
+ return "native";
104
+ if (mode === "cloud")
105
+ return "unsupported";
106
+ return "conditional";
107
+ }
@@ -0,0 +1,22 @@
1
+ import type { Adapter } from "../../adapter.js";
2
+ import { type AdapterSignalV3 } from "./capabilities.js";
3
+ import type { EventPayloadV3, EventV3 } from "./contract.js";
4
+ export interface CapabilityDeliveryV3 {
5
+ signal: AdapterSignalV3;
6
+ expected_count: number;
7
+ observed_count: number;
8
+ }
9
+ export type CapabilityDriftPayloadV3 = EventPayloadV3<"health.capability_drift">;
10
+ /**
11
+ * Compare measurable adapter promises against one completed generation.
12
+ *
13
+ * Conditional and unsupported promises never drift: absence is allowed by
14
+ * their contract. Native and derived promises report only when a concrete
15
+ * opportunity existed, keeping a quiet generation from manufacturing health
16
+ * failures.
17
+ */
18
+ export declare function capabilityDriftPayloadsV3(adapter: Adapter, events: readonly EventV3[], options?: {
19
+ generation_ended?: boolean;
20
+ }): CapabilityDriftPayloadV3[];
21
+ export declare function measurableDeliveriesV3(events: readonly EventV3[]): CapabilityDeliveryV3[];
22
+ //# sourceMappingURL=capability-drift.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability-drift.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/capability-drift.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EACL,KAAK,eAAe,EAGrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7D,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,eAAe,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,wBAAwB,GAAG,cAAc,CAAC,yBAAyB,CAAC,CAAC;AAEjF;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,SAAS,OAAO,EAAE,EAC1B,OAAO,GAAE;IAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAO,GAC3C,wBAAwB,EAAE,CAsB5B;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,GAAG,oBAAoB,EAAE,CAEzF"}