@executioncontrolprotocol/runtime 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.
Files changed (193) hide show
  1. package/dist/engine/context-loader.d.ts +31 -0
  2. package/dist/engine/context-loader.d.ts.map +1 -0
  3. package/dist/engine/context-loader.js +90 -0
  4. package/dist/engine/context-loader.js.map +1 -0
  5. package/dist/engine/index.d.ts +6 -0
  6. package/dist/engine/index.d.ts.map +1 -0
  7. package/dist/engine/index.js +6 -0
  8. package/dist/engine/index.js.map +1 -0
  9. package/dist/engine/runner.d.ts +92 -0
  10. package/dist/engine/runner.d.ts.map +1 -0
  11. package/dist/engine/runner.js +852 -0
  12. package/dist/engine/runner.js.map +1 -0
  13. package/dist/engine/schema-validator.d.ts +32 -0
  14. package/dist/engine/schema-validator.d.ts.map +1 -0
  15. package/dist/engine/schema-validator.js +69 -0
  16. package/dist/engine/schema-validator.js.map +1 -0
  17. package/dist/engine/system-config-loader.d.ts +39 -0
  18. package/dist/engine/system-config-loader.d.ts.map +1 -0
  19. package/dist/engine/system-config-loader.js +80 -0
  20. package/dist/engine/system-config-loader.js.map +1 -0
  21. package/dist/engine/types.d.ts +324 -0
  22. package/dist/engine/types.d.ts.map +1 -0
  23. package/dist/engine/types.js +10 -0
  24. package/dist/engine/types.js.map +1 -0
  25. package/dist/evals/index.d.ts +3 -0
  26. package/dist/evals/index.d.ts.map +1 -0
  27. package/dist/evals/index.js +3 -0
  28. package/dist/evals/index.js.map +1 -0
  29. package/dist/evals/scorer.d.ts +23 -0
  30. package/dist/evals/scorer.d.ts.map +1 -0
  31. package/dist/evals/scorer.js +133 -0
  32. package/dist/evals/scorer.js.map +1 -0
  33. package/dist/evals/types.d.ts +128 -0
  34. package/dist/evals/types.d.ts.map +1 -0
  35. package/dist/evals/types.js +11 -0
  36. package/dist/evals/types.js.map +1 -0
  37. package/dist/extensions/builtin.d.ts +44 -0
  38. package/dist/extensions/builtin.d.ts.map +1 -0
  39. package/dist/extensions/builtin.js +66 -0
  40. package/dist/extensions/builtin.js.map +1 -0
  41. package/dist/extensions/index.d.ts +4 -0
  42. package/dist/extensions/index.d.ts.map +1 -0
  43. package/dist/extensions/index.js +4 -0
  44. package/dist/extensions/index.js.map +1 -0
  45. package/dist/extensions/progress-loggers/file-logger.d.ts +27 -0
  46. package/dist/extensions/progress-loggers/file-logger.d.ts.map +1 -0
  47. package/dist/extensions/progress-loggers/file-logger.js +54 -0
  48. package/dist/extensions/progress-loggers/file-logger.js.map +1 -0
  49. package/dist/extensions/registry.d.ts +74 -0
  50. package/dist/extensions/registry.d.ts.map +1 -0
  51. package/dist/extensions/registry.js +126 -0
  52. package/dist/extensions/registry.js.map +1 -0
  53. package/dist/extensions/types.d.ts +78 -0
  54. package/dist/extensions/types.d.ts.map +1 -0
  55. package/dist/extensions/types.js +7 -0
  56. package/dist/extensions/types.js.map +1 -0
  57. package/dist/index.d.ts +10 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +10 -0
  60. package/dist/index.js.map +1 -0
  61. package/dist/mounts/hydrator.d.ts +46 -0
  62. package/dist/mounts/hydrator.d.ts.map +1 -0
  63. package/dist/mounts/hydrator.js +142 -0
  64. package/dist/mounts/hydrator.js.map +1 -0
  65. package/dist/mounts/index.d.ts +4 -0
  66. package/dist/mounts/index.d.ts.map +1 -0
  67. package/dist/mounts/index.js +4 -0
  68. package/dist/mounts/index.js.map +1 -0
  69. package/dist/mounts/interpolation.d.ts +33 -0
  70. package/dist/mounts/interpolation.d.ts.map +1 -0
  71. package/dist/mounts/interpolation.js +59 -0
  72. package/dist/mounts/interpolation.js.map +1 -0
  73. package/dist/mounts/types.d.ts +80 -0
  74. package/dist/mounts/types.d.ts.map +1 -0
  75. package/dist/mounts/types.js +10 -0
  76. package/dist/mounts/types.js.map +1 -0
  77. package/dist/policies/enforcer.d.ts +23 -0
  78. package/dist/policies/enforcer.d.ts.map +1 -0
  79. package/dist/policies/enforcer.js +111 -0
  80. package/dist/policies/enforcer.js.map +1 -0
  81. package/dist/policies/index.d.ts +3 -0
  82. package/dist/policies/index.d.ts.map +1 -0
  83. package/dist/policies/index.js +3 -0
  84. package/dist/policies/index.js.map +1 -0
  85. package/dist/policies/types.d.ts +87 -0
  86. package/dist/policies/types.d.ts.map +1 -0
  87. package/dist/policies/types.js +11 -0
  88. package/dist/policies/types.js.map +1 -0
  89. package/dist/protocols/a2a/a2a-transport.d.ts +40 -0
  90. package/dist/protocols/a2a/a2a-transport.d.ts.map +1 -0
  91. package/dist/protocols/a2a/a2a-transport.js +212 -0
  92. package/dist/protocols/a2a/a2a-transport.js.map +1 -0
  93. package/dist/protocols/a2a/index.d.ts +3 -0
  94. package/dist/protocols/a2a/index.d.ts.map +1 -0
  95. package/dist/protocols/a2a/index.js +2 -0
  96. package/dist/protocols/a2a/index.js.map +1 -0
  97. package/dist/protocols/agent-transport.d.ts +101 -0
  98. package/dist/protocols/agent-transport.d.ts.map +1 -0
  99. package/dist/protocols/agent-transport.js +11 -0
  100. package/dist/protocols/agent-transport.js.map +1 -0
  101. package/dist/protocols/index.d.ts +5 -0
  102. package/dist/protocols/index.d.ts.map +1 -0
  103. package/dist/protocols/index.js +5 -0
  104. package/dist/protocols/index.js.map +1 -0
  105. package/dist/protocols/mcp/index.d.ts +2 -0
  106. package/dist/protocols/mcp/index.d.ts.map +1 -0
  107. package/dist/protocols/mcp/index.js +2 -0
  108. package/dist/protocols/mcp/index.js.map +1 -0
  109. package/dist/protocols/mcp/mcp-tool-invoker.d.ts +30 -0
  110. package/dist/protocols/mcp/mcp-tool-invoker.d.ts.map +1 -0
  111. package/dist/protocols/mcp/mcp-tool-invoker.js +121 -0
  112. package/dist/protocols/mcp/mcp-tool-invoker.js.map +1 -0
  113. package/dist/protocols/tool-invoker.d.ts +91 -0
  114. package/dist/protocols/tool-invoker.d.ts.map +1 -0
  115. package/dist/protocols/tool-invoker.js +11 -0
  116. package/dist/protocols/tool-invoker.js.map +1 -0
  117. package/dist/providers/index.d.ts +4 -0
  118. package/dist/providers/index.d.ts.map +1 -0
  119. package/dist/providers/index.js +4 -0
  120. package/dist/providers/index.js.map +1 -0
  121. package/dist/providers/model-provider.d.ts +132 -0
  122. package/dist/providers/model-provider.d.ts.map +1 -0
  123. package/dist/providers/model-provider.js +10 -0
  124. package/dist/providers/model-provider.js.map +1 -0
  125. package/dist/providers/ollama/index.d.ts +3 -0
  126. package/dist/providers/ollama/index.d.ts.map +1 -0
  127. package/dist/providers/ollama/index.js +2 -0
  128. package/dist/providers/ollama/index.js.map +1 -0
  129. package/dist/providers/ollama/ollama-provider.d.ts +41 -0
  130. package/dist/providers/ollama/ollama-provider.d.ts.map +1 -0
  131. package/dist/providers/ollama/ollama-provider.js +113 -0
  132. package/dist/providers/ollama/ollama-provider.js.map +1 -0
  133. package/dist/providers/openai/index.d.ts +3 -0
  134. package/dist/providers/openai/index.d.ts.map +1 -0
  135. package/dist/providers/openai/index.js +2 -0
  136. package/dist/providers/openai/index.js.map +1 -0
  137. package/dist/providers/openai/openai-provider.d.ts +41 -0
  138. package/dist/providers/openai/openai-provider.d.ts.map +1 -0
  139. package/dist/providers/openai/openai-provider.js +150 -0
  140. package/dist/providers/openai/openai-provider.js.map +1 -0
  141. package/dist/testing/cassette.d.ts +88 -0
  142. package/dist/testing/cassette.d.ts.map +1 -0
  143. package/dist/testing/cassette.js +123 -0
  144. package/dist/testing/cassette.js.map +1 -0
  145. package/dist/testing/index.d.ts +5 -0
  146. package/dist/testing/index.d.ts.map +1 -0
  147. package/dist/testing/index.js +5 -0
  148. package/dist/testing/index.js.map +1 -0
  149. package/dist/testing/mock-agent-transport.d.ts +49 -0
  150. package/dist/testing/mock-agent-transport.d.ts.map +1 -0
  151. package/dist/testing/mock-agent-transport.js +71 -0
  152. package/dist/testing/mock-agent-transport.js.map +1 -0
  153. package/dist/testing/mock-model-provider.d.ts +69 -0
  154. package/dist/testing/mock-model-provider.d.ts.map +1 -0
  155. package/dist/testing/mock-model-provider.js +92 -0
  156. package/dist/testing/mock-model-provider.js.map +1 -0
  157. package/dist/testing/mock-tool-invoker.d.ts +65 -0
  158. package/dist/testing/mock-tool-invoker.d.ts.map +1 -0
  159. package/dist/testing/mock-tool-invoker.js +85 -0
  160. package/dist/testing/mock-tool-invoker.js.map +1 -0
  161. package/dist/tracing/collector.d.ts +75 -0
  162. package/dist/tracing/collector.d.ts.map +1 -0
  163. package/dist/tracing/collector.js +106 -0
  164. package/dist/tracing/collector.js.map +1 -0
  165. package/dist/tracing/exporters/console.d.ts +17 -0
  166. package/dist/tracing/exporters/console.d.ts.map +1 -0
  167. package/dist/tracing/exporters/console.js +76 -0
  168. package/dist/tracing/exporters/console.js.map +1 -0
  169. package/dist/tracing/exporters/index.d.ts +4 -0
  170. package/dist/tracing/exporters/index.d.ts.map +1 -0
  171. package/dist/tracing/exporters/index.js +3 -0
  172. package/dist/tracing/exporters/index.js.map +1 -0
  173. package/dist/tracing/exporters/json-file.d.ts +30 -0
  174. package/dist/tracing/exporters/json-file.d.ts.map +1 -0
  175. package/dist/tracing/exporters/json-file.js +28 -0
  176. package/dist/tracing/exporters/json-file.js.map +1 -0
  177. package/dist/tracing/formatter.d.ts +16 -0
  178. package/dist/tracing/formatter.d.ts.map +1 -0
  179. package/dist/tracing/formatter.js +81 -0
  180. package/dist/tracing/formatter.js.map +1 -0
  181. package/dist/tracing/graph.d.ts +17 -0
  182. package/dist/tracing/graph.d.ts.map +1 -0
  183. package/dist/tracing/graph.js +116 -0
  184. package/dist/tracing/graph.js.map +1 -0
  185. package/dist/tracing/index.d.ts +6 -0
  186. package/dist/tracing/index.d.ts.map +1 -0
  187. package/dist/tracing/index.js +6 -0
  188. package/dist/tracing/index.js.map +1 -0
  189. package/dist/tracing/types.d.ts +124 -0
  190. package/dist/tracing/types.d.ts.map +1 -0
  191. package/dist/tracing/types.js +11 -0
  192. package/dist/tracing/types.js.map +1 -0
  193. package/package.json +42 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../../src/tracing/exporters/console.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjE;;;;GAIG;AACH,qBAAa,oBAAqB,YAAW,aAAa;IACxD,QAAQ,CAAC,IAAI,aAAa;IAEpB,MAAM,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAqEnD"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Console trace exporter — prints a human-readable execution trace
3
+ * to stderr.
4
+ *
5
+ * @category Tracing
6
+ */
7
+ /**
8
+ * Exports execution traces as formatted text to the console.
9
+ *
10
+ * @category Tracing
11
+ */
12
+ export class ConsoleTraceExporter {
13
+ name = "console";
14
+ async export(trace) {
15
+ const lines = [];
16
+ lines.push("");
17
+ lines.push("═══ Execution Trace ═══");
18
+ lines.push(` Execution ID: ${trace.executionId}`);
19
+ lines.push(` Context: ${trace.contextName} v${trace.contextVersion}`);
20
+ lines.push(` Strategy: ${trace.strategy}`);
21
+ lines.push(` Duration: ${trace.durationMs}ms`);
22
+ lines.push(` Success: ${trace.success}`);
23
+ if (trace.error) {
24
+ lines.push(` Error: ${trace.error}`);
25
+ }
26
+ lines.push("");
27
+ for (const span of trace.spans) {
28
+ const prefix = ` Step ${span.step}`;
29
+ switch (span.type) {
30
+ case "executor":
31
+ lines.push(`${prefix} [Executor: ${span.executorName}] (${span.durationMs}ms)`);
32
+ if (span.error)
33
+ lines.push(` Error: ${span.error}`);
34
+ break;
35
+ case "model-generation":
36
+ lines.push(`${prefix} [Model: ${span.model ?? "unknown"}] (${span.durationMs}ms)`);
37
+ if (span.tokens) {
38
+ lines.push(` Tokens: ${span.tokens.prompt} prompt + ${span.tokens.completion} completion = ${span.tokens.total} total`);
39
+ }
40
+ if (span.reasoning) {
41
+ const short = span.reasoning.length > 200
42
+ ? span.reasoning.slice(0, 200) + "…"
43
+ : span.reasoning;
44
+ lines.push(` Reasoning: ${short}`);
45
+ }
46
+ if (span.output) {
47
+ const json = JSON.stringify(span.output);
48
+ const short = json.length > 200 ? json.slice(0, 200) + "…" : json;
49
+ lines.push(` Output: ${short}`);
50
+ }
51
+ break;
52
+ case "tool-call":
53
+ lines.push(`${prefix} [Tool: ${span.toolName}] (${span.durationMs}ms)`);
54
+ if (span.toolArgs) {
55
+ lines.push(` Args: ${JSON.stringify(span.toolArgs)}`);
56
+ }
57
+ if (span.toolIsError) {
58
+ lines.push(` Error: ${JSON.stringify(span.toolResult)}`);
59
+ }
60
+ break;
61
+ case "mount-hydration":
62
+ lines.push(`${prefix} [Mount: ${span.mountName} (${span.mountStage})] ` +
63
+ `${span.mountItemCount ?? 0} items (${span.durationMs}ms)`);
64
+ break;
65
+ case "delegation":
66
+ lines.push(`${prefix} [Delegate: ${span.executorName}] (${span.durationMs}ms)`);
67
+ if (span.error)
68
+ lines.push(` Error: ${span.error}`);
69
+ break;
70
+ }
71
+ }
72
+ lines.push("");
73
+ console.error(lines.join("\n"));
74
+ }
75
+ }
76
+ //# sourceMappingURL=console.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console.js","sourceRoot":"","sources":["../../../src/tracing/exporters/console.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { ConsoleTraceExporter } from "./console.js";
2
+ export { JsonFileTraceExporter } from "./json-file.js";
3
+ export type { JsonFileExporterConfig } from "./json-file.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tracing/exporters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,YAAY,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { ConsoleTraceExporter } from "./console.js";
2
+ export { JsonFileTraceExporter } from "./json-file.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tracing/exporters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * JSON file trace exporter — persists execution traces as JSON files
3
+ * so they can be loaded later by `ecp trace` and `ecp graph`.
4
+ *
5
+ * @category Tracing
6
+ */
7
+ import type { ExecutionTrace, TraceExporter } from "../types.js";
8
+ /**
9
+ * Configuration for the JSON file exporter.
10
+ *
11
+ * @category Tracing
12
+ */
13
+ export interface JsonFileExporterConfig {
14
+ /** Directory to write trace files to. Defaults to `"./traces"`. */
15
+ outputDir?: string;
16
+ }
17
+ /**
18
+ * Exports execution traces as JSON files to disk.
19
+ *
20
+ * Each trace is saved as `<outputDir>/<executionId>.json`.
21
+ *
22
+ * @category Tracing
23
+ */
24
+ export declare class JsonFileTraceExporter implements TraceExporter {
25
+ readonly name = "json-file";
26
+ private readonly outputDir;
27
+ constructor(config?: JsonFileExporterConfig);
28
+ export(trace: ExecutionTrace): Promise<void>;
29
+ }
30
+ //# sourceMappingURL=json-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-file.d.ts","sourceRoot":"","sources":["../../../src/tracing/exporters/json-file.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjE;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,qBAAa,qBAAsB,YAAW,aAAa;IACzD,QAAQ,CAAC,IAAI,eAAe;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,MAAM,GAAE,sBAA2B;IAIzC,MAAM,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAKnD"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * JSON file trace exporter — persists execution traces as JSON files
3
+ * so they can be loaded later by `ecp trace` and `ecp graph`.
4
+ *
5
+ * @category Tracing
6
+ */
7
+ import { writeFileSync, mkdirSync } from "node:fs";
8
+ import { resolve } from "node:path";
9
+ /**
10
+ * Exports execution traces as JSON files to disk.
11
+ *
12
+ * Each trace is saved as `<outputDir>/<executionId>.json`.
13
+ *
14
+ * @category Tracing
15
+ */
16
+ export class JsonFileTraceExporter {
17
+ name = "json-file";
18
+ outputDir;
19
+ constructor(config = {}) {
20
+ this.outputDir = config.outputDir ?? "./traces";
21
+ }
22
+ async export(trace) {
23
+ mkdirSync(this.outputDir, { recursive: true });
24
+ const filePath = resolve(this.outputDir, `${trace.executionId}.json`);
25
+ writeFileSync(filePath, JSON.stringify(trace, null, 2), "utf-8");
26
+ }
27
+ }
28
+ //# sourceMappingURL=json-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-file.js","sourceRoot":"","sources":["../../../src/tracing/exporters/json-file.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC;;;;;;GAMG;AACH,MAAM,OAAO,qBAAqB;IACvB,IAAI,GAAG,WAAW,CAAC;IACX,SAAS,CAAS;IAEnC,YAAY,SAAiC,EAAE;QAC7C,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,UAAU,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAqB;QAChC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,KAAK,CAAC,WAAW,OAAO,CAAC,CAAC;QACtE,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACnE,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Trace formatter — produces human-readable output for `ecp trace`.
3
+ *
4
+ * @category Tracing
5
+ */
6
+ import type { ExecutionTrace } from "./types.js";
7
+ /**
8
+ * Format an execution trace for terminal display.
9
+ *
10
+ * @param trace - The trace to format.
11
+ * @returns Multi-line string ready for printing.
12
+ *
13
+ * @category Tracing
14
+ */
15
+ export declare function formatTrace(trace: ExecutionTrace): string;
16
+ //# sourceMappingURL=formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/tracing/formatter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,YAAY,CAAC;AAyD5D;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAoBzD"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Trace formatter — produces human-readable output for `ecp trace`.
3
+ *
4
+ * @category Tracing
5
+ */
6
+ function truncate(str, max) {
7
+ return str.length > max ? str.slice(0, max) + "…" : str;
8
+ }
9
+ function formatSpan(span) {
10
+ const lines = [];
11
+ const label = `Step ${span.step}`;
12
+ switch (span.type) {
13
+ case "executor":
14
+ lines.push(`${label} [Executor] ${span.executorName} (${span.durationMs}ms)`);
15
+ if (span.error)
16
+ lines.push(` Error: ${span.error}`);
17
+ break;
18
+ case "model-generation":
19
+ lines.push(`${label} [Model] ${span.model ?? "unknown"} for ${span.executorName} (${span.durationMs}ms)`);
20
+ if (span.tokens) {
21
+ lines.push(` Tokens: ${span.tokens.prompt} in / ${span.tokens.completion} out / ${span.tokens.total} total`);
22
+ }
23
+ if (span.reasoning) {
24
+ lines.push(` Reasoning: ${truncate(span.reasoning, 300)}`);
25
+ }
26
+ if (span.output) {
27
+ lines.push(` Output: ${truncate(JSON.stringify(span.output), 300)}`);
28
+ }
29
+ if (span.error)
30
+ lines.push(` Error: ${span.error}`);
31
+ break;
32
+ case "tool-call":
33
+ lines.push(`${label} [Tool] ${span.toolName} for ${span.executorName} (${span.durationMs}ms)`);
34
+ if (span.toolArgs && Object.keys(span.toolArgs).length > 0) {
35
+ lines.push(` Args: ${truncate(JSON.stringify(span.toolArgs), 200)}`);
36
+ }
37
+ if (span.toolIsError) {
38
+ lines.push(` Error: ${truncate(JSON.stringify(span.toolResult), 200)}`);
39
+ }
40
+ else if (span.toolResult !== undefined) {
41
+ lines.push(` Result: ${truncate(JSON.stringify(span.toolResult), 200)}`);
42
+ }
43
+ break;
44
+ case "mount-hydration":
45
+ lines.push(`${label} [Mount] ${span.mountName} (${span.mountStage}) → ${span.mountItemCount ?? 0} items (${span.durationMs}ms)`);
46
+ break;
47
+ case "delegation":
48
+ lines.push(`${label} [Delegate] → ${span.executorName} (${span.durationMs}ms)`);
49
+ if (span.error)
50
+ lines.push(` Error: ${span.error}`);
51
+ break;
52
+ }
53
+ return lines;
54
+ }
55
+ /**
56
+ * Format an execution trace for terminal display.
57
+ *
58
+ * @param trace - The trace to format.
59
+ * @returns Multi-line string ready for printing.
60
+ *
61
+ * @category Tracing
62
+ */
63
+ export function formatTrace(trace) {
64
+ const lines = [];
65
+ lines.push("");
66
+ lines.push(`Execution ID: ${trace.executionId}`);
67
+ lines.push(`Context: ${trace.contextName} v${trace.contextVersion}`);
68
+ lines.push(`Strategy: ${trace.strategy}`);
69
+ lines.push(`Duration: ${trace.durationMs}ms`);
70
+ lines.push(`Status: ${trace.success ? "success" : "failed"}`);
71
+ if (trace.error) {
72
+ lines.push(`Error: ${trace.error}`);
73
+ }
74
+ lines.push("");
75
+ for (const span of trace.spans) {
76
+ lines.push(...formatSpan(span));
77
+ }
78
+ lines.push("");
79
+ return lines.join("\n");
80
+ }
81
+ //# sourceMappingURL=formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/tracing/formatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Execution graph renderer — produces an ASCII tree visualization
3
+ * of a Context execution for `ecp graph`.
4
+ *
5
+ * @category Tracing
6
+ */
7
+ import type { ExecutionTrace } from "./types.js";
8
+ /**
9
+ * Render an execution trace as an ASCII tree.
10
+ *
11
+ * @param trace - The trace to render.
12
+ * @returns Multi-line string with tree visualization.
13
+ *
14
+ * @category Tracing
15
+ */
16
+ export declare function renderGraph(trace: ExecutionTrace): string;
17
+ //# sourceMappingURL=graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/tracing/graph.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,YAAY,CAAC;AAkH5D;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAezD"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Execution graph renderer — produces an ASCII tree visualization
3
+ * of a Context execution for `ecp graph`.
4
+ *
5
+ * @category Tracing
6
+ */
7
+ function truncate(str, max) {
8
+ return str.length > max ? str.slice(0, max) + "…" : str;
9
+ }
10
+ function spanLabel(span) {
11
+ switch (span.type) {
12
+ case "executor":
13
+ return `${span.executorName}`;
14
+ case "model-generation": {
15
+ const tok = span.tokens ? `, ${span.tokens.total} tok` : "";
16
+ return `model: ${span.model ?? "?"}${tok}, ${span.durationMs}ms`;
17
+ }
18
+ case "tool-call":
19
+ return `tool: ${span.toolName} (${span.durationMs}ms)`;
20
+ case "mount-hydration":
21
+ return `mount: ${span.mountName} [${span.mountStage}] → ${span.mountItemCount ?? 0} items`;
22
+ case "delegation":
23
+ return `delegate → ${span.executorName}`;
24
+ default:
25
+ return span.type;
26
+ }
27
+ }
28
+ function spanDetail(span) {
29
+ if (span.reasoning) {
30
+ return `reasoning: ${truncate(span.reasoning, 120)}`;
31
+ }
32
+ if (span.output) {
33
+ return `output: ${truncate(JSON.stringify(span.output), 120)}`;
34
+ }
35
+ if (span.error) {
36
+ return `error: ${span.error}`;
37
+ }
38
+ return undefined;
39
+ }
40
+ function buildTree(trace) {
41
+ const root = {
42
+ label: `${trace.executionId} — ${trace.contextName} v${trace.contextVersion} (${trace.strategy}, ${trace.durationMs}ms)`,
43
+ children: [],
44
+ };
45
+ const executorNodes = new Map();
46
+ const executorSpanIds = new Map();
47
+ for (const span of trace.spans) {
48
+ if (span.type === "executor") {
49
+ const node = {
50
+ label: `${span.executorName} (${span.durationMs}ms)`,
51
+ detail: span.error ? `error: ${span.error}` : undefined,
52
+ children: [],
53
+ };
54
+ executorNodes.set(span.executorName, node);
55
+ executorSpanIds.set(span.id, span.executorName);
56
+ root.children.push(node);
57
+ }
58
+ }
59
+ for (const span of trace.spans) {
60
+ if (span.type === "executor")
61
+ continue;
62
+ let parent = executorNodes.get(span.executorName);
63
+ if (!parent) {
64
+ parent = {
65
+ label: `${span.executorName}`,
66
+ children: [],
67
+ };
68
+ executorNodes.set(span.executorName, parent);
69
+ root.children.push(parent);
70
+ }
71
+ const node = {
72
+ label: spanLabel(span),
73
+ detail: spanDetail(span),
74
+ children: [],
75
+ };
76
+ parent.children.push(node);
77
+ }
78
+ return root;
79
+ }
80
+ function renderTree(node, prefix, isLast) {
81
+ const lines = [];
82
+ const connector = isLast ? "└── " : "├── ";
83
+ const childPrefix = isLast ? " " : "│ ";
84
+ lines.push(prefix + connector + node.label);
85
+ if (node.detail) {
86
+ lines.push(prefix + childPrefix + node.detail);
87
+ }
88
+ for (let i = 0; i < node.children.length; i++) {
89
+ const child = node.children[i];
90
+ const last = i === node.children.length - 1;
91
+ lines.push(...renderTree(child, prefix + childPrefix, last));
92
+ }
93
+ return lines;
94
+ }
95
+ /**
96
+ * Render an execution trace as an ASCII tree.
97
+ *
98
+ * @param trace - The trace to render.
99
+ * @returns Multi-line string with tree visualization.
100
+ *
101
+ * @category Tracing
102
+ */
103
+ export function renderGraph(trace) {
104
+ const tree = buildTree(trace);
105
+ const lines = [];
106
+ lines.push("");
107
+ lines.push(tree.label);
108
+ for (let i = 0; i < tree.children.length; i++) {
109
+ const child = tree.children[i];
110
+ const last = i === tree.children.length - 1;
111
+ lines.push(...renderTree(child, "", last));
112
+ }
113
+ lines.push("");
114
+ return lines.join("\n");
115
+ }
116
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/tracing/graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export * from "./types.js";
2
+ export * from "./collector.js";
3
+ export * from "./exporters/index.js";
4
+ export { formatTrace } from "./formatter.js";
5
+ export { renderGraph } from "./graph.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tracing/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from "./types.js";
2
+ export * from "./collector.js";
3
+ export * from "./exporters/index.js";
4
+ export { formatTrace } from "./formatter.js";
5
+ export { renderGraph } from "./graph.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tracing/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Tracing data model for ECP executions.
3
+ *
4
+ * Captures structured spans for every model generation, tool call,
5
+ * mount hydration, and delegation — providing full observability
6
+ * into a Context run.
7
+ *
8
+ * @category Tracing
9
+ */
10
+ /**
11
+ * Token usage for a single model generation.
12
+ *
13
+ * @category Tracing
14
+ */
15
+ export interface SpanTokenUsage {
16
+ /** Tokens consumed by the prompt/input. */
17
+ prompt: number;
18
+ /** Tokens generated in the response. */
19
+ completion: number;
20
+ /** Total tokens (prompt + completion). */
21
+ total: number;
22
+ }
23
+ /**
24
+ * The type of work a span represents.
25
+ *
26
+ * @category Tracing
27
+ */
28
+ export type SpanType = "executor" | "model-generation" | "tool-call" | "mount-hydration" | "delegation";
29
+ /**
30
+ * A single span in an execution trace.
31
+ *
32
+ * Spans form a tree: each executor span is the parent of its child
33
+ * model-generation, tool-call, and mount-hydration spans.
34
+ *
35
+ * @category Tracing
36
+ */
37
+ export interface TraceSpan {
38
+ /** Unique span identifier. */
39
+ id: string;
40
+ /** Parent span ID (undefined for root executor spans). */
41
+ parentId?: string;
42
+ /** What kind of work this span represents. */
43
+ type: SpanType;
44
+ /** Executor that owns this span. */
45
+ executorName: string;
46
+ /** ISO-8601 start timestamp. */
47
+ startedAt: string;
48
+ /** ISO-8601 end timestamp. */
49
+ endedAt: string;
50
+ /** Duration in milliseconds. */
51
+ durationMs: number;
52
+ /** Model identifier (for model-generation spans). */
53
+ model?: string;
54
+ /** Chain-of-thought or reasoning from the model (when available). */
55
+ reasoning?: string;
56
+ /** Structured output produced by this span. */
57
+ output?: unknown;
58
+ /** Token usage (for model-generation spans). */
59
+ tokens?: SpanTokenUsage;
60
+ /** Qualified tool name, e.g. `"jira:issues.search"` (for tool-call spans). */
61
+ toolName?: string;
62
+ /** Tool call arguments (for tool-call spans). */
63
+ toolArgs?: Record<string, unknown>;
64
+ /** Tool call result (for tool-call spans). */
65
+ toolResult?: unknown;
66
+ /** Whether the tool call returned an error (for tool-call spans). */
67
+ toolIsError?: boolean;
68
+ /** Mount name and stage (for mount-hydration spans). */
69
+ mountName?: string;
70
+ /** Mount stage (for mount-hydration spans). */
71
+ mountStage?: string;
72
+ /** Number of items returned (for mount-hydration spans). */
73
+ mountItemCount?: number;
74
+ /** Error message if this span failed. */
75
+ error?: string;
76
+ /** Sequential step number within the execution (1-based). */
77
+ step: number;
78
+ }
79
+ /**
80
+ * A complete execution trace capturing every span from a Context run.
81
+ *
82
+ * @category Tracing
83
+ */
84
+ export interface ExecutionTrace {
85
+ /** Unique execution/run identifier. */
86
+ executionId: string;
87
+ /** Context name. */
88
+ contextName: string;
89
+ /** Context version. */
90
+ contextVersion: string;
91
+ /** Orchestration strategy used. */
92
+ strategy: string;
93
+ /** ISO-8601 start timestamp. */
94
+ startedAt: string;
95
+ /** ISO-8601 end timestamp. */
96
+ endedAt: string;
97
+ /** Total duration in milliseconds. */
98
+ durationMs: number;
99
+ /** Whether the execution succeeded. */
100
+ success: boolean;
101
+ /** Top-level error message (if failed). */
102
+ error?: string;
103
+ /** Ordered list of all spans in the execution. */
104
+ spans: TraceSpan[];
105
+ }
106
+ /**
107
+ * Interface for exporting execution traces to external systems.
108
+ *
109
+ * Implement this interface to send traces to observability platforms
110
+ * such as Splunk, New Relic, Datadog, or any custom backend.
111
+ *
112
+ * @category Tracing
113
+ */
114
+ export interface TraceExporter {
115
+ /** Human-readable exporter name (e.g. `"splunk"`, `"newrelic"`). */
116
+ readonly name: string;
117
+ /**
118
+ * Export a completed execution trace.
119
+ *
120
+ * @param trace - The execution trace to export.
121
+ */
122
+ export(trace: ExecutionTrace): Promise<void>;
123
+ }
124
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tracing/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;IAEf,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IAEnB,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAChB,UAAU,GACV,kBAAkB,GAClB,WAAW,GACX,iBAAiB,GACjB,YAAY,CAAC;AAEjB;;;;;;;GAOG;AACH,MAAM,WAAW,SAAS;IACxB,8BAA8B;IAC9B,EAAE,EAAE,MAAM,CAAC;IAEX,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,8CAA8C;IAC9C,IAAI,EAAE,QAAQ,CAAC;IAEf,oCAAoC;IACpC,YAAY,EAAE,MAAM,CAAC;IAErB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAElB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAEhB,gCAAgC;IAChC,UAAU,EAAE,MAAM,CAAC;IAEnB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,gDAAgD;IAChD,MAAM,CAAC,EAAE,cAAc,CAAC;IAExB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEnC,8CAA8C;IAC9C,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,qEAAqE;IACrE,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,4DAA4D;IAC5D,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,uCAAuC;IACvC,WAAW,EAAE,MAAM,CAAC;IAEpB,oBAAoB;IACpB,WAAW,EAAE,MAAM,CAAC;IAEpB,uBAAuB;IACvB,cAAc,EAAE,MAAM,CAAC;IAEvB,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IAEjB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAElB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAEhB,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC;IAEnB,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;IAEjB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,kDAAkD;IAClD,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,oEAAoE;IACpE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9C"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Tracing data model for ECP executions.
3
+ *
4
+ * Captures structured spans for every model generation, tool call,
5
+ * mount hydration, and delegation — providing full observability
6
+ * into a Context run.
7
+ *
8
+ * @category Tracing
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tracing/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "@executioncontrolprotocol/runtime",
3
+ "version": "0.3.0",
4
+ "description": "ECP runtime engine — loads, validates, and executes Context manifests",
5
+ "private": false,
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js",
13
+ "default": "./dist/index.js"
14
+ },
15
+ "./extensions": {
16
+ "types": "./dist/extensions/index.d.ts",
17
+ "import": "./dist/extensions/index.js",
18
+ "default": "./dist/extensions/index.js"
19
+ }
20
+ },
21
+ "files": [
22
+ "dist"
23
+ ],
24
+ "scripts": {
25
+ "build": "tsc -b"
26
+ },
27
+ "dependencies": {
28
+ "@a2a-js/sdk": "^0.3.0",
29
+ "@executioncontrolprotocol/spec": "^0.3.0",
30
+ "@modelcontextprotocol/sdk": "^1.27.0",
31
+ "ajv": "^8.17.0",
32
+ "js-yaml": "^4.1.0",
33
+ "openai": "^4.0.0",
34
+ "zod": "^3.23.0"
35
+ },
36
+ "devDependencies": {
37
+ "@types/js-yaml": "^4.0.9",
38
+ "@types/node": "^25.3.3",
39
+ "tsx": "^4.0.0",
40
+ "typescript": "^5.7.0"
41
+ }
42
+ }