@wrongstack/acp 0.284.1 → 0.286.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.
Files changed (71) hide show
  1. package/dist/agent/index.d.ts +13 -0
  2. package/dist/agent/index.d.ts.map +1 -0
  3. package/dist/{wrongstack-acp-agent-nzrqmJnc.d.ts → agent/protocol-handler.d.ts} +26 -75
  4. package/dist/agent/protocol-handler.d.ts.map +1 -0
  5. package/dist/{server-agent-turn-C3U0lhA-.d.ts → agent/server-agent-turn.d.ts} +8 -63
  6. package/dist/agent/server-agent-turn.d.ts.map +1 -0
  7. package/dist/agent/session-store.d.ts +53 -0
  8. package/dist/agent/session-store.d.ts.map +1 -0
  9. package/dist/agent/stdio-transport.d.ts +82 -0
  10. package/dist/agent/stdio-transport.d.ts.map +1 -0
  11. package/dist/{tools-registry-D2xdbzN7.d.ts → agent/tools-registry.d.ts} +4 -7
  12. package/dist/agent/tools-registry.d.ts.map +1 -0
  13. package/dist/agent/wrongstack-acp-agent.d.ts +58 -0
  14. package/dist/agent/wrongstack-acp-agent.d.ts.map +1 -0
  15. package/dist/agent/ws-bridge-transport.d.ts +37 -0
  16. package/dist/agent/ws-bridge-transport.d.ts.map +1 -0
  17. package/dist/agent.d.ts +1 -45
  18. package/dist/agent.js +21 -11
  19. package/dist/agent.js.map +7 -1
  20. package/dist/client/acp-session.d.ts +349 -0
  21. package/dist/client/acp-session.d.ts.map +1 -0
  22. package/dist/client/file-server.d.ts +44 -0
  23. package/dist/client/file-server.d.ts.map +1 -0
  24. package/dist/client/index.d.ts +12 -0
  25. package/dist/client/index.d.ts.map +1 -0
  26. package/dist/client/permission.d.ts +45 -0
  27. package/dist/client/permission.d.ts.map +1 -0
  28. package/dist/client/terminal-server.d.ts +54 -0
  29. package/dist/client/terminal-server.d.ts.map +1 -0
  30. package/dist/{index-DEEYyEpu.d.ts → client/tool-translator.d.ts} +17 -8
  31. package/dist/client/tool-translator.d.ts.map +1 -0
  32. package/dist/client/websocket-transport.d.ts +40 -0
  33. package/dist/client/websocket-transport.d.ts.map +1 -0
  34. package/dist/client.d.ts +1 -5
  35. package/dist/client.js +36 -17
  36. package/dist/client.js.map +7 -1
  37. package/dist/index.d.ts +43 -457
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +126 -67
  40. package/dist/index.js.map +7 -1
  41. package/dist/integration/acp-bench.d.ts +68 -0
  42. package/dist/integration/acp-bench.d.ts.map +1 -0
  43. package/dist/integration/acp-subagent-runner.d.ts +194 -0
  44. package/dist/integration/acp-subagent-runner.d.ts.map +1 -0
  45. package/dist/integration/ensemble-runner.d.ts +147 -0
  46. package/dist/integration/ensemble-runner.d.ts.map +1 -0
  47. package/dist/integration/run-one-acp-task.d.ts +29 -0
  48. package/dist/integration/run-one-acp-task.d.ts.map +1 -0
  49. package/dist/registry/acp-registry-fetch.d.ts +86 -0
  50. package/dist/registry/acp-registry-fetch.d.ts.map +1 -0
  51. package/dist/registry/agents.catalog.d.ts +46 -0
  52. package/dist/registry/agents.catalog.d.ts.map +1 -0
  53. package/dist/registry/ensemble-registry.d.ts +104 -0
  54. package/dist/registry/ensemble-registry.d.ts.map +1 -0
  55. package/dist/sdk.d.ts +41 -12
  56. package/dist/sdk.d.ts.map +1 -0
  57. package/dist/sdk.js +142 -72
  58. package/dist/sdk.js.map +7 -1
  59. package/dist/types/acp-messages.d.ts +133 -0
  60. package/dist/types/acp-messages.d.ts.map +1 -0
  61. package/dist/types/acp-v1.d.ts +476 -0
  62. package/dist/types/acp-v1.d.ts.map +1 -0
  63. package/dist/win32-cmd.d.ts +7 -0
  64. package/dist/win32-cmd.d.ts.map +1 -0
  65. package/dist/wrongstack-acp-agent.d.ts +1 -3
  66. package/dist/wrongstack-acp-agent.js +11 -9
  67. package/dist/wrongstack-acp-agent.js.map +7 -1
  68. package/package.json +4 -4
  69. package/dist/acp-subagent-runner-BAlo23L-.d.ts +0 -644
  70. package/dist/acp-v1-BxskPsdo.d.ts +0 -520
  71. package/dist/terminal-server-P9KpMZTT.d.ts +0 -99
package/dist/index.js CHANGED
@@ -1,12 +1,5 @@
1
- import { writeErr, expectDefined } from '@wrongstack/core';
2
- import { fileURLToPath } from 'url';
3
- import { createServer } from 'http';
4
- import { SubagentBudget } from '@wrongstack/core/coordination';
5
- import * as fsp from 'fs/promises';
6
- import * as path from 'path';
7
- import { spawn } from 'child_process';
8
-
9
1
  // src/agent/stdio-transport.ts
2
+ import { expectDefined, writeErr } from "@wrongstack/core";
10
3
 
11
4
  // src/win32-cmd.ts
12
5
  var WIN32_CMD_META = /[&|<>"\r\n\0]/;
@@ -138,9 +131,9 @@ var ClientTransport = class {
138
131
  async start() {
139
132
  if (this.child) return;
140
133
  const [{ spawn: spawn3 }, { buildChildEnv }, os] = await Promise.all([
141
- import('child_process'),
142
- import('@wrongstack/core'),
143
- import('os')
134
+ import("node:child_process"),
135
+ import("@wrongstack/core"),
136
+ import("node:os")
144
137
  ]);
145
138
  return new Promise((resolve3, reject) => {
146
139
  const timeout = setTimeout(() => {
@@ -1084,6 +1077,11 @@ function errorToJsonRpc(err) {
1084
1077
  const message = err instanceof Error ? err.message : String(err);
1085
1078
  return { code: -32603, message };
1086
1079
  }
1080
+
1081
+ // src/agent/wrongstack-acp-agent.ts
1082
+ import { fileURLToPath } from "node:url";
1083
+ import { createServer } from "node:http";
1084
+ import { writeErr as writeErr2 } from "@wrongstack/core";
1087
1085
  var WrongStackACPServer = class {
1088
1086
  transport;
1089
1087
  handler;
@@ -1190,7 +1188,7 @@ var WrongStackACPServer = class {
1190
1188
  });
1191
1189
  return new Promise((resolve3) => {
1192
1190
  this.httpServer.listen(port, host, () => {
1193
- writeErr(`[wstack-acp] HTTP server listening on http://${host}:${port}
1191
+ writeErr2(`[wstack-acp] HTTP server listening on http://${host}:${port}
1194
1192
  `);
1195
1193
  this.running = true;
1196
1194
  resolve3();
@@ -1217,7 +1215,7 @@ async function main() {
1217
1215
  var isEntrypoint = process.argv[1] !== void 0 && fileURLToPath(import.meta.url) === process.argv[1];
1218
1216
  if (isEntrypoint) {
1219
1217
  main().catch((err) => {
1220
- writeErr(`[wstack-acp fatal] ${err}
1218
+ writeErr2(`[wstack-acp fatal] ${err}
1221
1219
  `);
1222
1220
  process.exit(1);
1223
1221
  });
@@ -1331,6 +1329,9 @@ var WebSocketClientTransport = class {
1331
1329
  }
1332
1330
  }
1333
1331
  };
1332
+
1333
+ // src/client/tool-translator.ts
1334
+ import { expectDefined as expectDefined2 } from "@wrongstack/core";
1334
1335
  var DEFAULT_OPTIONS = {
1335
1336
  asyncTools: true,
1336
1337
  pollIntervalMs: 500,
@@ -1352,7 +1353,7 @@ var ToolTranslator = class {
1352
1353
  const pending = this.pending.get(msg.id);
1353
1354
  if (pending) {
1354
1355
  clearTimeout(pending.timeout);
1355
- this.pending.delete(expectDefined(msg.id));
1356
+ this.pending.delete(expectDefined2(msg.id));
1356
1357
  pending.resolve(msg);
1357
1358
  }
1358
1359
  }
@@ -1360,7 +1361,7 @@ var ToolTranslator = class {
1360
1361
  const pending = this.pending.get(msg.id);
1361
1362
  if (pending) {
1362
1363
  clearTimeout(pending.timeout);
1363
- this.pending.delete(expectDefined(msg.id));
1364
+ this.pending.delete(expectDefined2(msg.id));
1364
1365
  pending.reject(new Error("Call cancelled by client"));
1365
1366
  }
1366
1367
  }
@@ -1393,6 +1394,10 @@ var ToolTranslator = class {
1393
1394
  this.pending.clear();
1394
1395
  }
1395
1396
  };
1397
+
1398
+ // src/client/file-server.ts
1399
+ import * as fsp from "node:fs/promises";
1400
+ import * as path from "node:path";
1396
1401
  var FsError = class extends Error {
1397
1402
  code;
1398
1403
  path;
@@ -1536,6 +1541,10 @@ function makePermissionPolicy(decide) {
1536
1541
  return allow ? pickAllow(req.options) : pickReject(req.options);
1537
1542
  };
1538
1543
  }
1544
+
1545
+ // src/client/terminal-server.ts
1546
+ import { spawn } from "node:child_process";
1547
+ import * as path2 from "node:path";
1539
1548
  var TerminalServer = class {
1540
1549
  terminals = /* @__PURE__ */ new Map();
1541
1550
  projectRoot;
@@ -1543,7 +1552,7 @@ var TerminalServer = class {
1543
1552
  outputByteLimit;
1544
1553
  nextId = 1;
1545
1554
  constructor(opts) {
1546
- this.projectRoot = path.resolve(opts.projectRoot);
1555
+ this.projectRoot = path2.resolve(opts.projectRoot);
1547
1556
  this.commandTimeoutMs = opts.commandTimeoutMs ?? 5 * 6e4;
1548
1557
  this.outputByteLimit = opts.outputByteLimit ?? 1024 * 1024;
1549
1558
  if (opts.signal) {
@@ -1679,8 +1688,8 @@ var TerminalServer = class {
1679
1688
  }
1680
1689
  resolveCwd(cwd) {
1681
1690
  if (!cwd) return this.projectRoot;
1682
- const resolved = path.resolve(cwd);
1683
- const rootWithSep = this.projectRoot.endsWith(path.sep) ? this.projectRoot : this.projectRoot + path.sep;
1691
+ const resolved = path2.resolve(cwd);
1692
+ const rootWithSep = this.projectRoot.endsWith(path2.sep) ? this.projectRoot : this.projectRoot + path2.sep;
1684
1693
  if (resolved !== this.projectRoot && !resolved.startsWith(rootWithSep)) {
1685
1694
  return this.projectRoot;
1686
1695
  }
@@ -2891,6 +2900,50 @@ function findAgentDescriptor(id) {
2891
2900
  return AGENTS_CATALOG.find((a) => a.id === id);
2892
2901
  }
2893
2902
 
2903
+ // src/integration/run-one-acp-task.ts
2904
+ import { SubagentBudget } from "@wrongstack/core/coordination";
2905
+ async function runOneAcpTask(opts) {
2906
+ const role = opts.role ?? "acp";
2907
+ const timeoutMs = opts.timeoutMs ?? 5 * 6e4;
2908
+ const { runner, stop } = await makeACPSubagentRunnerWithStop({
2909
+ command: opts.command,
2910
+ ...opts.args !== void 0 ? { args: opts.args } : {},
2911
+ ...opts.env !== void 0 ? { env: opts.env } : {},
2912
+ ...opts.cwd !== void 0 ? { cwd: opts.cwd } : {},
2913
+ ...opts.projectRoot !== void 0 ? { projectRoot: opts.projectRoot } : {},
2914
+ role,
2915
+ timeoutMs,
2916
+ ...opts.onProgress !== void 0 ? { onProgress: opts.onProgress } : {},
2917
+ ...opts.permissionPolicy !== void 0 ? { permissionPolicy: opts.permissionPolicy } : {}
2918
+ });
2919
+ try {
2920
+ const budget = new SubagentBudget({
2921
+ timeoutMs,
2922
+ maxIterations: 2e3,
2923
+ maxToolCalls: 5e3
2924
+ });
2925
+ budget.start();
2926
+ const ctx = {
2927
+ subagentId: role,
2928
+ config: { id: role, name: role, role, provider: "acp", prompt: "" },
2929
+ budget,
2930
+ signal: opts.signal ?? new AbortController().signal,
2931
+ bridge: null
2932
+ };
2933
+ const result = await runner({ id: `acp-${role}`, description: opts.task }, ctx);
2934
+ return {
2935
+ result: result.result == null ? "" : String(result.result),
2936
+ iterations: result.iterations,
2937
+ toolCalls: result.toolCalls
2938
+ };
2939
+ } finally {
2940
+ try {
2941
+ await stop();
2942
+ } catch {
2943
+ }
2944
+ }
2945
+ }
2946
+
2894
2947
  // src/integration/acp-subagent-runner.ts
2895
2948
  var ACP_AGENT_COMMANDS = {
2896
2949
  cline: {
@@ -3094,47 +3147,6 @@ function resolveAcpAgentCommand(id, overrides, live) {
3094
3147
  if (fromMap) return fromMap;
3095
3148
  return null;
3096
3149
  }
3097
- async function runOneAcpTask(opts) {
3098
- const role = opts.role ?? "acp";
3099
- const timeoutMs = opts.timeoutMs ?? 5 * 6e4;
3100
- const { runner, stop } = await makeACPSubagentRunnerWithStop({
3101
- command: opts.command,
3102
- ...opts.args !== void 0 ? { args: opts.args } : {},
3103
- ...opts.env !== void 0 ? { env: opts.env } : {},
3104
- ...opts.cwd !== void 0 ? { cwd: opts.cwd } : {},
3105
- ...opts.projectRoot !== void 0 ? { projectRoot: opts.projectRoot } : {},
3106
- role,
3107
- timeoutMs,
3108
- ...opts.onProgress !== void 0 ? { onProgress: opts.onProgress } : {},
3109
- ...opts.permissionPolicy !== void 0 ? { permissionPolicy: opts.permissionPolicy } : {}
3110
- });
3111
- try {
3112
- const budget = new SubagentBudget({
3113
- timeoutMs,
3114
- maxIterations: 2e3,
3115
- maxToolCalls: 5e3
3116
- });
3117
- budget.start();
3118
- const ctx = {
3119
- subagentId: role,
3120
- config: { id: role, name: role, role, provider: "acp", prompt: "" },
3121
- budget,
3122
- signal: opts.signal ?? new AbortController().signal,
3123
- bridge: null
3124
- };
3125
- const result = await runner({ id: `acp-${role}`, description: opts.task }, ctx);
3126
- return {
3127
- result: result.result == null ? "" : String(result.result),
3128
- iterations: result.iterations,
3129
- toolCalls: result.toolCalls
3130
- };
3131
- } finally {
3132
- try {
3133
- await stop();
3134
- } catch {
3135
- }
3136
- }
3137
- }
3138
3150
  async function probeAcpAgent(idOrCmd, opts) {
3139
3151
  const id = typeof idOrCmd === "string" ? idOrCmd : idOrCmd.role ?? idOrCmd.command;
3140
3152
  const cmd = typeof idOrCmd === "string" ? resolveAcpAgentCommand(idOrCmd, opts?.overrides, opts?.live) : idOrCmd;
@@ -3230,6 +3242,9 @@ async function probeAcpAgents(opts) {
3230
3242
  await runPhase(pkg, 2, pkgTimeout);
3231
3243
  return ids.map((id) => byId.get(id) ?? { id, ok: false, ms: 0, error: "not probed" });
3232
3244
  }
3245
+
3246
+ // src/registry/ensemble-registry.ts
3247
+ import { spawn as spawn2 } from "node:child_process";
3233
3248
  var PROBE_TIMEOUT_MS = 5e3;
3234
3249
  var PROBE_CACHE_MS = 5e3;
3235
3250
  var MAX_PARALLEL_PROBES = 4;
@@ -3272,7 +3287,7 @@ async function defaultProbe(desc, timeoutMs) {
3272
3287
  try {
3273
3288
  const probeArgs = [...desc.probe.args ?? []];
3274
3289
  const shim = process.platform === "win32" ? buildWin32CmdShimInvocation(desc.probe.command, probeArgs) : null;
3275
- child = spawn(shim?.command ?? desc.probe.command, shim?.args ?? probeArgs, {
3290
+ child = spawn2(shim?.command ?? desc.probe.command, shim?.args ?? probeArgs, {
3276
3291
  stdio: ["ignore", "pipe", "pipe"],
3277
3292
  windowsHide: true,
3278
3293
  ...shim ? { windowsVerbatimArguments: shim.windowsVerbatimArguments } : {}
@@ -3475,6 +3490,9 @@ async function fetchAcpRegistry(opts = {}) {
3475
3490
  opts.signal?.removeEventListener("abort", onParentAbort);
3476
3491
  }
3477
3492
  }
3493
+
3494
+ // src/integration/ensemble-runner.ts
3495
+ import { SubagentBudget as SubagentBudget2 } from "@wrongstack/core/coordination";
3478
3496
  var DEFAULT_MAX_CONCURRENCY = 4;
3479
3497
  async function mapBound(items, worker, limit) {
3480
3498
  const results = new Array(items.length);
@@ -3513,7 +3531,7 @@ async function runOne(agentId, cmd, task, timeoutMs, signal, onProgress) {
3513
3531
  ...onProgress ? { onProgress: (event) => onProgress(agentId, event) } : {}
3514
3532
  });
3515
3533
  try {
3516
- const budget = new SubagentBudget({
3534
+ const budget = new SubagentBudget2({
3517
3535
  timeoutMs,
3518
3536
  maxIterations: 2e3,
3519
3537
  maxToolCalls: 5e3
@@ -3689,6 +3707,10 @@ Ensemble summary: ${succeeded} succeeded, ${failed} failed, ${cancelled} cancell
3689
3707
  );
3690
3708
  return lines.join("\n");
3691
3709
  }
3710
+
3711
+ // src/integration/acp-bench.ts
3712
+ import * as fsp2 from "node:fs/promises";
3713
+ import * as path3 from "node:path";
3692
3714
  function firstLine(s) {
3693
3715
  const line = s.split("\n").map((l) => l.trim()).find((l) => l.length > 0) ?? "";
3694
3716
  return line.length > 120 ? `${line.slice(0, 117)}\u2026` : line;
@@ -3755,11 +3777,11 @@ async function benchOne(agentId, cmd, opts) {
3755
3777
  if (opts.checkFs) {
3756
3778
  const fileToken = `FILE_${opts.marker}`;
3757
3779
  const fileName = `acp-bench-${opts.marker}.txt`;
3758
- const filePath = path.join(opts.projectRoot, fileName);
3780
+ const filePath = path3.join(opts.projectRoot, fileName);
3759
3781
  let fsOk = false;
3760
3782
  let fsDetail;
3761
3783
  try {
3762
- await fsp.writeFile(filePath, fileToken, "utf8");
3784
+ await fsp2.writeFile(filePath, fileToken, "utf8");
3763
3785
  const fsRes = await session.prompt(
3764
3786
  [
3765
3787
  textContent(
@@ -3773,7 +3795,7 @@ async function benchOne(agentId, cmd, opts) {
3773
3795
  } catch (err) {
3774
3796
  fsDetail = err instanceof Error ? err.message : String(err);
3775
3797
  } finally {
3776
- await fsp.rm(filePath, { force: true }).catch(() => {
3798
+ await fsp2.rm(filePath, { force: true }).catch(() => {
3777
3799
  });
3778
3800
  }
3779
3801
  checks.push({ name: "fs", ok: fsOk, detail: fsDetail });
@@ -3894,7 +3916,44 @@ function renderAcpBenchText(result) {
3894
3916
  );
3895
3917
  return lines.join("\n");
3896
3918
  }
3897
-
3898
- export { ACPProtocolHandler, ACPSession, ACPSessionError, ACPToolsRegistry, ACP_AGENT_COMMANDS, ACP_REGISTRY_URL, AGENTS_CATALOG, ClientTransport, EnsembleRegistry, FileServer, FsError, REGISTRY_ID_ALIASES, StdioTransport, TerminalServer, ToolTranslator, WebSocketClientTransport, WrongStackACPServer, audioContent, currentPlatformKey, defaultEnsembleCmdResolver, defaultPermissionPolicy, fetchAcpRegistry, findAgentDescriptor, imageContent, makeACPSubagentRunner, makeACPSubagentRunnerWithStop, makePermissionPolicy, mapRegistryEntry, probeAcpAgent, probeAcpAgents, readOnlyPermissionPolicy, renderAcpBenchText, renderEnsembleText, resolveAcpAgentCommand, runAcpBench, runEnsemble, runOneAcpTask, textContent };
3919
+ export {
3920
+ ACPProtocolHandler,
3921
+ ACPSession,
3922
+ ACPSessionError,
3923
+ ACPToolsRegistry,
3924
+ ACP_AGENT_COMMANDS,
3925
+ ACP_REGISTRY_URL,
3926
+ AGENTS_CATALOG,
3927
+ ClientTransport,
3928
+ EnsembleRegistry,
3929
+ FileServer,
3930
+ FsError,
3931
+ REGISTRY_ID_ALIASES,
3932
+ StdioTransport,
3933
+ TerminalServer,
3934
+ ToolTranslator,
3935
+ WebSocketClientTransport,
3936
+ WrongStackACPServer,
3937
+ audioContent,
3938
+ currentPlatformKey,
3939
+ defaultEnsembleCmdResolver,
3940
+ defaultPermissionPolicy,
3941
+ fetchAcpRegistry,
3942
+ findAgentDescriptor,
3943
+ imageContent,
3944
+ makeACPSubagentRunner,
3945
+ makeACPSubagentRunnerWithStop,
3946
+ makePermissionPolicy,
3947
+ mapRegistryEntry,
3948
+ probeAcpAgent,
3949
+ probeAcpAgents,
3950
+ readOnlyPermissionPolicy,
3951
+ renderAcpBenchText,
3952
+ renderEnsembleText,
3953
+ resolveAcpAgentCommand,
3954
+ runAcpBench,
3955
+ runEnsemble,
3956
+ runOneAcpTask,
3957
+ textContent
3958
+ };
3899
3959
  //# sourceMappingURL=index.js.map
3900
- //# sourceMappingURL=index.js.map