acpx 0.12.1 → 0.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/README.md +64 -375
  2. package/dist/{cli-pKoIEH5O.js → cli-_7Sei6dD.js} +5 -4
  3. package/dist/cli-_7Sei6dD.js.map +1 -0
  4. package/dist/cli.d.ts +2 -2
  5. package/dist/cli.d.ts.map +1 -1
  6. package/dist/cli.js +72 -19
  7. package/dist/cli.js.map +1 -1
  8. package/dist/{client-CFo_9MIo.d.ts → client-CxNllqui.d.ts} +17 -3
  9. package/dist/client-CxNllqui.d.ts.map +1 -0
  10. package/dist/{flags-CjeFX5ki.js → flags-Ds6FzmHG.js} +36 -9
  11. package/dist/flags-Ds6FzmHG.js.map +1 -0
  12. package/dist/{flows-Cym6H3vg.js → flows-fzH0GKYF.js} +14 -4
  13. package/dist/flows-fzH0GKYF.js.map +1 -0
  14. package/dist/flows.d.ts +6 -2
  15. package/dist/flows.d.ts.map +1 -1
  16. package/dist/flows.js +1 -1
  17. package/dist/{live-checkpoint-DQp4JSHD.js → live-checkpoint-BSIrfgVo.js} +560 -196
  18. package/dist/live-checkpoint-BSIrfgVo.js.map +1 -0
  19. package/dist/{output-fNqTAsFQ.js → output-BZQE0gI1.js} +74 -11
  20. package/dist/output-BZQE0gI1.js.map +1 -0
  21. package/dist/runtime.d.ts +106 -19
  22. package/dist/runtime.d.ts.map +1 -1
  23. package/dist/runtime.js +631 -158
  24. package/dist/runtime.js.map +1 -1
  25. package/dist/{session-options-C4uYkKDy.d.ts → session-options-DwRDODlr.d.ts} +28 -3
  26. package/dist/session-options-DwRDODlr.d.ts.map +1 -0
  27. package/package.json +19 -19
  28. package/skills/acpx/SKILL.md +5 -2
  29. package/dist/cli-pKoIEH5O.js.map +0 -1
  30. package/dist/client-CFo_9MIo.d.ts.map +0 -1
  31. package/dist/flags-CjeFX5ki.js.map +0 -1
  32. package/dist/flows-Cym6H3vg.js.map +0 -1
  33. package/dist/live-checkpoint-DQp4JSHD.js.map +0 -1
  34. package/dist/output-fNqTAsFQ.js.map +0 -1
  35. package/dist/session-options-C4uYkKDy.d.ts.map +0 -1
@@ -1,11 +1,10 @@
1
- import { $ as getPerfMetricsSnapshot, B as absolutePath, C as mergeSessionOptions, Ct as promptToDisplayText, D as applyLifecycleSnapshotToRecord, Dt as withInterrupt, E as applyConversation, Et as TimeoutError, F as modelStateFromConfigOptions, Ft as isRetryablePromptError, G as listSessions, H as findSession, I as splitCommandLine, It as normalizeOutputError, J as pruneSessions, K as listSessionsForAgent, Lt as extractAcpError, N as assertRequestedModelSupported, Ot as withTimeout, Pt as formatErrorMessage, Q as formatPerfMetric, Qt as QueueProtocolError, S as advertisedModelState, T as sessionOptionsFromRecord, Tt as InterruptedError, U as findSessionByDirectoryWalk, Ut as OUTPUT_ERROR_CODES, V as findGitRepositoryRoot, W as isoNow, Wt as OUTPUT_ERROR_ORIGINS, X as writeSessionRecord, Y as resolveSessionRecord, Zt as QueueConnectionError, _ as createSessionConversation, _t as parseJsonRpcErrorMessage, a as applyRequestedModelIfAdvertised, at as startPerfTimer, b as recordSessionUpdate, bt as isPromptInput, c as setCurrentModelId, ct as normalizeRuntimeSessionId, d as setDesiredModelId, dt as sessionBaseDir, et as incrementPerfCounter, f as syncAdvertisedModelState, ft as sessionEventActivePath, g as cloneSessionConversation, gt as isAcpJsonRpcMessage, h as cloneSessionAcpxState, ht as extractSessionUpdateNotification, i as connectAndLoadSession, it as setPerfGauge, k as AcpClient, l as setDesiredConfigOption, m as applyConfigOptionsToState, mt as sessionEventSegmentPath, n as runPromptTurn, nt as recordPerfDuration, o as currentModelIdFromSetModelResponse, p as applyConfigOptionsToRecord, pt as sessionEventLockPath, q as normalizeName, r as withConnectedSession, rt as resetPerfMetrics, s as clearDesiredConfigOption, t as LiveSessionCheckpoint, tt as measurePerf, u as setDesiredModeId, ut as defaultSessionEventLog, v as recordClientOperation, vt as parsePromptStopReason, w as persistSessionOptions, wt as textPrompt, x as trimConversationForRuntime, y as recordPromptSubmission, zt as toAcpErrorPayload } from "./live-checkpoint-DQp4JSHD.js";
1
+ import { $ as writeSessionRecord, At as TimeoutError, Bt as formatErrorMessage, C as mergeSessionOptions, D as applyLifecycleSnapshotToRecord, Dt as promptToDisplayText, E as applyConversation, F as modelStateFromConfigOptions, G as findSession, Gt as toAcpErrorPayload, Ht as normalizeOutputError, J as listSessions, K as findSessionByDirectoryWalk, Mt as withTimeout, N as assertRequestedModelSupported, Ot as textPrompt, Q as resolveSessionRecord, R as runTimedExecFile, S as advertisedModelState, St as parsePromptStopReason, T as sessionOptionsFromRecord, U as absolutePath, Ut as extractAcpError, Vt as isRetryablePromptError, W as findGitRepositoryRoot, X as normalizeName, Xt as OUTPUT_ERROR_ORIGINS, Y as listSessionsForAgent, Yt as OUTPUT_ERROR_CODES, Z as pruneSessions, _ as createSessionConversation, _t as sessionEventLockPath, a as applyRequestedModelIfAdvertised, at as measurePerf, b as recordSessionUpdate, bt as isAcpJsonRpcMessage, c as setCurrentModelId, ct as setPerfGauge, d as setDesiredModelId, f as syncAdvertisedModelState, ft as normalizeRuntimeSessionId, g as cloneSessionConversation, gt as sessionEventActivePath, h as cloneSessionAcpxState, ht as sessionBaseDir, i as connectAndLoadSession, in as QueueProtocolError, it as incrementPerfCounter, jt as withInterrupt, k as AcpClient, kt as InterruptedError, l as setDesiredConfigOption, lt as startPerfTimer, m as applyConfigOptionsToState, mt as defaultSessionEventLog, n as runPromptTurn, nt as formatPerfMetric, o as currentModelIdFromSetModelResponse, ot as recordPerfDuration, p as applyConfigOptionsToRecord, q as isoNow, r as withConnectedSession, rn as QueueConnectionError, rt as getPerfMetricsSnapshot, s as clearDesiredConfigOption, st as resetPerfMetrics, t as LiveSessionCheckpoint, u as setDesiredModeId, v as recordClientOperation, vt as sessionEventSegmentPath, w as persistSessionOptions, wt as isPromptInput, x as trimConversationForRuntime, xt as parseJsonRpcErrorMessage, y as recordPromptSubmission, yt as extractSessionUpdateNotification, z as splitCommandLine } from "./live-checkpoint-BSIrfgVo.js";
2
2
  import fs, { mkdtempSync, realpathSync, writeFileSync } from "node:fs";
3
3
  import path from "node:path";
4
4
  import fs$1 from "node:fs/promises";
5
5
  import os from "node:os";
6
6
  import { createHash, randomInt, randomUUID } from "node:crypto";
7
- import { execFile, spawn } from "node:child_process";
8
- import { promisify } from "node:util";
7
+ import { spawn } from "node:child_process";
9
8
  import net from "node:net";
10
9
  //#region \0rolldown/runtime.js
11
10
  var __defProp = Object.defineProperty;
@@ -1611,6 +1610,7 @@ function buildDirectConnectedSessionOptions(options, run) {
1611
1610
  nonInteractivePermissions: options.nonInteractivePermissions,
1612
1611
  authCredentials: options.authCredentials,
1613
1612
  authPolicy: options.authPolicy,
1613
+ fs: options.fs,
1614
1614
  terminal: options.terminal,
1615
1615
  timeoutMs: options.timeoutMs,
1616
1616
  verbose: options.verbose,
@@ -1628,8 +1628,45 @@ function toSessionMutationResult(result) {
1628
1628
  loadError: result.loadError
1629
1629
  };
1630
1630
  }
1631
+ /**
1632
+ * Re-apply the session-pinned model after reconnect, matching the prompt path.
1633
+ *
1634
+ * Some agents (e.g. opencode) restore to their default model on session load and
1635
+ * advertise model-dependent config options for that default. Without replaying
1636
+ * `session_options.model` first, `set` fails because the option set belongs to
1637
+ * the wrong model, and the record is overwritten with default-model options.
1638
+ */
1639
+ async function reapplyPinnedModelAfterConnect(params) {
1640
+ const pinnedModel = sessionOptionsFromRecord(params.record)?.model;
1641
+ if (!pinnedModel) return;
1642
+ const models = advertisedModelState(params.record.acpx);
1643
+ if (models?.currentModelId === pinnedModel) {
1644
+ setDesiredModelId(params.record, pinnedModel, models.configId);
1645
+ setCurrentModelId(params.record, pinnedModel);
1646
+ return;
1647
+ }
1648
+ const result = await applyRequestedModelIfAdvertised({
1649
+ client: params.client,
1650
+ sessionId: params.sessionId,
1651
+ requestedModel: pinnedModel,
1652
+ models,
1653
+ agentCommand: params.record.agentCommand,
1654
+ timeoutMs: params.timeoutMs
1655
+ });
1656
+ if (result.response) applyConfigOptionsToRecord(params.record, result.response);
1657
+ if (result.applied) {
1658
+ setDesiredModelId(params.record, pinnedModel, models?.configId);
1659
+ setCurrentModelId(params.record, currentModelIdFromSetModelResponse(result.response, pinnedModel));
1660
+ }
1661
+ }
1631
1662
  async function runSessionSetModeDirect(options) {
1632
1663
  return toSessionMutationResult(await withConnectedSession(buildDirectConnectedSessionOptions(options, async ({ client, sessionId, record }) => {
1664
+ await reapplyPinnedModelAfterConnect({
1665
+ client,
1666
+ sessionId,
1667
+ record,
1668
+ timeoutMs: options.timeoutMs
1669
+ });
1633
1670
  await withTimeout(client.setSessionMode(sessionId, options.modeId), options.timeoutMs);
1634
1671
  setDesiredModeId(record, options.modeId);
1635
1672
  })));
@@ -1651,6 +1688,12 @@ async function runSessionSetModelDirect(options) {
1651
1688
  async function runSessionSetConfigOptionDirect(options) {
1652
1689
  const result = await withConnectedSession(buildDirectConnectedSessionOptions(options, async ({ client, sessionId, record }) => {
1653
1690
  const modelConfigId = advertisedModelState(record.acpx)?.configId;
1691
+ if (options.configId !== modelConfigId) await reapplyPinnedModelAfterConnect({
1692
+ client,
1693
+ sessionId,
1694
+ record,
1695
+ timeoutMs: options.timeoutMs
1696
+ });
1654
1697
  const response = await withTimeout(client.setSessionConfigOption(sessionId, options.configId, options.value), options.timeoutMs);
1655
1698
  applyConfigOptionsToRecord(record, response);
1656
1699
  if (options.configId === modelConfigId) {
@@ -1669,7 +1712,6 @@ async function runSessionSetConfigOptionDirect(options) {
1669
1712
  }
1670
1713
  //#endregion
1671
1714
  //#region src/cli/session/session-control.ts
1672
- const execFileAsync = promisify(execFile);
1673
1715
  async function cancelSessionPrompt(options) {
1674
1716
  const cancelled = await tryCancelOnRunningOwner(options);
1675
1717
  return {
@@ -1694,6 +1736,7 @@ async function setSessionMode(options) {
1694
1736
  nonInteractivePermissions: options.nonInteractivePermissions,
1695
1737
  authCredentials: options.authCredentials,
1696
1738
  authPolicy: options.authPolicy,
1739
+ fs: options.fs,
1697
1740
  terminal: options.terminal,
1698
1741
  timeoutMs: options.timeoutMs,
1699
1742
  verbose: options.verbose
@@ -1720,6 +1763,7 @@ async function setSessionModel(options) {
1720
1763
  nonInteractivePermissions: options.nonInteractivePermissions,
1721
1764
  authCredentials: options.authCredentials,
1722
1765
  authPolicy: options.authPolicy,
1766
+ fs: options.fs,
1723
1767
  terminal: options.terminal,
1724
1768
  timeoutMs: options.timeoutMs,
1725
1769
  verbose: options.verbose
@@ -1751,6 +1795,7 @@ async function setSessionConfigOption(options) {
1751
1795
  nonInteractivePermissions: options.nonInteractivePermissions,
1752
1796
  authCredentials: options.authCredentials,
1753
1797
  authPolicy: options.authPolicy,
1798
+ fs: options.fs,
1754
1799
  terminal: options.terminal,
1755
1800
  timeoutMs: options.timeoutMs,
1756
1801
  verbose: options.verbose
@@ -1786,26 +1831,24 @@ async function readProcCmdline(pid) {
1786
1831
  }
1787
1832
  async function readPosixCommandLine(pid) {
1788
1833
  try {
1789
- const { stdout } = await execFileAsync("ps", [
1834
+ return (await runTimedExecFile("ps", [
1790
1835
  "-p",
1791
1836
  String(pid),
1792
1837
  "-o",
1793
1838
  "command="
1794
- ]);
1795
- return stdout.trim() || void 0;
1839
+ ])).trim() || void 0;
1796
1840
  } catch {
1797
1841
  return;
1798
1842
  }
1799
1843
  }
1800
1844
  async function readWindowsCommandLine(pid) {
1801
1845
  try {
1802
- const { stdout } = await execFileAsync("powershell.exe", [
1846
+ return (await runTimedExecFile("powershell.exe", [
1803
1847
  "-NoProfile",
1804
1848
  "-NonInteractive",
1805
1849
  "-Command",
1806
1850
  `(Get-CimInstance Win32_Process -Filter "ProcessId = ${pid}").CommandLine`
1807
- ], { windowsHide: true });
1808
- return stdout.trim() || void 0;
1851
+ ], { windowsHide: true })).trim() || void 0;
1809
1852
  } catch {
1810
1853
  return;
1811
1854
  }
@@ -1849,6 +1892,7 @@ async function createSessionRecordWithClient(client, options) {
1849
1892
  acpSessionId: sessionId,
1850
1893
  agentSessionId,
1851
1894
  agentCommand: options.agentCommand,
1895
+ agentArgv: options.agentArgv,
1852
1896
  cwd,
1853
1897
  name: normalizeName(options.name),
1854
1898
  createdAt: now,
@@ -1927,6 +1971,7 @@ async function resumeSessionRecordWithClient(client, options, cwd) {
1927
1971
  async function createSessionWithClient(options) {
1928
1972
  const client = new AcpClient({
1929
1973
  agentCommand: options.agentCommand,
1974
+ agentArgv: options.agentArgv,
1930
1975
  cwd: absolutePath(options.cwd),
1931
1976
  mcpServers: options.mcpServers,
1932
1977
  permissionMode: options.permissionMode,
@@ -1934,6 +1979,7 @@ async function createSessionWithClient(options) {
1934
1979
  permissionPolicy: options.permissionPolicy,
1935
1980
  authCredentials: options.authCredentials,
1936
1981
  authPolicy: options.authPolicy,
1982
+ fs: options.fs,
1937
1983
  terminal: options.terminal,
1938
1984
  verbose: options.verbose,
1939
1985
  sessionOptions: options.sessionOptions
@@ -1963,6 +2009,7 @@ async function createSession(options) {
1963
2009
  async function listAgentSessions(options) {
1964
2010
  const client = new AcpClient({
1965
2011
  agentCommand: options.agentCommand,
2012
+ agentArgv: options.agentArgv,
1966
2013
  cwd: absolutePath(options.cwd),
1967
2014
  mcpServers: options.mcpServers,
1968
2015
  permissionMode: options.permissionMode,
@@ -1970,6 +2017,7 @@ async function listAgentSessions(options) {
1970
2017
  permissionPolicy: options.permissionPolicy,
1971
2018
  authCredentials: options.authCredentials,
1972
2019
  authPolicy: options.authPolicy,
2020
+ fs: options.fs,
1973
2021
  terminal: options.terminal,
1974
2022
  verbose: options.verbose
1975
2023
  });
@@ -2017,6 +2065,7 @@ async function ensureSession(options) {
2017
2065
  nonInteractivePermissions: options.nonInteractivePermissions,
2018
2066
  authCredentials: options.authCredentials,
2019
2067
  authPolicy: options.authPolicy,
2068
+ fs: options.fs,
2020
2069
  terminal: options.terminal,
2021
2070
  timeoutMs: options.timeoutMs,
2022
2071
  verbose: options.verbose
@@ -2031,6 +2080,7 @@ async function ensureSession(options) {
2031
2080
  return {
2032
2081
  record: await createSession({
2033
2082
  agentCommand: options.agentCommand,
2083
+ agentArgv: options.agentArgv,
2034
2084
  cwd,
2035
2085
  name: options.name,
2036
2086
  resumeSessionId: options.resumeSessionId,
@@ -2040,6 +2090,7 @@ async function ensureSession(options) {
2040
2090
  permissionPolicy: options.permissionPolicy,
2041
2091
  authCredentials: options.authCredentials,
2042
2092
  authPolicy: options.authPolicy,
2093
+ fs: options.fs,
2043
2094
  terminal: options.terminal,
2044
2095
  timeoutMs: options.timeoutMs,
2045
2096
  verbose: options.verbose,
@@ -2301,6 +2352,7 @@ function queueOwnerRuntimeOptionsFromSend(options) {
2301
2352
  nonInteractivePermissions: options.nonInteractivePermissions,
2302
2353
  authCredentials: options.authCredentials,
2303
2354
  authPolicy: options.authPolicy,
2355
+ fs: options.fs,
2304
2356
  terminal: options.terminal,
2305
2357
  suppressSdkConsoleErrors: options.suppressSdkConsoleErrors,
2306
2358
  verbose: options.verbose,
@@ -2966,6 +3018,7 @@ async function runSessionPrompt(options) {
2966
3018
  const ownClient = options.client == null;
2967
3019
  const client = options.client ?? new AcpClient({
2968
3020
  agentCommand: record.agentCommand,
3021
+ agentArgv: record.agentArgv,
2969
3022
  cwd: absolutePath(record.cwd),
2970
3023
  mcpServers: options.mcpServers,
2971
3024
  permissionMode: options.permissionMode,
@@ -2973,6 +3026,7 @@ async function runSessionPrompt(options) {
2973
3026
  permissionPolicy: options.permissionPolicy,
2974
3027
  authCredentials: options.authCredentials,
2975
3028
  authPolicy: options.authPolicy,
3029
+ fs: options.fs,
2976
3030
  terminal: options.terminal,
2977
3031
  suppressSdkConsoleErrors: options.suppressSdkConsoleErrors,
2978
3032
  verbose: options.verbose,
@@ -2982,6 +3036,7 @@ async function runSessionPrompt(options) {
2982
3036
  permissionMode: options.permissionMode,
2983
3037
  nonInteractivePermissions: options.nonInteractivePermissions,
2984
3038
  permissionPolicy: options.permissionPolicy,
3039
+ fs: options.fs,
2985
3040
  terminal: options.terminal,
2986
3041
  suppressSdkConsoleErrors: options.suppressSdkConsoleErrors,
2987
3042
  verbose: options.verbose
@@ -3244,6 +3299,7 @@ async function runOnce(options) {
3244
3299
  const acpErrors = new AcpErrorTracker();
3245
3300
  const client = new AcpClient({
3246
3301
  agentCommand: options.agentCommand,
3302
+ agentArgv: options.agentArgv,
3247
3303
  cwd: absolutePath(options.cwd),
3248
3304
  mcpServers: options.mcpServers,
3249
3305
  permissionMode: options.permissionMode,
@@ -3251,6 +3307,7 @@ async function runOnce(options) {
3251
3307
  permissionPolicy: options.permissionPolicy,
3252
3308
  authCredentials: options.authCredentials,
3253
3309
  authPolicy: options.authPolicy,
3310
+ fs: options.fs,
3254
3311
  terminal: options.terminal,
3255
3312
  suppressSdkConsoleErrors: options.suppressSdkConsoleErrors,
3256
3313
  verbose: options.verbose,
@@ -3339,6 +3396,7 @@ async function sendSessionDirect(options) {
3339
3396
  permissionPolicy: options.permissionPolicy,
3340
3397
  authCredentials: options.authCredentials,
3341
3398
  authPolicy: options.authPolicy,
3399
+ fs: options.fs,
3342
3400
  terminal: options.terminal,
3343
3401
  outputFormatter: options.outputFormatter,
3344
3402
  errorEmissionPolicy: options.errorEmissionPolicy,
@@ -3381,12 +3439,14 @@ async function submitToRunningOwner(options, waitForCompletion, extras) {
3381
3439
  function createQueueOwnerSharedClient(options, sessionRecord) {
3382
3440
  return new AcpClient({
3383
3441
  agentCommand: sessionRecord.agentCommand,
3442
+ agentArgv: sessionRecord.agentArgv,
3384
3443
  cwd: absolutePath(sessionRecord.cwd),
3385
3444
  mcpServers: options.mcpServers,
3386
3445
  permissionMode: options.permissionMode,
3387
3446
  nonInteractivePermissions: options.nonInteractivePermissions,
3388
3447
  authCredentials: options.authCredentials,
3389
3448
  authPolicy: options.authPolicy,
3449
+ fs: options.fs,
3390
3450
  terminal: options.terminal,
3391
3451
  suppressSdkConsoleErrors: options.suppressSdkConsoleErrors,
3392
3452
  verbose: options.verbose,
@@ -3404,6 +3464,7 @@ function createQueueOwnerTurnController(options) {
3404
3464
  nonInteractivePermissions: options.nonInteractivePermissions,
3405
3465
  authCredentials: options.authCredentials,
3406
3466
  authPolicy: options.authPolicy,
3467
+ fs: options.fs,
3407
3468
  terminal: options.terminal,
3408
3469
  timeoutMs,
3409
3470
  verbose: options.verbose
@@ -3417,6 +3478,7 @@ function createQueueOwnerTurnController(options) {
3417
3478
  nonInteractivePermissions: options.nonInteractivePermissions,
3418
3479
  authCredentials: options.authCredentials,
3419
3480
  authPolicy: options.authPolicy,
3481
+ fs: options.fs,
3420
3482
  terminal: options.terminal,
3421
3483
  timeoutMs,
3422
3484
  verbose: options.verbose
@@ -3431,6 +3493,7 @@ function createQueueOwnerTurnController(options) {
3431
3493
  nonInteractivePermissions: options.nonInteractivePermissions,
3432
3494
  authCredentials: options.authCredentials,
3433
3495
  authPolicy: options.authPolicy,
3496
+ fs: options.fs,
3434
3497
  terminal: options.terminal,
3435
3498
  timeoutMs,
3436
3499
  verbose: options.verbose
@@ -4698,4 +4761,4 @@ function createOutputFormatter(format, options = {}) {
4698
4761
  //#endregion
4699
4762
  export { runSessionQueueOwner as a, buildQueueOwnerArgOverride as c, createSessionWithClient as d, cancelSessionPrompt as f, __exportAll as g, isProcessAlive as h, session_exports as i, flushPerfMetricsCapture as l, DEFAULT_QUEUE_OWNER_TTL_MS as m, getTextErrorRemediationHints as n, runOnce as o, probeQueueOwnerHealth as p, output_exports as r, sendSessionDirect as s, createOutputFormatter as t, installPerfMetricsCapture as u };
4700
4763
 
4701
- //# sourceMappingURL=output-fNqTAsFQ.js.map
4764
+ //# sourceMappingURL=output-BZQE0gI1.js.map