harnery 0.40.0 → 0.41.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 (441) hide show
  1. package/README.md +1 -1
  2. package/dist/commander.js +1 -0
  3. package/dist/commands/agents.d.ts.map +1 -1
  4. package/dist/commands/agents.js +25 -19
  5. package/dist/commands/browse-ai.d.ts.map +1 -1
  6. package/dist/commands/browse-ai.js +4 -0
  7. package/dist/commands/browse.d.ts.map +1 -1
  8. package/dist/commands/browse.js +141 -10
  9. package/dist/commands/checkpoint.js +8 -12
  10. package/dist/commands/deinit.d.ts +1 -1
  11. package/dist/commands/deinit.d.ts.map +1 -1
  12. package/dist/commands/deinit.js +8 -4
  13. package/dist/commands/docs.d.ts.map +1 -1
  14. package/dist/commands/docs.js +2 -0
  15. package/dist/commands/doctor.js +10 -2
  16. package/dist/commands/fetch.d.ts.map +1 -1
  17. package/dist/commands/fetch.js +10 -0
  18. package/dist/commands/init.d.ts +19 -3
  19. package/dist/commands/init.d.ts.map +1 -1
  20. package/dist/commands/init.js +232 -104
  21. package/dist/commands/instructions.js +5 -4
  22. package/dist/commands/ledger-v3.d.ts.map +1 -1
  23. package/dist/commands/ledger-v3.js +2 -1
  24. package/dist/commands/webview.d.ts +4 -0
  25. package/dist/commands/webview.d.ts.map +1 -0
  26. package/dist/commands/webview.js +94 -0
  27. package/dist/core/adapter.d.ts +50 -1
  28. package/dist/core/adapter.d.ts.map +1 -1
  29. package/dist/core/adapter.js +59 -1
  30. package/dist/core/adapters/attestation.d.ts.map +1 -1
  31. package/dist/core/adapters/attestation.js +3 -2
  32. package/dist/core/adapters/profiles.d.ts +20 -3
  33. package/dist/core/adapters/profiles.d.ts.map +1 -1
  34. package/dist/core/adapters/profiles.js +32 -1
  35. package/dist/core/adapters/registry.d.ts.map +1 -1
  36. package/dist/core/adapters/registry.js +33 -0
  37. package/dist/core/agents/canonical-emit.d.ts +1 -1
  38. package/dist/core/agents/canonical-emit.d.ts.map +1 -1
  39. package/dist/core/agents/canonical-emit.js +2 -7
  40. package/dist/core/agents/cli.js +18 -16
  41. package/dist/core/agents/coord-client.d.ts.map +1 -1
  42. package/dist/core/agents/coord-client.js +7 -2
  43. package/dist/core/agents/rules/claim-conflict.d.ts.map +1 -1
  44. package/dist/core/agents/rules/claim-conflict.js +3 -9
  45. package/dist/core/agents/rules/commit-conflict.d.ts.map +1 -1
  46. package/dist/core/agents/rules/commit-conflict.js +2 -8
  47. package/dist/core/agents/rules/stop-hook.d.ts +2 -0
  48. package/dist/core/agents/rules/stop-hook.d.ts.map +1 -1
  49. package/dist/core/agents/rules/stop-hook.js +1 -1
  50. package/dist/core/agents/session-events.d.ts +6 -2
  51. package/dist/core/agents/session-events.d.ts.map +1 -1
  52. package/dist/core/agents/session-events.js +105 -26
  53. package/dist/core/agents/session-finalization-state-v3.d.ts.map +1 -1
  54. package/dist/core/agents/session-finalization-state-v3.js +2 -1
  55. package/dist/core/agents/session-finalizer-v3.d.ts.map +1 -1
  56. package/dist/core/agents/session-finalizer-v3.js +5 -4
  57. package/dist/core/agents/session-name-display.d.ts +28 -0
  58. package/dist/core/agents/session-name-display.d.ts.map +1 -1
  59. package/dist/core/agents/session-name-display.js +43 -0
  60. package/dist/core/agents/state/heartbeat-reader.d.ts +7 -0
  61. package/dist/core/agents/state/heartbeat-reader.d.ts.map +1 -1
  62. package/dist/core/agents/state/heartbeat-writer.d.ts +10 -0
  63. package/dist/core/agents/state/heartbeat-writer.d.ts.map +1 -1
  64. package/dist/core/agents/state/heartbeat-writer.js +21 -2
  65. package/dist/core/agents/state/live-coordination-view.d.ts.map +1 -1
  66. package/dist/core/agents/state/live-coordination-view.js +1 -0
  67. package/dist/core/agents/state/live-coordination-writer.js +3 -0
  68. package/dist/core/agents/state/stale-sweep.d.ts.map +1 -1
  69. package/dist/core/agents/state/stale-sweep.js +2 -10
  70. package/dist/core/agents/turn-changes.d.ts +17 -0
  71. package/dist/core/agents/turn-changes.d.ts.map +1 -0
  72. package/dist/core/agents/turn-changes.js +76 -0
  73. package/dist/core/artifacts/delivery-card.d.ts.map +1 -1
  74. package/dist/core/artifacts/delivery-card.js +2 -1
  75. package/dist/core/artifacts/index.d.ts.map +1 -1
  76. package/dist/core/artifacts/index.js +4 -3
  77. package/dist/core/config.d.ts +5 -0
  78. package/dist/core/config.d.ts.map +1 -1
  79. package/dist/core/config.js +14 -0
  80. package/dist/core/context/index.d.ts.map +1 -1
  81. package/dist/core/context/index.js +2 -1
  82. package/dist/core/conversations/archive.d.ts.map +1 -1
  83. package/dist/core/conversations/archive.js +4 -3
  84. package/dist/core/diagnostics/bundle.d.ts.map +1 -1
  85. package/dist/core/diagnostics/bundle.js +3 -2
  86. package/dist/core/events/legacy-storage/canary.d.ts.map +1 -1
  87. package/dist/core/events/legacy-storage/canary.js +5 -4
  88. package/dist/core/events/legacy-storage/compression.d.ts.map +1 -1
  89. package/dist/core/events/legacy-storage/compression.js +2 -1
  90. package/dist/core/events/v3/adapter-id.d.ts +10 -2
  91. package/dist/core/events/v3/adapter-id.d.ts.map +1 -1
  92. package/dist/core/events/v3/adapter-id.js +16 -0
  93. package/dist/core/events/v3/authority-outbox.d.ts.map +1 -1
  94. package/dist/core/events/v3/authority-outbox.js +2 -1
  95. package/dist/core/events/v3/bootstrap.d.ts.map +1 -1
  96. package/dist/core/events/v3/bootstrap.js +5 -4
  97. package/dist/core/events/v3/capabilities.d.ts.map +1 -1
  98. package/dist/core/events/v3/capabilities.js +17 -0
  99. package/dist/core/events/v3/contract.d.ts +5 -0
  100. package/dist/core/events/v3/contract.d.ts.map +1 -1
  101. package/dist/core/events/v3/contract.js +7 -1
  102. package/dist/core/events/v3/control-witness.d.ts.map +1 -1
  103. package/dist/core/events/v3/control-witness.js +3 -2
  104. package/dist/core/events/v3/coordination-transaction-recovery.d.ts.map +1 -1
  105. package/dist/core/events/v3/coordination-transaction-recovery.js +4 -3
  106. package/dist/core/events/v3/fingerprint-keys.d.ts.map +1 -1
  107. package/dist/core/events/v3/fingerprint-keys.js +7 -6
  108. package/dist/core/events/v3/generated.d.ts +1 -1
  109. package/dist/core/events/v3/generated.js +1 -1
  110. package/dist/core/events/v3/live-feed.d.ts.map +1 -1
  111. package/dist/core/events/v3/live-feed.js +5 -4
  112. package/dist/core/events/v3/producers/command-recorder.d.ts.map +1 -1
  113. package/dist/core/events/v3/producers/command-recorder.js +8 -7
  114. package/dist/core/events/v3/producers/coordination-recorder.d.ts.map +1 -1
  115. package/dist/core/events/v3/producers/coordination-recorder.js +8 -7
  116. package/dist/core/events/v3/producers/diagnostic-summaries.d.ts.map +1 -1
  117. package/dist/core/events/v3/producers/diagnostic-summaries.js +5 -4
  118. package/dist/core/events/v3/producers/hook-base.d.ts +1 -0
  119. package/dist/core/events/v3/producers/hook-base.d.ts.map +1 -1
  120. package/dist/core/events/v3/producers/hook-base.js +10 -4
  121. package/dist/core/events/v3/producers/hook.d.ts +2 -0
  122. package/dist/core/events/v3/producers/hook.d.ts.map +1 -1
  123. package/dist/core/events/v3/producers/hook.js +16 -1
  124. package/dist/core/events/v3/producers/intake.d.ts.map +1 -1
  125. package/dist/core/events/v3/producers/intake.js +16 -6
  126. package/dist/core/events/v3/producers/recorder.d.ts +2 -4
  127. package/dist/core/events/v3/producers/recorder.d.ts.map +1 -1
  128. package/dist/core/events/v3/producers/recorder.js +109 -101
  129. package/dist/core/events/v3/recovery.d.ts.map +1 -1
  130. package/dist/core/events/v3/recovery.js +4 -3
  131. package/dist/core/events/v3/support-storage/inventory.d.ts.map +1 -1
  132. package/dist/core/events/v3/support-storage/inventory.js +2 -1
  133. package/dist/core/events/v3/support-storage/maintenance.d.ts.map +1 -1
  134. package/dist/core/events/v3/support-storage/maintenance.js +4 -3
  135. package/dist/core/events/v3/support-storage/pack-reader.d.ts.map +1 -1
  136. package/dist/core/events/v3/support-storage/pack-reader.js +4 -3
  137. package/dist/core/events/v3/support-storage/pack-writer.d.ts.map +1 -1
  138. package/dist/core/events/v3/support-storage/pack-writer.js +6 -5
  139. package/dist/core/events/v3/tool-line-changes.d.ts +8 -0
  140. package/dist/core/events/v3/tool-line-changes.d.ts.map +1 -0
  141. package/dist/core/events/v3/tool-line-changes.js +135 -0
  142. package/dist/core/events/v3/writer.d.ts.map +1 -1
  143. package/dist/core/events/v3/writer.js +8 -7
  144. package/dist/core/governor/planning.d.ts.map +1 -1
  145. package/dist/core/governor/planning.js +6 -5
  146. package/dist/core/governor/service.d.ts.map +1 -1
  147. package/dist/core/governor/service.js +12 -11
  148. package/dist/core/governor/state.d.ts.map +1 -1
  149. package/dist/core/governor/state.js +7 -6
  150. package/dist/core/guard/evaluator.js +1 -0
  151. package/dist/core/guard/storage.d.ts.map +1 -1
  152. package/dist/core/guard/storage.js +3 -2
  153. package/dist/core/hooks/adapter/behaviors/claude-code.d.ts +4 -0
  154. package/dist/core/hooks/adapter/behaviors/claude-code.d.ts.map +1 -0
  155. package/dist/core/hooks/adapter/behaviors/claude-code.js +31 -0
  156. package/dist/core/hooks/adapter/behaviors/codex.d.ts +15 -0
  157. package/dist/core/hooks/adapter/behaviors/codex.d.ts.map +1 -0
  158. package/dist/core/hooks/adapter/behaviors/codex.js +82 -0
  159. package/dist/core/hooks/adapter/behaviors/cursor.d.ts +7 -0
  160. package/dist/core/hooks/adapter/behaviors/cursor.d.ts.map +1 -0
  161. package/dist/core/hooks/adapter/behaviors/cursor.js +35 -0
  162. package/dist/core/hooks/adapter/behaviors/index.d.ts +11 -0
  163. package/dist/core/hooks/adapter/behaviors/index.d.ts.map +1 -0
  164. package/dist/core/hooks/adapter/behaviors/index.js +20 -0
  165. package/dist/core/hooks/adapter/behaviors/openclaw.d.ts +7 -0
  166. package/dist/core/hooks/adapter/behaviors/openclaw.d.ts.map +1 -0
  167. package/dist/core/hooks/adapter/behaviors/openclaw.js +34 -0
  168. package/dist/core/hooks/adapter/behaviors/opencode.d.ts +7 -0
  169. package/dist/core/hooks/adapter/behaviors/opencode.d.ts.map +1 -0
  170. package/dist/core/hooks/adapter/behaviors/opencode.js +34 -0
  171. package/dist/core/hooks/adapter/behaviors/types.d.ts +89 -0
  172. package/dist/core/hooks/adapter/behaviors/types.d.ts.map +1 -0
  173. package/dist/core/hooks/adapter/behaviors/types.js +1 -0
  174. package/dist/core/hooks/adapter/detect.d.ts +1 -1
  175. package/dist/core/hooks/adapter/detect.d.ts.map +1 -1
  176. package/dist/core/hooks/adapter/detect.js +2 -3
  177. package/dist/core/hooks/adapter/events.d.ts +29 -1
  178. package/dist/core/hooks/adapter/events.d.ts.map +1 -1
  179. package/dist/core/hooks/adapter/events.js +31 -0
  180. package/dist/core/hooks/adapter/opencode-plugin.d.ts +60 -0
  181. package/dist/core/hooks/adapter/opencode-plugin.d.ts.map +1 -0
  182. package/dist/core/hooks/adapter/opencode-plugin.js +129 -0
  183. package/dist/core/hooks/adapter/output.d.ts +7 -0
  184. package/dist/core/hooks/adapter/output.d.ts.map +1 -1
  185. package/dist/core/hooks/adapter/output.js +8 -1
  186. package/dist/core/hooks/adapter/wiring.d.ts +15 -1
  187. package/dist/core/hooks/adapter/wiring.d.ts.map +1 -1
  188. package/dist/core/hooks/adapter/wiring.js +74 -11
  189. package/dist/core/hooks/cli.js +635 -529
  190. package/dist/core/hooks/effects/image-capture.d.ts.map +1 -1
  191. package/dist/core/hooks/effects/image-capture.js +2 -1
  192. package/dist/core/hooks/prompt-context/contract.d.ts.map +1 -1
  193. package/dist/core/hooks/prompt-context/contract.js +1 -0
  194. package/dist/core/hooks/resolve/transcript.d.ts +1 -1
  195. package/dist/core/hooks/resolve/transcript.d.ts.map +1 -1
  196. package/dist/core/hooks/resolve/transcript.js +35 -4
  197. package/dist/core/hooks/session-name-presence.d.ts +3 -1
  198. package/dist/core/hooks/session-name-presence.d.ts.map +1 -1
  199. package/dist/core/hooks/session-name-presence.js +7 -2
  200. package/dist/core/hooks/shell-waiter.d.ts +2 -0
  201. package/dist/core/hooks/shell-waiter.d.ts.map +1 -0
  202. package/dist/core/hooks/shell-waiter.js +173 -0
  203. package/dist/core/resources/service.d.ts.map +1 -1
  204. package/dist/core/resources/service.js +5 -4
  205. package/dist/core/semantic/review.d.ts.map +1 -1
  206. package/dist/core/semantic/review.js +5 -4
  207. package/dist/core/semantic/service.d.ts.map +1 -1
  208. package/dist/core/semantic/service.js +15 -14
  209. package/dist/core/semantic/storage.d.ts.map +1 -1
  210. package/dist/core/semantic/storage.js +5 -4
  211. package/dist/core/storage/atomic-json.d.ts.map +1 -1
  212. package/dist/core/storage/atomic-json.js +7 -3
  213. package/dist/core/storage/durable-history.d.ts.map +1 -1
  214. package/dist/core/storage/durable-history.js +6 -5
  215. package/dist/core/storage/maintenance-providers.d.ts.map +1 -1
  216. package/dist/core/storage/maintenance-providers.js +2 -1
  217. package/dist/core/storage/maintenance.d.ts.map +1 -1
  218. package/dist/core/storage/maintenance.js +7 -6
  219. package/dist/core/storage/metrics.d.ts.map +1 -1
  220. package/dist/core/storage/metrics.js +5 -1
  221. package/dist/core/storage/modes.d.ts +17 -0
  222. package/dist/core/storage/modes.d.ts.map +1 -0
  223. package/dist/core/storage/modes.js +47 -0
  224. package/dist/core/storage/process-log.d.ts.map +1 -1
  225. package/dist/core/storage/process-log.js +3 -2
  226. package/dist/core/storage/receipts.d.ts.map +1 -1
  227. package/dist/core/storage/receipts.js +4 -3
  228. package/dist/core/storage/segments.d.ts.map +1 -1
  229. package/dist/core/storage/segments.js +7 -6
  230. package/dist/core/supervisor/hook-health.d.ts +2 -1
  231. package/dist/core/supervisor/hook-health.d.ts.map +1 -1
  232. package/dist/core/supervisor/hook-health.js +4 -3
  233. package/dist/core/supervisor/service.d.ts.map +1 -1
  234. package/dist/core/supervisor/service.js +7 -6
  235. package/dist/core/work/state.d.ts.map +1 -1
  236. package/dist/core/work/state.js +8 -7
  237. package/dist/core/workflow/adapters.d.ts +7 -0
  238. package/dist/core/workflow/adapters.d.ts.map +1 -1
  239. package/dist/core/workflow/adapters.js +9 -0
  240. package/dist/core/workflow/approvals.d.ts.map +1 -1
  241. package/dist/core/workflow/approvals.js +6 -5
  242. package/dist/core/workflow/billing.d.ts.map +1 -1
  243. package/dist/core/workflow/billing.js +33 -4
  244. package/dist/core/workflow/durable-record.d.ts.map +1 -1
  245. package/dist/core/workflow/durable-record.js +4 -3
  246. package/dist/core/workflow/live-session-v3.d.ts.map +1 -1
  247. package/dist/core/workflow/live-session-v3.js +2 -3
  248. package/dist/core/workflow/run-state.d.ts.map +1 -1
  249. package/dist/core/workflow/run-state.js +3 -2
  250. package/dist/core/workflow/spawn-opencode.d.ts +36 -0
  251. package/dist/core/workflow/spawn-opencode.d.ts.map +1 -0
  252. package/dist/core/workflow/spawn-opencode.js +132 -0
  253. package/dist/core/workflow/transcript.d.ts.map +1 -1
  254. package/dist/core/workflow/transcript.js +3 -2
  255. package/dist/core/workflow/workspaces/leases.d.ts.map +1 -1
  256. package/dist/core/workflow/workspaces/leases.js +5 -4
  257. package/dist/core/workflow/workspaces/local-git.d.ts.map +1 -1
  258. package/dist/core/workflow/workspaces/local-git.js +3 -2
  259. package/dist/core/workflow/workspaces/paths.d.ts.map +1 -1
  260. package/dist/core/workflow/workspaces/paths.js +2 -1
  261. package/dist/core/workflow/workspaces/state.d.ts.map +1 -1
  262. package/dist/core/workflow/workspaces/state.js +10 -9
  263. package/dist/lazy-commands.js +8 -1
  264. package/dist/lib/agent-browser/client.d.ts +9 -0
  265. package/dist/lib/agent-browser/client.d.ts.map +1 -1
  266. package/dist/lib/agent-browser/client.js +13 -0
  267. package/dist/lib/browser/client.d.ts +35 -1
  268. package/dist/lib/browser/client.d.ts.map +1 -1
  269. package/dist/lib/browser/client.js +117 -8
  270. package/dist/lib/browser/identity.d.ts +25 -0
  271. package/dist/lib/browser/identity.d.ts.map +1 -0
  272. package/dist/lib/browser/identity.js +66 -0
  273. package/dist/lib/browser/index.d.ts +2 -1
  274. package/dist/lib/browser/index.d.ts.map +1 -1
  275. package/dist/lib/browser/index.js +2 -1
  276. package/dist/lib/browser/launch-args.d.ts +26 -0
  277. package/dist/lib/browser/launch-args.d.ts.map +1 -1
  278. package/dist/lib/browser/launch-args.js +41 -1
  279. package/dist/lib/browser/user-agent.d.ts +53 -0
  280. package/dist/lib/browser/user-agent.d.ts.map +1 -0
  281. package/dist/lib/browser/user-agent.js +79 -0
  282. package/dist/lib/docs-metadata-managed.d.ts +1 -0
  283. package/dist/lib/docs-metadata-managed.d.ts.map +1 -1
  284. package/dist/lib/docs-metadata-managed.js +17 -1
  285. package/dist/lib/identities/assume.d.ts.map +1 -1
  286. package/dist/lib/identities/assume.js +4 -9
  287. package/dist/lib/instructions/apply.d.ts.map +1 -1
  288. package/dist/lib/instructions/apply.js +2 -0
  289. package/dist/lib/pace/index.d.ts +2 -0
  290. package/dist/lib/pace/index.d.ts.map +1 -0
  291. package/dist/lib/pace/index.js +1 -0
  292. package/dist/lib/pace/pace.d.ts +95 -0
  293. package/dist/lib/pace/pace.d.ts.map +1 -0
  294. package/dist/lib/pace/pace.js +313 -0
  295. package/dist/lib/tunnel/forward-headers.d.ts +11 -0
  296. package/dist/lib/tunnel/forward-headers.d.ts.map +1 -0
  297. package/dist/lib/tunnel/forward-headers.js +17 -0
  298. package/dist/lib/tunnel/gate.js +15 -10
  299. package/dist/lib/webview/index.d.ts +2 -0
  300. package/dist/lib/webview/index.d.ts.map +1 -0
  301. package/dist/lib/webview/index.js +1 -0
  302. package/dist/lib/webview/webview.d.ts +116 -0
  303. package/dist/lib/webview/webview.d.ts.map +1 -0
  304. package/dist/lib/webview/webview.js +289 -0
  305. package/opencode-plugin/package.json +19 -0
  306. package/opencode-plugin/src/index.ts +791 -0
  307. package/package.json +11 -4
  308. package/schemas/config.schema.json +13 -0
  309. package/schemas/event-v3.schema.json +164 -0
  310. package/src/commander.ts +7 -0
  311. package/src/commands/agents.ts +33 -18
  312. package/src/commands/browse-ai.ts +8 -0
  313. package/src/commands/browse.ts +189 -10
  314. package/src/commands/checkpoint.ts +7 -9
  315. package/src/commands/deinit.ts +9 -4
  316. package/src/commands/docs.ts +2 -0
  317. package/src/commands/doctor.ts +11 -2
  318. package/src/commands/fetch.ts +14 -0
  319. package/src/commands/init.ts +281 -119
  320. package/src/commands/instructions.ts +8 -4
  321. package/src/commands/ledger-v3.ts +2 -1
  322. package/src/commands/webview.ts +159 -0
  323. package/src/core/adapter.ts +102 -1
  324. package/src/core/adapters/attestation.ts +3 -2
  325. package/src/core/adapters/profiles.ts +42 -1
  326. package/src/core/adapters/registry.ts +37 -0
  327. package/src/core/agents/canonical-emit.ts +2 -5
  328. package/src/core/agents/cli.ts +18 -17
  329. package/src/core/agents/coord-client.ts +9 -3
  330. package/src/core/agents/rules/claim-conflict.ts +3 -8
  331. package/src/core/agents/rules/commit-conflict.ts +2 -7
  332. package/src/core/agents/rules/stop-hook.ts +3 -1
  333. package/src/core/agents/session-events.ts +120 -26
  334. package/src/core/agents/session-finalization-state-v3.ts +2 -1
  335. package/src/core/agents/session-finalizer-v3.ts +5 -4
  336. package/src/core/agents/session-name-display.ts +48 -0
  337. package/src/core/agents/state/heartbeat-reader.ts +7 -0
  338. package/src/core/agents/state/heartbeat-writer.ts +24 -2
  339. package/src/core/agents/state/live-coordination-view.ts +1 -0
  340. package/src/core/agents/state/live-coordination-writer.ts +3 -0
  341. package/src/core/agents/state/stale-sweep.ts +2 -9
  342. package/src/core/agents/turn-changes.ts +97 -0
  343. package/src/core/artifacts/delivery-card.ts +2 -1
  344. package/src/core/artifacts/index.ts +4 -3
  345. package/src/core/config.ts +23 -0
  346. package/src/core/context/index.ts +2 -1
  347. package/src/core/conversations/archive.ts +4 -3
  348. package/src/core/diagnostics/bundle.ts +3 -2
  349. package/src/core/events/legacy-storage/canary.ts +5 -4
  350. package/src/core/events/legacy-storage/compression.ts +2 -1
  351. package/src/core/events/v3/adapter-id.ts +29 -1
  352. package/src/core/events/v3/authority-outbox.ts +2 -1
  353. package/src/core/events/v3/bootstrap.ts +5 -4
  354. package/src/core/events/v3/capabilities.ts +17 -0
  355. package/src/core/events/v3/contract.ts +9 -1
  356. package/src/core/events/v3/control-witness.ts +3 -2
  357. package/src/core/events/v3/coordination-transaction-recovery.ts +4 -3
  358. package/src/core/events/v3/fingerprint-keys.ts +7 -6
  359. package/src/core/events/v3/generated.ts +1 -1
  360. package/src/core/events/v3/live-feed.ts +5 -4
  361. package/src/core/events/v3/producers/command-recorder.ts +8 -6
  362. package/src/core/events/v3/producers/coordination-recorder.ts +8 -7
  363. package/src/core/events/v3/producers/diagnostic-summaries.ts +5 -4
  364. package/src/core/events/v3/producers/hook-base.ts +11 -4
  365. package/src/core/events/v3/producers/hook.ts +19 -1
  366. package/src/core/events/v3/producers/intake.ts +18 -6
  367. package/src/core/events/v3/producers/recorder.ts +123 -114
  368. package/src/core/events/v3/recovery.ts +4 -3
  369. package/src/core/events/v3/support-storage/inventory.ts +2 -1
  370. package/src/core/events/v3/support-storage/maintenance.ts +8 -3
  371. package/src/core/events/v3/support-storage/pack-reader.ts +4 -3
  372. package/src/core/events/v3/support-storage/pack-writer.ts +6 -5
  373. package/src/core/events/v3/tool-line-changes.ts +139 -0
  374. package/src/core/events/v3/writer.ts +8 -7
  375. package/src/core/governor/planning.ts +6 -5
  376. package/src/core/governor/service.ts +12 -11
  377. package/src/core/governor/state.ts +7 -6
  378. package/src/core/guard/evaluator.ts +1 -0
  379. package/src/core/guard/storage.ts +3 -2
  380. package/src/core/hooks/adapter/behaviors/claude-code.ts +33 -0
  381. package/src/core/hooks/adapter/behaviors/codex.ts +96 -0
  382. package/src/core/hooks/adapter/behaviors/cursor.ts +37 -0
  383. package/src/core/hooks/adapter/behaviors/index.ts +31 -0
  384. package/src/core/hooks/adapter/behaviors/openclaw.ts +36 -0
  385. package/src/core/hooks/adapter/behaviors/opencode.ts +36 -0
  386. package/src/core/hooks/adapter/behaviors/types.ts +110 -0
  387. package/src/core/hooks/adapter/detect.ts +2 -3
  388. package/src/core/hooks/adapter/events.ts +53 -1
  389. package/src/core/hooks/adapter/opencode-plugin.ts +177 -0
  390. package/src/core/hooks/adapter/output.ts +8 -1
  391. package/src/core/hooks/adapter/wiring.ts +85 -11
  392. package/src/core/hooks/cli.ts +733 -537
  393. package/src/core/hooks/effects/image-capture.ts +2 -1
  394. package/src/core/hooks/prompt-context/contract.ts +1 -0
  395. package/src/core/hooks/resolve/transcript.ts +42 -5
  396. package/src/core/hooks/session-name-presence.ts +10 -3
  397. package/src/core/hooks/shell-waiter.ts +166 -0
  398. package/src/core/resources/service.ts +5 -4
  399. package/src/core/semantic/review.ts +5 -4
  400. package/src/core/semantic/service.ts +15 -14
  401. package/src/core/semantic/storage.ts +5 -4
  402. package/src/core/storage/atomic-json.ts +7 -3
  403. package/src/core/storage/durable-history.ts +6 -5
  404. package/src/core/storage/maintenance-providers.ts +2 -1
  405. package/src/core/storage/maintenance.ts +7 -6
  406. package/src/core/storage/metrics.ts +5 -1
  407. package/src/core/storage/modes.ts +53 -0
  408. package/src/core/storage/process-log.ts +3 -2
  409. package/src/core/storage/receipts.ts +4 -3
  410. package/src/core/storage/segments.ts +7 -6
  411. package/src/core/supervisor/hook-health.ts +4 -4
  412. package/src/core/supervisor/service.ts +7 -6
  413. package/src/core/work/state.ts +8 -7
  414. package/src/core/workflow/adapters.ts +15 -0
  415. package/src/core/workflow/approvals.ts +6 -5
  416. package/src/core/workflow/billing.ts +34 -4
  417. package/src/core/workflow/durable-record.ts +4 -3
  418. package/src/core/workflow/live-session-v3.ts +2 -3
  419. package/src/core/workflow/run-state.ts +3 -2
  420. package/src/core/workflow/spawn-opencode.ts +150 -0
  421. package/src/core/workflow/transcript.ts +3 -2
  422. package/src/core/workflow/workspaces/leases.ts +5 -4
  423. package/src/core/workflow/workspaces/local-git.ts +3 -2
  424. package/src/core/workflow/workspaces/paths.ts +2 -1
  425. package/src/core/workflow/workspaces/state.ts +10 -9
  426. package/src/lazy-commands.ts +11 -1
  427. package/src/lib/agent-browser/client.ts +18 -0
  428. package/src/lib/browser/client.ts +147 -9
  429. package/src/lib/browser/identity.ts +64 -0
  430. package/src/lib/browser/index.ts +15 -1
  431. package/src/lib/browser/launch-args.ts +53 -1
  432. package/src/lib/browser/user-agent.ts +130 -0
  433. package/src/lib/docs-metadata-managed.ts +21 -0
  434. package/src/lib/identities/assume.ts +7 -7
  435. package/src/lib/instructions/apply.ts +2 -0
  436. package/src/lib/pace/index.ts +14 -0
  437. package/src/lib/pace/pace.ts +370 -0
  438. package/src/lib/tunnel/forward-headers.ts +16 -0
  439. package/src/lib/tunnel/gate.ts +18 -10
  440. package/src/lib/webview/index.ts +13 -0
  441. package/src/lib/webview/webview.ts +457 -0
@@ -54,6 +54,19 @@ const BASE_SIGNAL_SUPPORT = {
54
54
  post_compaction: "unsupported",
55
55
  context_usage: "conditional",
56
56
  },
57
+ opencode: {
58
+ ...SHARED_SIGNAL_SUPPORT,
59
+ // OpenCode sessions are persistent server objects; the plugin observes a
60
+ // turn boundary (session.idle) rather than a clean session close, so end is
61
+ // conditional. Turns group by messageID without a first-class turn id.
62
+ session_end: "conditional",
63
+ turn_id: "conditional",
64
+ permission: "native",
65
+ // Compaction is intercepted (session.hook("compaction")); post-compaction
66
+ // recovery and SQLite-backed context usage are not yet certified.
67
+ post_compaction: "unsupported",
68
+ context_usage: "unsupported",
69
+ },
57
70
  openclaw: {
58
71
  session_start: "conditional",
59
72
  session_end: "native",
@@ -101,6 +114,10 @@ export const ADAPTER_CAPABILITY_PROFILES_V3 = {
101
114
  model_usage: "unsupported",
102
115
  inference_timing: "unsupported",
103
116
  }),
117
+ opencode: profile("opencode", {
118
+ model_usage: "conditional",
119
+ inference_timing: "unsupported",
120
+ }),
104
121
  openclaw: profile("openclaw", {
105
122
  model_usage: "unsupported",
106
123
  inference_timing: "unsupported",
@@ -82,6 +82,10 @@ export declare const TurnHarnessV3Schema: TObject<{
82
82
  export declare const WaitKindV3Schema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"permission">, import("@sinclair/typebox").TLiteral<"needs_input">, import("@sinclair/typebox").TLiteral<"decision">, import("@sinclair/typebox").TLiteral<"approval">, import("@sinclair/typebox").TLiteral<"scheduled">, import("@sinclair/typebox").TLiteral<"rate_limit">, import("@sinclair/typebox").TLiteral<"unknown">]>;
83
83
  export declare const SessionEndedV3Schema: TObject<TProperties>;
84
84
  export declare const TurnCompletedV3Schema: TObject<TProperties>;
85
+ export declare const ToolLineChangesV3Schema: TObject<{
86
+ added: import("@sinclair/typebox").TInteger;
87
+ removed: import("@sinclair/typebox").TInteger;
88
+ }>;
85
89
  export declare const ToolCompletedV3Schema: TObject<TProperties>;
86
90
  export declare const CommandCompletedV3Schema: TObject<TProperties>;
87
91
  export declare const AgentCompletedV3Schema: TObject<TProperties>;
@@ -119,6 +123,7 @@ type TurnCompletedEventV3 = ReplaceEventV3<"turn.completed", "turn.completed", E
119
123
  type ToolCompletedEventV3 = ReplaceEventV3<"tool.completed", "tool.completed", Omit<EventOfTypeV3Base<"tool.completed">["payload"], "duration_ms"> & {
120
124
  duration_ms: SpanSummaryValueV3["duration_ms"];
121
125
  span: SpanSummaryValueV3;
126
+ line_changes?: Static<ReturnType<typeof ObservationV3Schema<typeof ToolLineChangesV3Schema>>>;
122
127
  }>;
123
128
  type CommandCompletedEventV3 = ReplaceEventV3<"command.completed", "command.completed", Omit<EventOfTypeV3Base<"command.completed">["payload"], "duration_ms"> & {
124
129
  duration_ms: SpanSummaryValueV3["duration_ms"];
@@ -1 +1 @@
1
- {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/contract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/contract.ts"],"names":[],"mappings":"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"}
@@ -92,8 +92,14 @@ export const TurnCompletedV3Schema = eventV3("turn.completed", {
92
92
  harness: ObservationV3Schema(TurnHarnessV3Schema),
93
93
  }),
94
94
  });
95
+ export const ToolLineChangesV3Schema = StrictObject({
96
+ added: Type.Integer({ minimum: 0 }),
97
+ removed: Type.Integer({ minimum: 0 }),
98
+ });
95
99
  export const ToolCompletedV3Schema = eventV3("tool.completed", {
96
- payload: terminalPayloadV3("tool.completed"),
100
+ payload: terminalPayloadV3("tool.completed", {
101
+ line_changes: Type.Optional(ObservationV3Schema(ToolLineChangesV3Schema)),
102
+ }),
97
103
  });
98
104
  export const CommandCompletedV3Schema = eventV3("command.completed", {
99
105
  payload: terminalPayloadV3("command.completed", {
@@ -1 +1 @@
1
- {"version":3,"file":"control-witness.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/control-witness.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAErF,OAAO,EAEL,yCAAyC,EACzC,sCAAsC,EACtC,KAAK,mCAAmC,EACxC,KAAK,gCAAgC,EAKtC,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,yCAAyC,EAAE,sCAAsC,EAAE,CAAC;AAE7F;;;;;;;;GAQG;AACH,MAAM,MAAM,mCAAmC,GAAG,QAAQ,GAAG,WAAW,CAAC;AAEzE,UAAU,oCAAoC;IAC5C,MAAM,EAAE,kCAAkC,CAAC;IAC3C,cAAc,EAAE,CAAC,CAAC;IAClB,UAAU,EAAE,OAAO,MAAM,EAAE,CAAC;IAC5B,gBAAgB,EAAE,OAAO,MAAM,EAAE,CAAC;IAClC,uBAAuB,EAAE,UAAU,MAAM,EAAE,CAAC;IAC5C,yBAAyB,EAAE,UAAU,MAAM,EAAE,CAAC;IAC9C,iBAAiB,EAAE,OAAO,MAAM,EAAE,CAAC;IACnC,OAAO,EAAE,QAAQ,MAAM,EAAE,CAAC;IAC1B,OAAO,EAAE,gCAAgC,CAAC;IAC1C,iBAAiB,EAAE,UAAU,MAAM,EAAE,CAAC;CACvC;AAED,UAAU,oCAAqC,SAAQ,oCAAoC;IACzF,aAAa,EAAE,QAAQ,CAAC;IACxB,aAAa,EAAE,OAAO,MAAM,EAAE,CAAC;IAC/B,mBAAmB,EAAE,OAAO,MAAM,EAAE,CAAC;IACrC,0BAA0B,EAAE,UAAU,MAAM,EAAE,CAAC;CAChD;AAED,UAAU,uCAAwC,SAAQ,oCAAoC;IAC5F,aAAa,EAAE,WAAW,CAAC;CAC5B;AAED,KAAK,4BAA4B,GAC7B,oCAAoC,GACpC,uCAAuC,CAAC;AAO5C,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE,0BAA0B,CAAC;IACpC,UAAU,EAAE,oBAAoB,CAAC;IACjC,yBAAyB,EAAE,UAAU,MAAM,EAAE,CAAC;CAC/C;AAED,4EAA4E;AAC5E,MAAM,WAAW,gCAAgC;IAC/C,OAAO,EAAE,0BAA0B,CAAC;IACpC,yBAAyB,EAAE,UAAU,MAAM,EAAE,CAAC;CAC/C;AAED,iGAAiG;AACjG,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAIT;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gCAAgC,CAC9C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,gCAAgC,GACxC,OAAO,CAIT;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,6BAA6B,EACtC,gBAAgB,EAAE,gCAAgC,EAClD,UAAU,EAAE,mCAAmC,GAC9C,OAAO,CAOT;AAED;;;;GAIG;AACH,wBAAgB,gCAAgC,CAC9C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,gCAAgC,EACzC,gBAAgB,EAAE,gCAAgC,EAClD,UAAU,EAAE,mCAAmC,GAC9C,OAAO,CAOT;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAAC,SAAS,EAAE,MAAM,GAC7D;IACE,OAAO,EAAE,4BAA4B,CAAC;IACtC,UAAU,EAAE,mCAAmC,CAAC;CACjD,GACD,SAAS,CAYZ;AAED,oGAAoG;AACpG,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE;IACL,OAAO,EAAE,4BAA4B,CAAC;IACtC,UAAU,EAAE,mCAAmC,CAAC;CACjD,EACD,gBAAgB,EAAE,MAAM,GAAG,SAAS,GACnC,OAAO,CA0BT"}
1
+ {"version":3,"file":"control-witness.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/control-witness.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAErF,OAAO,EAEL,yCAAyC,EACzC,sCAAsC,EACtC,KAAK,mCAAmC,EACxC,KAAK,gCAAgC,EAKtC,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,yCAAyC,EAAE,sCAAsC,EAAE,CAAC;AAE7F;;;;;;;;GAQG;AACH,MAAM,MAAM,mCAAmC,GAAG,QAAQ,GAAG,WAAW,CAAC;AAEzE,UAAU,oCAAoC;IAC5C,MAAM,EAAE,kCAAkC,CAAC;IAC3C,cAAc,EAAE,CAAC,CAAC;IAClB,UAAU,EAAE,OAAO,MAAM,EAAE,CAAC;IAC5B,gBAAgB,EAAE,OAAO,MAAM,EAAE,CAAC;IAClC,uBAAuB,EAAE,UAAU,MAAM,EAAE,CAAC;IAC5C,yBAAyB,EAAE,UAAU,MAAM,EAAE,CAAC;IAC9C,iBAAiB,EAAE,OAAO,MAAM,EAAE,CAAC;IACnC,OAAO,EAAE,QAAQ,MAAM,EAAE,CAAC;IAC1B,OAAO,EAAE,gCAAgC,CAAC;IAC1C,iBAAiB,EAAE,UAAU,MAAM,EAAE,CAAC;CACvC;AAED,UAAU,oCAAqC,SAAQ,oCAAoC;IACzF,aAAa,EAAE,QAAQ,CAAC;IACxB,aAAa,EAAE,OAAO,MAAM,EAAE,CAAC;IAC/B,mBAAmB,EAAE,OAAO,MAAM,EAAE,CAAC;IACrC,0BAA0B,EAAE,UAAU,MAAM,EAAE,CAAC;CAChD;AAED,UAAU,uCAAwC,SAAQ,oCAAoC;IAC5F,aAAa,EAAE,WAAW,CAAC;CAC5B;AAED,KAAK,4BAA4B,GAC7B,oCAAoC,GACpC,uCAAuC,CAAC;AAO5C,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE,0BAA0B,CAAC;IACpC,UAAU,EAAE,oBAAoB,CAAC;IACjC,yBAAyB,EAAE,UAAU,MAAM,EAAE,CAAC;CAC/C;AAED,4EAA4E;AAC5E,MAAM,WAAW,gCAAgC;IAC/C,OAAO,EAAE,0BAA0B,CAAC;IACpC,yBAAyB,EAAE,UAAU,MAAM,EAAE,CAAC;CAC/C;AAED,iGAAiG;AACjG,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAIT;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gCAAgC,CAC9C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,gCAAgC,GACxC,OAAO,CAIT;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,6BAA6B,EACtC,gBAAgB,EAAE,gCAAgC,EAClD,UAAU,EAAE,mCAAmC,GAC9C,OAAO,CAOT;AAED;;;;GAIG;AACH,wBAAgB,gCAAgC,CAC9C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,gCAAgC,EACzC,gBAAgB,EAAE,gCAAgC,EAClD,UAAU,EAAE,mCAAmC,GAC9C,OAAO,CAOT;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAAC,SAAS,EAAE,MAAM,GAC7D;IACE,OAAO,EAAE,4BAA4B,CAAC;IACtC,UAAU,EAAE,mCAAmC,CAAC;CACjD,GACD,SAAS,CAYZ;AAED,oGAAoG;AACpG,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE;IACL,OAAO,EAAE,4BAA4B,CAAC;IACtC,UAAU,EAAE,mCAAmC,CAAC;CACjD,EACD,gBAAgB,EAAE,MAAM,GAAG,SAAS,GACnC,OAAO,CA0BT"}
@@ -1,5 +1,6 @@
1
1
  import { randomUUID } from "node:crypto";
2
2
  import { chmodSync, closeSync, existsSync, fsyncSync, openSync, readFileSync, renameSync, unlinkSync, writeFileSync, } from "node:fs";
3
+ import { stateFileMode } from "../../storage/modes.js";
3
4
  import { fsyncParentDirectory } from "../../workflow/durable-record.js";
4
5
  import { canonicalJsonV3, fingerprintV3, sha256V3 } from "./canonical.js";
5
6
  import { fingerprintContextV3 } from "./fingerprint-keys.js";
@@ -175,12 +176,12 @@ function publishCanonicalFileV3(path, value) {
175
176
  const temporary = `${path}.tmp-${process.pid}-${randomUUID()}`;
176
177
  let fd;
177
178
  try {
178
- fd = openSync(temporary, "wx", 0o600);
179
+ fd = openSync(temporary, "wx", stateFileMode());
179
180
  writeFileSync(fd, `${canonicalJsonV3(value)}\n`, "utf8");
180
181
  fsyncSync(fd);
181
182
  closeSync(fd);
182
183
  fd = undefined;
183
- chmodSync(temporary, 0o600);
184
+ chmodSync(temporary, stateFileMode());
184
185
  renameSync(temporary, path);
185
186
  fsyncParentDirectory(path);
186
187
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"coordination-transaction-recovery.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/coordination-transaction-recovery.ts"],"names":[],"mappings":"AAmCA,MAAM,MAAM,mCAAmC,GAC3C,kBAAkB,GAClB,yBAAyB,GACzB,0BAA0B,GAC1B,sBAAsB,GACtB,mBAAmB,CAAC;AAExB,UAAU,yCAAyC;IACjD,cAAc,EAAE,OAAO,MAAM,EAAE,CAAC;IAChC,kBAAkB,EAAE,UAAU,MAAM,EAAE,CAAC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,UAAU,MAAM,EAAE,CAAC;IACrC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,2BAA2B,EAAE,UAAU,MAAM,EAAE,CAAC;IAChD,oBAAoB,EAAE,UAAU,MAAM,EAAE,CAAC;IACzC,6BAA6B,EAAE,UAAU,MAAM,EAAE,CAAC;IAClD,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,MAAM,EAAE,wBAAwB,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yCACf,SAAQ,yCAAyC;IACjD,MAAM,EAAE,uDAAuD,CAAC;IAChE,cAAc,EAAE,CAAC,CAAC;CACnB;AAED,MAAM,WAAW,0CACf,SAAQ,yCAAyC;IACjD,MAAM,EAAE,wDAAwD,CAAC;IACjE,cAAc,EAAE,CAAC,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,mDAAmD;IAClE,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,6BAA6B,EAAE,UAAU,MAAM,EAAE,CAAC;IAClD,kBAAkB,EAAE,MAAM,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,mCAAmC,KAAK,IAAI,CAAC;CAC9D;AAED;;;GAGG;AACH,wBAAgB,8CAA8C,CAC5D,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,mDAAmD,GACzD,0CAA0C,CAmG5C"}
1
+ {"version":3,"file":"coordination-transaction-recovery.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/coordination-transaction-recovery.ts"],"names":[],"mappings":"AAoCA,MAAM,MAAM,mCAAmC,GAC3C,kBAAkB,GAClB,yBAAyB,GACzB,0BAA0B,GAC1B,sBAAsB,GACtB,mBAAmB,CAAC;AAExB,UAAU,yCAAyC;IACjD,cAAc,EAAE,OAAO,MAAM,EAAE,CAAC;IAChC,kBAAkB,EAAE,UAAU,MAAM,EAAE,CAAC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,UAAU,MAAM,EAAE,CAAC;IACrC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,2BAA2B,EAAE,UAAU,MAAM,EAAE,CAAC;IAChD,oBAAoB,EAAE,UAAU,MAAM,EAAE,CAAC;IACzC,6BAA6B,EAAE,UAAU,MAAM,EAAE,CAAC;IAClD,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,MAAM,EAAE,wBAAwB,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yCACf,SAAQ,yCAAyC;IACjD,MAAM,EAAE,uDAAuD,CAAC;IAChE,cAAc,EAAE,CAAC,CAAC;CACnB;AAED,MAAM,WAAW,0CACf,SAAQ,yCAAyC;IACjD,MAAM,EAAE,wDAAwD,CAAC;IACjE,cAAc,EAAE,CAAC,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,mDAAmD;IAClE,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,6BAA6B,EAAE,UAAU,MAAM,EAAE,CAAC;IAClD,kBAAkB,EAAE,MAAM,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,mCAAmC,KAAK,IAAI,CAAC;CAC9D;AAED;;;GAGG;AACH,wBAAgB,8CAA8C,CAC5D,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,mDAAmD,GACzD,0CAA0C,CAmG5C"}
@@ -1,6 +1,7 @@
1
1
  import { randomUUID } from "node:crypto";
2
2
  import { chmodSync, closeSync, existsSync, fsyncSync, linkSync, mkdirSync, openSync, readdirSync, readFileSync, unlinkSync, writeFileSync, } from "node:fs";
3
3
  import { join } from "node:path";
4
+ import { stateDirMode, stateFileMode } from "../../storage/modes.js";
4
5
  import { fsyncParentDirectory } from "../../workflow/durable-record.js";
5
6
  import { authorityRecoveryIntentPathV3, readAuthorityTransactionV3, } from "./authority-outbox.js";
6
7
  import { canonicalJsonV3, sha256V3 } from "./canonical.js";
@@ -182,8 +183,8 @@ function recoveryPaths(coordRoot, transactionId) {
182
183
  }
183
184
  function ensureRecoveryLayout(paths) {
184
185
  for (const path of [paths.root, paths.quarantineRoot]) {
185
- mkdirSync(path, { recursive: true, mode: 0o700 });
186
- chmodSync(path, 0o700);
186
+ mkdirSync(path, { recursive: true, mode: stateDirMode() });
187
+ chmodSync(path, stateDirMode());
187
188
  }
188
189
  }
189
190
  function publishCanonicalExclusive(path, value) {
@@ -199,7 +200,7 @@ function publishSerializedExclusive(path, serialized) {
199
200
  const temporary = `${path}.tmp-${process.pid}-${randomUUID()}`;
200
201
  let fd;
201
202
  try {
202
- fd = openSync(temporary, "wx", 0o600);
203
+ fd = openSync(temporary, "wx", stateFileMode());
203
204
  writeFileSync(fd, serialized, "utf8");
204
205
  fsyncSync(fd);
205
206
  closeSync(fd);
@@ -1 +1 @@
1
- {"version":3,"file":"fingerprint-keys.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/fingerprint-keys.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAO3D,eAAO,MAAM,mCAAmC,EAC9C,wCAAiD,CAAC;AAEpD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,OAAO,MAAM,EAAE,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,6BAA6B,CAAC;IACtC,cAAc,EAAE,CAAC,CAAC;IAClB,eAAe,EAAE,OAAO,MAAM,EAAE,CAAC;IACjC,MAAM,EAAE,qBAAqB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,+BAA+B;IAC9C,qBAAqB,EAAE,MAAM,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,gGAAgG;AAChG,wBAAgB,iCAAiC,CAC/C,SAAS,EAAE,MAAM,EACjB,GAAG,GAAE,MAAM,IAAuB,GACjC,qBAAqB,CAiBvB;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,qBAAqB,CAGlF;AAgBD,+FAA+F;AAC/F,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,+BAA+B,GACvC,qBAAqB,CAmBvB;AAED,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,QAAQ,MAAM,EAAE,EACxB,YAAY,CAAC,EAAE,OAAO,MAAM,EAAE,EAC9B,OAAO,CAAC,EAAE,OAAO,MAAM,EAAE,GACxB,oBAAoB,CAWtB"}
1
+ {"version":3,"file":"fingerprint-keys.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/fingerprint-keys.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAO3D,eAAO,MAAM,mCAAmC,EAC9C,wCAAiD,CAAC;AAEpD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,OAAO,MAAM,EAAE,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,6BAA6B,CAAC;IACtC,cAAc,EAAE,CAAC,CAAC;IAClB,eAAe,EAAE,OAAO,MAAM,EAAE,CAAC;IACjC,MAAM,EAAE,qBAAqB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,+BAA+B;IAC9C,qBAAqB,EAAE,MAAM,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,gGAAgG;AAChG,wBAAgB,iCAAiC,CAC/C,SAAS,EAAE,MAAM,EACjB,GAAG,GAAE,MAAM,IAAuB,GACjC,qBAAqB,CAiBvB;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,qBAAqB,CAGlF;AAgBD,+FAA+F;AAC/F,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,+BAA+B,GACvC,qBAAqB,CAmBvB;AAED,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,QAAQ,MAAM,EAAE,EACxB,YAAY,CAAC,EAAE,OAAO,MAAM,EAAE,EAC9B,OAAO,CAAC,EAAE,OAAO,MAAM,EAAE,GACxB,oBAAoB,CAWtB"}
@@ -2,6 +2,7 @@ import { createHash, randomBytes, randomUUID } from "node:crypto";
2
2
  import { chmodSync, closeSync, existsSync, fsyncSync, mkdirSync, openSync, readFileSync, renameSync, statSync, unlinkSync, writeFileSync, } from "node:fs";
3
3
  import { hostname } from "node:os";
4
4
  import { join, resolve } from "node:path";
5
+ import { stateDirMode, stateFileMode, stateModeTooOpen } from "../../storage/modes.js";
5
6
  import { fsyncParentDirectory } from "../../workflow/durable-record.js";
6
7
  import { acquireNoClobberLease } from "../../workflow/workspaces/leases.js";
7
8
  const KEY_BYTES = 32;
@@ -38,8 +39,8 @@ export function readFingerprintKeyStoreV3(coordRoot) {
38
39
  }
39
40
  function readKeyStoreValue(path) {
40
41
  const mode = statSync(path).mode & 0o777;
41
- if ((mode & 0o077) !== 0) {
42
- throw new Error("fingerprint key store permissions are not owner-only");
42
+ if (stateModeTooOpen(mode)) {
43
+ throw new Error("fingerprint key store is open to other users");
43
44
  }
44
45
  let parsed;
45
46
  try {
@@ -86,8 +87,8 @@ export function fingerprintContextV3(coordRoot, rootId, generationId, epochId) {
86
87
  }
87
88
  function withKeyStoreLock(coordRoot, operation) {
88
89
  const privateDir = join(resolve(coordRoot), ".harnery/private");
89
- mkdirSync(privateDir, { recursive: true, mode: 0o700 });
90
- chmodSync(privateDir, 0o700);
90
+ mkdirSync(privateDir, { recursive: true, mode: stateDirMode() });
91
+ chmodSync(privateDir, stateDirMode());
91
92
  const leasePath = join(privateDir, "fingerprint-key-lease");
92
93
  const authority = createHash("sha256").update(resolve(coordRoot)).digest("hex");
93
94
  let lease;
@@ -134,12 +135,12 @@ function publishKeyStore(path, store, replacing) {
134
135
  const temporary = `${path}.tmp-${process.pid}-${randomUUID()}`;
135
136
  let fd;
136
137
  try {
137
- fd = openSync(temporary, "wx", 0o600);
138
+ fd = openSync(temporary, "wx", stateFileMode());
138
139
  writeFileSync(fd, `${JSON.stringify(store)}\n`, "utf8");
139
140
  fsyncSync(fd);
140
141
  closeSync(fd);
141
142
  fd = undefined;
142
- chmodSync(temporary, 0o600);
143
+ chmodSync(temporary, stateFileMode());
143
144
  if (!replacing && existsSync(path))
144
145
  throw new Error("fingerprint key store already exists");
145
146
  renameSync(temporary, path);
@@ -1,4 +1,4 @@
1
1
  /** Generated by scripts/generate-event-v3-contract.ts. Do not edit. */
2
- export declare const EVENT_V3_SCHEMA_DIGEST: "sha256:bdcee8d7839add0c786740ba9d5cfd0b6573f0ad4974bf53272737468734aa36";
2
+ export declare const EVENT_V3_SCHEMA_DIGEST: "sha256:07137e2cdf5eaed58d55a34e4036c87aa1f375d45c88274d07ad1cc69a6fe6f7";
3
3
  export declare const EVENT_V3_GENERATED_CORE_TYPES: readonly ["ledger.genesis", "ledger.activated", "ledger.schema_advanced", "ledger.comparability_advanced", "session.started", "session.attestation_changed", "session.resumed", "session.ended", "session.termination_observed", "run.started", "run.completed", "turn.started", "turn.completed", "tool.requested", "tool.completed", "command.started", "command.output_observed", "command.completed", "context.observed", "context.compaction_started", "context.compaction_completed", "context.checkpointed", "context.recovery_injected", "agent.delegated", "agent.started", "agent.completed", "artifact.observed", "progress.observed", "coord.task_changed", "coord.lifecycle_changed", "coord.status_observed", "coord.claim_changed", "coord.presence_changed", "coord.message_observed", "coord.identity_attested", "council.state_changed", "decision.state_changed", "lifecycle.recovered", "lifecycle.sweep_observed", "health.observed", "wait.started", "wait.ended", "health.capability_drift"];
4
4
  //# sourceMappingURL=generated.d.ts.map
@@ -1,5 +1,5 @@
1
1
  /** Generated by scripts/generate-event-v3-contract.ts. Do not edit. */
2
- export const EVENT_V3_SCHEMA_DIGEST = "sha256:bdcee8d7839add0c786740ba9d5cfd0b6573f0ad4974bf53272737468734aa36";
2
+ export const EVENT_V3_SCHEMA_DIGEST = "sha256:07137e2cdf5eaed58d55a34e4036c87aa1f375d45c88274d07ad1cc69a6fe6f7";
3
3
  export const EVENT_V3_GENERATED_CORE_TYPES = [
4
4
  "ledger.genesis",
5
5
  "ledger.activated",
@@ -1 +1 @@
1
- {"version":3,"file":"live-feed.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/live-feed.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,2BAA2B,EAAG,kBAA2B,CAAC;AAEvE,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,+BAA+B,CAAC;IACxC,cAAc,EAAE,CAAC,CAAC;IAClB,MAAM,EAAE,QAAQ,MAAM,EAAE,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,kBAAkB,EACzB,GAAG,GAAE,MAAM,IAAuB,GACjC,gBAAgB,CAwClB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,kBAAkB,EACzB,GAAG,GAAE,MAAM,IAAuB,GACjC,gBAAgB,GAAG,SAAS,CAM9B;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,GAAG,GAAE,MAAM,IAAuB,GACjC,gBAAgB,EAAE,CAapB;AAWD,yFAAyF;AACzF,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,GAAG,GAAE,MAAM,IAAuB,GACjC,gBAAgB,EAAE,CAoBpB;AAED,+FAA+F;AAC/F,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,GAAG,GAAE,MAAM,IAAuB,GACjC,0BAA0B,CAwB5B;AAED,wGAAwG;AACxG,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAkCjF"}
1
+ {"version":3,"file":"live-feed.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/live-feed.ts"],"names":[],"mappings":"AA4BA,eAAO,MAAM,2BAA2B,EAAG,kBAA2B,CAAC;AAEvE,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,+BAA+B,CAAC;IACxC,cAAc,EAAE,CAAC,CAAC;IAClB,MAAM,EAAE,QAAQ,MAAM,EAAE,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,kBAAkB,EACzB,GAAG,GAAE,MAAM,IAAuB,GACjC,gBAAgB,CAwClB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,kBAAkB,EACzB,GAAG,GAAE,MAAM,IAAuB,GACjC,gBAAgB,GAAG,SAAS,CAM9B;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,GAAG,GAAE,MAAM,IAAuB,GACjC,gBAAgB,EAAE,CAapB;AAWD,yFAAyF;AACzF,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,GAAG,GAAE,MAAM,IAAuB,GACjC,gBAAgB,EAAE,CAoBpB;AAED,+FAA+F;AAC/F,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,GAAG,GAAE,MAAM,IAAuB,GACjC,0BAA0B,CAwB5B;AAED,wGAAwG;AACxG,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAkCjF"}
@@ -1,6 +1,7 @@
1
1
  import { randomUUID } from "node:crypto";
2
2
  import { chmodSync, closeSync, existsSync, mkdirSync, openSync, readdirSync, readFileSync, rmSync, statSync, writeSync, } from "node:fs";
3
3
  import { basename, join, resolve } from "node:path";
4
+ import { stateDirMode, stateFileMode } from "../../storage/modes.js";
4
5
  const DEFAULT_TTL_MS = 15 * 60 * 1_000;
5
6
  const HARD_MAX_TTL_MS = 60 * 60 * 1_000;
6
7
  const MAX_INTENT_CHARS = 240;
@@ -45,17 +46,17 @@ export function writeLiveDisplayV3(coordRoot, input, now = () => new Date()) {
45
46
  throw new Error("V3 live-display row exceeds its bounded size");
46
47
  }
47
48
  const root = liveRoot(coordRoot);
48
- mkdirSync(root, { recursive: true, mode: 0o700 });
49
- chmodSync(root, 0o700);
49
+ mkdirSync(root, { recursive: true, mode: stateDirMode() });
50
+ chmodSync(root, stateDirMode());
50
51
  const path = join(root, `${input.generation_id}.ndjson`);
51
- const fd = openSync(path, "a", 0o600);
52
+ const fd = openSync(path, "a", stateFileMode());
52
53
  try {
53
54
  writeSync(fd, serialized, undefined, "utf8");
54
55
  }
55
56
  finally {
56
57
  closeSync(fd);
57
58
  }
58
- chmodSync(path, 0o600);
59
+ chmodSync(path, stateFileMode());
59
60
  return row;
60
61
  }
61
62
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"command-recorder.d.ts","sourceRoot":"","sources":["../../../../../src/core/events/v3/producers/command-recorder.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAwB,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAI/E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,KAAK,gBAAgB,EAA2B,MAAM,eAAe,CAAC;AAM/E,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EAExB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,eAAe,EAErB,MAAM,cAAc,CAAC;AA0CtB,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,eAAe,CAAC;IACxB,WAAW,EAAE,oBAAoB,CAAC;IAClC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,WAAW,EAAE,QAAQ,MAAM,EAAE,CAAC;IAC9B,WAAW,EAAE,OAAO,MAAM,EAAE,CAAC;IAC7B,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACpD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACrC;AAED,MAAM,MAAM,2BAA2B,GACnC;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,KAAK,EAAE,wBAAwB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,KAAK,EAAE,wBAAwB,CAAA;CAAE,GACnC;IAAE,KAAK,EAAE,wBAAwB,CAAA;CAAE,GACnC;IAAE,KAAK,EAAE,kBAAkB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,kBAAkB,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC;AAE9F;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,0BAA0B,GAChC,2BAA2B,CAwI7B;AAED,MAAM,WAAW,iCAAiC;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,gBAAgB,CAAC;IACvB,aAAa,EAAE,OAAO,MAAM,EAAE,CAAC;IAC/B,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACrC;AAED,MAAM,WAAW,kCAAkC;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,iCAAiC,GACvC,kCAAkC,CA8HpC"}
1
+ {"version":3,"file":"command-recorder.d.ts","sourceRoot":"","sources":["../../../../../src/core/events/v3/producers/command-recorder.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAwB,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAI/E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,KAAK,gBAAgB,EAA2B,MAAM,eAAe,CAAC;AAM/E,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EAExB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,eAAe,EAErB,MAAM,cAAc,CAAC;AA0CtB,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,eAAe,CAAC;IACxB,WAAW,EAAE,oBAAoB,CAAC;IAClC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,WAAW,EAAE,QAAQ,MAAM,EAAE,CAAC;IAC9B,WAAW,EAAE,OAAO,MAAM,EAAE,CAAC;IAC7B,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACpD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACrC;AAED,MAAM,MAAM,2BAA2B,GACnC;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,KAAK,EAAE,wBAAwB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,KAAK,EAAE,wBAAwB,CAAA;CAAE,GACnC;IAAE,KAAK,EAAE,wBAAwB,CAAA;CAAE,GACnC;IAAE,KAAK,EAAE,kBAAkB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,kBAAkB,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC;AAE9F;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,0BAA0B,GAChC,2BAA2B,CAwI7B;AAED,MAAM,WAAW,iCAAiC;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,gBAAgB,CAAC;IACvB,aAAa,EAAE,OAAO,MAAM,EAAE,CAAC;IAC/B,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACrC;AAED,MAAM,WAAW,kCAAkC;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,iCAAiC,GACvC,kCAAkC,CA8HpC"}
@@ -2,6 +2,7 @@ import { createHash, randomUUID } from "node:crypto";
2
2
  import { chmodSync, closeSync, existsSync, fsyncSync, mkdirSync, openSync, readdirSync, readFileSync, renameSync, statSync, unlinkSync, writeFileSync, } from "node:fs";
3
3
  import { hostname } from "node:os";
4
4
  import { join, resolve } from "node:path";
5
+ import { stateDirMode, stateFileMode, stateModeTooOpen } from "../../../storage/modes.js";
5
6
  import { fsyncParentDirectory } from "../../../workflow/durable-record.js";
6
7
  import { acquireNoClobberLease } from "../../../workflow/workspaces/leases.js";
7
8
  import { selectCommandParentSpan } from "../../span-parent.js";
@@ -352,9 +353,9 @@ function commandStatePath(coordRoot, commandSource) {
352
353
  function acquireCommandLease(coordRoot, statePath) {
353
354
  const directory = join(statePath, "..");
354
355
  const producerRoot = join(resolve(coordRoot), EVENT_V3_LEDGER_RELATIVE_ROOT, "private-producers");
355
- mkdirSync(directory, { recursive: true, mode: 0o700 });
356
- chmodSync(producerRoot, 0o700);
357
- chmodSync(directory, 0o700);
356
+ mkdirSync(directory, { recursive: true, mode: stateDirMode() });
357
+ chmodSync(producerRoot, stateDirMode());
358
+ chmodSync(directory, stateDirMode());
358
359
  return acquireNoClobberLease({
359
360
  path: `${statePath}.lease`,
360
361
  scope: "event-v3-command-producer",
@@ -371,13 +372,13 @@ function publishCommandState(path, state) {
371
372
  const temporary = `${path}.tmp-${process.pid}-${randomUUID()}`;
372
373
  let fd;
373
374
  try {
374
- fd = openSync(temporary, "wx", 0o600);
375
+ fd = openSync(temporary, "wx", stateFileMode());
375
376
  writeFileSync(fd, `${JSON.stringify(state)}\n`, "utf8");
376
377
  fsyncSync(fd);
377
378
  closeSync(fd);
378
379
  fd = undefined;
379
380
  renameSync(temporary, path);
380
- chmodSync(path, 0o600);
381
+ chmodSync(path, stateFileMode());
381
382
  fsyncParentDirectory(path);
382
383
  }
383
384
  finally {
@@ -388,8 +389,8 @@ function publishCommandState(path, state) {
388
389
  }
389
390
  }
390
391
  function readCommandState(path) {
391
- if ((statSync(path).mode & 0o077) !== 0)
392
- throw new Error("V3 command state is not owner-only");
392
+ if (stateModeTooOpen(statSync(path).mode))
393
+ throw new Error("V3 command state is open to other users");
393
394
  let parsed;
394
395
  try {
395
396
  parsed = JSON.parse(readFileSync(path, "utf8"));
@@ -1 +1 @@
1
- {"version":3,"file":"coordination-recorder.d.ts","sourceRoot":"","sources":["../../../../../src/core/events/v3/producers/coordination-recorder.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAwB,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAK5B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,KAAK,gBAAgB,EAA2B,MAAM,eAAe,CAAC;AAK/E,OAAO,EACL,KAAK,6BAA6B,EAClC,KAAK,iCAAiC,EAEvC,MAAM,mBAAmB,CAAC;AAyC3B,MAAM,WAAW,wCAAwC;IACvD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,sBAAsB,CAAC;CACrC;AAED,MAAM,WAAW,kCAAkC,CACjD,CAAC,SAAS,6BAA6B,GAAG,6BAA6B;IAEvE,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,CAAC,CAAC;IACV,WAAW,EAAE,iCAAiC,CAAC,CAAC,CAAC,CAAC;IAClD,OAAO,EAAE,gBAAgB,CAAC;IAC1B,uBAAuB,EAAE,MAAM,CAAC;IAChC,iBAAiB,EAAE,QAAQ,MAAM,EAAE,CAAC;IACpC,mBAAmB,EAAE,QAAQ,MAAM,EAAE,CAAC;IACtC,WAAW,EAAE,OAAO,MAAM,EAAE,CAAC;IAC7B,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACpD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,2BAA2B,EAAE,UAAU,MAAM,EAAE,CAAC;IAChD,oBAAoB,EAAE,UAAU,MAAM,EAAE,CAAC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,qBAAqB,CAAC;CACnC;AAED,MAAM,MAAM,mCAAmC,GAC3C;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,KAAK,EAAE,wBAAwB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,KAAK,EAAE,kBAAkB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GACvE;IAAE,KAAK,EAAE,qBAAqB,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GAC/E;IACE,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,kBAAkB,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEN;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,CAAC,SAAS,6BAA6B,EACnF,KAAK,EAAE,kCAAkC,CAAC,CAAC,CAAC,GAC3C,mCAAmC,CAwNrC;AAED,uFAAuF;AACvF,wBAAgB,oCAAoC,CAClD,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,GACpB,wCAAwC,GAAG,IAAI,CAgBjD;AAED,mGAAmG;AACnG,wBAAgB,4CAA4C,CAAC,CAAC,EAC5D,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,EACzB,WAAW,EAAE,sBAAsB,EACnC,mBAAmB,EAAE,OAAO,EAC5B,SAAS,EAAE,CAAC,OAAO,EAAE;IAAE,YAAY,EAAE,MAAM,SAAS,GAAG,iBAAiB,CAAA;CAAE,KAAK,CAAC,GAC/E,CAAC,CA+BH"}
1
+ {"version":3,"file":"coordination-recorder.d.ts","sourceRoot":"","sources":["../../../../../src/core/events/v3/producers/coordination-recorder.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAwB,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAK5B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,KAAK,gBAAgB,EAA2B,MAAM,eAAe,CAAC;AAK/E,OAAO,EACL,KAAK,6BAA6B,EAClC,KAAK,iCAAiC,EAEvC,MAAM,mBAAmB,CAAC;AAyC3B,MAAM,WAAW,wCAAwC;IACvD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,sBAAsB,CAAC;CACrC;AAED,MAAM,WAAW,kCAAkC,CACjD,CAAC,SAAS,6BAA6B,GAAG,6BAA6B;IAEvE,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,CAAC,CAAC;IACV,WAAW,EAAE,iCAAiC,CAAC,CAAC,CAAC,CAAC;IAClD,OAAO,EAAE,gBAAgB,CAAC;IAC1B,uBAAuB,EAAE,MAAM,CAAC;IAChC,iBAAiB,EAAE,QAAQ,MAAM,EAAE,CAAC;IACpC,mBAAmB,EAAE,QAAQ,MAAM,EAAE,CAAC;IACtC,WAAW,EAAE,OAAO,MAAM,EAAE,CAAC;IAC7B,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACpD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,2BAA2B,EAAE,UAAU,MAAM,EAAE,CAAC;IAChD,oBAAoB,EAAE,UAAU,MAAM,EAAE,CAAC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,qBAAqB,CAAC;CACnC;AAED,MAAM,MAAM,mCAAmC,GAC3C;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,KAAK,EAAE,wBAAwB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,KAAK,EAAE,kBAAkB,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GACvE;IAAE,KAAK,EAAE,qBAAqB,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GAC/E;IACE,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,kBAAkB,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEN;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,CAAC,SAAS,6BAA6B,EACnF,KAAK,EAAE,kCAAkC,CAAC,CAAC,CAAC,GAC3C,mCAAmC,CAwNrC;AAED,uFAAuF;AACvF,wBAAgB,oCAAoC,CAClD,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,GACpB,wCAAwC,GAAG,IAAI,CAgBjD;AAED,mGAAmG;AACnG,wBAAgB,4CAA4C,CAAC,CAAC,EAC5D,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,EACzB,WAAW,EAAE,sBAAsB,EACnC,mBAAmB,EAAE,OAAO,EAC5B,SAAS,EAAE,CAAC,OAAO,EAAE;IAAE,YAAY,EAAE,MAAM,SAAS,GAAG,iBAAiB,CAAA;CAAE,KAAK,CAAC,GAC/E,CAAC,CA+BH"}
@@ -2,6 +2,7 @@ import { createHash, randomUUID } from "node:crypto";
2
2
  import { chmodSync, closeSync, existsSync, fsyncSync, mkdirSync, openSync, readdirSync, readFileSync, renameSync, statSync, unlinkSync, writeFileSync, } from "node:fs";
3
3
  import { hostname } from "node:os";
4
4
  import { basename, join, resolve } from "node:path";
5
+ import { stateDirMode, stateFileMode, stateModeTooOpen } from "../../../storage/modes.js";
5
6
  import { fsyncParentDirectory } from "../../../workflow/durable-record.js";
6
7
  import { acquireNoClobberLease } from "../../../workflow/workspaces/leases.js";
7
8
  import { EVENT_ADAPTER_IDS_V3 } from "../adapter-id.js";
@@ -312,9 +313,9 @@ function coordinationProducerDirectory(coordRoot) {
312
313
  function acquireCoordinationLease(coordRoot, statePath) {
313
314
  const directory = join(statePath, "..");
314
315
  const producerRoot = join(resolve(coordRoot), EVENT_V3_LEDGER_RELATIVE_ROOT, "private-producers");
315
- mkdirSync(directory, { recursive: true, mode: 0o700 });
316
- chmodSync(producerRoot, 0o700);
317
- chmodSync(directory, 0o700);
316
+ mkdirSync(directory, { recursive: true, mode: stateDirMode() });
317
+ chmodSync(producerRoot, stateDirMode());
318
+ chmodSync(directory, stateDirMode());
318
319
  return acquireNoClobberLease({
319
320
  path: `${statePath}.lease`,
320
321
  scope: "event-v3-coordination-producer",
@@ -331,13 +332,13 @@ function publishCoordinationState(path, state) {
331
332
  const temporary = `${path}.tmp-${process.pid}-${randomUUID()}`;
332
333
  let fd;
333
334
  try {
334
- fd = openSync(temporary, "wx", 0o600);
335
+ fd = openSync(temporary, "wx", stateFileMode());
335
336
  writeFileSync(fd, `${JSON.stringify(state)}\n`, "utf8");
336
337
  fsyncSync(fd);
337
338
  closeSync(fd);
338
339
  fd = undefined;
339
340
  renameSync(temporary, path);
340
- chmodSync(path, 0o600);
341
+ chmodSync(path, stateFileMode());
341
342
  fsyncParentDirectory(path);
342
343
  }
343
344
  finally {
@@ -348,8 +349,8 @@ function publishCoordinationState(path, state) {
348
349
  }
349
350
  }
350
351
  function readCoordinationState(path) {
351
- if ((statSync(path).mode & 0o077) !== 0) {
352
- throw new Error("V3 coordination state is not owner-only");
352
+ if (stateModeTooOpen(statSync(path).mode)) {
353
+ throw new Error("V3 coordination state is open to other users");
353
354
  }
354
355
  let parsed;
355
356
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostic-summaries.d.ts","sourceRoot":"","sources":["../../../../../src/core/events/v3/producers/diagnostic-summaries.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diagnostic-summaries.d.ts","sourceRoot":"","sources":["../../../../../src/core/events/v3/producers/diagnostic-summaries.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { appendFileSync, chmodSync, closeSync, existsSync, fsyncSync, lstatSync,
3
3
  import { hostname } from "node:os";
4
4
  import { join, resolve } from "node:path";
5
5
  import { coordEnv } from "../../../../lib/env.js";
6
+ import { stateDirMode, stateFileMode } from "../../../storage/modes.js";
6
7
  import { fsyncParentDirectory } from "../../../workflow/durable-record.js";
7
8
  import { acquireNoClobberLease } from "../../../workflow/workspaces/leases.js";
8
9
  import { EVENT_V3_LEDGER_RELATIVE_ROOT } from "../writer.js";
@@ -96,8 +97,8 @@ function summaryPath(root, category, window, digest) {
96
97
  return join(root, `${category}-${window.replaceAll("-", "")}-${digest}.json`);
97
98
  }
98
99
  function ensureOwnerOnlyDirectory(path) {
99
- mkdirSync(path, { recursive: true, mode: 0o700 });
100
- chmodSync(path, 0o700);
100
+ mkdirSync(path, { recursive: true, mode: stateDirMode() });
101
+ chmodSync(path, stateDirMode());
101
102
  }
102
103
  function publishOwnerOnlyJson(path, value, durable) {
103
104
  const contents = `${JSON.stringify(value)}\n`;
@@ -107,7 +108,7 @@ function publishOwnerOnlyJson(path, value, durable) {
107
108
  const temporary = `${path}.tmp-${process.pid}-${randomUUID()}`;
108
109
  let fd;
109
110
  try {
110
- fd = openSync(temporary, "wx", 0o600);
111
+ fd = openSync(temporary, "wx", stateFileMode());
111
112
  writeFileSync(fd, contents, "utf8");
112
113
  if (durable)
113
114
  fsyncSync(fd);
@@ -314,7 +315,7 @@ function recordFailOpen(root, stage, nowMs) {
314
315
  // Missing log starts fresh.
315
316
  }
316
317
  const line = JSON.stringify({ at: new Date(nowMs).toISOString(), stage, pid: process.pid });
317
- appendFileSync(path, `${line}\n`, { mode: 0o600 });
318
+ appendFileSync(path, `${line}\n`, { mode: stateFileMode() });
318
319
  }
319
320
  catch {
320
321
  // The emergency log may undercount when storage is unavailable; it is a
@@ -57,6 +57,7 @@ export interface TurnRitualEvidenceV3 {
57
57
  status_box_present_strict: boolean;
58
58
  session_name_required: boolean;
59
59
  session_name_present: boolean;
60
+ session_name_unavailable_reason?: string;
60
61
  }
61
62
  /** Normalize one already-parsed hook payload directly into V3Base without retaining its raw fields. */
62
63
  export declare function normalizeHookEventV3Base(signal: HookSignalV3Base, payload: ParsedPayload, context: HookProducerContextV3Base): EventV3Base | null;
@@ -1 +1 @@
1
- {"version":3,"file":"hook-base.d.ts","sourceRoot":"","sources":["../../../../../src/core/events/v3/producers/hook-base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hook-base.d.ts","sourceRoot":"","sources":["../../../../../src/core/events/v3/producers/hook-base.ts"],"names":[],"mappings":"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"}
@@ -332,10 +332,16 @@ function turnRitualObservation(adapter, evidence) {
332
332
  return {
333
333
  status_box_present: observed(evidence.status_box_present),
334
334
  status_box_present_strict: observed(evidence.status_box_present_strict),
335
- session_name: observed({
336
- required: evidence.session_name_required,
337
- present: evidence.session_name_present,
338
- }),
335
+ session_name: evidence.session_name_unavailable_reason
336
+ ? {
337
+ state: "expected_but_missing",
338
+ capability: "assistant_reply_text",
339
+ reason: evidence.session_name_unavailable_reason,
340
+ }
341
+ : observed({
342
+ required: evidence.session_name_required,
343
+ present: evidence.session_name_present,
344
+ }),
339
345
  };
340
346
  }
341
347
  function inputContextMeasurement(payload, phase) {
@@ -1,9 +1,11 @@
1
1
  import type { ParsedPayload } from "../../../hooks/adapter/parse.js";
2
2
  import type { EventV3Base } from "../base-contract.js";
3
3
  import type { EventOfTypeV3, EventTypeV3, SpanSummaryV3 } from "../contract.js";
4
+ import type { LineChanges } from "../tool-line-changes.js";
4
5
  import { type HarnessTimingAccumulatorV3, type TurnTelemetryV3 } from "../turn-telemetry.js";
5
6
  import { type HookProducerContextV3Base, type HookSignalV3Base } from "./hook-base.js";
6
7
  export interface HookProducerContextV3 extends HookProducerContextV3Base {
8
+ tool_line_changes?: LineChanges;
7
9
  /** Required for terminal events; captured when the corresponding span opens. */
8
10
  terminal_span?: SpanSummaryV3;
9
11
  /** Required by V3 delegation starts so the child span is anchored in its parent tree. */
@@ -1 +1 @@
1
- {"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../../../../src/core/events/v3/producers/hook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGhF,OAAO,EAGL,KAAK,0BAA0B,EAE/B,KAAK,eAAe,EACrB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,gBAAgB,EAEtB,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,qBAAsB,SAAQ,yBAAyB;IACtE,gFAAgF;IAChF,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,yFAAyF;IACzF,cAAc,CAAC,EAAE,QAAQ,MAAM,EAAE,CAAC;IAClC,yFAAyF;IACzF,cAAc,CAAC,EAAE,0BAA0B,CAAC;IAC5C,4DAA4D;IAC5D,cAAc,CAAC,EAAE,eAAe,CAAC;CAClC;AAED,MAAM,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAU5C,MAAM,MAAM,WAAW,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;AAErD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,qBAAqB,GAC7B,WAAW,GAAG,IAAI,CAIpB;AAED,oFAAoF;AACpF,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,qBAAqB,GAC7B,WAAW,GAAG,IAAI,CAuBpB"}
1
+ {"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../../../../src/core/events/v3/producers/hook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGhF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAGL,KAAK,0BAA0B,EAE/B,KAAK,eAAe,EACrB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,gBAAgB,EAEtB,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,qBAAsB,SAAQ,yBAAyB;IACtE,iBAAiB,CAAC,EAAE,WAAW,CAAC;IAChC,gFAAgF;IAChF,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,yFAAyF;IACzF,cAAc,CAAC,EAAE,QAAQ,MAAM,EAAE,CAAC;IAClC,yFAAyF;IACzF,cAAc,CAAC,EAAE,0BAA0B,CAAC;IAC5C,4DAA4D;IAC5D,cAAc,CAAC,EAAE,eAAe,CAAC;CAClC;AAED,MAAM,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAU5C,MAAM,MAAM,WAAW,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;AAErD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,qBAAqB,GAC7B,WAAW,GAAG,IAAI,CAIpB;AAED,oFAAoF;AACpF,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,qBAAqB,GAC7B,WAAW,GAAG,IAAI,CAuBpB"}
@@ -65,7 +65,22 @@ function terminalPayload(eventType, basePayload, source, context) {
65
65
  : sourceSpan.duration_ms;
66
66
  const span = duration === sourceSpan.duration_ms ? sourceSpan : { ...sourceSpan, duration_ms: duration };
67
67
  if (eventType === "tool.completed") {
68
- return { ...basePayload, duration_ms: duration, span };
68
+ const counts = context.tool_line_changes;
69
+ const response = source.tool_response;
70
+ return {
71
+ ...basePayload,
72
+ duration_ms: duration,
73
+ span,
74
+ line_changes: counts &&
75
+ basePayload.outcome === "succeeded" &&
76
+ response?.isError !== true
77
+ ? { state: "observed", value: counts, attestation: "derived", confidence: "high" }
78
+ : {
79
+ state: "expected_but_missing",
80
+ reason: "tool_line_changes_unmeasured",
81
+ capability: "tool_line_changes",
82
+ },
83
+ };
69
84
  }
70
85
  if (eventType !== "turn.completed")
71
86
  return { ...basePayload, span };
@@ -1 +1 @@
1
- {"version":3,"file":"intake.d.ts","sourceRoot":"","sources":["../../../../../src/core/events/v3/producers/intake.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAErE,OAAO,EAAwB,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAMtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE3D;;;;;;;;;;;GAWG;AAEH,QAAA,MAAM,aAAa,EAAG,wBAAiC,CAAC;AACxD,QAAA,MAAM,cAAc,EAAG,CAAU,CAAC;AA6ClC,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,OAAO,aAAa,CAAC;IAC7B,cAAc,EAAE,OAAO,cAAc,CAAC;IACtC,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,WAAW,EAAE,QAAQ,MAAM,EAAE,CAAC;IAC9B,WAAW,EAAE,OAAO,MAAM,EAAE,CAAC;IAC7B,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACpD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC,eAAe,CAAC,EAAE;QAChB,aAAa,EAAE,OAAO,MAAM,EAAE,CAAC;QAC/B,oBAAoB,EAAE,OAAO,MAAM,EAAE,CAAC;QACtC,aAAa,EAAE,OAAO,MAAM,EAAE,CAAC;QAC/B,kBAAkB,EAAE,OAAO,MAAM,EAAE,CAAC;KACrC,CAAC;CACH;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,YAAY,EAAE,OAAO,MAAM,EAAE,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,MAAM,EAAE,kBAAkB,GAAG,SAAS,CAAC;CACxC;AAUD,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,gBAAgB,EACzB,WAAW,EAAE,OAAO,MAAM,EAAE,GAC3B,MAAM,CAER;AA+BD,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,OAAO,MAAM,EAAE,EAC5B,MAAM,EAAE,kBAAkB,GACzB,MAAM,CAOR;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAsB7E;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAc9E;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAUvD;AAkED;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,GAAG,SAAS,CA8BpB"}
1
+ {"version":3,"file":"intake.d.ts","sourceRoot":"","sources":["../../../../../src/core/events/v3/producers/intake.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAGrE,OAAO,EAAwB,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAMtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE3D;;;;;;;;;;;GAWG;AAEH,QAAA,MAAM,aAAa,EAAG,wBAAiC,CAAC;AACxD,QAAA,MAAM,cAAc,EAAG,CAAU,CAAC;AA6ClC,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,OAAO,aAAa,CAAC;IAC7B,cAAc,EAAE,OAAO,cAAc,CAAC;IACtC,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,WAAW,EAAE,QAAQ,MAAM,EAAE,CAAC;IAC9B,WAAW,EAAE,OAAO,MAAM,EAAE,CAAC;IAC7B,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACpD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC,eAAe,CAAC,EAAE;QAChB,aAAa,EAAE,OAAO,MAAM,EAAE,CAAC;QAC/B,oBAAoB,EAAE,OAAO,MAAM,EAAE,CAAC;QACtC,aAAa,EAAE,OAAO,MAAM,EAAE,CAAC;QAC/B,kBAAkB,EAAE,OAAO,MAAM,EAAE,CAAC;KACrC,CAAC;CACH;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,YAAY,EAAE,OAAO,MAAM,EAAE,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,MAAM,EAAE,kBAAkB,GAAG,SAAS,CAAC;CACxC;AAUD,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,gBAAgB,EACzB,WAAW,EAAE,OAAO,MAAM,EAAE,GAC3B,MAAM,CAER;AA+BD,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,OAAO,MAAM,EAAE,EAC5B,MAAM,EAAE,kBAAkB,GACzB,MAAM,CAOR;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAsB7E;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAc9E;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAUvD;AA6ED;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,GAAG,SAAS,CA8BpB"}