@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,171 @@
1
+ import { DEFAULT_CHARS_PER_TOKEN, estimateContextTokens, estimateTokens } from "../internal/harness.js";
2
+ import { isToolResult, messageRole } from "./message-utils.js";
3
+ /** Fraction of the model's effective window the guard tries to stay under. */
4
+ const GUARD_FRACTION = 0.85;
5
+ function isSummary(m) {
6
+ // "branchSummary" was a second summary role until the design/71 清尾 pass removed the whole
7
+ // (never-produced) branch-summary chain; compaction summaries are the only summary role left.
8
+ return messageRole(m) === "compactionSummary";
9
+ }
10
+ /**
11
+ * Last-resort, in-task context trim. Proper compaction (LLM summary) runs *between* tasks;
12
+ * this prevents a single task whose internal tool-loop balloons from overflowing the window.
13
+ *
14
+ * Keeps all summary messages (compaction/branch) and the most recent messages that fit the
15
+ * budget, dropping older regular messages at a safe boundary (never starting on an orphan
16
+ * toolResult). Returns the original array when already within budget.
17
+ *
18
+ * design/123 D3 (codex-B1 = fable-M5) — anchored accounting: when `anchoredTotalTokens`
19
+ * (= `estimateContextTokens(messages, charsPerToken).tokens` for the SAME array) is provided, the
20
+ * trigger gate and the internal bookkeeping start from the usage-anchored value instead of the
21
+ * structural sum (which underestimates code/CJK and lets over-window requests through). Dropping a
22
+ * message AFTER the usage anchor reduces the accounted total by its structural estimate; dropping a
23
+ * message AT/BEFORE the anchor reduces it by ZERO (the anchor usage was billed with that content —
24
+ * a request-view drop only pays off on the NEXT request), so the trim keeps cutting deeper until
25
+ * the anchored total meets the budget or only the minimal tail is left. Absent ⇒ legacy structural
26
+ * behavior, byte-identical. `charsPerToken` (design/123 D2): structural coefficient, default 4.
27
+ */
28
+ export function trimToBudget(messages, budgetTokens, anchoredTotalTokens, charsPerToken) {
29
+ const cpt = charsPerToken ?? DEFAULT_CHARS_PER_TOKEN;
30
+ const anchored = anchoredTotalTokens !== undefined;
31
+ let structuralTotal = 0;
32
+ for (const m of messages) {
33
+ structuralTotal += estimateTokens(m, cpt);
34
+ }
35
+ const total = anchored ? anchoredTotalTokens : structuralTotal;
36
+ if (total <= budgetTokens || messages.length <= 1) {
37
+ return messages;
38
+ }
39
+ // The usage-anchor position (anchored mode only): drops at/before it reduce the accounting by 0.
40
+ const anchorIdx = anchored ? (estimateContextTokens(messages, cpt).lastUsageIndex ?? -1) : -1;
41
+ // Always-kept summary messages and their budget.
42
+ const summaries = messages.filter(isSummary);
43
+ let summaryTokens = 0;
44
+ for (const s of summaries) {
45
+ summaryTokens += estimateTokens(s, cpt);
46
+ }
47
+ // Per-message REDUCTION value in the active coordinate: structural for post-anchor messages,
48
+ // 0 for at/before-anchor messages (legacy mode: anchorIdx = -1 ⇒ all structural, and the tail
49
+ // budget below reduces to the historical `budget - summaryTokens`).
50
+ const nonSummary = [];
51
+ const reductions = [];
52
+ let reductionSum = 0;
53
+ for (let i = 0; i < messages.length; i++) {
54
+ if (isSummary(messages[i]))
55
+ continue;
56
+ nonSummary.push(messages[i]);
57
+ const r = i > anchorIdx ? estimateTokens(messages[i], cpt) : 0;
58
+ reductions.push(r);
59
+ reductionSum += r;
60
+ }
61
+ const requiredReduction = total - budgetTokens; // > 0 here
62
+ let start;
63
+ if (anchored && reductionSum <= requiredReduction) {
64
+ // Even dropping every droppable message cannot bring the anchored total under budget (the whole
65
+ // droppable prefix sits at/before the anchor). Deep-trim to the minimal tail — "keep cleaning
66
+ // until the target is met or nothing clearable remains" (design/123 D3); the next request's
67
+ // fresh usage re-anchors at the real (small) size. If this floor lands on a toolResult, the
68
+ // SHARED turn-alignment below extends it backward to the owning tool-call assistant.
69
+ start = nonSummary.length - 1;
70
+ }
71
+ else {
72
+ // Walk the non-summary messages from the end, keeping the maximal tail whose dropped-prefix
73
+ // reduction still meets the requirement. In the legacy coordinate `reductionSum - requiredReduction`
74
+ // equals the historical `budgetTokens - summaryTokens` tail budget exactly.
75
+ const tailBudget = Math.max(0, reductionSum - requiredReduction);
76
+ let acc = 0;
77
+ start = nonSummary.length;
78
+ for (let i = nonSummary.length - 1; i >= 0; i--) {
79
+ acc += reductions[i];
80
+ if (acc > tailBudget && i + 1 < nonSummary.length) {
81
+ start = i + 1;
82
+ break;
83
+ }
84
+ start = i;
85
+ }
86
+ }
87
+ // Never begin the kept window on an orphan toolResult (a result whose call was dropped): first
88
+ // prefer dropping the leading orphans forward (budget-friendly, the legacy guard).
89
+ while (start < nonSummary.length && isToolResult(nonSummary[start])) {
90
+ start++;
91
+ }
92
+ if (start >= nonSummary.length) {
93
+ // The ENTIRE tail from the chosen start is toolResults — the design/123 D3 live-caught 400 path
94
+ // ("Messages with role 'tool' must be a response to a preceding message with 'tool_calls'"):
95
+ // requests built right after tool execution END in a toolResult batch, so both the anchored
96
+ // deep-trim floor and the walk branch routinely land inside that trailing batch, and the OLD
97
+ // fallback here kept a single ORPHAN toolResult (its tool-call assistant dropped — API-invalid
98
+ // on strict gateways; "tolerated" only because pre-anchored coordinates rarely reached it).
99
+ // TURN-ALIGN instead: extend BACKWARD over the trailing toolResult batch to include the
100
+ // assistant that issued the tool_calls, keeping one COMPLETE turn tail (may overshoot the
101
+ // budget — validity beats budget, same tradeoff as the findCutPoint A-2 oversized-batch
102
+ // fallback; this also resolves the codex-review MINOR on single-message floor granularity).
103
+ // Only when NO owning assistant exists at all (the whole array is toolResults) keep the last
104
+ // message — the prepare-task belt drops such an orphan before the provider ever sees it.
105
+ start = nonSummary.length - 1;
106
+ while (start > 0 && isToolResult(nonSummary[start])) {
107
+ start--;
108
+ }
109
+ if (isToolResult(nonSummary[start])) {
110
+ start = nonSummary.length - 1;
111
+ }
112
+ }
113
+ const keptTail = new Set(nonSummary.slice(start));
114
+ // Rebuild from the ORIGINAL array so chronology holds even if a summary sits *after* a kept message
115
+ // (don't assume every summary precedes the tail — a branch/compaction summary can be interleaved).
116
+ return messages.filter((m) => isSummary(m) || keptTail.has(m));
117
+ }
118
+ /**
119
+ * design/123 D3 belt (invariant-level, live-caught 16k 400s): the FINAL request view must never
120
+ * contain a toolResult whose tool-call assistant is absent — strict gateways hard-400 on it
121
+ * ("Messages with role 'tool' must be a response to a preceding message with 'tool_calls'"). Every
122
+ * individual producer is turn-aligned (findCutPoint never cuts on a toolResult; trimToBudget
123
+ * turn-aligns its floor), but NO pipeline combination may ship an orphan, so the prepare-task
124
+ * context hook sweeps its output through this last. Deterministic ⇒ byte-stable per request ⇒
125
+ * prefix-cache safe. Returns the SAME array when clean (zero-cost fast path); `dropped` carries a
126
+ * diagnostic per removed orphan (toolCallId + neighbor roles) for onError attribution.
127
+ */
128
+ export function dropOrphanToolResults(messages) {
129
+ const seenCallIds = new Set();
130
+ let orphanAt = -1;
131
+ for (let i = 0; i < messages.length; i++) {
132
+ const m = messages[i];
133
+ if (m.role === "assistant" && Array.isArray(m.content)) {
134
+ for (const c of m.content) {
135
+ if (c?.type === "toolCall" && typeof c.id === "string")
136
+ seenCallIds.add(c.id);
137
+ }
138
+ }
139
+ else if (m.role === "toolResult" && !seenCallIds.has(m.toolCallId ?? "")) {
140
+ orphanAt = i;
141
+ break;
142
+ }
143
+ }
144
+ if (orphanAt === -1) {
145
+ return { messages, dropped: [] }; // clean — the common case, same array back
146
+ }
147
+ const dropped = [];
148
+ const out = messages.slice(0, orphanAt);
149
+ const roleOf = (i) => i < 0 || i >= messages.length ? "(none)" : (messages[i].role ?? "(unknown)");
150
+ for (let i = orphanAt; i < messages.length; i++) {
151
+ const m = messages[i];
152
+ if (m.role === "assistant" && Array.isArray(m.content)) {
153
+ for (const c of m.content) {
154
+ if (c?.type === "toolCall" && typeof c.id === "string")
155
+ seenCallIds.add(c.id); // keep accumulating past the first orphan
156
+ }
157
+ }
158
+ else if (m.role === "toolResult" && !seenCallIds.has(m.toolCallId ?? "")) {
159
+ dropped.push({ toolCallId: m.toolCallId ?? "(missing)", index: i, prevRole: roleOf(i - 1), nextRole: roleOf(i + 1) });
160
+ continue;
161
+ }
162
+ out.push(messages[i]);
163
+ }
164
+ return { messages: out, dropped };
165
+ }
166
+ /** Budget the in-task guard targets for a model. */
167
+ export function guardBudget(model) {
168
+ const window = model.contextTokens ?? model.contextWindow;
169
+ return Math.floor(window * GUARD_FRACTION);
170
+ }
171
+ //# sourceMappingURL=context-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-guard.js","sourceRoot":"","sources":["../../src/core/context-guard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ import type { AgentMessage } from "../internal/harness.js";
2
+ import { type MemorySelector, encodeSurfacedKey } from "./memory-recall.js";
3
+ import type { MemoryStore } from "./memory.js";
4
+ /**
5
+ * design/86 §3 缺口 A — DYNAMIC memory re-recall seam (CC `processSessionStartHooks('compact')` parity).
6
+ *
7
+ * PROBLEM (design/86 §3): our memory is a one-shot snapshot taken at task start (`prepareTask` →
8
+ * `selectAndComposeMemory`/`Layered`, injected into the STABLE system prefix). A long task that runs many
9
+ * turns and compacts loses the *fine detail* of its early turns; we never re-select more-relevant memory for
10
+ * the conversation as it has evolved. CC re-evaluates relevant memories after every compaction.
11
+ *
12
+ * THIS SEAM (default OFF, data-gated like Seam C): after a REAL within-task compaction, re-run the EXISTING
13
+ * selector + `selectAndComposeMemory`/`Layered` against the CURRENT conversation context (recent messages),
14
+ * de-dup against everything already surfaced (`priorSurfacedIds`/`priorSurfacedKeys`, the same machinery the
15
+ * initial recall uses), and inject any NEW relevant notes as a TAIL ATTACHMENT user message — NEVER touching
16
+ * the stable system prefix (touching the prefix would break the 90–98% prefix-cache the whole stable-prefix
17
+ * design rests on).
18
+ *
19
+ * Security (design/86 §3 ⑤): the bodies re-recalled here come back through the SAME read API
20
+ * (`listStructuredNotes`/`getByIds`) and the SAME compose path (`selectAndComposeMemory`/`Layered`, which wrap
21
+ * in `RECALL_CAVEAT` + `<user_memory mode="selective">`) the INITIAL recall uses. Every note in the store has
22
+ * already passed the WRITE-side secret gate (`guardedMemoryStore` → `enforceStructuredNoteSecretGate`); this
23
+ * path adds NO new write inlet and NO new read inlet — it reuses the audited initial-recall pipeline verbatim,
24
+ * so it cannot surface anything the initial recall couldn't, and it cannot leak a secret the write gate
25
+ * already rejected. The de-dup also guarantees an already-shown body is never re-injected.
26
+ */
27
+ /** Trust-injected configuration for the dynamic re-recall seam (lives on `RunnerDeps`, never `TaskSpec` —
28
+ * it is part of the `memoryRecall` function-seam family, off by default). *
29
+ * @deprecated design/138 S4 — the dynamic re-recall seam served ONLY the retired legacy memoryStore
30
+ * injection path; prepareTask never wires it anymore (the runtask hook is dead-by-input). Removal is the
31
+ * next major.
32
+ */
33
+ export interface DynamicRecallConfig {
34
+ /** Master switch. Absent/false ⇒ no dynamic re-recall (byte-identical to current behavior). */
35
+ enabled?: boolean;
36
+ /** How many of the most-recent conversation messages form the re-recall query context. Default 6. */
37
+ recentMessageWindow?: number;
38
+ /** Max chars of recent-message text fed to the selector as the query objective. Default 4000. */
39
+ maxQueryChars?: number;
40
+ }
41
+ export declare const DEFAULT_RECENT_MESSAGE_WINDOW = 6;
42
+ export declare const DEFAULT_MAX_QUERY_CHARS = 4000;
43
+ /**
44
+ * Build the re-recall QUERY string from the recent conversation messages. Pure + deterministic. Takes the
45
+ * last `window` messages, extracts their text, and joins/caps to `maxChars` (keeping the TAIL — the most
46
+ * recent text — when over the cap, since the latest turns are the most relevant query signal). Returns ""
47
+ * when there is no usable text (caller then skips re-recall: nothing to query on).
48
+ */
49
+ export declare function buildRecallQuery(messages: readonly AgentMessage[], window?: number, maxChars?: number): string;
50
+ /** What a single dynamic re-recall attempt produced. `block` present ⇒ the caller injects it as a tail
51
+ * user message; `surfaced*` are the NEW ids/keys to fold into the run's durable surfaced set. A no-new /
52
+ * degrade / disabled outcome yields `block: undefined` and empty surfaced sets (caller injects nothing). */
53
+ export interface DynamicRecallOutcome {
54
+ block: string | undefined;
55
+ /** Single-scope: note ids whose bodies were newly injected this attempt. */
56
+ surfacedIds: readonly string[];
57
+ /** Multi-scope (layered): `(scope,id)` composite keys whose bodies were newly injected this attempt. */
58
+ surfacedKeys: readonly string[];
59
+ }
60
+ /** Inputs the Runner threads into one dynamic re-recall attempt. Mirrors the initial-recall call sites in
61
+ * `prepare-task.ts` (single-scope vs layered), so the two paths share the exact same selector pipeline. */
62
+ export interface DynamicRecallInput {
63
+ store: MemoryStore;
64
+ /** The scope list (1 ⇒ single-scope path; >1 ⇒ layered path). Same `scopes` as the initial recall. */
65
+ scopes: readonly string[];
66
+ selector: MemorySelector;
67
+ /** Query objective derived from the CURRENT conversation (see {@link buildRecallQuery}). */
68
+ query: string;
69
+ recentTools?: string[];
70
+ maxSelected?: number;
71
+ maxLinked?: number;
72
+ timeoutMs?: number;
73
+ signal?: AbortSignal;
74
+ nowMs?: number;
75
+ /** Single-scope durable de-dup: note ids already surfaced (initial recall + prior re-recalls). */
76
+ priorSurfacedIds?: ReadonlySet<string>;
77
+ /** Multi-scope durable de-dup: `(scope,id)` keys already surfaced. */
78
+ priorSurfacedKeys?: ReadonlySet<string>;
79
+ }
80
+ /**
81
+ * Run ONE dynamic re-recall against the current conversation. Reuses `selectAndComposeMemory` (single-scope)
82
+ * or `selectAndComposeLayeredMemory` (multi-scope) — the SAME functions the initial recall uses — so the
83
+ * dedup, the manifest, the fence, the caveat, and the degrade/no-new branches are all identical.
84
+ *
85
+ * Crucially, on a DEGRADE the dynamic seam injects NOTHING (returns `block: undefined`). This differs from
86
+ * the INITIAL recall, which degrades to inject-all: at task start, degrade-to-inject-all is the safe floor
87
+ * (never start a task with NO memory). MID-TASK, the stable prefix ALREADY holds the initial inject — so a
88
+ * degrade here means "couldn't pick anything NEW relevant", and re-dumping the whole scope as a tail
89
+ * attachment would (a) duplicate the prefix's memory and (b) explode the tail / break the cache. So the
90
+ * dynamic seam treats degrade exactly like no-new: inject nothing, surface nothing. (This is the security-
91
+ * and cost-correct choice: the seam can only ADD relevant tail notes, never re-dump or fail open.)
92
+ *
93
+ * @deprecated design/138 S4 — the dynamic re-recall seam served ONLY the retired legacy memoryStore
94
+ * injection path; prepareTask never wires it anymore (the runtask hook is dead-by-input). Removal is the
95
+ * next major.
96
+ */
97
+ export declare function runDynamicRecall(input: DynamicRecallInput): Promise<DynamicRecallOutcome>;
98
+ /** Re-export so the wiring + tests have one import site for the composite key encoder. */
99
+ export { encodeSurfacedKey };
100
+ //# sourceMappingURL=dynamic-recall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamic-recall.d.ts","sourceRoot":"","sources":["../../src/core/dynamic-recall.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAEL,KAAK,cAAc,EAEnB,iBAAiB,EAGlB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,+FAA+F;IAC/F,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qGAAqG;IACrG,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iGAAiG;IACjG,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAC/C,eAAO,MAAM,uBAAuB,OAAQ,CAAC;AAE7C;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,SAAS,YAAY,EAAE,EACjC,MAAM,GAAE,MAAsC,EAC9C,QAAQ,GAAE,MAAgC,GACzC,MAAM,CAYR;AAgBD;;6GAE6G;AAC7G,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,4EAA4E;IAC5E,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,wGAAwG;IACxG,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CACjC;AAID;4GAC4G;AAC5G,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,WAAW,CAAC;IACnB,sGAAsG;IACtG,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,QAAQ,EAAE,cAAc,CAAC;IACzB,4FAA4F;IAC5F,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kGAAkG;IAClG,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACvC,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACzC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA2C/F;AAED,0FAA0F;AAC1F,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,108 @@
1
+ import { encodeSurfacedKey, selectAndComposeLayeredMemory, selectAndComposeMemory, } from "./memory-recall.js";
2
+ export const DEFAULT_RECENT_MESSAGE_WINDOW = 6;
3
+ export const DEFAULT_MAX_QUERY_CHARS = 4_000;
4
+ /**
5
+ * Build the re-recall QUERY string from the recent conversation messages. Pure + deterministic. Takes the
6
+ * last `window` messages, extracts their text, and joins/caps to `maxChars` (keeping the TAIL — the most
7
+ * recent text — when over the cap, since the latest turns are the most relevant query signal). Returns ""
8
+ * when there is no usable text (caller then skips re-recall: nothing to query on).
9
+ */
10
+ export function buildRecallQuery(messages, window = DEFAULT_RECENT_MESSAGE_WINDOW, maxChars = DEFAULT_MAX_QUERY_CHARS) {
11
+ if (window <= 0 || maxChars <= 0)
12
+ return "";
13
+ const recent = messages.slice(-window);
14
+ const parts = [];
15
+ for (const m of recent) {
16
+ const text = messageText(m);
17
+ if (text)
18
+ parts.push(text);
19
+ }
20
+ const joined = parts.join("\n").trim();
21
+ if (joined.length <= maxChars)
22
+ return joined;
23
+ // Over cap: keep the TAIL (latest text is the strongest query signal), not the head.
24
+ return joined.slice(joined.length - maxChars);
25
+ }
26
+ /** Extract a flat text view of a message's content (assistant/user/tool). Pure. */
27
+ function messageText(m) {
28
+ const content = m.content;
29
+ if (typeof content === "string")
30
+ return content.trim();
31
+ if (Array.isArray(content)) {
32
+ const out = [];
33
+ for (const c of content) {
34
+ if (typeof c.text === "string" && c.text.length > 0)
35
+ out.push(c.text);
36
+ }
37
+ return out.join(" ").trim();
38
+ }
39
+ return "";
40
+ }
41
+ const EMPTY_OUTCOME = { block: undefined, surfacedIds: [], surfacedKeys: [] };
42
+ /**
43
+ * Run ONE dynamic re-recall against the current conversation. Reuses `selectAndComposeMemory` (single-scope)
44
+ * or `selectAndComposeLayeredMemory` (multi-scope) — the SAME functions the initial recall uses — so the
45
+ * dedup, the manifest, the fence, the caveat, and the degrade/no-new branches are all identical.
46
+ *
47
+ * Crucially, on a DEGRADE the dynamic seam injects NOTHING (returns `block: undefined`). This differs from
48
+ * the INITIAL recall, which degrades to inject-all: at task start, degrade-to-inject-all is the safe floor
49
+ * (never start a task with NO memory). MID-TASK, the stable prefix ALREADY holds the initial inject — so a
50
+ * degrade here means "couldn't pick anything NEW relevant", and re-dumping the whole scope as a tail
51
+ * attachment would (a) duplicate the prefix's memory and (b) explode the tail / break the cache. So the
52
+ * dynamic seam treats degrade exactly like no-new: inject nothing, surface nothing. (This is the security-
53
+ * and cost-correct choice: the seam can only ADD relevant tail notes, never re-dump or fail open.)
54
+ *
55
+ * @deprecated design/138 S4 — the dynamic re-recall seam served ONLY the retired legacy memoryStore
56
+ * injection path; prepareTask never wires it anymore (the runtask hook is dead-by-input). Removal is the
57
+ * next major.
58
+ */
59
+ export async function runDynamicRecall(input) {
60
+ if (input.scopes.length === 0 || input.query.trim().length === 0)
61
+ return EMPTY_OUTCOME;
62
+ if (input.scopes.length === 1) {
63
+ const res = await selectAndComposeMemory({
64
+ store: input.store,
65
+ scope: input.scopes[0],
66
+ objective: input.query,
67
+ selector: input.selector,
68
+ recentTools: input.recentTools,
69
+ maxSelected: input.maxSelected,
70
+ maxLinked: input.maxLinked,
71
+ timeoutMs: input.timeoutMs,
72
+ signal: input.signal,
73
+ nowMs: input.nowMs,
74
+ priorSurfacedIds: input.priorSurfacedIds,
75
+ });
76
+ // degrade ⇒ inject nothing (see doc above). no-new (`block: undefined`) ⇒ inject nothing. block ⇒ inject.
77
+ // EMPTY-SELECTION guard (mid-task specific): when the selector picks ZERO ids, selectAndComposeMemory still
78
+ // returns a `block` — a manifest with "(no notes selected)". At task START that block is the worth-injecting
79
+ // manifest affordance; MID-TASK as a TAIL attachment it carries NO new bodies and just bloats the tail /
80
+ // re-shows the manifest, so treat surfaced-nothing as no-new and inject nothing.
81
+ if ("degrade" in res)
82
+ return EMPTY_OUTCOME;
83
+ if (res.block === undefined || res.surfacedIds.length === 0)
84
+ return EMPTY_OUTCOME;
85
+ return { block: res.block, surfacedIds: res.surfacedIds, surfacedKeys: [] };
86
+ }
87
+ const res = await selectAndComposeLayeredMemory({
88
+ store: input.store,
89
+ scopes: [...input.scopes],
90
+ objective: input.query,
91
+ selector: input.selector,
92
+ recentTools: input.recentTools,
93
+ maxSelected: input.maxSelected,
94
+ maxLinked: input.maxLinked,
95
+ timeoutMs: input.timeoutMs,
96
+ signal: input.signal,
97
+ nowMs: input.nowMs,
98
+ priorSurfacedKeys: input.priorSurfacedKeys,
99
+ });
100
+ if ("degrade" in res)
101
+ return EMPTY_OUTCOME;
102
+ if (res.block === undefined || res.surfacedKeys.length === 0)
103
+ return EMPTY_OUTCOME; // empty-selection guard (see above)
104
+ return { block: res.block, surfacedIds: [], surfacedKeys: res.surfacedKeys };
105
+ }
106
+ /** Re-export so the wiring + tests have one import site for the composite key encoder. */
107
+ export { encodeSurfacedKey };
108
+ //# sourceMappingURL=dynamic-recall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamic-recall.js","sourceRoot":"","sources":["../../src/core/dynamic-recall.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,iBAAiB,EACjB,6BAA6B,EAC7B,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AA0C5B,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC;AAC/C,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAE7C;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAAiC,EACjC,SAAiB,6BAA6B,EAC9C,WAAmB,uBAAuB;IAE1C,IAAI,MAAM,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IACvC,IAAI,MAAM,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,MAAM,CAAC;IAC7C,qFAAqF;IACrF,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;AAChD,CAAC;AAED,mFAAmF;AACnF,SAAS,WAAW,CAAC,CAAe;IAClC,MAAM,OAAO,GAAI,CAA2B,CAAC,OAAO,CAAC;IACrD,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;IACvD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,OAAkD,EAAE,CAAC;YACnE,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAaD,MAAM,aAAa,GAAyB,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;AAuBpG;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAyB;IAC9D,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,aAAa,CAAC;IAEvF,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,GAAG,GAA0B,MAAM,sBAAsB,CAAC;YAC9D,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;YACtB,SAAS,EAAE,KAAK,CAAC,KAAK;YACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;SACzC,CAAC,CAAC;QACH,0GAA0G;QAC1G,4GAA4G;QAC5G,6GAA6G;QAC7G,yGAAyG;QACzG,iFAAiF;QACjF,IAAI,SAAS,IAAI,GAAG;YAAE,OAAO,aAAa,CAAC;QAC3C,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,aAAa,CAAC;QAClF,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAC9E,CAAC;IAED,MAAM,GAAG,GAAwB,MAAM,6BAA6B,CAAC;QACnE,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QACzB,SAAS,EAAE,KAAK,CAAC,KAAK;QACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;KAC3C,CAAC,CAAC;IACH,IAAI,SAAS,IAAI,GAAG;QAAE,OAAO,aAAa,CAAC;IAC3C,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,GAAG,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,aAAa,CAAC,CAAC,oCAAoC;IACxH,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC;AAC/E,CAAC;AAED,0FAA0F;AAC1F,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * L2 mechanical verification gate (design/54) — the "verifiable outputs" exit oracle.
3
+ *
4
+ * Runs a TRUSTED, spec-derived suite of commands (build / type-check / test) in an {@link ExecutionEnv}
5
+ * and gates on the **real exit codes**: pass = every step exited 0. This is the mechanical half of
6
+ * verifiable outputs (design/54 §2); the de-correlated LLM-judge half is {@link runWithVerification}
7
+ * (L3). It catches what tests cover; service[33] measured L2 alone misses 50-100% of semantic/edge
8
+ * defects, which is why L3 runs on what passes L2.
9
+ *
10
+ * **It is a thin exit oracle, not a framework** — no model, no Runner, no agents dependency. It just runs
11
+ * commands and reports their exit truthfully, choosing the streaming `execStream` on a remote env (long
12
+ * builds, read-timeout, output cap) or the buffered `exec` on a base env. Which commands to run, and how
13
+ * to compose L2 with L3 / per-module sub-gates, is the caller's (profile's) job (design/54 §4).
14
+ *
15
+ * 🔴 SECURITY (design/53 §2.B, threat BUG8 — "L2 can be gamed"): `steps` MUST be a trusted, spec-derived
16
+ * suite — NOT test files an **untrusted worker** authored (a worker can write `assert(true)` / happy-path
17
+ * tests that pass while the code is broken, pushing all pressure onto an uncalibrated L3). This helper does
18
+ * not and cannot know which commands are trustworthy; the caller owns that. The gate's guarantee is narrow:
19
+ * "did these exact commands all exit 0 in this env" — nothing about whether the commands are meaningful,
20
+ * whether the env is isolated (design/53 §E = deployment), or the semantics of the change (that is L3).
21
+ */
22
+ import type { ExecutionEnv } from "../internal/harness.js";
23
+ /** One command in an L2 suite. */
24
+ export interface ExecStep {
25
+ /** Shell command to run (e.g. `"npm test"`, `"tsc --noEmit"`, `"git diff"`). */
26
+ command: string;
27
+ /** Human label for reporting. Default: the command string. */
28
+ label?: string;
29
+ /** Working directory; relative paths resolve against the env root. Default: the env's cwd. */
30
+ cwd?: string;
31
+ /** Extra environment variables for this command. */
32
+ env?: Record<string, string>;
33
+ /** Per-step timeout (seconds). Default: none. */
34
+ timeoutSec?: number;
35
+ }
36
+ /** The outcome of a single {@link ExecStep}. */
37
+ export interface ExecStepResult {
38
+ label: string;
39
+ command: string;
40
+ /** The real exit code, or `null` when the command never produced one (transport error / timeout / abort). */
41
+ exitCode: number | null;
42
+ stdout: string;
43
+ stderr: string;
44
+ /** `exitCode === 0`. A `null` exit is **never** `ok` (we can't confirm success, so we don't pass it). */
45
+ ok: boolean;
46
+ /** Set when the step failed to RUN (an `ExecutionError`/`RemoteExecutionError` code) — distinct from a non-zero exit. */
47
+ errorCode?: string;
48
+ /** True when captured output was truncated at {@link ExecGateOptions.maxOutputBytes}. */
49
+ truncated?: boolean;
50
+ }
51
+ /** The L2 verdict over a whole suite. */
52
+ export interface ExecGateResult {
53
+ /** True iff there was ≥1 step AND every step ran and exited 0. An EMPTY suite is `false` (nothing was verified — not a vacuous pass). */
54
+ passed: boolean;
55
+ /** Per-step detail, in order. With `stopOnFailure` (default), steps after the first failure are absent. */
56
+ steps: ExecStepResult[];
57
+ }
58
+ /** Options for {@link runExecGate}. */
59
+ export interface ExecGateOptions {
60
+ /** Stop at the first failed/non-zero step (default `true` — a cheap CI-style short-circuit). */
61
+ stopOnFailure?: boolean;
62
+ /** Cap captured output **per step** in UTF-8 bytes (default 64 KiB) so a `find /` can't flood memory. */
63
+ maxOutputBytes?: number;
64
+ /** Idle read timeout (ms) for the streaming (remote) path; ignored on the buffered path. */
65
+ readTimeoutMs?: number;
66
+ /** Abort the whole gate (also forwarded to each command). */
67
+ signal?: AbortSignal;
68
+ }
69
+ /**
70
+ * Run an L2 mechanical gate: execute `steps` in `env` and gate on real exit codes. See the file header for
71
+ * the security contract — `steps` must be a trusted, spec-derived suite, not worker-authored tests.
72
+ */
73
+ export declare function runExecGate(env: ExecutionEnv, steps: ExecStep[], options?: ExecGateOptions): Promise<ExecGateResult>;
74
+ //# sourceMappingURL=exec-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exec-gate.d.ts","sourceRoot":"","sources":["../../src/core/exec-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAG3D,kCAAkC;AAClC,MAAM,WAAW,QAAQ;IACvB,gFAAgF;IAChF,OAAO,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8FAA8F;IAC9F,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,gDAAgD;AAChD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,6GAA6G;IAC7G,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,yGAAyG;IACzG,EAAE,EAAE,OAAO,CAAC;IACZ,yHAAyH;IACzH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yFAAyF;IACzF,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,yCAAyC;AACzC,MAAM,WAAW,cAAc;IAC7B,yIAAyI;IACzI,MAAM,EAAE,OAAO,CAAC;IAChB,2GAA2G;IAC3G,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED,uCAAuC;AACvC,MAAM,WAAW,eAAe;IAC9B,gGAAgG;IAChG,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,yGAAyG;IACzG,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4FAA4F;IAC5F,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AA2GD;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,QAAQ,EAAE,EACjB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,cAAc,CAAC,CAiBzB"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * L2 mechanical verification gate (design/54) — the "verifiable outputs" exit oracle.
3
+ *
4
+ * Runs a TRUSTED, spec-derived suite of commands (build / type-check / test) in an {@link ExecutionEnv}
5
+ * and gates on the **real exit codes**: pass = every step exited 0. This is the mechanical half of
6
+ * verifiable outputs (design/54 §2); the de-correlated LLM-judge half is {@link runWithVerification}
7
+ * (L3). It catches what tests cover; service[33] measured L2 alone misses 50-100% of semantic/edge
8
+ * defects, which is why L3 runs on what passes L2.
9
+ *
10
+ * **It is a thin exit oracle, not a framework** — no model, no Runner, no agents dependency. It just runs
11
+ * commands and reports their exit truthfully, choosing the streaming `execStream` on a remote env (long
12
+ * builds, read-timeout, output cap) or the buffered `exec` on a base env. Which commands to run, and how
13
+ * to compose L2 with L3 / per-module sub-gates, is the caller's (profile's) job (design/54 §4).
14
+ *
15
+ * 🔴 SECURITY (design/53 §2.B, threat BUG8 — "L2 can be gamed"): `steps` MUST be a trusted, spec-derived
16
+ * suite — NOT test files an **untrusted worker** authored (a worker can write `assert(true)` / happy-path
17
+ * tests that pass while the code is broken, pushing all pressure onto an uncalibrated L3). This helper does
18
+ * not and cannot know which commands are trustworthy; the caller owns that. The gate's guarantee is narrow:
19
+ * "did these exact commands all exit 0 in this env" — nothing about whether the commands are meaningful,
20
+ * whether the env is isolated (design/53 §E = deployment), or the semantics of the change (that is L3).
21
+ */
22
+ import { isRemoteExecutionEnv, RemoteExecutionError } from "./remote-env.js";
23
+ const DEFAULT_MAX_OUTPUT_BYTES = 64 * 1024;
24
+ /**
25
+ * Truncate a string to at most `maxBytes` UTF-8 bytes WITHOUT splitting a multi-byte char (including
26
+ * supplementary-plane chars / surrogate pairs). Encodes once, then backs the cut point off any UTF-8
27
+ * continuation bytes (`10xxxxxx`) so the boundary lands on a complete code point — never producing a lone
28
+ * surrogate / U+FFFD. Returns the exact byte length of `text` so callers needn't re-measure.
29
+ */
30
+ function clampBytes(s, maxBytes) {
31
+ // Fast path (common): measure without allocating a Buffer copy when nothing needs truncating.
32
+ const total = Buffer.byteLength(s, "utf8");
33
+ if (total <= maxBytes)
34
+ return { text: s, bytes: total, truncated: false };
35
+ const buf = Buffer.from(s, "utf8");
36
+ // Move the cut to a code-point boundary: if the FIRST EXCLUDED byte is a UTF-8 continuation byte
37
+ // (10xxxxxx) we're slicing mid-sequence, so step back until it isn't (a lead/ASCII byte = a boundary).
38
+ let end = maxBytes;
39
+ while (end > 0 && (buf[end] & 0xc0) === 0x80)
40
+ end--;
41
+ return { text: buf.toString("utf8", 0, end), bytes: end, truncated: true };
42
+ }
43
+ /** Run one step on a remote env via the streaming `execStream`, capping output and never throwing out. */
44
+ async function runStreamStep(env, step, options, maxOutputBytes) {
45
+ const label = step.label ?? step.command;
46
+ const out = [];
47
+ const errOut = [];
48
+ let outBytes = 0;
49
+ let errBytes = 0;
50
+ let truncated = false;
51
+ let exitCode = null;
52
+ const append = (bucket, used, chunk) => {
53
+ if (used >= maxOutputBytes) {
54
+ truncated = true;
55
+ return used;
56
+ }
57
+ const { text, bytes, truncated: cut } = clampBytes(chunk, maxOutputBytes - used);
58
+ if (cut)
59
+ truncated = true;
60
+ bucket.push(text);
61
+ return used + bytes;
62
+ };
63
+ try {
64
+ for await (const chunk of env.execStream(step.command, {
65
+ cwd: step.cwd,
66
+ env: step.env,
67
+ timeout: step.timeoutSec,
68
+ signal: options.signal,
69
+ readTimeoutMs: options.readTimeoutMs,
70
+ maxOutputBytes,
71
+ })) {
72
+ if (chunk.type === "stdout")
73
+ outBytes = append(out, outBytes, chunk.data);
74
+ else if (chunk.type === "stderr")
75
+ errBytes = append(errOut, errBytes, chunk.data);
76
+ else
77
+ exitCode = chunk.exitCode;
78
+ }
79
+ }
80
+ catch (e) {
81
+ const code = e instanceof RemoteExecutionError
82
+ ? e.code
83
+ : e?.name === "AbortError"
84
+ ? "aborted"
85
+ : "unknown";
86
+ return { label, command: step.command, exitCode: null, stdout: out.join(""), stderr: errOut.join(""), ok: false, errorCode: code, truncated };
87
+ }
88
+ return { label, command: step.command, exitCode, stdout: out.join(""), stderr: errOut.join(""), ok: exitCode === 0, truncated };
89
+ }
90
+ /** Run one step on a base env via the buffered `exec`, capping output. */
91
+ async function runBufferedStep(env, step, options, maxOutputBytes) {
92
+ const label = step.label ?? step.command;
93
+ const res = await env.exec(step.command, {
94
+ cwd: step.cwd,
95
+ env: step.env,
96
+ timeout: step.timeoutSec,
97
+ abortSignal: options.signal,
98
+ });
99
+ if (!res.ok) {
100
+ return { label, command: step.command, exitCode: null, stdout: "", stderr: "", ok: false, errorCode: res.error.code };
101
+ }
102
+ const so = clampBytes(res.value.stdout, maxOutputBytes);
103
+ const se = clampBytes(res.value.stderr, maxOutputBytes);
104
+ return {
105
+ label,
106
+ command: step.command,
107
+ exitCode: res.value.exitCode,
108
+ stdout: so.text,
109
+ stderr: se.text,
110
+ ok: res.value.exitCode === 0,
111
+ truncated: so.truncated || se.truncated,
112
+ };
113
+ }
114
+ /** Narrowing assertion so the stream branch carries the remote type (only called after `isRemoteExecutionEnv`). */
115
+ function assertRemote(env) {
116
+ if (!isRemoteExecutionEnv(env))
117
+ throw new Error("not a remote env");
118
+ return env;
119
+ }
120
+ /**
121
+ * Run an L2 mechanical gate: execute `steps` in `env` and gate on real exit codes. See the file header for
122
+ * the security contract — `steps` must be a trusted, spec-derived suite, not worker-authored tests.
123
+ */
124
+ export async function runExecGate(env, steps, options = {}) {
125
+ const stopOnFailure = options.stopOnFailure ?? true;
126
+ const maxOutputBytes = options.maxOutputBytes ?? DEFAULT_MAX_OUTPUT_BYTES;
127
+ const remote = isRemoteExecutionEnv(env);
128
+ const results = [];
129
+ for (const step of steps) {
130
+ if (options.signal?.aborted) {
131
+ results.push({ label: step.label ?? step.command, command: step.command, exitCode: null, stdout: "", stderr: "", ok: false, errorCode: "aborted" });
132
+ break;
133
+ }
134
+ const r = remote
135
+ ? await runStreamStep(assertRemote(env), step, options, maxOutputBytes)
136
+ : await runBufferedStep(env, step, options, maxOutputBytes);
137
+ results.push(r);
138
+ if (!r.ok && stopOnFailure)
139
+ break;
140
+ }
141
+ return { passed: results.length > 0 && results.every((s) => s.ok), steps: results };
142
+ }
143
+ //# sourceMappingURL=exec-gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exec-gate.js","sourceRoot":"","sources":["../../src/core/exec-gate.ts"],"names":[],"mappings":"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"}