@sentropic/h2a-runtime 0.91.0 → 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 (94) 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 +4 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +79 -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/native-terminal/client.d.ts +23 -0
  30. package/dist/native-terminal/client.d.ts.map +1 -0
  31. package/dist/native-terminal/client.js +203 -0
  32. package/dist/native-terminal/client.js.map +1 -0
  33. package/dist/native-terminal/host.d.ts +78 -0
  34. package/dist/native-terminal/host.d.ts.map +1 -0
  35. package/dist/native-terminal/host.js +275 -0
  36. package/dist/native-terminal/host.js.map +1 -0
  37. package/dist/native-terminal/process.d.ts +11 -0
  38. package/dist/native-terminal/process.d.ts.map +1 -0
  39. package/dist/native-terminal/process.js +137 -0
  40. package/dist/native-terminal/process.js.map +1 -0
  41. package/dist/native-terminal/protocol.d.ts +57 -0
  42. package/dist/native-terminal/protocol.d.ts.map +1 -0
  43. package/dist/native-terminal/protocol.js +102 -0
  44. package/dist/native-terminal/protocol.js.map +1 -0
  45. package/dist/native-terminal/replay-buffer.d.ts +26 -0
  46. package/dist/native-terminal/replay-buffer.d.ts.map +1 -0
  47. package/dist/native-terminal/replay-buffer.js +84 -0
  48. package/dist/native-terminal/replay-buffer.js.map +1 -0
  49. package/dist/native-terminal/server.d.ts +13 -0
  50. package/dist/native-terminal/server.d.ts.map +1 -0
  51. package/dist/native-terminal/server.js +555 -0
  52. package/dist/native-terminal/server.js.map +1 -0
  53. package/dist/native-terminal/socket-path.d.ts +8 -0
  54. package/dist/native-terminal/socket-path.d.ts.map +1 -0
  55. package/dist/native-terminal/socket-path.js +41 -0
  56. package/dist/native-terminal/socket-path.js.map +1 -0
  57. package/dist/native-terminal/supervisor.d.ts +26 -0
  58. package/dist/native-terminal/supervisor.d.ts.map +1 -0
  59. package/dist/native-terminal/supervisor.js +273 -0
  60. package/dist/native-terminal/supervisor.js.map +1 -0
  61. package/dist/pty.d.ts +1 -0
  62. package/dist/pty.d.ts.map +1 -1
  63. package/dist/pty.js +78 -2
  64. package/dist/pty.js.map +1 -1
  65. package/dist/registry.d.ts +7 -0
  66. package/dist/registry.d.ts.map +1 -1
  67. package/dist/registry.js +37 -1
  68. package/dist/registry.js.map +1 -1
  69. package/dist/status-projection.d.ts.map +1 -1
  70. package/dist/tmux.d.ts +7 -5
  71. package/dist/tmux.d.ts.map +1 -1
  72. package/dist/tmux.js +33 -7
  73. package/dist/tmux.js.map +1 -1
  74. package/package.json +3 -3
  75. package/dist/llm-gateway-runtime/accounts.d.ts +0 -62
  76. package/dist/llm-gateway-runtime/accounts.d.ts.map +0 -1
  77. package/dist/llm-gateway-runtime/accounts.js +0 -323
  78. package/dist/llm-gateway-runtime/accounts.js.map +0 -1
  79. package/dist/llm-gateway-runtime/model-catalog.d.ts +0 -44
  80. package/dist/llm-gateway-runtime/model-catalog.d.ts.map +0 -1
  81. package/dist/llm-gateway-runtime/model-catalog.js +0 -191
  82. package/dist/llm-gateway-runtime/model-catalog.js.map +0 -1
  83. package/dist/llm-gateway-runtime/proxy-anthropic.d.ts +0 -3
  84. package/dist/llm-gateway-runtime/proxy-anthropic.d.ts.map +0 -1
  85. package/dist/llm-gateway-runtime/proxy-anthropic.js +0 -318
  86. package/dist/llm-gateway-runtime/proxy-anthropic.js.map +0 -1
  87. package/dist/llm-gateway-runtime/proxy-cloud-code.d.ts +0 -11
  88. package/dist/llm-gateway-runtime/proxy-cloud-code.d.ts.map +0 -1
  89. package/dist/llm-gateway-runtime/proxy-cloud-code.js +0 -215
  90. package/dist/llm-gateway-runtime/proxy-cloud-code.js.map +0 -1
  91. package/dist/llm-gateway-runtime/proxy-openai.d.ts +0 -118
  92. package/dist/llm-gateway-runtime/proxy-openai.d.ts.map +0 -1
  93. package/dist/llm-gateway-runtime/proxy-openai.js +0 -1305
  94. package/dist/llm-gateway-runtime/proxy-openai.js.map +0 -1
@@ -1,272 +1,124 @@
1
- import { publicAccountDescriptor, upstreamTransportForAccount, } from "./accounts.js";
2
- const _ledger = new Map();
3
- // Status polling addresses a tmux client session, not an implementation
4
- // gateway id. Keep that correlation as an index so the status line never has
5
- // to download and search the whole ledger.
6
- const _ledgerByClientSessionId = new Map();
7
- // The value is omitted when two records are tied for freshest; a status line
8
- // must say UNKNOWN rather than choose one arbitrary route.
9
- const _freshestGatewayByClientSessionId = new Map();
10
- function removeClientIndex(clientSessionId, gatewaySessionId) {
11
- const entries = _ledgerByClientSessionId.get(clientSessionId);
12
- if (!entries)
13
- return;
14
- entries.delete(gatewaySessionId);
15
- if (entries.size === 0)
16
- _ledgerByClientSessionId.delete(clientSessionId);
17
- }
18
- function addClientIndex(clientSessionId, gatewaySessionId) {
19
- const entries = _ledgerByClientSessionId.get(clientSessionId) ?? new Set();
20
- entries.add(gatewaySessionId);
21
- _ledgerByClientSessionId.set(clientSessionId, entries);
22
- }
23
- function refreshFreshestClientIndex(clientSessionId) {
24
- const ids = _ledgerByClientSessionId.get(clientSessionId);
25
- if (!ids || ids.size === 0) {
26
- _freshestGatewayByClientSessionId.delete(clientSessionId);
27
- return;
28
- }
29
- let freshest;
30
- let tied = false;
31
- for (const id of ids) {
32
- const entry = _ledger.get(id);
33
- if (!entry)
34
- continue;
35
- if (!freshest || entry.updatedAt > freshest.updatedAt) {
36
- freshest = entry;
37
- tied = false;
38
- }
39
- else if (entry.updatedAt === freshest.updatedAt) {
40
- tied = true;
41
- }
42
- }
43
- _freshestGatewayByClientSessionId.set(clientSessionId, !freshest || tied ? undefined : freshest.gatewaySessionId);
44
- }
45
- function setLedgerEntry(entry) {
46
- _ledger.set(entry.gatewaySessionId, entry);
47
- refreshFreshestClientIndex(entry.clientSessionId);
48
- }
49
- function timestamp(now = new Date()) {
50
- return now.toISOString();
51
- }
52
- function routeFields(route) {
53
- if (!route)
54
- return {};
55
- return {
56
- ...(route.requestedModel ? { requestedModel: route.requestedModel } : {}),
57
- ...(route.catalogModelId ? { modelId: route.catalogModelId } : {}),
58
- ...(route.upstreamModel ? { upstreamModel: route.upstreamModel } : {}),
59
- routePolicy: route.routingPolicy,
60
- routeReason: route.routeReason,
61
- };
62
- }
63
- function existingRouteFields(entry) {
64
- if (!entry)
65
- return {};
66
- return {
67
- ...(entry.requestedModel ? { requestedModel: entry.requestedModel } : {}),
68
- ...(entry.modelId ? { modelId: entry.modelId } : {}),
69
- ...(entry.upstreamModel ? { upstreamModel: entry.upstreamModel } : {}),
70
- ...(entry.routePolicy ? { routePolicy: entry.routePolicy } : {}),
71
- ...(entry.routeReason ? { routeReason: entry.routeReason } : {}),
72
- };
73
- }
74
- export function upsertSessionLedger(input) {
75
- const now = timestamp(input.now);
76
- const existing = _ledger.get(input.gatewaySessionId);
77
- const workspaceId = input.workspaceId ?? existing?.workspaceId;
78
- const profile = input.profile ?? existing?.profile;
79
- const account = publicAccountDescriptor(input.account);
80
- const entry = {
81
- gatewaySessionId: input.gatewaySessionId,
82
- clientSessionId: input.clientSessionId ??
83
- existing?.clientSessionId ??
84
- input.gatewaySessionId,
85
- ...(workspaceId ? { workspaceId } : {}),
86
- ...(profile ? { profile } : {}),
87
- account,
88
- transport: upstreamTransportForAccount(input.account),
89
- state: existing?.state ?? "idle",
90
- // Acquiring (or re-acquiring) a gateway session only selects a possible
91
- // route. It is not evidence that a request using that route left the
92
- // gateway. Route fields are written exclusively by the dispatch lifecycle.
93
- ...existingRouteFields(existing),
94
- createdAt: existing?.createdAt ?? now,
95
- lastUsedAt: now,
96
- updatedAt: now,
97
- requestCount: existing?.requestCount ?? 0,
98
- inFlightRequests: existing?.inFlightRequests ?? 0,
99
- detailsAmbiguous: existing?.detailsAmbiguous ?? false,
100
- ...(existing?.lastRateLimit
101
- ? { lastRateLimit: existing.lastRateLimit }
102
- : {}),
103
- ...(existing?.lastFallback ? { lastFallback: existing.lastFallback } : {}),
104
- };
105
- _ledger.set(entry.gatewaySessionId, entry);
106
- if (existing && existing.clientSessionId !== entry.clientSessionId &&
107
- _ledgerByClientSessionId.has(existing.clientSessionId)) {
108
- removeClientIndex(existing.clientSessionId, entry.gatewaySessionId);
109
- }
110
- addClientIndex(entry.clientSessionId, entry.gatewaySessionId);
111
- refreshFreshestClientIndex(entry.clientSessionId);
112
- if (existing && existing.clientSessionId !== entry.clientSessionId) {
113
- refreshFreshestClientIndex(existing.clientSessionId);
114
- }
115
- return entry;
116
- }
117
- export function recordSessionRequest(gatewaySessionId, route, now = new Date()) {
118
- if (!gatewaySessionId)
119
- return undefined;
120
- const existing = _ledger.get(gatewaySessionId);
121
- if (!existing)
122
- return undefined;
123
- const withoutRoute = { ...existing };
124
- delete withoutRoute.requestedModel;
125
- delete withoutRoute.modelId;
126
- delete withoutRoute.upstreamModel;
127
- delete withoutRoute.routePolicy;
128
- delete withoutRoute.routeReason;
129
- delete withoutRoute.lastFallback;
130
- const detailsAmbiguous = existing.inFlightRequests > 0;
1
+ const ledger = new Map();
2
+ const byClientSession = new Map();
3
+ const plansByCandidate = new Map();
4
+ const unselectedAccount = (provider = "mesh") => ({
5
+ id: "unselected",
6
+ provider,
7
+ label: "unselected",
8
+ });
9
+ const accountFromDiagnostic = (diagnostic) => ({
10
+ id: diagnostic.diagnosticAccountRef,
11
+ provider: diagnostic.actualProviderId,
12
+ label: diagnostic.diagnosticAccountRef,
13
+ });
14
+ export function recordRoutePlan(session, input, plan, now = new Date()) {
15
+ const diagnostics = new Map(plan.diagnostics.map((value) => [value.candidateRef, value]));
16
+ const request = { session, input, plan, diagnostics };
17
+ for (const candidateRef of plan.candidateRefs)
18
+ plansByCandidate.set(candidateRef, request);
19
+ const at = now.toISOString();
20
+ const existing = ledger.get(session.sessionId);
21
+ const first = plan.diagnostics[0];
22
+ const detailsAmbiguous = (existing?.inFlightRequests ?? 0) > 0;
131
23
  const entry = {
132
- ...withoutRoute,
133
- ...(detailsAmbiguous ? {} : routeFields(route)),
134
- state: "active",
135
- lastUsedAt: timestamp(now),
136
- updatedAt: timestamp(now),
137
- requestCount: existing.requestCount + 1,
138
- inFlightRequests: existing.inFlightRequests + 1,
139
- detailsAmbiguous,
140
- };
141
- setLedgerEntry(entry);
142
- return entry;
143
- }
144
- export function recordSessionActive(gatewaySessionId, route, now = new Date()) {
145
- if (!gatewaySessionId)
146
- return undefined;
147
- const existing = _ledger.get(gatewaySessionId);
148
- if (!existing)
149
- return undefined;
150
- const entry = {
151
- ...existing,
152
- ...(existing.detailsAmbiguous ? {} : routeFields(route)),
153
- state: "active",
154
- lastUsedAt: timestamp(now),
155
- updatedAt: timestamp(now),
156
- };
157
- setLedgerEntry(entry);
158
- return entry;
159
- }
160
- export function recordSessionIdle(gatewaySessionId, route, now = new Date()) {
161
- if (!gatewaySessionId)
162
- return undefined;
163
- const existing = _ledger.get(gatewaySessionId);
164
- if (!existing)
165
- return undefined;
166
- const inFlightRequests = Math.max(0, existing.inFlightRequests - 1);
167
- const entry = {
168
- ...existing,
169
- ...(existing.detailsAmbiguous ? {} : routeFields(route)),
170
- state: inFlightRequests > 0 ? "active" : "idle",
171
- lastUsedAt: timestamp(now),
172
- updatedAt: timestamp(now),
173
- inFlightRequests,
174
- };
175
- setLedgerEntry(entry);
176
- return entry;
177
- }
178
- export function recordSessionFallback(gatewaySessionId, from, to, route, now = new Date()) {
179
- if (!gatewaySessionId)
180
- return undefined;
181
- const existing = _ledger.get(gatewaySessionId);
182
- if (!existing)
183
- return undefined;
184
- const at = timestamp(now);
185
- const entry = {
186
- ...existing,
187
- // The caller passes a route only after its first actual dispatch. A
188
- // rebind may then retain that already-observed route while it updates the
189
- // account, but cannot manufacture a new one.
190
- ...(existing.detailsAmbiguous || !route ? {} : routeFields(route)),
191
- account: publicAccountDescriptor(to),
192
- transport: upstreamTransportForAccount(to),
24
+ gatewaySessionId: session.sessionId,
25
+ clientSessionId: session.clientSessionId,
26
+ ...(session.workspaceId ? { workspaceId: session.workspaceId } : {}),
27
+ ...(session.profile ? { profile: session.profile } : {}),
28
+ account: detailsAmbiguous || !first
29
+ ? unselectedAccount()
30
+ : accountFromDiagnostic(first),
31
+ transport: detailsAmbiguous || !first ? "mesh" : first.actualTransportProviderId,
193
32
  state: "active",
33
+ ...(detailsAmbiguous ? {} : {
34
+ requestedModel: input.requestedModel,
35
+ ...(first ? {
36
+ modelId: first.actualModelId,
37
+ upstreamModel: first.actualModelId,
38
+ routeReason: first.reason,
39
+ } : {}),
40
+ routePolicy: plan.policy.strategy.kind,
41
+ }),
42
+ createdAt: existing?.createdAt ?? at,
194
43
  lastUsedAt: at,
195
44
  updatedAt: at,
196
- ...(existing.detailsAmbiguous
197
- ? {}
198
- : {
199
- lastFallback: {
200
- at,
201
- from: publicAccountDescriptor(from),
202
- to: publicAccountDescriptor(to),
203
- },
204
- }),
205
- };
206
- setLedgerEntry(entry);
207
- return entry;
208
- }
209
- export function recordSessionRateLimited(gatewaySessionId, account, options = {}) {
210
- if (!gatewaySessionId)
211
- return undefined;
212
- const existing = _ledger.get(gatewaySessionId);
213
- if (!existing)
214
- return undefined;
215
- const now = timestamp(options.now);
216
- const rateLimit = {
217
- at: now,
218
- account: publicAccountDescriptor(account),
219
- ...(options.retryAfterMs !== undefined
220
- ? { retryAfterMs: options.retryAfterMs }
221
- : {}),
222
- };
223
- const entry = {
224
- ...existing,
225
- ...(existing.detailsAmbiguous || !options.route
226
- ? {}
227
- : routeFields(options.route)),
228
- state: existing.inFlightRequests > 1 ? "active" : "rate-limited",
229
- lastUsedAt: now,
230
- updatedAt: now,
231
- lastRateLimit: rateLimit,
45
+ requestCount: (existing?.requestCount ?? 0) + 1,
46
+ inFlightRequests: (existing?.inFlightRequests ?? 0) + 1,
47
+ detailsAmbiguous,
48
+ ...(existing?.lastRateLimit ? { lastRateLimit: existing.lastRateLimit } : {}),
49
+ ...(existing?.lastFallback ? { lastFallback: existing.lastFallback } : {}),
232
50
  };
233
- setLedgerEntry(entry);
234
- return entry;
235
- }
236
- /** Complete a terminal 429 after fallback selection/rebind has failed. */
237
- export function recordSessionRateLimitComplete(gatewaySessionId, route, now = new Date()) {
238
- if (!gatewaySessionId)
239
- return undefined;
240
- const existing = _ledger.get(gatewaySessionId);
51
+ ledger.set(session.sessionId, entry);
52
+ byClientSession.set(session.clientSessionId, session.sessionId);
53
+ }
54
+ export function recordRouteSettlement(settlement, now = new Date()) {
55
+ const lastAttempt = settlement.attempts.at(-1);
56
+ const planned = lastAttempt ? plansByCandidate.get(lastAttempt.candidateRef) : undefined;
57
+ const sessionId = planned?.session.sessionId ?? settlement.cost.principalId;
58
+ const existing = ledger.get(sessionId);
241
59
  if (!existing)
242
- return undefined;
60
+ return;
61
+ const diagnostic = lastAttempt ? planned?.diagnostics.get(lastAttempt.candidateRef) : undefined;
62
+ const at = now.toISOString();
243
63
  const inFlightRequests = Math.max(0, existing.inFlightRequests - 1);
244
- const at = timestamp(now);
64
+ const rateLimited = lastAttempt?.outcome === "rate-limited";
65
+ const detailsAmbiguous = inFlightRequests > 0;
66
+ const account = diagnostic ? accountFromDiagnostic(diagnostic) : existing.account;
67
+ const firstAttempt = settlement.attempts[0];
68
+ const firstDiagnostic = firstAttempt
69
+ ? planned?.diagnostics.get(firstAttempt.candidateRef)
70
+ : undefined;
71
+ const fallback = firstDiagnostic && diagnostic
72
+ && firstDiagnostic.candidateRef !== diagnostic.candidateRef
73
+ ? {
74
+ at,
75
+ from: accountFromDiagnostic(firstDiagnostic),
76
+ to: account,
77
+ }
78
+ : undefined;
245
79
  const entry = {
246
80
  ...existing,
247
- ...(existing.detailsAmbiguous || !route ? {} : routeFields(route)),
248
- state: inFlightRequests > 0 ? "active" : "rate-limited",
81
+ account: detailsAmbiguous ? unselectedAccount() : account,
82
+ transport: detailsAmbiguous
83
+ ? "mesh"
84
+ : diagnostic?.actualTransportProviderId ?? existing.transport,
85
+ state: inFlightRequests > 0 ? "active" : rateLimited ? "rate-limited" : "idle",
86
+ ...(detailsAmbiguous ? {} : {
87
+ requestedModel: settlement.requestedModel,
88
+ ...(diagnostic ? {
89
+ modelId: diagnostic.actualModelId,
90
+ upstreamModel: diagnostic.actualModelId,
91
+ routeReason: diagnostic.reason,
92
+ } : {}),
93
+ }),
249
94
  lastUsedAt: at,
250
95
  updatedAt: at,
251
96
  inFlightRequests,
97
+ detailsAmbiguous,
98
+ ...(rateLimited ? {
99
+ lastRateLimit: { at, account },
100
+ } : {}),
101
+ ...(fallback ? { lastFallback: fallback } : {}),
252
102
  };
253
- setLedgerEntry(entry);
254
- return entry;
103
+ ledger.set(sessionId, entry);
104
+ if (planned) {
105
+ for (const candidateRef of planned.plan.candidateRefs)
106
+ plansByCandidate.delete(candidateRef);
107
+ }
255
108
  }
256
109
  export function listSessionLedger() {
257
- return [..._ledger.values()].sort((a, b) => a.createdAt.localeCompare(b.createdAt));
110
+ return [...ledger.values()].sort((a, b) => a.createdAt.localeCompare(b.createdAt));
258
111
  }
259
- export function getSessionLedgerEntry(gatewaySessionId) {
260
- return _ledger.get(gatewaySessionId);
112
+ export function getSessionLedgerEntry(sessionId) {
113
+ return ledger.get(sessionId);
261
114
  }
262
- /** O(1) lookup for the exact client/tmux session status endpoint. */
263
115
  export function getSessionLedgerEntryForClient(clientSessionId) {
264
- const gatewaySessionId = _freshestGatewayByClientSessionId.get(clientSessionId);
265
- return gatewaySessionId ? _ledger.get(gatewaySessionId) : undefined;
116
+ const sessionId = byClientSession.get(clientSessionId);
117
+ return sessionId ? ledger.get(sessionId) : undefined;
266
118
  }
267
119
  export function resetSessionLedger() {
268
- _ledger.clear();
269
- _ledgerByClientSessionId.clear();
270
- _freshestGatewayByClientSessionId.clear();
120
+ ledger.clear();
121
+ byClientSession.clear();
122
+ plansByCandidate.clear();
271
123
  }
272
124
  //# sourceMappingURL=session-ledger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-ledger.js","sourceRoot":"","sources":["../../src/llm-gateway-runtime/session-ledger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-ledger.js","sourceRoot":"","sources":["../../src/llm-gateway-runtime/session-ledger.ts"],"names":[],"mappings":"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"}
@@ -1,58 +1,31 @@
1
- import type { AccountDescriptor, GatewayUpstreamTransport } from "./accounts.js";
2
- import { type RoutingTarget } from "./model-catalog.js";
3
- export interface SessionTransportConstraints {
4
- /** The mesh transport is non-secret and is safe to persist with the session. */
5
- readonly transportProviderId: "cloud-code";
6
- /** Constraints passed to `facade.acquire()` for every gateway request. */
7
- readonly accountConstraints: {
8
- readonly targetProviderId: string;
9
- readonly modelId?: string;
10
- readonly workspaceId?: string;
11
- readonly affinityKey?: string;
12
- };
13
- }
14
- export declare function readSticky(): Promise<Record<string, string>>;
15
- export declare function writeSticky(sessionId: string, accountId: string | undefined, requiredTransport?: GatewayUpstreamTransport, transportConstraints?: SessionTransportConstraints): Promise<void>;
1
+ /**
2
+ * Local gateway bearer registry.
3
+ *
4
+ * H2A owns only minting and forwarding this opaque, process-local bearer. It
5
+ * contains no provider credential, account binding, route, model or affinity.
6
+ * Mesh owns every one of those concerns after caller authentication.
7
+ */
16
8
  export interface SessionEntry {
17
- sessionId: string;
18
- gatewayToken: string;
19
- accountId?: string;
20
- provider?: string;
21
- authType?: AccountDescriptor["authType"];
22
- transport?: GatewayUpstreamTransport;
23
- requiredTransport?: GatewayUpstreamTransport;
24
- transportConstraints?: SessionTransportConstraints;
25
- }
26
- export declare function gatewayTokenForSession(sessionId: string): string;
27
- export declare function sessionCount(): number;
28
- export declare function lookupToken(gatewayToken: string): Promise<SessionEntry | undefined>;
29
- export declare function rebindGatewaySession(gatewayToken: string, account: AccountDescriptor, route?: RoutingTarget): Promise<SessionEntry | undefined>;
30
- export interface SessionResult {
31
- gatewayToken: string;
32
- accountId: string;
33
- requestedModel?: string;
34
- modelId?: string;
35
- upstreamModel?: string;
36
- reasoningEffort?: string;
37
- provider: string;
38
- authType: "api-key" | "bearer";
39
- transport: GatewayUpstreamTransport;
40
- routePolicy?: string;
41
- routeReason?: string;
9
+ readonly sessionId: string;
10
+ readonly gatewayToken: string;
11
+ readonly clientSessionId: string;
12
+ readonly workspaceId?: string;
13
+ readonly profile?: string;
14
+ readonly createdAt: string;
42
15
  }
43
16
  export interface AcquireSessionOptions {
44
- model?: string;
45
- provider?: string;
46
- workspaceId?: string;
47
- profile?: string;
48
- clientSessionId?: string;
49
- reasoningEffort?: string;
50
- requiredTransport?: string;
17
+ readonly clientSessionId?: string;
18
+ readonly workspaceId?: string;
19
+ readonly profile?: string;
20
+ }
21
+ export interface SessionResult {
22
+ readonly gatewayToken: string;
23
+ readonly sessionId: string;
24
+ readonly clientSessionId: string;
51
25
  }
52
- /**
53
- * Acquire or re-acquire a session for a given sessionId.
54
- * Idempotent: the same sessionId always maps to the same accountId and token.
55
- * The token is derived from LLM_GATEWAY_TOKEN_SEED + sessionId, never persisted.
56
- */
57
26
  export declare function acquireSession(sessionId: string, options?: AcquireSessionOptions): Promise<SessionResult>;
27
+ export declare function lookupToken(gatewayToken: string): Promise<SessionEntry | undefined>;
28
+ export declare function lookupSessionById(sessionId: string): SessionEntry | undefined;
29
+ export declare function sessionCount(): number;
30
+ export declare function resetSessions(): void;
58
31
  //# sourceMappingURL=sticky.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sticky.d.ts","sourceRoot":"","sources":["../../src/llm-gateway-runtime/sticky.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EACV,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,eAAe,CAAC;AACvB,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;AAyE5B,MAAM,WAAW,2BAA2B;IAC1C,gFAAgF;IAChF,QAAQ,CAAC,mBAAmB,EAAE,YAAY,CAAC;IAC3C,0EAA0E;IAC1E,QAAQ,CAAC,kBAAkB,EAAE;QAC3B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;QAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;KAC/B,CAAC;CACH;AA4GD,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAElE;AAED,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,iBAAiB,CAAC,EAAE,wBAAwB,EAC5C,oBAAoB,CAAC,EAAE,2BAA2B,GACjD,OAAO,CAAC,IAAI,CAAC,CAmCf;AAiFD,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACzC,SAAS,CAAC,EAAE,wBAAwB,CAAC;IACrC,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IAC7C,oBAAoB,CAAC,EAAE,2BAA2B,CAAC;CACpD;AAoDD,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEhE;AAkBD,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAsB,WAAW,CAC/B,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAwDnC;AAED,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,iBAAiB,EAC1B,KAAK,CAAC,EAAE,aAAa,GACpB,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAqDnC;AAID,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC/B,SAAS,EAAE,wBAAwB,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AA4BD;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,aAAa,CAAC,CAIxB"}
1
+ {"version":3,"file":"sticky.d.ts","sourceRoot":"","sources":["../../src/llm-gateway-runtime/sticky.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAOD,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,aAAa,CAAC,CA8BxB;AAED,wBAAsB,WAAW,CAC/B,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAEnC;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAG7E;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAGpC"}