acpx 0.7.0 → 0.9.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 +14 -6
- package/dist/{cli-T-Z-9x6a.js → cli-Bf3yjqzE.js} +35 -10
- package/dist/cli-Bf3yjqzE.js.map +1 -0
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +724 -241
- package/dist/cli.js.map +1 -1
- package/dist/{client-COPilhO_.d.ts → client-BssohYqM.d.ts} +35 -4
- package/dist/client-BssohYqM.d.ts.map +1 -0
- package/dist/flags-C-rwARqg.js +260 -0
- package/dist/flags-C-rwARqg.js.map +1 -0
- package/dist/{flows-CF8w1rPI.js → flows-WLs26_5Y.js} +405 -337
- package/dist/flows-WLs26_5Y.js.map +1 -0
- package/dist/flows.d.ts +23 -2
- package/dist/flows.d.ts.map +1 -1
- package/dist/flows.js +1 -1
- package/dist/{prompt-turn-CVPMWdj1.js → live-checkpoint-D5d-K9s1.js} +2487 -609
- package/dist/live-checkpoint-D5d-K9s1.js.map +1 -0
- package/dist/output-DPg20dvn.js +4146 -0
- package/dist/output-DPg20dvn.js.map +1 -0
- package/dist/runtime.d.ts +56 -4
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +676 -393
- package/dist/runtime.js.map +1 -1
- package/dist/{types-CVBeQyi3.d.ts → session-options-CFudjdkU.d.ts} +62 -3
- package/dist/session-options-CFudjdkU.d.ts.map +1 -0
- package/package.json +30 -25
- package/skills/acpx/SKILL.md +211 -13
- package/dist/cli-T-Z-9x6a.js.map +0 -1
- package/dist/client-COPilhO_.d.ts.map +0 -1
- package/dist/flags-Dj-IXgo9.js +0 -163
- package/dist/flags-Dj-IXgo9.js.map +0 -1
- package/dist/flows-CF8w1rPI.js.map +0 -1
- package/dist/ipc-ABXlXzGP.js +0 -1290
- package/dist/ipc-ABXlXzGP.js.map +0 -1
- package/dist/jsonrpc-DSxh2w5R.js +0 -68
- package/dist/jsonrpc-DSxh2w5R.js.map +0 -1
- package/dist/output-DmHvT8vm.js +0 -807
- package/dist/output-DmHvT8vm.js.map +0 -1
- package/dist/perf-metrics-C2pXfxvR.js +0 -598
- package/dist/perf-metrics-C2pXfxvR.js.map +0 -1
- package/dist/prompt-turn-CVPMWdj1.js.map +0 -1
- package/dist/render-N5YwotCy.js +0 -172
- package/dist/render-N5YwotCy.js.map +0 -1
- package/dist/rolldown-runtime-CiIaOW0V.js +0 -13
- package/dist/session-CDaQe6BH.js +0 -1538
- package/dist/session-CDaQe6BH.js.map +0 -1
- package/dist/session-options-pCbHn_n7.d.ts +0 -13
- package/dist/session-options-pCbHn_n7.d.ts.map +0 -1
- package/dist/types-CVBeQyi3.d.ts.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "acpx",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "Headless CLI client for the Agent Client Protocol (ACP) — talk to coding agents from the command line",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"acp",
|
|
@@ -36,31 +36,34 @@
|
|
|
36
36
|
},
|
|
37
37
|
"scripts": {
|
|
38
38
|
"build": "tsdown src/cli.ts src/flows.ts src/runtime.ts --format esm --dts --clean --platform node --target node22 --no-fixedExtension",
|
|
39
|
+
"build:quiet": "tsdown --logLevel silent src/cli.ts src/flows.ts src/runtime.ts --format esm --dts --clean --platform node --target node22 --no-fixedExtension",
|
|
39
40
|
"build:test": "node -e \"require('node:fs').rmSync('dist-test',{recursive:true,force:true})\" && tsgo -p tsconfig.test.json",
|
|
40
|
-
"check": "pnpm run format:check && pnpm run typecheck && pnpm run lint && pnpm run build && pnpm run viewer:typecheck && pnpm run viewer:build && pnpm run test:coverage",
|
|
41
|
-
"check:docs": "pnpm run format:docs:check && pnpm run lint:docs",
|
|
41
|
+
"check": "pnpm run format:check && pnpm run typecheck && pnpm run lint && pnpm run build && pnpm run viewer:typecheck && pnpm run viewer:build && pnpm run test:coverage && pnpm run mutate",
|
|
42
|
+
"check:docs": "pnpm run format:docs:check && pnpm run lint:docs && pnpm run docs:site",
|
|
42
43
|
"conformance:run": "tsx conformance/runner/run.ts",
|
|
43
44
|
"dev": "tsx src/cli.ts",
|
|
45
|
+
"docs:site": "node scripts/build-docs-site.mjs",
|
|
44
46
|
"format": "oxfmt --write",
|
|
45
47
|
"format:check": "oxfmt --check",
|
|
46
48
|
"format:diff": "oxfmt --write && git --no-pager diff",
|
|
47
49
|
"format:docs": "git ls-files 'docs/**/*.md' 'examples/flows/**/*.md' 'README.md' | xargs oxfmt --write",
|
|
48
50
|
"format:docs:check": "git ls-files 'docs/**/*.md' 'examples/flows/**/*.md' 'README.md' | xargs oxfmt --check",
|
|
49
|
-
"lint": "oxlint --type-aware --deny-warnings src scripts examples test && pnpm run lint:persisted-key-casing && pnpm run lint:flow-schema-terms",
|
|
51
|
+
"lint": "oxlint --type-aware --deny-warnings src scripts examples test conformance && pnpm run lint:persisted-key-casing && pnpm run lint:flow-schema-terms",
|
|
50
52
|
"lint:docs": "markdownlint-cli2 README.md docs/**/*.md examples/flows/**/*.md",
|
|
51
53
|
"lint:fix": "oxlint --type-aware --fix src && pnpm run format",
|
|
52
54
|
"lint:flow-schema-terms": "tsx scripts/lint-flow-schema-terms.ts",
|
|
53
55
|
"lint:persisted-key-casing": "tsx scripts/lint-persisted-key-casing.ts",
|
|
56
|
+
"mutate": "stryker run",
|
|
54
57
|
"perf:report": "tsx scripts/perf-report.ts",
|
|
55
58
|
"precommit": "pnpm exec lint-staged && pnpm run -s build",
|
|
56
|
-
"prepack": "
|
|
59
|
+
"prepack": "tsdown --logLevel silent src/cli.ts src/flows.ts src/runtime.ts --format esm --dts --clean --platform node --target node22 --no-fixedExtension",
|
|
57
60
|
"prepare": "husky",
|
|
58
|
-
"test": "pnpm run build:test && node --test dist-test/test/*.test.js",
|
|
59
|
-
"test:coverage": "pnpm run build:test && node --
|
|
61
|
+
"test": "pnpm run build && pnpm run build:test && node --test dist-test/test/*.test.js",
|
|
62
|
+
"test:coverage": "pnpm run build && pnpm run build:test && node --test dist-test/test/*.test.js && c8 --all --check-coverage --lines 85 --branches 85 --functions 85 --statements 85 --include 'dist-test/src/flows/authoring.js' --include 'dist-test/src/flows/decision.js' --include 'dist-test/src/flows/definition.js' --include 'dist-test/src/flows/json.js' --include 'dist-test/src/flows/schema.js' --include 'dist-test/src/flows/store.js' --include 'dist-test/src/runtime/public/**/*.js' --include 'dist-test/src/runtime/engine/manager.js' --exclude 'dist-test/test/**/*.js' --exclude 'dist/**/*.js' node --test dist-test/test/flows.test.js dist-test/test/flows-store.test.js dist-test/test/runtime.test.js dist-test/test/runtime-events.test.js dist-test/test/runtime-manager.test.js dist-test/test/runtime-probe.test.js",
|
|
60
63
|
"test:live": "pnpm run build:test && node --test dist-test/test/cursor-live.integration.js",
|
|
61
64
|
"typecheck": "tsgo --noEmit",
|
|
62
65
|
"typecheck:tsc": "tsgo --noEmit",
|
|
63
|
-
"viewer": "tsx examples/flows/replay-viewer/server.ts
|
|
66
|
+
"viewer": "tsx examples/flows/replay-viewer/server.ts",
|
|
64
67
|
"viewer:build": "vite build --config examples/flows/replay-viewer/vite.config.ts",
|
|
65
68
|
"viewer:dev": "tsx examples/flows/replay-viewer/server.ts start",
|
|
66
69
|
"viewer:open": "tsx examples/flows/replay-viewer/server.ts start --open",
|
|
@@ -70,36 +73,38 @@
|
|
|
70
73
|
"viewer:typecheck": "tsgo -p examples/flows/replay-viewer/tsconfig.json --noEmit && tsgo -p examples/flows/replay-viewer/tsconfig.server.json --noEmit"
|
|
71
74
|
},
|
|
72
75
|
"dependencies": {
|
|
73
|
-
"@agentclientprotocol/sdk": "^0.
|
|
76
|
+
"@agentclientprotocol/sdk": "^0.22.1",
|
|
74
77
|
"commander": "^14.0.3",
|
|
75
78
|
"skillflag": "^0.1.4",
|
|
76
|
-
"tsx": "^4.
|
|
77
|
-
"zod": "^4.4.
|
|
79
|
+
"tsx": "^4.22.0",
|
|
80
|
+
"zod": "^4.4.3"
|
|
78
81
|
},
|
|
79
82
|
"devDependencies": {
|
|
80
|
-
"@
|
|
83
|
+
"@stryker-mutator/core": "^9.6.1",
|
|
84
|
+
"@types/node": "^25.9.0",
|
|
81
85
|
"@types/react": "^19.2.14",
|
|
82
86
|
"@types/react-dom": "^19.2.3",
|
|
83
87
|
"@types/react-test-renderer": "^19.1.0",
|
|
84
88
|
"@types/ws": "^8.18.1",
|
|
85
|
-
"@typescript/native-preview": "7.0.0-dev.
|
|
86
|
-
"@vitejs/plugin-react": "^6.0.
|
|
89
|
+
"@typescript/native-preview": "7.0.0-dev.20260519.1",
|
|
90
|
+
"@vitejs/plugin-react": "^6.0.2",
|
|
87
91
|
"@xyflow/react": "^12.10.2",
|
|
92
|
+
"c8": "^11.0.0",
|
|
88
93
|
"elkjs": "^0.11.1",
|
|
89
94
|
"fast-json-patch": "^3.1.1",
|
|
90
95
|
"husky": "^9.1.7",
|
|
91
|
-
"lint-staged": "^
|
|
96
|
+
"lint-staged": "^17.0.5",
|
|
92
97
|
"markdownlint-cli2": "^0.22.1",
|
|
93
|
-
"oxfmt": "^0.
|
|
94
|
-
"oxlint": "^1.
|
|
95
|
-
"oxlint-tsgolint": "^0.
|
|
96
|
-
"react": "^19.2.
|
|
97
|
-
"react-dom": "^19.2.
|
|
98
|
-
"react-test-renderer": "^19.2.
|
|
99
|
-
"tsdown": "^0.
|
|
98
|
+
"oxfmt": "^0.51.0",
|
|
99
|
+
"oxlint": "^1.65.0",
|
|
100
|
+
"oxlint-tsgolint": "^0.23.0",
|
|
101
|
+
"react": "^19.2.6",
|
|
102
|
+
"react-dom": "^19.2.6",
|
|
103
|
+
"react-test-renderer": "^19.2.6",
|
|
104
|
+
"tsdown": "^0.22.0",
|
|
100
105
|
"typescript": "^6.0.3",
|
|
101
|
-
"vite": "^8.0.
|
|
102
|
-
"ws": "^8.20.
|
|
106
|
+
"vite": "^8.0.13",
|
|
107
|
+
"ws": "^8.20.1"
|
|
103
108
|
},
|
|
104
109
|
"lint-staged": {
|
|
105
110
|
"*.{js,ts}": [
|
|
@@ -111,7 +116,7 @@
|
|
|
111
116
|
]
|
|
112
117
|
},
|
|
113
118
|
"engines": {
|
|
114
|
-
"node": ">=22.
|
|
119
|
+
"node": ">=22.13.0"
|
|
115
120
|
},
|
|
116
121
|
"packageManager": "pnpm@10.33.2"
|
|
117
122
|
}
|
package/skills/acpx/SKILL.md
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: acpx
|
|
3
|
-
description: Use acpx as a headless ACP CLI for agent-to-agent communication, including prompt/exec/sessions workflows, session scoping, queueing, permissions, and
|
|
3
|
+
description: Use acpx as a headless ACP CLI for agent-to-agent communication, including prompt/exec/sessions workflows, session scoping, queueing, permissions, output formats, system-prompt overrides, and multi-agent flows authored with defineFlow/decision/decisionEdge.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# acpx
|
|
7
7
|
|
|
8
8
|
## When to use this skill
|
|
9
9
|
|
|
10
|
-
Use this skill when you need to run coding agents through `acpx`, manage persistent ACP sessions, queue prompts,
|
|
10
|
+
Use this skill when you need to run coding agents through `acpx`, manage persistent ACP sessions, queue prompts, override the Claude system prompt, prune stale sessions, consume structured agent output from scripts, or compose multi-agent workflows declaratively with `acpx/flows`.
|
|
11
11
|
|
|
12
12
|
## What acpx is
|
|
13
13
|
|
|
@@ -18,6 +18,8 @@ Core capabilities:
|
|
|
18
18
|
- Persistent multi-turn sessions per repo/cwd
|
|
19
19
|
- One-shot execution mode (`exec`)
|
|
20
20
|
- Named parallel sessions (`-s/--session`)
|
|
21
|
+
- Idempotent session creation (`sessions ensure`)
|
|
22
|
+
- Session retention controls (`sessions prune` with age filters and history cleanup)
|
|
21
23
|
- Queue-aware prompt submission with optional fire-and-forget (`--no-wait`)
|
|
22
24
|
- Cooperative cancel command (`cancel`) for in-flight turns
|
|
23
25
|
- Graceful cancellation via ACP `session/cancel` on interrupt
|
|
@@ -31,7 +33,10 @@ Core capabilities:
|
|
|
31
33
|
- Stable ACP `authenticate` handshake via env/config credentials
|
|
32
34
|
- Structured streaming output (`text`, `json`, `quiet`) with optional `--suppress-reads`
|
|
33
35
|
- Built-in agent registry plus raw `--agent` escape hatch
|
|
34
|
-
-
|
|
36
|
+
- Claude system prompt override via `--system-prompt` / `--append-system-prompt`
|
|
37
|
+
- Optional terminal capability disable via `--no-terminal` for review-only flows
|
|
38
|
+
- Tool whitelist (`--allowed-tools`), turn cap (`--max-turns`), retry on transient failures (`--prompt-retries`)
|
|
39
|
+
- Multi-agent flows via `acpx flow run` and the `acpx/flows` authoring API (`defineFlow`, `decision`, `decisionEdge`, `acp`, `action`, `compute`, `checkpoint`)
|
|
35
40
|
|
|
36
41
|
## Install
|
|
37
42
|
|
|
@@ -53,8 +58,9 @@ acpx [global_options] cancel [-s <name>]
|
|
|
53
58
|
acpx [global_options] set-mode <mode> [-s <name>]
|
|
54
59
|
acpx [global_options] set <key> <value> [-s <name>]
|
|
55
60
|
acpx [global_options] status [-s <name>]
|
|
56
|
-
acpx [global_options] sessions [list | new [--name <name>] | close [name] | show [name] | history [name] [--limit <count>]]
|
|
61
|
+
acpx [global_options] sessions [list | new [--name <name>] | ensure [--name <name>] | close [name] | show [name] | history [name] [--limit <count>] | prune [--dry-run] [--before <date> | --older-than <days>] [--include-history]]
|
|
57
62
|
acpx [global_options] config [show | init]
|
|
63
|
+
acpx [global_options] flow run <file> [--input-json '<json>' | --input-file <path>] [--default-agent <name>]
|
|
58
64
|
|
|
59
65
|
acpx [global_options] <agent> [prompt_options] [prompt_text...]
|
|
60
66
|
acpx [global_options] <agent> prompt [prompt_options] [prompt_text...]
|
|
@@ -63,7 +69,7 @@ acpx [global_options] <agent> cancel [-s <name>]
|
|
|
63
69
|
acpx [global_options] <agent> set-mode <mode> [-s <name>]
|
|
64
70
|
acpx [global_options] <agent> set <key> <value> [-s <name>]
|
|
65
71
|
acpx [global_options] <agent> status [-s <name>]
|
|
66
|
-
acpx [global_options] <agent> sessions [list | new [--name <name>] | close [name] | show [name] | history [name] [--limit <count>]]
|
|
72
|
+
acpx [global_options] <agent> sessions [list | new [--name <name>] | ensure [--name <name>] | close [name] | show [name] | history [name] [--limit <count>] | prune [--dry-run] [--before <date> | --older-than <days>] [--include-history]]
|
|
67
73
|
```
|
|
68
74
|
|
|
69
75
|
If prompt text is omitted and stdin is piped, `acpx` reads prompt text from stdin.
|
|
@@ -74,7 +80,7 @@ Friendly agent names resolve to commands:
|
|
|
74
80
|
|
|
75
81
|
- `pi` -> `npx pi-acp`
|
|
76
82
|
- `openclaw` -> `openclaw acp`
|
|
77
|
-
- `codex` -> `npx @
|
|
83
|
+
- `codex` -> `npx -y @agentclientprotocol/codex-acp`
|
|
78
84
|
- `claude` -> `npx -y @agentclientprotocol/claude-agent-acp` (ACPX-owned package range)
|
|
79
85
|
- `gemini` -> `gemini --acp`
|
|
80
86
|
- `cursor` -> `cursor-agent acp`
|
|
@@ -145,7 +151,7 @@ Behavior:
|
|
|
145
151
|
```bash
|
|
146
152
|
acpx codex cancel
|
|
147
153
|
acpx codex set-mode auto
|
|
148
|
-
acpx codex set
|
|
154
|
+
acpx codex set model gpt-5.2[high]
|
|
149
155
|
acpx codex set model gpt-5.4
|
|
150
156
|
```
|
|
151
157
|
|
|
@@ -155,7 +161,7 @@ Behavior:
|
|
|
155
161
|
- `set-mode`: calls ACP `session/set_mode`.
|
|
156
162
|
- `set-mode` mode ids are adapter-defined; unsupported values are rejected by the adapter (often `Invalid params`).
|
|
157
163
|
- `set`: calls ACP `session/set_config_option`.
|
|
158
|
-
- For codex,
|
|
164
|
+
- For codex, reasoning effort is selected through advertised ACP model ids when the adapter reports model variants.
|
|
159
165
|
- `--model <id>`: Claude-compatible adapters may consume session creation metadata; other agents must advertise ACP models and support `session/set_model`, otherwise `acpx` fails clearly instead of silently falling back.
|
|
160
166
|
- `set model <id>`: calls `session/set_model`. This is the generic ACP method for mid-session model switching.
|
|
161
167
|
- `set-mode`/`set` route through queue-owner IPC when active, otherwise reconnect directly.
|
|
@@ -165,32 +171,51 @@ Behavior:
|
|
|
165
171
|
```bash
|
|
166
172
|
acpx sessions
|
|
167
173
|
acpx sessions list
|
|
174
|
+
acpx sessions list --filter-cwd .
|
|
175
|
+
acpx sessions list --cursor <cursor>
|
|
176
|
+
acpx sessions list --local
|
|
168
177
|
acpx sessions new
|
|
169
178
|
acpx sessions new --name backend
|
|
179
|
+
acpx sessions ensure
|
|
180
|
+
acpx sessions ensure --name backend
|
|
170
181
|
acpx sessions close
|
|
171
182
|
acpx sessions close backend
|
|
172
183
|
acpx sessions show
|
|
173
184
|
acpx sessions history --limit 20
|
|
185
|
+
acpx sessions prune --dry-run --older-than 7
|
|
186
|
+
acpx sessions prune --older-than 30 --include-history
|
|
174
187
|
acpx status
|
|
175
188
|
|
|
176
189
|
acpx codex sessions
|
|
177
190
|
acpx codex sessions new --name backend
|
|
191
|
+
acpx codex sessions ensure --name backend
|
|
178
192
|
acpx codex sessions close backend
|
|
179
193
|
acpx codex sessions show backend
|
|
180
194
|
acpx codex sessions history backend --limit 20
|
|
195
|
+
acpx codex sessions prune --before 2026-04-01 --include-history
|
|
181
196
|
acpx codex status
|
|
182
197
|
```
|
|
183
198
|
|
|
184
199
|
Behavior:
|
|
185
200
|
|
|
186
201
|
- `sessions` and `sessions list` are equivalent
|
|
202
|
+
- `sessions list` uses ACP `session/list` when the agent advertises it; JSON
|
|
203
|
+
includes agent `SessionInfo`, `_meta`, and `nextCursor`
|
|
204
|
+
- `sessions list --filter-cwd <dir>` applies the ACP cwd filter, and
|
|
205
|
+
`--cursor <cursor>` requests a specific page
|
|
206
|
+
- `sessions list --local` reads saved acpx records instead
|
|
187
207
|
- `new` creates a fresh session for the current `(agentCommand, cwd, optional name)` scope
|
|
188
208
|
- `new --name <name>` targets a named session scope
|
|
189
209
|
- when `new` replaces an existing open session in that scope, the old one is soft-closed
|
|
210
|
+
- `ensure` returns the nearest matching active session for the scope, or creates one when none is open. Idempotent — safe to call before every prompt in scripts.
|
|
190
211
|
- `close` targets current cwd default session
|
|
191
212
|
- `close <name>` targets current cwd named session
|
|
192
213
|
- `show [name]` prints stored metadata for that scoped session
|
|
193
214
|
- `history [name]` prints stored turn history previews (default 20, use `--limit`)
|
|
215
|
+
- `prune` deletes closed session records to reclaim disk space
|
|
216
|
+
- `--dry-run` previews what would be deleted without touching disk
|
|
217
|
+
- `--older-than <days>` and `--before <date>` filter by close time, falling back to last-used time when a record was never explicitly closed
|
|
218
|
+
- `--include-history` also removes per-session event stream files (otherwise only the JSON record is removed)
|
|
194
219
|
|
|
195
220
|
## Global options
|
|
196
221
|
|
|
@@ -199,15 +224,55 @@ Behavior:
|
|
|
199
224
|
- `--approve-all`: auto-approve all permission requests
|
|
200
225
|
- `--approve-reads`: auto-approve reads/searches, prompt for writes (default mode)
|
|
201
226
|
- `--deny-all`: deny all permission requests
|
|
227
|
+
- `--non-interactive-permissions <policy>`: when prompting is unavailable, choose `deny` or `fail`
|
|
228
|
+
- `--permission-policy <json-or-file>` / `--policy`: per-tool ACP permission rules (`autoApprove`, `autoDeny`, `escalate`, `defaultAction`)
|
|
202
229
|
- `--format <fmt>`: output format (`text`, `json`, `quiet`)
|
|
230
|
+
- `--json-strict`: strict JSON mode; requires `--format json` and suppresses non-JSON stderr output
|
|
203
231
|
- `--suppress-reads`: suppress raw read-file contents while preserving the selected format
|
|
204
232
|
- `--timeout <seconds>`: max wait time (positive number)
|
|
205
233
|
- `--ttl <seconds>`: queue owner idle TTL before shutdown (default `300`, `0` disables TTL)
|
|
206
234
|
- `--model <id>`: request an agent model during session creation; non-Claude agents must advertise ACP models and support `session/set_model`
|
|
235
|
+
- `--system-prompt <text>`: replace the agent system prompt. Forwarded to claude-agent-acp via ACP `_meta.systemPrompt`; persisted in `session_options.system_prompt` so reuse keeps the override. Other agents ignore the field.
|
|
236
|
+
- `--append-system-prompt <text>`: append text to the agent system prompt. Forwarded to claude-agent-acp via ACP `_meta.systemPrompt.append`; same persistence rules as `--system-prompt`.
|
|
237
|
+
- `--allowed-tools <list>`: comma-separated tool whitelist (use `""` for no tools)
|
|
238
|
+
- `--max-turns <count>`: cap session turn count
|
|
239
|
+
- `--prompt-retries <count>`: retry failed prompt turns on transient errors (default `0`)
|
|
240
|
+
- `--no-terminal`: do not advertise the ACP terminal capability — useful for review-only or sandboxed agent invocations
|
|
207
241
|
- `--verbose`: verbose ACP/debug logs to stderr
|
|
208
242
|
|
|
209
243
|
Permission flags are mutually exclusive.
|
|
210
244
|
|
|
245
|
+
## System prompt override (Claude)
|
|
246
|
+
|
|
247
|
+
`--system-prompt` and `--append-system-prompt` let you specialize a Claude session without leaving lingering one-off state, while still benefiting from persistent session reuse.
|
|
248
|
+
|
|
249
|
+
```bash
|
|
250
|
+
# Replace the system prompt for a named session, persisted across reuse
|
|
251
|
+
acpx --system-prompt "You are a code reviewer who challenges every implicit assumption." claude -s review
|
|
252
|
+
|
|
253
|
+
# Append a guideline on top of the default system prompt
|
|
254
|
+
acpx --append-system-prompt "Always explain trade-offs before recommending a fix." claude -s impl
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
The override is forwarded via ACP `_meta.systemPrompt` (or `_meta.systemPrompt.append`) on `session/new` and stored in `session_options.system_prompt`. Subsequent `prompt`/`ensure` calls in the same scope keep the override unless you explicitly create a new session. Non-Claude adapters ignore the field, so the same flag is safe inside cross-agent scripts.
|
|
258
|
+
|
|
259
|
+
## Sessions cleanup
|
|
260
|
+
|
|
261
|
+
Closed session records accumulate on disk by default. Use `sessions prune` to enforce retention:
|
|
262
|
+
|
|
263
|
+
```bash
|
|
264
|
+
# Preview what would be deleted (no writes)
|
|
265
|
+
acpx codex sessions prune --dry-run --older-than 7
|
|
266
|
+
|
|
267
|
+
# Remove records closed more than 30 days ago, including their event-stream files
|
|
268
|
+
acpx codex sessions prune --older-than 30 --include-history
|
|
269
|
+
|
|
270
|
+
# Remove everything closed before a date
|
|
271
|
+
acpx codex sessions prune --before 2026-04-01
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
Without `--include-history`, only the lightweight JSON record is removed; event-stream files are preserved for audit. With it, the per-session event log is also deleted to reclaim disk space.
|
|
275
|
+
|
|
211
276
|
## Config files
|
|
212
277
|
|
|
213
278
|
Config files are merged in this order (later wins):
|
|
@@ -219,6 +284,7 @@ Supported keys:
|
|
|
219
284
|
|
|
220
285
|
- `defaultAgent`
|
|
221
286
|
- `defaultPermissions` (`approve-all`, `approve-reads`, `deny-all`)
|
|
287
|
+
- `nonInteractivePermissions` (`deny`, `fail`)
|
|
222
288
|
- `ttl` (seconds)
|
|
223
289
|
- `timeout` (seconds or `null`)
|
|
224
290
|
- `format` (`text`, `json`, `quiet`)
|
|
@@ -245,7 +311,7 @@ Persistence:
|
|
|
245
311
|
- Session records are stored in `~/.acpx/sessions/*.json`.
|
|
246
312
|
- `-s/--session` creates parallel named conversations in the same repo.
|
|
247
313
|
- Changing `--cwd` changes scope and therefore session lookup.
|
|
248
|
-
- closed sessions are retained on disk with `closed: true` and `closedAt
|
|
314
|
+
- closed sessions are retained on disk with `closed: true` and `closedAt` until pruned.
|
|
249
315
|
- auto-resume by scope skips closed sessions.
|
|
250
316
|
|
|
251
317
|
Resume behavior:
|
|
@@ -282,6 +348,7 @@ Use `--format <fmt>`:
|
|
|
282
348
|
- `json`: NDJSON event stream (good for automation)
|
|
283
349
|
- `quiet`: final assistant text only
|
|
284
350
|
- `--suppress-reads`: replace raw read-file contents with `[read output suppressed]` in `text` and `json` output
|
|
351
|
+
- `--json-strict`: pair with `--format json` to suppress non-JSON stderr noise (logs, banners) for downstream consumers
|
|
285
352
|
|
|
286
353
|
Example automation:
|
|
287
354
|
|
|
@@ -295,9 +362,120 @@ acpx --format json codex exec 'review changed files' \
|
|
|
295
362
|
- `--approve-all`: no interactive permission prompts
|
|
296
363
|
- `--approve-reads` (default): approve reads/searches, prompt for writes
|
|
297
364
|
- `--deny-all`: deny all permission requests
|
|
365
|
+
- `--non-interactive-permissions <deny|fail>`: chosen behavior when no TTY is available to prompt
|
|
366
|
+
- `--policy <json-or-file>`: match ACP permission requests by tool kind/title; non-interactive escalations add ACP response metadata
|
|
298
367
|
|
|
299
368
|
If every permission request is denied/cancelled and none approved, `acpx` exits with permission-denied status.
|
|
300
369
|
|
|
370
|
+
## Flows (multi-agent workflows)
|
|
371
|
+
|
|
372
|
+
Flows let you declare a multi-agent workflow as a graph of typed nodes connected by edges, executed by the `acpx` runtime. The runtime owns persistence, retries, timeouts, and routing — the flow file declares the shape, not the engine.
|
|
373
|
+
|
|
374
|
+
### Run a flow
|
|
375
|
+
|
|
376
|
+
```bash
|
|
377
|
+
acpx flow run ./my-flow.flow.ts --input-file ./flow-input.json
|
|
378
|
+
acpx flow run ./my-flow.flow.ts --input-json '{"task":"FIX: add a regression test"}'
|
|
379
|
+
acpx --approve-all flow run examples/flows/pr-triage/pr-triage.flow.ts \
|
|
380
|
+
--input-json '{"repo":"openclaw/acpx","prNumber":150}'
|
|
381
|
+
acpx flow run ./my-flow.flow.ts --default-agent claude
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
Run artifacts persist under `~/.acpx/flows/runs/<runId>/`. Default per-step timeout is 15 minutes when `--timeout` is unset; flows that declare permission requirements fail fast before starting.
|
|
385
|
+
|
|
386
|
+
### Authoring a flow
|
|
387
|
+
|
|
388
|
+
The authoring surface lives in `acpx/flows`. The minimal example:
|
|
389
|
+
|
|
390
|
+
```ts
|
|
391
|
+
import { acp, decision, decisionEdge, defineFlow, checkpoint, extractJsonObject } from "acpx/flows";
|
|
392
|
+
|
|
393
|
+
const choices = ["bug", "feat", "doc"] as const;
|
|
394
|
+
|
|
395
|
+
export default defineFlow({
|
|
396
|
+
name: "pr-triage",
|
|
397
|
+
startAt: "classify",
|
|
398
|
+
nodes: {
|
|
399
|
+
classify: decision({
|
|
400
|
+
choices,
|
|
401
|
+
question: ({ input }) =>
|
|
402
|
+
`Classify the PR description below. Reply with one of: ${choices.join(", ")}.\n\n${input.description}`,
|
|
403
|
+
}),
|
|
404
|
+
bug_lane: acp({
|
|
405
|
+
prompt: ({ outputs }) =>
|
|
406
|
+
`The PR is a bug. Write a regression test that reproduces it.\n\nDecision context: ${JSON.stringify(outputs.classify)}`,
|
|
407
|
+
parse: (text) => extractJsonObject(text),
|
|
408
|
+
}),
|
|
409
|
+
feat_lane: acp({
|
|
410
|
+
prompt: () => "List acceptance criteria for the feature, one bullet per criterion.",
|
|
411
|
+
}),
|
|
412
|
+
doc_lane: checkpoint({
|
|
413
|
+
summary: "doc change — needs human review",
|
|
414
|
+
run: ({ outputs }) => ({ route: "doc", note: outputs.classify }),
|
|
415
|
+
}),
|
|
416
|
+
},
|
|
417
|
+
edges: [
|
|
418
|
+
decisionEdge({
|
|
419
|
+
from: "classify",
|
|
420
|
+
choices,
|
|
421
|
+
cases: {
|
|
422
|
+
bug: "bug_lane",
|
|
423
|
+
feat: "feat_lane",
|
|
424
|
+
doc: "doc_lane",
|
|
425
|
+
},
|
|
426
|
+
}),
|
|
427
|
+
],
|
|
428
|
+
});
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
### Node types
|
|
432
|
+
|
|
433
|
+
| Type | Purpose |
|
|
434
|
+
| --------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
435
|
+
| `acp({ prompt, parse?, agent?, cwd? })` | Model-driven step. The `prompt` builder receives `{ input, outputs }`. Optional `parse` coerces the raw text (e.g., `extractJsonObject`). |
|
|
436
|
+
| `decision({ choices, question })` | Constrained-choice LLM step. `choices` is a `readonly` tuple; the runtime validates the model's reply against it and TypeScript infers the union from `choices`. |
|
|
437
|
+
| `action(...)` | Runtime-supervised deterministic operation: shell, GitHub API, test execution, comment posting. |
|
|
438
|
+
| `compute(...)` | Pure local data transform: normalization, routing key derivation, signal reduction. |
|
|
439
|
+
| `checkpoint({ summary, run })` | Pause point for human or external trigger. `run` returns the outcome to record while paused. |
|
|
440
|
+
|
|
441
|
+
### Edge shapes
|
|
442
|
+
|
|
443
|
+
```ts
|
|
444
|
+
// Linear edge
|
|
445
|
+
{ from: "node", to: "next" }
|
|
446
|
+
|
|
447
|
+
// JSONPath switch — non-decision routing
|
|
448
|
+
{
|
|
449
|
+
from: "node",
|
|
450
|
+
switch: {
|
|
451
|
+
on: "$.route",
|
|
452
|
+
cases: { "value-a": "branch_a", "value-b": "branch_b" },
|
|
453
|
+
},
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
// Decision edge — exhaustive at compile time
|
|
457
|
+
decisionEdge({
|
|
458
|
+
from: "classify",
|
|
459
|
+
choices, // same readonly tuple as decision()
|
|
460
|
+
cases: { // every choice must map to a node id
|
|
461
|
+
bug: "bug_lane",
|
|
462
|
+
feat: "feat_lane",
|
|
463
|
+
doc: "doc_lane",
|
|
464
|
+
},
|
|
465
|
+
})
|
|
466
|
+
```
|
|
467
|
+
|
|
468
|
+
If a `decisionEdge` omits a case from `choices`, the TypeScript compiler refuses to compile — so a flow can't ship with a forgotten branch when new choices are added.
|
|
469
|
+
|
|
470
|
+
### Why use flows
|
|
471
|
+
|
|
472
|
+
- **Cross-vendor by construction**: classify with `codex`, write code with `claude`, summarize with `gemini` — same flow file, no glue.
|
|
473
|
+
- **Persistence and replay**: every run streams events to disk, replayable via the flow viewer under `~/.acpx/flows/runs/`.
|
|
474
|
+
- **Permission preflight**: flows declaring permission requirements fail before any agent starts, instead of mid-run.
|
|
475
|
+
- **Typed routing**: the LLM is constrained to a literal union, the compiler verifies exhaustivity, the runtime validates the reply.
|
|
476
|
+
|
|
477
|
+
See `examples/flows/` in the repo for working samples (`branch.flow.ts`, `pr-triage/`, `two-turn.flow.ts`, `shell.flow.ts`, `workdir.flow.ts`).
|
|
478
|
+
|
|
301
479
|
## Practical workflows
|
|
302
480
|
|
|
303
481
|
Persistent repo assistant:
|
|
@@ -314,6 +492,20 @@ acpx codex -s backend 'fix API pagination bug'
|
|
|
314
492
|
acpx codex -s docs 'draft changelog entry for release'
|
|
315
493
|
```
|
|
316
494
|
|
|
495
|
+
Specialized Claude reviewer that survives session reuse:
|
|
496
|
+
|
|
497
|
+
```bash
|
|
498
|
+
acpx --system-prompt "You are a reviewer who refuses to approve untested changes." claude -s reviewer
|
|
499
|
+
acpx claude -s reviewer 'review the diff in src/auth/'
|
|
500
|
+
```
|
|
501
|
+
|
|
502
|
+
Idempotent session bootstrap (safe to call before every prompt in scripts):
|
|
503
|
+
|
|
504
|
+
```bash
|
|
505
|
+
acpx codex sessions ensure -s ci
|
|
506
|
+
acpx codex -s ci 'run the smoke suite and report failures'
|
|
507
|
+
```
|
|
508
|
+
|
|
317
509
|
Queue follow-up without waiting:
|
|
318
510
|
|
|
319
511
|
```bash
|
|
@@ -330,7 +522,7 @@ acpx --format quiet exec 'summarize repo purpose in 3 lines'
|
|
|
330
522
|
Machine-readable output for orchestration:
|
|
331
523
|
|
|
332
524
|
```bash
|
|
333
|
-
acpx --format json codex 'review current branch changes' > events.ndjson
|
|
525
|
+
acpx --format json --json-strict codex 'review current branch changes' > events.ndjson
|
|
334
526
|
```
|
|
335
527
|
|
|
336
528
|
Raw custom adapter command:
|
|
@@ -339,11 +531,17 @@ Raw custom adapter command:
|
|
|
339
531
|
acpx --agent './bin/custom-acp-server --profile ci' 'run validation checks'
|
|
340
532
|
```
|
|
341
533
|
|
|
342
|
-
|
|
534
|
+
Periodic cleanup:
|
|
535
|
+
|
|
536
|
+
```bash
|
|
537
|
+
acpx codex sessions prune --dry-run --older-than 14
|
|
538
|
+
acpx codex sessions prune --older-than 30 --include-history
|
|
539
|
+
```
|
|
540
|
+
|
|
541
|
+
Multi-agent triage flow:
|
|
343
542
|
|
|
344
543
|
```bash
|
|
345
|
-
acpx flow run ./
|
|
346
|
-
acpx flow run examples/flows/branch.flow.ts --input-json '{"task":"FIX: add a regression test"}'
|
|
544
|
+
acpx --approve-all flow run ./pr-triage.flow.ts --input-json '{"prNumber": 842}'
|
|
347
545
|
```
|
|
348
546
|
|
|
349
547
|
Repo-scoped review with permissive mode:
|
package/dist/cli-T-Z-9x6a.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli-T-Z-9x6a.js","names":[],"sources":["../src/flows/cli.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\nimport { InvalidArgumentError, type Command } from \"commander\";\nimport type { ResolvedAcpxConfig } from \"../cli/config.js\";\nimport {\n hasExplicitPermissionModeFlag,\n resolveAgentInvocation,\n resolveGlobalFlags,\n resolveOutputPolicy,\n resolvePermissionMode,\n type GlobalFlags,\n} from \"../cli/flags.js\";\nimport { type FlowDefinition, FlowRunner } from \"../flows.js\";\nimport { permissionModeSatisfies } from \"../permissions.js\";\nimport type { PermissionMode } from \"../types.js\";\nimport { isDefinedFlow } from \"./authoring.js\";\nimport { validateFlowDefinition } from \"./graph.js\";\n\ntype FlowRunFlags = {\n inputJson?: string;\n inputFile?: string;\n defaultAgent?: string;\n};\n\nconst FLOW_RUNTIME_SPECIFIER = \"acpx/flows\";\nconst TEXT_MODULE_EXTENSIONS = new Set([\".js\", \".mjs\", \".cjs\", \".ts\", \".tsx\", \".mts\", \".cts\"]);\n\nexport async function handleFlowRun(\n flowFile: string,\n flags: FlowRunFlags,\n command: Command,\n config: ResolvedAcpxConfig,\n): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const permissionMode = resolvePermissionMode(globalFlags, config.defaultPermissions);\n const outputPolicy = resolveOutputPolicy(globalFlags.format, globalFlags.jsonStrict === true);\n const input = await readFlowInput(flags);\n const flowPath = path.resolve(flowFile);\n const flow = await loadFlowModule(flowPath);\n assertFlowPermissionRequirements(flow, permissionMode, globalFlags);\n\n const runner = new FlowRunner({\n resolveAgent: (profile?: string) => {\n return resolveAgentInvocation(profile ?? flags.defaultAgent, globalFlags, config);\n },\n permissionMode,\n mcpServers: config.mcpServers,\n nonInteractivePermissions: globalFlags.nonInteractivePermissions,\n authCredentials: config.auth,\n authPolicy: globalFlags.authPolicy,\n timeoutMs: globalFlags.timeout,\n ttlMs: globalFlags.ttl,\n verbose: globalFlags.verbose,\n suppressSdkConsoleErrors: outputPolicy.suppressSdkConsoleErrors,\n sessionOptions: {\n model: globalFlags.model,\n allowedTools: globalFlags.allowedTools,\n maxTurns: globalFlags.maxTurns,\n },\n });\n\n const result = await runner.run(flow, input, {\n flowPath,\n });\n\n printFlowRunResult(result, globalFlags);\n}\n\nfunction assertFlowPermissionRequirements(\n flow: FlowDefinition,\n permissionMode: PermissionMode,\n globalFlags: GlobalFlags,\n): void {\n const permissions = flow.permissions;\n if (!permissions) {\n return;\n }\n\n if (permissions.requireExplicitGrant && !hasExplicitPermissionModeFlag(globalFlags)) {\n throw new InvalidArgumentError(\n buildFlowPermissionFailureMessage(flow, permissions.requiredMode, permissions.reason, true),\n );\n }\n\n if (!permissionModeSatisfies(permissionMode, permissions.requiredMode)) {\n throw new InvalidArgumentError(\n buildFlowPermissionFailureMessage(flow, permissions.requiredMode, permissions.reason, false),\n );\n }\n}\n\nfunction buildFlowPermissionFailureMessage(\n flow: FlowDefinition,\n requiredMode: PermissionMode,\n reason?: string,\n explicit = false,\n): string {\n return [\n explicit\n ? `Flow \"${flow.name}\" requires an explicit ${requiredMode} grant.`\n : `Flow \"${flow.name}\" requires permission mode ${requiredMode}.`,\n `Rerun with --${requiredMode}.`,\n ...(reason ? [`Reason: ${reason}`] : []),\n ].join(\" \");\n}\n\nasync function readFlowInput(flags: FlowRunFlags): Promise<unknown> {\n if (flags.inputJson && flags.inputFile) {\n throw new InvalidArgumentError(\"Use only one of --input-json or --input-file\");\n }\n\n if (flags.inputJson) {\n return parseJsonInput(flags.inputJson, \"--input-json\");\n }\n\n if (flags.inputFile) {\n const inputPath = path.resolve(flags.inputFile);\n const payload = await fs.readFile(inputPath, \"utf8\");\n return parseJsonInput(payload, \"--input-file\");\n }\n\n return {};\n}\n\nasync function loadFlowModule(flowPath: string): Promise<FlowDefinition> {\n const extension = path.extname(flowPath).toLowerCase();\n const prepared = await prepareFlowModuleImport(flowPath, extension);\n try {\n const module = await loadFlowRuntimeModule(prepared.flowUrl, extension);\n\n const candidate = findFlowDefinition(module);\n if (!candidate) {\n throw new Error(\n `Flow module must export default defineFlow({...}) from \"acpx/flows\": ${flowPath}`,\n );\n }\n validateFlowDefinition(candidate);\n return candidate;\n } finally {\n await prepared.cleanup?.();\n }\n}\n\nasync function prepareFlowModuleImport(\n flowPath: string,\n extension: string,\n): Promise<{\n flowUrl: string;\n cleanup?: () => Promise<void>;\n}> {\n const flowUrl = pathToFileURL(flowPath).href;\n if (!TEXT_MODULE_EXTENSIONS.has(extension)) {\n return { flowUrl };\n }\n\n const source = await fs.readFile(flowPath, \"utf8\");\n if (!source.includes(FLOW_RUNTIME_SPECIFIER)) {\n return { flowUrl };\n }\n\n const runtimeSpecifier = resolveFlowRuntimeImportSpecifier();\n const rewritten = source.replaceAll(\n /([\"'])acpx\\/flows\\1/g,\n (_match, quote: string) => `${quote}${runtimeSpecifier}${quote}`,\n );\n if (rewritten === source) {\n return { flowUrl };\n }\n\n const tempPath = path.join(path.dirname(flowPath), `.acpx-flow-load-${randomUUID()}${extension}`);\n await fs.writeFile(tempPath, rewritten, \"utf8\");\n return {\n flowUrl: pathToFileURL(tempPath).href,\n cleanup: async () => {\n await fs.rm(tempPath, { force: true });\n },\n };\n}\n\nfunction resolveFlowRuntimeImportSpecifier(): string {\n const selfPath = fileURLToPath(import.meta.url);\n\n if (selfPath.endsWith(`${path.sep}src${path.sep}flows${path.sep}cli.ts`)) {\n return new URL(\"../flows.ts\", import.meta.url).href;\n }\n if (selfPath.endsWith(`${path.sep}src${path.sep}flows${path.sep}cli.js`)) {\n return new URL(\"../flows.js\", import.meta.url).href;\n }\n return new URL(\"./flows.js\", import.meta.url).href;\n}\n\nasync function loadFlowRuntimeModule(\n flowUrl: string,\n extension: string,\n): Promise<{\n default?: unknown;\n \"module.exports\"?: unknown;\n}> {\n if (extension === \".ts\" || extension === \".tsx\" || extension === \".mts\" || extension === \".cts\") {\n const { tsImport } = (await import(\"tsx/esm/api\")) as {\n tsImport: (\n specifier: string,\n parentURL: string,\n ) => Promise<{\n default?: unknown;\n \"module.exports\"?: unknown;\n }>;\n };\n return (await tsImport(flowUrl, import.meta.url)) as {\n default?: unknown;\n \"module.exports\"?: unknown;\n };\n }\n\n return (await import(flowUrl)) as {\n default?: unknown;\n \"module.exports\"?: unknown;\n };\n}\n\nfunction findFlowDefinition(module: {\n default?: unknown;\n \"module.exports\"?: unknown;\n}): FlowDefinition | null {\n const candidates = [\n module.default,\n module[\"module.exports\"],\n getNestedDefault(module.default),\n getNestedDefault(module[\"module.exports\"]),\n ];\n\n for (const candidate of candidates) {\n if (isDefinedFlow(candidate)) {\n return candidate;\n }\n }\n\n return null;\n}\n\nfunction getNestedDefault(value: unknown): unknown {\n if (!value || typeof value !== \"object\" || !(\"default\" in value)) {\n return null;\n }\n return (value as { default?: unknown }).default ?? null;\n}\n\nfunction parseJsonInput(raw: string, label: string): unknown {\n try {\n return JSON.parse(raw);\n } catch (error) {\n throw new InvalidArgumentError(\n `${label} must contain valid JSON: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n}\n\nfunction printFlowRunResult(\n result: Awaited<ReturnType<FlowRunner[\"run\"]>>,\n globalFlags: GlobalFlags,\n): void {\n const payload = {\n action: \"flow_run_result\",\n runId: result.state.runId,\n flowName: result.state.flowName,\n runTitle: result.state.runTitle,\n flowPath: result.state.flowPath,\n status: result.state.status,\n currentNode: result.state.currentNode,\n currentNodeType: result.state.currentNodeType,\n currentNodeStartedAt: result.state.currentNodeStartedAt,\n lastHeartbeatAt: result.state.lastHeartbeatAt,\n statusDetail: result.state.statusDetail,\n waitingOn: result.state.waitingOn,\n runDir: result.runDir,\n outputs: result.state.outputs,\n sessionBindings: result.state.sessionBindings,\n };\n\n if (globalFlags.format === \"json\") {\n process.stdout.write(`${JSON.stringify(payload)}\\n`);\n return;\n }\n\n if (globalFlags.format === \"quiet\") {\n process.stdout.write(`${result.state.runId}\\n`);\n return;\n }\n\n process.stdout.write(`runId: ${payload.runId}\\n`);\n process.stdout.write(`flow: ${payload.flowName}\\n`);\n if (payload.runTitle) {\n process.stdout.write(`title: ${payload.runTitle}\\n`);\n }\n process.stdout.write(`status: ${payload.status}\\n`);\n process.stdout.write(`runDir: ${payload.runDir}\\n`);\n if (payload.currentNode) {\n process.stdout.write(`currentNode: ${payload.currentNode}\\n`);\n }\n if (payload.statusDetail) {\n process.stdout.write(`statusDetail: ${payload.statusDetail}\\n`);\n }\n if (payload.waitingOn) {\n process.stdout.write(`waitingOn: ${payload.waitingOn}\\n`);\n }\n process.stdout.write(`${JSON.stringify(payload.outputs, null, 2)}\\n`);\n}\n"],"mappings":";;;;;;;;;AA0BA,MAAM,yBAAyB;AAC/B,MAAM,yBAAyB,IAAI,IAAI;CAAC;CAAO;CAAQ;CAAQ;CAAO;CAAQ;CAAQ;CAAO,CAAC;AAE9F,eAAsB,cACpB,UACA,OACA,SACA,QACe;CACf,MAAM,cAAc,mBAAmB,SAAS,OAAO;CACvD,MAAM,iBAAiB,sBAAsB,aAAa,OAAO,mBAAmB;CACpF,MAAM,eAAe,oBAAoB,YAAY,QAAQ,YAAY,eAAe,KAAK;CAC7F,MAAM,QAAQ,MAAM,cAAc,MAAM;CACxC,MAAM,WAAW,KAAK,QAAQ,SAAS;CACvC,MAAM,OAAO,MAAM,eAAe,SAAS;AAC3C,kCAAiC,MAAM,gBAAgB,YAAY;AA0BnE,oBAAmB,MAJE,IApBF,WAAW;EAC5B,eAAe,YAAqB;AAClC,UAAO,uBAAuB,WAAW,MAAM,cAAc,aAAa,OAAO;;EAEnF;EACA,YAAY,OAAO;EACnB,2BAA2B,YAAY;EACvC,iBAAiB,OAAO;EACxB,YAAY,YAAY;EACxB,WAAW,YAAY;EACvB,OAAO,YAAY;EACnB,SAAS,YAAY;EACrB,0BAA0B,aAAa;EACvC,gBAAgB;GACd,OAAO,YAAY;GACnB,cAAc,YAAY;GAC1B,UAAU,YAAY;GACvB;EACF,CAE0B,CAAC,IAAI,MAAM,OAAO,EAC3C,UACD,CAAC,EAEyB,YAAY;;AAGzC,SAAS,iCACP,MACA,gBACA,aACM;CACN,MAAM,cAAc,KAAK;AACzB,KAAI,CAAC,YACH;AAGF,KAAI,YAAY,wBAAwB,CAAC,8BAA8B,YAAY,CACjF,OAAM,IAAI,qBACR,kCAAkC,MAAM,YAAY,cAAc,YAAY,QAAQ,KAAK,CAC5F;AAGH,KAAI,CAAC,wBAAwB,gBAAgB,YAAY,aAAa,CACpE,OAAM,IAAI,qBACR,kCAAkC,MAAM,YAAY,cAAc,YAAY,QAAQ,MAAM,CAC7F;;AAIL,SAAS,kCACP,MACA,cACA,QACA,WAAW,OACH;AACR,QAAO;EACL,WACI,SAAS,KAAK,KAAK,yBAAyB,aAAa,WACzD,SAAS,KAAK,KAAK,6BAA6B,aAAa;EACjE,gBAAgB,aAAa;EAC7B,GAAI,SAAS,CAAC,WAAW,SAAS,GAAG,EAAE;EACxC,CAAC,KAAK,IAAI;;AAGb,eAAe,cAAc,OAAuC;AAClE,KAAI,MAAM,aAAa,MAAM,UAC3B,OAAM,IAAI,qBAAqB,+CAA+C;AAGhF,KAAI,MAAM,UACR,QAAO,eAAe,MAAM,WAAW,eAAe;AAGxD,KAAI,MAAM,WAAW;EACnB,MAAM,YAAY,KAAK,QAAQ,MAAM,UAAU;AAE/C,SAAO,eAAe,MADA,GAAG,SAAS,WAAW,OAAO,EACrB,eAAe;;AAGhD,QAAO,EAAE;;AAGX,eAAe,eAAe,UAA2C;CACvE,MAAM,YAAY,KAAK,QAAQ,SAAS,CAAC,aAAa;CACtD,MAAM,WAAW,MAAM,wBAAwB,UAAU,UAAU;AACnE,KAAI;EAGF,MAAM,YAAY,mBAAmB,MAFhB,sBAAsB,SAAS,SAAS,UAAU,CAE3B;AAC5C,MAAI,CAAC,UACH,OAAM,IAAI,MACR,wEAAwE,WACzE;AAEH,yBAAuB,UAAU;AACjC,SAAO;WACC;AACR,QAAM,SAAS,WAAW;;;AAI9B,eAAe,wBACb,UACA,WAIC;CACD,MAAM,UAAU,cAAc,SAAS,CAAC;AACxC,KAAI,CAAC,uBAAuB,IAAI,UAAU,CACxC,QAAO,EAAE,SAAS;CAGpB,MAAM,SAAS,MAAM,GAAG,SAAS,UAAU,OAAO;AAClD,KAAI,CAAC,OAAO,SAAS,uBAAuB,CAC1C,QAAO,EAAE,SAAS;CAGpB,MAAM,mBAAmB,mCAAmC;CAC5D,MAAM,YAAY,OAAO,WACvB,yBACC,QAAQ,UAAkB,GAAG,QAAQ,mBAAmB,QAC1D;AACD,KAAI,cAAc,OAChB,QAAO,EAAE,SAAS;CAGpB,MAAM,WAAW,KAAK,KAAK,KAAK,QAAQ,SAAS,EAAE,mBAAmB,YAAY,GAAG,YAAY;AACjG,OAAM,GAAG,UAAU,UAAU,WAAW,OAAO;AAC/C,QAAO;EACL,SAAS,cAAc,SAAS,CAAC;EACjC,SAAS,YAAY;AACnB,SAAM,GAAG,GAAG,UAAU,EAAE,OAAO,MAAM,CAAC;;EAEzC;;AAGH,SAAS,oCAA4C;CACnD,MAAM,WAAW,cAAc,OAAO,KAAK,IAAI;AAE/C,KAAI,SAAS,SAAS,GAAG,KAAK,IAAI,KAAK,KAAK,IAAI,OAAO,KAAK,IAAI,QAAQ,CACtE,QAAO,IAAI,IAAI,eAAe,OAAO,KAAK,IAAI,CAAC;AAEjD,KAAI,SAAS,SAAS,GAAG,KAAK,IAAI,KAAK,KAAK,IAAI,OAAO,KAAK,IAAI,QAAQ,CACtE,QAAO,IAAI,IAAI,eAAe,OAAO,KAAK,IAAI,CAAC;AAEjD,QAAO,IAAI,IAAI,cAAc,OAAO,KAAK,IAAI,CAAC;;AAGhD,eAAe,sBACb,SACA,WAIC;AACD,KAAI,cAAc,SAAS,cAAc,UAAU,cAAc,UAAU,cAAc,QAAQ;EAC/F,MAAM,EAAE,aAAc,MAAM,OAAO;AASnC,SAAQ,MAAM,SAAS,SAAS,OAAO,KAAK,IAAI;;AAMlD,QAAQ,MAAM,OAAO;;AAMvB,SAAS,mBAAmB,QAGF;CACxB,MAAM,aAAa;EACjB,OAAO;EACP,OAAO;EACP,iBAAiB,OAAO,QAAQ;EAChC,iBAAiB,OAAO,kBAAkB;EAC3C;AAED,MAAK,MAAM,aAAa,WACtB,KAAI,cAAc,UAAU,CAC1B,QAAO;AAIX,QAAO;;AAGT,SAAS,iBAAiB,OAAyB;AACjD,KAAI,CAAC,SAAS,OAAO,UAAU,YAAY,EAAE,aAAa,OACxD,QAAO;AAET,QAAQ,MAAgC,WAAW;;AAGrD,SAAS,eAAe,KAAa,OAAwB;AAC3D,KAAI;AACF,SAAO,KAAK,MAAM,IAAI;UACf,OAAO;AACd,QAAM,IAAI,qBACR,GAAG,MAAM,4BAA4B,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,GAC5F;;;AAIL,SAAS,mBACP,QACA,aACM;CACN,MAAM,UAAU;EACd,QAAQ;EACR,OAAO,OAAO,MAAM;EACpB,UAAU,OAAO,MAAM;EACvB,UAAU,OAAO,MAAM;EACvB,UAAU,OAAO,MAAM;EACvB,QAAQ,OAAO,MAAM;EACrB,aAAa,OAAO,MAAM;EAC1B,iBAAiB,OAAO,MAAM;EAC9B,sBAAsB,OAAO,MAAM;EACnC,iBAAiB,OAAO,MAAM;EAC9B,cAAc,OAAO,MAAM;EAC3B,WAAW,OAAO,MAAM;EACxB,QAAQ,OAAO;EACf,SAAS,OAAO,MAAM;EACtB,iBAAiB,OAAO,MAAM;EAC/B;AAED,KAAI,YAAY,WAAW,QAAQ;AACjC,UAAQ,OAAO,MAAM,GAAG,KAAK,UAAU,QAAQ,CAAC,IAAI;AACpD;;AAGF,KAAI,YAAY,WAAW,SAAS;AAClC,UAAQ,OAAO,MAAM,GAAG,OAAO,MAAM,MAAM,IAAI;AAC/C;;AAGF,SAAQ,OAAO,MAAM,UAAU,QAAQ,MAAM,IAAI;AACjD,SAAQ,OAAO,MAAM,SAAS,QAAQ,SAAS,IAAI;AACnD,KAAI,QAAQ,SACV,SAAQ,OAAO,MAAM,UAAU,QAAQ,SAAS,IAAI;AAEtD,SAAQ,OAAO,MAAM,WAAW,QAAQ,OAAO,IAAI;AACnD,SAAQ,OAAO,MAAM,WAAW,QAAQ,OAAO,IAAI;AACnD,KAAI,QAAQ,YACV,SAAQ,OAAO,MAAM,gBAAgB,QAAQ,YAAY,IAAI;AAE/D,KAAI,QAAQ,aACV,SAAQ,OAAO,MAAM,iBAAiB,QAAQ,aAAa,IAAI;AAEjE,KAAI,QAAQ,UACV,SAAQ,OAAO,MAAM,cAAc,QAAQ,UAAU,IAAI;AAE3D,SAAQ,OAAO,MAAM,GAAG,KAAK,UAAU,QAAQ,SAAS,MAAM,EAAE,CAAC,IAAI"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client-COPilhO_.d.ts","names":[],"sources":["../src/acp/client.ts"],"mappings":"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"}
|