@executioncontrolprotocol/cli 0.5.0 → 0.10.1

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 (335) hide show
  1. package/README.md +84 -47
  2. package/bin/dev.js +4 -5
  3. package/bin/ecp.js +7 -0
  4. package/bin/run.cmd +1 -1
  5. package/bin/run.js +2 -6
  6. package/dist/commands/compile.d.ts +15 -0
  7. package/dist/commands/compile.d.ts.map +1 -0
  8. package/dist/commands/compile.js +44 -0
  9. package/dist/commands/compile.js.map +1 -0
  10. package/dist/commands/config/secrets/add.d.ts +6 -5
  11. package/dist/commands/config/secrets/add.d.ts.map +1 -1
  12. package/dist/commands/config/secrets/add.js +30 -63
  13. package/dist/commands/config/secrets/add.js.map +1 -1
  14. package/dist/commands/config/secrets/get.d.ts +5 -5
  15. package/dist/commands/config/secrets/get.d.ts.map +1 -1
  16. package/dist/commands/config/secrets/get.js +21 -46
  17. package/dist/commands/config/secrets/get.js.map +1 -1
  18. package/dist/commands/config/secrets/list.d.ts +1 -5
  19. package/dist/commands/config/secrets/list.d.ts.map +1 -1
  20. package/dist/commands/config/secrets/list.js +11 -41
  21. package/dist/commands/config/secrets/list.js.map +1 -1
  22. package/dist/commands/config/secrets/remove.d.ts +3 -5
  23. package/dist/commands/config/secrets/remove.d.ts.map +1 -1
  24. package/dist/commands/config/secrets/remove.js +16 -42
  25. package/dist/commands/config/secrets/remove.js.map +1 -1
  26. package/dist/commands/config/secrets.d.ts +1 -0
  27. package/dist/commands/config/secrets.d.ts.map +1 -1
  28. package/dist/commands/config/secrets.js +14 -18
  29. package/dist/commands/config/secrets.js.map +1 -1
  30. package/dist/commands/decode.d.ts +18 -0
  31. package/dist/commands/decode.d.ts.map +1 -0
  32. package/dist/commands/decode.js +66 -0
  33. package/dist/commands/decode.js.map +1 -0
  34. package/dist/commands/describe.d.ts +13 -0
  35. package/dist/commands/describe.d.ts.map +1 -0
  36. package/dist/commands/describe.js +29 -0
  37. package/dist/commands/describe.js.map +1 -0
  38. package/dist/commands/encode.d.ts +18 -0
  39. package/dist/commands/encode.d.ts.map +1 -0
  40. package/dist/commands/encode.js +63 -0
  41. package/dist/commands/encode.js.map +1 -0
  42. package/dist/commands/run.d.ts +11 -17
  43. package/dist/commands/run.d.ts.map +1 -1
  44. package/dist/commands/run.js +39 -349
  45. package/dist/commands/run.js.map +1 -1
  46. package/dist/commands/search.d.ts +12 -0
  47. package/dist/commands/search.d.ts.map +1 -0
  48. package/dist/commands/search.js +26 -0
  49. package/dist/commands/search.js.map +1 -0
  50. package/dist/commands/up.d.ts +18 -0
  51. package/dist/commands/up.d.ts.map +1 -0
  52. package/dist/commands/up.js +95 -0
  53. package/dist/commands/up.js.map +1 -0
  54. package/dist/commands/validate.d.ts +6 -8
  55. package/dist/commands/validate.d.ts.map +1 -1
  56. package/dist/commands/validate.js +19 -86
  57. package/dist/commands/validate.js.map +1 -1
  58. package/dist/lib/command-helpers.d.ts +6 -8
  59. package/dist/lib/command-helpers.d.ts.map +1 -1
  60. package/dist/lib/command-helpers.js +21 -11
  61. package/dist/lib/command-helpers.js.map +1 -1
  62. package/dist/lib/env-module-command.d.ts +37 -0
  63. package/dist/lib/env-module-command.d.ts.map +1 -0
  64. package/dist/lib/env-module-command.js +59 -0
  65. package/dist/lib/env-module-command.js.map +1 -0
  66. package/dist/lib/format-cli.d.ts +13 -0
  67. package/dist/lib/format-cli.d.ts.map +1 -0
  68. package/dist/lib/format-cli.js +25 -0
  69. package/dist/lib/format-cli.js.map +1 -0
  70. package/dist/lib/secrets/store.d.ts +3 -0
  71. package/dist/lib/secrets/store.d.ts.map +1 -0
  72. package/dist/lib/secrets/store.js +6 -0
  73. package/dist/lib/secrets/store.js.map +1 -0
  74. package/dist/lib/up/constants.d.ts +15 -0
  75. package/dist/lib/up/constants.d.ts.map +1 -0
  76. package/dist/lib/up/constants.js +21 -0
  77. package/dist/lib/up/constants.js.map +1 -0
  78. package/dist/lib/up/cors.d.ts +12 -0
  79. package/dist/lib/up/cors.d.ts.map +1 -0
  80. package/dist/lib/up/cors.js +28 -0
  81. package/dist/lib/up/cors.js.map +1 -0
  82. package/dist/lib/up/create-daemon.d.ts +37 -0
  83. package/dist/lib/up/create-daemon.d.ts.map +1 -0
  84. package/dist/lib/up/create-daemon.js +63 -0
  85. package/dist/lib/up/create-daemon.js.map +1 -0
  86. package/dist/lib/up/handle-request.d.ts +19 -0
  87. package/dist/lib/up/handle-request.d.ts.map +1 -0
  88. package/dist/lib/up/handle-request.js +74 -0
  89. package/dist/lib/up/handle-request.js.map +1 -0
  90. package/dist/lib/up/open-browser.d.ts +19 -0
  91. package/dist/lib/up/open-browser.d.ts.map +1 -0
  92. package/dist/lib/up/open-browser.js +43 -0
  93. package/dist/lib/up/open-browser.js.map +1 -0
  94. package/dist/lib/up/read-body.d.ts +7 -0
  95. package/dist/lib/up/read-body.d.ts.map +1 -0
  96. package/dist/lib/up/read-body.js +12 -0
  97. package/dist/lib/up/read-body.js.map +1 -0
  98. package/package.json +18 -33
  99. package/bin/dev.cmd +0 -3
  100. package/dist/commands/config/endpoints/add.d.ts +0 -14
  101. package/dist/commands/config/endpoints/add.d.ts.map +0 -1
  102. package/dist/commands/config/endpoints/add.js +0 -29
  103. package/dist/commands/config/endpoints/add.js.map +0 -1
  104. package/dist/commands/config/endpoints/get.d.ts +0 -10
  105. package/dist/commands/config/endpoints/get.d.ts.map +0 -1
  106. package/dist/commands/config/endpoints/get.js +0 -35
  107. package/dist/commands/config/endpoints/get.js.map +0 -1
  108. package/dist/commands/config/endpoints/remove.d.ts +0 -13
  109. package/dist/commands/config/endpoints/remove.d.ts.map +0 -1
  110. package/dist/commands/config/endpoints/remove.js +0 -25
  111. package/dist/commands/config/endpoints/remove.js.map +0 -1
  112. package/dist/commands/config/endpoints/update.d.ts +0 -15
  113. package/dist/commands/config/endpoints/update.d.ts.map +0 -1
  114. package/dist/commands/config/endpoints/update.js +0 -36
  115. package/dist/commands/config/endpoints/update.js.map +0 -1
  116. package/dist/commands/config/get.d.ts +0 -11
  117. package/dist/commands/config/get.d.ts.map +0 -1
  118. package/dist/commands/config/get.js +0 -31
  119. package/dist/commands/config/get.js.map +0 -1
  120. package/dist/commands/config/init.d.ts +0 -13
  121. package/dist/commands/config/init.d.ts.map +0 -1
  122. package/dist/commands/config/init.js +0 -49
  123. package/dist/commands/config/init.js.map +0 -1
  124. package/dist/commands/config/loggers/allow/add.d.ts +0 -13
  125. package/dist/commands/config/loggers/allow/add.d.ts.map +0 -1
  126. package/dist/commands/config/loggers/allow/add.js +0 -25
  127. package/dist/commands/config/loggers/allow/add.js.map +0 -1
  128. package/dist/commands/config/loggers/allow/remove.d.ts +0 -13
  129. package/dist/commands/config/loggers/allow/remove.d.ts.map +0 -1
  130. package/dist/commands/config/loggers/allow/remove.js +0 -26
  131. package/dist/commands/config/loggers/allow/remove.js.map +0 -1
  132. package/dist/commands/config/loggers/default/add.d.ts +0 -13
  133. package/dist/commands/config/loggers/default/add.d.ts.map +0 -1
  134. package/dist/commands/config/loggers/default/add.js +0 -28
  135. package/dist/commands/config/loggers/default/add.js.map +0 -1
  136. package/dist/commands/config/loggers/default/remove.d.ts +0 -13
  137. package/dist/commands/config/loggers/default/remove.d.ts.map +0 -1
  138. package/dist/commands/config/loggers/default/remove.js +0 -25
  139. package/dist/commands/config/loggers/default/remove.js.map +0 -1
  140. package/dist/commands/config/loggers/get.d.ts +0 -10
  141. package/dist/commands/config/loggers/get.d.ts.map +0 -1
  142. package/dist/commands/config/loggers/get.js +0 -35
  143. package/dist/commands/config/loggers/get.js.map +0 -1
  144. package/dist/commands/config/loggers/logger/add.d.ts +0 -15
  145. package/dist/commands/config/loggers/logger/add.d.ts.map +0 -1
  146. package/dist/commands/config/loggers/logger/add.js +0 -55
  147. package/dist/commands/config/loggers/logger/add.js.map +0 -1
  148. package/dist/commands/config/loggers/logger/get.d.ts +0 -13
  149. package/dist/commands/config/loggers/logger/get.d.ts.map +0 -1
  150. package/dist/commands/config/loggers/logger/get.js +0 -30
  151. package/dist/commands/config/loggers/logger/get.js.map +0 -1
  152. package/dist/commands/config/loggers/logger/remove.d.ts +0 -13
  153. package/dist/commands/config/loggers/logger/remove.d.ts.map +0 -1
  154. package/dist/commands/config/loggers/logger/remove.js +0 -27
  155. package/dist/commands/config/loggers/logger/remove.js.map +0 -1
  156. package/dist/commands/config/loggers/logger/update.d.ts +0 -15
  157. package/dist/commands/config/loggers/logger/update.d.ts.map +0 -1
  158. package/dist/commands/config/loggers/logger/update.js +0 -55
  159. package/dist/commands/config/loggers/logger/update.js.map +0 -1
  160. package/dist/commands/config/models/allow/add.d.ts +0 -14
  161. package/dist/commands/config/models/allow/add.d.ts.map +0 -1
  162. package/dist/commands/config/models/allow/add.js +0 -36
  163. package/dist/commands/config/models/allow/add.js.map +0 -1
  164. package/dist/commands/config/models/allow/remove.d.ts +0 -14
  165. package/dist/commands/config/models/allow/remove.d.ts.map +0 -1
  166. package/dist/commands/config/models/allow/remove.js +0 -36
  167. package/dist/commands/config/models/allow/remove.js.map +0 -1
  168. package/dist/commands/config/models/default/update.d.ts +0 -14
  169. package/dist/commands/config/models/default/update.d.ts.map +0 -1
  170. package/dist/commands/config/models/default/update.js +0 -35
  171. package/dist/commands/config/models/default/update.js.map +0 -1
  172. package/dist/commands/config/models/get.d.ts +0 -10
  173. package/dist/commands/config/models/get.d.ts.map +0 -1
  174. package/dist/commands/config/models/get.js +0 -39
  175. package/dist/commands/config/models/get.js.map +0 -1
  176. package/dist/commands/config/models/ollama/update.d.ts +0 -13
  177. package/dist/commands/config/models/ollama/update.d.ts.map +0 -1
  178. package/dist/commands/config/models/ollama/update.js +0 -27
  179. package/dist/commands/config/models/ollama/update.js.map +0 -1
  180. package/dist/commands/config/path.d.ts +0 -12
  181. package/dist/commands/config/path.d.ts.map +0 -1
  182. package/dist/commands/config/path.js +0 -32
  183. package/dist/commands/config/path.js.map +0 -1
  184. package/dist/commands/config/plugins/add.d.ts +0 -16
  185. package/dist/commands/config/plugins/add.d.ts.map +0 -1
  186. package/dist/commands/config/plugins/add.js +0 -28
  187. package/dist/commands/config/plugins/add.js.map +0 -1
  188. package/dist/commands/config/plugins/allow/add.d.ts +0 -13
  189. package/dist/commands/config/plugins/allow/add.d.ts.map +0 -1
  190. package/dist/commands/config/plugins/allow/add.js +0 -25
  191. package/dist/commands/config/plugins/allow/add.js.map +0 -1
  192. package/dist/commands/config/plugins/allow/remove.d.ts +0 -13
  193. package/dist/commands/config/plugins/allow/remove.d.ts.map +0 -1
  194. package/dist/commands/config/plugins/allow/remove.js +0 -26
  195. package/dist/commands/config/plugins/allow/remove.js.map +0 -1
  196. package/dist/commands/config/plugins/default/add.d.ts +0 -13
  197. package/dist/commands/config/plugins/default/add.d.ts.map +0 -1
  198. package/dist/commands/config/plugins/default/add.js +0 -28
  199. package/dist/commands/config/plugins/default/add.js.map +0 -1
  200. package/dist/commands/config/plugins/default/remove.d.ts +0 -13
  201. package/dist/commands/config/plugins/default/remove.d.ts.map +0 -1
  202. package/dist/commands/config/plugins/default/remove.js +0 -25
  203. package/dist/commands/config/plugins/default/remove.js.map +0 -1
  204. package/dist/commands/config/plugins/get.d.ts +0 -10
  205. package/dist/commands/config/plugins/get.d.ts.map +0 -1
  206. package/dist/commands/config/plugins/get.js +0 -30
  207. package/dist/commands/config/plugins/get.js.map +0 -1
  208. package/dist/commands/config/plugins/installs/add.d.ts +0 -20
  209. package/dist/commands/config/plugins/installs/add.d.ts.map +0 -1
  210. package/dist/commands/config/plugins/installs/add.js +0 -51
  211. package/dist/commands/config/plugins/installs/add.js.map +0 -1
  212. package/dist/commands/config/plugins/installs/list.d.ts +0 -10
  213. package/dist/commands/config/plugins/installs/list.d.ts.map +0 -1
  214. package/dist/commands/config/plugins/installs/list.js +0 -29
  215. package/dist/commands/config/plugins/installs/list.js.map +0 -1
  216. package/dist/commands/config/plugins/installs/remove.d.ts +0 -13
  217. package/dist/commands/config/plugins/installs/remove.d.ts.map +0 -1
  218. package/dist/commands/config/plugins/installs/remove.js +0 -27
  219. package/dist/commands/config/plugins/installs/remove.js.map +0 -1
  220. package/dist/commands/config/plugins/security/update.d.ts +0 -5
  221. package/dist/commands/config/plugins/security/update.d.ts.map +0 -1
  222. package/dist/commands/config/plugins/security/update.js +0 -5
  223. package/dist/commands/config/plugins/security/update.js.map +0 -1
  224. package/dist/commands/config/secrets/providers/doctor.d.ts +0 -10
  225. package/dist/commands/config/secrets/providers/doctor.d.ts.map +0 -1
  226. package/dist/commands/config/secrets/providers/doctor.js +0 -40
  227. package/dist/commands/config/secrets/providers/doctor.js.map +0 -1
  228. package/dist/commands/config/secrets/providers/list.d.ts +0 -10
  229. package/dist/commands/config/secrets/providers/list.d.ts.map +0 -1
  230. package/dist/commands/config/secrets/providers/list.js +0 -31
  231. package/dist/commands/config/secrets/providers/list.js.map +0 -1
  232. package/dist/commands/config/secrets/providers.d.ts +0 -6
  233. package/dist/commands/config/secrets/providers.d.ts.map +0 -1
  234. package/dist/commands/config/secrets/providers.js +0 -9
  235. package/dist/commands/config/secrets/providers.js.map +0 -1
  236. package/dist/commands/config/secrets/yaml/get.d.ts +0 -11
  237. package/dist/commands/config/secrets/yaml/get.d.ts.map +0 -1
  238. package/dist/commands/config/secrets/yaml/get.js +0 -35
  239. package/dist/commands/config/secrets/yaml/get.js.map +0 -1
  240. package/dist/commands/config/secrets/yaml/set-default-provider.d.ts +0 -13
  241. package/dist/commands/config/secrets/yaml/set-default-provider.d.ts.map +0 -1
  242. package/dist/commands/config/secrets/yaml/set-default-provider.js +0 -24
  243. package/dist/commands/config/secrets/yaml/set-default-provider.js.map +0 -1
  244. package/dist/commands/config/secrets/yaml/set-policy.d.ts +0 -13
  245. package/dist/commands/config/secrets/yaml/set-policy.d.ts.map +0 -1
  246. package/dist/commands/config/secrets/yaml/set-policy.js +0 -29
  247. package/dist/commands/config/secrets/yaml/set-policy.js.map +0 -1
  248. package/dist/commands/config/security/get.d.ts +0 -11
  249. package/dist/commands/config/security/get.d.ts.map +0 -1
  250. package/dist/commands/config/security/get.js +0 -33
  251. package/dist/commands/config/security/get.js.map +0 -1
  252. package/dist/commands/config/security/plugins/update.d.ts +0 -13
  253. package/dist/commands/config/security/plugins/update.d.ts.map +0 -1
  254. package/dist/commands/config/security/plugins/update.js +0 -49
  255. package/dist/commands/config/security/plugins/update.js.map +0 -1
  256. package/dist/commands/config/tools/add.d.ts +0 -16
  257. package/dist/commands/config/tools/add.d.ts.map +0 -1
  258. package/dist/commands/config/tools/add.js +0 -60
  259. package/dist/commands/config/tools/add.js.map +0 -1
  260. package/dist/commands/config/tools/get.d.ts +0 -10
  261. package/dist/commands/config/tools/get.d.ts.map +0 -1
  262. package/dist/commands/config/tools/get.js +0 -29
  263. package/dist/commands/config/tools/get.js.map +0 -1
  264. package/dist/commands/config/tools/remove.d.ts +0 -13
  265. package/dist/commands/config/tools/remove.d.ts.map +0 -1
  266. package/dist/commands/config/tools/remove.js +0 -25
  267. package/dist/commands/config/tools/remove.js.map +0 -1
  268. package/dist/commands/config/tools/update.d.ts +0 -16
  269. package/dist/commands/config/tools/update.d.ts.map +0 -1
  270. package/dist/commands/config/tools/update.js +0 -59
  271. package/dist/commands/config/tools/update.js.map +0 -1
  272. package/dist/commands/config.d.ts +0 -8
  273. package/dist/commands/config.d.ts.map +0 -1
  274. package/dist/commands/config.js +0 -43
  275. package/dist/commands/config.js.map +0 -1
  276. package/dist/commands/graph.d.ts +0 -14
  277. package/dist/commands/graph.d.ts.map +0 -1
  278. package/dist/commands/graph.js +0 -39
  279. package/dist/commands/graph.js.map +0 -1
  280. package/dist/commands/trace/list.d.ts +0 -10
  281. package/dist/commands/trace/list.d.ts.map +0 -1
  282. package/dist/commands/trace/list.js +0 -32
  283. package/dist/commands/trace/list.js.map +0 -1
  284. package/dist/commands/trace.d.ts +0 -14
  285. package/dist/commands/trace.d.ts.map +0 -1
  286. package/dist/commands/trace.js +0 -43
  287. package/dist/commands/trace.js.map +0 -1
  288. package/dist/lib/config-flags.d.ts +0 -6
  289. package/dist/lib/config-flags.d.ts.map +0 -1
  290. package/dist/lib/config-flags.js +0 -14
  291. package/dist/lib/config-flags.js.map +0 -1
  292. package/dist/lib/default-ecp-config.d.ts +0 -5
  293. package/dist/lib/default-ecp-config.d.ts.map +0 -1
  294. package/dist/lib/default-ecp-config.js +0 -47
  295. package/dist/lib/default-ecp-config.js.map +0 -1
  296. package/dist/lib/ecp-environment-command.d.ts +0 -20
  297. package/dist/lib/ecp-environment-command.d.ts.map +0 -1
  298. package/dist/lib/ecp-environment-command.js +0 -33
  299. package/dist/lib/ecp-environment-command.js.map +0 -1
  300. package/dist/lib/ecp-home.d.ts +0 -3
  301. package/dist/lib/ecp-home.d.ts.map +0 -1
  302. package/dist/lib/ecp-home.js +0 -9
  303. package/dist/lib/ecp-home.js.map +0 -1
  304. package/dist/lib/inputs.d.ts +0 -3
  305. package/dist/lib/inputs.d.ts.map +0 -1
  306. package/dist/lib/inputs.js +0 -7
  307. package/dist/lib/inputs.js.map +0 -1
  308. package/dist/lib/parsing.d.ts +0 -12
  309. package/dist/lib/parsing.d.ts.map +0 -1
  310. package/dist/lib/parsing.js +0 -57
  311. package/dist/lib/parsing.js.map +0 -1
  312. package/dist/lib/progress.d.ts +0 -4
  313. package/dist/lib/progress.d.ts.map +0 -1
  314. package/dist/lib/progress.js +0 -111
  315. package/dist/lib/progress.js.map +0 -1
  316. package/dist/lib/secret-provider-ids.d.ts +0 -3
  317. package/dist/lib/secret-provider-ids.d.ts.map +0 -1
  318. package/dist/lib/secret-provider-ids.js +0 -3
  319. package/dist/lib/secret-provider-ids.js.map +0 -1
  320. package/dist/lib/secrets-config.d.ts +0 -15
  321. package/dist/lib/secrets-config.d.ts.map +0 -1
  322. package/dist/lib/secrets-config.js +0 -12
  323. package/dist/lib/secrets-config.js.map +0 -1
  324. package/dist/lib/system-config-cli.d.ts +0 -50
  325. package/dist/lib/system-config-cli.d.ts.map +0 -1
  326. package/dist/lib/system-config-cli.js +0 -108
  327. package/dist/lib/system-config-cli.js.map +0 -1
  328. package/dist/lib/trace-files.d.ts +0 -2
  329. package/dist/lib/trace-files.d.ts.map +0 -1
  330. package/dist/lib/trace-files.js +0 -14
  331. package/dist/lib/trace-files.js.map +0 -1
  332. package/dist/lib/trace-view.d.ts +0 -4
  333. package/dist/lib/trace-view.d.ts.map +0 -1
  334. package/dist/lib/trace-view.js +0 -8
  335. package/dist/lib/trace-view.js.map +0 -1
@@ -1,93 +1,26 @@
1
- import { Flags, Args } from "@oclif/core";
2
- import { resolve } from "node:path";
3
- import { loadContext, resolveInputs } from "@executioncontrolprotocol/runtime";
4
- import { commandErrorMessage } from "../lib/command-helpers.js";
5
- import { parseKeyValueInputs } from "../lib/parsing.js";
6
- import { getRequiredInputNames } from "../lib/inputs.js";
7
- import { EcpEnvironmentCommand } from "../lib/ecp-environment-command.js";
8
- function collectExecutionObjectNames(context) {
9
- const names = new Set();
10
- const addName = (name) => {
11
- names.add(name);
12
- };
13
- const visitOrchestrator = (orchestrator) => {
14
- addName(orchestrator.name);
15
- for (const executor of orchestrator.executors ?? []) {
16
- addName(executor.name);
17
- }
18
- for (const child of orchestrator.orchestrators ?? []) {
19
- visitOrchestrator(child);
20
- }
21
- };
22
- if (context.orchestrator) {
23
- visitOrchestrator(context.orchestrator);
24
- }
25
- for (const executor of context.executors ?? []) {
26
- addName(executor.name);
27
- }
28
- return [...names];
29
- }
30
- export default class Validate extends EcpEnvironmentCommand {
31
- static summary = "Validate a Context manifest";
32
- static flags = {
33
- ...EcpEnvironmentCommand.flags,
34
- input: Flags.string({
35
- char: "i",
36
- multiple: true,
37
- description: "Set an input value (repeatable, key=value)",
38
- summary: "Input value (key=value)",
39
- }),
40
- "skip-inputs": Flags.boolean({
41
- description: "Validate the Context manifest itself but skip runtime input resolution (prints required inputs instead).",
42
- default: false,
43
- }),
44
- };
1
+ import { loadWorkflowFile } from "@executioncontrolprotocol/core/loaders";
2
+ import { runWithCommandError } from "../lib/command-helpers.js";
3
+ import { WorkflowEnvCommand } from "../lib/env-module-command.js";
4
+ /** Validate a workflow against an environment. */
5
+ export default class Validate extends WorkflowEnvCommand {
6
+ static summary = "Validate a workflow manifest";
7
+ static description = "Compile (if needed) and validate a workflow against the extensions, runtime, and policies in --env.";
8
+ static examples = [
9
+ "<%= config.bin %> <%= command.id %> examples/01-echo/workflow.ts --env examples/01-echo/environment.ts",
10
+ ];
45
11
  static args = {
46
- contextPath: Args.string({
47
- required: true,
48
- description: "Path to context.yaml (or context.json)",
49
- }),
12
+ ...WorkflowEnvCommand.args,
50
13
  };
51
14
  async run() {
52
15
  const { args, flags } = await this.parse(Validate);
53
- this.applyEnvironmentFlag(flags);
54
- const contextPath = resolve(args.contextPath);
55
- console.log(`\nValidating: ${contextPath}\n`);
56
- let context;
57
- try {
58
- const inputs = parseKeyValueInputs(flags.input, "--input");
59
- context = loadContext(contextPath);
60
- if (!flags["skip-inputs"]) {
61
- resolveInputs(context, inputs);
62
- }
63
- const strategy = context.orchestration?.strategy ?? context.orchestrator?.strategy;
64
- const executionObjectNames = collectExecutionObjectNames(context);
65
- console.log(` Context: ${context.metadata.name} v${context.metadata.version}`);
66
- console.log(` Strategy: ${strategy ?? "unknown"}`);
67
- console.log(` Execution objects: ${executionObjectNames.join(", ")}`);
68
- console.log(` Schemas: ${Object.keys(context.schemas ?? {}).join(", ")}`);
69
- if (flags["skip-inputs"]) {
70
- const requiredInputs = getRequiredInputNames(context);
71
- if (requiredInputs.length > 0) {
72
- console.log(`\n Required inputs (from Context): ${requiredInputs.join(", ")}`);
73
- }
74
- else {
75
- console.log(`\n No required inputs declared in Context.`);
76
- }
77
- }
78
- console.log(`\n Validation passed.\n`);
79
- }
80
- catch (err) {
81
- const msg = commandErrorMessage(err);
82
- const missing = msg.match(/^Missing required input: "([^"]+)"$/);
83
- if (missing && context) {
84
- const inputName = missing[1];
85
- this.error(`\n Missing required input "${inputName}" is defined in the Context.\n` +
86
- ` Provide it via --input ${inputName}=<value> (e.g. -i ${inputName}="...").\n`, { exit: 1 });
87
- return;
88
- }
89
- this.error(`\n Validation failed: ${msg}\n`, { exit: 1 });
90
- }
16
+ await runWithCommandError(this, async () => {
17
+ const ecp = await this.loadEcp(flags);
18
+ const workflow = await loadWorkflowFile(args["workflow-path"]);
19
+ const result = await ecp.validate(workflow);
20
+ this.log(JSON.stringify(result, null, 2));
21
+ if (!result.valid)
22
+ this.exit(1);
23
+ });
91
24
  }
92
25
  }
93
26
  //# sourceMappingURL=validate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAA;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAEjE,kDAAkD;AAClD,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,kBAAkB;IACtD,MAAM,CAAC,OAAO,GAAG,8BAA8B,CAAA;IAE/C,MAAM,CAAC,WAAW,GAChB,qGAAqG,CAAA;IAEvG,MAAM,CAAC,QAAQ,GAAG;QAChB,wGAAwG;KACzG,CAAA;IAED,MAAM,CAAC,IAAI,GAAG;QACZ,GAAG,kBAAkB,CAAC,IAAI;KAC3B,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QAClD,MAAM,mBAAmB,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;YACzC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;YACrC,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAA;YAC9D,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;YAC3C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;YACzC,IAAI,CAAC,MAAM,CAAC,KAAK;gBAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjC,CAAC,CAAC,CAAA;IACJ,CAAC"}
@@ -1,16 +1,14 @@
1
1
  import type { Command } from "@oclif/core";
2
- /** Suffix when the resolved config path has no file yet (most `ecp config * get` commands). */
3
- export declare const CONFIG_FILE_HEADER_WHEN_MISSING = " (no file \u2014 empty)";
4
- /** Suffix for `ecp config get` when dumping full resolved config. */
5
- export declare const CONFIG_DUMP_HEADER_WHEN_MISSING = " (empty \u2014 no file yet)";
2
+ /** Format thrown values for CLI error output. */
6
3
  export declare function commandErrorMessage(err: unknown): string;
4
+ /**
5
+ * Read and parse a JSON file, mapping read/parse failures to an actionable,
6
+ * flag-attributed error message (e.g. `--input: invalid JSON in "x.json"`).
7
+ */
8
+ export declare function readJsonFile<T = unknown>(path: string, flagName: string): Promise<T>;
7
9
  /**
8
10
  * Runs `fn` and maps any thrown value to `cmd.error` with exit code 1.
9
11
  * Use after `parse()` so flag validation errors are not swallowed.
10
12
  */
11
13
  export declare function runWithCommandError(cmd: Command, fn: () => void | Promise<void>): Promise<void>;
12
- /**
13
- * First line for commands that show config loaded via {@link loadConfigForDisplay}.
14
- */
15
- export declare function formatConfigFileHeaderLine(path: string, exists: boolean, whenMissing?: string): string;
16
14
  //# sourceMappingURL=command-helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"command-helpers.d.ts","sourceRoot":"","sources":["../../src/lib/command-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,+FAA+F;AAC/F,eAAO,MAAM,+BAA+B,4BAAuB,CAAC;AAEpE,qEAAqE;AACrE,eAAO,MAAM,+BAA+B,gCAA2B,CAAC;AAExE,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAExD;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,OAAO,EACZ,EAAE,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC,CAMf;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,OAAO,EACf,WAAW,GAAE,MAAwC,GACpD,MAAM,CAGR"}
1
+ {"version":3,"file":"command-helpers.d.ts","sourceRoot":"","sources":["../../src/lib/command-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAG1C,iDAAiD;AACjD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAExD;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,CAAC,GAAG,OAAO,EAC5C,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,CAAC,CAAC,CAcZ;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,OAAO,EACZ,EAAE,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC,CAMf"}
@@ -1,10 +1,27 @@
1
- /** Suffix when the resolved config path has no file yet (most `ecp config * get` commands). */
2
- export const CONFIG_FILE_HEADER_WHEN_MISSING = " (no file empty)";
3
- /** Suffix for `ecp config get` when dumping full resolved config. */
4
- export const CONFIG_DUMP_HEADER_WHEN_MISSING = " (empty — no file yet)";
1
+ import { readFile } from "node:fs/promises";
2
+ /** Format thrown values for CLI error output. */
5
3
  export function commandErrorMessage(err) {
6
4
  return err instanceof Error ? err.message : String(err);
7
5
  }
6
+ /**
7
+ * Read and parse a JSON file, mapping read/parse failures to an actionable,
8
+ * flag-attributed error message (e.g. `--input: invalid JSON in "x.json"`).
9
+ */
10
+ export async function readJsonFile(path, flagName) {
11
+ let raw;
12
+ try {
13
+ raw = await readFile(path, "utf8");
14
+ }
15
+ catch {
16
+ throw new Error(`${flagName}: cannot read file "${path}"`);
17
+ }
18
+ try {
19
+ return JSON.parse(raw);
20
+ }
21
+ catch (err) {
22
+ throw new Error(`${flagName}: invalid JSON in "${path}" (${commandErrorMessage(err)})`);
23
+ }
24
+ }
8
25
  /**
9
26
  * Runs `fn` and maps any thrown value to `cmd.error` with exit code 1.
10
27
  * Use after `parse()` so flag validation errors are not swallowed.
@@ -17,11 +34,4 @@ export async function runWithCommandError(cmd, fn) {
17
34
  cmd.error(commandErrorMessage(err), { exit: 1 });
18
35
  }
19
36
  }
20
- /**
21
- * First line for commands that show config loaded via {@link loadConfigForDisplay}.
22
- */
23
- export function formatConfigFileHeaderLine(path, exists, whenMissing = CONFIG_FILE_HEADER_WHEN_MISSING) {
24
- const suffix = exists ? "" : whenMissing;
25
- return `# ${path}${suffix}\n`;
26
- }
27
37
  //# sourceMappingURL=command-helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"command-helpers.js","sourceRoot":"","sources":["../../src/lib/command-helpers.ts"],"names":[],"mappings":"AAEA,+FAA+F;AAC/F,MAAM,CAAC,MAAM,+BAA+B,GAAG,oBAAoB,CAAC;AAEpE,qEAAqE;AACrE,MAAM,CAAC,MAAM,+BAA+B,GAAG,wBAAwB,CAAC;AAExE,MAAM,UAAU,mBAAmB,CAAC,GAAY;IAC9C,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,GAAY,EACZ,EAA8B;IAE9B,IAAI,CAAC;QACH,MAAM,EAAE,EAAE,CAAC;IACb,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CACxC,IAAY,EACZ,MAAe,EACf,cAAsB,+BAA+B;IAErD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;IACzC,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"command-helpers.js","sourceRoot":"","sources":["../../src/lib/command-helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAE3C,iDAAiD;AACjD,MAAM,UAAU,mBAAmB,CAAC,GAAY;IAC9C,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AACzD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAY,EACZ,QAAgB;IAEhB,IAAI,GAAW,CAAA;IACf,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,GAAG,QAAQ,uBAAuB,IAAI,GAAG,CAAC,CAAA;IAC5D,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAM,CAAA;IAC7B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,GAAG,QAAQ,sBAAsB,IAAI,MAAM,mBAAmB,CAAC,GAAG,CAAC,GAAG,CACvE,CAAA;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,GAAY,EACZ,EAA8B;IAE9B,IAAI,CAAC;QACH,MAAM,EAAE,EAAE,CAAA;IACZ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAA;IAClD,CAAC;AACH,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { Command } from "@oclif/core";
2
+ import type { Ecp } from "@executioncontrolprotocol/core";
3
+ /** Shared `--env` flag for commands that load an environment module. */
4
+ export declare const envModuleFlags: {
5
+ env: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
6
+ };
7
+ /**
8
+ * Base for commands that require an environment module (`--env`).
9
+ * @category CLI
10
+ */
11
+ export declare abstract class EnvModuleCommand extends Command {
12
+ static flags: {
13
+ env: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
14
+ };
15
+ /** ECP instances initialized during this command, terminated in `finally`. */
16
+ private initializedEcps;
17
+ /** Load and initialize operational ECP from parsed flags. */
18
+ protected loadEcp(flags: {
19
+ env: string;
20
+ }): Promise<Ecp>;
21
+ /**
22
+ * Terminate any initialized environments so `environment:terminate` hooks
23
+ * (telemetry flush, connection cleanup) run even on failure. Cleanup errors
24
+ * are swallowed so they never mask the command's own exit code.
25
+ */
26
+ finally(error: Error | undefined): Promise<unknown>;
27
+ }
28
+ /**
29
+ * Base for commands that take a workflow path and `--env`.
30
+ * @category CLI
31
+ */
32
+ export declare abstract class WorkflowEnvCommand extends EnvModuleCommand {
33
+ static args: {
34
+ "workflow-path": import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
35
+ };
36
+ }
37
+ //# sourceMappingURL=env-module-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-module-command.d.ts","sourceRoot":"","sources":["../../src/lib/env-module-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAA;AAElD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gCAAgC,CAAA;AAEzD,wEAAwE;AACxE,eAAO,MAAM,cAAc;;CAK1B,CAAA;AAED;;;GAGG;AACH,8BAAsB,gBAAiB,SAAQ,OAAO;IACpD,MAAM,CAAC,KAAK;;MAGX;IAED,8EAA8E;IAC9E,OAAO,CAAC,eAAe,CAAY;IAEnC,6DAA6D;cAC7C,OAAO,CAAC,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAO7D;;;;OAIG;IACG,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;CAY1D;AAED;;;GAGG;AACH,8BAAsB,kBAAmB,SAAQ,gBAAgB;IAC/D,MAAM,CAAC,IAAI;;MAKV;CACF"}
@@ -0,0 +1,59 @@
1
+ import { Args, Command, Flags } from "@oclif/core";
2
+ import { loadEnvironmentModule } from "@executioncontrolprotocol/core/loaders";
3
+ /** Shared `--env` flag for commands that load an environment module. */
4
+ export const envModuleFlags = {
5
+ env: Flags.string({
6
+ required: true,
7
+ description: "Path to environment module (.ts or .js)",
8
+ }),
9
+ };
10
+ /**
11
+ * Base for commands that require an environment module (`--env`).
12
+ * @category CLI
13
+ */
14
+ export class EnvModuleCommand extends Command {
15
+ static flags = {
16
+ ...Command.baseFlags,
17
+ ...envModuleFlags,
18
+ };
19
+ /** ECP instances initialized during this command, terminated in `finally`. */
20
+ initializedEcps = [];
21
+ /** Load and initialize operational ECP from parsed flags. */
22
+ async loadEcp(flags) {
23
+ const env = await loadEnvironmentModule(flags.env);
24
+ const ecp = await env.init();
25
+ this.initializedEcps.push(ecp);
26
+ return ecp;
27
+ }
28
+ /**
29
+ * Terminate any initialized environments so `environment:terminate` hooks
30
+ * (telemetry flush, connection cleanup) run even on failure. Cleanup errors
31
+ * are swallowed so they never mask the command's own exit code.
32
+ */
33
+ async finally(error) {
34
+ const ecps = this.initializedEcps;
35
+ this.initializedEcps = [];
36
+ for (const ecp of ecps) {
37
+ try {
38
+ await ecp.terminate();
39
+ }
40
+ catch {
41
+ /* ignore cleanup errors */
42
+ }
43
+ }
44
+ return super.finally(error);
45
+ }
46
+ }
47
+ /**
48
+ * Base for commands that take a workflow path and `--env`.
49
+ * @category CLI
50
+ */
51
+ export class WorkflowEnvCommand extends EnvModuleCommand {
52
+ static args = {
53
+ "workflow-path": Args.string({
54
+ required: true,
55
+ description: "Workflow file (.ts, .js, or .json)",
56
+ }),
57
+ };
58
+ }
59
+ //# sourceMappingURL=env-module-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-module-command.js","sourceRoot":"","sources":["../../src/lib/env-module-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAA;AAG9E,wEAAwE;AACxE,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC;QAChB,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,yCAAyC;KACvD,CAAC;CACH,CAAA;AAED;;;GAGG;AACH,MAAM,OAAgB,gBAAiB,SAAQ,OAAO;IACpD,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,OAAO,CAAC,SAAS;QACpB,GAAG,cAAc;KAClB,CAAA;IAED,8EAA8E;IACtE,eAAe,GAAU,EAAE,CAAA;IAEnC,6DAA6D;IACnD,KAAK,CAAC,OAAO,CAAC,KAAsB;QAC5C,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAClD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;QAC5B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC9B,OAAO,GAAG,CAAA;IACZ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,KAAwB;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAA;QACjC,IAAI,CAAC,eAAe,GAAG,EAAE,CAAA;QACzB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,GAAG,CAAC,SAAS,EAAE,CAAA;YACvB,CAAC;YAAC,MAAM,CAAC;gBACP,2BAA2B;YAC7B,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAC7B,CAAC;;AAGH;;;GAGG;AACH,MAAM,OAAgB,kBAAmB,SAAQ,gBAAgB;IAC/D,MAAM,CAAC,IAAI,GAAG;QACZ,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC;YAC3B,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,oCAAoC;SAClD,CAAC;KACH,CAAA"}
@@ -0,0 +1,13 @@
1
+ /** CLI `--format` values. */
2
+ export type CliFormat = "json" | "toon" | "fluent";
3
+ /**
4
+ * Map CLI format flag to formatter extension id for `ecp.encode().uses(...)`.
5
+ * @category CLI
6
+ */
7
+ export declare function formatToExtensionId(format: CliFormat): string;
8
+ /**
9
+ * Parse and validate CLI format flag.
10
+ * @category CLI
11
+ */
12
+ export declare function parseCliFormat(value: string | undefined): CliFormat;
13
+ //# sourceMappingURL=format-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-cli.d.ts","sourceRoot":"","sources":["../../src/lib/format-cli.ts"],"names":[],"mappings":"AAEA,6BAA6B;AAC7B,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAA;AAQlD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAE7D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAMnE"}
@@ -0,0 +1,25 @@
1
+ import { ECP_CORE_FORMATTER_IDS, ECP_FORMATS } from "@executioncontrolprotocol/types";
2
+ const FORMAT_EXTENSION = {
3
+ json: ECP_CORE_FORMATTER_IDS.JSON,
4
+ toon: "@executioncontrolprotocol/format-toon",
5
+ fluent: ECP_CORE_FORMATTER_IDS.FLUENT,
6
+ };
7
+ /**
8
+ * Map CLI format flag to formatter extension id for `ecp.encode().uses(...)`.
9
+ * @category CLI
10
+ */
11
+ export function formatToExtensionId(format) {
12
+ return FORMAT_EXTENSION[format];
13
+ }
14
+ /**
15
+ * Parse and validate CLI format flag.
16
+ * @category CLI
17
+ */
18
+ export function parseCliFormat(value) {
19
+ const f = (value ?? ECP_FORMATS.JSON);
20
+ if (f !== "json" && f !== "toon" && f !== "fluent") {
21
+ throw new Error(`Unknown format "${value}". Use json, toon, or fluent.`);
22
+ }
23
+ return f;
24
+ }
25
+ //# sourceMappingURL=format-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-cli.js","sourceRoot":"","sources":["../../src/lib/format-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAA;AAKrF,MAAM,gBAAgB,GAA8B;IAClD,IAAI,EAAE,sBAAsB,CAAC,IAAI;IACjC,IAAI,EAAE,uCAAuC;IAC7C,MAAM,EAAE,sBAAsB,CAAC,MAAM;CACtC,CAAA;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAA;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,KAAyB;IACtD,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,WAAW,CAAC,IAAI,CAAc,CAAA;IAClD,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,+BAA+B,CAAC,CAAA;IAC1E,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** OS keychain store for CLI secret commands. */
2
+ export declare function getCliSecretsStore(): import("@executioncontrolprotocol/secrets").OsKeychainSecretsStore;
3
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/lib/secrets/store.ts"],"names":[],"mappings":"AAEA,iDAAiD;AACjD,wBAAgB,kBAAkB,uEAEjC"}
@@ -0,0 +1,6 @@
1
+ import { createOsSecretsStore } from "@executioncontrolprotocol/secrets";
2
+ /** OS keychain store for CLI secret commands. */
3
+ export function getCliSecretsStore() {
4
+ return createOsSecretsStore();
5
+ }
6
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/lib/secrets/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAA;AAExE,iDAAiD;AACjD,MAAM,UAAU,kBAAkB;IAChC,OAAO,oBAAoB,EAAE,CAAA;AAC/B,CAAC"}
@@ -0,0 +1,15 @@
1
+ /** Default loopback port for `ecp up` (ECP leet: E=3, C=0, P=9). @category CLI */
2
+ export declare const DEFAULT_ECP_UP_PORT = 3090;
3
+ /** Default bind host (loopback only). @category CLI */
4
+ export declare const DEFAULT_ECP_UP_HOST = "127.0.0.1";
5
+ /** Default Ollama HTTP API base URL. @category CLI */
6
+ export declare const DEFAULT_OLLAMA_URL = "http://127.0.0.1:11434";
7
+ /** Default browser demo URL opened by `ecp up`. @category CLI */
8
+ export declare const DEFAULT_DEMO_OPEN_URL = "https://executioncontrolprotocol.github.io/browser-demo/";
9
+ /** Built-in CORS origins for local Vite + hosted demo. @category CLI */
10
+ export declare const DEFAULT_CORS_ORIGINS: readonly string[];
11
+ /** JSON MIME type for daemon responses. @category CLI */
12
+ export declare const JSON_MIME = "application/json";
13
+ /** Daemon package version string for /health (from `@executioncontrolprotocol/cli` package.json). @category CLI */
14
+ export declare const ECP_UP_VERSION: string;
15
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/lib/up/constants.ts"],"names":[],"mappings":"AAEA,kFAAkF;AAClF,eAAO,MAAM,mBAAmB,OAAO,CAAA;AAEvC,uDAAuD;AACvD,eAAO,MAAM,mBAAmB,cAAc,CAAA;AAE9C,sDAAsD;AACtD,eAAO,MAAM,kBAAkB,2BAA2B,CAAA;AAE1D,iEAAiE;AACjE,eAAO,MAAM,qBAAqB,6DAA6D,CAAA;AAE/F,wEAAwE;AACxE,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAIjD,CAAA;AAED,yDAAyD;AACzD,eAAO,MAAM,SAAS,qBAAqB,CAAA;AAI3C,mHAAmH;AACnH,eAAO,MAAM,cAAc,QAAoE,CAAA"}
@@ -0,0 +1,21 @@
1
+ import { createRequire } from "node:module";
2
+ /** Default loopback port for `ecp up` (ECP leet: E=3, C=0, P=9). @category CLI */
3
+ export const DEFAULT_ECP_UP_PORT = 3090;
4
+ /** Default bind host (loopback only). @category CLI */
5
+ export const DEFAULT_ECP_UP_HOST = "127.0.0.1";
6
+ /** Default Ollama HTTP API base URL. @category CLI */
7
+ export const DEFAULT_OLLAMA_URL = "http://127.0.0.1:11434";
8
+ /** Default browser demo URL opened by `ecp up`. @category CLI */
9
+ export const DEFAULT_DEMO_OPEN_URL = "https://executioncontrolprotocol.github.io/browser-demo/";
10
+ /** Built-in CORS origins for local Vite + hosted demo. @category CLI */
11
+ export const DEFAULT_CORS_ORIGINS = [
12
+ "http://localhost:5173",
13
+ "http://127.0.0.1:5173",
14
+ "https://executioncontrolprotocol.github.io",
15
+ ];
16
+ /** JSON MIME type for daemon responses. @category CLI */
17
+ export const JSON_MIME = "application/json";
18
+ const require = createRequire(import.meta.url);
19
+ /** Daemon package version string for /health (from `@executioncontrolprotocol/cli` package.json). @category CLI */
20
+ export const ECP_UP_VERSION = require("../../../package.json").version;
21
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/lib/up/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE3C,kFAAkF;AAClF,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAA;AAEvC,uDAAuD;AACvD,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAA;AAE9C,sDAAsD;AACtD,MAAM,CAAC,MAAM,kBAAkB,GAAG,wBAAwB,CAAA;AAE1D,iEAAiE;AACjE,MAAM,CAAC,MAAM,qBAAqB,GAAG,0DAA0D,CAAA;AAE/F,wEAAwE;AACxE,MAAM,CAAC,MAAM,oBAAoB,GAAsB;IACrD,uBAAuB;IACvB,uBAAuB;IACvB,4CAA4C;CAC7C,CAAA;AAED,yDAAyD;AACzD,MAAM,CAAC,MAAM,SAAS,GAAG,kBAAkB,CAAA;AAE3C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAE9C,mHAAmH;AACnH,MAAM,CAAC,MAAM,cAAc,GAAI,OAAO,CAAC,uBAAuB,CAAyB,CAAC,OAAO,CAAA"}
@@ -0,0 +1,12 @@
1
+ import type { IncomingMessage, ServerResponse } from "node:http";
2
+ /**
3
+ * Apply CORS + Private Network Access headers for Chromium loopback access.
4
+ * @category CLI
5
+ */
6
+ export declare function setCorsAndPna(req: IncomingMessage, res: ServerResponse, allowOrigins: ReadonlySet<string>): void;
7
+ /**
8
+ * Extract Bearer token from Authorization header.
9
+ * @category CLI
10
+ */
11
+ export declare function readBearerToken(req: IncomingMessage): string | undefined;
12
+ //# sourceMappingURL=cors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cors.d.ts","sourceRoot":"","sources":["../../../src/lib/up/cors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAEhE;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,GAChC,IAAI,CAWN;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAKxE"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Apply CORS + Private Network Access headers for Chromium loopback access.
3
+ * @category CLI
4
+ */
5
+ export function setCorsAndPna(req, res, allowOrigins) {
6
+ const origin = req.headers.origin;
7
+ if (typeof origin === "string" && allowOrigins.has(origin)) {
8
+ res.setHeader("Access-Control-Allow-Origin", origin);
9
+ res.setHeader("Vary", "Origin");
10
+ }
11
+ res.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
12
+ res.setHeader("Access-Control-Allow-Headers", "Authorization, Content-Type");
13
+ if (req.headers["access-control-request-private-network"] === "true") {
14
+ res.setHeader("Access-Control-Allow-Private-Network", "true");
15
+ }
16
+ }
17
+ /**
18
+ * Extract Bearer token from Authorization header.
19
+ * @category CLI
20
+ */
21
+ export function readBearerToken(req) {
22
+ const header = req.headers.authorization;
23
+ if (typeof header !== "string")
24
+ return undefined;
25
+ const match = /^Bearer\s+(.+)$/i.exec(header.trim());
26
+ return match?.[1]?.trim() || undefined;
27
+ }
28
+ //# sourceMappingURL=cors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cors.js","sourceRoot":"","sources":["../../../src/lib/up/cors.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,GAAoB,EACpB,GAAmB,EACnB,YAAiC;IAEjC,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAA;IACjC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,SAAS,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAA;QACpD,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IACjC,CAAC;IACD,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,oBAAoB,CAAC,CAAA;IACnE,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,6BAA6B,CAAC,CAAA;IAC5E,IAAI,GAAG,CAAC,OAAO,CAAC,wCAAwC,CAAC,KAAK,MAAM,EAAE,CAAC;QACrE,GAAG,CAAC,SAAS,CAAC,sCAAsC,EAAE,MAAM,CAAC,CAAA;IAC/D,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,GAAoB;IAClD,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAA;IACxC,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAA;IAChD,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;IACpD,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,SAAS,CAAA;AACxC,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { type Server } from "node:http";
2
+ import type { Ecp } from "@executioncontrolprotocol/core";
3
+ import "@executioncontrolprotocol/extension-ollama";
4
+ /** Options for {@link startEcpUpDaemon}. @category CLI */
5
+ export interface StartEcpUpDaemonOptions {
6
+ /** Listen port (default 3090). */
7
+ port?: number;
8
+ /** Bind host (default 127.0.0.1). */
9
+ host?: string;
10
+ /** Ollama API base URL. */
11
+ ollamaUrl?: string;
12
+ /** Extra CORS origins (merged with Vite defaults). */
13
+ corsOrigins?: string[];
14
+ /** Pairing token for `/v1/invoke`. */
15
+ token: string;
16
+ }
17
+ /** Result of starting the daemon. @category CLI */
18
+ export interface EcpUpDaemon {
19
+ /** Listening HTTP server. */
20
+ server: Server;
21
+ /** Operational ECP instance. */
22
+ ecp: Ecp;
23
+ /** Resolved listen port. */
24
+ port: number;
25
+ /** Resolved bind host. */
26
+ host: string;
27
+ /** Pairing token. */
28
+ token: string;
29
+ /** Close the server and terminate ECP. */
30
+ close: () => Promise<void>;
31
+ }
32
+ /**
33
+ * Start the local ECP daemon (`ecp up`).
34
+ * @category CLI
35
+ */
36
+ export declare function startEcpUpDaemon(options: StartEcpUpDaemonOptions): Promise<EcpUpDaemon>;
37
+ //# sourceMappingURL=create-daemon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-daemon.d.ts","sourceRoot":"","sources":["../../../src/lib/up/create-daemon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,WAAW,CAAA;AAErD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gCAAgC,CAAA;AACzD,OAAO,4CAA4C,CAAA;AAUnD,0DAA0D;AAC1D,MAAM,WAAW,uBAAuB;IACtC,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,sDAAsD;IACtD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAA;CACd;AAED,mDAAmD;AACnD,MAAM,WAAW,WAAW;IAC1B,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,gCAAgC;IAChC,GAAG,EAAE,GAAG,CAAA;IACR,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,0CAA0C;IAC1C,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3B;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,WAAW,CAAC,CA0DtB"}
@@ -0,0 +1,63 @@
1
+ import { createServer } from "node:http";
2
+ import { environment, extension } from "@executioncontrolprotocol/node";
3
+ import "@executioncontrolprotocol/extension-ollama";
4
+ import { registerOllamaExtension } from "@executioncontrolprotocol/extension-ollama";
5
+ import { DEFAULT_CORS_ORIGINS, DEFAULT_ECP_UP_HOST, DEFAULT_ECP_UP_PORT, DEFAULT_OLLAMA_URL, } from "./constants.js";
6
+ import { createUpRequestHandler } from "./handle-request.js";
7
+ /**
8
+ * Start the local ECP daemon (`ecp up`).
9
+ * @category CLI
10
+ */
11
+ export async function startEcpUpDaemon(options) {
12
+ const port = options.port ?? DEFAULT_ECP_UP_PORT;
13
+ const host = options.host ?? DEFAULT_ECP_UP_HOST;
14
+ const ollamaUrl = options.ollamaUrl ?? DEFAULT_OLLAMA_URL;
15
+ const token = options.token;
16
+ await registerOllamaExtension();
17
+ const env = (await environment("ecp-up")).withExtensions([
18
+ extension("@executioncontrolprotocol/ollama").with({
19
+ baseURL: ollamaUrl,
20
+ }),
21
+ ]);
22
+ const ecp = await env.init();
23
+ const allowOrigins = new Set([
24
+ ...DEFAULT_CORS_ORIGINS,
25
+ ...(options.corsOrigins ?? []),
26
+ ]);
27
+ const handler = createUpRequestHandler({
28
+ ecp,
29
+ allowOrigins,
30
+ token,
31
+ ollamaUrl,
32
+ });
33
+ const server = createServer((req, res) => {
34
+ void handler(req, res).catch((err) => {
35
+ const message = err instanceof Error ? err.message : String(err);
36
+ if (!res.headersSent) {
37
+ res.writeHead(500, { "Content-Type": "application/json" });
38
+ }
39
+ res.end(JSON.stringify({ error: message }));
40
+ });
41
+ });
42
+ await new Promise((resolve, reject) => {
43
+ server.once("error", reject);
44
+ server.listen(port, host, () => {
45
+ server.off("error", reject);
46
+ resolve();
47
+ });
48
+ });
49
+ return {
50
+ server,
51
+ ecp,
52
+ port,
53
+ host,
54
+ token,
55
+ close: async () => {
56
+ await new Promise((resolve, reject) => {
57
+ server.close((err) => (err ? reject(err) : resolve()));
58
+ });
59
+ await ecp.terminate();
60
+ },
61
+ };
62
+ }
63
+ //# sourceMappingURL=create-daemon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-daemon.js","sourceRoot":"","sources":["../../../src/lib/up/create-daemon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { IncomingMessage, ServerResponse } from "node:http";
2
+ import type { Ecp } from "@executioncontrolprotocol/core";
3
+ /** Dependencies for {@link createUpRequestHandler}. @category CLI */
4
+ export interface UpRequestHandlerOptions {
5
+ /** Operational ECP instance. */
6
+ ecp: Ecp;
7
+ /** Allowlisted CORS origins. */
8
+ allowOrigins: ReadonlySet<string>;
9
+ /** Pairing token for `/v1/*`. */
10
+ token: string;
11
+ /** Ollama base URL used for `/health` reachability. */
12
+ ollamaUrl: string;
13
+ }
14
+ /**
15
+ * Create the HTTP request handler for `ecp up`.
16
+ * @category CLI
17
+ */
18
+ export declare function createUpRequestHandler(options: UpRequestHandlerOptions): (req: IncomingMessage, res: ServerResponse) => Promise<void>;
19
+ //# sourceMappingURL=handle-request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handle-request.d.ts","sourceRoot":"","sources":["../../../src/lib/up/handle-request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAChE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gCAAgC,CAAA;AAMzD,qEAAqE;AACrE,MAAM,WAAW,uBAAuB;IACtC,gCAAgC;IAChC,GAAG,EAAE,GAAG,CAAA;IACR,gCAAgC;IAChC,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACjC,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAA;CAClB;AAQD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,uBAAuB,IAInE,KAAK,eAAe,EACpB,KAAK,cAAc,KAClB,OAAO,CAAC,IAAI,CAAC,CA2DjB"}