@projectarachne/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/execution/runWorkflow.d.ts +28 -0
- package/dist/execution/runWorkflow.d.ts.map +1 -0
- package/dist/execution/runWorkflow.js +350 -0
- package/dist/execution/runWorkflow.js.map +1 -0
- package/dist/executors/terminalExecutor.d.ts +82 -0
- package/dist/executors/terminalExecutor.d.ts.map +1 -0
- package/dist/executors/terminalExecutor.js +331 -0
- package/dist/executors/terminalExecutor.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/index.d.ts +3 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +3 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/workflow-yaml.d.ts +839 -0
- package/dist/schemas/workflow-yaml.d.ts.map +1 -0
- package/dist/schemas/workflow-yaml.js +60 -0
- package/dist/schemas/workflow-yaml.js.map +1 -0
- package/dist/schemas/workflow.d.ts +698 -0
- package/dist/schemas/workflow.d.ts.map +1 -0
- package/dist/schemas/workflow.js +85 -0
- package/dist/schemas/workflow.js.map +1 -0
- package/dist/storage/sqlite.d.ts +65 -0
- package/dist/storage/sqlite.d.ts.map +1 -0
- package/dist/storage/sqlite.js +177 -0
- package/dist/storage/sqlite.js.map +1 -0
- package/dist/yaml/index.d.ts +3 -0
- package/dist/yaml/index.d.ts.map +1 -0
- package/dist/yaml/index.js +2 -0
- package/dist/yaml/index.js.map +1 -0
- package/dist/yaml/parseWorkflowYaml.d.ts +6 -0
- package/dist/yaml/parseWorkflowYaml.d.ts.map +1 -0
- package/dist/yaml/parseWorkflowYaml.js +41 -0
- package/dist/yaml/parseWorkflowYaml.js.map +1 -0
- package/package.json +37 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { WorkflowYaml } from '../yaml/parseWorkflowYaml.js';
|
|
2
|
+
type WorkflowStep = NonNullable<WorkflowYaml['steps']>[number];
|
|
3
|
+
export interface RunWorkflowOptions {
|
|
4
|
+
agentOverride?: string;
|
|
5
|
+
modelOverride?: string;
|
|
6
|
+
defaultAgent?: string | null;
|
|
7
|
+
onStepStart?: (step: WorkflowStep, info: {
|
|
8
|
+
index: number;
|
|
9
|
+
total: number;
|
|
10
|
+
}) => void;
|
|
11
|
+
onStepComplete?: (step: WorkflowStep, info: {
|
|
12
|
+
index: number;
|
|
13
|
+
total: number;
|
|
14
|
+
output: string;
|
|
15
|
+
}) => void;
|
|
16
|
+
onStepFailed?: (step: WorkflowStep, info: {
|
|
17
|
+
index: number;
|
|
18
|
+
total: number;
|
|
19
|
+
error: Error;
|
|
20
|
+
}) => void;
|
|
21
|
+
}
|
|
22
|
+
export interface RunWorkflowResult {
|
|
23
|
+
outputsById: Map<string, string>;
|
|
24
|
+
outputsByIndex: Map<number, string>;
|
|
25
|
+
}
|
|
26
|
+
export declare const runWorkflow: (workflow: WorkflowYaml, options?: RunWorkflowOptions) => Promise<RunWorkflowResult>;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=runWorkflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runWorkflow.d.ts","sourceRoot":"","sources":["../../src/execution/runWorkflow.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAOjE,KAAK,YAAY,GAAG,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAG/D,MAAM,WAAW,kBAAkB;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACnF,cAAc,CAAC,EAAE,CACf,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KACnD,IAAI,CAAC;IACV,YAAY,CAAC,EAAE,CACb,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,KACjD,IAAI,CAAC;CACX;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAgTD,eAAO,MAAM,WAAW,GACtB,UAAU,YAAY,EACtB,UAAS,kBAAuB,KAC/B,OAAO,CAAC,iBAAiB,CA6F3B,CAAC"}
|
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
import { executePrompt, getAvailableAgents, getDefaultAgent } from '../executors/terminalExecutor.js';
|
|
2
|
+
const TEMPLATE_TOKEN = /\{\{\s*([^}]+?)\s*\}\}/g;
|
|
3
|
+
const KNOWN_AGENTS = new Set(['claude', 'codex', 'openai', 'gemini']);
|
|
4
|
+
const HALT_TOKEN = /(^|\s)HALT(\.|!|\s|$)/i;
|
|
5
|
+
const stringifyOutput = (value) => {
|
|
6
|
+
if (value === null || value === undefined)
|
|
7
|
+
return '';
|
|
8
|
+
if (typeof value === 'string')
|
|
9
|
+
return value;
|
|
10
|
+
if (typeof value === 'number' || typeof value === 'boolean')
|
|
11
|
+
return String(value);
|
|
12
|
+
try {
|
|
13
|
+
return JSON.stringify(value);
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return String(value);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
const parseStepRef = (expression) => {
|
|
20
|
+
if (!expression)
|
|
21
|
+
return null;
|
|
22
|
+
if (expression.startsWith('steps.')) {
|
|
23
|
+
const rest = expression.slice('steps.'.length);
|
|
24
|
+
if (!rest)
|
|
25
|
+
return null;
|
|
26
|
+
return rest.endsWith('.output') ? rest.slice(0, -'.output'.length) : rest;
|
|
27
|
+
}
|
|
28
|
+
const bracketMatch = expression.match(/^steps\[\s*(.+?)\s*\](?:\.output)?$/);
|
|
29
|
+
if (!bracketMatch)
|
|
30
|
+
return null;
|
|
31
|
+
let ref = bracketMatch[1].trim();
|
|
32
|
+
if ((ref.startsWith('"') && ref.endsWith('"')) || (ref.startsWith("'") && ref.endsWith("'"))) {
|
|
33
|
+
ref = ref.slice(1, -1);
|
|
34
|
+
}
|
|
35
|
+
return ref || null;
|
|
36
|
+
};
|
|
37
|
+
const readPath = (value, path) => {
|
|
38
|
+
if (value === null || value === undefined)
|
|
39
|
+
return undefined;
|
|
40
|
+
if (!path)
|
|
41
|
+
return value;
|
|
42
|
+
const tokens = [];
|
|
43
|
+
let i = 0;
|
|
44
|
+
while (i < path.length) {
|
|
45
|
+
if (path[i] === '.') {
|
|
46
|
+
i += 1;
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
if (path[i] === '[') {
|
|
50
|
+
const close = path.indexOf(']', i + 1);
|
|
51
|
+
if (close === -1)
|
|
52
|
+
break;
|
|
53
|
+
const raw = path.slice(i + 1, close).trim();
|
|
54
|
+
if ((raw.startsWith('"') && raw.endsWith('"')) || (raw.startsWith("'") && raw.endsWith("'"))) {
|
|
55
|
+
tokens.push({ type: 'prop', key: raw.slice(1, -1) });
|
|
56
|
+
}
|
|
57
|
+
else if (/^-?\d+$/.test(raw)) {
|
|
58
|
+
tokens.push({ type: 'index', key: Number(raw) });
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
tokens.push({ type: 'prop', key: raw });
|
|
62
|
+
}
|
|
63
|
+
i = close + 1;
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
let start = i;
|
|
67
|
+
while (i < path.length && path[i] !== '.' && path[i] !== '[') {
|
|
68
|
+
i += 1;
|
|
69
|
+
}
|
|
70
|
+
const key = path.slice(start, i);
|
|
71
|
+
if (key)
|
|
72
|
+
tokens.push({ type: 'prop', key });
|
|
73
|
+
}
|
|
74
|
+
let current = value;
|
|
75
|
+
for (const token of tokens) {
|
|
76
|
+
if (current === null || current === undefined)
|
|
77
|
+
return undefined;
|
|
78
|
+
current = token.type === 'index' ? current[token.key] : current[token.key];
|
|
79
|
+
}
|
|
80
|
+
return current;
|
|
81
|
+
};
|
|
82
|
+
const resolveTemplateExpression = (expression, context) => {
|
|
83
|
+
const token = expression.trim();
|
|
84
|
+
if (!token)
|
|
85
|
+
return undefined;
|
|
86
|
+
if (token === 'previous' || token === 'previous.output' || token === 'previousStepOutput') {
|
|
87
|
+
return context.previousOutput ?? '';
|
|
88
|
+
}
|
|
89
|
+
if (token.startsWith('steps')) {
|
|
90
|
+
const stepRef = parseStepRef(token);
|
|
91
|
+
if (!stepRef)
|
|
92
|
+
return undefined;
|
|
93
|
+
if (context.outputsById.has(stepRef)) {
|
|
94
|
+
return context.outputsById.get(stepRef);
|
|
95
|
+
}
|
|
96
|
+
const index = Number(stepRef);
|
|
97
|
+
if (Number.isInteger(index) && context.outputsByIndex.has(index)) {
|
|
98
|
+
return context.outputsByIndex.get(index);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if (token.startsWith('variables.')) {
|
|
102
|
+
const value = readPath(context.variables ?? {}, token.slice('variables.'.length));
|
|
103
|
+
return value === undefined ? undefined : stringifyOutput(value);
|
|
104
|
+
}
|
|
105
|
+
if (context.variables && Object.prototype.hasOwnProperty.call(context.variables, token)) {
|
|
106
|
+
return stringifyOutput(context.variables[token]);
|
|
107
|
+
}
|
|
108
|
+
return undefined;
|
|
109
|
+
};
|
|
110
|
+
const parseJsonOutput = (rawOutput) => {
|
|
111
|
+
if (rawOutput === null || rawOutput === undefined) {
|
|
112
|
+
throw new Error('Expected JSON output but received empty value.');
|
|
113
|
+
}
|
|
114
|
+
if (typeof rawOutput === 'object')
|
|
115
|
+
return rawOutput;
|
|
116
|
+
if (typeof rawOutput !== 'string')
|
|
117
|
+
return rawOutput;
|
|
118
|
+
let trimmed = rawOutput.trim();
|
|
119
|
+
if (!trimmed) {
|
|
120
|
+
throw new Error('Expected JSON output but received empty string.');
|
|
121
|
+
}
|
|
122
|
+
const fencedMatch = trimmed.match(/^```(?:json)?\s*([\s\S]+?)\s*```$/i);
|
|
123
|
+
if (fencedMatch) {
|
|
124
|
+
trimmed = fencedMatch[1].trim();
|
|
125
|
+
}
|
|
126
|
+
try {
|
|
127
|
+
return JSON.parse(trimmed);
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
131
|
+
throw new Error(`Failed to parse JSON output: ${message}`);
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
const extractJsonPathValue = (data, path) => {
|
|
135
|
+
if (!path || typeof path !== 'string')
|
|
136
|
+
return undefined;
|
|
137
|
+
let expr = path.trim();
|
|
138
|
+
if (!expr)
|
|
139
|
+
return undefined;
|
|
140
|
+
if (expr.startsWith('$')) {
|
|
141
|
+
expr = expr.slice(1);
|
|
142
|
+
if (expr.startsWith('.'))
|
|
143
|
+
expr = expr.slice(1);
|
|
144
|
+
}
|
|
145
|
+
if (!expr)
|
|
146
|
+
return data;
|
|
147
|
+
return readPath(data, expr);
|
|
148
|
+
};
|
|
149
|
+
const renderInterpolated = (template, context) => {
|
|
150
|
+
return template.replace(TEMPLATE_TOKEN, (match, expression) => {
|
|
151
|
+
const resolved = resolveTemplateExpression(expression, context);
|
|
152
|
+
return resolved === undefined ? match : resolved;
|
|
153
|
+
});
|
|
154
|
+
};
|
|
155
|
+
const normalizeChainMode = (mode) => {
|
|
156
|
+
if (mode === 'auto_append' || mode === 'auto_replace' || mode === 'manual')
|
|
157
|
+
return mode;
|
|
158
|
+
return 'auto_append';
|
|
159
|
+
};
|
|
160
|
+
const applyChainMode = ({ basePrompt, chainState, previousOutputText, }) => {
|
|
161
|
+
const prompt = basePrompt ?? '';
|
|
162
|
+
if (chainState?.mode === 'auto_replace' && chainState.nextPrompt !== null && chainState.nextPrompt !== undefined) {
|
|
163
|
+
return chainState.nextPrompt;
|
|
164
|
+
}
|
|
165
|
+
if (chainState?.mode === 'auto_append' && previousOutputText) {
|
|
166
|
+
return `Previous step output:\n${previousOutputText}\n\nNow answer:\n${prompt}`;
|
|
167
|
+
}
|
|
168
|
+
return prompt;
|
|
169
|
+
};
|
|
170
|
+
const resolveAgentAndModel = (step, options) => {
|
|
171
|
+
let agent = options.agentOverride ?? step.agent ?? step.agentId ?? undefined;
|
|
172
|
+
let model = options.modelOverride ?? step.model ?? undefined;
|
|
173
|
+
if (agent && agent.includes(':')) {
|
|
174
|
+
const [agentPrefix, modelSuffix] = agent.split(':');
|
|
175
|
+
if (KNOWN_AGENTS.has(agentPrefix)) {
|
|
176
|
+
agent = agentPrefix;
|
|
177
|
+
if (!model && modelSuffix)
|
|
178
|
+
model = modelSuffix;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
if (model && model.includes(':')) {
|
|
182
|
+
const [agentPrefix, modelSuffix] = model.split(':');
|
|
183
|
+
if (KNOWN_AGENTS.has(agentPrefix)) {
|
|
184
|
+
if (!agent)
|
|
185
|
+
agent = agentPrefix;
|
|
186
|
+
model = modelSuffix;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
if (!agent) {
|
|
190
|
+
agent = options.defaultAgent ?? getDefaultAgent() ?? undefined;
|
|
191
|
+
}
|
|
192
|
+
if (!agent) {
|
|
193
|
+
const available = getAvailableAgents();
|
|
194
|
+
const hint = available.length > 0 ? `Available agents: ${available.join(', ')}` : 'No agents detected.';
|
|
195
|
+
throw new Error(`No AI agent configured. Install claude/codex/gemini or pass --agent. ${hint}`);
|
|
196
|
+
}
|
|
197
|
+
return { agent, model };
|
|
198
|
+
};
|
|
199
|
+
const runHttpStep = async (step) => {
|
|
200
|
+
if (!step.http?.url) {
|
|
201
|
+
throw new Error(`HTTP step "${step.id}" is missing http.url.`);
|
|
202
|
+
}
|
|
203
|
+
const method = step.http?.method?.toUpperCase() ?? 'GET';
|
|
204
|
+
const headers = { ...(step.http?.headers ?? {}) };
|
|
205
|
+
let body;
|
|
206
|
+
if (step.http?.body !== undefined && method !== 'GET') {
|
|
207
|
+
if (typeof step.http.body === 'string') {
|
|
208
|
+
body = step.http.body;
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
body = JSON.stringify(step.http.body);
|
|
212
|
+
if (!headers['content-type']) {
|
|
213
|
+
headers['content-type'] = 'application/json';
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
const response = await fetch(step.http.url, {
|
|
218
|
+
method,
|
|
219
|
+
headers,
|
|
220
|
+
body,
|
|
221
|
+
});
|
|
222
|
+
const text = await response.text();
|
|
223
|
+
if (!response.ok) {
|
|
224
|
+
throw new Error(`HTTP ${response.status} ${response.statusText}: ${text}`);
|
|
225
|
+
}
|
|
226
|
+
return text;
|
|
227
|
+
};
|
|
228
|
+
const orderGraphNodes = (nodes, edges) => {
|
|
229
|
+
if (!edges || edges.length === 0)
|
|
230
|
+
return nodes;
|
|
231
|
+
const nodeOrder = new Map(nodes.map((node, index) => [node.id, index]));
|
|
232
|
+
const inDegree = new Map(nodes.map((node) => [node.id, 0]));
|
|
233
|
+
const adjacency = new Map();
|
|
234
|
+
for (const edge of edges) {
|
|
235
|
+
if (!nodeOrder.has(edge.from) || !nodeOrder.has(edge.to)) {
|
|
236
|
+
throw new Error(`Invalid edge from "${edge.from}" to "${edge.to}": node not found.`);
|
|
237
|
+
}
|
|
238
|
+
const list = adjacency.get(edge.from) ?? [];
|
|
239
|
+
list.push(edge.to);
|
|
240
|
+
adjacency.set(edge.from, list);
|
|
241
|
+
inDegree.set(edge.to, (inDegree.get(edge.to) ?? 0) + 1);
|
|
242
|
+
}
|
|
243
|
+
const queue = Array.from(inDegree.entries())
|
|
244
|
+
.filter(([, degree]) => degree === 0)
|
|
245
|
+
.map(([nodeId]) => nodeId)
|
|
246
|
+
.sort((a, b) => (nodeOrder.get(a) ?? 0) - (nodeOrder.get(b) ?? 0));
|
|
247
|
+
const ordered = [];
|
|
248
|
+
while (queue.length > 0) {
|
|
249
|
+
const nodeId = queue.shift();
|
|
250
|
+
if (!nodeId)
|
|
251
|
+
break;
|
|
252
|
+
const node = nodes.find((n) => n.id === nodeId);
|
|
253
|
+
if (node)
|
|
254
|
+
ordered.push(node);
|
|
255
|
+
for (const neighbor of adjacency.get(nodeId) ?? []) {
|
|
256
|
+
const nextDegree = (inDegree.get(neighbor) ?? 0) - 1;
|
|
257
|
+
inDegree.set(neighbor, nextDegree);
|
|
258
|
+
if (nextDegree === 0) {
|
|
259
|
+
queue.push(neighbor);
|
|
260
|
+
queue.sort((a, b) => (nodeOrder.get(a) ?? 0) - (nodeOrder.get(b) ?? 0));
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
if (ordered.length !== nodes.length) {
|
|
265
|
+
throw new Error('Workflow graph contains a cycle; unable to determine execution order.');
|
|
266
|
+
}
|
|
267
|
+
return ordered;
|
|
268
|
+
};
|
|
269
|
+
export const runWorkflow = async (workflow, options = {}) => {
|
|
270
|
+
const steps = Array.isArray(workflow.steps) && workflow.steps.length > 0
|
|
271
|
+
? workflow.steps
|
|
272
|
+
: undefined;
|
|
273
|
+
const graphNodes = Array.isArray(workflow.nodes) && workflow.nodes.length > 0
|
|
274
|
+
? workflow.nodes
|
|
275
|
+
: undefined;
|
|
276
|
+
const orderedSteps = steps ?? orderGraphNodes(graphNodes ?? [], workflow.edges);
|
|
277
|
+
const total = orderedSteps.length;
|
|
278
|
+
const outputsById = new Map();
|
|
279
|
+
const outputsByIndex = new Map();
|
|
280
|
+
let chainState = { mode: 'auto_append' };
|
|
281
|
+
let halted = false;
|
|
282
|
+
for (let index = 0; index < orderedSteps.length; index += 1) {
|
|
283
|
+
const step = orderedSteps[index];
|
|
284
|
+
const previousOutput = index > 0 ? outputsByIndex.get(index - 1) : undefined;
|
|
285
|
+
const context = {
|
|
286
|
+
outputsById,
|
|
287
|
+
outputsByIndex,
|
|
288
|
+
previousOutput,
|
|
289
|
+
variables: workflow.variables,
|
|
290
|
+
};
|
|
291
|
+
options.onStepStart?.(step, { index, total });
|
|
292
|
+
try {
|
|
293
|
+
const { agent, model } = resolveAgentAndModel(step, options);
|
|
294
|
+
const basePrompt = step.promptTemplate
|
|
295
|
+
? renderInterpolated(step.promptTemplate, context)
|
|
296
|
+
: renderInterpolated(step.prompt ?? '', context);
|
|
297
|
+
const prompt = applyChainMode({
|
|
298
|
+
basePrompt,
|
|
299
|
+
chainState,
|
|
300
|
+
previousOutputText: previousOutput,
|
|
301
|
+
});
|
|
302
|
+
const output = step.kind === 'http' || step.http?.url
|
|
303
|
+
? await runHttpStep(step)
|
|
304
|
+
: (await executePrompt({
|
|
305
|
+
prompt,
|
|
306
|
+
agent,
|
|
307
|
+
model,
|
|
308
|
+
})).output;
|
|
309
|
+
const outputConfig = step.output;
|
|
310
|
+
const outputFormat = outputConfig?.format ?? 'text';
|
|
311
|
+
let parsedOutput = null;
|
|
312
|
+
if (outputFormat === 'json') {
|
|
313
|
+
parsedOutput = parseJsonOutput(output);
|
|
314
|
+
}
|
|
315
|
+
const chainMode = normalizeChainMode(step.chain?.mode);
|
|
316
|
+
let nextPromptOverride = null;
|
|
317
|
+
if (chainMode === 'auto_replace') {
|
|
318
|
+
if (outputFormat !== 'json') {
|
|
319
|
+
throw new Error('chain.mode auto_replace requires output.format json.');
|
|
320
|
+
}
|
|
321
|
+
const nextPromptPath = step.chain?.nextPromptPath;
|
|
322
|
+
if (!nextPromptPath) {
|
|
323
|
+
throw new Error('chain.mode auto_replace requires chain.nextPromptPath.');
|
|
324
|
+
}
|
|
325
|
+
const extracted = extractJsonPathValue(parsedOutput, nextPromptPath);
|
|
326
|
+
if (extracted === undefined || extracted === null) {
|
|
327
|
+
throw new Error(`chain.nextPromptPath "${nextPromptPath}" did not resolve to a value.`);
|
|
328
|
+
}
|
|
329
|
+
nextPromptOverride = typeof extracted === 'string' ? extracted : stringifyOutput(extracted);
|
|
330
|
+
}
|
|
331
|
+
outputsByIndex.set(index, output);
|
|
332
|
+
outputsById.set(step.id, output);
|
|
333
|
+
options.onStepComplete?.(step, { index, total, output });
|
|
334
|
+
chainState = { mode: chainMode, nextPrompt: nextPromptOverride };
|
|
335
|
+
if (workflow.loop?.stopOnHalt !== false && HALT_TOKEN.test(output)) {
|
|
336
|
+
halted = true;
|
|
337
|
+
break;
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
catch (error) {
|
|
341
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
342
|
+
options.onStepFailed?.(step, { index, total, error: err });
|
|
343
|
+
throw err;
|
|
344
|
+
}
|
|
345
|
+
if (halted)
|
|
346
|
+
break;
|
|
347
|
+
}
|
|
348
|
+
return { outputsById, outputsByIndex };
|
|
349
|
+
};
|
|
350
|
+
//# sourceMappingURL=runWorkflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runWorkflow.js","sourceRoot":"","sources":["../../src/execution/runWorkflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check which agents are available on this system
|
|
3
|
+
* @returns {string[]} Array of available agent names
|
|
4
|
+
*/
|
|
5
|
+
export declare function getAvailableAgents(): string[];
|
|
6
|
+
/**
|
|
7
|
+
* Get the default agent (prefers claude, falls back to codex)
|
|
8
|
+
* @returns {string|null} Default agent name or null if none available
|
|
9
|
+
*/
|
|
10
|
+
export declare function getDefaultAgent(): string | null;
|
|
11
|
+
interface ExecutePromptOpts {
|
|
12
|
+
prompt: string;
|
|
13
|
+
agent?: string;
|
|
14
|
+
model?: string | null;
|
|
15
|
+
timeout?: number;
|
|
16
|
+
workdir?: string;
|
|
17
|
+
onChunk?: (chunk: string) => void;
|
|
18
|
+
}
|
|
19
|
+
interface ExecutePromptResult {
|
|
20
|
+
ok: boolean;
|
|
21
|
+
output: string;
|
|
22
|
+
agent: string;
|
|
23
|
+
exitCode: number;
|
|
24
|
+
stderr: string;
|
|
25
|
+
rawOutput: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Execute a prompt using a terminal-based agent
|
|
29
|
+
*
|
|
30
|
+
* Uses synchronous execution for reliability - async spawn has issues with
|
|
31
|
+
* certain terminal agents that expect TTY behavior.
|
|
32
|
+
*/
|
|
33
|
+
export declare function executePrompt({ prompt, agent, model, timeout, workdir, onChunk, }: ExecutePromptOpts): Promise<ExecutePromptResult>;
|
|
34
|
+
/**
|
|
35
|
+
* Format messages array into a single prompt string
|
|
36
|
+
* Used when converting from chat format to single prompt
|
|
37
|
+
*/
|
|
38
|
+
export declare function formatMessagesAsPrompt(messages: Array<{
|
|
39
|
+
role: string;
|
|
40
|
+
content: string;
|
|
41
|
+
}> | string, { system }?: {
|
|
42
|
+
system?: string;
|
|
43
|
+
}): string;
|
|
44
|
+
interface TerminalChatCompleteOpts {
|
|
45
|
+
model?: string;
|
|
46
|
+
messages: Array<{
|
|
47
|
+
role: string;
|
|
48
|
+
content: string;
|
|
49
|
+
}> | string;
|
|
50
|
+
system?: string;
|
|
51
|
+
temperature?: number;
|
|
52
|
+
max_tokens?: number;
|
|
53
|
+
stream?: boolean;
|
|
54
|
+
providerOptions?: {
|
|
55
|
+
timeout?: number;
|
|
56
|
+
workdir?: string;
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Chat-complete compatible interface for terminal execution
|
|
61
|
+
* This matches the signature of modelRouter.chatComplete for easy integration
|
|
62
|
+
*/
|
|
63
|
+
export declare function terminalChatComplete({ model, messages, system, temperature, // ignored for terminal execution
|
|
64
|
+
max_tokens, // ignored for terminal execution
|
|
65
|
+
stream, // TODO: implement streaming
|
|
66
|
+
providerOptions, }: TerminalChatCompleteOpts): Promise<{
|
|
67
|
+
ok: boolean;
|
|
68
|
+
provider: string;
|
|
69
|
+
model: string;
|
|
70
|
+
output: string;
|
|
71
|
+
usage: null;
|
|
72
|
+
raw: ExecutePromptResult;
|
|
73
|
+
}>;
|
|
74
|
+
declare const _default: {
|
|
75
|
+
executePrompt: typeof executePrompt;
|
|
76
|
+
terminalChatComplete: typeof terminalChatComplete;
|
|
77
|
+
getAvailableAgents: typeof getAvailableAgents;
|
|
78
|
+
getDefaultAgent: typeof getDefaultAgent;
|
|
79
|
+
formatMessagesAsPrompt: typeof formatMessagesAsPrompt;
|
|
80
|
+
};
|
|
81
|
+
export default _default;
|
|
82
|
+
//# sourceMappingURL=terminalExecutor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminalExecutor.d.ts","sourceRoot":"","sources":["../../src/executors/terminalExecutor.ts"],"names":[],"mappings":"AAiJA;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAW7C;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAK/C;AAED,UAAU,iBAAiB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,UAAU,mBAAmB;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAWD;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,EAClC,MAAM,EACN,KAAgB,EAChB,KAAK,EACL,OAA4B,EAC5B,OAAO,EACP,OAAO,GACR,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA8FlD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,EAC3D,EAAE,MAAM,EAAE,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GACnC,MAAM,CAsBR;AAED,UAAU,wBAAwB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,MAAM,CAAC;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,eAAe,CAAC,EAAE;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,EACzC,KAAK,EACL,QAAQ,EACR,MAAM,EACN,WAAW,EAAE,iCAAiC;AAC9C,UAAU,EAAE,iCAAiC;AAC7C,MAAc,EAAE,4BAA4B;AAC5C,eAAoB,GACrB,EAAE,wBAAwB,GAAG,OAAO,CAAC;IACpC,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,IAAI,CAAC;IACZ,GAAG,EAAE,mBAAmB,CAAC;CAC1B,CAAC,CAuCD;;;;;;;;AAED,wBAME"}
|