@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.
Files changed (96) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +61 -0
  3. package/README.zh-CN.md +61 -0
  4. package/dist/app.d.ts +14 -0
  5. package/dist/app.d.ts.map +1 -0
  6. package/dist/app.js +172 -0
  7. package/dist/app.js.map +1 -0
  8. package/dist/atoms/atom-development-service.d.ts +43 -0
  9. package/dist/atoms/atom-development-service.d.ts.map +1 -0
  10. package/dist/atoms/atom-development-service.js +308 -0
  11. package/dist/atoms/atom-development-service.js.map +1 -0
  12. package/dist/atoms/atom-development-store.d.ts +70 -0
  13. package/dist/atoms/atom-development-store.d.ts.map +1 -0
  14. package/dist/atoms/atom-development-store.js +271 -0
  15. package/dist/atoms/atom-development-store.js.map +1 -0
  16. package/dist/commands/doctor.d.ts +38 -0
  17. package/dist/commands/doctor.d.ts.map +1 -0
  18. package/dist/commands/doctor.js +163 -0
  19. package/dist/commands/doctor.js.map +1 -0
  20. package/dist/commands/models.d.ts +16 -0
  21. package/dist/commands/models.d.ts.map +1 -0
  22. package/dist/commands/models.js +20 -0
  23. package/dist/commands/models.js.map +1 -0
  24. package/dist/index.d.ts +3 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +19 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/local/local-project-service.d.ts +63 -0
  29. package/dist/local/local-project-service.d.ts.map +1 -0
  30. package/dist/local/local-project-service.js +327 -0
  31. package/dist/local/local-project-service.js.map +1 -0
  32. package/dist/logging/create-cli-logger.d.ts +8 -0
  33. package/dist/logging/create-cli-logger.d.ts.map +1 -0
  34. package/dist/logging/create-cli-logger.js +11 -0
  35. package/dist/logging/create-cli-logger.js.map +1 -0
  36. package/dist/logging/json-logger.d.ts +24 -0
  37. package/dist/logging/json-logger.d.ts.map +1 -0
  38. package/dist/logging/json-logger.js +29 -0
  39. package/dist/logging/json-logger.js.map +1 -0
  40. package/dist/providers/acp-planning-model-adapter.d.ts +9 -0
  41. package/dist/providers/acp-planning-model-adapter.d.ts.map +1 -0
  42. package/dist/providers/acp-planning-model-adapter.js +54 -0
  43. package/dist/providers/acp-planning-model-adapter.js.map +1 -0
  44. package/dist/providers/provider-name.d.ts +5 -0
  45. package/dist/providers/provider-name.d.ts.map +1 -0
  46. package/dist/providers/provider-name.js +4 -0
  47. package/dist/providers/provider-name.js.map +1 -0
  48. package/dist/providers/resolve-provider-config.d.ts +10 -0
  49. package/dist/providers/resolve-provider-config.d.ts.map +1 -0
  50. package/dist/providers/resolve-provider-config.js +14 -0
  51. package/dist/providers/resolve-provider-config.js.map +1 -0
  52. package/dist/providers/resolve-trae-executable.d.ts +20 -0
  53. package/dist/providers/resolve-trae-executable.d.ts.map +1 -0
  54. package/dist/providers/resolve-trae-executable.js +46 -0
  55. package/dist/providers/resolve-trae-executable.js.map +1 -0
  56. package/dist/workflow/builtin-atom-packages.d.ts +4 -0
  57. package/dist/workflow/builtin-atom-packages.d.ts.map +1 -0
  58. package/dist/workflow/builtin-atom-packages.js +39 -0
  59. package/dist/workflow/builtin-atom-packages.js.map +1 -0
  60. package/dist/workflow/planning-cli-service.d.ts +35 -0
  61. package/dist/workflow/planning-cli-service.d.ts.map +1 -0
  62. package/dist/workflow/planning-cli-service.js +97 -0
  63. package/dist/workflow/planning-cli-service.js.map +1 -0
  64. package/dist/workflow/workflow-command-input.d.ts +25 -0
  65. package/dist/workflow/workflow-command-input.d.ts.map +1 -0
  66. package/dist/workflow/workflow-command-input.js +117 -0
  67. package/dist/workflow/workflow-command-input.js.map +1 -0
  68. package/dist/workflow/workflow-command-progress.d.ts +6 -0
  69. package/dist/workflow/workflow-command-progress.d.ts.map +1 -0
  70. package/dist/workflow/workflow-command-progress.js +81 -0
  71. package/dist/workflow/workflow-command-progress.js.map +1 -0
  72. package/dist/workflow/workflow-command-service.d.ts +85 -0
  73. package/dist/workflow/workflow-command-service.d.ts.map +1 -0
  74. package/dist/workflow/workflow-command-service.js +2 -0
  75. package/dist/workflow/workflow-command-service.js.map +1 -0
  76. package/dist/workflow/workflow-command.d.ts +5 -0
  77. package/dist/workflow/workflow-command.d.ts.map +1 -0
  78. package/dist/workflow/workflow-command.js +425 -0
  79. package/dist/workflow/workflow-command.js.map +1 -0
  80. package/dist/workflow/workflow-coordinator.d.ts +25 -0
  81. package/dist/workflow/workflow-coordinator.d.ts.map +1 -0
  82. package/dist/workflow/workflow-coordinator.js +112 -0
  83. package/dist/workflow/workflow-coordinator.js.map +1 -0
  84. package/dist/workflow/workflow-output.d.ts +9 -0
  85. package/dist/workflow/workflow-output.d.ts.map +1 -0
  86. package/dist/workflow/workflow-output.js +109 -0
  87. package/dist/workflow/workflow-output.js.map +1 -0
  88. package/dist/workflow/workflow-project-config.d.ts +14 -0
  89. package/dist/workflow/workflow-project-config.d.ts.map +1 -0
  90. package/dist/workflow/workflow-project-config.js +55 -0
  91. package/dist/workflow/workflow-project-config.js.map +1 -0
  92. package/dist/workflow/workflow-service.d.ts +1237 -0
  93. package/dist/workflow/workflow-service.d.ts.map +1 -0
  94. package/dist/workflow/workflow-service.js +475 -0
  95. package/dist/workflow/workflow-service.js.map +1 -0
  96. package/package.json +65 -0
@@ -0,0 +1,271 @@
1
+ import { createHash, randomUUID } from "node:crypto";
2
+ import { appendFile, mkdir, readFile, readdir, rename, rm, stat, writeFile } from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ function json(value) {
5
+ return JSON.parse(JSON.stringify(value));
6
+ }
7
+ function serializedError(error) {
8
+ const candidate = error instanceof Error
9
+ ? error
10
+ : undefined;
11
+ const details = candidate?.details ?? candidate?.cause;
12
+ let serializedDetails;
13
+ if (details !== undefined) {
14
+ try {
15
+ serializedDetails = json(details);
16
+ }
17
+ catch {
18
+ serializedDetails = { unavailable: true, reason: "Error details were not JSON-serializable" };
19
+ }
20
+ }
21
+ return {
22
+ code: typeof candidate?.code === "string" ? candidate.code : "ATOM_DEVELOPMENT_FAILED",
23
+ message: candidate?.message ?? String(error),
24
+ retryable: candidate?.retryable === true,
25
+ ...(serializedDetails !== undefined ? { details: serializedDetails } : {}),
26
+ };
27
+ }
28
+ /** Filesystem adapter for standalone Atom development; deliberately separate from Workflow Run storage. */
29
+ export class LocalAtomDevelopmentStore {
30
+ rootDirectory;
31
+ eventQueues = new Map();
32
+ nextSequences = new Map();
33
+ constructor(rootDirectory) {
34
+ this.rootDirectory = rootDirectory;
35
+ }
36
+ attemptDirectory(attemptId) {
37
+ return join(this.rootDirectory, "development", "atom-attempts", attemptId);
38
+ }
39
+ async create(input) {
40
+ const record = {
41
+ schemaVersion: "1.0",
42
+ attemptId: input.attemptId,
43
+ atom: { key: input.atomKey, source: input.source },
44
+ cwd: input.cwd,
45
+ input: input.value,
46
+ maxLifecycleTicks: input.maxLifecycleTicks,
47
+ state: "running",
48
+ artifacts: [],
49
+ createdAt: input.now,
50
+ updatedAt: input.now,
51
+ };
52
+ await mkdir(this.attemptDirectory(input.attemptId), { recursive: true });
53
+ await this.save(record);
54
+ await this.append(input.attemptId, "attempt.created", {
55
+ atomKey: input.atomKey,
56
+ sourceId: input.source.sourceId,
57
+ });
58
+ return record;
59
+ }
60
+ async load(attemptId) {
61
+ try {
62
+ return JSON.parse(await readFile(this.summaryPath(attemptId), "utf8"));
63
+ }
64
+ catch (error) {
65
+ if (error.code === "ENOENT") {
66
+ throw Object.assign(new Error(`Atom development Attempt not found: ${attemptId}`), { code: "ATOM_ATTEMPT_NOT_FOUND" });
67
+ }
68
+ throw error;
69
+ }
70
+ }
71
+ async save(record) {
72
+ await mkdir(this.attemptDirectory(record.attemptId), { recursive: true });
73
+ await atomicJson(this.summaryPath(record.attemptId), record);
74
+ }
75
+ async update(attemptId, change) {
76
+ const next = change(await this.load(attemptId));
77
+ await this.save(next);
78
+ return next;
79
+ }
80
+ async withAttemptLock(attemptId, operation) {
81
+ await this.load(attemptId);
82
+ const lock = join(this.attemptDirectory(attemptId), ".resume-lock");
83
+ await this.acquireAttemptLock(attemptId, lock);
84
+ try {
85
+ return await operation();
86
+ }
87
+ finally {
88
+ await rm(lock, { recursive: true, force: true });
89
+ }
90
+ }
91
+ async acquireAttemptLock(attemptId, lock, recovered = false) {
92
+ try {
93
+ await mkdir(lock);
94
+ await writeFile(join(lock, "owner.json"), JSON.stringify({ pid: process.pid, createdAt: new Date().toISOString() }), "utf8");
95
+ return;
96
+ }
97
+ catch (error) {
98
+ if (error.code !== "EEXIST")
99
+ throw error;
100
+ }
101
+ if (!recovered && await this.isStaleLock(lock)) {
102
+ await rm(lock, { recursive: true, force: true });
103
+ return this.acquireAttemptLock(attemptId, lock, true);
104
+ }
105
+ throw Object.assign(new Error(`Atom Attempt is already being resumed: ${attemptId}`), { code: "ATOM_ATTEMPT_BUSY" });
106
+ }
107
+ async isStaleLock(lock) {
108
+ try {
109
+ const owner = JSON.parse(await readFile(join(lock, "owner.json"), "utf8"));
110
+ if (typeof owner.pid !== "number" || !Number.isInteger(owner.pid) || owner.pid < 1)
111
+ return false;
112
+ try {
113
+ process.kill(owner.pid, 0);
114
+ return false;
115
+ }
116
+ catch (error) {
117
+ return error.code === "ESRCH";
118
+ }
119
+ }
120
+ catch {
121
+ try {
122
+ return Date.now() - (await stat(lock)).mtimeMs > 30_000;
123
+ }
124
+ catch {
125
+ return false;
126
+ }
127
+ }
128
+ }
129
+ async fail(attemptId, error, timestamp) {
130
+ const failure = serializedError(error);
131
+ const record = await this.update(attemptId, (current) => ({
132
+ ...current,
133
+ state: "failed",
134
+ error: failure,
135
+ updatedAt: timestamp,
136
+ }));
137
+ await this.append(attemptId, "attempt.failed", json(failure));
138
+ return record;
139
+ }
140
+ captureProcessEvent(event) {
141
+ this.enqueue(event.attemptId, async () => {
142
+ await this.appendDirect(event.attemptId, event.type, event.data, event.timestamp);
143
+ });
144
+ }
145
+ append(attemptId, type, data, timestamp = new Date().toISOString()) {
146
+ return this.enqueue(attemptId, () => this.appendDirect(attemptId, type, data, timestamp));
147
+ }
148
+ async flush(attemptId) {
149
+ await this.eventQueues.get(attemptId);
150
+ }
151
+ async events(attemptId, after = -1) {
152
+ await this.flush(attemptId);
153
+ return (await this.readEvents(attemptId)).filter((event) => event.sequence > after);
154
+ }
155
+ async readEvents(attemptId) {
156
+ try {
157
+ const text = await readFile(this.eventsPath(attemptId), "utf8");
158
+ const lines = text.split("\n").filter(Boolean);
159
+ const events = [];
160
+ for (const [index, line] of lines.entries()) {
161
+ try {
162
+ events.push(JSON.parse(line));
163
+ }
164
+ catch (error) {
165
+ // A process crash may leave only the final append incomplete. Preserve
166
+ // every committed event, but fail closed for corruption in the middle.
167
+ if (index === lines.length - 1)
168
+ break;
169
+ throw Object.assign(new Error(`Atom event log is corrupted at line ${index + 1}`), {
170
+ code: "ATOM_EVENT_LOG_CORRUPTED",
171
+ cause: error,
172
+ });
173
+ }
174
+ }
175
+ return events;
176
+ }
177
+ catch (error) {
178
+ if (error.code === "ENOENT")
179
+ return [];
180
+ throw error;
181
+ }
182
+ }
183
+ artifactService(attemptId, onPut) {
184
+ return {
185
+ put: async (input) => {
186
+ const artifactDirectory = join(this.attemptDirectory(attemptId), "artifacts");
187
+ await mkdir(artifactDirectory, { recursive: true });
188
+ const payload = input.data !== undefined
189
+ ? Buffer.from(JSON.stringify(input.data))
190
+ : input.path ? await readFile(input.path) : Buffer.from("null");
191
+ const digest = createHash("sha256").update(payload).digest("hex");
192
+ const hash = `sha256:${digest}`;
193
+ const id = `${attemptId}:artifact:${randomUUID()}`;
194
+ let payloadFile;
195
+ if (input.path) {
196
+ payloadFile = `${digest}.bin`;
197
+ await writeFile(join(artifactDirectory, payloadFile), payload);
198
+ }
199
+ const artifact = {
200
+ schemaVersion: "1.0",
201
+ id,
202
+ attemptId,
203
+ kind: input.kind,
204
+ hash,
205
+ ...(input.data !== undefined ? { data: input.data } : {}),
206
+ ...(payloadFile ? { payloadFile } : {}),
207
+ metadata: input.metadata ?? {},
208
+ createdAt: new Date().toISOString(),
209
+ };
210
+ await atomicJson(join(artifactDirectory, `${id.slice(id.lastIndexOf(":") + 1)}.json`), artifact);
211
+ const reference = { id, kind: input.kind, hash };
212
+ await onPut(reference);
213
+ await this.append(attemptId, "artifact.created", json(reference));
214
+ return reference;
215
+ },
216
+ get: async (id) => {
217
+ const directory = join(this.attemptDirectory(attemptId), "artifacts");
218
+ try {
219
+ for (const entry of await readdir(directory)) {
220
+ if (!entry.endsWith(".json"))
221
+ continue;
222
+ const artifact = JSON.parse(await readFile(join(directory, entry), "utf8"));
223
+ if (artifact.id === id)
224
+ return { id: artifact.id, kind: artifact.kind, hash: artifact.hash };
225
+ }
226
+ return undefined;
227
+ }
228
+ catch (error) {
229
+ if (error.code === "ENOENT")
230
+ return undefined;
231
+ throw error;
232
+ }
233
+ },
234
+ };
235
+ }
236
+ enqueue(attemptId, operation) {
237
+ const previous = this.eventQueues.get(attemptId) ?? Promise.resolve();
238
+ const next = previous.then(operation, operation);
239
+ this.eventQueues.set(attemptId, next);
240
+ // onEvent producers are synchronous; keep rejection observable through flush()
241
+ // without allowing an unhandled rejection before the caller reaches that boundary.
242
+ void next.catch(() => undefined);
243
+ return next;
244
+ }
245
+ async appendDirect(attemptId, type, data, timestamp = new Date().toISOString()) {
246
+ await mkdir(this.attemptDirectory(attemptId), { recursive: true });
247
+ let sequence = this.nextSequences.get(attemptId);
248
+ if (sequence === undefined) {
249
+ const existing = await this.readEvents(attemptId);
250
+ sequence = existing.length === 0 ? 0 : existing[existing.length - 1].sequence + 1;
251
+ }
252
+ this.nextSequences.set(attemptId, sequence + 1);
253
+ const event = {
254
+ schemaVersion: "1.0",
255
+ sequence,
256
+ timestamp,
257
+ attemptId,
258
+ type,
259
+ ...(data !== undefined ? { data } : {}),
260
+ };
261
+ await appendFile(this.eventsPath(attemptId), `${JSON.stringify(event)}\n`, "utf8");
262
+ }
263
+ summaryPath(attemptId) { return join(this.attemptDirectory(attemptId), "summary.json"); }
264
+ eventsPath(attemptId) { return join(this.attemptDirectory(attemptId), "events.jsonl"); }
265
+ }
266
+ async function atomicJson(path, value) {
267
+ const temporary = `${path}.${process.pid}.${Date.now()}.tmp`;
268
+ await writeFile(temporary, `${JSON.stringify(value, null, 2)}\n`, "utf8");
269
+ await rename(temporary, path);
270
+ }
271
+ //# sourceMappingURL=atom-development-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atom-development-store.js","sourceRoot":"","sources":["../../src/atoms/atom-development-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { type AcpHandshakeResult } from "@atom-workflow-agent/acp-provider";
2
+ import type { LocalProviderName } from "../providers/provider-name.js";
3
+ export type DoctorStatus = "pass" | "warn" | "fail";
4
+ export type ProviderName = LocalProviderName;
5
+ export interface DoctorCheck {
6
+ id: string;
7
+ status: DoctorStatus;
8
+ message: string;
9
+ details?: Record<string, unknown>;
10
+ }
11
+ export interface DoctorOptions {
12
+ provider?: ProviderName;
13
+ json: boolean;
14
+ handshake?: boolean;
15
+ }
16
+ interface ProviderExecutables {
17
+ codex?: string;
18
+ codexAcp?: string;
19
+ traex?: string;
20
+ claude?: string;
21
+ pi?: string;
22
+ }
23
+ export type HandshakeRunner = (provider: ProviderName, executables: ProviderExecutables, cwd: string) => Promise<AcpHandshakeResult>;
24
+ export interface DoctorDependencies {
25
+ lookup?: (command: string) => Promise<string | undefined>;
26
+ env?: NodeJS.ProcessEnv;
27
+ nodeVersion?: string;
28
+ cwd?: string;
29
+ handshake?: HandshakeRunner;
30
+ homeDirectory?: string;
31
+ }
32
+ export declare function runDoctor(options: DoctorOptions, dependencies: DoctorDependencies): Promise<{
33
+ ok: boolean;
34
+ checks: DoctorCheck[];
35
+ }>;
36
+ export declare function renderDoctor(result: Awaited<ReturnType<typeof runDoctor>>, json: boolean): string;
37
+ export {};
38
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,kBAAkB,EACxB,MAAM,mCAAmC,CAAC;AAG3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AACpD,MAAM,MAAM,YAAY,GAAG,iBAAiB,CAAC;AAE7C,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,UAAU,mBAAmB;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAqCD,MAAM,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAErI,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC1D,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAgED,wBAAsB,SAAS,CAAC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,kBAAkB,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC,CA+DzI;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAOjG"}
@@ -0,0 +1,163 @@
1
+ import { createBuiltinPresetRegistry, findExecutable, probeAcpHandshake, resolveBundledClaudeCodeAcpEntrypoint, resolveBundledCodexAcpEntrypoint, resolveBundledPiAcpEntrypoint, } from "@atom-workflow-agent/acp-provider";
2
+ import { homedir } from "node:os";
3
+ import { resolveTraeExecutable } from "../providers/resolve-trae-executable.js";
4
+ async function checkClaudeCode(lookup) {
5
+ const claude = await lookup("claude");
6
+ const adapter = resolveBundledClaudeCodeAcpEntrypoint();
7
+ return {
8
+ check: {
9
+ id: "provider.claude-code",
10
+ status: "pass",
11
+ message: claude ? "Bundled Claude Code ACP adapter and local Claude executable are ready." : "Bundled Claude Code ACP adapter is ready; its bundled Claude runtime will be used.",
12
+ details: { claude: claude ?? null, adapter, runtimeDownload: false },
13
+ },
14
+ executables: { ...(claude ? { claude } : {}) },
15
+ };
16
+ }
17
+ async function checkPi(lookup, env, strict) {
18
+ const configured = env.ATOM_WORKFLOW_AGENT_PI_EXECUTABLE?.trim() || env.PI_ACP_PI_COMMAND?.trim() || "pi";
19
+ const pi = await lookup(configured);
20
+ const adapter = resolveBundledPiAcpEntrypoint();
21
+ return {
22
+ check: {
23
+ id: "provider.pi",
24
+ status: pi ? "pass" : strict ? "fail" : "warn",
25
+ message: pi ? "Bundled Pi ACP adapter and pi CLI are ready." : "Pi CLI is unavailable; install pi or set ATOM_WORKFLOW_AGENT_PI_EXECUTABLE.",
26
+ details: { pi: pi ?? null, adapter, runtimeDownload: false },
27
+ },
28
+ executables: { ...(pi ? { pi } : {}) },
29
+ };
30
+ }
31
+ async function checkCodex(lookup, strict) {
32
+ const codex = await lookup("codex");
33
+ const adapter = resolveBundledCodexAcpEntrypoint();
34
+ const ready = Boolean(adapter);
35
+ return {
36
+ check: {
37
+ id: "provider.codex",
38
+ status: ready ? "pass" : strict ? "fail" : "warn",
39
+ message: ready
40
+ ? `Bundled Codex ACP adapter is ready${codex ? "; local Codex CLI will be used" : "; bundled Codex will be used"}.`
41
+ : "Bundled Codex ACP adapter is unavailable; reinstall project dependencies.",
42
+ details: { codex: codex ?? null, codexAcp: adapter, runtimeDownload: false },
43
+ },
44
+ executables: { ...(codex ? { codex } : {}), codexAcp: adapter },
45
+ };
46
+ }
47
+ async function checkTraex(lookup, env, strict, homeDirectory) {
48
+ const resolved = await resolveTraeExecutable({ env, lookup, homeDirectory });
49
+ const configured = Boolean(resolved.executable);
50
+ return {
51
+ check: {
52
+ id: "provider.traex",
53
+ status: configured ? "pass" : strict ? "fail" : "warn",
54
+ message: configured
55
+ ? "Trae native ACP command is executable."
56
+ : "Install traecli or set ATOM_WORKFLOW_AGENT_TRAE_ACP_COMMAND.",
57
+ details: {
58
+ command: resolved.command,
59
+ executable: resolved.executable ?? null,
60
+ explicitlyConfigured: resolved.explicitlyConfigured,
61
+ configuredBy: resolved.configuredBy ?? null,
62
+ },
63
+ },
64
+ executables: { ...(resolved.executable ? { traex: resolved.executable } : {}) },
65
+ };
66
+ }
67
+ async function defaultHandshake(provider, executables, cwd) {
68
+ const presets = createBuiltinPresetRegistry();
69
+ if (provider === "codex") {
70
+ const config = presets.create("codex", {
71
+ ...(executables.codex ? { env: { CODEX_PATH: executables.codex } } : {}),
72
+ });
73
+ return probeAcpHandshake(config, cwd, { timeoutMs: 90_000 });
74
+ }
75
+ if (provider === "traex") {
76
+ if (!executables.traex)
77
+ throw new Error("Traex ACP executable is unavailable");
78
+ return probeAcpHandshake(presets.create("traex", { command: executables.traex }), cwd, { timeoutMs: 30_000 });
79
+ }
80
+ if (provider === "claude-code") {
81
+ return probeAcpHandshake(presets.create("claude-code", executables.claude ? { env: { CLAUDE_CODE_EXECUTABLE: executables.claude } } : {}), cwd, { timeoutMs: 90_000 });
82
+ }
83
+ if (!executables.pi)
84
+ throw new Error("Pi CLI is unavailable");
85
+ return probeAcpHandshake(presets.create("pi", { env: { PI_ACP_PI_COMMAND: executables.pi } }), cwd, { timeoutMs: 30_000 });
86
+ }
87
+ export async function runDoctor(options, dependencies) {
88
+ const lookup = dependencies.lookup ?? findExecutable;
89
+ const env = dependencies.env ?? process.env;
90
+ const cwd = dependencies.cwd ?? process.cwd();
91
+ const handshake = dependencies.handshake ?? defaultHandshake;
92
+ const nodeVersion = dependencies.nodeVersion ?? process.versions.node;
93
+ const homeDirectory = dependencies.homeDirectory ?? homedir();
94
+ const major = Number(nodeVersion.split(".")[0]);
95
+ const checks = [{
96
+ id: "runtime.node",
97
+ status: major >= 22 ? "pass" : "fail",
98
+ message: major >= 22 ? `Node.js ${nodeVersion} is supported.` : `Node.js ${nodeVersion} is unsupported; require >=22.`,
99
+ }];
100
+ if (!options.provider || options.provider === "codex") {
101
+ const codex = await checkCodex(lookup, options.provider === "codex");
102
+ checks.push(codex.check);
103
+ if (options.handshake && codex.check.status === "pass") {
104
+ try {
105
+ const result = await handshake("codex", codex.executables, cwd);
106
+ checks.push({ id: "provider.codex.handshake", status: "pass", message: `ACP v${result.protocolVersion} session created.`, details: { agentInfo: result.agentInfo, capabilities: result.capabilities } });
107
+ }
108
+ catch (error) {
109
+ checks.push({ id: "provider.codex.handshake", status: "fail", message: error instanceof Error ? error.message : String(error) });
110
+ }
111
+ }
112
+ }
113
+ if (!options.provider || options.provider === "traex") {
114
+ const traex = await checkTraex(lookup, env, options.provider === "traex", homeDirectory);
115
+ checks.push(traex.check);
116
+ if (options.handshake && traex.check.status === "pass") {
117
+ try {
118
+ const result = await handshake("traex", traex.executables, cwd);
119
+ checks.push({ id: "provider.traex.handshake", status: "pass", message: `ACP v${result.protocolVersion} session created.`, details: { agentInfo: result.agentInfo, capabilities: result.capabilities } });
120
+ }
121
+ catch (error) {
122
+ checks.push({ id: "provider.traex.handshake", status: "fail", message: error instanceof Error ? error.message : String(error) });
123
+ }
124
+ }
125
+ }
126
+ if (!options.provider || options.provider === "claude-code") {
127
+ const claude = await checkClaudeCode(lookup);
128
+ checks.push(claude.check);
129
+ if (options.handshake && claude.check.status === "pass") {
130
+ try {
131
+ const result = await handshake("claude-code", claude.executables, cwd);
132
+ checks.push({ id: "provider.claude-code.handshake", status: "pass", message: `ACP v${result.protocolVersion} session created.`, details: { agentInfo: result.agentInfo, capabilities: result.capabilities } });
133
+ }
134
+ catch (error) {
135
+ checks.push({ id: "provider.claude-code.handshake", status: options.provider === "claude-code" ? "fail" : "warn", message: error instanceof Error ? error.message : String(error) });
136
+ }
137
+ }
138
+ }
139
+ if (!options.provider || options.provider === "pi") {
140
+ const pi = await checkPi(lookup, env, options.provider === "pi");
141
+ checks.push(pi.check);
142
+ if (options.handshake && pi.check.status === "pass") {
143
+ try {
144
+ const result = await handshake("pi", pi.executables, cwd);
145
+ checks.push({ id: "provider.pi.handshake", status: "pass", message: `ACP v${result.protocolVersion} session created.`, details: { agentInfo: result.agentInfo, capabilities: result.capabilities } });
146
+ }
147
+ catch (error) {
148
+ checks.push({ id: "provider.pi.handshake", status: options.provider === "pi" ? "fail" : "warn", message: error instanceof Error ? error.message : String(error) });
149
+ }
150
+ }
151
+ }
152
+ return { ok: checks.every((check) => check.status !== "fail"), checks };
153
+ }
154
+ export function renderDoctor(result, json) {
155
+ if (json)
156
+ return JSON.stringify(result, null, 2);
157
+ const icon = { pass: "PASS", warn: "WARN", fail: "FAIL" };
158
+ return [
159
+ `Doctor: ${result.ok ? "ready" : "not ready"}`,
160
+ ...result.checks.map((check) => `[${icon[check.status]}] ${check.id}: ${check.message}`),
161
+ ].join("\n");
162
+ }
163
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { probeAcpModels, type AcpModelCatalog } from "@atom-workflow-agent/acp-provider";
2
+ import { resolveLocalAcpProviderConfig } from "../providers/resolve-provider-config.js";
3
+ import type { LocalProviderName } from "../providers/provider-name.js";
4
+ export interface ModelsCommandOptions {
5
+ providerId: LocalProviderName;
6
+ cwd: string;
7
+ json: boolean;
8
+ signal?: AbortSignal;
9
+ }
10
+ export interface ModelsCommandDependencies {
11
+ resolveConfig?: typeof resolveLocalAcpProviderConfig;
12
+ probe?: typeof probeAcpModels;
13
+ }
14
+ export declare function renderModels(catalog: AcpModelCatalog, json: boolean): string;
15
+ export declare function runModelsCommand(options: ModelsCommandOptions, dependencies?: ModelsCommandDependencies): Promise<AcpModelCatalog>;
16
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/commands/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACzF,OAAO,EAAE,6BAA6B,EAAE,MAAM,yCAAyC,CAAC;AACxF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,iBAAiB,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,yBAAyB;IACxC,aAAa,CAAC,EAAE,OAAO,6BAA6B,CAAC;IACrD,KAAK,CAAC,EAAE,OAAO,cAAc,CAAC;CAC/B;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAM5E;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,oBAAoB,EAC7B,YAAY,GAAE,yBAA8B,GAC3C,OAAO,CAAC,eAAe,CAAC,CAQ1B"}
@@ -0,0 +1,20 @@
1
+ import { probeAcpModels } from "@atom-workflow-agent/acp-provider";
2
+ import { resolveLocalAcpProviderConfig } from "../providers/resolve-provider-config.js";
3
+ export function renderModels(catalog, json) {
4
+ if (json)
5
+ return JSON.stringify(catalog, null, 2);
6
+ return [
7
+ `Models for ${catalog.providerId}:`,
8
+ ...catalog.models.map((model) => `- ${model.id}${model.current ? " (current)" : ""}: ${model.name}${model.description ? ` — ${model.description}` : ""}`),
9
+ ].join("\n");
10
+ }
11
+ export async function runModelsCommand(options, dependencies = {}) {
12
+ const resolveConfig = dependencies.resolveConfig ?? resolveLocalAcpProviderConfig;
13
+ const probe = dependencies.probe ?? probeAcpModels;
14
+ const config = await resolveConfig(options.providerId);
15
+ return probe(config, options.cwd, {
16
+ timeoutMs: options.providerId === "codex" || options.providerId === "claude-code" ? 90_000 : 30_000,
17
+ ...(options.signal ? { signal: options.signal } : {}),
18
+ });
19
+ }
20
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/commands/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAwB,MAAM,mCAAmC,CAAC;AACzF,OAAO,EAAE,6BAA6B,EAAE,MAAM,yCAAyC,CAAC;AAexF,MAAM,UAAU,YAAY,CAAC,OAAwB,EAAE,IAAa;IAClE,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAClD,OAAO;QACL,cAAc,OAAO,CAAC,UAAU,GAAG;QACnC,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;KAC1J,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAA6B,EAC7B,eAA0C,EAAE;IAE5C,MAAM,aAAa,GAAG,YAAY,CAAC,aAAa,IAAI,6BAA6B,CAAC;IAClF,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,IAAI,cAAc,CAAC;IACnD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACvD,OAAO,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE;QAChC,SAAS,EAAE,OAAO,CAAC,UAAU,KAAK,OAAO,IAAI,OAAO,CAAC,UAAU,KAAK,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;QACnG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtD,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env node
2
+ import { runCli } from "./app.js";
3
+ const argv = process.argv.slice(2);
4
+ if (argv[0] === "--")
5
+ argv.shift();
6
+ const controller = new AbortController();
7
+ const abort = (signal) => controller.abort(new Error(`Received ${signal}`));
8
+ const onSigint = () => abort("SIGINT");
9
+ const onSigterm = () => abort("SIGTERM");
10
+ process.once("SIGINT", onSigint);
11
+ process.once("SIGTERM", onSigterm);
12
+ try {
13
+ process.exitCode = await runCli(argv, undefined, { signal: controller.signal });
14
+ }
15
+ finally {
16
+ process.removeListener("SIGINT", onSigint);
17
+ process.removeListener("SIGTERM", onSigterm);
18
+ }
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI;IAAE,IAAI,CAAC,KAAK,EAAE,CAAC;AACnC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;AACzC,MAAM,KAAK,GAAG,CAAC,MAAsB,EAAQ,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,YAAY,MAAM,EAAE,CAAC,CAAC,CAAC;AAClG,MAAM,QAAQ,GAAG,GAAS,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC7C,MAAM,SAAS,GAAG,GAAS,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC/C,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACjC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AACnC,IAAI,CAAC;IACH,OAAO,CAAC,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;AAClF,CAAC;QAAS,CAAC;IACT,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC3C,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAC/C,CAAC"}