@zaly/agent 0.0.5 → 0.0.9
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-BaD2kax9.mjs → agent-B7cQOuMZ.mjs} +2 -2
- package/dist/agent-B7cQOuMZ.mjs.map +1 -0
- package/dist/{agent-EkPynZRJ.mjs → agent-D3wVIibN.mjs} +4 -3
- package/dist/agent-D3wVIibN.mjs.map +1 -0
- package/dist/{compactions-3AjPqjeZ.mjs → compactions-B8VdZJoU.mjs} +2 -2
- package/dist/{compactions-3AjPqjeZ.mjs.map → compactions-B8VdZJoU.mjs.map} +1 -1
- package/dist/{edit-Qxl4w1C2.mjs → edit-D4yaBK1K.mjs} +9 -17
- package/dist/edit-D4yaBK1K.mjs.map +1 -0
- package/dist/{fetch-DknuSrSX.mjs → fetch-VKhSWdEh.mjs} +2 -2
- package/dist/{fetch-DknuSrSX.mjs.map → fetch-VKhSWdEh.mjs.map} +1 -1
- package/dist/{find-Bah9SKWX.mjs → find-CimUGn-L.mjs} +6 -20
- package/dist/find-CimUGn-L.mjs.map +1 -0
- package/dist/{grep-B4GF0svc.mjs → grep-6O3mjSvV.mjs} +10 -78
- package/dist/grep-6O3mjSvV.mjs.map +1 -0
- package/dist/index-node-esm-CJsN8G51.mjs +2116 -0
- package/dist/index-node-esm-CJsN8G51.mjs.map +1 -0
- package/dist/index.d.mts +25 -37
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +3 -953
- package/dist/{manager-f-WjFTMX.mjs → manager-BqlbCGYV.mjs} +12 -2
- package/dist/{manager-f-WjFTMX.mjs.map → manager-BqlbCGYV.mjs.map} +1 -1
- package/dist/{masker-Bv9KjkDF.mjs → masker-DRFztUwc.mjs} +2 -2
- package/dist/{masker-Bv9KjkDF.mjs.map → masker-DRFztUwc.mjs.map} +1 -1
- package/dist/{read-Djsx2NZl.mjs → read-CSL_8nAk.mjs} +47 -63
- package/dist/read-CSL_8nAk.mjs.map +1 -0
- package/dist/{registry-BVf0aZEA.mjs → registry-L9GDccS0.mjs} +89 -43
- package/dist/registry-L9GDccS0.mjs.map +1 -0
- package/dist/{session-Bv8JiT8P.mjs → session-BSvUrr12.mjs} +2 -2
- package/dist/{session-Bv8JiT8P.mjs.map → session-BSvUrr12.mjs.map} +1 -1
- package/dist/session.mjs +1 -1
- package/dist/src-fK6DL2bg.mjs +953 -0
- package/dist/src-fK6DL2bg.mjs.map +1 -0
- package/dist/{subagent-CX7Zjcws.mjs → subagent-C8XCEecM.mjs} +2 -2
- package/dist/{subagent-CX7Zjcws.mjs.map → subagent-C8XCEecM.mjs.map} +1 -1
- package/dist/{tools-Bl-YI890.mjs → tools-wvkkuXWH.mjs} +76 -20
- package/dist/tools-wvkkuXWH.mjs.map +1 -0
- package/dist/{write-D3L-92vj.mjs → write-DwGiDNeG.mjs} +3 -11
- package/dist/write-DwGiDNeG.mjs.map +1 -0
- package/package.json +12 -12
- package/dist/agent-BaD2kax9.mjs.map +0 -1
- package/dist/agent-EkPynZRJ.mjs.map +0 -1
- package/dist/edit-Qxl4w1C2.mjs.map +0 -1
- package/dist/find-Bah9SKWX.mjs.map +0 -1
- package/dist/grep-B4GF0svc.mjs.map +0 -1
- package/dist/index-node-esm-D6YQRKEz.mjs +0 -1537
- package/dist/index-node-esm-D6YQRKEz.mjs.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/read-Djsx2NZl.mjs.map +0 -1
- package/dist/registry-BVf0aZEA.mjs.map +0 -1
- package/dist/tools-Bl-YI890.mjs.map +0 -1
- package/dist/write-D3L-92vj.mjs.map +0 -1
|
@@ -16,49 +16,30 @@ const grepTool = defineTool({
|
|
|
16
16
|
parallel: true,
|
|
17
17
|
params: Type.Object({
|
|
18
18
|
pattern: Type.String({
|
|
19
|
-
description: "Text or regex pattern
|
|
19
|
+
description: "Text or regex pattern. Uses smart case: case-insensitive unless uppercase is present.",
|
|
20
20
|
minLength: 1
|
|
21
21
|
}),
|
|
22
|
-
cwd: Type.Optional(Type.String({ description: "Directory to search from. Defaults to cwd." })),
|
|
23
22
|
paths: Type.Optional(Type.Array(Type.String(), { description: "Optional files/directories to search, relative to cwd or absolute." })),
|
|
24
23
|
glob: Type.Optional(Type.Array(Type.String(), { description: "Ripgrep glob filters, e.g. [`*.ts`, `!dist/**`]." })),
|
|
25
|
-
exclude: Type.Optional(Type.Array(Type.String(), { description: "Patterns to exclude, e.g. [`node_modules`, `dist/**`]." })),
|
|
26
|
-
file_type: Type.Optional(Type.Array(Type.String(), { description: "Ripgrep file types (`-t`), e.g. [`ts`, `rust`, `markdown`]." })),
|
|
27
24
|
fixed_strings: Type.Optional(Type.Boolean({
|
|
28
25
|
default: false,
|
|
29
26
|
description: "Treat all patterns as literals instead of as regular expressions"
|
|
30
27
|
})),
|
|
31
|
-
case_sensitive: Type.Optional(Type.Boolean({
|
|
32
|
-
default: false,
|
|
33
|
-
description: "Case sensitive search. Default false is smart case (case-insensitive if pattern is lowercase)."
|
|
34
|
-
})),
|
|
35
|
-
hidden: Type.Optional(Type.Boolean({
|
|
36
|
-
default: false,
|
|
37
|
-
description: "Search hidden files/directories."
|
|
38
|
-
})),
|
|
39
|
-
ignore: Type.Optional(Type.Boolean({
|
|
40
|
-
default: true,
|
|
41
|
-
description: "Respect .gitignore/.ignore rules."
|
|
42
|
-
})),
|
|
43
|
-
follow: Type.Optional(Type.Boolean({
|
|
44
|
-
default: false,
|
|
45
|
-
description: "Follow symlinks."
|
|
46
|
-
})),
|
|
47
28
|
context: Type.Optional(Type.Integer({
|
|
48
29
|
default: 0,
|
|
49
|
-
description: "Context lines before/after each match. 0-
|
|
30
|
+
description: "Context lines before/after each match. 0-10.",
|
|
50
31
|
maximum: 10,
|
|
51
32
|
minimum: 0
|
|
52
33
|
})),
|
|
53
34
|
limit: Type.Optional(Type.Integer({
|
|
54
35
|
default: DEFAULT_LIMIT,
|
|
55
|
-
description: "Maximum
|
|
36
|
+
description: "Maximum output lines to keep inline, including file headings and context.",
|
|
56
37
|
maximum: MAX_LIMIT,
|
|
57
38
|
minimum: 1
|
|
58
39
|
}))
|
|
59
40
|
}),
|
|
60
41
|
async preflight(args, ctx) {
|
|
61
|
-
const cwd = normPath(ctx.cwd,
|
|
42
|
+
const cwd = normPath(ctx.cwd, ".");
|
|
62
43
|
await ctx.need?.("read", cwd);
|
|
63
44
|
const paths = (args.paths?.length ? args.paths : ["."]).map((p) => normPath(cwd, p));
|
|
64
45
|
await Promise.all(paths.map((path) => Promise.resolve(ctx.need?.("read", path))));
|
|
@@ -69,7 +50,7 @@ const grepTool = defineTool({
|
|
|
69
50
|
code: "MISSING_TOOL",
|
|
70
51
|
message: "grep requires rg or grep"
|
|
71
52
|
});
|
|
72
|
-
const cwd = normPath(ctx.cwd,
|
|
53
|
+
const cwd = normPath(ctx.cwd, ".");
|
|
73
54
|
const paths = args.paths?.length ? args.paths : [];
|
|
74
55
|
const cmdArgs = buildArgs(command.kind, args, paths);
|
|
75
56
|
const result = await new Spawn(command.cmd, cmdArgs, {
|
|
@@ -131,47 +112,6 @@ const grepTool = defineTool({
|
|
|
131
112
|
return parts;
|
|
132
113
|
}
|
|
133
114
|
});
|
|
134
|
-
const FILE_TYPE_EXTENSIONS = {
|
|
135
|
-
c: ["c", "h"],
|
|
136
|
-
cpp: [
|
|
137
|
-
"cpp",
|
|
138
|
-
"cc",
|
|
139
|
-
"cxx",
|
|
140
|
-
"hpp",
|
|
141
|
-
"hh",
|
|
142
|
-
"hxx"
|
|
143
|
-
],
|
|
144
|
-
go: ["go"],
|
|
145
|
-
java: ["java"],
|
|
146
|
-
js: [
|
|
147
|
-
"js",
|
|
148
|
-
"jsx",
|
|
149
|
-
"mjs",
|
|
150
|
-
"cjs"
|
|
151
|
-
],
|
|
152
|
-
json: ["json"],
|
|
153
|
-
lua: ["lua"],
|
|
154
|
-
markdown: ["md", "markdown"],
|
|
155
|
-
md: ["md", "markdown"],
|
|
156
|
-
py: ["py"],
|
|
157
|
-
python: ["py"],
|
|
158
|
-
rs: ["rs"],
|
|
159
|
-
rust: ["rs"],
|
|
160
|
-
toml: ["toml"],
|
|
161
|
-
ts: [
|
|
162
|
-
"ts",
|
|
163
|
-
"tsx",
|
|
164
|
-
"mts",
|
|
165
|
-
"cts"
|
|
166
|
-
],
|
|
167
|
-
yaml: ["yml", "yaml"]
|
|
168
|
-
};
|
|
169
|
-
function fileTypeExtensions(type) {
|
|
170
|
-
return FILE_TYPE_EXTENSIONS[type] ?? [type];
|
|
171
|
-
}
|
|
172
|
-
function fileTypeGlobs(type) {
|
|
173
|
-
return fileTypeExtensions(type).map((e) => `*.${e}`);
|
|
174
|
-
}
|
|
175
115
|
function resolveGrep() {
|
|
176
116
|
const rg = which("rg");
|
|
177
117
|
if (rg) return {
|
|
@@ -198,17 +138,11 @@ function buildRgArgs(args, paths) {
|
|
|
198
138
|
"--path-separator=/"
|
|
199
139
|
];
|
|
200
140
|
if (args.fixed_strings) ret.push("--fixed-strings");
|
|
201
|
-
|
|
202
|
-
else ret.push("--smart-case");
|
|
203
|
-
if (args.hidden) ret.push("--hidden");
|
|
204
|
-
else ret.push("--no-hidden");
|
|
205
|
-
if (!args.ignore) ret.push("--no-ignore");
|
|
206
|
-
if (args.follow) ret.push("--follow");
|
|
141
|
+
ret.push("--smart-case", "--no-hidden");
|
|
207
142
|
const context = args.context ?? 0;
|
|
208
143
|
if (context > 0) ret.push(`--context=${context}`);
|
|
209
|
-
for (const e of
|
|
144
|
+
for (const e of defaultExcludes(paths)) ret.push("--glob", `!${e}`);
|
|
210
145
|
for (const g of args.glob ?? []) ret.push("--glob", g);
|
|
211
|
-
for (const t of args.file_type ?? []) ret.push("--type", t);
|
|
212
146
|
ret.push("--", args.pattern, ...paths);
|
|
213
147
|
return ret;
|
|
214
148
|
}
|
|
@@ -222,12 +156,10 @@ function buildGrepArgs(args, paths) {
|
|
|
222
156
|
];
|
|
223
157
|
if (args.fixed_strings) ret.push("--fixed-strings");
|
|
224
158
|
else ret.push("--extended-regexp");
|
|
225
|
-
|
|
226
|
-
if (!args.case_sensitive && !hasUpper) ret.push("--ignore-case");
|
|
159
|
+
if (!/[A-Z]/.test(args.pattern)) ret.push("--ignore-case");
|
|
227
160
|
const context = args.context ?? 0;
|
|
228
161
|
if (context > 0) ret.push("--context", String(context));
|
|
229
|
-
for (const e of
|
|
230
|
-
for (const t of args.file_type ?? []) for (const g of fileTypeGlobs(t)) ret.push("--include", g);
|
|
162
|
+
for (const e of defaultExcludes(paths)) ret.push("--exclude-dir", e);
|
|
231
163
|
for (const g of args.glob ?? []) ret.push(...grepGlobArgs(g));
|
|
232
164
|
ret.push("--", args.pattern, ...paths);
|
|
233
165
|
return ret;
|
|
@@ -241,4 +173,4 @@ function grepGlobArgs(glob) {
|
|
|
241
173
|
//#endregion
|
|
242
174
|
export { grepTool };
|
|
243
175
|
|
|
244
|
-
//# sourceMappingURL=grep-
|
|
176
|
+
//# sourceMappingURL=grep-6O3mjSvV.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grep-6O3mjSvV.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 // rg/grep: 0 matches found, 1 no matches, >1 error.\n if (result.code > 1 && result.killReason !== \"maxBuffer\") {\n throw new AiError({\n code: \"GREP_FAILED\",\n data: { code: result.code, stderr: result.stderr },\n message: `${command.cmd} failed (${result.code}): ${result.stderr.slice(0, 500)}`,\n })\n }\n\n const text = cleanTextTui(result.stdout)\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 const stderr = result.stderr.trim()\n if (stderr || result.killReason) {\n const meta: Record<string, unknown> = {\n command: command.cmd,\n cwd,\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 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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"}
|