@executioncontrolprotocol/cli 0.3.0 → 0.4.2

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 (279) hide show
  1. package/README.md +77 -0
  2. package/bin/dev.cmd +3 -0
  3. package/bin/dev.js +8 -0
  4. package/bin/run.cmd +3 -0
  5. package/bin/run.js +8 -0
  6. package/dist/commands/config/endpoints/add.d.ts +14 -0
  7. package/dist/commands/config/endpoints/add.d.ts.map +1 -0
  8. package/dist/commands/config/endpoints/add.js +29 -0
  9. package/dist/commands/config/endpoints/add.js.map +1 -0
  10. package/dist/commands/config/endpoints/get.d.ts +10 -0
  11. package/dist/commands/config/endpoints/get.d.ts.map +1 -0
  12. package/dist/commands/config/endpoints/get.js +35 -0
  13. package/dist/commands/config/endpoints/get.js.map +1 -0
  14. package/dist/commands/config/endpoints/remove.d.ts +13 -0
  15. package/dist/commands/config/endpoints/remove.d.ts.map +1 -0
  16. package/dist/commands/config/endpoints/remove.js +25 -0
  17. package/dist/commands/config/endpoints/remove.js.map +1 -0
  18. package/dist/commands/config/endpoints/update.d.ts +15 -0
  19. package/dist/commands/config/endpoints/update.d.ts.map +1 -0
  20. package/dist/commands/config/endpoints/update.js +36 -0
  21. package/dist/commands/config/endpoints/update.js.map +1 -0
  22. package/dist/commands/config/get.d.ts +11 -0
  23. package/dist/commands/config/get.d.ts.map +1 -0
  24. package/dist/commands/config/get.js +31 -0
  25. package/dist/commands/config/get.js.map +1 -0
  26. package/dist/commands/config/init.d.ts +13 -0
  27. package/dist/commands/config/init.d.ts.map +1 -0
  28. package/dist/commands/config/init.js +49 -0
  29. package/dist/commands/config/init.js.map +1 -0
  30. package/dist/commands/config/loggers/allow/add.d.ts +13 -0
  31. package/dist/commands/config/loggers/allow/add.d.ts.map +1 -0
  32. package/dist/commands/config/loggers/allow/add.js +25 -0
  33. package/dist/commands/config/loggers/allow/add.js.map +1 -0
  34. package/dist/commands/config/loggers/allow/remove.d.ts +13 -0
  35. package/dist/commands/config/loggers/allow/remove.d.ts.map +1 -0
  36. package/dist/commands/config/loggers/allow/remove.js +26 -0
  37. package/dist/commands/config/loggers/allow/remove.js.map +1 -0
  38. package/dist/commands/config/loggers/default/add.d.ts +13 -0
  39. package/dist/commands/config/loggers/default/add.d.ts.map +1 -0
  40. package/dist/commands/config/loggers/default/add.js +28 -0
  41. package/dist/commands/config/loggers/default/add.js.map +1 -0
  42. package/dist/commands/config/loggers/default/remove.d.ts +13 -0
  43. package/dist/commands/config/loggers/default/remove.d.ts.map +1 -0
  44. package/dist/commands/config/loggers/default/remove.js +25 -0
  45. package/dist/commands/config/loggers/default/remove.js.map +1 -0
  46. package/dist/commands/config/loggers/get.d.ts +10 -0
  47. package/dist/commands/config/loggers/get.d.ts.map +1 -0
  48. package/dist/commands/config/loggers/get.js +35 -0
  49. package/dist/commands/config/loggers/get.js.map +1 -0
  50. package/dist/commands/config/loggers/logger/add.d.ts +15 -0
  51. package/dist/commands/config/loggers/logger/add.d.ts.map +1 -0
  52. package/dist/commands/config/loggers/logger/add.js +55 -0
  53. package/dist/commands/config/loggers/logger/add.js.map +1 -0
  54. package/dist/commands/config/loggers/logger/get.d.ts +13 -0
  55. package/dist/commands/config/loggers/logger/get.d.ts.map +1 -0
  56. package/dist/commands/config/loggers/logger/get.js +30 -0
  57. package/dist/commands/config/loggers/logger/get.js.map +1 -0
  58. package/dist/commands/config/loggers/logger/remove.d.ts +13 -0
  59. package/dist/commands/config/loggers/logger/remove.d.ts.map +1 -0
  60. package/dist/commands/config/loggers/logger/remove.js +27 -0
  61. package/dist/commands/config/loggers/logger/remove.js.map +1 -0
  62. package/dist/commands/config/loggers/logger/update.d.ts +15 -0
  63. package/dist/commands/config/loggers/logger/update.d.ts.map +1 -0
  64. package/dist/commands/config/loggers/logger/update.js +55 -0
  65. package/dist/commands/config/loggers/logger/update.js.map +1 -0
  66. package/dist/commands/config/models/allow/add.d.ts +14 -0
  67. package/dist/commands/config/models/allow/add.d.ts.map +1 -0
  68. package/dist/commands/config/models/allow/add.js +36 -0
  69. package/dist/commands/config/models/allow/add.js.map +1 -0
  70. package/dist/commands/config/models/allow/remove.d.ts +14 -0
  71. package/dist/commands/config/models/allow/remove.d.ts.map +1 -0
  72. package/dist/commands/config/models/allow/remove.js +36 -0
  73. package/dist/commands/config/models/allow/remove.js.map +1 -0
  74. package/dist/commands/config/models/default/update.d.ts +14 -0
  75. package/dist/commands/config/models/default/update.d.ts.map +1 -0
  76. package/dist/commands/config/models/default/update.js +35 -0
  77. package/dist/commands/config/models/default/update.js.map +1 -0
  78. package/dist/commands/config/models/get.d.ts +10 -0
  79. package/dist/commands/config/models/get.d.ts.map +1 -0
  80. package/dist/commands/config/models/get.js +39 -0
  81. package/dist/commands/config/models/get.js.map +1 -0
  82. package/dist/commands/config/models/ollama/update.d.ts +13 -0
  83. package/dist/commands/config/models/ollama/update.d.ts.map +1 -0
  84. package/dist/commands/config/models/ollama/update.js +27 -0
  85. package/dist/commands/config/models/ollama/update.js.map +1 -0
  86. package/dist/commands/config/path.d.ts +12 -0
  87. package/dist/commands/config/path.d.ts.map +1 -0
  88. package/dist/commands/config/path.js +32 -0
  89. package/dist/commands/config/path.js.map +1 -0
  90. package/dist/commands/config/plugins/add.d.ts +16 -0
  91. package/dist/commands/config/plugins/add.d.ts.map +1 -0
  92. package/dist/commands/config/plugins/add.js +28 -0
  93. package/dist/commands/config/plugins/add.js.map +1 -0
  94. package/dist/commands/config/plugins/allow/add.d.ts +13 -0
  95. package/dist/commands/config/plugins/allow/add.d.ts.map +1 -0
  96. package/dist/commands/config/plugins/allow/add.js +25 -0
  97. package/dist/commands/config/plugins/allow/add.js.map +1 -0
  98. package/dist/commands/config/plugins/allow/remove.d.ts +13 -0
  99. package/dist/commands/config/plugins/allow/remove.d.ts.map +1 -0
  100. package/dist/commands/config/plugins/allow/remove.js +26 -0
  101. package/dist/commands/config/plugins/allow/remove.js.map +1 -0
  102. package/dist/commands/config/plugins/default/add.d.ts +13 -0
  103. package/dist/commands/config/plugins/default/add.d.ts.map +1 -0
  104. package/dist/commands/config/plugins/default/add.js +28 -0
  105. package/dist/commands/config/plugins/default/add.js.map +1 -0
  106. package/dist/commands/config/plugins/default/remove.d.ts +13 -0
  107. package/dist/commands/config/plugins/default/remove.d.ts.map +1 -0
  108. package/dist/commands/config/plugins/default/remove.js +25 -0
  109. package/dist/commands/config/plugins/default/remove.js.map +1 -0
  110. package/dist/commands/config/plugins/get.d.ts +10 -0
  111. package/dist/commands/config/plugins/get.d.ts.map +1 -0
  112. package/dist/commands/config/plugins/get.js +30 -0
  113. package/dist/commands/config/plugins/get.js.map +1 -0
  114. package/dist/commands/config/plugins/installs/add.d.ts +20 -0
  115. package/dist/commands/config/plugins/installs/add.d.ts.map +1 -0
  116. package/dist/commands/config/plugins/installs/add.js +51 -0
  117. package/dist/commands/config/plugins/installs/add.js.map +1 -0
  118. package/dist/commands/config/plugins/installs/list.d.ts +10 -0
  119. package/dist/commands/config/plugins/installs/list.d.ts.map +1 -0
  120. package/dist/commands/config/plugins/installs/list.js +29 -0
  121. package/dist/commands/config/plugins/installs/list.js.map +1 -0
  122. package/dist/commands/config/plugins/installs/remove.d.ts +13 -0
  123. package/dist/commands/config/plugins/installs/remove.d.ts.map +1 -0
  124. package/dist/commands/config/plugins/installs/remove.js +27 -0
  125. package/dist/commands/config/plugins/installs/remove.js.map +1 -0
  126. package/dist/commands/config/plugins/security/update.d.ts +5 -0
  127. package/dist/commands/config/plugins/security/update.d.ts.map +1 -0
  128. package/dist/commands/config/plugins/security/update.js +5 -0
  129. package/dist/commands/config/plugins/security/update.js.map +1 -0
  130. package/dist/commands/config/secrets/add.d.ts +14 -0
  131. package/dist/commands/config/secrets/add.d.ts.map +1 -0
  132. package/dist/commands/config/secrets/add.js +84 -0
  133. package/dist/commands/config/secrets/add.js.map +1 -0
  134. package/dist/commands/config/secrets/get.d.ts +13 -0
  135. package/dist/commands/config/secrets/get.d.ts.map +1 -0
  136. package/dist/commands/config/secrets/get.js +64 -0
  137. package/dist/commands/config/secrets/get.js.map +1 -0
  138. package/dist/commands/config/secrets/list.d.ts +11 -0
  139. package/dist/commands/config/secrets/list.d.ts.map +1 -0
  140. package/dist/commands/config/secrets/list.js +52 -0
  141. package/dist/commands/config/secrets/list.js.map +1 -0
  142. package/dist/commands/config/secrets/providers/doctor.d.ts +10 -0
  143. package/dist/commands/config/secrets/providers/doctor.d.ts.map +1 -0
  144. package/dist/commands/config/secrets/providers/doctor.js +40 -0
  145. package/dist/commands/config/secrets/providers/doctor.js.map +1 -0
  146. package/dist/commands/config/secrets/providers/list.d.ts +10 -0
  147. package/dist/commands/config/secrets/providers/list.d.ts.map +1 -0
  148. package/dist/commands/config/secrets/providers/list.js +31 -0
  149. package/dist/commands/config/secrets/providers/list.js.map +1 -0
  150. package/dist/commands/config/secrets/providers.d.ts +6 -0
  151. package/dist/commands/config/secrets/providers.d.ts.map +1 -0
  152. package/dist/commands/config/secrets/providers.js +9 -0
  153. package/dist/commands/config/secrets/providers.js.map +1 -0
  154. package/dist/commands/config/secrets/remove.d.ts +12 -0
  155. package/dist/commands/config/secrets/remove.d.ts.map +1 -0
  156. package/dist/commands/config/secrets/remove.js +51 -0
  157. package/dist/commands/config/secrets/remove.js.map +1 -0
  158. package/dist/commands/config/secrets/yaml/get.d.ts +11 -0
  159. package/dist/commands/config/secrets/yaml/get.d.ts.map +1 -0
  160. package/dist/commands/config/secrets/yaml/get.js +35 -0
  161. package/dist/commands/config/secrets/yaml/get.js.map +1 -0
  162. package/dist/commands/config/secrets/yaml/set-default-provider.d.ts +13 -0
  163. package/dist/commands/config/secrets/yaml/set-default-provider.d.ts.map +1 -0
  164. package/dist/commands/config/secrets/yaml/set-default-provider.js +24 -0
  165. package/dist/commands/config/secrets/yaml/set-default-provider.js.map +1 -0
  166. package/dist/commands/config/secrets/yaml/set-policy.d.ts +13 -0
  167. package/dist/commands/config/secrets/yaml/set-policy.d.ts.map +1 -0
  168. package/dist/commands/config/secrets/yaml/set-policy.js +29 -0
  169. package/dist/commands/config/secrets/yaml/set-policy.js.map +1 -0
  170. package/dist/commands/config/secrets.d.ts +8 -0
  171. package/dist/commands/config/secrets.d.ts.map +1 -0
  172. package/dist/commands/config/secrets.js +35 -0
  173. package/dist/commands/config/secrets.js.map +1 -0
  174. package/dist/commands/config/security/get.d.ts +11 -0
  175. package/dist/commands/config/security/get.d.ts.map +1 -0
  176. package/dist/commands/config/security/get.js +33 -0
  177. package/dist/commands/config/security/get.js.map +1 -0
  178. package/dist/commands/config/security/plugins/update.d.ts +13 -0
  179. package/dist/commands/config/security/plugins/update.d.ts.map +1 -0
  180. package/dist/commands/config/security/plugins/update.js +49 -0
  181. package/dist/commands/config/security/plugins/update.js.map +1 -0
  182. package/dist/commands/config/tools/add.d.ts +16 -0
  183. package/dist/commands/config/tools/add.d.ts.map +1 -0
  184. package/dist/commands/config/tools/add.js +60 -0
  185. package/dist/commands/config/tools/add.js.map +1 -0
  186. package/dist/commands/config/tools/get.d.ts +10 -0
  187. package/dist/commands/config/tools/get.d.ts.map +1 -0
  188. package/dist/commands/config/tools/get.js +29 -0
  189. package/dist/commands/config/tools/get.js.map +1 -0
  190. package/dist/commands/config/tools/remove.d.ts +13 -0
  191. package/dist/commands/config/tools/remove.d.ts.map +1 -0
  192. package/dist/commands/config/tools/remove.js +25 -0
  193. package/dist/commands/config/tools/remove.js.map +1 -0
  194. package/dist/commands/config/tools/update.d.ts +16 -0
  195. package/dist/commands/config/tools/update.d.ts.map +1 -0
  196. package/dist/commands/config/tools/update.js +59 -0
  197. package/dist/commands/config/tools/update.js.map +1 -0
  198. package/dist/commands/config.d.ts +8 -0
  199. package/dist/commands/config.d.ts.map +1 -0
  200. package/dist/commands/config.js +43 -0
  201. package/dist/commands/config.js.map +1 -0
  202. package/dist/commands/graph.d.ts +14 -0
  203. package/dist/commands/graph.d.ts.map +1 -0
  204. package/dist/commands/graph.js +39 -0
  205. package/dist/commands/graph.js.map +1 -0
  206. package/dist/commands/run.d.ts +23 -0
  207. package/dist/commands/run.d.ts.map +1 -0
  208. package/dist/commands/run.js +363 -0
  209. package/dist/commands/run.js.map +1 -0
  210. package/dist/commands/trace/list.d.ts +10 -0
  211. package/dist/commands/trace/list.d.ts.map +1 -0
  212. package/dist/commands/trace/list.js +32 -0
  213. package/dist/commands/trace/list.js.map +1 -0
  214. package/dist/commands/trace.d.ts +14 -0
  215. package/dist/commands/trace.d.ts.map +1 -0
  216. package/dist/commands/trace.js +43 -0
  217. package/dist/commands/trace.js.map +1 -0
  218. package/dist/commands/validate.d.ts +14 -0
  219. package/dist/commands/validate.d.ts.map +1 -0
  220. package/dist/commands/validate.js +93 -0
  221. package/dist/commands/validate.js.map +1 -0
  222. package/dist/lib/command-helpers.d.ts +16 -0
  223. package/dist/lib/command-helpers.d.ts.map +1 -0
  224. package/dist/lib/command-helpers.js +27 -0
  225. package/dist/lib/command-helpers.js.map +1 -0
  226. package/dist/lib/config-flags.d.ts +6 -0
  227. package/dist/lib/config-flags.d.ts.map +1 -0
  228. package/dist/lib/config-flags.js +14 -0
  229. package/dist/lib/config-flags.js.map +1 -0
  230. package/dist/lib/default-ecp-config.d.ts +5 -0
  231. package/dist/lib/default-ecp-config.d.ts.map +1 -0
  232. package/dist/lib/default-ecp-config.js +47 -0
  233. package/dist/lib/default-ecp-config.js.map +1 -0
  234. package/dist/lib/ecp-environment-command.d.ts +20 -0
  235. package/dist/lib/ecp-environment-command.d.ts.map +1 -0
  236. package/dist/lib/ecp-environment-command.js +33 -0
  237. package/dist/lib/ecp-environment-command.js.map +1 -0
  238. package/dist/lib/ecp-home.d.ts +3 -0
  239. package/dist/lib/ecp-home.d.ts.map +1 -0
  240. package/dist/lib/ecp-home.js +9 -0
  241. package/dist/lib/ecp-home.js.map +1 -0
  242. package/dist/lib/inputs.d.ts +3 -0
  243. package/dist/lib/inputs.d.ts.map +1 -0
  244. package/dist/lib/inputs.js +7 -0
  245. package/dist/lib/inputs.js.map +1 -0
  246. package/dist/lib/parsing.d.ts +12 -0
  247. package/dist/lib/parsing.d.ts.map +1 -0
  248. package/dist/lib/parsing.js +57 -0
  249. package/dist/lib/parsing.js.map +1 -0
  250. package/dist/lib/progress.d.ts +4 -0
  251. package/dist/lib/progress.d.ts.map +1 -0
  252. package/dist/lib/progress.js +111 -0
  253. package/dist/lib/progress.js.map +1 -0
  254. package/dist/lib/secret-provider-ids.d.ts +3 -0
  255. package/dist/lib/secret-provider-ids.d.ts.map +1 -0
  256. package/dist/lib/secret-provider-ids.js +3 -0
  257. package/dist/lib/secret-provider-ids.js.map +1 -0
  258. package/dist/lib/secrets-config.d.ts +15 -0
  259. package/dist/lib/secrets-config.d.ts.map +1 -0
  260. package/dist/lib/secrets-config.js +12 -0
  261. package/dist/lib/secrets-config.js.map +1 -0
  262. package/dist/lib/system-config-cli.d.ts +50 -0
  263. package/dist/lib/system-config-cli.d.ts.map +1 -0
  264. package/dist/lib/system-config-cli.js +108 -0
  265. package/dist/lib/system-config-cli.js.map +1 -0
  266. package/dist/lib/trace-files.d.ts +2 -0
  267. package/dist/lib/trace-files.d.ts.map +1 -0
  268. package/dist/lib/trace-files.js +14 -0
  269. package/dist/lib/trace-files.js.map +1 -0
  270. package/dist/lib/trace-view.d.ts +4 -0
  271. package/dist/lib/trace-view.d.ts.map +1 -0
  272. package/dist/lib/trace-view.js +8 -0
  273. package/dist/lib/trace-view.js.map +1 -0
  274. package/package.json +38 -7
  275. package/bin/ecp.cjs +0 -21
  276. package/dist/index.d.ts +0 -13
  277. package/dist/index.d.ts.map +0 -1
  278. package/dist/index.js +0 -471
  279. package/dist/index.js.map +0 -1
@@ -0,0 +1,43 @@
1
+ import { Command } from "@oclif/core";
2
+ import { OS_PROVIDER_ID } from "../lib/secret-provider-ids.js";
3
+ export default class Config extends Command {
4
+ static summary = "Manage ECP system configuration";
5
+ static description = `Inspect and edit system config (project ecp.config.* or global ~/.ecp/).
6
+
7
+ v0.5 layout: policy under top-level security (mirrors models, tools, loggers, …); wiring under models.providers, tools.servers, loggers.config, agents.endpoints, plugins.installs, secrets.
8
+
9
+ Subcommands: security, plugins (installs + deprecated allow paths), models, tools, loggers, secrets (store ops + yaml *), endpoints (agents.endpoints).
10
+ You can also edit the file directly — use "ecp config path" for the resolved path.`;
11
+ static examples = [
12
+ "ecp config init",
13
+ "ecp config init --global",
14
+ "ecp config get",
15
+ "ecp config path --global",
16
+ "ecp config plugins get",
17
+ "ecp config models allow add ollama llama3.2:3b",
18
+ "ecp config tools add fetch --json '{\"transport\":{\"type\":\"stdio\",\"command\":\"docker\",\"args\":[\"run\",\"-i\",\"--rm\",\"mcp/fetch\"]}}'",
19
+ `ecp config secrets add --provider ${OS_PROVIDER_ID} --key server/fetch.token --prompt`,
20
+ "ecp config secrets providers doctor",
21
+ ];
22
+ async run() {
23
+ await this.parse(Config);
24
+ this.log([
25
+ "Usage: ecp config <subcommand>",
26
+ "",
27
+ " init Write best-practices default if missing",
28
+ " path Print config file path",
29
+ " get Print merged config (YAML or JSON)",
30
+ " security Dump security.* (policy mirror)",
31
+ " plugins installs list/add/remove; legacy allow → security.models",
32
+ " models CRUD for models.providers",
33
+ " tools CRUD for tools.servers",
34
+ " loggers security.loggers + loggers.config",
35
+ ` secrets Store ops + yaml get/set-default-provider/set-policy`,
36
+ " endpoints CRUD for agents.endpoints (A2A URLs)",
37
+ "",
38
+ "Resource commands use verbs: add, get, remove, update (see ecp config <topic> --help).",
39
+ "Run ecp config --help for flags and full help.",
40
+ ].join("\n"));
41
+ }
42
+ }
43
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,OAAO;IACzC,MAAM,CAAC,OAAO,GAAG,iCAAiC,CAAC;IAEnD,MAAM,CAAC,WAAW,GAAG;;;;;mFAK4D,CAAC;IAElF,MAAM,CAAC,QAAQ,GAAG;QAChB,iBAAiB;QACjB,0BAA0B;QAC1B,gBAAgB;QAChB,0BAA0B;QAC1B,wBAAwB;QACxB,gDAAgD;QAChD,kJAAkJ;QAClJ,qCAAqC,cAAc,oCAAoC;QACvF,qCAAqC;KACtC,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,GAAG,CACN;YACE,gCAAgC;YAChC,EAAE;YACF,6DAA6D;YAC7D,4CAA4C;YAC5C,wDAAwD;YACxD,qDAAqD;YACrD,8EAA8E;YAC9E,+CAA+C;YAC/C,4CAA4C;YAC5C,uDAAuD;YACvD,0EAA0E;YAC1E,0DAA0D;YAC1D,EAAE;YACF,wFAAwF;YACxF,gDAAgD;SACjD,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { EcpEnvironmentCommand } from "../lib/ecp-environment-command.js";
2
+ export default class Graph extends EcpEnvironmentCommand {
3
+ static summary: string;
4
+ static hidden: boolean;
5
+ static flags: {
6
+ "trace-dir": import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
7
+ environment: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ };
9
+ static args: {
10
+ runId: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
11
+ };
12
+ run(): Promise<void>;
13
+ }
14
+ //# sourceMappingURL=graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/commands/graph.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,qBAAqB;IACtD,MAAM,CAAC,OAAO,SAA6B;IAE3C,MAAM,CAAC,MAAM,UAAQ;IAErB,MAAM,CAAC,KAAK;;;MAMV;IAEF,MAAM,CAAC,IAAI;;MAKT;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAoB3B"}
@@ -0,0 +1,39 @@
1
+ import { Flags, Args } from "@oclif/core";
2
+ import { readFileSync, existsSync } from "node:fs";
3
+ import { resolve } from "node:path";
4
+ import { renderTraceView } from "../lib/trace-view.js";
5
+ import { getDefaultTraceDir } from "../lib/ecp-home.js";
6
+ import { EcpEnvironmentCommand } from "../lib/ecp-environment-command.js";
7
+ export default class Graph extends EcpEnvironmentCommand {
8
+ static summary = "Display execution graph";
9
+ // Backwards-compatible alias for `ecp trace --output graph`.
10
+ static hidden = true;
11
+ static flags = {
12
+ ...EcpEnvironmentCommand.flags,
13
+ "trace-dir": Flags.string({
14
+ description: "Directory for trace files",
15
+ default: getDefaultTraceDir(),
16
+ }),
17
+ };
18
+ static args = {
19
+ runId: Args.string({
20
+ required: true,
21
+ description: "run id (e.g. run-123...)",
22
+ }),
23
+ };
24
+ async run() {
25
+ const { args, flags } = await this.parse(Graph);
26
+ this.applyEnvironmentFlag(flags);
27
+ const runId = args.runId;
28
+ const traceDir = flags["trace-dir"];
29
+ const filePath = resolve(traceDir, `${runId}.json`);
30
+ if (!existsSync(filePath)) {
31
+ this.error(`\n Trace not found: ${filePath}\n Run ` +
32
+ `ecp run <context.yaml> (tracing is enabled by default; use --no-trace to disable)\n`, { exit: 1 });
33
+ }
34
+ const trace = JSON.parse(readFileSync(filePath, "utf-8"));
35
+ const rendered = await renderTraceView(trace, "graph");
36
+ console.log(rendered);
37
+ }
38
+ }
39
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/commands/graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAAE,eAAe,EAA0B,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,qBAAqB;IACtD,MAAM,CAAC,OAAO,GAAG,yBAAyB,CAAC;IAC3C,6DAA6D;IAC7D,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;IAErB,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,qBAAqB,CAAC,KAAK;QAC9B,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC;YACxB,WAAW,EAAE,2BAA2B;YACxC,OAAO,EAAE,kBAAkB,EAAE;SAC9B,CAAC;KACH,CAAC;IAEF,MAAM,CAAC,IAAI,GAAG;QACZ,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;YACjB,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,0BAA0B;SACxC,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChD,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAEzB,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC;QAEpD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,KAAK,CACR,wBAAwB,QAAQ,UAAU;gBACxC,qFAAqF,EACvF,EAAE,IAAI,EAAE,CAAC,EAAE,CACZ,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAmB,CAAC;QAC5E,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,KAAK,EAAE,OAA4B,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { EcpEnvironmentCommand } from "../lib/ecp-environment-command.js";
2
+ export default class Run extends EcpEnvironmentCommand {
3
+ static summary: string;
4
+ static flags: {
5
+ input: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
6
+ model: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
+ provider: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ config: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
9
+ trace: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ "trace-dir": import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
11
+ logger: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ debug: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
+ environment: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ };
15
+ static args: {
16
+ contextPath: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
17
+ };
18
+ run(): Promise<void>;
19
+ private createModelProviderOrFail;
20
+ private assertProviderAllowedByPolicy;
21
+ private assertModelAllowedByPolicy;
22
+ }
23
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAsCA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AA+C1E,MAAM,CAAC,OAAO,OAAO,GAAI,SAAQ,qBAAqB;IACpD,MAAM,CAAC,OAAO,SAAgC;IAE9C,MAAM,CAAC,KAAK;;;;;;;;;;MA4CV;IAEF,MAAM,CAAC,IAAI;;MAKT;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IA2Q1B,OAAO,CAAC,yBAAyB;IAmBjC,OAAO,CAAC,6BAA6B;IAsBrC,OAAO,CAAC,0BAA0B;CAenC"}
@@ -0,0 +1,363 @@
1
+ import { Flags, Args } from "@oclif/core";
2
+ import { resolve } from "node:path";
3
+ import ora from "ora";
4
+ import { BUILTIN_PLUGIN_VERSION, createDefaultSecretBroker, ECPEngine, loadContext, resolveInputs, resolveSystemConfig, MCPToolInvoker, A2AAgentTransport, ExtensionRegistry, registerBuiltinModelProviders, registerBuiltinLoggers, registerBuiltinPlugins, TraceCollector, ConsoleTraceExporter, JsonFileTraceExporter, getSecurityConfig, resolveAgentEndpointsMap, } from "@executioncontrolprotocol/runtime";
5
+ import { getContextPlugins } from "@executioncontrolprotocol/spec";
6
+ import { commandErrorMessage } from "../lib/command-helpers.js";
7
+ import { parseKeyValueInputs, splitCommaSeparated } from "../lib/parsing.js";
8
+ import { createProgressHandler } from "../lib/progress.js";
9
+ import { getDefaultTraceDir } from "../lib/ecp-home.js";
10
+ import { EcpEnvironmentCommand } from "../lib/ecp-environment-command.js";
11
+ import { resolveDotenvPathFromConfig, resolveSecretPolicyFromConfig } from "../lib/secrets-config.js";
12
+ function contextHasMemory(context) {
13
+ const visit = (orchestrator) => {
14
+ if (orchestrator.memory)
15
+ return true;
16
+ for (const executor of orchestrator.executors ?? []) {
17
+ if (executor.memory)
18
+ return true;
19
+ }
20
+ for (const child of orchestrator.orchestrators ?? []) {
21
+ if (visit(child))
22
+ return true;
23
+ }
24
+ return false;
25
+ };
26
+ if (context.orchestrator && visit(context.orchestrator))
27
+ return true;
28
+ return (context.executors ?? []).some((e) => e.memory != null);
29
+ }
30
+ function inferModelProviderFromContext(context) {
31
+ const providers = new Set();
32
+ const visitExecutor = (executor) => {
33
+ const providerName = executor.model?.provider?.name;
34
+ if (providerName)
35
+ providers.add(providerName);
36
+ };
37
+ const visitOrchestrator = (orchestrator) => {
38
+ for (const executor of orchestrator.executors ?? []) {
39
+ visitExecutor(executor);
40
+ }
41
+ for (const child of orchestrator.orchestrators ?? []) {
42
+ visitOrchestrator(child);
43
+ }
44
+ };
45
+ if (context.orchestrator)
46
+ visitOrchestrator(context.orchestrator);
47
+ for (const executor of context.executors ?? []) {
48
+ visitExecutor(executor);
49
+ }
50
+ if (providers.size === 1)
51
+ return [...providers][0];
52
+ if (providers.size === 0)
53
+ return undefined;
54
+ throw new Error(`Context declares multiple model providers (${[...providers].join(", ")}). Please pass --provider.`);
55
+ }
56
+ export default class Run extends EcpEnvironmentCommand {
57
+ static summary = "Execute a Context manifest";
58
+ static flags = {
59
+ ...EcpEnvironmentCommand.flags,
60
+ input: Flags.string({
61
+ char: "i",
62
+ multiple: true,
63
+ description: "Set an input value (repeatable, key=value)",
64
+ summary: "Input value (key=value)",
65
+ }),
66
+ model: Flags.string({
67
+ char: "m",
68
+ description: "Override model name (must be allowed by system config policy)",
69
+ }),
70
+ provider: Flags.string({
71
+ char: "p",
72
+ description: "Override provider (must be allowed by system config policy)",
73
+ options: ["openai", "ollama"],
74
+ }),
75
+ config: Flags.string({
76
+ char: "c",
77
+ description: "Path to system config (YAML/JSON). Default: ./ecp.config.yaml, ./ecp.config.json, then ~/.ecp/ (see ecp config path)",
78
+ default: "",
79
+ }),
80
+ trace: Flags.boolean({
81
+ char: "t",
82
+ description: "Enable tracing (saves to the user traces directory by default)",
83
+ default: true,
84
+ allowNo: true,
85
+ }),
86
+ "trace-dir": Flags.string({
87
+ description: "Directory for trace files",
88
+ default: getDefaultTraceDir(),
89
+ }),
90
+ logger: Flags.string({
91
+ char: "l",
92
+ multiple: true,
93
+ multipleNonGreedy: true,
94
+ description: "Enable a logger plugin (e.g. file). Repeatable or comma-separated.",
95
+ }),
96
+ debug: Flags.boolean({
97
+ char: "d",
98
+ description: "Enable debug logging",
99
+ default: false,
100
+ }),
101
+ };
102
+ static args = {
103
+ contextPath: Args.string({
104
+ required: true,
105
+ description: "Path to context.yaml (or context.json)",
106
+ }),
107
+ };
108
+ async run() {
109
+ const { args, flags } = await this.parse(Run);
110
+ this.applyEnvironmentFlag(flags);
111
+ const contextPath = resolve(args.contextPath);
112
+ const inputs = (() => {
113
+ try {
114
+ return parseKeyValueInputs(flags.input, "--input");
115
+ }
116
+ catch (err) {
117
+ this.error(commandErrorMessage(err), { exit: 1 });
118
+ }
119
+ })();
120
+ const cwd = process.cwd();
121
+ const systemConfig = (() => {
122
+ try {
123
+ return resolveSystemConfig(flags.config ? flags.config : undefined, cwd);
124
+ }
125
+ catch (err) {
126
+ this.error(commandErrorMessage(err), { exit: 1 });
127
+ }
128
+ })();
129
+ const loggerRaw = splitCommaSeparated(flags.logger);
130
+ const context = loadContext(contextPath);
131
+ let providerToUse;
132
+ try {
133
+ providerToUse = flags.provider ?? inferModelProviderFromContext(context);
134
+ }
135
+ catch (err) {
136
+ this.error(commandErrorMessage(err), { exit: 1 });
137
+ }
138
+ if (!providerToUse) {
139
+ this.error('Model provider could not be inferred from the Context. Pass --provider openai|ollama.', { exit: 1 });
140
+ }
141
+ this.assertProviderAllowedByPolicy(providerToUse, systemConfig);
142
+ const selectedModel = flags.model;
143
+ if (selectedModel) {
144
+ this.assertModelAllowedByPolicy(providerToUse, selectedModel, systemConfig);
145
+ }
146
+ const secModels = getSecurityConfig(systemConfig)?.models;
147
+ const enableFromConfig = secModels?.defaultProviders ?? [];
148
+ const enableForRun = [...new Set([...enableFromConfig, providerToUse])];
149
+ const allowProviders = secModels?.allowProviders;
150
+ if (allowProviders && allowProviders.length > 0) {
151
+ for (const id of enableForRun) {
152
+ if (!allowProviders.includes(id)) {
153
+ this.error(`Provider "${id}" cannot be used because it is not in system config security.models.allowProviders.\n` +
154
+ `Allowed: ${allowProviders.join(", ")}\n` +
155
+ `Update your config first (ecp.config.yaml / ecp config) and rerun.`, { exit: 1 });
156
+ }
157
+ }
158
+ }
159
+ const dotenvPath = this.effectiveDotenvPath ?? resolveDotenvPathFromConfig(cwd, systemConfig);
160
+ const { broker: secretBroker } = createDefaultSecretBroker({
161
+ policy: resolveSecretPolicyFromConfig(systemConfig),
162
+ dotenvPath,
163
+ cwd,
164
+ });
165
+ const registry = new ExtensionRegistry();
166
+ const providers = systemConfig?.models?.providers ?? {};
167
+ const openaiDefaults = providers.openai ?? {};
168
+ const ollamaDefaults = providers.ollama ?? {};
169
+ const ollamaBaseURL = typeof ollamaDefaults.config?.baseURL === "string"
170
+ ? ollamaDefaults.config.baseURL
171
+ : undefined;
172
+ registerBuiltinModelProviders(registry, {
173
+ version: BUILTIN_PLUGIN_VERSION,
174
+ openai: { defaultModel: selectedModel ?? openaiDefaults.defaultModel },
175
+ ollama: {
176
+ baseURL: ollamaBaseURL,
177
+ defaultModel: selectedModel ?? ollamaDefaults.defaultModel,
178
+ },
179
+ });
180
+ registerBuiltinLoggers(registry, { version: BUILTIN_PLUGIN_VERSION, file: {} });
181
+ registerBuiltinPlugins(registry, { version: BUILTIN_PLUGIN_VERSION });
182
+ registry.lock();
183
+ const modelProvider = this.createModelProviderOrFail(registry, providerToUse);
184
+ const toolInvoker = new MCPToolInvoker();
185
+ const agentTransport = new A2AAgentTransport();
186
+ const toolServers = systemConfig?.tools?.servers;
187
+ const mcpServerAllowList = getSecurityConfig(systemConfig)?.tools?.allowServers;
188
+ if (ollamaBaseURL) {
189
+ try {
190
+ new URL(ollamaBaseURL);
191
+ }
192
+ catch {
193
+ this.error(`Invalid models.providers.ollama.config.baseURL in system config: "${ollamaBaseURL}"`, { exit: 1 });
194
+ }
195
+ }
196
+ const loggerCallbacks = [];
197
+ const loggersConfig = systemConfig?.loggers;
198
+ const secLoggers = getSecurityConfig(systemConfig)?.loggers;
199
+ const loggersEnabled = loggerRaw.length > 0 ? loggerRaw : secLoggers?.defaultEnable ?? [];
200
+ const loggersAllow = secLoggers?.allowEnable;
201
+ if (loggersAllow && loggersAllow.length > 0) {
202
+ for (const id of loggersEnabled) {
203
+ if (!loggersAllow.includes(id)) {
204
+ this.error(`Logger "${id}" is not in system config security.loggers.allowEnable. Allowed: ${loggersAllow.join(", ")}`, { exit: 1 });
205
+ }
206
+ }
207
+ }
208
+ for (const id of loggersEnabled) {
209
+ try {
210
+ const cb = registry.createLogger(id, loggersConfig?.config?.[id]);
211
+ loggerCallbacks.push(cb);
212
+ }
213
+ catch (err) {
214
+ this.error(`Failed to create logger "${id}": ${commandErrorMessage(err)}`, { exit: 1 });
215
+ }
216
+ }
217
+ const spinner = flags.debug ? undefined : ora({ stream: process.stderr }).start("Loading context...");
218
+ const builtInProgress = spinner
219
+ ? createProgressHandler(spinner, contextPath, context.metadata.name)
220
+ : undefined;
221
+ const onProgress = builtInProgress && loggerCallbacks.length > 0
222
+ ? [builtInProgress, ...loggerCallbacks]
223
+ : builtInProgress ?? (loggerCallbacks.length > 0 ? loggerCallbacks : undefined);
224
+ if (flags.debug) {
225
+ console.log(`\n Running: ${contextPath}\n`);
226
+ }
227
+ // Keep memory-store lifecycle in the CLI so we can close it after a run.
228
+ let memoryStore;
229
+ if (contextHasMemory(context)) {
230
+ const pluginReg = registry.listPlugins().find((p) => p.id === "memory");
231
+ if (pluginReg) {
232
+ try {
233
+ const instance = pluginReg.create(getContextPlugins(context)?.config?.memory);
234
+ memoryStore = await instance.open();
235
+ }
236
+ catch (err) {
237
+ if (flags.debug) {
238
+ console.error(` Memory plugin open failed: ${commandErrorMessage(err)}\n`);
239
+ }
240
+ }
241
+ }
242
+ }
243
+ const agentEndpoints = resolveAgentEndpointsMap(systemConfig);
244
+ const agentEndpointsForEngine = Object.keys(agentEndpoints).length > 0 ? agentEndpoints : undefined;
245
+ const engine = new ECPEngine(modelProvider, toolInvoker, agentTransport, {
246
+ toolServers,
247
+ mcpServerAllowList,
248
+ secretBroker,
249
+ agentEndpoints: agentEndpointsForEngine,
250
+ defaultModel: selectedModel ?? openaiDefaults.defaultModel ?? ollamaDefaults.defaultModel,
251
+ modelOverride: selectedModel,
252
+ debug: flags.debug,
253
+ trace: flags.trace,
254
+ memoryStore,
255
+ onProgress,
256
+ plugins: {
257
+ registry,
258
+ enable: enableForRun,
259
+ allowEnable: secModels?.allowProviders,
260
+ security: getSecurityConfig(systemConfig)?.plugins ?? getContextPlugins(context)?.security,
261
+ },
262
+ });
263
+ if (flags.trace) {
264
+ const collector = new TraceCollector();
265
+ collector.addExporters(new ConsoleTraceExporter(), new JsonFileTraceExporter({ outputDir: flags["trace-dir"] }));
266
+ engine.setTraceCollector(collector);
267
+ }
268
+ let resolvedInputs;
269
+ try {
270
+ resolvedInputs = resolveInputs(context, inputs);
271
+ }
272
+ catch (err) {
273
+ const msg = commandErrorMessage(err);
274
+ const missing = msg.match(/^Missing required input: "([^"]+)"$/);
275
+ if (missing) {
276
+ const inputName = missing[1];
277
+ this.error(`\n Error: Missing required input "${inputName}" defined in the Context manifest.\n` +
278
+ ` Provide it via --input ${inputName}=<value> (e.g. -i ${inputName}="...").\n`, { exit: 1 });
279
+ }
280
+ throw err;
281
+ }
282
+ const result = await engine.run({ context, inputs: resolvedInputs });
283
+ if (memoryStore && typeof memoryStore.close === "function") {
284
+ await memoryStore.close();
285
+ }
286
+ if (spinner) {
287
+ if (result.success)
288
+ spinner.succeed("Execution completed.");
289
+ else
290
+ spinner.fail("Execution failed.");
291
+ }
292
+ console.log("\n--- Execution Result ---");
293
+ console.log(` Run ID: ${result.runId}`);
294
+ console.log(` Context: ${result.contextName} v${result.contextVersion}`);
295
+ console.log(` Success: ${result.success}`);
296
+ console.log(` Duration: ${result.durationMs}ms`);
297
+ console.log(` Tool calls: ${result.totalBudgetUsage.toolCalls}`);
298
+ if (result.error) {
299
+ console.log(` Error: ${result.error}`);
300
+ }
301
+ if (result.output) {
302
+ console.log("\n--- Output ---");
303
+ console.log(JSON.stringify(result.output, null, 2));
304
+ }
305
+ if (!spinner) {
306
+ console.log("\n--- Executor Outputs ---");
307
+ for (const [name, output] of Object.entries(result.executorOutputs)) {
308
+ console.log(`\n [${name}]`);
309
+ console.log(JSON.stringify(output, null, 2));
310
+ }
311
+ }
312
+ if (flags.debug) {
313
+ console.log("\n--- Execution Log ---");
314
+ for (const entry of result.log) {
315
+ console.log(` [${entry.level.toUpperCase().padEnd(5)}] ${entry.message}`);
316
+ }
317
+ }
318
+ if (flags.trace) {
319
+ console.log(`\n Trace saved to: ${flags["trace-dir"]}/${result.runId}.json`);
320
+ console.log(` View with: ecp trace ${result.runId}`);
321
+ console.log(` Graph with: ecp trace --output graph ${result.runId}`);
322
+ }
323
+ this.exit(result.success ? 0 : 1);
324
+ }
325
+ createModelProviderOrFail(registry, providerId) {
326
+ const registration = registry.getModelProviderRegistration(providerId);
327
+ if (!registration) {
328
+ const known = registry.listModelProviders().map((p) => p.id).join(", ");
329
+ this.error(`Unknown provider "${providerId}". Registered providers: ${known}`, { exit: 1 });
330
+ }
331
+ try {
332
+ return registry.createModelProvider(providerId);
333
+ }
334
+ catch (err) {
335
+ const rawMsg = commandErrorMessage(err);
336
+ const hint = err && typeof err === "object" && "hint" in err ? err.hint : undefined;
337
+ this.error(`${rawMsg}${hint ? `\n${hint}` : ""}`, { exit: 1 });
338
+ }
339
+ }
340
+ assertProviderAllowedByPolicy(providerId, systemConfig) {
341
+ const allowProviders = getSecurityConfig(systemConfig)?.models?.allowProviders;
342
+ if (allowProviders?.length && !allowProviders.includes(providerId)) {
343
+ this.error(`Provider "${providerId}" is blocked by system config security.models.allowProviders.\n` +
344
+ `Allowed: ${allowProviders.join(", ")}\n` +
345
+ `Update your config first (ecp.config.yaml / ecp config) and rerun.`, { exit: 1 });
346
+ }
347
+ const allowIds = getSecurityConfig(systemConfig)?.plugins?.allowIds;
348
+ if (allowIds?.length && !allowIds.includes(providerId)) {
349
+ this.error(`Provider "${providerId}" is blocked by system config security.plugins.allowIds.\n` +
350
+ `Allowed IDs: ${allowIds.join(", ")}\n` +
351
+ `Update your config first (ecp.config.yaml / ecp config) and rerun.`, { exit: 1 });
352
+ }
353
+ }
354
+ assertModelAllowedByPolicy(providerId, modelName, systemConfig) {
355
+ const allowedModels = systemConfig?.models?.providers?.[providerId]?.allowedModels;
356
+ if (allowedModels?.length && !allowedModels.includes(modelName)) {
357
+ this.error(`Model "${modelName}" is blocked for provider "${providerId}" by system config models.providers.${providerId}.allowedModels.\n` +
358
+ `Allowed models: ${allowedModels.join(", ")}\n` +
359
+ `Update your config first (ecp.config.yaml / ecp config) and rerun.`, { exit: 1 });
360
+ }
361
+ }
362
+ }
363
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { EcpEnvironmentCommand } from "../../lib/ecp-environment-command.js";
2
+ export default class TraceList extends EcpEnvironmentCommand {
3
+ static summary: string;
4
+ static flags: {
5
+ "trace-dir": import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
6
+ environment: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
+ };
8
+ run(): Promise<void>;
9
+ }
10
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/trace/list.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAE7E,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,qBAAqB;IAC1D,MAAM,CAAC,OAAO,SAAmC;IAEjD,MAAM,CAAC,KAAK;;;MAMV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAkB3B"}
@@ -0,0 +1,32 @@
1
+ import { Flags } from "@oclif/core";
2
+ import { runWithCommandError } from "../../lib/command-helpers.js";
3
+ import { listTraceIds } from "../../lib/trace-files.js";
4
+ import { getDefaultTraceDir } from "../../lib/ecp-home.js";
5
+ import { EcpEnvironmentCommand } from "../../lib/ecp-environment-command.js";
6
+ export default class TraceList extends EcpEnvironmentCommand {
7
+ static summary = "List locally available traces";
8
+ static flags = {
9
+ ...EcpEnvironmentCommand.flags,
10
+ "trace-dir": Flags.string({
11
+ description: "Directory for trace files",
12
+ default: getDefaultTraceDir(),
13
+ }),
14
+ };
15
+ async run() {
16
+ const { flags } = await this.parse(TraceList);
17
+ this.applyEnvironmentFlag(flags);
18
+ const traceDir = flags["trace-dir"];
19
+ await runWithCommandError(this, async () => {
20
+ const ids = await listTraceIds(traceDir);
21
+ if (ids.length === 0) {
22
+ console.log(`No trace files found in ${traceDir}.`);
23
+ return;
24
+ }
25
+ console.log(`Available traces in ${traceDir}:`);
26
+ for (const id of ids) {
27
+ console.log(`- ${id}`);
28
+ }
29
+ });
30
+ }
31
+ }
32
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/trace/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAE7E,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,qBAAqB;IAC1D,MAAM,CAAC,OAAO,GAAG,+BAA+B,CAAC;IAEjD,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,qBAAqB,CAAC,KAAK;QAC9B,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC;YACxB,WAAW,EAAE,2BAA2B;YACxC,OAAO,EAAE,kBAAkB,EAAE;SAC9B,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;QAEpC,MAAM,mBAAmB,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;YACzC,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;YACzC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,CAAC,2BAA2B,QAAQ,GAAG,CAAC,CAAC;gBACpD,OAAO;YACT,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,uBAAuB,QAAQ,GAAG,CAAC,CAAC;YAChD,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACzB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { EcpEnvironmentCommand } from "../lib/ecp-environment-command.js";
2
+ export default class Trace extends EcpEnvironmentCommand {
3
+ static summary: string;
4
+ static flags: {
5
+ output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
6
+ "trace-dir": import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
7
+ environment: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ };
9
+ static args: {
10
+ runId: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
11
+ };
12
+ run(): Promise<void>;
13
+ }
14
+ //# sourceMappingURL=trace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../src/commands/trace.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,qBAAqB;IACtD,MAAM,CAAC,OAAO,SAA6B;IAE3C,MAAM,CAAC,KAAK;;;;MAWV;IAEF,MAAM,CAAC,IAAI;;MAKT;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAqB3B"}
@@ -0,0 +1,43 @@
1
+ import { Flags, Args } from "@oclif/core";
2
+ import { readFileSync, existsSync } from "node:fs";
3
+ import { resolve } from "node:path";
4
+ import { renderTraceView } from "../lib/trace-view.js";
5
+ import { getDefaultTraceDir } from "../lib/ecp-home.js";
6
+ import { EcpEnvironmentCommand } from "../lib/ecp-environment-command.js";
7
+ export default class Trace extends EcpEnvironmentCommand {
8
+ static summary = "Display execution trace";
9
+ static flags = {
10
+ ...EcpEnvironmentCommand.flags,
11
+ output: Flags.string({
12
+ description: "Render mode: 'text' (human log) or 'graph' (ASCII visualization)",
13
+ options: ["text", "graph"],
14
+ default: "text",
15
+ }),
16
+ "trace-dir": Flags.string({
17
+ description: "Directory for trace files",
18
+ default: getDefaultTraceDir(),
19
+ }),
20
+ };
21
+ static args = {
22
+ runId: Args.string({
23
+ required: true,
24
+ description: "run id (e.g. run-123...)",
25
+ }),
26
+ };
27
+ async run() {
28
+ const { args, flags } = await this.parse(Trace);
29
+ this.applyEnvironmentFlag(flags);
30
+ const runId = args.runId;
31
+ const output = flags.output;
32
+ const traceDir = flags["trace-dir"];
33
+ const filePath = resolve(traceDir, `${runId}.json`);
34
+ if (!existsSync(filePath)) {
35
+ this.error(`\n Trace not found: ${filePath}\n Run ` +
36
+ `ecp run <context.yaml> (tracing is enabled by default; use --no-trace to disable)\n`, { exit: 1 });
37
+ }
38
+ const trace = JSON.parse(readFileSync(filePath, "utf-8"));
39
+ const rendered = await renderTraceView(trace, output);
40
+ console.log(rendered);
41
+ }
42
+ }
43
+ //# sourceMappingURL=trace.js.map