harnery 0.40.0 → 0.42.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 (595) hide show
  1. package/README.md +1 -1
  2. package/dist/commander.js +4 -0
  3. package/dist/commands/agents.d.ts.map +1 -1
  4. package/dist/commands/agents.js +34 -20
  5. package/dist/commands/artifacts.d.ts.map +1 -1
  6. package/dist/commands/artifacts.js +113 -12
  7. package/dist/commands/browse-ai.d.ts.map +1 -1
  8. package/dist/commands/browse-ai.js +4 -0
  9. package/dist/commands/browse.d.ts +164 -0
  10. package/dist/commands/browse.d.ts.map +1 -1
  11. package/dist/commands/browse.js +388 -45
  12. package/dist/commands/checkpoint.js +8 -12
  13. package/dist/commands/claude-desktop.d.ts.map +1 -1
  14. package/dist/commands/claude-desktop.js +52 -0
  15. package/dist/commands/deinit.d.ts +1 -1
  16. package/dist/commands/deinit.d.ts.map +1 -1
  17. package/dist/commands/deinit.js +8 -4
  18. package/dist/commands/disk.d.ts +6 -0
  19. package/dist/commands/disk.d.ts.map +1 -0
  20. package/dist/commands/disk.js +80 -0
  21. package/dist/commands/docs.d.ts.map +1 -1
  22. package/dist/commands/docs.js +2 -0
  23. package/dist/commands/doctor.d.ts +8 -0
  24. package/dist/commands/doctor.d.ts.map +1 -1
  25. package/dist/commands/doctor.js +58 -3
  26. package/dist/commands/fetch.d.ts.map +1 -1
  27. package/dist/commands/fetch.js +10 -0
  28. package/dist/commands/files.d.ts +16 -0
  29. package/dist/commands/files.d.ts.map +1 -1
  30. package/dist/commands/files.js +54 -2
  31. package/dist/commands/init.d.ts +21 -5
  32. package/dist/commands/init.d.ts.map +1 -1
  33. package/dist/commands/init.js +271 -109
  34. package/dist/commands/instructions.js +5 -4
  35. package/dist/commands/ledger-v3.d.ts.map +1 -1
  36. package/dist/commands/ledger-v3.js +2 -1
  37. package/dist/commands/rm.d.ts +4 -0
  38. package/dist/commands/rm.d.ts.map +1 -0
  39. package/dist/commands/rm.js +87 -0
  40. package/dist/commands/servers.d.ts +7 -0
  41. package/dist/commands/servers.d.ts.map +1 -0
  42. package/dist/commands/servers.js +394 -0
  43. package/dist/commands/tunnel.d.ts.map +1 -1
  44. package/dist/commands/tunnel.js +82 -2
  45. package/dist/commands/webview.d.ts +4 -0
  46. package/dist/commands/webview.d.ts.map +1 -0
  47. package/dist/commands/webview.js +94 -0
  48. package/dist/core/adapter.d.ts +50 -1
  49. package/dist/core/adapter.d.ts.map +1 -1
  50. package/dist/core/adapter.js +59 -1
  51. package/dist/core/adapters/attestation.d.ts.map +1 -1
  52. package/dist/core/adapters/attestation.js +3 -2
  53. package/dist/core/adapters/profiles.d.ts +29 -3
  54. package/dist/core/adapters/profiles.d.ts.map +1 -1
  55. package/dist/core/adapters/profiles.js +53 -1
  56. package/dist/core/adapters/registry.d.ts.map +1 -1
  57. package/dist/core/adapters/registry.js +33 -0
  58. package/dist/core/adapters/types.d.ts +9 -0
  59. package/dist/core/adapters/types.d.ts.map +1 -1
  60. package/dist/core/agents/canonical-emit.d.ts +1 -1
  61. package/dist/core/agents/canonical-emit.d.ts.map +1 -1
  62. package/dist/core/agents/canonical-emit.js +2 -7
  63. package/dist/core/agents/cli.js +25 -16
  64. package/dist/core/agents/coord-client.d.ts.map +1 -1
  65. package/dist/core/agents/coord-client.js +7 -2
  66. package/dist/core/agents/render/session-context.d.ts.map +1 -1
  67. package/dist/core/agents/render/session-context.js +2 -0
  68. package/dist/core/agents/rules/claim-conflict.d.ts.map +1 -1
  69. package/dist/core/agents/rules/claim-conflict.js +3 -9
  70. package/dist/core/agents/rules/commit-conflict.d.ts.map +1 -1
  71. package/dist/core/agents/rules/commit-conflict.js +2 -8
  72. package/dist/core/agents/rules/stop-hook.d.ts +2 -0
  73. package/dist/core/agents/rules/stop-hook.d.ts.map +1 -1
  74. package/dist/core/agents/rules/stop-hook.js +1 -1
  75. package/dist/core/agents/session-events.d.ts +6 -2
  76. package/dist/core/agents/session-events.d.ts.map +1 -1
  77. package/dist/core/agents/session-events.js +105 -26
  78. package/dist/core/agents/session-finalization-state-v3.d.ts.map +1 -1
  79. package/dist/core/agents/session-finalization-state-v3.js +2 -1
  80. package/dist/core/agents/session-finalizer-v3.d.ts.map +1 -1
  81. package/dist/core/agents/session-finalizer-v3.js +5 -4
  82. package/dist/core/agents/session-name-display.d.ts +28 -0
  83. package/dist/core/agents/session-name-display.d.ts.map +1 -1
  84. package/dist/core/agents/session-name-display.js +43 -0
  85. package/dist/core/agents/state/heartbeat-reader.d.ts +7 -0
  86. package/dist/core/agents/state/heartbeat-reader.d.ts.map +1 -1
  87. package/dist/core/agents/state/heartbeat-writer.d.ts +10 -0
  88. package/dist/core/agents/state/heartbeat-writer.d.ts.map +1 -1
  89. package/dist/core/agents/state/heartbeat-writer.js +21 -2
  90. package/dist/core/agents/state/live-coordination-view.d.ts +20 -0
  91. package/dist/core/agents/state/live-coordination-view.d.ts.map +1 -1
  92. package/dist/core/agents/state/live-coordination-view.js +61 -0
  93. package/dist/core/agents/state/live-coordination-writer.js +3 -0
  94. package/dist/core/agents/state/stale-sweep.d.ts.map +1 -1
  95. package/dist/core/agents/state/stale-sweep.js +2 -10
  96. package/dist/core/agents/turn-changes.d.ts +17 -0
  97. package/dist/core/agents/turn-changes.d.ts.map +1 -0
  98. package/dist/core/agents/turn-changes.js +76 -0
  99. package/dist/core/artifacts/delivery-card.d.ts.map +1 -1
  100. package/dist/core/artifacts/delivery-card.js +11 -3
  101. package/dist/core/artifacts/index.d.ts +140 -4
  102. package/dist/core/artifacts/index.d.ts.map +1 -1
  103. package/dist/core/artifacts/index.js +526 -52
  104. package/dist/core/config.d.ts +73 -11
  105. package/dist/core/config.d.ts.map +1 -1
  106. package/dist/core/config.js +142 -3
  107. package/dist/core/context/index.d.ts.map +1 -1
  108. package/dist/core/context/index.js +2 -1
  109. package/dist/core/conversations/archive.d.ts.map +1 -1
  110. package/dist/core/conversations/archive.js +4 -3
  111. package/dist/core/diagnostics/bundle.d.ts.map +1 -1
  112. package/dist/core/diagnostics/bundle.js +5 -4
  113. package/dist/core/events/legacy-storage/canary.d.ts.map +1 -1
  114. package/dist/core/events/legacy-storage/canary.js +5 -4
  115. package/dist/core/events/legacy-storage/compression.d.ts.map +1 -1
  116. package/dist/core/events/legacy-storage/compression.js +2 -1
  117. package/dist/core/events/v3/adapter-id.d.ts +10 -2
  118. package/dist/core/events/v3/adapter-id.d.ts.map +1 -1
  119. package/dist/core/events/v3/adapter-id.js +16 -0
  120. package/dist/core/events/v3/authority-outbox.d.ts.map +1 -1
  121. package/dist/core/events/v3/authority-outbox.js +2 -1
  122. package/dist/core/events/v3/bootstrap.d.ts.map +1 -1
  123. package/dist/core/events/v3/bootstrap.js +5 -4
  124. package/dist/core/events/v3/capabilities.d.ts.map +1 -1
  125. package/dist/core/events/v3/capabilities.js +17 -0
  126. package/dist/core/events/v3/contract.d.ts +5 -0
  127. package/dist/core/events/v3/contract.d.ts.map +1 -1
  128. package/dist/core/events/v3/contract.js +7 -1
  129. package/dist/core/events/v3/control-witness.d.ts.map +1 -1
  130. package/dist/core/events/v3/control-witness.js +3 -2
  131. package/dist/core/events/v3/coordination-transaction-recovery.d.ts.map +1 -1
  132. package/dist/core/events/v3/coordination-transaction-recovery.js +4 -3
  133. package/dist/core/events/v3/fingerprint-keys.d.ts.map +1 -1
  134. package/dist/core/events/v3/fingerprint-keys.js +7 -6
  135. package/dist/core/events/v3/generated.d.ts +1 -1
  136. package/dist/core/events/v3/generated.js +1 -1
  137. package/dist/core/events/v3/live-feed.d.ts.map +1 -1
  138. package/dist/core/events/v3/live-feed.js +5 -4
  139. package/dist/core/events/v3/producers/command-recorder.d.ts.map +1 -1
  140. package/dist/core/events/v3/producers/command-recorder.js +8 -7
  141. package/dist/core/events/v3/producers/coordination-recorder.d.ts.map +1 -1
  142. package/dist/core/events/v3/producers/coordination-recorder.js +8 -7
  143. package/dist/core/events/v3/producers/diagnostic-summaries.d.ts.map +1 -1
  144. package/dist/core/events/v3/producers/diagnostic-summaries.js +5 -4
  145. package/dist/core/events/v3/producers/hook-base.d.ts +1 -0
  146. package/dist/core/events/v3/producers/hook-base.d.ts.map +1 -1
  147. package/dist/core/events/v3/producers/hook-base.js +10 -4
  148. package/dist/core/events/v3/producers/hook.d.ts +2 -0
  149. package/dist/core/events/v3/producers/hook.d.ts.map +1 -1
  150. package/dist/core/events/v3/producers/hook.js +16 -1
  151. package/dist/core/events/v3/producers/intake.d.ts.map +1 -1
  152. package/dist/core/events/v3/producers/intake.js +16 -6
  153. package/dist/core/events/v3/producers/recorder.d.ts +2 -4
  154. package/dist/core/events/v3/producers/recorder.d.ts.map +1 -1
  155. package/dist/core/events/v3/producers/recorder.js +125 -101
  156. package/dist/core/events/v3/projection.js +9 -1
  157. package/dist/core/events/v3/recovery.d.ts.map +1 -1
  158. package/dist/core/events/v3/recovery.js +4 -3
  159. package/dist/core/events/v3/support-storage/inventory.d.ts.map +1 -1
  160. package/dist/core/events/v3/support-storage/inventory.js +2 -1
  161. package/dist/core/events/v3/support-storage/maintenance.d.ts.map +1 -1
  162. package/dist/core/events/v3/support-storage/maintenance.js +4 -3
  163. package/dist/core/events/v3/support-storage/pack-reader.d.ts.map +1 -1
  164. package/dist/core/events/v3/support-storage/pack-reader.js +4 -3
  165. package/dist/core/events/v3/support-storage/pack-writer.d.ts.map +1 -1
  166. package/dist/core/events/v3/support-storage/pack-writer.js +6 -5
  167. package/dist/core/events/v3/tool-line-changes.d.ts +8 -0
  168. package/dist/core/events/v3/tool-line-changes.d.ts.map +1 -0
  169. package/dist/core/events/v3/tool-line-changes.js +135 -0
  170. package/dist/core/events/v3/writer.d.ts.map +1 -1
  171. package/dist/core/events/v3/writer.js +8 -7
  172. package/dist/core/governor/planning.d.ts.map +1 -1
  173. package/dist/core/governor/planning.js +6 -5
  174. package/dist/core/governor/service.d.ts.map +1 -1
  175. package/dist/core/governor/service.js +12 -11
  176. package/dist/core/governor/state.d.ts.map +1 -1
  177. package/dist/core/governor/state.js +7 -6
  178. package/dist/core/guard/evaluator.js +1 -0
  179. package/dist/core/guard/storage.d.ts.map +1 -1
  180. package/dist/core/guard/storage.js +3 -2
  181. package/dist/core/hooks/adapter/behaviors/claude-code.d.ts +4 -0
  182. package/dist/core/hooks/adapter/behaviors/claude-code.d.ts.map +1 -0
  183. package/dist/core/hooks/adapter/behaviors/claude-code.js +31 -0
  184. package/dist/core/hooks/adapter/behaviors/codex.d.ts +15 -0
  185. package/dist/core/hooks/adapter/behaviors/codex.d.ts.map +1 -0
  186. package/dist/core/hooks/adapter/behaviors/codex.js +82 -0
  187. package/dist/core/hooks/adapter/behaviors/cursor.d.ts +7 -0
  188. package/dist/core/hooks/adapter/behaviors/cursor.d.ts.map +1 -0
  189. package/dist/core/hooks/adapter/behaviors/cursor.js +35 -0
  190. package/dist/core/hooks/adapter/behaviors/index.d.ts +11 -0
  191. package/dist/core/hooks/adapter/behaviors/index.d.ts.map +1 -0
  192. package/dist/core/hooks/adapter/behaviors/index.js +20 -0
  193. package/dist/core/hooks/adapter/behaviors/openclaw.d.ts +7 -0
  194. package/dist/core/hooks/adapter/behaviors/openclaw.d.ts.map +1 -0
  195. package/dist/core/hooks/adapter/behaviors/openclaw.js +34 -0
  196. package/dist/core/hooks/adapter/behaviors/opencode.d.ts +7 -0
  197. package/dist/core/hooks/adapter/behaviors/opencode.d.ts.map +1 -0
  198. package/dist/core/hooks/adapter/behaviors/opencode.js +34 -0
  199. package/dist/core/hooks/adapter/behaviors/types.d.ts +89 -0
  200. package/dist/core/hooks/adapter/behaviors/types.d.ts.map +1 -0
  201. package/dist/core/hooks/adapter/behaviors/types.js +1 -0
  202. package/dist/core/hooks/adapter/detect.d.ts +1 -1
  203. package/dist/core/hooks/adapter/detect.d.ts.map +1 -1
  204. package/dist/core/hooks/adapter/detect.js +2 -3
  205. package/dist/core/hooks/adapter/events.d.ts +46 -1
  206. package/dist/core/hooks/adapter/events.d.ts.map +1 -1
  207. package/dist/core/hooks/adapter/events.js +36 -0
  208. package/dist/core/hooks/adapter/opencode-plugin.d.ts +60 -0
  209. package/dist/core/hooks/adapter/opencode-plugin.d.ts.map +1 -0
  210. package/dist/core/hooks/adapter/opencode-plugin.js +129 -0
  211. package/dist/core/hooks/adapter/output.d.ts +7 -0
  212. package/dist/core/hooks/adapter/output.d.ts.map +1 -1
  213. package/dist/core/hooks/adapter/output.js +8 -1
  214. package/dist/core/hooks/adapter/runtime-telemetry.js +3 -1
  215. package/dist/core/hooks/adapter/wiring.d.ts +52 -8
  216. package/dist/core/hooks/adapter/wiring.d.ts.map +1 -1
  217. package/dist/core/hooks/adapter/wiring.js +133 -12
  218. package/dist/core/hooks/cli.js +676 -531
  219. package/dist/core/hooks/effects/image-capture.d.ts.map +1 -1
  220. package/dist/core/hooks/effects/image-capture.js +2 -1
  221. package/dist/core/hooks/prompt-context/contract.d.ts.map +1 -1
  222. package/dist/core/hooks/prompt-context/contract.js +1 -0
  223. package/dist/core/hooks/resolve/transcript.d.ts +1 -1
  224. package/dist/core/hooks/resolve/transcript.d.ts.map +1 -1
  225. package/dist/core/hooks/resolve/transcript.js +35 -4
  226. package/dist/core/hooks/run-markers.d.ts +37 -0
  227. package/dist/core/hooks/run-markers.d.ts.map +1 -0
  228. package/dist/core/hooks/run-markers.js +109 -0
  229. package/dist/core/hooks/session-name-presence.d.ts +3 -1
  230. package/dist/core/hooks/session-name-presence.d.ts.map +1 -1
  231. package/dist/core/hooks/session-name-presence.js +7 -2
  232. package/dist/core/hooks/shell-waiter.d.ts +2 -0
  233. package/dist/core/hooks/shell-waiter.d.ts.map +1 -0
  234. package/dist/core/hooks/shell-waiter.js +173 -0
  235. package/dist/core/resources/service.d.ts.map +1 -1
  236. package/dist/core/resources/service.js +5 -4
  237. package/dist/core/semantic/review.d.ts.map +1 -1
  238. package/dist/core/semantic/review.js +5 -4
  239. package/dist/core/semantic/service.d.ts.map +1 -1
  240. package/dist/core/semantic/service.js +15 -14
  241. package/dist/core/semantic/storage.d.ts.map +1 -1
  242. package/dist/core/semantic/storage.js +5 -4
  243. package/dist/core/servers/index.d.ts +211 -0
  244. package/dist/core/servers/index.d.ts.map +1 -0
  245. package/dist/core/servers/index.js +560 -0
  246. package/dist/core/servers/net.d.ts +58 -0
  247. package/dist/core/servers/net.d.ts.map +1 -0
  248. package/dist/core/servers/net.js +270 -0
  249. package/dist/core/servers/tunnels.d.ts +14 -0
  250. package/dist/core/servers/tunnels.d.ts.map +1 -0
  251. package/dist/core/servers/tunnels.js +33 -0
  252. package/dist/core/storage/atomic-json.d.ts.map +1 -1
  253. package/dist/core/storage/atomic-json.js +7 -3
  254. package/dist/core/storage/builtins.js +1 -0
  255. package/dist/core/storage/durable-history.d.ts.map +1 -1
  256. package/dist/core/storage/durable-history.js +6 -5
  257. package/dist/core/storage/maintenance-providers.d.ts.map +1 -1
  258. package/dist/core/storage/maintenance-providers.js +2 -1
  259. package/dist/core/storage/maintenance.d.ts.map +1 -1
  260. package/dist/core/storage/maintenance.js +7 -6
  261. package/dist/core/storage/metrics.d.ts.map +1 -1
  262. package/dist/core/storage/metrics.js +5 -1
  263. package/dist/core/storage/modes.d.ts +17 -0
  264. package/dist/core/storage/modes.d.ts.map +1 -0
  265. package/dist/core/storage/modes.js +47 -0
  266. package/dist/core/storage/process-log.d.ts.map +1 -1
  267. package/dist/core/storage/process-log.js +3 -2
  268. package/dist/core/storage/receipts.d.ts.map +1 -1
  269. package/dist/core/storage/receipts.js +4 -3
  270. package/dist/core/storage/segments.d.ts.map +1 -1
  271. package/dist/core/storage/segments.js +7 -6
  272. package/dist/core/supervisor/hook-health.d.ts +2 -1
  273. package/dist/core/supervisor/hook-health.d.ts.map +1 -1
  274. package/dist/core/supervisor/hook-health.js +4 -3
  275. package/dist/core/supervisor/service.d.ts.map +1 -1
  276. package/dist/core/supervisor/service.js +7 -6
  277. package/dist/core/work/state.d.ts.map +1 -1
  278. package/dist/core/work/state.js +8 -7
  279. package/dist/core/workflow/adapters.d.ts +7 -0
  280. package/dist/core/workflow/adapters.d.ts.map +1 -1
  281. package/dist/core/workflow/adapters.js +9 -0
  282. package/dist/core/workflow/approvals.d.ts.map +1 -1
  283. package/dist/core/workflow/approvals.js +6 -5
  284. package/dist/core/workflow/billing.d.ts.map +1 -1
  285. package/dist/core/workflow/billing.js +33 -4
  286. package/dist/core/workflow/durable-record.d.ts.map +1 -1
  287. package/dist/core/workflow/durable-record.js +4 -3
  288. package/dist/core/workflow/engine.d.ts.map +1 -1
  289. package/dist/core/workflow/engine.js +30 -1
  290. package/dist/core/workflow/live-session-v3.d.ts.map +1 -1
  291. package/dist/core/workflow/live-session-v3.js +2 -3
  292. package/dist/core/workflow/run-state.d.ts.map +1 -1
  293. package/dist/core/workflow/run-state.js +3 -2
  294. package/dist/core/workflow/sandbox-projection.d.ts +13 -2
  295. package/dist/core/workflow/sandbox-projection.d.ts.map +1 -1
  296. package/dist/core/workflow/sandbox-projection.js +23 -0
  297. package/dist/core/workflow/spawn-claude.d.ts.map +1 -1
  298. package/dist/core/workflow/spawn-claude.js +6 -1
  299. package/dist/core/workflow/spawn-codex.d.ts +2 -0
  300. package/dist/core/workflow/spawn-codex.d.ts.map +1 -1
  301. package/dist/core/workflow/spawn-codex.js +20 -1
  302. package/dist/core/workflow/spawn-cursor.d.ts.map +1 -1
  303. package/dist/core/workflow/spawn-cursor.js +6 -1
  304. package/dist/core/workflow/spawn-opencode.d.ts +36 -0
  305. package/dist/core/workflow/spawn-opencode.d.ts.map +1 -0
  306. package/dist/core/workflow/spawn-opencode.js +135 -0
  307. package/dist/core/workflow/transcript.d.ts.map +1 -1
  308. package/dist/core/workflow/transcript.js +3 -2
  309. package/dist/core/workflow/types.d.ts +47 -2
  310. package/dist/core/workflow/types.d.ts.map +1 -1
  311. package/dist/core/workflow/worker-access.d.ts +92 -0
  312. package/dist/core/workflow/worker-access.d.ts.map +1 -0
  313. package/dist/core/workflow/worker-access.js +450 -0
  314. package/dist/core/workflow/workspaces/leases.d.ts.map +1 -1
  315. package/dist/core/workflow/workspaces/leases.js +5 -4
  316. package/dist/core/workflow/workspaces/local-git.d.ts.map +1 -1
  317. package/dist/core/workflow/workspaces/local-git.js +3 -2
  318. package/dist/core/workflow/workspaces/paths.d.ts.map +1 -1
  319. package/dist/core/workflow/workspaces/paths.js +2 -1
  320. package/dist/core/workflow/workspaces/state.d.ts.map +1 -1
  321. package/dist/core/workflow/workspaces/state.js +10 -9
  322. package/dist/lazy-commands.js +8 -1
  323. package/dist/lib/agent-browser/client.d.ts +9 -0
  324. package/dist/lib/agent-browser/client.d.ts.map +1 -1
  325. package/dist/lib/agent-browser/client.js +13 -0
  326. package/dist/lib/browser/batch-steps.d.ts +18 -0
  327. package/dist/lib/browser/batch-steps.d.ts.map +1 -0
  328. package/dist/lib/browser/batch-steps.js +82 -0
  329. package/dist/lib/browser/client.d.ts +35 -1
  330. package/dist/lib/browser/client.d.ts.map +1 -1
  331. package/dist/lib/browser/client.js +117 -8
  332. package/dist/lib/browser/collect/collector.d.ts +99 -0
  333. package/dist/lib/browser/collect/collector.d.ts.map +1 -0
  334. package/dist/lib/browser/collect/collector.js +202 -0
  335. package/dist/lib/browser/collect/fields.d.ts +31 -0
  336. package/dist/lib/browser/collect/fields.d.ts.map +1 -0
  337. package/dist/lib/browser/collect/fields.js +75 -0
  338. package/dist/lib/browser/collect/index.d.ts +6 -0
  339. package/dist/lib/browser/collect/index.d.ts.map +1 -0
  340. package/dist/lib/browser/collect/index.js +5 -0
  341. package/dist/lib/browser/collect/page-driver.d.ts +14 -0
  342. package/dist/lib/browser/collect/page-driver.d.ts.map +1 -0
  343. package/dist/lib/browser/collect/page-driver.js +306 -0
  344. package/dist/lib/browser/collect/presets.d.ts +52 -0
  345. package/dist/lib/browser/collect/presets.d.ts.map +1 -0
  346. package/dist/lib/browser/collect/presets.js +176 -0
  347. package/dist/lib/browser/collect/scroll-plan.d.ts +85 -0
  348. package/dist/lib/browser/collect/scroll-plan.d.ts.map +1 -0
  349. package/dist/lib/browser/collect/scroll-plan.js +118 -0
  350. package/dist/lib/browser/identity.d.ts +25 -0
  351. package/dist/lib/browser/identity.d.ts.map +1 -0
  352. package/dist/lib/browser/identity.js +66 -0
  353. package/dist/lib/browser/index.d.ts +3 -2
  354. package/dist/lib/browser/index.d.ts.map +1 -1
  355. package/dist/lib/browser/index.js +2 -1
  356. package/dist/lib/browser/launch-args.d.ts +26 -0
  357. package/dist/lib/browser/launch-args.d.ts.map +1 -1
  358. package/dist/lib/browser/launch-args.js +41 -1
  359. package/dist/lib/browser/page-review-judge.d.ts +2 -0
  360. package/dist/lib/browser/page-review-judge.d.ts.map +1 -1
  361. package/dist/lib/browser/page-review-judge.js +13 -0
  362. package/dist/lib/browser/qa-run-contracts.d.ts +10 -0
  363. package/dist/lib/browser/qa-run-contracts.d.ts.map +1 -1
  364. package/dist/lib/browser/qa-run.d.ts.map +1 -1
  365. package/dist/lib/browser/qa-run.js +1 -0
  366. package/dist/lib/browser/user-agent.d.ts +53 -0
  367. package/dist/lib/browser/user-agent.d.ts.map +1 -0
  368. package/dist/lib/browser/user-agent.js +79 -0
  369. package/dist/lib/browser/windows-chrome.d.ts +59 -0
  370. package/dist/lib/browser/windows-chrome.d.ts.map +1 -0
  371. package/dist/lib/browser/windows-chrome.js +179 -0
  372. package/dist/lib/claude-desktop-share.d.ts +136 -0
  373. package/dist/lib/claude-desktop-share.d.ts.map +1 -0
  374. package/dist/lib/claude-desktop-share.js +394 -0
  375. package/dist/lib/disk-usage.d.ts +50 -0
  376. package/dist/lib/disk-usage.d.ts.map +1 -0
  377. package/dist/lib/disk-usage.js +303 -0
  378. package/dist/lib/docs-lint.d.ts +6 -0
  379. package/dist/lib/docs-lint.d.ts.map +1 -1
  380. package/dist/lib/docs-lint.js +8 -3
  381. package/dist/lib/docs-metadata-managed.d.ts +1 -0
  382. package/dist/lib/docs-metadata-managed.d.ts.map +1 -1
  383. package/dist/lib/docs-metadata-managed.js +17 -1
  384. package/dist/lib/guarded-remove.d.ts +34 -0
  385. package/dist/lib/guarded-remove.d.ts.map +1 -0
  386. package/dist/lib/guarded-remove.js +310 -0
  387. package/dist/lib/identities/assume.d.ts.map +1 -1
  388. package/dist/lib/identities/assume.js +4 -9
  389. package/dist/lib/instructions/apply.d.ts.map +1 -1
  390. package/dist/lib/instructions/apply.js +2 -0
  391. package/dist/lib/instructions/templates.js +8 -8
  392. package/dist/lib/pace/index.d.ts +2 -0
  393. package/dist/lib/pace/index.d.ts.map +1 -0
  394. package/dist/lib/pace/index.js +1 -0
  395. package/dist/lib/pace/pace.d.ts +95 -0
  396. package/dist/lib/pace/pace.d.ts.map +1 -0
  397. package/dist/lib/pace/pace.js +313 -0
  398. package/dist/lib/tunnel/error-page.d.ts +1 -1
  399. package/dist/lib/tunnel/error-page.d.ts.map +1 -1
  400. package/dist/lib/tunnel/error-page.js +19 -8
  401. package/dist/lib/tunnel/forward-headers.d.ts +11 -0
  402. package/dist/lib/tunnel/forward-headers.d.ts.map +1 -0
  403. package/dist/lib/tunnel/forward-headers.js +17 -0
  404. package/dist/lib/tunnel/gate.js +34 -10
  405. package/dist/lib/tunnel/path-scope.d.ts +22 -0
  406. package/dist/lib/tunnel/path-scope.d.ts.map +1 -0
  407. package/dist/lib/tunnel/path-scope.js +62 -0
  408. package/dist/lib/tunnel/state.d.ts +5 -0
  409. package/dist/lib/tunnel/state.d.ts.map +1 -1
  410. package/dist/lib/tunnel/state.js +17 -3
  411. package/dist/lib/webview/index.d.ts +2 -0
  412. package/dist/lib/webview/index.d.ts.map +1 -0
  413. package/dist/lib/webview/index.js +1 -0
  414. package/dist/lib/webview/webview.d.ts +116 -0
  415. package/dist/lib/webview/webview.d.ts.map +1 -0
  416. package/dist/lib/webview/webview.js +289 -0
  417. package/opencode-plugin/package.json +19 -0
  418. package/opencode-plugin/src/index.ts +791 -0
  419. package/package.json +16 -4
  420. package/schemas/config.schema.json +104 -0
  421. package/schemas/event-v3.schema.json +164 -0
  422. package/src/commander.ts +26 -0
  423. package/src/commands/agents.ts +47 -18
  424. package/src/commands/artifacts.ts +171 -19
  425. package/src/commands/browse-ai.ts +8 -0
  426. package/src/commands/browse.ts +570 -48
  427. package/src/commands/checkpoint.ts +7 -9
  428. package/src/commands/claude-desktop.ts +61 -0
  429. package/src/commands/deinit.ts +9 -4
  430. package/src/commands/disk.ts +114 -0
  431. package/src/commands/docs.ts +2 -0
  432. package/src/commands/doctor.ts +63 -3
  433. package/src/commands/fetch.ts +14 -0
  434. package/src/commands/files.ts +93 -2
  435. package/src/commands/init.ts +334 -122
  436. package/src/commands/instructions.ts +8 -4
  437. package/src/commands/ledger-v3.ts +2 -1
  438. package/src/commands/rm.ts +115 -0
  439. package/src/commands/servers.ts +506 -0
  440. package/src/commands/tunnel.ts +102 -2
  441. package/src/commands/webview.ts +159 -0
  442. package/src/core/adapter.ts +102 -1
  443. package/src/core/adapters/attestation.ts +3 -2
  444. package/src/core/adapters/profiles.ts +63 -1
  445. package/src/core/adapters/registry.ts +37 -0
  446. package/src/core/adapters/types.ts +10 -0
  447. package/src/core/agents/canonical-emit.ts +2 -5
  448. package/src/core/agents/cli.ts +26 -17
  449. package/src/core/agents/coord-client.ts +9 -3
  450. package/src/core/agents/render/session-context.ts +1 -0
  451. package/src/core/agents/rules/claim-conflict.ts +3 -8
  452. package/src/core/agents/rules/commit-conflict.ts +2 -7
  453. package/src/core/agents/rules/stop-hook.ts +3 -1
  454. package/src/core/agents/session-events.ts +120 -26
  455. package/src/core/agents/session-finalization-state-v3.ts +2 -1
  456. package/src/core/agents/session-finalizer-v3.ts +5 -4
  457. package/src/core/agents/session-name-display.ts +48 -0
  458. package/src/core/agents/state/heartbeat-reader.ts +7 -0
  459. package/src/core/agents/state/heartbeat-writer.ts +24 -2
  460. package/src/core/agents/state/live-coordination-view.ts +74 -0
  461. package/src/core/agents/state/live-coordination-writer.ts +3 -0
  462. package/src/core/agents/state/stale-sweep.ts +2 -9
  463. package/src/core/agents/turn-changes.ts +97 -0
  464. package/src/core/artifacts/delivery-card.ts +12 -3
  465. package/src/core/artifacts/index.ts +701 -47
  466. package/src/core/config.ts +206 -4
  467. package/src/core/context/index.ts +2 -1
  468. package/src/core/conversations/archive.ts +4 -3
  469. package/src/core/diagnostics/bundle.ts +5 -3
  470. package/src/core/events/legacy-storage/canary.ts +5 -4
  471. package/src/core/events/legacy-storage/compression.ts +2 -1
  472. package/src/core/events/v3/adapter-id.ts +29 -1
  473. package/src/core/events/v3/authority-outbox.ts +2 -1
  474. package/src/core/events/v3/bootstrap.ts +5 -4
  475. package/src/core/events/v3/capabilities.ts +17 -0
  476. package/src/core/events/v3/contract.ts +9 -1
  477. package/src/core/events/v3/control-witness.ts +3 -2
  478. package/src/core/events/v3/coordination-transaction-recovery.ts +4 -3
  479. package/src/core/events/v3/fingerprint-keys.ts +7 -6
  480. package/src/core/events/v3/generated.ts +1 -1
  481. package/src/core/events/v3/live-feed.ts +5 -4
  482. package/src/core/events/v3/producers/command-recorder.ts +8 -6
  483. package/src/core/events/v3/producers/coordination-recorder.ts +8 -7
  484. package/src/core/events/v3/producers/diagnostic-summaries.ts +5 -4
  485. package/src/core/events/v3/producers/hook-base.ts +11 -4
  486. package/src/core/events/v3/producers/hook.ts +19 -1
  487. package/src/core/events/v3/producers/intake.ts +18 -6
  488. package/src/core/events/v3/producers/recorder.ts +139 -114
  489. package/src/core/events/v3/projection.ts +11 -1
  490. package/src/core/events/v3/recovery.ts +4 -3
  491. package/src/core/events/v3/support-storage/inventory.ts +2 -1
  492. package/src/core/events/v3/support-storage/maintenance.ts +8 -3
  493. package/src/core/events/v3/support-storage/pack-reader.ts +4 -3
  494. package/src/core/events/v3/support-storage/pack-writer.ts +6 -5
  495. package/src/core/events/v3/tool-line-changes.ts +139 -0
  496. package/src/core/events/v3/writer.ts +8 -7
  497. package/src/core/governor/planning.ts +6 -5
  498. package/src/core/governor/service.ts +12 -11
  499. package/src/core/governor/state.ts +7 -6
  500. package/src/core/guard/evaluator.ts +1 -0
  501. package/src/core/guard/storage.ts +3 -2
  502. package/src/core/hooks/adapter/behaviors/claude-code.ts +33 -0
  503. package/src/core/hooks/adapter/behaviors/codex.ts +96 -0
  504. package/src/core/hooks/adapter/behaviors/cursor.ts +37 -0
  505. package/src/core/hooks/adapter/behaviors/index.ts +31 -0
  506. package/src/core/hooks/adapter/behaviors/openclaw.ts +36 -0
  507. package/src/core/hooks/adapter/behaviors/opencode.ts +36 -0
  508. package/src/core/hooks/adapter/behaviors/types.ts +110 -0
  509. package/src/core/hooks/adapter/detect.ts +2 -3
  510. package/src/core/hooks/adapter/events.ts +72 -1
  511. package/src/core/hooks/adapter/opencode-plugin.ts +177 -0
  512. package/src/core/hooks/adapter/output.ts +8 -1
  513. package/src/core/hooks/adapter/runtime-telemetry.ts +3 -1
  514. package/src/core/hooks/adapter/wiring.ts +198 -16
  515. package/src/core/hooks/cli.ts +776 -539
  516. package/src/core/hooks/effects/image-capture.ts +2 -1
  517. package/src/core/hooks/prompt-context/contract.ts +1 -0
  518. package/src/core/hooks/resolve/transcript.ts +42 -5
  519. package/src/core/hooks/run-markers.ts +132 -0
  520. package/src/core/hooks/session-name-presence.ts +10 -3
  521. package/src/core/hooks/shell-waiter.ts +166 -0
  522. package/src/core/resources/service.ts +5 -4
  523. package/src/core/semantic/review.ts +5 -4
  524. package/src/core/semantic/service.ts +15 -14
  525. package/src/core/semantic/storage.ts +5 -4
  526. package/src/core/servers/index.ts +712 -0
  527. package/src/core/servers/net.ts +283 -0
  528. package/src/core/servers/tunnels.ts +39 -0
  529. package/src/core/storage/atomic-json.ts +7 -3
  530. package/src/core/storage/builtins.ts +1 -0
  531. package/src/core/storage/durable-history.ts +6 -5
  532. package/src/core/storage/maintenance-providers.ts +2 -1
  533. package/src/core/storage/maintenance.ts +7 -6
  534. package/src/core/storage/metrics.ts +5 -1
  535. package/src/core/storage/modes.ts +53 -0
  536. package/src/core/storage/process-log.ts +3 -2
  537. package/src/core/storage/receipts.ts +4 -3
  538. package/src/core/storage/segments.ts +7 -6
  539. package/src/core/supervisor/hook-health.ts +4 -4
  540. package/src/core/supervisor/service.ts +7 -6
  541. package/src/core/work/state.ts +8 -7
  542. package/src/core/workflow/adapters.ts +15 -0
  543. package/src/core/workflow/approvals.ts +6 -5
  544. package/src/core/workflow/billing.ts +34 -4
  545. package/src/core/workflow/durable-record.ts +4 -3
  546. package/src/core/workflow/engine.ts +38 -1
  547. package/src/core/workflow/live-session-v3.ts +2 -3
  548. package/src/core/workflow/run-state.ts +3 -2
  549. package/src/core/workflow/sandbox-projection.ts +38 -2
  550. package/src/core/workflow/spawn-claude.ts +5 -1
  551. package/src/core/workflow/spawn-codex.ts +18 -1
  552. package/src/core/workflow/spawn-cursor.ts +5 -1
  553. package/src/core/workflow/spawn-opencode.ts +153 -0
  554. package/src/core/workflow/transcript.ts +3 -2
  555. package/src/core/workflow/types.ts +62 -2
  556. package/src/core/workflow/worker-access.ts +525 -0
  557. package/src/core/workflow/workspaces/leases.ts +5 -4
  558. package/src/core/workflow/workspaces/local-git.ts +3 -2
  559. package/src/core/workflow/workspaces/paths.ts +2 -1
  560. package/src/core/workflow/workspaces/state.ts +10 -9
  561. package/src/lazy-commands.ts +11 -1
  562. package/src/lib/agent-browser/client.ts +18 -0
  563. package/src/lib/browser/batch-steps.ts +79 -0
  564. package/src/lib/browser/client.ts +147 -9
  565. package/src/lib/browser/collect/collector.ts +306 -0
  566. package/src/lib/browser/collect/fields.ts +87 -0
  567. package/src/lib/browser/collect/index.ts +47 -0
  568. package/src/lib/browser/collect/page-driver.ts +327 -0
  569. package/src/lib/browser/collect/presets.ts +237 -0
  570. package/src/lib/browser/collect/scroll-plan.ts +179 -0
  571. package/src/lib/browser/identity.ts +64 -0
  572. package/src/lib/browser/index.ts +16 -1
  573. package/src/lib/browser/launch-args.ts +53 -1
  574. package/src/lib/browser/page-review-judge.ts +16 -0
  575. package/src/lib/browser/qa-run-contracts.ts +11 -0
  576. package/src/lib/browser/qa-run.ts +1 -0
  577. package/src/lib/browser/user-agent.ts +130 -0
  578. package/src/lib/browser/windows-chrome.ts +227 -0
  579. package/src/lib/claude-desktop-share.ts +511 -0
  580. package/src/lib/disk-usage.ts +347 -0
  581. package/src/lib/docs-lint.ts +8 -3
  582. package/src/lib/docs-metadata-managed.ts +21 -0
  583. package/src/lib/guarded-remove.ts +376 -0
  584. package/src/lib/identities/assume.ts +7 -7
  585. package/src/lib/instructions/apply.ts +2 -0
  586. package/src/lib/instructions/templates.ts +8 -8
  587. package/src/lib/pace/index.ts +14 -0
  588. package/src/lib/pace/pace.ts +370 -0
  589. package/src/lib/tunnel/error-page.ts +25 -9
  590. package/src/lib/tunnel/forward-headers.ts +16 -0
  591. package/src/lib/tunnel/gate.ts +39 -10
  592. package/src/lib/tunnel/path-scope.ts +73 -0
  593. package/src/lib/tunnel/state.ts +20 -3
  594. package/src/lib/webview/index.ts +13 -0
  595. package/src/lib/webview/webview.ts +457 -0
@@ -4,6 +4,7 @@ import { chmodSync, closeSync, existsSync, fsyncSync, mkdirSync, openSync, readF
4
4
  import { hostname } from "node:os";
5
5
  import { dirname, join, resolve } from "node:path";
6
6
  import { fileURLToPath } from "node:url";
7
+ import { stateDirMode, stateFileMode } from "../../storage/modes.js";
7
8
  import { fsyncParentDirectory } from "../../workflow/durable-record.js";
8
9
  import { acquireNoClobberLease } from "../../workflow/workspaces/leases.js";
9
10
  import { canonicalJsonV3, sha256V3 } from "./canonical.js";
@@ -399,7 +400,7 @@ function archiveCurrentEpoch(root, createdAt) {
399
400
  if (!existsSync(current))
400
401
  return undefined;
401
402
  const archives = join(root, ".harnery", "ledgers", "v3-archives");
402
- mkdirSync(archives, { recursive: true, mode: 0o700 });
403
+ mkdirSync(archives, { recursive: true, mode: stateDirMode() });
403
404
  const stamp = createdAt.replace(/[^0-9]/g, "");
404
405
  let target = join(archives, `epoch-${stamp}`);
405
406
  let suffix = 0;
@@ -410,14 +411,14 @@ function archiveCurrentEpoch(root, createdAt) {
410
411
  return target;
411
412
  }
412
413
  function publishControlFile(path, value) {
413
- mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
414
+ mkdirSync(dirname(path), { recursive: true, mode: stateDirMode() });
414
415
  const temp = `${path}.tmp.${process.pid}`;
415
416
  // A prior failed publish by this same pid would otherwise make every retry
416
417
  // fail on the exclusive create, which is exactly how one transient error
417
418
  // turns into a permanently stranded epoch.
418
419
  if (existsSync(temp))
419
420
  unlinkSync(temp);
420
- const fd = openSync(temp, "wx", 0o600);
421
+ const fd = openSync(temp, "wx", stateFileMode());
421
422
  try {
422
423
  writeFileSync(fd, `${canonicalJsonV3(value)}\n`, "utf8");
423
424
  fsyncSync(fd);
@@ -425,7 +426,7 @@ function publishControlFile(path, value) {
425
426
  finally {
426
427
  closeSync(fd);
427
428
  }
428
- chmodSync(temp, 0o600);
429
+ chmodSync(temp, stateFileMode());
429
430
  renameSync(temp, path);
430
431
  fsyncParentDirectory(path);
431
432
  }
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGxD,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,SAAS,GAAG,aAAa,GAAG,aAAa,CAAC;AAEvF,MAAM,MAAM,2BAA2B,GAAG,eAAe,GAAG,eAAe,CAAC;AAE5E,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,eAAO,MAAM,qBAAqB,EAAE,SAAS,iBAAiB,EAQpD,CAAC;AAEX,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,mBAAmB,CAAC;IACnC,iBAAiB,EAAE,mBAAmB,CAAC;CACxC;AAED,MAAM,MAAM,mBAAmB,GAC3B,eAAe,GACf,aAAa,GACb,QAAQ,GACR,SAAS,GACT,iBAAiB,GACjB,sBAAsB,GACtB,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,gBAAgB,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAC;CACvD;AA4FD,eAAO,MAAM,8BAA8B,EAAE,MAAM,CAAC,gBAAgB,EAAE,0BAA0B,CAsB7F,CAAC;AAEJ,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,gBAAgB,GAAG,0BAA0B,CAEhG;AAED,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,MAAM,EAAE,CAE3F;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,eAAe,GACtB,mBAAmB,CAErB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,gBAAgB,EACzB,UAAU,EAAE,2BAA2B,GACtC,mBAAmB,CAKrB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,iBAAiB,GACtB,mBAAmB,CAErB;AAED,gFAAgF;AAChF,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,gBAAgB,GAAG,mBAAmB,CAE7F;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,gBAAgB,GACxB,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,CAUjD;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,qBAAqB,GAAG,mBAAmB,CAI3F"}
1
+ {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../../src/core/events/v3/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGxD,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,SAAS,GAAG,aAAa,GAAG,aAAa,CAAC;AAEvF,MAAM,MAAM,2BAA2B,GAAG,eAAe,GAAG,eAAe,CAAC;AAE5E,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,eAAO,MAAM,qBAAqB,EAAE,SAAS,iBAAiB,EAQpD,CAAC;AAEX,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,mBAAmB,CAAC;IACnC,iBAAiB,EAAE,mBAAmB,CAAC;CACxC;AAED,MAAM,MAAM,mBAAmB,GAC3B,eAAe,GACf,aAAa,GACb,QAAQ,GACR,SAAS,GACT,iBAAiB,GACjB,sBAAsB,GACtB,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,gBAAgB,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAC;CACvD;AAyGD,eAAO,MAAM,8BAA8B,EAAE,MAAM,CAAC,gBAAgB,EAAE,0BAA0B,CA0B7F,CAAC;AAEJ,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,gBAAgB,GAAG,0BAA0B,CAEhG;AAED,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,MAAM,EAAE,CAE3F;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,eAAe,GACtB,mBAAmB,CAErB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,gBAAgB,EACzB,UAAU,EAAE,2BAA2B,GACtC,mBAAmB,CAKrB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,iBAAiB,GACtB,mBAAmB,CAErB;AAED,gFAAgF;AAChF,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,gBAAgB,GAAG,mBAAmB,CAE7F;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,gBAAgB,GACxB,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,CAUjD;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,qBAAqB,GAAG,mBAAmB,CAI3F"}
@@ -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 };