@botiverse/oar 0.0.4 → 0.0.6

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 (115) hide show
  1. package/README.md +15 -4
  2. package/dist/contracts/account-usage.d.ts +1 -0
  3. package/dist/contracts/account-usage.d.ts.map +1 -1
  4. package/dist/contracts/model-catalog.d.ts +51 -0
  5. package/dist/contracts/model-catalog.d.ts.map +1 -0
  6. package/dist/contracts/model-catalog.js +9 -0
  7. package/dist/contracts/model-catalog.js.map +1 -0
  8. package/dist/contracts/provider-auth.d.ts +77 -0
  9. package/dist/contracts/provider-auth.d.ts.map +1 -0
  10. package/dist/contracts/provider-auth.js +9 -0
  11. package/dist/contracts/provider-auth.js.map +1 -0
  12. package/dist/index.d.ts +12 -0
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +17 -1
  15. package/dist/index.js.map +1 -1
  16. package/dist/runtimes/claude/account-usage.d.ts +3 -1
  17. package/dist/runtimes/claude/account-usage.d.ts.map +1 -1
  18. package/dist/runtimes/claude/account-usage.js +26 -5
  19. package/dist/runtimes/claude/account-usage.js.map +1 -1
  20. package/dist/runtimes/codex/account-usage.d.ts +21 -0
  21. package/dist/runtimes/codex/account-usage.d.ts.map +1 -1
  22. package/dist/runtimes/codex/account-usage.js +27 -10
  23. package/dist/runtimes/codex/account-usage.js.map +1 -1
  24. package/dist/runtimes/grok/account-usage.d.ts +6 -0
  25. package/dist/runtimes/grok/account-usage.d.ts.map +1 -0
  26. package/dist/runtimes/grok/account-usage.js +142 -0
  27. package/dist/runtimes/grok/account-usage.js.map +1 -0
  28. package/dist/runtimes/grok/index.d.ts +9 -0
  29. package/dist/runtimes/grok/index.d.ts.map +1 -0
  30. package/dist/runtimes/grok/index.js +13 -0
  31. package/dist/runtimes/grok/index.js.map +1 -0
  32. package/dist/runtimes/grok/installation.d.ts +4 -0
  33. package/dist/runtimes/grok/installation.d.ts.map +1 -0
  34. package/dist/runtimes/grok/installation.js +19 -0
  35. package/dist/runtimes/grok/installation.js.map +1 -0
  36. package/dist/runtimes/grok/session.d.ts +10 -0
  37. package/dist/runtimes/grok/session.d.ts.map +1 -0
  38. package/dist/runtimes/grok/session.js +66 -0
  39. package/dist/runtimes/grok/session.js.map +1 -0
  40. package/dist/runtimes/kimi/account-usage.d.ts +9 -0
  41. package/dist/runtimes/kimi/account-usage.d.ts.map +1 -0
  42. package/dist/runtimes/kimi/account-usage.js +241 -0
  43. package/dist/runtimes/kimi/account-usage.js.map +1 -0
  44. package/dist/runtimes/kimi/auth-config.d.ts +12 -0
  45. package/dist/runtimes/kimi/auth-config.d.ts.map +1 -0
  46. package/dist/runtimes/kimi/auth-config.js +90 -0
  47. package/dist/runtimes/kimi/auth-config.js.map +1 -0
  48. package/dist/runtimes/kimi/index.d.ts +9 -0
  49. package/dist/runtimes/kimi/index.d.ts.map +1 -0
  50. package/dist/runtimes/kimi/index.js +13 -0
  51. package/dist/runtimes/kimi/index.js.map +1 -0
  52. package/dist/runtimes/kimi/installation.d.ts +4 -0
  53. package/dist/runtimes/kimi/installation.d.ts.map +1 -0
  54. package/dist/runtimes/kimi/installation.js +18 -0
  55. package/dist/runtimes/kimi/installation.js.map +1 -0
  56. package/dist/runtimes/kimi/oauth-token.d.ts +12 -0
  57. package/dist/runtimes/kimi/oauth-token.d.ts.map +1 -0
  58. package/dist/runtimes/kimi/oauth-token.js +38 -0
  59. package/dist/runtimes/kimi/oauth-token.js.map +1 -0
  60. package/dist/runtimes/kimi/session.d.ts +7 -0
  61. package/dist/runtimes/kimi/session.d.ts.map +1 -0
  62. package/dist/runtimes/kimi/session.js +39 -0
  63. package/dist/runtimes/kimi/session.js.map +1 -0
  64. package/dist/runtimes/pi/auth.d.ts +16 -0
  65. package/dist/runtimes/pi/auth.d.ts.map +1 -0
  66. package/dist/runtimes/pi/auth.js +124 -0
  67. package/dist/runtimes/pi/auth.js.map +1 -0
  68. package/dist/runtimes/pi/catalog.d.ts +10 -0
  69. package/dist/runtimes/pi/catalog.d.ts.map +1 -0
  70. package/dist/runtimes/pi/catalog.js +66 -0
  71. package/dist/runtimes/pi/catalog.js.map +1 -0
  72. package/dist/shared/acp/errors.d.ts +16 -0
  73. package/dist/shared/acp/errors.d.ts.map +1 -0
  74. package/dist/shared/acp/errors.js +25 -0
  75. package/dist/shared/acp/errors.js.map +1 -0
  76. package/dist/shared/acp/process.d.ts +24 -0
  77. package/dist/shared/acp/process.d.ts.map +1 -0
  78. package/dist/shared/acp/process.js +88 -0
  79. package/dist/shared/acp/process.js.map +1 -0
  80. package/dist/shared/acp/profile.d.ts +36 -0
  81. package/dist/shared/acp/profile.d.ts.map +1 -0
  82. package/dist/shared/acp/profile.js +104 -0
  83. package/dist/shared/acp/profile.js.map +1 -0
  84. package/dist/shared/acp/projection.d.ts +21 -0
  85. package/dist/shared/acp/projection.d.ts.map +1 -0
  86. package/dist/shared/acp/projection.js +160 -0
  87. package/dist/shared/acp/projection.js.map +1 -0
  88. package/dist/shared/acp/session.d.ts +5 -0
  89. package/dist/shared/acp/session.d.ts.map +1 -0
  90. package/dist/shared/acp/session.js +254 -0
  91. package/dist/shared/acp/session.js.map +1 -0
  92. package/dist/shared/acp/terminal.d.ts +17 -0
  93. package/dist/shared/acp/terminal.d.ts.map +1 -0
  94. package/dist/shared/acp/terminal.js +193 -0
  95. package/dist/shared/acp/terminal.js.map +1 -0
  96. package/dist/shared/executable/index.d.ts +0 -1
  97. package/dist/shared/executable/index.d.ts.map +1 -1
  98. package/dist/shared/executable/index.js.map +1 -1
  99. package/dist/shared/executable/process.d.ts +16 -15
  100. package/dist/shared/executable/process.d.ts.map +1 -1
  101. package/dist/shared/executable/process.js +46 -32
  102. package/dist/shared/executable/process.js.map +1 -1
  103. package/dist/shared/executable/resolve.d.ts +2 -15
  104. package/dist/shared/executable/resolve.d.ts.map +1 -1
  105. package/dist/shared/executable/resolve.js +4 -61
  106. package/dist/shared/executable/resolve.js.map +1 -1
  107. package/dist/shared/executable/version.d.ts +1 -1
  108. package/dist/shared/executable/version.d.ts.map +1 -1
  109. package/dist/shared/executable/version.js +2 -2
  110. package/dist/shared/executable/version.js.map +1 -1
  111. package/dist/shared/installation.d.ts +6 -1
  112. package/dist/shared/installation.d.ts.map +1 -1
  113. package/dist/shared/installation.js +11 -9
  114. package/dist/shared/installation.js.map +1 -1
  115. package/package.json +6 -3
@@ -0,0 +1,254 @@
1
+ import { asRecord } from "../json.js";
2
+ import { sealSession } from "../seal-session.js";
3
+ import { createSessionKernel } from "../session-kernel.js";
4
+ import { AcpError, acpProcessExitedError } from "./errors.js";
5
+ import { closeAcpSession, hasAcpCapability, openAcpSession, promptAcp, } from "./profile.js";
6
+ import { methods, startAcpProcess } from "./process.js";
7
+ import { acpFailureOutcome, acpRuntimeExitedOutcome, createAcpProjectionState, defaultAcpPromptOutcome, finishAcpTools, projectAcpUpdate, } from "./projection.js";
8
+ import { createAcpClientApp, createAcpTerminalHost } from "./terminal.js";
9
+ function ignoreUpdate(_notification) { }
10
+ export function acpSession(profile) {
11
+ return async (installation, options) => {
12
+ if (installation.via !== "executable") {
13
+ throw new Error("ACP runtimes require an executable installation");
14
+ }
15
+ profile.validateOptions?.(options);
16
+ const args = typeof profile.args === "function" ? profile.args(options) : profile.args;
17
+ const environment = { ...process.env, ...options.env };
18
+ const terminalHost = createAcpTerminalHost(options.cwd, environment, {
19
+ shellCommand: profile.terminalShellCommand === true,
20
+ });
21
+ let receiveUpdate = ignoreUpdate;
22
+ const runtime = startAcpProcess(installation.command, args, createAcpClientApp(terminalHost, (notification) => {
23
+ receiveUpdate(notification);
24
+ }), {
25
+ cwd: options.cwd,
26
+ env: environment,
27
+ });
28
+ const opened = await openAcpSession(runtime, profile, options).catch(async (error) => {
29
+ runtime.kill();
30
+ await runtime.exited;
31
+ await terminalHost.dispose();
32
+ throw error;
33
+ });
34
+ const capabilities = asRecord(opened.initialized.agentCapabilities);
35
+ const sessionCapabilities = asRecord(capabilities?.sessionCapabilities);
36
+ const supportsClose = hasAcpCapability(sessionCapabilities?.close);
37
+ const kernel = createSessionKernel(opened.sessionId);
38
+ const held = [];
39
+ let active = null;
40
+ let contextUsage = null;
41
+ let nextRequest = 0;
42
+ let disposed = false;
43
+ let dead = false;
44
+ const settle = (state, outcome) => {
45
+ if (state.kernelTurn.settled()) {
46
+ return;
47
+ }
48
+ for (const body of finishAcpTools(state.projection)) {
49
+ state.kernelTurn.emit(body);
50
+ }
51
+ state.kernelTurn.settle(outcome);
52
+ if (active === state) {
53
+ active = null;
54
+ }
55
+ queueMicrotask(drainHeld);
56
+ };
57
+ const failHeld = () => {
58
+ while (held.length > 0) {
59
+ held.shift();
60
+ kernel.begin()?.settle({
61
+ kind: "failed",
62
+ reason: "ACP process exited before queued input could run",
63
+ failure: "runtime_exited",
64
+ });
65
+ }
66
+ };
67
+ receiveUpdate = (notification) => {
68
+ if (notification.sessionId !== opened.sessionId) {
69
+ return;
70
+ }
71
+ const update = asRecord(notification.update);
72
+ if (update === null) {
73
+ return;
74
+ }
75
+ const state = active;
76
+ const projected = projectAcpUpdate(state?.projection ?? createAcpProjectionState(), update);
77
+ contextUsage = projected.contextUsage ?? contextUsage;
78
+ if (state !== null && !state.kernelTurn.settled()) {
79
+ for (const body of projected.bodies) {
80
+ state.kernelTurn.emit(body);
81
+ }
82
+ }
83
+ };
84
+ const finishRequest = (state, requestNumber, outcome) => {
85
+ if (state.kernelTurn.settled()) {
86
+ return;
87
+ }
88
+ state.pending.delete(requestNumber);
89
+ state.outcomes.set(requestNumber, outcome);
90
+ if (state.pending.size === 0) {
91
+ settle(state, state.outcomes.get(state.latestRequest) ?? outcome);
92
+ }
93
+ };
94
+ const startVendorPrompt = (state, input, extraParams = {}) => {
95
+ nextRequest += 1;
96
+ const requestNumber = nextRequest;
97
+ state.latestRequest = requestNumber;
98
+ state.pending.add(requestNumber);
99
+ void (async () => {
100
+ try {
101
+ const result = await promptAcp(runtime, opened.sessionId, input, extraParams);
102
+ contextUsage = profile.promptContextUsage?.(result) ?? contextUsage;
103
+ finishRequest(state, requestNumber, profile.promptOutcome?.(result) ?? defaultAcpPromptOutcome(result));
104
+ }
105
+ catch (error) {
106
+ const outcome = state.abortRequested
107
+ && !(error instanceof AcpError && error.kind === "process_exited")
108
+ ? { kind: "aborted" }
109
+ : acpFailureOutcome(error);
110
+ finishRequest(state, requestNumber, outcome);
111
+ }
112
+ })();
113
+ };
114
+ const makeTurn = (state) => {
115
+ const steerParams = profile.steerParams;
116
+ return {
117
+ id: state.kernelTurn.id,
118
+ outcome: state.kernelTurn.outcome,
119
+ abort: async () => {
120
+ if (state.kernelTurn.settled()) {
121
+ return;
122
+ }
123
+ if (!state.abortRequested) {
124
+ state.abortRequested = true;
125
+ try {
126
+ await runtime.connection.agent.notify(methods.agent.session.cancel, { sessionId: opened.sessionId });
127
+ }
128
+ catch (error) {
129
+ settle(state, acpFailureOutcome(error));
130
+ }
131
+ }
132
+ const timeoutMs = profile.abortTimeoutMs ?? 10_000;
133
+ const fallback = setTimeout(() => {
134
+ if (!state.kernelTurn.settled()) {
135
+ dead = true;
136
+ settle(state, { kind: "aborted" });
137
+ runtime.kill();
138
+ }
139
+ }, timeoutMs);
140
+ fallback.unref();
141
+ await state.kernelTurn.outcome;
142
+ clearTimeout(fallback);
143
+ },
144
+ ...(steerParams === undefined ? {} : {
145
+ steer: async (input) => {
146
+ await runtime.spawned;
147
+ if (state.kernelTurn.settled() || active !== state) {
148
+ return {
149
+ kind: "not_steerable",
150
+ reason: "turn already ended",
151
+ };
152
+ }
153
+ if (runtime.closed) {
154
+ throw acpProcessExitedError(runtime.exitCode);
155
+ }
156
+ startVendorPrompt(state, input, steerParams(input));
157
+ return { kind: "accepted" };
158
+ },
159
+ }),
160
+ };
161
+ };
162
+ const beginInput = (input) => {
163
+ const kernelTurn = kernel.begin();
164
+ if (kernelTurn === null) {
165
+ return null;
166
+ }
167
+ const state = {
168
+ kernelTurn,
169
+ outcomes: new Map(),
170
+ pending: new Set(),
171
+ projection: createAcpProjectionState(),
172
+ abortRequested: false,
173
+ latestRequest: 0,
174
+ };
175
+ active = state;
176
+ if (dead || runtime.closed) {
177
+ settle(state, acpRuntimeExitedOutcome(null));
178
+ }
179
+ else {
180
+ startVendorPrompt(state, input);
181
+ }
182
+ return makeTurn(state);
183
+ };
184
+ function drainHeld() {
185
+ if (disposed || active !== null) {
186
+ return;
187
+ }
188
+ if (dead || runtime.closed) {
189
+ failHeld();
190
+ return;
191
+ }
192
+ const input = held.shift();
193
+ if (input !== undefined) {
194
+ beginInput(input);
195
+ }
196
+ }
197
+ const onRuntimeExit = (code) => {
198
+ void terminalHost.dispose();
199
+ if (disposed) {
200
+ return;
201
+ }
202
+ dead = true;
203
+ if (active !== null) {
204
+ settle(active, acpRuntimeExitedOutcome(code));
205
+ }
206
+ failHeld();
207
+ };
208
+ // oxlint-disable-next-line promise/prefer-await-to-then, promise/always-return -- Exit observation outlives session creation.
209
+ void runtime.exited.then(onRuntimeExit);
210
+ return sealSession({
211
+ id: kernel.sessionId,
212
+ prompt(input) {
213
+ const next = beginInput(input);
214
+ return next === null ? { kind: "busy" } : { kind: "turn", turn: next };
215
+ },
216
+ subscribe: (observer) => kernel.subscribe(observer),
217
+ contextUsage: () => contextUsage,
218
+ queue: {
219
+ durable: false,
220
+ add: async (input) => {
221
+ await runtime.spawned;
222
+ if (disposed || dead || runtime.closed) {
223
+ throw acpProcessExitedError(runtime.exitCode);
224
+ }
225
+ held.push(input);
226
+ queueMicrotask(drainHeld);
227
+ },
228
+ },
229
+ dispose: async () => {
230
+ if (disposed) {
231
+ return;
232
+ }
233
+ disposed = true;
234
+ held.splice(0);
235
+ if (active !== null && !active.kernelTurn.settled()) {
236
+ try {
237
+ await runtime.connection.agent.notify(methods.agent.session.cancel, { sessionId: opened.sessionId });
238
+ }
239
+ catch {
240
+ // Local settlement below is authoritative during disposal.
241
+ }
242
+ settle(active, { kind: "aborted" });
243
+ }
244
+ if (supportsClose && !runtime.closed) {
245
+ await closeAcpSession(runtime, opened.sessionId).catch(() => { });
246
+ }
247
+ runtime.kill();
248
+ await runtime.exited;
249
+ await terminalHost.dispose();
250
+ },
251
+ });
252
+ };
253
+ }
254
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/shared/acp/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { type ClientApp, type CreateTerminalRequest, type CreateTerminalResponse, type KillTerminalRequest, type KillTerminalResponse, type ReleaseTerminalRequest, type ReleaseTerminalResponse, type SessionNotification, type TerminalOutputRequest, type TerminalOutputResponse, type WaitForTerminalExitRequest, type WaitForTerminalExitResponse } from "@agentclientprotocol/sdk";
2
+ export interface AcpTerminalHost {
3
+ create(params: CreateTerminalRequest): Promise<CreateTerminalResponse>;
4
+ output(params: TerminalOutputRequest): TerminalOutputResponse;
5
+ waitForExit(params: WaitForTerminalExitRequest): Promise<WaitForTerminalExitResponse>;
6
+ kill(params: KillTerminalRequest): KillTerminalResponse;
7
+ release(params: ReleaseTerminalRequest): Promise<ReleaseTerminalResponse>;
8
+ dispose(): Promise<void>;
9
+ }
10
+ export interface AcpTerminalHostOptions {
11
+ readonly shellCommand?: boolean;
12
+ }
13
+ /** Compose OAR's typed ACP client handlers directly on the official SDK app. */
14
+ export declare function createAcpClientApp(terminal: AcpTerminalHost, update: (notification: SessionNotification) => void): ClientApp;
15
+ /** Host implementation of ACP v1's typed terminal reverse-RPC surface. */
16
+ export declare function createAcpTerminalHost(cwd: string, environment: NodeJS.ProcessEnv, options?: AcpTerminalHostOptions): AcpTerminalHost;
17
+ //# sourceMappingURL=terminal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../../src/shared/acp/terminal.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAG5B,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,EACjC,MAAM,0BAA0B,CAAC;AA2BlC,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACvE,MAAM,CAAC,MAAM,EAAE,qBAAqB,GAAG,sBAAsB,CAAC;IAC9D,WAAW,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;IACtF,IAAI,CAAC,MAAM,EAAE,mBAAmB,GAAG,oBAAoB,CAAC;IACxD,OAAO,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC1E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;CACjC;AAUD,gFAAgF;AAChF,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,CAAC,YAAY,EAAE,mBAAmB,KAAK,IAAI,GAClD,SAAS,CAWX;AA+DD,0EAA0E;AAC1E,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,CAAC,UAAU,EAC9B,OAAO,GAAE,sBAA2B,GACnC,eAAe,CAwHjB"}
@@ -0,0 +1,193 @@
1
+ /* oxlint-disable typescript/promise-function-async -- SDK handlers deliberately return terminal promises directly. */
2
+ import { client as createClient, methods, RequestError, } from "@agentclientprotocol/sdk";
3
+ import { randomUUID } from "node:crypto";
4
+ import path from "node:path";
5
+ import { StringDecoder } from "node:string_decoder";
6
+ import spawn from "cross-spawn";
7
+ const DEFAULT_OUTPUT_LIMIT = 4 * 1024 * 1024;
8
+ const MAX_OUTPUT_LIMIT = 16 * 1024 * 1024;
9
+ function allowPermission(request) {
10
+ const selected = request.options.find((option) => option.kind === "allow_always")
11
+ ?? request.options.find((option) => option.kind === "allow_once");
12
+ return selected === undefined
13
+ ? { outcome: { outcome: "cancelled" } }
14
+ : { outcome: { outcome: "selected", optionId: selected.optionId } };
15
+ }
16
+ /** Compose OAR's typed ACP client handlers directly on the official SDK app. */
17
+ export function createAcpClientApp(terminal, update) {
18
+ return createClient({ name: "oar" })
19
+ .onRequest(methods.client.session.requestPermission, ({ params }) => allowPermission(params))
20
+ .onRequest(methods.client.terminal.create, ({ params }) => terminal.create(params))
21
+ .onRequest(methods.client.terminal.output, ({ params }) => terminal.output(params))
22
+ .onRequest(methods.client.terminal.waitForExit, ({ params }) => terminal.waitForExit(params))
23
+ .onRequest(methods.client.terminal.kill, ({ params }) => terminal.kill(params))
24
+ .onRequest(methods.client.terminal.release, ({ params }) => terminal.release(params))
25
+ .onNotification(methods.client.session.update, ({ params }) => {
26
+ update(params);
27
+ });
28
+ }
29
+ function invalid(message) {
30
+ throw RequestError.invalidParams(undefined, message);
31
+ }
32
+ function outputLimit(value) {
33
+ if (value === undefined || value === null) {
34
+ return DEFAULT_OUTPUT_LIMIT;
35
+ }
36
+ if (!Number.isFinite(value) || value < 0) {
37
+ invalid("ACP terminal outputByteLimit must be finite and nonnegative");
38
+ }
39
+ return Math.min(Math.floor(value), MAX_OUTPUT_LIMIT);
40
+ }
41
+ function tailAtCharacterBoundary(value, limit) {
42
+ const encoded = Buffer.from(value);
43
+ if (encoded.byteLength <= limit) {
44
+ return value;
45
+ }
46
+ let start = encoded.byteLength - limit;
47
+ while (start < encoded.byteLength) {
48
+ const byte = encoded[start];
49
+ if (byte === undefined || (byte & 0xC0) !== 0x80) {
50
+ break;
51
+ }
52
+ start += 1;
53
+ }
54
+ return encoded.subarray(start).toString("utf8");
55
+ }
56
+ function appendOutput(state, text) {
57
+ if (text.length === 0) {
58
+ return;
59
+ }
60
+ const combined = `${state.output}${text}`;
61
+ if (Buffer.byteLength(combined) > state.outputLimit) {
62
+ state.truncated = true;
63
+ state.output = tailAtCharacterBoundary(combined, state.outputLimit);
64
+ }
65
+ else {
66
+ state.output = combined;
67
+ }
68
+ }
69
+ function terminalFor(terminals, params) {
70
+ const terminal = terminals.get(params.terminalId);
71
+ if (terminal === undefined || terminal.sessionId !== params.sessionId) {
72
+ invalid(`Unknown ACP terminal: ${params.terminalId}`);
73
+ }
74
+ return terminal;
75
+ }
76
+ async function stopTerminal(state) {
77
+ if (state.exitStatus === null) {
78
+ state.child.kill("SIGKILL");
79
+ }
80
+ await state.exited;
81
+ }
82
+ /** Host implementation of ACP v1's typed terminal reverse-RPC surface. */
83
+ export function createAcpTerminalHost(cwd, environment, options = {}) {
84
+ const terminals = new Map();
85
+ const create = async (params) => {
86
+ if (params.command.length === 0) {
87
+ invalid("ACP terminal request requires command");
88
+ }
89
+ if (params.cwd !== undefined && params.cwd !== null && !path.isAbsolute(params.cwd)) {
90
+ invalid("ACP terminal cwd must be an absolute path");
91
+ }
92
+ const terminalId = randomUUID();
93
+ const child = spawn(params.command, params.args ?? [], {
94
+ cwd: params.cwd ?? cwd,
95
+ env: {
96
+ ...environment,
97
+ ...Object.fromEntries((params.env ?? []).map(({ name, value }) => [name, value])),
98
+ },
99
+ shell: options.shellCommand === true && params.args === undefined,
100
+ stdio: ["ignore", "pipe", "pipe"],
101
+ });
102
+ const { stdout, stderr } = child;
103
+ if (stdout === null || stderr === null) {
104
+ child.kill("SIGKILL");
105
+ throw RequestError.internalError(undefined, "ACP terminal process has no output streams");
106
+ }
107
+ const { promise: spawned, resolve: resolveSpawned, reject: rejectSpawned } = Promise.withResolvers();
108
+ const { promise: exited, resolve: resolveExited } = Promise.withResolvers();
109
+ const state = {
110
+ child,
111
+ exited,
112
+ sessionId: params.sessionId,
113
+ stderrDecoder: new StringDecoder("utf8"),
114
+ stdoutDecoder: new StringDecoder("utf8"),
115
+ terminalId,
116
+ outputLimit: outputLimit(params.outputByteLimit),
117
+ exitStatus: null,
118
+ output: "",
119
+ truncated: false,
120
+ };
121
+ terminals.set(terminalId, state);
122
+ stdout.on("data", (chunk) => {
123
+ appendOutput(state, state.stdoutDecoder.write(Buffer.from(chunk)));
124
+ });
125
+ stderr.on("data", (chunk) => {
126
+ appendOutput(state, state.stderrDecoder.write(Buffer.from(chunk)));
127
+ });
128
+ const finish = (status) => {
129
+ if (state.exitStatus !== null) {
130
+ return;
131
+ }
132
+ appendOutput(state, state.stdoutDecoder.end());
133
+ appendOutput(state, state.stderrDecoder.end());
134
+ state.exitStatus = status;
135
+ resolveExited(status);
136
+ };
137
+ child.once("spawn", resolveSpawned);
138
+ child.once("close", (exitCode, signal) => {
139
+ finish({ exitCode, signal });
140
+ });
141
+ child.once("error", (error) => {
142
+ rejectSpawned(error);
143
+ finish({ exitCode: null, signal: null });
144
+ });
145
+ try {
146
+ await spawned;
147
+ }
148
+ catch (error) {
149
+ terminals.delete(terminalId);
150
+ throw RequestError.internalError(undefined, error instanceof Error ? error.message : "Failed to create ACP terminal");
151
+ }
152
+ return { terminalId };
153
+ };
154
+ const output = (params) => {
155
+ const state = terminalFor(terminals, params);
156
+ return {
157
+ output: state.output,
158
+ truncated: state.truncated,
159
+ ...(state.exitStatus === null ? {} : { exitStatus: state.exitStatus }),
160
+ };
161
+ };
162
+ const waitForExit = async (params) => ({
163
+ ...await terminalFor(terminals, params).exited,
164
+ });
165
+ const kill = (params) => {
166
+ const state = terminalFor(terminals, params);
167
+ if (state.exitStatus === null) {
168
+ state.child.kill("SIGTERM");
169
+ }
170
+ return {};
171
+ };
172
+ const release = async (params) => {
173
+ const state = terminalFor(terminals, params);
174
+ terminals.delete(state.terminalId);
175
+ await stopTerminal(state);
176
+ return {};
177
+ };
178
+ return {
179
+ create,
180
+ output,
181
+ waitForExit,
182
+ kill,
183
+ release,
184
+ async dispose() {
185
+ const active = [...terminals.values()];
186
+ terminals.clear();
187
+ await Promise.all(active.map(async (state) => {
188
+ await stopTerminal(state);
189
+ }));
190
+ },
191
+ };
192
+ }
193
+ //# sourceMappingURL=terminal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../../src/shared/acp/terminal.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- export type { ExecFileSyncLike, ExecutableResolveOptions } from "./resolve.js";
2
1
  export { resolveExecutable } from "./resolve.js";
3
2
  export type { ExecutableResult, ExecutableRunner, ExecutableRunOptions } from "./run.js";
4
3
  export { runExecutable } from "./run.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/executable/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/executable/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/executable/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/executable/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
@@ -1,27 +1,28 @@
1
- /**
2
- * A long-lived child process spoken to line-by-line — the transport shape both
3
- * session adapters use (JSONL protocols over stdio). Owns the details raw
4
- * spawn callers keep re-implementing: stdio wiring, line buffering with a
5
- * trailing partial buffer, exit fan-out, teardown, and the Windows quirk that
6
- * npm-installed CLIs are .cmd shims which modern Node refuses to spawn without
7
- * a shell (EINVAL). Windows handling follows Node's documented `shell` option
8
- * and is honest about being untested here (no Windows machine in the loop).
9
- */
1
+ import type { Readable, Writable } from "node:stream";
2
+ interface ProcessOptions {
3
+ readonly cwd?: string;
4
+ readonly env?: NodeJS.ProcessEnv;
5
+ }
6
+ /** A long-lived child whose raw streams can also be observed line-by-line. */
10
7
  export interface LineProcess {
11
8
  /** Resolves once the OS process exists; rejects when it cannot be spawned. */
12
9
  readonly spawned: Promise<void>;
13
- /** Resolves when the process is truly gone the release point for any state it held (locks, sockets). */
10
+ /** Resolves when the process is truly gone and its state has been released. */
14
11
  readonly exited: Promise<number | null>;
12
+ readonly stdin: Writable;
13
+ readonly stdout: Readable;
15
14
  write(text: string): void;
16
15
  onLine(handler: (line: string) => void): void;
17
16
  /** Fires exactly once, for exit or spawn-level error alike. */
18
17
  onExit(handler: (code: number | null) => void): void;
19
18
  kill(): void;
20
19
  }
21
- /** Windows npm shims are .cmd/.bat files, which modern Node refuses to spawn without a shell (EINVAL). Line processes go through cross-spawn instead (correct cmd arg quoting); this predicate remains for one-shot execFile calls, whose args must stay SINGLE-WORD on Windows because shell:true does not quote. */
20
+ /** Windows npm shims need a shell for one-shot execFile calls. */
22
21
  export declare function requiresShell(command: string, platform: NodeJS.Platform): boolean;
23
- export declare function spawnLineProcess(command: string, args: readonly string[], options?: {
24
- readonly cwd?: string;
25
- readonly env?: NodeJS.ProcessEnv;
26
- }): LineProcess;
22
+ /**
23
+ * Spawn through cross-spawn so Windows .cmd shims preserve multi-word args.
24
+ * Line parsing is attached lazily; protocol SDKs can consume the raw streams.
25
+ */
26
+ export declare function spawnLineProcess(command: string, args: readonly string[], options?: ProcessOptions): LineProcess;
27
+ export {};
27
28
  //# sourceMappingURL=process.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../../src/shared/executable/process.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,WAAW,WAAW;IAC1B,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,0GAA0G;IAC1G,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACxC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IAC9C,+DAA+D;IAC/D,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC;IACrD,IAAI,IAAI,IAAI,CAAC;CACd;AAED,sTAAsT;AACtT,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,GAAG,OAAO,CAEjF;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,GAAE;IAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CAAO,GACxE,WAAW,CAwEb"}
1
+ {"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../../src/shared/executable/process.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEtD,UAAU,cAAc;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CAClC;AAED,8EAA8E;AAC9E,MAAM,WAAW,WAAW;IAC1B,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IAC9C,+DAA+D;IAC/D,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC;IACrD,IAAI,IAAI,IAAI,CAAC;CACd;AAED,kEAAkE;AAClE,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,GAAG,OAAO,CAEjF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,GAAE,cAAmB,GAC3B,WAAW,CAiFb"}