@executioncontrolprotocol/cli 0.3.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/bin/ecp.cjs ADDED
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Launcher so Windows npm bin shims always invoke Node (never open .ts in an editor).
4
+ */
5
+ const { spawnSync } = require("node:child_process");
6
+ const path = require("node:path");
7
+ const fs = require("node:fs");
8
+
9
+ const entry = path.join(__dirname, "..", "dist", "index.js");
10
+ if (!fs.existsSync(entry)) {
11
+ console.error(
12
+ "ecp: dist/index.js not found. Run from repo root: npm run build",
13
+ );
14
+ process.exit(1);
15
+ }
16
+
17
+ const r = spawnSync(process.execPath, [entry, ...process.argv.slice(2)], {
18
+ stdio: "inherit",
19
+ env: process.env,
20
+ });
21
+ process.exit(r.status === null ? 1 : r.status);
@@ -0,0 +1,13 @@
1
+ /**
2
+ * ECP CLI — run Context manifests from the command line.
3
+ *
4
+ * Usage:
5
+ * ecp run <context.yaml> [--input key=value ...] [--debug] [--model <model>] [--trace]
6
+ * ecp validate <context.yaml>
7
+ * ecp trace <run_id>
8
+ * ecp graph <run_id>
9
+ *
10
+ * @category CLI
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
package/dist/index.js ADDED
@@ -0,0 +1,471 @@
1
+ /**
2
+ * ECP CLI — run Context manifests from the command line.
3
+ *
4
+ * Usage:
5
+ * ecp run <context.yaml> [--input key=value ...] [--debug] [--model <model>] [--trace]
6
+ * ecp validate <context.yaml>
7
+ * ecp trace <run_id>
8
+ * ecp graph <run_id>
9
+ *
10
+ * @category CLI
11
+ */
12
+ import { parseArgs } from "node:util";
13
+ import { resolve } from "node:path";
14
+ import { readFileSync, existsSync } from "node:fs";
15
+ import ora from "ora";
16
+ import { ECPEngine, loadContext, resolveInputs, resolveSystemConfig } from "@executioncontrolprotocol/runtime";
17
+ import { MCPToolInvoker } from "@executioncontrolprotocol/runtime";
18
+ import { A2AAgentTransport } from "@executioncontrolprotocol/runtime";
19
+ import { ExtensionRegistry, registerBuiltinModelProviders, registerBuiltinProgressLoggers } from "@executioncontrolprotocol/runtime";
20
+ import { TraceCollector, ConsoleTraceExporter, JsonFileTraceExporter, formatTrace, renderGraph, } from "@executioncontrolprotocol/runtime";
21
+ function collectExecutionObjectNames(context) {
22
+ const names = new Set();
23
+ const addName = (name) => {
24
+ names.add(name);
25
+ };
26
+ const visitOrchestrator = (orchestrator) => {
27
+ addName(orchestrator.name);
28
+ for (const executor of orchestrator.executors ?? []) {
29
+ addName(executor.name);
30
+ }
31
+ for (const child of orchestrator.orchestrators ?? []) {
32
+ visitOrchestrator(child);
33
+ }
34
+ };
35
+ if (context.orchestrator) {
36
+ visitOrchestrator(context.orchestrator);
37
+ }
38
+ for (const executor of context.executors ?? []) {
39
+ addName(executor.name);
40
+ }
41
+ return [...names];
42
+ }
43
+ function phaseToLabel(status) {
44
+ const labels = {
45
+ loading: "Loading context...",
46
+ "hydrating-seed": "Hydrating seed mounts...",
47
+ "running-orchestrator": "Running orchestrator...",
48
+ delegating: "Delegating tasks...",
49
+ "hydrating-focus": "Hydrating focus mounts...",
50
+ "hydrating-deep": "Hydrating deep mounts...",
51
+ "running-specialist": "Running specialist...",
52
+ merging: "Merging outputs...",
53
+ completed: "Completed.",
54
+ failed: "Failed.",
55
+ };
56
+ return labels[status] ?? status;
57
+ }
58
+ function createProgressHandler(spinner, contextPath, contextName) {
59
+ let currentText = "Starting...";
60
+ const completedSteps = [];
61
+ function redraw() {
62
+ const isTTY = process.stderr.isTTY;
63
+ if (isTTY) {
64
+ process.stderr.write("\x1b[2J\x1b[H");
65
+ }
66
+ process.stderr.write(`\n Running: ${contextPath}\n`);
67
+ process.stderr.write(` Context: ${contextName}\n\n`);
68
+ for (const s of completedSteps) {
69
+ process.stderr.write(` Step ${s.step}: ${s.description} (${s.durationMs}ms)\n`);
70
+ if (s.model) {
71
+ process.stderr.write(` Model: ${s.model}\n`);
72
+ }
73
+ if (s.tokens && s.tokens.total > 0) {
74
+ process.stderr.write(` Tokens: ${s.tokens.prompt} prompt + ${s.tokens.completion} completion = ${s.tokens.total} total\n`);
75
+ }
76
+ if (s.output !== undefined) {
77
+ process.stderr.write(` Output:\n`);
78
+ const json = JSON.stringify(s.output, null, 2);
79
+ for (const line of json.split(/\r?\n/)) {
80
+ process.stderr.write(` ${line}\n`);
81
+ }
82
+ }
83
+ process.stderr.write("\n");
84
+ }
85
+ spinner.start(currentText);
86
+ }
87
+ function appendLastStep() {
88
+ const s = completedSteps[completedSteps.length - 1];
89
+ if (!s)
90
+ return;
91
+ spinner.stopAndPersist({
92
+ text: `Step ${s.step}: ${s.description} (${s.durationMs}ms)`,
93
+ });
94
+ process.stderr.write(` Model: ${s.model ?? "n/a"}\n`);
95
+ if (s.tokens && s.tokens.total > 0) {
96
+ process.stderr.write(` Tokens: ${s.tokens.prompt} prompt + ${s.tokens.completion} completion = ${s.tokens.total} total\n`);
97
+ }
98
+ if (s.output !== undefined) {
99
+ process.stderr.write(` Output:\n`);
100
+ const json = JSON.stringify(s.output, null, 2);
101
+ for (const line of json.split(/\r?\n/)) {
102
+ process.stderr.write(` ${line}\n`);
103
+ }
104
+ }
105
+ process.stderr.write("\n");
106
+ spinner.start(currentText);
107
+ }
108
+ return async (event) => {
109
+ switch (event.type) {
110
+ case "phase":
111
+ currentText = phaseToLabel(event.status);
112
+ spinner.text = currentText;
113
+ break;
114
+ case "step_start":
115
+ currentText = event.description;
116
+ spinner.text = currentText;
117
+ break;
118
+ case "step_complete":
119
+ if (event.kind === "executor") {
120
+ completedSteps.push({
121
+ step: event.step,
122
+ executorName: event.executorName ?? "",
123
+ description: event.description,
124
+ durationMs: event.durationMs,
125
+ tokens: event.tokens,
126
+ model: event.model,
127
+ output: event.output,
128
+ });
129
+ spinner.stop();
130
+ if (process.stderr.isTTY) {
131
+ redraw();
132
+ }
133
+ else {
134
+ appendLastStep();
135
+ }
136
+ }
137
+ break;
138
+ case "executor_reasoning":
139
+ spinner.stop();
140
+ const lines = event.reasoning.split(/\r?\n/);
141
+ process.stderr.write(`\n [${event.executorName}] Chain of thought:\n`);
142
+ for (const line of lines) {
143
+ process.stderr.write(` ${line}\n`);
144
+ }
145
+ process.stderr.write("\n");
146
+ spinner.start(currentText);
147
+ break;
148
+ }
149
+ };
150
+ }
151
+ function printUsage() {
152
+ console.log(`
153
+ ECP CLI — Execution Control Protocol runner
154
+
155
+ Usage:
156
+ ecp run <context.yaml> Execute a Context manifest
157
+ ecp validate <context.yaml> Validate a Context manifest
158
+ ecp trace <run_id> Display execution trace
159
+ ecp graph <run_id> Display execution graph
160
+
161
+ Options:
162
+ --input, -i <key=value> Set an input value (repeatable)
163
+ --model, -m <model> Override the default model (e.g. gpt-4o-mini)
164
+ --provider, -p <name> Model provider: openai (default) or ollama
165
+ --enable, -e <id> Extension(s) to enable for this run (repeatable or comma-separated). Overrides system config defaultEnable.
166
+ --config, -c <path> Path to system config (ecp.config.yaml). Default: ./ecp.config.yaml then ~/.ecp/config.yaml
167
+ --ollama-base-url <url> Ollama server URL (default: http://localhost:11434)
168
+ --trace, -t Enable tracing (saves to ./traces/<run_id>.json)
169
+ --trace-dir <dir> Directory for trace files (default: ./traces)
170
+ --progress-logger <id> Enable a progress logger (e.g. file). Repeatable. Uses config from ~/.ecp/config.yaml
171
+ --extension-security <json> JSON security policy for extension loading
172
+ --tool-servers <json> JSON map of tool server configs
173
+ --agent-endpoints <json> JSON map of agent endpoints
174
+ --debug, -d Enable debug logging
175
+ --help, -h Show this help message
176
+
177
+ Examples:
178
+ ecp run spec.yaml --input shopifyStoreId=store-123 --trace
179
+ ecp trace run-1234567890-abc123
180
+ ecp graph run-1234567890-abc123
181
+ `);
182
+ }
183
+ function parseCliArgs() {
184
+ const { values, positionals } = parseArgs({
185
+ allowPositionals: true,
186
+ options: {
187
+ input: { type: "string", short: "i", multiple: true },
188
+ model: { type: "string", short: "m" },
189
+ provider: { type: "string", short: "p", default: "openai" },
190
+ enable: { type: "string", short: "e", multiple: true },
191
+ config: { type: "string", short: "c" },
192
+ "ollama-base-url": { type: "string", default: "http://localhost:11434" },
193
+ trace: { type: "boolean", short: "t", default: false },
194
+ "trace-dir": { type: "string", default: "./traces" },
195
+ "progress-logger": { type: "string", short: "l", multiple: true },
196
+ debug: { type: "boolean", short: "d", default: false },
197
+ help: { type: "boolean", short: "h", default: false },
198
+ "tool-servers": { type: "string", default: "" },
199
+ "agent-endpoints": { type: "string", default: "" },
200
+ "extension-security": { type: "string", default: "" },
201
+ },
202
+ });
203
+ const enableRaw = values.enable ?? [];
204
+ const enable = [];
205
+ for (const v of enableRaw) {
206
+ enable.push(...v.split(",").map((s) => s.trim()).filter(Boolean));
207
+ }
208
+ if (values.help || positionals.length === 0) {
209
+ printUsage();
210
+ process.exit(0);
211
+ }
212
+ const command = positionals[0];
213
+ const rawArg = positionals[1] ?? "";
214
+ const contextPath = rawArg && (command === "run" || command === "validate")
215
+ ? resolve(rawArg) : rawArg;
216
+ const inputs = {};
217
+ for (const kv of values.input ?? []) {
218
+ const eqIdx = kv.indexOf("=");
219
+ if (eqIdx === -1) {
220
+ console.error(`Invalid input format: "${kv}" (expected key=value)`);
221
+ process.exit(1);
222
+ }
223
+ const key = kv.slice(0, eqIdx);
224
+ const rawValue = kv.slice(eqIdx + 1);
225
+ if (rawValue === "true")
226
+ inputs[key] = true;
227
+ else if (rawValue === "false")
228
+ inputs[key] = false;
229
+ else if (!isNaN(Number(rawValue)) && rawValue !== "")
230
+ inputs[key] = Number(rawValue);
231
+ else
232
+ inputs[key] = rawValue;
233
+ }
234
+ return {
235
+ command,
236
+ contextPath,
237
+ inputs,
238
+ debug: values.debug,
239
+ trace: values.trace,
240
+ traceDir: values["trace-dir"] ?? "./traces",
241
+ model: values.model,
242
+ provider: values.provider ?? "openai",
243
+ enable,
244
+ configPath: values.config ?? "",
245
+ ollamaBaseUrl: values["ollama-base-url"] ?? "http://localhost:11434",
246
+ toolServers: values["tool-servers"] ?? "",
247
+ agentEndpoints: values["agent-endpoints"] ?? "",
248
+ extensionSecurity: values["extension-security"] ?? "",
249
+ progressLogger: (values["progress-logger"] ?? []).flatMap((v) => v.split(",").map((s) => s.trim()).filter(Boolean)),
250
+ };
251
+ }
252
+ async function runValidate(args) {
253
+ console.log(`\nValidating: ${args.contextPath}\n`);
254
+ try {
255
+ const context = loadContext(args.contextPath);
256
+ resolveInputs(context, args.inputs);
257
+ const strategy = context.orchestration?.strategy ?? context.orchestrator?.strategy;
258
+ const executionObjectNames = collectExecutionObjectNames(context);
259
+ console.log(` Context: ${context.metadata.name} v${context.metadata.version}`);
260
+ console.log(` Strategy: ${strategy ?? "unknown"}`);
261
+ console.log(` Execution objects: ${executionObjectNames.join(", ")}`);
262
+ console.log(` Schemas: ${Object.keys(context.schemas ?? {}).join(", ")}`);
263
+ console.log(`\n Validation passed.\n`);
264
+ }
265
+ catch (err) {
266
+ console.error(`\n Validation failed: ${err instanceof Error ? err.message : String(err)}\n`);
267
+ process.exit(1);
268
+ }
269
+ }
270
+ async function runExecute(args) {
271
+ const context = loadContext(args.contextPath);
272
+ const cwd = process.cwd();
273
+ const systemConfig = resolveSystemConfig(args.configPath || undefined, cwd);
274
+ const enableFromCli = args.enable.length > 0
275
+ ? args.enable
276
+ : systemConfig?.extensions?.defaultEnable ?? [args.provider];
277
+ const allowEnable = systemConfig?.extensions?.allowEnable;
278
+ if (allowEnable !== undefined && allowEnable.length > 0) {
279
+ for (const id of enableFromCli) {
280
+ if (!allowEnable.includes(id)) {
281
+ console.error(`\n Extension "${id}" is not in system config allowEnable. Allowed: ${allowEnable.join(", ")}\n`);
282
+ process.exit(1);
283
+ }
284
+ }
285
+ }
286
+ const registry = new ExtensionRegistry();
287
+ registerBuiltinModelProviders(registry, {
288
+ version: "0.3.0",
289
+ openai: {
290
+ defaultModel: args.model,
291
+ },
292
+ ollama: {
293
+ baseURL: args.ollamaBaseUrl,
294
+ defaultModel: args.model,
295
+ },
296
+ });
297
+ registerBuiltinProgressLoggers(registry, {
298
+ version: "0.3.0",
299
+ file: {},
300
+ });
301
+ registry.lock();
302
+ let modelProvider;
303
+ try {
304
+ modelProvider = registry.createModelProvider(args.provider);
305
+ }
306
+ catch {
307
+ console.error(`\n Unknown provider "${args.provider}". Registered providers: ${registry.listModelProviders().map((p) => p.id).join(", ")}\n`);
308
+ process.exit(1);
309
+ }
310
+ const toolInvoker = new MCPToolInvoker();
311
+ const agentTransport = new A2AAgentTransport();
312
+ const toolServers = args.toolServers
313
+ ? JSON.parse(args.toolServers)
314
+ : undefined;
315
+ const agentEndpoints = args.agentEndpoints
316
+ ? JSON.parse(args.agentEndpoints)
317
+ : undefined;
318
+ const extensionSecurity = args.extensionSecurity
319
+ ? JSON.parse(args.extensionSecurity)
320
+ : (systemConfig?.extensions?.security ?? context.extensions?.security);
321
+ const progressLoggerCallbacks = [];
322
+ const plConfig = systemConfig?.progressLoggers;
323
+ const plEnable = args.progressLogger.length > 0 ? args.progressLogger : plConfig?.defaultEnable ?? [];
324
+ const plAllow = plConfig?.allowEnable;
325
+ if (plAllow !== undefined && plAllow.length > 0) {
326
+ for (const id of plEnable) {
327
+ if (!plAllow.includes(id)) {
328
+ console.error(`\n Progress logger "${id}" is not in system config progressLoggers.allowEnable. Allowed: ${plAllow.join(", ")}\n`);
329
+ process.exit(1);
330
+ }
331
+ }
332
+ }
333
+ for (const id of plEnable) {
334
+ try {
335
+ const cb = registry.createProgressLogger(id, plConfig?.config?.[id]);
336
+ progressLoggerCallbacks.push(cb);
337
+ }
338
+ catch (err) {
339
+ console.error(`\n Failed to create progress logger "${id}": ${err instanceof Error ? err.message : String(err)}\n`);
340
+ process.exit(1);
341
+ }
342
+ }
343
+ const spinner = args.debug ? undefined : ora({ stream: process.stderr }).start("Loading context...");
344
+ const builtInProgress = spinner
345
+ ? createProgressHandler(spinner, args.contextPath, context.metadata.name)
346
+ : undefined;
347
+ const onProgress = builtInProgress && progressLoggerCallbacks.length > 0
348
+ ? [builtInProgress, ...progressLoggerCallbacks]
349
+ : builtInProgress ?? (progressLoggerCallbacks.length > 0 ? progressLoggerCallbacks : undefined);
350
+ if (args.debug) {
351
+ console.log(`\n Running: ${args.contextPath}\n`);
352
+ }
353
+ const engine = new ECPEngine(modelProvider, toolInvoker, agentTransport, {
354
+ toolServers,
355
+ agentEndpoints,
356
+ defaultModel: args.model,
357
+ modelOverride: args.model,
358
+ debug: args.debug,
359
+ trace: args.trace,
360
+ onProgress,
361
+ extensions: {
362
+ registry,
363
+ enable: enableFromCli,
364
+ allowEnable: systemConfig?.extensions?.allowEnable,
365
+ security: extensionSecurity,
366
+ },
367
+ });
368
+ if (args.trace) {
369
+ const collector = new TraceCollector();
370
+ collector.addExporters(new ConsoleTraceExporter(), new JsonFileTraceExporter({ outputDir: args.traceDir }));
371
+ engine.setTraceCollector(collector);
372
+ }
373
+ const result = await engine.run({
374
+ context,
375
+ inputs: args.inputs,
376
+ });
377
+ if (spinner) {
378
+ if (result.success) {
379
+ spinner.succeed("Execution completed.");
380
+ }
381
+ else {
382
+ spinner.fail("Execution failed.");
383
+ }
384
+ }
385
+ console.log("\n--- Execution Result ---");
386
+ console.log(` Run ID: ${result.runId}`);
387
+ console.log(` Context: ${result.contextName} v${result.contextVersion}`);
388
+ console.log(` Success: ${result.success}`);
389
+ console.log(` Duration: ${result.durationMs}ms`);
390
+ console.log(` Tool calls: ${result.totalBudgetUsage.toolCalls}`);
391
+ if (result.error) {
392
+ console.log(` Error: ${result.error}`);
393
+ }
394
+ if (result.output) {
395
+ console.log("\n--- Output ---");
396
+ console.log(JSON.stringify(result.output, null, 2));
397
+ }
398
+ if (!spinner) {
399
+ console.log("\n--- Executor Outputs ---");
400
+ for (const [name, output] of Object.entries(result.executorOutputs)) {
401
+ console.log(`\n [${name}]`);
402
+ console.log(JSON.stringify(output, null, 2));
403
+ }
404
+ }
405
+ if (args.debug) {
406
+ console.log("\n--- Execution Log ---");
407
+ for (const entry of result.log) {
408
+ console.log(` [${entry.level.toUpperCase().padEnd(5)}] ${entry.message}`);
409
+ }
410
+ }
411
+ if (args.trace) {
412
+ console.log(`\n Trace saved to: ${args.traceDir}/${result.runId}.json`);
413
+ console.log(` View with: ecp trace ${result.runId}`);
414
+ console.log(` Graph with: ecp graph ${result.runId}`);
415
+ }
416
+ console.log("");
417
+ process.exit(result.success ? 0 : 1);
418
+ }
419
+ function loadTrace(runId, traceDir) {
420
+ const filePath = resolve(traceDir, `${runId}.json`);
421
+ if (!existsSync(filePath)) {
422
+ console.error(`\n Trace not found: ${filePath}`);
423
+ console.error(` Run with --trace to generate: ecp run <context.yaml> --trace\n`);
424
+ process.exit(1);
425
+ }
426
+ return JSON.parse(readFileSync(filePath, "utf-8"));
427
+ }
428
+ async function runTrace(args) {
429
+ const runId = args.contextPath || "";
430
+ if (!runId) {
431
+ console.error("Error: run ID is required\nUsage: ecp trace <run_id>");
432
+ process.exit(1);
433
+ }
434
+ const trace = loadTrace(runId, args.traceDir);
435
+ console.log(formatTrace(trace));
436
+ }
437
+ async function runGraph(args) {
438
+ const runId = args.contextPath || "";
439
+ if (!runId) {
440
+ console.error("Error: run ID is required\nUsage: ecp graph <run_id>");
441
+ process.exit(1);
442
+ }
443
+ const trace = loadTrace(runId, args.traceDir);
444
+ console.log(renderGraph(trace));
445
+ }
446
+ async function main() {
447
+ const args = parseCliArgs();
448
+ switch (args.command) {
449
+ case "run":
450
+ await runExecute(args);
451
+ break;
452
+ case "validate":
453
+ await runValidate(args);
454
+ break;
455
+ case "trace":
456
+ await runTrace(args);
457
+ break;
458
+ case "graph":
459
+ await runGraph(args);
460
+ break;
461
+ default:
462
+ console.error(`Unknown command: "${args.command}"`);
463
+ printUsage();
464
+ process.exit(1);
465
+ }
466
+ }
467
+ main().catch((err) => {
468
+ console.error("Fatal error:", err);
469
+ process.exit(1);
470
+ });
471
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "@executioncontrolprotocol/cli",
3
+ "version": "0.3.0",
4
+ "description": "CLI for the ECP runtime engine — run Context manifests from the command line",
5
+ "private": false,
6
+ "type": "module",
7
+ "bin": {
8
+ "ecp": "./bin/ecp.cjs"
9
+ },
10
+ "files": [
11
+ "bin/ecp.cjs",
12
+ "dist"
13
+ ],
14
+ "scripts": {
15
+ "build": "tsc -b",
16
+ "start": "tsx src/index.ts"
17
+ },
18
+ "dependencies": {
19
+ "@executioncontrolprotocol/runtime": "^0.3.0",
20
+ "ora": "^8.1.1"
21
+ },
22
+ "devDependencies": {
23
+ "@executioncontrolprotocol/spec": "^0.3.0",
24
+ "@types/node": "^25.3.3",
25
+ "tsx": "^4.0.0",
26
+ "typescript": "^5.7.0"
27
+ }
28
+ }