@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,398 @@
1
+ import { homedir } from 'node:os';
2
+ import { renderProviderInput } from '../provider-input.js';
3
+ import { spawnManagedProcess, } from '../process/managed-process.js';
4
+ import { formatAgyTimeout, getAntigravityConversationId, } from './conversation.js';
5
+ const COMMAND_OUTPUT_LIMIT_BYTES = 64 * 1024;
6
+ const TURN_OUTPUT_LIMIT_BYTES = 1024 * 1024;
7
+ const REQUIRED_HELP_FLAGS = [
8
+ '--sandbox',
9
+ '--model',
10
+ '--print-timeout',
11
+ '--conversation',
12
+ '--print',
13
+ ];
14
+ const ANSI_ESCAPE = /\u001b\[[0-?]*[ -/]*[@-~]/g;
15
+ export const ANTIGRAVITY_ARGV_WARNING = 'Because Antigravity 1.1.1 has no verified stdin prompt contract, prompt content is temporarily visible in local process argv.';
16
+ export const ANTIGRAVITY_TOOL_BRIDGE_WARNING = 'Antigravity client tools use a Gateway JSON protocol because agy has no native output-schema flag; malformed model output is rejected.';
17
+ const CONFORMANCE_OUTPUT_SCHEMA = {
18
+ type: 'object',
19
+ additionalProperties: false,
20
+ properties: {
21
+ type: { const: 'assistant_text' },
22
+ content: { type: 'string', minLength: 1 },
23
+ },
24
+ required: ['type', 'content'],
25
+ };
26
+ class AntigravityAdapterError extends Error {
27
+ code;
28
+ constructor(code) {
29
+ super(code);
30
+ this.code = code;
31
+ this.name = 'AntigravityAdapterError';
32
+ }
33
+ }
34
+ function capabilities(metadata, verified) {
35
+ return {
36
+ available: true,
37
+ version: metadata.version,
38
+ verified,
39
+ ...(verified ? { verifiedAt: new Date().toISOString() } : {}),
40
+ modelSelection: true,
41
+ effortSelection: false,
42
+ modelOptions: metadata.models.map((model) => ({ ...model, effortOptions: null })),
43
+ isolationLevel: 'best_effort',
44
+ streamingMode: 'none',
45
+ toolBridge: 'structured_output',
46
+ resume: true,
47
+ cancellation: true,
48
+ details: [ANTIGRAVITY_ARGV_WARNING, ANTIGRAVITY_TOOL_BRIDGE_WARNING],
49
+ };
50
+ }
51
+ function unavailable(error) {
52
+ return {
53
+ available: false,
54
+ verified: false,
55
+ modelSelection: false,
56
+ effortSelection: false,
57
+ isolationLevel: 'best_effort',
58
+ streamingMode: 'none',
59
+ toolBridge: 'none',
60
+ resume: false,
61
+ cancellation: false,
62
+ error,
63
+ };
64
+ }
65
+ function errorCode(error) {
66
+ if (error instanceof AntigravityAdapterError)
67
+ return error.code;
68
+ if (typeof error !== 'object' || error === null || !('code' in error))
69
+ return null;
70
+ const code = error.code;
71
+ return code === 'adapter_spawn_failed' || code === 'adapter_process_error'
72
+ ? code
73
+ : null;
74
+ }
75
+ function safeProbeError(error) {
76
+ return errorCode(error) ?? 'capability_probe_failed';
77
+ }
78
+ function failureEvent(error, nativeStateAdvanced) {
79
+ const knownCode = errorCode(error);
80
+ const code = knownCode === 'adapter_spawn_failed' || knownCode === 'adapter_process_error'
81
+ ? knownCode
82
+ : 'adapter_protocol_error';
83
+ return {
84
+ type: 'failed',
85
+ code,
86
+ message: code === 'adapter_protocol_error'
87
+ ? 'Antigravity provider protocol error'
88
+ : 'Antigravity provider process error',
89
+ nativeStateAdvanced,
90
+ };
91
+ }
92
+ async function disposeQuietly(managed) {
93
+ try {
94
+ await managed.dispose();
95
+ }
96
+ catch {
97
+ // The child may exit while process-group cleanup is in progress.
98
+ }
99
+ }
100
+ async function readBoundedOutput(stream, limitBytes) {
101
+ const chunks = [];
102
+ let size = 0;
103
+ for await (const value of stream) {
104
+ const chunk = Buffer.isBuffer(value) ? value : Buffer.from(String(value));
105
+ size += chunk.length;
106
+ if (size > limitBytes)
107
+ throw new AntigravityAdapterError('adapter_protocol_error');
108
+ chunks.push(chunk);
109
+ }
110
+ return Buffer.concat(chunks, size).toString('utf8');
111
+ }
112
+ function boundedOutputCollector(stream, limitBytes) {
113
+ const chunks = [];
114
+ let size = 0;
115
+ let overflow = false;
116
+ const onData = (value) => {
117
+ const chunk = Buffer.isBuffer(value) ? value : Buffer.from(String(value));
118
+ size += chunk.length;
119
+ if (size > limitBytes)
120
+ overflow = true;
121
+ else
122
+ chunks.push(chunk);
123
+ };
124
+ stream.on('data', onData);
125
+ return {
126
+ value() {
127
+ if (overflow)
128
+ throw new AntigravityAdapterError('adapter_protocol_error');
129
+ return Buffer.concat(chunks, size).toString('utf8');
130
+ },
131
+ stop() { stream.removeListener('data', onData); },
132
+ };
133
+ }
134
+ function parseModels(output) {
135
+ const models = [];
136
+ const seen = new Set();
137
+ for (const rawLine of output.replace(ANSI_ESCAPE, '').split(/\r?\n/)) {
138
+ const line = rawLine.trim().replace(/^(?:[-*]|\d+[.)])\s+/, '');
139
+ if (line.length === 0 || /^(?:available\s+)?models?:?$/i.test(line) || seen.has(line))
140
+ continue;
141
+ seen.add(line);
142
+ models.push({ id: line, label: line, effortOptions: null });
143
+ }
144
+ if (models.length === 0)
145
+ throw new AntigravityAdapterError('adapter_protocol_error');
146
+ return models;
147
+ }
148
+ export function renderAntigravityPrompt(request) {
149
+ const transcript = renderProviderInput(request.input);
150
+ const sections = [
151
+ [
152
+ 'Complete the API conversation below as a single assistant turn.',
153
+ 'Answer only from the supplied conversation and do not use tools, shell commands, files, browsers,',
154
+ 'external integrations, skills, plugins, hooks, or agents during this turn.',
155
+ ].join(' '),
156
+ `API conversation:\n${transcript}`,
157
+ ];
158
+ if (request.outputSchema !== null) {
159
+ sections.push(`Required response schema:\n${JSON.stringify(request.outputSchema)}`, [
160
+ 'Client functions are descriptions only; represent a client function call through the response schema',
161
+ 'and do not execute it or use native tools.',
162
+ 'Return exactly one raw JSON object that validates against the required response schema.',
163
+ 'Do not add Markdown fences, commentary, reasoning, or any text before or after that JSON object.',
164
+ ].join(' '));
165
+ }
166
+ else {
167
+ sections.push('Return only the assistant response. Do not use native tools or add protocol markup.');
168
+ }
169
+ return sections.join('\n\n');
170
+ }
171
+ export class AntigravityProviderAdapter {
172
+ spawnProcess;
173
+ homeDir;
174
+ env;
175
+ command;
176
+ launchCwd = process.cwd();
177
+ activeRuns = new Map();
178
+ constructor(options = {}) {
179
+ this.spawnProcess = options.spawnProcess ?? spawnManagedProcess;
180
+ this.env = options.env ?? { ...process.env };
181
+ this.homeDir = options.homeDir ?? this.env.HOME ?? homedir();
182
+ this.command = options.command ?? 'agy';
183
+ }
184
+ async probeCapabilities(request = { mode: 'static' }) {
185
+ try {
186
+ const metadata = await this.staticMetadata();
187
+ if (request.mode === 'static')
188
+ return capabilities(metadata, false);
189
+ await this.verifyConformance(request);
190
+ return capabilities(metadata, true);
191
+ }
192
+ catch (error) {
193
+ return unavailable(safeProbeError(error));
194
+ }
195
+ }
196
+ start(request) {
197
+ return this.run(request, null);
198
+ }
199
+ resume(request) {
200
+ return this.run(request, request.nativeSessionId);
201
+ }
202
+ async cancel(runId) {
203
+ const active = this.activeRuns.get(runId);
204
+ if (!active)
205
+ return;
206
+ active.cancellationRequested = true;
207
+ await active.process.interrupt();
208
+ }
209
+ args(request, nativeSessionId, prompt) {
210
+ return [
211
+ '--sandbox',
212
+ '--model',
213
+ request.model,
214
+ '--print-timeout',
215
+ formatAgyTimeout(request.runTimeoutMs),
216
+ ...(nativeSessionId ? ['--conversation', nativeSessionId] : []),
217
+ '--print',
218
+ prompt,
219
+ ];
220
+ }
221
+ async *run(request, nativeSessionId) {
222
+ if (request.signal.aborted) {
223
+ yield { type: 'cancelled' };
224
+ return;
225
+ }
226
+ let managed = null;
227
+ let active = null;
228
+ let cancellationRequested = false;
229
+ const onAbort = () => {
230
+ cancellationRequested = true;
231
+ void this.cancel(request.runId).catch(() => undefined);
232
+ };
233
+ request.signal.addEventListener('abort', onAbort, { once: true });
234
+ try {
235
+ const prompt = renderAntigravityPrompt(request);
236
+ const priorConversationId = nativeSessionId === null
237
+ ? getAntigravityConversationId(this.homeDir, request.workspace)
238
+ : null;
239
+ managed = this.spawnProcess({
240
+ command: this.command,
241
+ args: this.args(request, nativeSessionId, prompt),
242
+ cwd: request.workspace,
243
+ env: { ...this.env },
244
+ });
245
+ active = { process: managed, cancellationRequested: false };
246
+ this.activeRuns.set(request.runId, active);
247
+ if (request.signal.aborted) {
248
+ cancellationRequested = true;
249
+ active.cancellationRequested = true;
250
+ await managed.interrupt();
251
+ }
252
+ const outputPromise = readBoundedOutput(managed.stdout, TURN_OUTPUT_LIMIT_BYTES);
253
+ const [exit, rawOutput] = await Promise.all([managed.exited, outputPromise]);
254
+ if (cancellationRequested || active.cancellationRequested) {
255
+ yield { type: 'cancelled' };
256
+ return;
257
+ }
258
+ if (exit.code !== 0) {
259
+ throw Object.assign(new Error('adapter_process_error'), { code: 'adapter_process_error' });
260
+ }
261
+ const sessionId = nativeSessionId
262
+ ?? getAntigravityConversationId(this.homeDir, request.workspace);
263
+ const output = rawOutput.trim();
264
+ if (!sessionId
265
+ || (nativeSessionId === null && sessionId === priorConversationId)
266
+ || output.length === 0) {
267
+ throw new AntigravityAdapterError('adapter_protocol_error');
268
+ }
269
+ yield { type: 'session_started', nativeSessionId: sessionId };
270
+ yield request.outputSchema === null
271
+ ? { type: 'text_delta', delta: output }
272
+ : { type: 'structured_delta', delta: output };
273
+ yield { type: 'completed' };
274
+ }
275
+ catch (error) {
276
+ if (cancellationRequested || active?.cancellationRequested) {
277
+ yield { type: 'cancelled' };
278
+ }
279
+ else {
280
+ const spawnFailed = errorCode(error) === 'adapter_spawn_failed';
281
+ yield failureEvent(error, managed !== null && !spawnFailed);
282
+ }
283
+ }
284
+ finally {
285
+ request.signal.removeEventListener('abort', onAbort);
286
+ if (active && this.activeRuns.get(request.runId) === active) {
287
+ this.activeRuns.delete(request.runId);
288
+ }
289
+ if (managed)
290
+ await disposeQuietly(managed);
291
+ }
292
+ }
293
+ async staticMetadata() {
294
+ const versionOutput = await this.runCommand(['--version']);
295
+ const helpOutput = await this.runCommand(['--help']);
296
+ if (REQUIRED_HELP_FLAGS.some((flag) => !helpOutput.includes(flag))) {
297
+ throw new AntigravityAdapterError('adapter_capability_unsupported');
298
+ }
299
+ const modelsOutput = await this.runCommand(['models']);
300
+ const version = versionOutput.match(/\b\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?\b/)?.[0];
301
+ if (!version)
302
+ throw new AntigravityAdapterError('adapter_protocol_error');
303
+ return { version, models: parseModels(modelsOutput) };
304
+ }
305
+ async runCommand(args) {
306
+ const managed = this.spawnProcess({
307
+ command: this.command,
308
+ args,
309
+ cwd: this.launchCwd,
310
+ env: { ...this.env },
311
+ });
312
+ const stdout = boundedOutputCollector(managed.stdout, COMMAND_OUTPUT_LIMIT_BYTES);
313
+ const stderr = boundedOutputCollector(managed.stderr, COMMAND_OUTPUT_LIMIT_BYTES);
314
+ managed.stdin.end();
315
+ try {
316
+ const exit = await managed.exited;
317
+ await new Promise((resolve) => setImmediate(resolve));
318
+ if (exit.code !== 0) {
319
+ throw Object.assign(new Error('adapter_process_error'), { code: 'adapter_process_error' });
320
+ }
321
+ const output = [stdout.value().trim(), stderr.value().trim()].filter(Boolean).join('\n');
322
+ if (output.trim().length === 0) {
323
+ throw new AntigravityAdapterError('adapter_protocol_error');
324
+ }
325
+ return output;
326
+ }
327
+ finally {
328
+ stdout.stop();
329
+ stderr.stop();
330
+ await disposeQuietly(managed);
331
+ }
332
+ }
333
+ async verifyConformance(request) {
334
+ const baseRequest = {
335
+ runId: `antigravity-conformance-start-${Date.now()}`,
336
+ targetId: request.targetId,
337
+ model: request.model,
338
+ effort: null,
339
+ workspace: request.workspace,
340
+ input: [{
341
+ role: 'user',
342
+ content: 'Return an assistant_text JSON object with a short English confirmation.',
343
+ }],
344
+ sessionMode: 'persistent',
345
+ runTimeoutMs: 60_000,
346
+ outputSchema: CONFORMANCE_OUTPUT_SCHEMA,
347
+ signal: request.signal,
348
+ };
349
+ const nativeSessionId = await this.requireStructuredConformance(this.start(baseRequest));
350
+ await this.requireStructuredConformance(this.resume({
351
+ ...baseRequest,
352
+ runId: `antigravity-conformance-resume-${Date.now()}`,
353
+ input: [{
354
+ role: 'user',
355
+ content: 'Return another assistant_text JSON object with a short English confirmation.',
356
+ }],
357
+ nativeSessionId,
358
+ }));
359
+ }
360
+ async requireStructuredConformance(events) {
361
+ let nativeSessionId = null;
362
+ let output = '';
363
+ let completed = false;
364
+ for await (const event of events) {
365
+ if (event.type === 'session_started')
366
+ nativeSessionId = event.nativeSessionId;
367
+ else if (event.type === 'structured_delta')
368
+ output += event.delta;
369
+ else if (event.type === 'completed')
370
+ completed = true;
371
+ else
372
+ throw new AntigravityAdapterError('adapter_protocol_error');
373
+ }
374
+ if (!nativeSessionId || output.trim().length === 0 || !completed) {
375
+ throw new AntigravityAdapterError('adapter_protocol_error');
376
+ }
377
+ try {
378
+ const parsed = JSON.parse(output);
379
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
380
+ throw new AntigravityAdapterError('adapter_protocol_error');
381
+ }
382
+ const record = parsed;
383
+ if (record.type !== 'assistant_text'
384
+ || typeof record.content !== 'string'
385
+ || record.content.length === 0
386
+ || Object.keys(record).length !== 2) {
387
+ throw new AntigravityAdapterError('adapter_protocol_error');
388
+ }
389
+ }
390
+ catch (error) {
391
+ if (error instanceof AntigravityAdapterError)
392
+ throw error;
393
+ throw new AntigravityAdapterError('adapter_protocol_error');
394
+ }
395
+ return nativeSessionId;
396
+ }
397
+ }
398
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/provider-runtime/antigravity/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { readFileSync, realpathSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ const UUID_SHAPE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
4
+ export function getAntigravityConversationId(homeDir, workspace) {
5
+ let realWorkspace;
6
+ try {
7
+ realWorkspace = realpathSync(workspace);
8
+ }
9
+ catch {
10
+ return null;
11
+ }
12
+ const cachePath = join(homeDir, '.gemini', 'antigravity-cli', 'cache', 'last_conversations.json');
13
+ let parsed;
14
+ try {
15
+ parsed = JSON.parse(readFileSync(cachePath, 'utf8'));
16
+ }
17
+ catch {
18
+ return null;
19
+ }
20
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed))
21
+ return null;
22
+ const value = parsed[realWorkspace];
23
+ return typeof value === 'string' && UUID_SHAPE.test(value) ? value : null;
24
+ }
25
+ export function formatAgyTimeout(ms) {
26
+ if (ms === null)
27
+ return '8760h';
28
+ const minutes = Math.max(1, Math.ceil(ms / 60_000));
29
+ return `${minutes}m`;
30
+ }
31
+ //# sourceMappingURL=conversation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.js","sourceRoot":"","sources":["../../../src/provider-runtime/antigravity/conversation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,UAAU,GAAG,iEAAiE,CAAC;AAErF,MAAM,UAAU,4BAA4B,CAC1C,OAAe,EACf,SAAiB;IAEjB,IAAI,aAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,aAAa,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CACpB,OAAO,EACP,SAAS,EACT,iBAAiB,EACjB,OAAO,EACP,yBAAyB,CAC1B,CAAC;IACF,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAExF,MAAM,KAAK,GAAI,MAAkC,CAAC,aAAa,CAAC,CAAC;IACjE,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAAiB;IAChD,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO,OAAO,CAAC;IAChC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;IACpD,OAAO,GAAG,OAAO,GAAG,CAAC;AACvB,CAAC"}
@@ -0,0 +1,191 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { GatewayError } from '../server/errors.js';
3
+ const CONFORMANCE_TIMEOUT_MS = 2 * 60 * 1_000;
4
+ function supportsIsolation(required, actual) {
5
+ return required === 'best_effort' || actual === 'strict';
6
+ }
7
+ function supportsStreaming(required, actual) {
8
+ return required === 'none' || actual === 'native';
9
+ }
10
+ function supportsToolBridge(required, actual) {
11
+ return required === 'none' || actual === 'structured_output';
12
+ }
13
+ export function capabilityMismatches(target, actual) {
14
+ const mismatches = [];
15
+ if (!supportsIsolation(target.isolationLevel, actual.isolationLevel))
16
+ mismatches.push('isolationLevel');
17
+ if (!supportsStreaming(target.streamingMode, actual.streamingMode))
18
+ mismatches.push('streamingMode');
19
+ if (!supportsToolBridge(target.toolBridge, actual.toolBridge))
20
+ mismatches.push('toolBridge');
21
+ if (!actual.modelSelection)
22
+ mismatches.push('modelSelection');
23
+ if (target.reasoningEffort !== null && !actual.effortSelection)
24
+ mismatches.push('effortSelection');
25
+ return mismatches;
26
+ }
27
+ function persistedCapabilities(actual) {
28
+ return {
29
+ isolationLevel: actual.isolationLevel,
30
+ streamingMode: actual.streamingMode,
31
+ toolBridge: actual.toolBridge,
32
+ resume: actual.resume,
33
+ cancellation: actual.cancellation,
34
+ modelSelection: actual.modelSelection,
35
+ effortSelection: actual.effortSelection,
36
+ ...(actual.details === undefined ? {} : { details: [...actual.details] }),
37
+ };
38
+ }
39
+ function safeErrorCode(error, fallback) {
40
+ const code = typeof error === 'object' && error !== null && 'code' in error
41
+ ? error.code
42
+ : undefined;
43
+ return typeof code === 'string' && /^[a-z][a-z0-9_]*$/.test(code) ? code : fallback;
44
+ }
45
+ function unavailableCapabilities(error) {
46
+ return {
47
+ available: false,
48
+ verified: false,
49
+ modelSelection: false,
50
+ effortSelection: false,
51
+ isolationLevel: 'best_effort',
52
+ streamingMode: 'none',
53
+ toolBridge: 'none',
54
+ resume: false,
55
+ cancellation: false,
56
+ error,
57
+ };
58
+ }
59
+ function cloneCapabilities(capabilities) {
60
+ return {
61
+ ...capabilities,
62
+ modelOptions: capabilities.modelOptions?.map((option) => ({
63
+ ...option,
64
+ effortOptions: option.effortOptions === null ? null : [...option.effortOptions],
65
+ })),
66
+ ...(capabilities.details === undefined ? {} : { details: [...capabilities.details] }),
67
+ };
68
+ }
69
+ function isVerifiedCapability(capabilities) {
70
+ if (!capabilities.available || !capabilities.verified
71
+ || typeof capabilities.version !== 'string' || capabilities.version.length === 0
72
+ || typeof capabilities.verifiedAt !== 'string') {
73
+ return false;
74
+ }
75
+ const timestamp = Date.parse(capabilities.verifiedAt);
76
+ return Number.isFinite(timestamp) && new Date(timestamp).toISOString() === capabilities.verifiedAt;
77
+ }
78
+ export class CapabilityService {
79
+ providers;
80
+ targets;
81
+ workspaces;
82
+ availability = [];
83
+ constructor(providers, targets, workspaces) {
84
+ this.providers = providers;
85
+ this.targets = targets;
86
+ this.workspaces = workspaces;
87
+ }
88
+ async scanInstalled() {
89
+ const targets = this.targets.list();
90
+ const cliNames = [...new Set([
91
+ ...this.providers.list(),
92
+ ...targets.map((target) => target.cli),
93
+ ])].sort();
94
+ const scanned = await Promise.all(cliNames.map(async (cli) => {
95
+ const scannedAt = new Date().toISOString();
96
+ let capabilities;
97
+ try {
98
+ const adapter = this.providers.require(cli);
99
+ capabilities = await adapter.probeCapabilities({ mode: 'static' });
100
+ }
101
+ catch (error) {
102
+ capabilities = unavailableCapabilities(safeErrorCode(error, 'provider_unavailable'));
103
+ }
104
+ if (capabilities.available
105
+ && (typeof capabilities.version !== 'string' || capabilities.version.length === 0)) {
106
+ capabilities = unavailableCapabilities('capability_probe_failed');
107
+ }
108
+ return { cli, scannedAt, capabilities: cloneCapabilities(capabilities) };
109
+ }));
110
+ for (const { cli, capabilities } of scanned) {
111
+ const cliTargets = targets.filter((target) => target.cli === cli);
112
+ if (!capabilities.available) {
113
+ const error = typeof capabilities.error === 'string' && capabilities.error.length > 0
114
+ ? capabilities.error
115
+ : 'provider_unavailable';
116
+ for (const target of cliTargets) {
117
+ this.targets.invalidateCapabilityIfUnchanged(target, null, error);
118
+ }
119
+ continue;
120
+ }
121
+ const version = capabilities.version;
122
+ for (const target of cliTargets) {
123
+ const hasValidPersistedRecord = target.capabilityVersion === version
124
+ && target.capabilityVerifiedAt !== null
125
+ && target.capabilities !== null
126
+ && target.capabilityError === null;
127
+ if (!hasValidPersistedRecord) {
128
+ this.targets.invalidateCapabilityIfUnchanged(target, version, 'conformance_required', true);
129
+ }
130
+ }
131
+ }
132
+ this.availability = scanned;
133
+ return this.listAvailability();
134
+ }
135
+ listAvailability() {
136
+ return this.availability.map((entry) => ({
137
+ ...entry,
138
+ capabilities: cloneCapabilities(entry.capabilities),
139
+ }));
140
+ }
141
+ async verifyTarget(targetId, confirmModelUsage) {
142
+ if (confirmModelUsage !== true) {
143
+ throw new GatewayError(400, 'model_usage_confirmation_required', 'model usage confirmation required');
144
+ }
145
+ const target = this.targets.get(targetId);
146
+ if (target === null)
147
+ throw new GatewayError(404, 'target_not_found', 'target not found');
148
+ let adapter;
149
+ try {
150
+ adapter = this.providers.require(target.cli);
151
+ }
152
+ catch {
153
+ throw new GatewayError(409, 'provider_unavailable', 'provider unavailable');
154
+ }
155
+ const temporaryTarget = {
156
+ ...target,
157
+ fixedWorkspace: null,
158
+ isolationLevel: 'best_effort',
159
+ };
160
+ const lease = await this.workspaces.acquireChat(temporaryTarget, `capability-${randomUUID()}`);
161
+ try {
162
+ const actual = await adapter.probeCapabilities({
163
+ mode: 'conformance',
164
+ targetId: target.id,
165
+ model: target.nativeModel,
166
+ effort: target.reasoningEffort,
167
+ workspace: lease.path,
168
+ signal: AbortSignal.timeout(CONFORMANCE_TIMEOUT_MS),
169
+ });
170
+ if (!isVerifiedCapability(actual)) {
171
+ throw new GatewayError(409, 'capability_verification_failed', 'capability verification failed');
172
+ }
173
+ if (capabilityMismatches(target, actual).length > 0) {
174
+ throw new GatewayError(409, 'capability_mismatch', 'capability mismatch');
175
+ }
176
+ const stored = this.targets.setCapabilityIfUnchanged(target, {
177
+ version: actual.version,
178
+ verifiedAt: actual.verifiedAt,
179
+ capabilities: persistedCapabilities(actual),
180
+ });
181
+ if (!stored) {
182
+ throw new GatewayError(409, 'target_changed_during_verification', 'target changed during verification');
183
+ }
184
+ return cloneCapabilities(actual);
185
+ }
186
+ finally {
187
+ await lease.release();
188
+ }
189
+ }
190
+ }
191
+ //# sourceMappingURL=capability-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability-service.js","sourceRoot":"","sources":["../../src/provider-runtime/capability-service.ts"],"names":[],"mappings":"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"}