@zaly/agent 0.0.11 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{agent-D3wVIibN.mjs → agent-D5NrjvG5.mjs} +16 -16
- package/dist/agent-D5NrjvG5.mjs.map +1 -0
- package/dist/{bash-COgq4W7U.mjs → bash-9x8PPg0A.mjs} +6 -6
- package/dist/bash-9x8PPg0A.mjs.map +1 -0
- package/dist/{compactions-B8VdZJoU.mjs → compactions-D9XlwQGO.mjs} +4 -3
- package/dist/{compactions-B8VdZJoU.mjs.map → compactions-D9XlwQGO.mjs.map} +1 -1
- package/dist/fetch-D0IeDN6H.mjs +159 -0
- package/dist/fetch-D0IeDN6H.mjs.map +1 -0
- package/dist/{find-CimUGn-L.mjs → find-D1Z2ac_b.mjs} +28 -10
- package/dist/find-D1Z2ac_b.mjs.map +1 -0
- package/dist/{grep-6O3mjSvV.mjs → grep-By4wLRDk.mjs} +17 -7
- package/dist/grep-By4wLRDk.mjs.map +1 -0
- package/dist/html-J629LNIm.mjs +33225 -0
- package/dist/html-J629LNIm.mjs.map +1 -0
- package/dist/index.d.mts +77 -21
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/{manager-BqlbCGYV.mjs → manager-BJLjayBz.mjs} +2 -2
- package/dist/{manager-BqlbCGYV.mjs.map → manager-BJLjayBz.mjs.map} +1 -1
- package/dist/{masker-DRFztUwc.mjs → masker-jgSUXzjY.mjs} +2 -2
- package/dist/{masker-DRFztUwc.mjs.map → masker-jgSUXzjY.mjs.map} +1 -1
- package/dist/{read-CSL_8nAk.mjs → read-B-hwcc2Q.mjs} +7 -4
- package/dist/read-B-hwcc2Q.mjs.map +1 -0
- package/dist/{registry-L9GDccS0.mjs → registry-Zo0QmKdR.mjs} +14 -16
- package/dist/registry-Zo0QmKdR.mjs.map +1 -0
- package/dist/rolldown-runtime-DktXgydw.mjs +35 -0
- package/dist/{search-CRw247ES.mjs → search-CH0D5CkV.mjs} +19 -15
- package/dist/search-CH0D5CkV.mjs.map +1 -0
- package/dist/{session-BSvUrr12.mjs → session-CACkHyDR.mjs} +2 -2
- package/dist/{session-BSvUrr12.mjs.map → session-CACkHyDR.mjs.map} +1 -1
- package/dist/session.mjs +1 -1
- package/dist/{src-fK6DL2bg.mjs → src-DoXC_gDY.mjs} +15 -14
- package/dist/{src-fK6DL2bg.mjs.map → src-DoXC_gDY.mjs.map} +1 -1
- package/dist/{subagent-C8XCEecM.mjs → subagent-BMQMbANL.mjs} +2 -2
- package/dist/{subagent-C8XCEecM.mjs.map → subagent-BMQMbANL.mjs.map} +1 -1
- package/dist/{tools-wvkkuXWH.mjs → tools-CJ2x45EZ.mjs} +3 -34
- package/dist/{tools-wvkkuXWH.mjs.map → tools-CJ2x45EZ.mjs.map} +1 -1
- package/package.json +46 -8
- package/dist/agent-D3wVIibN.mjs.map +0 -1
- package/dist/bash-COgq4W7U.mjs.map +0 -1
- package/dist/fetch-VKhSWdEh.mjs +0 -111
- package/dist/fetch-VKhSWdEh.mjs.map +0 -1
- package/dist/find-CimUGn-L.mjs.map +0 -1
- package/dist/grep-6O3mjSvV.mjs.map +0 -1
- package/dist/read-CSL_8nAk.mjs.map +0 -1
- package/dist/registry-L9GDccS0.mjs.map +0 -1
- package/dist/search-CRw247ES.mjs.map +0 -1
|
@@ -2,7 +2,8 @@ import { t as truncate } from "./truncate-BSMXgiXj.mjs";
|
|
|
2
2
|
import { normPath } from "@zaly/shared";
|
|
3
3
|
import { AiError, defineTool } from "@zaly/ai";
|
|
4
4
|
import { Type } from "typebox";
|
|
5
|
-
import {
|
|
5
|
+
import { cleanTextTui } from "@zaly/shared/text";
|
|
6
|
+
import { FindError, find } from "@zaly/shared/find";
|
|
6
7
|
//#region src/tools/find.ts
|
|
7
8
|
const DEFAULT_LIMIT = 200;
|
|
8
9
|
const findTool = defineTool({
|
|
@@ -38,20 +39,23 @@ const findTool = defineTool({
|
|
|
38
39
|
},
|
|
39
40
|
async call(args, ctx) {
|
|
40
41
|
const cwd = normPath(ctx.cwd, ".");
|
|
41
|
-
|
|
42
|
+
const limit = args.limit ?? DEFAULT_LIMIT;
|
|
43
|
+
const result = [];
|
|
44
|
+
let warning;
|
|
42
45
|
try {
|
|
43
|
-
|
|
46
|
+
for await (const batch of find({
|
|
44
47
|
...args,
|
|
45
48
|
cwd,
|
|
49
|
+
limit: limit + 1,
|
|
46
50
|
pattern: args.glob,
|
|
47
51
|
signal: ctx.signal
|
|
48
|
-
}))
|
|
52
|
+
})) result.push(...batch);
|
|
49
53
|
} catch (error) {
|
|
50
|
-
throw AiError.from(error);
|
|
54
|
+
if (!(error instanceof FindError) || error.code !== "FIND_FAILED" || !result.length) throw AiError.from(error);
|
|
55
|
+
warning = error;
|
|
51
56
|
}
|
|
52
|
-
const limit = args.limit ?? DEFAULT_LIMIT;
|
|
53
57
|
const summary = truncate(result.join("\n"), {
|
|
54
|
-
maxLines: limit
|
|
58
|
+
maxLines: limit,
|
|
55
59
|
strategy: "head"
|
|
56
60
|
});
|
|
57
61
|
const truncated = summary.truncated;
|
|
@@ -61,13 +65,27 @@ const findTool = defineTool({
|
|
|
61
65
|
matches: summary.origLines,
|
|
62
66
|
truncated
|
|
63
67
|
};
|
|
64
|
-
|
|
68
|
+
const parts = [];
|
|
69
|
+
if (warning) parts.push({
|
|
70
|
+
data: {
|
|
71
|
+
error: warning.data,
|
|
72
|
+
incomplete: true
|
|
73
|
+
},
|
|
74
|
+
tag: "find",
|
|
75
|
+
type: "meta"
|
|
76
|
+
});
|
|
77
|
+
parts.push({
|
|
65
78
|
text: summary.text || "No files found.",
|
|
66
79
|
type: "text"
|
|
67
|
-
}
|
|
80
|
+
});
|
|
81
|
+
if (warning) parts.push({
|
|
82
|
+
text: `Warning: Search incomplete.\n${cleanTextTui(warning.message)}`,
|
|
83
|
+
type: "text"
|
|
84
|
+
});
|
|
85
|
+
return parts;
|
|
68
86
|
}
|
|
69
87
|
});
|
|
70
88
|
//#endregion
|
|
71
89
|
export { findTool };
|
|
72
90
|
|
|
73
|
-
//# sourceMappingURL=find-
|
|
91
|
+
//# sourceMappingURL=find-D1Z2ac_b.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find-D1Z2ac_b.mjs","names":[],"sources":["../src/tools/find.ts"],"sourcesContent":["import type { MetaPart, TextPart, ToolContext } from \"@zaly/ai\"\n\nimport { AiError, defineTool } from \"@zaly/ai\"\nimport { normPath } from \"@zaly/shared\"\nimport { find, FindError } from \"@zaly/shared/find\"\nimport { cleanTextTui } from \"@zaly/shared/text\"\nimport { Type } from \"typebox\"\nimport { truncate } from \"../utils/truncate.ts\"\n\nconst DEFAULT_LIMIT = 200\nconst MAX_LIMIT = 1000\n\nexport type FindTool = typeof findTool\nexport type FindToolMeta = {\n cwd: string\n glob: string | string[]\n matches: number\n truncated: boolean\n}\n\n// oxlint-disable-next-line sort-keys -- semantic field order: name, desc, params, call\nexport const findTool = defineTool({\n name: \"find\",\n desc:\n \"Find files using fd/fdfind or rg --files. `glob` is a filename/path glob, \" +\n \"array of globs, or plain substring; empty, `*`, or `**/*` lists all files. \" +\n \"Includes hidden files and respects .gitignore by default. Does not follow directory symlinks; \" +\n \"prefer this over bash find for file discovery.\",\n parallel: true,\n // oxlint-disable-next-line sort-keys -- semantic param order\n params: Type.Object({\n glob: Type.Optional(\n Type.Union([Type.String(), Type.Array(Type.String())], {\n default: \"\",\n description:\n \"Filename/path glob, array of globs, or plain substring. Empty, `*`, or `**/*` lists all files.\",\n })\n ),\n paths: Type.Optional(\n Type.Array(Type.String(), {\n description: \"Optional directories to search, relative to cwd or absolute.\",\n })\n ),\n hidden: Type.Optional(\n Type.Boolean({\n default: true,\n description: \"Include files in hidden directories and dotfiles.\",\n })\n ),\n ignore: Type.Optional(\n Type.Boolean({ default: true, description: \"Respect .gitignore/.ignore rules.\" })\n ),\n limit: Type.Optional(\n Type.Integer({\n default: DEFAULT_LIMIT,\n description: \"Maximum paths to keep inline.\",\n maximum: MAX_LIMIT,\n minimum: 1,\n })\n ),\n }),\n\n async preflight(args, ctx: ToolContext<FindToolMeta>) {\n const cwd = normPath(ctx.cwd, \".\")\n await ctx.need?.(\"read\", cwd)\n const paths = (args.paths?.length ? args.paths : [\".\"]).map((p) => normPath(cwd, p))\n await Promise.all(paths.map((path) => Promise.resolve(ctx.need?.(\"read\", path))))\n },\n\n async call(args, ctx: ToolContext<FindToolMeta>): Promise<(MetaPart | TextPart)[]> {\n const cwd = normPath(ctx.cwd, \".\")\n\n const limit = args.limit ?? DEFAULT_LIMIT\n const result: string[] = []\n let warning: FindError | undefined\n try {\n for await (const batch of find({\n ...args,\n cwd,\n limit: limit + 1,\n pattern: args.glob,\n signal: ctx.signal,\n })) {\n result.push(...batch)\n }\n } catch (error) {\n if (!(error instanceof FindError) || error.code !== \"FIND_FAILED\" || !result.length) {\n throw AiError.from(error)\n }\n warning = error\n }\n\n const summary = truncate(result.join(\"\\n\"), {\n maxLines: limit,\n strategy: \"head\",\n })\n\n const truncated = summary.truncated\n ctx.meta = {\n cwd,\n glob: args.glob ?? \"\",\n matches: summary.origLines,\n truncated,\n }\n\n const parts: (MetaPart | TextPart)[] = []\n if (warning) {\n parts.push({ data: { error: warning.data, incomplete: true }, tag: \"find\", type: \"meta\" })\n }\n parts.push({ text: summary.text || \"No files found.\", type: \"text\" })\n if (warning) {\n parts.push({\n text: `Warning: Search incomplete.\\n${cleanTextTui(warning.message)}`,\n type: \"text\",\n })\n }\n return parts\n },\n})\n"],"mappings":";;;;;;;AASA,MAAM,gBAAgB;AAYtB,MAAa,WAAW,WAAW;CACjC,MAAM;CACN,MACE;CAIF,UAAU;CAEV,QAAQ,KAAK,OAAO;EAClB,MAAM,KAAK,SACT,KAAK,MAAM,CAAC,KAAK,OAAO,GAAG,KAAK,MAAM,KAAK,OAAO,CAAC,CAAC,GAAG;GACrD,SAAS;GACT,aACE;EACJ,CAAC,CACH;EACA,OAAO,KAAK,SACV,KAAK,MAAM,KAAK,OAAO,GAAG,EACxB,aAAa,+DACf,CAAC,CACH;EACA,QAAQ,KAAK,SACX,KAAK,QAAQ;GACX,SAAS;GACT,aAAa;EACf,CAAC,CACH;EACA,QAAQ,KAAK,SACX,KAAK,QAAQ;GAAE,SAAS;GAAM,aAAa;EAAoC,CAAC,CAClF;EACA,OAAO,KAAK,SACV,KAAK,QAAQ;GACX,SAAS;GACT,aAAa;GACb,SAAS;GACT,SAAS;EACX,CAAC,CACH;CACF,CAAC;CAED,MAAM,UAAU,MAAM,KAAgC;EACpD,MAAM,MAAM,SAAS,IAAI,KAAK,GAAG;EACjC,MAAM,IAAI,OAAO,QAAQ,GAAG;EAC5B,MAAM,SAAS,KAAK,OAAO,SAAS,KAAK,QAAQ,CAAC,GAAG,EAAA,CAAG,KAAK,MAAM,SAAS,KAAK,CAAC,CAAC;EACnF,MAAM,QAAQ,IAAI,MAAM,KAAK,SAAS,QAAQ,QAAQ,IAAI,OAAO,QAAQ,IAAI,CAAC,CAAC,CAAC;CAClF;CAEA,MAAM,KAAK,MAAM,KAAkE;EACjF,MAAM,MAAM,SAAS,IAAI,KAAK,GAAG;EAEjC,MAAM,QAAQ,KAAK,SAAS;EAC5B,MAAM,SAAmB,CAAC;EAC1B,IAAI;EACJ,IAAI;GACF,WAAW,MAAM,SAAS,KAAK;IAC7B,GAAG;IACH;IACA,OAAO,QAAQ;IACf,SAAS,KAAK;IACd,QAAQ,IAAI;GACd,CAAC,GACC,OAAO,KAAK,GAAG,KAAK;EAExB,SAAS,OAAO;GACd,IAAI,EAAE,iBAAiB,cAAc,MAAM,SAAS,iBAAiB,CAAC,OAAO,QAC3E,MAAM,QAAQ,KAAK,KAAK;GAE1B,UAAU;EACZ;EAEA,MAAM,UAAU,SAAS,OAAO,KAAK,IAAI,GAAG;GAC1C,UAAU;GACV,UAAU;EACZ,CAAC;EAED,MAAM,YAAY,QAAQ;EAC1B,IAAI,OAAO;GACT;GACA,MAAM,KAAK,QAAQ;GACnB,SAAS,QAAQ;GACjB;EACF;EAEA,MAAM,QAAiC,CAAC;EACxC,IAAI,SACF,MAAM,KAAK;GAAE,MAAM;IAAE,OAAO,QAAQ;IAAM,YAAY;GAAK;GAAG,KAAK;GAAQ,MAAM;EAAO,CAAC;EAE3F,MAAM,KAAK;GAAE,MAAM,QAAQ,QAAQ;GAAmB,MAAM;EAAO,CAAC;EACpE,IAAI,SACF,MAAM,KAAK;GACT,MAAM,gCAAgC,aAAa,QAAQ,OAAO;GAClE,MAAM;EACR,CAAC;EAEH,OAAO;CACT;AACF,CAAC"}
|
|
@@ -67,15 +67,17 @@ const grepTool = defineTool({
|
|
|
67
67
|
message: String(error)
|
|
68
68
|
});
|
|
69
69
|
});
|
|
70
|
-
|
|
70
|
+
const text = cleanTextTui(result.stdout);
|
|
71
|
+
const stderr = cleanTextTui(result.stderr).trim();
|
|
72
|
+
const failed = result.code > 1 && result.killReason !== "maxBuffer";
|
|
73
|
+
if (failed && !text.trim()) throw new AiError({
|
|
71
74
|
code: "GREP_FAILED",
|
|
72
75
|
data: {
|
|
73
76
|
code: result.code,
|
|
74
|
-
stderr
|
|
77
|
+
stderr
|
|
75
78
|
},
|
|
76
|
-
message: `${command.cmd} failed (${result.code}): ${
|
|
79
|
+
message: `${command.cmd} failed (${result.code}): ${stderr.slice(0, 500)}`
|
|
77
80
|
});
|
|
78
|
-
const text = cleanTextTui(result.stdout);
|
|
79
81
|
const limit = args.limit ?? DEFAULT_LIMIT;
|
|
80
82
|
const summary = truncate(text, {
|
|
81
83
|
maxLineChars: command.kind === "rg" ? 500 : MAX_COLUMNS,
|
|
@@ -90,11 +92,12 @@ const grepTool = defineTool({
|
|
|
90
92
|
truncated
|
|
91
93
|
};
|
|
92
94
|
const parts = [];
|
|
93
|
-
|
|
94
|
-
if (stderr || result.killReason) {
|
|
95
|
+
if (stderr || result.killReason || failed) {
|
|
95
96
|
const meta = {
|
|
97
|
+
code: result.code,
|
|
96
98
|
command: command.cmd,
|
|
97
99
|
cwd,
|
|
100
|
+
incomplete: failed || !!result.killReason,
|
|
98
101
|
truncated
|
|
99
102
|
};
|
|
100
103
|
if (result.killReason) meta.killReason = result.killReason;
|
|
@@ -109,6 +112,13 @@ const grepTool = defineTool({
|
|
|
109
112
|
text: summary.text || "No matches found.",
|
|
110
113
|
type: "text"
|
|
111
114
|
});
|
|
115
|
+
if (failed) {
|
|
116
|
+
const warning = `Warning: Search incomplete (${command.kind} exited with code ${result.code}).`;
|
|
117
|
+
parts.push({
|
|
118
|
+
text: stderr ? `${warning}\n${stderr.slice(0, 500)}` : warning,
|
|
119
|
+
type: "text"
|
|
120
|
+
});
|
|
121
|
+
}
|
|
112
122
|
return parts;
|
|
113
123
|
}
|
|
114
124
|
});
|
|
@@ -173,4 +183,4 @@ function grepGlobArgs(glob) {
|
|
|
173
183
|
//#endregion
|
|
174
184
|
export { grepTool };
|
|
175
185
|
|
|
176
|
-
//# sourceMappingURL=grep-
|
|
186
|
+
//# sourceMappingURL=grep-By4wLRDk.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grep-By4wLRDk.mjs","names":[],"sources":["../src/tools/grep.ts"],"sourcesContent":["import type { MetaPart, TextPart, ToolContext } from \"@zaly/ai\"\n\nimport { AiError, defineTool } from \"@zaly/ai\"\nimport { normPath } from \"@zaly/shared\"\nimport { defaultExcludes } from \"@zaly/shared/find\"\nimport { Spawn, TextStream, which } from \"@zaly/shared/process\"\nimport { cleanTextTui } from \"@zaly/shared/text\"\nimport { Type } from \"typebox\"\nimport { truncate } from \"../utils/truncate.ts\"\n\nconst MAX_BUFFER = 512 * 1024\nconst DEFAULT_LIMIT = 100\nconst MAX_LIMIT = 1000\nconst MAX_COLUMNS = 200\n\nexport type GrepTool = typeof grepTool\nexport type GrepToolMeta = {\n cwd: string\n pattern: string\n truncated: boolean\n cmd: string[]\n}\n\n// oxlint-disable-next-line sort-keys -- semantic field order: name, desc, params, call\nexport const grepTool = defineTool({\n name: \"grep\",\n desc:\n `Search file contents using rg/grep. Respects .gitignore by default when ripgrep is available; ` +\n \"prefer this over bash grep/find for code search. Returns human-readable grouped matches with line numbers.\",\n parallel: true,\n // oxlint-disable-next-line sort-keys -- semantic param order\n params: Type.Object({\n pattern: Type.String({\n description:\n \"Text or regex pattern. Uses smart case: case-insensitive unless uppercase is present.\",\n minLength: 1,\n }),\n paths: Type.Optional(\n Type.Array(Type.String(), {\n description: \"Optional files/directories to search, relative to cwd or absolute.\",\n })\n ),\n glob: Type.Optional(\n Type.Array(Type.String(), {\n description: \"Ripgrep glob filters, e.g. [`*.ts`, `!dist/**`].\",\n })\n ),\n fixed_strings: Type.Optional(\n Type.Boolean({\n default: false,\n description: \"Treat all patterns as literals instead of as regular expressions\",\n })\n ),\n context: Type.Optional(\n Type.Integer({\n default: 0,\n description: \"Context lines before/after each match. 0-10.\",\n maximum: 10,\n minimum: 0,\n })\n ),\n limit: Type.Optional(\n Type.Integer({\n default: DEFAULT_LIMIT,\n description: \"Maximum output lines to keep inline, including file headings and context.\",\n maximum: MAX_LIMIT,\n minimum: 1,\n })\n ),\n }),\n\n async preflight(args, ctx: ToolContext<GrepToolMeta>) {\n const cwd = normPath(ctx.cwd, \".\")\n await ctx.need?.(\"read\", cwd)\n\n const paths = (args.paths?.length ? args.paths : [\".\"]).map((p) => normPath(cwd, p))\n await Promise.all(paths.map((path) => Promise.resolve(ctx.need?.(\"read\", path))))\n },\n\n async call(args, ctx: ToolContext<GrepToolMeta>): Promise<(MetaPart | TextPart)[]> {\n const command = resolveGrep()\n if (!command) throw new AiError({ code: \"MISSING_TOOL\", message: \"grep requires rg or grep\" })\n\n const cwd = normPath(ctx.cwd, \".\")\n const paths = args.paths?.length ? args.paths : []\n\n const cmdArgs = buildArgs(command.kind, args, paths)\n const proc = new Spawn(command.cmd, cmdArgs, {\n cwd,\n maxBuffer: MAX_BUFFER,\n signal: ctx.signal,\n stderr: new TextStream(),\n stdout: new TextStream(),\n timeout: 60_000,\n })\n const result = await proc.result.catch((error: unknown) => {\n throw new AiError({ cause: error, code: \"GREP_FAILED\", message: String(error) })\n })\n\n const text = cleanTextTui(result.stdout)\n const stderr = cleanTextTui(result.stderr).trim()\n // rg/grep can report matches and still exit with an error for another search path.\n const failed = result.code > 1 && result.killReason !== \"maxBuffer\"\n if (failed && !text.trim()) {\n throw new AiError({\n code: \"GREP_FAILED\",\n data: { code: result.code, stderr },\n message: `${command.cmd} failed (${result.code}): ${stderr.slice(0, 500)}`,\n })\n }\n\n const limit = args.limit ?? DEFAULT_LIMIT\n const summary = truncate(text, {\n maxLineChars: command.kind === \"rg\" ? 500 : MAX_COLUMNS,\n maxLines: limit + 1,\n strategy: \"head\",\n })\n\n const truncated = summary.truncated || result.killReason === \"maxBuffer\"\n ctx.meta = {\n cmd: [command.cmd, ...cmdArgs],\n cwd,\n pattern: args.pattern,\n truncated,\n }\n\n const parts: (MetaPart | TextPart)[] = []\n\n if (stderr || result.killReason || failed) {\n const meta: Record<string, unknown> = {\n code: result.code,\n command: command.cmd,\n cwd,\n incomplete: failed || !!result.killReason,\n truncated,\n }\n if (result.killReason) meta.killReason = result.killReason\n if (stderr) meta.stderr = stderr.slice(0, 500)\n parts.push({ data: meta, tag: \"grep\", type: \"meta\" })\n }\n parts.push({ text: summary.text || \"No matches found.\", type: \"text\" })\n if (failed) {\n const warning = `Warning: Search incomplete (${command.kind} exited with code ${result.code}).`\n parts.push({ text: stderr ? `${warning}\\n${stderr.slice(0, 500)}` : warning, type: \"text\" })\n }\n return parts\n },\n})\n\ntype GrepArgs = Parameters<GrepTool[\"call\"]>[0]\ntype GrepBackend = { cmd: string; kind: \"rg\" | \"grep\" }\n\nfunction resolveGrep(): GrepBackend | undefined {\n const rg = which(\"rg\")\n if (rg) return { cmd: rg, kind: \"rg\" }\n const grep = which(\"grep\")\n return grep ? { cmd: grep, kind: \"grep\" } : undefined\n}\n\nfunction buildArgs(kind: GrepBackend[\"kind\"], args: GrepArgs, paths: string[]): string[] {\n return kind === \"rg\" ? buildRgArgs(args, paths) : buildGrepArgs(args, paths)\n}\n\nfunction buildRgArgs(args: GrepArgs, paths: string[]): string[] {\n const ret = [\n \"--color=always\",\n \"--heading\",\n \"--with-filename\",\n \"--line-number\",\n `--max-columns=${MAX_COLUMNS}`,\n \"--max-columns-preview\",\n \"--path-separator=/\",\n ]\n\n if (args.fixed_strings) ret.push(\"--fixed-strings\")\n ret.push(\"--smart-case\", \"--no-hidden\")\n const context = args.context ?? 0\n if (context > 0) ret.push(`--context=${context}`)\n\n for (const e of defaultExcludes(paths)) ret.push(\"--glob\", `!${e}`)\n for (const g of args.glob ?? []) ret.push(\"--glob\", g)\n\n ret.push(\"--\", args.pattern, ...paths)\n return ret\n}\n\nfunction buildGrepArgs(args: GrepArgs, paths: string[]): string[] {\n const ret = [\n \"--recursive\",\n \"--line-number\",\n \"--with-filename\",\n \"--binary-files=without-match\",\n \"--color=always\",\n ]\n if (args.fixed_strings) ret.push(\"--fixed-strings\")\n else ret.push(\"--extended-regexp\")\n const hasUpper = /[A-Z]/.test(args.pattern)\n if (!hasUpper) ret.push(\"--ignore-case\")\n const context = args.context ?? 0\n if (context > 0) ret.push(\"--context\", String(context))\n for (const e of defaultExcludes(paths)) ret.push(\"--exclude-dir\", e)\n for (const g of args.glob ?? []) ret.push(...grepGlobArgs(g))\n ret.push(\"--\", args.pattern, ...paths)\n return ret\n}\n\nfunction grepGlobArgs(glob: string): string[] {\n if (!glob.startsWith(\"!\")) return [\"--include\", glob]\n const exclude = glob.slice(1)\n if (exclude.endsWith(\"/**\") && !exclude.slice(0, -3).includes(\"*\")) {\n return [\"--exclude-dir\", exclude.slice(0, -3)]\n }\n return [\"--exclude\", exclude]\n}\n"],"mappings":"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"}
|