@sema-agent/core 7.55.0 → 7.57.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (502) hide show
  1. package/CHANGELOG.md +1054 -0
  2. package/LICENSE +1 -1
  3. package/dist/agents/cascade.js +1 -1
  4. package/dist/agents/cc-peer-directory.js +1 -0
  5. package/dist/agents/child-model-seat.d.ts +0 -11
  6. package/dist/agents/child-model-seat.js +0 -3
  7. package/dist/agents/list-agents-tool.d.ts +3 -1
  8. package/dist/agents/list-agents-tool.js +7 -7
  9. package/dist/agents/org-delivery-gate.js +3 -4
  10. package/dist/agents/peer-directory.d.ts +22 -4
  11. package/dist/agents/peer-directory.js +24 -2
  12. package/dist/agents/peer-held-queue.d.ts +69 -49
  13. package/dist/agents/peer-held-queue.js +255 -106
  14. package/dist/agents/peer-session-drain.js +65 -45
  15. package/dist/agents/repair-loop.js +2 -2
  16. package/dist/agents/send-message-tool.js +7 -6
  17. package/dist/agents/subagent.d.ts +6 -4
  18. package/dist/agents/subagent.js +72 -68
  19. package/dist/agents/tool-filter.d.ts +7 -5
  20. package/dist/agents/tool-filter.js +12 -9
  21. package/dist/agents/verify.d.ts +3 -2
  22. package/dist/agents/verify.js +3 -3
  23. package/dist/brain/anthropic.js +45 -80
  24. package/dist/brain/media-degrade.d.ts +18 -7
  25. package/dist/brain/media-degrade.js +13 -2
  26. package/dist/brain/model-capability.d.ts +37 -0
  27. package/dist/brain/model-capability.js +34 -0
  28. package/dist/brain/model-presets.d.ts +2 -8
  29. package/dist/brain/model-presets.js +1 -6
  30. package/dist/brain/open-responses.js +23 -34
  31. package/dist/brain/openai.js +25 -96
  32. package/dist/brain/provider-dialect.d.ts +3 -2
  33. package/dist/brain/provider-dialect.js +2 -2
  34. package/dist/brain/reasoning-request.d.ts +96 -0
  35. package/dist/brain/reasoning-request.js +174 -0
  36. package/dist/brain/reasoning.d.ts +11 -11
  37. package/dist/brain/reasoning.js +4 -3
  38. package/dist/brain/request-params.d.ts +13 -4
  39. package/dist/brain/request-params.js +21 -5
  40. package/dist/brain/status-sink.d.ts +20 -0
  41. package/dist/brain/status-sink.js +7 -0
  42. package/dist/brain/stream-engine.d.ts +9 -0
  43. package/dist/brain/stream-engine.js +24 -10
  44. package/dist/brain/stream-shared.d.ts +5 -4
  45. package/dist/brain/stream-shared.js +4 -4
  46. package/dist/core/a2a.d.ts +2 -1
  47. package/dist/core/a2a.js +19 -13
  48. package/dist/core/agent-definition.d.ts +10 -0
  49. package/dist/core/allow-entry.d.ts +23 -23
  50. package/dist/core/allow-entry.js +42 -46
  51. package/dist/core/allow-rule-shadow.d.ts +3 -3
  52. package/dist/core/approval-object.d.ts +21 -5
  53. package/dist/core/approval-object.js +44 -17
  54. package/dist/core/ask-origin.d.ts +66 -20
  55. package/dist/core/ask-origin.js +63 -23
  56. package/dist/core/ask-question.d.ts +51 -8
  57. package/dist/core/ask-question.js +3 -4
  58. package/dist/core/ask-unresolvable-notice.d.ts +8 -3
  59. package/dist/core/ask-unresolvable-notice.js +16 -2
  60. package/dist/core/auto-compaction.d.ts +71 -6
  61. package/dist/core/auto-compaction.js +42 -26
  62. package/dist/core/background-agent-store.d.ts +6 -2
  63. package/dist/core/background-agent-store.js +1 -1
  64. package/dist/core/checkpoint-generation.d.ts +53 -0
  65. package/dist/core/checkpoint-generation.js +35 -0
  66. package/dist/core/checkpoint-queries.d.ts +180 -0
  67. package/dist/core/checkpoint-queries.js +272 -0
  68. package/dist/core/checkpoint-requirements.d.ts +19 -1
  69. package/dist/core/checkpoint-requirements.js +6 -0
  70. package/dist/core/checkpoint-store.d.ts +105 -53
  71. package/dist/core/checkpoint-store.js +43 -20
  72. package/dist/core/cross-boundary-taint.d.ts +6 -5
  73. package/dist/core/cross-boundary-taint.js +5 -5
  74. package/dist/core/decision-receipt.d.ts +37 -3
  75. package/dist/core/decision-receipt.js +17 -17
  76. package/dist/core/delegation-not-started.d.ts +6 -0
  77. package/dist/core/delegation-not-started.js +17 -0
  78. package/dist/core/engine-attestation.d.ts +93 -0
  79. package/dist/core/engine-attestation.js +70 -0
  80. package/dist/core/engine-capabilities.d.ts +4 -1
  81. package/dist/core/engine-capabilities.js +1 -1
  82. package/dist/core/engine-notice.d.ts +32 -12
  83. package/dist/core/engine-notice.js +6 -0
  84. package/dist/core/file-history-store.d.ts +104 -22
  85. package/dist/core/file-history-store.js +37 -19
  86. package/dist/core/gate-fold.d.ts +1 -1
  87. package/dist/core/gate-fold.js +22 -10
  88. package/dist/core/gate-lanes.js +73 -65
  89. package/dist/core/gate-outcome.d.ts +26 -5
  90. package/dist/core/gate-outcome.js +26 -0
  91. package/dist/core/governance-codes.d.ts +5 -1
  92. package/dist/core/governance-codes.js +6 -0
  93. package/dist/core/hooks.d.ts +19 -18
  94. package/dist/core/hooks.js +3 -1
  95. package/dist/core/host-floor.d.ts +128 -0
  96. package/dist/core/host-floor.js +206 -0
  97. package/dist/core/host-target.d.ts +38 -3
  98. package/dist/core/host-target.js +38 -5
  99. package/dist/core/mailbox-store.d.ts +62 -1
  100. package/dist/core/mailbox-store.js +59 -0
  101. package/dist/core/mcp-name-judge.d.ts +46 -0
  102. package/dist/core/mcp-name-judge.js +61 -0
  103. package/dist/core/mcp-probe.d.ts +1 -1
  104. package/dist/core/mcp-probe.js +2 -5
  105. package/dist/core/mcp.d.ts +5 -1
  106. package/dist/core/mcp.js +70 -64
  107. package/dist/core/memory-engine/consolidation-driver.js +4 -3
  108. package/dist/core/memory-engine/delegation-settlement.js +15 -24
  109. package/dist/core/memory-engine/distiller.js +26 -17
  110. package/dist/core/memory-engine/engine.js +4 -4
  111. package/dist/core/memory-engine/layout.d.ts +60 -8
  112. package/dist/core/memory-engine/layout.js +70 -8
  113. package/dist/core/model-seat.d.ts +10 -3
  114. package/dist/core/mods/classic-events.d.ts +67 -0
  115. package/dist/core/mods/classic-events.js +1 -0
  116. package/dist/core/mods/dollar.d.ts +13 -0
  117. package/dist/core/mods/extension-call.d.ts +31 -0
  118. package/dist/core/mods/extension-call.js +43 -0
  119. package/dist/core/mods/kernel/dispatch.d.ts +20 -3
  120. package/dist/core/mods/kernel/dispatch.js +140 -69
  121. package/dist/core/mods/kernel/events.d.ts +47 -11
  122. package/dist/core/mods/kernel/events.js +66 -42
  123. package/dist/core/mods/kernel/index.d.ts +4 -4
  124. package/dist/core/mods/kernel/index.js +2 -2
  125. package/dist/core/mods/kernel/receive.d.ts +39 -5
  126. package/dist/core/mods/kernel/receive.js +290 -17
  127. package/dist/core/mods/kernel/registration.d.ts +33 -2
  128. package/dist/core/mods/kernel/registration.js +6 -7
  129. package/dist/core/mods/kernel/site-rules.d.ts +44 -16
  130. package/dist/core/mods/kernel/site-rules.js +24 -42
  131. package/dist/core/mods/spec-seats.d.ts +69 -0
  132. package/dist/core/mods/spec-seats.js +114 -0
  133. package/dist/core/mods/stations.d.ts +28 -8
  134. package/dist/core/mods/stations.js +29 -13
  135. package/dist/core/mods/tool-call.d.ts +79 -0
  136. package/dist/core/mods/tool-call.js +152 -0
  137. package/dist/core/namespaced-rule-name.d.ts +32 -38
  138. package/dist/core/namespaced-rule-name.js +29 -36
  139. package/dist/core/parent-spec-seat.d.ts +6 -1
  140. package/dist/core/parent-spec-seat.js +2 -0
  141. package/dist/core/park-selfcheck.js +3 -0
  142. package/dist/core/permission-rule-consent.d.ts +24 -3
  143. package/dist/core/permission-rule-consent.js +136 -41
  144. package/dist/core/permission-rule-model.d.ts +57 -5
  145. package/dist/core/permission-rule-model.js +90 -31
  146. package/dist/core/permission-rule-org.d.ts +6 -2
  147. package/dist/core/permission-rule-org.js +8 -4
  148. package/dist/core/permission-rule-provider.d.ts +5 -2
  149. package/dist/core/permission-rule-provider.js +41 -11
  150. package/dist/core/permission-rule-store.d.ts +3 -2
  151. package/dist/core/permission-rule-store.js +11 -2
  152. package/dist/core/permission-rule-sync.js +3 -2
  153. package/dist/core/permission-rule-syntax.d.ts +5 -4
  154. package/dist/core/permission-rule-syntax.js +2 -2
  155. package/dist/core/permission-rules.d.ts +4 -4
  156. package/dist/core/permission-rules.js +11 -20
  157. package/dist/core/persisted-rule-arms.d.ts +2 -2
  158. package/dist/core/persisted-rule-arms.js +10 -12
  159. package/dist/core/principal-name.d.ts +20 -0
  160. package/dist/core/principal-name.js +22 -0
  161. package/dist/core/prompt-section-seat.js +4 -6
  162. package/dist/core/protocol-http-auth.d.ts +40 -5
  163. package/dist/core/protocol-http-auth.js +168 -4
  164. package/dist/core/protocol-naming.d.ts +20 -0
  165. package/dist/core/protocol-naming.js +20 -3
  166. package/dist/core/read-only-shell.d.ts +20 -5
  167. package/dist/core/read-only-shell.js +29 -14
  168. package/dist/core/remote-env.d.ts +37 -1
  169. package/dist/core/remote-env.js +11 -0
  170. package/dist/core/resume-startup-cause.d.ts +24 -2
  171. package/dist/core/resume-startup-cause.js +20 -1
  172. package/dist/core/retired-keys.d.ts +16 -0
  173. package/dist/core/retired-keys.js +16 -4
  174. package/dist/core/rewrite-rejudge.d.ts +60 -0
  175. package/dist/core/rewrite-rejudge.js +36 -0
  176. package/dist/core/roles.d.ts +28 -1
  177. package/dist/core/roles.js +81 -26
  178. package/dist/core/rule-lane-reads.d.ts +20 -15
  179. package/dist/core/rule-lane-reads.js +45 -17
  180. package/dist/core/rule-owner.d.ts +3 -3
  181. package/dist/core/rule-owner.js +3 -2
  182. package/dist/core/runner/announce-once-ledger.d.ts +14 -0
  183. package/dist/core/runner/announce-once-ledger.js +5 -0
  184. package/dist/core/runner/assemble-result.d.ts +1 -0
  185. package/dist/core/runner/assemble-result.js +1 -1
  186. package/dist/core/runner/call-hook-stations.d.ts +3 -2
  187. package/dist/core/runner/caller-roster.d.ts +16 -4
  188. package/dist/core/runner/caller-roster.js +33 -6
  189. package/dist/core/runner/capability-withheld-seat.d.ts +5 -0
  190. package/dist/core/runner/capability-withheld-seat.js +24 -0
  191. package/dist/core/runner/classifier-ladder.d.ts +7 -9
  192. package/dist/core/runner/classifier-ladder.js +3 -3
  193. package/dist/core/runner/compact-session.d.ts +10 -0
  194. package/dist/core/runner/compact-session.js +202 -0
  195. package/dist/core/runner/compaction-call-options.d.ts +2 -2
  196. package/dist/core/runner/compaction-seams.d.ts +21 -1
  197. package/dist/core/runner/compaction-seams.js +11 -8
  198. package/dist/core/runner/construction-doors.js +3 -0
  199. package/dist/core/runner/contracts.d.ts +50 -40
  200. package/dist/core/runner/cross-boundary-lane.d.ts +17 -13
  201. package/dist/core/runner/cross-boundary-lane.js +40 -27
  202. package/dist/core/runner/denial-limit-arms.d.ts +2 -2
  203. package/dist/core/runner/denial-limit-arms.js +1 -1
  204. package/dist/core/runner/derived-route-fallback.d.ts +13 -0
  205. package/dist/core/runner/derived-route-fallback.js +6 -0
  206. package/dist/core/runner/env-capability-census.d.ts +3 -2
  207. package/dist/core/runner/env-capability-census.js +9 -3
  208. package/dist/core/runner/file-history-request.d.ts +18 -0
  209. package/dist/core/runner/file-history-request.js +21 -13
  210. package/dist/core/runner/file-history-restore.d.ts +45 -0
  211. package/dist/core/runner/file-history-restore.js +46 -0
  212. package/dist/core/runner/gate-exit.d.ts +3 -3
  213. package/dist/core/runner/gate-exit.js +4 -3
  214. package/dist/core/runner/image.d.ts +7 -17
  215. package/dist/core/runner/image.js +9 -60
  216. package/dist/core/runner/permission-rule-lanes.d.ts +11 -11
  217. package/dist/core/runner/permission-rule-lanes.js +39 -17
  218. package/dist/core/runner/person-path-rows.d.ts +12 -9
  219. package/dist/core/runner/person-path-rows.js +18 -7
  220. package/dist/core/runner/prepare-acquire-reconcile.d.ts +3 -0
  221. package/dist/core/runner/prepare-acquire-reconcile.js +2 -1
  222. package/dist/core/runner/prepare-ask-lane.d.ts +2 -2
  223. package/dist/core/runner/prepare-ask-lane.js +5 -2
  224. package/dist/core/runner/prepare-caps-and-workflow.d.ts +4 -6
  225. package/dist/core/runner/prepare-caps-and-workflow.js +4 -3
  226. package/dist/core/runner/prepare-config-doors.d.ts +35 -38
  227. package/dist/core/runner/prepare-config-doors.js +46 -28
  228. package/dist/core/runner/prepare-defer-classify.d.ts +4 -3
  229. package/dist/core/runner/prepare-defer-classify.js +7 -8
  230. package/dist/core/runner/prepare-file-history.d.ts +48 -8
  231. package/dist/core/runner/prepare-file-history.js +7 -39
  232. package/dist/core/runner/prepare-gate-stations.d.ts +1 -1
  233. package/dist/core/runner/prepare-gate-stations.js +10 -1
  234. package/dist/core/runner/prepare-hands-readface.d.ts +5 -9
  235. package/dist/core/runner/prepare-hands-readface.js +17 -14
  236. package/dist/core/runner/prepare-inherited-gate.d.ts +6 -3
  237. package/dist/core/runner/prepare-inherited-gate.js +5 -3
  238. package/dist/core/runner/prepare-memory-engine-session.js +1 -1
  239. package/dist/core/runner/prepare-park-ask.d.ts +2 -0
  240. package/dist/core/runner/prepare-park-ask.js +7 -7
  241. package/dist/core/runner/prepare-policy-chain.d.ts +6 -3
  242. package/dist/core/runner/prepare-policy-chain.js +67 -76
  243. package/dist/core/runner/prepare-prompt-assembly.d.ts +5 -7
  244. package/dist/core/runner/prepare-prompt-assembly.js +10 -8
  245. package/dist/core/runner/prepare-prompt-inputs.d.ts +11 -9
  246. package/dist/core/runner/prepare-prompt-inputs.js +3 -5
  247. package/dist/core/runner/prepare-protocol-tools.d.ts +2 -0
  248. package/dist/core/runner/prepare-protocol-tools.js +3 -3
  249. package/dist/core/runner/prepare-safety-scan.d.ts +1 -1
  250. package/dist/core/runner/prepare-safety-scan.js +0 -17
  251. package/dist/core/runner/prepare-suspend-saga.d.ts +2 -0
  252. package/dist/core/runner/prepare-suspend-saga.js +5 -6
  253. package/dist/core/runner/prepare-task.d.ts +5 -2
  254. package/dist/core/runner/prepare-task.js +48 -43
  255. package/dist/core/runner/prepare-tool-disclosure-mount.d.ts +20 -4
  256. package/dist/core/runner/prepare-tool-disclosure-mount.js +33 -23
  257. package/dist/core/runner/prepare-turn-wiring.d.ts +0 -4
  258. package/dist/core/runner/prepare-turn-wiring.js +2 -7
  259. package/dist/core/runner/prepare-wiring-manifest.d.ts +6 -2
  260. package/dist/core/runner/prepare-wiring-manifest.js +3 -3
  261. package/dist/core/runner/resume-admission.js +1 -1
  262. package/dist/core/runner/resume-apply.js +11 -12
  263. package/dist/core/runner/resume-checkpoint-screen.js +3 -0
  264. package/dist/core/runner/resume-claim.d.ts +4 -2
  265. package/dist/core/runner/resume-claim.js +15 -8
  266. package/dist/core/runner/retired-runner-deps.js +1 -0
  267. package/dist/core/runner/rewind-files.d.ts +12 -0
  268. package/dist/core/runner/rewind-files.js +90 -0
  269. package/dist/core/runner/run-attachment-seats.js +2 -1
  270. package/dist/core/runner/run-brain-sinks.d.ts +4 -1
  271. package/dist/core/runner/run-brain-sinks.js +4 -2
  272. package/dist/core/runner/run-harness-handlers.js +12 -4
  273. package/dist/core/runner/run-leg.d.ts +1 -1
  274. package/dist/core/runner/run-leg.js +40 -39
  275. package/dist/core/runner/run-notification-lane.d.ts +2 -0
  276. package/dist/core/runner/run-notification-lane.js +2 -2
  277. package/dist/core/runner/run-recovery-lanes.js +3 -4
  278. package/dist/core/runner/run-settle-and-teardown.js +7 -12
  279. package/dist/core/runner/run-terminal-adoption.js +3 -4
  280. package/dist/core/runner/run-turn-boundary.js +4 -15
  281. package/dist/core/runner/runtask.d.ts +10 -0
  282. package/dist/core/runner/runtask.js +35 -42
  283. package/dist/core/runner/send-message-continuation.js +1 -1
  284. package/dist/core/runner/session-read-file-states.d.ts +15 -0
  285. package/dist/core/runner/session-read-file-states.js +28 -0
  286. package/dist/core/runner/session-rule-policy.js +4 -3
  287. package/dist/core/runner/session-verb-doors.d.ts +28 -0
  288. package/dist/core/runner/session-verb-doors.js +48 -0
  289. package/dist/core/runner/session-write-ledger.d.ts +30 -0
  290. package/dist/core/runner/session-write-ledger.js +101 -0
  291. package/dist/core/runner/shell-env-withheld.d.ts +33 -0
  292. package/dist/core/runner/shell-env-withheld.js +51 -0
  293. package/dist/core/runner/skills-seat.js +6 -2
  294. package/dist/core/runner/stream-settle-backstop.js +12 -15
  295. package/dist/core/runner/sub-agent-deny-lists.d.ts +25 -3
  296. package/dist/core/runner/sub-agent-deny-lists.js +25 -17
  297. package/dist/core/runner/synthetic-tools.d.ts +6 -0
  298. package/dist/core/runner/synthetic-tools.js +4 -1
  299. package/dist/core/runner/teardown-bounded.d.ts +1 -0
  300. package/dist/core/runner/teardown-bounded.js +1 -0
  301. package/dist/core/runner/tool-disclosure.d.ts +10 -12
  302. package/dist/core/runner/tool-disclosure.js +1 -3
  303. package/dist/core/runner/tool-end-body.d.ts +1 -1
  304. package/dist/core/runner/tool-end-body.js +10 -9
  305. package/dist/core/runner/tool-not-executed.d.ts +5 -0
  306. package/dist/core/runner/tool-not-executed.js +11 -0
  307. package/dist/core/runner/tool-occurrence.d.ts +8 -0
  308. package/dist/core/runner/tool-occurrence.js +7 -0
  309. package/dist/core/runner/turn-attachments.d.ts +33 -15
  310. package/dist/core/runner/turn-attachments.js +62 -37
  311. package/dist/core/runner-deps.d.ts +7 -7
  312. package/dist/core/safety-axis-vocab.d.ts +6 -4
  313. package/dist/core/safety-axis-vocab.js +6 -5
  314. package/dist/core/safety-merge-corpus.js +11 -3
  315. package/dist/core/secret-env.d.ts +30 -3
  316. package/dist/core/secret-env.js +47 -8
  317. package/dist/core/select-model.js +3 -3
  318. package/dist/core/session-policy-store.d.ts +32 -15
  319. package/dist/core/session-policy-store.js +156 -36
  320. package/dist/core/session-store.d.ts +29 -10
  321. package/dist/core/session-store.js +51 -19
  322. package/dist/core/session.d.ts +82 -16
  323. package/dist/core/session.js +53 -0
  324. package/dist/core/shell-read-silence.d.ts +11 -12
  325. package/dist/core/shell-read-silence.js +9 -5
  326. package/dist/core/shell-run-candidates.js +3 -1
  327. package/dist/core/shell-wrapper-projection.d.ts +1 -1
  328. package/dist/core/shell-wrapper-projection.js +1 -1
  329. package/dist/core/shell-wrapper-table.d.ts +14 -7
  330. package/dist/core/shell-wrapper-table.js +5 -4
  331. package/dist/core/side-query.js +10 -1
  332. package/dist/core/skill-grant.d.ts +7 -2
  333. package/dist/core/skill-grant.js +5 -0
  334. package/dist/core/skills-directory.js +6 -2
  335. package/dist/core/store-contracts/background-agent-store-contract.js +1 -0
  336. package/dist/core/store-contracts/checkpoint-store-contract.d.ts +11 -1
  337. package/dist/core/store-contracts/checkpoint-store-contract.js +141 -2
  338. package/dist/core/store-contracts/file-history-store-contract.js +40 -1
  339. package/dist/core/store-contracts/mailbox-store-contract.js +49 -1
  340. package/dist/core/store-contracts/peer-directory-contract.d.ts +7 -2
  341. package/dist/core/store-contracts/peer-directory-contract.js +14 -2
  342. package/dist/core/store-contracts/session-repo-contract.js +51 -0
  343. package/dist/core/store-contracts/session-store-contract.d.ts +2 -1
  344. package/dist/core/store-contracts/session-store-contract.js +150 -14
  345. package/dist/core/stub-env.d.ts +2 -0
  346. package/dist/core/stub-env.js +1 -0
  347. package/dist/core/synthetic-read-verdict.js +3 -3
  348. package/dist/core/task-event.d.ts +32 -4
  349. package/dist/core/task-notification.d.ts +16 -12
  350. package/dist/core/task-registry-agent.d.ts +8 -4
  351. package/dist/core/task-registry-agent.js +14 -8
  352. package/dist/core/task-registry-shared.d.ts +35 -6
  353. package/dist/core/task-registry-shared.js +11 -0
  354. package/dist/core/task-registry.d.ts +10 -1
  355. package/dist/core/task-registry.js +12 -2
  356. package/dist/core/task-result.d.ts +18 -0
  357. package/dist/core/task-spec.d.ts +18 -13
  358. package/dist/core/tighten-task-spec.js +2 -1
  359. package/dist/core/tool-catalog-entries.d.ts +23 -0
  360. package/dist/core/tool-catalog-entries.js +14 -2
  361. package/dist/core/tool-check-reading.d.ts +11 -0
  362. package/dist/core/tool-check-reading.js +11 -6
  363. package/dist/core/tool-model-gate.d.ts +2 -2
  364. package/dist/core/tool-name-aliases.d.ts +48 -18
  365. package/dist/core/tool-name-aliases.js +36 -19
  366. package/dist/core/tool-name-readings.d.ts +6 -32
  367. package/dist/core/tool-name-readings.js +2 -9
  368. package/dist/core/tool-policy.d.ts +78 -204
  369. package/dist/core/tool-policy.js +152 -204
  370. package/dist/core/tool-result-store.js +3 -0
  371. package/dist/core/tool-roster.d.ts +14 -19
  372. package/dist/core/tool-roster.js +11 -44
  373. package/dist/core/tool-spec-members.js +7 -2
  374. package/dist/core/tool-spec.d.ts +19 -11
  375. package/dist/core/tools.js +49 -9
  376. package/dist/core/trace.d.ts +6 -3
  377. package/dist/core/trace.js +2 -1
  378. package/dist/core/types.d.ts +1 -1
  379. package/dist/core/untrusted-egress.d.ts +20 -0
  380. package/dist/core/untrusted-egress.js +77 -3
  381. package/dist/core/user-attachment.d.ts +8 -1
  382. package/dist/core/user-attachment.js +64 -4
  383. package/dist/core/wiring-manifest.d.ts +9 -0
  384. package/dist/core/wiring-manifest.js +1 -0
  385. package/dist/core/workflow-journal-store.js +1 -1
  386. package/dist/engine/compaction/compaction.js +3 -2
  387. package/dist/engine/execution-env/node-execution-env.d.ts +7 -3
  388. package/dist/engine/execution-env/node-execution-env.js +11 -2
  389. package/dist/engine/harness/agent-harness.d.ts +32 -6
  390. package/dist/engine/harness/agent-harness.js +65 -9
  391. package/dist/engine/harness/types.d.ts +29 -2
  392. package/dist/engine/llm/types.d.ts +28 -11
  393. package/dist/engine/loop/agent-loop.d.ts +23 -4
  394. package/dist/engine/loop/agent-loop.js +42 -30
  395. package/dist/engine/loop/types.d.ts +16 -6
  396. package/dist/engine/session/memory-repo.d.ts +9 -2
  397. package/dist/engine/session/memory-repo.js +11 -1
  398. package/dist/engine/session/repo-utils.d.ts +6 -5
  399. package/dist/engine/session/repo-utils.js +14 -6
  400. package/dist/index.d.ts +34 -17
  401. package/dist/index.js +22 -11
  402. package/dist/internal/harness-types.d.ts +1 -1
  403. package/dist/internal/harness.d.ts +2 -1
  404. package/dist/internal/harness.js +1 -0
  405. package/dist/internal/llm.d.ts +1 -1
  406. package/dist/orchestration/run-workflow-tool.d.ts +6 -4
  407. package/dist/orchestration/run-workflow-tool.js +5 -3
  408. package/dist/orchestration/workflow.d.ts +3 -0
  409. package/dist/orchestration/workflow.js +36 -18
  410. package/dist/primitives/credential-ref.d.ts +89 -0
  411. package/dist/primitives/credential-ref.js +125 -0
  412. package/dist/primitives/index.d.ts +2 -0
  413. package/dist/primitives/index.js +1 -0
  414. package/dist/prompt-assembly/artifact.d.ts +2 -2
  415. package/dist/prompt-assembly/artifact.js +5 -3
  416. package/dist/prompt-assembly/assemble.d.ts +3 -2
  417. package/dist/prompt-assembly/assemble.js +1 -1
  418. package/dist/prompt-assembly/catalog/schema.d.ts +43 -12
  419. package/dist/prompt-assembly/catalog/schema.js +34 -2
  420. package/dist/prompt-assembly/catalog/sections.js +0 -1
  421. package/dist/prompt-assembly/composer.d.ts +3 -1
  422. package/dist/prompt-assembly/composer.js +1 -1
  423. package/dist/prompt-assembly/event-registry.js +1 -0
  424. package/dist/prompt-assembly/overlay.js +3 -3
  425. package/dist/prompt-assembly/renderers.d.ts +1 -1
  426. package/dist/prompt-assembly/renderers.js +0 -3
  427. package/dist/prompt-assembly/role-base.d.ts +15 -0
  428. package/dist/prompt-assembly/role-base.js +9 -0
  429. package/dist/prompt-assembly/select.d.ts +39 -14
  430. package/dist/prompt-assembly/select.js +47 -16
  431. package/dist/prompt-assembly/sugar.d.ts +17 -11
  432. package/dist/prompt-assembly/sugar.js +8 -3
  433. package/dist/prompt-assembly/tool-catalog.d.ts +37 -3
  434. package/dist/prompt-assembly/tool-catalog.js +114 -4
  435. package/dist/prompt-assembly/turn-snapshot.d.ts +4 -10
  436. package/dist/prompt-assembly/turn-snapshot.js +0 -3
  437. package/dist/prompt-assembly/types.d.ts +0 -7
  438. package/dist/scenarios/full-body.d.ts +11 -11
  439. package/dist/scenarios/full-body.js +4 -3
  440. package/dist/shell/lex.js +10 -1
  441. package/dist/stores/file/adoption/adopt.js +4 -3
  442. package/dist/stores/file/adoption/marker.js +3 -2
  443. package/dist/stores/file/checkpoint-store.d.ts +21 -4
  444. package/dist/stores/file/checkpoint-store.js +38 -7
  445. package/dist/stores/file/file-history-store.js +18 -11
  446. package/dist/stores/file/index.js +2 -1
  447. package/dist/stores/file/mailbox-store.d.ts +2 -1
  448. package/dist/stores/file/mailbox-store.js +26 -1
  449. package/dist/stores/file/permission-rule-adopt.js +4 -3
  450. package/dist/stores/file/permission-rule-store.js +11 -5
  451. package/dist/stores/file/session-store.d.ts +29 -6
  452. package/dist/stores/file/session-store.js +42 -50
  453. package/dist/tools/artifact/artifact-tool.js +3 -2
  454. package/dist/tools/fs/bash-program-position.d.ts +19 -2
  455. package/dist/tools/fs/bash-program-position.js +56 -9
  456. package/dist/tools/fs/bash-readonly-classifier.d.ts +15 -19
  457. package/dist/tools/fs/bash-readonly-classifier.js +5 -10
  458. package/dist/tools/fs/fs-bash.js +15 -8
  459. package/dist/tools/fs/fs-glob.d.ts +86 -0
  460. package/dist/tools/fs/fs-glob.js +226 -0
  461. package/dist/tools/fs/fs-read.js +14 -14
  462. package/dist/tools/fs/fs-search-tools.js +7 -7
  463. package/dist/tools/fs/pattern-kill-guard.d.ts +23 -0
  464. package/dist/tools/fs/pattern-kill-guard.js +429 -0
  465. package/dist/tools/fs/pdf.d.ts +9 -6
  466. package/dist/tools/fs/pdf.js +3 -3
  467. package/dist/tools/fs/program-read-model.d.ts +57 -7
  468. package/dist/tools/fs/program-read-model.js +11 -1
  469. package/dist/tools/fs/program-read-model.rows.js +78 -21
  470. package/dist/tools/fs/read-deny-home.js +3 -2
  471. package/dist/tools/fs/removal-targets.d.ts +17 -7
  472. package/dist/tools/fs/removal-targets.js +47 -20
  473. package/dist/tools/fs/search.d.ts +10 -0
  474. package/dist/tools/fs/search.js +20 -26
  475. package/dist/tools/fs/shell-read-argv.js +89 -12
  476. package/dist/tools/fs/shell-read-bindings.d.ts +31 -0
  477. package/dist/tools/fs/shell-read-bindings.js +41 -0
  478. package/dist/tools/fs/shell-read-check.d.ts +10 -0
  479. package/dist/tools/fs/shell-read-check.js +13 -20
  480. package/dist/tools/fs/shell-read-environment.d.ts +5 -1
  481. package/dist/tools/fs/shell-read-environment.js +3 -2
  482. package/dist/tools/fs/shell-read-establish.d.ts +15 -0
  483. package/dist/tools/fs/shell-read-establish.js +19 -20
  484. package/dist/tools/fs/shell-read-identity.d.ts +12 -9
  485. package/dist/tools/fs/shell-read-identity.js +9 -4
  486. package/dist/tools/fs/shell-read-plan.js +24 -16
  487. package/dist/tools/fs/shell-read-start.d.ts +6 -1
  488. package/dist/tools/fs/shell-read-write-targets.d.ts +5 -1
  489. package/dist/tools/fs/shell-read-write-targets.js +2 -3
  490. package/dist/tools/fs/shell-reentry-text.d.ts +9 -0
  491. package/dist/tools/fs/shell-reentry-text.js +40 -2
  492. package/dist/tools/todo.js +63 -63
  493. package/dist/tools/web.d.ts +19 -14
  494. package/dist/tools/web.js +46 -61
  495. package/package.json +1 -1
  496. package/test/export-surface.snapshot.json +221 -7
  497. package/wire-changes/core-stores-sql@7.57.0.json +29 -0
  498. package/wire-changes/core@7.56.0.json +3891 -0
  499. package/wire-changes/core@7.57.0.json +1487 -0
  500. package/wire-changes/mods-kernel@7.56.0.json +303 -0
  501. package/wire-changes/mods-kernel@7.57.0.json +29 -0
  502. package/wire-changes/primitives@7.57.0.json +245 -0
@@ -16,15 +16,23 @@ import { boundaryIsTheSandbox, hasDestroy, isIsolated } from "../../core/remote-
16
16
  import { ghRateLimitHint } from "./gh-rate-limit.js";
17
17
  import { backgroundLifetimeNote } from "./fs-bash-background-text.js";
18
18
  import { resolveBashTimeoutCaps, bashTimeoutCapsSec, bashTimeoutArgRefusal, bashTimeoutParamDescription, envErrorDetail, bashMaxOutputChars, clipShellOutput, writeShellOverflowFile, shellRecoveryHint, CWD_SENTINEL, stripCwdSentinel, } from "./fs-shared.js";
19
- import { bashClassifyDefaultAllow, BASH_READONLY_DEFAULT_ALLOW, coarseReadonlyCheck, classifyBoundedReadonlyPollLoopDetailed, classifyCompoundReadonlyDetailed } from "./bash-readonly-classifier.js";
19
+ import { bashClassifyDefaultAllow, BASH_READONLY_DEFAULT_ALLOW, classifyBoundedReadonlyPollLoopDetailed, classifyCompoundReadonlyDetailed, parseLeadingCommandName } from "./bash-readonly-classifier.js";
20
+ import { readOnlyShellVerdict } from "../../core/read-only-shell.js";
20
21
  import { mountRuleFace, toolFace } from "../../core/tool-catalog-entries.js";
21
22
  import { argvOf, compoundValueHidesRun, expansionHidesRun, expansionsInHeredocBody, lexShell } from "../../shell/lex.js";
22
23
  import { arithmeticAssignedNames } from "./shell-read-bindings.js";
23
24
  import { thrownText } from "../../core/thrown-value.js";
25
+ import { patternKillRefusal } from "./pattern-kill-guard.js";
24
26
  function shellCommandOf(args) {
25
27
  const command = args?.command;
26
28
  return typeof command === "string" ? command : undefined;
27
29
  }
30
+ const CONCURRENT_READERS = new Set(BASH_READONLY_DEFAULT_ALLOW);
31
+ function readOnlyFaceRefusal(command, allow) {
32
+ const parsed = parseLeadingCommandName(command);
33
+ const verdict = "reject" in parsed ? { readOnly: false, reason: parsed.reject } : readOnlyShellVerdict(command, { readers: allow });
34
+ return verdict.readOnly ? undefined : verdict.reason;
35
+ }
28
36
  function isBackgroundShellCall(args) {
29
37
  return args?.run_in_background === true;
30
38
  }
@@ -38,11 +46,10 @@ export function bashReversibilityProbe(allow, boundary) {
38
46
  return { reversible: false };
39
47
  const home = typeof boundary === "function" ? boundary() : boundary;
40
48
  const fold = home?.homeDir !== undefined ? { homeDir: home.homeDir } : undefined;
41
- if (classifyCompoundReadonlyDetailed(command, allowSet, fold).reason === undefined)
42
- return { reversible: true };
43
- if (classifyBoundedReadonlyPollLoopDetailed(command, allowSet, fold).reason === undefined)
49
+ const reason = classifyCompoundReadonlyDetailed(command, allowSet, fold).reason;
50
+ if (reason === undefined)
44
51
  return { reversible: true };
45
- return { reversible: false };
52
+ return classifyBoundedReadonlyPollLoopDetailed(command, allowSet, fold).reason === undefined ? { reversible: true } : { reversible: false, reason };
46
53
  };
47
54
  }
48
55
  export { FULL_SHELL_CONTRACT_ID } from "../../core/tool-catalog-entries.js";
@@ -578,14 +585,14 @@ export function createBashTool(env, rootCanonical, coAuthor = false, cwdRef = {
578
585
  const command = shellCommandOf(args);
579
586
  if (command === undefined || isBackgroundShellCall(args))
580
587
  return false;
581
- return coarseReadonlyCheck(command, new Set(BASH_READONLY_DEFAULT_ALLOW)) === undefined;
588
+ return readOnlyShellVerdict(command, { readers: CONCURRENT_READERS }).readOnly;
582
589
  },
583
590
  execute: async (args, ctx) => {
584
591
  const { command, timeout, run_in_background, description } = args;
585
592
  const timeoutRefusal = bashTimeoutArgRefusal(timeout, timeoutCaps);
586
593
  if (timeoutRefusal !== undefined)
587
594
  return errorResult(timeoutRefusal, { type: "bash_invalid_timeout", code: "bash_invalid_timeout" });
588
- const refused = await taskOpts.shellReadAdmission?.("Bash", ctx.toolCallId, command, ctx.signal);
595
+ const refused = (await taskOpts.shellReadAdmission?.("Bash", ctx.toolCallId, command, ctx.signal)) ?? (await patternKillRefusal(command, env, cwdRef.current, ctx.signal));
589
596
  if (refused !== undefined)
590
597
  return refused;
591
598
  if (run_in_background) {
@@ -797,7 +804,7 @@ export function createBashReadonlyTool(env, rootCanonical, allow, opts) {
797
804
  const timeoutRefusal = bashTimeoutArgRefusal(timeout, timeoutCaps);
798
805
  if (timeoutRefusal !== undefined)
799
806
  return errorResult(timeoutRefusal, { type: "bash_invalid_timeout", code: "bash_invalid_timeout" });
800
- const reason = coarseReadonlyCheck(command, allow);
807
+ const reason = readOnlyFaceRefusal(command, allow);
801
808
  if (reason)
802
809
  return errorResult(`Error (Bash): ${reason}`);
803
810
  const refused = await opts?.shellReadAdmission?.("Bash", ctx.toolCallId, command, ctx.signal);
@@ -0,0 +1,86 @@
1
+ /**
2
+ * The matcher of the filesystem glob dialect: a token list is compiled to a small program, and a path is matched by walking
3
+ * it once, left to right, holding the SET of instructions that are live at the current position. An instruction is in the set
4
+ * at most once, so the cost of one test is at most the program's length times the path's length plus one, however many stars
5
+ * the pattern holds and however they are arranged — no expression is built from the pattern's text, so nothing backtracks and
6
+ * no pattern needs a cap. That product is a limit a pattern can reach on an ordinary path, when it keeps every instruction live at
7
+ * every place (a ring of empty alternatives does). The scratch it needs is two sets of the program's length, kept between tests for a
8
+ * program of up to 65 536 instructions (a longer program's is made for each test that gets past the two checks below and dropped: a
9
+ * cost of the program's length, whatever the path); a test whose threads all die at the first character costs what it touched, not
10
+ * the product of the two lengths. Two cheap checks come before the walk and only ever say "cannot match": a value that lacks a
11
+ * literal every match holds, or does not end with the literal the pattern ends on, is refused at once; inside the walk, a program
12
+ * that opens on a literal starts a thread only where that literal stands.
13
+ *
14
+ * It answers a different question from {@link wildcardMatch} (the permission-rule name glob), which is why the two are two
15
+ * engines and not one with a switch. The grammars differ:
16
+ *
17
+ * | construct | rule glob (`wildcardMatch`) | filesystem glob (this module) |
18
+ * | ------------------ | ----------------------------- | ----------------------------------------------------- |
19
+ * | `*` | any run, `/` included | any run of characters but `/` (`star`) |
20
+ * | `**` | the same as `*` | any run, `/` included (`globstar`) |
21
+ * | `?` | a literal | one character but `/` (`one`) |
22
+ * | `[abc]`, `[!a-c]` | literals | one character of the class (`class`) |
23
+ * | `{a,b}` | literals | one alternative of several (`alt`) |
24
+ * | where it may start | the whole value | the whole path, or any path segment (`anchor`) |
25
+ *
26
+ * Each site that reads such a glob (the search tools' `pattern` / `glob` arguments and `.gitignore` lines, the shell read
27
+ * station's expansion of a command word) parses its own spelling into tokens — what a spelling MEANS stays with the site — and
28
+ * this module is the one place that matches them.
29
+ *
30
+ * Lengths are counted in UTF-16 code units, the unit a RegExp without the `u` flag counts in: `?` and a class stand for one unit.
31
+ */
32
+ /** One bracket-expression's test of a single code unit, already validated: build it with {@link fsGlobClass}. */
33
+ export interface FsGlobClass {
34
+ /** Does this one code unit belong to the class? */
35
+ matches(unit: string): boolean;
36
+ }
37
+ /**
38
+ * A class from its character-class source (`[a-z]`, `[^/ab]`), or `undefined` when the source is not a class JavaScript accepts
39
+ * (a reversed range, say). A class is one character wide: its expression holds no repetition, so it cannot backtrack and the
40
+ * repetition structure of a glob stays in the program.
41
+ */
42
+ export declare function fsGlobClass(source: string): FsGlobClass | undefined;
43
+ /** A token that stands for a fixed or bounded part of the path. */
44
+ export type FsGlobUnit = {
45
+ readonly kind: "text";
46
+ readonly text: string;
47
+ } | {
48
+ readonly kind: "one";
49
+ } | {
50
+ readonly kind: "class";
51
+ readonly class: FsGlobClass;
52
+ } | {
53
+ readonly kind: "star";
54
+ };
55
+ export type FsGlobToken = FsGlobUnit | {
56
+ readonly kind: "globstar";
57
+ }
58
+ /** One of several alternatives, each a run of units (no nesting). */
59
+ | {
60
+ readonly kind: "alt";
61
+ readonly alternatives: readonly (readonly FsGlobUnit[])[];
62
+ };
63
+ /** Where a match may begin: `start` only at the first character of the value; `segment` at the first character or right after any `/`. */
64
+ export type FsGlobAnchor = "start" | "segment";
65
+ /** A compiled glob: the whole of a value must match. */
66
+ export interface FsGlob {
67
+ /** Does the whole of `value` match? */
68
+ test(value: string): boolean;
69
+ }
70
+ /**
71
+ * What the matcher has done in this process so far, for a pin to state a bound as a count instead of timing a call. `visits`: the
72
+ * (instruction, position) pairs entered — a test of a program `size` long against a path of `length` enters at most
73
+ * `size * (length + 1)`. `scratchBytes`: the bytes of the sets allocated — it moves when a program larger than any before needs
74
+ * scratch, and per test only for a program past the retained size.
75
+ */
76
+ export declare function fsGlobWorkTotals(): {
77
+ readonly visits: number;
78
+ readonly scratchBytes: number;
79
+ };
80
+ /** A compiled program (see the module header). */
81
+ export interface FsGlobProgram extends FsGlob {
82
+ /** The program's length in instructions: the factor of the visit bound that belongs to the pattern. */
83
+ readonly size: number;
84
+ }
85
+ /** Compile a token list. The match is always over the whole value; `anchor` says where it may begin. */
86
+ export declare function compileFsGlob(tokens: readonly FsGlobToken[], anchor: FsGlobAnchor): FsGlobProgram;
@@ -0,0 +1,226 @@
1
+ export function fsGlobClass(source) {
2
+ let re;
3
+ try {
4
+ re = new RegExp(source);
5
+ }
6
+ catch {
7
+ return undefined;
8
+ }
9
+ return { matches: (unit) => re.test(unit) };
10
+ }
11
+ const OP_TEXT = 0;
12
+ const OP_ONE = 1;
13
+ const OP_CLASS = 2;
14
+ const OP_ANY = 3;
15
+ const OP_SPLIT = 4;
16
+ const OP_JUMP = 5;
17
+ const OP_END = 6;
18
+ const SLASH = 47;
19
+ class LiveSet {
20
+ dense;
21
+ sparse;
22
+ count = 0;
23
+ constructor(capacity) {
24
+ this.dense = new Int32Array(capacity);
25
+ this.sparse = new Int32Array(capacity);
26
+ }
27
+ has(pc) {
28
+ const at = this.sparse[pc];
29
+ return at < this.count && this.dense[at] === pc;
30
+ }
31
+ add(pc) {
32
+ this.dense[this.count] = pc;
33
+ this.sparse[pc] = this.count++;
34
+ }
35
+ }
36
+ const MAX_RETAINED_SIZE = 1 << 16;
37
+ let retained;
38
+ let retainedCapacity = 0;
39
+ const pending = [];
40
+ let visitsTotal = 0;
41
+ let scratchBytesTotal = 0;
42
+ function scratchFor(size) {
43
+ const made = (capacity) => {
44
+ scratchBytesTotal += 16 * capacity;
45
+ return [new LiveSet(capacity), new LiveSet(capacity)];
46
+ };
47
+ if (size > MAX_RETAINED_SIZE)
48
+ return made(size);
49
+ if (retained === undefined || size > retainedCapacity) {
50
+ retainedCapacity = Math.max(size, retainedCapacity * 2, 1 << 8);
51
+ retained = made(retainedCapacity);
52
+ }
53
+ retained[0].count = 0;
54
+ retained[1].count = 0;
55
+ return retained;
56
+ }
57
+ export function fsGlobWorkTotals() {
58
+ return { visits: visitsTotal, scratchBytes: scratchBytesTotal };
59
+ }
60
+ const isStarRun = (token) => token.kind === "star" || token.kind === "globstar";
61
+ export function compileFsGlob(tokens, anchor) {
62
+ const op = [];
63
+ const arg = [];
64
+ const arg2 = [];
65
+ const classes = [];
66
+ const emit = (o, a = 0, b = 0) => {
67
+ op.push(o);
68
+ arg.push(a);
69
+ arg2.push(b);
70
+ return op.length - 1;
71
+ };
72
+ const emitLoop = (unit) => {
73
+ const loop = emit(OP_SPLIT);
74
+ emit(unit);
75
+ emit(OP_JUMP, loop);
76
+ arg[loop] = loop + 1;
77
+ arg2[loop] = op.length;
78
+ };
79
+ const emitUnit = (unit) => {
80
+ if (unit.kind === "text")
81
+ for (let i = 0; i < unit.text.length; i++)
82
+ emit(OP_TEXT, unit.text.charCodeAt(i));
83
+ else if (unit.kind === "one")
84
+ emit(OP_ONE);
85
+ else if (unit.kind === "class")
86
+ emit(OP_CLASS, classes.push(unit.class) - 1);
87
+ else
88
+ emitLoop(OP_ONE);
89
+ };
90
+ const merged = [];
91
+ for (const token of tokens) {
92
+ const previous = merged[merged.length - 1];
93
+ if (previous !== undefined && isStarRun(previous) && isStarRun(token)) {
94
+ if (token.kind === "globstar")
95
+ merged[merged.length - 1] = token;
96
+ }
97
+ else
98
+ merged.push(token);
99
+ }
100
+ for (const token of merged) {
101
+ if (token.kind === "globstar")
102
+ emitLoop(OP_ANY);
103
+ else if (token.kind === "alt") {
104
+ const exits = [];
105
+ token.alternatives.forEach((alternative, k) => {
106
+ const last = k === token.alternatives.length - 1;
107
+ const choice = last ? -1 : emit(OP_SPLIT);
108
+ if (!last)
109
+ arg[choice] = choice + 1;
110
+ for (const unit of alternative)
111
+ emitUnit(unit);
112
+ if (!last) {
113
+ exits.push(emit(OP_JUMP));
114
+ arg2[choice] = op.length;
115
+ }
116
+ });
117
+ for (const exit of exits)
118
+ arg[exit] = op.length;
119
+ }
120
+ else
121
+ emitUnit(token);
122
+ }
123
+ emit(OP_END);
124
+ let required = "";
125
+ let run = "";
126
+ for (const token of merged) {
127
+ run = token.kind === "text" ? run + token.text : "";
128
+ if (run.length > required.length)
129
+ required = run;
130
+ }
131
+ return new Program(Int32Array.from(op), Int32Array.from(arg), Int32Array.from(arg2), classes, anchor === "segment", required, run);
132
+ }
133
+ class Program {
134
+ op;
135
+ arg;
136
+ arg2;
137
+ classes;
138
+ segmentAnchored;
139
+ required;
140
+ tail;
141
+ constructor(op, arg, arg2, classes, segmentAnchored, required, tail) {
142
+ this.op = op;
143
+ this.arg = arg;
144
+ this.arg2 = arg2;
145
+ this.classes = classes;
146
+ this.segmentAnchored = segmentAnchored;
147
+ this.required = required;
148
+ this.tail = tail;
149
+ this.first = op[0] === OP_TEXT ? arg[0] : -1;
150
+ this.beginsAfter = this.first >= 0 ? `/${String.fromCharCode(this.first)}` : "/";
151
+ }
152
+ first;
153
+ beginsAfter;
154
+ get size() {
155
+ return this.op.length;
156
+ }
157
+ follow(set, from) {
158
+ const { op, arg, arg2 } = this;
159
+ let added = 0;
160
+ let pc = from;
161
+ for (;;) {
162
+ if (!set.has(pc)) {
163
+ set.add(pc);
164
+ added++;
165
+ const o = op[pc];
166
+ if (o === OP_SPLIT) {
167
+ pending.push(arg2[pc]);
168
+ pc = arg[pc];
169
+ continue;
170
+ }
171
+ if (o === OP_JUMP) {
172
+ pc = arg[pc];
173
+ continue;
174
+ }
175
+ }
176
+ if (pending.length === 0)
177
+ return added;
178
+ pc = pending.pop();
179
+ }
180
+ }
181
+ test(value) {
182
+ if (this.tail !== "" && !value.endsWith(this.tail))
183
+ return false;
184
+ if (this.required !== "" && !value.includes(this.required))
185
+ return false;
186
+ const { op, arg, classes } = this;
187
+ const length = value.length;
188
+ const [first, second] = scratchFor(op.length);
189
+ let live = first;
190
+ let ahead = second;
191
+ let entered = 0;
192
+ let found = false;
193
+ for (let pos = 0;;) {
194
+ if ((pos === 0 || (this.segmentAnchored && value.charCodeAt(pos - 1) === SLASH)) && (this.first < 0 || value.charCodeAt(pos) === this.first))
195
+ entered += this.follow(live, 0);
196
+ if (pos === length) {
197
+ found = live.has(op.length - 1);
198
+ break;
199
+ }
200
+ if (live.count === 0) {
201
+ if (!this.segmentAnchored)
202
+ break;
203
+ const slash = value.indexOf(this.beginsAfter, pos);
204
+ if (slash < 0)
205
+ break;
206
+ pos = slash + 1;
207
+ continue;
208
+ }
209
+ const unit = value.charCodeAt(pos);
210
+ ahead.count = 0;
211
+ for (let i = 0; i < live.count; i++) {
212
+ const pc = live.dense[i];
213
+ const o = op[pc];
214
+ const takes = o === OP_TEXT ? arg[pc] === unit : o === OP_ONE ? unit !== SLASH : o === OP_ANY ? true : o === OP_CLASS ? classes[arg[pc]].matches(value[pos]) : false;
215
+ if (takes)
216
+ entered += this.follow(ahead, pc + 1);
217
+ }
218
+ const spent = live;
219
+ live = ahead;
220
+ ahead = spent;
221
+ pos++;
222
+ }
223
+ visitsTotal += entered;
224
+ return found;
225
+ }
226
+ }
@@ -467,20 +467,20 @@ export function createReadFileTool(env, state, rootCanonical, cwdRef, additional
467
467
  "- Other binaries (archives, executables) are refused. A whole-file read of a text file over 256 KB is refused — read it in slices with explicit offset/limit, or Grep it instead.\n" +
468
468
  "- You must read a file before editing it.\n" +
469
469
  "- Do NOT re-read a file you just edited to verify — Edit/Write would have errored if the change failed, and the harness tracks file state for you.",
470
- descriptionClassic: "Reads a file from the local filesystem.\n" +
471
- "\n" +
472
- "Usage:\n" +
473
- "- By default, it reads the whole file (from `offset`, 1-based); a very large file is served as a partial view with an explicit marker and the next-page call\n" +
474
- "- You can optionally specify a line offset and limit (especially handy for long files), but it's recommended to read the whole file by not providing these parameters\n" +
475
- "- Results are returned using cat -n format, with each line prefixed by its line number and a tab\n" +
476
- "- This tool allows the model to read images (eg PNG, JPG, etc). When reading an image file the contents are presented visually.\n" +
477
- "- This tool can only read files, not directories. To read a directory, use Glob/Grep or an ls command via the Bash tool.\n" +
478
- "- You must read a file before editing it.\n" +
479
- "- Reads PDFs (.pdf): the document is provided to the model directly (text layer included). Use the `pages` parameter (e.g., \"1-5\") to read a page range; a PDF whose detected page count exceeds 10 requires `pages`. Maximum 20 pages per request.\n" +
480
- "- Reads Jupyter notebooks (.ipynb) as cells with outputs (offset/limit do not apply).\n" +
481
- "- Other binaries (archives, executables) are refused. A whole-file read of a text file over 256 KB is refused — read it in slices with explicit offset/limit, or Grep it instead.\n" +
482
- "- If you read a file that exists but has empty contents you will receive a system reminder warning in place of file contents.\n" +
483
- "- Do NOT re-read a file you just edited to verify — Edit/Write would have errored if the change failed, and the harness tracks file state for you.",
470
+ descriptionVariants: [{ id: "classic", traits: { noneOf: ["lean_prompt"] }, text: "Reads a file from the local filesystem.\n" +
471
+ "\n" +
472
+ "Usage:\n" +
473
+ "- By default, it reads the whole file (from `offset`, 1-based); a very large file is served as a partial view with an explicit marker and the next-page call\n" +
474
+ "- You can optionally specify a line offset and limit (especially handy for long files), but it's recommended to read the whole file by not providing these parameters\n" +
475
+ "- Results are returned using cat -n format, with each line prefixed by its line number and a tab\n" +
476
+ "- This tool allows the model to read images (eg PNG, JPG, etc). When reading an image file the contents are presented visually.\n" +
477
+ "- This tool can only read files, not directories. To read a directory, use Glob/Grep or an ls command via the Bash tool.\n" +
478
+ "- You must read a file before editing it.\n" +
479
+ "- Reads PDFs (.pdf): the document is provided to the model directly (text layer included). Use the `pages` parameter (e.g., \"1-5\") to read a page range; a PDF whose detected page count exceeds 10 requires `pages`. Maximum 20 pages per request.\n" +
480
+ "- Reads Jupyter notebooks (.ipynb) as cells with outputs (offset/limit do not apply).\n" +
481
+ "- Other binaries (archives, executables) are refused. A whole-file read of a text file over 256 KB is refused — read it in slices with explicit offset/limit, or Grep it instead.\n" +
482
+ "- If you read a file that exists but has empty contents you will receive a system reminder warning in place of file contents.\n" +
483
+ "- Do NOT re-read a file you just edited to verify — Edit/Write would have errored if the change failed, and the harness tracks file state for you." }],
484
484
  parameters: Type.Object({
485
485
  ...FILE_PATH_PARAMS,
486
486
  offset: Type.Optional(Type.Integer({ minimum: 0, description: "The line number to start reading from. Only provide if the file is too large to read at once (1-based; default 1)." })),
@@ -189,13 +189,13 @@ export function createGlobTool(env, rootCanonical, rootsSeat, denySeat, readFace
189
189
  "\n" +
190
190
  "- On environments that do not report modification times, results fall back to alphabetical order\n" +
191
191
  "- Paths are RELATIVE to the root; ignored trees (node_modules/build/.gitignore) are skipped unless your pattern names them explicitly (e.g. `dist/**`)",
192
- descriptionClassic: "- Fast file pattern matching tool that works with any codebase size\n" +
193
- '- Supports glob patterns like "**/*.js" or "src/**/*.ts"\n' +
194
- "- Returns matching file paths sorted by modification time\n" +
195
- "- On environments that do not report modification times, results fall back to alphabetical order\n" +
196
- "- Paths are RELATIVE to the root; ignored trees (node_modules/build/.gitignore) are skipped unless your pattern names them explicitly (e.g. `dist/**`)\n" +
197
- "- Use this tool when you need to find files by name patterns; use `path` to scope to a sub-directory\n" +
198
- "- When you are doing an open ended search that may require multiple rounds of globbing and grepping, use the Agent tool instead (if available)",
192
+ descriptionVariants: [{ id: "classic", traits: { noneOf: ["lean_prompt"] }, text: "- Fast file pattern matching tool that works with any codebase size\n" +
193
+ '- Supports glob patterns like "**/*.js" or "src/**/*.ts"\n' +
194
+ "- Returns matching file paths sorted by modification time\n" +
195
+ "- On environments that do not report modification times, results fall back to alphabetical order\n" +
196
+ "- Paths are RELATIVE to the root; ignored trees (node_modules/build/.gitignore) are skipped unless your pattern names them explicitly (e.g. `dist/**`)\n" +
197
+ "- Use this tool when you need to find files by name patterns; use `path` to scope to a sub-directory\n" +
198
+ "- When you are doing an open ended search that may require multiple rounds of globbing and grepping, use the Agent tool instead (if available)" }],
199
199
  parameters: Type.Object({
200
200
  pattern: Type.String({ description: "Glob pattern (`*`, `**`, `?`)." }),
201
201
  path: Type.Optional(Type.String({
@@ -0,0 +1,23 @@
1
+ import type { ExecutionEnv } from "../../internal/harness.js";
2
+ /** One killer the command spells and the questions to put to `pgrep` for it, or why the question cannot be put. */
3
+ export interface PatternKillReading {
4
+ readonly text: string;
5
+ readonly probes: readonly (readonly string[])[];
6
+ /** Set when a word of the selector is decided only when the command runs. */
7
+ readonly computed?: string;
8
+ /** Set when the kill names every process the caller may signal — this agent's own among them — so there is nothing to ask. */
9
+ readonly everyProcess?: true;
10
+ }
11
+ /** The killers a command text spells, read off the plan the read station plans (nothing is read from disk or run). */
12
+ export declare function patternKillReadings(command: string, cwd: string): PatternKillReading[];
13
+ /**
14
+ * The refusal for a command whose pattern-kill would select this agent's own process or one above it — or undefined (run it).
15
+ * `cwd`: where the command stands, for the plan's read of its words (nothing is read from disk). Where the question is put is
16
+ * the env's own declaration ({@link processTableOf}): this process's table is asked, another table is not, and an env that does
17
+ * not say is refused. Windows is not asked: this process's table is not read there.
18
+ */
19
+ export declare function patternKillRefusal(command: string, env: ExecutionEnv, cwd: string, signal?: AbortSignal): Promise<{
20
+ content: string;
21
+ isError: true;
22
+ details?: unknown;
23
+ } | undefined>;