@creatornader/agent-bridge 0.3.0 → 0.3.1

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/CHANGELOG.md CHANGED
@@ -6,8 +6,25 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
- The changes in this section are implemented on the 0.3.0 development line. They are
10
- not released until the matching tag, GitHub release, and npm package exist.
9
+ ## [0.3.1] - 2026-07-15
10
+
11
+ ### Added
12
+
13
+ - Add `agent-bridge --version` and `agent-bridge -V` commands that print the
14
+ installed package version without loading backend configuration.
15
+
16
+ ### Changed
17
+
18
+ - Clarify the boundary between agent harnesses, host applications, host adapters, and
19
+ MCP, CLI, HTTPS, and Node library access. Define `AGENT_BRIDGE_INSTANCE` as the
20
+ stable consumer key used for cursor paths, leases, and presence. Supported installers
21
+ generate this key, while direct clients may supply it. Document the released
22
+ no-instance fallbacks and the fact that the key is not a unique live process or
23
+ session.
24
+ - Require manual release recovery to run the workflow at the tag it publishes so npm
25
+ provenance identifies the checked-out release source.
26
+
27
+ ## [0.3.0] - 2026-07-15
11
28
 
12
29
  ### Control, portability, and recovery
13
30
 
@@ -77,7 +94,7 @@ not released until the matching tag, GitHub release, and npm package exist.
77
94
  - SQLite gateway outbox, inbox cache, restart-safe synchronization, and explicit stale-cache results.
78
95
  - Cross-platform Node CLI with init, health, delivery, sync, presence, watch, migration, and client installation commands.
79
96
  - Cheap `pending` process gate for unread context or due delivery work.
80
- - Runtime manifests and native installers for Codex, Claude Code, and Claude Desktop.
97
+ - Host-adapter manifests and native installers for Codex, Claude Code, and Claude Desktop.
81
98
  - Runtime-neutral `SKILL.md` guidance and an `llms.txt` package map.
82
99
  - PostgreSQL migrations with checksum validation and runtime schema readiness checks.
83
100
  - Restricted PostgreSQL runtime grants separated from schema migration credentials.
@@ -86,7 +103,8 @@ not released until the matching tag, GitHub release, and npm package exist.
86
103
  ### Changed
87
104
 
88
105
  - Package identity is `@creatornader/agent-bridge` at version `0.2.0`. The first npm publication was performed manually. OIDC trusted publishing was configured afterward for later releases.
89
- - Agent identity is process-scoped. Shared config no longer supplies `AGENT_BRIDGE_AGENT`.
106
+ - Agent principal is injected through the client process. Shared config no longer
107
+ supplies `AGENT_BRIDGE_AGENT`.
90
108
  - Exact idempotent replays deduplicate. Reusing a key for changed content returns a conflict.
91
109
  - Gateway clients authenticate through separate principal-bound credentials stored in owner-only client backend files.
92
110
  - Package-root imports expose the provider-neutral API without starting the MCP server.
@@ -118,5 +136,7 @@ First tagged release. Marks the point where agent-bridge has shipped its initial
118
136
  - Narrative-leak detection in CI + on commit via `creatornader/textleaks@v0.2.0` (renamed from leakguard).
119
137
 
120
138
  [0.1.0]: https://github.com/creatornader/agent-bridge/releases/tag/v0.1.0
121
- [Unreleased]: https://github.com/creatornader/agent-bridge/compare/v0.2.0...HEAD
139
+ [Unreleased]: https://github.com/creatornader/agent-bridge/compare/v0.3.1...HEAD
140
+ [0.3.1]: https://github.com/creatornader/agent-bridge/compare/v0.3.0...v0.3.1
141
+ [0.3.0]: https://github.com/creatornader/agent-bridge/compare/v0.2.0...v0.3.0
122
142
  [0.2.0]: https://github.com/creatornader/agent-bridge/compare/v0.1.0...v0.2.0
package/README.md CHANGED
@@ -54,8 +54,9 @@ client configuration, and recovery steps.
54
54
  - Idempotency conflict detection. Exact replay deduplicates; changed content under the same key fails.
55
55
  - Scoped credentials that bind a remote workspace and agent principal.
56
56
  - SQLite outbox and inbox cache for gateway clients.
57
- - Leased runtime presence with instance IDs and capabilities.
58
- - MCP, CLI, Codex, Claude Code, and Claude Desktop integration paths.
57
+ - Leased instance-keyed presence with capabilities.
58
+ - MCP, CLI, HTTPS, and Node library access, plus host adapters for Codex, Claude Code,
59
+ Claude Desktop, OpenClaw, and generic MCP clients.
59
60
  - Canonical portable archives for messages and read receipts across local SQLite and shared PostgreSQL stores.
60
61
  - Native SQLite and PostgreSQL backup, verification, and restore.
61
62
  - Existing `post_context`, `get_context`, `ack_context`, `post`, and `get` behavior during migration.
@@ -70,30 +71,75 @@ The OpenAPI paths describe protocol 2.1. The embedded `x-agent-bridge-protocol-2
70
71
 
71
72
  ## Architecture
72
73
 
73
- ```text
74
- Codex Claude Code Claude Desktop scripts
75
- | | | |
76
- +--------------+------------------+-----------------+
77
- MCP or CLI
78
- |
79
- process-scoped agent identity
80
- |
81
- +----------------+----------------+
82
- | |
83
- local SQLite SQLite edge store
84
- |
85
- authenticated HTTPS
86
- |
87
- Agent Bridge gateway
88
- |
89
- PostgreSQL
74
+ ```mermaid
75
+ flowchart TB
76
+ subgraph execution["Agent execution"]
77
+ harnesses["Agent harnesses<br/>product-specific or custom"]
78
+ callers["Non-harness callers<br/>scripts, CI jobs, and application services"]
79
+ end
80
+
81
+ subgraph hosts["Host surfaces"]
82
+ clis["Command-line hosts<br/>Codex CLI and Claude Code CLI"]
83
+ desktops["Desktop hosts<br/>Codex in ChatGPT and Claude Desktop"]
84
+ daemons["Daemons and custom MCP hosts"]
85
+ end
86
+
87
+ subgraph access["Integration and access"]
88
+ adapter["Host adapter or MCP registration"]
89
+ mcp["MCP over stdio: agent-bridge-mcp"]
90
+ cli["CLI: agent-bridge"]
91
+ library["Node library"]
92
+ direct["Direct HTTPS client"]
93
+ end
94
+
95
+ harnesses --> clis
96
+ harnesses --> desktops
97
+ harnesses --> daemons
98
+ clis --> adapter
99
+ desktops --> adapter
100
+ daemons --> adapter
101
+ adapter --> mcp
102
+ callers --> cli
103
+ callers --> library
104
+ callers --> direct
105
+
106
+ mcp --> core["Agent Bridge client core<br/>principal plus optional consumer instance key"]
107
+ cli --> core
108
+ library --> core
109
+
110
+ core --> local["Local mode<br/>SQLite authority"]
111
+ core --> edge["Gateway client mode<br/>SQLite edge outbox and cache"]
112
+ edge -->|"HTTPS protocol 2.1"| gateway["Agent Bridge gateway"]
113
+ direct -->|"HTTPS protocol 2.1"| gateway
114
+ gateway --> postgres["PostgreSQL authority"]
90
115
  ```
91
116
 
117
+ The diagram shows concepts, not exclusive product categories. A product may package a
118
+ harness and a host together. A harness is the agent execution environment. A host is
119
+ the CLI, desktop app, or daemon where it runs. A host adapter registers an access
120
+ surface. Scripts are orthogonal callers: they can invoke the CLI, call HTTPS, or embed
121
+ the Node library without becoming agent harnesses.
122
+
123
+ | Adapter or integration | Host coverage | Access | Installation status |
124
+ | --- | --- | --- | --- |
125
+ | `codex` | Codex CLI and Codex in the ChatGPT desktop app through their shared profile | MCP stdio | Automated |
126
+ | `claude-code` | Claude Code terminal harness | MCP stdio | Automated |
127
+ | `claude-desktop` | Claude Desktop application | MCP stdio | Automated |
128
+ | `openclaw` | OpenClaw host or daemon | MCP stdio | Manifest included; operator-managed |
129
+ | `generic-mcp` | Any compatible stdio MCP host | MCP stdio | Manifest included; operator-managed |
130
+ | Scripts and services | Shell jobs, CI, daemons, and application code | CLI, HTTPS, or Node library | Direct integration |
131
+ | Hermes, Pi, and other harnesses | Depends on the host's supported interface | No interface assumed | No dedicated adapter or conformance claim yet |
132
+
133
+ `agent-bridge-mcp` is a stdio server. The gateway exposes the Agent Bridge HTTPS API;
134
+ it is not MCP over HTTP. A direct HTTPS client can bypass MCP, the CLI, and the local
135
+ edge store, but then owns its own retry and offline behavior.
136
+
92
137
  Realtime notifications or hooks may wake a client, but cursored reads remain authoritative. A missed notification does not lose a message.
93
138
 
94
- A2A and application task semantics sit above Agent Bridge. MCP, CLI, and HTTPS are access surfaces. Optional transports such as SLIM or NATS may provide wakeups or transport below the core, but authoritative recovery still uses cursored pull. agmsg remains a reference for adapters, interoperability, and client experience.
139
+ A2A and application task semantics sit above Agent Bridge. MCP, CLI, HTTPS, and the Node library are access surfaces. Optional transports such as SLIM or NATS may provide wakeups or transport below the core, but authoritative recovery still uses cursored pull. agmsg remains a reference for adapters, interoperability, and client experience.
95
140
 
96
141
  [ADR-0001](docs/decisions/0001-protocol-layers-and-acknowledgment-semantics.md) defines this boundary and the distinct acknowledgment meanings.
142
+ [ADR-0003](docs/decisions/0003-host-adapters-and-consumer-instance-keys.md) defines the host layers and consumer instance-key contract.
97
143
 
98
144
  Agent Bridge is not a workflow engine, scheduler, memory system, terminal manager, or
99
145
  new universal agent protocol. See [Agent Bridge in the agent ecosystem](docs/ecosystem.md)
@@ -308,9 +354,10 @@ directory durability proof. Successful Windows commands report
308
354
  library API is available from
309
355
  `@creatornader/agent-bridge/dr`.
310
356
 
311
- ## Install client integrations
357
+ ## Install host adapters
312
358
 
313
- Agent identity and gateway credentials belong to each client process, not the shared `~/.agent-bridge/config` file.
359
+ Agent identity and gateway credentials belong to each installed client, not the shared
360
+ `~/.agent-bridge/config` file.
314
361
 
315
362
  ```bash
316
363
  agent-bridge clients install codex --identity codex
@@ -330,11 +377,19 @@ AGENT_BRIDGE_CLIENT_TOKEN=<claude-desktop token> \
330
377
  agent-bridge clients install claude-desktop --identity claude-desktop
331
378
  ```
332
379
 
333
- `--token` accepts the same value, but the environment form avoids putting a credential in shell history. Each install writes an owner-only backend file under `~/.agent-bridge/clients/`. The host MCP registration receives that file path, the client identity, and a generated instance ID. Tokens are not copied into the shared config, and one client cannot reuse a token bound to another principal.
380
+ `--token` accepts the same value, but the environment form avoids putting a credential in shell history. Each install writes an owner-only backend file under `~/.agent-bridge/clients/`. The host MCP registration receives that file path, the client identity, and a generated stable instance key. Tokens are not copied into the shared config, and one client cannot reuse a token bound to another principal.
334
381
 
335
- Codex and Claude Code installation uses their native MCP commands. Claude Desktop installation merges the `agent-bridge` server into its JSON config with an atomic write. Restart the client after installation.
382
+ The `codex` adapter uses the Codex profile shared by the Codex CLI and the Codex
383
+ surface in the ChatGPT desktop app; it does not install two independent registrations.
384
+ Claude Code installation uses its native MCP command. Claude Desktop installation
385
+ merges the `agent-bridge` server into its JSON config with an atomic write. Restart the
386
+ client after installation.
336
387
 
337
- The runtime contracts are under [`clients/`](clients/). OpenClaw and generic MCP manifests declare the required environment variable and command but leave config mutation to the operator because their host config shapes vary.
388
+ The v1 host-adapter manifests are under [`clients/`](clients/). Their compatibility
389
+ field is named `runtime`, but its value identifies the installation target, not a
390
+ unique process. OpenClaw and generic MCP manifests declare the required environment
391
+ variables and command but leave config mutation to the operator because their host
392
+ config shapes vary.
338
393
 
339
394
  [`SKILL.md`](SKILL.md) provides concise runtime-neutral operating instructions for agents. [`llms.txt`](llms.txt) gives tools and model crawlers a compact map of the package, modes, commands, and identity rules.
340
395
 
@@ -575,6 +630,7 @@ Normal inbox and pending reads fall back to the local cache when the gateway is
575
630
  ## CLI
576
631
 
577
632
  ```bash
633
+ agent-bridge --version
578
634
  agent-bridge init --provider local
579
635
  agent-bridge doctor
580
636
  agent-bridge status
@@ -647,6 +703,22 @@ The acknowledgment names depend on the interface. MCP `ack_context` and CLI `ack
647
703
  ## Identity and security
648
704
 
649
705
  - `~/.agent-bridge/config` contains backend settings only. A stored `AGENT_BRIDGE_AGENT` value is ignored.
706
+ - Workspace is the tenant boundary. Principal is the durable agent identity and message source.
707
+ - `AGENT_BRIDGE_INSTANCE` is an optional caller-supplied stable consumer key. Supported
708
+ installers generate and persist one for each installed client. Direct clients should
709
+ do the same when they need separate consumer state or presence.
710
+ - Unless `AGENT_BRIDGE_CURSOR` sets an explicit path, a present instance key selects
711
+ the cursor path. The key also selects the delivery lease owner and presence row.
712
+ Processes that share a key also share those resources. The gateway does not bind the
713
+ key to an installer registration. It is not a PID, unique live process, or
714
+ conversation ID.
715
+ - When the key and explicit cursor path are both omitted, cursor storage uses
716
+ `default`. Delivery leases fall back to the principal, and presence operations reject
717
+ the request because presence requires an instance key.
718
+ - Presence is instance-keyed in the released protocol. Per-process presence requires
719
+ an additive identity instead of a silent change to lease ownership or cursor paths.
720
+ - Session and thread identifiers are message and application context. They do not
721
+ select credentials, workspace, principal, or delivery ownership.
650
722
  - Local clients bind identity through their process environment or an explicit CLI send argument.
651
723
  - Gateway tokens bind workspace and principal. The API ignores caller-supplied source and workspace fields.
652
724
  - Gateway clients use separate owner-only backend files and principal-bound tokens.
@@ -654,7 +726,8 @@ The acknowledgment names depend on the interface. MCP `ack_context` and CLI `ack
654
726
  - Remote HTTP must use TLS. Plain HTTP is accepted only on loopback.
655
727
  - Local config, database, WAL, and shared-memory files use owner-only permissions where the platform supports POSIX modes.
656
728
  - The private `agent_bridge` schema is denied to Supabase `anon` and `authenticated` Data API roles.
657
- - Expired presence rows are pruned during heartbeat and listing. Each agent is capped at 128 active instances, and each workspace is capped at 4,096.
729
+ - Expired instance-presence rows are pruned during heartbeat and listing. Each agent
730
+ is capped at 128 active instance keys, and each workspace is capped at 4,096.
658
731
  - Errors expose stable codes without database URLs, tokens, or provider response bodies.
659
732
  - Delivery work is at least once, not exactly once. Consumers must make external side effects idempotent.
660
733
 
@@ -681,7 +754,7 @@ The original v1 schema remains in [`sql/setup.sql`](sql/setup.sql). Ordered gate
681
754
  `status` is a passive snapshot. It does not synchronize or probe a remote provider. An unprobed remote reports `status: "unknown"`, `connected: false`, and `remoteReachable: null`. Passive status still exits 0. `doctor` evaluates named checks and exits 0 for `ok`, 2 for `degraded`, and 1 for `failed`. Both return JSON with:
682
755
 
683
756
  - Provider and actual schema version.
684
- - Bound workspace, agent, and instance.
757
+ - Bound workspace, agent, and consumer instance key.
685
758
  - Endpoint or database path.
686
759
  - Cursor and queue state.
687
760
  - Pending, claimed, retrying, and dead delivery counts, plus due versus scheduled work, expired leases, oldest-due time, and bounded queue lag.
@@ -759,11 +832,12 @@ durability behavior has not yet been proved on a dedicated Windows host.
759
832
  ## Documentation
760
833
 
761
834
  - [ROADMAP.md](ROADMAP.md): released work, unreleased implementation, and the remaining program.
762
- - [SECURITY.md](SECURITY.md): supported versions, private vulnerability reporting, and security boundaries.
835
+ - [SECURITY.md](SECURITY.md): supported versions, release integrity, private vulnerability reporting, and security boundaries.
763
836
  - [docs/ecosystem.md](docs/ecosystem.md): product boundary, adjacent systems, and interoperability direction.
764
837
  - [docs/troubleshooting.md](docs/troubleshooting.md): MCP startup, identity, backend, and client recovery.
765
838
  - [ADR-0001](docs/decisions/0001-protocol-layers-and-acknowledgment-semantics.md): protocol layers and acknowledgment semantics.
766
839
  - [ADR-0002](docs/decisions/0002-canonical-operation-contract-registry.md): canonical contracts, generated artifacts, discovery, and version negotiation.
840
+ - [ADR-0003](docs/decisions/0003-host-adapters-and-consumer-instance-keys.md): host layers and consumer instance-key semantics.
767
841
  - [docs/architecture-v2.md](docs/architecture-v2.md): protocol and storage decisions.
768
842
  - [SKILL.md](SKILL.md): runtime-neutral agent operating instructions.
769
843
  - [llms.txt](llms.txt): compact machine-readable project map.
package/ROADMAP.md CHANGED
@@ -9,17 +9,17 @@ published and the supported clients pass a fresh end-to-end check.
9
9
 
10
10
  ## Status
11
11
 
12
- ### Released in 0.2.0
12
+ ### Released by 0.3.0
13
13
 
14
14
  - Local SQLite and shared PostgreSQL storage behind provider-neutral interfaces.
15
15
  - An authenticated HTTPS gateway and a named legacy Supabase adapter.
16
16
  - Immutable messages, caller receipts, delivery leases, retries, dead letters, and
17
17
  presence.
18
18
  - Durable SQLite edge outbox and inbox cache for gateway clients.
19
- - CLI, MCP, Codex, Claude Code, and Claude Desktop integration paths.
20
-
21
- ### Implemented for the next release
22
-
19
+ - CLI, MCP, HTTPS, and Node library access surfaces.
20
+ - Automated host adapters for Codex, Claude Code, and Claude Desktop. The Codex
21
+ adapter configures the profile shared by the Codex CLI and the Codex surface in the
22
+ ChatGPT desktop app.
23
23
  - Caller-bound inbox, sent, and combined history with scope-bound cursors.
24
24
  - Publisher-owned delivery policy, priority claims, cancel, requeue, and delivery event
25
25
  inspection.
@@ -34,13 +34,14 @@ published and the supported clients pass a fresh end-to-end check.
34
34
  - Portable workspace archives across canonical SQLite and PostgreSQL stores.
35
35
  - Native SQLite and PostgreSQL backup, verification, and restore.
36
36
 
37
- ### Required before the next release is complete
37
+ ### Post-release validation and adoption
38
38
 
39
- - Merge the development branch through the protected-main checks.
40
- - Publish the package through the configured npm OIDC workflow.
41
- - Prove Codex, Claude Code, and Claude Desktop startup, send, receive, receipt, claim,
42
- settlement, offline replay, and restart behavior against the released package.
43
- - Move the project's own normal traffic to v2 while retaining a tested v1 rollback path.
39
+ - Move the project's own normal traffic to the authenticated gateway while retaining a
40
+ tested legacy rollback path.
41
+ - Prove cross-machine claim, settlement, offline replay, and restart behavior against
42
+ the published package and a deployed v2 gateway. The 0.3.0 live release check covered
43
+ startup, private mailbox sends, caller-scoped history, receipts, and client restart
44
+ through the legacy compatibility backend; it could not prove gateway-only behavior.
44
45
  - Replace remaining direct legacy table pollers with the v2 cursor protocol.
45
46
  - Confirm the README, npm metadata, GitHub metadata, release notes, and package contents
46
47
  match the released artifact.
@@ -64,6 +65,11 @@ published and the supported clients pass a fresh end-to-end check.
64
65
 
65
66
  ### Presence and wakeups
66
67
 
68
+ - Separate the stable consumer instance key from a live process identity. Supported
69
+ installers generate one key per installed client, while direct clients may supply
70
+ their own. Processes that share a key also share presence in 0.3.
71
+ - Add per-process presence and session correlation only through an additive protocol
72
+ change with migration and conformance coverage.
67
73
  - Maintain heartbeat and expiry automatically for supported long-lived clients.
68
74
  - Add wake adapters only where they reduce latency. Lost wakeups must never lose data.
69
75
  - Keep cursored pull as the authoritative recovery path.
@@ -83,7 +89,11 @@ published and the supported clients pass a fresh end-to-end check.
83
89
  - Carry A2A envelopes without implementing a competing task state machine.
84
90
  - Publish conformance fixtures and an adapter template.
85
91
  - Add client libraries where real integrations need them.
86
- - Expand runtime installers after each host has a stable configuration contract.
92
+ - Rename the compatibility `runtime` manifest key to an explicit host-adapter key in a
93
+ versioned manifest contract.
94
+ - Expand host installers after each product has a stable configuration contract.
95
+ Hermes, Pi, and similar harnesses can use a generic access surface when their host
96
+ supports one, but they do not have a dedicated adapter or conformance claim.
87
97
 
88
98
  See [docs/ecosystem.md](docs/ecosystem.md) for the product boundary.
89
99
 
package/SECURITY.md CHANGED
@@ -4,13 +4,30 @@
4
4
 
5
5
  | Version | Security updates |
6
6
  | --- | --- |
7
- | 0.2.x | Supported until its successor is released |
7
+ | 0.3.x | Supported |
8
+ | 0.2.x | Not supported |
8
9
  | 0.1.x | Not supported |
9
10
  | Unreleased development code | No public support guarantee |
10
11
 
11
12
  Upgrade to the latest published package before reporting a defect that may already be
12
13
  fixed. The npm package and GitHub release page are the public version authorities.
13
14
 
15
+ ## Release integrity
16
+
17
+ GitHub immutable releases are enabled, and GitHub reports release `v0.3.0` as
18
+ immutable. A repository ruleset also blocks updates and deletion for every `v*` tag
19
+ without a bypass actor. The `v0.3.0` tag is unsigned.
20
+
21
+ npm publication uses a protected GitHub environment, an OIDC trusted-publisher
22
+ binding, and provenance for the package artifact. Verify the package digest and
23
+ attestation before treating provenance as source identity. The `v0.3.0`
24
+ [recovery run](https://github.com/creatornader/agent-bridge/actions/runs/29461308262)
25
+ checked out package commit `95eb861`, while its attestation names recovery commit
26
+ `c23d9df` as the workflow identity. GitHub Actions logs expire, so the
27
+ [release notes](https://github.com/creatornader/agent-bridge/releases/tag/v0.3.0)
28
+ also record this boundary. Future recovery dispatches must run at the release tag, and
29
+ the workflow enforces that match before packaging.
30
+
14
31
  ## Report a vulnerability
15
32
 
16
33
  Use [GitHub private vulnerability reporting](https://github.com/creatornader/agent-bridge/security/advisories/new).
package/SKILL.md CHANGED
@@ -87,4 +87,4 @@ the source.
87
87
 
88
88
  Use `project` only as an optional message label. Workspace remains the tenant and credential boundary. Omit a project filter to read labeled and unlabeled messages, or provide one for an exact match. Reusing a workspace/source idempotency key with a different project is a conflict.
89
89
 
90
- For gateway mode, treat the credential-bound workspace and principal returned by the server as authoritative. Instance identifies one runtime of that same principal; it cannot select a workspace, agent, or scopes. A production gateway reports row isolation only when transaction-bound request authority and every database readiness check pass. RLS isolates workspace and principal rows. The service still enforces lease transitions and target-to-delivery membership.
90
+ For gateway mode, treat the credential-bound workspace and principal returned by the server as authoritative. Instance is an optional caller-supplied stable consumer key; it cannot select a workspace, agent, or scopes. Supported installers generate and persist it. Direct clients may do so when they need separate consumer state or presence. The gateway does not bind the key to an installer registration. Unless `AGENT_BRIDGE_CURSOR` is explicit, processes that share one key also share its cursor path. They also share delivery lease ownership and instance-keyed presence. Without a key or explicit cursor path, cursor storage uses `default`. Leases use the principal, and presence is unavailable. Instance is not a PID, unique live process, session, or thread. A production gateway reports row isolation only when transaction-bound request authority and every database readiness check pass. RLS isolates workspace and principal rows. The service still enforces lease transitions and target-to-delivery membership.
package/dist/cli.js CHANGED
@@ -3437,6 +3437,11 @@ function watchCursorPath(path, project) {
3437
3437
  const scope = createHash4("sha256").update(project).digest("hex").slice(0, 16);
3438
3438
  return `${path}.project-${scope}`;
3439
3439
  }
3440
+ function packageVersion() {
3441
+ const manifest = JSON.parse(readFileSync3(fileURLToPath2(new URL("../package.json", import.meta.url)), "utf8"));
3442
+ if (typeof manifest.version !== "string" || !manifest.version) throw new Error("package version is unavailable");
3443
+ return manifest.version;
3444
+ }
3440
3445
  function help() {
3441
3446
  process.stdout.write(`agent-bridge: provider-neutral agent messaging
3442
3447
 
@@ -3448,6 +3453,10 @@ Commands:
3448
3453
  archive <export|verify|import>
3449
3454
  dr <backup|verify|restore>
3450
3455
  clients install <codex|claude-code|claude-desktop> --identity <name>
3456
+
3457
+ Options:
3458
+ -V, --version Print the installed package version
3459
+ -h, --help Show this help
3451
3460
  `);
3452
3461
  }
3453
3462
  function rejectUnknownOptions(options) {
@@ -3629,6 +3638,11 @@ async function runCli(argv = process.argv.slice(2)) {
3629
3638
  }
3630
3639
  const { command: raw, options, positionals } = parse3(argv);
3631
3640
  const command = { post: "send", get: "inbox", receipt: "acknowledge" }[raw] ?? raw;
3641
+ if (["-V", "--version"].includes(command)) {
3642
+ process.stdout.write(`${packageVersion()}
3643
+ `);
3644
+ return;
3645
+ }
3632
3646
  if (["help", "-h", "--help"].includes(command)) {
3633
3647
  help();
3634
3648
  return;