@zmzai/agent-framework 0.1.0 → 0.2.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/README.md +37 -0
- package/dist/adapters/openai-provider.d.ts +31 -2
- package/dist/adapters/openai-provider.d.ts.map +1 -1
- package/dist/adapters/openai-provider.js +118 -74
- package/dist/adapters/openai-provider.js.map +1 -1
- package/dist/adapters/subprocess-sandbox.d.ts +4 -5
- package/dist/adapters/subprocess-sandbox.d.ts.map +1 -1
- package/dist/adapters/subprocess-sandbox.js +106 -18
- package/dist/adapters/subprocess-sandbox.js.map +1 -1
- package/dist/adapters/terminal-backend.d.ts +5 -0
- package/dist/adapters/terminal-backend.d.ts.map +1 -0
- package/dist/adapters/terminal-backend.js +153 -0
- package/dist/adapters/terminal-backend.js.map +1 -0
- package/dist/cli.js +0 -0
- package/dist/core/agent/registry.d.ts +3 -0
- package/dist/core/agent/registry.d.ts.map +1 -1
- package/dist/core/agent/registry.js +9 -2
- package/dist/core/agent/registry.js.map +1 -1
- package/dist/core/events/manifest.d.ts +29 -4
- package/dist/core/events/manifest.d.ts.map +1 -1
- package/dist/core/events/manifest.js +21 -0
- package/dist/core/events/manifest.js.map +1 -1
- package/dist/core/mcp/client.d.ts +46 -0
- package/dist/core/mcp/client.d.ts.map +1 -0
- package/dist/core/mcp/client.js +286 -0
- package/dist/core/mcp/client.js.map +1 -0
- package/dist/core/mcp/http-client.d.ts +54 -0
- package/dist/core/mcp/http-client.d.ts.map +1 -0
- package/dist/core/mcp/http-client.js +385 -0
- package/dist/core/mcp/http-client.js.map +1 -0
- package/dist/core/mcp/servers.d.ts +30 -0
- package/dist/core/mcp/servers.d.ts.map +1 -0
- package/dist/core/mcp/servers.js +104 -0
- package/dist/core/mcp/servers.js.map +1 -0
- package/dist/core/permission/ruleset.d.ts +1 -1
- package/dist/core/permission/ruleset.d.ts.map +1 -1
- package/dist/core/permission/ruleset.js +4 -0
- package/dist/core/permission/ruleset.js.map +1 -1
- package/dist/core/permission/write-path.d.ts +27 -0
- package/dist/core/permission/write-path.d.ts.map +1 -0
- package/dist/core/permission/write-path.js +52 -0
- package/dist/core/permission/write-path.js.map +1 -0
- package/dist/core/repomap/cache.d.ts +24 -0
- package/dist/core/repomap/cache.d.ts.map +1 -0
- package/dist/core/repomap/cache.js +59 -0
- package/dist/core/repomap/cache.js.map +1 -0
- package/dist/core/repomap/graph.d.ts +14 -0
- package/dist/core/repomap/graph.d.ts.map +1 -0
- package/dist/core/repomap/graph.js +89 -0
- package/dist/core/repomap/graph.js.map +1 -0
- package/dist/core/repomap/render.d.ts +10 -0
- package/dist/core/repomap/render.d.ts.map +1 -0
- package/dist/core/repomap/render.js +33 -0
- package/dist/core/repomap/render.js.map +1 -0
- package/dist/core/repomap/repomap.d.ts +38 -0
- package/dist/core/repomap/repomap.d.ts.map +1 -0
- package/dist/core/repomap/repomap.js +116 -0
- package/dist/core/repomap/repomap.js.map +1 -0
- package/dist/core/repomap/tags.d.ts +26 -0
- package/dist/core/repomap/tags.d.ts.map +1 -0
- package/dist/core/repomap/tags.js +191 -0
- package/dist/core/repomap/tags.js.map +1 -0
- package/dist/core/runtime/compaction.d.ts +26 -14
- package/dist/core/runtime/compaction.d.ts.map +1 -1
- package/dist/core/runtime/compaction.js +46 -34
- package/dist/core/runtime/compaction.js.map +1 -1
- package/dist/core/runtime/lifecycle.d.ts +79 -0
- package/dist/core/runtime/lifecycle.d.ts.map +1 -0
- package/dist/core/runtime/lifecycle.js +71 -0
- package/dist/core/runtime/lifecycle.js.map +1 -0
- package/dist/core/runtime/pi-bridge.d.ts +4 -1
- package/dist/core/runtime/pi-bridge.d.ts.map +1 -1
- package/dist/core/runtime/pi-bridge.js +15 -1
- package/dist/core/runtime/pi-bridge.js.map +1 -1
- package/dist/core/runtime/run-transcript.d.ts +14 -0
- package/dist/core/runtime/run-transcript.d.ts.map +1 -0
- package/dist/core/runtime/run-transcript.js +35 -0
- package/dist/core/runtime/run-transcript.js.map +1 -0
- package/dist/core/runtime/runner.d.ts +38 -9
- package/dist/core/runtime/runner.d.ts.map +1 -1
- package/dist/core/runtime/runner.js +123 -20
- package/dist/core/runtime/runner.js.map +1 -1
- package/dist/core/session/sqlite-store.d.ts +18 -0
- package/dist/core/session/sqlite-store.d.ts.map +1 -0
- package/dist/core/session/sqlite-store.js +159 -0
- package/dist/core/session/sqlite-store.js.map +1 -0
- package/dist/core/session/types.d.ts +12 -0
- package/dist/core/session/types.d.ts.map +1 -1
- package/dist/core/tools/adapter.d.ts +11 -4
- package/dist/core/tools/adapter.d.ts.map +1 -1
- package/dist/core/tools/adapter.js +167 -8
- package/dist/core/tools/adapter.js.map +1 -1
- package/dist/core/tools/builtins.d.ts.map +1 -1
- package/dist/core/tools/builtins.js +5 -2
- package/dist/core/tools/builtins.js.map +1 -1
- package/dist/core/tools/context.d.ts +2 -0
- package/dist/core/tools/context.d.ts.map +1 -1
- package/dist/core/tools/def.d.ts +25 -0
- package/dist/core/tools/def.d.ts.map +1 -1
- package/dist/core/tools/def.js +3 -1
- package/dist/core/tools/def.js.map +1 -1
- package/dist/core/tools/git.d.ts +12 -0
- package/dist/core/tools/git.d.ts.map +1 -0
- package/dist/core/tools/git.js +189 -0
- package/dist/core/tools/git.js.map +1 -0
- package/dist/core/tools/patch.d.ts +45 -0
- package/dist/core/tools/patch.d.ts.map +1 -0
- package/dist/core/tools/patch.js +224 -0
- package/dist/core/tools/patch.js.map +1 -0
- package/dist/core/tools/qa-check.d.ts.map +1 -1
- package/dist/core/tools/qa-check.js +9 -2
- package/dist/core/tools/qa-check.js.map +1 -1
- package/dist/core/tools/repomap.d.ts +8 -0
- package/dist/core/tools/repomap.d.ts.map +1 -0
- package/dist/core/tools/repomap.js +34 -0
- package/dist/core/tools/repomap.js.map +1 -0
- package/dist/core/tools/terminal.d.ts +80 -0
- package/dist/core/tools/terminal.d.ts.map +1 -0
- package/dist/core/tools/terminal.js +265 -0
- package/dist/core/tools/terminal.js.map +1 -0
- package/dist/core/tools/trim.d.ts +31 -0
- package/dist/core/tools/trim.d.ts.map +1 -0
- package/dist/core/tools/trim.js +98 -0
- package/dist/core/tools/trim.js.map +1 -0
- package/dist/core/tools/webfetch.d.ts +10 -0
- package/dist/core/tools/webfetch.d.ts.map +1 -0
- package/dist/core/tools/webfetch.js +104 -0
- package/dist/core/tools/webfetch.js.map +1 -0
- package/dist/core/tools/websearch.d.ts +19 -0
- package/dist/core/tools/websearch.d.ts.map +1 -0
- package/dist/core/tools/websearch.js +132 -0
- package/dist/core/tools/websearch.js.map +1 -0
- package/dist/index.d.ts +30 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -1
- package/dist/index.js.map +1 -1
- package/dist/server/create-agent-runtime.d.ts +68 -0
- package/dist/server/create-agent-runtime.d.ts.map +1 -0
- package/dist/server/create-agent-runtime.js +67 -0
- package/dist/server/create-agent-runtime.js.map +1 -0
- package/dist/server/create-server.d.ts +5 -0
- package/dist/server/create-server.d.ts.map +1 -1
- package/dist/server/create-server.js +2 -0
- package/dist/server/create-server.js.map +1 -1
- package/package.json +14 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../../src/core/tools/git.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { ToolDef } from "./def.js";
|
|
2
|
+
/** apply_patch(P0 补齐):把 unified diff 应用到 Workspace 文件。
|
|
3
|
+
* 与 write/edit 同走 WorkspaceFiles 门面——每次落盘生成不可变版本与
|
|
4
|
+
* diff 记录(可审查、可回滚),不是裸文件写。
|
|
5
|
+
*
|
|
6
|
+
* 支持:一个补丁多文件 / 多 hunk / 新建文件(--- /dev/null)/ 行号漂移
|
|
7
|
+
* 容差匹配。删除文件不被门面支持,明确报错。
|
|
8
|
+
* 应用策略:两阶段——先对全部文件完成解析+试算(不写盘),任一失败整体
|
|
9
|
+
* 拒绝并原样报错;全部通过后才逐个落盘。 */
|
|
10
|
+
export type FilePatch = {
|
|
11
|
+
oldPath: string | null;
|
|
12
|
+
newPath: string | null;
|
|
13
|
+
hunks: Array<{
|
|
14
|
+
oldStart: number;
|
|
15
|
+
segments: Array<{
|
|
16
|
+
kind: "context" | "remove" | "add";
|
|
17
|
+
text: string;
|
|
18
|
+
}>;
|
|
19
|
+
}>;
|
|
20
|
+
};
|
|
21
|
+
export type PatchParseResult = {
|
|
22
|
+
files: FilePatch[];
|
|
23
|
+
errors: string[];
|
|
24
|
+
};
|
|
25
|
+
export declare function parseUnifiedPatch(patchText: string): PatchParseResult;
|
|
26
|
+
type ApplyOutcome = {
|
|
27
|
+
ok: true;
|
|
28
|
+
content: string;
|
|
29
|
+
additions: number;
|
|
30
|
+
deletions: number;
|
|
31
|
+
} | {
|
|
32
|
+
ok: false;
|
|
33
|
+
error: string;
|
|
34
|
+
};
|
|
35
|
+
export declare function applyFilePatch(original: string | null, patch: FilePatch): ApplyOutcome;
|
|
36
|
+
export type ApplyPatchReportEntry = {
|
|
37
|
+
path: string;
|
|
38
|
+
action: "created" | "updated";
|
|
39
|
+
additions: number;
|
|
40
|
+
deletions: number;
|
|
41
|
+
revisionId: string;
|
|
42
|
+
};
|
|
43
|
+
export declare const applyPatchTool: ToolDef;
|
|
44
|
+
export {};
|
|
45
|
+
//# sourceMappingURL=patch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patch.d.ts","sourceRoot":"","sources":["../../../src/core/tools/patch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAGxC;;;;;;;0BAO0B;AAE1B,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,KAAK,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,KAAK,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACvE,CAAC,CAAC;CACJ,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAWxE,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAqErE;AAED,KAAK,YAAY,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAuBvH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,SAAS,GAAG,YAAY,CA6DtF;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAgDF,eAAO,MAAM,cAAc,EAAE,OAc5B,CAAC"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const DRIFT_WINDOW = 300;
|
|
3
|
+
const NULL_PATH = /^(\/dev\/null|NUL)$/i;
|
|
4
|
+
function stripHeaderPath(raw) {
|
|
5
|
+
const noTimestamp = raw.split("\t")[0].trim();
|
|
6
|
+
if (NULL_PATH.test(noTimestamp))
|
|
7
|
+
return null;
|
|
8
|
+
return noTimestamp.replace(/^[ab]\//, "");
|
|
9
|
+
}
|
|
10
|
+
export function parseUnifiedPatch(patchText) {
|
|
11
|
+
const files = [];
|
|
12
|
+
const errors = [];
|
|
13
|
+
const lines = patchText.replace(/\r\n/g, "\n").split("\n");
|
|
14
|
+
let index = 0;
|
|
15
|
+
while (index < lines.length) {
|
|
16
|
+
const line = lines[index];
|
|
17
|
+
if (!line.startsWith("--- ")) {
|
|
18
|
+
index += 1;
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
const plusLine = lines[index + 1];
|
|
22
|
+
if (!plusLine?.startsWith("+++ ")) {
|
|
23
|
+
errors.push(`第 ${index + 1} 行 --- 之后缺少 +++ 文件头`);
|
|
24
|
+
break;
|
|
25
|
+
}
|
|
26
|
+
const filePatch = {
|
|
27
|
+
oldPath: stripHeaderPath(line.slice(4)),
|
|
28
|
+
newPath: stripHeaderPath(plusLine.slice(4)),
|
|
29
|
+
hunks: [],
|
|
30
|
+
};
|
|
31
|
+
index += 2;
|
|
32
|
+
while (index < lines.length && lines[index].startsWith("@@")) {
|
|
33
|
+
const head = /^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/.exec(lines[index]);
|
|
34
|
+
if (!head) {
|
|
35
|
+
errors.push(`无法解析 hunk 头:${lines[index].slice(0, 60)}`);
|
|
36
|
+
index = lines.length;
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
const oldStart = Number(head[1]);
|
|
40
|
+
index += 1;
|
|
41
|
+
const segments = [];
|
|
42
|
+
let consumedOldSide = 0;
|
|
43
|
+
while (index < lines.length) {
|
|
44
|
+
const body = lines[index];
|
|
45
|
+
if (body.startsWith("@@") || body.startsWith("--- "))
|
|
46
|
+
break;
|
|
47
|
+
if (body.startsWith("\")) {
|
|
48
|
+
index += 1;
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
if (body.startsWith(" ") || body === "") {
|
|
52
|
+
segments.push({ kind: "context", text: body.slice(1) });
|
|
53
|
+
consumedOldSide += 1;
|
|
54
|
+
index += 1;
|
|
55
|
+
}
|
|
56
|
+
else if (body.startsWith("-")) {
|
|
57
|
+
segments.push({ kind: "remove", text: body.slice(1) });
|
|
58
|
+
consumedOldSide += 1;
|
|
59
|
+
index += 1;
|
|
60
|
+
}
|
|
61
|
+
else if (body.startsWith("+")) {
|
|
62
|
+
segments.push({ kind: "add", text: body.slice(1) });
|
|
63
|
+
index += 1;
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
break; // 非补丁正文(其它文件头等)——hunk 结束
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
if (consumedOldSide === 0 && !segments.some((s) => s.kind === "add")) {
|
|
70
|
+
errors.push(`${filePatch.newPath ?? "?"} 存在空 hunk`);
|
|
71
|
+
}
|
|
72
|
+
filePatch.hunks.push({ oldStart, segments });
|
|
73
|
+
}
|
|
74
|
+
if (!filePatch.hunks.length && !errors.length) {
|
|
75
|
+
errors.push(`${filePatch.newPath ?? "?"} 缺少 @@ hunk(不支持整文件包裹格式)`);
|
|
76
|
+
}
|
|
77
|
+
files.push(filePatch);
|
|
78
|
+
}
|
|
79
|
+
if (!files.length && !errors.length)
|
|
80
|
+
errors.push("没有找到补丁内容(需要 unified diff 格式)");
|
|
81
|
+
return { files, errors };
|
|
82
|
+
}
|
|
83
|
+
function hunkSides(hunk) {
|
|
84
|
+
const expected = [];
|
|
85
|
+
const replacement = [];
|
|
86
|
+
let added = 0;
|
|
87
|
+
let removed = 0;
|
|
88
|
+
for (const seg of hunk.segments) {
|
|
89
|
+
if (seg.kind === "add") {
|
|
90
|
+
replacement.push(seg.text);
|
|
91
|
+
added += 1;
|
|
92
|
+
}
|
|
93
|
+
else if (seg.kind === "context") {
|
|
94
|
+
expected.push(seg.text);
|
|
95
|
+
replacement.push(seg.text);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
// remove:只进期望侧,不进重建结果
|
|
99
|
+
expected.push(seg.text);
|
|
100
|
+
removed += 1;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return { expected, replacement, added, removed };
|
|
104
|
+
}
|
|
105
|
+
export function applyFilePatch(original, patch) {
|
|
106
|
+
// —— 新建文件 —— //
|
|
107
|
+
if (patch.oldPath === null) {
|
|
108
|
+
if (original !== null)
|
|
109
|
+
return { ok: false, error: `${patch.newPath} 标记为新建,但文件已存在` };
|
|
110
|
+
const contentLines = patch.hunks.flatMap((h) => h.segments.filter((s) => s.kind === "add").map((s) => s.text));
|
|
111
|
+
return { ok: true, content: contentLines.join("\n") + "\n", additions: contentLines.length, deletions: 0 };
|
|
112
|
+
}
|
|
113
|
+
if (patch.newPath === null) {
|
|
114
|
+
return { ok: false, error: `apply_patch 不支持删除文件(${patch.oldPath}):请改用 bash rm 后再提交补丁或保留文件` };
|
|
115
|
+
}
|
|
116
|
+
if (original === null) {
|
|
117
|
+
return { ok: false, error: `文件不存在或不可读:${patch.oldPath}` };
|
|
118
|
+
}
|
|
119
|
+
// —— 修改现有文件:按 oldStart 从后往前应用,天然免行号漂移叠加 —— //
|
|
120
|
+
const endedWithNewline = original.endsWith("\n");
|
|
121
|
+
const work = original.split("\n");
|
|
122
|
+
if (endedWithNewline)
|
|
123
|
+
work.pop();
|
|
124
|
+
let additions = 0;
|
|
125
|
+
let deletions = 0;
|
|
126
|
+
const ordered = [...patch.hunks].sort((a, b) => b.oldStart - a.oldStart);
|
|
127
|
+
for (let h = 0; h < ordered.length; h++) {
|
|
128
|
+
const hunk = ordered[h];
|
|
129
|
+
const sides = hunkSides(hunk);
|
|
130
|
+
const { expected, replacement } = sides;
|
|
131
|
+
if (!expected.length) {
|
|
132
|
+
// 纯新增块:oldStart 表示插入位置(其后行号)
|
|
133
|
+
const insertAt = Math.max(0, Math.min(work.length, hunk.oldStart));
|
|
134
|
+
work.splice(insertAt, 0, ...replacement);
|
|
135
|
+
additions += replacement.length;
|
|
136
|
+
void hunkSides;
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
const idealPos = hunk.oldStart - 1;
|
|
140
|
+
let foundAt = -1;
|
|
141
|
+
for (let offset = 0; offset <= DRIFT_WINDOW && foundAt < 0; offset++) {
|
|
142
|
+
for (const candidate of [idealPos + offset, idealPos - offset]) {
|
|
143
|
+
if (candidate < 0 || candidate + expected.length > work.length)
|
|
144
|
+
continue;
|
|
145
|
+
if (expected.every((line, i) => work[candidate + i] === line)) {
|
|
146
|
+
foundAt = candidate;
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (foundAt < 0) {
|
|
152
|
+
return {
|
|
153
|
+
ok: false,
|
|
154
|
+
error: `${patch.newPath} 第 ${h + 1} 个 hunk 无法应用:±${DRIFT_WINDOW} 行内找不到匹配上下文(期望首行「${expected[0]?.slice(0, 60)}」)`,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
work.splice(foundAt, expected.length, ...replacement);
|
|
158
|
+
additions += sides.added;
|
|
159
|
+
deletions += sides.removed;
|
|
160
|
+
}
|
|
161
|
+
const content = work.join("\n") + (work.length ? (endedWithNewline ? "\n" : "") : "");
|
|
162
|
+
return { ok: true, content, additions, deletions };
|
|
163
|
+
}
|
|
164
|
+
async function commitPatches(patchText, ctx) {
|
|
165
|
+
const { files, errors } = parseUnifiedPatch(patchText);
|
|
166
|
+
const fatal = [...errors];
|
|
167
|
+
const staged = [];
|
|
168
|
+
for (const filePatch of files) {
|
|
169
|
+
const target = filePatch.newPath ?? filePatch.oldPath ?? "?";
|
|
170
|
+
if (fatal.length)
|
|
171
|
+
break;
|
|
172
|
+
const existing = await ctx.workspace.read(target);
|
|
173
|
+
const outcome = applyFilePatch(existing ? existing.content : null, filePatch);
|
|
174
|
+
if (!outcome.ok)
|
|
175
|
+
fatal.push(outcome.error);
|
|
176
|
+
else
|
|
177
|
+
staged.push({ path: target, created: filePatch.oldPath === null, outcome });
|
|
178
|
+
}
|
|
179
|
+
if (fatal.length) {
|
|
180
|
+
throw new Error(`补丁未应用任何变更(两阶段校验未通过):\n${fatal.map((e) => `- ${e}`).join("\n")}`);
|
|
181
|
+
}
|
|
182
|
+
const reports = [];
|
|
183
|
+
for (const entry of staged) {
|
|
184
|
+
const written = await ctx.workspace.write({
|
|
185
|
+
path: entry.path,
|
|
186
|
+
content: entry.outcome.content,
|
|
187
|
+
author: "agent",
|
|
188
|
+
summary: `apply_patch 更新 ${entry.path}`,
|
|
189
|
+
});
|
|
190
|
+
if (!written)
|
|
191
|
+
throw new Error(`写入被拒绝:${entry.path}`);
|
|
192
|
+
await ctx.emitFileEdited({ path: entry.path, revisionId: written.revisionId, diff: written.diff });
|
|
193
|
+
reports.push({
|
|
194
|
+
path: entry.path,
|
|
195
|
+
action: entry.created ? "created" : "updated",
|
|
196
|
+
additions: entry.outcome.additions,
|
|
197
|
+
deletions: entry.outcome.deletions,
|
|
198
|
+
revisionId: written.revisionId,
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
return {
|
|
202
|
+
title: `apply_patch:${reports.length} 个文件`,
|
|
203
|
+
output: reports.map((r) => `更新 ${r.path}(+${r.additions}/-${r.deletions},版本 ${r.revisionId})`).join("\n"),
|
|
204
|
+
reports,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
function affectedPaths(patchText) {
|
|
208
|
+
return [...patchText.matchAll(/^\+\+\+ (?:b\/)?([^\t\\\n]+)/gm)].map((m) => m[1]);
|
|
209
|
+
}
|
|
210
|
+
export const applyPatchTool = {
|
|
211
|
+
id: "apply_patch",
|
|
212
|
+
label: "应用补丁",
|
|
213
|
+
description: "把 unified diff 补丁应用到 Workspace:一个补丁可改多个文件/多处 hunk,支持新建文件(--- /dev/null);逐块上下文匹配允许 ±300 行漂移。任一文件校验失败则整体不变更。大范围结构化修改首选本工具。",
|
|
214
|
+
parameters: z.object({
|
|
215
|
+
patch: z.string().min(8).max(256 * 1024),
|
|
216
|
+
}),
|
|
217
|
+
permission: (args) => ({ permission: "edit", patterns: affectedPaths(args.patch) }),
|
|
218
|
+
executionMode: "sequential",
|
|
219
|
+
async execute(args, ctx) {
|
|
220
|
+
const result = await commitPatches(args.patch, ctx);
|
|
221
|
+
return { title: result.title, output: result.output, metadata: { files: result.reports } };
|
|
222
|
+
},
|
|
223
|
+
};
|
|
224
|
+
//# sourceMappingURL=patch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patch.js","sourceRoot":"","sources":["../../../src/core/tools/patch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qa-check.d.ts","sourceRoot":"","sources":["../../../src/core/tools/qa-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExC,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;iBAK9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"qa-check.d.ts","sourceRoot":"","sources":["../../../src/core/tools/qa-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExC,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;iBAK9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAsBhE,eAAO,MAAM,WAAW,EAAE,OAgCzB,CAAC"}
|
|
@@ -16,7 +16,10 @@ function hasResponsiveStyles(styles) {
|
|
|
16
16
|
return /@media\s*\(/i.test(styles) || /\b(?:display\s*:\s*(?:grid|flex)|max-width\s*:|clamp\s*\()/i.test(styles);
|
|
17
17
|
}
|
|
18
18
|
function hasFixedOverflowRisk(styles) {
|
|
19
|
-
|
|
19
|
+
// `max-width` is commonly used in responsive media queries and containers;
|
|
20
|
+
// it constrains a layout rather than forcing it wider. Only a literal width
|
|
21
|
+
// or min-width declaration at a CSS declaration boundary is an overflow risk.
|
|
22
|
+
return /(?:^|[;{]\s*)(?:width|min-width)\s*:\s*(?:[5-9]\d{2}|\d{4,})px\s*(?:;|})/im.test(styles) && !/max-width\s*:\s*100%/i.test(styles);
|
|
20
23
|
}
|
|
21
24
|
export const qaCheckTool = {
|
|
22
25
|
id: "qa-check",
|
|
@@ -26,8 +29,12 @@ export const qaCheckTool = {
|
|
|
26
29
|
permission: () => null,
|
|
27
30
|
async execute(args, ctx) {
|
|
28
31
|
const entry = await ctx.workspace.read(args.entryPath);
|
|
29
|
-
const
|
|
32
|
+
const cssFiles = (await Promise.all((await ctx.workspace.list()).filter((file) => file.path.endsWith(".css")).slice(0, 20).map((file) => ctx.workspace.read(file.path)))).filter((file) => Boolean(file)).map((file) => file.content).join("\n");
|
|
30
33
|
const html = entry?.content ?? "";
|
|
34
|
+
// 单文件 web_app 的样式全部内联在 <style> 块里(workspace 没有 .css 文件),
|
|
35
|
+
// 响应式/溢出检测必须并入内联样式,否则永远判"缺少响应式样式"。
|
|
36
|
+
const inlineStyles = [...html.matchAll(/<style[^>]*>([\s\S]*?)<\/style>/gi)].map((match) => match[1] ?? "").join("\n");
|
|
37
|
+
const styles = `${cssFiles}\n${inlineStyles}`;
|
|
31
38
|
const htmlLoads = Boolean(entry && /<html\b/i.test(html) && /<body\b/i.test(html));
|
|
32
39
|
const missingText = args.requiredText.filter((text) => !html.includes(text));
|
|
33
40
|
const responsive = hasViewportMeta(html) && hasResponsiveStyles(styles);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qa-check.js","sourceRoot":"","sources":["../../../src/core/tools/qa-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IACxB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACpC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC9K,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;CACjI,CAAC,CAAC;AAIH,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;IAClE,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAC7E,CAAC,CAAC;AAEH,SAAS,eAAe,CAAC,IAAY;IACnC,OAAO,2CAA2C,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,oDAAoD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnI,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAc;IACzC,OAAO,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,6DAA6D,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACnH,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAc;IAC1C,OAAO,
|
|
1
|
+
{"version":3,"file":"qa-check.js","sourceRoot":"","sources":["../../../src/core/tools/qa-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ToolDef } from "./def.js";
|
|
2
|
+
/** repo_map 工具(R1,来源 Aider):返回工作区的代码结构导航图。
|
|
3
|
+
* 只读(permission 复用 read 类,基线 allow / explore 显式 allow)。
|
|
4
|
+
* 用法建议已写进 default/explore prompt:大型探索任务先 repo_map 再精准 read。 */
|
|
5
|
+
export declare function createRepoMapTool(opts: {
|
|
6
|
+
workspaceRoot: () => string;
|
|
7
|
+
}): ToolDef;
|
|
8
|
+
//# sourceMappingURL=repomap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repomap.d.ts","sourceRoot":"","sources":["../../../src/core/tools/repomap.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExC;;gEAEgE;AAChE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IAAE,aAAa,EAAE,MAAM,MAAM,CAAA;CAAE,GAAG,OAAO,CA4BhF"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { renderRepoMap } from "../repomap/repomap.js";
|
|
3
|
+
/** repo_map 工具(R1,来源 Aider):返回工作区的代码结构导航图。
|
|
4
|
+
* 只读(permission 复用 read 类,基线 allow / explore 显式 allow)。
|
|
5
|
+
* 用法建议已写进 default/explore prompt:大型探索任务先 repo_map 再精准 read。 */
|
|
6
|
+
export function createRepoMapTool(opts) {
|
|
7
|
+
return {
|
|
8
|
+
id: "repo_map",
|
|
9
|
+
label: "仓库地图",
|
|
10
|
+
description: "获取当前 Workspace 的代码结构导航图:按重要性排序的文件 + 每文件的定义符号(函数/类/接口,带行号)。在开始大范围探索前先调用它,可以少走 glob/grep 弯路;用 focus 传入任务描述或关键符号名,地图会优先显示与任务最相关的文件。返回文本很紧凑(默认 ~1k tokens)。",
|
|
11
|
+
parameters: z.object({
|
|
12
|
+
focus: z.string().max(4000).optional().describe("当前任务描述或关键符号名(如类/函数名),地图会优先显示相关文件"),
|
|
13
|
+
paths: z.array(z.string().max(512)).max(20).optional().describe("只索引这些目录前缀(相对工作区路径)"),
|
|
14
|
+
tokenBudget: z.number().int().min(256).max(8192).optional().describe("渲染 token 预算,默认 1024"),
|
|
15
|
+
}),
|
|
16
|
+
permission: () => ({ permission: "read", patterns: ["**"] }),
|
|
17
|
+
async execute(args) {
|
|
18
|
+
const root = opts.workspaceRoot();
|
|
19
|
+
const result = await renderRepoMap({
|
|
20
|
+
root,
|
|
21
|
+
focus: args.focus,
|
|
22
|
+
paths: args.paths,
|
|
23
|
+
tokenBudget: args.tokenBudget,
|
|
24
|
+
});
|
|
25
|
+
const header = `[仓库地图] 索引 ${result.stats.indexedFiles} 个代码文件,渲染 ${result.stats.fileCount} 个文件 / ${result.stats.symbolCount} 个符号(~${result.stats.tokenEstimate} tokens)${result.stats.hitCap ? "(文件数触顶,结果可能不完整)" : ""}`;
|
|
26
|
+
return {
|
|
27
|
+
title: "仓库地图",
|
|
28
|
+
output: result.text ? `${header}\n\n${result.text}` : `${header}\n\n(工作区没有可索引的代码文件)`,
|
|
29
|
+
metadata: { ...result.stats },
|
|
30
|
+
};
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=repomap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repomap.js","sourceRoot":"","sources":["../../../src/core/tools/repomap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtD;;gEAEgE;AAChE,MAAM,UAAU,iBAAiB,CAAC,IAAqC;IACrE,OAAO;QACL,EAAE,EAAE,UAAU;QACd,KAAK,EAAE,MAAM;QACb,WAAW,EACT,yJAAyJ;QAC3J,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;YACnB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;YACnF,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YACrF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;SAC5F,CAAC;QACF,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5D,KAAK,CAAC,OAAO,CAAC,IAAI;YAChB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;gBACjC,IAAI;gBACJ,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,WAAW,EAAE,IAAI,CAAC,WAAW;aAC9B,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,aAAa,MAAM,CAAC,KAAK,CAAC,YAAY,aAAa,MAAM,CAAC,KAAK,CAAC,SAAS,UAAU,MAAM,CAAC,KAAK,CAAC,WAAW,SAAS,MAAM,CAAC,KAAK,CAAC,aAAa,WAAW,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACvN,OAAO;gBACL,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,qBAAqB;gBACpF,QAAQ,EAAE,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE;aAC9B,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type { ToolDef } from "./def.js";
|
|
2
|
+
/** 交互式终端(P0):面向 Agent 的长驻/交互式进程能力——`npm run dev`、
|
|
3
|
+
* watch 模式、会问 y/n 的安装器等,一次性 bash 沙箱跑不了或会卡死。
|
|
4
|
+
*
|
|
5
|
+
* 分层:TerminalManager(环形缓冲 + 会话生命周期)只依赖 TerminalBackend
|
|
6
|
+
* 接口;真正的 PTY vs 管道由宿主注入的 backend 决定(见
|
|
7
|
+
* adapters/terminal-backend.ts:动态 import node-pty,ABI 不匹配时降级
|
|
8
|
+
* 管道模式)。工具层不需要知道区别。
|
|
9
|
+
*
|
|
10
|
+
* 安全位阶:start 直接在宿主机起进程(不进沙箱),独立权限分类
|
|
11
|
+
* `terminal` 走审批;read/write/kill 针对已批准创建的会话不再重复询问。 */
|
|
12
|
+
export type TerminalSessionStatus = "running" | "exited" | "killed";
|
|
13
|
+
export type TerminalSessionInfo = {
|
|
14
|
+
id: string;
|
|
15
|
+
name?: string;
|
|
16
|
+
status: TerminalSessionStatus;
|
|
17
|
+
backend: "pty" | "pipe";
|
|
18
|
+
pid?: number;
|
|
19
|
+
exitCode?: number | null;
|
|
20
|
+
signal?: string | null;
|
|
21
|
+
startedAt: string;
|
|
22
|
+
bytesTotal: number;
|
|
23
|
+
};
|
|
24
|
+
/** 后端只关心这四件事。onData 之后必须保证 onExit 恰好触发一次。 */
|
|
25
|
+
export interface TerminalHandle {
|
|
26
|
+
write(data: string): void;
|
|
27
|
+
kill(signal?: string): void;
|
|
28
|
+
resize?(cols: number, rows: number): void;
|
|
29
|
+
}
|
|
30
|
+
export interface TerminalBackend {
|
|
31
|
+
readonly kind: "pty" | "pipe";
|
|
32
|
+
start(input: {
|
|
33
|
+
command: string;
|
|
34
|
+
cwd: string;
|
|
35
|
+
env?: Record<string, string>;
|
|
36
|
+
cols?: number;
|
|
37
|
+
rows?: number;
|
|
38
|
+
}, hooks: {
|
|
39
|
+
onData(chunk: string): void;
|
|
40
|
+
onExit(result: {
|
|
41
|
+
exitCode: number | null;
|
|
42
|
+
signal: string | null;
|
|
43
|
+
}): void;
|
|
44
|
+
}): Promise<TerminalHandle & {
|
|
45
|
+
pid?: number;
|
|
46
|
+
}>;
|
|
47
|
+
}
|
|
48
|
+
export declare class TerminalManager {
|
|
49
|
+
#private;
|
|
50
|
+
constructor(backend: TerminalBackend, opts?: {
|
|
51
|
+
ringCapBytes?: number;
|
|
52
|
+
maxSessions?: number;
|
|
53
|
+
});
|
|
54
|
+
get backendKind(): "pty" | "pipe";
|
|
55
|
+
start(input: {
|
|
56
|
+
name?: string;
|
|
57
|
+
command: string;
|
|
58
|
+
cwd: string;
|
|
59
|
+
env?: Record<string, string>;
|
|
60
|
+
cols?: number;
|
|
61
|
+
rows?: number;
|
|
62
|
+
}): Promise<TerminalSessionInfo>;
|
|
63
|
+
list(): TerminalSessionInfo[];
|
|
64
|
+
getSession(id: string): TerminalSessionInfo | null;
|
|
65
|
+
read(id: string, sinceBytes?: number): {
|
|
66
|
+
output: string;
|
|
67
|
+
cursor: number;
|
|
68
|
+
totalDropped: number;
|
|
69
|
+
truncatedHead: boolean;
|
|
70
|
+
session: TerminalSessionInfo;
|
|
71
|
+
} | null;
|
|
72
|
+
write(id: string, text: string): boolean;
|
|
73
|
+
resize(id: string, cols: number, rows: number): boolean;
|
|
74
|
+
kill(id: string, signal?: string): boolean;
|
|
75
|
+
disposeAll(signal?: string): void;
|
|
76
|
+
}
|
|
77
|
+
export declare function createTerminalTools(manager: TerminalManager, opts: {
|
|
78
|
+
workspaceRoot: () => string;
|
|
79
|
+
}): ToolDef[];
|
|
80
|
+
//# sourceMappingURL=terminal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../../src/core/tools/terminal.ts"],"names":[],"mappings":"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"}
|