@sema-ai/core 1.275.1

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 (962) hide show
  1. package/CHANGELOG.md +5433 -0
  2. package/LICENSE +27 -0
  3. package/NOTICE.md +30 -0
  4. package/README.md +1040 -0
  5. package/dist/agents/agent-definition.d.ts +10 -0
  6. package/dist/agents/agent-definition.d.ts.map +1 -0
  7. package/dist/agents/agent-definition.js +18 -0
  8. package/dist/agents/agent-definition.js.map +1 -0
  9. package/dist/agents/builtin-agents.d.ts +69 -0
  10. package/dist/agents/builtin-agents.d.ts.map +1 -0
  11. package/dist/agents/builtin-agents.js +177 -0
  12. package/dist/agents/builtin-agents.js.map +1 -0
  13. package/dist/agents/cascade.d.ts +101 -0
  14. package/dist/agents/cascade.d.ts.map +1 -0
  15. package/dist/agents/cascade.js +189 -0
  16. package/dist/agents/cascade.js.map +1 -0
  17. package/dist/agents/observer.d.ts +209 -0
  18. package/dist/agents/observer.d.ts.map +1 -0
  19. package/dist/agents/observer.js +495 -0
  20. package/dist/agents/observer.js.map +1 -0
  21. package/dist/agents/repair-loop.d.ts +236 -0
  22. package/dist/agents/repair-loop.d.ts.map +1 -0
  23. package/dist/agents/repair-loop.js +293 -0
  24. package/dist/agents/repair-loop.js.map +1 -0
  25. package/dist/agents/session-util.d.ts +8 -0
  26. package/dist/agents/session-util.d.ts.map +1 -0
  27. package/dist/agents/session-util.js +9 -0
  28. package/dist/agents/session-util.js.map +1 -0
  29. package/dist/agents/subagent-steps.d.ts +93 -0
  30. package/dist/agents/subagent-steps.d.ts.map +1 -0
  31. package/dist/agents/subagent-steps.js +206 -0
  32. package/dist/agents/subagent-steps.js.map +1 -0
  33. package/dist/agents/subagent.d.ts +441 -0
  34. package/dist/agents/subagent.d.ts.map +1 -0
  35. package/dist/agents/subagent.js +2492 -0
  36. package/dist/agents/subagent.js.map +1 -0
  37. package/dist/agents/suspend-guard.d.ts +35 -0
  38. package/dist/agents/suspend-guard.d.ts.map +1 -0
  39. package/dist/agents/suspend-guard.js +48 -0
  40. package/dist/agents/suspend-guard.js.map +1 -0
  41. package/dist/agents/teacher.d.ts +137 -0
  42. package/dist/agents/teacher.d.ts.map +1 -0
  43. package/dist/agents/teacher.js +575 -0
  44. package/dist/agents/teacher.js.map +1 -0
  45. package/dist/agents/team.d.ts +211 -0
  46. package/dist/agents/team.d.ts.map +1 -0
  47. package/dist/agents/team.js +293 -0
  48. package/dist/agents/team.js.map +1 -0
  49. package/dist/agents/tool-filter.d.ts +29 -0
  50. package/dist/agents/tool-filter.d.ts.map +1 -0
  51. package/dist/agents/tool-filter.js +50 -0
  52. package/dist/agents/tool-filter.js.map +1 -0
  53. package/dist/agents/verify.d.ts +177 -0
  54. package/dist/agents/verify.d.ts.map +1 -0
  55. package/dist/agents/verify.js +305 -0
  56. package/dist/agents/verify.js.map +1 -0
  57. package/dist/bench/metrics.d.ts +714 -0
  58. package/dist/bench/metrics.d.ts.map +1 -0
  59. package/dist/bench/metrics.js +618 -0
  60. package/dist/bench/metrics.js.map +1 -0
  61. package/dist/bin/sema-tb.d.ts +3 -0
  62. package/dist/bin/sema-tb.d.ts.map +1 -0
  63. package/dist/bin/sema-tb.js +516 -0
  64. package/dist/bin/sema-tb.js.map +1 -0
  65. package/dist/bin/tb-env.d.ts +13 -0
  66. package/dist/bin/tb-env.d.ts.map +1 -0
  67. package/dist/bin/tb-env.js +26 -0
  68. package/dist/bin/tb-env.js.map +1 -0
  69. package/dist/brain/anthropic.d.ts +46 -0
  70. package/dist/brain/anthropic.d.ts.map +1 -0
  71. package/dist/brain/anthropic.js +830 -0
  72. package/dist/brain/anthropic.js.map +1 -0
  73. package/dist/brain/circuit-breaker.d.ts +46 -0
  74. package/dist/brain/circuit-breaker.d.ts.map +1 -0
  75. package/dist/brain/circuit-breaker.js +173 -0
  76. package/dist/brain/circuit-breaker.js.map +1 -0
  77. package/dist/brain/degrading.d.ts +98 -0
  78. package/dist/brain/degrading.d.ts.map +1 -0
  79. package/dist/brain/degrading.js +249 -0
  80. package/dist/brain/degrading.js.map +1 -0
  81. package/dist/brain/errors.d.ts +31 -0
  82. package/dist/brain/errors.d.ts.map +1 -0
  83. package/dist/brain/errors.js +58 -0
  84. package/dist/brain/errors.js.map +1 -0
  85. package/dist/brain/failover.d.ts +18 -0
  86. package/dist/brain/failover.d.ts.map +1 -0
  87. package/dist/brain/failover.js +118 -0
  88. package/dist/brain/failover.js.map +1 -0
  89. package/dist/brain/model-presets.d.ts +36 -0
  90. package/dist/brain/model-presets.d.ts.map +1 -0
  91. package/dist/brain/model-presets.js +54 -0
  92. package/dist/brain/model-presets.js.map +1 -0
  93. package/dist/brain/openai.d.ts +43 -0
  94. package/dist/brain/openai.d.ts.map +1 -0
  95. package/dist/brain/openai.js +784 -0
  96. package/dist/brain/openai.js.map +1 -0
  97. package/dist/brain/reasoning.d.ts +138 -0
  98. package/dist/brain/reasoning.d.ts.map +1 -0
  99. package/dist/brain/reasoning.js +146 -0
  100. package/dist/brain/reasoning.js.map +1 -0
  101. package/dist/brain/repetition.d.ts +60 -0
  102. package/dist/brain/repetition.d.ts.map +1 -0
  103. package/dist/brain/repetition.js +121 -0
  104. package/dist/brain/repetition.js.map +1 -0
  105. package/dist/brain/request-params.d.ts +29 -0
  106. package/dist/brain/request-params.d.ts.map +1 -0
  107. package/dist/brain/request-params.js +78 -0
  108. package/dist/brain/request-params.js.map +1 -0
  109. package/dist/brain/retry.d.ts +18 -0
  110. package/dist/brain/retry.d.ts.map +1 -0
  111. package/dist/brain/retry.js +42 -0
  112. package/dist/brain/retry.js.map +1 -0
  113. package/dist/brain/routing.d.ts +19 -0
  114. package/dist/brain/routing.d.ts.map +1 -0
  115. package/dist/brain/routing.js +44 -0
  116. package/dist/brain/routing.js.map +1 -0
  117. package/dist/brain/status-sink.d.ts +46 -0
  118. package/dist/brain/status-sink.d.ts.map +1 -0
  119. package/dist/brain/status-sink.js +36 -0
  120. package/dist/brain/status-sink.js.map +1 -0
  121. package/dist/brain/stream-engine.d.ts +85 -0
  122. package/dist/brain/stream-engine.d.ts.map +1 -0
  123. package/dist/brain/stream-engine.js +391 -0
  124. package/dist/brain/stream-engine.js.map +1 -0
  125. package/dist/brain/timeout.d.ts +44 -0
  126. package/dist/brain/timeout.d.ts.map +1 -0
  127. package/dist/brain/timeout.js +41 -0
  128. package/dist/brain/timeout.js.map +1 -0
  129. package/dist/brain/tool-call-repair.d.ts +15 -0
  130. package/dist/brain/tool-call-repair.d.ts.map +1 -0
  131. package/dist/brain/tool-call-repair.js +67 -0
  132. package/dist/brain/tool-call-repair.js.map +1 -0
  133. package/dist/brain/walltime.d.ts +14 -0
  134. package/dist/brain/walltime.d.ts.map +1 -0
  135. package/dist/brain/walltime.js +14 -0
  136. package/dist/brain/walltime.js.map +1 -0
  137. package/dist/core/arg-summary.d.ts +19 -0
  138. package/dist/core/arg-summary.d.ts.map +1 -0
  139. package/dist/core/arg-summary.js +96 -0
  140. package/dist/core/arg-summary.js.map +1 -0
  141. package/dist/core/ask-question.d.ts +113 -0
  142. package/dist/core/ask-question.d.ts.map +1 -0
  143. package/dist/core/ask-question.js +246 -0
  144. package/dist/core/ask-question.js.map +1 -0
  145. package/dist/core/auto-compaction.d.ts +341 -0
  146. package/dist/core/auto-compaction.d.ts.map +1 -0
  147. package/dist/core/auto-compaction.js +495 -0
  148. package/dist/core/auto-compaction.js.map +1 -0
  149. package/dist/core/auto-promote.d.ts +126 -0
  150. package/dist/core/auto-promote.d.ts.map +1 -0
  151. package/dist/core/auto-promote.js +171 -0
  152. package/dist/core/auto-promote.js.map +1 -0
  153. package/dist/core/background-shell.d.ts +128 -0
  154. package/dist/core/background-shell.d.ts.map +1 -0
  155. package/dist/core/background-shell.js +42 -0
  156. package/dist/core/background-shell.js.map +1 -0
  157. package/dist/core/cache-break-detector.d.ts +63 -0
  158. package/dist/core/cache-break-detector.d.ts.map +1 -0
  159. package/dist/core/cache-break-detector.js +0 -0
  160. package/dist/core/cache-break-detector.js.map +1 -0
  161. package/dist/core/canonical-json.d.ts +45 -0
  162. package/dist/core/canonical-json.d.ts.map +1 -0
  163. package/dist/core/canonical-json.js +132 -0
  164. package/dist/core/canonical-json.js.map +1 -0
  165. package/dist/core/checkpoint-store.d.ts +1101 -0
  166. package/dist/core/checkpoint-store.d.ts.map +1 -0
  167. package/dist/core/checkpoint-store.js +514 -0
  168. package/dist/core/checkpoint-store.js.map +1 -0
  169. package/dist/core/consolidate-scope.d.ts +94 -0
  170. package/dist/core/consolidate-scope.d.ts.map +1 -0
  171. package/dist/core/consolidate-scope.js +158 -0
  172. package/dist/core/consolidate-scope.js.map +1 -0
  173. package/dist/core/context-edit.d.ts +82 -0
  174. package/dist/core/context-edit.d.ts.map +1 -0
  175. package/dist/core/context-edit.js +149 -0
  176. package/dist/core/context-edit.js.map +1 -0
  177. package/dist/core/context-guard.d.ts +43 -0
  178. package/dist/core/context-guard.d.ts.map +1 -0
  179. package/dist/core/context-guard.js +171 -0
  180. package/dist/core/context-guard.js.map +1 -0
  181. package/dist/core/dynamic-recall.d.ts +100 -0
  182. package/dist/core/dynamic-recall.d.ts.map +1 -0
  183. package/dist/core/dynamic-recall.js +108 -0
  184. package/dist/core/dynamic-recall.js.map +1 -0
  185. package/dist/core/exec-gate.d.ts +74 -0
  186. package/dist/core/exec-gate.d.ts.map +1 -0
  187. package/dist/core/exec-gate.js +143 -0
  188. package/dist/core/exec-gate.js.map +1 -0
  189. package/dist/core/exec-output-tail.d.ts +37 -0
  190. package/dist/core/exec-output-tail.d.ts.map +1 -0
  191. package/dist/core/exec-output-tail.js +63 -0
  192. package/dist/core/exec-output-tail.js.map +1 -0
  193. package/dist/core/file-snapshot-store.d.ts +137 -0
  194. package/dist/core/file-snapshot-store.d.ts.map +1 -0
  195. package/dist/core/file-snapshot-store.js +319 -0
  196. package/dist/core/file-snapshot-store.js.map +1 -0
  197. package/dist/core/git-worktree-env.d.ts +41 -0
  198. package/dist/core/git-worktree-env.d.ts.map +1 -0
  199. package/dist/core/git-worktree-env.js +64 -0
  200. package/dist/core/git-worktree-env.js.map +1 -0
  201. package/dist/core/hooks.d.ts +372 -0
  202. package/dist/core/hooks.d.ts.map +1 -0
  203. package/dist/core/hooks.js +269 -0
  204. package/dist/core/hooks.js.map +1 -0
  205. package/dist/core/lsp-diagnostics.d.ts +74 -0
  206. package/dist/core/lsp-diagnostics.d.ts.map +1 -0
  207. package/dist/core/lsp-diagnostics.js +125 -0
  208. package/dist/core/lsp-diagnostics.js.map +1 -0
  209. package/dist/core/lsp-protocol.d.ts +28 -0
  210. package/dist/core/lsp-protocol.d.ts.map +1 -0
  211. package/dist/core/lsp-protocol.js +179 -0
  212. package/dist/core/lsp-protocol.js.map +1 -0
  213. package/dist/core/lsp-session.d.ts +56 -0
  214. package/dist/core/lsp-session.d.ts.map +1 -0
  215. package/dist/core/lsp-session.js +185 -0
  216. package/dist/core/lsp-session.js.map +1 -0
  217. package/dist/core/lsp.d.ts +132 -0
  218. package/dist/core/lsp.d.ts.map +1 -0
  219. package/dist/core/lsp.js +147 -0
  220. package/dist/core/lsp.js.map +1 -0
  221. package/dist/core/mcp.d.ts +294 -0
  222. package/dist/core/mcp.d.ts.map +1 -0
  223. package/dist/core/mcp.js +992 -0
  224. package/dist/core/mcp.js.map +1 -0
  225. package/dist/core/media-byte-cap.d.ts +34 -0
  226. package/dist/core/media-byte-cap.d.ts.map +1 -0
  227. package/dist/core/media-byte-cap.js +76 -0
  228. package/dist/core/media-byte-cap.js.map +1 -0
  229. package/dist/core/memory-engine/data-plane.d.ts +103 -0
  230. package/dist/core/memory-engine/data-plane.d.ts.map +1 -0
  231. package/dist/core/memory-engine/data-plane.js +272 -0
  232. package/dist/core/memory-engine/data-plane.js.map +1 -0
  233. package/dist/core/memory-engine/dual-root.d.ts +40 -0
  234. package/dist/core/memory-engine/dual-root.d.ts.map +1 -0
  235. package/dist/core/memory-engine/dual-root.js +95 -0
  236. package/dist/core/memory-engine/dual-root.js.map +1 -0
  237. package/dist/core/memory-engine/engine.d.ts +161 -0
  238. package/dist/core/memory-engine/engine.d.ts.map +1 -0
  239. package/dist/core/memory-engine/engine.js +1110 -0
  240. package/dist/core/memory-engine/engine.js.map +1 -0
  241. package/dist/core/memory-engine/file-backend.d.ts +162 -0
  242. package/dist/core/memory-engine/file-backend.d.ts.map +1 -0
  243. package/dist/core/memory-engine/file-backend.js +948 -0
  244. package/dist/core/memory-engine/file-backend.js.map +1 -0
  245. package/dist/core/memory-engine/frontmatter.d.ts +24 -0
  246. package/dist/core/memory-engine/frontmatter.d.ts.map +1 -0
  247. package/dist/core/memory-engine/frontmatter.js +135 -0
  248. package/dist/core/memory-engine/frontmatter.js.map +1 -0
  249. package/dist/core/memory-engine/index.d.ts +13 -0
  250. package/dist/core/memory-engine/index.d.ts.map +1 -0
  251. package/dist/core/memory-engine/index.js +28 -0
  252. package/dist/core/memory-engine/index.js.map +1 -0
  253. package/dist/core/memory-engine/layout.d.ts +123 -0
  254. package/dist/core/memory-engine/layout.d.ts.map +1 -0
  255. package/dist/core/memory-engine/layout.js +643 -0
  256. package/dist/core/memory-engine/layout.js.map +1 -0
  257. package/dist/core/memory-engine/memory-backend-contract.d.ts +22 -0
  258. package/dist/core/memory-engine/memory-backend-contract.d.ts.map +1 -0
  259. package/dist/core/memory-engine/memory-backend-contract.js +271 -0
  260. package/dist/core/memory-engine/memory-backend-contract.js.map +1 -0
  261. package/dist/core/memory-engine/migrate.d.ts +17 -0
  262. package/dist/core/memory-engine/migrate.d.ts.map +1 -0
  263. package/dist/core/memory-engine/migrate.js +35 -0
  264. package/dist/core/memory-engine/migrate.js.map +1 -0
  265. package/dist/core/memory-engine/scan.d.ts +20 -0
  266. package/dist/core/memory-engine/scan.d.ts.map +1 -0
  267. package/dist/core/memory-engine/scan.js +84 -0
  268. package/dist/core/memory-engine/scan.js.map +1 -0
  269. package/dist/core/memory-engine/scope-contract.d.ts +104 -0
  270. package/dist/core/memory-engine/scope-contract.d.ts.map +1 -0
  271. package/dist/core/memory-engine/scope-contract.js +288 -0
  272. package/dist/core/memory-engine/scope-contract.js.map +1 -0
  273. package/dist/core/memory-engine/sync-client.d.ts +100 -0
  274. package/dist/core/memory-engine/sync-client.d.ts.map +1 -0
  275. package/dist/core/memory-engine/sync-client.js +328 -0
  276. package/dist/core/memory-engine/sync-client.js.map +1 -0
  277. package/dist/core/memory-engine/sync.d.ts +97 -0
  278. package/dist/core/memory-engine/sync.d.ts.map +1 -0
  279. package/dist/core/memory-engine/sync.js +91 -0
  280. package/dist/core/memory-engine/sync.js.map +1 -0
  281. package/dist/core/memory-engine/types.d.ts +279 -0
  282. package/dist/core/memory-engine/types.d.ts.map +1 -0
  283. package/dist/core/memory-engine/types.js +9 -0
  284. package/dist/core/memory-engine/types.js.map +1 -0
  285. package/dist/core/memory-recall.d.ts +261 -0
  286. package/dist/core/memory-recall.d.ts.map +1 -0
  287. package/dist/core/memory-recall.js +600 -0
  288. package/dist/core/memory-recall.js.map +1 -0
  289. package/dist/core/memory-vector.d.ts +24 -0
  290. package/dist/core/memory-vector.d.ts.map +1 -0
  291. package/dist/core/memory-vector.js +51 -0
  292. package/dist/core/memory-vector.js.map +1 -0
  293. package/dist/core/memory.d.ts +502 -0
  294. package/dist/core/memory.d.ts.map +1 -0
  295. package/dist/core/memory.js +881 -0
  296. package/dist/core/memory.js.map +1 -0
  297. package/dist/core/message-utils.d.ts +7 -0
  298. package/dist/core/message-utils.d.ts.map +1 -0
  299. package/dist/core/message-utils.js +10 -0
  300. package/dist/core/message-utils.js.map +1 -0
  301. package/dist/core/oracle-isolation.d.ts +85 -0
  302. package/dist/core/oracle-isolation.d.ts.map +1 -0
  303. package/dist/core/oracle-isolation.js +121 -0
  304. package/dist/core/oracle-isolation.js.map +1 -0
  305. package/dist/core/permission-rules.d.ts +102 -0
  306. package/dist/core/permission-rules.d.ts.map +1 -0
  307. package/dist/core/permission-rules.js +357 -0
  308. package/dist/core/permission-rules.js.map +1 -0
  309. package/dist/core/present-plan-tool.d.ts +28 -0
  310. package/dist/core/present-plan-tool.d.ts.map +1 -0
  311. package/dist/core/present-plan-tool.js +119 -0
  312. package/dist/core/present-plan-tool.js.map +1 -0
  313. package/dist/core/pricing.d.ts +48 -0
  314. package/dist/core/pricing.d.ts.map +1 -0
  315. package/dist/core/pricing.js +46 -0
  316. package/dist/core/pricing.js.map +1 -0
  317. package/dist/core/property-harness.d.ts +126 -0
  318. package/dist/core/property-harness.d.ts.map +1 -0
  319. package/dist/core/property-harness.js +192 -0
  320. package/dist/core/property-harness.js.map +1 -0
  321. package/dist/core/push-queue.d.ts +10 -0
  322. package/dist/core/push-queue.d.ts.map +1 -0
  323. package/dist/core/push-queue.js +42 -0
  324. package/dist/core/push-queue.js.map +1 -0
  325. package/dist/core/remote-env.d.ts +432 -0
  326. package/dist/core/remote-env.d.ts.map +1 -0
  327. package/dist/core/remote-env.js +77 -0
  328. package/dist/core/remote-env.js.map +1 -0
  329. package/dist/core/roles.d.ts +74 -0
  330. package/dist/core/roles.d.ts.map +1 -0
  331. package/dist/core/roles.js +272 -0
  332. package/dist/core/roles.js.map +1 -0
  333. package/dist/core/runner/active-skill-scope.d.ts +64 -0
  334. package/dist/core/runner/active-skill-scope.d.ts.map +1 -0
  335. package/dist/core/runner/active-skill-scope.js +197 -0
  336. package/dist/core/runner/active-skill-scope.js.map +1 -0
  337. package/dist/core/runner/assemble-result.d.ts +191 -0
  338. package/dist/core/runner/assemble-result.d.ts.map +1 -0
  339. package/dist/core/runner/assemble-result.js +250 -0
  340. package/dist/core/runner/assemble-result.js.map +1 -0
  341. package/dist/core/runner/call-cap.d.ts +130 -0
  342. package/dist/core/runner/call-cap.d.ts.map +1 -0
  343. package/dist/core/runner/call-cap.js +151 -0
  344. package/dist/core/runner/call-cap.js.map +1 -0
  345. package/dist/core/runner/grounding-signal.d.ts +12 -0
  346. package/dist/core/runner/grounding-signal.d.ts.map +1 -0
  347. package/dist/core/runner/grounding-signal.js +94 -0
  348. package/dist/core/runner/grounding-signal.js.map +1 -0
  349. package/dist/core/runner/image.d.ts +23 -0
  350. package/dist/core/runner/image.d.ts.map +1 -0
  351. package/dist/core/runner/image.js +151 -0
  352. package/dist/core/runner/image.js.map +1 -0
  353. package/dist/core/runner/memory-consolidation.d.ts +112 -0
  354. package/dist/core/runner/memory-consolidation.d.ts.map +1 -0
  355. package/dist/core/runner/memory-consolidation.js +372 -0
  356. package/dist/core/runner/memory-consolidation.js.map +1 -0
  357. package/dist/core/runner/prepare-task.d.ts +583 -0
  358. package/dist/core/runner/prepare-task.d.ts.map +1 -0
  359. package/dist/core/runner/prepare-task.js +3612 -0
  360. package/dist/core/runner/prepare-task.js.map +1 -0
  361. package/dist/core/runner/prompt-suggestions.d.ts +33 -0
  362. package/dist/core/runner/prompt-suggestions.d.ts.map +1 -0
  363. package/dist/core/runner/prompt-suggestions.js +116 -0
  364. package/dist/core/runner/prompt-suggestions.js.map +1 -0
  365. package/dist/core/runner/runtask.d.ts +274 -0
  366. package/dist/core/runner/runtask.d.ts.map +1 -0
  367. package/dist/core/runner/runtask.js +4606 -0
  368. package/dist/core/runner/runtask.js.map +1 -0
  369. package/dist/core/runner/session-rule-policy.d.ts +28 -0
  370. package/dist/core/runner/session-rule-policy.d.ts.map +1 -0
  371. package/dist/core/runner/session-rule-policy.js +110 -0
  372. package/dist/core/runner/session-rule-policy.js.map +1 -0
  373. package/dist/core/runner/strict-output-schema.d.ts +36 -0
  374. package/dist/core/runner/strict-output-schema.d.ts.map +1 -0
  375. package/dist/core/runner/strict-output-schema.js +365 -0
  376. package/dist/core/runner/strict-output-schema.js.map +1 -0
  377. package/dist/core/runner/synthetic-tools.d.ts +72 -0
  378. package/dist/core/runner/synthetic-tools.d.ts.map +1 -0
  379. package/dist/core/runner/synthetic-tools.js +203 -0
  380. package/dist/core/runner/synthetic-tools.js.map +1 -0
  381. package/dist/core/runner/tool-disclosure.d.ts +117 -0
  382. package/dist/core/runner/tool-disclosure.d.ts.map +1 -0
  383. package/dist/core/runner/tool-disclosure.js +0 -0
  384. package/dist/core/runner/tool-disclosure.js.map +1 -0
  385. package/dist/core/runner/turn-attachments.d.ts +381 -0
  386. package/dist/core/runner/turn-attachments.d.ts.map +1 -0
  387. package/dist/core/runner/turn-attachments.js +596 -0
  388. package/dist/core/runner/turn-attachments.js.map +1 -0
  389. package/dist/core/runner/usage-accounting.d.ts +35 -0
  390. package/dist/core/runner/usage-accounting.d.ts.map +1 -0
  391. package/dist/core/runner/usage-accounting.js +45 -0
  392. package/dist/core/runner/usage-accounting.js.map +1 -0
  393. package/dist/core/runtime.d.ts +9 -0
  394. package/dist/core/runtime.d.ts.map +1 -0
  395. package/dist/core/runtime.js +17 -0
  396. package/dist/core/runtime.js.map +1 -0
  397. package/dist/core/safety-axis-vocab.d.ts +33 -0
  398. package/dist/core/safety-axis-vocab.d.ts.map +1 -0
  399. package/dist/core/safety-axis-vocab.js +35 -0
  400. package/dist/core/safety-axis-vocab.js.map +1 -0
  401. package/dist/core/safety-merge-corpus.d.ts +48 -0
  402. package/dist/core/safety-merge-corpus.d.ts.map +1 -0
  403. package/dist/core/safety-merge-corpus.js +203 -0
  404. package/dist/core/safety-merge-corpus.js.map +1 -0
  405. package/dist/core/scheduler.d.ts +126 -0
  406. package/dist/core/scheduler.d.ts.map +1 -0
  407. package/dist/core/scheduler.js +54 -0
  408. package/dist/core/scheduler.js.map +1 -0
  409. package/dist/core/secret-env.d.ts +23 -0
  410. package/dist/core/secret-env.d.ts.map +1 -0
  411. package/dist/core/secret-env.js +35 -0
  412. package/dist/core/secret-env.js.map +1 -0
  413. package/dist/core/select-model.d.ts +26 -0
  414. package/dist/core/select-model.d.ts.map +1 -0
  415. package/dist/core/select-model.js +58 -0
  416. package/dist/core/select-model.js.map +1 -0
  417. package/dist/core/sensitive-path-policy.d.ts +24 -0
  418. package/dist/core/sensitive-path-policy.d.ts.map +1 -0
  419. package/dist/core/sensitive-path-policy.js +96 -0
  420. package/dist/core/sensitive-path-policy.js.map +1 -0
  421. package/dist/core/session-policy-store.d.ts +102 -0
  422. package/dist/core/session-policy-store.d.ts.map +1 -0
  423. package/dist/core/session-policy-store.js +177 -0
  424. package/dist/core/session-policy-store.js.map +1 -0
  425. package/dist/core/session-reconcile.d.ts +63 -0
  426. package/dist/core/session-reconcile.d.ts.map +1 -0
  427. package/dist/core/session-reconcile.js +71 -0
  428. package/dist/core/session-reconcile.js.map +1 -0
  429. package/dist/core/session-store.d.ts +99 -0
  430. package/dist/core/session-store.d.ts.map +1 -0
  431. package/dist/core/session-store.js +298 -0
  432. package/dist/core/session-store.js.map +1 -0
  433. package/dist/core/session.d.ts +144 -0
  434. package/dist/core/session.d.ts.map +1 -0
  435. package/dist/core/session.js +56 -0
  436. package/dist/core/session.js.map +1 -0
  437. package/dist/core/spec-contract.d.ts +147 -0
  438. package/dist/core/spec-contract.d.ts.map +1 -0
  439. package/dist/core/spec-contract.js +340 -0
  440. package/dist/core/spec-contract.js.map +1 -0
  441. package/dist/core/strategy-store.d.ts +50 -0
  442. package/dist/core/strategy-store.d.ts.map +1 -0
  443. package/dist/core/strategy-store.js +100 -0
  444. package/dist/core/strategy-store.js.map +1 -0
  445. package/dist/core/stub-env.d.ts +35 -0
  446. package/dist/core/stub-env.d.ts.map +1 -0
  447. package/dist/core/stub-env.js +69 -0
  448. package/dist/core/stub-env.js.map +1 -0
  449. package/dist/core/task-notification.d.ts +115 -0
  450. package/dist/core/task-notification.d.ts.map +1 -0
  451. package/dist/core/task-notification.js +247 -0
  452. package/dist/core/task-notification.js.map +1 -0
  453. package/dist/core/task-outcome.d.ts +80 -0
  454. package/dist/core/task-outcome.d.ts.map +1 -0
  455. package/dist/core/task-outcome.js +40 -0
  456. package/dist/core/task-outcome.js.map +1 -0
  457. package/dist/core/task-registry.d.ts +349 -0
  458. package/dist/core/task-registry.d.ts.map +1 -0
  459. package/dist/core/task-registry.js +1751 -0
  460. package/dist/core/task-registry.js.map +1 -0
  461. package/dist/core/tighten-task-spec.d.ts +27 -0
  462. package/dist/core/tighten-task-spec.d.ts.map +1 -0
  463. package/dist/core/tighten-task-spec.js +95 -0
  464. package/dist/core/tighten-task-spec.js.map +1 -0
  465. package/dist/core/tool-detach.d.ts +31 -0
  466. package/dist/core/tool-detach.d.ts.map +1 -0
  467. package/dist/core/tool-detach.js +62 -0
  468. package/dist/core/tool-detach.js.map +1 -0
  469. package/dist/core/tool-errors.d.ts +72 -0
  470. package/dist/core/tool-errors.d.ts.map +1 -0
  471. package/dist/core/tool-errors.js +194 -0
  472. package/dist/core/tool-errors.js.map +1 -0
  473. package/dist/core/tool-name-aliases.d.ts +5 -0
  474. package/dist/core/tool-name-aliases.d.ts.map +1 -0
  475. package/dist/core/tool-name-aliases.js +130 -0
  476. package/dist/core/tool-name-aliases.js.map +1 -0
  477. package/dist/core/tool-policy.d.ts +295 -0
  478. package/dist/core/tool-policy.d.ts.map +1 -0
  479. package/dist/core/tool-policy.js +567 -0
  480. package/dist/core/tool-policy.js.map +1 -0
  481. package/dist/core/tool-result-budget.d.ts +44 -0
  482. package/dist/core/tool-result-budget.d.ts.map +1 -0
  483. package/dist/core/tool-result-budget.js +140 -0
  484. package/dist/core/tool-result-budget.js.map +1 -0
  485. package/dist/core/tool-result-store.d.ts +136 -0
  486. package/dist/core/tool-result-store.d.ts.map +1 -0
  487. package/dist/core/tool-result-store.js +219 -0
  488. package/dist/core/tool-result-store.js.map +1 -0
  489. package/dist/core/tools.d.ts +14 -0
  490. package/dist/core/tools.d.ts.map +1 -0
  491. package/dist/core/tools.js +98 -0
  492. package/dist/core/tools.js.map +1 -0
  493. package/dist/core/trace.d.ts +340 -0
  494. package/dist/core/trace.d.ts.map +1 -0
  495. package/dist/core/trace.js +12 -0
  496. package/dist/core/trace.js.map +1 -0
  497. package/dist/core/types.d.ts +2828 -0
  498. package/dist/core/types.d.ts.map +1 -0
  499. package/dist/core/types.js +2 -0
  500. package/dist/core/types.js.map +1 -0
  501. package/dist/core/untrusted-egress.d.ts +32 -0
  502. package/dist/core/untrusted-egress.d.ts.map +1 -0
  503. package/dist/core/untrusted-egress.js +49 -0
  504. package/dist/core/untrusted-egress.js.map +1 -0
  505. package/dist/core/untrusted-text.d.ts +64 -0
  506. package/dist/core/untrusted-text.d.ts.map +1 -0
  507. package/dist/core/untrusted-text.js +119 -0
  508. package/dist/core/untrusted-text.js.map +1 -0
  509. package/dist/core/warm-resume.d.ts +23 -0
  510. package/dist/core/warm-resume.d.ts.map +1 -0
  511. package/dist/core/warm-resume.js +28 -0
  512. package/dist/core/warm-resume.js.map +1 -0
  513. package/dist/core/with-retry.d.ts +43 -0
  514. package/dist/core/with-retry.d.ts.map +1 -0
  515. package/dist/core/with-retry.js +59 -0
  516. package/dist/core/with-retry.js.map +1 -0
  517. package/dist/core/workflow-journal-store.d.ts +44 -0
  518. package/dist/core/workflow-journal-store.d.ts.map +1 -0
  519. package/dist/core/workflow-journal-store.js +47 -0
  520. package/dist/core/workflow-journal-store.js.map +1 -0
  521. package/dist/core/workflow-run-store-contract.d.ts +31 -0
  522. package/dist/core/workflow-run-store-contract.d.ts.map +1 -0
  523. package/dist/core/workflow-run-store-contract.js +191 -0
  524. package/dist/core/workflow-run-store-contract.js.map +1 -0
  525. package/dist/core/workflow-run-store.d.ts +149 -0
  526. package/dist/core/workflow-run-store.d.ts.map +1 -0
  527. package/dist/core/workflow-run-store.js +110 -0
  528. package/dist/core/workflow-run-store.js.map +1 -0
  529. package/dist/engine/compaction/compaction.d.ts +139 -0
  530. package/dist/engine/compaction/compaction.d.ts.map +1 -0
  531. package/dist/engine/compaction/compaction.js +1030 -0
  532. package/dist/engine/compaction/compaction.js.map +1 -0
  533. package/dist/engine/compaction/utils.d.ts +45 -0
  534. package/dist/engine/compaction/utils.d.ts.map +1 -0
  535. package/dist/engine/compaction/utils.js +203 -0
  536. package/dist/engine/compaction/utils.js.map +1 -0
  537. package/dist/engine/execution-env/kill-tree.d.ts +20 -0
  538. package/dist/engine/execution-env/kill-tree.d.ts.map +1 -0
  539. package/dist/engine/execution-env/kill-tree.js +183 -0
  540. package/dist/engine/execution-env/kill-tree.js.map +1 -0
  541. package/dist/engine/execution-env/node-execution-env.d.ts +133 -0
  542. package/dist/engine/execution-env/node-execution-env.d.ts.map +1 -0
  543. package/dist/engine/execution-env/node-execution-env.js +1031 -0
  544. package/dist/engine/execution-env/node-execution-env.js.map +1 -0
  545. package/dist/engine/harness/agent-harness.d.ts +174 -0
  546. package/dist/engine/harness/agent-harness.d.ts.map +1 -0
  547. package/dist/engine/harness/agent-harness.js +1053 -0
  548. package/dist/engine/harness/agent-harness.js.map +1 -0
  549. package/dist/engine/harness/messages.d.ts +17 -0
  550. package/dist/engine/harness/messages.d.ts.map +1 -0
  551. package/dist/engine/harness/messages.js +122 -0
  552. package/dist/engine/harness/messages.js.map +1 -0
  553. package/dist/engine/harness/types.d.ts +713 -0
  554. package/dist/engine/harness/types.d.ts.map +1 -0
  555. package/dist/engine/harness/types.js +100 -0
  556. package/dist/engine/harness/types.js.map +1 -0
  557. package/dist/engine/llm/diagnostics.d.ts +23 -0
  558. package/dist/engine/llm/diagnostics.d.ts.map +1 -0
  559. package/dist/engine/llm/diagnostics.js +32 -0
  560. package/dist/engine/llm/diagnostics.js.map +1 -0
  561. package/dist/engine/llm/event-stream.d.ts +25 -0
  562. package/dist/engine/llm/event-stream.d.ts.map +1 -0
  563. package/dist/engine/llm/event-stream.js +103 -0
  564. package/dist/engine/llm/event-stream.js.map +1 -0
  565. package/dist/engine/llm/index.d.ts +12 -0
  566. package/dist/engine/llm/index.d.ts.map +1 -0
  567. package/dist/engine/llm/index.js +12 -0
  568. package/dist/engine/llm/index.js.map +1 -0
  569. package/dist/engine/llm/types.d.ts +753 -0
  570. package/dist/engine/llm/types.d.ts.map +1 -0
  571. package/dist/engine/llm/types.js +2 -0
  572. package/dist/engine/llm/types.js.map +1 -0
  573. package/dist/engine/llm/validation.d.ts +8 -0
  574. package/dist/engine/llm/validation.d.ts.map +1 -0
  575. package/dist/engine/llm/validation.js +318 -0
  576. package/dist/engine/llm/validation.js.map +1 -0
  577. package/dist/engine/loop/agent-loop.d.ts +74 -0
  578. package/dist/engine/loop/agent-loop.d.ts.map +1 -0
  579. package/dist/engine/loop/agent-loop.js +1490 -0
  580. package/dist/engine/loop/agent-loop.js.map +1 -0
  581. package/dist/engine/loop/runtime-deps.d.ts +17 -0
  582. package/dist/engine/loop/runtime-deps.d.ts.map +1 -0
  583. package/dist/engine/loop/runtime-deps.js +21 -0
  584. package/dist/engine/loop/runtime-deps.js.map +1 -0
  585. package/dist/engine/loop/types.d.ts +609 -0
  586. package/dist/engine/loop/types.d.ts.map +1 -0
  587. package/dist/engine/loop/types.js +2 -0
  588. package/dist/engine/loop/types.js.map +1 -0
  589. package/dist/engine/lsp/frame-decoder.d.ts +16 -0
  590. package/dist/engine/lsp/frame-decoder.d.ts.map +1 -0
  591. package/dist/engine/lsp/frame-decoder.js +53 -0
  592. package/dist/engine/lsp/frame-decoder.js.map +1 -0
  593. package/dist/engine/lsp/node-lsp-manager.d.ts +105 -0
  594. package/dist/engine/lsp/node-lsp-manager.d.ts.map +1 -0
  595. package/dist/engine/lsp/node-lsp-manager.js +343 -0
  596. package/dist/engine/lsp/node-lsp-manager.js.map +1 -0
  597. package/dist/engine/lsp/stdio-lsp-transport.d.ts +37 -0
  598. package/dist/engine/lsp/stdio-lsp-transport.d.ts.map +1 -0
  599. package/dist/engine/lsp/stdio-lsp-transport.js +185 -0
  600. package/dist/engine/lsp/stdio-lsp-transport.js.map +1 -0
  601. package/dist/engine/session/import-validate.d.ts +44 -0
  602. package/dist/engine/session/import-validate.d.ts.map +1 -0
  603. package/dist/engine/session/import-validate.js +92 -0
  604. package/dist/engine/session/import-validate.js.map +1 -0
  605. package/dist/engine/session/memory-repo.d.ts +25 -0
  606. package/dist/engine/session/memory-repo.d.ts.map +1 -0
  607. package/dist/engine/session/memory-repo.js +59 -0
  608. package/dist/engine/session/memory-repo.js.map +1 -0
  609. package/dist/engine/session/memory-storage.d.ts +14 -0
  610. package/dist/engine/session/memory-storage.d.ts.map +1 -0
  611. package/dist/engine/session/memory-storage.js +17 -0
  612. package/dist/engine/session/memory-storage.js.map +1 -0
  613. package/dist/engine/session/repo-utils.d.ts +11 -0
  614. package/dist/engine/session/repo-utils.d.ts.map +1 -0
  615. package/dist/engine/session/repo-utils.js +40 -0
  616. package/dist/engine/session/repo-utils.js.map +1 -0
  617. package/dist/engine/session/session.d.ts +34 -0
  618. package/dist/engine/session/session.d.ts.map +1 -0
  619. package/dist/engine/session/session.js +227 -0
  620. package/dist/engine/session/session.js.map +1 -0
  621. package/dist/engine/session/storage-base.d.ts +38 -0
  622. package/dist/engine/session/storage-base.d.ts.map +1 -0
  623. package/dist/engine/session/storage-base.js +157 -0
  624. package/dist/engine/session/storage-base.js.map +1 -0
  625. package/dist/engine/session/timestamps.d.ts +3 -0
  626. package/dist/engine/session/timestamps.d.ts.map +1 -0
  627. package/dist/engine/session/timestamps.js +15 -0
  628. package/dist/engine/session/timestamps.js.map +1 -0
  629. package/dist/engine/session/uuid.d.ts +2 -0
  630. package/dist/engine/session/uuid.d.ts.map +1 -0
  631. package/dist/engine/session/uuid.js +50 -0
  632. package/dist/engine/session/uuid.js.map +1 -0
  633. package/dist/index.d.ts +160 -0
  634. package/dist/index.d.ts.map +1 -0
  635. package/dist/index.js +374 -0
  636. package/dist/index.js.map +1 -0
  637. package/dist/internal/harness.d.ts +26 -0
  638. package/dist/internal/harness.d.ts.map +1 -0
  639. package/dist/internal/harness.js +24 -0
  640. package/dist/internal/harness.js.map +1 -0
  641. package/dist/internal/llm.d.ts +9 -0
  642. package/dist/internal/llm.d.ts.map +1 -0
  643. package/dist/internal/llm.js +8 -0
  644. package/dist/internal/llm.js.map +1 -0
  645. package/dist/orchestration/builtin-workflows.d.ts +44 -0
  646. package/dist/orchestration/builtin-workflows.d.ts.map +1 -0
  647. package/dist/orchestration/builtin-workflows.js +165 -0
  648. package/dist/orchestration/builtin-workflows.js.map +1 -0
  649. package/dist/orchestration/dev-vm-script-runner.d.ts +24 -0
  650. package/dist/orchestration/dev-vm-script-runner.d.ts.map +1 -0
  651. package/dist/orchestration/dev-vm-script-runner.js +106 -0
  652. package/dist/orchestration/dev-vm-script-runner.js.map +1 -0
  653. package/dist/orchestration/goal.d.ts +97 -0
  654. package/dist/orchestration/goal.d.ts.map +1 -0
  655. package/dist/orchestration/goal.js +248 -0
  656. package/dist/orchestration/goal.js.map +1 -0
  657. package/dist/orchestration/run-spec.d.ts +63 -0
  658. package/dist/orchestration/run-spec.d.ts.map +1 -0
  659. package/dist/orchestration/run-spec.js +274 -0
  660. package/dist/orchestration/run-spec.js.map +1 -0
  661. package/dist/orchestration/run-workflow-tool.d.ts +187 -0
  662. package/dist/orchestration/run-workflow-tool.d.ts.map +1 -0
  663. package/dist/orchestration/run-workflow-tool.js +612 -0
  664. package/dist/orchestration/run-workflow-tool.js.map +1 -0
  665. package/dist/orchestration/workflow-governance.d.ts +70 -0
  666. package/dist/orchestration/workflow-governance.d.ts.map +1 -0
  667. package/dist/orchestration/workflow-governance.js +176 -0
  668. package/dist/orchestration/workflow-governance.js.map +1 -0
  669. package/dist/orchestration/workflow-meta.d.ts +41 -0
  670. package/dist/orchestration/workflow-meta.d.ts.map +1 -0
  671. package/dist/orchestration/workflow-meta.js +426 -0
  672. package/dist/orchestration/workflow-meta.js.map +1 -0
  673. package/dist/orchestration/workflow-observe.d.ts +77 -0
  674. package/dist/orchestration/workflow-observe.d.ts.map +1 -0
  675. package/dist/orchestration/workflow-observe.js +177 -0
  676. package/dist/orchestration/workflow-observe.js.map +1 -0
  677. package/dist/orchestration/workflow-primitives.d.ts +31 -0
  678. package/dist/orchestration/workflow-primitives.d.ts.map +1 -0
  679. package/dist/orchestration/workflow-primitives.js +104 -0
  680. package/dist/orchestration/workflow-primitives.js.map +1 -0
  681. package/dist/orchestration/workflow-sandbox-conformance.d.ts +34 -0
  682. package/dist/orchestration/workflow-sandbox-conformance.d.ts.map +1 -0
  683. package/dist/orchestration/workflow-sandbox-conformance.js +301 -0
  684. package/dist/orchestration/workflow-sandbox-conformance.js.map +1 -0
  685. package/dist/orchestration/workflow-script-runner.d.ts +127 -0
  686. package/dist/orchestration/workflow-script-runner.d.ts.map +1 -0
  687. package/dist/orchestration/workflow-script-runner.js +48 -0
  688. package/dist/orchestration/workflow-script-runner.js.map +1 -0
  689. package/dist/orchestration/workflow-script-store.d.ts +99 -0
  690. package/dist/orchestration/workflow-script-store.d.ts.map +1 -0
  691. package/dist/orchestration/workflow-script-store.js +133 -0
  692. package/dist/orchestration/workflow-script-store.js.map +1 -0
  693. package/dist/orchestration/workflow-size-guideline.d.ts +50 -0
  694. package/dist/orchestration/workflow-size-guideline.d.ts.map +1 -0
  695. package/dist/orchestration/workflow-size-guideline.js +78 -0
  696. package/dist/orchestration/workflow-size-guideline.js.map +1 -0
  697. package/dist/orchestration/workflow.d.ts +624 -0
  698. package/dist/orchestration/workflow.d.ts.map +1 -0
  699. package/dist/orchestration/workflow.js +1596 -0
  700. package/dist/orchestration/workflow.js.map +1 -0
  701. package/dist/prompts/default.d.ts +474 -0
  702. package/dist/prompts/default.d.ts.map +1 -0
  703. package/dist/prompts/default.js +676 -0
  704. package/dist/prompts/default.js.map +1 -0
  705. package/dist/prompts/supervisor.d.ts +60 -0
  706. package/dist/prompts/supervisor.d.ts.map +1 -0
  707. package/dist/prompts/supervisor.js +162 -0
  708. package/dist/prompts/supervisor.js.map +1 -0
  709. package/dist/scenarios/env.d.ts +41 -0
  710. package/dist/scenarios/env.d.ts.map +1 -0
  711. package/dist/scenarios/env.js +65 -0
  712. package/dist/scenarios/env.js.map +1 -0
  713. package/dist/scenarios/full-body.d.ts +47 -0
  714. package/dist/scenarios/full-body.d.ts.map +1 -0
  715. package/dist/scenarios/full-body.js +36 -0
  716. package/dist/scenarios/full-body.js.map +1 -0
  717. package/dist/scenarios/scenario-registry.d.ts +107 -0
  718. package/dist/scenarios/scenario-registry.d.ts.map +1 -0
  719. package/dist/scenarios/scenario-registry.js +192 -0
  720. package/dist/scenarios/scenario-registry.js.map +1 -0
  721. package/dist/scenarios/teacher-quickstart.d.ts +41 -0
  722. package/dist/scenarios/teacher-quickstart.d.ts.map +1 -0
  723. package/dist/scenarios/teacher-quickstart.js +32 -0
  724. package/dist/scenarios/teacher-quickstart.js.map +1 -0
  725. package/dist/server/http.d.ts +36 -0
  726. package/dist/server/http.d.ts.map +1 -0
  727. package/dist/server/http.js +144 -0
  728. package/dist/server/http.js.map +1 -0
  729. package/dist/stores/file/checkpoint-store.d.ts +62 -0
  730. package/dist/stores/file/checkpoint-store.d.ts.map +1 -0
  731. package/dist/stores/file/checkpoint-store.js +250 -0
  732. package/dist/stores/file/checkpoint-store.js.map +1 -0
  733. package/dist/stores/file/file-snapshot-store.d.ts +43 -0
  734. package/dist/stores/file/file-snapshot-store.d.ts.map +1 -0
  735. package/dist/stores/file/file-snapshot-store.js +374 -0
  736. package/dist/stores/file/file-snapshot-store.js.map +1 -0
  737. package/dist/stores/file/fs-atomic.d.ts +95 -0
  738. package/dist/stores/file/fs-atomic.d.ts.map +1 -0
  739. package/dist/stores/file/fs-atomic.js +415 -0
  740. package/dist/stores/file/fs-atomic.js.map +1 -0
  741. package/dist/stores/file/index.d.ts +98 -0
  742. package/dist/stores/file/index.d.ts.map +1 -0
  743. package/dist/stores/file/index.js +109 -0
  744. package/dist/stores/file/index.js.map +1 -0
  745. package/dist/stores/file/memory-store.d.ts +95 -0
  746. package/dist/stores/file/memory-store.d.ts.map +1 -0
  747. package/dist/stores/file/memory-store.js +393 -0
  748. package/dist/stores/file/memory-store.js.map +1 -0
  749. package/dist/stores/file/session-policy-store.d.ts +24 -0
  750. package/dist/stores/file/session-policy-store.d.ts.map +1 -0
  751. package/dist/stores/file/session-policy-store.js +123 -0
  752. package/dist/stores/file/session-policy-store.js.map +1 -0
  753. package/dist/stores/file/session-store.d.ts +34 -0
  754. package/dist/stores/file/session-store.d.ts.map +1 -0
  755. package/dist/stores/file/session-store.js +175 -0
  756. package/dist/stores/file/session-store.js.map +1 -0
  757. package/dist/stores/file/tool-result-store.d.ts +23 -0
  758. package/dist/stores/file/tool-result-store.d.ts.map +1 -0
  759. package/dist/stores/file/tool-result-store.js +61 -0
  760. package/dist/stores/file/tool-result-store.js.map +1 -0
  761. package/dist/stores/file/workflow-journal-store.d.ts +36 -0
  762. package/dist/stores/file/workflow-journal-store.d.ts.map +1 -0
  763. package/dist/stores/file/workflow-journal-store.js +157 -0
  764. package/dist/stores/file/workflow-journal-store.js.map +1 -0
  765. package/dist/stores/file/workflow-run-store.d.ts +58 -0
  766. package/dist/stores/file/workflow-run-store.d.ts.map +1 -0
  767. package/dist/stores/file/workflow-run-store.js +178 -0
  768. package/dist/stores/file/workflow-run-store.js.map +1 -0
  769. package/dist/stores/pg.d.ts +210 -0
  770. package/dist/stores/pg.d.ts.map +1 -0
  771. package/dist/stores/pg.js +652 -0
  772. package/dist/stores/pg.js.map +1 -0
  773. package/dist/tools/fs/encoding.d.ts +51 -0
  774. package/dist/tools/fs/encoding.d.ts.map +1 -0
  775. package/dist/tools/fs/encoding.js +74 -0
  776. package/dist/tools/fs/encoding.js.map +1 -0
  777. package/dist/tools/fs/gh-rate-limit.d.ts +19 -0
  778. package/dist/tools/fs/gh-rate-limit.d.ts.map +1 -0
  779. package/dist/tools/fs/gh-rate-limit.js +35 -0
  780. package/dist/tools/fs/gh-rate-limit.js.map +1 -0
  781. package/dist/tools/fs/index.d.ts +246 -0
  782. package/dist/tools/fs/index.d.ts.map +1 -0
  783. package/dist/tools/fs/index.js +2130 -0
  784. package/dist/tools/fs/index.js.map +1 -0
  785. package/dist/tools/fs/pdf.d.ts +106 -0
  786. package/dist/tools/fs/pdf.d.ts.map +1 -0
  787. package/dist/tools/fs/pdf.js +178 -0
  788. package/dist/tools/fs/pdf.js.map +1 -0
  789. package/dist/tools/fs/repo-map.d.ts +15 -0
  790. package/dist/tools/fs/repo-map.d.ts.map +1 -0
  791. package/dist/tools/fs/repo-map.js +251 -0
  792. package/dist/tools/fs/repo-map.js.map +1 -0
  793. package/dist/tools/fs/safety.d.ts +168 -0
  794. package/dist/tools/fs/safety.d.ts.map +1 -0
  795. package/dist/tools/fs/safety.js +479 -0
  796. package/dist/tools/fs/safety.js.map +1 -0
  797. package/dist/tools/fs/search.d.ts +118 -0
  798. package/dist/tools/fs/search.d.ts.map +1 -0
  799. package/dist/tools/fs/search.js +650 -0
  800. package/dist/tools/fs/search.js.map +1 -0
  801. package/dist/tools/gitea-issue.d.ts +39 -0
  802. package/dist/tools/gitea-issue.d.ts.map +1 -0
  803. package/dist/tools/gitea-issue.js +91 -0
  804. package/dist/tools/gitea-issue.js.map +1 -0
  805. package/dist/tools/monitor.d.ts +64 -0
  806. package/dist/tools/monitor.d.ts.map +1 -0
  807. package/dist/tools/monitor.js +135 -0
  808. package/dist/tools/monitor.js.map +1 -0
  809. package/dist/tools/scheduler-tools.d.ts +48 -0
  810. package/dist/tools/scheduler-tools.d.ts.map +1 -0
  811. package/dist/tools/scheduler-tools.js +449 -0
  812. package/dist/tools/scheduler-tools.js.map +1 -0
  813. package/dist/tools/sql-adapters.d.ts +32 -0
  814. package/dist/tools/sql-adapters.d.ts.map +1 -0
  815. package/dist/tools/sql-adapters.js +31 -0
  816. package/dist/tools/sql-adapters.js.map +1 -0
  817. package/dist/tools/sql.d.ts +36 -0
  818. package/dist/tools/sql.d.ts.map +1 -0
  819. package/dist/tools/sql.js +131 -0
  820. package/dist/tools/sql.js.map +1 -0
  821. package/dist/tools/task-list.d.ts +26 -0
  822. package/dist/tools/task-list.d.ts.map +1 -0
  823. package/dist/tools/task-list.js +352 -0
  824. package/dist/tools/task-list.js.map +1 -0
  825. package/dist/tools/todo.d.ts +11 -0
  826. package/dist/tools/todo.d.ts.map +1 -0
  827. package/dist/tools/todo.js +126 -0
  828. package/dist/tools/todo.js.map +1 -0
  829. package/dist/tools/web.d.ts +59 -0
  830. package/dist/tools/web.d.ts.map +1 -0
  831. package/dist/tools/web.js +607 -0
  832. package/dist/tools/web.js.map +1 -0
  833. package/dist/tools/worktree.d.ts +88 -0
  834. package/dist/tools/worktree.d.ts.map +1 -0
  835. package/dist/tools/worktree.js +434 -0
  836. package/dist/tools/worktree.js.map +1 -0
  837. package/docs/A1-ATTRIBUTION-ROUND1-2026-07-09.md +181 -0
  838. package/docs/AB-ORACLE-GATE-VERDICT-2026-07-10.md +100 -0
  839. package/docs/ANCHOR-GAP-INVENTORY-2026-07-09.md +143 -0
  840. package/docs/ARCHITECTURE.md +125 -0
  841. package/docs/BUGHUNT-2026-07-05-NIGHT.md +98 -0
  842. package/docs/BUILD.md +63 -0
  843. package/docs/CANCEL-ASYNC-ATTRIBUTION-2026-07-09.md +98 -0
  844. package/docs/CC-198-VS-201-DRIFT-2026-07-09.md +70 -0
  845. package/docs/CC-BASELINE-FAKE-ZERO-AUDIT-2026-07-09.md +51 -0
  846. package/docs/CC-DRIFT-198-206-AGENT-TYPES-2026-07-10.md +82 -0
  847. package/docs/CC-DRIFT-198-206-CHANGELOG-2026-07-10.md +82 -0
  848. package/docs/CC-DRIFT-198-206-REMINDERS-2026-07-10.md +96 -0
  849. package/docs/CC-DRIFT-198-206-ROADMAP-2026-07-10.md +110 -0
  850. package/docs/CC-DRIFT-198-206-TOOL-INVENTORY-2026-07-10.md +53 -0
  851. package/docs/CC-DRIFT-198-206-USAGE-CONSTANTS-2026-07-10.md +64 -0
  852. package/docs/CC-DRIFT-198-206-WORKFLOW-2026-07-10.md +83 -0
  853. package/docs/CC-PARITY-CHECKLIST.md +220 -0
  854. package/docs/CC-PARITY-DEEP-SWEEP-2026-07-07.md +149 -0
  855. package/docs/CC-SUBAGENT-PROMPT-STUDY-2026-07-09.md +219 -0
  856. package/docs/CC-TASK-REMINDER-CADENCE-STUDY-2026-07-09.md +396 -0
  857. package/docs/CC-TOOL-PARITY-SWEEP-2026-07.md +56 -0
  858. package/docs/CC-TOOL-PROMPT-DEEP-DIFF-2026-07-08.md +274 -0
  859. package/docs/CC-TOOLSURFACE-DEEP-DIVE-2026-07-07.md +197 -0
  860. package/docs/CC206-OBSERVER-ANCHORS-2026-07-11.md +463 -0
  861. package/docs/CC207-CORE-SWEEP-BACKLOG-2026-07-12.md +155 -0
  862. package/docs/CENTER-CONTROL-PLANE-SEAM.md +86 -0
  863. package/docs/CLEANUP-CONTRACT-ANCHOR-2026-07-09.md +83 -0
  864. package/docs/COLD-START-RSI-2026-07-09.md +72 -0
  865. package/docs/COMPACTION-LIVE-AUDIT-2026-07-09.md +114 -0
  866. package/docs/CONTEXT-lifecycle-extension-points-and-stop-attribution.md +71 -0
  867. package/docs/COREWARS-POLYGLOT-TRIAGE-2026-07-09.md +85 -0
  868. package/docs/DEADTARGET-OVERFULL-HBOX-2026-07-10.md +92 -0
  869. package/docs/DEADTARGET-PATH-TRACING-REVERSE-2026-07-10.md +87 -0
  870. package/docs/DEADTARGET-WINNING-AVG-COREWARS-2026-07-10.md +96 -0
  871. package/docs/DEEPSEEK-API-LIMITS-PROBE-2026-07-09.md +118 -0
  872. package/docs/DESIGN-140-MOCK-VERIFY-2026-07-11.md +79 -0
  873. package/docs/DESIGN-140-VERIFICATION-2026-07-11.md +43 -0
  874. package/docs/DESIGN-DRAFT-workflow-collab-2026-07-11.md +56 -0
  875. package/docs/DESIGN-ORACLE-GROUNDING-GATE-2026-07-10.md +167 -0
  876. package/docs/DESIGN-TFRAG-RECONCILE-SCAFFOLD-2026-07-09.md +102 -0
  877. package/docs/EXP-PA2-PE-DESIGN-2026-07-11.md +220 -0
  878. package/docs/EXT-DOGFOOD-2026-07-12.md +50 -0
  879. package/docs/FINAL-VERIFY-SURFACE-AUDIT-2026-07-09.md +44 -0
  880. package/docs/FRAG-RECON-INVESTIGATION-2026-07-09.md +183 -0
  881. package/docs/HANDOFF.md +121 -0
  882. package/docs/KNOWN-ISSUES.md +96 -0
  883. package/docs/LEGW-WINDOW-TAX-2026-07-10.md +82 -0
  884. package/docs/LIVE-PROBE-BATCH-2026-07-11.md +207 -0
  885. package/docs/M2-CERT-ATTRIBUTION-2026-07-10.md +61 -0
  886. package/docs/M25-LEG-VARIANCE-ATTRIBUTION-2026-07-10.md +81 -0
  887. package/docs/MAILMAN-TIMEOUT-ATTRIBUTION-2026-07-10.md +88 -0
  888. package/docs/MEMORY-BACKEND-DIALECT-NOTES.md +69 -0
  889. package/docs/MTEB-ESCAPE-HATCH-ATTRIBUTION-2026-07-09.md +57 -0
  890. package/docs/MTEB-LEADERBOARD-ATTRIBUTION-2026-07-10.md +134 -0
  891. package/docs/ORACLE-GATE-NEGATIVE-SAMPLE-2026-07-11.md +28 -0
  892. package/docs/PARITY-CONTEXT-TRANSACTIONS-2026-07-10.md +67 -0
  893. package/docs/PARITY-PROGRESS-MATRIX-2026-07-10.md +37 -0
  894. package/docs/PARITY-SPOT-AGENT-TYPES-2026-07-10.md +70 -0
  895. package/docs/PARITY-SPOT-REMINDERS-2026-07-10.md +144 -0
  896. package/docs/PARITY-SPOT-TOOL-INVENTORY-2026-07-10.md +61 -0
  897. package/docs/PARITY-SPOT-USAGE-CONSTANTS-2026-07-10.md +95 -0
  898. package/docs/PARITY-SPOT-WORKFLOW-2026-07-10.md +93 -0
  899. package/docs/PASSWORD-RECOVERY-PANEL-VERDICT-2026-07-10.md +62 -0
  900. package/docs/R8-R9-FINALIZE-COORDINATION-2026-07-09.md +124 -0
  901. package/docs/REPL-CODE-MODE-EVALUATION-2026-07-10.md +187 -0
  902. package/docs/REPORT-1249-TARGETED.md +48 -0
  903. package/docs/RESEARCH-3P-MEMORY-SWAP-2026-07-12.md +273 -0
  904. package/docs/ROADMAP.md +111 -0
  905. package/docs/RSI-CLOUD-DEPLOY-2026-07-06.md +289 -0
  906. package/docs/RSI-PROCESS-AI-COLDSTART-2026-07-11.md +68 -0
  907. package/docs/S18-THOROUGHNESS-AUDIT-2026-07-09.md +113 -0
  908. package/docs/SERVICE-INTEGRATION-GUIDE.md +298 -0
  909. package/docs/SUBAGENT-STREAM-RESILIENCE-PARITY-2026-07-10.md +118 -0
  910. package/docs/SWEBENCH-PRO-RECON-2026-07-11.md +31 -0
  911. package/docs/TB-EFFICIENCY-TELEMETRY-2026-07-08.md +114 -0
  912. package/docs/TB-FAILURE-AUTOPSY-2026-07-05-RERUN.md +67 -0
  913. package/docs/TB-FAIRNESS-AUDIT-2026-07-08.md +141 -0
  914. package/docs/TB-FULL-1257-2026-07-08.md +77 -0
  915. package/docs/TB-LEG-GAP-ATTRIBUTION-1261-1263-2026-07-11.md +154 -0
  916. package/docs/TB-REGRESSION-DAEMON-KILL-2026-07-08.md +58 -0
  917. package/docs/TB-RSI-CROSSCHECK-2026-07-06.md +68 -0
  918. package/docs/TB-RSI-LEDGER.md +30 -0
  919. package/docs/TB-STABLE-SET-2026-07-08.md +127 -0
  920. package/docs/TB21-RECON-2026-07-11.md +28 -0
  921. package/docs/TEST-DESIGN-BATCH-1-2-3.md +97 -0
  922. package/docs/THIRD-PARTY-INTEGRATION.md +45 -0
  923. package/docs/TOKEN-ESTIMATE-CALIBRATION-LIVE-2026-07-09.md +102 -0
  924. package/docs/audit-2026-06-10-/347/254/254/344/272/214/350/275/256-/347/251/272/347/231/275/345/214/272/344/270/216/345/277/230/346/216/245/347/272/277.md +147 -0
  925. package/docs/audit-2026-06-10-/350/256/241/347/256/227bug/346/211/253/346/217/217.md +163 -0
  926. package/docs/audit-2026-06-11-/344/277/256/345/244/215/345/244/215/345/256/241/344/270/216/345/233/236/345/275/222/344/270/223/346/211/253.md +95 -0
  927. package/docs/audit-2026-06-12-design71-P1/346/275/234/344/274/217/351/235/242/350/243/201/345/206/263/344/270/216/345/220/236/351/224/231/345/256/241/350/256/241.md +45 -0
  928. package/docs/audit-2026-06-12-/345/205/254/345/274/200/346/227/213/351/222/256/346/264/273/346/200/247/344/270/216vendored/346/255/273/350/267/257.md +63 -0
  929. package/docs/audit-2026-06-15/ADDENDUM-second-pass.md +88 -0
  930. package/docs/audit-2026-06-15/ARCHITECTURE-AND-ROADMAP.md +187 -0
  931. package/docs/audit-2026-06-15/DOC-CORRECTIONS.md +105 -0
  932. package/docs/audit-2026-06-15/INDEX.md +49 -0
  933. package/docs/audit-2026-06-15/ORCHESTRATION-STATUS.md +98 -0
  934. package/docs/audit-2026-06-15/PRODUCTION-ISSUES.md +189 -0
  935. package/docs/audit-2026-06-15/REFERENCES-literature.md +139 -0
  936. package/docs/audit-2026-06-15/VENDOR-REFACTOR-PLAN.md +96 -0
  937. package/docs/cc-probe-198/README.md +72 -0
  938. package/docs/cc-probe-198/STABILITY-AUDIT.md +118 -0
  939. package/docs/cc-probe-198/live-schema-monitor-worktree-2026-07-09.json +56 -0
  940. package/docs/cc-probe-198/mount-variants.json +536 -0
  941. package/docs/cc-probe-198/plan-mode-run.json +1 -0
  942. package/docs/cc-probe-198/probe-bash-bg.json +224 -0
  943. package/docs/cc-probe-198/probe-edit-mismatch.json +120 -0
  944. package/docs/cc-probe-198/probe-read-missing.json +62 -0
  945. package/docs/cc-probe-198/probe-search-empty.json +127 -0
  946. package/docs/cc-probe-198/probe-task-family.json +227 -0
  947. package/docs/cc-probe-198/probes.status +6 -0
  948. package/docs/cc-probe-198/raw-capture-interactive.json +948 -0
  949. package/docs/cc-probe-198/raw-capture-print.json +787 -0
  950. package/docs/cc-probe-198/raw-capture2-interactive.json +948 -0
  951. package/docs/cc-probe-198/raw-capture2-print.json +787 -0
  952. package/docs/cc-probe-198/system-prompt.txt +135 -0
  953. package/docs/cc-probe-198/tools-array.json +962 -0
  954. package/docs/durability-boundary.md +63 -0
  955. package/docs/fix-2026-06-10-/350/256/241/347/256/227bug/344/277/256/345/244/215-search/346/211/271.md +75 -0
  956. package/docs/fix-2026-06-11-/347/254/254/344/272/214/350/275/256-/344/277/256/345/244/215-search/346/211/271.md +62 -0
  957. package/docs/parity-sweep/REPORT-DYNAMIC.md +97 -0
  958. package/docs/parity-sweep/REPORT-STATIC-GGB.md +127 -0
  959. package/docs/parity-sweep/REPORT-STATIC-RWE.md +133 -0
  960. package/docs/vendor-history.md +385 -0
  961. package/docs/vendored-upstream-diff-2026-07.md +83 -0
  962. package/package.json +70 -0
@@ -0,0 +1,567 @@
1
+ import { homedir } from "node:os";
2
+ import { isAbsolute, join, sep } from "node:path";
3
+ import { BASH_READONLY_DEFAULT_ALLOW, parseLeadingCommandName } from "../tools/fs/index.js";
4
+ import { canonicalToolName } from "./tool-name-aliases.js";
5
+ /** The human/model-readable text of a decision: `message` wins, falling back to the legacy `reason`. */
6
+ export function decisionText(d) {
7
+ return d.message ?? d.reason;
8
+ }
9
+ const ALLOW = { action: "allow" };
10
+ /**
11
+ * Resolve `p`, but if it hasn't settled within `ms`, resolve with `onTimeout()` instead. A
12
+ * **rejection of `p` propagates** (rejects the returned promise) — it is NOT mislabeled as a timeout,
13
+ * so a real error (e.g. a throwing `approve`) surfaces with its true cause instead of being silently
14
+ * turned into the timeout value.
15
+ */
16
+ function withTimeout(p, ms, onTimeout) {
17
+ if (!ms || ms <= 0) {
18
+ return p;
19
+ }
20
+ return new Promise((resolve, reject) => {
21
+ let settled = false;
22
+ const settle = (fn, v) => {
23
+ if (settled)
24
+ return;
25
+ settled = true;
26
+ clearTimeout(timer);
27
+ fn(v);
28
+ };
29
+ // Compute `onTimeout()` lazily, only when the timeout actually wins — never eagerly as a settle
30
+ // argument (which would run its side effects even on the path where `p` already settled).
31
+ const timer = setTimeout(() => {
32
+ if (settled)
33
+ return;
34
+ settle(resolve, onTimeout());
35
+ }, ms);
36
+ timer.unref?.();
37
+ p.then((v) => settle(resolve, v), (e) => settle(reject, e));
38
+ });
39
+ }
40
+ /**
41
+ * Name-based allow/deny. `deny` always wins. If `allow` is provided, only those tools are permitted
42
+ * (everything else denied). Without `allow`, everything not in `deny` is permitted.
43
+ */
44
+ export function createAllowDenyPolicy(opts) {
45
+ const allow = opts.allow ? new Set(opts.allow.map(canonicalToolName)) : undefined;
46
+ const deny = new Set((opts.deny ?? []).map(canonicalToolName));
47
+ return {
48
+ check(req) {
49
+ // durable compat: a resumed checkpoint can carry a pre-rename tool name; the sets hold the new (CC) names,
50
+ // so canonicalize before lookup (identity for live new names). See tool-name-aliases.ts.
51
+ const toolName = canonicalToolName(req.toolName);
52
+ if (deny.has(toolName)) {
53
+ return { action: "deny", reason: `tool "${req.toolName}" is denied by policy` };
54
+ }
55
+ if (allow && !allow.has(toolName)) {
56
+ return { action: "deny", reason: `tool "${req.toolName}" is not in the allowlist` };
57
+ }
58
+ return ALLOW;
59
+ },
60
+ };
61
+ }
62
+ /**
63
+ * Human-in-the-loop approval for selected tools. Tools in `requireApproval` call `approve(req)` and
64
+ * are allowed only if it resolves true; tools in `deny` are always blocked; everything else is allowed
65
+ * (override with `denyByDefault: true` to allow only `requireApproval` + an explicit `autoAllow`).
66
+ */
67
+ export function createApprovalPolicy(opts) {
68
+ const need = new Set(opts.requireApproval.map(canonicalToolName));
69
+ const deny = new Set((opts.deny ?? []).map(canonicalToolName));
70
+ const auto = new Set((opts.autoAllow ?? []).map(canonicalToolName));
71
+ return {
72
+ async check(req, signal) {
73
+ // durable compat: canonicalize a possibly-pre-rename persisted tool name before set lookups (identity for new).
74
+ const toolName = canonicalToolName(req.toolName);
75
+ if (deny.has(toolName)) {
76
+ return { action: "deny", reason: `tool "${req.toolName}" is denied by policy` };
77
+ }
78
+ if (need.has(toolName)) {
79
+ if (signal?.aborted) {
80
+ return { action: "deny", reason: `approval aborted for "${req.toolName}" (task ended)` };
81
+ }
82
+ let ok;
83
+ try {
84
+ ok = await withTimeout(Promise.resolve(opts.approve(req, signal)), opts.approvalTimeoutMs, () => false);
85
+ }
86
+ catch (err) {
87
+ // A throwing `approve` is fail-closed (deny) but surfaces the real cause — not hidden as a timeout.
88
+ return {
89
+ action: "deny",
90
+ reason: `approval errored for "${req.toolName}": ${err instanceof Error ? err.message : String(err)}`,
91
+ };
92
+ }
93
+ return ok ? ALLOW : { action: "deny", reason: `approval denied for "${req.toolName}"` };
94
+ }
95
+ if (opts.denyByDefault && !auto.has(toolName)) {
96
+ return { action: "deny", reason: `tool "${req.toolName}" requires explicit allow` };
97
+ }
98
+ return ALLOW;
99
+ },
100
+ };
101
+ }
102
+ /**
103
+ * Combine policies with the three-state fold **deny > ask > allow** (design/37): the WORST outcome
104
+ * across all policies wins. A `deny` short-circuits (nothing can override it); an `ask` does NOT
105
+ * short-circuit — scanning continues, because a later policy may still `deny` (which outranks ask).
106
+ * With no deny, the first `ask` wins; with neither, `allow`.
107
+ *
108
+ * **Idempotency requirement:** because the fold continues past an `ask` to look for a later `deny`, a
109
+ * policy's `check()` can be invoked even after an earlier policy returned `ask`. `check()` MUST be
110
+ * idempotent — repeated calls with the same {@link ToolCallRequest} return the same decision and
111
+ * accumulate no side effects (e.g. don't fire a duplicate approval notification on each call).
112
+ */
113
+ export function combinePolicies(...policies) {
114
+ return {
115
+ async check(req, signal) {
116
+ let asked;
117
+ // A-1 (round-2 audit): an `allow{updatedInput}` rewrite (redact a secret, clamp a path) must NOT be
118
+ // dropped — the twin of the 1.65 single-policy `runToolGate` fix, missed on the combine path. Cascade
119
+ // the rewritten args into the NEXT policy (so a later policy audits the redacted args, not stale ones)
120
+ // and carry the latest rewrite out instead of returning bare ALLOW. Priority is unchanged: deny > ask
121
+ // > allow. When an `ask` outranks a later rewrite, the rewrite is carried OUT on the ask itself
122
+ // (`ask.updatedInput`, now part of the type) so the redaction survives human approval — runToolGate's
123
+ // `policyRewrite` captures it on the ask path (round-2 council confirmed dropping it was a real bug).
124
+ let current = req;
125
+ let rewrite;
126
+ for (const p of policies) {
127
+ const d = await p.check(current, signal);
128
+ if (d.action === "deny") {
129
+ // Worst outcome — short-circuit. 1.256 复审 MED-2: carry the ACCUMULATED rewrite out on the
130
+ // deny (an earlier policy redacted, this one denies) so the deny observer's payload shows
131
+ // the final post-rewrite args — the payload contract says "terminal, post-rewrite", and
132
+ // returning the bare deny here silently reverted it to the un-redacted originals.
133
+ return rewrite?.updatedInput !== undefined ? { ...d, updatedInput: rewrite.updatedInput } : d;
134
+ }
135
+ // R-3 (round-3 council): BOTH ask and allow may carry `updatedInput` — cascade it into `current` so
136
+ // subsequent policies audit the redacted args (not stale ones), and remember it as the LATEST
137
+ // rewrite (a later policy's redaction must not be lost behind an earlier ask/allow). `asked` still
138
+ // records the first ask for the deny>ask>allow priority; the rewrite tracking is independent of it.
139
+ if (d.updatedInput !== undefined) {
140
+ current = { ...current, args: d.updatedInput };
141
+ rewrite = d;
142
+ }
143
+ if (d.action === "ask" && !asked) {
144
+ asked = d; // remember the first ask, but keep scanning for a deny that would outrank it
145
+ }
146
+ }
147
+ // An ask carries the LATEST accumulated rewrite forward so a redaction isn't lost when the human
148
+ // approves (the most recent rewrite wins — it audited the freshest args).
149
+ if (asked) {
150
+ const merged = rewrite?.updatedInput;
151
+ return merged !== undefined ? { ...asked, updatedInput: merged } : asked;
152
+ }
153
+ return rewrite ?? ALLOW;
154
+ },
155
+ };
156
+ }
157
+ /** The shell tools whose `{ command }` arg a coarse command-name policy parses. Other tools are out of scope. */
158
+ const COARSE_SHELL_TOOLS = ["Bash"];
159
+ /**
160
+ * design/center §10 — a COARSE allow/deny gate keyed on the LEADING command NAME (`argv[0]`) of a single
161
+ * simple shell command. It reuses the ONE shared simple-command parser
162
+ * ({@link import("../tools/fs/index.js").parseLeadingCommandName}) — it does NOT re-implement argv[0] parsing
163
+ * (a second parser would drift and open a bypass). For a `bash`/`bash_readonly` call it extracts the leading
164
+ * command name and:
165
+ * - if the name is in `deny` → `deny` (deny-wins, matching {@link createAllowDenyPolicy}; NOT last-match-wins,
166
+ * which would fight {@link combinePolicies}'s deny>ask>allow fold);
167
+ * - else if `allow` is provided and the name is NOT in it → `defaultAction` (`"ask"` default, or `"deny"`);
168
+ * - else → `allow`.
169
+ * A command the parser cannot reduce to a single bare name (it has shell operators / a path-prefix / a leading
170
+ * env-assignment) is treated by `defaultAction` (fail-toward-gate): such a command is exactly what would bypass
171
+ * an argv[0] filter, so it should not silently `allow`. NON-shell tools are out of scope → `allow` (this gate
172
+ * only speaks about shell command names; compose it with other policies for the rest).
173
+ *
174
+ * **core ships NO opinionated command list** — only this mechanism. The actual `allow`/`deny` rule set is
175
+ * injected by the profile/config/deployment.
176
+ *
177
+ * ⚠️ **NOT A SANDBOX — coarse filter / defense-in-depth only.** This matches `argv[0]` NAME and nothing else,
178
+ * so the bypass surface is large and the gate MUST NOT be relied on as containment:
179
+ * - command substitution / subshells (`$(curl …)`, backticks), pipes, redirects, `;`/`&&` chaining — all
180
+ * rejected as un-parseable here (→ `defaultAction`), so they don't sneak past `allow`, but that is a GATE
181
+ * not a guarantee of safety;
182
+ * - an indirection wrapper runs an arbitrary inner program under an allowlisted `argv[0]`: `sh -c '…'`,
183
+ * `env FOO=bar curl …`, `sudo rm …`, `timeout 5 curl …`, `xargs curl`, `find . -exec rm {} \;`,
184
+ * `python -c '…'`, `npm run <script>`, `git <subcommand>` — the inner action is INVISIBLE to an
185
+ * argv[0]-name filter. Allowlisting any such wrapper effectively allowlists everything it can launch.
186
+ * Real isolation is the deployment's sandboxed `executionEnv` (a remote/E2B container with no egress, a
187
+ * read-only FS, dropped capabilities). Use this only as a cheap first-line coarse filter layered over that.
188
+ *
189
+ * 🪤 **TRAP #1 — `TaskSpec.toolPolicy` OVERRIDES (does not merge) `RunnerDeps.toolPolicy`.** A consumer that
190
+ * sets `TaskSpec.toolPolicy = createCoarseCommandNamePolicy(…)` directly **silently discards the deployment's
191
+ * baseline policy** (the runner does `spec.toolPolicy ?? deps.toolPolicy`). To LAYER this on top of a baseline
192
+ * you MUST compose explicitly: `combinePolicies(deploymentBaseline, createCoarseCommandNamePolicy(…))`
193
+ * (deny-wins — both policies' denies still fire). {@link tightenTaskSpec} does this for you.
194
+ *
195
+ * 🪤 **TRAP #2 — under `TaskSpec.shellGate: "classify"`, a plain `ask` from this policy is promoted to a
196
+ * NON-budgetable `irreversible_ask`.** `shellGate:"classify"` statically marks `bash` `irreversibility:"maybe"`;
197
+ * the safety gate keys the checkpoint axis on that STATIC tool mark (not on `decisionReason`), so a `bash`
198
+ * command that doesn't prove reversible suspends as `irreversible_ask` — which a budget-aware escalation
199
+ * resolver will NEVER auto-approve. Net: combining this policy's `ask` with `shellGate:"classify"` does NOT
200
+ * give you a budgetable normal-ask on `bash`; it gives a hard human-approval suspend. Choose `shellGate` and a
201
+ * `defaultAction:"ask"` deliberately.
202
+ */
203
+ export function createCoarseCommandNamePolicy(opts) {
204
+ const allow = opts.allow ? new Set(opts.allow) : undefined;
205
+ const deny = new Set(opts.deny ?? []);
206
+ const shellTools = new Set(opts.tools ?? COARSE_SHELL_TOOLS);
207
+ const defaultAction = opts.defaultAction ?? "ask";
208
+ const fallback = (reason) => defaultAction === "deny"
209
+ ? { action: "deny", reason, decisionReason: "rule" }
210
+ : { action: "ask", message: reason, decisionReason: "rule" };
211
+ return {
212
+ check(req) {
213
+ // Out of scope for non-shell tools: this gate only speaks about shell command names.
214
+ if (!shellTools.has(req.toolName))
215
+ return ALLOW;
216
+ const command = req.args?.command;
217
+ if (typeof command !== "string") {
218
+ // Can't even read a command string → fail toward the gate (don't silent-allow).
219
+ return fallback(`tool "${req.toolName}" call has no parseable command string`);
220
+ }
221
+ const parsed = parseLeadingCommandName(command);
222
+ if ("reject" in parsed) {
223
+ // Un-parseable (operators / path-prefix / env-assignment) = exactly the argv[0]-bypass surface →
224
+ // route through defaultAction rather than allow.
225
+ return fallback(`command is not a single simple command (${parsed.reject})`);
226
+ }
227
+ if (deny.has(parsed.name)) {
228
+ return { action: "deny", reason: `command "${parsed.name}" is denied by policy`, decisionReason: "rule" };
229
+ }
230
+ if (allow && !allow.has(parsed.name)) {
231
+ return fallback(`command "${parsed.name}" is not in the allowlist`);
232
+ }
233
+ return ALLOW;
234
+ },
235
+ };
236
+ }
237
+ // ─── CC 2.1.205/206 auto-mode safety-rule parity (feat(parity-206)) ─────────────────────────────────────────
238
+ //
239
+ // Two rules ported from the CC 2.1.206 auto-mode classifier (bundle-verified, cc206-bundle.js):
240
+ //
241
+ // 1. "Session Transcript Tampering" (206 @~14268700): «Writing to a Claude Code session transcript (the
242
+ // session `.jsonl` history files under `~/.claude/projects/` or the equivalent configured config dir) —
243
+ // directly or through shell commands — or forging or altering classifier meta lines … The transcript is
244
+ // harness-written session state, not an agent working file … Reading transcripts is routine and not this
245
+ // rule.» → {@link createTranscriptIntegrityPolicy}, keyed on SEMA's real transcript location
246
+ // (`$AGENT_DATA_DIR ?? ~/.ai-agent` + `/sessions/<sessionId>.jsonl`, stores/file/session-store.ts) — NOT
247
+ // CC's path.
248
+ //
249
+ // 2. "Unverifiable Deletion Target" (206 @~14248800): «A recursive, forced delete — `rm -rf`/`-fr`/`-Rf`,
250
+ // `Remove-Item -Recurse -Force`, or an equivalent … — whose target is a shell variable (`$VAR`, `${VAR}`)
251
+ // or a glob rooted at one … whose value cannot be derived from anything in this transcript: no in-window
252
+ // assignment … The value came only from earlier command output the classifier never sees, so the blast
253
+ // radius is unknowable — an empty or unexpected `$VAR` turns `rm -rf "$VAR"/*` into a `$HOME` or
254
+ // filesystem-root wipe. Fail closed. … the agent re-runs the delete with the resolved literal path written
255
+ // into the command itself … so the target can be verified» → {@link createUnverifiableDeletePolicy}.
256
+ //
257
+ // DECISION MAPPING (mode surface reviewed): sema has no CC four-state permission mode in core — "auto/bypass
258
+ // mode" here is a headless or `onAsk:"allow"` deployment. CC says the rule «cannot be auto-allowed by a
259
+ // permission rule», but a sema `ask` WOULD be auto-allowed under `onAsk:"allow"` (resolveAsk). So both rules
260
+ // return **deny** (`decisionReason:"safety"`): in the `combinePolicies` deny>ask>allow fold a deny
261
+ // short-circuits and no caller allow/ask/onAsk can override it — the "cannot be auto-allowed" clause becomes
262
+ // structural. Each deny message carries the CC-sanctioned self-serve remediation (rule 2: re-run with the
263
+ // resolved literal path / assign the variable in the same command), so an agent recovers in one turn.
264
+ //
265
+ // ⚠️ Like every argv/text-level gate in this file: COARSE, fail-closed, defense-in-depth — NOT a sandbox.
266
+ // Real containment stays the deployment's executionEnv boundary.
267
+ /** Default well-known-safe variable roots for {@link createUnverifiableDeletePolicy} (the CC rule's
268
+ * "well-known-safe temp pattern" carve-out): `rm -rf "$TMPDIR"/<literal>` does not fire. */
269
+ const UNVERIFIABLE_DELETE_SAFE_VARS = ["TMPDIR"];
270
+ /** Wrapper argv[0]s skipped before the `rm` detection (a wrapper/compound keyword must not hide the delete:
271
+ * `sudo rm -rf $X`, `if …; then rm -rf $X; fi`, `while …; do rm -rf $X; done`). */
272
+ const DELETE_WRAPPERS = new Set(["sudo", "command", "nohup", "time", "do", "then", "else"]);
273
+ /** Statement splitter for the coarse shell scan: `;` `&`/`&&` `|`/`||` and newlines terminate a
274
+ * simple-command window. Parens are NOT split on (that would destroy the `$(…)` substitution marker a
275
+ * target check must see); they are stripped at the token level instead. Coarser than a real shell parser
276
+ * ON PURPOSE — mangling can only cause a MISSED allow (fail-closed direction) on well-formed deletes. */
277
+ const STATEMENT_SPLIT = /[;&|\n]+/;
278
+ /** Strip shell quoting and grouping punctuation off a token edge for NAME comparisons (`(rm` → `rm`). */
279
+ const stripTokenEdges = (t) => t.replace(/^[("'{]+|[)"'}]+$/g, "");
280
+ /**
281
+ * Scan a (possibly compound) shell command for a recursive+forced delete whose target cannot be resolved from
282
+ * the command text itself — the deterministic sema port of CC 2.1.206 "Unverifiable Deletion Target".
283
+ * Returns a human/model-readable description of the first offending target, or `undefined` when clean.
284
+ *
285
+ * Fires on: `rm` with recursive (`-r`/`-R`/`--recursive`) AND force (`-f`/`--force`) flags whose target
286
+ * contains command substitution, a positional/special parameter, or a variable with NO in-window assignment
287
+ * (`VAR=…`, `export VAR=…`, `read VAR`, `for VAR in …` earlier in the SAME command string — our verification
288
+ * window is the single command, stricter than CC's whole-transcript window); `… | xargs rm -rf` (the target
289
+ * comes from pipe output no gate can see); and `Remove-Item -Recurse -Force` with a `$` target.
290
+ * Does NOT fire on: literal paths (`rm -rf ./node_modules`), in-window-assigned variables, or
291
+ * `$TMPDIR/<literal>` (safe-var carve-out; a glob after the safe var still fires).
292
+ * Out of scope (different CC rules, not this port): `find -delete` sweeps, literal-path destruction.
293
+ *
294
+ * Exported for tests.
295
+ */
296
+ export function findUnverifiableRecursiveDelete(command, safeVars = new Set(UNVERIFIABLE_DELETE_SAFE_VARS)) {
297
+ const assigned = new Set();
298
+ const statements = command.split(STATEMENT_SPLIT);
299
+ for (const stmt of statements) {
300
+ const tokens = stmt.trim().split(/\s+/).filter(Boolean);
301
+ let i = 0;
302
+ // Leading env-assignments (`FOO=bar cmd`) both count as in-window assignments and are skipped.
303
+ while (i < tokens.length && /^[A-Za-z_][A-Za-z0-9_]*=/.test(tokens[i])) {
304
+ assigned.add(tokens[i].slice(0, tokens[i].indexOf("=")));
305
+ i++;
306
+ }
307
+ // Wrapper prefixes must not hide the delete (`sudo rm -rf …`, `timeout 5 rm -rf …`, `then rm -rf …`).
308
+ while (i < tokens.length) {
309
+ const t = stripTokenEdges(tokens[i]);
310
+ if (DELETE_WRAPPERS.has(t)) {
311
+ i++;
312
+ continue;
313
+ }
314
+ if (t === "timeout" && i + 1 < tokens.length) {
315
+ i += 2; // `timeout <duration>` consumes its duration argument
316
+ continue;
317
+ }
318
+ break;
319
+ }
320
+ if (i >= tokens.length)
321
+ continue;
322
+ const head = stripTokenEdges(tokens[i]);
323
+ const headName = head.split("/").pop() ?? head;
324
+ // In-window assignment forms make a later `$VAR` target verifiable (CC: "no in-window assignment").
325
+ let m;
326
+ if ((m = stmt.trim().match(/^(?:export\s+)?([A-Za-z_][A-Za-z0-9_]*)=/)))
327
+ assigned.add(m[1]);
328
+ if (headName === "read") {
329
+ for (let j = i + 1; j < tokens.length; j++) {
330
+ if (!tokens[j].startsWith("-"))
331
+ assigned.add(tokens[j].replace(/[^A-Za-z0-9_].*$/, ""));
332
+ }
333
+ }
334
+ if (headName === "for" && tokens[i + 1] && tokens[i + 2] === "in")
335
+ assigned.add(tokens[i + 1]);
336
+ // `xargs … rm -r…f…`: the delete target arrives from pipe output — unverifiable by construction.
337
+ if (headName === "xargs") {
338
+ const rest = tokens.slice(i + 1).map(stripTokenEdges);
339
+ const rmAt = rest.findIndex((t) => (t.split("/").pop() ?? t) === "rm");
340
+ if (rmAt >= 0 && hasRecursiveForce(rest.slice(rmAt + 1))) {
341
+ return "`xargs rm` with recursive+force flags — the delete targets come from pipe output that cannot be verified";
342
+ }
343
+ continue;
344
+ }
345
+ // PowerShell `Remove-Item -Recurse -Force $Var` (CC names it explicitly alongside rm -rf).
346
+ if (/^remove-item$/i.test(headName) || /^ri$/i.test(headName)) {
347
+ const rest = tokens.slice(i + 1);
348
+ const recurse = rest.some((t) => /^-recurse$/i.test(t));
349
+ const force = rest.some((t) => /^-force$/i.test(t));
350
+ const varTarget = rest.find((t) => !t.startsWith("-") && t.includes("$"));
351
+ if (recurse && force && varTarget !== undefined) {
352
+ return `\`Remove-Item -Recurse -Force\` target ${varTarget} is a variable that cannot be verified from this command`;
353
+ }
354
+ continue;
355
+ }
356
+ if (headName !== "rm")
357
+ continue;
358
+ const rest = tokens.slice(i + 1);
359
+ if (!hasRecursiveForce(rest))
360
+ continue;
361
+ // Targets = non-flag tokens (a `--` ends option parsing; everything after is a target).
362
+ let optionsEnded = false;
363
+ for (const raw of rest) {
364
+ if (!optionsEnded && raw === "--") {
365
+ optionsEnded = true;
366
+ continue;
367
+ }
368
+ if (!optionsEnded && raw.startsWith("-"))
369
+ continue;
370
+ const target = raw.replace(/["']/g, "");
371
+ if (target.includes("$(") || target.includes("`")) {
372
+ return `\`rm\` recursive+force target ${raw} uses command substitution — the deleted path cannot be verified from this command`;
373
+ }
374
+ if (/\$[@*#!?0-9-]/.test(target)) {
375
+ return `\`rm\` recursive+force target ${raw} uses a positional/special shell parameter that cannot be verified from this command`;
376
+ }
377
+ for (const vm of target.matchAll(/\$\{?([A-Za-z_][A-Za-z0-9_]*)\}?/g)) {
378
+ const name = vm[1];
379
+ if (assigned.has(name))
380
+ continue; // in-window assignment → verifiable, other gates judge the value
381
+ if (safeVars.has(name)) {
382
+ // Safe-var carve-out ONLY for `$SAFE/<literal…>` with no glob — `rm -rf $TMPDIR` bare or
383
+ // `$TMPDIR/foo-*` still fires (CC shared-scratch adjacency).
384
+ const after = target.slice((vm.index ?? 0) + vm[0].length);
385
+ if (/^\/[^*?[\]]+$/.test(after))
386
+ continue;
387
+ }
388
+ return `\`rm\` recursive+force target ${raw} references $${name}, which has no assignment in this command — an empty or unexpected value could make this a home-directory or filesystem-root wipe`;
389
+ }
390
+ }
391
+ }
392
+ return undefined;
393
+ }
394
+ /** True when an `rm` argv tail carries BOTH a recursive (`-r`/`-R`/`--recursive`) and a force
395
+ * (`-f`/`--force`) flag, combined (`-rf`, `-fR`, `-rfv`) or separate. Options stop at `--`. */
396
+ function hasRecursiveForce(argvTail) {
397
+ let recursive = false;
398
+ let force = false;
399
+ for (const raw of argvTail) {
400
+ const t = raw.replace(/^["']|["']$/g, "");
401
+ if (t === "--")
402
+ break;
403
+ if (!t.startsWith("-"))
404
+ continue;
405
+ if (t === "--recursive")
406
+ recursive = true;
407
+ else if (t === "--force")
408
+ force = true;
409
+ else if (/^-[A-Za-z]+$/.test(t)) {
410
+ if (/[rR]/.test(t))
411
+ recursive = true;
412
+ if (t.includes("f"))
413
+ force = true;
414
+ }
415
+ }
416
+ return recursive && force;
417
+ }
418
+ /**
419
+ * CC 2.1.206 "Unverifiable Deletion Target" parity (auto-mode rule, 2.1.205): DENY a recursive+forced delete
420
+ * whose target is a variable / substitution that cannot be resolved from the command itself — fail-closed
421
+ * («Fail closed», 206 bundle). See {@link findUnverifiableRecursiveDelete} for exact firing conditions.
422
+ * The deny message carries the CC-sanctioned remediation: re-run with the resolved LITERAL path written into
423
+ * the command (or assign the variable in the same command), so the target becomes verifiable.
424
+ *
425
+ * Deny (not ask) on purpose: `onAsk:"allow"` — sema's bypass-mode analog — would auto-approve an ask, and the
426
+ * CC rule text forbids exactly that («must be explicitly approved … cannot be auto-allowed by a permission
427
+ * rule»). A deny short-circuits the deny>ask>allow fold, making the invariant structural. Core wires this
428
+ * policy ALWAYS-ON in the runner's gate composition (prepare-task); it is exported so deployments can also
429
+ * compose/test it directly.
430
+ */
431
+ export function createUnverifiableDeletePolicy(opts) {
432
+ const safeVars = new Set([...UNVERIFIABLE_DELETE_SAFE_VARS, ...(opts?.safeVars ?? [])]);
433
+ const shellTools = new Set(opts?.tools ?? COARSE_SHELL_TOOLS);
434
+ return {
435
+ check(req) {
436
+ if (!shellTools.has(canonicalToolName(req.toolName)))
437
+ return ALLOW;
438
+ const command = req.args?.command;
439
+ if (typeof command !== "string")
440
+ return ALLOW; // no command text = nothing for THIS rule; other gates adjudicate
441
+ const finding = findUnverifiableRecursiveDelete(command, safeVars);
442
+ if (finding === undefined)
443
+ return ALLOW;
444
+ return {
445
+ action: "deny",
446
+ decisionReason: "safety",
447
+ reason: `Unverifiable recursive delete blocked (fail-closed): ${finding}. ` +
448
+ `Re-run the delete with the resolved literal path written into the command itself ` +
449
+ `(or assign the variable in the same command, e.g. \`DIR=/exact/path; rm -rf "$DIR"\`) so the target can be verified.`,
450
+ };
451
+ },
452
+ };
453
+ }
454
+ /**
455
+ * CC 2.1.206 "Session Transcript Tampering" parity (auto-mode rule, 2.1.205): DENY shell commands and
456
+ * file-write tools that would modify sema's OWN session transcripts — the harness-written `.jsonl` session
457
+ * state under `<dataRoot>/sessions/` (`$AGENT_DATA_DIR ?? ~/.ai-agent`, stores/file/session-store.ts; the
458
+ * sema analog of CC's `~/.claude/projects/` transcripts, including the first-line `meta` record CC calls the
459
+ * classifier ground-truth line). A tampered entry feeds every later leg once the session is resumed —
460
+ * self-erasure of the audit trail — so the deny is unconditional (no ask; see the mapping note above).
461
+ *
462
+ * «Reading transcripts is routine and not this rule»: a SINGLE simple command whose argv[0] is in the
463
+ * read-only allowlist ({@link BASH_READONLY_DEFAULT_ALLOW}) may reference the transcript dir (`ls`, `cat`,
464
+ * `grep`, …). Anything else that references it — a write command, a redirect/pipe/compound command (which the
465
+ * shared parser rejects → fail-closed), an `rm`/`mv`/`sed -i` — is denied. `Write`/`Edit` file tools are
466
+ * denied on an absolute or `~`-rooted `file_path` inside the transcript dir.
467
+ *
468
+ * Coarse + textual by design (defense-in-depth, not containment): the match is against the RESOLVED data
469
+ * root's absolute path plus its `~/…` and `$HOME/…` spellings — a command that reaches the same files through
470
+ * an unrelated alias/symlink is the sandbox's job. Wired ALWAYS-ON by the runner (prepare-task); exported for
471
+ * direct composition/tests.
472
+ */
473
+ export function createTranscriptIntegrityPolicy(opts) {
474
+ const home = homedir();
475
+ const defaultRoot = (process.env.AGENT_DATA_DIR ?? join(home, ".ai-agent")).normalize("NFC");
476
+ const dirs = (opts?.sessionsDirs ?? [join(defaultRoot, "sessions")]).map((d) => d.normalize("NFC").replace(/[\\/]+$/, ""));
477
+ // Textual spellings a shell command could use for each protected dir: absolute, `~/…`, `$HOME/…`.
478
+ const textualForms = dirs.flatMap((d) => {
479
+ const forms = [d];
480
+ if (d.startsWith(home + sep)) {
481
+ const rel = d.slice(home.length); // keeps the leading separator
482
+ forms.push(`~${rel}`, `$HOME${rel}`, `\${HOME}${rel}`);
483
+ }
484
+ return forms;
485
+ });
486
+ const readAllow = new Set(opts?.readAllow ?? BASH_READONLY_DEFAULT_ALLOW);
487
+ const shellTools = new Set(opts?.tools ?? COARSE_SHELL_TOOLS);
488
+ const inProtectedDir = (p) => {
489
+ const norm = p.normalize("NFC");
490
+ const abs = norm.startsWith("~" + sep) || norm === "~" ? join(home, norm.slice(1)) : norm;
491
+ if (!isAbsolute(abs))
492
+ return false; // relative paths resolve against the task root, not the data dir
493
+ return dirs.some((d) => abs === d || abs.startsWith(d + sep));
494
+ };
495
+ const denyReason = (what) => ({
496
+ action: "deny",
497
+ decisionReason: "safety",
498
+ reason: `Session-transcript write blocked: ${what}. Session transcripts (the .jsonl files under the agent data ` +
499
+ `dir's sessions/ directory) are harness-written session state, not agent working files — modifying or ` +
500
+ `deleting them tampers with the run's own audit trail. Reading them (ls/cat/grep as a single simple ` +
501
+ `command) is fine.`,
502
+ });
503
+ return {
504
+ check(req) {
505
+ const toolName = canonicalToolName(req.toolName);
506
+ if (shellTools.has(toolName)) {
507
+ const command = req.args?.command;
508
+ if (typeof command !== "string")
509
+ return ALLOW;
510
+ const cmd = command.normalize("NFC");
511
+ if (!textualForms.some((f) => cmd.includes(f)))
512
+ return ALLOW;
513
+ const parsed = parseLeadingCommandName(command);
514
+ if ("name" in parsed && readAllow.has(parsed.name))
515
+ return ALLOW; // reading transcripts is routine
516
+ return denyReason("name" in parsed
517
+ ? `\`${parsed.name}\` is not a read-only command`
518
+ : "the command references the transcript directory and is not a single read-only command (fail-closed)");
519
+ }
520
+ if (toolName === "Write" || toolName === "Edit" || toolName === "NotebookEdit") {
521
+ const a = req.args;
522
+ const p = a?.file_path ?? a?.notebook_path;
523
+ if (typeof p === "string" && inProtectedDir(p)) {
524
+ return denyReason(`"${p}" is inside the session-transcript directory`);
525
+ }
526
+ }
527
+ return ALLOW;
528
+ },
529
+ };
530
+ }
531
+ /**
532
+ * Resolve an `ask` decision to a terminal `allow`/`deny` via {@link OnAsk}. Centralizes the headless
533
+ * auto-deny default, fail-closed error handling, and stable deny reasons so every ask site is
534
+ * consistent. Never returns `ask`.
535
+ */
536
+ export async function resolveAsk(req, onAsk, signal) {
537
+ if (onAsk === "allow") {
538
+ return { action: "allow", decisionReason: "mode" };
539
+ }
540
+ if (onAsk === undefined || onAsk === "deny") {
541
+ // Headless auto-deny: deterministic, with a reason the model can read and react to.
542
+ return {
543
+ action: "deny",
544
+ message: `approval required for "${req.toolName}" but no approver is wired (headless auto-deny): ${req.message}`,
545
+ decisionReason: "mode",
546
+ };
547
+ }
548
+ if (signal?.aborted) {
549
+ return { action: "deny", message: `approval aborted for "${req.toolName}" (task ended)`, decisionReason: "mode" };
550
+ }
551
+ let ok;
552
+ try {
553
+ ok = await onAsk(req, signal);
554
+ }
555
+ catch (err) {
556
+ // Fail-closed: a throwing approver denies, but surfaces the true cause (not hidden as a default).
557
+ return {
558
+ action: "deny",
559
+ message: `approval errored for "${req.toolName}": ${err instanceof Error ? err.message : String(err)}`,
560
+ decisionReason: "mode",
561
+ };
562
+ }
563
+ return ok
564
+ ? { action: "allow", decisionReason: "mode" }
565
+ : { action: "deny", message: `approval denied for "${req.toolName}": ${req.message}`, decisionReason: "mode" };
566
+ }
567
+ //# sourceMappingURL=tool-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-policy.js","sourceRoot":"","sources":["../../src/core/tool-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC5F,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AA2D3D,wGAAwG;AACxG,MAAM,UAAU,YAAY,CAAC,CAAmB;IAC9C,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC;AAC/B,CAAC;AAmBD,MAAM,KAAK,GAAiB,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAEhD;;;;;GAKG;AACH,SAAS,WAAW,CAAI,CAAa,EAAE,EAAsB,EAAE,SAAkB;IAC/E,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QACnB,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACxC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,MAAM,GAAG,CAAC,EAAsB,EAAE,CAAU,EAAQ,EAAE;YAC1D,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACnB,EAA2B,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC,CAAC;QACF,gGAAgG;QAChG,0FAA0F;QAC1F,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,IAAI,OAAO;gBAAE,OAAO;YACpB,MAAM,CAAC,OAAgB,EAAE,SAAS,EAAE,CAAC,CAAC;QACxC,CAAC,EAAE,EAAE,CAAC,CAAC;QACN,KAAgC,CAAC,KAAK,EAAE,EAAE,CAAC;QAC5C,CAAC,CAAC,IAAI,CACJ,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,OAAgB,EAAE,CAAC,CAAC,EAClC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAe,EAAE,CAAC,CAAC,CAClC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAA2C;IAC/E,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClF,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC/D,OAAO;QACL,KAAK,CAAC,GAAG;YACP,2GAA2G;YAC3G,yFAAyF;YACzF,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACjD,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACvB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,CAAC,QAAQ,uBAAuB,EAAE,CAAC;YAClF,CAAC;YACD,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAClC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,CAAC,QAAQ,2BAA2B,EAAE,CAAC;YACtF,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAsBpC;IACC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAClE,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC/D,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACpE,OAAO;QACL,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM;YACrB,gHAAgH;YAChH,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACjD,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACvB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,CAAC,QAAQ,uBAAuB,EAAE,CAAC;YAClF,CAAC;YACD,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACvB,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;oBACpB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,yBAAyB,GAAG,CAAC,QAAQ,gBAAgB,EAAE,CAAC;gBAC3F,CAAC;gBACD,IAAI,EAAW,CAAC;gBAChB,IAAI,CAAC;oBACH,EAAE,GAAG,MAAM,WAAW,CACpB,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,EAC1C,IAAI,CAAC,iBAAiB,EACtB,GAAG,EAAE,CAAC,KAAK,CACZ,CAAC;gBACJ,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,oGAAoG;oBACpG,OAAO;wBACL,MAAM,EAAE,MAAM;wBACd,MAAM,EAAE,yBAAyB,GAAG,CAAC,QAAQ,MAAM,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;qBACtG,CAAC;gBACJ,CAAC;gBACD,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,wBAAwB,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC;YAC1F,CAAC;YACD,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,CAAC,QAAQ,2BAA2B,EAAE,CAAC;YACtF,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAC,GAAG,QAAsB;IACvD,OAAO;QACL,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM;YACrB,IAAI,KAAmC,CAAC;YACxC,oGAAoG;YACpG,sGAAsG;YACtG,uGAAuG;YACvG,sGAAsG;YACtG,gGAAgG;YAChG,sGAAsG;YACtG,sGAAsG;YACtG,IAAI,OAAO,GAAG,GAAG,CAAC;YAClB,IAAI,OAAkE,CAAC;YACvE,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBACzC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;oBACxB,0FAA0F;oBAC1F,0FAA0F;oBAC1F,wFAAwF;oBACxF,kFAAkF;oBAClF,OAAO,OAAO,EAAE,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChG,CAAC;gBACD,oGAAoG;gBACpG,8FAA8F;gBAC9F,mGAAmG;gBACnG,oGAAoG;gBACpG,IAAI,CAAC,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;oBACjC,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC;oBAC/C,OAAO,GAAG,CAAC,CAAC;gBACd,CAAC;gBACD,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;oBACjC,KAAK,GAAG,CAAC,CAAC,CAAC,6EAA6E;gBAC1F,CAAC;YACH,CAAC;YACD,iGAAiG;YACjG,0EAA0E;YAC1E,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,MAAM,GAAG,OAAO,EAAE,YAAY,CAAC;gBACrC,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;YAC3E,CAAC;YACD,OAAO,OAAO,IAAI,KAAK,CAAC;QAC1B,CAAC;KACF,CAAC;AACJ,CAAC;AAED,iHAAiH;AACjH,MAAM,kBAAkB,GAAG,CAAC,MAAM,CAAC,CAAC;AAEpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,MAAM,UAAU,6BAA6B,CAAC,IAS7C;IACC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3D,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,kBAAkB,CAAC,CAAC;IAC7D,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,KAAK,CAAC;IAClD,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAoB,EAAE,CACpD,aAAa,KAAK,MAAM;QACtB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE;QACpD,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;IACjE,OAAO;QACL,KAAK,CAAC,GAAoB;YACxB,qFAAqF;YACrF,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAAE,OAAO,KAAK,CAAC;YAChD,MAAM,OAAO,GAAI,GAAG,CAAC,IAAiD,EAAE,OAAO,CAAC;YAChF,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAChC,gFAAgF;gBAChF,OAAO,QAAQ,CAAC,SAAS,GAAG,CAAC,QAAQ,wCAAwC,CAAC,CAAC;YACjF,CAAC;YACD,MAAM,MAAM,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;YAChD,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC;gBACvB,iGAAiG;gBACjG,iDAAiD;gBACjD,OAAO,QAAQ,CAAC,2CAA2C,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YAC/E,CAAC;YACD,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,MAAM,CAAC,IAAI,uBAAuB,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;YAC5G,CAAC;YACD,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrC,OAAO,QAAQ,CAAC,YAAY,MAAM,CAAC,IAAI,2BAA2B,CAAC,CAAC;YACtE,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAC;AACJ,CAAC;AAED,+GAA+G;AAC/G,EAAE;AACF,gGAAgG;AAChG,EAAE;AACF,yGAAyG;AACzG,4GAA4G;AAC5G,4GAA4G;AAC5G,6GAA6G;AAC7G,iGAAiG;AACjG,6GAA6G;AAC7G,iBAAiB;AACjB,EAAE;AACF,2GAA2G;AAC3G,8GAA8G;AAC9G,6GAA6G;AAC7G,2GAA2G;AAC3G,qGAAqG;AACrG,+GAA+G;AAC/G,yGAAyG;AACzG,EAAE;AACF,6GAA6G;AAC7G,wGAAwG;AACxG,6GAA6G;AAC7G,mGAAmG;AACnG,6GAA6G;AAC7G,0GAA0G;AAC1G,sGAAsG;AACtG,EAAE;AACF,0GAA0G;AAC1G,iEAAiE;AAEjE;6FAC6F;AAC7F,MAAM,6BAA6B,GAAsB,CAAC,QAAQ,CAAC,CAAC;AAEpE;oFACoF;AACpF,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE5F;;;0GAG0G;AAC1G,MAAM,eAAe,GAAG,UAAU,CAAC;AAEnC,yGAAyG;AACzG,MAAM,eAAe,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;AAEnF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,+BAA+B,CAC7C,OAAe,EACf,WAAgC,IAAI,GAAG,CAAC,6BAA6B,CAAC;IAEtE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAClD,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACxD,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,+FAA+F;QAC/F,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACzD,CAAC,EAAE,CAAC;QACN,CAAC;QACD,sGAAsG;QACtG,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3B,CAAC,EAAE,CAAC;gBACJ,SAAS;YACX,CAAC;YACD,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;gBAC7C,CAAC,IAAI,CAAC,CAAC,CAAC,sDAAsD;gBAC9D,SAAS;YACX,CAAC;YACD,MAAM;QACR,CAAC;QACD,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM;YAAE,SAAS;QACjC,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC;QAE/C,oGAAoG;QACpG,IAAI,CAA0B,CAAC;QAC/B,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5F,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;YACxB,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,CAAC;YAC1F,CAAC;QACH,CAAC;QACD,IAAI,QAAQ,KAAK,KAAK,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI;YAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAE/F,iGAAiG;QACjG,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YACtD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;YACvE,IAAI,IAAI,IAAI,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzD,OAAO,0GAA0G,CAAC;YACpH,CAAC;YACD,SAAS;QACX,CAAC;QAED,2FAA2F;QAC3F,IAAI,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9D,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACjC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACxD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACpD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1E,IAAI,OAAO,IAAI,KAAK,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAChD,OAAO,0CAA0C,SAAS,0DAA0D,CAAC;YACvH,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,QAAQ,KAAK,IAAI;YAAE,SAAS;QAChC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;YAAE,SAAS;QACvC,wFAAwF;QACxF,IAAI,YAAY,GAAG,KAAK,CAAC;QACzB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,YAAY,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBAClC,YAAY,GAAG,IAAI,CAAC;gBACpB,SAAS;YACX,CAAC;YACD,IAAI,CAAC,YAAY,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YACnD,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACxC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClD,OAAO,iCAAiC,GAAG,oFAAoF,CAAC;YAClI,CAAC;YACD,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjC,OAAO,iCAAiC,GAAG,sFAAsF,CAAC;YACpI,CAAC;YACD,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,mCAAmC,CAAC,EAAE,CAAC;gBACtE,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBACnB,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,SAAS,CAAC,iEAAiE;gBACnG,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBACvB,yFAAyF;oBACzF,6DAA6D;oBAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;oBAC3D,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;wBAAE,SAAS;gBAC5C,CAAC;gBACD,OAAO,iCAAiC,GAAG,gBAAgB,IAAI,mIAAmI,CAAC;YACrM,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;gGACgG;AAChG,SAAS,iBAAiB,CAAC,QAA2B;IACpD,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,IAAI;YAAE,MAAM;QACtB,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QACjC,IAAI,CAAC,KAAK,aAAa;YAAE,SAAS,GAAG,IAAI,CAAC;aACrC,IAAI,CAAC,KAAK,SAAS;YAAE,KAAK,GAAG,IAAI,CAAC;aAClC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAChC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;gBAAE,SAAS,GAAG,IAAI,CAAC;YACrC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,KAAK,GAAG,IAAI,CAAC;QACpC,CAAC;IACH,CAAC;IACD,OAAO,SAAS,IAAI,KAAK,CAAC;AAC5B,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,8BAA8B,CAAC,IAK9C;IACC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,6BAA6B,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACxF,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,IAAI,kBAAkB,CAAC,CAAC;IAC9D,OAAO;QACL,KAAK,CAAC,GAAoB;YACxB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;YACnE,MAAM,OAAO,GAAI,GAAG,CAAC,IAAiD,EAAE,OAAO,CAAC;YAChF,IAAI,OAAO,OAAO,KAAK,QAAQ;gBAAE,OAAO,KAAK,CAAC,CAAC,kEAAkE;YACjH,MAAM,OAAO,GAAG,+BAA+B,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACnE,IAAI,OAAO,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAC;YACxC,OAAO;gBACL,MAAM,EAAE,MAAM;gBACd,cAAc,EAAE,QAAQ;gBACxB,MAAM,EACJ,wDAAwD,OAAO,IAAI;oBACnE,mFAAmF;oBACnF,sHAAsH;aACzH,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,+BAA+B,CAAC,IAO/C;IACC,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC7F,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,YAAY,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC7E,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAC1C,CAAC;IACF,kGAAkG;IAClG,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QACtC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,8BAA8B;YAChE,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,EAAE,QAAQ,GAAG,EAAE,EAAE,WAAW,GAAG,EAAE,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,SAAS,IAAI,2BAA2B,CAAC,CAAC;IAC1E,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,IAAI,kBAAkB,CAAC,CAAC;IAC9D,MAAM,cAAc,GAAG,CAAC,CAAS,EAAW,EAAE;QAC5C,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1F,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC,CAAC,iEAAiE;QACrG,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,CAAC,IAAY,EAAoB,EAAE,CAAC,CAAC;QACtD,MAAM,EAAE,MAAM;QACd,cAAc,EAAE,QAAQ;QACxB,MAAM,EACJ,qCAAqC,IAAI,+DAA+D;YACxG,uGAAuG;YACvG,qGAAqG;YACrG,mBAAmB;KACtB,CAAC,CAAC;IACH,OAAO;QACL,KAAK,CAAC,GAAoB;YACxB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACjD,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7B,MAAM,OAAO,GAAI,GAAG,CAAC,IAAiD,EAAE,OAAO,CAAC;gBAChF,IAAI,OAAO,OAAO,KAAK,QAAQ;oBAAE,OAAO,KAAK,CAAC;gBAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBACrC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBAAE,OAAO,KAAK,CAAC;gBAC7D,MAAM,MAAM,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;gBAChD,IAAI,MAAM,IAAI,MAAM,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;oBAAE,OAAO,KAAK,CAAC,CAAC,iCAAiC;gBACnG,OAAO,UAAU,CACf,MAAM,IAAI,MAAM;oBACd,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,+BAA+B;oBACjD,CAAC,CAAC,qGAAqG,CAC1G,CAAC;YACJ,CAAC;YACD,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,cAAc,EAAE,CAAC;gBAC/E,MAAM,CAAC,GAAG,GAAG,CAAC,IAA2E,CAAC;gBAC1F,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,IAAI,CAAC,EAAE,aAAa,CAAC;gBAC3C,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC/C,OAAO,UAAU,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;gBACzE,CAAC;YACH,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAC;AACJ,CAAC;AA4CD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,GAAe,EACf,KAAwB,EACxB,MAAoB;IAEpB,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QACtB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;IACrD,CAAC;IACD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QAC5C,oFAAoF;QACpF,OAAO;YACL,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,0BAA0B,GAAG,CAAC,QAAQ,oDAAoD,GAAG,CAAC,OAAO,EAAE;YAChH,cAAc,EAAE,MAAM;SACvB,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;QACpB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,yBAAyB,GAAG,CAAC,QAAQ,gBAAgB,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;IACpH,CAAC;IACD,IAAI,EAAW,CAAC;IAChB,IAAI,CAAC;QACH,EAAE,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,kGAAkG;QAClG,OAAO;YACL,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,yBAAyB,GAAG,CAAC,QAAQ,MAAM,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YACtG,cAAc,EAAE,MAAM;SACvB,CAAC;IACJ,CAAC;IACD,OAAO,EAAE;QACP,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE;QAC7C,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,wBAAwB,GAAG,CAAC,QAAQ,MAAM,GAAG,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;AACnH,CAAC"}
@@ -0,0 +1,44 @@
1
+ import type { AgentMessage } from "../internal/harness.js";
2
+ import { type ToolResultStore } from "./tool-result-store.js";
3
+ /**
4
+ * Per-message aggregate tool-result budget (design/64 §17.2 / §24 — CC `MAX_TOOL_RESULTS_PER_MESSAGE_CHARS`,
5
+ * `constants/toolLimits.ts:49`). A single turn's batch of N parallel tool results can each be under the
6
+ * per-tool offload threshold yet SUM past the model/API limit (10×40K = 400K). This caps the aggregate of
7
+ * one turn's tool_result batch: while over budget, the LARGEST fresh non-exempt result is offloaded to a
8
+ * preview (largest-first), repeating until the batch fits.
9
+ *
10
+ * **Simpler than CC by construction (§24.2):** a request-only, non-destructive transform (returns a new
11
+ * array; the durable session keeps full results) applied in the existing `harness.on("context")` hook —
12
+ * the same per-query point as `clearStaleToolResults` (the mirror of CC's query.ts:379). It is DETERMINISTIC
13
+ * (stable `ref = tr_<sessionId>_<toolCallId>` + deterministic {@link buildPreview}), so re-running it every
14
+ * query yields byte-identical previews → prompt-cache safe **without** CC's ContentReplacementState freeze
15
+ * machine (the determinism IS the freeze), and resume-free (the transcript holds originals; this re-applies
16
+ * on replay). Reuses design/30's offload store + preview format; with no store it falls back to a
17
+ * self-contained head+tail truncation preview that still bounds the request.
18
+ */
19
+ /** CC's per-message cap (chars, not tokens — the "100K token" figure in old notes was unsourced). */
20
+ export declare const AGGREGATE_TOOL_RESULT_BUDGET_CHARS = 200000;
21
+ export interface AggregateBudgetOptions {
22
+ /** Per-batch char budget. Default {@link AGGREGATE_TOOL_RESULT_BUDGET_CHARS}. */
23
+ budgetChars?: number;
24
+ /** Tool names exempt from the budget (their own caps bound them) — e.g. read_file, read_tool_result. */
25
+ exemptTools?: ReadonlySet<string>;
26
+ /** design/30 store for offload+read-back. Absent ⇒ self-contained truncation preview. */
27
+ store?: ToolResultStore;
28
+ /** Namespaces the stable ref so an offloaded result is globally addressable. */
29
+ sessionId: string;
30
+ /** service [398] C8: fired once per result actually capped (offloaded OR degraded to a truncation
31
+ * preview). `storeFallback` = the model LOST read-back for this result (store.put failed / no store)
32
+ * — the silent-degradation face this callback exists for. Must not throw (caller-side contract). */
33
+ onCapped?: (info: {
34
+ tool?: string;
35
+ sizeChars: number;
36
+ storeFallback: boolean;
37
+ }) => void;
38
+ }
39
+ /** Default exemptions: tools whose result is self-bounded (read_file errors at its own token cap; the
40
+ * offload reader pages small slices). grep/bash/glob/web_fetch/MCP are the risk sources, NOT exempt. */
41
+ export declare const DEFAULT_BUDGET_EXEMPT_TOOLS: ReadonlySet<string>;
42
+ /** Cap each over-budget turn-batch (run of consecutive tool_result messages). Request-only; see file docs. */
43
+ export declare function capAggregateToolResults(messages: AgentMessage[], opts: AggregateBudgetOptions): Promise<AgentMessage[]>;
44
+ //# sourceMappingURL=tool-result-budget.d.ts.map