acpx 0.20.0 → 0.21.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/dist/{cli-CnufHoAJ.js → cli-I6rP9FGr.js} +4 -4
- package/dist/{cli-CnufHoAJ.js.map → cli-I6rP9FGr.js.map} +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +7 -7
- package/dist/{client-R5OmZ--S.d.ts → client-BaAmQKNy.d.ts} +3 -2
- package/dist/{client-R5OmZ--S.d.ts.map → client-BaAmQKNy.d.ts.map} +1 -1
- package/dist/{flows-CTRAV28u.js → flows-7PaF7X66.js} +3 -3
- package/dist/{flows-CTRAV28u.js.map → flows-7PaF7X66.js.map} +1 -1
- package/dist/flows.d.ts +2 -2
- package/dist/flows.js +1 -1
- package/dist/{invocation-options-DE3Z_fqa.js → invocation-options-TRskRIuI.js} +12 -5
- package/dist/{invocation-options-DE3Z_fqa.js.map → invocation-options-TRskRIuI.js.map} +1 -1
- package/dist/ipc-D2BC99hf.js.map +1 -1
- package/dist/{output-B1Srnvko.js → output-CkfCaQfo.js} +2 -2
- package/dist/{output-B1Srnvko.js.map → output-CkfCaQfo.js.map} +1 -1
- package/dist/{queue-owner-runtime-Be8sr9L5.js → queue-owner-runtime-CNrWkR8J.js} +120 -21
- package/dist/queue-owner-runtime-CNrWkR8J.js.map +1 -0
- package/dist/runtime.d.ts +18 -2
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +13 -3
- package/dist/runtime.js.map +1 -1
- package/dist/{session-options-DQlqgFv2.d.ts → session-options-DVr_JUL7.d.ts} +8 -1
- package/dist/session-options-DVr_JUL7.d.ts.map +1 -0
- package/dist/{session-watch-CpYYtV62.js → session-watch-BLLknspd.js} +2 -2
- package/dist/{session-watch-CpYYtV62.js.map → session-watch-BLLknspd.js.map} +1 -1
- package/package.json +2 -2
- package/skills/acpx/SKILL.md +26 -1
- package/dist/queue-owner-runtime-Be8sr9L5.js.map +0 -1
- package/dist/session-options-DQlqgFv2.d.ts.map +0 -1
|
@@ -145,6 +145,13 @@ type AcpClientOptions = {
|
|
|
145
145
|
agentArgv?: string[];
|
|
146
146
|
/** Trusted child-only environment overlay; never persisted as session options. */
|
|
147
147
|
agentProcessEnv?: Record<string, string>;
|
|
148
|
+
/**
|
|
149
|
+
* Opt-in allowlist: agent children, probes and terminals inherit only process essentials,
|
|
150
|
+
* these parent names and `ACPX_AUTH_*` grants.
|
|
151
|
+
*/
|
|
152
|
+
agentProcessEnvAllow?: readonly string[];
|
|
153
|
+
/** Parent environment names that agent children, probes and terminals do not inherit. */
|
|
154
|
+
agentProcessEnvBlock?: readonly string[];
|
|
148
155
|
cwd: string;
|
|
149
156
|
mcpServers?: McpServer[];
|
|
150
157
|
permissionMode: PermissionMode;
|
|
@@ -348,4 +355,4 @@ type SessionAgentOptions = {
|
|
|
348
355
|
};
|
|
349
356
|
//#endregion
|
|
350
357
|
export { PermissionPolicy as C, PromptInput as E, PermissionMode as S, SessionRecord as T, AcpProcessSpawnFailure as _, AcpElicitationHandler as a, McpServer$1 as b, AcpElicitationResponse as c, AcpPermissionHandler as d, AcpPermissionRequest as f, AcpProcessLifecycle as g, AcpProcessLaunchScope as h, AcpElicitationContext as i, AcpJsonRpcMessage as l, AcpProcessLaunch as m, SystemPromptOption as n, AcpElicitationMode as o, AcpProcessExit as p, AcpClientOptions as r, AcpElicitationRequest as s, SessionAgentOptions as t, AcpPermissionDecision as u, AcpProcessStarted as v, PermissionStats as w, NonInteractivePermissionPolicy as x, AuthPolicy as y };
|
|
351
|
-
//# sourceMappingURL=session-options-
|
|
358
|
+
//# sourceMappingURL=session-options-DVr_JUL7.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-options-DVr_JUL7.d.ts","names":[],"sources":["../src/prompt-content.ts","../src/types.ts","../src/runtime/engine/session-options.ts"],"mappings":";;KAEY,cAAc;;;KCgBd;EACV;EACA,KAAK;EACL,cAAc;;KAGJ;EACN;EAAqB;;EACrB;;EACA;;EACA;;EACA;;EACA;;KAEM,wBACV,SAAS,sBACT;EAAW,QAAQ;MAChB,QAAQ;cAEA;KACD,6BAA6B;KAC7B,wBAAwB;KAExB;;EAEV,WAAW;;EAEX,QAAQ;;KAGL;EACH,QAAQ;;KAGE;EAEN;EACA,UAAU,eAAe;IACvB;EACD;IAAsB;EACtB;IAAqB;KAEhB,yBACV,SAAS,uBACT,SAAS,0BACN,QAAQ;cAiBA;KACD,yBAAyB;cAExB;KACD,qBAAqB;cAEpB;KACD,yCAAyC;cAExC;KACD,iCAAiC;KAEjC;EACV;EACA;EACA;EACA,gBAAgB;;KAGN;EACV;EACA;EACA;EACA;EACA;EACA;EACA,WAAW;EACX;EACA;EACA;EACA;;KAQU,oBAAoB;KACpB;KAyCA;EACV;EACA;EACA;EACA;;KAGU;KAUA;KAEA;EACV,QAAQ;EACR,QAAQ;EACR;EACA;EACA;;KAGU;EACV;EACA;EACA;EACA;EACA;EACA;;KAgDU,wBACR;EAAW;KACX;EAAW;EAAyB;KACpC;EAAW;EAAuB;;KAE1B,mBAAmB;EAC7B;EACA,OAAO;EACP;EACA;EACA;;KAGU,oBAAoB,mBAC9B;EACE;EACA;;KAGQ,yBAAyB,mBACnC;EACE;EACA;;KAGQ,iBAAiB,oBAC3B;EACE;EACA,QAAQ,OAAO;EACf;;;;;;;;;KAUQ;EACV,iBAAiB,QAAQ,qBAAqB;EAC9C,aAAa,SAAS,sBAAsB;EAC5C,iBAAiB,SAAS,2BAA2B;EACrD,UAAU,MAAM,mBAAmB;;KAGzB;EACV;EACA;;EAEA,kBAAkB;;;;;EAKlB;;EAEA;EACA;EACA,aAAa;EACb,gBAAgB;EAChB,4BAA4B;EAC5B,mBAAmB;EACnB,kBAAkB;EAClB,aAAa;EACb;EACA;EACA,4BAA4B;EAC5B,mBAAmB;EACnB,qBAAqB;EACrB;EACA;EACA;IACE;IACA;IACA;IACA;MAA0B;;IAC1B,MAAM;;EAER,gBAAgB,WAAW,qBAAqB,SAAS;EACzD,sBAAsB,WAAW,qBAAqB,SAAS;EAC/D,mBAAmB,cAAc;EACjC,qBAAqB,WAAW;EAChC,0BAA0B,OAAO;EACjC,sBAAsB;;cAGX;KACD;EACV;EACA;EACA;IACE;IACA;;;KAIQ;EACV;EACA;;KAGU;EAEN;;EAGA;IACE;IACA;;;EAIF,OAAO;;EAGP,OAAO;;KAGD;EACV;EACA;EACA;EACA;EACA;EACA;;KAGU;EAEN;;EAGA,OAAO;;KAGD;EACV;EACA;EACA;EACA,SAAS;EACT;;KAGU;EAEN;;EAGA;IACE;IACA;;;EAIF;;EAGA,SAAS;;KAGH;EACV;EACA,SAAS;;KAGC;EACV,SAAS;EACT,cAAc,eAAe;EAC7B;;KAGU;EAEN,MAAM;;EAGN,OAAO;;KAID;EACV;EACA;EACA;EACA;EACA;EACA;;KAGU;EACV;EACA;;KAGU;EACV;EACA;EACA;;KAYU;EACV;EACA;EACA;EACA;EACA,yBAAyB;EACzB;EACA;EACA,wBAAwB;EACxB;EACA,qBAAqB;EACrB,iBAAiB;EACjB;IACE;IACA;IACA;IACA;MAA2B;;IAC3B,MAAM;;;KAIE;EACV;EACA;EACA;EACA;;KAGU;EACV,eAAe;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU;EACV;EACA;EACA;EACA;EACA;EACA;EACA,sBAAsB,OAAO;EAC7B;EACA;EACA;EACA,oBAAoB;EACpB;EACA,UAAU;EACV;EACA,wBAAwB;EACxB,kBAAkB;EAClB,qBAAqB,eAAe;EACpC,OAAO;EACP,eAAe;;;;KC7fL;EAAgC;;KAEhC;EACV;EACA;EACA;EACA,eAAe;;;;;;;;;;EAUf,MAAM"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as JsonMessageSanitizer, t as createOutputFormatter } from "./output-
|
|
1
|
+
import { i as JsonMessageSanitizer, t as createOutputFormatter } from "./output-CkfCaQfo.js";
|
|
2
2
|
import { it as isAcpJsonRpcMessage, lt as parsePromptStopReason } from "./ipc-D2BC99hf.js";
|
|
3
3
|
import { t as watchSession } from "./watch-Db2D1eYN.js";
|
|
4
4
|
import { once } from "node:events";
|
|
@@ -73,4 +73,4 @@ async function runSessionWatch(record, options) {
|
|
|
73
73
|
//#endregion
|
|
74
74
|
export { runSessionWatch };
|
|
75
75
|
|
|
76
|
-
//# sourceMappingURL=session-watch-
|
|
76
|
+
//# sourceMappingURL=session-watch-BLLknspd.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-watch-
|
|
1
|
+
{"version":3,"file":"session-watch-BLLknspd.js","names":[],"sources":["../src/cli/session-watch.ts"],"sourcesContent":["import { once } from \"node:events\";\nimport { isAcpJsonRpcMessage, parsePromptStopReason } from \"../acp/jsonrpc.js\";\nimport type { SessionWatchEvent } from \"../session/journal.js\";\nimport { watchSession } from \"../session/watch.js\";\nimport type { OutputFormatter, OutputPolicy, SessionRecord } from \"../types.js\";\nimport { JsonMessageSanitizer } from \"./output/json-formatter.js\";\nimport { createOutputFormatter } from \"./output/output.js\";\n\nfunction watchRenderer(policy: OutputPolicy): (event: SessionWatchEvent) => string[] {\n const chunks: string[] = [];\n const stdout = {\n write: (chunk: string) => {\n chunks.push(chunk);\n },\n };\n let sanitizer = new JsonMessageSanitizer(policy.suppressReads, true);\n let formatter = createOutputFormatter(policy.format, { stdout });\n return (event) => {\n chunks.length = 0;\n if (event.type === \"turn_started\") {\n sanitizer = new JsonMessageSanitizer(policy.suppressReads, true);\n formatter = createOutputFormatter(policy.format, { stdout });\n }\n if (policy.format === \"json\") {\n chunks.push(\n JSON.stringify(\n event.type === \"message\"\n ? { ...event, message: sanitizer.sanitize(event.message) }\n : event,\n ) + \"\\n\",\n );\n } else if (event.type === \"message\") {\n renderWatchMessage(event, sanitizer, formatter, policy.format === \"quiet\");\n } else {\n if (event.type === \"turn_result\") {\n formatter.flush();\n }\n if (policy.format !== \"quiet\") {\n chunks.push(watchLifecycleLine(event));\n }\n }\n return chunks;\n };\n}\n\nfunction renderWatchMessage(\n event: Extract<SessionWatchEvent, { type: \"message\" }>,\n sanitizer: JsonMessageSanitizer,\n formatter: OutputFormatter,\n quiet: boolean,\n): void {\n const message = sanitizer.sanitize(event.message);\n if (!isAcpJsonRpcMessage(message)) {\n throw new Error(\"Invalid sanitized session message\");\n }\n if (quiet || parsePromptStopReason(message) === undefined) {\n formatter.onAcpMessage(message);\n }\n}\n\nfunction watchLifecycleLine(event: Exclude<SessionWatchEvent, { type: \"message\" }>): string {\n if (event.type === \"turn_started\") {\n return `\\n[${event.requestId}] started cursor=${event.cursor}\\n`;\n }\n const detail =\n event.result.status === \"failed\" ? event.result.error.message : event.result.stopReason;\n return `\\n[${event.requestId}] ${event.result.status}${detail ? `: ${detail}` : \"\"} cursor=${event.cursor}\\n`;\n}\n\nexport async function runSessionWatch(\n record: SessionRecord,\n options: { cursor?: string; policy: OutputPolicy },\n): Promise<void> {\n const stopped = new AbortController();\n let outputError: Error | undefined;\n const stop = () => stopped.abort();\n const onOutputError = (error: Error) => {\n if ((error as NodeJS.ErrnoException).code !== \"EPIPE\") {\n outputError = error;\n }\n stop();\n };\n const render = watchRenderer(options.policy);\n process.on(\"SIGINT\", stop);\n process.on(\"SIGTERM\", stop);\n process.on(\"SIGHUP\", stop);\n process.stdout.on(\"error\", onOutputError);\n try {\n for await (const event of watchSession({\n record,\n cursor: options.cursor,\n signal: stopped.signal,\n })) {\n for (const chunk of render(event)) {\n if (stopped.signal.aborted) {\n break;\n }\n if (!process.stdout.write(chunk)) {\n await once(process.stdout, \"drain\", { signal: stopped.signal });\n }\n }\n }\n } catch (error) {\n if (!stopped.signal.aborted) {\n throw error;\n }\n } finally {\n process.off(\"SIGINT\", stop);\n process.off(\"SIGTERM\", stop);\n process.off(\"SIGHUP\", stop);\n process.stdout.off(\"error\", onOutputError);\n }\n if (outputError) {\n throw outputError;\n }\n}\n"],"mappings":";;;;;AAQA,SAAS,cAAc,QAA8D;CACnF,MAAM,SAAmB,CAAC;CAC1B,MAAM,SAAS,EACb,QAAQ,UAAkB;EACxB,OAAO,KAAK,KAAK;CACnB,EACF;CACA,IAAI,YAAY,IAAI,qBAAqB,OAAO,eAAe,IAAI;CACnE,IAAI,YAAY,sBAAsB,OAAO,QAAQ,EAAE,OAAO,CAAC;CAC/D,QAAQ,UAAU;EAChB,OAAO,SAAS;EAChB,IAAI,MAAM,SAAS,gBAAgB;GACjC,YAAY,IAAI,qBAAqB,OAAO,eAAe,IAAI;GAC/D,YAAY,sBAAsB,OAAO,QAAQ,EAAE,OAAO,CAAC;EAC7D;EACA,IAAI,OAAO,WAAW,QACpB,OAAO,KACL,KAAK,UACH,MAAM,SAAS,YACX;GAAE,GAAG;GAAO,SAAS,UAAU,SAAS,MAAM,OAAO;EAAE,IACvD,KACN,IAAI,IACN;OACK,IAAI,MAAM,SAAS,WACxB,mBAAmB,OAAO,WAAW,WAAW,OAAO,WAAW,OAAO;OACpE;GACL,IAAI,MAAM,SAAS,eACjB,UAAU,MAAM;GAElB,IAAI,OAAO,WAAW,SACpB,OAAO,KAAK,mBAAmB,KAAK,CAAC;EAEzC;EACA,OAAO;CACT;AACF;AAEA,SAAS,mBACP,OACA,WACA,WACA,OACM;CACN,MAAM,UAAU,UAAU,SAAS,MAAM,OAAO;CAChD,IAAI,CAAC,oBAAoB,OAAO,GAC9B,MAAM,IAAI,MAAM,mCAAmC;CAErD,IAAI,SAAS,sBAAsB,OAAO,MAAM,KAAA,GAC9C,UAAU,aAAa,OAAO;AAElC;AAEA,SAAS,mBAAmB,OAAgE;CAC1F,IAAI,MAAM,SAAS,gBACjB,OAAO,MAAM,MAAM,UAAU,mBAAmB,MAAM,OAAO;CAE/D,MAAM,SACJ,MAAM,OAAO,WAAW,WAAW,MAAM,OAAO,MAAM,UAAU,MAAM,OAAO;CAC/E,OAAO,MAAM,MAAM,UAAU,IAAI,MAAM,OAAO,SAAS,SAAS,KAAK,WAAW,GAAG,UAAU,MAAM,OAAO;AAC5G;AAEA,eAAsB,gBACpB,QACA,SACe;CACf,MAAM,UAAU,IAAI,gBAAgB;CACpC,IAAI;CACJ,MAAM,aAAa,QAAQ,MAAM;CACjC,MAAM,iBAAiB,UAAiB;EACtC,IAAK,MAAgC,SAAS,SAC5C,cAAc;EAEhB,KAAK;CACP;CACA,MAAM,SAAS,cAAc,QAAQ,MAAM;CAC3C,QAAQ,GAAG,UAAU,IAAI;CACzB,QAAQ,GAAG,WAAW,IAAI;CAC1B,QAAQ,GAAG,UAAU,IAAI;CACzB,QAAQ,OAAO,GAAG,SAAS,aAAa;CACxC,IAAI;EACF,WAAW,MAAM,SAAS,aAAa;GACrC;GACA,QAAQ,QAAQ;GAChB,QAAQ,QAAQ;EAClB,CAAC,GACC,KAAK,MAAM,SAAS,OAAO,KAAK,GAAG;GACjC,IAAI,QAAQ,OAAO,SACjB;GAEF,IAAI,CAAC,QAAQ,OAAO,MAAM,KAAK,GAC7B,MAAM,KAAK,QAAQ,QAAQ,SAAS,EAAE,QAAQ,QAAQ,OAAO,CAAC;EAElE;CAEJ,SAAS,OAAO;EACd,IAAI,CAAC,QAAQ,OAAO,SAClB,MAAM;CAEV,UAAU;EACR,QAAQ,IAAI,UAAU,IAAI;EAC1B,QAAQ,IAAI,WAAW,IAAI;EAC3B,QAAQ,IAAI,UAAU,IAAI;EAC1B,QAAQ,OAAO,IAAI,SAAS,aAAa;CAC3C;CACA,IAAI,aACF,MAAM;AAEV"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "acpx",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.21.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",
|
|
@@ -104,7 +104,7 @@
|
|
|
104
104
|
"husky": "^9.1.7",
|
|
105
105
|
"lint-staged": "^17.5.1",
|
|
106
106
|
"markdownlint-cli2": "^0.23.3",
|
|
107
|
-
"oxfmt": "^0.
|
|
107
|
+
"oxfmt": "^0.74.0",
|
|
108
108
|
"oxlint": "^1.85.0",
|
|
109
109
|
"oxlint-tsgolint": "^7.0.2002",
|
|
110
110
|
"react": "^19.3.0",
|
package/skills/acpx/SKILL.md
CHANGED
|
@@ -399,7 +399,32 @@ Use `acpx config show` to inspect the resolved config and `acpx config init` to
|
|
|
399
399
|
For ACP `authenticate` handshakes, use either config `auth` entries or explicit
|
|
400
400
|
`ACPX_AUTH_<METHOD_ID>` environment variables such as `ACPX_AUTH_OPENAI_API_KEY`.
|
|
401
401
|
Ambient provider env vars such as `OPENAI_API_KEY` are still passed through to
|
|
402
|
-
child agents, but they do not trigger ACP auth-method selection on
|
|
402
|
+
child agents by default, but they do not trigger ACP auth-method selection on
|
|
403
|
+
their own.
|
|
404
|
+
|
|
405
|
+
## Embedded environment inheritance
|
|
406
|
+
|
|
407
|
+
Embedding hosts can set `agentProcessEnvAllow` or `agentProcessEnvBlock` on
|
|
408
|
+
`createAcpRuntime()` to keep parent variables, such as the host's own service
|
|
409
|
+
credentials, out of agents, command probes, and ACP terminals. Both are off by
|
|
410
|
+
default and the CLI does not set them, so without them children inherit the
|
|
411
|
+
whole environment as before.
|
|
412
|
+
|
|
413
|
+
- `agentProcessEnvAllow` keeps only process essentials (`PATH`, `HOME`, locale,
|
|
414
|
+
temp and similar names) plus the listed names. An empty list keeps only the
|
|
415
|
+
essentials and explicit grants.
|
|
416
|
+
- `agentProcessEnvBlock` removes the listed names, applied after the allowlist.
|
|
417
|
+
- Explicit grants still apply: `ACPX_AUTH_<METHOD_ID>` variables pass through
|
|
418
|
+
both lists, and `agentProcessEnv`, saved session `env`, and a terminal
|
|
419
|
+
request's own `env` are layered on top.
|
|
420
|
+
|
|
421
|
+
A filtered provider key does not reach the agent. Agent-specific environment
|
|
422
|
+
authentication that ACPX selects itself, such as Grok Build's `XAI_API_KEY` for
|
|
423
|
+
`xai.api_key`, is skipped as well when the key is filtered. Keep such a key by
|
|
424
|
+
listing it in the allowlist and leaving it off the blocklist, or pass it as an
|
|
425
|
+
`ACPX_AUTH_*` grant (for Grok Build, `ACPX_AUTH_XAI_API_KEY`). See
|
|
426
|
+
[`docs/runtime-environment.md`](https://github.com/openclaw/acpx/blob/main/docs/runtime-environment.md)
|
|
427
|
+
and [`agents/GrokBuild.md`](https://github.com/openclaw/acpx/blob/main/agents/GrokBuild.md).
|
|
403
428
|
|
|
404
429
|
## Devin ACP compatibility
|
|
405
430
|
|