@haven_ai/connect 0.0.0-dev.202609140633.f7cefe8 → 0.0.0-dev.202609141042.b4fd152

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
@@ -101,6 +101,13 @@ one agent and sign as another, and it fails hard. This is the half of that
101
101
  hazard a local tool can know — the doctor still cannot see inside an
102
102
  already-running host, which is why the restart guidance below matters.
103
103
 
104
+ The hosted MCP `tools/list` row is an endpoint-reachability handshake, not a
105
+ credential-authentication result. When doctor classifies a superseded
106
+ directory, it uses the same authenticated, read-only identity endpoint: a
107
+ 401/403 means the stored key is already revoked; a successful identity read
108
+ means it remains spend-capable; and network or malformed responses remain
109
+ unverifiable.
110
+
104
111
  ## Retiring an old agent directory
105
112
 
106
113
  Re-running setup without `--replace` creates a NEW agent and retires nothing
package/dist/cli.cjs CHANGED
@@ -557,9 +557,9 @@ var init_runtime_manifest = __esm({
557
557
  mcpPackage: "@haven_ai/mcp",
558
558
  mcpVersion: mcp.MCP_VERSION,
559
559
  sdkPackage: "@haven_ai/sdk",
560
- sdkVersion: "0.0.0-dev.202609140633.f7cefe8",
560
+ sdkVersion: "0.0.0-dev.202609141042.b4fd152",
561
561
  signerPackage: "@haven_ai/signer",
562
- signerVersion: "0.0.0-dev.202609140633.f7cefe8",
562
+ signerVersion: "0.0.0-dev.202609141042.b4fd152",
563
563
  // Sourced from the SDK, never a literal (#1161). This field read '20.0.0'
564
564
  // while every package's `engines` said `>=24` and the docs said `>=24.0.0`,
565
565
  // so the guard that was supposed to enforce the floor waved Node v23 through
@@ -2665,7 +2665,7 @@ async function installRuntime(input, deps = {}) {
2665
2665
  (signerProbe === void 0 || signerProbe.status === "ok");
2666
2666
  const restartRequired = configResult.restartRequired || restartRequiredForRuntime(runtime, deps.env);
2667
2667
  const errorCode = configResult.errorCode ?? (configResult.runtimeMcpMode === "local_stdio" ? localMcpErrorCode(signerCredentialReady, localMcpConsent, localMcpProbe?.status) : hostedMcpErrorCode(configResult.hostedConfigured, hostedProbe.status) ?? signerConsentErrorCode(signerCredentialReady, signerConsent) ?? signerProbeErrorCode(signerProbe));
2668
- const hostedProbeMessages = configResult.hostedConfigured && hostedProbe.status !== "ok" ? [`Hosted Haven MCP probe failed: ${hostedProbe.status}.`] : configResult.hostedConfigured ? ["Verified hosted Haven MCP tools with a read-only handshake."] : [];
2668
+ const hostedProbeMessages = configResult.hostedConfigured && hostedProbe.status !== "ok" ? [`Hosted Haven MCP probe failed: ${hostedProbe.status}.`] : configResult.hostedConfigured ? ["Verified that the hosted Haven MCP tools endpoint responds to a read-only handshake."] : [];
2669
2669
  const signerProbeMessages = signerProbe ? signerProbe.status === "ok" ? ["Verified local Haven signer with a stdio handshake."] : [
2670
2670
  `Local Haven signer handshake failed: ${signerProbe.status}.`,
2671
2671
  `Re-run \`${sdk.connectorRerunCommand()}\` to repair the signer setup.`
@@ -3735,9 +3735,9 @@ async function checksForAgent(entry, input, deps) {
3735
3735
  id: "hosted_mcp",
3736
3736
  label: "Hosted Haven MCP",
3737
3737
  ok: probe.status === "ok",
3738
- detail: probe.status === "ok" ? `Reachable and authorized (${hostedUrl}).` : `Probe failed: ${probe.status} (${hostedUrl}).`,
3738
+ detail: probe.status === "ok" ? `MCP tools endpoint is reachable (${hostedUrl}).` : `MCP tools endpoint probe failed: ${probe.status} (${hostedUrl}).`,
3739
3739
  ...probe.status === "ok" ? {} : {
3740
- repair: probe.status === "unauthorized" ? `The stored API key was rejected \u2014 re-run the full setup with a fresh token: ${RERUN} --setup <token>.` : "Check network access to the hosted MCP URL, then re-run --doctor."
3740
+ repair: "Check network access and runtime configuration for the hosted MCP URL, then re-run --doctor."
3741
3741
  }
3742
3742
  });
3743
3743
  } else {
@@ -3971,14 +3971,17 @@ async function runDoctor(input, deps = {}) {
3971
3971
  const identity = await readIdentity(entry.directory);
3972
3972
  const tombstone = await readAgentTombstone(entry.directory);
3973
3973
  const otherAgent = entry.agentId ?? path.basename(entry.directory);
3974
- const otherUrl = identity?.hosted_mcp_url ?? (identity?.api_url ? `${identity.api_url}/mcp` : void 0);
3975
- if (!identity?.api_key || !otherUrl) {
3974
+ if (!identity?.api_key || !identity.api_url) {
3976
3975
  if (tombstone) retired.push(`${otherAgent} (retired ${tombstone.retired_at})`);
3977
- else unverifiable.push(`${otherAgent} (no stored key/URL to probe)`);
3976
+ else unverifiable.push(`${otherAgent} (no stored key/API URL to probe)`);
3978
3977
  continue;
3979
3978
  }
3980
3979
  const suffix = tombstone ? " [tombstoned \u2014 key material still present]" : "";
3981
- const probe = await (deps.probeHosted ?? probeHostedMcpTools)(identity.api_key, otherUrl, deps.fetch);
3980
+ const probe = await (deps.probeHostedIdentity ?? probeHostedAgentIdentity)(
3981
+ identity.api_key,
3982
+ identity.api_url,
3983
+ deps.fetch
3984
+ );
3982
3985
  if (probe.status === "ok") live.push({ label: `${otherAgent}${suffix}`, entry });
3983
3986
  else if (probe.status === "unauthorized") revoked.push(`${otherAgent}${suffix}`);
3984
3987
  else unverifiable.push(`${otherAgent} (${probe.status})${suffix}`);
@@ -4422,7 +4425,7 @@ async function pathExists2(path) {
4422
4425
  init_unwire();
4423
4426
  init_local_mcp_runtime();
4424
4427
  init_runtime_manifest();
4425
- var CONNECTOR_VERSION = "0.0.0-dev.202609140633.f7cefe8";
4428
+ var CONNECTOR_VERSION = "0.0.0-dev.202609141042.b4fd152";
4426
4429
  var CONNECT_OUTCOME_SCHEMA_VERSION = 1;
4427
4430
  var failureOutcomesByError = /* @__PURE__ */ new WeakMap();
4428
4431
  function failureOutcomeFor(runtimeHint, error) {