@sentropic/h2a-runtime 0.91.1 → 0.92.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 (58) hide show
  1. package/dist/config.d.ts +2 -0
  2. package/dist/config.d.ts.map +1 -1
  3. package/dist/config.js +16 -3
  4. package/dist/config.js.map +1 -1
  5. package/dist/index.d.ts +0 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +76 -58
  8. package/dist/index.js.map +1 -1
  9. package/dist/llm-gateway-runtime/index.d.ts +6 -0
  10. package/dist/llm-gateway-runtime/index.d.ts.map +1 -1
  11. package/dist/llm-gateway-runtime/index.js +134 -60
  12. package/dist/llm-gateway-runtime/index.js.map +1 -1
  13. package/dist/llm-gateway-runtime/session-ledger.d.ts +38 -55
  14. package/dist/llm-gateway-runtime/session-ledger.d.ts.map +1 -1
  15. package/dist/llm-gateway-runtime/session-ledger.js +102 -250
  16. package/dist/llm-gateway-runtime/session-ledger.js.map +1 -1
  17. package/dist/llm-gateway-runtime/sticky.d.ts +25 -52
  18. package/dist/llm-gateway-runtime/sticky.d.ts.map +1 -1
  19. package/dist/llm-gateway-runtime/sticky.js +36 -605
  20. package/dist/llm-gateway-runtime/sticky.js.map +1 -1
  21. package/dist/llm-mesh.d.ts +19 -72
  22. package/dist/llm-mesh.d.ts.map +1 -1
  23. package/dist/llm-mesh.js +42 -399
  24. package/dist/llm-mesh.js.map +1 -1
  25. package/dist/llm-routing-config.d.ts +28 -0
  26. package/dist/llm-routing-config.d.ts.map +1 -0
  27. package/dist/llm-routing-config.js +100 -0
  28. package/dist/llm-routing-config.js.map +1 -0
  29. package/dist/registry.d.ts +7 -0
  30. package/dist/registry.d.ts.map +1 -1
  31. package/dist/registry.js +37 -1
  32. package/dist/registry.js.map +1 -1
  33. package/dist/status-projection.d.ts.map +1 -1
  34. package/dist/tmux.d.ts +7 -5
  35. package/dist/tmux.d.ts.map +1 -1
  36. package/dist/tmux.js +33 -7
  37. package/dist/tmux.js.map +1 -1
  38. package/package.json +3 -3
  39. package/dist/llm-gateway-runtime/accounts.d.ts +0 -62
  40. package/dist/llm-gateway-runtime/accounts.d.ts.map +0 -1
  41. package/dist/llm-gateway-runtime/accounts.js +0 -323
  42. package/dist/llm-gateway-runtime/accounts.js.map +0 -1
  43. package/dist/llm-gateway-runtime/model-catalog.d.ts +0 -44
  44. package/dist/llm-gateway-runtime/model-catalog.d.ts.map +0 -1
  45. package/dist/llm-gateway-runtime/model-catalog.js +0 -191
  46. package/dist/llm-gateway-runtime/model-catalog.js.map +0 -1
  47. package/dist/llm-gateway-runtime/proxy-anthropic.d.ts +0 -3
  48. package/dist/llm-gateway-runtime/proxy-anthropic.d.ts.map +0 -1
  49. package/dist/llm-gateway-runtime/proxy-anthropic.js +0 -318
  50. package/dist/llm-gateway-runtime/proxy-anthropic.js.map +0 -1
  51. package/dist/llm-gateway-runtime/proxy-cloud-code.d.ts +0 -11
  52. package/dist/llm-gateway-runtime/proxy-cloud-code.d.ts.map +0 -1
  53. package/dist/llm-gateway-runtime/proxy-cloud-code.js +0 -215
  54. package/dist/llm-gateway-runtime/proxy-cloud-code.js.map +0 -1
  55. package/dist/llm-gateway-runtime/proxy-openai.d.ts +0 -118
  56. package/dist/llm-gateway-runtime/proxy-openai.d.ts.map +0 -1
  57. package/dist/llm-gateway-runtime/proxy-openai.js +0 -1305
  58. package/dist/llm-gateway-runtime/proxy-openai.js.map +0 -1
@@ -1,318 +0,0 @@
1
- import { accountSupportsRoute, findAccount, markAccountExhausted, selectFallbackAccount } from "./accounts.js";
2
- import { lookupToken, rebindGatewaySession, } from "./sticky.js";
3
- import { handleMessagesViaCloudCode } from "./proxy-cloud-code.js";
4
- import { handleMessagesViaOpenAI } from "./proxy-openai.js";
5
- import { accountPoolForProvider, resolveModelRoute, } from "./model-catalog.js";
6
- import { recordSessionActive, recordSessionFallback, recordSessionIdle, recordSessionRateLimitComplete, recordSessionRateLimited, recordSessionRequest, } from "./session-ledger.js";
7
- const ANTHROPIC_BASE = process.env.ANTHROPIC_UPSTREAM_URL ?? "https://api.anthropic.com";
8
- const PASSTHROUGH_REQUEST_HEADERS = [
9
- "anthropic-version",
10
- "anthropic-beta",
11
- "content-type",
12
- ];
13
- const PASSTHROUGH_RESPONSE_HEADERS = [
14
- "content-type",
15
- "transfer-encoding",
16
- "retry-after",
17
- ];
18
- function gatewayTokenFromRequest(c) {
19
- const auth = c.req.header("authorization") ?? "";
20
- if (auth.startsWith("Bearer gw-"))
21
- return auth.slice("Bearer ".length);
22
- const apiKey = c.req.header("x-api-key") ?? "";
23
- if (apiKey.startsWith("gw-"))
24
- return apiKey;
25
- return null;
26
- }
27
- function usesOpenAIProvider(provider) {
28
- return provider === "openai" || provider === "codex";
29
- }
30
- function isQuotaFallbackResponse(response) {
31
- return response.status === 429 || response.status === 404;
32
- }
33
- function quotaReason(response) {
34
- return `upstream ${response.status}`;
35
- }
36
- function retryAfterMs(response, nowMs = Date.now()) {
37
- const raw = response.headers.get("retry-after")?.trim();
38
- if (!raw)
39
- return undefined;
40
- const seconds = Number(raw);
41
- if (Number.isFinite(seconds) && seconds >= 0)
42
- return Math.round(seconds * 1000);
43
- const at = Date.parse(raw);
44
- return Number.isFinite(at) ? Math.max(0, at - nowMs) : undefined;
45
- }
46
- /**
47
- * Pool identity for the quota-refusal comparison, fail-CLOSED on an unknown
48
- * provider.
49
- *
50
- * accountPoolForProvider only knows the recognised pools and returns undefined
51
- * for anything else. Comparing its results directly meant two UNKNOWN providers
52
- * compared as `undefined !== undefined`, i.e. EQUAL, so the cross-pool refusal
53
- * did not fire and the session was rebound across providers anyway. Measured on
54
- * a hand-written GATEWAY_ACCOUNTS with providers outside the union: an exhausted
55
- * account was rebound to a foreign one. Nothing validates that field, so a
56
- * hand-edited account list reaches this path.
57
- *
58
- * Falling back to the normalised provider name makes an unrecognised provider
59
- * its OWN pool: two different unknown providers now differ (refused), while the
60
- * same unknown provider still matches, which preserves the intra-pool failover
61
- * the owner ratified.
62
- */
63
- function quotaPoolKey(provider) {
64
- return accountPoolForProvider(provider) ?? provider.trim().toLowerCase();
65
- }
66
- async function rebindAfterQuotaResponse(gatewayToken, session, response, route) {
67
- if (!session.accountId || !session.provider)
68
- return undefined;
69
- const exhaustedAccount = findAccount(session.accountId);
70
- if (exhaustedAccount && response.status === 429) {
71
- const retry = retryAfterMs(response);
72
- recordSessionRateLimited(session.sessionId, exhaustedAccount, {
73
- ...(route ? { route } : {}),
74
- ...(retry !== undefined ? { retryAfterMs: retry } : {}),
75
- });
76
- }
77
- markAccountExhausted(session.accountId, quotaReason(response));
78
- const fallback = selectFallbackAccount(session.accountId, Date.now(), {
79
- ...(session.requiredTransport
80
- ? { requiredTransport: session.requiredTransport }
81
- : {}),
82
- ...(route ? { route } : {}),
83
- });
84
- if (!fallback)
85
- return undefined;
86
- if (response.status === 429 &&
87
- quotaPoolKey(fallback.provider) !== quotaPoolKey(session.provider)) {
88
- return undefined;
89
- }
90
- let rebound;
91
- try {
92
- rebound = await rebindGatewaySession(gatewayToken, fallback, route);
93
- }
94
- catch (err) {
95
- console.warn(`[llm-gateway] quota fallback rebind failed for ${session.accountId}: ${String(err)}`);
96
- return undefined;
97
- }
98
- if (!rebound)
99
- return undefined;
100
- if (exhaustedAccount) {
101
- recordSessionFallback(session.sessionId, exhaustedAccount, fallback, route);
102
- }
103
- await response.body?.cancel().catch(() => { });
104
- console.warn(`[llm-gateway] account ${session.accountId} returned ${response.status}; ` +
105
- `rebinding session to ${fallback.id} (${fallback.provider})`);
106
- return rebound;
107
- }
108
- function completeWhenBodyEnds(response, complete) {
109
- if (!response.body) {
110
- complete();
111
- return response;
112
- }
113
- const reader = response.body.getReader();
114
- let completed = false;
115
- const completeOnce = () => {
116
- if (completed)
117
- return;
118
- completed = true;
119
- complete();
120
- };
121
- const body = new ReadableStream({
122
- async pull(controller) {
123
- try {
124
- const result = await reader.read();
125
- if (result.done) {
126
- completeOnce();
127
- controller.close();
128
- return;
129
- }
130
- controller.enqueue(result.value);
131
- }
132
- catch (error) {
133
- completeOnce();
134
- controller.error(error);
135
- }
136
- },
137
- async cancel(reason) {
138
- completeOnce();
139
- await reader.cancel(reason);
140
- },
141
- });
142
- return new Response(body, {
143
- status: response.status,
144
- statusText: response.statusText,
145
- headers: response.headers,
146
- });
147
- }
148
- async function handleMessagesViaAnthropic(c, session, body) {
149
- const upstreamUrl = `${ANTHROPIC_BASE}/v1/messages`;
150
- const requestHeaders = {
151
- "anthropic-version": c.req.header("anthropic-version") ?? "2023-06-01",
152
- };
153
- for (const h of PASSTHROUGH_REQUEST_HEADERS) {
154
- const v = c.req.header(h);
155
- if (v !== undefined)
156
- requestHeaders[h] = v;
157
- }
158
- // SECURITY (architect review 2026-07-13): a Claude Code OAuth token (sk-ant-oat…) must NEVER be
159
- // relayed here as a raw Anthropic Bearer. It is stored as a pooled claude-code account (WP16) but
160
- // is meant to be served via the personal-passthrough EXECUTION path (the account executes the
161
- // request), not by replaying the subscription token to api.anthropic.com (ToS/ban risk on the
162
- // user's Claude Max). The claude-code serve mechanism is pending the gateway (claude:mesh) lane;
163
- // do NOT re-add a raw Bearer relay without that sign-off. Keep the API-key path here.
164
- requestHeaders["x-api-key"] = session.token;
165
- let upstream;
166
- try {
167
- upstream = await fetch(upstreamUrl, {
168
- method: "POST",
169
- headers: requestHeaders,
170
- body,
171
- // @ts-expect-error Node 18+ fetch supports duplex for streaming
172
- duplex: "half",
173
- signal: c.req.raw.signal,
174
- });
175
- }
176
- catch (err) {
177
- if (err.name === "AbortError") {
178
- return new Response(null, { status: 499 });
179
- }
180
- throw err;
181
- }
182
- const responseHeaders = {};
183
- for (const h of PASSTHROUGH_RESPONSE_HEADERS) {
184
- const v = upstream.headers.get(h);
185
- if (v !== null)
186
- responseHeaders[h] = v;
187
- }
188
- // Pipe stream directly — never buffer
189
- return new Response(upstream.body, {
190
- status: upstream.status,
191
- headers: responseHeaders,
192
- });
193
- }
194
- async function dispatchToSessionAccount(c, session, body, recordOutbound) {
195
- if (session.transportConstraints) {
196
- return handleMessagesViaCloudCode(c, session, body);
197
- }
198
- if (!session.accountId || !session.provider) {
199
- return c.json({ error: "gateway session account is unavailable" }, 503);
200
- }
201
- if (session.requiredTransport &&
202
- session.transport !== session.requiredTransport) {
203
- return c.json({ error: "gateway session transport constraint is no longer satisfied" }, 503);
204
- }
205
- // The account/transport guard above has passed. This is the final common
206
- // point immediately before the provider-specific outbound request is
207
- // constructed, so route text cannot be claimed merely from parsing or a
208
- // successful rebind.
209
- recordOutbound();
210
- const account = findAccount(session.accountId);
211
- if (!account) {
212
- return c.json({ error: "gateway session account is unavailable" }, 503);
213
- }
214
- if (usesOpenAIProvider(session.provider)) {
215
- return handleMessagesViaOpenAI(c, {
216
- token: account.token,
217
- gatewayToken: session.gatewayToken,
218
- accountId: session.accountId,
219
- sessionId: session.sessionId,
220
- ...(session.requiredTransport
221
- ? { requiredTransport: session.requiredTransport }
222
- : {}),
223
- }, body);
224
- }
225
- return handleMessagesViaAnthropic(c, account, body);
226
- }
227
- function routeFromRequestBody(body) {
228
- try {
229
- const parsed = JSON.parse(new TextDecoder().decode(body));
230
- return typeof parsed.model === "string"
231
- ? resolveModelRoute(parsed.model)
232
- : undefined;
233
- }
234
- catch {
235
- return undefined;
236
- }
237
- }
238
- export async function handleMessages(c) {
239
- const gatewayToken = gatewayTokenFromRequest(c);
240
- if (!gatewayToken)
241
- return c.json({ error: "unauthorized" }, 403);
242
- let session = await lookupToken(gatewayToken);
243
- if (!session)
244
- return c.json({ error: "unauthorized" }, 403);
245
- const body = await c.req.raw.arrayBuffer();
246
- const route = routeFromRequestBody(body);
247
- if (session.transportConstraints) {
248
- if (route?.transportProviderId && route.transportProviderId !== "cloud-code") {
249
- return c.json({ error: "gateway session transport constraint is no longer satisfied" }, 503);
250
- }
251
- return handleMessagesViaCloudCode(c, session, body);
252
- }
253
- if (!session.accountId) {
254
- return c.json({ error: "gateway session account is unavailable" }, 503);
255
- }
256
- const sessionAccount = findAccount(session.accountId);
257
- if (route && !sessionAccount) {
258
- return c.json({ error: "gateway session account is unavailable" }, 503);
259
- }
260
- if (route && sessionAccount && !accountSupportsRoute(sessionAccount, route)) {
261
- const correctPoolAccount = selectFallbackAccount(session.accountId, Date.now(), {
262
- route,
263
- });
264
- if (!correctPoolAccount) {
265
- return c.json({ error: "no account can serve the requested route" }, 503);
266
- }
267
- try {
268
- const rebound = await rebindGatewaySession(gatewayToken, correctPoolAccount, route);
269
- if (!rebound) {
270
- return c.json({ error: "requested route could not be rebound" }, 503);
271
- }
272
- const reboundSession = rebound;
273
- session = reboundSession;
274
- }
275
- catch (err) {
276
- console.error("rebindGatewaySession failed:", err);
277
- return c.json({ error: "requested route could not be rebound" }, 503);
278
- }
279
- }
280
- const attempted = new Set();
281
- let outboundRecorded = false;
282
- try {
283
- for (;;) {
284
- const dispatchSession = session;
285
- if (!dispatchSession.accountId) {
286
- return c.json({ error: "gateway session account is unavailable" }, 503);
287
- }
288
- attempted.add(dispatchSession.accountId);
289
- const response = await dispatchToSessionAccount(c, dispatchSession, body, () => {
290
- if (outboundRecorded)
291
- return;
292
- recordSessionRequest(dispatchSession.sessionId, route);
293
- outboundRecorded = true;
294
- });
295
- if (!isQuotaFallbackResponse(response)) {
296
- const completedSessionId = session.sessionId;
297
- return completeWhenBodyEnds(response, () => recordSessionIdle(completedSessionId, route));
298
- }
299
- const rebound = await rebindAfterQuotaResponse(gatewayToken, session, response, route);
300
- if (!rebound?.accountId || attempted.has(rebound.accountId)) {
301
- if (response.status === 429) {
302
- recordSessionRateLimitComplete(session.sessionId, route);
303
- }
304
- else {
305
- recordSessionIdle(session.sessionId, route);
306
- }
307
- return response;
308
- }
309
- session = rebound;
310
- recordSessionActive(session.sessionId, route);
311
- }
312
- }
313
- catch (error) {
314
- recordSessionIdle(session.sessionId, route);
315
- throw error;
316
- }
317
- }
318
- //# sourceMappingURL=proxy-anthropic.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"proxy-anthropic.js","sourceRoot":"","sources":["../../src/llm-gateway-runtime/proxy-anthropic.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- import { type LlmMeshFacade } from "@sentropic/llm-mesh/facade";
2
- import type { Context } from "hono";
3
- import type { SessionEntry } from "./sticky.js";
4
- /** The gateway keeps the opaque mesh facade, never a provider credential. */
5
- export declare function getCloudCodeFacade(): LlmMeshFacade;
6
- /**
7
- * Execute a Cloud Code request through the mesh facade. `execute()` owns every
8
- * non-abort outcome; an aborted client request releases only its reservation.
9
- */
10
- export declare function handleMessagesViaCloudCode(c: Context, session: Pick<SessionEntry, "sessionId" | "transportConstraints">, requestBody?: ArrayBuffer, llmMesh?: LlmMeshFacade): Promise<Response>;
11
- //# sourceMappingURL=proxy-cloud-code.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"proxy-cloud-code.d.ts","sourceRoot":"","sources":["../../src/llm-gateway-runtime/proxy-cloud-code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAiChD,6EAA6E;AAC7E,wBAAgB,kBAAkB,IAAI,aAAa,CAMlD;AAgED;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,CAAC,EAAE,OAAO,EACV,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,GAAG,sBAAsB,CAAC,EACjE,WAAW,CAAC,EAAE,WAAW,EACzB,OAAO,GAAE,aAAoC,GAC5C,OAAO,CAAC,QAAQ,CAAC,CAyHnB"}
@@ -1,215 +0,0 @@
1
- import { createLlmMeshFacade } from "@sentropic/llm-mesh/facade";
2
- function facadeConfigResolver() {
3
- return {
4
- async resolveConfig(configRef) {
5
- const raw = process.env.H2A_LLM_MESH_CONFIG_JSON;
6
- if (!raw)
7
- return {};
8
- const parsed = JSON.parse(raw);
9
- const scoped = parsed[configRef];
10
- return scoped && typeof scoped === "object" && !Array.isArray(scoped)
11
- ? scoped
12
- : parsed;
13
- },
14
- };
15
- }
16
- let facade;
17
- /** The gateway keeps the opaque mesh facade, never a provider credential. */
18
- export function getCloudCodeFacade() {
19
- facade ??= createLlmMeshFacade({
20
- configResolver: facadeConfigResolver(),
21
- mode: "cli",
22
- });
23
- return facade;
24
- }
25
- function textParts(content) {
26
- if (typeof content === "string")
27
- return [{ text: content }];
28
- if (!Array.isArray(content))
29
- return [];
30
- return content.flatMap((part) => {
31
- if (typeof part === "object" &&
32
- part !== null &&
33
- part.type === "text" &&
34
- typeof part.text === "string") {
35
- return [{ text: part.text }];
36
- }
37
- return [];
38
- });
39
- }
40
- function toProviderRequest(body) {
41
- const contents = [];
42
- if (typeof body.system === "string") {
43
- contents.push({ role: "user", parts: [{ text: body.system }] });
44
- }
45
- else if (Array.isArray(body.system)) {
46
- const parts = textParts(body.system);
47
- if (parts.length > 0)
48
- contents.push({ role: "user", parts });
49
- }
50
- if (Array.isArray(body.messages)) {
51
- for (const message of body.messages) {
52
- const parts = textParts(message.content);
53
- if (parts.length > 0) {
54
- contents.push({
55
- role: message.role === "assistant" ? "model" : "user",
56
- parts,
57
- });
58
- }
59
- }
60
- }
61
- const generationConfig = {
62
- ...(typeof body.max_tokens === "number"
63
- ? { maxOutputTokens: body.max_tokens }
64
- : {}),
65
- ...(typeof body.temperature === "number" ? { temperature: body.temperature } : {}),
66
- ...(typeof body.top_p === "number" ? { topP: body.top_p } : {}),
67
- };
68
- return {
69
- modelId: typeof body.model === "string" ? body.model : "",
70
- contents,
71
- ...(Object.keys(generationConfig).length > 0 ? { generationConfig } : {}),
72
- };
73
- }
74
- function sse(event, value) {
75
- return new TextEncoder().encode(`event: ${event}\ndata: ${JSON.stringify(value)}\n\n`);
76
- }
77
- function cloudCodeError(message) {
78
- return { type: "error", error: { type: "api_error", message } };
79
- }
80
- /**
81
- * Execute a Cloud Code request through the mesh facade. `execute()` owns every
82
- * non-abort outcome; an aborted client request releases only its reservation.
83
- */
84
- export async function handleMessagesViaCloudCode(c, session, requestBody, llmMesh = getCloudCodeFacade()) {
85
- const rawBody = requestBody ?? (await c.req.raw.arrayBuffer());
86
- let body;
87
- try {
88
- body = JSON.parse(new TextDecoder().decode(rawBody));
89
- }
90
- catch {
91
- return c.json(cloudCodeError("invalid JSON"), 400);
92
- }
93
- if (!session.transportConstraints || typeof body.model !== "string") {
94
- return c.json(cloudCodeError("Cloud Code session or model is missing"), 400);
95
- }
96
- const acquisition = await llmMesh.acquire({
97
- ...session.transportConstraints.accountConstraints,
98
- transportProviderId: "cloud-code",
99
- modelId: body.model,
100
- affinityKey: session.sessionId,
101
- });
102
- let released = false;
103
- const release = async () => {
104
- if (released)
105
- return;
106
- released = true;
107
- await llmMesh.release(acquisition);
108
- };
109
- const request = toProviderRequest(body);
110
- if (!body.stream) {
111
- try {
112
- let content = "";
113
- let usage = {};
114
- for await (const event of llmMesh
115
- .getAdapter("cloud-code")
116
- .execute(acquisition, request, c.req.raw.signal)) {
117
- if (c.req.raw.signal.aborted) {
118
- await release();
119
- return new Response(null, { status: 499 });
120
- }
121
- if (event.kind === "content")
122
- content += event.delta;
123
- if (event.kind === "done")
124
- usage = event.usage;
125
- if (event.kind === "error")
126
- return c.json(cloudCodeError(event.message), 502);
127
- }
128
- return c.json({
129
- type: "message",
130
- role: "assistant",
131
- content: [{ type: "text", text: content }],
132
- model: body.model,
133
- stop_reason: "end_turn",
134
- stop_sequence: null,
135
- usage,
136
- });
137
- }
138
- catch (error) {
139
- if (c.req.raw.signal.aborted) {
140
- await release();
141
- return new Response(null, { status: 499 });
142
- }
143
- return c.json(cloudCodeError(error instanceof Error ? error.message : String(error)), 502);
144
- }
145
- }
146
- const stream = new ReadableStream({
147
- start(controller) {
148
- void (async () => {
149
- const onAbort = () => void release();
150
- c.req.raw.signal.addEventListener("abort", onAbort, { once: true });
151
- try {
152
- controller.enqueue(sse("message_start", {
153
- type: "message_start",
154
- message: { id: `msg_${Date.now().toString(36)}`, type: "message", role: "assistant", content: [], model: body.model },
155
- }));
156
- controller.enqueue(sse("content_block_start", {
157
- type: "content_block_start",
158
- index: 0,
159
- content_block: { type: "text", text: "" },
160
- }));
161
- for await (const event of llmMesh
162
- .getAdapter("cloud-code")
163
- .execute(acquisition, request, c.req.raw.signal)) {
164
- if (c.req.raw.signal.aborted) {
165
- await release();
166
- controller.close();
167
- return;
168
- }
169
- if (event.kind === "content") {
170
- controller.enqueue(sse("content_block_delta", {
171
- type: "content_block_delta",
172
- index: 0,
173
- delta: { type: "text_delta", text: event.delta },
174
- }));
175
- }
176
- else if (event.kind === "done") {
177
- controller.enqueue(sse("content_block_stop", { type: "content_block_stop", index: 0 }));
178
- controller.enqueue(sse("message_delta", {
179
- type: "message_delta",
180
- delta: { stop_reason: "end_turn", stop_sequence: null },
181
- usage: event.usage,
182
- }));
183
- controller.enqueue(sse("message_stop", { type: "message_stop" }));
184
- }
185
- else {
186
- controller.enqueue(sse("error", cloudCodeError(event.message)));
187
- }
188
- }
189
- controller.close();
190
- }
191
- catch (error) {
192
- if (c.req.raw.signal.aborted)
193
- await release();
194
- else
195
- controller.enqueue(sse("error", cloudCodeError(error instanceof Error ? error.message : String(error))));
196
- controller.close();
197
- }
198
- finally {
199
- c.req.raw.signal.removeEventListener("abort", onAbort);
200
- }
201
- })();
202
- },
203
- cancel() {
204
- return release();
205
- },
206
- });
207
- return new Response(stream, {
208
- status: 200,
209
- headers: {
210
- "content-type": "text/event-stream; charset=utf-8",
211
- "cache-control": "no-cache",
212
- },
213
- });
214
- }
215
- //# sourceMappingURL=proxy-cloud-code.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"proxy-cloud-code.js","sourceRoot":"","sources":["../../src/llm-gateway-runtime/proxy-cloud-code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAsB,MAAM,4BAA4B,CAAC;AAoBrF,SAAS,oBAAoB;IAC3B,OAAO;QACL,KAAK,CAAC,aAAa,CAAC,SAAiB;YACnC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;YACjD,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;YAC1D,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;YACjC,OAAO,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;gBACnE,CAAC,CAAC,MAAiC;gBACnC,CAAC,CAAC,MAAM,CAAC;QACb,CAAC;KACF,CAAC;AACJ,CAAC;AAED,IAAI,MAAiC,CAAC;AAEtC,6EAA6E;AAC7E,MAAM,UAAU,kBAAkB;IAChC,MAAM,KAAK,mBAAmB,CAAC;QAC7B,cAAc,EAAE,oBAAoB,EAAE;QACtC,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,SAAS,CAAC,OAAgB;IACjC,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC9B,IACE,OAAO,IAAI,KAAK,QAAQ;YACxB,IAAI,KAAK,IAAI;YACZ,IAA2B,CAAC,IAAI,KAAK,MAAM;YAC5C,OAAQ,IAA2B,CAAC,IAAI,KAAK,QAAQ,EACrD,CAAC;YACD,OAAO,CAAC,EAAE,IAAI,EAAG,IAAyB,CAAC,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAsB;IAK/C,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAClE,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAA8B,EAAE,CAAC;YAC1D,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACzC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;oBACrD,KAAK;iBACN,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,gBAAgB,GAAG;QACvB,GAAG,CAAC,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ;YACrC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,UAAU,EAAE;YACtC,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClF,GAAG,CAAC,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChE,CAAC;IACF,OAAO;QACL,OAAO,EAAE,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QACzD,QAAQ;QACR,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1E,CAAC;AACJ,CAAC;AAED,SAAS,GAAG,CAAC,KAAa,EAAE,KAAc;IACxC,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,UAAU,KAAK,WAAW,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,cAAc,CAAC,OAAe;IACrC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;AAClE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,CAAU,EACV,OAAiE,EACjE,WAAyB,EACzB,UAAyB,kBAAkB,EAAE;IAE7C,MAAM,OAAO,GAAG,WAAW,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/D,IAAI,IAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAqB,CAAC;IAC3E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,GAAG,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,oBAAoB,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QACpE,OAAO,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,wCAAwC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC;QACxC,GAAG,OAAO,CAAC,oBAAoB,CAAC,kBAAkB;QAClD,mBAAmB,EAAE,YAAY;QACjC,OAAO,EAAE,IAAI,CAAC,KAAK;QACnB,WAAW,EAAE,OAAO,CAAC,SAAS;KAC/B,CAAC,CAAC;IACH,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;QACzB,IAAI,QAAQ;YAAE,OAAO;QACrB,QAAQ,GAAG,IAAI,CAAC;QAChB,MAAM,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAExC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,IAAI,OAAO,GAAG,EAAE,CAAC;YACjB,IAAI,KAAK,GAAY,EAAE,CAAC;YACxB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO;iBAC9B,UAAU,CAAC,YAAY,CAAC;iBACxB,OAAO,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACnD,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBAC7B,MAAM,OAAO,EAAE,CAAC;oBAChB,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC7C,CAAC;gBACD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;oBAAE,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC;gBACrD,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;oBAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;gBAC/C,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;oBAAE,OAAO,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;YAChF,CAAC;YACD,OAAO,CAAC,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;gBAC1C,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,WAAW,EAAE,UAAU;gBACvB,aAAa,EAAE,IAAI;gBACnB,KAAK;aACN,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC7B,MAAM,OAAO,EAAE,CAAC;gBAChB,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAC7C,CAAC;YACD,OAAO,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,cAAc,CAAa;QAC5C,KAAK,CAAC,UAAU;YACd,KAAK,CAAC,KAAK,IAAI,EAAE;gBACf,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,KAAK,OAAO,EAAE,CAAC;gBACrC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBACpE,IAAI,CAAC;oBACH,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE;wBACtC,IAAI,EAAE,eAAe;wBACrB,OAAO,EAAE,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;qBACtH,CAAC,CAAC,CAAC;oBACJ,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE;wBAC5C,IAAI,EAAE,qBAAqB;wBAC3B,KAAK,EAAE,CAAC;wBACR,aAAa,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE;qBAC1C,CAAC,CAAC,CAAC;oBACJ,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO;yBAC9B,UAAU,CAAC,YAAY,CAAC;yBACxB,OAAO,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;wBACnD,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;4BAC7B,MAAM,OAAO,EAAE,CAAC;4BAChB,UAAU,CAAC,KAAK,EAAE,CAAC;4BACnB,OAAO;wBACT,CAAC;wBACD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;4BAC7B,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE;gCAC5C,IAAI,EAAE,qBAAqB;gCAC3B,KAAK,EAAE,CAAC;gCACR,KAAK,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE;6BACjD,CAAC,CAAC,CAAC;wBACN,CAAC;6BAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;4BACjC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;4BACxF,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE;gCACtC,IAAI,EAAE,eAAe;gCACrB,KAAK,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,IAAI,EAAE;gCACvD,KAAK,EAAE,KAAK,CAAC,KAAK;6BACnB,CAAC,CAAC,CAAC;4BACJ,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;wBACpE,CAAC;6BAAM,CAAC;4BACN,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;wBAClE,CAAC;oBACH,CAAC;oBACD,UAAU,CAAC,KAAK,EAAE,CAAC;gBACrB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO;wBAAE,MAAM,OAAO,EAAE,CAAC;;wBACzC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC9G,UAAU,CAAC,KAAK,EAAE,CAAC;gBACrB,CAAC;wBAAS,CAAC;oBACT,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC,CAAC,EAAE,CAAC;QACP,CAAC;QACD,MAAM;YACJ,OAAO,OAAO,EAAE,CAAC;QACnB,CAAC;KACF,CAAC,CAAC;IACH,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE;QAC1B,MAAM,EAAE,GAAG;QACX,OAAO,EAAE;YACP,cAAc,EAAE,kCAAkC;YAClD,eAAe,EAAE,UAAU;SAC5B;KACF,CAAC,CAAC;AACL,CAAC"}