@jasonews/agent-squad-gateway 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +200 -0
  3. package/SECURITY.md +44 -0
  4. package/dist/bin/agent-squad-gateway.js +55 -0
  5. package/dist/bin/agent-squad-gateway.js.map +1 -0
  6. package/dist/config/config.js +124 -0
  7. package/dist/config/config.js.map +1 -0
  8. package/dist/config/paths.js +16 -0
  9. package/dist/config/paths.js.map +1 -0
  10. package/dist/control-plane/clients.js +77 -0
  11. package/dist/control-plane/clients.js.map +1 -0
  12. package/dist/control-plane/core-connection.js +54 -0
  13. package/dist/control-plane/core-connection.js.map +1 -0
  14. package/dist/control-plane/credentials.js +134 -0
  15. package/dist/control-plane/credentials.js.map +1 -0
  16. package/dist/control-plane/db.js +33 -0
  17. package/dist/control-plane/db.js.map +1 -0
  18. package/dist/control-plane/extensions.js +59 -0
  19. package/dist/control-plane/extensions.js.map +1 -0
  20. package/dist/control-plane/grants.js +107 -0
  21. package/dist/control-plane/grants.js.map +1 -0
  22. package/dist/control-plane/idempotency.js +132 -0
  23. package/dist/control-plane/idempotency.js.map +1 -0
  24. package/dist/control-plane/migrations.js +133 -0
  25. package/dist/control-plane/migrations.js.map +1 -0
  26. package/dist/control-plane/response-sessions.js +359 -0
  27. package/dist/control-plane/response-sessions.js.map +1 -0
  28. package/dist/control-plane/retention.js +138 -0
  29. package/dist/control-plane/retention.js.map +1 -0
  30. package/dist/control-plane/runs.js +156 -0
  31. package/dist/control-plane/runs.js.map +1 -0
  32. package/dist/control-plane/targets.js +449 -0
  33. package/dist/control-plane/targets.js.map +1 -0
  34. package/dist/control-plane/types.js +2 -0
  35. package/dist/control-plane/types.js.map +1 -0
  36. package/dist/core-client/client.js +275 -0
  37. package/dist/core-client/client.js.map +1 -0
  38. package/dist/core-client/event-proxy.js +105 -0
  39. package/dist/core-client/event-proxy.js.map +1 -0
  40. package/dist/core-client/types.js +2 -0
  41. package/dist/core-client/types.js.map +1 -0
  42. package/dist/extensions/contract.js +2 -0
  43. package/dist/extensions/contract.js.map +1 -0
  44. package/dist/extensions/openai/auth.js +16 -0
  45. package/dist/extensions/openai/auth.js.map +1 -0
  46. package/dist/extensions/openai/chat.js +403 -0
  47. package/dist/extensions/openai/chat.js.map +1 -0
  48. package/dist/extensions/openai/errors.js +79 -0
  49. package/dist/extensions/openai/errors.js.map +1 -0
  50. package/dist/extensions/openai/image-input.js +79 -0
  51. package/dist/extensions/openai/image-input.js.map +1 -0
  52. package/dist/extensions/openai/models.js +40 -0
  53. package/dist/extensions/openai/models.js.map +1 -0
  54. package/dist/extensions/openai/responses.js +731 -0
  55. package/dist/extensions/openai/responses.js.map +1 -0
  56. package/dist/extensions/openai/routes.js +81 -0
  57. package/dist/extensions/openai/routes.js.map +1 -0
  58. package/dist/extensions/openai/run-attempt.js +96 -0
  59. package/dist/extensions/openai/run-attempt.js.map +1 -0
  60. package/dist/extensions/openai/schemas.js +176 -0
  61. package/dist/extensions/openai/schemas.js.map +1 -0
  62. package/dist/extensions/openai/sse.js +421 -0
  63. package/dist/extensions/openai/sse.js.map +1 -0
  64. package/dist/extensions/openai/tools.js +727 -0
  65. package/dist/extensions/openai/tools.js.map +1 -0
  66. package/dist/extensions/registry.js +30 -0
  67. package/dist/extensions/registry.js.map +1 -0
  68. package/dist/lifecycle/daemon.js +437 -0
  69. package/dist/lifecycle/daemon.js.map +1 -0
  70. package/dist/lifecycle/pidfile.js +34 -0
  71. package/dist/lifecycle/pidfile.js.map +1 -0
  72. package/dist/provider-runtime/antigravity/adapter.js +398 -0
  73. package/dist/provider-runtime/antigravity/adapter.js.map +1 -0
  74. package/dist/provider-runtime/antigravity/conversation.js +31 -0
  75. package/dist/provider-runtime/antigravity/conversation.js.map +1 -0
  76. package/dist/provider-runtime/capability-service.js +191 -0
  77. package/dist/provider-runtime/capability-service.js.map +1 -0
  78. package/dist/provider-runtime/claude/adapter.js +397 -0
  79. package/dist/provider-runtime/claude/adapter.js.map +1 -0
  80. package/dist/provider-runtime/claude/protocol.js +143 -0
  81. package/dist/provider-runtime/claude/protocol.js.map +1 -0
  82. package/dist/provider-runtime/codex/adapter.js +440 -0
  83. package/dist/provider-runtime/codex/adapter.js.map +1 -0
  84. package/dist/provider-runtime/codex/json-rpc-client.js +182 -0
  85. package/dist/provider-runtime/codex/json-rpc-client.js.map +1 -0
  86. package/dist/provider-runtime/codex/protocol.js +128 -0
  87. package/dist/provider-runtime/codex/protocol.js.map +1 -0
  88. package/dist/provider-runtime/command-discovery.js +106 -0
  89. package/dist/provider-runtime/command-discovery.js.map +1 -0
  90. package/dist/provider-runtime/cursor/adapter.js +427 -0
  91. package/dist/provider-runtime/cursor/adapter.js.map +1 -0
  92. package/dist/provider-runtime/cursor/protocol.js +81 -0
  93. package/dist/provider-runtime/cursor/protocol.js.map +1 -0
  94. package/dist/provider-runtime/fake/adapter.js +138 -0
  95. package/dist/provider-runtime/fake/adapter.js.map +1 -0
  96. package/dist/provider-runtime/image-assets.js +409 -0
  97. package/dist/provider-runtime/image-assets.js.map +1 -0
  98. package/dist/provider-runtime/image-support.js +5 -0
  99. package/dist/provider-runtime/image-support.js.map +1 -0
  100. package/dist/provider-runtime/invocation-service.js +503 -0
  101. package/dist/provider-runtime/invocation-service.js.map +1 -0
  102. package/dist/provider-runtime/kimi/adapter.js +657 -0
  103. package/dist/provider-runtime/kimi/adapter.js.map +1 -0
  104. package/dist/provider-runtime/opencode/adapter.js +610 -0
  105. package/dist/provider-runtime/opencode/adapter.js.map +1 -0
  106. package/dist/provider-runtime/opencode/server.js +46 -0
  107. package/dist/provider-runtime/opencode/server.js.map +1 -0
  108. package/dist/provider-runtime/process/line-reader.js +49 -0
  109. package/dist/provider-runtime/process/line-reader.js.map +1 -0
  110. package/dist/provider-runtime/process/managed-process.js +151 -0
  111. package/dist/provider-runtime/process/managed-process.js.map +1 -0
  112. package/dist/provider-runtime/provider-input.js +77 -0
  113. package/dist/provider-runtime/provider-input.js.map +1 -0
  114. package/dist/provider-runtime/register-providers.js +26 -0
  115. package/dist/provider-runtime/register-providers.js.map +1 -0
  116. package/dist/provider-runtime/registry.js +35 -0
  117. package/dist/provider-runtime/registry.js.map +1 -0
  118. package/dist/provider-runtime/replay-buffer.js +168 -0
  119. package/dist/provider-runtime/replay-buffer.js.map +1 -0
  120. package/dist/provider-runtime/scheduler.js +155 -0
  121. package/dist/provider-runtime/scheduler.js.map +1 -0
  122. package/dist/provider-runtime/types.js +2 -0
  123. package/dist/provider-runtime/types.js.map +1 -0
  124. package/dist/provider-runtime/workspaces.js +814 -0
  125. package/dist/provider-runtime/workspaces.js.map +1 -0
  126. package/dist/security/admin-auth.js +109 -0
  127. package/dist/security/admin-auth.js.map +1 -0
  128. package/dist/security/crypto.js +52 -0
  129. package/dist/security/crypto.js.map +1 -0
  130. package/dist/security/secret-files.js +33 -0
  131. package/dist/security/secret-files.js.map +1 -0
  132. package/dist/server/admin-routes.js +610 -0
  133. package/dist/server/admin-routes.js.map +1 -0
  134. package/dist/server/app.js +178 -0
  135. package/dist/server/app.js.map +1 -0
  136. package/dist/server/auth-hooks.js +43 -0
  137. package/dist/server/auth-hooks.js.map +1 -0
  138. package/dist/server/core-routes.js +127 -0
  139. package/dist/server/core-routes.js.map +1 -0
  140. package/dist/server/errors.js +19 -0
  141. package/dist/server/errors.js.map +1 -0
  142. package/dist/server/ui-routes.js +77 -0
  143. package/dist/server/ui-routes.js.map +1 -0
  144. package/dist/web/assets/index-BhqNoPpE.js +206 -0
  145. package/dist/web/assets/index-BhqNoPpE.js.map +1 -0
  146. package/dist/web/assets/index-C5nnaBfZ.css +1 -0
  147. package/dist/web/index.html +14 -0
  148. package/package.json +74 -0
  149. package/translations/README.zh-CN.md +175 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/provider-runtime/kimi/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,610 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { basename } from 'node:path';
3
+ import { pathToFileURL } from 'node:url';
4
+ import Ajv2020 from 'ajv/dist/2020.js';
5
+ import { API_PROVIDER_SYSTEM_INSTRUCTION, renderProviderInput, } from '../provider-input.js';
6
+ import { readBoundedLines } from '../process/line-reader.js';
7
+ import { spawnManagedProcess, } from '../process/managed-process.js';
8
+ import { OpenCodeServer } from './server.js';
9
+ const COMMAND_OUTPUT_LIMIT_BYTES = 64 * 1024;
10
+ const NATIVE_ABORT_TIMEOUT_MS = 2_000;
11
+ const CONFORMANCE_SCHEMA = {
12
+ type: 'object',
13
+ required: ['type', 'content'],
14
+ properties: {
15
+ type: { const: 'assistant_text' },
16
+ content: { type: 'string' },
17
+ },
18
+ additionalProperties: false,
19
+ };
20
+ const validateConformanceOutput = new Ajv2020({ allErrors: false }).compile(CONFORMANCE_SCHEMA);
21
+ const SAFE_FINAL_PARTS = new Set([
22
+ 'text', 'reasoning', 'step-start', 'step-finish', 'retry', 'compaction',
23
+ ]);
24
+ export class OpenCodeAdapterError extends Error {
25
+ code;
26
+ constructor(code) {
27
+ super(code);
28
+ this.code = code;
29
+ this.name = 'OpenCodeAdapterError';
30
+ }
31
+ }
32
+ export class ProviderConfigError extends OpenCodeAdapterError {
33
+ constructor(code) {
34
+ super(code);
35
+ this.name = 'ProviderConfigError';
36
+ }
37
+ }
38
+ export function splitOpenCodeModel(value) {
39
+ const slash = value.indexOf('/');
40
+ if (slash <= 0 || slash === value.length - 1) {
41
+ throw new ProviderConfigError('invalid_opencode_model');
42
+ }
43
+ return {
44
+ providerID: value.slice(0, slash),
45
+ modelID: value.slice(slash + 1),
46
+ };
47
+ }
48
+ function asRecord(value) {
49
+ return typeof value === 'object' && value !== null ? value : null;
50
+ }
51
+ function eventRecord(event) {
52
+ return event;
53
+ }
54
+ function eventProperties(event) {
55
+ return asRecord(eventRecord(event).properties) ?? {};
56
+ }
57
+ function eventDirectory(event) {
58
+ const record = eventRecord(event);
59
+ if (typeof record.directory === 'string')
60
+ return record.directory;
61
+ const properties = eventProperties(event);
62
+ if (typeof properties.directory === 'string')
63
+ return properties.directory;
64
+ const location = asRecord(record.location);
65
+ return typeof location?.directory === 'string' ? location.directory : null;
66
+ }
67
+ function eventType(event) {
68
+ return typeof eventRecord(event).type === 'string' ? String(eventRecord(event).type) : '';
69
+ }
70
+ function eventAttribution(properties) {
71
+ const nested = [
72
+ properties.part,
73
+ properties.permission,
74
+ properties.tool,
75
+ properties.source,
76
+ ].map(asRecord).find((value) => value !== null && typeof value.messageID === 'string');
77
+ return {
78
+ sessionID: properties.sessionID ?? nested?.sessionID,
79
+ messageID: properties.messageID ?? properties.assistantMessageID ?? nested?.messageID,
80
+ };
81
+ }
82
+ function matchingMessage(properties, sessionID, messageIDs) {
83
+ const attribution = eventAttribution(properties);
84
+ return attribution.sessionID === sessionID
85
+ && typeof attribution.messageID === 'string'
86
+ && messageIDs.has(attribution.messageID);
87
+ }
88
+ function isUnsafeEvent(type) {
89
+ return type === 'command.executed'
90
+ || type.startsWith('permission.')
91
+ || type.startsWith('question.')
92
+ || type.startsWith('session.next.tool.')
93
+ || type.startsWith('session.next.shell.')
94
+ || type.startsWith('mcp.')
95
+ || type === 'file.edited'
96
+ || type === 'session.diff';
97
+ }
98
+ function isDirectoryScopedUnsafeEvent(type) {
99
+ return type.startsWith('mcp.') || type === 'file.edited';
100
+ }
101
+ function matchingUnsafeEvent(type, properties, sessionID, messageIDs, directoryMatches) {
102
+ const attribution = eventAttribution(properties);
103
+ if (typeof attribution.sessionID === 'string') {
104
+ if (attribution.sessionID !== sessionID)
105
+ return false;
106
+ return typeof attribution.messageID !== 'string'
107
+ || messageIDs.has(attribution.messageID);
108
+ }
109
+ return directoryMatches && isDirectoryScopedUnsafeEvent(type);
110
+ }
111
+ function isUnsafePart(type) {
112
+ return type === 'tool'
113
+ || type === 'subtask'
114
+ || type === 'agent'
115
+ || type === 'command'
116
+ || type === 'permission'
117
+ || type === 'file'
118
+ || type === 'patch'
119
+ || type === 'snapshot';
120
+ }
121
+ function waitForSignal(operation, signal) {
122
+ if (signal.aborted)
123
+ return Promise.reject(signal.reason ?? new Error('aborted'));
124
+ return new Promise((resolve, reject) => {
125
+ const onAbort = () => reject(signal.reason ?? new Error('aborted'));
126
+ signal.addEventListener('abort', onAbort, { once: true });
127
+ operation.then(resolve, reject).finally(() => {
128
+ signal.removeEventListener('abort', onAbort);
129
+ });
130
+ });
131
+ }
132
+ function assertSafeFinalResult(result, sessionID, userMessageID, observedAssistantID) {
133
+ const info = result.info;
134
+ if (info.role !== 'assistant'
135
+ || info.sessionID !== sessionID
136
+ || info.parentID !== userMessageID
137
+ || (observedAssistantID !== null && info.id !== observedAssistantID)) {
138
+ throw new OpenCodeAdapterError('adapter_protocol_error');
139
+ }
140
+ for (const part of result.parts) {
141
+ if (part.sessionID !== sessionID || part.messageID !== info.id || !SAFE_FINAL_PARTS.has(part.type)) {
142
+ throw new OpenCodeAdapterError('adapter_protocol_error');
143
+ }
144
+ }
145
+ return info;
146
+ }
147
+ function capabilities(version, modelOptions, verified, evidence = {
148
+ strict: true,
149
+ nativeStreaming: true,
150
+ structuredOutput: true,
151
+ resume: true,
152
+ }) {
153
+ return {
154
+ available: true,
155
+ version,
156
+ verified,
157
+ ...(verified ? { verifiedAt: new Date().toISOString() } : {}),
158
+ modelSelection: true,
159
+ effortSelection: true,
160
+ modelOptions,
161
+ isolationLevel: evidence.strict ? 'strict' : 'best_effort',
162
+ streamingMode: evidence.nativeStreaming ? 'native' : 'none',
163
+ toolBridge: evidence.structuredOutput ? 'structured_output' : 'none',
164
+ resume: evidence.resume,
165
+ cancellation: true,
166
+ };
167
+ }
168
+ function unavailable(error) {
169
+ return {
170
+ available: false,
171
+ verified: false,
172
+ modelSelection: false,
173
+ effortSelection: false,
174
+ isolationLevel: 'best_effort',
175
+ streamingMode: 'none',
176
+ toolBridge: 'none',
177
+ resume: false,
178
+ cancellation: false,
179
+ error,
180
+ };
181
+ }
182
+ function safeErrorCode(error) {
183
+ if (error instanceof OpenCodeAdapterError)
184
+ return error.code;
185
+ if (typeof error === 'object' && error !== null && 'code' in error
186
+ && (error.code === 'adapter_spawn_failed' || error.code === 'adapter_process_error')) {
187
+ return String(error.code);
188
+ }
189
+ return 'capability_probe_failed';
190
+ }
191
+ function failureEvent(error, nativeStateAdvanced) {
192
+ const processFailure = typeof error === 'object' && error !== null && 'code' in error
193
+ && (error.code === 'adapter_spawn_failed' || error.code === 'adapter_process_error');
194
+ return {
195
+ type: 'failed',
196
+ code: processFailure ? 'adapter_process_error' : 'adapter_protocol_error',
197
+ message: processFailure
198
+ ? 'OpenCode provider process error'
199
+ : 'OpenCode provider protocol error',
200
+ nativeStateAdvanced,
201
+ };
202
+ }
203
+ export class OpenCodeProviderAdapter {
204
+ server;
205
+ runCommand;
206
+ nativeAbortTimeoutMs;
207
+ activeRuns = new Map();
208
+ constructor(options = {}) {
209
+ this.server = options.server ?? new OpenCodeServer();
210
+ const spawnProcess = options.spawnProcess ?? spawnManagedProcess;
211
+ this.runCommand = options.runCommand ?? ((args) => this.runCliCommand(spawnProcess, args));
212
+ this.nativeAbortTimeoutMs = options.nativeAbortTimeoutMs ?? NATIVE_ABORT_TIMEOUT_MS;
213
+ }
214
+ async probeCapabilities(request = { mode: 'static' }) {
215
+ try {
216
+ const metadata = await this.staticMetadata();
217
+ if (request.mode === 'static') {
218
+ return capabilities(metadata.version, metadata.models, false);
219
+ }
220
+ const evidence = await this.verifyConformance(request);
221
+ return capabilities(metadata.version, metadata.models, true, evidence);
222
+ }
223
+ catch (error) {
224
+ return unavailable(safeErrorCode(error));
225
+ }
226
+ }
227
+ start(request) {
228
+ return this.stream(request, null);
229
+ }
230
+ resume(request) {
231
+ return this.stream(request, request.nativeSessionId);
232
+ }
233
+ async cancel(runId) {
234
+ const active = this.activeRuns.get(runId);
235
+ if (!active)
236
+ return;
237
+ active.cancelRequested = true;
238
+ active.sdkCancellation.abort();
239
+ active.abortPromise ??= this.abortNative(active);
240
+ await active.abortPromise;
241
+ }
242
+ async dispose() {
243
+ await this.server.close();
244
+ }
245
+ async *stream(request, resumeSessionID) {
246
+ if (request.signal.aborted) {
247
+ yield { type: 'cancelled' };
248
+ return;
249
+ }
250
+ let sessionID = resumeSessionID;
251
+ let createdSession = false;
252
+ let deletedSession = false;
253
+ let nativeStateAdvanced = false;
254
+ let active = null;
255
+ let client = null;
256
+ let eventIterator = null;
257
+ let cancellationRequested = false;
258
+ const sdkCancellation = new AbortController();
259
+ const onAbort = () => {
260
+ cancellationRequested = true;
261
+ sdkCancellation.abort(request.signal.reason);
262
+ void this.cancel(request.runId).catch(() => undefined);
263
+ };
264
+ request.signal.addEventListener('abort', onAbort, { once: true });
265
+ if (request.signal.aborted)
266
+ onAbort();
267
+ try {
268
+ const model = splitOpenCodeModel(request.model);
269
+ const promptText = renderProviderInput(request.input);
270
+ const validateStructured = request.outputSchema === null
271
+ ? null
272
+ : new Ajv2020({ allErrors: false }).compile(request.outputSchema);
273
+ const server = await waitForSignal(this.server.start(), sdkCancellation.signal);
274
+ client = server.client;
275
+ const subscription = await client.event.subscribe({ directory: request.workspace }, { signal: sdkCancellation.signal });
276
+ eventIterator = subscription.stream[Symbol.asyncIterator]();
277
+ if (sessionID === null) {
278
+ const created = await client.session.create({ directory: request.workspace }, { throwOnError: true, signal: sdkCancellation.signal });
279
+ sessionID = created.data.id;
280
+ createdSession = true;
281
+ }
282
+ active = {
283
+ client,
284
+ sessionID,
285
+ directory: request.workspace,
286
+ sdkCancellation,
287
+ abortPromise: null,
288
+ cancelRequested: false,
289
+ };
290
+ this.activeRuns.set(request.runId, active);
291
+ nativeStateAdvanced = true;
292
+ if (request.signal.aborted) {
293
+ cancellationRequested = true;
294
+ await this.cancel(request.runId);
295
+ }
296
+ yield { type: 'session_started', nativeSessionId: sessionID };
297
+ if (request.signal.aborted || active.cancelRequested) {
298
+ yield { type: 'cancelled' };
299
+ return;
300
+ }
301
+ const userMessageID = randomUUID();
302
+ let nextEvent = eventIterator.next();
303
+ const parts = [
304
+ { type: 'text', text: promptText },
305
+ ...(request.images ?? []).map((image) => ({
306
+ type: 'file',
307
+ mime: image.mediaType,
308
+ filename: basename(image.path),
309
+ url: pathToFileURL(image.path).href,
310
+ })),
311
+ ];
312
+ const prompt = client.session.prompt({
313
+ sessionID,
314
+ directory: request.workspace,
315
+ messageID: userMessageID,
316
+ model,
317
+ ...(request.effort === null ? {} : { variant: request.effort }),
318
+ system: API_PROVIDER_SYSTEM_INSTRUCTION,
319
+ parts,
320
+ format: request.outputSchema
321
+ ? { type: 'json_schema', schema: request.outputSchema, retryCount: 2 }
322
+ : { type: 'text' },
323
+ }, {
324
+ throwOnError: true,
325
+ signal: sdkCancellation.signal,
326
+ }).then((response) => response.data);
327
+ let finalResult = null;
328
+ let assistantMessageID = null;
329
+ let sawAssistantTerminal = false;
330
+ const seenEventIDs = new Set();
331
+ while (finalResult === null || !sawAssistantTerminal) {
332
+ const outcome = finalResult === null
333
+ ? await Promise.race([
334
+ nextEvent.then((result) => ({ kind: 'event', result })),
335
+ prompt.then((result) => ({ kind: 'prompt', result })),
336
+ ])
337
+ : { kind: 'event', result: await nextEvent };
338
+ if (outcome.kind === 'prompt') {
339
+ finalResult = outcome.result;
340
+ continue;
341
+ }
342
+ if (outcome.result.done)
343
+ throw new OpenCodeAdapterError('adapter_protocol_error');
344
+ const event = outcome.result.value;
345
+ const directory = eventDirectory(event);
346
+ if (directory !== null && directory !== request.workspace) {
347
+ nextEvent = eventIterator.next();
348
+ continue;
349
+ }
350
+ const type = eventType(event);
351
+ const properties = eventProperties(event);
352
+ if (type === 'message.updated') {
353
+ const info = asRecord(properties.info);
354
+ if (properties.sessionID === sessionID
355
+ && info?.role === 'assistant'
356
+ && info.sessionID === sessionID
357
+ && info.parentID === userMessageID
358
+ && typeof info.id === 'string') {
359
+ assistantMessageID = info.id;
360
+ const time = asRecord(info.time);
361
+ if (typeof time?.completed === 'number')
362
+ sawAssistantTerminal = true;
363
+ }
364
+ }
365
+ else {
366
+ const messageIDs = new Set([userMessageID]);
367
+ if (assistantMessageID)
368
+ messageIDs.add(assistantMessageID);
369
+ if (isUnsafeEvent(type) && matchingUnsafeEvent(type, properties, sessionID, messageIDs, directory === null || directory === request.workspace)) {
370
+ throw new OpenCodeAdapterError('adapter_protocol_error');
371
+ }
372
+ if (type === 'message.part.updated') {
373
+ const part = asRecord(properties.part);
374
+ if (part && matchingMessage(properties, sessionID, messageIDs)) {
375
+ if (part.type !== 'text') {
376
+ if (isUnsafePart(part.type)) {
377
+ throw new OpenCodeAdapterError('adapter_protocol_error');
378
+ }
379
+ }
380
+ else if (request.outputSchema === null
381
+ && part.messageID === assistantMessageID
382
+ && typeof properties.delta === 'string'
383
+ && properties.delta.length > 0) {
384
+ const eventID = eventRecord(event).id;
385
+ if (typeof eventID !== 'string' || !seenEventIDs.has(eventID)) {
386
+ if (typeof eventID === 'string')
387
+ seenEventIDs.add(eventID);
388
+ yield { type: 'text_delta', delta: properties.delta };
389
+ }
390
+ }
391
+ }
392
+ }
393
+ }
394
+ if (sawAssistantTerminal && finalResult === null) {
395
+ finalResult = await prompt;
396
+ }
397
+ else if (!sawAssistantTerminal) {
398
+ nextEvent = eventIterator.next();
399
+ }
400
+ }
401
+ const finalInfo = assertSafeFinalResult(finalResult, sessionID, userMessageID, assistantMessageID);
402
+ if (finalInfo.error) {
403
+ yield {
404
+ type: 'failed',
405
+ code: 'adapter_provider_failed',
406
+ message: 'OpenCode provider turn failed',
407
+ nativeStateAdvanced: true,
408
+ };
409
+ return;
410
+ }
411
+ if (request.outputSchema !== null) {
412
+ if (validateStructured === null || !validateStructured(finalInfo.structured)) {
413
+ throw new OpenCodeAdapterError('adapter_protocol_error');
414
+ }
415
+ const structured = JSON.stringify(finalInfo.structured);
416
+ if (structured === undefined)
417
+ throw new OpenCodeAdapterError('adapter_protocol_error');
418
+ yield { type: 'structured_delta', delta: structured };
419
+ }
420
+ if (createdSession && request.sessionMode === 'ephemeral') {
421
+ await client.session.delete({
422
+ sessionID,
423
+ directory: request.workspace,
424
+ }, { throwOnError: true });
425
+ deletedSession = true;
426
+ }
427
+ yield { type: 'completed' };
428
+ }
429
+ catch (error) {
430
+ if (cancellationRequested || active?.cancelRequested) {
431
+ yield { type: 'cancelled' };
432
+ }
433
+ else {
434
+ yield failureEvent(error, nativeStateAdvanced);
435
+ }
436
+ }
437
+ finally {
438
+ request.signal.removeEventListener('abort', onAbort);
439
+ if (active && this.activeRuns.get(request.runId) === active) {
440
+ this.activeRuns.delete(request.runId);
441
+ }
442
+ try {
443
+ await eventIterator?.return?.();
444
+ }
445
+ catch {
446
+ // The SSE iterator owns its cleanup error; run outcome is already settled.
447
+ }
448
+ if (createdSession && request.sessionMode === 'ephemeral'
449
+ && !deletedSession && sessionID !== null && client !== null) {
450
+ try {
451
+ await client.session.delete({
452
+ sessionID,
453
+ directory: request.workspace,
454
+ }, { throwOnError: true });
455
+ }
456
+ catch {
457
+ // Best-effort cleanup must not expose provider or SDK details.
458
+ }
459
+ }
460
+ }
461
+ }
462
+ async abortNative(active) {
463
+ const timeout = new AbortController();
464
+ let timer;
465
+ const deadline = new Promise((resolve) => {
466
+ timer = setTimeout(() => {
467
+ timeout.abort();
468
+ resolve('timeout');
469
+ }, this.nativeAbortTimeoutMs);
470
+ timer.unref();
471
+ });
472
+ const request = active.client.session.abort({
473
+ sessionID: active.sessionID,
474
+ directory: active.directory,
475
+ }, {
476
+ throwOnError: true,
477
+ signal: timeout.signal,
478
+ }).then(() => ({ kind: 'completed' }), (error) => ({ kind: 'failed', error }));
479
+ try {
480
+ const outcome = await Promise.race([request, deadline]);
481
+ if (outcome !== 'timeout' && outcome.kind === 'failed')
482
+ throw outcome.error;
483
+ }
484
+ finally {
485
+ if (timer)
486
+ clearTimeout(timer);
487
+ }
488
+ }
489
+ async staticMetadata() {
490
+ const versionOutput = await this.runCommand(['--version']);
491
+ const version = versionOutput.match(/\b\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?\b/)?.[0];
492
+ if (!version)
493
+ throw new OpenCodeAdapterError('adapter_protocol_error');
494
+ const modelOutput = await this.runCommand(['models']);
495
+ const ids = [...new Set(modelOutput.split(/\r?\n/).map((line) => line.trim()).filter(Boolean))];
496
+ if (ids.length === 0)
497
+ throw new OpenCodeAdapterError('adapter_protocol_error');
498
+ for (const id of ids)
499
+ splitOpenCodeModel(id);
500
+ return {
501
+ version,
502
+ models: ids.map((id) => ({ id, label: id, effortOptions: null })),
503
+ };
504
+ }
505
+ async runCliCommand(spawnProcess, args) {
506
+ const managed = spawnProcess({
507
+ command: 'opencode',
508
+ args,
509
+ cwd: process.cwd(),
510
+ env: { ...process.env },
511
+ });
512
+ try {
513
+ let output = '';
514
+ const collect = (async () => {
515
+ for await (const line of readBoundedLines(managed.stdout)) {
516
+ output += `${line}\n`;
517
+ if (Buffer.byteLength(output) > COMMAND_OUTPUT_LIMIT_BYTES) {
518
+ throw new OpenCodeAdapterError('adapter_protocol_error');
519
+ }
520
+ }
521
+ })();
522
+ const [exit] = await Promise.all([managed.exited, collect]);
523
+ if (exit.code !== 0 || output.trim().length === 0) {
524
+ throw Object.assign(new Error('adapter_process_error'), { code: 'adapter_process_error' });
525
+ }
526
+ return output.trim();
527
+ }
528
+ finally {
529
+ try {
530
+ await managed.dispose();
531
+ }
532
+ catch {
533
+ // The CLI probe may exit before process-group cleanup completes.
534
+ }
535
+ }
536
+ }
537
+ async verifyConformance(request) {
538
+ const baseRequest = {
539
+ runId: `opencode-conformance-text-${randomUUID()}`,
540
+ targetId: request.targetId,
541
+ model: request.model,
542
+ effort: request.effort,
543
+ workspace: request.workspace,
544
+ input: [{ role: 'user', content: 'Return a short text confirmation.' }],
545
+ sessionMode: 'persistent',
546
+ runTimeoutMs: null,
547
+ outputSchema: null,
548
+ signal: request.signal,
549
+ };
550
+ const text = await this.observeTurn(this.start(baseRequest));
551
+ const schema = await this.observeTurn(this.start({
552
+ ...baseRequest,
553
+ runId: `opencode-conformance-schema-${randomUUID()}`,
554
+ input: [{
555
+ role: 'user',
556
+ content: 'Return JSON with type "assistant_text" and a short confirmation in content.',
557
+ }],
558
+ outputSchema: CONFORMANCE_SCHEMA,
559
+ }));
560
+ const resumed = text.nativeSessionId === null
561
+ ? null
562
+ : await this.observeTurn(this.resume({
563
+ ...baseRequest,
564
+ runId: `opencode-conformance-resume-${randomUUID()}`,
565
+ nativeSessionId: text.nativeSessionId,
566
+ input: [{ role: 'user', content: 'Return another short text confirmation.' }],
567
+ }));
568
+ let validStructuredOutput = false;
569
+ if (schema.completed && !schema.failed) {
570
+ try {
571
+ validStructuredOutput = validateConformanceOutput(JSON.parse(schema.structured));
572
+ }
573
+ catch {
574
+ validStructuredOutput = false;
575
+ }
576
+ }
577
+ const nativeStreaming = text.completed && !text.failed && text.text.length > 0
578
+ && resumed !== null && resumed.completed && !resumed.failed && resumed.text.length > 0;
579
+ const safeTurns = !text.failed && !schema.failed && resumed !== null && !resumed.failed;
580
+ return {
581
+ strict: safeTurns && text.completed && schema.completed && resumed.completed,
582
+ nativeStreaming,
583
+ structuredOutput: validStructuredOutput,
584
+ resume: resumed !== null && resumed.completed && !resumed.failed,
585
+ };
586
+ }
587
+ async observeTurn(events) {
588
+ const evidence = {
589
+ nativeSessionId: null,
590
+ text: '',
591
+ structured: '',
592
+ completed: false,
593
+ failed: false,
594
+ };
595
+ for await (const event of events) {
596
+ if (event.type === 'session_started')
597
+ evidence.nativeSessionId = event.nativeSessionId;
598
+ else if (event.type === 'text_delta')
599
+ evidence.text += event.delta;
600
+ else if (event.type === 'structured_delta')
601
+ evidence.structured += event.delta;
602
+ else if (event.type === 'completed')
603
+ evidence.completed = true;
604
+ else
605
+ evidence.failed = true;
606
+ }
607
+ return evidence;
608
+ }
609
+ }
610
+ //# sourceMappingURL=adapter.js.map