@mcsherrylabs/evolver-mcp 0.9.4 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/install.js CHANGED
@@ -1,23 +1,16 @@
1
- // Frictionless install: start the LOCAL devnet-follower node as a Docker container, wait for it
2
- // to be healthy, then bootstrap the SEPARATE agent identity against it and print the registration.
3
- //
4
- // The node is `deploy/docker-compose.yml` (a non-genesis follower that joins + syncs devnet). The
5
- // node claims its OWN host identity (`node-join.sh` → faucet), distinct from the agent identity the
6
- // bootstrap mints here. Content is read/posted through the local node's listener (`:8450`), never
7
- // devnet directly — devnet is only the faucet origin for the node's first-boot claim.
8
- //
9
- // Reachability (B1): the compose publishes the node's 8440/8450 loopback-only, so THIS host-side
10
- // process reaches `http://127.0.0.1:8440` / `:8450`. The bootstrap then derives
11
- // `EVOLVER_CONTENT_URL` from the node's content port (see bootstrap's local-target derivation).
12
- //
13
- // PORTABILITY: the node's config is BAKED into its image (deploy/Dockerfile), not bind-mounted.
14
- // `docker compose` resolves a bind mount's host path in the DAEMON'S filesystem, which runs on the
15
- // host; `install` may run inside a rig dev container whose `/workspace` is a different directory
16
- // than the host's. `--build` removes the path entirely, so `install` works from the host or any
17
- // container. The MCP itself is a stdio server launched by Claude wherever Claude runs; it reaches
18
- // the node on the shared loopback, so `claude mcp add` works on either side identically.
1
+ // Managed install composition: one fixed node, one persistent zero-module shared SDK processor,
2
+ // and arbitrarily many thin stdio readers/control clients. Fresh initialization requires --new
3
+ // and provably fresh owned resources. Restarts/upgrades never seed subscription preferences.
4
+ // Node keys/database, subscription directory, processor state and private operator control socket
5
+ // have distinct mounts. A rig/remote daemon must explicitly map its host and client socket paths;
6
+ // baked node config cannot remove that Unix-socket filesystem requirement. No inferred authority.
19
7
  import { spawnSync } from "node:child_process";
20
- import { existsSync, statSync } from "node:fs";
8
+ import { existsSync, statSync, lstatSync, mkdirSync, chmodSync, readFileSync, writeFileSync, openSync, fsyncSync, closeSync, renameSync, unlinkSync } from "node:fs";
9
+ import { createHash, randomBytes } from "node:crypto";
10
+ import { homedir } from "node:os";
11
+ import { isValidNodeId } from "@mcsherrylabs/evolver-client";
12
+ import { ProcessorClient, nodeObserver } from "@mcsherrylabs/evolver-client/processor-client";
13
+ import { resolveConfig } from "./config.js";
21
14
  import { dirname, join, resolve } from "node:path";
22
15
  import { fileURLToPath } from "node:url";
23
16
  import { runBootstrap } from "./bootstrap.js";
@@ -74,7 +67,6 @@ const LOCAL_HTTP_PORT = () => process.env.EVOLVER_HOST_HTTP_PORT?.trim() || "844
74
67
  /** Host-published content-listener port (matches `EVOLVER_HOST_CONTENT_PORT`). */
75
68
  const LOCAL_CONTENT_PORT = () => process.env.EVOLVER_HOST_CONTENT_PORT?.trim() || "8450";
76
69
  const LOCAL_CHAIN_URL = () => `http://${LOCAL_NODE_HOST}:${LOCAL_HTTP_PORT()}`;
77
- const HEALTH_PATH = "/api/explorer/blocks?limit=1";
78
70
  export { LOCAL_CHAIN_URL, LOCAL_CONTENT_PORT, LOCAL_HTTP_PORT };
79
71
  /** The WELL-FUNDED faucet origin that sponsors the AGENT identity claim. The node the install
80
72
  * starts is a fresh follower with an empty wallet, so it cannot sponsor the claim (it would
@@ -189,8 +181,107 @@ export function composePathFor(env, distDir) {
189
181
  export function distDirFor(importMetaUrl) {
190
182
  return dirname(fileURLToPath(importMetaUrl));
191
183
  }
192
- /** Spin up the node, wait healthy, then delegate to the bootstrap for the agent identity. */
193
- export async function runInstall(argv, env) {
184
+ const commandDefault = (command, args, env) => spawnSync(command, args, { encoding: "utf8", env });
185
+ const failInstall = (output) => ({ exitCode: 1, output: `install: ${output}\n`, toStderr: true });
186
+ function positiveId(raw, field) {
187
+ const n = Number(raw);
188
+ if (!Number.isSafeInteger(n) || n < 1 || n > 2_147_483_647)
189
+ throw new Error(`${field} requires an explicit non-root positive uid/gid`);
190
+ return n;
191
+ }
192
+ function port(raw) {
193
+ if (!/^[1-9][0-9]{0,4}$/.test(raw) || Number(raw) > 65535)
194
+ throw new Error("invalid managed host port");
195
+ return raw;
196
+ }
197
+ function privateDirectory(path, uid, gid, create) {
198
+ if (!path.startsWith("/"))
199
+ throw new Error("managed directories must be absolute");
200
+ if (create && !existsSync(path))
201
+ mkdirSync(path, { recursive: true, mode: 0o750 });
202
+ const s = lstatSync(path);
203
+ if (s.isSymbolicLink() || !s.isDirectory() || s.uid !== uid || s.gid !== gid || (s.mode & 0o027) !== 0)
204
+ throw new Error("control directory must be operator-owned, no group writes or access by others (0700/0750)");
205
+ }
206
+ function saveInstallation(file, state, fresh) {
207
+ const text = JSON.stringify(state, null, 2) + "\n";
208
+ // Fresh metadata still uses exclusive creation: never rename over an existing installation.
209
+ // Updates use a private, same-directory name so interrupted saves cannot block later saves.
210
+ const temporary = fresh ? file : `${file}.${randomBytes(16).toString("hex")}.tmp`;
211
+ const fd = openSync(temporary, "wx", 0o600);
212
+ let cleanup = !fresh; // Only remove a temporary that this call exclusively created.
213
+ try {
214
+ try {
215
+ writeFileSync(fd, text);
216
+ fsyncSync(fd);
217
+ }
218
+ finally {
219
+ closeSync(fd);
220
+ }
221
+ if (!fresh) {
222
+ renameSync(temporary, file);
223
+ cleanup = false;
224
+ }
225
+ const dir = openSync(dirname(file), "r");
226
+ try {
227
+ fsyncSync(dir);
228
+ }
229
+ finally {
230
+ closeSync(dir);
231
+ }
232
+ }
233
+ finally {
234
+ if (cleanup) {
235
+ try {
236
+ unlinkSync(temporary);
237
+ }
238
+ catch { /* Preserve the save error; an orphan cannot block future saves. */ }
239
+ }
240
+ }
241
+ }
242
+ /** Verify process health separately from ACTIVE binding/collection readiness. These are reads,
243
+ * never node pulls. A generic HTTP200 or a desired file alone cannot unlock generated pairing. */
244
+ export async function waitManagedReady(state, timeoutMs, deps = {}) {
245
+ const chain = `http://${LOCAL_NODE_HOST}:${state.httpPort}`;
246
+ const inboxUrl = `http://${LOCAL_NODE_HOST}:${state.inboxPort}`;
247
+ const pairing = { binding: state.binding, inboxUrl, controlSocketPath: join(state.controlClientDir, "control.sock"), timeoutMs: 5000 };
248
+ const client = deps.controlClient?.(pairing) ?? new ProcessorClient(pairing);
249
+ const observe = () => deps.observe ? deps.observe(chain, state.binding) : nodeObserver({ baseUrl: chain, binding: state.binding, timeoutMs: 5000 })();
250
+ const read = deps.fetch ?? fetch;
251
+ const sleep = deps.sleep ?? (ms => new Promise(resolve => setTimeout(resolve, ms)));
252
+ const deadline = Date.now() + timeoutMs;
253
+ let reason = "processor not ready";
254
+ do {
255
+ try {
256
+ const node = await observe();
257
+ if (node.binding.chainId !== state.binding.chainId || node.binding.nodeId !== state.binding.nodeId || !node.processing)
258
+ throw new Error("managed node binding/processing mismatch");
259
+ for (const path of ["/health", "/ready"]) {
260
+ const response = await read(inboxUrl + path, { redirect: "error", signal: AbortSignal.timeout(5000) });
261
+ if (response.status !== 200)
262
+ throw new Error(`${path} HTTP ${response.status}`);
263
+ const body = await response.json();
264
+ if (body.binding?.chainId !== state.binding.chainId || body.binding.nodeId !== state.binding.nodeId ||
265
+ (path === "/health" ? body.process !== "running" : body.collectionReady !== true))
266
+ throw new Error(`${path} invalid binding/readiness`);
267
+ }
268
+ const control = await client.subscriptions();
269
+ if (control.outcome !== "active")
270
+ throw new Error(`subscriptions ${control.outcome}: ${control.reason}`);
271
+ await client.inboxSummary(); // SDK validates independent read-origin binding too.
272
+ return { ...pairing, timeoutMs: 65000 };
273
+ }
274
+ catch (e) {
275
+ reason = e instanceof Error ? e.message : "managed readiness failed";
276
+ }
277
+ if (Date.now() >= deadline)
278
+ break;
279
+ await sleep(Math.min(1000, Math.max(0, deadline - Date.now())));
280
+ } while (Date.now() <= deadline);
281
+ throw new Error(`managed process health/collection readiness not verified: ${reason}`);
282
+ }
283
+ /** Start exactly one paired node + persistent SDK processor, then bootstrap the agent reader. */
284
+ export async function runInstall(argv, env, deps = {}) {
194
285
  const composeFile = composePathFor(env, dirname(fileURLToPath(import.meta.url)));
195
286
  if (!existsSync(composeFile)) {
196
287
  return {
@@ -208,76 +299,161 @@ export async function runInstall(argv, env) {
208
299
  // Decide WHERE this node lives: default project `evolver-mcp` on 8440/8450; `--new` auto-picks the
209
300
  // next project name + non-clashing host ports from what is already deployed. Explicit env vars
210
301
  // (EVOLVER_HOST_HTTP_PORT / EVOLVER_HOST_CONTENT_PORT / COMPOSE_PROJECT_NAME) always override.
211
- const existing = fresh ? (env.EVOLVER_INSTALL_PROJECTS?.split(",").map((s) => s.trim()).filter(Boolean) ?? listEvolverMcpProjects()) : [];
212
- const assignment = assignNode(fresh, existing, env.EVOLVER_HOST_HTTP_PORT, env.EVOLVER_HOST_CONTENT_PORT);
213
- // A pinned COMPOSE_PROJECT_NAME (operator-set) wins over the auto-picked project.
214
- const projectName = env.COMPOSE_PROJECT_NAME?.trim() || assignment.project;
215
- // 1. Start the follower node (claims its own identity on devnet, then syncs from block 0).
216
- // `--build` builds the config-bearing image (deploy/Dockerfile) on first use; the config is
217
- // baked in, so no host bind-mount and no checkout-path dependency. The project name + host
218
- // ports are the SAME values the compose file consumes, so a second node is fully self-contained.
219
- const up = spawnSync("docker", ["compose", "-f", composeFile, "up", "-d", "--build", "node"], {
220
- encoding: "utf8",
221
- env: {
222
- ...process.env,
223
- ...env,
224
- COMPOSE_PROJECT_NAME: projectName,
225
- EVOLVER_HOST_HTTP_PORT: assignment.httpPort,
226
- EVOLVER_HOST_CONTENT_PORT: assignment.contentPort,
227
- },
228
- });
229
- if (up.status !== 0) {
230
- return {
231
- exitCode: 1,
232
- toStderr: true,
233
- output: `install: docker compose up -d node failed:\n${up.stderr || up.stdout}`,
234
- };
235
- }
236
- // 2. Wait for the node to answer its chain API before bootstrapping against it.
237
- const devHttpPort = env.EVOLVER_HOST_HTTP_PORT?.trim() || assignment.httpPort;
238
- const healthUrl = env.EVOLVER_INSTALL_HEALTH_URL?.trim() || `http://${LOCAL_NODE_HOST}:${devHttpPort}${HEALTH_PATH}`;
239
- const timeoutMs = Number(env.EVOLVER_INSTALL_TIMEOUT_MS ?? "120000");
240
- const ok = await waitHealthy(healthUrl, timeoutMs);
241
- if (!ok) {
242
- const logs = spawnSync("docker", ["compose", "-f", composeFile, "logs", "--tail", "40", "node"], {
243
- encoding: "utf8",
244
- env: { ...process.env, ...env, COMPOSE_PROJECT_NAME: projectName },
245
- });
246
- return {
247
- exitCode: 1,
248
- toStderr: true,
249
- output: `install: node did not become healthy at ${healthUrl} within ${timeoutMs}ms.\nnode logs:\n${logs.stdout || logs.stderr || "(no logs)"}\n`,
250
- };
251
- }
252
- // 3. Bootstrap the SEPARATE agent identity against the local node. `--target local` +
253
- // EVOLVER_NODE=http://127.0.0.1:<httpPort> makes the bootstrap derive
254
- // EVOLVER_CONTENT_URL=http://127.0.0.1:<contentPort> (the local node's content listener). Both
255
- // derive from the SAME assignment the compose received, so a `--new` node bootstraps against its
256
- // own non-clashing ports with no operator input.
257
- const devContentPort = env.EVOLVER_HOST_CONTENT_PORT?.trim() || assignment.contentPort;
258
- // Entry command (registration laziness): prefer a FIXED global bin (instant) over `npx -y …`,
259
- // which cold-resolves ~30s+ and blows the Claude handshake timeout on first connect. This
260
- // OVERRIDES the `npx` default cli.ts injected, so the printed `claude mcp add` names `evolver-mcp`
261
- // directly. `--keep-npx` (or an explicit EVOLVER_MCP_ENTRY_COMMAND via the env) declines the global
262
- // install and keeps the npx form verbatim.
263
- const wantsNpx = argv.includes("--keep-npx") || env.EVOLVER_MCP_ENTRY_COMMAND?.includes("npx");
264
- let entryCommand;
265
- if (env.EVOLVER_MCP_ENTRY_COMMAND && env.EVOLVER_MCP_ENTRY_COMMAND !== `npx -y ${PACKAGE_NAME}`) {
266
- // Operator already chose a non-default entry command; honor it exactly.
267
- entryCommand = env.EVOLVER_MCP_ENTRY_COMMAND;
268
- }
269
- else if (wantsNpx) {
270
- entryCommand = `npx -y ${PACKAGE_NAME}`;
302
+ const command = deps.command ?? commandDefault;
303
+ let state;
304
+ let deploymentEnv;
305
+ let stateFile;
306
+ let pairing;
307
+ try {
308
+ const timeoutMs = Number(env.EVOLVER_INSTALL_TIMEOUT_MS ?? "120000");
309
+ if (!Number.isSafeInteger(timeoutMs) || timeoutMs < 1 || timeoutMs > 600000)
310
+ throw new Error("invalid install readiness deadline");
311
+ const chosenEntry = env.EVOLVER_MCP_ENTRY_COMMAND;
312
+ if (argv.includes("--keep-npx") || (chosenEntry?.includes("npx") && chosenEntry !== `npx -y ${PACKAGE_NAME}`))
313
+ throw new Error("managed candidate requires a fixed current candidate entry command, not unversioned npx; release pins remain unresolved");
314
+ let existing = [];
315
+ if (fresh) {
316
+ if (env.EVOLVER_INSTALL_PROJECTS !== undefined)
317
+ existing = env.EVOLVER_INSTALL_PROJECTS.split(",").map(s => s.trim()).filter(Boolean);
318
+ else {
319
+ const listing = command("docker", ["compose", "ls", "-a", "--format", "json"], { ...process.env, ...env });
320
+ if (listing.status !== 0)
321
+ throw new Error("cannot inspect existing compose projects; refusing fresh-resource assumption");
322
+ const rows = JSON.parse(listing.stdout ?? "");
323
+ if (!Array.isArray(rows) || rows.some(row => !row || typeof row.Name !== "string"))
324
+ throw new Error("invalid compose project inventory");
325
+ existing = rows.map(row => row.Name);
326
+ }
327
+ }
328
+ const assignment = assignNode(fresh, existing, env.EVOLVER_HOST_HTTP_PORT, env.EVOLVER_HOST_CONTENT_PORT);
329
+ const projectName = env.COMPOSE_PROJECT_NAME?.trim() || assignment.project;
330
+ if (!/^[a-z0-9][a-z0-9_-]{0,44}$/.test(projectName))
331
+ throw new Error("invalid managed compose project name");
332
+ const target = rest.findIndex(a => a === "--target");
333
+ if ((target >= 0 && rest[target + 1] !== "local") || rest.some(a => a.startsWith("--target=") && a !== "--target=local"))
334
+ throw new Error("managed install requires --target local; independent devnet uses --bootstrap and remains unmanaged");
335
+ const stateDir = env.EVOLVER_INSTALL_STATE_DIR ?? join(env.HOME ?? homedir(), ".local", "state", "evolver-mcp", "installations", projectName);
336
+ stateFile = join(stateDir, "deployment.json");
337
+ if (existsSync(stateFile)) {
338
+ if (fresh)
339
+ throw new Error("--new refuses pre-existing installation metadata/resources");
340
+ if (lstatSync(stateFile).isSymbolicLink())
341
+ throw new Error("refusing symlinked deployment metadata");
342
+ state = JSON.parse(readFileSync(stateFile, "utf8"));
343
+ if (state.version !== 1 || state.project !== projectName || !["pending", "attempted", "complete"].includes(state.initialization))
344
+ throw new Error("invalid saved managed installation");
345
+ if ((env.EVOLVER_CHAIN_ID && env.EVOLVER_CHAIN_ID !== state.binding.chainId) ||
346
+ (env.APP_NODE_ID && env.APP_NODE_ID !== state.binding.nodeId))
347
+ throw new Error("operator binding differs from saved node/genesis; refusing automatic re-pairing");
348
+ if (state.initialization === "attempted")
349
+ throw new Error("fresh initialization was interrupted/failed; inspect owned resources, never automatically reseed");
350
+ for (const [key, saved] of [["EVOLVER_CONTROL_HOST_DIR", state.controlHostDir], ["EVOLVER_CONTROL_CLIENT_DIR", state.controlClientDir],
351
+ ["EVOLVER_HOST_HTTP_PORT", state.httpPort], ["EVOLVER_HOST_CONTENT_PORT", state.contentPort], ["EVOLVER_HOST_INBOX_PORT", state.inboxPort]]) {
352
+ if (env[key] && env[key] !== saved)
353
+ throw new Error(`${key} differs from saved installation; explicit topology changes require operator reconciliation`);
354
+ }
355
+ }
356
+ else {
357
+ if (!fresh)
358
+ throw new Error("no managed installation metadata; use install --new for fresh owned resources. Existing host/devnet installs are unmanaged; no valued-state migration");
359
+ if (existing.includes(projectName))
360
+ throw new Error("fresh project already exists; refusing to adopt its state");
361
+ const volumes = command("docker", ["volume", "ls", "--filter", `label=com.docker.compose.project=${projectName}`, "--format", "{{.Name}}"], { ...process.env, ...env });
362
+ if (volumes.status !== 0 || volumes.stdout?.trim())
363
+ throw new Error("cannot prove fresh project volumes are absent; refusing initialization/adoption");
364
+ const clientDir = env.EVOLVER_CONTROL_CLIENT_DIR ?? join(stateDir, "control");
365
+ if ((env.EVOLVER_CONTROL_HOST_DIR === undefined) !== (env.EVOLVER_CONTROL_CLIENT_DIR === undefined))
366
+ throw new Error("cross-filesystem/rig installs must explicitly supply BOTH control daemon-host and client directories");
367
+ state = { version: 1, project: projectName,
368
+ binding: { chainId: env.EVOLVER_CHAIN_ID ?? "", nodeId: env.APP_NODE_ID ?? `evolvermcpnode${randomBytes(6).toString("hex")}` },
369
+ controlHostDir: env.EVOLVER_CONTROL_HOST_DIR ?? clientDir, controlClientDir: clientDir,
370
+ operatorUid: positiveId(env.EVOLVER_OPERATOR_UID ?? process.getuid?.(), "operator uid"),
371
+ operatorGid: positiveId(env.EVOLVER_OPERATOR_GID ?? process.getgid?.(), "operator gid"),
372
+ dockerGid: positiveId(env.EVOLVER_DOCKER_GID, "Docker socket gid"),
373
+ httpPort: port(assignment.httpPort), contentPort: port(assignment.contentPort),
374
+ inboxPort: port(env.EVOLVER_HOST_INBOX_PORT ?? String(8090 + Number(assignment.httpPort) - 8440)), initialization: "pending" };
375
+ }
376
+ if (!isValidNodeId(state.binding.nodeId))
377
+ throw new Error("saved node id must satisfy node identity creation policy");
378
+ positiveId(state.operatorUid, "operator uid");
379
+ positiveId(state.operatorGid, "operator gid");
380
+ positiveId(state.dockerGid, "Docker gid");
381
+ port(state.httpPort);
382
+ port(state.contentPort);
383
+ port(state.inboxPort);
384
+ const checked = resolveConfig({ identity: "managedInstaller", processor: { binding: state.binding,
385
+ inboxUrl: `http://${LOCAL_NODE_HOST}:${state.inboxPort}`, controlSocketPath: join(state.controlClientDir, "control.sock") } });
386
+ if (!checked.ok)
387
+ throw new Error(checked.error);
388
+ if (!state.controlHostDir.startsWith("/"))
389
+ throw new Error("daemon-host control path must be absolute");
390
+ for (const key of ["EVOLVER_NODE_IMAGE", "EVOLVER_PROCESSOR_SDK_DIR", "EVOLVER_PROCESSOR_SDK_SHA256"]) {
391
+ if (!env[key]?.trim())
392
+ throw new Error(`${key} is required: coordinated candidate artifacts, never registry SDK 0.19.1 fallback`);
393
+ }
394
+ const sha = env.EVOLVER_PROCESSOR_SDK_SHA256;
395
+ if (!/^[0-9a-f]{64}$/.test(sha) || sha.length !== 64)
396
+ throw new Error("invalid exact SDK SHA256");
397
+ const archive = join(env.EVOLVER_PROCESSOR_SDK_DIR, "sdk.tgz");
398
+ if (statSync(archive).size > 64 * 1024 * 1024 || createHash("sha256").update(readFileSync(archive)).digest("hex") !== sha)
399
+ throw new Error("local SDK candidate archive does not match explicit SHA256");
400
+ const chainUrl = `http://${LOCAL_NODE_HOST}:${state.httpPort}`;
401
+ if ((env.EVOLVER_NODE && env.EVOLVER_NODE !== chainUrl) || env.EVOLVER_INSTALL_HEALTH_URL)
402
+ throw new Error("managed installer cannot redirect node binding/health to another topology; use independent --bootstrap for unmanaged nodes");
403
+ deploymentEnv = { ...process.env, ...env, COMPOSE_PROJECT_NAME: projectName,
404
+ APP_NODE_ID: state.binding.nodeId, EVOLVER_CHAIN_ID: state.binding.chainId,
405
+ EVOLVER_MANAGED_NODE_CONTAINER: `${projectName}-node`, EVOLVER_MANAGED_PROCESSOR_CONTAINER: `${projectName}-processor`,
406
+ EVOLVER_MANAGED_NODE_IMAGE: env.EVOLVER_MANAGED_NODE_IMAGE ?? `${projectName}-node:candidate`,
407
+ EVOLVER_PROCESSOR_IMAGE: env.EVOLVER_PROCESSOR_IMAGE ?? `${projectName}-processor:candidate-${sha.slice(0, 12)}`,
408
+ EVOLVER_OPERATOR_UID: String(state.operatorUid), EVOLVER_OPERATOR_GID: String(state.operatorGid), EVOLVER_DOCKER_GID: String(state.dockerGid),
409
+ EVOLVER_CONTROL_HOST_DIR: state.controlHostDir,
410
+ EVOLVER_HOST_HTTP_PORT: state.httpPort, EVOLVER_HOST_CONTENT_PORT: state.contentPort, EVOLVER_HOST_INBOX_PORT: state.inboxPort };
411
+ if (!existsSync(stateFile)) {
412
+ mkdirSync(stateDir, { recursive: true, mode: 0o700 });
413
+ if (lstatSync(stateDir).isSymbolicLink())
414
+ throw new Error("refusing symlinked install state directory");
415
+ chmodSync(stateDir, 0o700);
416
+ privateDirectory(state.controlClientDir, state.operatorUid, state.operatorGid, true);
417
+ saveInstallation(stateFile, state, true);
418
+ }
419
+ privateDirectory(state.controlClientDir, state.operatorUid, state.operatorGid, false);
420
+ const compose = ["compose", "-f", composeFile];
421
+ const build = command("docker", [...compose, "build", "node", "processor"], deploymentEnv);
422
+ if (build.status !== 0)
423
+ throw new Error(`candidate node/processor build failed: ${build.stderr || build.stdout}`);
424
+ if (state.initialization === "pending") {
425
+ // Record intent DURABLY before the sole initialization attempt. A failed/interrupted attempt
426
+ // is never retried from a missing fragment, nor converted to a fresh migration.
427
+ state = { ...state, initialization: "attempted" };
428
+ saveInstallation(stateFile, state, false);
429
+ const init = command("docker", [...compose, "--profile", "initialize-only", "run", "--rm", "--no-deps", "processor-init"], deploymentEnv);
430
+ if (init.status !== 0)
431
+ throw new Error(`explicit fresh SDK initialization failed; no automatic retry/reseed: ${init.stderr || init.stdout}`);
432
+ state = { ...state, initialization: "complete" };
433
+ saveInstallation(stateFile, state, false);
434
+ }
435
+ const up = command("docker", [...compose, "up", "-d", "--no-build", "node", "processor"], deploymentEnv);
436
+ if (up.status !== 0)
437
+ throw new Error(`paired node/processor startup failed: ${up.stderr || up.stdout}`);
438
+ pairing = await waitManagedReady(state, timeoutMs, deps);
271
439
  }
272
- else {
273
- entryCommand = ensureGlobalBin(env);
440
+ catch (e) {
441
+ return failInstall(e instanceof Error ? e.message : "managed installation failed");
274
442
  }
443
+ const devHttpPort = state.httpPort;
444
+ const devContentPort = state.contentPort;
445
+ // Keep the current candidate CLI rather than silently resolving registry/global MCP with an
446
+ // older SDK. --keep-npx was refused before effects; there is no global npm install in this path.
447
+ const chosenEntry = env.EVOLVER_MCP_ENTRY_COMMAND;
448
+ const entryCommand = chosenEntry && chosenEntry !== `npx -y ${PACKAGE_NAME}`
449
+ ? chosenEntry : `${process.execPath} ${join(dirname(fileURLToPath(import.meta.url)), "cli.js")}`;
275
450
  const nodeEnv = {
276
451
  ...process.env,
277
452
  ...env,
278
453
  EVOLVER_NODE: env.EVOLVER_NODE ?? `http://${LOCAL_NODE_HOST}:${devHttpPort}`,
279
454
  EVOLVER_CONTENT_URL: env.EVOLVER_CONTENT_URL ?? `http://${LOCAL_NODE_HOST}:${devContentPort}`,
280
455
  EVOLVER_MCP_ENTRY_COMMAND: entryCommand,
456
+ EVOLVER_MCP_PROCESSOR_CONFIG: JSON.stringify(pairing),
281
457
  // The claim is sponsored by the FUNDED faucet, never the fresh local node (which is empty and
282
458
  // would refuse `node_underfunded`). An operator's explicit EVOLVER_FAUCET_URL still wins.
283
459
  EVOLVER_FAUCET_URL: env.EVOLVER_FAUCET_URL ?? FAUCET_DEFAULT_URL,
@@ -285,23 +461,7 @@ export async function runInstall(argv, env) {
285
461
  if (mcpHome !== undefined && mcpHome.trim() !== "" && nodeEnv.EVOLVER_MCP_STATE_DIR === undefined) {
286
462
  nodeEnv.EVOLVER_MCP_STATE_DIR = stateDirForMcpHome(mcpHome);
287
463
  }
288
- const boot = await runBootstrap(rest, nodeEnv);
464
+ const boot = await (deps.bootstrap ?? runBootstrap)(rest, nodeEnv);
289
465
  return { exitCode: boot.exitCode, output: boot.output, toStderr: boot.toStderr };
290
466
  }
291
- /** Poll `url` until it answers 200 (or a healthy node's success), bounded by `timeoutMs`. */
292
- async function waitHealthy(url, timeoutMs) {
293
- const deadline = Date.now() + timeoutMs;
294
- while (Date.now() < deadline) {
295
- try {
296
- const r = await fetch(url, { signal: AbortSignal.timeout(5000) });
297
- if (r.ok)
298
- return true;
299
- }
300
- catch {
301
- // not up yet — retry below
302
- }
303
- await new Promise((r) => setTimeout(r, 2000));
304
- }
305
- return false;
306
- }
307
467
  //# sourceMappingURL=install.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { ProcessorClient, SubscriptionState } from "@mcsherrylabs/evolver-client/processor-client";
2
+ import type { ToolResult } from "./result.js";
3
+ /** One instance is injected at startup; structural seam for ordinary adapter tests. */
4
+ export type ProcessorAccess = Pick<ProcessorClient, "subscriptions" | "subscribe" | "unsubscribe" | "inboxSummary" | "inboxPage">;
5
+ export interface ProcessorDeps {
6
+ readonly processor?: ProcessorAccess;
7
+ }
8
+ export declare const processorMissing: () => ToolResult<never>;
9
+ /** Reject malformed tool arguments before dispatch. The SDK independently validates the wire. */
10
+ export declare function channelArgument(value: unknown): string | ToolResult<never>;
11
+ export declare function processorReadError(e: unknown): ToolResult<never>;
12
+ export declare function subscriptions(deps: ProcessorDeps): Promise<ToolResult<SubscriptionState>>;
13
+ export declare function setSubscription(deps: ProcessorDeps, ledgerId: unknown, subscribed: boolean): Promise<ToolResult<unknown>>;
14
+ //# sourceMappingURL=processor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processor.d.ts","sourceRoot":"","sources":["../src/processor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAExG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,uFAAuF;AACvF,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAChD,eAAe,GAAG,WAAW,GAAG,aAAa,GAAG,cAAc,GAAG,WAAW,CAAC,CAAC;AAChF,MAAM,WAAW,aAAa;IAAG,QAAQ,CAAC,SAAS,CAAC,EAAE,eAAe,CAAC;CAAE;AACxE,eAAO,MAAM,gBAAgB,yBAEkE,CAAC;AAEhG,iGAAiG;AACjG,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAK1E;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAEhE;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAI/F;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAe/H"}
@@ -0,0 +1,46 @@
1
+ // Thin shared-SDK adapters only. No collection, filesystem administration or restart capability.
2
+ import { UnmanagedProcessorError } from "@mcsherrylabs/evolver-client/processor-client";
3
+ import { misconfigured, ok, partial, unreachableFrom } from "./result.js";
4
+ export const processorMissing = () => misconfigured("the paired processor", "configure processor.binding with the known chainId/nodeId and processor.inboxUrl for reads or " +
5
+ "processor.controlSocketPath for management; a chain URL (even localhost) grants no control");
6
+ /** Reject malformed tool arguments before dispatch. The SDK independently validates the wire. */
7
+ export function channelArgument(value) {
8
+ if (typeof value !== "string" || value.length > 128 ||
9
+ /^[A-Za-z0-9_-]+(?:\.[A-Za-z0-9_-]+)*$/.exec(value)?.[0] !== value || value.startsWith("ce.evolver."))
10
+ return partial("ledgerId", "expected a non-core channel id of at most 128 characters (letters, digits, _, -, dot-separated)");
11
+ return value;
12
+ }
13
+ export function processorReadError(e) {
14
+ return e instanceof UnmanagedProcessorError ? processorMissing() : unreachableFrom(e, "paired processor");
15
+ }
16
+ export async function subscriptions(deps) {
17
+ if (!deps.processor)
18
+ return processorMissing();
19
+ try {
20
+ return ok(await deps.processor.subscriptions());
21
+ }
22
+ catch (e) {
23
+ return processorReadError(e);
24
+ }
25
+ }
26
+ export async function setSubscription(deps, ledgerId, subscribed) {
27
+ const channel = channelArgument(ledgerId);
28
+ if (typeof channel !== "string")
29
+ return channel;
30
+ if (!deps.processor)
31
+ return processorMissing();
32
+ try {
33
+ // SET semantics, reconciliation and ACTIVE verification belong to the shared owner.
34
+ return ok(await (subscribed ? deps.processor.subscribe(channel) : deps.processor.unsubscribe(channel)));
35
+ }
36
+ catch (e) {
37
+ if (e instanceof UnmanagedProcessorError)
38
+ return processorMissing();
39
+ // A dropped/malformed reply cannot prove whether config/restart effects happened. Never
40
+ // invent desired membership, module state, an observation, or subscribed:true from that.
41
+ return ok({ outcome: "unknown", state: null,
42
+ reason: e instanceof Error ? e.message : "no verified processor reply",
43
+ next: "Inspect evolver_subscriptions or repeat the identical SET to reconcile; activation is not confirmed." });
44
+ }
45
+ }
46
+ //# sourceMappingURL=processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processor.js","sourceRoot":"","sources":["../src/processor.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,OAAO,EAAE,uBAAuB,EAAE,MAAM,+CAA+C,CAAC;AAExF,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAO1E,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC,sBAAsB,EACxE,gGAAgG;IAChG,4FAA4F,CAAC,CAAC;AAEhG,iGAAiG;AACjG,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG;QAC/C,uCAAuC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC;QACvG,OAAO,OAAO,CAAC,UAAU,EAAE,iGAAiG,CAAC,CAAC;IAChI,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,CAAU;IAC3C,OAAO,CAAC,YAAY,uBAAuB,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;AAC5G,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAmB;IACrD,IAAI,CAAC,IAAI,CAAC,SAAS;QAAE,OAAO,gBAAgB,EAAE,CAAC;IAC/C,IAAI,CAAC;QAAC,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,CAAC;IAAC,CAAC;IACxD,OAAO,CAAC,EAAE,CAAC;QAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAmB,EAAE,QAAiB,EAAE,UAAmB;IAC/F,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,IAAI,CAAC,IAAI,CAAC,SAAS;QAAE,OAAO,gBAAgB,EAAE,CAAC;IAC/C,IAAI,CAAC;QACH,oFAAoF;QACpF,OAAO,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1G,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,uBAAuB;YAAE,OAAO,gBAAgB,EAAE,CAAC;QACpE,wFAAwF;QACxF,yFAAyF;QACzF,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI;YACzC,MAAM,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B;YACtE,IAAI,EAAE,sGAAsG,EAAE,CAAC,CAAC;IACpH,CAAC;AACH,CAAC"}
package/dist/tools.d.ts CHANGED
@@ -3,6 +3,7 @@ import type { ChainReads } from "./read.js";
3
3
  import type { EvolverConfig } from "./config.js";
4
4
  import type { ToolResult } from "./result.js";
5
5
  import type { ContentDeps } from "./content.js";
6
+ import type { ProcessorAccess } from "./processor.js";
6
7
  import type { Signer, SubmitResult, ClaimResult } from "@mcsherrylabs/evolver-client";
7
8
  import type { McpResult } from "./mcp.js";
8
9
  /** SAFE-02: the untrusted-content warning (also exported from src/mcp.ts — the tool result text
@@ -29,6 +30,8 @@ export interface ToolContext {
29
30
  ed25519Pop: Uint8Array;
30
31
  }) => Promise<ClaimResult>;
31
32
  readonly content: ContentDeps;
33
+ /** Shared thin client, built once at startup. No SDK processor runtime in an MCP session. */
34
+ readonly processor?: ProcessorAccess;
32
35
  }
33
36
  export interface ToolSpec {
34
37
  readonly name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGvC,OAAO,KAAK,EAAE,UAAU,EAAU,MAAM,WAAW,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAW9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAIhD,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAEtF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C;8DAC8D;AAC9D,eAAO,MAAM,SAAS,kHAC2F,CAAC;AAalH;;;;;;oFAMoF;AACpF,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IAChE,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,UAAU,CAAC;QAAC,MAAM,EAAE,UAAU,CAAC;QAAC,gBAAgB,EAAE,UAAU,CAAC;QAAC,UAAU,EAAE,UAAU,CAAA;KAAE,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IACvK,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;CAC/B;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B;;sEAEkE;IAClE,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC;CAC/G;AAED,eAAO,MAAM,KAAK,EAAE,QAAQ,EA0tB3B,CAAC"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGvC,OAAO,KAAK,EAAE,UAAU,EAAU,MAAM,WAAW,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAW9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGtD,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAEtF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C;8DAC8D;AAC9D,eAAO,MAAM,SAAS,kHAC2F,CAAC;AAalH;;;;;;oFAMoF;AACpF,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IAChE,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,UAAU,CAAC;QAAC,MAAM,EAAE,UAAU,CAAC;QAAC,gBAAgB,EAAE,UAAU,CAAC;QAAC,UAAU,EAAE,UAAU,CAAA;KAAE,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IACvK,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,6FAA6F;IAC7F,QAAQ,CAAC,SAAS,CAAC,EAAE,eAAe,CAAC;CACtC;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B;;sEAEkE;IAClE,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC;CAC/G;AAED,eAAO,MAAM,KAAK,EAAE,QAAQ,EA+vB3B,CAAC"}