@haven_ai/connect 0.0.0-dev.202610071649.8f72409 → 0.0.0-dev.202610071809.5460535

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/README.md CHANGED
@@ -385,8 +385,8 @@ and the API key travels beside it in a header.
385
385
 
386
386
  `superseded_agent_ids` lists the other agent directories on this machine. A
387
387
  re-run mints a NEW agent, and without `--replace` retires nothing, so those
388
- older agents still hold live API and signing keys — revoke them on the Haven
389
- agent page if you meant to replace them. Empty on a clean first run; an empty
388
+ older agents still hold live API and signing keys — use **Remove agent…** on the
389
+ Haven agent page for each if you meant to replace them. Empty on a clean first run; an empty
390
390
  list here is not a guarantee, since a scan that cannot read the credential root
391
391
  also yields one rather than failing a completed setup.
392
392
 
@@ -539,8 +539,9 @@ already-configured machine behaves as follows (characterized in
539
539
  [Running several agents in one runtime](#running-several-agents-in-one-runtime).
540
540
  - **The previous agent is not revoked by a re-run — with or without
541
541
  `--replace`.** Local retirement is local: its authority remains whatever
542
- its on-chain rules and the Haven agent page say. Revoke agents you no
543
- longer use from the Haven dashboard. Connect never calls revoke — that
542
+ its on-chain rules and the Haven agent page say. Use **Remove agent…** on
543
+ the Haven agent page for agents you no longer use (or the superseded-agents
544
+ revoke on the setup screen). Connect never calls revoke — that
544
545
  route is owner-authenticated, and an agent credential revoking a sibling
545
546
  agent would be an agent editing its own authority.
546
547
  - **A re-run never overwrites an existing credential file.** A write that would
@@ -689,8 +690,8 @@ terminal and refuses everywhere else, so a `superseded` directory now means
689
690
  someone chose it — a `--replace` whose install failed, an older connector, or
690
691
  a directory this scan could not classify. A superseded directory
691
692
  whose key is still live is a FAILING check naming the agent id, with the
692
- repair spelled out: revoke it on the Haven agent page, then remove the
693
- directory. An already-revoked one reports as informational; an unreachable
693
+ repair spelled out: use **Remove agent…** on the Haven agent page, then remove
694
+ the directory. An already-revoked one reports as informational; an unreachable
694
695
  probe is a note, never a verdict. Connect never revokes or deletes
695
696
  credentials itself — it reports, you decide. The setup completion output
696
697
  names superseded agents the moment they are created, for the same reason.
package/dist/cli.cjs CHANGED
@@ -620,9 +620,9 @@ var init_runtime_manifest = __esm({
620
620
  mcpPackage: "@haven_ai/mcp",
621
621
  mcpVersion: mcp.MCP_VERSION,
622
622
  sdkPackage: "@haven_ai/sdk",
623
- sdkVersion: "0.0.0-dev.202610071649.8f72409",
623
+ sdkVersion: "0.0.0-dev.202610071809.5460535",
624
624
  signerPackage: "@haven_ai/signer",
625
- signerVersion: "0.0.0-dev.202610071649.8f72409",
625
+ signerVersion: "0.0.0-dev.202610071809.5460535",
626
626
  // Sourced from the SDK, never a literal (#1161). This field read '20.0.0'
627
627
  // while every package's `engines` said `>=24` and the docs said `>=24.0.0`,
628
628
  // so the guard that was supposed to enforce the floor waved Node v23 through
@@ -3418,7 +3418,7 @@ async function promptWiringCollisionResolution(collision, agentName, io) {
3418
3418
  io.write(`Setting up "${agentName}" on the bare haven / haven-signer pair would replace that wiring.
3419
3419
  `);
3420
3420
  io.write(" r) replace \u2014 re-point haven / haven-signer at the new agent and retire the previous directory locally\n");
3421
- io.write(" (tombstoned, local key files removed; you still revoke it on the Haven agent page)\n");
3421
+ io.write(" (tombstoned, local key files removed; you still use Remove agent\u2026 on the Haven agent page)\n");
3422
3422
  io.write(` a) alongside \u2014 install as a named agent (suggested: ${collision.suggestedServerName}) with its own
3423
3423
  `);
3424
3424
  io.write(` haven-<name> / haven-signer-<name> pair, leaving the current wiring untouched
@@ -4028,7 +4028,7 @@ async function executeConnect(options, deps, trace) {
4028
4028
  if (supersededAgentsRetiredLocally === true) {
4029
4029
  log("");
4030
4030
  log(
4031
- `Replaced: previous agent(s) ${supersededIds(replacing)} are retired on this machine but NOT revoked \u2014 revoke them on the Haven agent page, then restart EVERY long-lived host (gateways, TUI workers, editors): each holds the MCP wiring snapshot from its own start time, and the tombstone speaks only when a stale host next probes the old path.`
4031
+ `Replaced: previous agent(s) ${supersededIds(replacing)} are retired on this machine but NOT revoked \u2014 use Remove agent\u2026 on the Haven agent page for each (it ends their live budgets), then restart EVERY long-lived host (gateways, TUI workers, editors): each holds the MCP wiring snapshot from its own start time, and the tombstone speaks only when a stale host next probes the old path.`
4032
4032
  );
4033
4033
  } else if (supersededAgentIds.length > 0) {
4034
4034
  log("");
@@ -4036,7 +4036,7 @@ async function executeConnect(options, deps, trace) {
4036
4036
  `Heads-up: this setup created a NEW agent. Your previous agent(s) \u2014 ${supersededAgentIds.join(", ")} \u2014 still exist with their own keys, and any host that was already running keeps acting as them.`
4037
4037
  );
4038
4038
  log(
4039
- `If you meant to replace them: revoke them on the Haven agent page, then restart EVERY long-lived host (gateways, TUI workers, editors) \u2014 each holds the MCP wiring snapshot from its own start time, so after repeated setups each can be stuck on a DIFFERENT old agent. Then remove their directories under ~/.haven/agents (or ${RERUN_HINT} --tombstone <dir> to leave a diagnostic in their place). Run ${RERUN_HINT} --doctor to check whether their keys are still live.`
4039
+ `If you meant to replace them: use Remove agent\u2026 on the Haven agent page for each (it ends their live budgets), then restart EVERY long-lived host (gateways, TUI workers, editors) \u2014 each holds the MCP wiring snapshot from its own start time, so after repeated setups each can be stuck on a DIFFERENT old agent. Then remove their directories under ~/.haven/agents (or ${RERUN_HINT} --tombstone <dir> to leave a diagnostic in their place). Run ${RERUN_HINT} --doctor to check whether their keys are still live.`
4040
4040
  );
4041
4041
  }
4042
4042
  } catch {
@@ -4201,7 +4201,7 @@ async function resolveWiringCollision(collision, agentName, options, deps) {
4201
4201
  }
4202
4202
  throw new ConnectError(
4203
4203
  "wiring_collision",
4204
- `This machine is already wired to a Haven agent with a live key (${supersededIds(collision)}), and setting up "${agentName}" on the bare haven / haven-signer pair would replace that wiring. Nothing was written and the Haven setup token is still unused. If you are an AI agent running this command: do NOT add a flag yourself \u2014 relay this to your user and stop. Your user decides: REPLACE the existing wiring (re-run the same command with --replace added, which re-points the pair at the new agent and retires the previous directory locally \u2014 they still revoke the old agent on the Haven agent page), or install ALONGSIDE it (re-run with --name <slug> added, e.g. --name ${collision.suggestedServerName}, which gives the new agent its own haven-<slug> / haven-signer-<slug> pair). Re-run only with the flag your user chooses.`,
4204
+ `This machine is already wired to a Haven agent with a live key (${supersededIds(collision)}), and setting up "${agentName}" on the bare haven / haven-signer pair would replace that wiring. Nothing was written and the Haven setup token is still unused. If you are an AI agent running this command: do NOT add a flag yourself \u2014 relay this to your user and stop. Your user decides: REPLACE the existing wiring (re-run the same command with --replace added, which re-points the pair at the new agent and retires the previous directory locally \u2014 they still use Remove agent\u2026 on the Haven agent page to end the old agent\u2019s budgets), or install ALONGSIDE it (re-run with --name <slug> added, e.g. --name ${collision.suggestedServerName}, which gives the new agent its own haven-<slug> / haven-signer-<slug> pair). Re-run only with the flag your user chooses.`,
4205
4205
  "relay_wiring_collision_to_user",
4206
4206
  { supersededAgentIds: collision.superseded.map((e) => e.agentId), suggestedServerName: collision.suggestedServerName }
4207
4207
  );
@@ -4499,7 +4499,7 @@ var init_runtime = __esm({
4499
4499
  init_tombstone();
4500
4500
  init_local_mcp_runtime();
4501
4501
  init_runtime_manifest();
4502
- CONNECTOR_VERSION = "0.0.0-dev.202610071649.8f72409";
4502
+ CONNECTOR_VERSION = "0.0.0-dev.202610071809.5460535";
4503
4503
  CONNECTOR_CLIENT_IDENTITY = `@haven_ai/connect/${CONNECTOR_VERSION}`;
4504
4504
  CONNECT_OUTCOME_SCHEMA_VERSION = 1;
4505
4505
  failureOutcomesByError = /* @__PURE__ */ new WeakMap();
@@ -5543,9 +5543,9 @@ async function runDoctor(input, deps = {}) {
5543
5543
  level: supersededLevel,
5544
5544
  detail: supersededLevel === "failed" ? `${otherEntries.length} other credential dir(s) found \u2014 ${parts.join("; ")}. A host started before your latest setup keeps authenticating (and spending) as the old agent.` : supersededLevel === "advisory" ? `${otherEntries.length} other credential dir(s) found \u2014 ${parts.join("; ")}. Runtime '${input2.runtime}' has no config file the connector can read, so which of these agents are wired cannot be verified from this machine: a live key here may be an agent you use deliberately, or one a host started before your latest setup is still spending as.` : `${otherEntries.length} other credential dir(s) found \u2014 ${parts.join("; ")}.`,
5545
5545
  ...supersededLevel === "failed" ? {
5546
- repair: `Revoke ${supersededLive.join(", ")} on the Haven agent page, then remove the old director(y/ies) under ~/.haven/agents. Connect never revokes or deletes for you.`
5546
+ repair: `Use Remove agent\u2026 on the Haven agent page for ${supersededLive.join(", ")} (it ends each one\u2019s live budgets), then remove the old director(y/ies) under ~/.haven/agents. Connect never revokes or deletes for you.`
5547
5547
  } : supersededLevel === "advisory" ? {
5548
- repair: `Check ${supersededLive.join(", ")} on the Haven agent page: revoke the ones you no longer use, then remove their director(y/ies) under ~/.haven/agents. Connect never revokes or deletes for you.`
5548
+ repair: `Check ${supersededLive.join(", ")} on the Haven agent page: use Remove agent\u2026 on the ones you no longer use, then remove their director(y/ies) under ~/.haven/agents. Connect never revokes or deletes for you.`
5549
5549
  } : {}
5550
5550
  });
5551
5551
  }
@@ -5952,7 +5952,7 @@ function helpText() {
5952
5952
  " --replace When this machine is already wired to a different Haven agent on the bare",
5953
5953
  " haven / haven-signer pair, re-point that pair at the new agent and retire the",
5954
5954
  " previous agent directory locally (tombstoned, local key files removed).",
5955
- " Nothing is revoked \u2014 revoke the old agent on the Haven agent page. Without",
5955
+ " Nothing is revoked \u2014 use Remove agent\u2026 on the Haven agent page. Without",
5956
5956
  " this flag a non-interactive run REFUSES such a collision (wiring_collision)",
5957
5957
  " and an interactive terminal is asked; --name installs alongside instead.",
5958
5958
  " --name <slug> Wiring slug for a NAMED agent: writes haven-<slug> / haven-signer-<slug>",