@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,112 @@
1
+ import { PlanRecordSchema } from "@atom-workflow-agent/contracts";
2
+ import { LocalPlanStore, PlanningController, WorkflowPlanningFailedError, planStoragePaths } from "@atom-workflow-agent/workflow-planner";
3
+ import { LocalWorkflowStore, contentHash, createWorkflowRevision } from "@atom-workflow-agent/workflow-engine";
4
+ const asJson = (value) => JSON.parse(JSON.stringify(value));
5
+ const eventData = (event) => event.data;
6
+ const eventKey = (event) => {
7
+ if (event.type !== "session_update" || event.data === null || typeof event.data !== "object" || Array.isArray(event.data))
8
+ return event.type;
9
+ const update = event.data.update;
10
+ if (update === null || typeof update !== "object" || Array.isArray(update))
11
+ return event.type;
12
+ const updateType = update.sessionUpdate;
13
+ return typeof updateType === "string" ? `${event.type}.${updateType}` : event.type;
14
+ };
15
+ function auditRecord(audit) {
16
+ return {
17
+ catalogIndex: audit.catalogIndex,
18
+ ...(audit.capabilityCoverage ? { capabilityCoverage: audit.capabilityCoverage } : {}),
19
+ ...(audit.planningCatalog ? { planningCatalog: audit.planningCatalog } : {}),
20
+ ...(audit.workspaceSnapshot ? { workspaceSnapshot: audit.workspaceSnapshot } : {}),
21
+ ...(audit.plannerDraft ? { plannerDraft: audit.plannerDraft } : {}),
22
+ workspaceAttempts: audit.workspaceAttempts.map(asJson), planningCheckpoint: audit.checkpoint,
23
+ validationFeedback: audit.validationFeedback, planningMetrics: audit.metrics,
24
+ };
25
+ }
26
+ /** Planning boundary: publishes an immutable Workflow Revision, but never creates or executes a Run. */
27
+ export class WorkflowCoordinator {
28
+ planning;
29
+ plans;
30
+ workflows;
31
+ now;
32
+ constructor(planning, plans, workflows, now = () => new Date()) {
33
+ this.planning = planning;
34
+ this.plans = plans;
35
+ this.workflows = workflows;
36
+ this.now = now;
37
+ }
38
+ async plan(input, resumeRecord) {
39
+ const existing = await this.plans.load(input.planId);
40
+ if (existing && !resumeRecord)
41
+ throw Object.assign(new Error(`Plan already exists: ${input.planId}`), { code: "PLAN_ALREADY_EXISTS", retryable: false });
42
+ if (resumeRecord && existing?.plan.planId !== resumeRecord.plan.planId)
43
+ throw Object.assign(new Error(`Plan resume record mismatch: ${input.planId}`), { code: "PLAN_RESUME_MISMATCH", retryable: false });
44
+ const createdAt = this.now().toISOString();
45
+ const catalogHash = contentHash(input.plannerInput.atomCatalog);
46
+ const initialPlan = PlanRecordSchema.parse({ ...(resumeRecord?.plan ?? {}), schemaVersion: "1.0", planId: input.planId, status: "planning",
47
+ request: { goal: input.goal, cwd: input.cwd, projectScope: input.projectScope ?? input.cwd, hostScope: input.hostScope ?? "local-host", initialWorkflowInputs: input.plannerInput.workflowInputs, context: input.plannerInput.context },
48
+ planner: { provider: input.target.providerId, model: input.target.model, ...(input.planning?.maxPlanningTurns ? { maxPlanningTurns: input.planning.maxPlanningTurns } : {}) },
49
+ catalogHash, inputRevisions: resumeRecord?.plan.inputRevisions ?? [], hashes: resumeRecord?.plan.hashes ?? {}, validationErrors: [], createdAt: resumeRecord?.plan.createdAt ?? createdAt, updatedAt: createdAt, endedAt: undefined, error: undefined });
50
+ const events = [];
51
+ const counts = {};
52
+ let eventTotal = 0;
53
+ const configuredEvent = input.planning?.model?.onEvent;
54
+ const configuredCheckpoint = input.planning?.onCheckpoint;
55
+ const eventCounts = () => {
56
+ const merged = { ...(resumeRecord?.planningEventStats?.byType ?? {}) };
57
+ for (const [key, count] of Object.entries(counts))
58
+ merged[key] = (merged[key] ?? 0) + count;
59
+ return merged;
60
+ };
61
+ const base = (plan, overrides = {}) => ({ schemaVersion: "1.0", plan, plannerInput: input.plannerInput,
62
+ attempts: resumeRecord?.attempts ?? [], validationErrors: [], rawOutputs: resumeRecord?.rawOutputs ?? [], planningEvents: [...(resumeRecord?.planningEvents ?? []), ...events], planningEventStats: { total: (resumeRecord?.planningEventStats?.total ?? 0) + eventTotal, persisted: (resumeRecord?.planningEvents?.length ?? 0) + events.length, byType: eventCounts() }, ...overrides });
63
+ await this.plans.save(base(initialPlan));
64
+ const options = { ...input.planning, promptReferenceDirectory: planStoragePaths(this.plans.rootDirectory, input.planId).directory,
65
+ ...(resumeRecord?.planningCheckpoint ? { resumeCheckpoint: resumeRecord.planningCheckpoint } : {}),
66
+ onCheckpoint: async (checkpoint, audit, progress) => {
67
+ const updated = PlanRecordSchema.parse({ ...initialPlan, validationErrors: checkpoint.lastValidationErrors, updatedAt: this.now().toISOString() });
68
+ await this.plans.save(base(updated, { attempts: [...(resumeRecord?.attempts ?? []), ...progress.attempts], validationErrors: checkpoint.lastValidationErrors, rawOutputs: [...(resumeRecord?.rawOutputs ?? []), ...progress.rawOutputs], ...auditRecord(audit) }));
69
+ await configuredCheckpoint?.(checkpoint, audit, progress);
70
+ },
71
+ model: { ...input.planning?.model, onEvent: (event) => {
72
+ eventTotal += 1;
73
+ counts[eventKey(event)] = (counts[eventKey(event)] ?? 0) + 1;
74
+ configuredEvent?.(event);
75
+ if (event.type !== "session_update")
76
+ events.push({ sequence: (resumeRecord?.planningEvents?.length ?? 0) + events.length, timestamp: this.now().toISOString(), type: event.type, providerId: event.providerId, ...("sessionId" in event ? { sessionId: event.sessionId } : {}), data: eventData(event) });
77
+ } },
78
+ };
79
+ try {
80
+ const planned = await this.planning.planAndCompile(input.plannerInput, input.target, options);
81
+ if (Object.keys(planned.workflow.outputs).length === 0)
82
+ throw Object.assign(new Error("Planner produced a Workflow without declared outputs"), { code: "WORKFLOW_OUTPUT_CONTRACT_EMPTY", retryable: true });
83
+ const revision = createWorkflowRevision({ workflowId: input.workflowId, revision: 1, source: { kind: "planner", planId: input.planId }, workflowSpec: planned.workflow, ir: planned.ir, completionMode: "outputs", catalogHash });
84
+ await this.workflows.save({ schemaVersion: "1.0", revision, ir: planned.ir });
85
+ const endedAt = this.now().toISOString();
86
+ const ready = PlanRecordSchema.parse({ ...initialPlan, status: "ready", workflowRevisionId: revision.workflowRevisionId,
87
+ hashes: { ...(planned.audit.plannerDraft ? { draft: contentHash(planned.audit.plannerDraft) } : {}), workflowSpec: revision.workflowSpecHash, workflowIr: revision.workflowIrHash }, validationErrors: [], updatedAt: endedAt, endedAt });
88
+ const record = base(ready, { attempts: [...(resumeRecord?.attempts ?? []), ...planned.attempts], rawOutputs: [...(resumeRecord?.rawOutputs ?? []), ...planned.rawOutputs], validationErrors: [], ...auditRecord(planned.audit) });
89
+ await this.plans.save(record);
90
+ return record;
91
+ }
92
+ catch (error) {
93
+ const failure = error instanceof WorkflowPlanningFailedError ? error : undefined;
94
+ const phase = failure?.audit.checkpoint.phase;
95
+ const status = phase === "blocked_missing_atom" ? "blocked_missing_atom" : phase === "blocked_missing_input" ? "blocked_missing_input" : "failed";
96
+ const endedAt = this.now().toISOString();
97
+ const code = typeof error?.code === "string" ? error.code : "WORKFLOW_PLANNING_FAILED";
98
+ const failed = PlanRecordSchema.parse({ ...initialPlan, status, validationErrors: failure?.validationErrors ?? [], updatedAt: endedAt, ...(status === "failed" ? { endedAt } : {}), error: { code, message: error instanceof Error ? error.message : String(error), retryable: error?.retryable === true } });
99
+ await this.plans.save(base(failed, { attempts: failure?.attempts ?? [], validationErrors: failure?.validationErrors ?? [], rawOutputs: failure?.rawOutputs ?? [], ...(failure ? auditRecord(failure.audit) : {}) }));
100
+ throw error;
101
+ }
102
+ }
103
+ async resume(input) {
104
+ const record = await this.plans.load(input.planId);
105
+ if (!record)
106
+ throw Object.assign(new Error(`Plan not found: ${input.planId}`), { code: "PLAN_NOT_FOUND", retryable: false });
107
+ if (!record.planningCheckpoint || !["blocked_missing_input", "blocked_missing_atom", "failed"].includes(record.plan.status))
108
+ throw Object.assign(new Error(`Plan is not resumable: ${input.planId}`), { code: "PLAN_NOT_RESUMABLE", retryable: false });
109
+ return this.plan(input, record);
110
+ }
111
+ }
112
+ //# sourceMappingURL=workflow-coordinator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-coordinator.js","sourceRoot":"","sources":["../../src/workflow/workflow-coordinator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export interface WorkflowOutputOptions {
2
+ readonly full?: boolean;
3
+ readonly includeEvents?: boolean;
4
+ }
5
+ /** Default projection for immutable Workflow records; `--full` exposes the frozen Spec and IR. */
6
+ export declare function formatWorkflowDefinitionOutput(value: unknown, full?: boolean): unknown;
7
+ /** Keeps useful run state while excluding large ACP events, checkpoints, and Planner transcripts. */
8
+ export declare function formatWorkflowOutput(value: unknown, options?: WorkflowOutputOptions): unknown;
9
+ //# sourceMappingURL=workflow-output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-output.d.ts","sourceRoot":"","sources":["../../src/workflow/workflow-output.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CAClC;AAmBD,kGAAkG;AAClG,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,UAAQ,GAAG,OAAO,CAcpF;AAYD,qGAAqG;AACrG,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,qBAA0B,GAAG,OAAO,CA2DjG"}
@@ -0,0 +1,109 @@
1
+ function revisionSummary(value) {
2
+ const direct = record(value);
3
+ const revision = record(direct?.revision) ?? direct;
4
+ if (!revision || typeof revision.workflowRevisionId !== "string" || typeof revision.workflowId !== "string")
5
+ return undefined;
6
+ const spec = record(revision.workflowSpec);
7
+ return {
8
+ workflowId: revision.workflowId,
9
+ workflowRevisionId: revision.workflowRevisionId,
10
+ ...pick(revision, ["revision"]),
11
+ ...(typeof revision.parentRevisionId === "string" ? { parentRevisionId: revision.parentRevisionId } : {}),
12
+ ...(typeof spec?.name === "string" ? { name: spec.name } : {}),
13
+ nodeCount: Array.isArray(spec?.nodes) ? spec.nodes.length : 0,
14
+ referencedAtomCount: Array.isArray(revision.referencedAtoms) ? revision.referencedAtoms.length : 0,
15
+ ...pick(revision, ["source", "workflowSpecHash", "workflowIrHash", "completionMode", "validation", "createdAt"]),
16
+ };
17
+ }
18
+ /** Default projection for immutable Workflow records; `--full` exposes the frozen Spec and IR. */
19
+ export function formatWorkflowDefinitionOutput(value, full = false) {
20
+ if (full)
21
+ return value;
22
+ const summary = revisionSummary(value);
23
+ if (summary)
24
+ return summary;
25
+ const document = record(value);
26
+ const definition = record(document?.definition);
27
+ if (!definition || !Array.isArray(document?.revisions))
28
+ return value;
29
+ return {
30
+ definition: pick(definition, ["workflowId", "name", "latestRevisionId", "createdAt", "updatedAt"]),
31
+ revisions: document.revisions.flatMap((revision) => {
32
+ const item = revisionSummary(revision);
33
+ return item ? [item] : [];
34
+ }),
35
+ };
36
+ }
37
+ function record(value) {
38
+ return value !== null && typeof value === "object" && !Array.isArray(value)
39
+ ? value
40
+ : undefined;
41
+ }
42
+ function pick(source, keys) {
43
+ return Object.fromEntries(keys.flatMap((key) => source[key] === undefined ? [] : [[key, source[key]]]));
44
+ }
45
+ /** Keeps useful run state while excluding large ACP events, checkpoints, and Planner transcripts. */
46
+ export function formatWorkflowOutput(value, options = {}) {
47
+ if (options.full)
48
+ return value;
49
+ const snapshot = record(value);
50
+ const run = record(snapshot?.run);
51
+ if (!snapshot || !run || typeof run.runId !== "string" || typeof run.status !== "string")
52
+ return value;
53
+ const nodeRuns = Array.isArray(snapshot.nodeRuns) ? snapshot.nodeRuns : [];
54
+ const attempts = Array.isArray(snapshot.attempts) ? snapshot.attempts : [];
55
+ const nodes = nodeRuns.flatMap((candidate) => {
56
+ const node = record(candidate);
57
+ if (!node || typeof node.nodeId !== "string")
58
+ return [];
59
+ const attemptCount = attempts.filter((attempt) => record(attempt)?.activationId === node.activationId).length;
60
+ return [{
61
+ ...pick(node, ["nodeId", "activationId", "activationIndex", "status", "startedAt", "endedAt", "error"]),
62
+ attemptCount,
63
+ }];
64
+ });
65
+ const signals = Array.isArray(snapshot.signals)
66
+ ? snapshot.signals.flatMap((item) => {
67
+ const signal = record(item);
68
+ return signal?.status === "waiting" ? [pick(signal, [
69
+ "signalId", "runId", "workflowRevisionId", "nodeId", "activationId", "attemptId",
70
+ "projectScope", "hostScope", "key", "prompt", "context", "responseSchema",
71
+ "resume", "createdAt", "expiresAt",
72
+ ])] : [];
73
+ })
74
+ : [];
75
+ const hostTasks = Array.isArray(snapshot.hostTasks)
76
+ ? snapshot.hostTasks.flatMap((item) => {
77
+ const task = record(item);
78
+ const request = record(task?.request);
79
+ return task?.status === "waiting" && request ? [pick(request, [
80
+ "hostTaskId", "atom", "runId", "workflowRevisionId", "nodeId", "activationId",
81
+ "attemptId", "instruction", "input", "context", "artifacts", "expected",
82
+ "projectScope", "hostScope", "resume", "continuation",
83
+ ])] : [];
84
+ })
85
+ : [];
86
+ const workflowSpec = record(record(snapshot.revision)?.workflowSpec);
87
+ const summary = {
88
+ schemaVersion: "1.0",
89
+ run: pick(run, [
90
+ "runId", "planId", "status", "goal", "workflowRevisionId", "outputs", "error",
91
+ "createdAt", "startedAt", "updatedAt", "endedAt",
92
+ ]),
93
+ workflow: {
94
+ ...(typeof workflowSpec?.name === "string" ? { name: workflowSpec.name } : {}),
95
+ nodeCount: nodes.length,
96
+ nodes,
97
+ },
98
+ execution: {
99
+ transitionCount: typeof snapshot.transitionCount === "number" ? snapshot.transitionCount : 0,
100
+ edgeTraversals: record(snapshot.edgeTraversals) ?? {},
101
+ decisions: Array.isArray(snapshot.decisions) ? snapshot.decisions : [],
102
+ },
103
+ pending: { signals, hostTasks },
104
+ };
105
+ if (options.includeEvents)
106
+ summary.events = Array.isArray(snapshot.events) ? snapshot.events : [];
107
+ return summary;
108
+ }
109
+ //# sourceMappingURL=workflow-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-output.js","sourceRoot":"","sources":["../../src/workflow/workflow-output.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { type AtomDiscoveryConfig } from "@atom-workflow-agent/atom-catalog";
2
+ import { type LocalProviderName } from "../providers/provider-name.js";
3
+ export interface WorkflowProjectConfig {
4
+ readonly planner?: {
5
+ readonly provider?: LocalProviderName;
6
+ readonly model?: string;
7
+ readonly maxPlanningTurns?: number;
8
+ };
9
+ readonly dataDirectory?: string;
10
+ readonly atoms: AtomDiscoveryConfig;
11
+ }
12
+ export declare function loadWorkflowProjectConfig(cwd: string): Promise<WorkflowProjectConfig>;
13
+ export declare function resolveDefaultPlannerModel(provider: LocalProviderName, cwd: string, signal?: AbortSignal): Promise<string>;
14
+ //# sourceMappingURL=workflow-project-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-project-config.d.ts","sourceRoot":"","sources":["../../src/workflow/workflow-project-config.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAuB,KAAK,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAE5F,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE;QACjB,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;QACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;KACpC,CAAC;IACF,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;CACrC;AAED,wBAAsB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAkC3F;AAED,wBAAsB,0BAA0B,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAKhI"}
@@ -0,0 +1,55 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { AtomWorkflowError } from "@atom-workflow-agent/contracts";
4
+ import { AtomDiscoveryConfigSchema, } from "@atom-workflow-agent/atom-catalog";
5
+ import { runModelsCommand } from "../commands/models.js";
6
+ import { isLocalProviderName } from "../providers/provider-name.js";
7
+ export async function loadWorkflowProjectConfig(cwd) {
8
+ try {
9
+ const raw = JSON.parse(await readFile(join(cwd, ".atom-workflow-agent", "config.json"), "utf8"));
10
+ const unknownKeys = Object.keys(raw).filter((key) => !["planner", "dataDirectory", "atoms"].includes(key));
11
+ if (unknownKeys.length > 0)
12
+ throw new AtomWorkflowError("PROJECT_CONFIG_INVALID", `Unknown project config keys: ${unknownKeys.join(", ")}`);
13
+ const planner = raw.planner;
14
+ const dataDirectory = raw.dataDirectory;
15
+ if (planner !== undefined && (planner === null || typeof planner !== "object" || Array.isArray(planner))) {
16
+ throw new AtomWorkflowError("PROJECT_CONFIG_INVALID", "planner must be an object");
17
+ }
18
+ if (planner !== undefined) {
19
+ const unknownPlannerKeys = Object.keys(planner).filter((key) => !["provider", "model", "maxPlanningTurns"].includes(key));
20
+ if (unknownPlannerKeys.length > 0)
21
+ throw new AtomWorkflowError("PROJECT_CONFIG_INVALID", `Unknown planner config keys: ${unknownPlannerKeys.join(", ")}`);
22
+ if (planner.model !== undefined && (typeof planner.model !== "string" || planner.model.trim() === "")) {
23
+ throw new AtomWorkflowError("PROJECT_CONFIG_INVALID", "planner.model must be a non-empty string");
24
+ }
25
+ if (planner.maxPlanningTurns !== undefined && (!Number.isInteger(planner.maxPlanningTurns) || planner.maxPlanningTurns < 1 || planner.maxPlanningTurns > 256)) {
26
+ throw new AtomWorkflowError("PROJECT_CONFIG_INVALID", "planner.maxPlanningTurns must be an integer from 1 to 256");
27
+ }
28
+ }
29
+ if (dataDirectory !== undefined && typeof dataDirectory !== "string")
30
+ throw new AtomWorkflowError("PROJECT_CONFIG_INVALID", "dataDirectory must be a string");
31
+ if (planner?.provider !== undefined && !isLocalProviderName(planner.provider)) {
32
+ throw new AtomWorkflowError("PROJECT_CONFIG_INVALID", `Unsupported planner provider: ${String(planner.provider)}`);
33
+ }
34
+ return {
35
+ atoms: AtomDiscoveryConfigSchema.parse(raw.atoms ?? {}),
36
+ ...(planner !== undefined ? { planner } : {}),
37
+ ...(typeof dataDirectory === "string" ? { dataDirectory } : {}),
38
+ };
39
+ }
40
+ catch (error) {
41
+ if (error.code === "ENOENT")
42
+ return { atoms: AtomDiscoveryConfigSchema.parse({}) };
43
+ if (error instanceof AtomWorkflowError)
44
+ throw error;
45
+ throw new AtomWorkflowError("PROJECT_CONFIG_INVALID", "Failed to parse .atom-workflow-agent/config.json", false, { cause: error });
46
+ }
47
+ }
48
+ export async function resolveDefaultPlannerModel(provider, cwd, signal) {
49
+ const catalog = await runModelsCommand({ providerId: provider, cwd, json: true, ...(signal ? { signal } : {}) });
50
+ const model = catalog.currentModelId ?? catalog.models[0]?.id;
51
+ if (!model)
52
+ throw new AtomWorkflowError("ACP_MODEL_UNAVAILABLE", `No model is available for ${provider}`);
53
+ return model;
54
+ }
55
+ //# sourceMappingURL=workflow-project-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-project-config.js","sourceRoot":"","sources":["../../src/workflow/workflow-project-config.ts"],"names":[],"mappings":"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"}