tryassay 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +17 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/runtime.d.ts +11 -0
- package/dist/commands/runtime.js +63 -0
- package/dist/commands/runtime.js.map +1 -0
- package/dist/runtime/agent-loop.d.ts +46 -0
- package/dist/runtime/agent-loop.js +419 -0
- package/dist/runtime/agent-loop.js.map +1 -0
- package/dist/runtime/executor.d.ts +37 -0
- package/dist/runtime/executor.js +518 -0
- package/dist/runtime/executor.js.map +1 -0
- package/dist/runtime/observer.d.ts +44 -0
- package/dist/runtime/observer.js +247 -0
- package/dist/runtime/observer.js.map +1 -0
- package/dist/runtime/planner.d.ts +4 -0
- package/dist/runtime/planner.js +299 -0
- package/dist/runtime/planner.js.map +1 -0
- package/dist/runtime/reasoner.d.ts +4 -0
- package/dist/runtime/reasoner.js +227 -0
- package/dist/runtime/reasoner.js.map +1 -0
- package/dist/runtime/reflector.d.ts +67 -0
- package/dist/runtime/reflector.js +393 -0
- package/dist/runtime/reflector.js.map +1 -0
- package/dist/runtime/types.d.ts +317 -0
- package/dist/runtime/types.js +6 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/runtime/verifier.d.ts +46 -0
- package/dist/runtime/verifier.js +404 -0
- package/dist/runtime/verifier.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,518 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// Assay Verified Agent Runtime — Executor Component
|
|
3
|
+
// Carries out verified action steps via pluggable adapters
|
|
4
|
+
// ============================================================
|
|
5
|
+
import { writeFile, readFile, appendFile, mkdir } from 'node:fs/promises';
|
|
6
|
+
import { execSync } from 'node:child_process';
|
|
7
|
+
import { dirname, resolve, normalize } from 'node:path';
|
|
8
|
+
// ── Scope Enforcement ───────────────────────────────────────
|
|
9
|
+
function isPathWithinAllowed(targetPath, allowedDirs) {
|
|
10
|
+
const normalized = normalize(resolve(targetPath));
|
|
11
|
+
return allowedDirs.some(dir => {
|
|
12
|
+
const normalizedDir = normalize(resolve(dir));
|
|
13
|
+
return normalized.startsWith(normalizedDir);
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
function isCommandAllowed(command, allowedCommands) {
|
|
17
|
+
const executable = command.trim().split(/\s+/)[0];
|
|
18
|
+
return allowedCommands.some(allowed => {
|
|
19
|
+
if (allowed === executable)
|
|
20
|
+
return true;
|
|
21
|
+
// Support glob-like wildcards: "npm *" matches "npm install"
|
|
22
|
+
if (allowed.endsWith('*')) {
|
|
23
|
+
const prefix = allowed.slice(0, -1).trim();
|
|
24
|
+
return command.trim().startsWith(prefix);
|
|
25
|
+
}
|
|
26
|
+
return false;
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
function isUrlAllowed(url, allowedUrls) {
|
|
30
|
+
return allowedUrls.some(allowed => {
|
|
31
|
+
if (url === allowed)
|
|
32
|
+
return true;
|
|
33
|
+
// Support prefix matching: "https://api.example.com" matches "https://api.example.com/v1/data"
|
|
34
|
+
if (url.startsWith(allowed))
|
|
35
|
+
return true;
|
|
36
|
+
return false;
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
function enforceScope(step, scope) {
|
|
40
|
+
const op = step.operation;
|
|
41
|
+
switch (op.type) {
|
|
42
|
+
case 'code_write': {
|
|
43
|
+
if (!isPathWithinAllowed(op.filePath, scope.allowedDirectories)) {
|
|
44
|
+
return `Path "${op.filePath}" is outside allowed directories: ${scope.allowedDirectories.join(', ')}`;
|
|
45
|
+
}
|
|
46
|
+
if (scope.blockedPatterns.some(p => op.filePath.includes(p))) {
|
|
47
|
+
return `Path "${op.filePath}" matches blocked pattern`;
|
|
48
|
+
}
|
|
49
|
+
if (op.content.length > scope.maxFileSize) {
|
|
50
|
+
return `Content size ${op.content.length} exceeds maxFileSize ${scope.maxFileSize}`;
|
|
51
|
+
}
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
case 'code_run': {
|
|
55
|
+
if (!isCommandAllowed(op.command, scope.allowedCommands)) {
|
|
56
|
+
return `Command "${op.command}" is not in allowed commands: ${scope.allowedCommands.join(', ')}`;
|
|
57
|
+
}
|
|
58
|
+
if (op.cwd && !isPathWithinAllowed(op.cwd, scope.allowedDirectories)) {
|
|
59
|
+
return `Working directory "${op.cwd}" is outside allowed directories`;
|
|
60
|
+
}
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
case 'api_call': {
|
|
64
|
+
if (!isUrlAllowed(op.url, scope.allowedUrls)) {
|
|
65
|
+
return `URL "${op.url}" is not in allowed URLs: ${scope.allowedUrls.join(', ')}`;
|
|
66
|
+
}
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
case 'git': {
|
|
70
|
+
if (op.cwd && !isPathWithinAllowed(op.cwd, scope.allowedDirectories)) {
|
|
71
|
+
return `Git working directory "${op.cwd}" is outside allowed directories`;
|
|
72
|
+
}
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
case 'message':
|
|
76
|
+
return null; // messages are always allowed
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// ── CodeWriteAdapter ────────────────────────────────────────
|
|
80
|
+
export class CodeWriteAdapter {
|
|
81
|
+
type = 'code_write';
|
|
82
|
+
async execute(step, scope) {
|
|
83
|
+
const start = Date.now();
|
|
84
|
+
const op = step.operation;
|
|
85
|
+
const scopeError = enforceScope(step, scope);
|
|
86
|
+
if (scopeError) {
|
|
87
|
+
return {
|
|
88
|
+
stepId: step.id,
|
|
89
|
+
status: 'failure',
|
|
90
|
+
output: '',
|
|
91
|
+
error: `Scope violation: ${scopeError}`,
|
|
92
|
+
durationMs: Date.now() - start,
|
|
93
|
+
timestamp: new Date().toISOString(),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
try {
|
|
97
|
+
const filePath = resolve(op.filePath);
|
|
98
|
+
switch (op.mode) {
|
|
99
|
+
case 'create': {
|
|
100
|
+
await mkdir(dirname(filePath), { recursive: true });
|
|
101
|
+
await writeFile(filePath, op.content, 'utf-8');
|
|
102
|
+
return {
|
|
103
|
+
stepId: step.id,
|
|
104
|
+
status: 'success',
|
|
105
|
+
output: `Created ${filePath} (${op.content.length} bytes)`,
|
|
106
|
+
durationMs: Date.now() - start,
|
|
107
|
+
timestamp: new Date().toISOString(),
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
case 'append': {
|
|
111
|
+
await appendFile(filePath, op.content, 'utf-8');
|
|
112
|
+
return {
|
|
113
|
+
stepId: step.id,
|
|
114
|
+
status: 'success',
|
|
115
|
+
output: `Appended ${op.content.length} bytes to ${filePath}`,
|
|
116
|
+
durationMs: Date.now() - start,
|
|
117
|
+
timestamp: new Date().toISOString(),
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
case 'edit': {
|
|
121
|
+
const existing = await readFile(filePath, 'utf-8');
|
|
122
|
+
if (!op.editTarget) {
|
|
123
|
+
return {
|
|
124
|
+
stepId: step.id,
|
|
125
|
+
status: 'failure',
|
|
126
|
+
output: '',
|
|
127
|
+
error: 'Edit mode requires editTarget to specify what to replace',
|
|
128
|
+
durationMs: Date.now() - start,
|
|
129
|
+
timestamp: new Date().toISOString(),
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
if (!existing.includes(op.editTarget)) {
|
|
133
|
+
return {
|
|
134
|
+
stepId: step.id,
|
|
135
|
+
status: 'failure',
|
|
136
|
+
output: '',
|
|
137
|
+
error: `Edit target not found in ${filePath}`,
|
|
138
|
+
durationMs: Date.now() - start,
|
|
139
|
+
timestamp: new Date().toISOString(),
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
const updated = existing.replace(op.editTarget, op.content);
|
|
143
|
+
await writeFile(filePath, updated, 'utf-8');
|
|
144
|
+
return {
|
|
145
|
+
stepId: step.id,
|
|
146
|
+
status: 'success',
|
|
147
|
+
output: `Edited ${filePath}: replaced ${op.editTarget.length} bytes with ${op.content.length} bytes`,
|
|
148
|
+
durationMs: Date.now() - start,
|
|
149
|
+
timestamp: new Date().toISOString(),
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
catch (err) {
|
|
155
|
+
return {
|
|
156
|
+
stepId: step.id,
|
|
157
|
+
status: 'failure',
|
|
158
|
+
output: '',
|
|
159
|
+
error: err instanceof Error ? err.message : String(err),
|
|
160
|
+
durationMs: Date.now() - start,
|
|
161
|
+
timestamp: new Date().toISOString(),
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// ── CodeRunAdapter ──────────────────────────────────────────
|
|
167
|
+
export class CodeRunAdapter {
|
|
168
|
+
type = 'code_run';
|
|
169
|
+
async execute(step, scope) {
|
|
170
|
+
const start = Date.now();
|
|
171
|
+
const op = step.operation;
|
|
172
|
+
const scopeError = enforceScope(step, scope);
|
|
173
|
+
if (scopeError) {
|
|
174
|
+
return {
|
|
175
|
+
stepId: step.id,
|
|
176
|
+
status: 'failure',
|
|
177
|
+
output: '',
|
|
178
|
+
error: `Scope violation: ${scopeError}`,
|
|
179
|
+
durationMs: Date.now() - start,
|
|
180
|
+
timestamp: new Date().toISOString(),
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
try {
|
|
184
|
+
const result = execSync(op.command, {
|
|
185
|
+
cwd: op.cwd ?? process.cwd(),
|
|
186
|
+
timeout: op.timeoutMs,
|
|
187
|
+
env: op.env ? { ...process.env, ...op.env } : process.env,
|
|
188
|
+
maxBuffer: 10 * 1024 * 1024, // 10MB
|
|
189
|
+
encoding: 'utf-8',
|
|
190
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
191
|
+
});
|
|
192
|
+
return {
|
|
193
|
+
stepId: step.id,
|
|
194
|
+
status: 'success',
|
|
195
|
+
output: result,
|
|
196
|
+
durationMs: Date.now() - start,
|
|
197
|
+
timestamp: new Date().toISOString(),
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
catch (err) {
|
|
201
|
+
const execErr = err;
|
|
202
|
+
const stdout = execErr.stdout ?? '';
|
|
203
|
+
const stderr = execErr.stderr ?? '';
|
|
204
|
+
return {
|
|
205
|
+
stepId: step.id,
|
|
206
|
+
status: 'failure',
|
|
207
|
+
output: stdout,
|
|
208
|
+
error: stderr || execErr.message || String(err),
|
|
209
|
+
durationMs: Date.now() - start,
|
|
210
|
+
timestamp: new Date().toISOString(),
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
// ── ApiCallAdapter ──────────────────────────────────────────
|
|
216
|
+
export class ApiCallAdapter {
|
|
217
|
+
type = 'api_call';
|
|
218
|
+
async execute(step, scope) {
|
|
219
|
+
const start = Date.now();
|
|
220
|
+
const op = step.operation;
|
|
221
|
+
const scopeError = enforceScope(step, scope);
|
|
222
|
+
if (scopeError) {
|
|
223
|
+
return {
|
|
224
|
+
stepId: step.id,
|
|
225
|
+
status: 'failure',
|
|
226
|
+
output: '',
|
|
227
|
+
error: `Scope violation: ${scopeError}`,
|
|
228
|
+
durationMs: Date.now() - start,
|
|
229
|
+
timestamp: new Date().toISOString(),
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
try {
|
|
233
|
+
const fetchOptions = {
|
|
234
|
+
method: op.method,
|
|
235
|
+
headers: op.headers,
|
|
236
|
+
};
|
|
237
|
+
if (op.body !== undefined && op.method !== 'GET') {
|
|
238
|
+
fetchOptions.body = typeof op.body === 'string'
|
|
239
|
+
? op.body
|
|
240
|
+
: JSON.stringify(op.body);
|
|
241
|
+
}
|
|
242
|
+
const response = await fetch(op.url, fetchOptions);
|
|
243
|
+
const responseText = await response.text();
|
|
244
|
+
if (op.expectedStatus && response.status !== op.expectedStatus) {
|
|
245
|
+
return {
|
|
246
|
+
stepId: step.id,
|
|
247
|
+
status: 'failure',
|
|
248
|
+
output: responseText,
|
|
249
|
+
error: `Expected status ${op.expectedStatus}, got ${response.status}`,
|
|
250
|
+
durationMs: Date.now() - start,
|
|
251
|
+
timestamp: new Date().toISOString(),
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
if (!response.ok) {
|
|
255
|
+
return {
|
|
256
|
+
stepId: step.id,
|
|
257
|
+
status: 'failure',
|
|
258
|
+
output: responseText,
|
|
259
|
+
error: `HTTP ${response.status}: ${response.statusText}`,
|
|
260
|
+
durationMs: Date.now() - start,
|
|
261
|
+
timestamp: new Date().toISOString(),
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
return {
|
|
265
|
+
stepId: step.id,
|
|
266
|
+
status: 'success',
|
|
267
|
+
output: responseText,
|
|
268
|
+
durationMs: Date.now() - start,
|
|
269
|
+
timestamp: new Date().toISOString(),
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
catch (err) {
|
|
273
|
+
return {
|
|
274
|
+
stepId: step.id,
|
|
275
|
+
status: 'failure',
|
|
276
|
+
output: '',
|
|
277
|
+
error: err instanceof Error ? err.message : String(err),
|
|
278
|
+
durationMs: Date.now() - start,
|
|
279
|
+
timestamp: new Date().toISOString(),
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
// ── GitAdapter ──────────────────────────────────────────────
|
|
285
|
+
export class GitAdapter {
|
|
286
|
+
type = 'git';
|
|
287
|
+
async execute(step, scope) {
|
|
288
|
+
const start = Date.now();
|
|
289
|
+
const op = step.operation;
|
|
290
|
+
const scopeError = enforceScope(step, scope);
|
|
291
|
+
if (scopeError) {
|
|
292
|
+
return {
|
|
293
|
+
stepId: step.id,
|
|
294
|
+
status: 'failure',
|
|
295
|
+
output: '',
|
|
296
|
+
error: `Scope violation: ${scopeError}`,
|
|
297
|
+
durationMs: Date.now() - start,
|
|
298
|
+
timestamp: new Date().toISOString(),
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
try {
|
|
302
|
+
const gitCommand = `git ${op.command} ${op.args.join(' ')}`;
|
|
303
|
+
const result = execSync(gitCommand, {
|
|
304
|
+
cwd: op.cwd ?? process.cwd(),
|
|
305
|
+
timeout: 30_000,
|
|
306
|
+
encoding: 'utf-8',
|
|
307
|
+
maxBuffer: 10 * 1024 * 1024,
|
|
308
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
309
|
+
});
|
|
310
|
+
return {
|
|
311
|
+
stepId: step.id,
|
|
312
|
+
status: 'success',
|
|
313
|
+
output: result,
|
|
314
|
+
durationMs: Date.now() - start,
|
|
315
|
+
timestamp: new Date().toISOString(),
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
catch (err) {
|
|
319
|
+
const execErr = err;
|
|
320
|
+
return {
|
|
321
|
+
stepId: step.id,
|
|
322
|
+
status: 'failure',
|
|
323
|
+
output: execErr.stdout ?? '',
|
|
324
|
+
error: execErr.stderr || execErr.message || String(err),
|
|
325
|
+
durationMs: Date.now() - start,
|
|
326
|
+
timestamp: new Date().toISOString(),
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
// ── MessageAdapter ──────────────────────────────────────────
|
|
332
|
+
export class MessageAdapter {
|
|
333
|
+
type = 'message';
|
|
334
|
+
async execute(step) {
|
|
335
|
+
const start = Date.now();
|
|
336
|
+
const op = step.operation;
|
|
337
|
+
try {
|
|
338
|
+
const prefix = op.subject ? `[${op.subject}] ` : '';
|
|
339
|
+
const target = op.recipient ? ` -> ${op.recipient}` : '';
|
|
340
|
+
const message = `${prefix}${op.content}${target}`;
|
|
341
|
+
// Console channel logs directly; other channels are extensible later
|
|
342
|
+
switch (op.channel) {
|
|
343
|
+
case 'console':
|
|
344
|
+
console.log(`[agent:message] ${message}`);
|
|
345
|
+
break;
|
|
346
|
+
case 'slack':
|
|
347
|
+
case 'email':
|
|
348
|
+
// Extensible: for now, log with channel tag
|
|
349
|
+
console.log(`[agent:${op.channel}] ${message}`);
|
|
350
|
+
break;
|
|
351
|
+
}
|
|
352
|
+
return {
|
|
353
|
+
stepId: step.id,
|
|
354
|
+
status: 'success',
|
|
355
|
+
output: `Message sent via ${op.channel}: ${message}`,
|
|
356
|
+
durationMs: Date.now() - start,
|
|
357
|
+
timestamp: new Date().toISOString(),
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
catch (err) {
|
|
361
|
+
return {
|
|
362
|
+
stepId: step.id,
|
|
363
|
+
status: 'failure',
|
|
364
|
+
output: '',
|
|
365
|
+
error: err instanceof Error ? err.message : String(err),
|
|
366
|
+
durationMs: Date.now() - start,
|
|
367
|
+
timestamp: new Date().toISOString(),
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
// ── Executor ────────────────────────────────────────────────
|
|
373
|
+
export class Executor {
|
|
374
|
+
adapters = new Map();
|
|
375
|
+
scope;
|
|
376
|
+
constructor(scope) {
|
|
377
|
+
this.scope = scope;
|
|
378
|
+
// Register default adapters
|
|
379
|
+
this.register(new CodeWriteAdapter());
|
|
380
|
+
this.register(new CodeRunAdapter());
|
|
381
|
+
this.register(new ApiCallAdapter());
|
|
382
|
+
this.register(new GitAdapter());
|
|
383
|
+
this.register(new MessageAdapter());
|
|
384
|
+
}
|
|
385
|
+
register(adapter) {
|
|
386
|
+
this.adapters.set(adapter.type, adapter);
|
|
387
|
+
}
|
|
388
|
+
async execute(plan, verification) {
|
|
389
|
+
const start = Date.now();
|
|
390
|
+
// Gate: only execute verified plans
|
|
391
|
+
if (verification.overallVerdict !== 'pass' && verification.overallVerdict !== 'warn') {
|
|
392
|
+
return {
|
|
393
|
+
planId: plan.id,
|
|
394
|
+
status: 'failure',
|
|
395
|
+
stepExecutions: [],
|
|
396
|
+
completedSteps: 0,
|
|
397
|
+
totalSteps: plan.totalSteps,
|
|
398
|
+
totalDurationMs: Date.now() - start,
|
|
399
|
+
timestamp: new Date().toISOString(),
|
|
400
|
+
};
|
|
401
|
+
}
|
|
402
|
+
const stepExecutions = [];
|
|
403
|
+
const completedStepIds = new Set();
|
|
404
|
+
// Build dependency graph: resolve execution order
|
|
405
|
+
const executionOrder = this.resolveExecutionOrder(plan.steps);
|
|
406
|
+
for (const step of executionOrder) {
|
|
407
|
+
// Check dependencies are satisfied
|
|
408
|
+
const unsatisfiedDeps = step.dependsOn.filter(depId => !completedStepIds.has(depId));
|
|
409
|
+
if (unsatisfiedDeps.length > 0) {
|
|
410
|
+
const skipExecution = {
|
|
411
|
+
stepId: step.id,
|
|
412
|
+
status: 'skipped',
|
|
413
|
+
output: '',
|
|
414
|
+
error: `Skipped: dependencies not met [${unsatisfiedDeps.join(', ')}]`,
|
|
415
|
+
durationMs: 0,
|
|
416
|
+
timestamp: new Date().toISOString(),
|
|
417
|
+
};
|
|
418
|
+
stepExecutions.push(skipExecution);
|
|
419
|
+
continue;
|
|
420
|
+
}
|
|
421
|
+
// Check if this step was blocked by verification
|
|
422
|
+
if (verification.blockedSteps.includes(step.id)) {
|
|
423
|
+
const blockedExecution = {
|
|
424
|
+
stepId: step.id,
|
|
425
|
+
status: 'skipped',
|
|
426
|
+
output: '',
|
|
427
|
+
error: 'Step blocked by verification',
|
|
428
|
+
durationMs: 0,
|
|
429
|
+
timestamp: new Date().toISOString(),
|
|
430
|
+
};
|
|
431
|
+
stepExecutions.push(blockedExecution);
|
|
432
|
+
continue;
|
|
433
|
+
}
|
|
434
|
+
// Find adapter
|
|
435
|
+
const adapter = this.adapters.get(step.operation.type);
|
|
436
|
+
if (!adapter) {
|
|
437
|
+
const noAdapterExecution = {
|
|
438
|
+
stepId: step.id,
|
|
439
|
+
status: 'failure',
|
|
440
|
+
output: '',
|
|
441
|
+
error: `No adapter registered for operation type: ${step.operation.type}`,
|
|
442
|
+
durationMs: 0,
|
|
443
|
+
timestamp: new Date().toISOString(),
|
|
444
|
+
};
|
|
445
|
+
stepExecutions.push(noAdapterExecution);
|
|
446
|
+
// Stop on failure
|
|
447
|
+
return {
|
|
448
|
+
planId: plan.id,
|
|
449
|
+
status: 'partial',
|
|
450
|
+
stepExecutions,
|
|
451
|
+
completedSteps: completedStepIds.size,
|
|
452
|
+
totalSteps: plan.totalSteps,
|
|
453
|
+
totalDurationMs: Date.now() - start,
|
|
454
|
+
timestamp: new Date().toISOString(),
|
|
455
|
+
};
|
|
456
|
+
}
|
|
457
|
+
// Execute the step
|
|
458
|
+
const execution = await adapter.execute(step, this.scope);
|
|
459
|
+
stepExecutions.push(execution);
|
|
460
|
+
if (execution.status === 'success') {
|
|
461
|
+
completedStepIds.add(step.id);
|
|
462
|
+
}
|
|
463
|
+
else if (execution.status === 'failure') {
|
|
464
|
+
// Stop execution on failure, return partial result
|
|
465
|
+
return {
|
|
466
|
+
planId: plan.id,
|
|
467
|
+
status: 'partial',
|
|
468
|
+
stepExecutions,
|
|
469
|
+
completedSteps: completedStepIds.size,
|
|
470
|
+
totalSteps: plan.totalSteps,
|
|
471
|
+
totalDurationMs: Date.now() - start,
|
|
472
|
+
timestamp: new Date().toISOString(),
|
|
473
|
+
};
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
// All steps completed
|
|
477
|
+
const allSucceeded = stepExecutions.every(e => e.status === 'success' || e.status === 'skipped');
|
|
478
|
+
return {
|
|
479
|
+
planId: plan.id,
|
|
480
|
+
status: allSucceeded ? 'success' : 'partial',
|
|
481
|
+
stepExecutions,
|
|
482
|
+
completedSteps: completedStepIds.size,
|
|
483
|
+
totalSteps: plan.totalSteps,
|
|
484
|
+
totalDurationMs: Date.now() - start,
|
|
485
|
+
timestamp: new Date().toISOString(),
|
|
486
|
+
};
|
|
487
|
+
}
|
|
488
|
+
/**
|
|
489
|
+
* Topological sort of steps based on dependsOn relationships.
|
|
490
|
+
* Steps with no dependencies come first.
|
|
491
|
+
*/
|
|
492
|
+
resolveExecutionOrder(steps) {
|
|
493
|
+
const stepMap = new Map();
|
|
494
|
+
for (const step of steps) {
|
|
495
|
+
stepMap.set(step.id, step);
|
|
496
|
+
}
|
|
497
|
+
const visited = new Set();
|
|
498
|
+
const ordered = [];
|
|
499
|
+
const visit = (stepId) => {
|
|
500
|
+
if (visited.has(stepId))
|
|
501
|
+
return;
|
|
502
|
+
visited.add(stepId);
|
|
503
|
+
const step = stepMap.get(stepId);
|
|
504
|
+
if (!step)
|
|
505
|
+
return;
|
|
506
|
+
// Visit dependencies first
|
|
507
|
+
for (const depId of step.dependsOn) {
|
|
508
|
+
visit(depId);
|
|
509
|
+
}
|
|
510
|
+
ordered.push(step);
|
|
511
|
+
};
|
|
512
|
+
for (const step of steps) {
|
|
513
|
+
visit(step.id);
|
|
514
|
+
}
|
|
515
|
+
return ordered;
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
//# sourceMappingURL=executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/runtime/executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { EventEmitter } from 'node:events';
|
|
2
|
+
import type { SignalSourceType, Observation, FileSystemSignalConfig, WebhookSignalConfig, ScheduleSignalConfig } from './types.js';
|
|
3
|
+
export interface SignalAdapter {
|
|
4
|
+
readonly type: SignalSourceType;
|
|
5
|
+
start(emit: (obs: Observation) => void): Promise<void>;
|
|
6
|
+
stop(): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
export declare class FileWatcherAdapter implements SignalAdapter {
|
|
9
|
+
readonly type: SignalSourceType;
|
|
10
|
+
private watchers;
|
|
11
|
+
private config;
|
|
12
|
+
constructor(config: FileSystemSignalConfig);
|
|
13
|
+
start(emit: (obs: Observation) => void): Promise<void>;
|
|
14
|
+
stop(): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
export declare class WebhookAdapter implements SignalAdapter {
|
|
17
|
+
readonly type: SignalSourceType;
|
|
18
|
+
private server;
|
|
19
|
+
private config;
|
|
20
|
+
constructor(config: WebhookSignalConfig);
|
|
21
|
+
start(emit: (obs: Observation) => void): Promise<void>;
|
|
22
|
+
stop(): Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
export declare class ScheduleAdapter implements SignalAdapter {
|
|
25
|
+
readonly type: SignalSourceType;
|
|
26
|
+
private timer;
|
|
27
|
+
private tickCount;
|
|
28
|
+
private config;
|
|
29
|
+
constructor(config: ScheduleSignalConfig);
|
|
30
|
+
start(emit: (obs: Observation) => void): Promise<void>;
|
|
31
|
+
stop(): Promise<void>;
|
|
32
|
+
}
|
|
33
|
+
export declare class Observer extends EventEmitter {
|
|
34
|
+
private adapters;
|
|
35
|
+
private queue;
|
|
36
|
+
private running;
|
|
37
|
+
private waitResolve;
|
|
38
|
+
register(adapter: SignalAdapter): void;
|
|
39
|
+
start(): Promise<void>;
|
|
40
|
+
stop(): Promise<void>;
|
|
41
|
+
dequeue(): Promise<Observation | null>;
|
|
42
|
+
get queueDepth(): number;
|
|
43
|
+
get isRunning(): boolean;
|
|
44
|
+
}
|