@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
|
@@ -1,3 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ACP client bench — end-to-end verification of installed ACP agents.
|
|
3
|
+
*
|
|
4
|
+
* Unlike `probeAcpAgent` (which only runs the `initialize` handshake), the
|
|
5
|
+
* bench drives each agent through a real, deterministic turn and grades it:
|
|
6
|
+
*
|
|
7
|
+
* 1. handshake — spawn + `initialize` succeeds (captures agentInfo)
|
|
8
|
+
* 2. prompt — `session/new` + `session/prompt` returns with text
|
|
9
|
+
* 3. marker — the agent followed a trivial instruction (echo a token)
|
|
10
|
+
* 4. fs (opt) — the agent read a file from the client's sandboxed FS,
|
|
11
|
+
* exercising the `fs/read_text_file` callback channel
|
|
12
|
+
*
|
|
13
|
+
* Grade: pass (all required checks), partial (handshake ok but degraded),
|
|
14
|
+
* fail (couldn't even handshake). Each result carries per-check detail and
|
|
15
|
+
* timings so the report is actionable: "claude-code: handshake ok but the
|
|
16
|
+
* prompt timed out" vs "codex-cli: not installed".
|
|
17
|
+
*
|
|
18
|
+
* Pure orchestrator — no renderer dependency; `renderAcpBenchText` is the
|
|
19
|
+
* default formatter. The CLI/slash layer supplies the command resolver
|
|
20
|
+
* (so user overrides + the synced registry apply) and the agent set.
|
|
21
|
+
*/
|
|
22
|
+
import * as fsp from 'node:fs/promises';
|
|
1
23
|
import type { ACPSubagentRunnerOptions } from './acp-subagent-runner.js';
|
|
2
24
|
export type AcpBenchStatus = 'pass' | 'partial' | 'fail' | 'skipped';
|
|
3
25
|
export interface AcpBenchCheck {
|
|
@@ -57,6 +79,8 @@ export interface AcpBenchOptions {
|
|
|
57
79
|
/** Clock injection (tests). Defaults to `Date.now`. */
|
|
58
80
|
now?: (() => number) | undefined;
|
|
59
81
|
}
|
|
82
|
+
declare function firstLine(s: string): string;
|
|
83
|
+
declare function randomMarker(): string;
|
|
60
84
|
/**
|
|
61
85
|
* Bench a set of ACP agents end-to-end and return a graded report. Unknown
|
|
62
86
|
* ids are reported `skipped`. Bounded concurrency keeps the number of live
|
|
@@ -65,4 +89,12 @@ export interface AcpBenchOptions {
|
|
|
65
89
|
export declare function runAcpBench(opts: AcpBenchOptions): Promise<AcpBenchResult>;
|
|
66
90
|
/** Render an `AcpBenchResult` as a plain-text report. */
|
|
67
91
|
export declare function renderAcpBenchText(result: AcpBenchResult): string;
|
|
92
|
+
declare function removeBenchFile(filePath: string, remove?: typeof fsp.rm): Promise<void>;
|
|
93
|
+
/** Direct-module test seam; not re-exported by the package barrel. */
|
|
94
|
+
export declare const acpBenchCoverage: {
|
|
95
|
+
firstLine: typeof firstLine;
|
|
96
|
+
randomMarker: typeof randomMarker;
|
|
97
|
+
removeBenchFile: typeof removeBenchFile;
|
|
98
|
+
};
|
|
99
|
+
export {};
|
|
68
100
|
//# sourceMappingURL=acp-bench.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acp-bench.d.ts","sourceRoot":"","sources":["../../src/integration/acp-bench.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"acp-bench.d.ts","sourceRoot":"","sources":["../../src/integration/acp-bench.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,GAAG,MAAM,kBAAkB,CAAC;AAGxC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEzE,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;AAErE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC;IAC/C,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,oDAAoD;IACpD,SAAS,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IACtF,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1E,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,iEAAiE;AACjE,MAAM,MAAM,mBAAmB,GAAG,CAAC,EAAE,EAAE,MAAM,KAAK,wBAAwB,GAAG,IAAI,CAAC;AAElF,MAAM,WAAW,eAAe;IAC9B,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,+EAA+E;IAC/E,UAAU,EAAE,mBAAmB,CAAC;IAChC,oEAAoE;IACpE,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,2EAA2E;IAC3E,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,8EAA8E;IAC9E,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,mEAAmE;IACnE,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IACjC,iDAAiD;IACjD,UAAU,CAAC,EACP,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,MAAM,CAAC,EAAE,mBAAmB,KAAK,IAAI,CAAC,GAClF,SAAS,CAAC;IACd,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,uDAAuD;IACvD,GAAG,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,CAAC;CAClC;AAED,iBAAS,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAOpC;AAED,iBAAS,YAAY,IAAI,MAAM,CAG9B;AA0ID;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CA2EhF;AAED,yDAAyD;AACzD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CA2BjE;AAED,iBAAe,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,GAAG,CAAC,EAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9F;AAED,sEAAsE;AACtE,eAAO,MAAM,gBAAgB;;;;CAA+C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acp-subagent-runner.d.ts","sourceRoot":"","sources":["../../src/integration/acp-subagent-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAKV,cAAc,EAEf,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,UAAU,EAIV,KAAK,kBAAkB,EACxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,WAAW,wBAAwB;IACvC,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IACzC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC;;;;OAIG;IACH,UAAU,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAC;IAC5C;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAChD;;;;OAIG;IACH,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,SAAS,CAAC;IACrC;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAClC;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAuBvE,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,cAAc,CAAC,CAazB;AAED;;;;;;GAMG;AACH,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC;IAAE,MAAM,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC,CAgGvE;
|
|
1
|
+
{"version":3,"file":"acp-subagent-runner.d.ts","sourceRoot":"","sources":["../../src/integration/acp-subagent-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,9 +25,9 @@
|
|
|
25
25
|
* - Idempotent cleanup: each agent's `stop()` is called in a
|
|
26
26
|
* `finally`, so a throw in the body still tears the child down.
|
|
27
27
|
*/
|
|
28
|
+
import type { ACPProgressEvent } from '../client/acp-session.js';
|
|
28
29
|
import { EnsembleRegistry } from '../registry/ensemble-registry.js';
|
|
29
30
|
import { type ACPSubagentRunnerOptions } from './acp-subagent-runner.js';
|
|
30
|
-
import type { ACPProgressEvent } from '../client/acp-session.js';
|
|
31
31
|
/** Live per-agent progress callback for an ensemble run. */
|
|
32
32
|
export type EnsembleProgressHandler = (agentId: string, event: ACPProgressEvent) => void;
|
|
33
33
|
/**
|
|
@@ -119,12 +119,27 @@ export interface EnsembleRunnerOptions {
|
|
|
119
119
|
*/
|
|
120
120
|
maxConcurrency?: number | undefined;
|
|
121
121
|
}
|
|
122
|
+
/**
|
|
123
|
+
* Map each input through `worker` with at most `limit` tasks in flight.
|
|
124
|
+
* The output array preserves input order. Each worker is expected to
|
|
125
|
+
* resolve (not throw) — `runEnsemble`'s runnable workers wrap their
|
|
126
|
+
* own logic so they never reject, matching the original
|
|
127
|
+
* `Promise.allSettled` semantics where rejection was effectively
|
|
128
|
+
* impossible. Bounded concurrency caps simultaneous ACP subprocess /
|
|
129
|
+
* WebSocket counts in large ensembles.
|
|
130
|
+
*/
|
|
131
|
+
declare function mapBound<T, R>(items: readonly T[], worker: (item: T, index: number) => Promise<R>, limit: number): Promise<R[]>;
|
|
122
132
|
/**
|
|
123
133
|
* Default command resolver — delegates to `resolveAcpAgentCommand`, so the
|
|
124
134
|
* catalog's corrected invocations win over the stale legacy map (the legacy
|
|
125
135
|
* map is now only a last-resort fallback). Returns `null` for unknown ids.
|
|
126
136
|
*/
|
|
127
137
|
export declare const defaultEnsembleCmdResolver: EnsembleCmdResolver;
|
|
138
|
+
/**
|
|
139
|
+
* Update one result in-place. Keeps the array order stable so callers
|
|
140
|
+
* can render results in the same order they were requested.
|
|
141
|
+
*/
|
|
142
|
+
declare function setResult(results: EnsembleAgentResult[], agentId: string, patch: Partial<EnsembleAgentResult>): void;
|
|
128
143
|
/**
|
|
129
144
|
* Fan a task out to multiple ACP agents concurrently.
|
|
130
145
|
*
|
|
@@ -144,4 +159,10 @@ export declare function runEnsemble(opts: EnsembleRunnerOptions): Promise<Ensemb
|
|
|
144
159
|
* emits, so existing scripts that parse the CLI's output keep working.
|
|
145
160
|
*/
|
|
146
161
|
export declare function renderEnsembleText(result: EnsembleResult): string;
|
|
162
|
+
/** Direct-module test seam; not re-exported by the package barrel. */
|
|
163
|
+
export declare const ensembleRunnerCoverage: {
|
|
164
|
+
mapBound: typeof mapBound;
|
|
165
|
+
setResult: typeof setResult;
|
|
166
|
+
};
|
|
167
|
+
export {};
|
|
147
168
|
//# sourceMappingURL=ensemble-runner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensemble-runner.d.ts","sourceRoot":"","sources":["../../src/integration/ensemble-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;
|
|
1
|
+
{"version":3,"file":"ensemble-runner.d.ts","sourceRoot":"","sources":["../../src/integration/ensemble-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -71,7 +71,7 @@ export interface FetchAcpRegistryOptions {
|
|
|
71
71
|
platformKey?: string | undefined;
|
|
72
72
|
}
|
|
73
73
|
/** Map Node's platform/arch to the registry's `<os>-<arch>` key form. */
|
|
74
|
-
export declare function currentPlatformKey(): string;
|
|
74
|
+
export declare function currentPlatformKey(platform?: NodeJS.Platform, architecture?: string): string;
|
|
75
75
|
/**
|
|
76
76
|
* Map one registry entry to an `ACPAgentDescriptor`, or `null` if it carries
|
|
77
77
|
* no distribution runnable on this host. Pure — no I/O.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acp-registry-fetch.d.ts","sourceRoot":"","sources":["../../src/registry/acp-registry-fetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,EACV,kBAAkB,EAEnB,MAAM,wBAAwB,CAAC;AAEhC,+DAA+D;AAC/D,eAAO,MAAM,gBAAgB,yEAC2C,CAAC;AAEzE,yEAAyE;AACzE,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,CAAC,EAAE;QACb,GAAG,CAAC,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC;QAC3C,GAAG,CAAC,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC;QAC3C,MAAM,CAAC,EAAE,MAAM,CACb,MAAM,EACN;YAAE,OAAO,CAAC,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;YAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;SAAE,CACjF,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,sBAAsB;IACrC,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,MAAM,EAAE,kBAAkB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,uBAAuB;IACtC,+CAA+C;IAC/C,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,uCAAuC;IACvC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IACjC,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AAED,yEAAyE;AACzE,wBAAgB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"acp-registry-fetch.d.ts","sourceRoot":"","sources":["../../src/registry/acp-registry-fetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,EACV,kBAAkB,EAEnB,MAAM,wBAAwB,CAAC;AAEhC,+DAA+D;AAC/D,eAAO,MAAM,gBAAgB,yEAC2C,CAAC;AAEzE,yEAAyE;AACzE,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,CAAC,EAAE;QACb,GAAG,CAAC,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC;QAC3C,GAAG,CAAC,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC;QAC3C,MAAM,CAAC,EAAE,MAAM,CACb,MAAM,EACN;YAAE,OAAO,CAAC,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;YAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;SAAE,CACjF,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,sBAAsB;IACrC,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,MAAM,EAAE,kBAAkB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,uBAAuB;IACtC,+CAA+C;IAC/C,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,uCAAuC;IACvC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IACjC,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AAED,yEAAyE;AACzE,wBAAgB,kBAAkB,CAChC,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,YAAY,GAAE,MAAqB,GAClC,MAAM,CAUR;AAQD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,kBAAkB,EACzB,WAAW,GAAE,MAA6B,GACzC,kBAAkB,GAAG,IAAI,CAmC3B;AAYD;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,GAAE,uBAA4B,GACjC,OAAO,CAAC,sBAAsB,CAAC,CA+BjC"}
|
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EnsembleRegistry — discovery layer for ACP-supporting agents.
|
|
3
|
+
*
|
|
4
|
+
* Combines the static catalog (`agents.catalog.ts`) with a runtime
|
|
5
|
+
* `$PATH` probe to report which agents are installed on this machine.
|
|
6
|
+
* The result feeds `wstack acp list`, the `/spawn` picker, and the
|
|
7
|
+
* ensemble UI.
|
|
8
|
+
*
|
|
9
|
+
* Why probe on demand rather than cache at module load
|
|
10
|
+
* ─────────────────────────────────────────────────────
|
|
11
|
+
* The maintainer installs a new agent mid-session. Caching at module
|
|
12
|
+
* load means the cache is stale for the rest of the run. A 5-second
|
|
13
|
+
* per-process cache (`cachedAt`) keeps the common case cheap and the
|
|
14
|
+
* fresh case correct.
|
|
15
|
+
*/
|
|
16
|
+
import { spawn } from 'node:child_process';
|
|
1
17
|
/** Vendor classification — used to filter the catalog by family. */
|
|
2
18
|
export type ACPAgentVendor = 'anthropic' | 'google' | 'openai' | 'github' | 'moonshot' | 'community';
|
|
3
19
|
/** How the agent is integrated into ACP. */
|
|
@@ -74,6 +90,12 @@ export interface EnsembleRegistryOptions {
|
|
|
74
90
|
/** Inject a custom probe function (used by tests). */
|
|
75
91
|
probeFn?: (descriptor: ACPAgentDescriptor) => Promise<ProbeResult>;
|
|
76
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* Probe a single descriptor by running its `probe` argv. Resolves with
|
|
95
|
+
* a structured result rather than throwing — a failed probe is data, not
|
|
96
|
+
* an error.
|
|
97
|
+
*/
|
|
98
|
+
export declare function defaultProbe(desc: ACPAgentDescriptor, timeoutMs: number, spawnProcess?: typeof spawn, platform?: NodeJS.Platform): Promise<ProbeResult>;
|
|
77
99
|
export declare class EnsembleRegistry {
|
|
78
100
|
private readonly catalog;
|
|
79
101
|
private readonly timeoutMs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensemble-registry.d.ts","sourceRoot":"","sources":["../../src/registry/ensemble-registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ensemble-registry.d.ts","sourceRoot":"","sources":["../../src/registry/ensemble-registry.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,10 @@
|
|
|
1
|
+
declare function readPackageVersion(load?: () => {
|
|
2
|
+
version?: unknown;
|
|
3
|
+
}): string;
|
|
1
4
|
export declare const ACP_PACKAGE_VERSION: string;
|
|
5
|
+
/** Direct-module test seam; not re-exported by the package barrel. */
|
|
6
|
+
export declare const versionCoverage: {
|
|
7
|
+
readPackageVersion: typeof readPackageVersion;
|
|
8
|
+
};
|
|
9
|
+
export {};
|
|
2
10
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAIA,iBAAS,kBAAkB,CACzB,IAAI,GAAE,MAAM;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAA8D,GAC5F,MAAM,CAUR;AAED,eAAO,MAAM,mBAAmB,QAAuB,CAAC;AAExD,sEAAsE;AACtE,eAAO,MAAM,eAAe;;CAAyB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// src/agent/wrongstack-acp-agent.ts
|
|
2
|
-
import { fileURLToPath } from "node:url";
|
|
3
2
|
import { createServer } from "node:http";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
4
|
import { writeErr as writeErr2 } from "@wrongstack/core/utils";
|
|
5
5
|
|
|
6
6
|
// src/types/acp-v1.ts
|
|
@@ -9,9 +9,9 @@ var ACP_PROTOCOL_VERSION = 1;
|
|
|
9
9
|
// src/version.ts
|
|
10
10
|
import { createRequire } from "node:module";
|
|
11
11
|
var require2 = createRequire(import.meta.url);
|
|
12
|
-
function readPackageVersion() {
|
|
12
|
+
function readPackageVersion(load = () => require2("../package.json")) {
|
|
13
13
|
try {
|
|
14
|
-
const packageJson =
|
|
14
|
+
const packageJson = load();
|
|
15
15
|
if (typeof packageJson.version === "string" && packageJson.version.length > 0) {
|
|
16
16
|
return packageJson.version;
|
|
17
17
|
}
|
|
@@ -79,7 +79,7 @@ var ACPProtocolHandler = class {
|
|
|
79
79
|
this.replayFor = opts.replayFor;
|
|
80
80
|
this.seedFor = opts.seedFor;
|
|
81
81
|
this.disposeFor = opts.disposeFor;
|
|
82
|
-
this.maxSessions = Number.isFinite(opts.maxSessions) &&
|
|
82
|
+
this.maxSessions = Number.isFinite(opts.maxSessions) && opts.maxSessions > 0 ? Math.floor(opts.maxSessions) : DEFAULT_MAX_SESSIONS;
|
|
83
83
|
this.store = opts.store;
|
|
84
84
|
if (typeof this.transport.onMessage === "function") {
|
|
85
85
|
this.transport.onMessage((m) => this.maybeResolvePending(m));
|
|
@@ -361,7 +361,7 @@ var ACPProtocolHandler = class {
|
|
|
361
361
|
}
|
|
362
362
|
if (existing) {
|
|
363
363
|
existing.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
364
|
-
const replay =
|
|
364
|
+
const replay = this.replayFor?.(sessionId);
|
|
365
365
|
if (replay) {
|
|
366
366
|
for (const update of replay) {
|
|
367
367
|
await this.sendNotification({ sessionId, update });
|
|
@@ -426,10 +426,8 @@ var ACPProtocolHandler = class {
|
|
|
426
426
|
return false;
|
|
427
427
|
}
|
|
428
428
|
session.abort.abort();
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
this.disposeSession(sessionId);
|
|
432
|
-
}
|
|
429
|
+
this.sessions.delete(sessionId);
|
|
430
|
+
this.disposeSession(sessionId);
|
|
433
431
|
await this.transport.send(toWire({
|
|
434
432
|
jsonrpc: "2.0",
|
|
435
433
|
id,
|
|
@@ -738,10 +736,11 @@ function errorToJsonRpc(err) {
|
|
|
738
736
|
|
|
739
737
|
// src/agent/stdio-transport.ts
|
|
740
738
|
import { expectDefined, writeErr } from "@wrongstack/core/utils";
|
|
739
|
+
import { treeKill } from "@wrongstack/core/utils/tree-kill";
|
|
741
740
|
var DEFAULT_MAX_FRAME_CHARS = 20 * 1024 * 1024;
|
|
742
741
|
var DEFAULT_MAX_QUEUED_MESSAGES = 1e3;
|
|
743
742
|
function positiveLimit(value, fallback) {
|
|
744
|
-
return Number.isFinite(value) &&
|
|
743
|
+
return value !== void 0 && Number.isFinite(value) && value > 0 ? Math.floor(value) : fallback;
|
|
745
744
|
}
|
|
746
745
|
var StdioTransport = class {
|
|
747
746
|
stdin = process.stdin;
|
|
@@ -756,10 +755,7 @@ var StdioTransport = class {
|
|
|
756
755
|
maxQueuedMessages;
|
|
757
756
|
constructor(opts = {}) {
|
|
758
757
|
this.maxFrameChars = positiveLimit(opts.maxFrameChars, DEFAULT_MAX_FRAME_CHARS);
|
|
759
|
-
this.maxQueuedMessages = positiveLimit(
|
|
760
|
-
opts.maxQueuedMessages,
|
|
761
|
-
DEFAULT_MAX_QUEUED_MESSAGES
|
|
762
|
-
);
|
|
758
|
+
this.maxQueuedMessages = positiveLimit(opts.maxQueuedMessages, DEFAULT_MAX_QUEUED_MESSAGES);
|
|
763
759
|
this.stdin.resume();
|
|
764
760
|
this.stdin.setEncoding("utf8");
|
|
765
761
|
this.stdin.on("data", (chunk) => this.onData(chunk));
|
|
@@ -780,7 +776,8 @@ var StdioTransport = class {
|
|
|
780
776
|
this.stdout.write(chunk, "utf8");
|
|
781
777
|
}
|
|
782
778
|
read() {
|
|
783
|
-
if (this.messageQueue.length > 0)
|
|
779
|
+
if (this.messageQueue.length > 0)
|
|
780
|
+
return Promise.resolve(expectDefined(this.messageQueue.shift()));
|
|
784
781
|
if (this.closed) return Promise.resolve(null);
|
|
785
782
|
return new Promise((resolve) => {
|
|
786
783
|
this.resolveRead = resolve;
|
|
@@ -927,10 +924,9 @@ var WrongStackACPServer = class {
|
|
|
927
924
|
let httpChain = Promise.resolve();
|
|
928
925
|
this.httpServer = createServer(async (req, res) => {
|
|
929
926
|
if (authToken) {
|
|
930
|
-
const url = new URL(req.url
|
|
927
|
+
const url = new URL(requestPath(req.url), `http://${host}:${port}`);
|
|
931
928
|
const queryToken = url.searchParams.get("token");
|
|
932
|
-
const
|
|
933
|
-
const bearerToken = Array.isArray(authHeader) ? authHeader[0]?.replace(/^Bearer\s+/i, "") : authHeader?.replace(/^Bearer\s+/i, "");
|
|
929
|
+
const bearerToken = headerValue(req.headers.authorization)?.replace(/^Bearer\s+/i, "");
|
|
934
930
|
const supplied = queryToken ?? bearerToken ?? "";
|
|
935
931
|
if (supplied !== authToken) {
|
|
936
932
|
res.writeHead(401, { "Content-Type": "application/json" });
|
|
@@ -939,7 +935,7 @@ var WrongStackACPServer = class {
|
|
|
939
935
|
}
|
|
940
936
|
}
|
|
941
937
|
const selfOrigin = `http://${host}:${port}`;
|
|
942
|
-
const reqOrigin =
|
|
938
|
+
const reqOrigin = headerValue(req.headers.origin);
|
|
943
939
|
if (reqOrigin && reqOrigin !== selfOrigin) {
|
|
944
940
|
res.writeHead(403);
|
|
945
941
|
res.end(JSON.stringify({ error: "cross-origin request forbidden" }));
|
|
@@ -1019,6 +1015,8 @@ var WrongStackACPServer = class {
|
|
|
1019
1015
|
try {
|
|
1020
1016
|
await requestPromise;
|
|
1021
1017
|
} catch {
|
|
1018
|
+
res.writeHead(500, { "Content-Type": "application/json" });
|
|
1019
|
+
res.end(JSON.stringify({ error: { code: -32603, message: "Internal error" } }));
|
|
1022
1020
|
}
|
|
1023
1021
|
});
|
|
1024
1022
|
return new Promise((resolve) => {
|
|
@@ -1044,6 +1042,13 @@ var WrongStackACPServer = class {
|
|
|
1044
1042
|
var defaultEchoRunTurn = async (_input, _emit) => {
|
|
1045
1043
|
return { stopReason: "end_turn" };
|
|
1046
1044
|
};
|
|
1045
|
+
function headerValue(value) {
|
|
1046
|
+
return Array.isArray(value) ? value[0] : value;
|
|
1047
|
+
}
|
|
1048
|
+
function requestPath(value) {
|
|
1049
|
+
return value ?? "/";
|
|
1050
|
+
}
|
|
1051
|
+
var wrongStackACPServerCoverage = { defaultEchoRunTurn, headerValue, requestPath };
|
|
1047
1052
|
async function main() {
|
|
1048
1053
|
const server = new WrongStackACPServer();
|
|
1049
1054
|
await server.start();
|
|
@@ -1057,6 +1062,7 @@ if (isEntrypoint) {
|
|
|
1057
1062
|
});
|
|
1058
1063
|
}
|
|
1059
1064
|
export {
|
|
1060
|
-
WrongStackACPServer
|
|
1065
|
+
WrongStackACPServer,
|
|
1066
|
+
wrongStackACPServerCoverage
|
|
1061
1067
|
};
|
|
1062
1068
|
//# sourceMappingURL=wrongstack-acp-agent.js.map
|