@pentoshi/clai 4.11.20 → 4.11.22

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 (243) hide show
  1. package/dist/agent/evidence/task-selection.d.ts +0 -15
  2. package/dist/agent/evidence/task-selection.js +1 -33
  3. package/dist/agent/evidence/task-selection.js.map +1 -1
  4. package/dist/agent/parser/parse-entry.js +30 -2
  5. package/dist/agent/parser/parse-entry.js.map +1 -1
  6. package/dist/agent/parser/vendor-protocols.d.ts +12 -0
  7. package/dist/agent/parser/vendor-protocols.js +105 -0
  8. package/dist/agent/parser/vendor-protocols.js.map +1 -1
  9. package/dist/agent/plan/actions/plan-clear.js.map +1 -1
  10. package/dist/agent/plan/actions/plan-create.js.map +1 -1
  11. package/dist/agent/plan/actions/task-add.js.map +1 -1
  12. package/dist/agent/plan/actions/task-move.js.map +1 -1
  13. package/dist/agent/plan/handle-plan-tool.js +5 -154
  14. package/dist/agent/plan/handle-plan-tool.js.map +1 -1
  15. package/dist/agent/runner.js +1 -13
  16. package/dist/agent/runner.js.map +1 -1
  17. package/dist/agent/session-policy.d.ts +0 -6
  18. package/dist/agent/session-policy.js +0 -2
  19. package/dist/agent/session-policy.js.map +1 -1
  20. package/dist/agent/subagents/read-only-tools.d.ts +2 -0
  21. package/dist/agent/subagents/read-only-tools.js +61 -457
  22. package/dist/agent/subagents/read-only-tools.js.map +1 -1
  23. package/dist/agent/subagents/tools.js +1 -1
  24. package/dist/agent/subagents/tools.js.map +1 -1
  25. package/dist/agent/subagents/worker.js +2 -2
  26. package/dist/agent/task-evidence.d.ts +2 -2
  27. package/dist/agent/task-evidence.js +1 -1
  28. package/dist/agent/task-evidence.js.map +1 -1
  29. package/dist/agent/tool-call-parser.js +6 -0
  30. package/dist/agent/tool-call-parser.js.map +1 -1
  31. package/dist/agent/tool-history.js +30 -16
  32. package/dist/agent/tool-history.js.map +1 -1
  33. package/dist/agent/turn/compaction-admission.d.ts +5 -0
  34. package/dist/agent/turn/compaction-admission.js +24 -0
  35. package/dist/agent/turn/compaction-admission.js.map +1 -1
  36. package/dist/agent/turn/compaction-coordinator.d.ts +1 -0
  37. package/dist/agent/turn/compaction-coordinator.js +2 -0
  38. package/dist/agent/turn/compaction-coordinator.js.map +1 -1
  39. package/dist/agent/turn/loop/run-rounds.js +19 -25
  40. package/dist/agent/turn/loop/run-rounds.js.map +1 -1
  41. package/dist/agent/turn/loop/state.d.ts +1 -2
  42. package/dist/agent/turn/loop/state.js +1 -2
  43. package/dist/agent/turn/loop/state.js.map +1 -1
  44. package/dist/agent/turn/setup/compaction-services.d.ts +1 -0
  45. package/dist/agent/turn/setup/compaction-services.js +1 -0
  46. package/dist/agent/turn/setup/compaction-services.js.map +1 -1
  47. package/dist/agent/turn/setup/task-gate-setup.d.ts +1 -11
  48. package/dist/agent/turn/setup/task-gate-setup.js +4 -19
  49. package/dist/agent/turn/setup/task-gate-setup.js.map +1 -1
  50. package/dist/agent/turn/tool-execution/deps.d.ts +1 -5
  51. package/dist/agent/turn/tool-execution/guards.d.ts +0 -4
  52. package/dist/agent/turn/tool-execution/guards.js +3 -12
  53. package/dist/agent/turn/tool-execution/guards.js.map +1 -1
  54. package/dist/agent/turn/tool-execution/meta-tools.d.ts +0 -2
  55. package/dist/agent/turn/tool-execution/meta-tools.js +0 -17
  56. package/dist/agent/turn/tool-execution/meta-tools.js.map +1 -1
  57. package/dist/agent/turn/tool-execution/single-tool.js +0 -14
  58. package/dist/agent/turn/tool-execution/single-tool.js.map +1 -1
  59. package/dist/app/commands/catalog.js +32 -1
  60. package/dist/app/commands/catalog.js.map +1 -1
  61. package/dist/classic/panels/keys-panel.js +8 -1
  62. package/dist/classic/panels/keys-panel.js.map +1 -1
  63. package/dist/commands/providers.d.ts +17 -0
  64. package/dist/commands/providers.js +317 -28
  65. package/dist/commands/providers.js.map +1 -1
  66. package/dist/index.js +31 -1
  67. package/dist/index.js.map +1 -1
  68. package/dist/llm/adapters/openai-tools.js +19 -10
  69. package/dist/llm/adapters/openai-tools.js.map +1 -1
  70. package/dist/llm/agentrouter.js +1 -1
  71. package/dist/llm/anthropic.d.ts +4 -2
  72. package/dist/llm/anthropic.js +186 -178
  73. package/dist/llm/anthropic.js.map +1 -1
  74. package/dist/llm/artifacts/replay-selection.js +11 -5
  75. package/dist/llm/artifacts/replay-selection.js.map +1 -1
  76. package/dist/llm/bynara.js +1 -1
  77. package/dist/llm/capability/state.d.ts +1 -1
  78. package/dist/llm/capability/tool-dialect.js +5 -1
  79. package/dist/llm/capability/tool-dialect.js.map +1 -1
  80. package/dist/llm/capability/vision-patterns.js +3 -0
  81. package/dist/llm/capability/vision-patterns.js.map +1 -1
  82. package/dist/llm/catalog-facts.js +50 -2
  83. package/dist/llm/catalog-facts.js.map +1 -1
  84. package/dist/llm/catalog-prefetch.js +1 -1
  85. package/dist/llm/cline-auth.d.ts +34 -0
  86. package/dist/llm/cline-auth.js +248 -0
  87. package/dist/llm/cline-auth.js.map +1 -0
  88. package/dist/llm/cline.d.ts +2 -0
  89. package/dist/llm/cline.js +147 -0
  90. package/dist/llm/cline.js.map +1 -0
  91. package/dist/llm/codex-auth.d.ts +53 -0
  92. package/dist/llm/codex-auth.js +512 -0
  93. package/dist/llm/codex-auth.js.map +1 -0
  94. package/dist/llm/codex.d.ts +4 -0
  95. package/dist/llm/codex.js +239 -0
  96. package/dist/llm/codex.js.map +1 -0
  97. package/dist/llm/copilot-auth.d.ts +38 -0
  98. package/dist/llm/copilot-auth.js +258 -0
  99. package/dist/llm/copilot-auth.js.map +1 -0
  100. package/dist/llm/copilot.d.ts +4 -0
  101. package/dist/llm/copilot.js +226 -0
  102. package/dist/llm/copilot.js.map +1 -0
  103. package/dist/llm/custom-providers.js +1 -1
  104. package/dist/llm/deepseek.js +1 -1
  105. package/dist/llm/explabs.js +1 -4
  106. package/dist/llm/explabs.js.map +1 -1
  107. package/dist/llm/fireworks.js +1 -1
  108. package/dist/llm/free-default-model.js +9 -4
  109. package/dist/llm/free-default-model.js.map +1 -1
  110. package/dist/llm/free.d.ts +1 -1
  111. package/dist/llm/free.js +109 -25
  112. package/dist/llm/free.js.map +1 -1
  113. package/dist/llm/glm.js +1 -1
  114. package/dist/llm/hetzner.js +1 -1
  115. package/dist/llm/kimi.js +1 -1
  116. package/dist/llm/lightning.js +1 -1
  117. package/dist/llm/merge-gateway.js +1 -1
  118. package/dist/llm/meta.js +1 -1
  119. package/dist/llm/minimax.js +1 -1
  120. package/dist/llm/model-families.js +1 -1
  121. package/dist/llm/model-families.js.map +1 -1
  122. package/dist/llm/model-layers/model-rules.js +6 -0
  123. package/dist/llm/model-layers/model-rules.js.map +1 -1
  124. package/dist/llm/nvidia.js +1 -1
  125. package/dist/llm/openrouter.js +1 -1
  126. package/dist/llm/orcarouter.js +1 -1
  127. package/dist/llm/provider-identity.d.ts +2 -0
  128. package/dist/llm/provider-identity.js +35 -0
  129. package/dist/llm/provider-identity.js.map +1 -1
  130. package/dist/llm/provider-info-text.js +110 -8
  131. package/dist/llm/provider-info-text.js.map +1 -1
  132. package/dist/llm/provider-model-layers.js +4 -0
  133. package/dist/llm/provider-model-layers.js.map +1 -1
  134. package/dist/llm/provider-profile-layers.js +143 -0
  135. package/dist/llm/provider-profile-layers.js.map +1 -1
  136. package/dist/llm/provider-profiles.js +2 -1
  137. package/dist/llm/provider-profiles.js.map +1 -1
  138. package/dist/llm/provider.d.ts +6 -4
  139. package/dist/llm/provider.js +2 -2
  140. package/dist/llm/provider.js.map +1 -1
  141. package/dist/llm/qwen-cloud.js +1 -1
  142. package/dist/llm/reasoning-capability.js +14 -0
  143. package/dist/llm/reasoning-capability.js.map +1 -1
  144. package/dist/llm/responses/item-events.js +10 -0
  145. package/dist/llm/responses/item-events.js.map +1 -1
  146. package/dist/llm/responses-config.d.ts +4 -0
  147. package/dist/llm/responses-config.js.map +1 -1
  148. package/dist/llm/responses-parse.js +23 -11
  149. package/dist/llm/responses-parse.js.map +1 -1
  150. package/dist/llm/responses-request.js +31 -8
  151. package/dist/llm/responses-request.js.map +1 -1
  152. package/dist/llm/responses-stream-events.js +21 -5
  153. package/dist/llm/responses-stream-events.js.map +1 -1
  154. package/dist/llm/routing/attempt-complete.js +1 -1
  155. package/dist/llm/routing/attempt-complete.js.map +1 -1
  156. package/dist/llm/routing/attempt-request.js +1 -1
  157. package/dist/llm/routing/attempt-request.js.map +1 -1
  158. package/dist/llm/routing/attempt-stream.js +2 -2
  159. package/dist/llm/routing/attempt-stream.js.map +1 -1
  160. package/dist/llm/routing/error-classification.js +3 -1
  161. package/dist/llm/routing/error-classification.js.map +1 -1
  162. package/dist/llm/routing/key-rotation.js +9 -4
  163. package/dist/llm/routing/key-rotation.js.map +1 -1
  164. package/dist/llm/routing/provider-selection.d.ts +2 -1
  165. package/dist/llm/routing/provider-selection.js +18 -4
  166. package/dist/llm/routing/provider-selection.js.map +1 -1
  167. package/dist/llm/tokenrouter.js +1 -1
  168. package/dist/llm/tool-protocol.js +4 -14
  169. package/dist/llm/tool-protocol.js.map +1 -1
  170. package/dist/llm/vercel.js +1 -1
  171. package/dist/llm/wire/capability-errors.js +6 -3
  172. package/dist/llm/wire/capability-errors.js.map +1 -1
  173. package/dist/llm/wire/chat-body.js +13 -16
  174. package/dist/llm/wire/chat-body.js.map +1 -1
  175. package/dist/llm/wire/openai-complete.d.ts +1 -0
  176. package/dist/llm/wire/openai-complete.js +9 -0
  177. package/dist/llm/wire/openai-complete.js.map +1 -1
  178. package/dist/prompts/embedded.js +1 -1
  179. package/dist/prompts/embedded.js.map +1 -1
  180. package/dist/prompts/system.agent.md +7 -1
  181. package/dist/store/config.js +3 -0
  182. package/dist/store/config.js.map +1 -1
  183. package/dist/store/keys/search-providers.d.ts +2 -0
  184. package/dist/store/keys/search-providers.js +6 -0
  185. package/dist/store/keys/search-providers.js.map +1 -1
  186. package/dist/store/keys.d.ts +6 -1
  187. package/dist/store/keys.js +46 -17
  188. package/dist/store/keys.js.map +1 -1
  189. package/dist/store/plan/mutation.d.ts +0 -1
  190. package/dist/store/plan/mutation.js +1 -22
  191. package/dist/store/plan/mutation.js.map +1 -1
  192. package/dist/store/plan.d.ts +1 -1
  193. package/dist/store/plan.js +1 -4
  194. package/dist/store/plan.js.map +1 -1
  195. package/dist/tools/definitions/subagents.js +2 -2
  196. package/dist/tools/definitions/subagents.js.map +1 -1
  197. package/dist/tui-v2/components/modal/keys-modal-pick.d.ts +5 -0
  198. package/dist/tui-v2/components/modal/keys-modal-pick.js +13 -0
  199. package/dist/tui-v2/components/modal/keys-modal-pick.js.map +1 -1
  200. package/dist/tui-v2/components/modal/keys-modal.js +15 -13
  201. package/dist/tui-v2/components/modal/keys-modal.js.map +1 -1
  202. package/dist/types.d.ts +1 -1
  203. package/dist/types.js +3 -0
  204. package/dist/types.js.map +1 -1
  205. package/dist/ui-core/commands/key-commands.d.ts +6 -3
  206. package/dist/ui-core/commands/key-commands.js +506 -15
  207. package/dist/ui-core/commands/key-commands.js.map +1 -1
  208. package/dist/ui-core/commands/keys/editors.js +10 -4
  209. package/dist/ui-core/commands/keys/editors.js.map +1 -1
  210. package/dist/ui-core/commands/picker-commands.js +86 -32
  211. package/dist/ui-core/commands/picker-commands.js.map +1 -1
  212. package/dist/ui-core/commands/subagent-models-editor.js +12 -4
  213. package/dist/ui-core/commands/subagent-models-editor.js.map +1 -1
  214. package/dist/ui-core/controllers/overlay-controller.d.ts +4 -0
  215. package/dist/ui-core/controllers/overlay-controller.js.map +1 -1
  216. package/dist/ui-core/rendering/format-keys.js +4 -2
  217. package/dist/ui-core/rendering/format-keys.js.map +1 -1
  218. package/dist/ui-core/rendering/format-usage.js +3 -1
  219. package/dist/ui-core/rendering/format-usage.js.map +1 -1
  220. package/dist/ui-core/rendering/incremental-strip.js +2 -2
  221. package/dist/ui-core/rendering/incremental-strip.js.map +1 -1
  222. package/dist/ui-core/rendering/intro-header.js +4 -1
  223. package/dist/ui-core/rendering/intro-header.js.map +1 -1
  224. package/dist/ui-core/rendering/strip-tool-surfaces.js +76 -0
  225. package/dist/ui-core/rendering/strip-tool-surfaces.js.map +1 -1
  226. package/dist/version.generated.d.ts +2 -2
  227. package/dist/version.generated.js +2 -2
  228. package/package.json +1 -1
  229. package/dist/agent/task-sync.d.ts +0 -40
  230. package/dist/agent/task-sync.js +0 -105
  231. package/dist/agent/task-sync.js.map +0 -1
  232. package/dist/agent/turn/task-batch-guard.d.ts +0 -18
  233. package/dist/agent/turn/task-batch-guard.js +0 -83
  234. package/dist/agent/turn/task-batch-guard.js.map +0 -1
  235. package/dist/agent/turn/task-gate.d.ts +0 -13
  236. package/dist/agent/turn/task-gate.js +0 -34
  237. package/dist/agent/turn/task-gate.js.map +0 -1
  238. package/dist/agent/turn/task-update-gate.d.ts +0 -13
  239. package/dist/agent/turn/task-update-gate.js +0 -40
  240. package/dist/agent/turn/task-update-gate.js.map +0 -1
  241. package/dist/store/task-transitions.d.ts +0 -12
  242. package/dist/store/task-transitions.js +0 -40
  243. package/dist/store/task-transitions.js.map +0 -1
@@ -1,12 +1,10 @@
1
- import { lstat, opendir, realpath } from "node:fs/promises";
2
- import { isAbsolute, relative, resolve, sep } from "node:path";
1
+ import { isAbsolute, resolve } from "node:path";
3
2
  import { TOOL_DEFINITIONS } from "../../tools/definitions.js";
4
- import { globToPathRegExp } from "../../tools/fs/search.js";
5
3
  export const TOOL_OUTPUT_LIMIT = 12_000;
6
4
  const fields = {
7
- "fs.read": ["path", "offset", "limit", "startLine", "endLine", "maxBytes"],
5
+ "fs.read": ["path", "offset", "limit", "startLine", "endLine", "pattern", "context", "maxMatches", "caseInsensitive", "maxBytes"],
8
6
  "fs.list": ["path", "maxEntries"],
9
- "fs.search": ["path", "pattern", "glob", "maxMatches", "caseInsensitive", "fixedString", "hidden", "timeoutMs"],
7
+ "fs.search": ["path", "pattern", "glob", "maxMatches", "maxPerFile", "caseInsensitive", "fixedString", "hidden", "timeoutMs"],
10
8
  "web.search": ["query", "maxResults", "timeoutMs"],
11
9
  "web.fetch": ["url", "maxBytes", "timeoutMs", "responseMode", "responsePart"],
12
10
  "http.fetch": ["url", "maxBytes", "timeoutMs", "responseMode", "responsePart"],
@@ -18,25 +16,29 @@ const fields = {
18
16
  "wordlist.find": ["query", "expand"],
19
17
  "skill.load": ["name"],
20
18
  "skill.list": ["query"],
21
- "shell.exec": ["command", "timeoutMs"],
19
+ "shell.exec": ["command", "cwd", "timeoutMs"],
22
20
  };
23
21
  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.",
22
+ "fs.read": "Read a text file with numbered lines.",
23
+ "fs.list": "List directory entries.",
24
+ "fs.search": "Search file contents by pattern.",
27
25
  "web.search": "Search the web for current information.",
28
26
  "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.",
27
+ "http.fetch": "GET-only HTTP evidence for public targets.",
28
+ "pdf.read": "Extract text from a PDF with bounded paging.",
29
+ "image.view": "View image bytes for a file.",
30
+ "image.ocr": "OCR text from an image file.",
33
31
  "sysinfo": "OS and environment facts.",
34
32
  "tool.check": "Check tool availability on PATH.",
35
33
  "wordlist.find": "Locate wordlists on disk.",
36
34
  "skill.load": "Read one skill's instructions.",
37
35
  "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.",
36
+ "shell.exec": "Shell command execution for search and inspection.",
39
37
  };
38
+ export const READ_ONLY_TOOL_NAMES = new Set(Object.keys(fields));
39
+ export function isSubagentBlockedTool(name) {
40
+ return !READ_ONLY_TOOL_NAMES.has(name);
41
+ }
40
42
  export const READ_ONLY_TOOLS = TOOL_DEFINITIONS
41
43
  .filter((tool) => Object.hasOwn(fields, tool.name))
42
44
  .map((tool) => ({
@@ -59,466 +61,68 @@ export function boundedOutput(text) {
59
61
  ? text.slice(0, TOOL_OUTPUT_LIMIT - suffix.length) + suffix
60
62
  : text;
61
63
  }
62
- function inside(root, path) {
63
- const rel = relative(root, path);
64
- return rel === "" || (!isAbsolute(rel) && rel !== ".." && !rel.startsWith(`..${sep}`));
65
- }
66
64
  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");
65
+ const p = typeof value === "string" && value.trim() ? value.trim() : ".";
66
+ return isAbsolute(p) ? resolve(p) : resolve(root, p);
67
+ }
68
+ function prepareFsRead(root, args) {
69
+ const rawPath = typeof args.path === "string" && args.path.trim() ? args.path.trim() : ".";
70
+ const path = isAbsolute(rawPath) ? resolve(rawPath) : resolve(root, rawPath);
71
+ const maxBytes = typeof args.maxBytes === "number" ? Math.min(args.maxBytes, TOOL_OUTPUT_LIMIT) : TOOL_OUTPUT_LIMIT;
72
+ const safe = { ...args, path, maxBytes };
73
+ if (typeof args.limit === "number")
74
+ safe.limit = Math.min(Math.max(1, args.limit), 300);
75
+ return safe;
247
76
  }
248
- async function prepareShellExec(root, args) {
249
- const raw = string(args, "command", 4000).trim();
77
+ function prepareShellExec(root, args) {
78
+ const raw = typeof args.command === "string" ? args.command.trim() : "";
250
79
  if (!raw)
251
80
  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 };
81
+ const rawCwd = typeof args.cwd === "string" && args.cwd.trim() ? args.cwd.trim() : "";
82
+ const cwd = rawCwd ? (isAbsolute(rawCwd) ? resolve(rawCwd) : resolve(root, rawCwd)) : root;
83
+ const timeoutMs = typeof args.timeoutMs === "number" && args.timeoutMs > 0
84
+ ? Math.min(args.timeoutMs, 60_000)
85
+ : 30_000;
86
+ return { ...args, command: raw, cwd, timeoutMs, background: "never" };
380
87
  }
381
88
  export async function prepareReadOnlyCall(root, call) {
382
- const allowed = fields[call.name];
383
- if (!Object.hasOwn(fields, call.name) || !allowed)
89
+ if (!READ_ONLY_TOOL_NAMES.has(call.name)) {
384
90
  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
91
  }
391
- const args = call.args;
92
+ const args = call.args && typeof call.args === "object" && !Array.isArray(call.args) ? { ...call.args } : {};
392
93
  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}`);
94
+ case "fs.read": return { name: call.name, args: prepareFsRead(root, args) };
95
+ case "shell.exec": return { name: call.name, args: prepareShellExec(root, args) };
96
+ default: {
97
+ if (typeof args.path === "string" && args.path.trim()) {
98
+ args.path = isAbsolute(args.path) ? resolve(args.path) : resolve(root, args.path);
99
+ }
100
+ if (Array.isArray(args.paths)) {
101
+ args.paths = args.paths.map((p) => typeof p === "string" && p.trim() ? (isAbsolute(p) ? resolve(p) : resolve(root, p)) : p);
102
+ }
103
+ return { name: call.name, args };
104
+ }
409
105
  }
410
106
  }
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
107
  export async function executeReadOnlyCall(root, call, execute, options) {
425
108
  options.signal?.throwIfAborted();
426
- if (!Object.hasOwn(fields, call.name))
109
+ if (!READ_ONLY_TOOL_NAMES.has(call.name)) {
427
110
  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
111
  }
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
- }
112
+ let safe = call;
113
+ if (call.args && typeof call.args === "object" && !Array.isArray(call.args)) {
114
+ const args = { ...call.args };
115
+ if (typeof args.path === "string" && args.path.trim()) {
116
+ args.path = isAbsolute(args.path) ? resolve(args.path) : resolve(root, args.path);
490
117
  }
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;
118
+ if (Array.isArray(args.paths)) {
119
+ args.paths = args.paths.map((p) => typeof p === "string" && p.trim() ? (isAbsolute(p) ? resolve(p) : resolve(root, p)) : p);
520
120
  }
121
+ safe = { ...call, args };
521
122
  }
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."}`) };
123
+ options.signal?.throwIfAborted();
124
+ const result = await execute(safe, options);
125
+ options.signal?.throwIfAborted();
126
+ return { ...result, output: boundedOutput(result.output) };
523
127
  }
524
128
  //# sourceMappingURL=read-only-tools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"read-only-tools.js","sourceRoot":"","sources":["../../../src/agent/subagents/read-only-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"read-only-tools.js","sourceRoot":"","sources":["../../../src/agent/subagents/read-only-tools.ts"],"names":[],"mappings":"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"}