@executioncontrolprotocol/cli 0.3.0 → 0.4.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/README.md +22 -0
- package/bin/dev.cmd +3 -0
- package/bin/dev.js +8 -0
- package/bin/run.cmd +3 -0
- package/bin/run.js +8 -0
- package/dist/commands/graph.d.ts +13 -0
- package/dist/commands/graph.d.ts.map +1 -0
- package/dist/commands/graph.js +36 -0
- package/dist/commands/graph.js.map +1 -0
- package/dist/commands/run.d.ts +24 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +349 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/trace/list.d.ts +9 -0
- package/dist/commands/trace/list.d.ts.map +1 -0
- package/dist/commands/trace/list.js +32 -0
- package/dist/commands/trace/list.js.map +1 -0
- package/dist/commands/trace.d.ts +13 -0
- package/dist/commands/trace.d.ts.map +1 -0
- package/dist/commands/trace.js +40 -0
- package/dist/commands/trace.js.map +1 -0
- package/dist/commands/validate.d.ts +13 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +89 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/lib/ecp-home.d.ts +3 -0
- package/dist/lib/ecp-home.d.ts.map +1 -0
- package/dist/lib/ecp-home.js +9 -0
- package/dist/lib/ecp-home.js.map +1 -0
- package/dist/lib/inputs.d.ts +3 -0
- package/dist/lib/inputs.d.ts.map +1 -0
- package/dist/lib/inputs.js +7 -0
- package/dist/lib/inputs.js.map +1 -0
- package/dist/lib/parsing.d.ts +12 -0
- package/dist/lib/parsing.d.ts.map +1 -0
- package/dist/lib/parsing.js +57 -0
- package/dist/lib/parsing.js.map +1 -0
- package/dist/lib/progress.d.ts +4 -0
- package/dist/lib/progress.d.ts.map +1 -0
- package/dist/lib/progress.js +111 -0
- package/dist/lib/progress.js.map +1 -0
- package/dist/lib/trace-files.d.ts +2 -0
- package/dist/lib/trace-files.d.ts.map +1 -0
- package/dist/lib/trace-files.js +14 -0
- package/dist/lib/trace-files.js.map +1 -0
- package/dist/lib/trace-view.d.ts +4 -0
- package/dist/lib/trace-view.d.ts.map +1 -0
- package/dist/lib/trace-view.js +8 -0
- package/dist/lib/trace-view.js.map +1 -0
- package/package.json +37 -7
- package/bin/ecp.cjs +0 -21
- package/dist/index.d.ts +0 -13
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -471
- package/dist/index.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,MAAM,aAAa,CAAC;AAqCnD,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,MAAM,CAAC,OAAO,SAAiC;IAE/C,MAAM,CAAC,KAAK;;;MAYV;IAEF,MAAM,CAAC,IAAI;;MAKT;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA8C3B"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { Command, Flags, Args } from "@oclif/core";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import { loadContext, resolveInputs } from "@executioncontrolprotocol/runtime";
|
|
4
|
+
import { parseKeyValueInputs } from "../lib/parsing.js";
|
|
5
|
+
import { getRequiredInputNames } from "../lib/inputs.js";
|
|
6
|
+
function collectExecutionObjectNames(context) {
|
|
7
|
+
const names = new Set();
|
|
8
|
+
const addName = (name) => {
|
|
9
|
+
names.add(name);
|
|
10
|
+
};
|
|
11
|
+
const visitOrchestrator = (orchestrator) => {
|
|
12
|
+
addName(orchestrator.name);
|
|
13
|
+
for (const executor of orchestrator.executors ?? []) {
|
|
14
|
+
addName(executor.name);
|
|
15
|
+
}
|
|
16
|
+
for (const child of orchestrator.orchestrators ?? []) {
|
|
17
|
+
visitOrchestrator(child);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
if (context.orchestrator) {
|
|
21
|
+
visitOrchestrator(context.orchestrator);
|
|
22
|
+
}
|
|
23
|
+
for (const executor of context.executors ?? []) {
|
|
24
|
+
addName(executor.name);
|
|
25
|
+
}
|
|
26
|
+
return [...names];
|
|
27
|
+
}
|
|
28
|
+
export default class Validate extends Command {
|
|
29
|
+
static summary = "Validate a Context manifest";
|
|
30
|
+
static flags = {
|
|
31
|
+
input: Flags.string({
|
|
32
|
+
char: "i",
|
|
33
|
+
multiple: true,
|
|
34
|
+
description: "Set an input value (repeatable, key=value)",
|
|
35
|
+
summary: "Input value (key=value)",
|
|
36
|
+
}),
|
|
37
|
+
"skip-inputs": Flags.boolean({
|
|
38
|
+
description: "Validate the Context manifest itself but skip runtime input resolution (prints required inputs instead).",
|
|
39
|
+
default: false,
|
|
40
|
+
}),
|
|
41
|
+
};
|
|
42
|
+
static args = {
|
|
43
|
+
contextPath: Args.string({
|
|
44
|
+
required: true,
|
|
45
|
+
description: "Path to context.yaml (or context.json)",
|
|
46
|
+
}),
|
|
47
|
+
};
|
|
48
|
+
async run() {
|
|
49
|
+
const { args, flags } = await this.parse(Validate);
|
|
50
|
+
const contextPath = resolve(args.contextPath);
|
|
51
|
+
console.log(`\nValidating: ${contextPath}\n`);
|
|
52
|
+
let context;
|
|
53
|
+
try {
|
|
54
|
+
const inputs = parseKeyValueInputs(flags.input, "--input");
|
|
55
|
+
context = loadContext(contextPath);
|
|
56
|
+
if (!flags["skip-inputs"]) {
|
|
57
|
+
resolveInputs(context, inputs);
|
|
58
|
+
}
|
|
59
|
+
const strategy = context.orchestration?.strategy ?? context.orchestrator?.strategy;
|
|
60
|
+
const executionObjectNames = collectExecutionObjectNames(context);
|
|
61
|
+
console.log(` Context: ${context.metadata.name} v${context.metadata.version}`);
|
|
62
|
+
console.log(` Strategy: ${strategy ?? "unknown"}`);
|
|
63
|
+
console.log(` Execution objects: ${executionObjectNames.join(", ")}`);
|
|
64
|
+
console.log(` Schemas: ${Object.keys(context.schemas ?? {}).join(", ")}`);
|
|
65
|
+
if (flags["skip-inputs"]) {
|
|
66
|
+
const requiredInputs = getRequiredInputNames(context);
|
|
67
|
+
if (requiredInputs.length > 0) {
|
|
68
|
+
console.log(`\n Required inputs (from Context): ${requiredInputs.join(", ")}`);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
console.log(`\n No required inputs declared in Context.`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
console.log(`\n Validation passed.\n`);
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
78
|
+
const missing = msg.match(/^Missing required input: "([^"]+)"$/);
|
|
79
|
+
if (missing && context) {
|
|
80
|
+
const inputName = missing[1];
|
|
81
|
+
this.error(`\n Missing required input "${inputName}" is defined in the Context.\n` +
|
|
82
|
+
` Provide it via --input ${inputName}=<value> (e.g. -i ${inputName}="...").\n`, { exit: 1 });
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
this.error(`\n Validation failed: ${msg}\n`, { exit: 1 });
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAG/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,SAAS,2BAA2B,CAAC,OAAmB;IACtD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAEhC,MAAM,OAAO,GAAG,CAAC,IAAY,EAAQ,EAAE;QACrC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,CAAC,YAA0B,EAAQ,EAAE;QAC7D,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC3B,KAAK,MAAM,QAAQ,IAAI,YAAY,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;YACpD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC;YACrD,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,iBAAiB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;QAC/C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,MAAM,CAAC,OAAO,GAAG,6BAA6B,CAAC;IAE/C,MAAM,CAAC,KAAK,GAAG;QACb,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;YAClB,IAAI,EAAE,GAAG;YACT,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,4CAA4C;YACzD,OAAO,EAAE,yBAAyB;SACnC,CAAC;QACF,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC;YAC3B,WAAW,EACT,0GAA0G;YAC5G,OAAO,EAAE,KAAK;SACf,CAAC;KACH,CAAC;IAEF,MAAM,CAAC,IAAI,GAAG;QACZ,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC;YACvB,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,wCAAwC;SACtD,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACnD,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE9C,OAAO,CAAC,GAAG,CAAC,iBAAiB,WAAW,IAAI,CAAC,CAAC;QAE9C,IAAI,OAA+B,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,CAAC,KAA6B,EAAE,SAAS,CAAC,CAAC;YACnF,OAAO,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;YACnC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC1B,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACjC,CAAC;YAED,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,EAAE,QAAQ,IAAI,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC;YACnF,MAAM,oBAAoB,GAAG,2BAA2B,CAAC,OAAO,CAAC,CAAC;YAElE,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;YAChF,OAAO,CAAC,GAAG,CAAC,eAAe,QAAQ,IAAI,SAAS,EAAE,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,wBAAwB,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAE3E,IAAI,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;gBACzB,MAAM,cAAc,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;gBACtD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC9B,OAAO,CAAC,GAAG,CAAC,uCAAuC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAClF,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;gBAC7D,CAAC;YACH,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACjE,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;gBACvB,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC7B,IAAI,CAAC,KAAK,CACR,+BAA+B,SAAS,gCAAgC;oBACtE,4BAA4B,SAAS,qBAAqB,SAAS,YAAY,EACjF,EAAE,IAAI,EAAE,CAAC,EAAE,CACZ,CAAC;gBACF,OAAO;YACT,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,0BAA0B,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ecp-home.d.ts","sourceRoot":"","sources":["../../src/lib/ecp-home.ts"],"names":[],"mappings":"AAGA,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { homedir } from "node:os";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
export function getEcpHomeDir() {
|
|
4
|
+
return resolve(homedir(), ".ecp");
|
|
5
|
+
}
|
|
6
|
+
export function getDefaultTraceDir() {
|
|
7
|
+
return resolve(getEcpHomeDir(), "traces");
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=ecp-home.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ecp-home.js","sourceRoot":"","sources":["../../src/lib/ecp-home.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,UAAU,aAAa;IAC3B,OAAO,OAAO,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,OAAO,CAAC,aAAa,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputs.d.ts","sourceRoot":"","sources":["../../src/lib/inputs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAEjE,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,EAAE,CAKnE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputs.js","sourceRoot":"","sources":["../../src/lib/inputs.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,qBAAqB,CAAC,OAAmB;IACvD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;IAClC,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;SACxB,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,CAAE,GAA8B,CAAC,QAAQ,KAAK,IAAI,CAAC;SAC3E,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type InputValue = string | number | boolean;
|
|
2
|
+
/**
|
|
3
|
+
* Parse `--input key=value` occurrences.
|
|
4
|
+
* - `true`/`false` become booleans
|
|
5
|
+
* - numeric-looking values become numbers
|
|
6
|
+
* - everything else stays a string
|
|
7
|
+
*/
|
|
8
|
+
export declare function parseKeyValueInputs(raw: string[] | undefined, flagName?: string): Record<string, InputValue>;
|
|
9
|
+
export declare function splitCommaSeparated(raw: string[] | undefined): string[];
|
|
10
|
+
export declare function parseJsonObject<T = unknown>(raw: string | undefined, flagName: string): T | undefined;
|
|
11
|
+
export declare function resolveAndValidatePath(pathRaw: string, flagName: string): string;
|
|
12
|
+
//# sourceMappingURL=parsing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parsing.d.ts","sourceRoot":"","sources":["../../src/lib/parsing.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEnD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EAAE,GAAG,SAAS,EACzB,QAAQ,SAAY,GACnB,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAoB5B;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,MAAM,EAAE,CAMvE;AAED,wBAAgB,eAAe,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAQrG;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMhF"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
/**
|
|
4
|
+
* Parse `--input key=value` occurrences.
|
|
5
|
+
* - `true`/`false` become booleans
|
|
6
|
+
* - numeric-looking values become numbers
|
|
7
|
+
* - everything else stays a string
|
|
8
|
+
*/
|
|
9
|
+
export function parseKeyValueInputs(raw, flagName = "--input") {
|
|
10
|
+
const inputs = {};
|
|
11
|
+
for (const kv of raw ?? []) {
|
|
12
|
+
const eqIdx = kv.indexOf("=");
|
|
13
|
+
if (eqIdx === -1) {
|
|
14
|
+
throw new Error(`Invalid ${flagName} value "${kv}" (expected key=value).`);
|
|
15
|
+
}
|
|
16
|
+
const key = kv.slice(0, eqIdx).trim();
|
|
17
|
+
const valueRaw = kv.slice(eqIdx + 1);
|
|
18
|
+
if (!key) {
|
|
19
|
+
throw new Error(`Invalid ${flagName} value "${kv}" (missing key).`);
|
|
20
|
+
}
|
|
21
|
+
if (valueRaw === "true")
|
|
22
|
+
inputs[key] = true;
|
|
23
|
+
else if (valueRaw === "false")
|
|
24
|
+
inputs[key] = false;
|
|
25
|
+
else if (!isNaN(Number(valueRaw)) && valueRaw !== "")
|
|
26
|
+
inputs[key] = Number(valueRaw);
|
|
27
|
+
else
|
|
28
|
+
inputs[key] = valueRaw;
|
|
29
|
+
}
|
|
30
|
+
return inputs;
|
|
31
|
+
}
|
|
32
|
+
export function splitCommaSeparated(raw) {
|
|
33
|
+
const out = [];
|
|
34
|
+
for (const v of raw ?? []) {
|
|
35
|
+
out.push(...v.split(",").map((s) => s.trim()).filter(Boolean));
|
|
36
|
+
}
|
|
37
|
+
return out;
|
|
38
|
+
}
|
|
39
|
+
export function parseJsonObject(raw, flagName) {
|
|
40
|
+
if (!raw)
|
|
41
|
+
return undefined;
|
|
42
|
+
try {
|
|
43
|
+
return JSON.parse(raw);
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
47
|
+
throw new Error(`Invalid ${flagName}: ${msg}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export function resolveAndValidatePath(pathRaw, flagName) {
|
|
51
|
+
const p = resolve(pathRaw);
|
|
52
|
+
if (!existsSync(p)) {
|
|
53
|
+
throw new Error(`Invalid ${flagName}: file not found at ${p}`);
|
|
54
|
+
}
|
|
55
|
+
return p;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=parsing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parsing.js","sourceRoot":"","sources":["../../src/lib/parsing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,GAAyB,EACzB,QAAQ,GAAG,SAAS;IAEpB,MAAM,MAAM,GAA+B,EAAE,CAAC;IAC9C,KAAK,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,WAAW,QAAQ,WAAW,EAAE,yBAAyB,CAAC,CAAC;QAC7E,CAAC;QAED,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,WAAW,QAAQ,WAAW,EAAE,kBAAkB,CAAC,CAAC;QACtE,CAAC;QAED,IAAI,QAAQ,KAAK,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;aACvC,IAAI,QAAQ,KAAK,OAAO;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;aAC9C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,QAAQ,KAAK,EAAE;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;;YAChF,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;IAC9B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,GAAyB;IAC3D,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,GAAG,IAAI,EAAE,EAAE,CAAC;QAC1B,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,eAAe,CAAc,GAAuB,EAAE,QAAgB;IACpF,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAM,CAAC;IAC9B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,WAAW,QAAQ,KAAK,GAAG,EAAE,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAe,EAAE,QAAgB;IACtE,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,WAAW,QAAQ,uBAAuB,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import ora from "ora";
|
|
2
|
+
import type { ProgressCallback } from "@executioncontrolprotocol/runtime";
|
|
3
|
+
export declare function createProgressHandler(spinner: ReturnType<typeof ora>, contextPath: string, contextName: string): ProgressCallback;
|
|
4
|
+
//# sourceMappingURL=progress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/lib/progress.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,EAA0B,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAkBlG,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,UAAU,CAAC,OAAO,GAAG,CAAC,EAC/B,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,gBAAgB,CA4GlB"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
function phaseToLabel(status) {
|
|
2
|
+
const labels = {
|
|
3
|
+
loading: "Loading context...",
|
|
4
|
+
"hydrating-seed": "Hydrating seed mounts...",
|
|
5
|
+
"running-orchestrator": "Running orchestrator...",
|
|
6
|
+
delegating: "Delegating tasks...",
|
|
7
|
+
"hydrating-focus": "Hydrating focus mounts...",
|
|
8
|
+
"hydrating-deep": "Hydrating deep mounts...",
|
|
9
|
+
"running-specialist": "Running specialist...",
|
|
10
|
+
merging: "Merging outputs...",
|
|
11
|
+
completed: "Completed.",
|
|
12
|
+
failed: "Failed.",
|
|
13
|
+
};
|
|
14
|
+
return labels[status] ?? status;
|
|
15
|
+
}
|
|
16
|
+
export function createProgressHandler(spinner, contextPath, contextName) {
|
|
17
|
+
let currentText = "Starting...";
|
|
18
|
+
const completedSteps = [];
|
|
19
|
+
function redraw() {
|
|
20
|
+
const isTTY = process.stderr.isTTY;
|
|
21
|
+
if (isTTY) {
|
|
22
|
+
process.stderr.write("\x1b[2J\x1b[H");
|
|
23
|
+
}
|
|
24
|
+
process.stderr.write(`\n Running: ${contextPath}\n`);
|
|
25
|
+
process.stderr.write(` Context: ${contextName}\n\n`);
|
|
26
|
+
for (const s of completedSteps) {
|
|
27
|
+
process.stderr.write(` Step ${s.step}: ${s.description} (${s.durationMs}ms)\n`);
|
|
28
|
+
if (s.model) {
|
|
29
|
+
process.stderr.write(` Model: ${s.model}\n`);
|
|
30
|
+
}
|
|
31
|
+
if (s.tokens && s.tokens.total > 0) {
|
|
32
|
+
process.stderr.write(` Tokens: ${s.tokens.prompt} prompt + ${s.tokens.completion} completion = ${s.tokens.total} total\n`);
|
|
33
|
+
}
|
|
34
|
+
if (s.output !== undefined) {
|
|
35
|
+
process.stderr.write(` Output:\n`);
|
|
36
|
+
const json = JSON.stringify(s.output, null, 2);
|
|
37
|
+
for (const line of json.split(/\r?\n/)) {
|
|
38
|
+
process.stderr.write(` ${line}\n`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
process.stderr.write("\n");
|
|
42
|
+
}
|
|
43
|
+
spinner.start(currentText);
|
|
44
|
+
}
|
|
45
|
+
function appendLastStep() {
|
|
46
|
+
const s = completedSteps[completedSteps.length - 1];
|
|
47
|
+
if (!s)
|
|
48
|
+
return;
|
|
49
|
+
spinner.stopAndPersist({
|
|
50
|
+
text: `Step ${s.step}: ${s.description} (${s.durationMs}ms)`,
|
|
51
|
+
});
|
|
52
|
+
process.stderr.write(` Model: ${s.model ?? "n/a"}\n`);
|
|
53
|
+
if (s.tokens && s.tokens.total > 0) {
|
|
54
|
+
process.stderr.write(` Tokens: ${s.tokens.prompt} prompt + ${s.tokens.completion} completion = ${s.tokens.total} total\n`);
|
|
55
|
+
}
|
|
56
|
+
if (s.output !== undefined) {
|
|
57
|
+
process.stderr.write(` Output:\n`);
|
|
58
|
+
const json = JSON.stringify(s.output, null, 2);
|
|
59
|
+
for (const line of json.split(/\r?\n/)) {
|
|
60
|
+
process.stderr.write(` ${line}\n`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
process.stderr.write("\n");
|
|
64
|
+
spinner.start(currentText);
|
|
65
|
+
}
|
|
66
|
+
return async (event) => {
|
|
67
|
+
switch (event.type) {
|
|
68
|
+
case "phase":
|
|
69
|
+
currentText = phaseToLabel(event.status);
|
|
70
|
+
spinner.text = currentText;
|
|
71
|
+
break;
|
|
72
|
+
case "step_start":
|
|
73
|
+
currentText = event.description;
|
|
74
|
+
spinner.text = currentText;
|
|
75
|
+
break;
|
|
76
|
+
case "step_complete":
|
|
77
|
+
if (event.kind === "executor") {
|
|
78
|
+
completedSteps.push({
|
|
79
|
+
step: event.step,
|
|
80
|
+
executorName: event.executorName ?? "",
|
|
81
|
+
description: event.description,
|
|
82
|
+
durationMs: event.durationMs,
|
|
83
|
+
tokens: event.tokens,
|
|
84
|
+
model: event.model,
|
|
85
|
+
output: event.output,
|
|
86
|
+
});
|
|
87
|
+
spinner.stop();
|
|
88
|
+
if (process.stderr.isTTY) {
|
|
89
|
+
redraw();
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
appendLastStep();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
break;
|
|
96
|
+
case "executor_reasoning":
|
|
97
|
+
spinner.stop();
|
|
98
|
+
{
|
|
99
|
+
const lines = event.reasoning.split(/\r?\n/);
|
|
100
|
+
process.stderr.write(`\n [${event.executorName}] Chain of thought:\n`);
|
|
101
|
+
for (const line of lines) {
|
|
102
|
+
process.stderr.write(` ${line}\n`);
|
|
103
|
+
}
|
|
104
|
+
process.stderr.write("\n");
|
|
105
|
+
}
|
|
106
|
+
spinner.start(currentText);
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=progress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/lib/progress.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-files.d.ts","sourceRoot":"","sources":["../../src/lib/trace-files.ts"],"names":[],"mappings":"AAIA,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAUzE"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { readdir } from "node:fs/promises";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import { resolve } from "node:path";
|
|
4
|
+
export async function listTraceIds(traceDirRaw) {
|
|
5
|
+
const traceDir = resolve(traceDirRaw);
|
|
6
|
+
if (!existsSync(traceDir))
|
|
7
|
+
return [];
|
|
8
|
+
const entries = await readdir(traceDir, { withFileTypes: true });
|
|
9
|
+
const ids = entries
|
|
10
|
+
.filter((e) => e.isFile() && e.name.endsWith(".json"))
|
|
11
|
+
.map((e) => e.name.slice(0, -".json".length));
|
|
12
|
+
return ids.sort();
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=trace-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-files.js","sourceRoot":"","sources":["../../src/lib/trace-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,WAAmB;IACpD,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACtC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IAErC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACjE,MAAM,GAAG,GAAG,OAAO;SAChB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;SACrD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAEhD,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ExecutionTrace } from "@executioncontrolprotocol/runtime";
|
|
2
|
+
export type TraceOutputFormat = "text" | "graph";
|
|
3
|
+
export declare function renderTraceView(trace: ExecutionTrace, output: TraceOutputFormat): Promise<string>;
|
|
4
|
+
//# sourceMappingURL=trace-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-view.d.ts","sourceRoot":"","sources":["../../src/lib/trace-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAExE,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,OAAO,CAAC;AAEjD,wBAAsB,eAAe,CACnC,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,MAAM,CAAC,CAMjB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export async function renderTraceView(trace, output) {
|
|
2
|
+
const runtime = await import("@executioncontrolprotocol/runtime");
|
|
3
|
+
if (output === "graph") {
|
|
4
|
+
return runtime.renderGraph(trace);
|
|
5
|
+
}
|
|
6
|
+
return runtime.formatTrace(trace);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=trace-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-view.js","sourceRoot":"","sources":["../../src/lib/trace-view.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAAqB,EACrB,MAAyB;IAEzB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,mCAAmC,CAAC,CAAC;IAClE,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,OAAO,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,28 +1,58 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@executioncontrolprotocol/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "CLI for the ECP runtime engine — run Context manifests from the command line",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"homepage": "https://github.com/executioncontrolprotocol/executioncontrolprotocol",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/executioncontrolprotocol/executioncontrolprotocol.git",
|
|
10
|
+
"directory": "packages/cli"
|
|
11
|
+
},
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/executioncontrolprotocol/executioncontrolprotocol/issues"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"ecp",
|
|
17
|
+
"execution-control-protocol",
|
|
18
|
+
"mcp",
|
|
19
|
+
"model-context-protocol",
|
|
20
|
+
"agents",
|
|
21
|
+
"cli"
|
|
22
|
+
],
|
|
5
23
|
"private": false,
|
|
6
24
|
"type": "module",
|
|
7
25
|
"bin": {
|
|
8
|
-
"ecp": "./bin/
|
|
26
|
+
"ecp": "./bin/run.js"
|
|
9
27
|
},
|
|
10
28
|
"files": [
|
|
11
|
-
"bin/
|
|
12
|
-
"
|
|
29
|
+
"bin/run.js",
|
|
30
|
+
"bin/run.cmd",
|
|
31
|
+
"bin/dev.js",
|
|
32
|
+
"bin/dev.cmd",
|
|
33
|
+
"dist",
|
|
34
|
+
"README.md"
|
|
13
35
|
],
|
|
14
36
|
"scripts": {
|
|
15
37
|
"build": "tsc -b",
|
|
16
|
-
"start": "
|
|
38
|
+
"start": "node ./bin/dev.js"
|
|
17
39
|
},
|
|
18
40
|
"dependencies": {
|
|
19
|
-
"@executioncontrolprotocol/runtime": "^0.
|
|
41
|
+
"@executioncontrolprotocol/runtime": "^0.4.0",
|
|
42
|
+
"@oclif/core": "^4.10.0",
|
|
20
43
|
"ora": "^8.1.1"
|
|
21
44
|
},
|
|
22
45
|
"devDependencies": {
|
|
23
|
-
"@executioncontrolprotocol/spec": "^0.
|
|
46
|
+
"@executioncontrolprotocol/spec": "^0.4.0",
|
|
24
47
|
"@types/node": "^25.3.3",
|
|
48
|
+
"ts-node": "^10.9.2",
|
|
25
49
|
"tsx": "^4.0.0",
|
|
26
50
|
"typescript": "^5.7.0"
|
|
51
|
+
},
|
|
52
|
+
"oclif": {
|
|
53
|
+
"bin": "ecp",
|
|
54
|
+
"commands": "./dist/commands",
|
|
55
|
+
"dirname": "ecp",
|
|
56
|
+
"topicSeparator": " "
|
|
27
57
|
}
|
|
28
58
|
}
|
package/bin/ecp.cjs
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
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);
|
package/dist/index.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
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
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
|