@atom-workflow-agent/cli 0.1.1
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/LICENSE +201 -0
- package/README.md +61 -0
- package/README.zh-CN.md +61 -0
- package/dist/app.d.ts +14 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +172 -0
- package/dist/app.js.map +1 -0
- package/dist/atoms/atom-development-service.d.ts +43 -0
- package/dist/atoms/atom-development-service.d.ts.map +1 -0
- package/dist/atoms/atom-development-service.js +308 -0
- package/dist/atoms/atom-development-service.js.map +1 -0
- package/dist/atoms/atom-development-store.d.ts +70 -0
- package/dist/atoms/atom-development-store.d.ts.map +1 -0
- package/dist/atoms/atom-development-store.js +271 -0
- package/dist/atoms/atom-development-store.js.map +1 -0
- package/dist/commands/doctor.d.ts +38 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +163 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/models.d.ts +16 -0
- package/dist/commands/models.d.ts.map +1 -0
- package/dist/commands/models.js +20 -0
- package/dist/commands/models.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/local/local-project-service.d.ts +63 -0
- package/dist/local/local-project-service.d.ts.map +1 -0
- package/dist/local/local-project-service.js +327 -0
- package/dist/local/local-project-service.js.map +1 -0
- package/dist/logging/create-cli-logger.d.ts +8 -0
- package/dist/logging/create-cli-logger.d.ts.map +1 -0
- package/dist/logging/create-cli-logger.js +11 -0
- package/dist/logging/create-cli-logger.js.map +1 -0
- package/dist/logging/json-logger.d.ts +24 -0
- package/dist/logging/json-logger.d.ts.map +1 -0
- package/dist/logging/json-logger.js +29 -0
- package/dist/logging/json-logger.js.map +1 -0
- package/dist/providers/acp-planning-model-adapter.d.ts +9 -0
- package/dist/providers/acp-planning-model-adapter.d.ts.map +1 -0
- package/dist/providers/acp-planning-model-adapter.js +54 -0
- package/dist/providers/acp-planning-model-adapter.js.map +1 -0
- package/dist/providers/provider-name.d.ts +5 -0
- package/dist/providers/provider-name.d.ts.map +1 -0
- package/dist/providers/provider-name.js +4 -0
- package/dist/providers/provider-name.js.map +1 -0
- package/dist/providers/resolve-provider-config.d.ts +10 -0
- package/dist/providers/resolve-provider-config.d.ts.map +1 -0
- package/dist/providers/resolve-provider-config.js +14 -0
- package/dist/providers/resolve-provider-config.js.map +1 -0
- package/dist/providers/resolve-trae-executable.d.ts +20 -0
- package/dist/providers/resolve-trae-executable.d.ts.map +1 -0
- package/dist/providers/resolve-trae-executable.js +46 -0
- package/dist/providers/resolve-trae-executable.js.map +1 -0
- package/dist/workflow/builtin-atom-packages.d.ts +4 -0
- package/dist/workflow/builtin-atom-packages.d.ts.map +1 -0
- package/dist/workflow/builtin-atom-packages.js +39 -0
- package/dist/workflow/builtin-atom-packages.js.map +1 -0
- package/dist/workflow/planning-cli-service.d.ts +35 -0
- package/dist/workflow/planning-cli-service.d.ts.map +1 -0
- package/dist/workflow/planning-cli-service.js +97 -0
- package/dist/workflow/planning-cli-service.js.map +1 -0
- package/dist/workflow/workflow-command-input.d.ts +25 -0
- package/dist/workflow/workflow-command-input.d.ts.map +1 -0
- package/dist/workflow/workflow-command-input.js +117 -0
- package/dist/workflow/workflow-command-input.js.map +1 -0
- package/dist/workflow/workflow-command-progress.d.ts +6 -0
- package/dist/workflow/workflow-command-progress.d.ts.map +1 -0
- package/dist/workflow/workflow-command-progress.js +81 -0
- package/dist/workflow/workflow-command-progress.js.map +1 -0
- package/dist/workflow/workflow-command-service.d.ts +85 -0
- package/dist/workflow/workflow-command-service.d.ts.map +1 -0
- package/dist/workflow/workflow-command-service.js +2 -0
- package/dist/workflow/workflow-command-service.js.map +1 -0
- package/dist/workflow/workflow-command.d.ts +5 -0
- package/dist/workflow/workflow-command.d.ts.map +1 -0
- package/dist/workflow/workflow-command.js +425 -0
- package/dist/workflow/workflow-command.js.map +1 -0
- package/dist/workflow/workflow-coordinator.d.ts +25 -0
- package/dist/workflow/workflow-coordinator.d.ts.map +1 -0
- package/dist/workflow/workflow-coordinator.js +112 -0
- package/dist/workflow/workflow-coordinator.js.map +1 -0
- package/dist/workflow/workflow-output.d.ts +9 -0
- package/dist/workflow/workflow-output.d.ts.map +1 -0
- package/dist/workflow/workflow-output.js +109 -0
- package/dist/workflow/workflow-output.js.map +1 -0
- package/dist/workflow/workflow-project-config.d.ts +14 -0
- package/dist/workflow/workflow-project-config.d.ts.map +1 -0
- package/dist/workflow/workflow-project-config.js +55 -0
- package/dist/workflow/workflow-project-config.js.map +1 -0
- package/dist/workflow/workflow-service.d.ts +1237 -0
- package/dist/workflow/workflow-service.d.ts.map +1 -0
- package/dist/workflow/workflow-service.js +475 -0
- package/dist/workflow/workflow-service.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export interface LocalProjectStatus {
|
|
2
|
+
readonly projectRoot: string;
|
|
3
|
+
readonly initialized: boolean;
|
|
4
|
+
readonly configPath: string;
|
|
5
|
+
readonly atomSourceCount: number;
|
|
6
|
+
readonly sourceDirectories: {
|
|
7
|
+
readonly atoms: boolean;
|
|
8
|
+
readonly workflows: boolean;
|
|
9
|
+
};
|
|
10
|
+
readonly nextActions: readonly string[];
|
|
11
|
+
}
|
|
12
|
+
export declare function inspectLocalProject(projectRoot: string): Promise<LocalProjectStatus>;
|
|
13
|
+
export declare function initializeLocalProject(projectRoot: string): Promise<LocalProjectStatus & {
|
|
14
|
+
readonly created: readonly string[];
|
|
15
|
+
}>;
|
|
16
|
+
export interface CreateLocalAtomInput {
|
|
17
|
+
readonly atomId: string;
|
|
18
|
+
readonly description?: string;
|
|
19
|
+
readonly directory?: string;
|
|
20
|
+
}
|
|
21
|
+
export declare function createLocalAtom(projectRoot: string, input: CreateLocalAtomInput): Promise<{
|
|
22
|
+
readonly atomId: string;
|
|
23
|
+
readonly directory: string;
|
|
24
|
+
readonly source: string;
|
|
25
|
+
readonly fixture: string;
|
|
26
|
+
readonly registeredModule: string;
|
|
27
|
+
readonly nextActions: readonly string[];
|
|
28
|
+
}>;
|
|
29
|
+
export declare function inspectLocalStorage(projectRoot: string): Promise<{
|
|
30
|
+
readonly dataDirectory: string;
|
|
31
|
+
readonly total: {
|
|
32
|
+
readonly files: number;
|
|
33
|
+
readonly bytes: number;
|
|
34
|
+
readonly display: string;
|
|
35
|
+
};
|
|
36
|
+
readonly sections: Readonly<Record<string, {
|
|
37
|
+
readonly files: number;
|
|
38
|
+
readonly bytes: number;
|
|
39
|
+
readonly display: string;
|
|
40
|
+
}>>;
|
|
41
|
+
readonly recommendations: readonly string[];
|
|
42
|
+
}>;
|
|
43
|
+
export declare function pruneLocalStorage(projectRoot: string, options: {
|
|
44
|
+
readonly olderThanDays: number;
|
|
45
|
+
readonly apply?: boolean;
|
|
46
|
+
readonly now?: Date;
|
|
47
|
+
}): Promise<{
|
|
48
|
+
readonly dataDirectory: string;
|
|
49
|
+
readonly mode: "preview" | "applied";
|
|
50
|
+
readonly cutoff: string;
|
|
51
|
+
readonly candidates: readonly {
|
|
52
|
+
readonly section: "runs" | "plans" | "cache";
|
|
53
|
+
readonly name: string;
|
|
54
|
+
readonly bytes: number;
|
|
55
|
+
}[];
|
|
56
|
+
readonly skippedNonTerminal: readonly {
|
|
57
|
+
readonly section: "runs" | "plans";
|
|
58
|
+
readonly name: string;
|
|
59
|
+
readonly status: string;
|
|
60
|
+
}[];
|
|
61
|
+
readonly reclaimedBytes: number;
|
|
62
|
+
}>;
|
|
63
|
+
//# sourceMappingURL=local-project-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-project-service.d.ts","sourceRoot":"","sources":["../../src/local/local-project-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
import { mkdir, readFile, readdir, rm, stat, writeFile } from "node:fs/promises";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { join, relative, resolve } from "node:path";
|
|
4
|
+
import { createRequire } from "node:module";
|
|
5
|
+
import { AtomIdSchema, AtomWorkflowError, } from "@atom-workflow-agent/contracts";
|
|
6
|
+
import { AtomDiscoveryConfigSchema } from "@atom-workflow-agent/atom-catalog";
|
|
7
|
+
const CONFIG_DIRECTORY = ".atom-workflow-agent";
|
|
8
|
+
const CONFIG_FILE = "config.json";
|
|
9
|
+
const LOCAL_IGNORE = `# Runtime state is local. Project configuration remains versioned.\n*\n!config.json\n!.gitignore\n`;
|
|
10
|
+
const ROOT_IGNORE_BLOCK = `# Atom Workflow Agent local state\n!.atom-workflow-agent/\n.atom-workflow-agent/*\n!.atom-workflow-agent/config.json\n!.atom-workflow-agent/.gitignore\n`;
|
|
11
|
+
const resolvePackageEntry = createRequire(import.meta.url).resolve;
|
|
12
|
+
async function exists(path) {
|
|
13
|
+
try {
|
|
14
|
+
await stat(path);
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
if (error.code === "ENOENT")
|
|
19
|
+
return false;
|
|
20
|
+
throw error;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
async function writeNew(path, content) {
|
|
24
|
+
try {
|
|
25
|
+
await writeFile(path, content, { encoding: "utf8", flag: "wx" });
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
if (error.code === "EEXIST")
|
|
30
|
+
return false;
|
|
31
|
+
throw error;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async function ensureRootIgnore(root) {
|
|
35
|
+
const path = join(root, ".gitignore");
|
|
36
|
+
try {
|
|
37
|
+
const current = await readFile(path, "utf8");
|
|
38
|
+
if (current.includes(".atom-workflow-agent/*") && current.includes("!.atom-workflow-agent/config.json"))
|
|
39
|
+
return "unchanged";
|
|
40
|
+
const separator = current.length === 0 || current.endsWith("\n") ? "" : "\n";
|
|
41
|
+
await writeFile(path, `${current}${separator}\n${ROOT_IGNORE_BLOCK}`, "utf8");
|
|
42
|
+
return "updated";
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
if (error.code !== "ENOENT")
|
|
46
|
+
throw error;
|
|
47
|
+
await writeFile(path, `${ROOT_IGNORE_BLOCK}`, { encoding: "utf8", flag: "wx" });
|
|
48
|
+
return "created";
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export async function inspectLocalProject(projectRoot) {
|
|
52
|
+
const root = resolve(projectRoot);
|
|
53
|
+
const configPath = join(root, CONFIG_DIRECTORY, CONFIG_FILE);
|
|
54
|
+
let atomSourceCount = 0;
|
|
55
|
+
const initialized = await exists(configPath);
|
|
56
|
+
if (initialized) {
|
|
57
|
+
try {
|
|
58
|
+
const raw = JSON.parse(await readFile(configPath, "utf8"));
|
|
59
|
+
atomSourceCount = AtomDiscoveryConfigSchema.parse(raw.atoms ?? {}).sources.length;
|
|
60
|
+
}
|
|
61
|
+
catch (cause) {
|
|
62
|
+
throw new AtomWorkflowError("PROJECT_CONFIG_INVALID", `项目配置无法读取:${configPath}`, false, { cause });
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const atoms = await exists(join(root, "atoms"));
|
|
66
|
+
const workflows = await exists(join(root, "workflows"));
|
|
67
|
+
return {
|
|
68
|
+
projectRoot: root,
|
|
69
|
+
initialized,
|
|
70
|
+
configPath,
|
|
71
|
+
atomSourceCount,
|
|
72
|
+
sourceDirectories: { atoms, workflows },
|
|
73
|
+
nextActions: initialized
|
|
74
|
+
? atomSourceCount > 0
|
|
75
|
+
? ["运行 atoms list 检查可用能力", "使用当前 Host 模型编排 Workflow"]
|
|
76
|
+
: ["运行 atom create --id <namespace.name> 创建第一个 Atom"]
|
|
77
|
+
: ["运行 project init 初始化当前项目"],
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
export async function initializeLocalProject(projectRoot) {
|
|
81
|
+
const root = resolve(projectRoot);
|
|
82
|
+
const configDirectory = join(root, CONFIG_DIRECTORY);
|
|
83
|
+
await mkdir(configDirectory, { recursive: true });
|
|
84
|
+
await mkdir(join(root, "atoms"), { recursive: true });
|
|
85
|
+
await mkdir(join(root, "workflows"), { recursive: true });
|
|
86
|
+
const created = [];
|
|
87
|
+
if (await writeNew(join(configDirectory, CONFIG_FILE), `${JSON.stringify({ atoms: { sources: [] } }, null, 2)}\n`)) {
|
|
88
|
+
created.push(relative(root, join(configDirectory, CONFIG_FILE)));
|
|
89
|
+
}
|
|
90
|
+
if (await writeNew(join(configDirectory, ".gitignore"), LOCAL_IGNORE)) {
|
|
91
|
+
created.push(relative(root, join(configDirectory, ".gitignore")));
|
|
92
|
+
}
|
|
93
|
+
const rootIgnore = await ensureRootIgnore(root);
|
|
94
|
+
if (rootIgnore !== "unchanged")
|
|
95
|
+
created.push(rootIgnore === "created" ? ".gitignore" : ".gitignore (updated)");
|
|
96
|
+
return { ...await inspectLocalProject(root), created };
|
|
97
|
+
}
|
|
98
|
+
function packageDirectoryName(atomId) {
|
|
99
|
+
return atomId.replaceAll(".", "-");
|
|
100
|
+
}
|
|
101
|
+
function titleFromId(atomId) {
|
|
102
|
+
return atomId.split(".").at(-1).split("-").map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join(" ");
|
|
103
|
+
}
|
|
104
|
+
function packageJson(packageId, sdkDependency) {
|
|
105
|
+
return `${JSON.stringify({
|
|
106
|
+
name: `@local/${packageId}`,
|
|
107
|
+
version: "1.0.0",
|
|
108
|
+
private: true,
|
|
109
|
+
type: "module",
|
|
110
|
+
exports: { ".": { types: "./dist/index.d.ts", default: "./dist/index.js" } },
|
|
111
|
+
scripts: { build: "tsc -p tsconfig.json", typecheck: "tsc -p tsconfig.json --noEmit", test: "vitest run" },
|
|
112
|
+
dependencies: { "@atom-workflow-agent/atom-sdk": sdkDependency },
|
|
113
|
+
devDependencies: { typescript: "^5.9.0", vitest: "^3.2.0" },
|
|
114
|
+
}, null, 2)}\n`;
|
|
115
|
+
}
|
|
116
|
+
function atomSource(atomId, description) {
|
|
117
|
+
const exportName = `${atomId.split(".").at(-1).replace(/-([a-z])/g, (_, value) => value.toUpperCase())}Atom`;
|
|
118
|
+
return `import { defineAtom, defineAtomPackage } from "@atom-workflow-agent/atom-sdk";\n\ninterface Input { readonly value: string }\ninterface Output { readonly result: string }\n\nexport const ${exportName} = defineAtom<Input, Output>({\n id: ${JSON.stringify(atomId)},\n title: ${JSON.stringify(titleFromId(atomId))},\n description: ${JSON.stringify(description)},\n input: {\n type: "object",\n properties: {\n value: { type: "string", minLength: 1, description: "需要由该能力处理的业务文本。" },\n },\n required: ["value"],\n additionalProperties: false,\n },\n output: {\n type: "object",\n properties: {\n result: { type: "string", description: "该能力完成处理后返回的业务结果。" },\n },\n required: ["result"],\n additionalProperties: false,\n },\n execute(input) {\n return { result: input.value };\n },\n});\n\nexport const atomPackage = defineAtomPackage({\n id: ${JSON.stringify(`local.${packageDirectoryName(atomId)}-atoms`)},\n version: "1.0.0",\n name: ${JSON.stringify(`${titleFromId(atomId)} Atoms`)},\n description: ${JSON.stringify(`包含 ${atomId} 的本地 Atom Package。`)},\n atoms: [${exportName}],\n});\n\nexport default atomPackage;\n`;
|
|
119
|
+
}
|
|
120
|
+
const TSCONFIG = `${JSON.stringify({
|
|
121
|
+
compilerOptions: {
|
|
122
|
+
target: "ES2022", module: "NodeNext", moduleResolution: "NodeNext", strict: true,
|
|
123
|
+
declaration: true, outDir: "dist", rootDir: "src", skipLibCheck: true,
|
|
124
|
+
},
|
|
125
|
+
include: ["src/**/*.ts"],
|
|
126
|
+
}, null, 2)}\n`;
|
|
127
|
+
function testSource(atomId) {
|
|
128
|
+
const exportName = `${atomId.split(".").at(-1).replace(/-([a-z])/g, (_, value) => value.toUpperCase())}Atom`;
|
|
129
|
+
return `import { describe, expect, it } from "vitest";\nimport { ${exportName} } from "../src/index.js";\n\ndescribe(${JSON.stringify(atomId)}, () => {\n it("returns an output that matches its declared contract", async () => {\n const output = await ${exportName}.execute({ value: "example" }, {} as never);\n expect(output).toEqual({ result: "example" });\n });\n});\n`;
|
|
130
|
+
}
|
|
131
|
+
export async function createLocalAtom(projectRoot, input) {
|
|
132
|
+
const root = resolve(projectRoot);
|
|
133
|
+
const atomId = AtomIdSchema.parse(input.atomId);
|
|
134
|
+
await initializeLocalProject(root);
|
|
135
|
+
const directory = resolve(root, input.directory ?? join("atoms", packageDirectoryName(atomId)));
|
|
136
|
+
const nested = relative(root, directory);
|
|
137
|
+
if (nested.startsWith("..") || nested === "")
|
|
138
|
+
throw new AtomWorkflowError("ATOM_SCAFFOLD_PATH_INVALID", "Atom 目录必须位于当前项目中");
|
|
139
|
+
if (await exists(directory))
|
|
140
|
+
throw new AtomWorkflowError("ATOM_SCAFFOLD_EXISTS", `Atom 目录已存在:${nested}`);
|
|
141
|
+
await mkdir(join(directory, "src"), { recursive: true });
|
|
142
|
+
await mkdir(join(directory, "tests"), { recursive: true });
|
|
143
|
+
await mkdir(join(directory, "fixtures"), { recursive: true });
|
|
144
|
+
const packageId = packageDirectoryName(atomId);
|
|
145
|
+
const rootPackage = await readFile(join(root, "package.json"), "utf8")
|
|
146
|
+
.then((value) => JSON.parse(value))
|
|
147
|
+
.catch(() => ({}));
|
|
148
|
+
const sdkEntry = resolvePackageEntry("@atom-workflow-agent/atom-sdk");
|
|
149
|
+
const sdkPackageRoot = resolve(sdkEntry, "..", "..");
|
|
150
|
+
const sdkManifest = JSON.parse(await readFile(join(sdkPackageRoot, "package.json"), "utf8"));
|
|
151
|
+
const inRuntimeWorkspace = rootPackage.name === "atom-workflow-agent";
|
|
152
|
+
const sdkDependency = inRuntimeWorkspace
|
|
153
|
+
? "workspace:*"
|
|
154
|
+
: `^${sdkManifest.version}`;
|
|
155
|
+
await Promise.all([
|
|
156
|
+
writeFile(join(directory, "package.json"), packageJson(packageId, sdkDependency), "utf8"),
|
|
157
|
+
writeFile(join(directory, "tsconfig.json"), TSCONFIG, "utf8"),
|
|
158
|
+
writeFile(join(directory, "src", "index.ts"), atomSource(atomId, input.description ?? `处理 ${atomId} 对应的一项边界清晰、可独立执行的业务能力。`), "utf8"),
|
|
159
|
+
writeFile(join(directory, "tests", "index.test.ts"), testSource(atomId), "utf8"),
|
|
160
|
+
writeFile(join(directory, "fixtures", "basic.input.json"), `${JSON.stringify({ value: "example" }, null, 2)}\n`, "utf8"),
|
|
161
|
+
]);
|
|
162
|
+
const configPath = join(root, CONFIG_DIRECTORY, CONFIG_FILE);
|
|
163
|
+
const raw = JSON.parse(await readFile(configPath, "utf8"));
|
|
164
|
+
const modulePath = `./${relative(root, join(directory, "dist", "index.js")).replaceAll("\\", "/")}`;
|
|
165
|
+
const sources = [...(raw.atoms?.sources ?? [])];
|
|
166
|
+
if (!sources.some((source) => source.kind === "module" && source.path === modulePath))
|
|
167
|
+
sources.push({ kind: "module", path: modulePath });
|
|
168
|
+
await writeFile(configPath, `${JSON.stringify({ ...raw, atoms: { ...(raw.atoms ?? {}), sources } }, null, 2)}\n`, "utf8");
|
|
169
|
+
return {
|
|
170
|
+
atomId,
|
|
171
|
+
directory,
|
|
172
|
+
source: join(directory, "src", "index.ts"),
|
|
173
|
+
fixture: join(directory, "fixtures", "basic.input.json"),
|
|
174
|
+
registeredModule: modulePath,
|
|
175
|
+
nextActions: [
|
|
176
|
+
`在 ${nested} 安装依赖并运行 build`,
|
|
177
|
+
`运行 atom check --atom ${atomId}@1.0.0 检查契约`,
|
|
178
|
+
`运行 atom dev --atom ${atomId}@1.0.0 --fixture ${relative(root, join(directory, "fixtures", "basic.input.json"))}`,
|
|
179
|
+
],
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
async function directoryUsage(path) {
|
|
183
|
+
try {
|
|
184
|
+
const entries = await readdir(path, { withFileTypes: true });
|
|
185
|
+
let files = 0;
|
|
186
|
+
let bytes = 0;
|
|
187
|
+
for (const entry of entries) {
|
|
188
|
+
const child = join(path, entry.name);
|
|
189
|
+
if (entry.isDirectory()) {
|
|
190
|
+
const nested = await directoryUsage(child);
|
|
191
|
+
files += nested.files;
|
|
192
|
+
bytes += nested.bytes;
|
|
193
|
+
}
|
|
194
|
+
else if (entry.isFile()) {
|
|
195
|
+
files += 1;
|
|
196
|
+
bytes += (await stat(child)).size;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
return { files, bytes };
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
if (error.code === "ENOENT")
|
|
203
|
+
return { files: 0, bytes: 0 };
|
|
204
|
+
throw error;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
function displayBytes(bytes) {
|
|
208
|
+
if (bytes < 1024)
|
|
209
|
+
return `${bytes} B`;
|
|
210
|
+
if (bytes < 1024 * 1024)
|
|
211
|
+
return `${(bytes / 1024).toFixed(1)} KiB`;
|
|
212
|
+
if (bytes < 1024 * 1024 * 1024)
|
|
213
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)} MiB`;
|
|
214
|
+
return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GiB`;
|
|
215
|
+
}
|
|
216
|
+
export async function inspectLocalStorage(projectRoot) {
|
|
217
|
+
const root = resolve(projectRoot);
|
|
218
|
+
let configured;
|
|
219
|
+
try {
|
|
220
|
+
const config = JSON.parse(await readFile(join(root, CONFIG_DIRECTORY, CONFIG_FILE), "utf8"));
|
|
221
|
+
if (typeof config.dataDirectory === "string")
|
|
222
|
+
configured = config.dataDirectory;
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
if (error.code !== "ENOENT")
|
|
226
|
+
throw error;
|
|
227
|
+
}
|
|
228
|
+
const dataDirectory = resolve(root, configured ?? CONFIG_DIRECTORY);
|
|
229
|
+
const names = ["plans", "workflows", "runs", "cache", "development"];
|
|
230
|
+
const entries = await Promise.all(names.map(async (name) => [name, await directoryUsage(join(dataDirectory, name))]));
|
|
231
|
+
const rawSections = Object.fromEntries(entries);
|
|
232
|
+
const sections = Object.fromEntries(entries.map(([name, item]) => [name, { ...item, display: displayBytes(item.bytes) }]));
|
|
233
|
+
const totals = entries.reduce((sum, [, item]) => ({ files: sum.files + item.files, bytes: sum.bytes + item.bytes }), { files: 0, bytes: 0 });
|
|
234
|
+
const total = { ...totals, display: displayBytes(totals.bytes) };
|
|
235
|
+
const recommendations = [];
|
|
236
|
+
if (rawSections.plans.bytes > 10 * 1024 * 1024)
|
|
237
|
+
recommendations.push("Plan 数据超过 10 MB;确认不再需要后再归档或清理旧 Plan。");
|
|
238
|
+
if (rawSections.cache.bytes > 100 * 1024 * 1024)
|
|
239
|
+
recommendations.push("缓存超过 100 MB;建议清理过期缓存。");
|
|
240
|
+
if (recommendations.length === 0)
|
|
241
|
+
recommendations.push("当前本地状态规模正常,无需清理。");
|
|
242
|
+
return { dataDirectory, total, sections, recommendations };
|
|
243
|
+
}
|
|
244
|
+
const TERMINAL_RUN_STATUSES = new Set(["succeeded", "failed", "cancelled"]);
|
|
245
|
+
const TERMINAL_PLAN_STATUSES = new Set(["ready", "failed", "cancelled", "superseded"]);
|
|
246
|
+
function assertPrunableDataDirectory(projectRoot, dataDirectory) {
|
|
247
|
+
const root = resolve(projectRoot);
|
|
248
|
+
const home = resolve(homedir());
|
|
249
|
+
if (dataDirectory === root || dataDirectory === home || dataDirectory === resolve("/")) {
|
|
250
|
+
throw new AtomWorkflowError("STORAGE_DIRECTORY_UNSAFE", `拒绝清理过于宽泛的数据目录:${dataDirectory}`);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
async function statusAndTimestamp(path, kind) {
|
|
254
|
+
try {
|
|
255
|
+
const file = join(path, kind === "run" ? "summary.json" : "record.json");
|
|
256
|
+
const raw = JSON.parse(await readFile(file, "utf8"));
|
|
257
|
+
const record = kind === "run" ? raw : raw.plan ?? raw;
|
|
258
|
+
const timestampValue = record.updatedAt ?? record.endedAt ?? record.createdAt;
|
|
259
|
+
const timestamp = typeof timestampValue === "string" ? Date.parse(timestampValue) : Number.NaN;
|
|
260
|
+
return {
|
|
261
|
+
...(typeof record.status === "string" ? { status: record.status } : {}),
|
|
262
|
+
...(Number.isFinite(timestamp) ? { timestamp } : {}),
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
catch {
|
|
266
|
+
return {};
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
export async function pruneLocalStorage(projectRoot, options) {
|
|
270
|
+
if (!Number.isInteger(options.olderThanDays) || options.olderThanDays < 1) {
|
|
271
|
+
throw new AtomWorkflowError("STORAGE_RETENTION_INVALID", "olderThanDays 必须是大于等于 1 的整数");
|
|
272
|
+
}
|
|
273
|
+
const storage = await inspectLocalStorage(projectRoot);
|
|
274
|
+
assertPrunableDataDirectory(projectRoot, storage.dataDirectory);
|
|
275
|
+
const cutoffTime = (options.now ?? new Date()).getTime() - options.olderThanDays * 24 * 60 * 60 * 1000;
|
|
276
|
+
const candidates = [];
|
|
277
|
+
const skippedNonTerminal = [];
|
|
278
|
+
for (const section of ["runs", "plans"]) {
|
|
279
|
+
const directory = join(storage.dataDirectory, section);
|
|
280
|
+
const entries = await readdir(directory, { withFileTypes: true }).catch((error) => {
|
|
281
|
+
if (error.code === "ENOENT")
|
|
282
|
+
return [];
|
|
283
|
+
throw error;
|
|
284
|
+
});
|
|
285
|
+
for (const entry of entries) {
|
|
286
|
+
if (!entry.isDirectory())
|
|
287
|
+
continue;
|
|
288
|
+
const path = join(directory, entry.name);
|
|
289
|
+
const record = await statusAndTimestamp(path, section === "runs" ? "run" : "plan");
|
|
290
|
+
const terminal = section === "runs" ? TERMINAL_RUN_STATUSES.has(record.status ?? "") : TERMINAL_PLAN_STATUSES.has(record.status ?? "");
|
|
291
|
+
if (!terminal) {
|
|
292
|
+
skippedNonTerminal.push({ section, name: entry.name, status: record.status ?? "unknown" });
|
|
293
|
+
continue;
|
|
294
|
+
}
|
|
295
|
+
if (record.timestamp === undefined || record.timestamp > cutoffTime)
|
|
296
|
+
continue;
|
|
297
|
+
candidates.push({ section, name: entry.name, path, bytes: (await directoryUsage(path)).bytes });
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
const cacheDirectory = join(storage.dataDirectory, "cache");
|
|
301
|
+
const cacheEntries = await readdir(cacheDirectory, { withFileTypes: true }).catch((error) => {
|
|
302
|
+
if (error.code === "ENOENT")
|
|
303
|
+
return [];
|
|
304
|
+
throw error;
|
|
305
|
+
});
|
|
306
|
+
for (const entry of cacheEntries) {
|
|
307
|
+
if (!entry.isFile())
|
|
308
|
+
continue;
|
|
309
|
+
const path = join(cacheDirectory, entry.name);
|
|
310
|
+
const metadata = await stat(path);
|
|
311
|
+
if (metadata.mtimeMs <= cutoffTime)
|
|
312
|
+
candidates.push({ section: "cache", name: entry.name, path, bytes: metadata.size });
|
|
313
|
+
}
|
|
314
|
+
if (options.apply) {
|
|
315
|
+
for (const candidate of candidates)
|
|
316
|
+
await rm(candidate.path, { recursive: true, force: false });
|
|
317
|
+
}
|
|
318
|
+
return {
|
|
319
|
+
dataDirectory: storage.dataDirectory,
|
|
320
|
+
mode: options.apply ? "applied" : "preview",
|
|
321
|
+
cutoff: new Date(cutoffTime).toISOString(),
|
|
322
|
+
candidates: candidates.map(({ section, name, bytes }) => ({ section, name, bytes })),
|
|
323
|
+
skippedNonTerminal,
|
|
324
|
+
reclaimedBytes: options.apply ? candidates.reduce((sum, item) => sum + item.bytes, 0) : 0,
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
//# sourceMappingURL=local-project-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-project-service.js","sourceRoot":"","sources":["../../src/local/local-project-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type LogRecord, type Logger } from "./json-logger.js";
|
|
2
|
+
export interface CliLoggerOptions {
|
|
3
|
+
logFilePath?: string;
|
|
4
|
+
logSink?: (record: LogRecord) => void;
|
|
5
|
+
}
|
|
6
|
+
export declare function createCliTerminalLogSink(write?: (text: string) => void): (record: LogRecord) => void;
|
|
7
|
+
export declare function createCliLogger(options?: CliLoggerOptions): Logger;
|
|
8
|
+
//# sourceMappingURL=create-cli-logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-cli-logger.d.ts","sourceRoot":"","sources":["../../src/logging/create-cli-logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,SAAS,EAAE,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE3E,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,CAAC;CACvC;AAED,wBAAgB,wBAAwB,CACtC,KAAK,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAA2C,GACnE,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,CAI7B;AAED,wBAAgB,eAAe,CAAC,OAAO,GAAE,gBAAqB,GAAG,MAAM,CAMtE"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { JsonLogger } from "./json-logger.js";
|
|
2
|
+
export function createCliTerminalLogSink(write = (text) => process.stderr.write(text)) {
|
|
3
|
+
return (record) => {
|
|
4
|
+
if (record.level === "error")
|
|
5
|
+
write(`${JSON.stringify(record)}\n`);
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
export function createCliLogger(options = {}) {
|
|
9
|
+
return new JsonLogger({ component: "cli" }, options.logFilePath, options.logSink ?? createCliTerminalLogSink());
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=create-cli-logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-cli-logger.js","sourceRoot":"","sources":["../../src/logging/create-cli-logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA+B,MAAM,kBAAkB,CAAC;AAO3E,MAAM,UAAU,wBAAwB,CACtC,QAAgC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;IAEpE,OAAO,CAAC,MAAM,EAAE,EAAE;QAChB,IAAI,MAAM,CAAC,KAAK,KAAK,OAAO;YAAE,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrE,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,UAA4B,EAAE;IAC5D,OAAO,IAAI,UAAU,CACnB,EAAE,SAAS,EAAE,KAAK,EAAE,EACpB,OAAO,CAAC,WAAW,EACnB,OAAO,CAAC,OAAO,IAAI,wBAAwB,EAAE,CAC9C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { AtomLogger } from "@atom-workflow-agent/atom-sdk";
|
|
2
|
+
export type LogLevel = "debug" | "info" | "warn" | "error";
|
|
3
|
+
export interface LogRecord {
|
|
4
|
+
timestamp: string;
|
|
5
|
+
level: LogLevel;
|
|
6
|
+
message: string;
|
|
7
|
+
fields: Record<string, unknown>;
|
|
8
|
+
}
|
|
9
|
+
export interface Logger extends AtomLogger {
|
|
10
|
+
child(fields: Record<string, unknown>): Logger;
|
|
11
|
+
}
|
|
12
|
+
export declare class JsonLogger implements Logger {
|
|
13
|
+
private readonly baseFields;
|
|
14
|
+
private readonly filePath?;
|
|
15
|
+
private readonly sink;
|
|
16
|
+
constructor(baseFields?: Record<string, unknown>, filePath?: string | undefined, sink?: (record: LogRecord) => void);
|
|
17
|
+
child(fields: Record<string, unknown>): Logger;
|
|
18
|
+
debug(message: string, fields?: Record<string, unknown>): void;
|
|
19
|
+
info(message: string, fields?: Record<string, unknown>): void;
|
|
20
|
+
warn(message: string, fields?: Record<string, unknown>): void;
|
|
21
|
+
error(message: string, fields?: Record<string, unknown>): void;
|
|
22
|
+
private write;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=json-logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-logger.d.ts","sourceRoot":"","sources":["../../src/logging/json-logger.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAEhE,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,MAAO,SAAQ,UAAU;IACxC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC;CAChD;AAED,qBAAa,UAAW,YAAW,MAAM;IAErC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAFJ,UAAU,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACxC,QAAQ,CAAC,EAAE,MAAM,YAAA,EACjB,IAAI,GAAE,CAAC,MAAM,EAAE,SAAS,KAAK,IAAsE;IAGtH,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;IAI9C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,IAAI;IAClE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,IAAI;IACjE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,IAAI;IACjE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,IAAI;IAElE,OAAO,CAAC,KAAK;CASd"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { appendFile, mkdir } from "node:fs/promises";
|
|
2
|
+
import { dirname } from "node:path";
|
|
3
|
+
export class JsonLogger {
|
|
4
|
+
baseFields;
|
|
5
|
+
filePath;
|
|
6
|
+
sink;
|
|
7
|
+
constructor(baseFields = {}, filePath, sink = (record) => process.stderr.write(`${JSON.stringify(record)}\n`)) {
|
|
8
|
+
this.baseFields = baseFields;
|
|
9
|
+
this.filePath = filePath;
|
|
10
|
+
this.sink = sink;
|
|
11
|
+
}
|
|
12
|
+
child(fields) {
|
|
13
|
+
return new JsonLogger({ ...this.baseFields, ...fields }, this.filePath, this.sink);
|
|
14
|
+
}
|
|
15
|
+
debug(message, fields = {}) { this.write("debug", message, fields); }
|
|
16
|
+
info(message, fields = {}) { this.write("info", message, fields); }
|
|
17
|
+
warn(message, fields = {}) { this.write("warn", message, fields); }
|
|
18
|
+
error(message, fields = {}) { this.write("error", message, fields); }
|
|
19
|
+
write(level, message, fields) {
|
|
20
|
+
const record = { timestamp: new Date().toISOString(), level, message, fields: { ...this.baseFields, ...fields } };
|
|
21
|
+
this.sink(record);
|
|
22
|
+
if (this.filePath) {
|
|
23
|
+
void mkdir(dirname(this.filePath), { recursive: true })
|
|
24
|
+
.then(() => appendFile(this.filePath, `${JSON.stringify(record)}\n`, "utf8"))
|
|
25
|
+
.catch(() => undefined);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=json-logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-logger.js","sourceRoot":"","sources":["../../src/logging/json-logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,MAAM,OAAO,UAAU;IAEF;IACA;IACA;IAHnB,YACmB,aAAsC,EAAE,EACxC,QAAiB,EACjB,OAAoC,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC;QAFnG,eAAU,GAAV,UAAU,CAA8B;QACxC,aAAQ,GAAR,QAAQ,CAAS;QACjB,SAAI,GAAJ,IAAI,CAA+F;IACnH,CAAC;IAEJ,KAAK,CAAC,MAA+B;QACnC,OAAO,IAAI,UAAU,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACrF,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,SAAkC,EAAE,IAAU,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5G,IAAI,CAAC,OAAe,EAAE,SAAkC,EAAE,IAAU,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1G,IAAI,CAAC,OAAe,EAAE,SAAkC,EAAE,IAAU,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1G,KAAK,CAAC,OAAe,EAAE,SAAkC,EAAE,IAAU,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAEpG,KAAK,CAAC,KAAe,EAAE,OAAe,EAAE,MAA+B;QAC7E,MAAM,MAAM,GAAG,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC;QAClH,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,KAAK,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;iBACpD,IAAI,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAS,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;iBAC7E,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type AcpPlannerExecutor } from "@atom-workflow-agent/acp-provider";
|
|
2
|
+
import { type PlanningModelExecutionOptions, type PlanningModelPort, type PlanningModelSession, type PlanningModelTarget } from "@atom-workflow-agent/workflow-planner";
|
|
3
|
+
/** CLI composition adapter: ACP transport satisfies the Planner's model-neutral port. */
|
|
4
|
+
export declare class AcpPlanningModelAdapter implements PlanningModelPort {
|
|
5
|
+
private readonly delegate;
|
|
6
|
+
constructor(delegate: AcpPlannerExecutor);
|
|
7
|
+
withSession<T>(target: PlanningModelTarget, options: PlanningModelExecutionOptions, operation: (session: PlanningModelSession) => Promise<T>): Promise<T>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=acp-planning-model-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acp-planning-model-adapter.d.ts","sourceRoot":"","sources":["../../src/providers/acp-planning-model-adapter.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAGL,KAAK,6BAA6B,EAClC,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACzB,MAAM,uCAAuC,CAAC;AAuC/C,yFAAyF;AACzF,qBAAa,uBAAwB,YAAW,iBAAiB;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,kBAAkB;IAEzD,WAAW,CAAC,CAAC,EACX,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,6BAA6B,EACtC,SAAS,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,CAAC,CAAC,GACvD,OAAO,CAAC,CAAC,CAAC;CAed"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { AcpPlannerExecutionError, } from "@atom-workflow-agent/acp-provider";
|
|
2
|
+
import { PlanningModelExecutionError, } from "@atom-workflow-agent/workflow-planner";
|
|
3
|
+
function asJson(value) {
|
|
4
|
+
return JSON.parse(JSON.stringify(value));
|
|
5
|
+
}
|
|
6
|
+
function projectEvent(event) {
|
|
7
|
+
const serialized = asJson(event);
|
|
8
|
+
delete serialized.type;
|
|
9
|
+
delete serialized.providerId;
|
|
10
|
+
delete serialized.sessionId;
|
|
11
|
+
return {
|
|
12
|
+
type: event.type,
|
|
13
|
+
providerId: event.providerId,
|
|
14
|
+
...("sessionId" in event ? { sessionId: event.sessionId } : {}),
|
|
15
|
+
data: serialized,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function projectOptions(options) {
|
|
19
|
+
return {
|
|
20
|
+
...(options.signal ? { signal: options.signal } : {}),
|
|
21
|
+
...(options.totalTimeoutMs !== undefined ? { totalTimeoutMs: options.totalTimeoutMs } : {}),
|
|
22
|
+
...(options.idleTimeoutMs !== undefined ? { idleTimeoutMs: options.idleTimeoutMs } : {}),
|
|
23
|
+
...(options.onEvent ? { onEvent: (event) => options.onEvent?.(projectEvent(event)) } : {}),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
function projectFailure(error) {
|
|
27
|
+
return new PlanningModelExecutionError(error.code, error.message, error.retryable, error.attempt, error.rawOutput, { cause: error });
|
|
28
|
+
}
|
|
29
|
+
/** CLI composition adapter: ACP transport satisfies the Planner's model-neutral port. */
|
|
30
|
+
export class AcpPlanningModelAdapter {
|
|
31
|
+
delegate;
|
|
32
|
+
constructor(delegate) {
|
|
33
|
+
this.delegate = delegate;
|
|
34
|
+
}
|
|
35
|
+
withSession(target, options, operation) {
|
|
36
|
+
return this.delegate.withSession(target, projectOptions(options), async (session) => operation({
|
|
37
|
+
providerId: session.providerId,
|
|
38
|
+
model: session.model,
|
|
39
|
+
cwd: session.cwd,
|
|
40
|
+
sessionId: session.sessionId,
|
|
41
|
+
plan: async (input) => {
|
|
42
|
+
try {
|
|
43
|
+
return await session.plan(input);
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
if (error instanceof AcpPlannerExecutionError)
|
|
47
|
+
throw projectFailure(error);
|
|
48
|
+
throw error;
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
}));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=acp-planning-model-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acp-planning-model-adapter.js","sourceRoot":"","sources":["../../src/providers/acp-planning-model-adapter.ts"],"names":[],"mappings":"AACA,OAAO,EACL,wBAAwB,GAGzB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,2BAA2B,GAM5B,MAAM,uCAAuC,CAAC;AAE/C,SAAS,MAAM,CAAC,KAAc;IAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAc,CAAC;AACxD,CAAC;AAED,SAAS,YAAY,CAAC,KAAuB;IAC3C,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAA8B,CAAC;IAC9D,OAAO,UAAU,CAAC,IAAI,CAAC;IACvB,OAAO,UAAU,CAAC,UAAU,CAAC;IAC7B,OAAO,UAAU,CAAC,SAAS,CAAC;IAC5B,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,GAAG,CAAC,WAAW,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,IAAI,EAAE,UAAU;KACjB,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,OAAsC;IAC5D,OAAO;QACL,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,GAAG,CAAC,OAAO,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxF,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,KAAuB,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7G,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAA+B;IACrD,OAAO,IAAI,2BAA2B,CACpC,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,SAAS,EACf,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;AACJ,CAAC;AAED,yFAAyF;AACzF,MAAM,OAAO,uBAAuB;IACL;IAA7B,YAA6B,QAA4B;QAA5B,aAAQ,GAAR,QAAQ,CAAoB;IAAG,CAAC;IAE7D,WAAW,CACT,MAA2B,EAC3B,OAAsC,EACtC,SAAwD;QAExD,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC;YAC7F,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACpB,IAAI,CAAC;oBAAC,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAAC,CAAC;gBACzC,OAAO,KAAK,EAAE,CAAC;oBACb,IAAI,KAAK,YAAY,wBAAwB;wBAAE,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;oBAC3E,MAAM,KAAK,CAAC;gBACd,CAAC;YACH,CAAC;SACF,CAAC,CAAC,CAAC;IACN,CAAC;CACF"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { isBuiltinAcpProviderId, type BuiltinAcpProviderId } from "@atom-workflow-agent/acp-sdk";
|
|
2
|
+
export declare const LOCAL_PROVIDER_NAMES: readonly ["traex", "codex", "claude-code", "pi"];
|
|
3
|
+
export type LocalProviderName = BuiltinAcpProviderId;
|
|
4
|
+
export declare const isLocalProviderName: typeof isBuiltinAcpProviderId;
|
|
5
|
+
//# sourceMappingURL=provider-name.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-name.d.ts","sourceRoot":"","sources":["../../src/providers/provider-name.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,sBAAsB,EACtB,KAAK,oBAAoB,EAC1B,MAAM,8BAA8B,CAAC;AAEtC,eAAO,MAAM,oBAAoB,kDAAgC,CAAC;AAClE,MAAM,MAAM,iBAAiB,GAAG,oBAAoB,CAAC;AACrD,eAAO,MAAM,mBAAmB,+BAAyB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { BUILTIN_ACP_PROVIDER_PRIORITY, isBuiltinAcpProviderId, } from "@atom-workflow-agent/acp-sdk";
|
|
2
|
+
export const LOCAL_PROVIDER_NAMES = BUILTIN_ACP_PROVIDER_PRIORITY;
|
|
3
|
+
export const isLocalProviderName = isBuiltinAcpProviderId;
|
|
4
|
+
//# sourceMappingURL=provider-name.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-name.js","sourceRoot":"","sources":["../../src/providers/provider-name.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,EAC7B,sBAAsB,GAEvB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,CAAC,MAAM,oBAAoB,GAAG,6BAA6B,CAAC;AAElE,MAAM,CAAC,MAAM,mBAAmB,GAAG,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type AcpProviderConfig } from "@atom-workflow-agent/acp-provider";
|
|
2
|
+
import type { LocalProviderName } from "./provider-name.js";
|
|
3
|
+
export interface ResolveLocalAcpConfigDependencies {
|
|
4
|
+
model?: string;
|
|
5
|
+
env?: NodeJS.ProcessEnv;
|
|
6
|
+
lookup?: (command: string) => Promise<string | undefined>;
|
|
7
|
+
homeDirectory?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function resolveLocalAcpProviderConfig(name: LocalProviderName, options?: ResolveLocalAcpConfigDependencies): Promise<AcpProviderConfig>;
|
|
10
|
+
//# sourceMappingURL=resolve-provider-config.d.ts.map
|