@executioncontrolprotocol/cli 0.4.2 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +67 -47
- package/bin/dev.js +4 -5
- package/bin/ecp.js +7 -0
- package/bin/run.cmd +1 -1
- package/bin/run.js +2 -6
- package/dist/commands/compile.d.ts +15 -0
- package/dist/commands/compile.d.ts.map +1 -0
- package/dist/commands/compile.js +44 -0
- package/dist/commands/compile.js.map +1 -0
- package/dist/commands/config/secrets/add.d.ts +6 -5
- package/dist/commands/config/secrets/add.d.ts.map +1 -1
- package/dist/commands/config/secrets/add.js +30 -63
- package/dist/commands/config/secrets/add.js.map +1 -1
- package/dist/commands/config/secrets/get.d.ts +5 -5
- package/dist/commands/config/secrets/get.d.ts.map +1 -1
- package/dist/commands/config/secrets/get.js +21 -46
- package/dist/commands/config/secrets/get.js.map +1 -1
- package/dist/commands/config/secrets/list.d.ts +1 -5
- package/dist/commands/config/secrets/list.d.ts.map +1 -1
- package/dist/commands/config/secrets/list.js +11 -41
- package/dist/commands/config/secrets/list.js.map +1 -1
- package/dist/commands/config/secrets/remove.d.ts +3 -5
- package/dist/commands/config/secrets/remove.d.ts.map +1 -1
- package/dist/commands/config/secrets/remove.js +16 -42
- package/dist/commands/config/secrets/remove.js.map +1 -1
- package/dist/commands/config/secrets.d.ts +1 -0
- package/dist/commands/config/secrets.d.ts.map +1 -1
- package/dist/commands/config/secrets.js +14 -18
- package/dist/commands/config/secrets.js.map +1 -1
- package/dist/commands/decode.d.ts +18 -0
- package/dist/commands/decode.d.ts.map +1 -0
- package/dist/commands/decode.js +66 -0
- package/dist/commands/decode.js.map +1 -0
- package/dist/commands/describe.d.ts +13 -0
- package/dist/commands/describe.d.ts.map +1 -0
- package/dist/commands/describe.js +29 -0
- package/dist/commands/describe.js.map +1 -0
- package/dist/commands/encode.d.ts +18 -0
- package/dist/commands/encode.d.ts.map +1 -0
- package/dist/commands/encode.js +63 -0
- package/dist/commands/encode.js.map +1 -0
- package/dist/commands/run.d.ts +11 -17
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +39 -349
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/search.d.ts +12 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +26 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/validate.d.ts +6 -8
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +19 -86
- package/dist/commands/validate.js.map +1 -1
- package/dist/lib/command-helpers.d.ts +6 -8
- package/dist/lib/command-helpers.d.ts.map +1 -1
- package/dist/lib/command-helpers.js +21 -11
- package/dist/lib/command-helpers.js.map +1 -1
- package/dist/lib/env-module-command.d.ts +37 -0
- package/dist/lib/env-module-command.d.ts.map +1 -0
- package/dist/lib/env-module-command.js +59 -0
- package/dist/lib/env-module-command.js.map +1 -0
- package/dist/lib/format-cli.d.ts +13 -0
- package/dist/lib/format-cli.d.ts.map +1 -0
- package/dist/lib/format-cli.js +25 -0
- package/dist/lib/format-cli.js.map +1 -0
- package/dist/lib/secrets/store.d.ts +3 -0
- package/dist/lib/secrets/store.d.ts.map +1 -0
- package/dist/lib/secrets/store.js +6 -0
- package/dist/lib/secrets/store.js.map +1 -0
- package/package.json +17 -33
- package/bin/dev.cmd +0 -3
- package/dist/commands/config/endpoints/add.d.ts +0 -14
- package/dist/commands/config/endpoints/add.d.ts.map +0 -1
- package/dist/commands/config/endpoints/add.js +0 -29
- package/dist/commands/config/endpoints/add.js.map +0 -1
- package/dist/commands/config/endpoints/get.d.ts +0 -10
- package/dist/commands/config/endpoints/get.d.ts.map +0 -1
- package/dist/commands/config/endpoints/get.js +0 -35
- package/dist/commands/config/endpoints/get.js.map +0 -1
- package/dist/commands/config/endpoints/remove.d.ts +0 -13
- package/dist/commands/config/endpoints/remove.d.ts.map +0 -1
- package/dist/commands/config/endpoints/remove.js +0 -25
- package/dist/commands/config/endpoints/remove.js.map +0 -1
- package/dist/commands/config/endpoints/update.d.ts +0 -15
- package/dist/commands/config/endpoints/update.d.ts.map +0 -1
- package/dist/commands/config/endpoints/update.js +0 -36
- package/dist/commands/config/endpoints/update.js.map +0 -1
- package/dist/commands/config/get.d.ts +0 -11
- package/dist/commands/config/get.d.ts.map +0 -1
- package/dist/commands/config/get.js +0 -31
- package/dist/commands/config/get.js.map +0 -1
- package/dist/commands/config/init.d.ts +0 -13
- package/dist/commands/config/init.d.ts.map +0 -1
- package/dist/commands/config/init.js +0 -49
- package/dist/commands/config/init.js.map +0 -1
- package/dist/commands/config/loggers/allow/add.d.ts +0 -13
- package/dist/commands/config/loggers/allow/add.d.ts.map +0 -1
- package/dist/commands/config/loggers/allow/add.js +0 -25
- package/dist/commands/config/loggers/allow/add.js.map +0 -1
- package/dist/commands/config/loggers/allow/remove.d.ts +0 -13
- package/dist/commands/config/loggers/allow/remove.d.ts.map +0 -1
- package/dist/commands/config/loggers/allow/remove.js +0 -26
- package/dist/commands/config/loggers/allow/remove.js.map +0 -1
- package/dist/commands/config/loggers/default/add.d.ts +0 -13
- package/dist/commands/config/loggers/default/add.d.ts.map +0 -1
- package/dist/commands/config/loggers/default/add.js +0 -28
- package/dist/commands/config/loggers/default/add.js.map +0 -1
- package/dist/commands/config/loggers/default/remove.d.ts +0 -13
- package/dist/commands/config/loggers/default/remove.d.ts.map +0 -1
- package/dist/commands/config/loggers/default/remove.js +0 -25
- package/dist/commands/config/loggers/default/remove.js.map +0 -1
- package/dist/commands/config/loggers/get.d.ts +0 -10
- package/dist/commands/config/loggers/get.d.ts.map +0 -1
- package/dist/commands/config/loggers/get.js +0 -35
- package/dist/commands/config/loggers/get.js.map +0 -1
- package/dist/commands/config/loggers/logger/add.d.ts +0 -15
- package/dist/commands/config/loggers/logger/add.d.ts.map +0 -1
- package/dist/commands/config/loggers/logger/add.js +0 -55
- package/dist/commands/config/loggers/logger/add.js.map +0 -1
- package/dist/commands/config/loggers/logger/get.d.ts +0 -13
- package/dist/commands/config/loggers/logger/get.d.ts.map +0 -1
- package/dist/commands/config/loggers/logger/get.js +0 -30
- package/dist/commands/config/loggers/logger/get.js.map +0 -1
- package/dist/commands/config/loggers/logger/remove.d.ts +0 -13
- package/dist/commands/config/loggers/logger/remove.d.ts.map +0 -1
- package/dist/commands/config/loggers/logger/remove.js +0 -27
- package/dist/commands/config/loggers/logger/remove.js.map +0 -1
- package/dist/commands/config/loggers/logger/update.d.ts +0 -15
- package/dist/commands/config/loggers/logger/update.d.ts.map +0 -1
- package/dist/commands/config/loggers/logger/update.js +0 -55
- package/dist/commands/config/loggers/logger/update.js.map +0 -1
- package/dist/commands/config/models/allow/add.d.ts +0 -14
- package/dist/commands/config/models/allow/add.d.ts.map +0 -1
- package/dist/commands/config/models/allow/add.js +0 -36
- package/dist/commands/config/models/allow/add.js.map +0 -1
- package/dist/commands/config/models/allow/remove.d.ts +0 -14
- package/dist/commands/config/models/allow/remove.d.ts.map +0 -1
- package/dist/commands/config/models/allow/remove.js +0 -36
- package/dist/commands/config/models/allow/remove.js.map +0 -1
- package/dist/commands/config/models/default/update.d.ts +0 -14
- package/dist/commands/config/models/default/update.d.ts.map +0 -1
- package/dist/commands/config/models/default/update.js +0 -35
- package/dist/commands/config/models/default/update.js.map +0 -1
- package/dist/commands/config/models/get.d.ts +0 -10
- package/dist/commands/config/models/get.d.ts.map +0 -1
- package/dist/commands/config/models/get.js +0 -39
- package/dist/commands/config/models/get.js.map +0 -1
- package/dist/commands/config/models/ollama/update.d.ts +0 -13
- package/dist/commands/config/models/ollama/update.d.ts.map +0 -1
- package/dist/commands/config/models/ollama/update.js +0 -27
- package/dist/commands/config/models/ollama/update.js.map +0 -1
- package/dist/commands/config/path.d.ts +0 -12
- package/dist/commands/config/path.d.ts.map +0 -1
- package/dist/commands/config/path.js +0 -32
- package/dist/commands/config/path.js.map +0 -1
- package/dist/commands/config/plugins/add.d.ts +0 -16
- package/dist/commands/config/plugins/add.d.ts.map +0 -1
- package/dist/commands/config/plugins/add.js +0 -28
- package/dist/commands/config/plugins/add.js.map +0 -1
- package/dist/commands/config/plugins/allow/add.d.ts +0 -13
- package/dist/commands/config/plugins/allow/add.d.ts.map +0 -1
- package/dist/commands/config/plugins/allow/add.js +0 -25
- package/dist/commands/config/plugins/allow/add.js.map +0 -1
- package/dist/commands/config/plugins/allow/remove.d.ts +0 -13
- package/dist/commands/config/plugins/allow/remove.d.ts.map +0 -1
- package/dist/commands/config/plugins/allow/remove.js +0 -26
- package/dist/commands/config/plugins/allow/remove.js.map +0 -1
- package/dist/commands/config/plugins/default/add.d.ts +0 -13
- package/dist/commands/config/plugins/default/add.d.ts.map +0 -1
- package/dist/commands/config/plugins/default/add.js +0 -28
- package/dist/commands/config/plugins/default/add.js.map +0 -1
- package/dist/commands/config/plugins/default/remove.d.ts +0 -13
- package/dist/commands/config/plugins/default/remove.d.ts.map +0 -1
- package/dist/commands/config/plugins/default/remove.js +0 -25
- package/dist/commands/config/plugins/default/remove.js.map +0 -1
- package/dist/commands/config/plugins/get.d.ts +0 -10
- package/dist/commands/config/plugins/get.d.ts.map +0 -1
- package/dist/commands/config/plugins/get.js +0 -30
- package/dist/commands/config/plugins/get.js.map +0 -1
- package/dist/commands/config/plugins/installs/add.d.ts +0 -20
- package/dist/commands/config/plugins/installs/add.d.ts.map +0 -1
- package/dist/commands/config/plugins/installs/add.js +0 -51
- package/dist/commands/config/plugins/installs/add.js.map +0 -1
- package/dist/commands/config/plugins/installs/list.d.ts +0 -10
- package/dist/commands/config/plugins/installs/list.d.ts.map +0 -1
- package/dist/commands/config/plugins/installs/list.js +0 -29
- package/dist/commands/config/plugins/installs/list.js.map +0 -1
- package/dist/commands/config/plugins/installs/remove.d.ts +0 -13
- package/dist/commands/config/plugins/installs/remove.d.ts.map +0 -1
- package/dist/commands/config/plugins/installs/remove.js +0 -27
- package/dist/commands/config/plugins/installs/remove.js.map +0 -1
- package/dist/commands/config/plugins/security/update.d.ts +0 -5
- package/dist/commands/config/plugins/security/update.d.ts.map +0 -1
- package/dist/commands/config/plugins/security/update.js +0 -5
- package/dist/commands/config/plugins/security/update.js.map +0 -1
- package/dist/commands/config/secrets/providers/doctor.d.ts +0 -10
- package/dist/commands/config/secrets/providers/doctor.d.ts.map +0 -1
- package/dist/commands/config/secrets/providers/doctor.js +0 -40
- package/dist/commands/config/secrets/providers/doctor.js.map +0 -1
- package/dist/commands/config/secrets/providers/list.d.ts +0 -10
- package/dist/commands/config/secrets/providers/list.d.ts.map +0 -1
- package/dist/commands/config/secrets/providers/list.js +0 -31
- package/dist/commands/config/secrets/providers/list.js.map +0 -1
- package/dist/commands/config/secrets/providers.d.ts +0 -6
- package/dist/commands/config/secrets/providers.d.ts.map +0 -1
- package/dist/commands/config/secrets/providers.js +0 -9
- package/dist/commands/config/secrets/providers.js.map +0 -1
- package/dist/commands/config/secrets/yaml/get.d.ts +0 -11
- package/dist/commands/config/secrets/yaml/get.d.ts.map +0 -1
- package/dist/commands/config/secrets/yaml/get.js +0 -35
- package/dist/commands/config/secrets/yaml/get.js.map +0 -1
- package/dist/commands/config/secrets/yaml/set-default-provider.d.ts +0 -13
- package/dist/commands/config/secrets/yaml/set-default-provider.d.ts.map +0 -1
- package/dist/commands/config/secrets/yaml/set-default-provider.js +0 -24
- package/dist/commands/config/secrets/yaml/set-default-provider.js.map +0 -1
- package/dist/commands/config/secrets/yaml/set-policy.d.ts +0 -13
- package/dist/commands/config/secrets/yaml/set-policy.d.ts.map +0 -1
- package/dist/commands/config/secrets/yaml/set-policy.js +0 -29
- package/dist/commands/config/secrets/yaml/set-policy.js.map +0 -1
- package/dist/commands/config/security/get.d.ts +0 -11
- package/dist/commands/config/security/get.d.ts.map +0 -1
- package/dist/commands/config/security/get.js +0 -33
- package/dist/commands/config/security/get.js.map +0 -1
- package/dist/commands/config/security/plugins/update.d.ts +0 -13
- package/dist/commands/config/security/plugins/update.d.ts.map +0 -1
- package/dist/commands/config/security/plugins/update.js +0 -49
- package/dist/commands/config/security/plugins/update.js.map +0 -1
- package/dist/commands/config/tools/add.d.ts +0 -16
- package/dist/commands/config/tools/add.d.ts.map +0 -1
- package/dist/commands/config/tools/add.js +0 -60
- package/dist/commands/config/tools/add.js.map +0 -1
- package/dist/commands/config/tools/get.d.ts +0 -10
- package/dist/commands/config/tools/get.d.ts.map +0 -1
- package/dist/commands/config/tools/get.js +0 -29
- package/dist/commands/config/tools/get.js.map +0 -1
- package/dist/commands/config/tools/remove.d.ts +0 -13
- package/dist/commands/config/tools/remove.d.ts.map +0 -1
- package/dist/commands/config/tools/remove.js +0 -25
- package/dist/commands/config/tools/remove.js.map +0 -1
- package/dist/commands/config/tools/update.d.ts +0 -16
- package/dist/commands/config/tools/update.d.ts.map +0 -1
- package/dist/commands/config/tools/update.js +0 -59
- package/dist/commands/config/tools/update.js.map +0 -1
- package/dist/commands/config.d.ts +0 -8
- package/dist/commands/config.d.ts.map +0 -1
- package/dist/commands/config.js +0 -43
- package/dist/commands/config.js.map +0 -1
- package/dist/commands/graph.d.ts +0 -14
- package/dist/commands/graph.d.ts.map +0 -1
- package/dist/commands/graph.js +0 -39
- package/dist/commands/graph.js.map +0 -1
- package/dist/commands/trace/list.d.ts +0 -10
- package/dist/commands/trace/list.d.ts.map +0 -1
- package/dist/commands/trace/list.js +0 -32
- package/dist/commands/trace/list.js.map +0 -1
- package/dist/commands/trace.d.ts +0 -14
- package/dist/commands/trace.d.ts.map +0 -1
- package/dist/commands/trace.js +0 -43
- package/dist/commands/trace.js.map +0 -1
- package/dist/lib/config-flags.d.ts +0 -6
- package/dist/lib/config-flags.d.ts.map +0 -1
- package/dist/lib/config-flags.js +0 -14
- package/dist/lib/config-flags.js.map +0 -1
- package/dist/lib/default-ecp-config.d.ts +0 -5
- package/dist/lib/default-ecp-config.d.ts.map +0 -1
- package/dist/lib/default-ecp-config.js +0 -47
- package/dist/lib/default-ecp-config.js.map +0 -1
- package/dist/lib/ecp-environment-command.d.ts +0 -20
- package/dist/lib/ecp-environment-command.d.ts.map +0 -1
- package/dist/lib/ecp-environment-command.js +0 -33
- package/dist/lib/ecp-environment-command.js.map +0 -1
- package/dist/lib/ecp-home.d.ts +0 -3
- package/dist/lib/ecp-home.d.ts.map +0 -1
- package/dist/lib/ecp-home.js +0 -9
- package/dist/lib/ecp-home.js.map +0 -1
- package/dist/lib/inputs.d.ts +0 -3
- package/dist/lib/inputs.d.ts.map +0 -1
- package/dist/lib/inputs.js +0 -7
- package/dist/lib/inputs.js.map +0 -1
- package/dist/lib/parsing.d.ts +0 -12
- package/dist/lib/parsing.d.ts.map +0 -1
- package/dist/lib/parsing.js +0 -57
- package/dist/lib/parsing.js.map +0 -1
- package/dist/lib/progress.d.ts +0 -4
- package/dist/lib/progress.d.ts.map +0 -1
- package/dist/lib/progress.js +0 -111
- package/dist/lib/progress.js.map +0 -1
- package/dist/lib/secret-provider-ids.d.ts +0 -3
- package/dist/lib/secret-provider-ids.d.ts.map +0 -1
- package/dist/lib/secret-provider-ids.js +0 -3
- package/dist/lib/secret-provider-ids.js.map +0 -1
- package/dist/lib/secrets-config.d.ts +0 -15
- package/dist/lib/secrets-config.d.ts.map +0 -1
- package/dist/lib/secrets-config.js +0 -12
- package/dist/lib/secrets-config.js.map +0 -1
- package/dist/lib/system-config-cli.d.ts +0 -50
- package/dist/lib/system-config-cli.d.ts.map +0 -1
- package/dist/lib/system-config-cli.js +0 -108
- package/dist/lib/system-config-cli.js.map +0 -1
- package/dist/lib/trace-files.d.ts +0 -2
- package/dist/lib/trace-files.d.ts.map +0 -1
- package/dist/lib/trace-files.js +0 -14
- package/dist/lib/trace-files.js.map +0 -1
- package/dist/lib/trace-view.d.ts +0 -4
- package/dist/lib/trace-view.d.ts.map +0 -1
- package/dist/lib/trace-view.js +0 -8
- package/dist/lib/trace-view.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,77 +1,97 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @executioncontrolprotocol/cli
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
ECP command-line interface for running **workflows** (`@executioncontrolprotocol.workflow`) in configured
|
|
4
|
+
**environments** (runtime + extensions + policies).
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
This CLI is how you run ECP deterministically in a Node.js / TypeScript ecosystem:
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
- Compile workflow source modules (`.ts` / `.js`) to portable JSON manifests
|
|
9
|
+
- Validate workflows against an environment’s registered capabilities
|
|
10
|
+
- Describe/search environment capabilities for agent/UI discovery
|
|
11
|
+
- Run workflows and print structured run results
|
|
12
|
+
- Encode/decode workflows using format extensions (TOON, Fluent, JSON)
|
|
13
|
+
|
|
14
|
+
For the architecture and monorepo package boundaries, start with
|
|
15
|
+
[`AGENTS.md`](../../AGENTS.md) and [`ecp-overhaul.md`](../../ecp-overhaul.md).
|
|
8
16
|
|
|
9
17
|
## Install
|
|
10
18
|
|
|
11
|
-
|
|
19
|
+
From npm (when published):
|
|
20
|
+
|
|
21
|
+
```sh
|
|
12
22
|
npm install -g @executioncontrolprotocol/cli
|
|
13
23
|
```
|
|
14
24
|
|
|
25
|
+
From this monorepo (recommended for development):
|
|
26
|
+
|
|
27
|
+
```sh
|
|
28
|
+
npm install
|
|
29
|
+
npm run build
|
|
30
|
+
cd packages/cli
|
|
31
|
+
npm link
|
|
32
|
+
```
|
|
33
|
+
|
|
15
34
|
## Usage
|
|
16
35
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
36
|
+
All operational commands that need an environment accept:
|
|
37
|
+
|
|
38
|
+
- `--env <path>`: a module that exports the environment builder (`default export`)
|
|
39
|
+
|
|
40
|
+
### Run
|
|
41
|
+
|
|
42
|
+
```sh
|
|
43
|
+
ecp run examples/01-echo/workflow.ts --env examples/01-echo/environment.ts
|
|
21
44
|
```
|
|
22
45
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
```bash
|
|
28
|
-
ecp config --help
|
|
29
|
-
ecp config init # best-practices starter in current directory
|
|
30
|
-
ecp config init --global # ~/.ecp/config.yaml
|
|
31
|
-
ecp config path # resolved file path (use --for-write for mutation target)
|
|
32
|
-
ecp config get --format json
|
|
33
|
-
ecp config security get
|
|
34
|
-
ecp config plugins get # plugins.installs + security.plugins summary
|
|
35
|
-
ecp config models get
|
|
36
|
-
ecp config tools get
|
|
37
|
-
ecp config loggers get
|
|
38
|
-
ecp config secrets yaml get
|
|
46
|
+
Provide workflow input (JSON file):
|
|
47
|
+
|
|
48
|
+
```sh
|
|
49
|
+
ecp run workflow.json --env environment.ts --input input.json
|
|
39
50
|
```
|
|
40
51
|
|
|
41
|
-
|
|
52
|
+
Dry run (validate + plan without invoking capabilities):
|
|
42
53
|
|
|
43
|
-
|
|
54
|
+
```sh
|
|
55
|
+
ecp run workflow.ts --env environment.ts --dry-run
|
|
56
|
+
```
|
|
44
57
|
|
|
45
|
-
|
|
58
|
+
### Validate
|
|
46
59
|
|
|
47
|
-
|
|
60
|
+
```sh
|
|
61
|
+
ecp validate examples/01-echo/workflow.ts --env examples/01-echo/environment.ts
|
|
62
|
+
```
|
|
48
63
|
|
|
49
|
-
|
|
50
|
-
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
51
|
-
| `process.env` | Read from the current process environment (`process.env[<key>]`). |
|
|
52
|
-
| `dot.env` | Read from a `.env`-style file on disk (path from config or `--environment`). |
|
|
53
|
-
| `os.secrets` | Read from the OS credential manager / keychain; stored under an `ecp://<key>` target (same as default `SecretRef.id`; provider is only in `source.provider`, e.g. `os.secrets.MY_KEY` as shorthand in docs). |
|
|
64
|
+
### Compile (portable JSON)
|
|
54
65
|
|
|
55
|
-
|
|
66
|
+
```sh
|
|
67
|
+
ecp compile examples/01-echo/workflow.ts -o dist/workflow.json
|
|
68
|
+
```
|
|
56
69
|
|
|
57
|
-
###
|
|
70
|
+
### Describe / search environment capabilities
|
|
58
71
|
|
|
59
|
-
|
|
72
|
+
```sh
|
|
73
|
+
ecp describe --env examples/01-echo/environment.ts
|
|
74
|
+
ecp search "echo" --env examples/01-echo/environment.ts
|
|
75
|
+
```
|
|
60
76
|
|
|
61
|
-
###
|
|
77
|
+
### Encode / decode formats
|
|
62
78
|
|
|
63
|
-
|
|
79
|
+
Encoding and decoding uses **format extensions** bound in your environment.
|
|
64
80
|
|
|
65
|
-
```
|
|
66
|
-
ecp
|
|
81
|
+
```sh
|
|
82
|
+
ecp encode workflow.json --format toon --env environment.ts -o workflow.toon
|
|
83
|
+
ecp encode workflow.json --format fluent --env environment.ts -o workflow.generated.ts
|
|
84
|
+
ecp decode workflow.toon --format toon --env environment.ts -o workflow.json
|
|
67
85
|
```
|
|
68
86
|
|
|
69
|
-
|
|
87
|
+
Notes:
|
|
70
88
|
|
|
71
|
-
|
|
89
|
+
- Fluent **decode** is not supported. Use `ecp compile` for TypeScript/Fluent source → manifest.
|
|
90
|
+
- JSON is the canonical manifest format; other formats are optional extensions.
|
|
72
91
|
|
|
73
|
-
##
|
|
92
|
+
## Related packages
|
|
74
93
|
|
|
75
|
-
-
|
|
76
|
-
-
|
|
77
|
-
-
|
|
94
|
+
- [`@executioncontrolprotocol/core`](../core/README.md): runtime-agnostic core + fluent API
|
|
95
|
+
- [`@executioncontrolprotocol/node`](../runtimes/node/README.md): Node runtime host used by CLI examples
|
|
96
|
+
- [`@executioncontrolprotocol/types`](../types/README.md): protocol types + generated JSON Schemas
|
|
97
|
+
- [`@executioncontrolprotocol/mcp`](../mcp/): MCP server adapter exposing an environment to agents
|
package/bin/dev.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
#!/usr/bin/env
|
|
1
|
+
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import {execute} from
|
|
3
|
+
import { execute } from "@oclif/core"
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
process.noDeprecation = true;
|
|
5
|
+
process.noDeprecation = true
|
|
7
6
|
|
|
8
|
-
await execute({development: true, dir: import.meta.url})
|
|
7
|
+
await execute({ development: true, dir: import.meta.url })
|
package/bin/ecp.js
ADDED
package/bin/run.cmd
CHANGED
package/bin/run.js
CHANGED
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
// Suppress Node deprecation warnings (e.g. punycode -> DEP0040) so CLI output stays clean.
|
|
6
|
-
process.noDeprecation = true;
|
|
7
|
-
|
|
8
|
-
await execute({dir: import.meta.url})
|
|
3
|
+
/** @deprecated Use `ecp.js`; kept for tests and `run.cmd`. */
|
|
4
|
+
import "./ecp.js"
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Command } from "@oclif/core";
|
|
2
|
+
/** Compile a workflow source file to a portable JSON manifest. */
|
|
3
|
+
export default class Compile extends Command {
|
|
4
|
+
static summary: string;
|
|
5
|
+
static description: string;
|
|
6
|
+
static examples: string[];
|
|
7
|
+
static flags: {
|
|
8
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
};
|
|
10
|
+
static args: {
|
|
11
|
+
"workflow-path": import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
12
|
+
};
|
|
13
|
+
run(): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=compile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/commands/compile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAA;AAKlD,kEAAkE;AAClE,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,OAAO;IAC1C,MAAM,CAAC,OAAO,SAA+B;IAE7C,MAAM,CAAC,WAAW,SACoF;IAEtG,MAAM,CAAC,QAAQ,WAGd;IAED,MAAM,CAAC,KAAK;;MAMX;IAED,MAAM,CAAC,IAAI;;MAKV;IAEK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAe3B"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Args, Command, Flags } from "@oclif/core";
|
|
2
|
+
import { compileWorkflowSource } from "@executioncontrolprotocol/core/compile";
|
|
3
|
+
import { readFile, writeFile } from "node:fs/promises";
|
|
4
|
+
import { runWithCommandError } from "../lib/command-helpers.js";
|
|
5
|
+
/** Compile a workflow source file to a portable JSON manifest. */
|
|
6
|
+
export default class Compile extends Command {
|
|
7
|
+
static summary = "Compile a workflow to JSON";
|
|
8
|
+
static description = "Bundle and evaluate a workflow module (.ts or .js), or load .json, and emit the workflow manifest.";
|
|
9
|
+
static examples = [
|
|
10
|
+
"<%= config.bin %> <%= command.id %> examples/01-echo/workflow.ts",
|
|
11
|
+
"<%= config.bin %> <%= command.id %> examples/01-echo/workflow.ts -o dist/workflow.json",
|
|
12
|
+
];
|
|
13
|
+
static flags = {
|
|
14
|
+
...Command.baseFlags,
|
|
15
|
+
output: Flags.string({
|
|
16
|
+
char: "o",
|
|
17
|
+
description: "Write manifest JSON to this file (stdout if omitted)",
|
|
18
|
+
}),
|
|
19
|
+
};
|
|
20
|
+
static args = {
|
|
21
|
+
"workflow-path": Args.string({
|
|
22
|
+
required: true,
|
|
23
|
+
description: "Workflow file (.ts, .js, or .json)",
|
|
24
|
+
}),
|
|
25
|
+
};
|
|
26
|
+
async run() {
|
|
27
|
+
const { args, flags } = await this.parse(Compile);
|
|
28
|
+
await runWithCommandError(this, async () => {
|
|
29
|
+
const input = args["workflow-path"];
|
|
30
|
+
const source = await readFile(input, "utf8");
|
|
31
|
+
const result = await compileWorkflowSource({ source, filename: input });
|
|
32
|
+
if (!result.ok) {
|
|
33
|
+
this.log(JSON.stringify(result, null, 2));
|
|
34
|
+
this.exit(1);
|
|
35
|
+
}
|
|
36
|
+
const json = JSON.stringify(result.manifest, null, 2);
|
|
37
|
+
if (flags.output)
|
|
38
|
+
await writeFile(flags.output, json, "utf8");
|
|
39
|
+
else
|
|
40
|
+
this.log(json);
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=compile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/commands/compile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAA;AAC9E,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAE/D,kEAAkE;AAClE,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,OAAO;IAC1C,MAAM,CAAC,OAAO,GAAG,4BAA4B,CAAA;IAE7C,MAAM,CAAC,WAAW,GAChB,oGAAoG,CAAA;IAEtG,MAAM,CAAC,QAAQ,GAAG;QAChB,kEAAkE;QAClE,wFAAwF;KACzF,CAAA;IAED,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,OAAO,CAAC,SAAS;QACpB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,sDAAsD;SACpE,CAAC;KACH,CAAA;IAED,MAAM,CAAC,IAAI,GAAG;QACZ,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC;YAC3B,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,oCAAoC;SAClD,CAAC;KACH,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACjD,MAAM,mBAAmB,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;YACzC,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,CAAA;YACnC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;YAC5C,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;YACvE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;gBACzC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACd,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;YACrD,IAAI,KAAK,CAAC,MAAM;gBAAE,MAAM,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;;gBACxD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACrB,CAAC,CAAC,CAAA;IACJ,CAAC"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { Command } from "@oclif/core";
|
|
2
|
+
/** Store an OS keychain secret. */
|
|
2
3
|
export default class ConfigSecretsAdd extends Command {
|
|
3
4
|
static summary: string;
|
|
5
|
+
static description: string;
|
|
6
|
+
static examples: string[];
|
|
7
|
+
static args: {
|
|
8
|
+
key: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
9
|
+
};
|
|
4
10
|
static flags: {
|
|
5
|
-
provider: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
6
|
-
key: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
11
|
value: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
-
prompt: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
|
-
global: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
|
-
config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
12
|
};
|
|
12
13
|
run(): Promise<void>;
|
|
13
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../../src/commands/config/secrets/add.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../../src/commands/config/secrets/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAA;AAUlD,mCAAmC;AACnC,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,OAAO;IACnD,MAAM,CAAC,OAAO,SAA+C;IAE7D,MAAM,CAAC,WAAW,SACsF;IAExG,MAAM,CAAC,QAAQ,WAGd;IAED,MAAM,CAAC,IAAI;;MAKV;IAED,MAAM,CAAC,KAAK;;MAKX;IAEK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA0B3B"}
|
|
@@ -1,84 +1,51 @@
|
|
|
1
|
-
import { Command, Flags } from "@oclif/core";
|
|
1
|
+
import { Args, Command, Flags } from "@oclif/core";
|
|
2
2
|
import { createInterface } from "node:readline/promises";
|
|
3
3
|
import { stdin as input, stdout as output } from "node:process";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
import { loadConfigForDisplay } from "../../../lib/system-config-cli.js";
|
|
8
|
-
import { canonicalSecretKeyForBinding, createDefaultSecretBroker, ECP_SECRET_REF_PROTOCOL_PREFIX, secretRefIdFromLogicalKey, } from "@executioncontrolprotocol/runtime";
|
|
4
|
+
import { canonicalSecretKey, ECP_SECRET_REF_PROTOCOL_PREFIX, secretRefIdFromLogicalKey, } from "@executioncontrolprotocol/secrets";
|
|
5
|
+
import { getCliSecretsStore } from "../../../lib/secrets/store.js";
|
|
6
|
+
/** Store an OS keychain secret. */
|
|
9
7
|
export default class ConfigSecretsAdd extends Command {
|
|
10
|
-
static summary =
|
|
11
|
-
static
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
key: Flags.string({
|
|
19
|
-
char: "k",
|
|
20
|
-
description: `Secret lookup key (e.g. GITHUB_API_KEY or server/fetch.token; ref id is ${ECP_SECRET_REF_PROTOCOL_PREFIX}<key>)`,
|
|
8
|
+
static summary = "Add or replace a secret in the OS keychain";
|
|
9
|
+
static description = "Prompts interactively for the secret value by default. Use --value for non-interactive inline input.";
|
|
10
|
+
static examples = [
|
|
11
|
+
"<%= config.bin %> <%= command.id %> server/fetch.token",
|
|
12
|
+
"<%= config.bin %> <%= command.id %> GITHUB_API_KEY --value ghp_xxx",
|
|
13
|
+
];
|
|
14
|
+
static args = {
|
|
15
|
+
key: Args.string({
|
|
21
16
|
required: true,
|
|
17
|
+
description: `Secret lookup key (ref id is ${ECP_SECRET_REF_PROTOCOL_PREFIX}<key>)`,
|
|
22
18
|
}),
|
|
19
|
+
};
|
|
20
|
+
static flags = {
|
|
23
21
|
value: Flags.string({
|
|
24
22
|
char: "v",
|
|
25
|
-
description: "Secret value (avoid in shell history
|
|
26
|
-
}),
|
|
27
|
-
prompt: Flags.boolean({
|
|
28
|
-
description: "Read secret from stdin interactively (masked input not supported on all terminals)",
|
|
23
|
+
description: "Secret value inline (non-interactive; avoid in shell history)",
|
|
29
24
|
}),
|
|
30
25
|
};
|
|
31
26
|
async run() {
|
|
32
|
-
const { flags } = await this.parse(ConfigSecretsAdd);
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
if (!flags.value && !flags.prompt) {
|
|
37
|
-
this.error("Provide --value or --prompt.", { exit: 1 });
|
|
38
|
-
}
|
|
39
|
-
const cwd = process.cwd();
|
|
40
|
-
const { config } = loadConfigForDisplay({
|
|
41
|
-
global: flags.global,
|
|
42
|
-
cwd,
|
|
43
|
-
explicit: flags.config,
|
|
44
|
-
});
|
|
45
|
-
const dotenvPath = resolveDotenvPathFromConfig(cwd, config);
|
|
46
|
-
const { registry } = createDefaultSecretBroker({
|
|
47
|
-
policy: resolveSecretPolicyFromConfig(config),
|
|
48
|
-
dotenvPath,
|
|
49
|
-
cwd,
|
|
50
|
-
});
|
|
51
|
-
const provider = registry.get(flags.provider);
|
|
52
|
-
if (!provider) {
|
|
53
|
-
this.error(`Unknown provider "${flags.provider}".`, { exit: 1 });
|
|
54
|
-
}
|
|
55
|
-
if (!provider.store) {
|
|
56
|
-
this.error(`Provider "${flags.provider}" does not support store (read-only).`, { exit: 1 });
|
|
57
|
-
}
|
|
58
|
-
const available = await provider.isAvailable();
|
|
27
|
+
const { args, flags } = await this.parse(ConfigSecretsAdd);
|
|
28
|
+
const store = getCliSecretsStore();
|
|
29
|
+
const available = await store.isAvailable();
|
|
59
30
|
if (!available) {
|
|
60
|
-
this.error(
|
|
31
|
+
this.error("OS keychain is not available on this system.", { exit: 1 });
|
|
61
32
|
}
|
|
62
|
-
let value = flags.value
|
|
63
|
-
if (
|
|
33
|
+
let value = flags.value;
|
|
34
|
+
if (value === undefined) {
|
|
64
35
|
const rl = createInterface({ input, output });
|
|
65
36
|
try {
|
|
66
|
-
value = (await rl.question("
|
|
37
|
+
value = (await rl.question("Paste secret value: ")).trim();
|
|
67
38
|
}
|
|
68
39
|
finally {
|
|
69
|
-
|
|
40
|
+
rl.close();
|
|
41
|
+
}
|
|
42
|
+
if (!value) {
|
|
43
|
+
this.error("Secret value cannot be empty.", { exit: 1 });
|
|
70
44
|
}
|
|
71
45
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
}
|
|
75
|
-
const ref = {
|
|
76
|
-
id: secretRefIdFromLogicalKey(flags.key),
|
|
77
|
-
provider: flags.provider,
|
|
78
|
-
key: canonicalSecretKeyForBinding(flags.key),
|
|
79
|
-
};
|
|
80
|
-
await provider.store({ ref, value });
|
|
81
|
-
this.log(`Stored secret for provider "${flags.provider}" key "${flags.key}".`);
|
|
46
|
+
const key = canonicalSecretKey(args.key);
|
|
47
|
+
await store.set(key, value);
|
|
48
|
+
this.log(`Stored secret "${key}" (${secretRefIdFromLogicalKey(key)}).`);
|
|
82
49
|
}
|
|
83
50
|
}
|
|
84
51
|
//# sourceMappingURL=add.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../../../src/commands/config/secrets/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../../../src/commands/config/secrets/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,cAAc,CAAA;AAC/D,OAAO,EACL,kBAAkB,EAClB,8BAA8B,EAC9B,yBAAyB,GAC1B,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAElE,mCAAmC;AACnC,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,OAAO;IACnD,MAAM,CAAC,OAAO,GAAG,4CAA4C,CAAA;IAE7D,MAAM,CAAC,WAAW,GAChB,sGAAsG,CAAA;IAExG,MAAM,CAAC,QAAQ,GAAG;QAChB,wDAAwD;QACxD,oEAAoE;KACrE,CAAA;IAED,MAAM,CAAC,IAAI,GAAG;QACZ,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC;YACf,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,gCAAgC,8BAA8B,QAAQ;SACpF,CAAC;KACH,CAAA;IAED,MAAM,CAAC,KAAK,GAAG;QACb,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;YAClB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,+DAA+D;SAC7E,CAAC;KACH,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAA;QAE1D,MAAM,KAAK,GAAG,kBAAkB,EAAE,CAAA;QAClC,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAA;QAC3C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,8CAA8C,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAA;QACzE,CAAC;QAED,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;QACvB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;YAC7C,IAAI,CAAC;gBACH,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;YAC5D,CAAC;oBAAS,CAAC;gBACT,EAAE,CAAC,KAAK,EAAE,CAAA;YACZ,CAAC;YACD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,IAAI,CAAC,KAAK,CAAC,+BAA+B,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAA;YAC1D,CAAC;QACH,CAAC;QAED,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACxC,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QAC3B,IAAI,CAAC,GAAG,CAAC,kBAAkB,GAAG,MAAM,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACzE,CAAC"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Command } from "@oclif/core";
|
|
2
|
+
/** Read an OS keychain secret. */
|
|
2
3
|
export default class ConfigSecretsGet extends Command {
|
|
3
4
|
static summary: string;
|
|
5
|
+
static args: {
|
|
6
|
+
key: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
7
|
+
};
|
|
4
8
|
static flags: {
|
|
5
|
-
|
|
6
|
-
key: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
-
show: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
|
-
global: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
|
-
config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
reveal: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
10
|
};
|
|
11
11
|
run(): Promise<void>;
|
|
12
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../../src/commands/config/secrets/get.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../../src/commands/config/secrets/get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAA;AAQlD,kCAAkC;AAClC,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,OAAO;IACnD,MAAM,CAAC,OAAO,SAAwC;IAEtD,MAAM,CAAC,IAAI;;MAKV;IAED,MAAM,CAAC,KAAK;;MAIX;IAEK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAoB3B"}
|
|
@@ -1,63 +1,38 @@
|
|
|
1
|
-
import { Command, Flags } from "@oclif/core";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
import { canonicalSecretKeyForBinding, createDefaultSecretBroker, ECP_SECRET_REF_PROTOCOL_PREFIX, secretRefIdFromLogicalKey, } from "@executioncontrolprotocol/runtime";
|
|
1
|
+
import { Args, Command, Flags } from "@oclif/core";
|
|
2
|
+
import { canonicalSecretKey, ECP_SECRET_REF_PROTOCOL_PREFIX, redactSecret, } from "@executioncontrolprotocol/secrets";
|
|
3
|
+
import { getCliSecretsStore } from "../../../lib/secrets/store.js";
|
|
4
|
+
/** Read an OS keychain secret. */
|
|
6
5
|
export default class ConfigSecretsGet extends Command {
|
|
7
6
|
static summary = "Read a secret (redacted by default)";
|
|
8
|
-
static
|
|
9
|
-
|
|
10
|
-
provider: Flags.string({
|
|
11
|
-
char: "p",
|
|
12
|
-
description: "Provider id",
|
|
13
|
-
required: true,
|
|
14
|
-
}),
|
|
15
|
-
key: Flags.string({
|
|
16
|
-
char: "k",
|
|
17
|
-
description: `Lookup key (same form as add; ref id is ${ECP_SECRET_REF_PROTOCOL_PREFIX}<key>)`,
|
|
7
|
+
static args = {
|
|
8
|
+
key: Args.string({
|
|
18
9
|
required: true,
|
|
10
|
+
description: `Lookup key (ref id is ${ECP_SECRET_REF_PROTOCOL_PREFIX}<key>)`,
|
|
19
11
|
}),
|
|
20
|
-
|
|
12
|
+
};
|
|
13
|
+
static flags = {
|
|
14
|
+
reveal: Flags.boolean({
|
|
21
15
|
description: "Print full value (writes to stdout — avoid logs)",
|
|
22
16
|
}),
|
|
23
17
|
};
|
|
24
18
|
async run() {
|
|
25
|
-
const { flags } = await this.parse(ConfigSecretsGet);
|
|
26
|
-
const
|
|
27
|
-
const
|
|
28
|
-
global: flags.global,
|
|
29
|
-
cwd,
|
|
30
|
-
explicit: flags.config,
|
|
31
|
-
});
|
|
32
|
-
const dotenvPath = resolveDotenvPathFromConfig(cwd, config);
|
|
33
|
-
const { registry } = createDefaultSecretBroker({
|
|
34
|
-
policy: resolveSecretPolicyFromConfig(config),
|
|
35
|
-
dotenvPath,
|
|
36
|
-
cwd,
|
|
37
|
-
});
|
|
38
|
-
const provider = registry.get(flags.provider);
|
|
39
|
-
if (!provider) {
|
|
40
|
-
this.error(`Unknown provider "${flags.provider}".`, { exit: 1 });
|
|
41
|
-
}
|
|
42
|
-
const available = await provider.isAvailable();
|
|
19
|
+
const { args, flags } = await this.parse(ConfigSecretsGet);
|
|
20
|
+
const store = getCliSecretsStore();
|
|
21
|
+
const available = await store.isAvailable();
|
|
43
22
|
if (!available) {
|
|
44
|
-
this.error(
|
|
23
|
+
this.error("OS keychain is not available on this system.", { exit: 1 });
|
|
45
24
|
}
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
key:
|
|
50
|
-
};
|
|
51
|
-
const result = await provider.load(ref);
|
|
52
|
-
if (!result) {
|
|
53
|
-
this.error(`No secret for key "${flags.key}".`, { exit: 1 });
|
|
25
|
+
const key = canonicalSecretKey(args.key);
|
|
26
|
+
const value = await store.get(key);
|
|
27
|
+
if (value == null) {
|
|
28
|
+
this.error(`No secret for key "${key}".`, { exit: 1 });
|
|
54
29
|
}
|
|
55
|
-
if (flags.
|
|
30
|
+
if (flags.reveal) {
|
|
56
31
|
this.warn("Printing full secret to stdout — ensure this is not logged or captured.");
|
|
57
|
-
this.log(
|
|
32
|
+
this.log(value);
|
|
58
33
|
}
|
|
59
34
|
else {
|
|
60
|
-
this.log(
|
|
35
|
+
this.log(redactSecret(value));
|
|
61
36
|
}
|
|
62
37
|
}
|
|
63
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../../../src/commands/config/secrets/get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../../../src/commands/config/secrets/get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,EACL,kBAAkB,EAClB,8BAA8B,EAC9B,YAAY,GACb,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAElE,kCAAkC;AAClC,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,OAAO;IACnD,MAAM,CAAC,OAAO,GAAG,qCAAqC,CAAA;IAEtD,MAAM,CAAC,IAAI,GAAG;QACZ,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC;YACf,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,yBAAyB,8BAA8B,QAAQ;SAC7E,CAAC;KACH,CAAA;IAED,MAAM,CAAC,KAAK,GAAG;QACb,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC;YACpB,WAAW,EAAE,kDAAkD;SAChE,CAAC;KACH,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAA;QAC1D,MAAM,KAAK,GAAG,kBAAkB,EAAE,CAAA;QAClC,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAA;QAC3C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,8CAA8C,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAA;QACzE,CAAC;QAED,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACxC,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAClC,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAClB,IAAI,CAAC,KAAK,CAAC,sBAAsB,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAA;QACxD,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAA;YACpF,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACjB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAA;QAC/B,CAAC;IACH,CAAC"}
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
import { Command } from "@oclif/core";
|
|
2
|
+
/** List OS keychain secret keys. */
|
|
2
3
|
export default class ConfigSecretsList extends Command {
|
|
3
4
|
static summary: string;
|
|
4
|
-
static flags: {
|
|
5
|
-
provider: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
6
|
-
global: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
7
|
-
config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
|
-
};
|
|
9
5
|
run(): Promise<void>;
|
|
10
6
|
}
|
|
11
7
|
//# sourceMappingURL=list.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/commands/config/secrets/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/commands/config/secrets/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAGrC,oCAAoC;AACpC,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,OAAO;IACpD,MAAM,CAAC,OAAO,SAAwC;IAEhD,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAgB3B"}
|
|
@@ -1,51 +1,21 @@
|
|
|
1
|
-
import { Command
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
import { resolveDotenvPathFromConfig, resolveSecretPolicyFromConfig } from "../../../lib/secrets-config.js";
|
|
5
|
-
import { loadConfigForDisplay } from "../../../lib/system-config-cli.js";
|
|
6
|
-
import { createDefaultSecretBroker } from "@executioncontrolprotocol/runtime";
|
|
1
|
+
import { Command } from "@oclif/core";
|
|
2
|
+
import { getCliSecretsStore } from "../../../lib/secrets/store.js";
|
|
3
|
+
/** List OS keychain secret keys. */
|
|
7
4
|
export default class ConfigSecretsList extends Command {
|
|
8
|
-
static summary = "List secret keys
|
|
9
|
-
static flags = {
|
|
10
|
-
...configScopeFlags,
|
|
11
|
-
provider: Flags.string({
|
|
12
|
-
char: "p",
|
|
13
|
-
description: `Provider id (e.g. ${OS_PROVIDER_ID})`,
|
|
14
|
-
required: true,
|
|
15
|
-
}),
|
|
16
|
-
};
|
|
5
|
+
static summary = "List secret keys in the OS keychain";
|
|
17
6
|
async run() {
|
|
18
|
-
const
|
|
19
|
-
const
|
|
20
|
-
const { config } = loadConfigForDisplay({
|
|
21
|
-
global: flags.global,
|
|
22
|
-
cwd,
|
|
23
|
-
explicit: flags.config,
|
|
24
|
-
});
|
|
25
|
-
const dotenvPath = resolveDotenvPathFromConfig(cwd, config);
|
|
26
|
-
const { registry } = createDefaultSecretBroker({
|
|
27
|
-
policy: resolveSecretPolicyFromConfig(config),
|
|
28
|
-
dotenvPath,
|
|
29
|
-
cwd,
|
|
30
|
-
});
|
|
31
|
-
const provider = registry.get(flags.provider);
|
|
32
|
-
if (!provider) {
|
|
33
|
-
this.error(`Unknown provider "${flags.provider}".`, { exit: 1 });
|
|
34
|
-
}
|
|
35
|
-
if (!provider.list) {
|
|
36
|
-
this.error(`Provider "${flags.provider}" does not support list.`, { exit: 1 });
|
|
37
|
-
}
|
|
38
|
-
const available = await provider.isAvailable();
|
|
7
|
+
const store = getCliSecretsStore();
|
|
8
|
+
const available = await store.isAvailable();
|
|
39
9
|
if (!available) {
|
|
40
|
-
this.error(
|
|
10
|
+
this.error("OS keychain is not available on this system.", { exit: 1 });
|
|
41
11
|
}
|
|
42
|
-
const
|
|
43
|
-
if (
|
|
12
|
+
const keys = await store.list();
|
|
13
|
+
if (keys.length === 0) {
|
|
44
14
|
this.log("(no entries)");
|
|
45
15
|
return;
|
|
46
16
|
}
|
|
47
|
-
for (const
|
|
48
|
-
this.log(` ${
|
|
17
|
+
for (const key of keys) {
|
|
18
|
+
this.log(` ${key}`);
|
|
49
19
|
}
|
|
50
20
|
}
|
|
51
21
|
}
|