@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,397 @@
1
+ import { z } from 'zod';
2
+ import { readFile } from 'node:fs/promises';
3
+ import { API_PROVIDER_SYSTEM_INSTRUCTION, renderProviderInput, } from '../provider-input.js';
4
+ import { readBoundedLines } from '../process/line-reader.js';
5
+ import { spawnManagedProcess, } from '../process/managed-process.js';
6
+ import { ClaudeAdapterError, hasStrictIsolationEvidence, parseClaudeEvent, } from './protocol.js';
7
+ const COMMAND_OUTPUT_LIMIT_BYTES = 64 * 1024;
8
+ const EMPTY_MCP_CONFIG = '{"mcpServers":{}}';
9
+ const EFFORT_OPTIONS = ['low', 'medium', 'high', 'xhigh', 'max'];
10
+ const REQUIRED_HELP_FLAGS = [
11
+ '--print', '--safe-mode', '--disable-slash-commands', '--strict-mcp-config',
12
+ '--mcp-config', '--tools', '--permission-mode', '--no-chrome', '--system-prompt',
13
+ '--model', '--effort', '--output-format', '--include-partial-messages', '--verbose',
14
+ '--input-format', '--no-session-persistence', '--resume', '--json-schema',
15
+ ];
16
+ const CONFORMANCE_SCHEMA = {
17
+ type: 'object',
18
+ required: ['type', 'content'],
19
+ properties: {
20
+ type: { const: 'assistant_text' },
21
+ content: { type: 'string' },
22
+ },
23
+ additionalProperties: false,
24
+ };
25
+ const conformanceOutputSchema = z.object({
26
+ type: z.literal('assistant_text'),
27
+ content: z.string(),
28
+ }).strict();
29
+ function capabilities(version, verified, isolationLevel, toolBridge) {
30
+ return {
31
+ available: true,
32
+ version,
33
+ verified,
34
+ ...(verified ? { verifiedAt: new Date().toISOString() } : {}),
35
+ modelSelection: true,
36
+ effortSelection: true,
37
+ modelOptions: [{
38
+ id: 'default',
39
+ label: 'Claude Code default',
40
+ effortOptions: [...EFFORT_OPTIONS],
41
+ }],
42
+ isolationLevel,
43
+ streamingMode: 'native',
44
+ toolBridge,
45
+ resume: true,
46
+ cancellation: true,
47
+ };
48
+ }
49
+ function unavailable(error) {
50
+ return {
51
+ available: false,
52
+ verified: false,
53
+ modelSelection: false,
54
+ effortSelection: false,
55
+ isolationLevel: 'best_effort',
56
+ streamingMode: 'none',
57
+ toolBridge: 'none',
58
+ resume: false,
59
+ cancellation: false,
60
+ error,
61
+ };
62
+ }
63
+ function safeErrorCode(error) {
64
+ if (error instanceof ClaudeAdapterError)
65
+ return error.code;
66
+ if (typeof error === 'object' && error !== null && 'code' in error
67
+ && (error.code === 'adapter_spawn_failed' || error.code === 'adapter_process_error')) {
68
+ return String(error.code);
69
+ }
70
+ return 'capability_probe_failed';
71
+ }
72
+ function failureEvent(error, nativeStateAdvanced) {
73
+ const code = typeof error === 'object' && error !== null && 'code' in error
74
+ && error.code === 'adapter_process_error'
75
+ ? 'adapter_process_error'
76
+ : 'adapter_protocol_error';
77
+ return {
78
+ type: 'failed',
79
+ code,
80
+ message: code === 'adapter_process_error'
81
+ ? 'Claude provider process error'
82
+ : 'Claude provider protocol error',
83
+ nativeStateAdvanced,
84
+ };
85
+ }
86
+ async function disposeQuietly(process) {
87
+ try {
88
+ await process.dispose();
89
+ }
90
+ catch {
91
+ // The print process may exit while process-group cleanup is in progress.
92
+ }
93
+ }
94
+ function writeInput(process, input) {
95
+ return new Promise((resolve, reject) => {
96
+ const onError = () => reject(Object.assign(new Error('adapter_process_error'), {
97
+ code: 'adapter_process_error',
98
+ }));
99
+ process.stdin.once('error', onError);
100
+ process.stdin.end(input, () => {
101
+ process.stdin.removeListener('error', onError);
102
+ resolve();
103
+ });
104
+ });
105
+ }
106
+ export class ClaudeProviderAdapter {
107
+ spawnProcess;
108
+ launchCwd = process.cwd();
109
+ activeRuns = new Map();
110
+ constructor(options = {}) {
111
+ this.spawnProcess = options.spawnProcess ?? spawnManagedProcess;
112
+ }
113
+ async probeCapabilities(request = { mode: 'static' }) {
114
+ try {
115
+ const version = await this.staticMetadata();
116
+ if (request.mode === 'static') {
117
+ return capabilities(version, false, 'best_effort', 'structured_output');
118
+ }
119
+ const conformance = await this.verifyConformance(request);
120
+ return capabilities(version, true, conformance.strictIsolation ? 'strict' : 'best_effort', conformance.schemaStream ? 'structured_output' : 'none');
121
+ }
122
+ catch (error) {
123
+ return unavailable(safeErrorCode(error));
124
+ }
125
+ }
126
+ start(request) {
127
+ return this.stream(request, null);
128
+ }
129
+ resume(request) {
130
+ return this.stream(request, request.nativeSessionId);
131
+ }
132
+ async cancel(runId) {
133
+ const active = this.activeRuns.get(runId);
134
+ if (!active)
135
+ return;
136
+ active.cancellationRequested = true;
137
+ await active.process.interrupt();
138
+ }
139
+ args(request, nativeSessionId) {
140
+ return [
141
+ '--print', '--safe-mode', '--disable-slash-commands',
142
+ '--strict-mcp-config', '--mcp-config', EMPTY_MCP_CONFIG,
143
+ '--tools', '', '--permission-mode', 'dontAsk', '--no-chrome',
144
+ '--system-prompt', API_PROVIDER_SYSTEM_INSTRUCTION,
145
+ '--model', request.model,
146
+ ...(request.effort ? ['--effort', request.effort] : []),
147
+ '--output-format', 'stream-json', '--include-partial-messages', '--verbose',
148
+ '--input-format', (request.images?.length ?? 0) > 0 ? 'stream-json' : 'text',
149
+ ...(request.sessionMode === 'ephemeral' ? ['--no-session-persistence'] : []),
150
+ ...(nativeSessionId ? ['--resume', nativeSessionId] : []),
151
+ ...(request.outputSchema ? ['--json-schema', JSON.stringify(request.outputSchema)] : []),
152
+ ];
153
+ }
154
+ async input(request) {
155
+ const text = renderProviderInput(request.input);
156
+ if ((request.images?.length ?? 0) === 0)
157
+ return text;
158
+ const content = [{ type: 'text', text }];
159
+ for (const image of request.images) {
160
+ content.push({
161
+ type: 'image',
162
+ source: {
163
+ type: 'base64',
164
+ media_type: image.mediaType,
165
+ data: (await readFile(image.path)).toString('base64'),
166
+ },
167
+ });
168
+ }
169
+ return `${JSON.stringify({
170
+ type: 'user',
171
+ message: { role: 'user', content },
172
+ parent_tool_use_id: null,
173
+ })}\n`;
174
+ }
175
+ async *stream(request, nativeSessionId, observation) {
176
+ if (request.signal.aborted) {
177
+ yield { type: 'cancelled' };
178
+ return;
179
+ }
180
+ let managed = null;
181
+ let active = null;
182
+ let sessionId = null;
183
+ let nativeStateAdvanced = false;
184
+ let terminal = false;
185
+ let sawStructuredStream = false;
186
+ let cancellationRequested = false;
187
+ const onAbort = () => {
188
+ cancellationRequested = true;
189
+ void this.cancel(request.runId);
190
+ };
191
+ request.signal.addEventListener('abort', onAbort, { once: true });
192
+ try {
193
+ const input = await this.input(request);
194
+ managed = this.spawnProcess({
195
+ command: 'claude',
196
+ args: this.args(request, nativeSessionId),
197
+ cwd: request.workspace,
198
+ env: { ...process.env },
199
+ });
200
+ active = { process: managed, cancellationRequested: false };
201
+ this.activeRuns.set(request.runId, active);
202
+ if (request.signal.aborted) {
203
+ cancellationRequested = true;
204
+ await managed.interrupt();
205
+ }
206
+ await writeInput(managed, input);
207
+ nativeStateAdvanced = true;
208
+ for await (const line of readBoundedLines(managed.stdout)) {
209
+ const event = parseClaudeEvent(line);
210
+ if (event === null)
211
+ continue;
212
+ if (event.type === 'system') {
213
+ if (sessionId !== null)
214
+ throw new ClaudeAdapterError('adapter_protocol_error');
215
+ sessionId = event.session_id;
216
+ if (observation)
217
+ observation.strictIsolation = hasStrictIsolationEvidence(event);
218
+ yield { type: 'session_started', nativeSessionId: sessionId };
219
+ continue;
220
+ }
221
+ if (event.session_id && event.session_id !== sessionId) {
222
+ throw new ClaudeAdapterError('adapter_protocol_error');
223
+ }
224
+ if (sessionId === null)
225
+ throw new ClaudeAdapterError('adapter_protocol_error');
226
+ if (event.type === 'stream_event') {
227
+ if (request.outputSchema === null) {
228
+ yield { type: 'text_delta', delta: event.event.delta.text };
229
+ }
230
+ else {
231
+ sawStructuredStream = true;
232
+ if (observation)
233
+ observation.sawStructuredStream = true;
234
+ yield { type: 'structured_delta', delta: event.event.delta.text };
235
+ }
236
+ continue;
237
+ }
238
+ if (event.type === 'assistant')
239
+ continue;
240
+ terminal = true;
241
+ if (event.is_error) {
242
+ yield {
243
+ type: 'failed',
244
+ code: 'adapter_provider_failed',
245
+ message: 'Claude provider turn failed',
246
+ nativeStateAdvanced: true,
247
+ };
248
+ return;
249
+ }
250
+ if (request.outputSchema !== null && !sawStructuredStream) {
251
+ if (event.structured_output === undefined) {
252
+ throw new ClaudeAdapterError('adapter_protocol_error');
253
+ }
254
+ const structured = JSON.stringify(event.structured_output);
255
+ if (structured === undefined)
256
+ throw new ClaudeAdapterError('adapter_protocol_error');
257
+ yield { type: 'structured_delta', delta: structured };
258
+ }
259
+ yield { type: 'completed' };
260
+ return;
261
+ }
262
+ const exit = await managed.exited;
263
+ if (!terminal) {
264
+ if (cancellationRequested || active?.cancellationRequested) {
265
+ yield { type: 'cancelled' };
266
+ }
267
+ else if (exit.code !== 0) {
268
+ throw Object.assign(new Error('adapter_process_error'), { code: 'adapter_process_error' });
269
+ }
270
+ else {
271
+ throw new ClaudeAdapterError('adapter_protocol_error');
272
+ }
273
+ }
274
+ }
275
+ catch (error) {
276
+ if (cancellationRequested || active?.cancellationRequested) {
277
+ yield { type: 'cancelled' };
278
+ }
279
+ else {
280
+ yield failureEvent(error, nativeStateAdvanced);
281
+ }
282
+ }
283
+ finally {
284
+ request.signal.removeEventListener('abort', onAbort);
285
+ if (active && this.activeRuns.get(request.runId) === active) {
286
+ this.activeRuns.delete(request.runId);
287
+ }
288
+ if (managed)
289
+ await disposeQuietly(managed);
290
+ }
291
+ }
292
+ async staticMetadata() {
293
+ const versionOutput = await this.runCommand(['--version']);
294
+ const helpOutput = await this.runCommand(['--help']);
295
+ if (REQUIRED_HELP_FLAGS.some((flag) => !helpOutput.includes(flag))) {
296
+ throw new ClaudeAdapterError('adapter_capability_unsupported');
297
+ }
298
+ const version = versionOutput.match(/\b\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?\b/)?.[0];
299
+ if (!version)
300
+ throw new ClaudeAdapterError('adapter_protocol_error');
301
+ return version;
302
+ }
303
+ async runCommand(args) {
304
+ const managed = this.spawnProcess({
305
+ command: 'claude',
306
+ args,
307
+ cwd: this.launchCwd,
308
+ env: { ...process.env },
309
+ });
310
+ try {
311
+ let output = '';
312
+ const collect = (async () => {
313
+ for await (const line of readBoundedLines(managed.stdout)) {
314
+ output += `${line}\n`;
315
+ if (Buffer.byteLength(output) > COMMAND_OUTPUT_LIMIT_BYTES) {
316
+ throw new ClaudeAdapterError('adapter_protocol_error');
317
+ }
318
+ }
319
+ })();
320
+ const [exit] = await Promise.all([managed.exited, collect]);
321
+ if (exit.code !== 0 || output.trim().length === 0) {
322
+ throw Object.assign(new Error('adapter_process_error'), { code: 'adapter_process_error' });
323
+ }
324
+ return output.trim();
325
+ }
326
+ finally {
327
+ await disposeQuietly(managed);
328
+ }
329
+ }
330
+ async verifyConformance(request) {
331
+ const baseRequest = {
332
+ runId: `claude-conformance-start-${Date.now()}`,
333
+ targetId: request.targetId,
334
+ model: request.model,
335
+ effort: request.effort,
336
+ workspace: request.workspace,
337
+ input: [{
338
+ role: 'user',
339
+ content: 'Return JSON with type "assistant_text" and a short English confirmation in content.',
340
+ }],
341
+ sessionMode: 'persistent',
342
+ runTimeoutMs: null,
343
+ outputSchema: CONFORMANCE_SCHEMA,
344
+ signal: request.signal,
345
+ };
346
+ const firstObservation = {
347
+ strictIsolation: false,
348
+ sawStructuredStream: false,
349
+ };
350
+ const nativeSessionId = await this.requireConformanceEvents(this.stream(baseRequest, null, firstObservation));
351
+ const resumeObservation = {
352
+ strictIsolation: false,
353
+ sawStructuredStream: false,
354
+ };
355
+ await this.requireConformanceEvents(this.stream({
356
+ ...baseRequest,
357
+ runId: `claude-conformance-resume-${Date.now()}`,
358
+ input: [{
359
+ role: 'user',
360
+ content: 'Return the same schema with a short English confirmation.',
361
+ }],
362
+ }, nativeSessionId, resumeObservation));
363
+ return {
364
+ strictIsolation: firstObservation.strictIsolation && resumeObservation.strictIsolation,
365
+ schemaStream: firstObservation.sawStructuredStream && resumeObservation.sawStructuredStream,
366
+ };
367
+ }
368
+ async requireConformanceEvents(events) {
369
+ let nativeSessionId = null;
370
+ let structuredOutput = '';
371
+ let completed = false;
372
+ for await (const event of events) {
373
+ if (event.type === 'session_started')
374
+ nativeSessionId = event.nativeSessionId;
375
+ else if (event.type === 'structured_delta')
376
+ structuredOutput += event.delta;
377
+ else if (event.type === 'completed')
378
+ completed = true;
379
+ else
380
+ throw new ClaudeAdapterError('adapter_protocol_error');
381
+ }
382
+ if (!nativeSessionId || !completed)
383
+ throw new ClaudeAdapterError('adapter_protocol_error');
384
+ let parsed;
385
+ try {
386
+ parsed = JSON.parse(structuredOutput);
387
+ }
388
+ catch {
389
+ throw new ClaudeAdapterError('adapter_protocol_error');
390
+ }
391
+ if (!conformanceOutputSchema.safeParse(parsed).success) {
392
+ throw new ClaudeAdapterError('adapter_protocol_error');
393
+ }
394
+ return nativeSessionId;
395
+ }
396
+ }
397
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/provider-runtime/claude/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,143 @@
1
+ import { z } from 'zod';
2
+ const initEventSchema = z.object({
3
+ type: z.literal('system'),
4
+ subtype: z.literal('init'),
5
+ session_id: z.string().min(1),
6
+ tools: z.array(z.unknown()).optional(),
7
+ mcp_servers: z.array(z.unknown()).optional(),
8
+ slash_commands: z.array(z.unknown()).optional(),
9
+ skills: z.array(z.unknown()).optional(),
10
+ agents: z.array(z.unknown()).optional(),
11
+ plugins: z.array(z.unknown()).optional(),
12
+ permissionMode: z.string().optional(),
13
+ });
14
+ const streamEventSchema = z.object({
15
+ type: z.literal('stream_event'),
16
+ session_id: z.string().min(1).optional(),
17
+ event: z.unknown(),
18
+ });
19
+ const assistantEventSchema = z.object({
20
+ type: z.literal('assistant'),
21
+ session_id: z.string().min(1).optional(),
22
+ message: z.unknown(),
23
+ });
24
+ const resultEventSchema = z.object({
25
+ type: z.literal('result'),
26
+ subtype: z.string(),
27
+ is_error: z.boolean(),
28
+ session_id: z.string().min(1),
29
+ result: z.string().optional(),
30
+ structured_output: z.unknown().optional(),
31
+ });
32
+ const rawClaudeEventSchema = z.discriminatedUnion('type', [
33
+ initEventSchema,
34
+ streamEventSchema,
35
+ assistantEventSchema,
36
+ resultEventSchema,
37
+ ]);
38
+ const textDeltaSchema = z.object({
39
+ type: z.literal('content_block_delta'),
40
+ delta: z.object({
41
+ type: z.literal('text_delta'),
42
+ text: z.string(),
43
+ }),
44
+ });
45
+ const contentBlockStartSchema = z.object({
46
+ type: z.literal('content_block_start'),
47
+ content_block: z.object({ type: z.string() }).passthrough(),
48
+ }).passthrough();
49
+ const ignoredStreamEventSchema = z.discriminatedUnion('type', [
50
+ z.object({ type: z.literal('message_start') }).passthrough(),
51
+ z.object({ type: z.literal('content_block_stop') }).passthrough(),
52
+ z.object({ type: z.literal('message_delta') }).passthrough(),
53
+ z.object({ type: z.literal('message_stop') }).passthrough(),
54
+ ]);
55
+ const assistantMessageSchema = z.object({
56
+ content: z.array(z.object({ type: z.string() }).passthrough()),
57
+ }).passthrough();
58
+ export class ClaudeAdapterError extends Error {
59
+ code;
60
+ constructor(code) {
61
+ super(code);
62
+ this.code = code;
63
+ this.name = 'ClaudeAdapterError';
64
+ }
65
+ }
66
+ function protocolError() {
67
+ throw new ClaudeAdapterError('adapter_protocol_error');
68
+ }
69
+ function isEmpty(value) {
70
+ return Array.isArray(value) && value.length === 0;
71
+ }
72
+ export function hasStrictIsolationEvidence(event) {
73
+ return isEmpty(event.tools)
74
+ && isEmpty(event.mcp_servers)
75
+ && isEmpty(event.slash_commands)
76
+ && isEmpty(event.skills)
77
+ && isEmpty(event.agents)
78
+ && isEmpty(event.plugins)
79
+ && event.permissionMode === 'dontAsk';
80
+ }
81
+ function assertEmptyCustomization(event) {
82
+ for (const value of [
83
+ event.tools,
84
+ event.mcp_servers,
85
+ event.slash_commands,
86
+ event.skills,
87
+ event.agents,
88
+ event.plugins,
89
+ ]) {
90
+ if (value && value.length > 0)
91
+ protocolError();
92
+ }
93
+ }
94
+ function assertSafeAssistantMessage(message) {
95
+ const parsed = assistantMessageSchema.safeParse(message);
96
+ if (!parsed.success)
97
+ protocolError();
98
+ for (const block of parsed.data.content) {
99
+ if (block.type !== 'text')
100
+ protocolError();
101
+ }
102
+ }
103
+ export function parseClaudeEvent(line) {
104
+ let value;
105
+ try {
106
+ value = JSON.parse(line);
107
+ }
108
+ catch {
109
+ protocolError();
110
+ }
111
+ const parsed = rawClaudeEventSchema.safeParse(value);
112
+ if (!parsed.success)
113
+ protocolError();
114
+ const event = parsed.data;
115
+ if (event.type === 'system') {
116
+ assertEmptyCustomization(event);
117
+ return event;
118
+ }
119
+ if (event.type === 'assistant') {
120
+ assertSafeAssistantMessage(event.message);
121
+ return event;
122
+ }
123
+ if (event.type === 'result')
124
+ return event;
125
+ const delta = textDeltaSchema.safeParse(event.event);
126
+ if (delta.success) {
127
+ return {
128
+ type: 'stream_event',
129
+ ...(event.session_id ? { session_id: event.session_id } : {}),
130
+ event: delta.data,
131
+ };
132
+ }
133
+ const blockStart = contentBlockStartSchema.safeParse(event.event);
134
+ if (blockStart.success) {
135
+ if (blockStart.data.content_block.type !== 'text')
136
+ protocolError();
137
+ return null;
138
+ }
139
+ if (ignoredStreamEventSchema.safeParse(event.event).success)
140
+ return null;
141
+ return protocolError();
142
+ }
143
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/provider-runtime/claude/protocol.ts"],"names":[],"mappings":"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"}