@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.
- package/dist/agent/protocol-handler.d.ts +9 -0
- package/dist/agent/protocol-handler.d.ts.map +1 -1
- package/dist/agent/server-agent-turn.d.ts +83 -1
- package/dist/agent/server-agent-turn.d.ts.map +1 -1
- package/dist/agent/session-store.d.ts.map +1 -1
- package/dist/agent/stdio-transport.d.ts +18 -0
- package/dist/agent/stdio-transport.d.ts.map +1 -1
- package/dist/agent/wrongstack-acp-agent.d.ts +35 -0
- package/dist/agent/wrongstack-acp-agent.d.ts.map +1 -1
- package/dist/agent.js +30 -23
- package/dist/agent.js.map +3 -3
- package/dist/client/file-server.d.ts +19 -0
- package/dist/client/file-server.d.ts.map +1 -1
- package/dist/client/terminal-server.d.ts.map +1 -1
- package/dist/client/trust-boundary-permission.d.ts +16 -1
- package/dist/client/trust-boundary-permission.d.ts.map +1 -1
- package/dist/client/websocket-transport.d.ts.map +1 -1
- package/dist/client.js +40 -35
- package/dist/client.js.map +2 -2
- package/dist/index.js +91 -82
- package/dist/index.js.map +4 -4
- package/dist/integration/acp-bench.d.ts +32 -0
- package/dist/integration/acp-bench.d.ts.map +1 -1
- package/dist/integration/acp-subagent-runner.d.ts.map +1 -1
- package/dist/integration/ensemble-runner.d.ts +22 -1
- package/dist/integration/ensemble-runner.d.ts.map +1 -1
- package/dist/registry/acp-registry-fetch.d.ts +1 -1
- package/dist/registry/acp-registry-fetch.d.ts.map +1 -1
- package/dist/registry/ensemble-registry.d.ts +22 -0
- package/dist/registry/ensemble-registry.d.ts.map +1 -1
- package/dist/version.d.ts +8 -0
- package/dist/version.d.ts.map +1 -1
- package/dist/wrongstack-acp-agent.js +26 -20
- package/dist/wrongstack-acp-agent.js.map +2 -2
- 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;
|
|
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,
|
|
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,
|
|
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":"
|
|
1
|
+
{"version":3,"file":"stdio-transport.d.ts","sourceRoot":"","sources":["../../src/agent/stdio-transport.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAM3D,iBAAS,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACnC,KAAK,IAAI,IAAI,CAAC;IACd,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAC3D;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC1D,IAAI,IAAI,IAAI,CAAC;CACd;AAED,qBAAa,cAAe,YAAW,oBAAoB;IACzD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiB;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IAEzC,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwC;IACjE,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAmD;IACtE,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAE3C,YAAY,IAAI,GAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;KAAO,EAQ5E;IAED,iBAAiB,IAAI,IAAI,CAExB;IAED,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAMnC;IAED,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAE3B;IAED,IAAI,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAOjC;IAED,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,GAAG,MAAM,IAAI,CAGxD;IAED,KAAK,IAAI,IAAI,CAQZ;IAED,OAAO,CAAC,MAAM;IAgCd,OAAO,CAAC,QAAQ;IAyBhB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,OAAO;CAIhB;AAMD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1C,yEAAyE;IACzE,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC;AAED,MAAM,WAAW,eAAgB,SAAQ,YAAY;IACnD,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,IAAI,IAAI,IAAI,CAAC;CACd;AAED,qBAAa,eAAgB,YAAW,kBAAkB;IACxD,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwC;IACjE,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAmD;IACtE,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,QAAQ,CAAC,IAAI,CACI;IACzB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAE3C,YAAY,OAAO,EAAE,sBAAsB,EAO1C;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAuG3B;IAED,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CASnC;IAED,IAAI,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAOjC;IAED,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,GAAG,MAAM,IAAI,CAGxD;IAED,IAAI,IAAI,IAAI,CAaX;IAED,OAAO,CAAC,WAAW;IA0BnB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,QAAQ;CAqBjB;AAED,iBAAS,eAAe,CACtB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,QAAQ,EAAE,MAAM,CAAC,QAAQ,GACxB;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,wBAAwB,CAAC,EAAE,IAAI,CAAC;CACjC,CAGA;AAED,iBAAS,eAAe,CAAC,UAAU,EAAE;IAAE,wBAAwB,CAAC,EAAE,IAAI,CAAA;CAAE,GAAG;IACzE,wBAAwB,CAAC,EAAE,IAAI,CAAC;CACjC,CAIA;AAED,sEAAsE;AACtE,eAAO,MAAM,sBAAsB;;;;CAAsD,CAAC"}
|
|
@@ -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":"
|
|
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) &&
|
|
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)
|
|
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 =
|
|
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) &&
|
|
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 =
|
|
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
|
-
|
|
670
|
-
|
|
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
|
-
|
|
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
|
|
1242
|
+
const url = new URL(requestPath(req.url), `http://${host}:${port}`);
|
|
1243
1243
|
const queryToken = url.searchParams.get("token");
|
|
1244
|
-
const
|
|
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 =
|
|
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) &&
|
|
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.
|
|
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";
|