acpx 0.12.0 → 0.13.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 +11 -3
- package/dist/{cli-CxsS1XQp.js → cli-D52eGvxU.js} +5 -4
- package/dist/cli-D52eGvxU.js.map +1 -0
- package/dist/cli.d.ts +2 -3
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +84 -25
- package/dist/cli.js.map +1 -1
- package/dist/{client-DwNyFauq.d.ts → client-BeKvumq9.d.ts} +4 -3
- package/dist/client-BeKvumq9.d.ts.map +1 -0
- package/dist/{flags-Bjq_XQ4-.js → flags---9OR06b.js} +36 -9
- package/dist/flags---9OR06b.js.map +1 -0
- package/dist/{flows-Db_LZKu9.js → flows-CYfjwbn2.js} +14 -4
- package/dist/flows-CYfjwbn2.js.map +1 -0
- package/dist/flows.d.ts +6 -2
- package/dist/flows.d.ts.map +1 -1
- package/dist/flows.js +1 -1
- package/dist/{live-checkpoint-ClPCSdrW.js → live-checkpoint-CBecfnSH.js} +226 -20
- package/dist/live-checkpoint-CBecfnSH.js.map +1 -0
- package/dist/{output-CjdF5rHk.js → output-CzN8vLdE.js} +150 -18
- package/dist/output-CzN8vLdE.js.map +1 -0
- package/dist/runtime.d.ts +18 -14
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +34 -11
- package/dist/runtime.js.map +1 -1
- package/dist/{session-options-jkYbBxGE.d.ts → session-options-CTdZvr68.d.ts} +4 -2
- package/dist/session-options-CTdZvr68.d.ts.map +1 -0
- package/package.json +27 -27
- package/skills/acpx/SKILL.md +10 -7
- package/dist/cli-CxsS1XQp.js.map +0 -1
- package/dist/client-DwNyFauq.d.ts.map +0 -1
- package/dist/flags-Bjq_XQ4-.js.map +0 -1
- package/dist/flows-Db_LZKu9.js.map +0 -1
- package/dist/live-checkpoint-ClPCSdrW.js.map +0 -1
- package/dist/output-CjdF5rHk.js.map +0 -1
- package/dist/session-options-jkYbBxGE.d.ts.map +0 -1
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { c as NonInteractivePermissionPolicy, d as PermissionStats, l as PermissionMode, p as PromptInput, r as AcpClientOptions } from "./session-options-
|
|
1
|
+
import { c as NonInteractivePermissionPolicy, d as PermissionStats, l as PermissionMode, p as PromptInput, r as AcpClientOptions } from "./session-options-CTdZvr68.js";
|
|
2
2
|
import { AnyMessage, InitializeResponse, ListSessionsRequest, ListSessionsResponse, PromptResponse, SessionConfigOption, SetSessionConfigOptionResponse } from "@agentclientprotocol/sdk";
|
|
3
|
-
|
|
4
3
|
//#region src/acp/model-support.d.ts
|
|
5
4
|
type SessionModelState = {
|
|
6
5
|
configId?: string;
|
|
@@ -99,10 +98,12 @@ declare class AcpClient {
|
|
|
99
98
|
permissionMode?: PermissionMode;
|
|
100
99
|
nonInteractivePermissions?: NonInteractivePermissionPolicy;
|
|
101
100
|
permissionPolicy?: AcpClientOptions["permissionPolicy"];
|
|
101
|
+
fs?: boolean;
|
|
102
102
|
terminal?: boolean;
|
|
103
103
|
suppressSdkConsoleErrors?: boolean;
|
|
104
104
|
verbose?: boolean;
|
|
105
105
|
}): void;
|
|
106
|
+
private updateClientCapabilityPreferences;
|
|
106
107
|
private refreshRuntimePermissionPolicy;
|
|
107
108
|
hasReusableSession(sessionId: string): boolean;
|
|
108
109
|
hasActivePrompt(sessionId?: string): boolean;
|
|
@@ -189,4 +190,4 @@ declare class AcpClient {
|
|
|
189
190
|
}
|
|
190
191
|
//#endregion
|
|
191
192
|
export { RequestedModelUnsupportedErrorCode as a, RequestedModelUnsupportedError as i, REQUESTED_MODEL_UNSUPPORTED_ERROR_CODE as n, RequestedModelUnsupportedReason as o, REQUESTED_MODEL_UNSUPPORTED_REASONS as r, isRequestedModelUnsupportedError as s, AcpClient as t };
|
|
192
|
-
//# sourceMappingURL=client-
|
|
193
|
+
//# sourceMappingURL=client-BeKvumq9.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-BeKvumq9.d.ts","names":[],"sources":["../src/acp/model-support.ts","../src/acp/client.ts"],"mappings":";;;KAGY;EACV;EACA;EACA,iBAAiB;IACf;IACA;;;cAaS;KAED,4CAA4C;cAE3C;KAKD,0CAA0C;cAEzC,uCAAuC;WACzC;WACA,QAAQ;EAEL,YAAA,iBAAiB,QAAQ;;iBAgBvB,iCACd,iBACC,SAAS;;;KC4HP;EACH;EACA;EACA;;KAGU;EACV;EACA;EACA,gBAAgB;EAChB,SAAS;EACT;EACA;;KAGU;EACV;EACA,gBAAgB;EAChB,SAAS;EACT;EACA;;KAGU,sBAAsB;KA8B7B;KAmCA,uBAAuB,KAAK,iCAC/B,QAAQ,KAAK;KAEH;EACV;EACA,QAAQ,OAAO;EACf;EACA,QAAQ;EACR;;KAGU;EACV;EACA;EACA;EACA,WAAW;;cA+HA;UACH;UACA;UACA;UACA;UACA;UACA;mBAQS;mBAMA;mBACA;UACT;UACA;UACA;UACA;UACA;UACA;mBAIS;mBACA;UACT;UACA;UACA;UACA;mBACS;mBACA;mBACA;mBACA;EAEL,YAAA,SAAS;MAgCjB,oBAAoB;EAIxB;EAIA,sBAAsB;EAItB,6BAA6B;EAW7B;EAIA;EAIA;EAIA;EAIA,iBACE,UAAU,KACR;EAWJ;EAIA,qBAAqB;IACnB,iBAAiB;IACjB,4BAA4B;IAC5B,mBAAmB;IACnB;IACA;IACA;IACA;;UAuBM;UASA;EAcR,mBAAmB;EASnB,gBAAgB;EAUV,SAAS;UAoDD;UA4BN;UAiBM;UAcA;UAqBN;UA0DM;UAsBA;UAoBA;UAgCN;EAuDF,cAAc,eAAyB,QAAQ;EA8C/C,YAAY,mBAAmB,eAAyB,QAAQ;EAKhE,uBACJ,mBACA,cACA,UAAS,qBACR,QAAQ;EAgCL,cAAc,mBAAmB,eAAyB,QAAQ;UAiBhE;UAWA;EAKF,OAAO,mBAAmB,QAAQ,uBAAuB,QAAQ;UAyC/D;UAYA;UAQA;EAOF,eAAe,mBAAmB,iBAAiB;EAcnD,uBACJ,mBACA,kBACA,gBACC,QAAQ;EAmBL,gBACJ,mBACA,iBACA,kBAAkB,uBACjB,QAAQ;UAoBG;UAqBA;UAeN;UAoBA;UAgBA;UAeA;EAOF,OAAO,oBAAoB;EAW3B,aAAa,oBAAoB;EAcjC,aAAa,SAAQ,sBAA2B,QAAQ;EAKxD,6BAA6B;EAS7B,mBAAmB,kBAAiB,QAAQ;EAqC5C,SAAS;UA8CD;UAgBN;UAYM;UAiBN;UAkBA;UAOA;UAOA;UAcA;UASA;UA8DM;UA0BN;UA2CA;UAQA;UAUA;UAcM;UA6BA;UAqBA;UAsBN;UAiBA;UAmBM;UAiBN;UAQA;UAYA;UAgBA;UAuBA;UASA;UAUM;UA0BN;UAYM;UASA;UASA;UAWA;UAMA;UAMA;UAIA;UAMN;UASA;UAQA;UAaA;UAWM;UAkBA;EAgCR,0BAA0B;IAC9B;IACA;MACE"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import "./output-
|
|
2
|
-
import {
|
|
1
|
+
import "./output-CzN8vLdE.js";
|
|
2
|
+
import { Ft as resolveAgentArgv, Gt as AUTH_POLICIES, It as resolveAgentCommand, Lt as resolveCanonicalAgentName, Pt as normalizeAgentName, Qt as PERMISSION_POLICY_ACTIONS, Xt as OUTPUT_FORMATS, qt as NON_INTERACTIVE_PERMISSION_POLICIES } from "./live-checkpoint-CBecfnSH.js";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { InvalidArgumentError } from "commander";
|
|
5
5
|
import fs from "node:fs/promises";
|
|
@@ -46,6 +46,11 @@ async function loadPermissionPolicySpec(spec, cwd) {
|
|
|
46
46
|
const raw = await fs.readFile(policyPath, "utf8");
|
|
47
47
|
return parsePermissionPolicy(JSON.parse(raw), policyPath);
|
|
48
48
|
}
|
|
49
|
+
function toTimerMilliseconds(seconds, allowZero) {
|
|
50
|
+
if (allowZero && seconds === 0) return 0;
|
|
51
|
+
const milliseconds = Math.max(1, Math.round(seconds * 1e3));
|
|
52
|
+
return milliseconds <= 2147483647 ? milliseconds : void 0;
|
|
53
|
+
}
|
|
49
54
|
//#endregion
|
|
50
55
|
//#region src/cli/flags.ts
|
|
51
56
|
function hasExplicitPermissionModeFlag(flags) {
|
|
@@ -81,12 +86,16 @@ function parseNonInteractivePermissionPolicy(value) {
|
|
|
81
86
|
function parseTimeoutSeconds(value) {
|
|
82
87
|
const parsed = Number(value);
|
|
83
88
|
if (!Number.isFinite(parsed) || parsed <= 0) throw new InvalidArgumentError("Timeout must be a positive number of seconds");
|
|
84
|
-
|
|
89
|
+
const milliseconds = toTimerMilliseconds(parsed, false);
|
|
90
|
+
if (milliseconds === void 0) throw new InvalidArgumentError("Timeout exceeds the maximum supported timer delay");
|
|
91
|
+
return milliseconds;
|
|
85
92
|
}
|
|
86
93
|
function parseTtlSeconds(value) {
|
|
87
94
|
const parsed = Number(value);
|
|
88
95
|
if (!Number.isFinite(parsed) || parsed < 0) throw new InvalidArgumentError("TTL must be a non-negative number of seconds");
|
|
89
|
-
|
|
96
|
+
const milliseconds = toTimerMilliseconds(parsed, true);
|
|
97
|
+
if (milliseconds === void 0) throw new InvalidArgumentError("TTL exceeds the maximum supported timer delay");
|
|
98
|
+
return milliseconds;
|
|
90
99
|
}
|
|
91
100
|
function parseSessionName(value) {
|
|
92
101
|
const trimmed = value.trim();
|
|
@@ -149,7 +158,7 @@ function resolvePermissionMode(flags, defaultMode) {
|
|
|
149
158
|
return defaultMode;
|
|
150
159
|
}
|
|
151
160
|
function addGlobalFlags(command) {
|
|
152
|
-
return command.option("--agent <command>", "Raw ACP agent command (escape hatch)").option("--cwd <dir>", "Working directory", process.cwd()).option("--auth-policy <policy>", "Authentication policy: skip or fail when auth is required", parseAuthPolicy).option("--approve-all", "Auto-approve all permission requests").option("--approve-reads", "Auto-approve read/search requests and prompt for writes").option("--deny-all", "Deny all permission requests").option("--non-interactive-permissions <policy>", "When prompting is unavailable: deny or fail", parseNonInteractivePermissionPolicy).option("--permission-policy <json-or-file>", "Permission policy JSON or path (autoApprove, autoDeny, escalate, defaultAction)").option("--policy <json-or-file>", "Alias for --permission-policy").option("--format <fmt>", "Output format: text, json, quiet", parseOutputFormat).option("--suppress-reads", "Suppress raw read-file contents in output").option("--model <id>", "Agent model id").option("--allowed-tools <list>", "Allowed tool names as a comma-separated list (use \"\" for no tools)", parseAllowedTools).option("--max-turns <count>", "Maximum turns for the session", parseMaxTurns).option("--system-prompt <text>", "Replace the agent system prompt (claude-agent-acp via ACP _meta.systemPrompt)", (value) => parseNonEmptyValue("System prompt", value)).option("--append-system-prompt <text>", "Append text to the agent system prompt (claude-agent-acp via ACP _meta.systemPrompt.append)", (value) => parseNonEmptyValue("Append system prompt", value)).option("--prompt-retries <count>", "Retry failed prompt turns on transient errors (default: 0)", parsePromptRetries).option("--json-strict", "Strict JSON mode: requires --format json and suppresses non-JSON stderr output").option("--no-terminal", "Do not advertise ACP terminal capability").option("--timeout <seconds>", "Maximum time to wait for agent response", parseTimeoutSeconds).option("--ttl <seconds>", "Queue owner idle TTL before shutdown (0 = keep alive forever) (default: 300)", parseTtlSeconds).option("--mcp-config <path>", "Load MCP servers from a JSON config file instead of project/global mcpServers").option("--verbose", "Enable verbose debug logs");
|
|
161
|
+
return command.option("--agent <command>", "Raw ACP agent command (escape hatch)").option("--cwd <dir>", "Working directory", process.cwd()).option("--auth-policy <policy>", "Authentication policy: skip or fail when auth is required", parseAuthPolicy).option("--approve-all", "Auto-approve all permission requests").option("--approve-reads", "Auto-approve read/search requests and prompt for writes").option("--deny-all", "Deny all permission requests").option("--non-interactive-permissions <policy>", "When prompting is unavailable: deny or fail", parseNonInteractivePermissionPolicy).option("--permission-policy <json-or-file>", "Permission policy JSON or path (autoApprove, autoDeny, escalate, defaultAction)").option("--policy <json-or-file>", "Alias for --permission-policy").option("--format <fmt>", "Output format: text, json, quiet", parseOutputFormat).option("--suppress-reads", "Suppress raw read-file contents in output").option("--model <id>", "Agent model id").option("--allowed-tools <list>", "Allowed tool names as a comma-separated list (use \"\" for no tools)", parseAllowedTools).option("--max-turns <count>", "Maximum turns for the session", parseMaxTurns).option("--system-prompt <text>", "Replace the agent system prompt (claude-agent-acp via ACP _meta.systemPrompt)", (value) => parseNonEmptyValue("System prompt", value)).option("--append-system-prompt <text>", "Append text to the agent system prompt (claude-agent-acp via ACP _meta.systemPrompt.append)", (value) => parseNonEmptyValue("Append system prompt", value)).option("--prompt-retries <count>", "Retry failed prompt turns on transient errors (default: 0)", parsePromptRetries).option("--json-strict", "Strict JSON mode: requires --format json and suppresses non-JSON stderr output").option("--no-fs", "Do not advertise ACP filesystem capabilities").option("--no-terminal", "Do not advertise ACP terminal capability").option("--timeout <seconds>", "Maximum time to wait for agent response", parseTimeoutSeconds).option("--ttl <seconds>", "Queue owner idle TTL before shutdown (0 = keep alive forever) (default: 300)", parseTtlSeconds).option("--mcp-config <path>", "Load MCP servers from a JSON config file instead of project/global mcpServers").option("--verbose", "Enable verbose debug logs");
|
|
153
162
|
}
|
|
154
163
|
function addSessionOption(command) {
|
|
155
164
|
return command.option("-s, --session <name>", "Use named session instead of cwd default", parseSessionName).option("--no-wait", "Queue prompt and return immediately when another prompt is already running");
|
|
@@ -185,6 +194,7 @@ function resolveGlobalFlags(command, config) {
|
|
|
185
194
|
permissionPolicy: resolvePermissionPolicyOption(opts),
|
|
186
195
|
jsonStrict,
|
|
187
196
|
suppressReads: opts.suppressReads === true,
|
|
197
|
+
fs: resolveCapabilityOption(opts.fs),
|
|
188
198
|
terminal: resolveTerminalOption(opts.terminal),
|
|
189
199
|
timeout: resolveTimeoutOption(opts.timeout, config),
|
|
190
200
|
ttl: resolveTtlOption(opts.ttl, config),
|
|
@@ -217,9 +227,12 @@ function resolvePermissionPolicyOption(opts) {
|
|
|
217
227
|
if (primary !== void 0 && alias !== void 0 && primary !== alias) throw new InvalidArgumentError("Use only one permission policy flag: --permission-policy or --policy");
|
|
218
228
|
return primary ?? alias;
|
|
219
229
|
}
|
|
220
|
-
function
|
|
230
|
+
function resolveCapabilityOption(value) {
|
|
221
231
|
return value === false ? false : void 0;
|
|
222
232
|
}
|
|
233
|
+
function resolveTerminalOption(value) {
|
|
234
|
+
return resolveCapabilityOption(value);
|
|
235
|
+
}
|
|
223
236
|
function resolveTimeoutOption(value, config) {
|
|
224
237
|
return numberOption(value) ?? config.timeoutMs;
|
|
225
238
|
}
|
|
@@ -250,11 +263,25 @@ function resolveAgentInvocation(explicitAgentName, globalFlags, config) {
|
|
|
250
263
|
const agentName = explicitAgentName ?? config.defaultAgent ?? "codex";
|
|
251
264
|
return {
|
|
252
265
|
agentName,
|
|
253
|
-
|
|
266
|
+
...resolveInvocationCommand(agentName, override, config),
|
|
254
267
|
cwd: path.resolve(globalFlags.cwd)
|
|
255
268
|
};
|
|
256
269
|
}
|
|
270
|
+
function resolveInvocationCommand(agentName, override, config) {
|
|
271
|
+
if (override) return { agentCommand: override };
|
|
272
|
+
const normalizedAgentName = normalizeAgentName(agentName);
|
|
273
|
+
const configuredAgent = config.agents[normalizedAgentName] ?? config.agents[resolveCanonicalAgentName(agentName)];
|
|
274
|
+
if (configuredAgent) return {
|
|
275
|
+
agentCommand: configuredAgent.command,
|
|
276
|
+
...configuredAgent.argv ? { agentArgv: [...configuredAgent.argv] } : {}
|
|
277
|
+
};
|
|
278
|
+
const agentArgv = resolveAgentArgv(agentName);
|
|
279
|
+
return {
|
|
280
|
+
agentCommand: resolveAgentCommand(agentName),
|
|
281
|
+
...agentArgv ? { agentArgv } : {}
|
|
282
|
+
};
|
|
283
|
+
}
|
|
257
284
|
//#endregion
|
|
258
|
-
export { resolveGlobalFlags as _, hasExplicitPermissionModeFlag as a, resolveSessionNameFromFlags as b, parseHistoryLimit as c, parseOutputFormat as d, parsePruneBeforeDate as f, resolveAgentInvocation as g, parseTtlSeconds as h, addSessionOption as i, parseMaxTurns as l, parseTimeoutSeconds as m, addPromptInputOption as n, parseAllowedTools as o, parseSessionName as p, addSessionNameOption as r, parseDaysOlderThan as s, addGlobalFlags as t, parseNonEmptyValue as u, resolveOutputPolicy as v,
|
|
285
|
+
export { loadPermissionPolicySpec as S, resolveGlobalFlags as _, hasExplicitPermissionModeFlag as a, resolveSessionNameFromFlags as b, parseHistoryLimit as c, parseOutputFormat as d, parsePruneBeforeDate as f, resolveAgentInvocation as g, parseTtlSeconds as h, addSessionOption as i, parseMaxTurns as l, parseTimeoutSeconds as m, addPromptInputOption as n, parseAllowedTools as o, parseSessionName as p, addSessionNameOption as r, parseDaysOlderThan as s, addGlobalFlags as t, parseNonEmptyValue as u, resolveOutputPolicy as v, toTimerMilliseconds as x, resolvePermissionMode as y };
|
|
259
286
|
|
|
260
|
-
//# sourceMappingURL=flags
|
|
287
|
+
//# sourceMappingURL=flags---9OR06b.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flags---9OR06b.js","names":["asRecord","resolveAgentCommandFromRegistry"],"sources":["../src/permission-policy.ts","../src/cli/timer-duration.ts","../src/cli/flags.ts"],"sourcesContent":["import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n PERMISSION_POLICY_ACTIONS,\n type PermissionPolicy,\n type PermissionPolicyAction,\n} from \"./types.js\";\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return undefined;\n }\n return value as Record<string, unknown>;\n}\n\nfunction parseRuleList(value: unknown, key: string, source: string): string[] | undefined {\n if (value == null) {\n return undefined;\n }\n if (!Array.isArray(value)) {\n throw new Error(`${source}: permission policy ${key} must be an array of strings`);\n }\n\n const parsed = value.map((entry) => {\n if (typeof entry !== \"string\" || entry.trim().length === 0) {\n throw new Error(`${source}: permission policy ${key} must contain only non-empty strings`);\n }\n return entry.trim();\n });\n\n return parsed;\n}\n\nfunction isPermissionPolicyAction(value: unknown): value is PermissionPolicyAction {\n return (\n typeof value === \"string\" && PERMISSION_POLICY_ACTIONS.includes(value as PermissionPolicyAction)\n );\n}\n\nfunction parseDefaultAction(\n value: unknown,\n source: string,\n): PermissionPolicy[\"defaultAction\"] | undefined {\n if (value == null) {\n return undefined;\n }\n if (!isPermissionPolicyAction(value)) {\n throw new Error(\n `${source}: permission policy defaultAction must be one of ${PERMISSION_POLICY_ACTIONS.join(\", \")}`,\n );\n }\n return value;\n}\n\nfunction assignRuleList(\n policy: PermissionPolicy,\n key: \"autoApprove\" | \"autoDeny\" | \"escalate\",\n value: string[] | undefined,\n): void {\n if (value) {\n policy[key] = value;\n }\n}\n\nexport function parsePermissionPolicy(\n value: unknown,\n source = \"permission policy\",\n): PermissionPolicy {\n const record = asRecord(value);\n if (!record) {\n throw new Error(`${source}: permission policy must be a JSON object`);\n }\n\n const policy: PermissionPolicy = {};\n assignRuleList(policy, \"autoApprove\", parseRuleList(record.autoApprove, \"autoApprove\", source));\n assignRuleList(policy, \"autoDeny\", parseRuleList(record.autoDeny, \"autoDeny\", source));\n assignRuleList(policy, \"escalate\", parseRuleList(record.escalate, \"escalate\", source));\n\n const defaultAction = parseDefaultAction(record.defaultAction, source);\n if (defaultAction) {\n policy.defaultAction = defaultAction;\n }\n\n return policy;\n}\n\nexport async function loadPermissionPolicySpec(\n spec: string | undefined,\n cwd: string,\n): Promise<PermissionPolicy | undefined> {\n const trimmed = spec?.trim();\n if (!trimmed) {\n return undefined;\n }\n\n if (trimmed.startsWith(\"{\")) {\n return parsePermissionPolicy(JSON.parse(trimmed), \"--permission-policy\");\n }\n\n const policyPath = path.resolve(cwd, trimmed);\n const raw = await fs.readFile(policyPath, \"utf8\");\n return parsePermissionPolicy(JSON.parse(raw), policyPath);\n}\n","export const MAX_TIMER_DELAY_MS = 2_147_483_647;\n\nexport function toTimerMilliseconds(seconds: number, allowZero: boolean): number | undefined {\n if (allowZero && seconds === 0) {\n return 0;\n }\n const milliseconds = Math.max(1, Math.round(seconds * 1000));\n return milliseconds <= MAX_TIMER_DELAY_MS ? milliseconds : undefined;\n}\n","import path from \"node:path\";\nimport { InvalidArgumentError } from \"commander\";\nimport type { Command } from \"commander\";\nimport {\n DEFAULT_AGENT_NAME,\n normalizeAgentName,\n resolveCanonicalAgentName,\n resolveAgentArgv,\n resolveAgentCommand as resolveAgentCommandFromRegistry,\n} from \"../agent-registry.js\";\nimport type { SystemPromptOption } from \"../runtime/engine/session-options.js\";\nimport { DEFAULT_QUEUE_OWNER_TTL_MS } from \"../session/session.js\";\nimport {\n AUTH_POLICIES,\n NON_INTERACTIVE_PERMISSION_POLICIES,\n OUTPUT_FORMATS,\n type AuthPolicy,\n type NonInteractivePermissionPolicy,\n type OutputFormat,\n type OutputPolicy,\n type PermissionMode,\n} from \"../types.js\";\nimport type { ResolvedAcpxConfig } from \"./config.js\";\nimport { toTimerMilliseconds } from \"./timer-duration.js\";\n\nexport type PermissionFlags = {\n approveAll?: boolean;\n approveReads?: boolean;\n denyAll?: boolean;\n};\n\nexport function hasExplicitPermissionModeFlag(flags: PermissionFlags): boolean {\n return flags.approveAll === true || flags.approveReads === true || flags.denyAll === true;\n}\n\nexport type GlobalFlags = PermissionFlags & {\n agent?: string;\n cwd: string;\n authPolicy?: AuthPolicy;\n nonInteractivePermissions: NonInteractivePermissionPolicy;\n jsonStrict?: boolean;\n suppressReads?: boolean;\n fs?: boolean;\n terminal?: boolean;\n timeout?: number;\n ttl: number;\n verbose?: boolean;\n format: OutputFormat;\n model?: string;\n allowedTools?: string[];\n maxTurns?: number;\n systemPrompt?: SystemPromptOption;\n promptRetries?: number;\n permissionPolicy?: string;\n};\n\nexport type PromptFlags = {\n session?: string;\n wait?: boolean;\n file?: string;\n};\n\nexport type ExecFlags = {\n file?: string;\n};\n\nexport type SessionsNewFlags = {\n name?: string;\n resumeSession?: string;\n};\n\nexport type SessionsHistoryFlags = {\n limit: number;\n};\n\nexport type SessionsListFlags = {\n cursor?: string;\n filterCwd?: string;\n local?: boolean;\n};\n\nexport type SessionsExportFlags = {\n output: string;\n sourceCwd?: string;\n};\n\nexport type SessionsImportFlags = {\n name?: string;\n destinationCwd?: string;\n};\n\nexport type StatusFlags = {\n session?: string;\n};\n\ntype SessionSelectionFlags = {\n session?: string;\n};\n\nexport type SessionsPruneFlags = {\n dryRun?: boolean;\n before?: Date;\n olderThan?: number;\n includeHistory?: boolean;\n};\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : undefined;\n}\n\nfunction stringOption(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction numberOption(value: unknown): number | undefined {\n return typeof value === \"number\" ? value : undefined;\n}\n\nfunction stringArrayOption(value: unknown): string[] | undefined {\n return Array.isArray(value) && value.every((entry) => typeof entry === \"string\")\n ? value\n : undefined;\n}\n\nfunction nonEmptyStringOption(value: unknown): string | undefined {\n return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\nexport function parseOutputFormat(value: string): OutputFormat {\n if (!OUTPUT_FORMATS.includes(value as OutputFormat)) {\n throw new InvalidArgumentError(\n `Invalid format \"${value}\". Expected one of: ${OUTPUT_FORMATS.join(\", \")}`,\n );\n }\n return value as OutputFormat;\n}\n\nexport function parseAuthPolicy(value: string): AuthPolicy {\n if (!AUTH_POLICIES.includes(value as AuthPolicy)) {\n throw new InvalidArgumentError(\n `Invalid auth policy \"${value}\". Expected one of: ${AUTH_POLICIES.join(\", \")}`,\n );\n }\n return value as AuthPolicy;\n}\n\nexport function parseNonInteractivePermissionPolicy(value: string): NonInteractivePermissionPolicy {\n if (!NON_INTERACTIVE_PERMISSION_POLICIES.includes(value as NonInteractivePermissionPolicy)) {\n throw new InvalidArgumentError(\n `Invalid non-interactive permission policy \"${value}\". Expected one of: ${NON_INTERACTIVE_PERMISSION_POLICIES.join(\", \")}`,\n );\n }\n return value as NonInteractivePermissionPolicy;\n}\n\nexport function parseTimeoutSeconds(value: string): number {\n const parsed = Number(value);\n if (!Number.isFinite(parsed) || parsed <= 0) {\n throw new InvalidArgumentError(\"Timeout must be a positive number of seconds\");\n }\n const milliseconds = toTimerMilliseconds(parsed, false);\n if (milliseconds === undefined) {\n throw new InvalidArgumentError(\"Timeout exceeds the maximum supported timer delay\");\n }\n return milliseconds;\n}\n\nexport function parseTtlSeconds(value: string): number {\n const parsed = Number(value);\n if (!Number.isFinite(parsed) || parsed < 0) {\n throw new InvalidArgumentError(\"TTL must be a non-negative number of seconds\");\n }\n const milliseconds = toTimerMilliseconds(parsed, true);\n if (milliseconds === undefined) {\n throw new InvalidArgumentError(\"TTL exceeds the maximum supported timer delay\");\n }\n return milliseconds;\n}\n\nexport function parseSessionName(value: string): string {\n const trimmed = value.trim();\n if (trimmed.length === 0) {\n throw new InvalidArgumentError(\"Session name must not be empty\");\n }\n return trimmed;\n}\n\nexport function parseNonEmptyValue(label: string, value: string): string {\n const trimmed = value.trim();\n if (trimmed.length === 0) {\n throw new InvalidArgumentError(`${label} must not be empty`);\n }\n return trimmed;\n}\n\nexport function parseHistoryLimit(value: string): number {\n const parsed = Number(value);\n if (!Number.isInteger(parsed) || parsed <= 0) {\n throw new InvalidArgumentError(\"Limit must be a positive integer\");\n }\n return parsed;\n}\n\nexport function parseDaysOlderThan(value: string): number {\n const parsed = Number(value);\n if (!Number.isInteger(parsed) || parsed <= 0) {\n throw new InvalidArgumentError(\"--older-than must be a positive integer number of days\");\n }\n return parsed;\n}\n\nexport function parsePruneBeforeDate(value: string): Date {\n const date = new Date(value);\n if (Number.isNaN(date.getTime())) {\n throw new InvalidArgumentError(\n `--before must be a valid date (e.g. 2026-01-01 or 2026-01-01T00:00:00Z)`,\n );\n }\n return date;\n}\n\nexport function parseAllowedTools(value: string): string[] {\n const trimmed = value.trim();\n if (trimmed.length === 0) {\n return [];\n }\n\n const items = trimmed.split(\",\").map((item) => item.trim());\n if (items.some((item) => item.length === 0)) {\n throw new InvalidArgumentError(\n \"Allowed tools must be a comma-separated list without empty entries\",\n );\n }\n\n return items;\n}\n\nexport function parseMaxTurns(value: string): number {\n const parsed = Number(value);\n if (!Number.isInteger(parsed) || parsed <= 0) {\n throw new InvalidArgumentError(\"Max turns must be a positive integer\");\n }\n return parsed;\n}\n\nexport function resolveSystemPromptFlag(opts: {\n systemPrompt?: unknown;\n appendSystemPrompt?: unknown;\n}): SystemPromptOption | undefined {\n const replace = nonEmptyStringOption(opts.systemPrompt);\n const append = nonEmptyStringOption(opts.appendSystemPrompt);\n\n if (replace !== undefined && append !== undefined) {\n throw new InvalidArgumentError(\"Use only one of --system-prompt or --append-system-prompt\");\n }\n if (replace !== undefined) {\n return replace;\n }\n if (append !== undefined) {\n return { append };\n }\n return undefined;\n}\n\nexport function parsePromptRetries(value: string): number {\n const parsed = Number(value);\n if (!Number.isInteger(parsed) || parsed < 0) {\n throw new InvalidArgumentError(\"Prompt retries must be a non-negative integer\");\n }\n return parsed;\n}\n\nexport function resolvePermissionMode(\n flags: PermissionFlags,\n defaultMode: PermissionMode,\n): PermissionMode {\n const selected = [flags.approveAll, flags.approveReads, flags.denyAll].filter(Boolean).length;\n\n if (selected > 1) {\n throw new InvalidArgumentError(\n \"Use only one permission mode: --approve-all, --approve-reads, or --deny-all\",\n );\n }\n\n if (flags.approveAll) {\n return \"approve-all\";\n }\n if (flags.approveReads) {\n return \"approve-reads\";\n }\n if (flags.denyAll) {\n return \"deny-all\";\n }\n\n return defaultMode;\n}\n\nexport function addGlobalFlags(command: Command): Command {\n return command\n .option(\"--agent <command>\", \"Raw ACP agent command (escape hatch)\")\n .option(\"--cwd <dir>\", \"Working directory\", process.cwd())\n .option(\n \"--auth-policy <policy>\",\n \"Authentication policy: skip or fail when auth is required\",\n parseAuthPolicy,\n )\n .option(\"--approve-all\", \"Auto-approve all permission requests\")\n .option(\"--approve-reads\", \"Auto-approve read/search requests and prompt for writes\")\n .option(\"--deny-all\", \"Deny all permission requests\")\n .option(\n \"--non-interactive-permissions <policy>\",\n \"When prompting is unavailable: deny or fail\",\n parseNonInteractivePermissionPolicy,\n )\n .option(\n \"--permission-policy <json-or-file>\",\n \"Permission policy JSON or path (autoApprove, autoDeny, escalate, defaultAction)\",\n )\n .option(\"--policy <json-or-file>\", \"Alias for --permission-policy\")\n .option(\"--format <fmt>\", \"Output format: text, json, quiet\", parseOutputFormat)\n .option(\"--suppress-reads\", \"Suppress raw read-file contents in output\")\n .option(\"--model <id>\", \"Agent model id\")\n .option(\n \"--allowed-tools <list>\",\n 'Allowed tool names as a comma-separated list (use \"\" for no tools)',\n parseAllowedTools,\n )\n .option(\"--max-turns <count>\", \"Maximum turns for the session\", parseMaxTurns)\n .option(\n \"--system-prompt <text>\",\n \"Replace the agent system prompt (claude-agent-acp via ACP _meta.systemPrompt)\",\n (value: string) => parseNonEmptyValue(\"System prompt\", value),\n )\n .option(\n \"--append-system-prompt <text>\",\n \"Append text to the agent system prompt (claude-agent-acp via ACP _meta.systemPrompt.append)\",\n (value: string) => parseNonEmptyValue(\"Append system prompt\", value),\n )\n .option(\n \"--prompt-retries <count>\",\n \"Retry failed prompt turns on transient errors (default: 0)\",\n parsePromptRetries,\n )\n .option(\n \"--json-strict\",\n \"Strict JSON mode: requires --format json and suppresses non-JSON stderr output\",\n )\n .option(\"--no-fs\", \"Do not advertise ACP filesystem capabilities\")\n .option(\"--no-terminal\", \"Do not advertise ACP terminal capability\")\n .option(\"--timeout <seconds>\", \"Maximum time to wait for agent response\", parseTimeoutSeconds)\n .option(\n \"--ttl <seconds>\",\n \"Queue owner idle TTL before shutdown (0 = keep alive forever) (default: 300)\",\n parseTtlSeconds,\n )\n .option(\n \"--mcp-config <path>\",\n \"Load MCP servers from a JSON config file instead of project/global mcpServers\",\n )\n .option(\"--verbose\", \"Enable verbose debug logs\");\n}\n\nexport function addSessionOption(command: Command): Command {\n return command\n .option(\"-s, --session <name>\", \"Use named session instead of cwd default\", parseSessionName)\n .option(\n \"--no-wait\",\n \"Queue prompt and return immediately when another prompt is already running\",\n );\n}\n\nexport function addSessionNameOption(command: Command): Command {\n return command.option(\n \"-s, --session <name>\",\n \"Use named session instead of cwd default\",\n parseSessionName,\n );\n}\n\nexport function resolveSessionNameFromFlags(\n flags: SessionSelectionFlags,\n command: Command,\n): string | undefined {\n const directSession = parseOptionalSessionName(flags.session);\n if (directSession !== undefined) {\n return directSession;\n }\n\n // Commander parses options on the parent command when flags appear before the\n // subcommand (e.g. `acpx codex -s foo cancel`). Use optsWithGlobals() so\n // subcommands can still access those values.\n const allOpts = asRecord(\n (command as unknown as { optsWithGlobals?: () => unknown }).optsWithGlobals?.(),\n );\n const globalSession = parseOptionalSessionName(allOpts?.session);\n if (globalSession !== undefined) {\n return globalSession;\n }\n\n const parentOpts = asRecord(command.parent?.opts?.());\n return parseOptionalSessionName(parentOpts?.session);\n}\n\nfunction parseOptionalSessionName(value: unknown): string | undefined {\n const session = stringOption(value);\n return session === undefined ? undefined : parseSessionName(session);\n}\n\nexport function addPromptInputOption(command: Command): Command {\n return command.option(\"-f, --file <path>\", \"Read prompt text from file path (use - for stdin)\");\n}\n\nexport function resolveGlobalFlags(command: Command, config: ResolvedAcpxConfig): GlobalFlags {\n const opts = asRecord(command.optsWithGlobals()) ?? {};\n const format = parseOutputFormat(stringOption(opts.format) ?? config.format ?? \"text\");\n const jsonStrict = opts.jsonStrict === true;\n const verbose = opts.verbose === true;\n assertOutputFlagCompatibility(format, jsonStrict, verbose);\n\n return {\n agent: stringOption(opts.agent),\n cwd: resolveCwdOption(opts.cwd),\n authPolicy: resolveAuthPolicy(opts.authPolicy, config),\n nonInteractivePermissions: resolveNonInteractivePermissions(\n opts.nonInteractivePermissions,\n config,\n ),\n permissionPolicy: resolvePermissionPolicyOption(opts),\n jsonStrict,\n suppressReads: opts.suppressReads === true,\n fs: resolveCapabilityOption(opts.fs),\n terminal: resolveTerminalOption(opts.terminal),\n timeout: resolveTimeoutOption(opts.timeout, config),\n ttl: resolveTtlOption(opts.ttl, config),\n verbose,\n format,\n model: resolveModelOption(opts.model),\n allowedTools: stringArrayOption(opts.allowedTools),\n maxTurns: numberOption(opts.maxTurns),\n systemPrompt: resolveSystemPromptFlag(opts),\n promptRetries: numberOption(opts.promptRetries),\n approveAll: opts.approveAll ? true : undefined,\n approveReads: opts.approveReads ? true : undefined,\n denyAll: opts.denyAll ? true : undefined,\n };\n}\n\nfunction resolveCwdOption(value: unknown): string {\n return stringOption(value) ?? process.cwd();\n}\n\nfunction resolveAuthPolicy(optsValue: unknown, config: ResolvedAcpxConfig): AuthPolicy {\n const value = stringOption(optsValue);\n return value === undefined ? config.authPolicy : parseAuthPolicy(value);\n}\n\nfunction resolveNonInteractivePermissions(\n optsValue: unknown,\n config: ResolvedAcpxConfig,\n): NonInteractivePermissionPolicy {\n const value = stringOption(optsValue);\n return value === undefined\n ? config.nonInteractivePermissions\n : parseNonInteractivePermissionPolicy(value);\n}\n\nfunction resolvePermissionPolicyOption(opts: Record<string, unknown>): string | undefined {\n const primary = stringOption(opts.permissionPolicy);\n const alias = stringOption(opts.policy);\n if (primary !== undefined && alias !== undefined && primary !== alias) {\n throw new InvalidArgumentError(\n \"Use only one permission policy flag: --permission-policy or --policy\",\n );\n }\n return primary ?? alias;\n}\n\nfunction resolveCapabilityOption(value: unknown): boolean | undefined {\n return value === false ? false : undefined;\n}\n\nfunction resolveTerminalOption(value: unknown): boolean | undefined {\n return resolveCapabilityOption(value);\n}\n\nfunction resolveTimeoutOption(value: unknown, config: ResolvedAcpxConfig): number | undefined {\n return numberOption(value) ?? config.timeoutMs;\n}\n\nfunction resolveTtlOption(value: unknown, config: ResolvedAcpxConfig): number {\n return numberOption(value) ?? config.ttlMs ?? DEFAULT_QUEUE_OWNER_TTL_MS;\n}\n\nfunction assertOutputFlagCompatibility(\n format: OutputFormat,\n jsonStrict: boolean,\n verbose: boolean,\n): void {\n if (jsonStrict && format !== \"json\") {\n throw new InvalidArgumentError(\"--json-strict requires --format json\");\n }\n\n if (jsonStrict && verbose) {\n throw new InvalidArgumentError(\"--json-strict cannot be combined with --verbose\");\n }\n}\n\nfunction resolveModelOption(value: unknown): string | undefined {\n const model = stringOption(value);\n return model === undefined ? undefined : parseNonEmptyValue(\"Model\", model);\n}\n\nexport function resolveOutputPolicy(format: OutputFormat, jsonStrict: boolean): OutputPolicy {\n return {\n format,\n jsonStrict,\n suppressReads: false,\n suppressNonJsonStderr: jsonStrict,\n queueErrorAlreadyEmitted: format !== \"quiet\",\n suppressSdkConsoleErrors: jsonStrict || format === \"quiet\",\n };\n}\n\nexport function resolveAgentInvocation(\n explicitAgentName: string | undefined,\n globalFlags: GlobalFlags,\n config: ResolvedAcpxConfig,\n): {\n agentName: string;\n agentCommand: string;\n agentArgv?: string[];\n cwd: string;\n} {\n const override = globalFlags.agent?.trim();\n if (override && explicitAgentName) {\n throw new InvalidArgumentError(\"Do not combine positional agent with --agent override\");\n }\n\n const agentName = explicitAgentName ?? config.defaultAgent ?? DEFAULT_AGENT_NAME;\n const command = resolveInvocationCommand(agentName, override, config);\n\n return {\n agentName,\n ...command,\n cwd: path.resolve(globalFlags.cwd),\n };\n}\n\nfunction resolveInvocationCommand(\n agentName: string,\n override: string | undefined,\n config: ResolvedAcpxConfig,\n): { agentCommand: string; agentArgv?: string[] } {\n if (override) {\n return { agentCommand: override };\n }\n const normalizedAgentName = normalizeAgentName(agentName);\n const configuredAgent =\n config.agents[normalizedAgentName] ?? config.agents[resolveCanonicalAgentName(agentName)];\n if (configuredAgent) {\n return {\n agentCommand: configuredAgent.command,\n ...(configuredAgent.argv ? { agentArgv: [...configuredAgent.argv] } : {}),\n };\n }\n const agentArgv = resolveAgentArgv(agentName);\n return {\n agentCommand: resolveAgentCommandFromRegistry(agentName),\n ...(agentArgv ? { agentArgv } : {}),\n };\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { d as createSessionWithClient, f as cancelSessionPrompt, o as runOnce, s as sendSessionDirect, t as createOutputFormatter } from "./output-
|
|
2
|
-
import {
|
|
1
|
+
import { d as createSessionWithClient, f as cancelSessionPrompt, o as runOnce, s as sendSessionDirect, t as createOutputFormatter } from "./output-CzN8vLdE.js";
|
|
2
|
+
import { $t as SESSION_RECORD_SCHEMA, At as withInterrupt, Dt as textPrompt, Et as promptToDisplayText, Ot as InterruptedError, Z as resolveSessionRecord, Zt as PERMISSION_MODES, _ as createSessionConversation, b as recordSessionUpdate, h as cloneSessionAcpxState, jt as withTimeout, kt as TimeoutError, pt as defaultSessionEventLog, v as recordClientOperation, y as recordPromptSubmission } from "./live-checkpoint-CBecfnSH.js";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import fs from "node:fs/promises";
|
|
5
5
|
import os from "node:os";
|
|
@@ -519,6 +519,7 @@ function createIsolatedSessionBinding(flowName, runId, attemptId, profile, agent
|
|
|
519
519
|
profile,
|
|
520
520
|
agentName: agent.agentName,
|
|
521
521
|
agentCommand: agent.agentCommand,
|
|
522
|
+
agentArgv: agent.agentArgv,
|
|
522
523
|
cwd: agent.cwd,
|
|
523
524
|
acpxRecordId: key,
|
|
524
525
|
acpSessionId: key
|
|
@@ -531,6 +532,7 @@ function createSyntheticSessionRecord(options) {
|
|
|
531
532
|
acpSessionId: options.binding.acpSessionId,
|
|
532
533
|
agentSessionId: options.binding.agentSessionId,
|
|
533
534
|
agentCommand: options.binding.agentCommand,
|
|
535
|
+
agentArgv: options.binding.agentArgv,
|
|
534
536
|
cwd: options.binding.cwd,
|
|
535
537
|
name: options.binding.name,
|
|
536
538
|
createdAt: options.createdAt,
|
|
@@ -1009,6 +1011,7 @@ var FlowRunner = class {
|
|
|
1009
1011
|
permissionPolicy;
|
|
1010
1012
|
authCredentials;
|
|
1011
1013
|
authPolicy;
|
|
1014
|
+
fs;
|
|
1012
1015
|
timeoutMs;
|
|
1013
1016
|
defaultNodeTimeoutMs;
|
|
1014
1017
|
verbose;
|
|
@@ -1026,6 +1029,7 @@ var FlowRunner = class {
|
|
|
1026
1029
|
this.permissionPolicy = options.permissionPolicy;
|
|
1027
1030
|
this.authCredentials = options.authCredentials;
|
|
1028
1031
|
this.authPolicy = options.authPolicy;
|
|
1032
|
+
this.fs = options.fs;
|
|
1029
1033
|
this.timeoutMs = options.timeoutMs;
|
|
1030
1034
|
this.defaultNodeTimeoutMs = options.defaultNodeTimeoutMs ?? options.timeoutMs ?? DEFAULT_FLOW_STEP_TIMEOUT_MS;
|
|
1031
1035
|
this.verbose = options.verbose;
|
|
@@ -1529,7 +1533,7 @@ var FlowRunner = class {
|
|
|
1529
1533
|
});
|
|
1530
1534
|
};
|
|
1531
1535
|
if (heartbeatMs > 0) timer = setInterval(() => {
|
|
1532
|
-
heartbeat();
|
|
1536
|
+
heartbeat().catch(() => {});
|
|
1533
1537
|
}, heartbeatMs);
|
|
1534
1538
|
try {
|
|
1535
1539
|
return await withTimeout(run(), timeoutMs);
|
|
@@ -1552,6 +1556,7 @@ var FlowRunner = class {
|
|
|
1552
1556
|
const name = createSessionName(flow.name, handle, agent.cwd, state.runId);
|
|
1553
1557
|
const created = await createSessionWithClient({
|
|
1554
1558
|
agentCommand: agent.agentCommand,
|
|
1559
|
+
agentArgv: agent.agentArgv,
|
|
1555
1560
|
cwd: agent.cwd,
|
|
1556
1561
|
name,
|
|
1557
1562
|
mcpServers: this.mcpServers,
|
|
@@ -1560,6 +1565,7 @@ var FlowRunner = class {
|
|
|
1560
1565
|
permissionPolicy: this.permissionPolicy,
|
|
1561
1566
|
authCredentials: this.authCredentials,
|
|
1562
1567
|
authPolicy: this.authPolicy,
|
|
1568
|
+
fs: this.fs,
|
|
1563
1569
|
timeoutMs,
|
|
1564
1570
|
verbose: this.verbose,
|
|
1565
1571
|
sessionOptions: this.sessionOptions
|
|
@@ -1572,6 +1578,7 @@ var FlowRunner = class {
|
|
|
1572
1578
|
profile: node.profile,
|
|
1573
1579
|
agentName: agent.agentName,
|
|
1574
1580
|
agentCommand: agent.agentCommand,
|
|
1581
|
+
agentArgv: agent.agentArgv,
|
|
1575
1582
|
cwd: agent.cwd,
|
|
1576
1583
|
acpxRecordId: created.record.acpxRecordId,
|
|
1577
1584
|
acpSessionId: created.record.acpSessionId,
|
|
@@ -1609,6 +1616,7 @@ var FlowRunner = class {
|
|
|
1609
1616
|
permissionPolicy: this.permissionPolicy,
|
|
1610
1617
|
authCredentials: this.authCredentials,
|
|
1611
1618
|
authPolicy: this.authPolicy,
|
|
1619
|
+
fs: this.fs,
|
|
1612
1620
|
outputFormatter: capture.formatter,
|
|
1613
1621
|
onAcpMessage: (direction, message) => {
|
|
1614
1622
|
const pending = this.store.appendSessionEvent(runDir, binding, direction, message).then((seq) => {
|
|
@@ -1665,6 +1673,7 @@ var FlowRunner = class {
|
|
|
1665
1673
|
const pendingEventWrites = [];
|
|
1666
1674
|
const result = await runOnce({
|
|
1667
1675
|
agentCommand: agent.agentCommand,
|
|
1676
|
+
agentArgv: agent.agentArgv,
|
|
1668
1677
|
cwd: agent.cwd,
|
|
1669
1678
|
prompt,
|
|
1670
1679
|
mcpServers: this.mcpServers,
|
|
@@ -1673,6 +1682,7 @@ var FlowRunner = class {
|
|
|
1673
1682
|
permissionPolicy: this.permissionPolicy,
|
|
1674
1683
|
authCredentials: this.authCredentials,
|
|
1675
1684
|
authPolicy: this.authPolicy,
|
|
1685
|
+
fs: this.fs,
|
|
1676
1686
|
outputFormatter: capture.formatter,
|
|
1677
1687
|
onAcpMessage: (direction, message) => {
|
|
1678
1688
|
const pending = this.store.appendSessionEvent(runDir, binding, direction, message).then((seq) => {
|
|
@@ -1917,4 +1927,4 @@ function formatDecisionPrompt(question, choices, field) {
|
|
|
1917
1927
|
//#endregion
|
|
1918
1928
|
export { parseStrictJsonObject as a, validateFlowDefinition as c, checkpoint as d, compute as f, isDefinedFlow as h, parseJsonObject as i, acp as l, shell as m, decisionEdge as n, FlowRunner as o, defineFlow as p, extractJsonObject as r, flowRunsBaseDir as s, decision as t, action as u };
|
|
1919
1929
|
|
|
1920
|
-
//# sourceMappingURL=flows-
|
|
1930
|
+
//# sourceMappingURL=flows-CYfjwbn2.js.map
|