@wrongstack/acp 0.295.0 → 0.295.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/dist/agent/protocol-handler.d.ts +9 -0
  2. package/dist/agent/protocol-handler.d.ts.map +1 -1
  3. package/dist/agent/server-agent-turn.d.ts +83 -1
  4. package/dist/agent/server-agent-turn.d.ts.map +1 -1
  5. package/dist/agent/session-store.d.ts.map +1 -1
  6. package/dist/agent/stdio-transport.d.ts +18 -0
  7. package/dist/agent/stdio-transport.d.ts.map +1 -1
  8. package/dist/agent/wrongstack-acp-agent.d.ts +35 -0
  9. package/dist/agent/wrongstack-acp-agent.d.ts.map +1 -1
  10. package/dist/agent.js +30 -23
  11. package/dist/agent.js.map +3 -3
  12. package/dist/client/file-server.d.ts +19 -0
  13. package/dist/client/file-server.d.ts.map +1 -1
  14. package/dist/client/terminal-server.d.ts.map +1 -1
  15. package/dist/client/trust-boundary-permission.d.ts +16 -1
  16. package/dist/client/trust-boundary-permission.d.ts.map +1 -1
  17. package/dist/client/websocket-transport.d.ts.map +1 -1
  18. package/dist/client.js +40 -35
  19. package/dist/client.js.map +2 -2
  20. package/dist/index.js +91 -82
  21. package/dist/index.js.map +4 -4
  22. package/dist/integration/acp-bench.d.ts +32 -0
  23. package/dist/integration/acp-bench.d.ts.map +1 -1
  24. package/dist/integration/acp-subagent-runner.d.ts.map +1 -1
  25. package/dist/integration/ensemble-runner.d.ts +22 -1
  26. package/dist/integration/ensemble-runner.d.ts.map +1 -1
  27. package/dist/registry/acp-registry-fetch.d.ts +1 -1
  28. package/dist/registry/acp-registry-fetch.d.ts.map +1 -1
  29. package/dist/registry/ensemble-registry.d.ts +22 -0
  30. package/dist/registry/ensemble-registry.d.ts.map +1 -1
  31. package/dist/version.d.ts +8 -0
  32. package/dist/version.d.ts.map +1 -1
  33. package/dist/wrongstack-acp-agent.js +26 -20
  34. package/dist/wrongstack-acp-agent.js.map +2 -2
  35. package/package.json +2 -2
@@ -106,4 +106,13 @@ export declare class ACPProtocolHandler {
106
106
  private sendError;
107
107
  private allocId;
108
108
  }
109
+ declare function errorToJsonRpc(err: unknown): {
110
+ code: number;
111
+ message: string;
112
+ data?: unknown;
113
+ };
114
+ /** Internal deterministic seam used by the per-file coverage suite. */
115
+ export declare const protocolHandlerCoverage: {
116
+ errorToJsonRpc: typeof errorToJsonRpc;
117
+ };
109
118
  //# sourceMappingURL=protocol-handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"protocol-handler.d.ts","sourceRoot":"","sources":["../../src/agent/protocol-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,OAAO,EAEL,kBAAkB,EAKlB,KAAK,sBAAsB,EAS5B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAC9B,YAAY,EACV,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,OAAO,EACP,UAAU,EACV,YAAY,EACZ,wBAAwB,EACxB,aAAa,EACb,mBAAmB,EACnB,WAAW,EACX,kBAAkB,EAClB,YAAY,GACb,MAAM,wBAAwB,CAAC;AAwBhC,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsC;IAChE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgC;IAC7D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyB;IAC/C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiC;IAC/D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAEZ;IACd,OAAO,CAAC,QAAQ,CAAC,OAAO,CAEV;IACd,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA4C;IACvE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IAEvD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,kBAAkB,CAA0B;IACpD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmC;IAC5D,OAAO,CAAC,MAAM,CAAK;IAInB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAGvB;IACJ,OAAO,CAAC,SAAS,CAAK;IAEtB,YAAY,IAAI,EAAE,sBAAsB,EAyBvC;IAED;;;;OAIG;IACH,OAAO,CAAC,OAAO;IAkBf,OAAO,CAAC,mBAAmB;IAY3B;;;;OAIG;IACG,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAoBlD;IAED,qDAAqD;IACrD,KAAK,IAAI,IAAI,CAWZ;IAED,OAAO,CAAC,cAAc;YAYR,aAAa;YA+Db,gBAAgB;YAwDhB,kBAAkB;YAUlB,YAAY;YAUZ,gBAAgB;YAqDhB,iBAAiB;YA0FjB,mBAAmB;YAwBnB,kBAAkB;YAyBlB,mBAAmB;YA0BnB,iBAAiB;YAiDjB,mBAAmB;YAanB,kBAAkB;YAKlB,sBAAsB;YAStB,gBAAgB;YAKhB,mBAAmB;YAoGnB,aAAa;YAmBb,qBAAqB;YAwBrB,iBAAiB;YAsBjB,kBAAkB;YA6BlB,gBAAgB;IAI9B,2EAA2E;YAC7D,OAAO;YAYP,SAAS;IAWvB,OAAO,CAAC,OAAO;CAGhB"}
1
+ {"version":3,"file":"protocol-handler.d.ts","sourceRoot":"","sources":["../../src/agent/protocol-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,OAAO,EAEL,kBAAkB,EAKlB,KAAK,sBAAsB,EAS5B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAC9B,YAAY,EACV,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,OAAO,EACP,UAAU,EACV,YAAY,EACZ,wBAAwB,EACxB,aAAa,EACb,mBAAmB,EACnB,WAAW,EACX,kBAAkB,EAClB,YAAY,GACb,MAAM,wBAAwB,CAAC;AAwBhC,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsC;IAChE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgC;IAC7D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyB;IAC/C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiC;IAC/D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAEZ;IACd,OAAO,CAAC,QAAQ,CAAC,OAAO,CAEV;IACd,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA4C;IACvE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IAEvD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,kBAAkB,CAA0B;IACpD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmC;IAC5D,OAAO,CAAC,MAAM,CAAK;IAInB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAGvB;IACJ,OAAO,CAAC,SAAS,CAAK;IAEtB,YAAY,IAAI,EAAE,sBAAsB,EAyBvC;IAED;;;;OAIG;IACH,OAAO,CAAC,OAAO;IAkBf,OAAO,CAAC,mBAAmB;IAY3B;;;;OAIG;IACG,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAoBlD;IAED,qDAAqD;IACrD,KAAK,IAAI,IAAI,CAWZ;IAED,OAAO,CAAC,cAAc;YAYR,aAAa;YA+Db,gBAAgB;YAwDhB,kBAAkB;YAUlB,YAAY;YAUZ,gBAAgB;YAqDhB,iBAAiB;YA0FjB,mBAAmB;YAwBnB,kBAAkB;YAuBlB,mBAAmB;YA0BnB,iBAAiB;YAiDjB,mBAAmB;YAanB,kBAAkB;YAKlB,sBAAsB;YAStB,gBAAgB;YAKhB,mBAAmB;YAoGnB,aAAa;YAmBb,qBAAqB;YAwBrB,iBAAiB;YAsBjB,kBAAkB;YA6BlB,gBAAgB;IAI9B,2EAA2E;YAC7D,OAAO;YAYP,SAAS;IAWvB,OAAO,CAAC,OAAO;CAGhB;AAMD,iBAAS,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,CAcvF;AAED,uEAAuE;AACvE,eAAO,MAAM,uBAAuB;;CAAqB,CAAC"}
@@ -38,7 +38,8 @@
38
38
  * it. On abort, the adapter maps the resulting `AbortError` to
39
39
  * `{stopReason: 'cancelled'}`.
40
40
  */
41
- import type { Agent } from '@wrongstack/core/agent';
41
+ import type { Agent, AgentInput } from '@wrongstack/core/agent';
42
+ import type { ContentBlock, PlanEntry, StopReason, ToolKind, UsageCost } from '../types/acp-v1.js';
42
43
  import type { RunTurn, RunTurnApi, RunTurnResult } from './protocol-handler.js';
43
44
  export interface ACPServerAgentTurnOptions {
44
45
  /**
@@ -103,6 +104,33 @@ export interface ACPServerAgentTurn {
103
104
  * `.replay(sessionId)`).
104
105
  */
105
106
  export declare function makeACPServerAgentTurn(opts: ACPServerAgentTurnOptions): ACPServerAgentTurn;
107
+ declare function finitePositiveLimit(value: number | undefined, fallback: number): number;
108
+ declare function trimHistory(entries: SessionReplayUpdate[], retainedBytes: number, maxEntries: number, maxBytes: number): number;
109
+ declare function replayEntryBytes(entry: SessionReplayUpdate): number;
110
+ /**
111
+ * Prime a freshly-created agent's conversation state with restored history.
112
+ * Each recorded user/agent chunk becomes a `user`/`assistant` message so the
113
+ * model continues the prior conversation instead of starting blank.
114
+ */
115
+ declare function seedAgentContext(agent: Agent, history: ReadonlyArray<{
116
+ sessionUpdate: string;
117
+ content: unknown;
118
+ }>): void;
119
+ /** Map a WrongStack tool name to the closest ACP ToolKind for UI grouping. */
120
+ declare function toolNameToKind(name: string): ToolKind;
121
+ /** A short, human-readable title for a tool call card. */
122
+ declare function toolTitle(name: string, input: unknown): string;
123
+ declare function isRecord(v: unknown): v is Record<string, unknown>;
124
+ /**
125
+ * Convert an ACP `ContentBlock[]` prompt into a core `AgentInput`.
126
+ *
127
+ * When the prompt is all text we return a plain string (the common,
128
+ * cheapest path). When it carries images we build a multimodal
129
+ * `ContentBlock[]` the provider can pass to a vision-capable model.
130
+ * Audio and resource blocks have no core representation yet, so they're
131
+ * recorded as bracketed text placeholders alongside the other content.
132
+ */
133
+ declare function promptToAgentInput(blocks: readonly ContentBlock[]): AgentInput;
106
134
  /**
107
135
  * Tear down the agents and timers held by a turn factory. The
108
136
  * server's `close()` should call this so child connections don't
@@ -111,5 +139,59 @@ export declare function makeACPServerAgentTurn(opts: ACPServerAgentTurnOptions):
111
139
  export declare function disposeACPServerAgentTurn(opts: {
112
140
  agents: Map<string, Agent>;
113
141
  }): Promise<void>;
142
+ /**
143
+ * Convert an ACP `ContentBlock[]` prompt to a single user-message
144
+ * string. Text blocks are concatenated; image / audio / resource
145
+ * blocks are recorded as a bracketed placeholder (full multimodal
146
+ * support is a future PR — the adapter is v1-text only for now).
147
+ */
148
+ declare function promptToText(blocks: readonly ContentBlock[]): string;
149
+ /**
150
+ * Extract the agent's final text from a `RunResult`. The shape
151
+ * varies across core versions, so we read the most common fields
152
+ * defensively and concatenate whatever text we find.
153
+ */
154
+ declare function extractText(result: unknown): string;
155
+ /**
156
+ * Map a `RunResult` (and the parent signal) to a v1 `StopReason`.
157
+ *
158
+ * If the parent signal was aborted, return `'cancelled'`. Otherwise
159
+ * the agent completed normally — we treat any non-error result
160
+ * as `'end_turn'`. The core `RunResult` doesn't currently surface
161
+ * a per-turn stop reason, so v1's `'max_tokens'`, `'max_turn_requests'`,
162
+ * and `'refusal'` discriminators can't be emitted precisely; we
163
+ * log a warning if the result carries an error and return the
164
+ * generic end_turn.
165
+ */
166
+ declare function pickStopReason(result: unknown, signal: AbortSignal): StopReason;
167
+ /**
168
+ * Extract a plan from the agent's RunResult, if available.
169
+ * The plan is an array of PlanEntry objects.
170
+ */
171
+ declare function extractPlan(result: unknown): PlanEntry[];
172
+ /**
173
+ * Extract usage/token info from the agent's RunResult, if available.
174
+ */
175
+ declare function extractUsage(result: unknown): {
176
+ used: number;
177
+ size: number;
178
+ cost?: UsageCost | undefined;
179
+ } | null;
180
+ /** Internal deterministic seams used by the per-file coverage suite. */
181
+ export declare const serverAgentTurnCoverage: {
182
+ finitePositiveLimit: typeof finitePositiveLimit;
183
+ trimHistory: typeof trimHistory;
184
+ replayEntryBytes: typeof replayEntryBytes;
185
+ seedAgentContext: typeof seedAgentContext;
186
+ toolNameToKind: typeof toolNameToKind;
187
+ toolTitle: typeof toolTitle;
188
+ isRecord: typeof isRecord;
189
+ promptToAgentInput: typeof promptToAgentInput;
190
+ promptToText: typeof promptToText;
191
+ extractText: typeof extractText;
192
+ pickStopReason: typeof pickStopReason;
193
+ extractPlan: typeof extractPlan;
194
+ extractUsage: typeof extractUsage;
195
+ };
114
196
  export {};
115
197
  //# sourceMappingURL=server-agent-turn.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server-agent-turn.d.ts","sourceRoot":"","sources":["../../src/agent/server-agent-turn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,OAAO,KAAK,EAAE,KAAK,EAAc,MAAM,wBAAwB,CAAC;AAQhE,OAAO,KAAK,EACV,OAAO,EACP,UAAU,EACV,aAAa,EACd,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,yBAAyB;IACxC;;;;;;;;;;;OAWG;IACH,QAAQ,EAAE,CACR,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,GAAG,CAAC,EAAE,UAAU,KACb,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;IAC5B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,iEAAiE;IACjE,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,2EAA2E;IAC3E,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED,kEAAkE;AAClE,UAAU,mBAAmB;IAC3B,aAAa,EAAE,oBAAoB,GAAG,qBAAqB,CAAC;IAC5D,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACzC;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACpH,8DAA8D;IAC9D,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAAC;IACjD;;;;;OAKG;IACH,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC;IACnG,mFAAmF;IACnF,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,yBAAyB,GAC9B,kBAAkB,CA2MpB;AA8GD;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE;IAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;CAAE,GACnC,OAAO,CAAC,IAAI,CAAC,CAIf"}
1
+ {"version":3,"file":"server-agent-turn.d.ts","sourceRoot":"","sources":["../../src/agent/server-agent-turn.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../src/agent/session-store.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,2EAA2E;AAC3E,UAAU,sBAAsB;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,uEAAuE;AACvE,MAAM,WAAW,gBAAiB,SAAQ,OAAO,CAAC,YAAY,CAAC;IAC7D,OAAO,CAAC,EAAE,sBAAsB,EAAE,GAAG,SAAS,CAAC;CAChD;AAED,MAAM,WAAW,mBAAmB;IAClC,gEAAgE;IAChE,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1B;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B;;;;;OAKG;IACH,OAAO,CAAC,WAAW,CAAS;IAE5B,YAAY,IAAI,GAAE,mBAAwB,EAEzC;IAED,sEAAsE;IAChE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAI1B;IAED;;;;OAIG;IACG,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,sBAAsB,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBnF;IAED,wEAAwE;IAClE,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAO9D;IAED,mCAAmC;IAC7B,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAsC9D;IAED,0EAA0E;IAC1E,OAAO,CAAC,SAAS;IAIjB,yEAAyE;YAC3D,SAAS;IAwBvB,sEAAsE;YACxD,UAAU;IAOxB,wEAAwE;YAC1D,WAAW;IAiBzB,6BAA6B;IACvB,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB7C;IAED,oCAAoC;IACpC,YAAY,IAAI,MAAM,CAErB;CACF"}
1
+ {"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../src/agent/session-store.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,2EAA2E;AAC3E,UAAU,sBAAsB;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,uEAAuE;AACvE,MAAM,WAAW,gBAAiB,SAAQ,OAAO,CAAC,YAAY,CAAC;IAC7D,OAAO,CAAC,EAAE,sBAAsB,EAAE,GAAG,SAAS,CAAC;CAChD;AAED,MAAM,WAAW,mBAAmB;IAClC,gEAAgE;IAChE,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1B;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B;;;;;OAKG;IACH,OAAO,CAAC,WAAW,CAAS;IAE5B,YAAY,IAAI,GAAE,mBAAwB,EAEzC;IAED,sEAAsE;IAChE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAI1B;IAED;;;;OAIG;IACG,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,sBAAsB,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAsBnF;IAED,wEAAwE;IAClE,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAO9D;IAED,mCAAmC;IAC7B,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAsC9D;IAED,0EAA0E;IAC1E,OAAO,CAAC,SAAS;IAIjB,yEAAyE;YAC3D,SAAS;IAwBvB,sEAAsE;YACxD,UAAU;IAOxB,wEAAwE;YAC1D,WAAW;IAiBzB,6BAA6B;IACvB,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB7C;IAED,oCAAoC;IACpC,YAAY,IAAI,MAAM,CAErB;CACF"}
@@ -1,4 +1,5 @@
1
1
  import type { ACPMessage } from '../types/acp-messages.js';
2
+ declare function positiveLimit(value: number | undefined, fallback: number): number;
2
3
  export interface AgentServerTransport {
3
4
  send(msg: ACPMessage): Promise<void>;
4
5
  sendRaw(chunk: string): void;
@@ -90,4 +91,21 @@ export declare class ClientTransport implements ACPClientTransport {
90
91
  private onChildClose;
91
92
  private dispatch;
92
93
  }
94
+ declare function spawnInvocation(command: string, args: string[], platform: NodeJS.Platform): {
95
+ command: string;
96
+ args: string[];
97
+ windowsVerbatimArguments?: true;
98
+ };
99
+ declare function verbatimOptions(invocation: {
100
+ windowsVerbatimArguments?: true;
101
+ }): {
102
+ windowsVerbatimArguments?: true;
103
+ };
104
+ /** Direct-module test seam; not re-exported by the package barrel. */
105
+ export declare const stdioTransportCoverage: {
106
+ positiveLimit: typeof positiveLimit;
107
+ spawnInvocation: typeof spawnInvocation;
108
+ verbatimOptions: typeof verbatimOptions;
109
+ };
110
+ export {};
93
111
  //# sourceMappingURL=stdio-transport.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stdio-transport.d.ts","sourceRoot":"","sources":["../../src/agent/stdio-transport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stdio-transport.d.ts","sourceRoot":"","sources":["../../src/agent/stdio-transport.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,29 @@
1
+ /**
2
+ * WrongStackACPServer — ACP v1 server-side entry point.
3
+ *
4
+ * Exposes WrongStack as an ACP-compatible agent. ACP clients (Zed, JetBrains
5
+ * Junie, VS Code ACP extension) spawn this as a subprocess, send JSON-RPC
6
+ * messages over stdio, and receive v1-protocol responses.
7
+ *
8
+ * Usage:
9
+ * node dist/agent/wrongstack-acp-agent.js
10
+ *
11
+ * Or via the CLI:
12
+ * wstack acp-server
13
+ *
14
+ * Wiring a real agent: this class is the surface; the bootstrap
15
+ * binary uses a no-op echo by default so the binary is a useful
16
+ * connectivity smoke test. For a real server, instantiate
17
+ * `WrongStackACPServer` programmatically and pass a `runTurn`
18
+ * produced by `makeACPServerAgentTurn({ agentFor: ... })` from
19
+ * `./server-agent-turn.js`. The factory is responsible for building
20
+ * a real core `Agent` (with the right provider, model, system prompt,
21
+ * etc.) per session.
22
+ *
23
+ * Startup: stdout is JSON-RPC only by default. The legacy `[wstack-acp]\n`
24
+ * marker can be enabled for older internal harnesses with
25
+ * `legacyStartupMarker`, but ACP clients should rely on v1 initialize.
26
+ */
1
27
  import { type RunTurn, type SessionPersistence } from './protocol-handler.js';
2
28
  export interface WrongStackACPServerOptions {
3
29
  runTurn?: RunTurn | undefined;
@@ -64,4 +90,13 @@ export declare class WrongStackACPServer {
64
90
  /** Stop the server. */
65
91
  stop(): void;
66
92
  }
93
+ declare function headerValue(value: string | string[] | undefined): string | undefined;
94
+ declare function requestPath(value: string | undefined): string;
95
+ /** Direct-module test seam; not re-exported by the package barrel. */
96
+ export declare const wrongStackACPServerCoverage: {
97
+ defaultEchoRunTurn: RunTurn;
98
+ headerValue: typeof headerValue;
99
+ requestPath: typeof requestPath;
100
+ };
101
+ export {};
67
102
  //# sourceMappingURL=wrongstack-acp-agent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wrongstack-acp-agent.d.ts","sourceRoot":"","sources":["../../src/agent/wrongstack-acp-agent.ts"],"names":[],"mappings":"AA8BA,OAAO,EAEL,KAAK,OAAO,EAEZ,KAAK,kBAAkB,EACxB,MAAM,uBAAuB,CAAC;AAG/B,MAAM,WAAW,0BAA0B;IACzC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IACzC,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,kEAAkE;IAClE,mBAAmB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1C;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,MAAM,KAAK,KAAK,CAAC;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC,GAAG,SAAS,CAAC;IACpG;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACjH,gFAAgF;IAChF,UAAU,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACvD;;;OAGG;IACH,KAAK,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAC;CACxC;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiB;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IACrD,+CAA+C;IAC/C,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,OAAO,CAAS;IAExB,YAAY,IAAI,GAAE,0BAA+B,EAchD;IAED;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAO3B;YAEa,UAAU;YAkBV,SAAS;IAmKvB,uBAAuB;IACvB,IAAI,IAAI,IAAI,CAQX;CACF"}
1
+ {"version":3,"file":"wrongstack-acp-agent.d.ts","sourceRoot":"","sources":["../../src/agent/wrongstack-acp-agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAMH,OAAO,EAEL,KAAK,OAAO,EAEZ,KAAK,kBAAkB,EACxB,MAAM,uBAAuB,CAAC;AAG/B,MAAM,WAAW,0BAA0B;IACzC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IACzC,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,kEAAkE;IAClE,mBAAmB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1C;;;;OAIG;IACH,SAAS,CAAC,EACN,CAAC,CAAC,SAAS,EAAE,MAAM,KAAK,KAAK,CAAC;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC,GAC3E,SAAS,CAAC;IACd;;;OAGG;IACH,OAAO,CAAC,EACJ,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC,GAC1F,SAAS,CAAC;IACd,gFAAgF;IAChF,UAAU,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACvD;;;OAGG;IACH,KAAK,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAC;CACxC;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiB;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IACrD,+CAA+C;IAC/C,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,OAAO,CAAS;IAExB,YAAY,IAAI,GAAE,0BAA+B,EAchD;IAED;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAO3B;YAEa,UAAU;YAkBV,SAAS;IA4JvB,uBAAuB;IACvB,IAAI,IAAI,IAAI,CAQX;CACF;AAaD,iBAAS,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAE7E;AAED,iBAAS,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAEtD;AAED,sEAAsE;AACtE,eAAO,MAAM,2BAA2B;;;;CAAmD,CAAC"}
package/dist/agent.js CHANGED
@@ -1,9 +1,10 @@
1
1
  // src/agent/stdio-transport.ts
2
2
  import { expectDefined, writeErr } from "@wrongstack/core/utils";
3
+ import { treeKill } from "@wrongstack/core/utils/tree-kill";
3
4
  var DEFAULT_MAX_FRAME_CHARS = 20 * 1024 * 1024;
4
5
  var DEFAULT_MAX_QUEUED_MESSAGES = 1e3;
5
6
  function positiveLimit(value, fallback) {
6
- return Number.isFinite(value) && (value ?? 0) > 0 ? Math.floor(value) : fallback;
7
+ return value !== void 0 && Number.isFinite(value) && value > 0 ? Math.floor(value) : fallback;
7
8
  }
8
9
  var StdioTransport = class {
9
10
  stdin = process.stdin;
@@ -18,10 +19,7 @@ var StdioTransport = class {
18
19
  maxQueuedMessages;
19
20
  constructor(opts = {}) {
20
21
  this.maxFrameChars = positiveLimit(opts.maxFrameChars, DEFAULT_MAX_FRAME_CHARS);
21
- this.maxQueuedMessages = positiveLimit(
22
- opts.maxQueuedMessages,
23
- DEFAULT_MAX_QUEUED_MESSAGES
24
- );
22
+ this.maxQueuedMessages = positiveLimit(opts.maxQueuedMessages, DEFAULT_MAX_QUEUED_MESSAGES);
25
23
  this.stdin.resume();
26
24
  this.stdin.setEncoding("utf8");
27
25
  this.stdin.on("data", (chunk) => this.onData(chunk));
@@ -42,7 +40,8 @@ var StdioTransport = class {
42
40
  this.stdout.write(chunk, "utf8");
43
41
  }
44
42
  read() {
45
- if (this.messageQueue.length > 0) return Promise.resolve(expectDefined(this.messageQueue.shift()));
43
+ if (this.messageQueue.length > 0)
44
+ return Promise.resolve(expectDefined(this.messageQueue.shift()));
46
45
  if (this.closed) return Promise.resolve(null);
47
46
  return new Promise((resolve) => {
48
47
  this.resolveRead = resolve;
@@ -249,9 +248,9 @@ var ACP_PROTOCOL_VERSION = 1;
249
248
  // src/version.ts
250
249
  import { createRequire } from "node:module";
251
250
  var require2 = createRequire(import.meta.url);
252
- function readPackageVersion() {
251
+ function readPackageVersion(load = () => require2("../package.json")) {
253
252
  try {
254
- const packageJson = require2("../package.json");
253
+ const packageJson = load();
255
254
  if (typeof packageJson.version === "string" && packageJson.version.length > 0) {
256
255
  return packageJson.version;
257
256
  }
@@ -319,7 +318,7 @@ var ACPProtocolHandler = class {
319
318
  this.replayFor = opts.replayFor;
320
319
  this.seedFor = opts.seedFor;
321
320
  this.disposeFor = opts.disposeFor;
322
- this.maxSessions = Number.isFinite(opts.maxSessions) && (opts.maxSessions ?? 0) > 0 ? Math.floor(opts.maxSessions) : DEFAULT_MAX_SESSIONS;
321
+ this.maxSessions = Number.isFinite(opts.maxSessions) && opts.maxSessions > 0 ? Math.floor(opts.maxSessions) : DEFAULT_MAX_SESSIONS;
323
322
  this.store = opts.store;
324
323
  if (typeof this.transport.onMessage === "function") {
325
324
  this.transport.onMessage((m) => this.maybeResolvePending(m));
@@ -601,7 +600,7 @@ var ACPProtocolHandler = class {
601
600
  }
602
601
  if (existing) {
603
602
  existing.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
604
- const replay = sessionId ? this.replayFor?.(sessionId) : void 0;
603
+ const replay = this.replayFor?.(sessionId);
605
604
  if (replay) {
606
605
  for (const update of replay) {
607
606
  await this.sendNotification({ sessionId, update });
@@ -666,10 +665,8 @@ var ACPProtocolHandler = class {
666
665
  return false;
667
666
  }
668
667
  session.abort.abort();
669
- if (sessionId) {
670
- this.sessions.delete(sessionId);
671
- this.disposeSession(sessionId);
672
- }
668
+ this.sessions.delete(sessionId);
669
+ this.disposeSession(sessionId);
673
670
  await this.transport.send(toWire({
674
671
  jsonrpc: "2.0",
675
672
  id,
@@ -1004,8 +1001,10 @@ var ACPSessionStore = class {
1004
1001
  */
1005
1002
  async save(state, history) {
1006
1003
  await this.init();
1004
+ const target = path.join(this.dir, `${state.id}.json`);
1005
+ const tmp = `${target}.${process.pid}.${Date.now()}.tmp`;
1007
1006
  await fsp.writeFile(
1008
- path.join(this.dir, `${state.id}.json`),
1007
+ tmp,
1009
1008
  JSON.stringify({
1010
1009
  id: state.id,
1011
1010
  cwd: state.cwd,
@@ -1017,6 +1016,7 @@ var ACPSessionStore = class {
1017
1016
  }),
1018
1017
  "utf8"
1019
1018
  );
1019
+ await fsp.rename(tmp, target);
1020
1020
  await this.updateIndex(state.id, state.updatedAt);
1021
1021
  return state.id;
1022
1022
  }
@@ -1177,8 +1177,8 @@ var WsBridgeTransport = class {
1177
1177
  };
1178
1178
 
1179
1179
  // src/agent/wrongstack-acp-agent.ts
1180
- import { fileURLToPath } from "node:url";
1181
1180
  import { createServer } from "node:http";
1181
+ import { fileURLToPath } from "node:url";
1182
1182
  import { writeErr as writeErr2 } from "@wrongstack/core/utils";
1183
1183
  var WrongStackACPServer = class {
1184
1184
  transport;
@@ -1239,10 +1239,9 @@ var WrongStackACPServer = class {
1239
1239
  let httpChain = Promise.resolve();
1240
1240
  this.httpServer = createServer(async (req, res) => {
1241
1241
  if (authToken) {
1242
- const url = new URL(req.url ?? "/", `http://${host}:${port}`);
1242
+ const url = new URL(requestPath(req.url), `http://${host}:${port}`);
1243
1243
  const queryToken = url.searchParams.get("token");
1244
- const authHeader = req.headers["authorization"];
1245
- const bearerToken = Array.isArray(authHeader) ? authHeader[0]?.replace(/^Bearer\s+/i, "") : authHeader?.replace(/^Bearer\s+/i, "");
1244
+ const bearerToken = headerValue(req.headers.authorization)?.replace(/^Bearer\s+/i, "");
1246
1245
  const supplied = queryToken ?? bearerToken ?? "";
1247
1246
  if (supplied !== authToken) {
1248
1247
  res.writeHead(401, { "Content-Type": "application/json" });
@@ -1251,7 +1250,7 @@ var WrongStackACPServer = class {
1251
1250
  }
1252
1251
  }
1253
1252
  const selfOrigin = `http://${host}:${port}`;
1254
- const reqOrigin = Array.isArray(req.headers.origin) ? req.headers.origin[0] : req.headers.origin;
1253
+ const reqOrigin = headerValue(req.headers.origin);
1255
1254
  if (reqOrigin && reqOrigin !== selfOrigin) {
1256
1255
  res.writeHead(403);
1257
1256
  res.end(JSON.stringify({ error: "cross-origin request forbidden" }));
@@ -1331,6 +1330,8 @@ var WrongStackACPServer = class {
1331
1330
  try {
1332
1331
  await requestPromise;
1333
1332
  } catch {
1333
+ res.writeHead(500, { "Content-Type": "application/json" });
1334
+ res.end(JSON.stringify({ error: { code: -32603, message: "Internal error" } }));
1334
1335
  }
1335
1336
  });
1336
1337
  return new Promise((resolve) => {
@@ -1356,6 +1357,12 @@ var WrongStackACPServer = class {
1356
1357
  var defaultEchoRunTurn = async (_input, _emit) => {
1357
1358
  return { stopReason: "end_turn" };
1358
1359
  };
1360
+ function headerValue(value) {
1361
+ return Array.isArray(value) ? value[0] : value;
1362
+ }
1363
+ function requestPath(value) {
1364
+ return value ?? "/";
1365
+ }
1359
1366
  async function main() {
1360
1367
  const server = new WrongStackACPServer();
1361
1368
  await server.start();
@@ -1386,7 +1393,7 @@ function makeACPServerAgentTurn(opts) {
1386
1393
  agents.set(input.sessionId, agent);
1387
1394
  if (pendingSeed.has(input.sessionId)) {
1388
1395
  pendingSeed.delete(input.sessionId);
1389
- seedAgentContext(agent, history.get(input.sessionId) ?? []);
1396
+ seedAgentContext(agent, history.get(input.sessionId));
1390
1397
  }
1391
1398
  }
1392
1399
  const turnAbort = new AbortController();
@@ -1533,7 +1540,7 @@ function makeACPServerAgentTurn(opts) {
1533
1540
  return Object.assign(turn, { replay, seed, dispose });
1534
1541
  }
1535
1542
  function finitePositiveLimit(value, fallback) {
1536
- return Number.isFinite(value) && (value ?? 0) > 0 ? Math.floor(value) : fallback;
1543
+ return Number.isFinite(value) && value > 0 ? Math.floor(value) : fallback;
1537
1544
  }
1538
1545
  function trimHistory(entries, retainedBytes, maxEntries, maxBytes) {
1539
1546
  while (entries.length > maxEntries || retainedBytes > maxBytes) {
@@ -1560,7 +1567,7 @@ function toolNameToKind(name) {
1560
1567
  const n = name.toLowerCase();
1561
1568
  if (n.includes("read") || n.includes("cat")) return "read";
1562
1569
  if (n.includes("write") || n.includes("edit") || n.includes("apply") || n.includes("patch")) return "edit";
1563
- if (n.includes("delete") || n.includes("rm")) return "delete";
1570
+ if (n.includes("delete") || n === "rm" || n.startsWith("rm_") || n.endsWith("_rm")) return "delete";
1564
1571
  if (n.includes("move") || n.includes("rename") || n.includes("mv")) return "move";
1565
1572
  if (n.includes("grep") || n.includes("glob") || n.includes("search") || n.includes("find")) return "search";
1566
1573
  if (n.includes("bash") || n.includes("shell") || n.includes("exec") || n.includes("run") || n.includes("terminal")) return "execute";