@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,403 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { IdempotencyConflictError, } from '../../control-plane/idempotency.js';
3
+ import { reserveRunId } from '../../control-plane/runs.js';
4
+ import { deserializeOpenAIReplay, OpenAIError, providerFailureError, serializeOpenAIFailure, serializeOpenAISuccess, } from './errors.js';
5
+ import { assertImageInputSupported, normalizeChatInput, } from './image-input.js';
6
+ import { OPENAI_EXTENSION_ID } from './models.js';
7
+ import { ChatRequestSchema } from './schemas.js';
8
+ import { writeChatStream } from './sse.js';
9
+ import { AdapterProtocolError, assignGatewayCallIds, buildToolOutputSchema, StructuredEnvelopeDecoder, ToolInputError, } from './tools.js';
10
+ function invalidRequest() {
11
+ return new OpenAIError(400, 'Invalid request', 'invalid_request_error', null, 'invalid_request');
12
+ }
13
+ function toolsNotSupported() {
14
+ return new OpenAIError(400, 'The selected model does not support function tools', 'invalid_request_error', 'tools', 'tools_not_supported');
15
+ }
16
+ function protocolError() {
17
+ return new OpenAIError(502, 'The provider returned an invalid response', 'server_error', null, 'adapter_protocol_error');
18
+ }
19
+ function providerError(code = 'provider_error') {
20
+ return providerFailureError(code, 'messages');
21
+ }
22
+ function toolBridge(request, targetToolBridge) {
23
+ try {
24
+ const schema = buildToolOutputSchema(request.tools ?? [], request.tool_choice);
25
+ if (schema !== null && targetToolBridge !== 'structured_output')
26
+ throw toolsNotSupported();
27
+ return schema;
28
+ }
29
+ catch (error) {
30
+ if (error instanceof OpenAIError)
31
+ throw error;
32
+ if (error instanceof ToolInputError)
33
+ throw invalidRequest();
34
+ throw invalidRequest();
35
+ }
36
+ }
37
+ function parseRequest(body) {
38
+ const result = ChatRequestSchema.safeParse(body);
39
+ if (!result.success)
40
+ throw invalidRequest();
41
+ return result.data;
42
+ }
43
+ async function collectCompletion(outputSchema, invocation) {
44
+ let text = '';
45
+ let completed = 0;
46
+ let terminalSeen = false;
47
+ const decoder = outputSchema === null ? undefined : new StructuredEnvelopeDecoder(outputSchema);
48
+ try {
49
+ for await (const event of invocation) {
50
+ if (terminalSeen)
51
+ throw protocolError();
52
+ switch (event.type) {
53
+ case 'session_started':
54
+ break;
55
+ case 'text_delta':
56
+ if (decoder)
57
+ throw protocolError();
58
+ text += event.delta;
59
+ break;
60
+ case 'structured_delta':
61
+ if (!decoder)
62
+ throw protocolError();
63
+ decoder.push(event.delta);
64
+ break;
65
+ case 'completed':
66
+ completed += 1;
67
+ terminalSeen = true;
68
+ break;
69
+ case 'failed':
70
+ if (event.code === 'adapter_protocol_error')
71
+ throw protocolError();
72
+ throw providerError(event.code);
73
+ case 'cancelled':
74
+ throw new OpenAIError(500, 'The request was cancelled', 'server_error', null, 'request_cancelled');
75
+ default:
76
+ throw protocolError();
77
+ }
78
+ }
79
+ }
80
+ catch (error) {
81
+ if (error instanceof OpenAIError)
82
+ throw error;
83
+ if (error instanceof AdapterProtocolError)
84
+ throw protocolError();
85
+ throw providerError();
86
+ }
87
+ if (completed !== 1)
88
+ throw protocolError();
89
+ if (!decoder)
90
+ return { type: 'assistant_text', content: text };
91
+ try {
92
+ return decoder.finish();
93
+ }
94
+ catch (error) {
95
+ if (error instanceof AdapterProtocolError)
96
+ throw protocolError();
97
+ throw error;
98
+ }
99
+ }
100
+ function completionChoice(result) {
101
+ if (result.type === 'assistant_text') {
102
+ return { index: 0, message: { role: 'assistant', content: result.content }, finish_reason: 'stop' };
103
+ }
104
+ const calls = assignGatewayCallIds(result.toolCalls);
105
+ return {
106
+ index: 0,
107
+ message: {
108
+ role: 'assistant',
109
+ content: null,
110
+ tool_calls: calls.map((call) => ({
111
+ id: call.id,
112
+ type: 'function',
113
+ function: { name: call.name, arguments: JSON.stringify(call.arguments) },
114
+ })),
115
+ },
116
+ finish_reason: 'tool_calls',
117
+ };
118
+ }
119
+ export async function handleChatCompletion(clientId, body, deps, attempt, idempotencyKey) {
120
+ const request = parseRequest(body);
121
+ const configuredTarget = deps.targets.get(request.model);
122
+ if (!configuredTarget) {
123
+ throw new OpenAIError(404, 'Model not found', 'invalid_request_error', null, 'model_not_found');
124
+ }
125
+ attempt.setTarget(configuredTarget.id);
126
+ let target;
127
+ try {
128
+ target = deps.grants.authorize(clientId, OPENAI_EXTENSION_ID, request.model);
129
+ }
130
+ catch (error) {
131
+ if (error instanceof Error && error.message === 'authorization_denied') {
132
+ throw new OpenAIError(403, 'The model is not available to this client', 'permission_error', null, 'model_not_allowed');
133
+ }
134
+ throw error;
135
+ }
136
+ const outputSchema = toolBridge(request, target.toolBridge);
137
+ const normalized = normalizeChatInput(request.messages);
138
+ assertImageInputSupported(target.cli, normalized.images, 'messages');
139
+ const execute = async (runId) => {
140
+ let invocation;
141
+ try {
142
+ invocation = deps.invocationService.invoke({
143
+ ...(runId === undefined ? {} : { runId }),
144
+ clientId,
145
+ extensionId: OPENAI_EXTENSION_ID,
146
+ targetId: target.id,
147
+ endpoint: 'chat.completions',
148
+ input: normalized.input,
149
+ ...(normalized.images.length === 0 ? {} : { images: normalized.images }),
150
+ sessionMode: 'ephemeral',
151
+ ...(outputSchema === null ? {} : { outputSchema }),
152
+ });
153
+ }
154
+ catch {
155
+ throw providerError();
156
+ }
157
+ const result = await collectCompletion(outputSchema, invocation);
158
+ return {
159
+ id: `chatcmpl_${randomUUID().replaceAll('-', '')}`,
160
+ object: 'chat.completion',
161
+ created: Math.floor(Date.now() / 1000),
162
+ model: request.model,
163
+ choices: [completionChoice(result)],
164
+ };
165
+ };
166
+ if (idempotencyKey === undefined)
167
+ return execute(attempt.reserve());
168
+ if (!deps.idempotency)
169
+ throw new Error('idempotency_service_unavailable');
170
+ let decision;
171
+ try {
172
+ const runId = reserveRunId();
173
+ decision = deps.idempotency.begin({
174
+ clientId,
175
+ key: idempotencyKey,
176
+ endpoint: 'chat.completions',
177
+ request: body,
178
+ runId,
179
+ run: {
180
+ clientId,
181
+ extensionId: OPENAI_EXTENSION_ID,
182
+ targetId: target.id,
183
+ endpoint: 'chat.completions',
184
+ },
185
+ });
186
+ }
187
+ catch (error) {
188
+ if (error instanceof IdempotencyConflictError) {
189
+ throw new OpenAIError(409, 'Idempotency key was reused with a different request', 'invalid_request_error', null, 'idempotency_conflict');
190
+ }
191
+ throw error;
192
+ }
193
+ if (decision.type === 'owner')
194
+ attempt.claim(decision.runId);
195
+ else
196
+ attempt.ignore();
197
+ if (decision.type === 'unavailable') {
198
+ throw new OpenAIError(409, 'Idempotency replay is unavailable', 'invalid_request_error', null, 'idempotency_replay_unavailable');
199
+ }
200
+ if (decision.type !== 'owner') {
201
+ try {
202
+ return deserializeOpenAIReplay(await deps.idempotency.attach(decision));
203
+ }
204
+ catch (error) {
205
+ if (error instanceof OpenAIError)
206
+ throw error;
207
+ throw new OpenAIError(409, 'Idempotency replay is unavailable', 'invalid_request_error', null, 'idempotency_replay_unavailable');
208
+ }
209
+ }
210
+ try {
211
+ const completion = await execute(decision.runId);
212
+ deps.idempotency.complete(decision, serializeOpenAISuccess(completion));
213
+ return completion;
214
+ }
215
+ catch (error) {
216
+ attempt.fail(error);
217
+ deps.idempotency.fail(decision, serializeOpenAIFailure(error));
218
+ throw error;
219
+ }
220
+ }
221
+ function replayChatEvents(completion, structured) {
222
+ return (async function* () {
223
+ const message = completion.choices[0].message;
224
+ if (structured) {
225
+ const envelope = message.tool_calls
226
+ ? {
227
+ type: 'tool_calls',
228
+ tool_calls: message.tool_calls.map((call) => ({
229
+ name: call.function.name,
230
+ arguments: JSON.parse(call.function.arguments),
231
+ })),
232
+ }
233
+ : { type: 'assistant_text', content: message.content ?? '' };
234
+ yield { type: 'structured_delta', delta: JSON.stringify(envelope) };
235
+ }
236
+ else {
237
+ yield { type: 'text_delta', delta: message.content ?? '' };
238
+ }
239
+ yield { type: 'completed' };
240
+ })();
241
+ }
242
+ function failChatOwner(deps, decision, attempt, error) {
243
+ attempt.fail(error);
244
+ if (decision?.type !== 'owner')
245
+ return;
246
+ try {
247
+ deps.idempotency.fail(decision, serializeOpenAIFailure(error));
248
+ }
249
+ catch {
250
+ // A finalization callback may have settled before surfacing its failure.
251
+ }
252
+ }
253
+ export async function handleChatCompletionStream(reply, clientId, body, deps, attempt, idempotencyKey) {
254
+ const request = parseRequest(body);
255
+ const configuredTarget = deps.targets.get(request.model);
256
+ if (!configuredTarget) {
257
+ throw new OpenAIError(404, 'Model not found', 'invalid_request_error', null, 'model_not_found');
258
+ }
259
+ attempt.setTarget(configuredTarget.id);
260
+ let target;
261
+ try {
262
+ target = deps.grants.authorize(clientId, OPENAI_EXTENSION_ID, request.model);
263
+ }
264
+ catch (error) {
265
+ if (error instanceof Error && error.message === 'authorization_denied') {
266
+ throw new OpenAIError(403, 'The model is not available to this client', 'permission_error', null, 'model_not_allowed');
267
+ }
268
+ throw error;
269
+ }
270
+ const outputSchema = toolBridge(request, target.toolBridge);
271
+ const normalized = normalizeChatInput(request.messages);
272
+ assertImageInputSupported(target.cli, normalized.images, 'messages');
273
+ let decision;
274
+ if (idempotencyKey !== undefined) {
275
+ if (!deps.idempotency)
276
+ throw new Error('idempotency_service_unavailable');
277
+ try {
278
+ const runId = reserveRunId();
279
+ decision = deps.idempotency.begin({
280
+ clientId,
281
+ key: idempotencyKey,
282
+ endpoint: 'chat.completions',
283
+ request: body,
284
+ runId,
285
+ run: {
286
+ clientId,
287
+ extensionId: OPENAI_EXTENSION_ID,
288
+ targetId: target.id,
289
+ endpoint: 'chat.completions',
290
+ },
291
+ });
292
+ }
293
+ catch (error) {
294
+ if (error instanceof IdempotencyConflictError) {
295
+ throw new OpenAIError(409, 'Idempotency key was reused with a different request', 'invalid_request_error', null, 'idempotency_conflict');
296
+ }
297
+ throw error;
298
+ }
299
+ if (decision.type === 'owner')
300
+ attempt.claim(decision.runId);
301
+ else
302
+ attempt.ignore();
303
+ if (decision.type === 'unavailable') {
304
+ throw new OpenAIError(409, 'Idempotency replay is unavailable', 'invalid_request_error', null, 'idempotency_replay_unavailable');
305
+ }
306
+ if (decision.type !== 'owner') {
307
+ let completion;
308
+ try {
309
+ completion = deserializeOpenAIReplay(await deps.idempotency.attach(decision));
310
+ }
311
+ catch (error) {
312
+ if (error instanceof OpenAIError)
313
+ throw error;
314
+ throw new OpenAIError(409, 'Idempotency replay is unavailable', 'invalid_request_error', null, 'idempotency_replay_unavailable');
315
+ }
316
+ try {
317
+ await writeChatStream(reply, replayChatEvents(completion, outputSchema !== null), {
318
+ id: completion.id,
319
+ created: completion.created,
320
+ model: completion.model,
321
+ outputSchema,
322
+ ...(completion.choices[0].message.tool_calls
323
+ ? { replayCallIds: completion.choices[0].message.tool_calls.map((call) => call.id) }
324
+ : {}),
325
+ });
326
+ }
327
+ catch (error) {
328
+ if (!reply.raw.headersSent)
329
+ throw error;
330
+ }
331
+ return;
332
+ }
333
+ }
334
+ const id = `chatcmpl_${randomUUID().replaceAll('-', '')}`;
335
+ const created = Math.floor(Date.now() / 1000);
336
+ let ownerSettled = false;
337
+ const runId = decision?.type === 'owner' ? decision.runId : attempt.reserve();
338
+ let invocation;
339
+ try {
340
+ invocation = deps.invocationService.invoke({
341
+ runId,
342
+ clientId,
343
+ extensionId: OPENAI_EXTENSION_ID,
344
+ targetId: target.id,
345
+ endpoint: 'chat.completions',
346
+ input: normalized.input,
347
+ ...(normalized.images.length === 0 ? {} : { images: normalized.images }),
348
+ sessionMode: 'ephemeral',
349
+ ...(outputSchema === null ? {} : { outputSchema }),
350
+ });
351
+ }
352
+ catch {
353
+ const error = providerError();
354
+ failChatOwner(deps, decision, attempt, error);
355
+ throw error;
356
+ }
357
+ try {
358
+ await writeChatStream(reply, invocation, {
359
+ id,
360
+ created,
361
+ model: request.model,
362
+ outputSchema,
363
+ beforeTerminal: decision?.type === 'owner'
364
+ ? (result) => {
365
+ const completion = {
366
+ id,
367
+ object: 'chat.completion',
368
+ created,
369
+ model: request.model,
370
+ choices: [result.toolCalls
371
+ ? {
372
+ index: 0,
373
+ message: {
374
+ role: 'assistant',
375
+ content: null,
376
+ tool_calls: result.toolCalls.map((call) => ({
377
+ id: call.id,
378
+ type: 'function',
379
+ function: { name: call.name, arguments: JSON.stringify(call.arguments) },
380
+ })),
381
+ },
382
+ finish_reason: 'tool_calls',
383
+ }
384
+ : {
385
+ index: 0,
386
+ message: { role: 'assistant', content: result.text },
387
+ finish_reason: 'stop',
388
+ }],
389
+ };
390
+ deps.idempotency.complete(decision, serializeOpenAISuccess(completion));
391
+ ownerSettled = true;
392
+ }
393
+ : undefined,
394
+ });
395
+ }
396
+ catch (error) {
397
+ if (!ownerSettled)
398
+ failChatOwner(deps, decision, attempt, error);
399
+ if (!reply.raw.headersSent)
400
+ throw error;
401
+ }
402
+ }
403
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../../src/extensions/openai/chat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ export class OpenAIError extends Error {
2
+ status;
3
+ type;
4
+ param;
5
+ code;
6
+ constructor(status, message, type, param, code) {
7
+ super(message);
8
+ this.status = status;
9
+ this.type = type;
10
+ this.param = param;
11
+ this.code = code;
12
+ }
13
+ toBody() {
14
+ return {
15
+ error: {
16
+ message: this.message,
17
+ type: this.type,
18
+ param: this.param,
19
+ code: this.code,
20
+ },
21
+ };
22
+ }
23
+ }
24
+ export function normalizeOpenAIError(error) {
25
+ return error instanceof OpenAIError
26
+ ? error
27
+ : new OpenAIError(500, 'The server encountered an internal error', 'server_error', null, 'internal_error');
28
+ }
29
+ export function providerFailureError(code, param) {
30
+ switch (code) {
31
+ case 'image_input_invalid':
32
+ return new OpenAIError(400, 'Invalid image input', 'invalid_request_error', param, code);
33
+ case 'image_input_not_supported':
34
+ return new OpenAIError(400, 'The selected model does not support image input', 'invalid_request_error', param, code);
35
+ case 'image_limit_exceeded':
36
+ return new OpenAIError(413, 'The image input limit was exceeded', 'invalid_request_error', param, code);
37
+ case 'image_too_large':
38
+ return new OpenAIError(413, 'An input image is too large', 'invalid_request_error', param, code);
39
+ case 'image_fetch_failed':
40
+ return new OpenAIError(400, 'An input image could not be fetched', 'invalid_request_error', param, code);
41
+ case 'image_fetch_timeout':
42
+ return new OpenAIError(504, 'Fetching an input image timed out', 'server_error', param, code);
43
+ case 'image_cleanup_failed':
44
+ return new OpenAIError(500, 'Image input cleanup failed', 'server_error', null, code);
45
+ default:
46
+ return new OpenAIError(502, 'The provider could not complete the request', 'server_error', null, 'provider_error');
47
+ }
48
+ }
49
+ export function serializeOpenAISuccess(value) {
50
+ return JSON.stringify({ ok: true, value });
51
+ }
52
+ export function serializeOpenAIFailure(error) {
53
+ const safe = normalizeOpenAIError(error);
54
+ return JSON.stringify({
55
+ ok: false,
56
+ error: {
57
+ status: safe.status,
58
+ message: safe.message,
59
+ type: safe.type,
60
+ param: safe.param,
61
+ code: safe.code,
62
+ },
63
+ });
64
+ }
65
+ export function deserializeOpenAIReplay(chunks) {
66
+ if (chunks.length !== 1)
67
+ throw new Error('invalid_idempotency_replay');
68
+ const envelope = JSON.parse(chunks[0]);
69
+ if (envelope.ok)
70
+ return envelope.value;
71
+ throw new OpenAIError(envelope.error.status, envelope.error.message, envelope.error.type, envelope.error.param, envelope.error.code);
72
+ }
73
+ export function sendOpenAIError(reply, error) {
74
+ const safeError = normalizeOpenAIError(error);
75
+ if (safeError.status === 401)
76
+ reply.header('www-authenticate', 'Bearer');
77
+ return reply.code(safeError.status).send(safeError.toBody());
78
+ }
79
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/extensions/openai/errors.ts"],"names":[],"mappings":"AAWA,MAAM,OAAO,WAAY,SAAQ,KAAK;IAEzB;IAEA;IACA;IACA;IALX,YACW,MAAc,EACvB,OAAe,EACN,IAAY,EACZ,KAAoB,EACpB,IAAY;QAErB,KAAK,CAAC,OAAO,CAAC,CAAC;QANN,WAAM,GAAN,MAAM,CAAQ;QAEd,SAAI,GAAJ,IAAI,CAAQ;QACZ,UAAK,GAAL,KAAK,CAAe;QACpB,SAAI,GAAJ,IAAI,CAAQ;IAGvB,CAAC;IAED,MAAM;QACJ,OAAO;YACL,KAAK,EAAE;gBACL,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB;SACF,CAAC;IACJ,CAAC;CACF;AAcD,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,OAAO,KAAK,YAAY,WAAW;QACjC,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,IAAI,WAAW,CAAC,GAAG,EAAE,0CAA0C,EAAE,cAAc,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC;AAC/G,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,IAAY,EACZ,KAA2B;IAE3B,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,qBAAqB;YACxB,OAAO,IAAI,WAAW,CAAC,GAAG,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC3F,KAAK,2BAA2B;YAC9B,OAAO,IAAI,WAAW,CAAC,GAAG,EAAE,iDAAiD,EAAE,uBAAuB,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACvH,KAAK,sBAAsB;YACzB,OAAO,IAAI,WAAW,CAAC,GAAG,EAAE,oCAAoC,EAAE,uBAAuB,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC1G,KAAK,iBAAiB;YACpB,OAAO,IAAI,WAAW,CAAC,GAAG,EAAE,6BAA6B,EAAE,uBAAuB,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACnG,KAAK,oBAAoB;YACvB,OAAO,IAAI,WAAW,CAAC,GAAG,EAAE,qCAAqC,EAAE,uBAAuB,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC3G,KAAK,qBAAqB;YACxB,OAAO,IAAI,WAAW,CAAC,GAAG,EAAE,mCAAmC,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAChG,KAAK,sBAAsB;YACzB,OAAO,IAAI,WAAW,CAAC,GAAG,EAAE,4BAA4B,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACxF;YACE,OAAO,IAAI,WAAW,CAAC,GAAG,EAAE,6CAA6C,EAAE,cAAc,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC;IACvH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAI,KAAQ;IAChD,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAoC,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,MAAM,IAAI,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,EAAE,EAAE,KAAK;QACT,KAAK,EAAE;YACL,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB;KACoC,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAI,MAAgB;IACzD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAE,CAA4B,CAAC;IACnE,IAAI,QAAQ,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC,KAAK,CAAC;IACvC,MAAM,IAAI,WAAW,CACnB,QAAQ,CAAC,KAAK,CAAC,MAAM,EACrB,QAAQ,CAAC,KAAK,CAAC,OAAO,EACtB,QAAQ,CAAC,KAAK,CAAC,IAAI,EACnB,QAAQ,CAAC,KAAK,CAAC,KAAK,EACpB,QAAQ,CAAC,KAAK,CAAC,IAAI,CACpB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAmB,EAAE,KAAc;IACjE,MAAM,SAAS,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,SAAS,CAAC,MAAM,KAAK,GAAG;QAAE,KAAK,CAAC,MAAM,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;IACzE,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,79 @@
1
+ import { providerSupportsImageInput } from '../../provider-runtime/image-support.js';
2
+ import { OpenAIError } from './errors.js';
3
+ import { normalizeChatToolRoundTrip, normalizeResponsesToolRoundTrip, ToolInputError, } from './tools.js';
4
+ function invalidRequest() {
5
+ return new OpenAIError(400, 'Invalid request', 'invalid_request_error', null, 'invalid_request');
6
+ }
7
+ function imagePlaceholder(index) {
8
+ return `\n[Attached image #${index}]\n`;
9
+ }
10
+ function appendPart(output, value) {
11
+ if (value.length === 0)
12
+ return;
13
+ output.push(value);
14
+ }
15
+ export function assertImageInputSupported(cli, images, param) {
16
+ if (images.length === 0 || providerSupportsImageInput(cli))
17
+ return;
18
+ throw new OpenAIError(400, 'The selected model does not support image input', 'invalid_request_error', param, 'image_input_not_supported');
19
+ }
20
+ export function normalizeChatInput(messages) {
21
+ const images = [];
22
+ const normalized = messages.map((message) => {
23
+ if (message.role !== 'user' || typeof message.content === 'string')
24
+ return message;
25
+ const content = [];
26
+ for (const part of message.content) {
27
+ if (part.type === 'text') {
28
+ appendPart(content, part.text);
29
+ continue;
30
+ }
31
+ images.push({
32
+ url: part.image_url.url,
33
+ detail: part.image_url.detail ?? 'auto',
34
+ });
35
+ appendPart(content, imagePlaceholder(images.length));
36
+ }
37
+ return { ...message, content: content.join('') };
38
+ });
39
+ try {
40
+ return { input: normalizeChatToolRoundTrip(normalized), images };
41
+ }
42
+ catch (error) {
43
+ if (error instanceof ToolInputError)
44
+ throw invalidRequest();
45
+ throw error;
46
+ }
47
+ }
48
+ export function normalizeResponsesInput(request, expectedCalls) {
49
+ if (typeof request.input === 'string') {
50
+ return { input: [{ role: 'user', content: request.input }], images: [] };
51
+ }
52
+ const images = [];
53
+ const normalized = request.input.map((item) => {
54
+ if (!('role' in item) || item.role !== 'user' || typeof item.content === 'string')
55
+ return item;
56
+ const content = [];
57
+ for (const part of item.content) {
58
+ if (part.type === 'input_text') {
59
+ appendPart(content, part.text);
60
+ continue;
61
+ }
62
+ images.push({ url: part.image_url, detail: part.detail ?? 'auto' });
63
+ appendPart(content, imagePlaceholder(images.length));
64
+ }
65
+ return { ...item, content: content.join('') };
66
+ });
67
+ try {
68
+ return {
69
+ input: normalizeResponsesToolRoundTrip(normalized, expectedCalls),
70
+ images,
71
+ };
72
+ }
73
+ catch (error) {
74
+ if (error instanceof ToolInputError)
75
+ throw invalidRequest();
76
+ throw error;
77
+ }
78
+ }
79
+ //# sourceMappingURL=image-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-input.js","sourceRoot":"","sources":["../../../src/extensions/openai/image-input.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { OpenAIError } from './errors.js';
2
+ export const OPENAI_EXTENSION_ID = 'openai';
3
+ function model(id, target) {
4
+ return {
5
+ id,
6
+ object: 'model',
7
+ created: Math.floor(Date.parse(target.createdAt) / 1000),
8
+ owned_by: 'agent-squad-gateway',
9
+ };
10
+ }
11
+ export function listOpenAIModels(clientId, deps) {
12
+ const enabled = deps.extensions.list()
13
+ .some((extension) => extension.id === OPENAI_EXTENSION_ID && extension.enabled);
14
+ if (!enabled) {
15
+ throw new OpenAIError(403, 'The OpenAI extension is disabled', 'permission_error', null, 'extension_disabled');
16
+ }
17
+ const models = new Map();
18
+ const extensionGrants = deps.grants.listForClient(clientId)
19
+ .filter((grant) => grant.extensionId === OPENAI_EXTENSION_ID);
20
+ for (const grant of extensionGrants) {
21
+ const target = deps.targets.get(grant.targetId);
22
+ if (!target)
23
+ continue;
24
+ try {
25
+ deps.grants.authorize(clientId, OPENAI_EXTENSION_ID, target.id);
26
+ }
27
+ catch (error) {
28
+ if (error instanceof Error && error.message === 'authorization_denied')
29
+ continue;
30
+ throw error;
31
+ }
32
+ for (const id of [target.id, ...target.aliases])
33
+ models.set(id, model(id, target));
34
+ }
35
+ return {
36
+ object: 'list',
37
+ data: [...models.values()].sort((left, right) => left.id < right.id ? -1 : left.id > right.id ? 1 : 0),
38
+ };
39
+ }
40
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/extensions/openai/models.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC;AAoB5C,SAAS,KAAK,CAAC,EAAU,EAAE,MAAwB;IACjD,OAAO;QACL,EAAE;QACF,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;QACxD,QAAQ,EAAE,qBAAqB;KAChC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAgB,EAAE,IAAuB;IACxE,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;SACnC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,mBAAmB,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;IAClF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,WAAW,CACnB,GAAG,EACH,kCAAkC,EAClC,kBAAkB,EAClB,IAAI,EACJ,oBAAoB,CACrB,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC9C,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC;SACxD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,KAAK,mBAAmB,CAAC,CAAC;IAChE,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAClE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,sBAAsB;gBAAE,SAAS;YACjF,MAAM,KAAK,CAAC;QACd,CAAC;QACD,KAAK,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IACrF,CAAC;IAED,OAAO;QACL,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACvG,CAAC;AACJ,CAAC"}