@sentropic/h2a-runtime 0.98.1 → 0.98.3

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 (130) hide show
  1. package/dist/agent-launch-args.d.ts +1 -1
  2. package/dist/agent-launch-args.d.ts.map +1 -1
  3. package/dist/agent-launch-args.js +16 -1
  4. package/dist/agent-launch-args.js.map +1 -1
  5. package/dist/auth-bundle.d.ts.map +1 -1
  6. package/dist/auth-bundle.js +1 -0
  7. package/dist/auth-bundle.js.map +1 -1
  8. package/dist/cli-help-groups.d.ts.map +1 -1
  9. package/dist/cli-help-groups.js +1 -0
  10. package/dist/cli-help-groups.js.map +1 -1
  11. package/dist/delegate.d.ts.map +1 -1
  12. package/dist/delegate.js +14 -2
  13. package/dist/delegate.js.map +1 -1
  14. package/dist/gateway-host/config-file.d.ts +19 -0
  15. package/dist/gateway-host/config-file.d.ts.map +1 -0
  16. package/dist/gateway-host/config-file.js +54 -0
  17. package/dist/gateway-host/config-file.js.map +1 -0
  18. package/dist/gateway-host/daemon.d.ts +61 -0
  19. package/dist/gateway-host/daemon.d.ts.map +1 -0
  20. package/dist/gateway-host/daemon.js +274 -0
  21. package/dist/gateway-host/daemon.js.map +1 -0
  22. package/dist/gateway-host/host.d.ts +34 -0
  23. package/dist/gateway-host/host.d.ts.map +1 -0
  24. package/dist/gateway-host/host.js +228 -0
  25. package/dist/gateway-host/host.js.map +1 -0
  26. package/dist/{llm-gateway-runtime/session-ledger.d.ts → gateway-host/ledger.d.ts} +4 -4
  27. package/dist/gateway-host/ledger.d.ts.map +1 -0
  28. package/dist/{llm-gateway-runtime/session-ledger.js → gateway-host/ledger.js} +1 -1
  29. package/dist/gateway-host/ledger.js.map +1 -0
  30. package/dist/{llm-gateway-runtime/sticky.d.ts → gateway-host/sessions.d.ts} +3 -1
  31. package/dist/gateway-host/sessions.d.ts.map +1 -0
  32. package/dist/{llm-gateway-runtime/sticky.js → gateway-host/sessions.js} +6 -1
  33. package/dist/gateway-host/sessions.js.map +1 -0
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +38 -18
  36. package/dist/index.js.map +1 -1
  37. package/dist/llm-mesh-accounts.d.ts +55 -0
  38. package/dist/llm-mesh-accounts.d.ts.map +1 -0
  39. package/dist/llm-mesh-accounts.js +188 -0
  40. package/dist/llm-mesh-accounts.js.map +1 -0
  41. package/dist/native-host.d.ts +1 -1
  42. package/dist/native-host.d.ts.map +1 -1
  43. package/dist/native-host.js +84 -21
  44. package/dist/native-host.js.map +1 -1
  45. package/dist/native-terminal/attach-recovery.d.ts +9 -0
  46. package/dist/native-terminal/attach-recovery.d.ts.map +1 -0
  47. package/dist/native-terminal/attach-recovery.js +54 -0
  48. package/dist/native-terminal/attach-recovery.js.map +1 -0
  49. package/dist/native-terminal/fleet.d.ts +2 -1
  50. package/dist/native-terminal/fleet.d.ts.map +1 -1
  51. package/dist/native-terminal/fleet.js +10 -1
  52. package/dist/native-terminal/fleet.js.map +1 -1
  53. package/dist/native-terminal/host.d.ts +1 -0
  54. package/dist/native-terminal/host.d.ts.map +1 -1
  55. package/dist/native-terminal/host.js +5 -2
  56. package/dist/native-terminal/host.js.map +1 -1
  57. package/dist/native-terminal/journal.d.ts +48 -0
  58. package/dist/native-terminal/journal.d.ts.map +1 -0
  59. package/dist/native-terminal/journal.js +305 -0
  60. package/dist/native-terminal/journal.js.map +1 -0
  61. package/dist/native-terminal/op.d.ts +3 -0
  62. package/dist/native-terminal/op.d.ts.map +1 -1
  63. package/dist/native-terminal/op.js +148 -33
  64. package/dist/native-terminal/op.js.map +1 -1
  65. package/dist/native-terminal/process.d.ts.map +1 -1
  66. package/dist/native-terminal/process.js +134 -46
  67. package/dist/native-terminal/process.js.map +1 -1
  68. package/dist/native-terminal/replay-buffer.d.ts +3 -0
  69. package/dist/native-terminal/replay-buffer.d.ts.map +1 -1
  70. package/dist/native-terminal/replay-buffer.js +11 -0
  71. package/dist/native-terminal/replay-buffer.js.map +1 -1
  72. package/dist/native-terminal/reset-relay.d.ts +11 -0
  73. package/dist/native-terminal/reset-relay.d.ts.map +1 -0
  74. package/dist/native-terminal/reset-relay.js +38 -0
  75. package/dist/native-terminal/reset-relay.js.map +1 -0
  76. package/dist/native-terminal/server.d.ts +8 -0
  77. package/dist/native-terminal/server.d.ts.map +1 -1
  78. package/dist/native-terminal/server.js +535 -58
  79. package/dist/native-terminal/server.js.map +1 -1
  80. package/dist/native-terminal/terminal-modes.d.ts +15 -0
  81. package/dist/native-terminal/terminal-modes.d.ts.map +1 -0
  82. package/dist/native-terminal/terminal-modes.js +180 -0
  83. package/dist/native-terminal/terminal-modes.js.map +1 -0
  84. package/dist/profile-menu.d.ts.map +1 -1
  85. package/dist/profile-menu.js +2 -0
  86. package/dist/profile-menu.js.map +1 -1
  87. package/dist/profiles.d.ts +2 -0
  88. package/dist/profiles.d.ts.map +1 -1
  89. package/dist/profiles.js +6 -0
  90. package/dist/profiles.js.map +1 -1
  91. package/dist/protocol-local.d.ts +1 -1
  92. package/dist/protocol-local.d.ts.map +1 -1
  93. package/dist/protocol-local.js +1 -0
  94. package/dist/protocol-local.js.map +1 -1
  95. package/dist/registry.d.ts +1 -1
  96. package/dist/registry.d.ts.map +1 -1
  97. package/dist/registry.js +4 -1
  98. package/dist/registry.js.map +1 -1
  99. package/dist/restore.d.ts +1 -1
  100. package/dist/restore.d.ts.map +1 -1
  101. package/dist/{llm-routing-config.d.ts → routing-preferences.d.ts} +2 -2
  102. package/dist/routing-preferences.d.ts.map +1 -0
  103. package/dist/{llm-routing-config.js → routing-preferences.js} +16 -13
  104. package/dist/routing-preferences.js.map +1 -0
  105. package/dist/sentropic/auth-token.d.ts +1 -1
  106. package/dist/sentropic/auth-token.js +1 -1
  107. package/dist/status-projection.d.ts +1 -1
  108. package/dist/status-projection.d.ts.map +1 -1
  109. package/dist/throttle-signatures.d.ts.map +1 -1
  110. package/dist/throttle-signatures.js +3 -0
  111. package/dist/throttle-signatures.js.map +1 -1
  112. package/dist/tmux.d.ts +17 -1
  113. package/dist/tmux.d.ts.map +1 -1
  114. package/dist/tmux.js +10 -4
  115. package/dist/tmux.js.map +1 -1
  116. package/package.json +8 -4
  117. package/dist/llm-gateway-runtime/index.d.ts +0 -10
  118. package/dist/llm-gateway-runtime/index.d.ts.map +0 -1
  119. package/dist/llm-gateway-runtime/index.js +0 -147
  120. package/dist/llm-gateway-runtime/index.js.map +0 -1
  121. package/dist/llm-gateway-runtime/session-ledger.d.ts.map +0 -1
  122. package/dist/llm-gateway-runtime/session-ledger.js.map +0 -1
  123. package/dist/llm-gateway-runtime/sticky.d.ts.map +0 -1
  124. package/dist/llm-gateway-runtime/sticky.js.map +0 -1
  125. package/dist/llm-mesh.d.ts +0 -154
  126. package/dist/llm-mesh.d.ts.map +0 -1
  127. package/dist/llm-mesh.js +0 -490
  128. package/dist/llm-mesh.js.map +0 -1
  129. package/dist/llm-routing-config.d.ts.map +0 -1
  130. package/dist/llm-routing-config.js.map +0 -1
@@ -0,0 +1,274 @@
1
+ /** Local gateway daemon lifecycle and caller environment. */
2
+ import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from "node:fs";
3
+ import { dirname, join } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { spawn } from "node:child_process";
6
+ import { createConnection } from "node:net";
7
+ import { randomBytes } from "node:crypto";
8
+ import { llmMeshOwnerScopeRef } from "../llm-mesh-accounts.js";
9
+ import { sentropicDir, readLlmMeshConfig, writePrivateMetadata } from "./config-file.js";
10
+ const ANTHROPIC_GATEWAY_ENV_KEYS = [
11
+ "ANTHROPIC_BASE_URL",
12
+ "ANTHROPIC_AUTH_TOKEN",
13
+ "ANTHROPIC_API_KEY",
14
+ ];
15
+ /**
16
+ * Temporarily replace the H2A gateway lane and return an exact restorer.
17
+ * Direct launches preserve a user-owned ANTHROPIC_API_KEY. Gateway launches
18
+ * hide it from Claude Code because the local gateway authenticates with the
19
+ * opaque AUTH_TOKEN lane instead.
20
+ */
21
+ export function replaceAnthropicGatewayEnvironment(env, replacement) {
22
+ const previous = new Map(ANTHROPIC_GATEWAY_ENV_KEYS.map((key) => [key, env[key]]));
23
+ for (const key of ANTHROPIC_GATEWAY_ENV_KEYS) {
24
+ if (key !== "ANTHROPIC_API_KEY" || replacement !== undefined) {
25
+ delete env[key];
26
+ }
27
+ }
28
+ for (const [key, value] of Object.entries(replacement ?? {})) {
29
+ if (value !== undefined)
30
+ env[key] = value;
31
+ }
32
+ return () => {
33
+ for (const [key, value] of previous) {
34
+ if (value === undefined)
35
+ delete env[key];
36
+ else
37
+ env[key] = value;
38
+ }
39
+ };
40
+ }
41
+ export function llmMeshPidPath(dir) {
42
+ return join(dir ?? sentropicDir(), "llm-mesh.pid");
43
+ }
44
+ export function llmMeshTokenPath(dir) {
45
+ return join(dir ?? sentropicDir(), "llm-mesh-token.json");
46
+ }
47
+ export function llmMeshLogPath(config, dir) {
48
+ return config?.logFile ?? join(dir ?? sentropicDir(), "llm-mesh.log");
49
+ }
50
+ /** Resolve the embedded gateway runtime entry point relative to this package. */
51
+ export function gatewayScriptPath() {
52
+ const thisFile = fileURLToPath(import.meta.url);
53
+ return join(dirname(thisFile), "host.js");
54
+ }
55
+ /**
56
+ * A gateway session is an account-affinity boundary, so a local CLI session
57
+ * must never inherit a process-wide static identifier. Callers provide the
58
+ * stable tmux/conversation identity when they have one; standalone gateway
59
+ * management gets a fresh ephemeral identity instead.
60
+ */
61
+ export function gatewayClientSessionId(clientSessionId) {
62
+ const supplied = clientSessionId?.trim();
63
+ return supplied || `local-${randomBytes(16).toString("hex")}`;
64
+ }
65
+ /**
66
+ * Start the llm-gateway as a detached background process.
67
+ * Returns the PID, port, and a gw-token for Claude Code.
68
+ */
69
+ export async function startGateway(config, opts = {}) {
70
+ const port = config.port ?? 3002;
71
+ const stateDir = opts.stateDir;
72
+ // An explicitly isolated state root must not inherit a live gateway's log.
73
+ const logFile = stateDir ? llmMeshLogPath(undefined, stateDir) : llmMeshLogPath(config);
74
+ const gatewayScript = gatewayScriptPath();
75
+ if (!existsSync(gatewayScript)) {
76
+ throw new Error(`Gateway script not found: ${gatewayScript}\n` +
77
+ `Run \`npm run build -w @sentropic/remote-cli\` first.`);
78
+ }
79
+ mkdirSync(stateDir ?? sentropicDir(), { recursive: true });
80
+ const gatewayEnv = {
81
+ ...process.env,
82
+ PORT: String(port),
83
+ H2A_LLM_MESH_OWNER_SCOPE: llmMeshOwnerScopeRef(),
84
+ ...(config.routing
85
+ ? { H2A_LLM_MESH_ROUTING_JSON: JSON.stringify(config.routing) }
86
+ : {}),
87
+ };
88
+ // Start detached, piping stdout+stderr to logFile
89
+ const { openSync } = await import("node:fs");
90
+ const logFd = openSync(logFile, "a");
91
+ const child = spawn("node", [gatewayScript], {
92
+ detached: true,
93
+ stdio: ["ignore", logFd, logFd],
94
+ env: gatewayEnv,
95
+ });
96
+ child.unref();
97
+ const pid = child.pid;
98
+ // Write PID file
99
+ writeFileSync(llmMeshPidPath(stateDir), String(pid) + "\n");
100
+ // Wait for the gateway to be ready
101
+ const baseUrl = `http://localhost:${port}`;
102
+ await waitForHealth(baseUrl, 10_000);
103
+ // Acquire a session token
104
+ const sessionResp = await fetch(`${baseUrl}/v1/session`, {
105
+ method: "POST",
106
+ headers: { "content-type": "application/json" },
107
+ body: JSON.stringify({
108
+ sessionId: gatewayClientSessionId(opts.clientSessionId),
109
+ clientSessionId: opts.clientSessionId,
110
+ workspaceId: process.cwd(),
111
+ }),
112
+ });
113
+ if (!sessionResp.ok) {
114
+ throw new Error(`Session acquisition failed: ${sessionResp.status}`);
115
+ }
116
+ const session = (await sessionResp.json());
117
+ const gatewayToken = session.gatewayToken;
118
+ if (!gatewayToken)
119
+ throw new Error("No gatewayToken in session response");
120
+ // Persist only process metadata. The opaque bearer remains process-local and
121
+ // is reacquired for each caller affinity.
122
+ writePrivateMetadata(llmMeshTokenPath(stateDir), {
123
+ baseUrl,
124
+ pid,
125
+ });
126
+ return { pid, port, gatewayToken };
127
+ }
128
+ export async function waitForHealth(baseUrl, timeoutMs) {
129
+ const deadline = Date.now() + timeoutMs;
130
+ while (Date.now() < deadline) {
131
+ try {
132
+ const resp = await fetch(`${baseUrl}/readyz`, { signal: AbortSignal.timeout(Math.max(1, deadline - Date.now())) });
133
+ if (resp.ok)
134
+ return;
135
+ if (resp.status === 404) {
136
+ process.stderr.write("[h2a] older daemon readiness fallback: /health (no /readyz endpoint)\n");
137
+ const legacy = await fetch(`${baseUrl}/health`, { signal: AbortSignal.timeout(Math.max(1, deadline - Date.now())) });
138
+ if (legacy.ok)
139
+ return;
140
+ }
141
+ }
142
+ catch {
143
+ // not ready yet
144
+ }
145
+ await new Promise((r) => setTimeout(r, 200));
146
+ }
147
+ throw new Error(`Gateway did not become ready within ${timeoutMs}ms`);
148
+ }
149
+ /** Read the running gateway's PID. Returns null if not running. */
150
+ export function readGatewayPid(dir) {
151
+ try {
152
+ const raw = readFileSync(llmMeshPidPath(dir), "utf8").trim();
153
+ const pid = parseInt(raw, 10);
154
+ if (isNaN(pid))
155
+ return null;
156
+ // Check if the process is still alive
157
+ process.kill(pid, 0);
158
+ return pid;
159
+ }
160
+ catch {
161
+ return null;
162
+ }
163
+ }
164
+ function configuredGatewayBaseUrl(dir) {
165
+ const config = readLlmMeshConfig(dir);
166
+ if (!config)
167
+ return null;
168
+ return `http://localhost:${config.port ?? 3002}`;
169
+ }
170
+ /**
171
+ * Acquire a fresh in-memory gateway token from the running local gateway.
172
+ * Gateway tokens are intentionally not durable. The runtime metadata file
173
+ * contains only the base URL and PID; every caller reacquires its own bearer.
174
+ */
175
+ export async function acquireLlmMeshSessionEnv(dir, clientSessionId) {
176
+ try {
177
+ let baseUrl;
178
+ let pid;
179
+ try {
180
+ const raw = readFileSync(llmMeshTokenPath(dir), "utf8");
181
+ const tokenFile = JSON.parse(raw);
182
+ baseUrl = tokenFile.baseUrl;
183
+ pid = tokenFile.pid;
184
+ }
185
+ catch {
186
+ baseUrl = configuredGatewayBaseUrl(dir) ?? undefined;
187
+ pid = readGatewayPid(dir) ?? undefined;
188
+ }
189
+ if (!baseUrl || !pid)
190
+ return null;
191
+ try {
192
+ process.kill(pid, 0);
193
+ }
194
+ catch {
195
+ return null;
196
+ }
197
+ const workspaceId = dir ?? process.cwd();
198
+ const sessionResp = await fetch(`${baseUrl}/v1/session`, {
199
+ method: "POST",
200
+ headers: { "content-type": "application/json" },
201
+ body: JSON.stringify({
202
+ sessionId: gatewayClientSessionId(clientSessionId),
203
+ clientSessionId,
204
+ workspaceId,
205
+ }),
206
+ });
207
+ if (!sessionResp.ok)
208
+ return null;
209
+ const session = (await sessionResp.json());
210
+ if (!session.gatewayToken)
211
+ return null;
212
+ return {
213
+ ANTHROPIC_BASE_URL: baseUrl,
214
+ ANTHROPIC_AUTH_TOKEN: session.gatewayToken,
215
+ };
216
+ }
217
+ catch {
218
+ return null;
219
+ }
220
+ }
221
+ /** Whether the old listener still accepts loopback connections. */
222
+ async function listenerReleased(port) {
223
+ return new Promise((resolve) => {
224
+ const socket = createConnection({ host: "127.0.0.1", port });
225
+ const finish = (released) => { socket.destroy(); resolve(released); };
226
+ socket.once("connect", () => finish(false));
227
+ socket.once("error", (error) => finish(error.code === "ECONNREFUSED"));
228
+ socket.setTimeout(200, () => finish(false));
229
+ });
230
+ }
231
+ /** Stop and await process exit AND listener release before removing the PID. */
232
+ export async function stopGateway(dir, timeoutMs = 5000) {
233
+ const pid = readGatewayPid(dir);
234
+ if (!pid)
235
+ return { stopped: false };
236
+ let port = readLlmMeshConfig(dir)?.port ?? 3002;
237
+ try {
238
+ const metadata = JSON.parse(readFileSync(llmMeshTokenPath(dir), "utf8"));
239
+ port = Number(new URL(metadata.baseUrl).port) || port;
240
+ }
241
+ catch { /* Older daemons may have only the public config and PID. */ }
242
+ try {
243
+ process.kill(pid, "SIGTERM");
244
+ }
245
+ catch (error) {
246
+ if (error.code !== "ESRCH")
247
+ throw error;
248
+ }
249
+ const deadline = Date.now() + timeoutMs;
250
+ while (Date.now() < deadline) {
251
+ let exited = false;
252
+ try {
253
+ process.kill(pid, 0);
254
+ }
255
+ catch (error) {
256
+ if (error.code !== "ESRCH")
257
+ throw error;
258
+ exited = true;
259
+ }
260
+ if (exited && await listenerReleased(port)) {
261
+ try {
262
+ unlinkSync(llmMeshPidPath(dir));
263
+ }
264
+ catch (error) {
265
+ if (error.code !== "ENOENT")
266
+ throw error;
267
+ }
268
+ return { stopped: true, pid };
269
+ }
270
+ await new Promise((resolve) => setTimeout(resolve, 50));
271
+ }
272
+ throw new Error(`Gateway shutdown timed out after ${timeoutMs}ms (pid ${pid}, port ${port}); PID retained`);
273
+ }
274
+ //# sourceMappingURL=daemon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/gateway-host/daemon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { serve } from "@hono/node-server";
2
+ import { Hono } from "hono";
3
+ import { createGatewayNamespaceModule } from "@sentropic/cluster-mesh/compose/gateway";
4
+ import { type LlmMeshRoutingConfig } from "../routing-preferences.js";
5
+ export declare const LEGACY_PORTS_INERT: {
6
+ mode: "personal-passthrough";
7
+ crossUserPoolEnabled: boolean;
8
+ pool: {
9
+ listEligibleAccounts: () => never;
10
+ select: () => never;
11
+ snapshotModels: () => never;
12
+ };
13
+ authResolver: {
14
+ resolve: () => never;
15
+ };
16
+ dispatch: {
17
+ dispatch: () => never;
18
+ dispatchStream: () => never;
19
+ };
20
+ };
21
+ export interface LocalGatewayAppOptions {
22
+ readonly routing?: LlmMeshRoutingConfig;
23
+ readonly ownerScopeRef?: string;
24
+ /** Composition injection for readiness and fail-before-bind qualification. */
25
+ readonly prepareNamespace?: typeof createGatewayNamespaceModule;
26
+ }
27
+ export declare function createGatewayHost(options?: LocalGatewayAppOptions): {
28
+ app: Hono;
29
+ ready: Promise<void>;
30
+ };
31
+ /** Await preflight and composition before exposing a ready application. */
32
+ export declare function createLocalGatewayApp(options?: LocalGatewayAppOptions): Promise<Hono>;
33
+ export declare function startServer(options?: LocalGatewayAppOptions, listen?: typeof serve): Promise<ReturnType<typeof serve>>;
34
+ //# sourceMappingURL=host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../src/gateway-host/host.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAoB1C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAQ5B,OAAO,EAAE,4BAA4B,EAAE,MAAM,yCAAyC,CAAC;AAMvF,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,2BAA2B,CAAC;AAmBnC,eAAO,MAAM,kBAAkB;;;;oCADD,KAAK;sBAAL,KAAK;8BAAL,KAAK;;;uBAAL,KAAK;;;wBAAL,KAAK;8BAAL,KAAK;;CAOlC,CAAC;AAyCF,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,oBAAoB,CAAC;IACxC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,8EAA8E;IAC9E,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,4BAA4B,CAAC;CACjE;AAyBD,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,sBAA2B,GAAG;IAAE,GAAG,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CA+H3G;AAED,2EAA2E;AAC3E,wBAAsB,qBAAqB,CAAC,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAI/F;AAED,wBAAsB,WAAW,CAC/B,OAAO,GAAE,sBAA2B,EACpC,MAAM,GAAE,OAAO,KAAa,GAC3B,OAAO,CAAC,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC,CAUnC"}
@@ -0,0 +1,228 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { serve } from "@hono/node-server";
3
+ import { CloudCodeRuntimeClient, CodexRuntimeClient, GeminiAdapter, MistralAdapter, MistralRuntimeClient, MuseAdapter, MuseRuntimeClient, OpenAIAdapter, createLlmMesh, createProviderRegistry, } from "@sentropic/cluster-mesh/llm-mesh";
4
+ import {} from "@sentropic/cluster-mesh/gateway";
5
+ import { Hono } from "hono";
6
+ import { fileURLToPath } from "node:url";
7
+ import { resolve } from "node:path";
8
+ import { createClusterMeshModules, createClusterMeshPlugin, createClusterMeshRuntime, } from "@sentropic/cluster-mesh";
9
+ import { createGatewayNamespaceModule } from "@sentropic/cluster-mesh/compose/gateway";
10
+ import { readLlmMeshConfig } from "./config-file.js";
11
+ import { createCliLlmMeshFacade, llmMeshOwnerScopeRef, } from "../llm-mesh-accounts.js";
12
+ import { parseLlmMeshRoutingConfig, routingProfiles, } from "../routing-preferences.js";
13
+ import { getSessionLedgerEntry, getSessionLedgerEntryForClient, listSessionLedger, recordRoutePlan, recordRouteSettlement, } from "./ledger.js";
14
+ import { acquireSession, lookupSessionById, lookupToken, listPublicSessions, sessionCount, } from "./sessions.js";
15
+ /** Pending upstream U3: legacy config ports are inert on the planner-routed path. */
16
+ const legacyPortReached = () => { throw new Error("Inert legacy gateway port reached (pending upstream U3)"); };
17
+ export const LEGACY_PORTS_INERT = {
18
+ mode: "personal-passthrough",
19
+ crossUserPoolEnabled: false,
20
+ pool: { listEligibleAccounts: legacyPortReached, select: legacyPortReached, snapshotModels: legacyPortReached },
21
+ authResolver: { resolve: legacyPortReached },
22
+ dispatch: { dispatch: legacyPortReached, dispatchStream: legacyPortReached },
23
+ };
24
+ const routingConfigFromEnvironment = () => {
25
+ const raw = process.env.H2A_LLM_MESH_ROUTING_JSON;
26
+ return raw ? parseLlmMeshRoutingConfig(raw) : undefined;
27
+ };
28
+ const runtimeMesh = () => createLlmMesh({
29
+ registry: createProviderRegistry([
30
+ new OpenAIAdapter({ client: new CodexRuntimeClient() }),
31
+ new GeminiAdapter({ client: new CloudCodeRuntimeClient() }),
32
+ new MistralAdapter({ client: new MistralRuntimeClient() }),
33
+ new MuseAdapter({ client: new MuseRuntimeClient() }),
34
+ ]),
35
+ });
36
+ const bearerFromHeaders = (headers) => {
37
+ const authorization = headers.authorization;
38
+ if (authorization?.toLowerCase().startsWith("bearer ")) {
39
+ return authorization.slice(7).trim();
40
+ }
41
+ return headers["x-api-key"]?.trim() || undefined;
42
+ };
43
+ const observablePlanner = (delegate) => ({
44
+ ...(delegate.listModels
45
+ ? { listModels: (subject) => delegate.listModels(subject) }
46
+ : {}),
47
+ async plan(subject, input) {
48
+ const plan = await delegate.plan(subject, input);
49
+ const session = lookupSessionById(subject.principalRef);
50
+ if (session)
51
+ recordRoutePlan(session, input, plan);
52
+ return plan;
53
+ },
54
+ prepareAttempt: (...args) => delegate.prepareAttempt(...args),
55
+ describeAffinity: (...args) => delegate.describeAffinity(...args),
56
+ promoteAffinity: (...args) => delegate.promoteAffinity(...args),
57
+ rebindAffinity: (...args) => delegate.rebindAffinity(...args),
58
+ resetAffinity: (...args) => delegate.resetAffinity(...args),
59
+ });
60
+ function publicSessionLedger() {
61
+ const routed = listSessionLedger();
62
+ const routedIds = new Set(routed.map((entry) => entry.gatewaySessionId));
63
+ const idle = listPublicSessions()
64
+ .filter((session) => !routedIds.has(session.sessionId))
65
+ .map((session) => ({
66
+ gatewaySessionId: session.sessionId,
67
+ clientSessionId: session.clientSessionId,
68
+ ...(session.workspaceId ? { workspaceId: session.workspaceId } : {}),
69
+ ...(session.profile ? { profile: session.profile } : {}),
70
+ account: { id: "unselected", provider: "mesh", label: "unselected" },
71
+ transport: "mesh",
72
+ state: "idle",
73
+ createdAt: session.createdAt,
74
+ lastUsedAt: session.createdAt,
75
+ updatedAt: session.createdAt,
76
+ requestCount: 0,
77
+ inFlightRequests: 0,
78
+ detailsAmbiguous: false,
79
+ }));
80
+ return [...routed, ...idle].sort((a, b) => a.createdAt.localeCompare(b.createdAt));
81
+ }
82
+ export function createGatewayHost(options = {}) {
83
+ let composed = false;
84
+ const readiness = { async isReady() { return composed; } };
85
+ const routing = options.routing ?? routingConfigFromEnvironment();
86
+ const currentRouting = () => {
87
+ if (options.routing)
88
+ return options.routing;
89
+ const publicConfig = readLlmMeshConfig();
90
+ // A present config with no routing field is an intentional live reset.
91
+ // Fall back to the startup environment only when no config exists at all.
92
+ return publicConfig ? publicConfig.routing : routing;
93
+ };
94
+ const ownerScopeRef = options.ownerScopeRef ?? llmMeshOwnerScopeRef();
95
+ const facade = createCliLlmMeshFacade();
96
+ const profiles = routingProfiles(routing);
97
+ const planner = observablePlanner(facade.createRoutePlanner(runtimeMesh(), {
98
+ ...(routing?.council ? { council: routing.council } : {}),
99
+ ...(profiles ? { profiles } : {}),
100
+ }));
101
+ const callerAuth = {
102
+ async verify(headers) {
103
+ const token = bearerFromHeaders(headers);
104
+ const session = token ? await lookupToken(token) : undefined;
105
+ if (!session)
106
+ return { ok: false, reason: "invalid local gateway bearer" };
107
+ return {
108
+ ok: true,
109
+ cost: {
110
+ tenantId: ownerScopeRef,
111
+ principalId: session.sessionId,
112
+ ownerScopeRef,
113
+ ...(session.workspaceId ? { workspaceId: session.workspaceId } : {}),
114
+ source: "h2a-local-gateway",
115
+ correlationId: randomUUID(),
116
+ },
117
+ };
118
+ },
119
+ };
120
+ const routeMetering = {
121
+ settleRoute(settlement) {
122
+ recordRouteSettlement(settlement);
123
+ },
124
+ };
125
+ const app = new Hono();
126
+ let gatewayPlugin;
127
+ app.get("/health", (c) => c.json({ ok: true }));
128
+ // This route also covers the interval before the composed router is mounted.
129
+ app.get("/readyz", async (c) => {
130
+ const ready = await readiness.isReady();
131
+ return c.json({ ready }, ready ? 200 : 503);
132
+ });
133
+ app.post("/v1/session", async (c) => {
134
+ let body;
135
+ try {
136
+ body = await c.req.json();
137
+ }
138
+ catch {
139
+ return c.json({ error: "invalid JSON" }, 400);
140
+ }
141
+ if (typeof body.sessionId !== "string" || !body.sessionId.trim()) {
142
+ return c.json({ error: "sessionId (string) required" }, 400);
143
+ }
144
+ const session = await acquireSession(body.sessionId, {
145
+ ...(typeof body.clientSessionId === "string"
146
+ ? { clientSessionId: body.clientSessionId }
147
+ : {}),
148
+ ...(typeof body.workspaceId === "string" ? { workspaceId: body.workspaceId } : {}),
149
+ ...(typeof body.profile === "string" ? { profile: body.profile } : {}),
150
+ });
151
+ return c.json(session, 201);
152
+ });
153
+ app.get("/v1/sessions", (c) => c.json({ data: publicSessionLedger() }));
154
+ app.get("/v1/sessions/:id", (c) => {
155
+ const entry = getSessionLedgerEntry(c.req.param("id"));
156
+ return entry ? c.json(entry) : c.json({ error: "session not found" }, 404);
157
+ });
158
+ app.get("/v1/status/client/:clientSessionId", (c) => {
159
+ const entry = getSessionLedgerEntryForClient(c.req.param("clientSessionId"));
160
+ return entry ? c.json(entry) : c.json({ error: "client session not found" }, 404);
161
+ });
162
+ // Hono freezes its matcher on first use. Register the delegation before
163
+ // composition so in-process readiness checks cannot freeze a partial router.
164
+ app.all("*", (c) => gatewayPlugin
165
+ ? gatewayPlugin.fetch(c.req.raw, c.env)
166
+ : c.json({ error: "gateway composition incomplete" }, 503));
167
+ const ready = (async () => {
168
+ const modules = createClusterMeshModules();
169
+ const namespace = await (options.prepareNamespace ?? createGatewayNamespaceModule)(modules, {
170
+ enabled: true,
171
+ authMode: "host",
172
+ createRouter({ gateway }) {
173
+ return gateway.createGatewayRouter({
174
+ config: { ...LEGACY_PORTS_INERT, callerAuth },
175
+ readiness,
176
+ routePlanner: planner,
177
+ routeMetering,
178
+ routeInput({ cost }) {
179
+ const session = lookupSessionById(cost.principalId);
180
+ const activeRouting = currentRouting();
181
+ return {
182
+ affinityKey: session?.clientSessionId ?? cost.principalId,
183
+ ...(session?.workspaceId ? { workspaceId: session.workspaceId } : {}),
184
+ ...(activeRouting?.policy ? { policyOverride: activeRouting.policy } : {}),
185
+ ...(activeRouting?.activeProfile ? { policyProfile: activeRouting.activeProfile } : {}),
186
+ ...(activeRouting?.explicit ? { explicit: activeRouting.explicit } : {}),
187
+ };
188
+ },
189
+ });
190
+ },
191
+ });
192
+ // Session-control ports are deliberately unavailable on this local gateway host.
193
+ // Bearer authentication and route settlement are injected above, through gateway ports.
194
+ const runtime = createClusterMeshRuntime({
195
+ generationId: randomUUID(),
196
+ config: { capacity: { poolSize: 1 } },
197
+ context: { async verify() { throw new Error("Session control is unavailable on the local gateway host"); } },
198
+ registration: { async authorize() { return { ok: false, reason: "missing_registration" }; } },
199
+ receipts: { async append() { throw new Error("Session-control receipts are unavailable on the local gateway host"); } },
200
+ });
201
+ gatewayPlugin = createClusterMeshPlugin({ runtime, namespaces: [namespace], mounts: { "/gw": "/" } });
202
+ composed = true;
203
+ })();
204
+ return { app, ready };
205
+ }
206
+ /** Await preflight and composition before exposing a ready application. */
207
+ export async function createLocalGatewayApp(options = {}) {
208
+ const host = createGatewayHost(options);
209
+ await host.ready;
210
+ return host.app;
211
+ }
212
+ export async function startServer(options = {}, listen = serve) {
213
+ const port = Number.parseInt(process.env.PORT ?? "3002", 10);
214
+ if (!Number.isInteger(port) || port < 1 || port > 65535)
215
+ throw new Error("Invalid gateway PORT: expected 1..65535");
216
+ const app = await createLocalGatewayApp(options);
217
+ // Session minting is unauthenticated local control-plane traffic: loopback only.
218
+ return listen({ fetch: app.fetch, port, hostname: "127.0.0.1" }, () => {
219
+ process.stdout.write(`[gateway-host] listening on :${port} — ${sessionCount()} local bearers\n`);
220
+ });
221
+ }
222
+ if (process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.url)) {
223
+ startServer().catch((error) => {
224
+ process.stderr.write(`[gateway-host] startup failed before bind: ${error instanceof Error ? error.message : String(error)}\n`);
225
+ process.exitCode = 1;
226
+ });
227
+ }
228
+ //# sourceMappingURL=host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.js","sourceRoot":"","sources":["../../src/gateway-host/host.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import type { RoutePlan, RoutePlanInput } from "@sentropic/llm-mesh";
2
- import type { RouteRequestSettlement } from "@sentropic/llm-gateway";
3
- import type { SessionEntry } from "./sticky.js";
1
+ import type { RoutePlan, RoutePlanInput } from "@sentropic/cluster-mesh/llm-mesh";
2
+ import type { RouteRequestSettlement } from "@sentropic/cluster-mesh/gateway";
3
+ import type { SessionEntry } from "./sessions.js";
4
4
  export type GatewaySessionState = "idle" | "active" | "rate-limited";
5
5
  export interface PublicAccountDescriptor {
6
6
  /** Redacted mesh diagnostic reference, never an executable account id. */
@@ -46,4 +46,4 @@ export declare function listSessionLedger(): SessionLedgerEntry[];
46
46
  export declare function getSessionLedgerEntry(sessionId: string): SessionLedgerEntry | undefined;
47
47
  export declare function getSessionLedgerEntryForClient(clientSessionId: string): SessionLedgerEntry | undefined;
48
48
  export declare function resetSessionLedger(): void;
49
- //# sourceMappingURL=session-ledger.d.ts.map
49
+ //# sourceMappingURL=ledger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../../src/gateway-host/ledger.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,SAAS,EACT,cAAc,EACf,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,QAAQ,GAAG,cAAc,CAAC;AAErE,MAAM,WAAW,uBAAuB;IACtC,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,uBAAuB,CAAC;IAC1C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAC;IACvC,QAAQ,CAAC,EAAE,EAAE,uBAAuB,CAAC;CACtC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,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,OAAO,EAAE,uBAAuB,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;IACpC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,wBAAwB,CAAC;IAClD,QAAQ,CAAC,YAAY,CAAC,EAAE,uBAAuB,CAAC;CACjD;AAyBD,wBAAgB,eAAe,CAC7B,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,cAAc,EACrB,IAAI,EAAE,SAAS,EACf,GAAG,OAAa,GACf,IAAI,CAsCN;AAED,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,sBAAsB,EAClC,GAAG,OAAa,GACf,IAAI,CAoDN;AAED,wBAAgB,iBAAiB,IAAI,kBAAkB,EAAE,CAExD;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAEvF;AAED,wBAAgB,8BAA8B,CAC5C,eAAe,EAAE,MAAM,GACtB,kBAAkB,GAAG,SAAS,CAGhC;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAIzC"}
@@ -121,4 +121,4 @@ export function resetSessionLedger() {
121
121
  byClientSession.clear();
122
122
  plansByCandidate.clear();
123
123
  }
124
- //# sourceMappingURL=session-ledger.js.map
124
+ //# sourceMappingURL=ledger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../src/gateway-host/ledger.ts"],"names":[],"mappings":"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"}
@@ -27,5 +27,7 @@ export declare function acquireSession(sessionId: string, options?: AcquireSessi
27
27
  export declare function lookupToken(gatewayToken: string): Promise<SessionEntry | undefined>;
28
28
  export declare function lookupSessionById(sessionId: string): SessionEntry | undefined;
29
29
  export declare function sessionCount(): number;
30
+ /** Public registry view for sessions that have not acquired a route yet. */
31
+ export declare function listPublicSessions(): Omit<SessionEntry, "gatewayToken">[];
30
32
  export declare function resetSessions(): void;
31
- //# sourceMappingURL=sticky.d.ts.map
33
+ //# sourceMappingURL=sessions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../src/gateway-host/sessions.ts"],"names":[],"mappings":"AAGA;;;;;;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,4EAA4E;AAC5E,wBAAgB,kBAAkB,IAAI,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,EAAE,CAEzE;AAED,wBAAgB,aAAa,IAAI,IAAI,CAGpC"}