@pentoshi/clai 4.11.15 → 4.11.17

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 (405) hide show
  1. package/README.md +51 -1
  2. package/dist/agent/compaction/summary-execution.d.ts +1 -0
  3. package/dist/agent/compaction/summary-execution.js +25 -16
  4. package/dist/agent/compaction/summary-execution.js.map +1 -1
  5. package/dist/agent/context/compact-with-summary.js +18 -0
  6. package/dist/agent/context/compact-with-summary.js.map +1 -1
  7. package/dist/agent/context/compaction-source-prefix.d.ts +8 -0
  8. package/dist/agent/context/compaction-source-prefix.js +26 -0
  9. package/dist/agent/context/compaction-source-prefix.js.map +1 -0
  10. package/dist/agent/parser/arg-formatting.js +42 -5
  11. package/dist/agent/parser/arg-formatting.js.map +1 -1
  12. package/dist/agent/plan-decision.js +5 -1
  13. package/dist/agent/plan-decision.js.map +1 -1
  14. package/dist/agent/runner.js +5 -7
  15. package/dist/agent/runner.js.map +1 -1
  16. package/dist/agent/session-policy.d.ts +2 -0
  17. package/dist/agent/session-policy.js.map +1 -1
  18. package/dist/agent/session-title.d.ts +1 -0
  19. package/dist/agent/session-title.js +7 -4
  20. package/dist/agent/session-title.js.map +1 -1
  21. package/dist/agent/subagents/manager.d.ts +54 -0
  22. package/dist/agent/subagents/manager.js +451 -0
  23. package/dist/agent/subagents/manager.js.map +1 -0
  24. package/dist/agent/subagents/model-chain.d.ts +31 -0
  25. package/dist/agent/subagents/model-chain.js +146 -0
  26. package/dist/agent/subagents/model-chain.js.map +1 -0
  27. package/dist/agent/subagents/read-only-tools.d.ts +9 -0
  28. package/dist/agent/subagents/read-only-tools.js +524 -0
  29. package/dist/agent/subagents/read-only-tools.js.map +1 -0
  30. package/dist/agent/subagents/report.d.ts +1 -0
  31. package/dist/agent/subagents/report.js +16 -0
  32. package/dist/agent/subagents/report.js.map +1 -0
  33. package/dist/agent/subagents/tools.d.ts +26 -0
  34. package/dist/agent/subagents/tools.js +141 -0
  35. package/dist/agent/subagents/tools.js.map +1 -0
  36. package/dist/agent/subagents/types.d.ts +76 -0
  37. package/dist/agent/subagents/types.js +2 -0
  38. package/dist/agent/subagents/types.js.map +1 -0
  39. package/dist/agent/subagents/worker.d.ts +2 -0
  40. package/dist/agent/subagents/worker.js +319 -0
  41. package/dist/agent/subagents/worker.js.map +1 -0
  42. package/dist/agent/turn/compaction-summarizer.d.ts +1 -0
  43. package/dist/agent/turn/compaction-summarizer.js +2 -0
  44. package/dist/agent/turn/compaction-summarizer.js.map +1 -1
  45. package/dist/agent/turn/loop/canonicalize-turn-call.d.ts +4 -0
  46. package/dist/agent/turn/loop/canonicalize-turn-call.js +20 -0
  47. package/dist/agent/turn/loop/canonicalize-turn-call.js.map +1 -1
  48. package/dist/agent/turn/loop/model-only-rounds.js +3 -3
  49. package/dist/agent/turn/loop/model-only-rounds.js.map +1 -1
  50. package/dist/agent/turn/loop/run-rounds.js +39 -5
  51. package/dist/agent/turn/loop/run-rounds.js.map +1 -1
  52. package/dist/agent/turn/loop/stream-request.js +1 -0
  53. package/dist/agent/turn/loop/stream-request.js.map +1 -1
  54. package/dist/agent/turn/prompt-sections.js +1 -0
  55. package/dist/agent/turn/prompt-sections.js.map +1 -1
  56. package/dist/agent/turn/setup/compaction-services.d.ts +2 -1
  57. package/dist/agent/turn/setup/compaction-services.js +14 -0
  58. package/dist/agent/turn/setup/compaction-services.js.map +1 -1
  59. package/dist/agent/turn/setup/turn-budget.js +1 -9
  60. package/dist/agent/turn/setup/turn-budget.js.map +1 -1
  61. package/dist/agent/turn/setup/turn-messages.js +3 -1
  62. package/dist/agent/turn/setup/turn-messages.js.map +1 -1
  63. package/dist/agent/turn/subagent-inbox.d.ts +26 -0
  64. package/dist/agent/turn/subagent-inbox.js +95 -0
  65. package/dist/agent/turn/subagent-inbox.js.map +1 -0
  66. package/dist/agent/turn/tool-call-preparation.js +6 -0
  67. package/dist/agent/turn/tool-call-preparation.js.map +1 -1
  68. package/dist/agent/turn/tool-execution/deps.d.ts +2 -1
  69. package/dist/agent/turn/tool-execution/single-tool.js +25 -2
  70. package/dist/agent/turn/tool-execution/single-tool.js.map +1 -1
  71. package/dist/agent/turn/tool-result-recorder.js +9 -1
  72. package/dist/agent/turn/tool-result-recorder.js.map +1 -1
  73. package/dist/agent/turn/tool-routing.d.ts +0 -3
  74. package/dist/agent/turn/tool-routing.js +2 -7
  75. package/dist/agent/turn/tool-routing.js.map +1 -1
  76. package/dist/app/commands/catalog.js +10 -0
  77. package/dist/app/commands/catalog.js.map +1 -1
  78. package/dist/app/commands/registry.js +1 -0
  79. package/dist/app/commands/registry.js.map +1 -1
  80. package/dist/app/controllers/cancel-coordinator.d.ts +6 -0
  81. package/dist/app/controllers/cancel-coordinator.js +2 -0
  82. package/dist/app/controllers/cancel-coordinator.js.map +1 -1
  83. package/dist/app/controllers/session-compact-helper.d.ts +2 -0
  84. package/dist/app/controllers/session-compact-helper.js +7 -3
  85. package/dist/app/controllers/session-compact-helper.js.map +1 -1
  86. package/dist/app/controllers/session-context-usage.d.ts +2 -5
  87. package/dist/app/controllers/session-context-usage.js +28 -107
  88. package/dist/app/controllers/session-context-usage.js.map +1 -1
  89. package/dist/app/controllers/session-controller.d.ts +18 -1
  90. package/dist/app/controllers/session-controller.js +122 -42
  91. package/dist/app/controllers/session-controller.js.map +1 -1
  92. package/dist/app/controllers/session-naming.d.ts +4 -1
  93. package/dist/app/controllers/session-naming.js +86 -51
  94. package/dist/app/controllers/session-naming.js.map +1 -1
  95. package/dist/app/controllers/session-subagents.d.ts +29 -0
  96. package/dist/app/controllers/session-subagents.js +85 -0
  97. package/dist/app/controllers/session-subagents.js.map +1 -0
  98. package/dist/classic/app/ClassicApp.js +24 -4
  99. package/dist/classic/app/ClassicApp.js.map +1 -1
  100. package/dist/classic/app/app-wiring.js +5 -2
  101. package/dist/classic/app/app-wiring.js.map +1 -1
  102. package/dist/classic/blocks/tool-lines.d.ts +1 -1
  103. package/dist/classic/blocks/tool-lines.js +39 -18
  104. package/dist/classic/blocks/tool-lines.js.map +1 -1
  105. package/dist/classic/chrome/Chrome.d.ts +1 -1
  106. package/dist/classic/chrome/Chrome.js +1 -0
  107. package/dist/classic/chrome/Chrome.js.map +1 -1
  108. package/dist/classic/chrome/SubagentsStrip.d.ts +3 -0
  109. package/dist/classic/chrome/SubagentsStrip.js +9 -0
  110. package/dist/classic/chrome/SubagentsStrip.js.map +1 -0
  111. package/dist/classic/chrome/row-budget.d.ts +2 -0
  112. package/dist/classic/chrome/row-budget.js +4 -1
  113. package/dist/classic/chrome/row-budget.js.map +1 -1
  114. package/dist/classic/chrome/subagents-row.d.ts +9 -0
  115. package/dist/classic/chrome/subagents-row.js +13 -0
  116. package/dist/classic/chrome/subagents-row.js.map +1 -0
  117. package/dist/classic/input/input-router.js +2 -7
  118. package/dist/classic/input/input-router.js.map +1 -1
  119. package/dist/classic/panels/keys-panel.d.ts +2 -2
  120. package/dist/classic/panels/keys-panel.js +24 -8
  121. package/dist/classic/panels/keys-panel.js.map +1 -1
  122. package/dist/classic/panels/pager-panel.d.ts +3 -2
  123. package/dist/classic/panels/pager-panel.js +14 -10
  124. package/dist/classic/panels/pager-panel.js.map +1 -1
  125. package/dist/classic/panels/panel-controller.d.ts +3 -0
  126. package/dist/classic/panels/panel-controller.js +63 -1
  127. package/dist/classic/panels/panel-controller.js.map +1 -1
  128. package/dist/classic/panels/panel-frame.js +11 -4
  129. package/dist/classic/panels/panel-frame.js.map +1 -1
  130. package/dist/classic/panels/panel-host.js +7 -2
  131. package/dist/classic/panels/panel-host.js.map +1 -1
  132. package/dist/classic/panels/panel-wheel.js +1 -1
  133. package/dist/classic/panels/panel-wheel.js.map +1 -1
  134. package/dist/classic/panels/picker-panel.d.ts +1 -0
  135. package/dist/classic/panels/picker-panel.js +57 -44
  136. package/dist/classic/panels/picker-panel.js.map +1 -1
  137. package/dist/classic/panels/secret-panel.d.ts +5 -0
  138. package/dist/classic/panels/secret-panel.js +41 -6
  139. package/dist/classic/panels/secret-panel.js.map +1 -1
  140. package/dist/commands/providers.js +2 -0
  141. package/dist/commands/providers.js.map +1 -1
  142. package/dist/llm/agentrouter.d.ts +1 -0
  143. package/dist/llm/agentrouter.js +7 -2
  144. package/dist/llm/agentrouter.js.map +1 -1
  145. package/dist/llm/bynara.js +9 -20
  146. package/dist/llm/bynara.js.map +1 -1
  147. package/dist/llm/capabilities.d.ts +5 -1
  148. package/dist/llm/capabilities.js +129 -6
  149. package/dist/llm/capabilities.js.map +1 -1
  150. package/dist/llm/capability/state.d.ts +1 -1
  151. package/dist/llm/capability/tool-dialect.js +1 -0
  152. package/dist/llm/capability/tool-dialect.js.map +1 -1
  153. package/dist/llm/capability/vision-patterns.js +12 -0
  154. package/dist/llm/capability/vision-patterns.js.map +1 -1
  155. package/dist/llm/catalog-facts.js +10 -1
  156. package/dist/llm/catalog-facts.js.map +1 -1
  157. package/dist/llm/learned-capabilities.js +9 -3
  158. package/dist/llm/learned-capabilities.js.map +1 -1
  159. package/dist/llm/lowest-reasoning.d.ts +3 -0
  160. package/dist/llm/lowest-reasoning.js +33 -0
  161. package/dist/llm/lowest-reasoning.js.map +1 -0
  162. package/dist/llm/meta.js +8 -2
  163. package/dist/llm/meta.js.map +1 -1
  164. package/dist/llm/modal.js +5 -0
  165. package/dist/llm/modal.js.map +1 -1
  166. package/dist/llm/model-families.js +1 -1
  167. package/dist/llm/model-families.js.map +1 -1
  168. package/dist/llm/provider-identity.js +6 -0
  169. package/dist/llm/provider-identity.js.map +1 -1
  170. package/dist/llm/provider-info-text.js +51 -4
  171. package/dist/llm/provider-info-text.js.map +1 -1
  172. package/dist/llm/provider-model-layers.js +33 -0
  173. package/dist/llm/provider-model-layers.js.map +1 -1
  174. package/dist/llm/provider-profile-layers.js +43 -0
  175. package/dist/llm/provider-profile-layers.js.map +1 -1
  176. package/dist/llm/provider-profiles.js +1 -0
  177. package/dist/llm/provider-profiles.js.map +1 -1
  178. package/dist/llm/reasoning-capability.js +12 -0
  179. package/dist/llm/reasoning-capability.js.map +1 -1
  180. package/dist/llm/reasoning-errors.js +1 -1
  181. package/dist/llm/reasoning-errors.js.map +1 -1
  182. package/dist/llm/request-fingerprint.js +2 -0
  183. package/dist/llm/request-fingerprint.js.map +1 -1
  184. package/dist/llm/request-plan.js +1 -0
  185. package/dist/llm/request-plan.js.map +1 -1
  186. package/dist/llm/request-purpose.d.ts +3 -0
  187. package/dist/llm/request-purpose.js +11 -0
  188. package/dist/llm/request-purpose.js.map +1 -0
  189. package/dist/llm/router.d.ts +1 -0
  190. package/dist/llm/router.js +15 -4
  191. package/dist/llm/router.js.map +1 -1
  192. package/dist/llm/routing/attempt-complete.js +28 -11
  193. package/dist/llm/routing/attempt-complete.js.map +1 -1
  194. package/dist/llm/routing/attempt-request.d.ts +11 -0
  195. package/dist/llm/routing/attempt-request.js +51 -2
  196. package/dist/llm/routing/attempt-request.js.map +1 -1
  197. package/dist/llm/routing/attempt-stream.js +28 -11
  198. package/dist/llm/routing/attempt-stream.js.map +1 -1
  199. package/dist/llm/routing/error-classification.d.ts +2 -0
  200. package/dist/llm/routing/error-classification.js +32 -7
  201. package/dist/llm/routing/error-classification.js.map +1 -1
  202. package/dist/llm/routing/key-rotation.js +26 -11
  203. package/dist/llm/routing/key-rotation.js.map +1 -1
  204. package/dist/llm/routing/provider-selection.js +3 -0
  205. package/dist/llm/routing/provider-selection.js.map +1 -1
  206. package/dist/llm/routing/request-option-fallback.d.ts +2 -0
  207. package/dist/llm/routing/request-option-fallback.js +53 -0
  208. package/dist/llm/routing/request-option-fallback.js.map +1 -0
  209. package/dist/llm/session-affinity.d.ts +1 -0
  210. package/dist/llm/session-affinity.js +4 -0
  211. package/dist/llm/session-affinity.js.map +1 -1
  212. package/dist/llm/session-route.d.ts +7 -0
  213. package/dist/llm/session-route.js +16 -0
  214. package/dist/llm/session-route.js.map +1 -0
  215. package/dist/llm/tool-protocol.d.ts +2 -0
  216. package/dist/llm/tool-protocol.js +10 -1
  217. package/dist/llm/tool-protocol.js.map +1 -1
  218. package/dist/llm/tool-wire/argument-repair.js +5 -0
  219. package/dist/llm/tool-wire/argument-repair.js.map +1 -1
  220. package/dist/llm/vercel.d.ts +7 -0
  221. package/dist/llm/vercel.js +169 -0
  222. package/dist/llm/vercel.js.map +1 -0
  223. package/dist/llm/wire/capability-errors.js +4 -4
  224. package/dist/llm/wire/capability-errors.js.map +1 -1
  225. package/dist/llm/wire/chat-body.js +6 -5
  226. package/dist/llm/wire/chat-body.js.map +1 -1
  227. package/dist/llm/wire/effort-preflight.d.ts +15 -0
  228. package/dist/llm/wire/effort-preflight.js +141 -0
  229. package/dist/llm/wire/effort-preflight.js.map +1 -0
  230. package/dist/llm/wire/openai-complete.d.ts +3 -1
  231. package/dist/llm/wire/openai-complete.js +7 -2
  232. package/dist/llm/wire/openai-complete.js.map +1 -1
  233. package/dist/llm/wire/openai-stream.d.ts +4 -2
  234. package/dist/llm/wire/openai-stream.js +14 -8
  235. package/dist/llm/wire/openai-stream.js.map +1 -1
  236. package/dist/llm/wire/reasoning-payload.js +1 -1
  237. package/dist/llm/wire/reasoning-payload.js.map +1 -1
  238. package/dist/llm/wire/responses-first.d.ts +3 -1
  239. package/dist/llm/wire/responses-first.js +31 -15
  240. package/dist/llm/wire/responses-first.js.map +1 -1
  241. package/dist/llm/wire/responses-preflight.js +29 -12
  242. package/dist/llm/wire/responses-preflight.js.map +1 -1
  243. package/dist/mcp/runtime.js +11 -13
  244. package/dist/mcp/runtime.js.map +1 -1
  245. package/dist/prompts/embedded.js +1 -1
  246. package/dist/prompts/embedded.js.map +1 -1
  247. package/dist/prompts/index.js +66 -22
  248. package/dist/prompts/index.js.map +1 -1
  249. package/dist/prompts/system.agent.md +8 -1
  250. package/dist/store/config/endpoints.d.ts +11 -0
  251. package/dist/store/config/endpoints.js +19 -1
  252. package/dist/store/config/endpoints.js.map +1 -1
  253. package/dist/store/config/subagent-models.d.ts +7 -0
  254. package/dist/store/config/subagent-models.js +73 -0
  255. package/dist/store/config/subagent-models.js.map +1 -0
  256. package/dist/store/config.d.ts +4 -3
  257. package/dist/store/config.js +4 -2
  258. package/dist/store/config.js.map +1 -1
  259. package/dist/store/history/lifecycle.js +8 -0
  260. package/dist/store/history/lifecycle.js.map +1 -1
  261. package/dist/store/history.js +14 -12
  262. package/dist/store/history.js.map +1 -1
  263. package/dist/store/session-model.js +4 -0
  264. package/dist/store/session-model.js.map +1 -1
  265. package/dist/store/subagents.d.ts +25 -0
  266. package/dist/store/subagents.js +252 -0
  267. package/dist/store/subagents.js.map +1 -0
  268. package/dist/tools/definitions/aggregate.js +19 -1
  269. package/dist/tools/definitions/aggregate.js.map +1 -1
  270. package/dist/tools/definitions/files.js +7 -3
  271. package/dist/tools/definitions/files.js.map +1 -1
  272. package/dist/tools/definitions/selection.js +5 -0
  273. package/dist/tools/definitions/selection.js.map +1 -1
  274. package/dist/tools/definitions/subagents.d.ts +2 -0
  275. package/dist/tools/definitions/subagents.js +60 -0
  276. package/dist/tools/definitions/subagents.js.map +1 -0
  277. package/dist/tools/definitions.d.ts +1 -0
  278. package/dist/tools/definitions.js +6 -2
  279. package/dist/tools/definitions.js.map +1 -1
  280. package/dist/tools/fs/mutations.js +8 -1
  281. package/dist/tools/fs/mutations.js.map +1 -1
  282. package/dist/tools/fs/search.js +2 -1
  283. package/dist/tools/fs/search.js.map +1 -1
  284. package/dist/tools/registry.js +6 -0
  285. package/dist/tools/registry.js.map +1 -1
  286. package/dist/tui-v2/app/App.js +6 -2
  287. package/dist/tui-v2/app/App.js.map +1 -1
  288. package/dist/tui-v2/bootstrap/patch-opentui-text.js +14 -13
  289. package/dist/tui-v2/bootstrap/patch-opentui-text.js.map +1 -1
  290. package/dist/tui-v2/components/completion/completion-menu.js +3 -3
  291. package/dist/tui-v2/components/completion/completion-menu.js.map +1 -1
  292. package/dist/tui-v2/components/jobs/jobs-panel.js +8 -8
  293. package/dist/tui-v2/components/jobs/jobs-panel.js.map +1 -1
  294. package/dist/tui-v2/components/jobs/subagents-panel.d.ts +11 -0
  295. package/dist/tui-v2/components/jobs/subagents-panel.js +80 -0
  296. package/dist/tui-v2/components/jobs/subagents-panel.js.map +1 -0
  297. package/dist/tui-v2/components/modal/keys-modal-pick.d.ts +9 -0
  298. package/dist/tui-v2/components/modal/keys-modal-pick.js +15 -0
  299. package/dist/tui-v2/components/modal/keys-modal-pick.js.map +1 -0
  300. package/dist/tui-v2/components/modal/keys-modal.js +46 -12
  301. package/dist/tui-v2/components/modal/keys-modal.js.map +1 -1
  302. package/dist/tui-v2/components/modal/secret-modal.js +29 -17
  303. package/dist/tui-v2/components/modal/secret-modal.js.map +1 -1
  304. package/dist/tui-v2/components/pager/pager-line.d.ts +2 -0
  305. package/dist/tui-v2/components/pager/pager-line.js +11 -5
  306. package/dist/tui-v2/components/pager/pager-line.js.map +1 -1
  307. package/dist/tui-v2/components/pager/pager.js +91 -70
  308. package/dist/tui-v2/components/pager/pager.js.map +1 -1
  309. package/dist/tui-v2/components/picker/picker.js +118 -171
  310. package/dist/tui-v2/components/picker/picker.js.map +1 -1
  311. package/dist/tui-v2/components/toast/toast-host.d.ts +1 -0
  312. package/dist/tui-v2/components/toast/toast-host.js +15 -3
  313. package/dist/tui-v2/components/toast/toast-host.js.map +1 -1
  314. package/dist/tui-v2/components/transcript/thinking-block.js +1 -3
  315. package/dist/tui-v2/components/transcript/thinking-block.js.map +1 -1
  316. package/dist/tui-v2/components/transcript/thinking-presentation.d.ts +0 -1
  317. package/dist/tui-v2/components/transcript/thinking-presentation.js +1 -3
  318. package/dist/tui-v2/components/transcript/thinking-presentation.js.map +1 -1
  319. package/dist/tui-v2/components/transcript/tool-card.js +40 -14
  320. package/dist/tui-v2/components/transcript/tool-card.js.map +1 -1
  321. package/dist/tui-v2/components/transcript/transcript-view.js +4 -2
  322. package/dist/tui-v2/components/transcript/transcript-view.js.map +1 -1
  323. package/dist/tui-v2/rendering/pager-markdown.d.ts +2 -0
  324. package/dist/tui-v2/rendering/pager-markdown.js +10 -6
  325. package/dist/tui-v2/rendering/pager-markdown.js.map +1 -1
  326. package/dist/tui-v2/rendering/subagent-ansi.d.ts +4 -0
  327. package/dist/tui-v2/rendering/subagent-ansi.js +10 -0
  328. package/dist/tui-v2/rendering/subagent-ansi.js.map +1 -0
  329. package/dist/types.d.ts +3 -2
  330. package/dist/types.js +1 -0
  331. package/dist/types.js.map +1 -1
  332. package/dist/ui-core/commands/command-handlers.js +3 -0
  333. package/dist/ui-core/commands/command-handlers.js.map +1 -1
  334. package/dist/ui-core/commands/key-commands.js +0 -2
  335. package/dist/ui-core/commands/key-commands.js.map +1 -1
  336. package/dist/ui-core/commands/mcp-commands.js +23 -2
  337. package/dist/ui-core/commands/mcp-commands.js.map +1 -1
  338. package/dist/ui-core/commands/picker-commands.d.ts +12 -0
  339. package/dist/ui-core/commands/picker-commands.js +39 -9
  340. package/dist/ui-core/commands/picker-commands.js.map +1 -1
  341. package/dist/ui-core/commands/pickers/history.js +11 -6
  342. package/dist/ui-core/commands/pickers/history.js.map +1 -1
  343. package/dist/ui-core/commands/session-commands.js +20 -9
  344. package/dist/ui-core/commands/session-commands.js.map +1 -1
  345. package/dist/ui-core/commands/subagent-commands.d.ts +12 -0
  346. package/dist/ui-core/commands/subagent-commands.js +189 -0
  347. package/dist/ui-core/commands/subagent-commands.js.map +1 -0
  348. package/dist/ui-core/commands/subagent-models-editor.d.ts +2 -0
  349. package/dist/ui-core/commands/subagent-models-editor.js +123 -0
  350. package/dist/ui-core/commands/subagent-models-editor.js.map +1 -0
  351. package/dist/ui-core/composer/secret-buffer.d.ts +1 -0
  352. package/dist/ui-core/composer/secret-buffer.js +6 -0
  353. package/dist/ui-core/composer/secret-buffer.js.map +1 -1
  354. package/dist/ui-core/controllers/overlay-controller.d.ts +10 -0
  355. package/dist/ui-core/controllers/overlay-controller.js +1 -1
  356. package/dist/ui-core/controllers/overlay-controller.js.map +1 -1
  357. package/dist/ui-core/layout/overlay-size.d.ts +6 -0
  358. package/dist/ui-core/layout/overlay-size.js +8 -0
  359. package/dist/ui-core/layout/overlay-size.js.map +1 -0
  360. package/dist/ui-core/rendering/format-usage.js +5 -0
  361. package/dist/ui-core/rendering/format-usage.js.map +1 -1
  362. package/dist/ui-core/rendering/markdown.d.ts +2 -0
  363. package/dist/ui-core/rendering/markdown.js +1 -1
  364. package/dist/ui-core/rendering/markdown.js.map +1 -1
  365. package/dist/ui-core/rendering/open-tool-output.js +4 -1
  366. package/dist/ui-core/rendering/open-tool-output.js.map +1 -1
  367. package/dist/ui-core/rendering/pager-chrome.d.ts +4 -1
  368. package/dist/ui-core/rendering/pager-chrome.js +17 -9
  369. package/dist/ui-core/rendering/pager-chrome.js.map +1 -1
  370. package/dist/ui-core/rendering/picker-filter.d.ts +3 -0
  371. package/dist/ui-core/rendering/picker-filter.js.map +1 -1
  372. package/dist/ui-core/rendering/picker-layout.d.ts +23 -0
  373. package/dist/ui-core/rendering/picker-layout.js +78 -0
  374. package/dist/ui-core/rendering/picker-layout.js.map +1 -0
  375. package/dist/ui-core/rendering/picker-style.d.ts +3 -0
  376. package/dist/ui-core/rendering/picker-style.js +15 -0
  377. package/dist/ui-core/rendering/picker-style.js.map +1 -0
  378. package/dist/ui-core/rendering/sanitize-display.d.ts +3 -0
  379. package/dist/ui-core/rendering/sanitize-display.js +33 -2
  380. package/dist/ui-core/rendering/sanitize-display.js.map +1 -1
  381. package/dist/ui-core/rendering/status-segments.js +3 -1
  382. package/dist/ui-core/rendering/status-segments.js.map +1 -1
  383. package/dist/ui-core/rendering/subagent-presentation.d.ts +9 -0
  384. package/dist/ui-core/rendering/subagent-presentation.js +65 -0
  385. package/dist/ui-core/rendering/subagent-presentation.js.map +1 -0
  386. package/dist/ui-core/rendering/subagent-source.d.ts +8 -0
  387. package/dist/ui-core/rendering/subagent-source.js +178 -0
  388. package/dist/ui-core/rendering/subagent-source.js.map +1 -0
  389. package/dist/ui-core/rendering/theme.d.ts +1 -0
  390. package/dist/ui-core/rendering/theme.js +2 -0
  391. package/dist/ui-core/rendering/theme.js.map +1 -1
  392. package/dist/ui-core/rendering/tool-presenter.d.ts +7 -0
  393. package/dist/ui-core/rendering/tool-presenter.js +41 -9
  394. package/dist/ui-core/rendering/tool-presenter.js.map +1 -1
  395. package/dist/ui-core/rendering/usage-pager-source.d.ts +6 -0
  396. package/dist/ui-core/rendering/usage-pager-source.js +76 -0
  397. package/dist/ui-core/rendering/usage-pager-source.js.map +1 -0
  398. package/dist/ui-core/state/transcript-compaction.js +10 -1
  399. package/dist/ui-core/state/transcript-compaction.js.map +1 -1
  400. package/dist/version.generated.d.ts +2 -2
  401. package/dist/version.generated.js +2 -2
  402. package/package.json +1 -1
  403. package/dist/llm/effort-fallback.d.ts +0 -6
  404. package/dist/llm/effort-fallback.js +0 -67
  405. package/dist/llm/effort-fallback.js.map +0 -1
@@ -0,0 +1,524 @@
1
+ import { lstat, opendir, realpath } from "node:fs/promises";
2
+ import { isAbsolute, relative, resolve, sep } from "node:path";
3
+ import { TOOL_DEFINITIONS } from "../../tools/definitions.js";
4
+ import { globToPathRegExp } from "../../tools/fs/search.js";
5
+ export const TOOL_OUTPUT_LIMIT = 12_000;
6
+ const fields = {
7
+ "fs.read": ["path", "offset", "limit", "startLine", "endLine", "maxBytes"],
8
+ "fs.list": ["path", "maxEntries"],
9
+ "fs.search": ["path", "pattern", "glob", "maxMatches", "caseInsensitive", "fixedString", "hidden", "timeoutMs"],
10
+ "web.search": ["query", "maxResults", "timeoutMs"],
11
+ "web.fetch": ["url", "maxBytes", "timeoutMs", "responseMode", "responsePart"],
12
+ "http.fetch": ["url", "maxBytes", "timeoutMs", "responseMode", "responsePart"],
13
+ "pdf.read": ["path", "firstPage", "lastPage", "maxPages", "maxChars"],
14
+ "image.view": ["path", "paths"],
15
+ "image.ocr": ["path", "lang", "psm", "preprocess"],
16
+ "sysinfo": [],
17
+ "tool.check": ["tools"],
18
+ "wordlist.find": ["query", "expand"],
19
+ "skill.load": ["name"],
20
+ "skill.list": ["query"],
21
+ "shell.exec": ["command", "timeoutMs"],
22
+ };
23
+ const descriptions = {
24
+ "fs.read": "Read a text file inside cwd with numbered lines. At most 300 lines and 12000 characters per call. Files over 2 MiB need parent inspection.",
25
+ "fs.list": "List directory entries inside cwd.",
26
+ "fs.search": "Bounded content search inside cwd returning matching file paths only. Skips symlinks, generated directories, and files over 1 MB; scans at most 64 files.",
27
+ "web.search": "Search the web for current information.",
28
+ "web.fetch": "Fetch a public URL as readable text.",
29
+ "http.fetch": "GET-only HTTP evidence for public targets. Mutating or authenticated requests are denied.",
30
+ "pdf.read": "Extract text from a PDF inside cwd with bounded paging.",
31
+ "image.view": "View image bytes for a file inside cwd.",
32
+ "image.ocr": "OCR text from an image file inside cwd.",
33
+ "sysinfo": "OS and environment facts.",
34
+ "tool.check": "Check tool availability on PATH.",
35
+ "wordlist.find": "Locate wordlists on disk.",
36
+ "skill.load": "Read one skill's instructions.",
37
+ "skill.list": "List installed skills.",
38
+ "shell.exec": "Read-only shell fallback for search and inspection. Normal command composition, pipelines, chaining, line breaks, and absolute read paths are allowed; file mutations, git state changes, installs, redirects, and network commands are denied.",
39
+ };
40
+ export const READ_ONLY_TOOLS = TOOL_DEFINITIONS
41
+ .filter((tool) => Object.hasOwn(fields, tool.name))
42
+ .map((tool) => ({
43
+ ...tool,
44
+ description: descriptions[tool.name] ?? tool.description,
45
+ parameters: {
46
+ ...tool.parameters,
47
+ properties: Object.fromEntries(Object.entries(tool.parameters.properties)
48
+ .filter(([key]) => fields[tool.name].includes(key))
49
+ .map(([key, schema]) => {
50
+ const { description: _dropped, ...rest } = schema;
51
+ return [key, rest];
52
+ })),
53
+ additionalProperties: false,
54
+ },
55
+ }));
56
+ export function boundedOutput(text) {
57
+ const suffix = "\n[Output truncated; narrow the query or page the file. Coverage is incomplete.]";
58
+ return text.length > TOOL_OUTPUT_LIMIT
59
+ ? text.slice(0, TOOL_OUTPUT_LIMIT - suffix.length) + suffix
60
+ : text;
61
+ }
62
+ function inside(root, path) {
63
+ const rel = relative(root, path);
64
+ return rel === "" || (!isAbsolute(rel) && rel !== ".." && !rel.startsWith(`..${sep}`));
65
+ }
66
+ export async function confinedPath(root, value = ".") {
67
+ if (typeof value !== "string" || !value.trim() || value.includes("\0") || value !== value.trim()) {
68
+ throw new Error("Invalid path");
69
+ }
70
+ const canonicalRoot = await realpath(root);
71
+ const path = resolve(canonicalRoot, value);
72
+ if (!inside(canonicalRoot, path))
73
+ throw new Error("Path is outside the assigned cwd");
74
+ const canonical = await realpath(path);
75
+ if (!inside(canonicalRoot, canonical))
76
+ throw new Error("Symlink resolves outside the assigned cwd");
77
+ return canonical;
78
+ }
79
+ function number(args, key, fallback, max, min = 1) {
80
+ const value = args[key] ?? fallback;
81
+ if (typeof value !== "number" || !Number.isSafeInteger(value) || value < min) {
82
+ throw new Error(`Invalid ${key}`);
83
+ }
84
+ return Math.min(value, max);
85
+ }
86
+ function string(args, key, max = 2048) {
87
+ const value = args[key];
88
+ if (typeof value !== "string" || !value.trim() || value.length > max || value.includes("\0")) {
89
+ throw new Error(`Invalid ${key}`);
90
+ }
91
+ return value;
92
+ }
93
+ function optionalString(args, key, max = 2048) {
94
+ if (args[key] === undefined)
95
+ return undefined;
96
+ return string(args, key, max);
97
+ }
98
+ function optionalBoolean(args, key) {
99
+ if (args[key] === undefined)
100
+ return undefined;
101
+ if (typeof args[key] !== "boolean")
102
+ throw new Error(`Invalid ${key}`);
103
+ return args[key];
104
+ }
105
+ function optionalNumber(args, key, max, min = 1) {
106
+ if (args[key] === undefined)
107
+ return undefined;
108
+ return number({ ...args, [key]: args[key] }, key, args[key], max, min);
109
+ }
110
+ function optionalEnum(args, key, allowed) {
111
+ if (args[key] === undefined)
112
+ return undefined;
113
+ if (typeof args[key] !== "string" || !allowed.includes(args[key]))
114
+ throw new Error(`Invalid ${key}`);
115
+ return args[key];
116
+ }
117
+ function stringList(value, key, min, max, itemMax = 2048) {
118
+ if (!Array.isArray(value) || value.length < min || value.length > max)
119
+ throw new Error(`Invalid ${key}`);
120
+ return value.map((entry) => {
121
+ if (typeof entry !== "string" || !entry.trim() || entry.length > itemMax || entry.includes("\0"))
122
+ throw new Error(`Invalid ${key}`);
123
+ return entry;
124
+ });
125
+ }
126
+ const GIT_ALWAYS_MUTATING_SUBCOMMANDS = new Set([
127
+ "add", "am", "apply", "bisect", "cherry-pick", "clean", "clone", "commit",
128
+ "fetch", "gc", "merge", "mv", "pull", "push", "rebase", "revert", "rm",
129
+ "reset", "restore", "stash", "switch", "update-ref",
130
+ ]);
131
+ const SHELL_FIRST_ALLOW = new Set([
132
+ "grep", "egrep", "fgrep", "rg", "ag", "ack",
133
+ "find", "ls", "dir", "cat", "head", "tail", "wc",
134
+ "sort", "uniq", "cut", "tr", "file", "stat", "du",
135
+ "git", "python3", "python", "node", "jq",
136
+ "diff", "cmp", "comm", "strings", "xxd", "od",
137
+ "pwd", "printf", "echo", "true", "false", "date", "uname",
138
+ "whoami", "id", "readlink", "realpath", "basename", "dirname", "which",
139
+ ]);
140
+ const SHELL_CONTENT_DENY = [
141
+ /-delete\b/, /-exec(dir)?\b/, /-ok\b/, /-fls\b/, /-fprint\b/,
142
+ /\b(?:rm|rmdir|mv|cp|install|mkdir|mktemp|touch|tee|dd|unlink|chmod|chown|ln|truncate)\b/,
143
+ /\b(?:npm|pnpm|yarn|bun)\s+(?:install|ci|add|remove|uninstall|update|link|publish|pack)\b/,
144
+ /\b(?:curl|wget|nc|netcat|socat|ssh|scp|rsync|ftp|telnet)\b/,
145
+ /subprocess/, /os\.system/, /os\.popen/, /os\.exec\w*\b/, /os\.spawn\w*\b/,
146
+ /os\.remove/, /os\.unlink/, /os\.rmdir/, /os\.mkdir/, /os\.rename/, /os\.replace/,
147
+ /os\.chmod/, /os\.chown/, /os\.symlink/, /os\.link/, /os\.truncate/, /os\.write/,
148
+ /os\.environ/, /getenv/, /shutil/, /socket/, /urllib/, /requests/, /http\.client/,
149
+ /ftplib/, /smtplib/, /telnetlib/, /child_process/, /process\.env/,
150
+ /require\s*\(\s*['"]fs['"]\s*\)/, /from\s+['"]fs['"]/, /import\s*\(\s*['"]fs['"]/,
151
+ /writefilesync/, /appendfilesync/, /mkdirsync/, /rmsync/, /unlinksync/, /rmdirsync/,
152
+ /renamesync/, /chmodsync/, /chownsync/, /truncatesync/, /createwritestream/,
153
+ /write_text/, /write_bytes/, /__import__/, /getattr\s*\(/, /setattr\s*\(/, /delattr\s*\(/,
154
+ /globals\s*\(/, /locals\s*\(/, /compile\s*\(/, /\beval\s*\(/, /\bexec\s*\(/,
155
+ /\binput\s*\(/, /\bfetch\s*\(/, /o_wronly/, /o_rdwr/, /o_creat/,
156
+ /ld_preload/, /ld_library_path/, /pythonpath/, /pythonhome/, /node_options/,
157
+ /open\s*\([^,]+,\s*['"][^'"]*[wax+]/,
158
+ ];
159
+ function stripQuoted(command) {
160
+ let out = "";
161
+ let quote = "";
162
+ for (let i = 0; i < command.length; i++) {
163
+ const ch = command[i];
164
+ if (quote) {
165
+ if (ch === "\\")
166
+ i++;
167
+ else if (ch === quote)
168
+ quote = "";
169
+ out += " ";
170
+ }
171
+ else if (ch === "'" || ch === '"') {
172
+ quote = ch;
173
+ out += " ";
174
+ }
175
+ else if (ch === "\\") {
176
+ i++;
177
+ out += " ";
178
+ }
179
+ else
180
+ out += ch;
181
+ }
182
+ return out;
183
+ }
184
+ function denyShellStructure(visible) {
185
+ if (/`|\$\(|\$\{/.test(visible))
186
+ throw new Error("Command denied: shell expansion is not allowed");
187
+ if (/[><]/.test(visible))
188
+ throw new Error("Command denied: redirection is not allowed");
189
+ }
190
+ function denyShellContent(lower) {
191
+ if (SHELL_CONTENT_DENY.some((pattern) => pattern.test(lower)))
192
+ throw new Error("Command denied: mutating, network, or environment access is not allowed");
193
+ }
194
+ function shellSegments(visible) {
195
+ const segments = [];
196
+ let start = 0;
197
+ for (let index = 0; index < visible.length; index += 1) {
198
+ const separator = visible[index];
199
+ if (separator !== "|" && separator !== ";" && separator !== "&" && separator !== "\n" && separator !== "\r")
200
+ continue;
201
+ const segment = visible.slice(start, index).trim();
202
+ if (segment)
203
+ segments.push(segment);
204
+ if ((separator === "|" || separator === "&") && visible[index + 1] === separator)
205
+ index += 1;
206
+ start = index + 1;
207
+ }
208
+ const tail = visible.slice(start).trim();
209
+ if (tail)
210
+ segments.push(tail);
211
+ return segments;
212
+ }
213
+ function assertGitSegment(tokens, segment) {
214
+ const subcommand = tokens[1]?.toLowerCase();
215
+ if (!subcommand)
216
+ return;
217
+ if (GIT_ALWAYS_MUTATING_SUBCOMMANDS.has(subcommand)) {
218
+ throw new Error("Command denied: git state changes are not allowed for context gathering");
219
+ }
220
+ const args = tokens.slice(2);
221
+ if (subcommand === "branch" || subcommand === "tag") {
222
+ if (args.some((token) => !token.startsWith("-"))) {
223
+ throw new Error("Command denied: git state changes are not allowed for context gathering");
224
+ }
225
+ }
226
+ if (subcommand === "remote" && args.some((token) => !["-v", "--verbose"].includes(token))) {
227
+ throw new Error("Command denied: git remote changes are not allowed for context gathering");
228
+ }
229
+ if (subcommand === "config" && !args.some((token) => ["--get", "--get-all", "--get-regexp", "--list", "-l", "--show-origin", "--show-scope", "--name-only"].includes(token))) {
230
+ throw new Error("Command denied: git config changes are not allowed for context gathering");
231
+ }
232
+ if (/\b(?:-d|-D|--delete|--move|--set-upstream-to)\b/.test(segment)) {
233
+ throw new Error("Command denied: git state changes are not allowed for context gathering");
234
+ }
235
+ }
236
+ function assertShellSegment(segment) {
237
+ const tokens = segment.trim().split(/\s+/).filter(Boolean);
238
+ const first = tokens[0]?.toLowerCase();
239
+ if (!first || !SHELL_FIRST_ALLOW.has(first))
240
+ throw new Error("Command denied: use a read-only search or inspection command");
241
+ if (first === "git")
242
+ assertGitSegment(tokens, segment);
243
+ if (first === "find" && /-(delete|exec(dir)?|ok|fls|fprint)\b/.test(segment))
244
+ throw new Error("Command denied: find may not modify or execute");
245
+ if (first === "sort" && /-o\b|--output\b/.test(segment))
246
+ throw new Error("Command denied: sort may not write files");
247
+ }
248
+ async function prepareShellExec(root, args) {
249
+ const raw = string(args, "command", 4000).trim();
250
+ if (!raw)
251
+ throw new Error("Invalid command");
252
+ const visible = stripQuoted(raw);
253
+ denyShellStructure(visible);
254
+ denyShellContent(raw.toLowerCase());
255
+ for (const segment of shellSegments(visible))
256
+ assertShellSegment(segment);
257
+ return { command: raw, cwd: await confinedPath(root, "."), timeoutMs: number(args, "timeoutMs", 15_000, 30_000), background: "never" };
258
+ }
259
+ function publicUrl(value, maxBytesFallback) {
260
+ const href = new URL(string({ url: value }, "url", 4096)).href;
261
+ const parsed = new URL(href);
262
+ if (!["https:", "http:"].includes(parsed.protocol) || parsed.username || parsed.password)
263
+ throw new Error("Only public HTTP(S) web URLs without credentials are allowed");
264
+ return { url: parsed.href, maxBytes: maxBytesFallback, timeoutMs: 15_000 };
265
+ }
266
+ async function prepareFsRead(root, args) {
267
+ if (args.path === undefined)
268
+ throw new Error("fs.read requires path");
269
+ const path = await confinedPath(root, args.path);
270
+ const offset = number(args, "offset", number(args, "startLine", 1, 10_000_000), 10_000_000, 0) || 1;
271
+ const limit = number(args, "limit", 200, 300);
272
+ const end = number(args, "endLine", offset + limit - 1, 10_000_300);
273
+ if (end < offset)
274
+ throw new Error("endLine precedes offset");
275
+ return { path, offset, limit: Math.min(limit, end - offset + 1), maxBytes: number(args, "maxBytes", TOOL_OUTPUT_LIMIT, TOOL_OUTPUT_LIMIT) };
276
+ }
277
+ async function prepareFsList(root, args) {
278
+ return { path: await confinedPath(root, args.path), maxEntries: number(args, "maxEntries", 100, 200) };
279
+ }
280
+ async function prepareFsSearch(root, args) {
281
+ const safe = {
282
+ path: await confinedPath(root, args.path), pattern: string(args, "pattern"),
283
+ maxMatches: number(args, "maxMatches", 30, 100),
284
+ maxPerFile: 1, context: 0, filesOnly: true,
285
+ timeoutMs: number(args, "timeoutMs", 2000, 2000),
286
+ };
287
+ for (const key of ["caseInsensitive", "fixedString", "hidden"]) {
288
+ if (args[key] !== undefined && typeof args[key] !== "boolean")
289
+ throw new Error(`Invalid ${key}`);
290
+ safe[key] = args[key] ?? false;
291
+ }
292
+ if (args.glob !== undefined)
293
+ safe.glob = string(args, "glob", 256);
294
+ return safe;
295
+ }
296
+ function prepareWebSearch(args) {
297
+ return { query: string(args, "query"), maxResults: number(args, "maxResults", 5, 5), timeoutMs: number(args, "timeoutMs", 15_000, 30_000) };
298
+ }
299
+ function prepareWebFetch(args) {
300
+ const base = publicUrl(args.url, number(args, "maxBytes", 65_536, 65_536));
301
+ base.timeoutMs = number(args, "timeoutMs", 15_000, 30_000);
302
+ const safe = { url: base.url, maxBytes: base.maxBytes, timeoutMs: base.timeoutMs };
303
+ const mode = optionalEnum(args, "responseMode", ["readable", "raw"]);
304
+ if (mode !== undefined)
305
+ safe.responseMode = mode;
306
+ const part = optionalEnum(args, "responsePart", ["full", "headers", "body"]);
307
+ if (part !== undefined)
308
+ safe.responsePart = part;
309
+ return safe;
310
+ }
311
+ function prepareHttpFetch(args) {
312
+ return prepareWebFetch(args);
313
+ }
314
+ async function preparePdfRead(root, args) {
315
+ const safe = { path: await confinedPath(root, args.path) };
316
+ const first = optionalNumber(args, "firstPage", 500, 1);
317
+ if (first !== undefined)
318
+ safe.firstPage = first;
319
+ const last = optionalNumber(args, "lastPage", 500, 1);
320
+ if (last !== undefined)
321
+ safe.lastPage = last;
322
+ const pages = optionalNumber(args, "maxPages", 50, 1);
323
+ if (pages !== undefined)
324
+ safe.maxPages = pages;
325
+ else
326
+ safe.maxPages = 50;
327
+ const chars = optionalNumber(args, "maxChars", 50_000, 1000);
328
+ if (chars !== undefined)
329
+ safe.maxChars = chars;
330
+ if (safe.firstPage !== undefined && safe.lastPage !== undefined && safe.lastPage < safe.firstPage)
331
+ throw new Error("lastPage precedes firstPage");
332
+ return safe;
333
+ }
334
+ async function prepareImageView(root, args) {
335
+ const hasPath = args.path !== undefined;
336
+ const hasPaths = args.paths !== undefined;
337
+ if (!hasPath && !hasPaths)
338
+ throw new Error("image.view requires path or paths");
339
+ const safe = {};
340
+ if (hasPath)
341
+ safe.path = await confinedPath(root, args.path);
342
+ if (hasPaths) {
343
+ const paths = stringList(args.paths, "paths", 1, 4, 4096);
344
+ const confined = [];
345
+ for (const entry of paths)
346
+ confined.push(await confinedPath(root, entry));
347
+ safe.paths = confined;
348
+ }
349
+ return safe;
350
+ }
351
+ async function prepareImageOcr(root, args) {
352
+ const safe = { path: await confinedPath(root, args.path) };
353
+ const lang = optionalString(args, "lang", 64);
354
+ if (lang !== undefined)
355
+ safe.lang = lang;
356
+ const psm = optionalNumber(args, "psm", 13, 0);
357
+ if (psm !== undefined)
358
+ safe.psm = psm;
359
+ const preprocess = optionalBoolean(args, "preprocess");
360
+ if (preprocess !== undefined)
361
+ safe.preprocess = preprocess;
362
+ return safe;
363
+ }
364
+ function prepareToolCheck(args) {
365
+ return { tools: stringList(args.tools, "tools", 1, 20, 256) };
366
+ }
367
+ function prepareWordlistFind(args) {
368
+ const safe = { query: string(args, "query") };
369
+ const expand = optionalBoolean(args, "expand");
370
+ if (expand !== undefined)
371
+ safe.expand = expand;
372
+ return safe;
373
+ }
374
+ function prepareSkillLoad(args) {
375
+ return { name: string(args, "name", 256) };
376
+ }
377
+ function prepareSkillList(args) {
378
+ const query = optionalString(args, "query", 256);
379
+ return query === undefined ? {} : { query };
380
+ }
381
+ export async function prepareReadOnlyCall(root, call) {
382
+ const allowed = fields[call.name];
383
+ if (!Object.hasOwn(fields, call.name) || !allowed)
384
+ throw new Error(`Tool denied: ${call.name}`);
385
+ if (!call.args || typeof call.args !== "object" || Array.isArray(call.args))
386
+ throw new Error("Invalid tool arguments");
387
+ for (const key of Object.keys(call.args)) {
388
+ if (!allowed.includes(key))
389
+ throw new Error(`Argument denied: ${call.name}.${key}`);
390
+ }
391
+ const args = call.args;
392
+ switch (call.name) {
393
+ case "fs.read": return { name: call.name, args: await prepareFsRead(root, args) };
394
+ case "fs.list": return { name: call.name, args: await prepareFsList(root, args) };
395
+ case "fs.search": return { name: call.name, args: await prepareFsSearch(root, args) };
396
+ case "web.search": return { name: call.name, args: prepareWebSearch(args) };
397
+ case "web.fetch": return { name: call.name, args: prepareWebFetch(args) };
398
+ case "http.fetch": return { name: call.name, args: prepareHttpFetch(args) };
399
+ case "pdf.read": return { name: call.name, args: await preparePdfRead(root, args) };
400
+ case "image.view": return { name: call.name, args: await prepareImageView(root, args) };
401
+ case "image.ocr": return { name: call.name, args: await prepareImageOcr(root, args) };
402
+ case "sysinfo": return { name: call.name, args: {} };
403
+ case "tool.check": return { name: call.name, args: prepareToolCheck(args) };
404
+ case "wordlist.find": return { name: call.name, args: prepareWordlistFind(args) };
405
+ case "skill.load": return { name: call.name, args: prepareSkillLoad(args) };
406
+ case "skill.list": return { name: call.name, args: prepareSkillList(args) };
407
+ case "shell.exec": return { name: call.name, args: await prepareShellExec(root, args) };
408
+ default: throw new Error(`Tool denied: ${call.name}`);
409
+ }
410
+ }
411
+ const excluded = new Set([".git", ".hg", ".svn", "node_modules", "dist", "build", "out", "target", "coverage", ".next", ".venv", "__pycache__"]);
412
+ async function confineViewPaths(root, args) {
413
+ const safe = { ...args };
414
+ if (args.path !== undefined)
415
+ safe.path = await confinedPath(root, args.path);
416
+ if (args.paths !== undefined) {
417
+ const confined = [];
418
+ for (const entry of args.paths)
419
+ confined.push(await confinedPath(root, entry));
420
+ safe.paths = confined;
421
+ }
422
+ return safe;
423
+ }
424
+ export async function executeReadOnlyCall(root, call, execute, options) {
425
+ options.signal?.throwIfAborted();
426
+ if (!Object.hasOwn(fields, call.name))
427
+ throw new Error(`Tool denied: ${call.name}`);
428
+ if (call.name !== "fs.search") {
429
+ let safe = call;
430
+ if (call.name.startsWith("fs.") || call.name === "pdf.read" || call.name === "image.ocr") {
431
+ safe = { ...call, args: { ...call.args, path: await confinedPath(root, call.args.path) } };
432
+ }
433
+ else if (call.name === "image.view") {
434
+ safe = { ...call, args: await confineViewPaths(root, call.args) };
435
+ }
436
+ if (safe.name === "fs.read") {
437
+ const stat = await lstat(String(safe.args.path));
438
+ if (!stat.isFile() && !stat.isDirectory())
439
+ throw new Error("Only regular files and directories are readable");
440
+ if (stat.isFile() && stat.size > 2 * 1024 * 1024) {
441
+ throw new Error("File exceeds the child 2 MiB read limit; report this coverage gap for parent inspection");
442
+ }
443
+ }
444
+ options.signal?.throwIfAborted();
445
+ const result = await execute(safe, options);
446
+ options.signal?.throwIfAborted();
447
+ return { ...result, output: boundedOutput(result.output) };
448
+ }
449
+ const files = [];
450
+ const gaps = new Set(["Symlinks, generated directories and files over 1 MB are excluded."]);
451
+ let entries = 0;
452
+ const glob = typeof call.args.glob === "string" ? call.args.glob : undefined;
453
+ const matcher = glob ? globToPathRegExp(glob.startsWith("!") ? glob.slice(1) : glob) : undefined;
454
+ if (glob && !matcher)
455
+ throw new Error("Invalid search glob");
456
+ const start = String(call.args.path);
457
+ const collect = async (path, depth) => {
458
+ options.signal?.throwIfAborted();
459
+ if (entries >= 2048 || files.length >= 64 || depth > 16) {
460
+ gaps.add("Search traversal limit reached; narrow path/glob for remaining coverage.");
461
+ return;
462
+ }
463
+ entries += 1;
464
+ const stat = await lstat(path);
465
+ if (stat.isSymbolicLink())
466
+ return;
467
+ await confinedPath(root, path);
468
+ if (stat.isFile()) {
469
+ const rel = relative(start, path) || relative(root, path);
470
+ if (stat.size <= 1_048_576 && (!matcher || matcher.test(rel) !== glob.startsWith("!")))
471
+ files.push(path);
472
+ }
473
+ else if (stat.isDirectory()) {
474
+ const dir = await opendir(path);
475
+ for await (const entry of dir) {
476
+ options.signal?.throwIfAborted();
477
+ if (entries >= 2048 || files.length >= 64) {
478
+ gaps.add("Search traversal limit reached; narrow path/glob for remaining coverage.");
479
+ break;
480
+ }
481
+ entries += 1;
482
+ if (entry.isSymbolicLink()) {
483
+ await confinedPath(root, resolve(path, entry.name));
484
+ continue;
485
+ }
486
+ if (excluded.has(entry.name) || (!call.args.hidden && entry.name.startsWith(".")))
487
+ continue;
488
+ await collect(resolve(path, entry.name), depth + 1);
489
+ }
490
+ }
491
+ };
492
+ await collect(start, 0);
493
+ let output = "";
494
+ let ok = true;
495
+ let scanned = 0;
496
+ let matched = 0;
497
+ for (const file of files) {
498
+ options.signal?.throwIfAborted();
499
+ const path = await confinedPath(root, file);
500
+ if (!(await lstat(path)).isFile())
501
+ throw new Error("Search target is no longer a regular file");
502
+ options.signal?.throwIfAborted();
503
+ const { glob: _glob, ...args } = call.args;
504
+ const result = await execute({ name: call.name, args: { ...args, path } }, options);
505
+ options.signal?.throwIfAborted();
506
+ scanned += 1;
507
+ ok = ok && result.ok;
508
+ if (!result.ok || !/^# no matches$/m.test(result.output)) {
509
+ output += `${result.output}\n`;
510
+ if (result.ok)
511
+ matched += 1;
512
+ }
513
+ if (matched >= Number(call.args.maxMatches)) {
514
+ gaps.add("Match limit reached; remaining files were not searched.");
515
+ break;
516
+ }
517
+ if (output.length >= TOOL_OUTPUT_LIMIT - 1000) {
518
+ gaps.add("Search output limit reached; remaining files were not searched.");
519
+ break;
520
+ }
521
+ }
522
+ return { ok, output: boundedOutput(`Scanned ${scanned} files; ${matched} matching paths. Use fs.read for numbered evidence. Coverage gaps: ${[...gaps].join(" ")}\n${output || "No matches in the scanned files."}`) };
523
+ }
524
+ //# sourceMappingURL=read-only-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-only-tools.js","sourceRoot":"","sources":["../../../src/agent/subagents/read-only-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function subagentReportStatus(text: string): "completed" | "partial" | undefined;
@@ -0,0 +1,16 @@
1
+ import { SUBAGENT_LIMITS } from "../../store/subagents.js";
2
+ export function subagentReportStatus(text) {
3
+ const status = /^Status: (complete|partial)\r?\n/i.exec(text.trimStart())?.[1]?.toLowerCase();
4
+ if (!status || text.trim().length < 160 || Buffer.byteLength(text) > SUBAGENT_LIMITS.report)
5
+ return undefined;
6
+ const sections = new Map(text.split(/^## /m).slice(1).map((section) => {
7
+ const line = section.indexOf("\n");
8
+ return line < 0 ? [section.trim().toLowerCase(), ""] : [section.slice(0, line).trim().toLowerCase(), section.slice(line + 1).trim()];
9
+ }));
10
+ if (!["findings", "evidence", "next steps", "coverage gaps"].every((heading) => sections.get(heading)))
11
+ return undefined;
12
+ if (!/(?:https?:\/\/\S+|[\w./-]+(?:(?::|#L?)|`?\s+lines?\s+)[1-9]\d*\b)/i.test(sections.get("evidence")))
13
+ return undefined;
14
+ return status === "complete" ? "completed" : "partial";
15
+ }
16
+ //# sourceMappingURL=report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../../src/agent/subagents/report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,MAAM,MAAM,GAAG,mCAAmC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;IAC9F,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9G,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QACpE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACvI,CAAC,CAAC,CAAC,CAAC;IACJ,IAAI,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACzH,IAAI,CAAC,oEAAoE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5H,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { ToolCall, ToolResult, ProviderId } from "../../types.js";
2
+ import type { SubagentManager } from "./manager.js";
3
+ import type { SubagentRun } from "./types.js";
4
+ export declare function isSubagentTool(name: string): boolean;
5
+ export declare function orchestrationContext(enabled: boolean): string;
6
+ export declare function subagentResult(run: SubagentRun, offset?: number, length?: number): {
7
+ report: string | undefined;
8
+ reportOffset: number;
9
+ reportLength: number | undefined;
10
+ nextOffset: number | undefined;
11
+ id: string;
12
+ title: string;
13
+ status: import("./types.js").SubagentStatus;
14
+ attempt: number;
15
+ updatedAt: number;
16
+ reportAvailable: boolean;
17
+ error: string | undefined;
18
+ recovery: "history" | "exact" | "fresh" | undefined;
19
+ lastKnownSummaryAttempt: number | undefined;
20
+ };
21
+ export declare function runSubagentTool(call: ToolCall, context: {
22
+ manager?: SubagentManager | undefined;
23
+ provider: ProviderId;
24
+ model: string;
25
+ cwd: string;
26
+ }, signal: AbortSignal): Promise<ToolResult>;