@sentropic/h2a-runtime 0.98.0 → 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 (147) 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 +76 -28
  36. package/dist/index.js.map +1 -1
  37. package/dist/launch-guard.d.ts +3 -6
  38. package/dist/launch-guard.d.ts.map +1 -1
  39. package/dist/launch-guard.js +6 -4
  40. package/dist/launch-guard.js.map +1 -1
  41. package/dist/launch-layout.d.ts +2 -0
  42. package/dist/launch-layout.d.ts.map +1 -1
  43. package/dist/launch-layout.js +15 -2
  44. package/dist/launch-layout.js.map +1 -1
  45. package/dist/llm-mesh-accounts.d.ts +55 -0
  46. package/dist/llm-mesh-accounts.d.ts.map +1 -0
  47. package/dist/llm-mesh-accounts.js +188 -0
  48. package/dist/llm-mesh-accounts.js.map +1 -0
  49. package/dist/native-host.d.ts +79 -14
  50. package/dist/native-host.d.ts.map +1 -1
  51. package/dist/native-host.js +218 -64
  52. package/dist/native-host.js.map +1 -1
  53. package/dist/native-restart.d.ts +1 -0
  54. package/dist/native-restart.d.ts.map +1 -1
  55. package/dist/native-restart.js.map +1 -1
  56. package/dist/native-terminal/attach-recovery.d.ts +9 -0
  57. package/dist/native-terminal/attach-recovery.d.ts.map +1 -0
  58. package/dist/native-terminal/attach-recovery.js +54 -0
  59. package/dist/native-terminal/attach-recovery.js.map +1 -0
  60. package/dist/native-terminal/fleet.d.ts +32 -0
  61. package/dist/native-terminal/fleet.d.ts.map +1 -0
  62. package/dist/native-terminal/fleet.js +40 -0
  63. package/dist/native-terminal/fleet.js.map +1 -0
  64. package/dist/native-terminal/host.d.ts +1 -0
  65. package/dist/native-terminal/host.d.ts.map +1 -1
  66. package/dist/native-terminal/host.js +5 -2
  67. package/dist/native-terminal/host.js.map +1 -1
  68. package/dist/native-terminal/journal.d.ts +48 -0
  69. package/dist/native-terminal/journal.d.ts.map +1 -0
  70. package/dist/native-terminal/journal.js +305 -0
  71. package/dist/native-terminal/journal.js.map +1 -0
  72. package/dist/native-terminal/op.d.ts +3 -0
  73. package/dist/native-terminal/op.d.ts.map +1 -1
  74. package/dist/native-terminal/op.js +279 -93
  75. package/dist/native-terminal/op.js.map +1 -1
  76. package/dist/native-terminal/process.d.ts.map +1 -1
  77. package/dist/native-terminal/process.js +134 -46
  78. package/dist/native-terminal/process.js.map +1 -1
  79. package/dist/native-terminal/replay-buffer.d.ts +3 -0
  80. package/dist/native-terminal/replay-buffer.d.ts.map +1 -1
  81. package/dist/native-terminal/replay-buffer.js +11 -0
  82. package/dist/native-terminal/replay-buffer.js.map +1 -1
  83. package/dist/native-terminal/reset-relay.d.ts +11 -0
  84. package/dist/native-terminal/reset-relay.d.ts.map +1 -0
  85. package/dist/native-terminal/reset-relay.js +38 -0
  86. package/dist/native-terminal/reset-relay.js.map +1 -0
  87. package/dist/native-terminal/server.d.ts +8 -0
  88. package/dist/native-terminal/server.d.ts.map +1 -1
  89. package/dist/native-terminal/server.js +535 -58
  90. package/dist/native-terminal/server.js.map +1 -1
  91. package/dist/native-terminal/socket-path.d.ts +3 -0
  92. package/dist/native-terminal/socket-path.d.ts.map +1 -1
  93. package/dist/native-terminal/socket-path.js +21 -1
  94. package/dist/native-terminal/socket-path.js.map +1 -1
  95. package/dist/native-terminal/terminal-modes.d.ts +15 -0
  96. package/dist/native-terminal/terminal-modes.d.ts.map +1 -0
  97. package/dist/native-terminal/terminal-modes.js +180 -0
  98. package/dist/native-terminal/terminal-modes.js.map +1 -0
  99. package/dist/profile-menu.d.ts.map +1 -1
  100. package/dist/profile-menu.js +2 -0
  101. package/dist/profile-menu.js.map +1 -1
  102. package/dist/profiles.d.ts +2 -0
  103. package/dist/profiles.d.ts.map +1 -1
  104. package/dist/profiles.js +6 -0
  105. package/dist/profiles.js.map +1 -1
  106. package/dist/protocol-local.d.ts +1 -1
  107. package/dist/protocol-local.d.ts.map +1 -1
  108. package/dist/protocol-local.js +1 -0
  109. package/dist/protocol-local.js.map +1 -1
  110. package/dist/registry.d.ts +1 -1
  111. package/dist/registry.d.ts.map +1 -1
  112. package/dist/registry.js +4 -1
  113. package/dist/registry.js.map +1 -1
  114. package/dist/restore.d.ts +1 -1
  115. package/dist/restore.d.ts.map +1 -1
  116. package/dist/restore.js +8 -2
  117. package/dist/restore.js.map +1 -1
  118. package/dist/{llm-routing-config.d.ts → routing-preferences.d.ts} +2 -2
  119. package/dist/routing-preferences.d.ts.map +1 -0
  120. package/dist/{llm-routing-config.js → routing-preferences.js} +16 -13
  121. package/dist/routing-preferences.js.map +1 -0
  122. package/dist/sentropic/auth-token.d.ts +1 -1
  123. package/dist/sentropic/auth-token.js +1 -1
  124. package/dist/status-projection.d.ts +1 -1
  125. package/dist/status-projection.d.ts.map +1 -1
  126. package/dist/throttle-signatures.d.ts.map +1 -1
  127. package/dist/throttle-signatures.js +3 -0
  128. package/dist/throttle-signatures.js.map +1 -1
  129. package/dist/tmux.d.ts +20 -2
  130. package/dist/tmux.d.ts.map +1 -1
  131. package/dist/tmux.js +14 -6
  132. package/dist/tmux.js.map +1 -1
  133. package/package.json +8 -4
  134. package/dist/llm-gateway-runtime/index.d.ts +0 -10
  135. package/dist/llm-gateway-runtime/index.d.ts.map +0 -1
  136. package/dist/llm-gateway-runtime/index.js +0 -147
  137. package/dist/llm-gateway-runtime/index.js.map +0 -1
  138. package/dist/llm-gateway-runtime/session-ledger.d.ts.map +0 -1
  139. package/dist/llm-gateway-runtime/session-ledger.js.map +0 -1
  140. package/dist/llm-gateway-runtime/sticky.d.ts.map +0 -1
  141. package/dist/llm-gateway-runtime/sticky.js.map +0 -1
  142. package/dist/llm-mesh.d.ts +0 -154
  143. package/dist/llm-mesh.d.ts.map +0 -1
  144. package/dist/llm-mesh.js +0 -490
  145. package/dist/llm-mesh.js.map +0 -1
  146. package/dist/llm-routing-config.d.ts.map +0 -1
  147. package/dist/llm-routing-config.js.map +0 -1
package/dist/llm-mesh.js DELETED
@@ -1,490 +0,0 @@
1
- /**
2
- * llm-mesh — local LLM gateway management for solo-dev mode.
3
- *
4
- * Enrollment: `h2a llm-mesh account enroll cloud-code|codex` delegates OAuth and
5
- * account persistence entirely to the sentropic-owned facade.
6
- *
7
- * Startup: `h2a llm-mesh start` reads public host config and starts the
8
- * embedded gateway runtime as a background process. Callers acquire an
9
- * opaque process-local bearer without printing it.
10
- *
11
- * Config path: ~/.sentropic/llm-mesh.json (0600, public metadata only)
12
- * PID file: ~/.sentropic/llm-mesh.pid
13
- * Runtime file: ~/.sentropic/llm-mesh-token.json (0600, base URL + PID only)
14
- */
15
- import { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, unlinkSync, writeFileSync, } from "node:fs";
16
- import { homedir, hostname } from "node:os";
17
- import { dirname, join } from "node:path";
18
- import { fileURLToPath } from "node:url";
19
- import { spawn } from "node:child_process";
20
- import { randomBytes } from "node:crypto";
21
- import { createLlmMeshFacade, } from "@sentropic/llm-mesh/facade";
22
- import { validateLlmMeshRoutingConfig, } from "./llm-routing-config.js";
23
- const ANTHROPIC_GATEWAY_ENV_KEYS = [
24
- "ANTHROPIC_BASE_URL",
25
- "ANTHROPIC_AUTH_TOKEN",
26
- "ANTHROPIC_API_KEY",
27
- ];
28
- /**
29
- * Temporarily replace the H2A gateway lane and return an exact restorer.
30
- * Direct launches preserve a user-owned ANTHROPIC_API_KEY. Gateway launches
31
- * hide it from Claude Code because the local gateway authenticates with the
32
- * opaque AUTH_TOKEN lane instead.
33
- */
34
- export function replaceAnthropicGatewayEnvironment(env, replacement) {
35
- const previous = new Map(ANTHROPIC_GATEWAY_ENV_KEYS.map((key) => [key, env[key]]));
36
- for (const key of ANTHROPIC_GATEWAY_ENV_KEYS) {
37
- if (key !== "ANTHROPIC_API_KEY" || replacement !== undefined) {
38
- delete env[key];
39
- }
40
- }
41
- for (const [key, value] of Object.entries(replacement ?? {})) {
42
- if (value !== undefined)
43
- env[key] = value;
44
- }
45
- return () => {
46
- for (const [key, value] of previous) {
47
- if (value === undefined)
48
- delete env[key];
49
- else
50
- env[key] = value;
51
- }
52
- };
53
- }
54
- function facadeConfigResolver() {
55
- return {
56
- async resolveConfig(configRef) {
57
- const raw = process.env.H2A_LLM_MESH_CONFIG_JSON;
58
- if (!raw)
59
- return {};
60
- try {
61
- const parsed = JSON.parse(raw);
62
- const scoped = parsed[configRef];
63
- return scoped && typeof scoped === "object" && !Array.isArray(scoped)
64
- ? scoped
65
- : parsed;
66
- }
67
- catch {
68
- return {};
69
- }
70
- },
71
- };
72
- }
73
- export function createCliLlmMeshFacade() {
74
- return createLlmMeshFacade({
75
- configResolver: facadeConfigResolver(),
76
- mode: "cli",
77
- legacyAccountOwnerScopeRef: llmMeshOwnerScopeRef(),
78
- });
79
- }
80
- /** Stable local owner used both at enrollment and by gateway-authenticated routing. */
81
- export function llmMeshOwnerScopeRef() {
82
- return process.env.H2A_LLM_MESH_OWNER_SCOPE?.trim() || `cli:${hostname()}`;
83
- }
84
- function openEnrollmentBrowser(url) {
85
- const command = process.platform === "darwin"
86
- ? "open"
87
- : process.platform === "win32"
88
- ? "cmd"
89
- : "xdg-open";
90
- const args = process.platform === "win32" ? ["/c", "start", "", url] : [url];
91
- try {
92
- const child = spawn(command, args, { detached: true, stdio: "ignore" });
93
- child.unref();
94
- }
95
- catch {
96
- // The URL is always printed, so a headless CLI can continue manually.
97
- }
98
- }
99
- /**
100
- * Enroll through the sentropic-owned OAuth state machine. H2A never receives
101
- * an authorization code or a provider token. Account records remain owned by
102
- * the facade/keyring and are not copied into h2a config.
103
- */
104
- export async function enrollViaFacade(provider, options = {}) {
105
- const facade = options.facade ?? createCliLlmMeshFacade();
106
- const ownerScope = options.ownerScope ?? llmMeshOwnerScopeRef();
107
- // The installed @sentropic/llm-mesh types predate the muse provider, but
108
- // enroll passes the id through opaquely — a muse-capable facade resolves
109
- // it, an older one fails with its own unknown-provider error. Cast is
110
- // load-bearing until the dep bump, not a lie about the contract.
111
- const session = await facade.enroll(provider, {
112
- configRef: options.configRef ?? process.env.H2A_LLM_MESH_CONFIG_REF ?? "default",
113
- mode: "cli",
114
- redirectUri: options.redirectUri ?? "http://127.0.0.1",
115
- ownerScope,
116
- });
117
- if (provider === "muse") {
118
- // Muse CLI-store import (BR75): no browser or device round-trip — the
119
- // owner act was the muse login itself. The ownerScope binds the enrolling
120
- // owner explicitly (never inferred); it doubles as the completion code
121
- // the mesh provider carries but does not validate.
122
- // Installed mesh types predate the local-import kind (same load-bearing
123
- // cast pattern as the enroll call above); runtime shape verified live.
124
- const museSession = session;
125
- if (museSession.kind !== "local-import") {
126
- throw new Error("Muse enrollment did not return a local-import session");
127
- }
128
- const completeMuseImport = facade.completeMuseImport;
129
- if (typeof completeMuseImport !== "function") {
130
- throw new Error("Muse enrollment needs facade.completeMuseImport — upgrade @sentropic/llm-mesh " +
131
- "to a version with the Muse enrollment provider");
132
- }
133
- process.stdout.write(`[h2a] llm-mesh: importing Muse CLI credentials from ${museSession.source} for ${ownerScope}\n`);
134
- const completed = await completeMuseImport.call(facade, museSession.enrollmentId, ownerScope, ownerScope);
135
- return { accountId: completed.accountId, provider, label: completed.label };
136
- }
137
- if (provider === "muse-code") {
138
- // Native Meta device flow (RFC 8628, MuseCodeEnrollmentProvider
139
- // mesh-side): print the user code + verification URL, then complete via
140
- // the muse-specific device import — NOT the generic pollForCompletion,
141
- // which the mesh service hard-wires to the codex provider.
142
- const deviceSession = session;
143
- if (deviceSession.kind !== "device-code") {
144
- throw new Error("Muse device-flow enrollment did not return a device code");
145
- }
146
- const completeMuseDeviceImport = facade.completeMuseDeviceImport;
147
- if (typeof completeMuseDeviceImport !== "function") {
148
- throw new Error("Muse device-flow enrollment needs facade.completeMuseDeviceImport — upgrade @sentropic/llm-mesh " +
149
- "to a version with the muse-code enrollment provider");
150
- }
151
- process.stdout.write(`[h2a] llm-mesh: enter code ${deviceSession.userCode} at ${deviceSession.verificationUrl}\n`);
152
- const completed = await completeMuseDeviceImport.call(facade, deviceSession.enrollmentId, ownerScope);
153
- return { accountId: completed.accountId, provider, label: completed.label };
154
- }
155
- const completed = provider === "cloud-code"
156
- ? await (async () => {
157
- if (session.kind !== "authorization-url") {
158
- throw new Error("Cloud Code enrollment did not return an authorization URL");
159
- }
160
- process.stdout.write(`[h2a] llm-mesh: open ${session.url}\n`);
161
- (options.openBrowser ?? openEnrollmentBrowser)(session.url);
162
- return facade.waitForCallback(session.enrollmentId);
163
- })()
164
- : await (async () => {
165
- if (session.kind !== "device-code") {
166
- throw new Error("Codex enrollment did not return a device code");
167
- }
168
- process.stdout.write(`[h2a] llm-mesh: enter code ${session.userCode} at ${session.verificationUrl}\n`);
169
- return facade.pollForCompletion(session.enrollmentId);
170
- })();
171
- return { accountId: completed.accountId, provider, label: completed.label };
172
- }
173
- export async function listAccountsViaFacade(options = {}) {
174
- const facade = options.facade ?? createCliLlmMeshFacade();
175
- return facade.listAccounts({
176
- ownerScope: options.ownerScope ?? llmMeshOwnerScopeRef(),
177
- });
178
- }
179
- export async function removeAccountViaFacade(accountId, options = {}) {
180
- const facade = options.facade ?? createCliLlmMeshFacade();
181
- return facade.removeAccount(accountId, {
182
- ownerScope: options.ownerScope ?? llmMeshOwnerScopeRef(),
183
- });
184
- }
185
- function publicAccountProjection(account) {
186
- return {
187
- accountId: account.accountId,
188
- ...(account.accountLabel ? { accountLabel: account.accountLabel } : {}),
189
- providerId: account.providerId,
190
- status: account.status,
191
- createdAt: account.createdAt,
192
- updatedAt: account.updatedAt,
193
- };
194
- }
195
- export function formatLlmMeshAccountList(accounts, json) {
196
- const publicAccounts = accounts.map(publicAccountProjection);
197
- if (json)
198
- return JSON.stringify(publicAccounts, null, 2);
199
- if (publicAccounts.length === 0) {
200
- return "[h2a] llm-mesh account: no accounts enrolled";
201
- }
202
- const rows = publicAccounts.map((account) => [
203
- account.accountId,
204
- account.providerId,
205
- account.accountLabel ?? "-",
206
- account.status,
207
- account.createdAt,
208
- ]);
209
- const headers = ["ID", "PROVIDER", "LABEL", "STATUS", "ENROLLED"];
210
- const widths = headers.map((header, index) => Math.max(header.length, ...rows.map((row) => row[index]?.length ?? 0)));
211
- return [headers, ...rows]
212
- .map((row) => row.map((value, index) => value.padEnd(widths[index] ?? value.length)).join(" ").trimEnd())
213
- .join("\n");
214
- }
215
- const SAFE_ACCOUNT_NOT_FOUND = /^Account '[A-Za-z0-9][A-Za-z0-9._:-]{0,127}' not found$/;
216
- export function formatLlmMeshAccountError(error, fallback) {
217
- const message = error instanceof Error ? error.message : String(error);
218
- return SAFE_ACCOUNT_NOT_FOUND.test(message) ? message : fallback;
219
- }
220
- // ---------------------------------------------------------------------------
221
- // Capitalized LlmMeshManager API
222
- // ---------------------------------------------------------------------------
223
- export class LlmMeshManager {
224
- GetActiveConfig(dir) {
225
- return readLlmMeshConfig(dir);
226
- }
227
- SaveConfig(config, dir) {
228
- writeLlmMeshConfig(config, dir);
229
- }
230
- async StartGateway(config, opts = {}) {
231
- return startGateway(config, opts);
232
- }
233
- StopGateway(dir) {
234
- return stopGateway(dir);
235
- }
236
- async ResolveSession(dir) {
237
- return acquireLlmMeshSessionEnv(dir);
238
- }
239
- }
240
- // ---------------------------------------------------------------------------
241
- // Paths
242
- // ---------------------------------------------------------------------------
243
- export function sentropicDir() {
244
- return join(homedir(), ".sentropic");
245
- }
246
- export function llmMeshConfigPath(dir) {
247
- return join(dir ?? sentropicDir(), "llm-mesh.json");
248
- }
249
- export function llmMeshPidPath(dir) {
250
- return join(dir ?? sentropicDir(), "llm-mesh.pid");
251
- }
252
- export function llmMeshTokenPath(dir) {
253
- return join(dir ?? sentropicDir(), "llm-mesh-token.json");
254
- }
255
- export function llmMeshLogPath(config, dir) {
256
- return config?.logFile ?? join(dir ?? sentropicDir(), "llm-mesh.log");
257
- }
258
- // ---------------------------------------------------------------------------
259
- // Config read/write
260
- // ---------------------------------------------------------------------------
261
- function readJson(path) {
262
- try {
263
- return JSON.parse(readFileSync(path, "utf8"));
264
- }
265
- catch {
266
- return null;
267
- }
268
- }
269
- function writeSecret(path, value) {
270
- mkdirSync(dirname(path), { recursive: true });
271
- const tmp = `${path}.tmp.${process.pid}`;
272
- writeFileSync(tmp, JSON.stringify(value, null, 2) + "\n", { mode: 0o600 });
273
- chmodSync(tmp, 0o600);
274
- renameSync(tmp, path);
275
- }
276
- export function readLlmMeshConfig(dir) {
277
- const config = readJson(llmMeshConfigPath(dir));
278
- if (!config)
279
- return null;
280
- const { accounts: _legacyAccounts, meshAccounts: _legacyPublicIds, ...publicConfig } = config;
281
- return publicConfig;
282
- }
283
- export function writeLlmMeshConfig(config, dir) {
284
- // The facade/keyring own credentials. Keep only public enrollment metadata
285
- // in llm-mesh.json, including when migrating a pre-facade configuration.
286
- const { accounts: _legacyCredentialRecords, meshAccounts: _legacyPublicIds, ...publicConfig } = config;
287
- if (publicConfig.routing)
288
- validateLlmMeshRoutingConfig(publicConfig.routing);
289
- writeSecret(llmMeshConfigPath(dir), publicConfig);
290
- }
291
- export function updateLlmMeshRoutingConfig(routing, dir) {
292
- const config = readLlmMeshConfig(dir) ?? {};
293
- const next = routing
294
- ? { ...config, routing: validateLlmMeshRoutingConfig(routing) }
295
- : (() => {
296
- const copy = { ...config };
297
- delete copy.routing;
298
- return copy;
299
- })();
300
- writeLlmMeshConfig(next, dir);
301
- return next;
302
- }
303
- // ---------------------------------------------------------------------------
304
- // Gateway process management
305
- // ---------------------------------------------------------------------------
306
- /** Resolve the embedded gateway runtime entry point relative to this package. */
307
- export function gatewayScriptPath() {
308
- const thisFile = fileURLToPath(import.meta.url);
309
- return join(dirname(thisFile), "llm-gateway-runtime", "index.js");
310
- }
311
- /**
312
- * A gateway session is an account-affinity boundary, so a local CLI session
313
- * must never inherit a process-wide static identifier. Callers provide the
314
- * stable tmux/conversation identity when they have one; standalone gateway
315
- * management gets a fresh ephemeral identity instead.
316
- */
317
- export function gatewayClientSessionId(clientSessionId) {
318
- const supplied = clientSessionId?.trim();
319
- return supplied || `local-${randomBytes(16).toString("hex")}`;
320
- }
321
- /**
322
- * Start the llm-gateway as a detached background process.
323
- * Returns the PID, port, and a gw-token for Claude Code.
324
- */
325
- export async function startGateway(config, opts = {}) {
326
- const port = config.port ?? 3002;
327
- const stateDir = opts.stateDir;
328
- // An explicitly isolated state root must not inherit a live gateway's log.
329
- const logFile = stateDir ? llmMeshLogPath(undefined, stateDir) : llmMeshLogPath(config);
330
- const gatewayScript = gatewayScriptPath();
331
- if (!existsSync(gatewayScript)) {
332
- throw new Error(`Gateway script not found: ${gatewayScript}\n` +
333
- `Run \`npm run build -w @sentropic/remote-cli\` first.`);
334
- }
335
- mkdirSync(stateDir ?? sentropicDir(), { recursive: true });
336
- const gatewayEnv = {
337
- ...process.env,
338
- PORT: String(port),
339
- H2A_LLM_MESH_OWNER_SCOPE: llmMeshOwnerScopeRef(),
340
- ...(config.routing
341
- ? { H2A_LLM_MESH_ROUTING_JSON: JSON.stringify(config.routing) }
342
- : {}),
343
- };
344
- // Start detached, piping stdout+stderr to logFile
345
- const { openSync } = await import("node:fs");
346
- const logFd = openSync(logFile, "a");
347
- const child = spawn("node", [gatewayScript], {
348
- detached: true,
349
- stdio: ["ignore", logFd, logFd],
350
- env: gatewayEnv,
351
- });
352
- child.unref();
353
- const pid = child.pid;
354
- // Write PID file
355
- writeFileSync(llmMeshPidPath(stateDir), String(pid) + "\n");
356
- // Wait for the gateway to be ready
357
- const baseUrl = `http://localhost:${port}`;
358
- await waitForHealth(baseUrl, 10_000);
359
- // Acquire a session token
360
- const sessionResp = await fetch(`${baseUrl}/v1/session`, {
361
- method: "POST",
362
- headers: { "content-type": "application/json" },
363
- body: JSON.stringify({
364
- sessionId: gatewayClientSessionId(opts.clientSessionId),
365
- clientSessionId: opts.clientSessionId,
366
- workspaceId: process.cwd(),
367
- }),
368
- });
369
- if (!sessionResp.ok) {
370
- throw new Error(`Session acquisition failed: ${sessionResp.status}`);
371
- }
372
- const session = (await sessionResp.json());
373
- const gatewayToken = session.gatewayToken;
374
- if (!gatewayToken)
375
- throw new Error("No gatewayToken in session response");
376
- // Persist only process metadata. The opaque bearer remains process-local and
377
- // is reacquired for each caller affinity.
378
- writeSecret(llmMeshTokenPath(stateDir), {
379
- baseUrl,
380
- pid,
381
- });
382
- return { pid, port, gatewayToken };
383
- }
384
- async function waitForHealth(baseUrl, timeoutMs) {
385
- const deadline = Date.now() + timeoutMs;
386
- while (Date.now() < deadline) {
387
- try {
388
- const resp = await fetch(`${baseUrl}/health`);
389
- if (resp.ok)
390
- return;
391
- }
392
- catch {
393
- // not ready yet
394
- }
395
- await new Promise((r) => setTimeout(r, 200));
396
- }
397
- throw new Error(`Gateway did not become healthy within ${timeoutMs}ms`);
398
- }
399
- /** Read the running gateway's PID. Returns null if not running. */
400
- export function readGatewayPid(dir) {
401
- try {
402
- const raw = readFileSync(llmMeshPidPath(dir), "utf8").trim();
403
- const pid = parseInt(raw, 10);
404
- if (isNaN(pid))
405
- return null;
406
- // Check if the process is still alive
407
- process.kill(pid, 0);
408
- return pid;
409
- }
410
- catch {
411
- return null;
412
- }
413
- }
414
- function configuredGatewayBaseUrl(dir) {
415
- const config = readLlmMeshConfig(dir);
416
- if (!config)
417
- return null;
418
- return `http://localhost:${config.port ?? 3002}`;
419
- }
420
- /**
421
- * Acquire a fresh in-memory gateway token from the running local gateway.
422
- * Gateway tokens are intentionally not durable. The runtime metadata file
423
- * contains only the base URL and PID; every caller reacquires its own bearer.
424
- */
425
- export async function acquireLlmMeshSessionEnv(dir, clientSessionId) {
426
- try {
427
- let baseUrl;
428
- let pid;
429
- try {
430
- const raw = readFileSync(llmMeshTokenPath(dir), "utf8");
431
- const tokenFile = JSON.parse(raw);
432
- baseUrl = tokenFile.baseUrl;
433
- pid = tokenFile.pid;
434
- }
435
- catch {
436
- baseUrl = configuredGatewayBaseUrl(dir) ?? undefined;
437
- pid = readGatewayPid(dir) ?? undefined;
438
- }
439
- if (!baseUrl || !pid)
440
- return null;
441
- try {
442
- process.kill(pid, 0);
443
- }
444
- catch {
445
- return null;
446
- }
447
- const workspaceId = dir ?? process.cwd();
448
- const sessionResp = await fetch(`${baseUrl}/v1/session`, {
449
- method: "POST",
450
- headers: { "content-type": "application/json" },
451
- body: JSON.stringify({
452
- sessionId: gatewayClientSessionId(clientSessionId),
453
- clientSessionId,
454
- workspaceId,
455
- }),
456
- });
457
- if (!sessionResp.ok)
458
- return null;
459
- const session = (await sessionResp.json());
460
- if (!session.gatewayToken)
461
- return null;
462
- return {
463
- ANTHROPIC_BASE_URL: baseUrl,
464
- ANTHROPIC_AUTH_TOKEN: session.gatewayToken,
465
- };
466
- }
467
- catch {
468
- return null;
469
- }
470
- }
471
- /** Stop the running gateway. */
472
- export function stopGateway(dir) {
473
- const pid = readGatewayPid(dir);
474
- if (!pid)
475
- return { stopped: false };
476
- try {
477
- process.kill(pid, "SIGTERM");
478
- }
479
- catch {
480
- // already dead
481
- }
482
- try {
483
- unlinkSync(llmMeshPidPath(dir));
484
- }
485
- catch {
486
- // best-effort cleanup
487
- }
488
- return { stopped: true, pid };
489
- }
490
- //# sourceMappingURL=llm-mesh.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"llm-mesh.js","sourceRoot":"","sources":["../src/llm-mesh.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"llm-routing-config.d.ts","sourceRoot":"","sources":["../src/llm-routing-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,2BAA2B,EAI3B,KAAK,uBAAuB,EAC5B,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,oBAAoB;IACnC,0FAA0F;IAC1F,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,uBAAuB,CAAC;CACnC;AAED,eAAO,MAAM,yBAAyB;;;;CAI5B,CAAC;AAEX,MAAM,MAAM,qBAAqB,GAAG,MAAM,OAAO,yBAAyB,CAAC;AAE3E,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAQtE;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,oBAAoB,GAC3B,oBAAoB,CAiBtB;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,oBAAoB,GAAG,SAAS,GACvC,2BAA2B,GAAG,SAAS,CAKzC;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,oBAAoB,GAAG,SAAS,EACzC,UAAU,EAAE,SAAS,MAAM,EAAE,GAC5B,oBAAoB,CAYtB;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,oBAAoB,GAAG,SAAS,EACzC,QAAQ,EAAE,eAAe,GAAG,aAAa,GACxC,oBAAoB,CAQtB;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,oBAAoB,GAAG,SAAS,GACvC,WAAW,CAEb;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,oBAAoB,GAAG,SAAS,GACvC,uBAAuB,CAEzB;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,oBAAoB,CAW7E;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,oBAAoB,GAAG,SAAS,GACvC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiBzB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"llm-routing-config.js","sourceRoot":"","sources":["../src/llm-routing-config.ts"],"names":[],"mappings":"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"}