@sentropic/h2a-runtime 0.98.6 → 0.98.7-rc.10

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 (236) hide show
  1. package/dist/agent-launch-args.d.ts.map +1 -1
  2. package/dist/agent-launch-args.js +5 -5
  3. package/dist/agent-launch-args.js.map +1 -1
  4. package/dist/agy-claude.d.ts +42 -0
  5. package/dist/agy-claude.d.ts.map +1 -0
  6. package/dist/agy-claude.js +148 -0
  7. package/dist/agy-claude.js.map +1 -0
  8. package/dist/agy-headless.d.ts +11 -0
  9. package/dist/agy-headless.d.ts.map +1 -0
  10. package/dist/agy-headless.js +104 -0
  11. package/dist/agy-headless.js.map +1 -0
  12. package/dist/attach.d.ts +5 -0
  13. package/dist/attach.d.ts.map +1 -1
  14. package/dist/attach.js +75 -6
  15. package/dist/attach.js.map +1 -1
  16. package/dist/auth-login.d.ts +24 -1
  17. package/dist/auth-login.d.ts.map +1 -1
  18. package/dist/auth-login.js +132 -4
  19. package/dist/auth-login.js.map +1 -1
  20. package/dist/central-mcp.d.ts +34 -0
  21. package/dist/central-mcp.d.ts.map +1 -1
  22. package/dist/central-mcp.js +275 -71
  23. package/dist/central-mcp.js.map +1 -1
  24. package/dist/claude-code-cli-isolation.d.ts +53 -0
  25. package/dist/claude-code-cli-isolation.d.ts.map +1 -0
  26. package/dist/claude-code-cli-isolation.js +277 -0
  27. package/dist/claude-code-cli-isolation.js.map +1 -0
  28. package/dist/claude-code-cli-lifecycle.d.ts +80 -0
  29. package/dist/claude-code-cli-lifecycle.d.ts.map +1 -0
  30. package/dist/claude-code-cli-lifecycle.js +402 -0
  31. package/dist/claude-code-cli-lifecycle.js.map +1 -0
  32. package/dist/claude-code-cli-runner.d.ts +89 -0
  33. package/dist/claude-code-cli-runner.d.ts.map +1 -0
  34. package/dist/claude-code-cli-runner.js +659 -0
  35. package/dist/claude-code-cli-runner.js.map +1 -0
  36. package/dist/claude-seat-input.d.ts +47 -0
  37. package/dist/claude-seat-input.d.ts.map +1 -0
  38. package/dist/claude-seat-input.js +272 -0
  39. package/dist/claude-seat-input.js.map +1 -0
  40. package/dist/claude-seat-mesh-contract.d.ts +88 -0
  41. package/dist/claude-seat-mesh-contract.d.ts.map +1 -0
  42. package/dist/claude-seat-mesh-contract.js +13 -0
  43. package/dist/claude-seat-mesh-contract.js.map +1 -0
  44. package/dist/cli-help-groups.js +1 -1
  45. package/dist/cli-help-groups.js.map +1 -1
  46. package/dist/cli-seat-codecs.d.ts +86 -0
  47. package/dist/cli-seat-codecs.d.ts.map +1 -0
  48. package/dist/cli-seat-codecs.js +255 -0
  49. package/dist/cli-seat-codecs.js.map +1 -0
  50. package/dist/cli-seat-fixtures.d.ts +86 -0
  51. package/dist/cli-seat-fixtures.d.ts.map +1 -0
  52. package/dist/cli-seat-fixtures.js +114 -0
  53. package/dist/cli-seat-fixtures.js.map +1 -0
  54. package/dist/cli-seat-materialization.d.ts +245 -0
  55. package/dist/cli-seat-materialization.d.ts.map +1 -0
  56. package/dist/cli-seat-materialization.js +646 -0
  57. package/dist/cli-seat-materialization.js.map +1 -0
  58. package/dist/conv-guard.d.ts.map +1 -1
  59. package/dist/conv-guard.js +6 -2
  60. package/dist/conv-guard.js.map +1 -1
  61. package/dist/crash-log.d.ts +112 -0
  62. package/dist/crash-log.d.ts.map +1 -0
  63. package/dist/crash-log.js +560 -0
  64. package/dist/crash-log.js.map +1 -0
  65. package/dist/delegate.d.ts +10 -0
  66. package/dist/delegate.d.ts.map +1 -1
  67. package/dist/delegate.js +29 -0
  68. package/dist/delegate.js.map +1 -1
  69. package/dist/file-lock.d.ts +4 -2
  70. package/dist/file-lock.d.ts.map +1 -1
  71. package/dist/file-lock.js +24 -10
  72. package/dist/file-lock.js.map +1 -1
  73. package/dist/gateway-host/claude-seat-client.d.ts +32 -0
  74. package/dist/gateway-host/claude-seat-client.d.ts.map +1 -0
  75. package/dist/gateway-host/claude-seat-client.js +38 -0
  76. package/dist/gateway-host/claude-seat-client.js.map +1 -0
  77. package/dist/gateway-host/config-file.d.ts +2 -0
  78. package/dist/gateway-host/config-file.d.ts.map +1 -1
  79. package/dist/gateway-host/config-file.js +5 -1
  80. package/dist/gateway-host/config-file.js.map +1 -1
  81. package/dist/gateway-host/daemon.d.ts.map +1 -1
  82. package/dist/gateway-host/daemon.js +1 -2
  83. package/dist/gateway-host/daemon.js.map +1 -1
  84. package/dist/gateway-host/host.d.ts +6 -0
  85. package/dist/gateway-host/host.d.ts.map +1 -1
  86. package/dist/gateway-host/host.js +24 -3
  87. package/dist/gateway-host/host.js.map +1 -1
  88. package/dist/gateway-host/live-auth.d.ts +62 -0
  89. package/dist/gateway-host/live-auth.d.ts.map +1 -0
  90. package/dist/gateway-host/live-auth.js +87 -0
  91. package/dist/gateway-host/live-auth.js.map +1 -0
  92. package/dist/gateway-host/live-declarations.d.ts +58 -0
  93. package/dist/gateway-host/live-declarations.d.ts.map +1 -0
  94. package/dist/gateway-host/live-declarations.js +429 -0
  95. package/dist/gateway-host/live-declarations.js.map +1 -0
  96. package/dist/gateway-host/live-disclosure.d.ts +124 -0
  97. package/dist/gateway-host/live-disclosure.d.ts.map +1 -0
  98. package/dist/gateway-host/live-disclosure.js +347 -0
  99. package/dist/gateway-host/live-disclosure.js.map +1 -0
  100. package/dist/gateway-host/live-github.d.ts +11 -0
  101. package/dist/gateway-host/live-github.d.ts.map +1 -0
  102. package/dist/gateway-host/live-github.js +374 -0
  103. package/dist/gateway-host/live-github.js.map +1 -0
  104. package/dist/gateway-host/live-host.d.ts +20 -0
  105. package/dist/gateway-host/live-host.d.ts.map +1 -0
  106. package/dist/gateway-host/live-host.js +14 -0
  107. package/dist/gateway-host/live-host.js.map +1 -0
  108. package/dist/gateway-host/live-object-store.d.ts +35 -0
  109. package/dist/gateway-host/live-object-store.d.ts.map +1 -0
  110. package/dist/gateway-host/live-object-store.js +447 -0
  111. package/dist/gateway-host/live-object-store.js.map +1 -0
  112. package/dist/gateway-host/live-registration.d.ts +162 -0
  113. package/dist/gateway-host/live-registration.d.ts.map +1 -0
  114. package/dist/gateway-host/live-registration.js +455 -0
  115. package/dist/gateway-host/live-registration.js.map +1 -0
  116. package/dist/gateway-model-catalog/model-catalog.d.ts +38 -0
  117. package/dist/gateway-model-catalog/model-catalog.d.ts.map +1 -0
  118. package/dist/gateway-model-catalog/model-catalog.js +167 -0
  119. package/dist/gateway-model-catalog/model-catalog.js.map +1 -0
  120. package/dist/identity-cull/cull.js +1 -1
  121. package/dist/identity-cull/cull.js.map +1 -1
  122. package/dist/identity-cull/identity-fence.d.ts +48 -0
  123. package/dist/identity-cull/identity-fence.d.ts.map +1 -0
  124. package/dist/identity-cull/identity-fence.js +221 -0
  125. package/dist/identity-cull/identity-fence.js.map +1 -0
  126. package/dist/identity-operator-break.d.ts +43 -0
  127. package/dist/identity-operator-break.d.ts.map +1 -0
  128. package/dist/identity-operator-break.js +85 -0
  129. package/dist/identity-operator-break.js.map +1 -0
  130. package/dist/index.d.ts +8 -1
  131. package/dist/index.d.ts.map +1 -1
  132. package/dist/index.js +525 -132
  133. package/dist/index.js.map +1 -1
  134. package/dist/launch-layout.d.ts.map +1 -1
  135. package/dist/launch-layout.js +10 -2
  136. package/dist/launch-layout.js.map +1 -1
  137. package/dist/llm-mesh-accounts.d.ts +128 -6
  138. package/dist/llm-mesh-accounts.d.ts.map +1 -1
  139. package/dist/llm-mesh-accounts.js +370 -14
  140. package/dist/llm-mesh-accounts.js.map +1 -1
  141. package/dist/native-host.d.ts +25 -1
  142. package/dist/native-host.d.ts.map +1 -1
  143. package/dist/native-host.js +211 -28
  144. package/dist/native-host.js.map +1 -1
  145. package/dist/native-restart.d.ts +2 -0
  146. package/dist/native-restart.d.ts.map +1 -1
  147. package/dist/native-restart.js +7 -0
  148. package/dist/native-restart.js.map +1 -1
  149. package/dist/native-terminal/fleet.d.ts +11 -0
  150. package/dist/native-terminal/fleet.d.ts.map +1 -1
  151. package/dist/native-terminal/fleet.js +58 -1
  152. package/dist/native-terminal/fleet.js.map +1 -1
  153. package/dist/native-terminal/host-scope.d.ts +18 -0
  154. package/dist/native-terminal/host-scope.d.ts.map +1 -0
  155. package/dist/native-terminal/host-scope.js +65 -0
  156. package/dist/native-terminal/host-scope.js.map +1 -0
  157. package/dist/native-terminal/host.d.ts +7 -1
  158. package/dist/native-terminal/host.d.ts.map +1 -1
  159. package/dist/native-terminal/host.js +10 -26
  160. package/dist/native-terminal/host.js.map +1 -1
  161. package/dist/native-terminal/journal.d.ts +5 -0
  162. package/dist/native-terminal/journal.d.ts.map +1 -1
  163. package/dist/native-terminal/journal.js +28 -16
  164. package/dist/native-terminal/journal.js.map +1 -1
  165. package/dist/native-terminal/op.d.ts +49 -1
  166. package/dist/native-terminal/op.d.ts.map +1 -1
  167. package/dist/native-terminal/op.js +254 -38
  168. package/dist/native-terminal/op.js.map +1 -1
  169. package/dist/native-terminal/process.d.ts.map +1 -1
  170. package/dist/native-terminal/process.js +10 -1
  171. package/dist/native-terminal/process.js.map +1 -1
  172. package/dist/native-terminal/screen.d.ts.map +1 -1
  173. package/dist/native-terminal/screen.js +1 -1
  174. package/dist/native-terminal/screen.js.map +1 -1
  175. package/dist/native-terminal/server.d.ts +12 -2
  176. package/dist/native-terminal/server.d.ts.map +1 -1
  177. package/dist/native-terminal/server.js +143 -42
  178. package/dist/native-terminal/server.js.map +1 -1
  179. package/dist/native-terminal/session-scope.d.ts +2 -0
  180. package/dist/native-terminal/session-scope.d.ts.map +1 -0
  181. package/dist/native-terminal/session-scope.js +32 -0
  182. package/dist/native-terminal/session-scope.js.map +1 -0
  183. package/dist/proc-identity.d.ts +31 -0
  184. package/dist/proc-identity.d.ts.map +1 -1
  185. package/dist/proc-identity.js +54 -0
  186. package/dist/proc-identity.js.map +1 -1
  187. package/dist/prompt-delivery.d.ts +3 -0
  188. package/dist/prompt-delivery.d.ts.map +1 -1
  189. package/dist/prompt-delivery.js +8 -3
  190. package/dist/prompt-delivery.js.map +1 -1
  191. package/dist/protocol-local.d.ts +16 -0
  192. package/dist/protocol-local.d.ts.map +1 -1
  193. package/dist/protocol-local.js +14 -0
  194. package/dist/protocol-local.js.map +1 -1
  195. package/dist/registry.d.ts +16 -12
  196. package/dist/registry.d.ts.map +1 -1
  197. package/dist/registry.js +39 -5
  198. package/dist/registry.js.map +1 -1
  199. package/dist/relaunch.d.ts +16 -0
  200. package/dist/relaunch.d.ts.map +1 -1
  201. package/dist/relaunch.js +42 -1
  202. package/dist/relaunch.js.map +1 -1
  203. package/dist/restore.d.ts +4 -0
  204. package/dist/restore.d.ts.map +1 -1
  205. package/dist/restore.js +9 -37
  206. package/dist/restore.js.map +1 -1
  207. package/dist/resume-launch-options.d.ts +3 -3
  208. package/dist/resume-launch-options.d.ts.map +1 -1
  209. package/dist/resume-launch-options.js +7 -4
  210. package/dist/resume-launch-options.js.map +1 -1
  211. package/dist/run.d.ts +2 -0
  212. package/dist/run.d.ts.map +1 -1
  213. package/dist/run.js +88 -20
  214. package/dist/run.js.map +1 -1
  215. package/dist/soft-refresh.d.ts.map +1 -1
  216. package/dist/soft-refresh.js +6 -0
  217. package/dist/soft-refresh.js.map +1 -1
  218. package/dist/terminal-reset.d.ts +104 -0
  219. package/dist/terminal-reset.d.ts.map +1 -0
  220. package/dist/terminal-reset.js +229 -0
  221. package/dist/terminal-reset.js.map +1 -0
  222. package/dist/tmux.d.ts +54 -8
  223. package/dist/tmux.d.ts.map +1 -1
  224. package/dist/tmux.js +143 -36
  225. package/dist/tmux.js.map +1 -1
  226. package/dist/vendor/engram-live/contracts.d.ts +825 -0
  227. package/dist/vendor/engram-live/contracts.js +1734 -0
  228. package/dist/vendor/engram-live/integration.d.ts +113 -0
  229. package/dist/vendor/engram-live/integration.js +254 -0
  230. package/dist/vendor/engram-live/pr-sync.d.ts +144 -0
  231. package/dist/vendor/engram-live/pr-sync.js +411 -0
  232. package/dist/vendor/engram-live/registration.d.ts +138 -0
  233. package/dist/vendor/engram-live/registration.js +358 -0
  234. package/dist/vendor/engram-live/retention.d.ts +56 -0
  235. package/dist/vendor/engram-live/retention.js +179 -0
  236. package/package.json +6 -6
@@ -1,36 +1,157 @@
1
1
  /**
2
- * Runtime-side central MCP lifecycle. The core package remains the sole owner
3
- * of marker validation, reclaim, and server startup; this module only selects
4
- * a persisted endpoint, asks core for protected liveness facts, and starts the
5
- * existing foreground command as a detached child when necessary.
2
+ * Runtime-side central MCP lifecycle. This module owns its end of the
3
+ * central contract: endpoint selection, marker read/validation, HTTP
4
+ * liveness ping, and starting the existing foreground serve command as a
5
+ * detached child when necessary. It deliberately never names the core
6
+ * package: host-config rendering stays a core command invoked over the
7
+ * `h2a` binary (the same spawn pattern used for `mcp-central-serve`
8
+ * below), so isolated installs of this package keep working and degrade
9
+ * cleanly where core is absent.
10
+ *
11
+ * Cross-package constants below (env names, marker directory/file, ping
12
+ * path, file mode) mirror the core contract values. They are pinned by the
13
+ * vitest suite in this directory, which exercises them against real
14
+ * markers and a real HTTP peer.
6
15
  */
7
- import { spawn } from "node:child_process";
8
- import { chmodSync, closeSync, existsSync, mkdirSync, openSync, readFileSync, unlinkSync, writeFileSync, } from "node:fs";
16
+ import { spawn, spawnSync } from "node:child_process";
17
+ import { chmodSync, closeSync, constants, existsSync, lstatSync, mkdirSync, openSync, readFileSync, readSync, renameSync, statSync, unlinkSync, writeFileSync, } from "node:fs";
9
18
  import { homedir } from "node:os";
10
19
  import { dirname, join } from "node:path";
11
20
  import { getH2aConfig, resolveConfigPath, setH2aConfig } from "./config.js";
21
+ import { appendCrashLog, MAX_CRASH_LOG_BYTES } from "./crash-log.js";
12
22
  const CENTRAL_PORT_BASE = 47_000;
13
23
  const CENTRAL_PORT_SPAN = 10_000;
14
24
  const CENTRAL_START_TIMEOUT_MS = 10_000;
15
25
  const CENTRAL_START_POLL_MS = 100;
16
- let coreCentralMcp;
17
- function loadCoreCentralMcp() {
18
- // Keep the core/runtime boundary dynamic. Core already reaches runtime via a
19
- // string-specifier seam for central marker ownership checks, so a static
20
- // runtime dependency here would turn that boundary into a hard cycle.
21
- const corePackage = "@sentropic/h2a";
22
- coreCentralMcp ??= import(corePackage).then((core) => {
23
- const candidate = core;
24
- if (typeof candidate.H2A_MCP_CENTRAL_ENV !== "string" ||
25
- typeof candidate.H2A_MCP_CENTRAL_ENDPOINT_ENV !== "string" ||
26
- typeof candidate.centralMcpPing !== "function" ||
27
- typeof candidate.readCentralMcpMarker !== "function" ||
28
- typeof candidate.runCli !== "function") {
29
- throw new Error("@sentropic/h2a does not expose the central MCP runtime surface");
26
+ // Stable cross-package contract values (mirrored from core; pinned by the
27
+ // vitest suite in this directory against real markers and a real HTTP peer).
28
+ export const H2A_MCP_CENTRAL_ENV = "H2A_MCP_CENTRAL";
29
+ export const H2A_MCP_CENTRAL_ENDPOINT_ENV = "H2A_MCP_CENTRAL_ENDPOINT";
30
+ const CENTRAL_RUNTIME_DIRECTORY = "h2a-mcp-central";
31
+ const CENTRAL_MARKER_FILE = "marker.json";
32
+ const CENTRAL_PING_PATH = "/_h2a-central/ping";
33
+ const CENTRAL_LIVENESS_TIMEOUT_MS = 1_500;
34
+ const CENTRAL_HOST_SETUP_TIMEOUT_MS = 60_000;
35
+ function currentUid() {
36
+ if (typeof process.getuid !== "function") {
37
+ throw new Error(`${H2A_MCP_CENTRAL_ENDPOINT_ENV} requires a current uid`);
38
+ }
39
+ return process.getuid();
40
+ }
41
+ function centralMcpMarkerPath(paths = {}) {
42
+ const base = paths.runtimeBase ?? join("/run/user", String(currentUid()));
43
+ return join(base, CENTRAL_RUNTIME_DIRECTORY, CENTRAL_MARKER_FILE);
44
+ }
45
+ function isLoopbackHostname(hostname) {
46
+ return hostname === "127.0.0.1" || hostname === "::1" || hostname === "[::1]" || hostname === "localhost";
47
+ }
48
+ function parseCentralMcpEndpoint(value) {
49
+ if (!value || value.trim().length === 0) {
50
+ throw new Error(`${H2A_MCP_CENTRAL_ENDPOINT_ENV} must be a non-empty absolute http URL`);
51
+ }
52
+ let endpoint;
53
+ try {
54
+ endpoint = new URL(value);
55
+ }
56
+ catch {
57
+ throw new Error(`${H2A_MCP_CENTRAL_ENDPOINT_ENV} must be a non-empty absolute http URL`);
58
+ }
59
+ if (endpoint.protocol !== "http:" ||
60
+ !isLoopbackHostname(endpoint.hostname) ||
61
+ !endpoint.port ||
62
+ Number(endpoint.port) < 1 ||
63
+ Number(endpoint.port) > 65_535 ||
64
+ endpoint.username ||
65
+ endpoint.password ||
66
+ endpoint.search ||
67
+ endpoint.hash) {
68
+ throw new Error(`${H2A_MCP_CENTRAL_ENDPOINT_ENV} must be an absolute http URL with an explicit port`);
69
+ }
70
+ return endpoint.href;
71
+ }
72
+ function errorHasCode(error, expectedCode) {
73
+ let current = error;
74
+ for (let depth = 0; depth < 4 && current && typeof current === "object"; depth += 1) {
75
+ if (current.code === expectedCode)
76
+ return true;
77
+ current = current.cause;
78
+ }
79
+ return false;
80
+ }
81
+ export async function centralMcpPing(endpoint, timeoutMs = CENTRAL_LIVENESS_TIMEOUT_MS) {
82
+ const canonicalEndpoint = parseCentralMcpEndpoint(endpoint);
83
+ const controller = new AbortController();
84
+ const timeout = setTimeout(() => controller.abort(), timeoutMs);
85
+ const pingUrl = new URL(CENTRAL_PING_PATH, canonicalEndpoint).href;
86
+ return fetch(pingUrl, { signal: controller.signal }).then(async (response) => {
87
+ clearTimeout(timeout);
88
+ if (!response.ok)
89
+ return { kind: "dead" };
90
+ try {
91
+ const body = (await response.json());
92
+ return typeof body.generation === "string" && body.generation.length > 0
93
+ ? { kind: "generation", generation: body.generation }
94
+ : { kind: "dead" };
30
95
  }
31
- return candidate;
96
+ catch {
97
+ return { kind: "dead" };
98
+ }
99
+ }, (error) => {
100
+ clearTimeout(timeout);
101
+ // ECONNREFUSED is the only transport failure that positively proves no
102
+ // listener owns this registration. Timeouts and all other errors are not.
103
+ return (errorHasCode(error, "ECONNREFUSED") ? { kind: "dead" } : { kind: "ambiguous" });
32
104
  });
33
- return coreCentralMcp;
105
+ }
106
+ /**
107
+ * Read the protected central marker without exposing its token to callers
108
+ * that only need liveness/generation metadata. A missing marker is the sole
109
+ * non-error absence case; malformed or insecure state remains a hard failure.
110
+ */
111
+ export function readCentralMcpMarker(paths = {}) {
112
+ const path = centralMcpMarkerPath(paths);
113
+ let info;
114
+ try {
115
+ info = lstatSync(path);
116
+ }
117
+ catch (error) {
118
+ if (error.code === "ENOENT")
119
+ return undefined;
120
+ throw error;
121
+ }
122
+ if (!info.isFile())
123
+ throw new Error(`central MCP marker is not a regular file: ${path}`);
124
+ if (info.uid !== currentUid())
125
+ throw new Error(`central MCP marker is not owned by the current user: ${path}`);
126
+ if ((info.mode & 0o777) !== 0o600)
127
+ throw new Error(`central MCP marker must have mode 0600: ${path}`);
128
+ let value;
129
+ try {
130
+ value = JSON.parse(readFileSync(path, "utf8"));
131
+ }
132
+ catch {
133
+ throw new Error(`central MCP marker is malformed: ${path}`);
134
+ }
135
+ if (typeof value.endpoint !== "string" ||
136
+ typeof value.generation !== "string" ||
137
+ value.generation.length === 0 ||
138
+ typeof value.pid !== "number" ||
139
+ typeof value.startedAt !== "string" ||
140
+ typeof value.token !== "string" ||
141
+ value.token.length === 0) {
142
+ throw new Error(`central MCP marker is malformed: ${path}`);
143
+ }
144
+ try {
145
+ return {
146
+ endpoint: parseCentralMcpEndpoint(value.endpoint),
147
+ generation: value.generation,
148
+ pid: value.pid,
149
+ startedAt: value.startedAt,
150
+ };
151
+ }
152
+ catch {
153
+ throw new Error(`central MCP marker is malformed: ${path}`);
154
+ }
34
155
  }
35
156
  function delay(milliseconds) {
36
157
  return new Promise((resolve) => setTimeout(resolve, milliseconds));
@@ -57,26 +178,96 @@ function configuredCentralEndpoint() {
57
178
  });
58
179
  return endpoint;
59
180
  }
181
+ /** Raw (unstructured) central MCP server output. Read by `h2a logs`, rotated at spawn. */
182
+ export function resolveCentralMcpLogPath() {
183
+ return join(dirname(resolveConfigPath()), "mcp-central.log");
184
+ }
185
+ /**
186
+ * Cap a rotated raw log to its last bound bytes, line-aligned, mode
187
+ * preserved. Reads the tail window positionally — the (possibly huge)
188
+ * rotation is never loaded whole.
189
+ */
190
+ function boundRawLogTail(path) {
191
+ let fd;
192
+ try {
193
+ const size = statSync(path).size;
194
+ if (size <= MAX_CRASH_LOG_BYTES)
195
+ return;
196
+ fd = openSync(path, constants.O_RDONLY | constants.O_NOFOLLOW);
197
+ const tail = Buffer.alloc(MAX_CRASH_LOG_BYTES);
198
+ const start = size - MAX_CRASH_LOG_BYTES;
199
+ for (let offset = 0; offset < tail.length;) {
200
+ const read = readSync(fd, tail, offset, tail.length - offset, start + offset);
201
+ if (read <= 0)
202
+ break;
203
+ offset += read;
204
+ }
205
+ try {
206
+ closeSync(fd);
207
+ }
208
+ catch {
209
+ /* fall through to the truncation below */
210
+ }
211
+ fd = undefined;
212
+ const cut = tail.indexOf(0x0a);
213
+ writeFileSync(path, cut < 0 ? tail : tail.subarray(cut + 1));
214
+ chmodSync(path, 0o600);
215
+ }
216
+ catch {
217
+ /* best-effort: bounding never blocks the spawn below */
218
+ }
219
+ finally {
220
+ if (fd !== undefined) {
221
+ try {
222
+ closeSync(fd);
223
+ }
224
+ catch {
225
+ /* bounding never throws */
226
+ }
227
+ }
228
+ }
229
+ }
60
230
  function centralLogFile() {
61
- const path = join(dirname(resolveConfigPath()), "mcp-central.log");
231
+ const path = resolveCentralMcpLogPath();
62
232
  mkdirSync(dirname(path), { recursive: true });
233
+ // Bounded at spawn: rotate the raw server output instead of growing it
234
+ // forever, and cap the rotation so a long-running server cannot leave an
235
+ // unbounded `.1` behind either. Output written between spawns is still
236
+ // unbounded (only the server could pace that); `h2a logs` shows its tail.
237
+ try {
238
+ if (existsSync(path) && statSync(path).size >= MAX_CRASH_LOG_BYTES) {
239
+ try {
240
+ unlinkSync(`${path}.1`);
241
+ }
242
+ catch { /* missing rotation is fine */ }
243
+ renameSync(path, `${path}.1`);
244
+ boundRawLogTail(`${path}.1`);
245
+ }
246
+ }
247
+ catch { /* rotation is best-effort; the spawn below still proceeds */ }
63
248
  return path;
64
249
  }
65
- async function waitForCentralStart(core, endpoint, spawnFailure) {
250
+ async function waitForCentralStart(paths, endpoint, spawnFailure) {
66
251
  const deadline = Date.now() + CENTRAL_START_TIMEOUT_MS;
67
252
  while (Date.now() < deadline) {
68
253
  const failure = spawnFailure();
69
- if (failure)
254
+ if (failure) {
255
+ // The server child never started: a startup failure, not a child exit.
256
+ appendCrashLog("mcp-server", { event: "startupError", reason: "spawn-failed", detail: failure.message });
70
257
  throw failure;
71
- const ping = await core.centralMcpPing(endpoint, CENTRAL_START_POLL_MS);
258
+ }
259
+ const ping = await centralMcpPing(endpoint, CENTRAL_START_POLL_MS);
72
260
  if (ping.kind === "generation") {
73
- const marker = core.readCentralMcpMarker();
261
+ const marker = readCentralMcpMarker(paths);
74
262
  if (marker?.endpoint === endpoint && marker.generation === ping.generation) {
75
263
  return { endpoint, generation: ping.generation };
76
264
  }
77
265
  }
78
266
  await delay(CENTRAL_START_POLL_MS);
79
267
  }
268
+ // No child exited: the launcher gave up waiting, so `exit` (not
269
+ // `childExit`) keeps the record honest.
270
+ appendCrashLog("mcp-server", { event: "exit", reason: "readiness-timeout", detail: endpoint });
80
271
  throw new Error(`central MCP did not become ready at ${endpoint} within ${CENTRAL_START_TIMEOUT_MS}ms`);
81
272
  }
82
273
  /**
@@ -88,17 +279,19 @@ export async function ensureCentralMcp(options = {}) {
88
279
  const endpoint = configuredCentralEndpoint();
89
280
  if (!endpoint)
90
281
  return undefined;
91
- const core = await loadCoreCentralMcp();
92
- const marker = core.readCentralMcpMarker();
282
+ const paths = options.paths ?? {};
283
+ const marker = readCentralMcpMarker(paths);
93
284
  if (marker) {
94
- const ping = await core.centralMcpPing(marker.endpoint);
285
+ const ping = await centralMcpPing(marker.endpoint);
95
286
  if (ping.kind === "ambiguous") {
287
+ appendCrashLog("mcp-server", { event: "refusal", instanceId: marker.generation, reason: "ambiguous-liveness", detail: marker.endpoint });
96
288
  throw new Error(`central MCP liveness at ${marker.endpoint} is ambiguous; refusing to start another server`);
97
289
  }
98
290
  if (ping.kind === "generation") {
99
291
  if (marker.endpoint === endpoint && ping.generation === marker.generation) {
100
292
  return { endpoint, generation: marker.generation };
101
293
  }
294
+ appendCrashLog("mcp-server", { event: "refusal", instanceId: marker.generation, reason: "marker-listener-mismatch", detail: marker.endpoint });
102
295
  throw new Error(`central MCP marker/listener mismatch (${marker.endpoint}, generation ${marker.generation}); refusing to replace a live server`);
103
296
  }
104
297
  }
@@ -112,19 +305,33 @@ export async function ensureCentralMcp(options = {}) {
112
305
  stdio: ["ignore", logFd, logFd],
113
306
  env: {
114
307
  ...process.env,
115
- [core.H2A_MCP_CENTRAL_ENV]: "1",
116
- [core.H2A_MCP_CENTRAL_ENDPOINT_ENV]: endpoint,
308
+ [H2A_MCP_CENTRAL_ENV]: "1",
309
+ [H2A_MCP_CENTRAL_ENDPOINT_ENV]: endpoint,
117
310
  },
118
311
  });
119
312
  child.once("error", (error) => {
120
313
  spawnError = error;
121
314
  });
315
+ // A post-readiness crash leaves a structured record while this launcher
316
+ // is still alive. (Once the launcher exits, only the raw server output
317
+ // in mcp-central.log witnesses a later death — see `h2a logs`.)
318
+ child.once("exit", (code, signal) => {
319
+ if (code === 0 || (code === null && signal === null))
320
+ return;
321
+ appendCrashLog("mcp-server", {
322
+ event: "childExit",
323
+ reason: "server-exit",
324
+ ...(typeof code === "number" ? { exitCode: code } : {}),
325
+ ...(typeof signal === "string" && signal.length > 0 ? { signal } : {}),
326
+ detail: `central MCP server exited${typeof signal === "string" && signal.length > 0 ? ` on ${signal}` : ""}`,
327
+ });
328
+ });
122
329
  child.unref();
123
330
  }
124
331
  finally {
125
332
  closeSync(logFd);
126
333
  }
127
- return waitForCentralStart(core, endpoint, () => spawnError);
334
+ return waitForCentralStart(paths, endpoint, () => spawnError);
128
335
  }
129
336
  function profileMcpConfig(profile, cwd) {
130
337
  switch (profile) {
@@ -148,33 +355,9 @@ function profileMcpConfig(profile, cwd) {
148
355
  return undefined;
149
356
  }
150
357
  }
151
- function coherentHostSetupReport(host) {
152
- return {
153
- ok: true,
154
- repair: false,
155
- dryRun: false,
156
- sessionFreshnessGuarantee: "runtime central MCP writer",
157
- nativeCommandFailureLimit: "runtime central MCP writer",
158
- version: "runtime-central-mcp",
159
- hosts: [{
160
- host,
161
- ok: true,
162
- findings: [],
163
- diagnostics: [],
164
- changed: [],
165
- preserved: [],
166
- failures: [],
167
- unverifiable: [],
168
- unrepaired: [],
169
- coherencePaths: [],
170
- plannedActions: [],
171
- repairMarkerPath: "",
172
- }],
173
- };
174
- }
175
- function activateCentralMcpEnvironment(core, endpoint) {
176
- process.env[core.H2A_MCP_CENTRAL_ENV] = "1";
177
- process.env[core.H2A_MCP_CENTRAL_ENDPOINT_ENV] = endpoint;
358
+ function activateCentralMcpEnvironment(endpoint) {
359
+ process.env[H2A_MCP_CENTRAL_ENV] = "1";
360
+ process.env[H2A_MCP_CENTRAL_ENDPOINT_ENV] = endpoint;
178
361
  }
179
362
  function deactivateCentralMcpEnvironment() {
180
363
  delete process.env.H2A_MCP_CENTRAL;
@@ -197,25 +380,46 @@ function restoreHostConfig(path, snapshot) {
197
380
  function errorMessage(error) {
198
381
  return error instanceof Error ? error.message : String(error);
199
382
  }
383
+ /**
384
+ * Render the host config through the core CLI over the `h2a` binary (never an
385
+ * in-process core import). Output stays captured (quiet launch path); a
386
+ * nonzero exit degrades to the per-session sidecar exactly like before. The
387
+ * real installation doctor runs here instead of the former always-ok stub, so
388
+ * a genuinely incoherent host setup now surfaces as degraded-with-reason
389
+ * rather than a masked central — still fail-closed, never a crash.
390
+ */
391
+ function writeHostConfig(target, cwd) {
392
+ let status = null;
393
+ let spawnError;
394
+ try {
395
+ const result = spawnSync("h2a", ["host", "setup", "--host", target.host, "--write", target.path], { cwd, stdio: "pipe", encoding: "utf8", timeout: CENTRAL_HOST_SETUP_TIMEOUT_MS });
396
+ status = result.status;
397
+ spawnError = result.error;
398
+ }
399
+ catch (error) {
400
+ spawnError = error instanceof Error ? error : new Error(String(error));
401
+ }
402
+ if (status !== 0) {
403
+ throw new Error(`central MCP could not write the ${target.host} host config at ${target.path}` +
404
+ (spawnError ? ` (${spawnError.message})` : ""));
405
+ }
406
+ }
200
407
  /** Ensure central MCP and rewrite the launched host's existing MCP config path. */
201
408
  export async function prepareCentralMcpForLaunch(options) {
202
409
  let hostConfig;
203
410
  try {
204
- const central = await ensureCentralMcp({ ...(options.root ? { root: options.root } : {}) });
411
+ const central = await ensureCentralMcp({
412
+ ...(options.root ? { root: options.root } : {}),
413
+ ...(options.paths ? { paths: options.paths } : {}),
414
+ });
205
415
  if (!central)
206
416
  return undefined;
207
- const core = await loadCoreCentralMcp();
208
417
  const target = profileMcpConfig(options.profile, options.cwd);
209
418
  if (target)
210
419
  hostConfig = { path: target.path, snapshot: captureHostConfig(target.path) };
211
- activateCentralMcpEnvironment(core, central.endpoint);
212
- if (target) {
213
- const quiet = { stdout: { write: () => true }, stderr: { write: () => true }, cwd: () => options.cwd };
214
- const code = core.runCli(["host", "setup", "--host", target.host, "--write", target.path], quiet, { doctorHostInstallations: () => coherentHostSetupReport(target.host) });
215
- if (code !== 0) {
216
- throw new Error(`central MCP could not write the ${target.host} host config at ${target.path}`);
217
- }
218
- }
420
+ activateCentralMcpEnvironment(central.endpoint);
421
+ if (target)
422
+ writeHostConfig(target, options.cwd);
219
423
  return { status: "central", ...central };
220
424
  }
221
425
  catch (error) {
@@ -238,7 +442,7 @@ export async function prepareCentralMcpForRestore(options = {}) {
238
442
  const central = await ensureCentralMcp(options);
239
443
  if (!central)
240
444
  return undefined;
241
- activateCentralMcpEnvironment(await loadCoreCentralMcp(), central.endpoint);
445
+ activateCentralMcpEnvironment(central.endpoint);
242
446
  return { status: "central", ...central };
243
447
  }
244
448
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"central-mcp.js","sourceRoot":"","sources":["../src/central-mcp.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EACL,SAAS,EACT,SAAS,EACT,UAAU,EACV,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACjC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACjC,MAAM,wBAAwB,GAAG,MAAM,CAAC;AACxC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAsClC,IAAI,cAAmD,CAAC;AAExD,SAAS,kBAAkB;IACzB,6EAA6E;IAC7E,yEAAyE;IACzE,sEAAsE;IACtE,MAAM,WAAW,GAAW,gBAAgB,CAAC;IAC7C,cAAc,KAAK,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QACnD,MAAM,SAAS,GAAG,IAA+B,CAAC;QAClD,IACE,OAAO,SAAS,CAAC,mBAAmB,KAAK,QAAQ;YACjD,OAAO,SAAS,CAAC,4BAA4B,KAAK,QAAQ;YAC1D,OAAO,SAAS,CAAC,cAAc,KAAK,UAAU;YAC9C,OAAO,SAAS,CAAC,oBAAoB,KAAK,UAAU;YACpD,OAAO,SAAS,CAAC,MAAM,KAAK,UAAU,EACtC,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;QACpF,CAAC;QACD,OAAO,SAA2B,CAAC;IACrC,CAAC,CAAC,CAAC;IACH,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAS,KAAK,CAAC,YAAoB;IACjC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,sBAAsB;IAC7B,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;IAC7F,CAAC;IACD,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,CAAC,CAAC,UAAU,GAAG,iBAAiB,CAAC,GAAG,iBAAiB,CAAC,GAAG,iBAAiB,CAAC;IAC1F,OAAO,oBAAoB,iBAAiB,GAAG,MAAM,MAAM,CAAC;AAC9D,CAAC;AAED,SAAS,yBAAyB;IAChC,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;IAC3B,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO;QAAE,OAAO,SAAS,CAAC;IAC5C,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC;IACtD,MAAM,QAAQ,GAAG,sBAAsB,EAAE,CAAC;IAC1C,YAAY,CAAC;QACX,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,OAAO,EAAE,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE;KACtC,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,cAAc;IACrB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,EAAE,iBAAiB,CAAC,CAAC;IACnE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,IAAoB,EACpB,QAAgB,EAChB,YAAqC;IAErC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,wBAAwB,CAAC;IACvD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;QAC/B,IAAI,OAAO;YAAE,MAAM,OAAO,CAAC;QAC3B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;QACxE,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC3C,IAAI,MAAM,EAAE,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC3E,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;YACnD,CAAC;QACH,CAAC;QACD,MAAM,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,uCAAuC,QAAQ,WAAW,wBAAwB,IAAI,CAAC,CAAC;AAC1G,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,UAAuC,EAAE;IAEzC,MAAM,QAAQ,GAAG,yBAAyB,EAAE,CAAC;IAC7C,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChC,MAAM,IAAI,GAAG,MAAM,kBAAkB,EAAE,CAAC;IACxC,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC3C,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACxD,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,2BAA2B,MAAM,CAAC,QAAQ,iDAAiD,CAAC,CAAC;QAC/G,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC/B,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,CAAC,UAAU,EAAE,CAAC;gBAC1E,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;YACrD,CAAC;YACD,MAAM,IAAI,KAAK,CACb,yCAAyC,MAAM,CAAC,QAAQ,gBAAgB,MAAM,CAAC,UAAU,sCAAsC,CAChI,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IAC5C,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC1B,IAAI,UAA6B,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,KAAK,CACjB,KAAK,EACL,CAAC,mBAAmB,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EACxE;YACE,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC;YAC/B,GAAG,EAAE;gBACH,GAAG,OAAO,CAAC,GAAG;gBACd,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,GAAG;gBAC/B,CAAC,IAAI,CAAC,4BAA4B,CAAC,EAAE,QAAQ;aAC9C;SACF,CACF,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC5B,UAAU,GAAG,KAAK,CAAC;QACrB,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,SAAS,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe,EAAE,GAAW;IACpD,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,QAAQ,CAAC;QACd,KAAK,aAAa;YAChB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,CAAC;QAC1D,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU;gBACnC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC;gBAC7C,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;YAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;YACjG,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACpE,CAAC;QACD,KAAK,QAAQ,CAAC;QACd,KAAK,YAAY;YACf,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,eAAe,CAAC,EAAE,CAAC;QACzE,KAAK,KAAK,CAAC;QACX,KAAK,aAAa;YAChB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,CAAC,EAAE,CAAC;QACxF;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAY;IAC3C,OAAO;QACL,EAAE,EAAE,IAAI;QACR,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,KAAK;QACb,yBAAyB,EAAE,4BAA4B;QACvD,yBAAyB,EAAE,4BAA4B;QACvD,OAAO,EAAE,qBAAqB;QAC9B,KAAK,EAAE,CAAC;gBACN,IAAI;gBACJ,EAAE,EAAE,IAAI;gBACR,QAAQ,EAAE,EAAE;gBACZ,WAAW,EAAE,EAAE;gBACf,OAAO,EAAE,EAAE;gBACX,SAAS,EAAE,EAAE;gBACb,QAAQ,EAAE,EAAE;gBACZ,YAAY,EAAE,EAAE;gBAChB,UAAU,EAAE,EAAE;gBACd,cAAc,EAAE,EAAE;gBAClB,cAAc,EAAE,EAAE;gBAClB,gBAAgB,EAAE,EAAE;aACrB,CAAC;KACH,CAAC;AACJ,CAAC;AAED,SAAS,6BAA6B,CAAC,IAAoB,EAAE,QAAgB;IAC3E,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,GAAG,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,4BAA4B,CAAC,GAAG,QAAQ,CAAC;AAC5D,CAAC;AAED,SAAS,+BAA+B;IACtC,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IACnC,OAAO,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;AAC9C,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,OAAO,UAAU,CAAC,IAAI,CAAC;QACrB,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;QACxD,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACxB,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY,EAAE,QAA4B;IACnE,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpB,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACxD,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACzB,CAAC;SAAM,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,UAAU,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,mFAAmF;AACnF,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,OAI/C;IACA,IAAI,UAAsE,CAAC;IAC3E,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5F,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAC/B,MAAM,IAAI,GAAG,MAAM,kBAAkB,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9D,IAAI,MAAM;YAAE,UAAU,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACzF,6BAA6B,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,KAAK,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACvG,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CACtB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,EAChE,KAAK,EACL,EAAE,uBAAuB,EAAE,GAAG,EAAE,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CACxE,CAAC;YACF,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,mCAAmC,MAAM,CAAC,IAAI,mBAAmB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YAClG,CAAC;QACH,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,+BAA+B,EAAE,CAAC;QAClC,IAAI,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC;gBACH,iBAAiB,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC1D,CAAC;YAAC,OAAO,aAAa,EAAE,CAAC;gBACvB,MAAM,IAAI,mDAAmD,YAAY,CAAC,aAAa,CAAC,EAAE,CAAC;YAC7F,CAAC;QACH,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;IACxC,CAAC;AACH,CAAC;AAED,2FAA2F;AAC3F,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,UAAuC,EAAE;IAEzC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAC/B,6BAA6B,CAAC,MAAM,kBAAkB,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC5E,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,+BAA+B,EAAE,CAAC;QAClC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;IAC7D,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"central-mcp.js","sourceRoot":"","sources":["../src/central-mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import type { ClaudeCodeAccessProjection } from "./claude-seat-mesh-contract.js";
2
+ export interface ClaudeRunSandbox {
3
+ readonly runId: string;
4
+ readonly runDir: string;
5
+ readonly homeDir: string;
6
+ readonly configDir: string;
7
+ readonly cwdDir: string;
8
+ readonly tmpDir: string;
9
+ readonly credentialPath: string;
10
+ readonly settingsPath: string;
11
+ readonly mcpConfigPath: string;
12
+ }
13
+ export declare const ALLOWED_ENV_VARS: readonly ["PATH", "LANG", "LC_ALL", "HOME", "TMPDIR", "XDG_CONFIG_HOME", "CLAUDE_CONFIG_DIR"];
14
+ /**
15
+ * Resolve the dedicated private runtime root outside workspaces and backups.
16
+ * Only per-user bases are candidates (XDG_RUNTIME_DIR, then /run/user/<euid>
17
+ * on Linux). Shared temporary roots (/dev/shm, tmpdir()) are never used;
18
+ * when no per-user base is available resolution fails closed.
19
+ */
20
+ export declare function resolvePrivateRuntimeRoot(customRoot?: string): string;
21
+ /**
22
+ * Creates isolated 0700 run/config/home/cwd directories and an exclusive 0600 .credentials.json.
23
+ * Writes access token only; real provider expiry preserved; NO refresh token.
24
+ */
25
+ export declare function createClaudeRunSandbox(options: {
26
+ readonly access: ClaudeCodeAccessProjection;
27
+ readonly runId?: string;
28
+ readonly rootDir?: string;
29
+ }): ClaudeRunSandbox;
30
+ /**
31
+ * Record child PID and start time in the run's run-meta.json so orphan sweeps
32
+ * can identify and reap detached child process trees.
33
+ */
34
+ export declare function recordChildPidInSandbox(sandbox: ClaudeRunSandbox, childPid: number): void;
35
+ /**
36
+ * Construct an environment allowlist; strips all ambient auth, proxies, traces, and overrides.
37
+ * PATH is never inherited: a fixed minimal value (plus the binary directory
38
+ * when known) replaces whatever the parent carried.
39
+ */
40
+ export declare function buildIsolatedEnvironment(sandbox: ClaudeRunSandbox, baseEnv?: NodeJS.ProcessEnv, options?: {
41
+ readonly binaryPath?: string;
42
+ }): Record<string, string>;
43
+ /**
44
+ * Verify that the child process did not rewrite credentials, change auth, or write back a refresh token.
45
+ */
46
+ export declare function verifyCredentialNotRewritten(sandbox: ClaudeRunSandbox, expectedAccess: ClaudeCodeAccessProjection): boolean;
47
+ /**
48
+ * Content-blind cleanup of the dedicated sandbox directory without following symlinks.
49
+ * Throws a static error when the run directory persists: callers must block
50
+ * any success terminal on cleanup failure (no success without custody release).
51
+ */
52
+ export declare function cleanClaudeRunSandbox(sandbox: ClaudeRunSandbox): void;
53
+ //# sourceMappingURL=claude-code-cli-isolation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code-cli-isolation.d.ts","sourceRoot":"","sources":["../src/claude-code-cli-isolation.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAEjF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,eAAO,MAAM,gBAAgB,+FAQnB,CAAC;AA8DX;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CA0BrE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE;IAC9C,QAAQ,CAAC,MAAM,EAAE,0BAA0B,CAAC;IAC5C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B,GAAG,gBAAgB,CA4EnB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAiBzF;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,gBAAgB,EACzB,OAAO,GAAE,MAAM,CAAC,UAAwB,EACxC,OAAO,GAAE;IAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GAC7C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBxB;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,gBAAgB,EACzB,cAAc,EAAE,0BAA0B,GACzC,OAAO,CA0BT;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAWrE"}