@haven_ai/connect 0.9.0-alpha.0 → 0.10.0-alpha.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/README.md +73 -24
- package/dist/cli.cjs +847 -568
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +847 -568
- package/dist/cli.js.map +1 -1
- package/dist/index.cjs +849 -568
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +36 -7
- package/dist/index.d.ts +36 -7
- package/dist/index.js +848 -569
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -47,7 +47,40 @@ Do not point it at a project repository, shared folder, or cloud-synced folder.
|
|
|
47
47
|
|
|
48
48
|
Use `--ack-local-tools` with Haven-generated setup prompts. It prepares the
|
|
49
49
|
local Haven tools acknowledgement during setup so Codex and Claude Code can load
|
|
50
|
-
Haven after a normal restart.
|
|
50
|
+
Haven after a normal restart. It also works with `--repair`: when an upgrade
|
|
51
|
+
changes the signer's tool set, the stored acknowledgement no longer matches and
|
|
52
|
+
the new signer refuses to start — `--repair --ack-local-tools` re-acknowledges
|
|
53
|
+
consent for the signer the repair installs (printing the consent block), with
|
|
54
|
+
no setup token. With a bare `--doctor` the flag is refused: the doctor is
|
|
55
|
+
read-only. The token-free path, without a repair, is the recorded wrapper:
|
|
56
|
+
`<agent dir>/bin/haven-signer.mjs --ack < /dev/null`.
|
|
57
|
+
|
|
58
|
+
## Updating an agent's own connector (#3799)
|
|
59
|
+
|
|
60
|
+
On a machine with several agents, an agent can update its own pair in one
|
|
61
|
+
command. `--doctor` and `--repair` accept `--name <slug>` and select the agent
|
|
62
|
+
directory by its recorded MCP pair (`haven-<slug>` / `haven-signer-<slug>`) —
|
|
63
|
+
the same rule `--rekey --name` and `--unwire --name` use. An unknown slug is
|
|
64
|
+
refused listing the slugs that exist; two live directories claiming one pair
|
|
65
|
+
are refused listing both; tombstoned directories never match. When several
|
|
66
|
+
agents exist and no `--name` or `--credentials-dir` is given, the multi-agent
|
|
67
|
+
refusal names, per directory, the agent id AND the pair it owns, and offers the
|
|
68
|
+
`--name <slug>` command for named pairs.
|
|
69
|
+
|
|
70
|
+
Two honesty rules worth knowing:
|
|
71
|
+
|
|
72
|
+
- On Claude Code, `--repair` writes no MCP config (the connector does not own
|
|
73
|
+
that runtime's registry). It re-points `<dir>/bin/haven-signer.mjs` at the
|
|
74
|
+
pinned signer runtime, and says exactly that — the entry that launches the
|
|
75
|
+
wrapper uses the new signer after a restart. `--doctor --runtime claude-code`
|
|
76
|
+
names the recorded pair and how to confirm it (`claude mcp get
|
|
77
|
+
haven-signer-<slug>`).
|
|
78
|
+
- When the stored consent does not match the pinned signer's tool set, a bare
|
|
79
|
+
`--repair` stops before writing anything and names the token-free
|
|
80
|
+
re-consent command; `--repair --ack-local-tools` performs the
|
|
81
|
+
re-acknowledgement with the installed signer during the repair. The stored
|
|
82
|
+
ack holds only a hash, so a mismatch is never reported as "the tools grew" —
|
|
83
|
+
a rekey or a chain change produces the same mismatch.
|
|
51
84
|
|
|
52
85
|
## Supported runtimes
|
|
53
86
|
|
|
@@ -78,7 +111,9 @@ spending authority.
|
|
|
78
111
|
### `--doctor` reports every agent, not just one (#1697)
|
|
79
112
|
|
|
80
113
|
With several agents wired into one runtime (`--name`), the doctor enumerates
|
|
81
|
-
every credential directory on the machine and classifies each one
|
|
114
|
+
every credential directory on the machine and classifies each one. An agent can
|
|
115
|
+
also select its OWN directory with `--doctor --name <slug>` or
|
|
116
|
+
`--repair --name <slug>` — see [Updating an agent's own connector](#updating-an-agents-own-connector-3799):
|
|
82
117
|
|
|
83
118
|
| Classification | Meaning |
|
|
84
119
|
| --- | --- |
|
|
@@ -109,7 +144,7 @@ report stays `version: 1`; `level` is additive.
|
|
|
109
144
|
| Level | Meaning | Example |
|
|
110
145
|
| --- | --- | --- |
|
|
111
146
|
| `ok` | Nothing to say. | The installed signer matches the connector's pin. |
|
|
112
|
-
| `advisory` | Worth reading; nothing is broken. Exit 0. | `signer_runtime`: the install is intact but behind the pinned version ("intact, but outdated" — both versions named, `--repair` offered); `signer_runtime_unused` (#3123): runtime directories nothing references; `mcp_server_name_rebound` (#3122): two local binding records claim one server name. `superseded_agents` on a recognised runtime with no config file the connector can read (Claude Code, `other`): a second live key is reported, and the check says why "wired" cannot be verified from this machine. |
|
|
147
|
+
| `advisory` | Worth reading; nothing is broken. Exit 0. | `signer_runtime`: the install is intact but behind the pinned version ("intact, but outdated" — both versions named, `--repair` offered); `signer_runtime_unused` (#3123): runtime directories nothing references; `mcp_server_name_rebound` (#3122): two local binding records claim one server name. `superseded_agents` on a recognised runtime with no config file the connector can read (Claude Code, `other`): a second live key is reported, and the check — labelled "Other agent credentials (wiring not verifiable)" — says why "wired" cannot be verified from this machine. On Claude Code a pair named in `~/.claude.json` counts as wired (#3830), so only directories that file does not name reach this advisory, and the inventory row reads "not verified as wired" rather than "superseded"; a directory it upgrades runs the full per-agent checks and can fail the run. |
|
|
113
148
|
| `failed` | A real failure with one repair action. Exit 1. | A stale or empty runtime directory; a live key in a directory the runtime's config demonstrably does not use. |
|
|
114
149
|
|
|
115
150
|
What stays blocking is live spend authority: a directory whose stored key
|
|
@@ -285,10 +320,10 @@ long-lived host afterwards, as with any retirement.
|
|
|
285
320
|
|
|
286
321
|
Setup guards the **name slot** (a taken `--name`, the bare pair already wired
|
|
287
322
|
— #2551 refuses or asks) but never the **wallet**: a machine can carry several
|
|
288
|
-
agents with live keys, and until #3122 the
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
earlier notice). Two things changed, both from local files only (no network call is
|
|
323
|
+
agents with live keys, and until #3122 the heads-up naming the other agent
|
|
324
|
+
directories was printed only after the credentials were written (that
|
|
325
|
+
completion heads-up, #1688, still prints — reworded by #3830, see below — and
|
|
326
|
+
this slice ADDS an earlier notice). Two things changed, both from local files only (no network call is
|
|
292
327
|
added; the backend is not asked whether any key still authenticates):
|
|
293
328
|
|
|
294
329
|
- **Before the key is minted or anything is written**, setup names every
|
|
@@ -383,21 +418,29 @@ deployment, so the two differing is intended topology, not an environment
|
|
|
383
418
|
mismatch. It is non-secret: the same string goes into your own MCP config file,
|
|
384
419
|
and the API key travels beside it in a header.
|
|
385
420
|
|
|
386
|
-
`superseded_agent_ids` lists the other agent directories on this machine
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
421
|
+
`superseded_agent_ids` lists the other agent directories on this machine —
|
|
422
|
+
every one, key-less and tombstoned included, on any backend. Despite the field
|
|
423
|
+
name it is **not** a replace set (#3830): since named pairs became the default
|
|
424
|
+
(#3737), a run without `--replace` adds its agent alongside the ones already
|
|
425
|
+
here and retires nothing, so most listed agents are simply other agents, many
|
|
426
|
+
of them wired and in use. Agents a `--replace` run actually retired are
|
|
427
|
+
`retired_agent_ids`. The completion heads-up names the list as "other agent
|
|
428
|
+
directories on this machine" and says this setup revoked none of them; if you
|
|
429
|
+
no longer use one, use **Remove agent…** on its Haven agent page. Empty on a
|
|
430
|
+
clean first run; an empty list here is not a guarantee, since a scan that
|
|
431
|
+
cannot read the credential root also yields one rather than failing a
|
|
432
|
+
completed setup.
|
|
433
|
+
|
|
434
|
+
**The dashboard lists them; revoking stays on each agent's page (#2561,
|
|
435
|
+
#3830).** The same ids ride the install-status report, and the connect modal's
|
|
436
|
+
completed state lists those that are the owner's agents and not revoked
|
|
437
|
+
(active, paused or still in setup), each linking to its agent page. It
|
|
438
|
+
does not call them replaced and offers no revoke there (owner decision,
|
|
439
|
+
2026-10-09): the report cannot tell a coexisting agent
|
|
440
|
+
from a retired one. The connector never revokes either: `POST
|
|
441
|
+
/agents/:id/revoke` is owner-authenticated, and an agent credential retiring a
|
|
442
|
+
sibling agent is the "agent editing its own authority" the re-key routes
|
|
443
|
+
refuse.
|
|
401
444
|
|
|
402
445
|
On the REPORT the field is a tri-state, unlike the `--json` outcome above: a
|
|
403
446
|
list, `[]` when the scan ran and found none, and `null` when it could not run.
|
|
@@ -411,7 +454,12 @@ untouched — and `superseded_agents_retired_locally` is `true` when that
|
|
|
411
454
|
retirement covered every collision entry (`false`: the install ended with an
|
|
412
455
|
error code and the retirement was skipped, or one entry failed). Both fields
|
|
413
456
|
are absent on any other run and say nothing about the backend, where nothing is
|
|
414
|
-
revoked.
|
|
457
|
+
revoked. Separately, since #3772 a run that retired at least one directory tells
|
|
458
|
+
Haven which ones (`POST /agent-connection-setups/{setupId}/retired-agents`, with
|
|
459
|
+
the new agent's key, `retired_agent_ids` only), so a session still running as a
|
|
460
|
+
retired agent sees a `supersededBy` warning on its own `haven_get_agent` /
|
|
461
|
+
`haven_get_allowances`. That report is best-effort — an older backend's 404 is
|
|
462
|
+
ignored silently and any other failure is one log line — and it still pauses and revokes nothing.
|
|
415
463
|
|
|
416
464
|
A `wiring_collision` refusal (a non-interactive bare setup over a live
|
|
417
465
|
previous agent, #2551) carries `error.superseded_agent_ids` and
|
|
@@ -718,7 +766,8 @@ repair spelled out: use **Remove agent…** on the Haven agent page, then remove
|
|
|
718
766
|
the directory. An already-revoked one reports as informational; an unreachable
|
|
719
767
|
probe is a note, never a verdict. Connect never revokes or deletes
|
|
720
768
|
credentials itself — it reports, you decide. The setup completion output
|
|
721
|
-
names
|
|
769
|
+
names the other agent directories the moment the new agent is created, for
|
|
770
|
+
the same reason.
|
|
722
771
|
One honest limit: "newest" is decided by file mtime, so a restored backup or
|
|
723
772
|
a sync tool that rewrites timestamps can make doctor examine the wrong
|
|
724
773
|
directory as current — before revoking anything, confirm the agent id
|