All notable changes to this repository will be documented here.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Security hardening pass across the published packages. All changes are backward compatible for normal flows; the Telegram cloud service and the vault must be released together (the desktop↔cloud auth contract tightened — see below).
telegram:/registeris now trust-on-first-use — the first key registered for a vault wins, idempotent re-registration of the same key is allowed, and replacing an existing key with a different one requires a signature from the currently registered key. Closes an account-takeover hole where anyone who knew avault_idcould overwrite its trust-anchor key and forge webhooks.telegram:/api/approvals/*(list + processed) and pairingunlinknow require an Ed25519 signature from the vault's registered key, with an ownership check so a signature for vault A cannot touch vault B.vaultsigns these calls accordingly.core/vault: agent transaction consent is now bound to the amount + destination the owner approved — an approval for transaction A can no longer be reused to sign a different transaction B.vault:sign_messageis gated on its own consent scope, so a session approved for sending transactions no longer silently authorizes signing arbitrary off-chain messages.vault:GET /v1/vault/activitynow requires the owner token (the audit trail exposes amounts, destinations, and which credentials were read).core/agent/relay: the pairing verification phrase moved to a single shared implementation using the BIP-39 2048-word list and 4 words (~2^44 collision resistance, up from ~2^15), defeating offline phrase-collision grinding by a MITM.relay:/oauth/authorizevalidatesredirect_uri— rejects non-http(s) schemes and, for registered clients, enforces an exact allow-list match (OAuth 2.1).
core:checkBudgetrejects non-finite/negative amounts (fail closed) so a craftedNaN/negative amount can no longer bypass per-tx and daily limits.agent: HTTP MCP server shuts down cleanly on repeated Ctrl+C — idempotent stop, force-closes long-lived Streamable-HTTP connections (no more hang), and a hard timeout guarantees exit.wallet-core:solana-readsdegrades gracefully when SPL-token reads are gated (returns an empty, flagged token list instead of blanking the wallet).
@dcprotocol/wallet-coremust be published (it is a newworkspace:*dependency ofcore,agent, andvault). Publish withpnpm publish, nevernpm publish: only pnpm rewritesworkspace:*→ the concrete version; a plainnpm publishships a literalworkspace:*and every install fails.
Major, lockstep release of all published @dcprotocol/* packages (core, vault,
agent, client, relay, relay-client) to a single 3.0.0. The version jump
realigns published npm content with the current source — earlier 2.0.x npm
artifacts had drifted from the repo (same numbers, stale content), which could
leave downloaded apps calling symbols that were not in the published build.
core: agent connection display-name update support (updateAgentConnection({ name })) and the vaultPATCHagent endpoint accepts an optionalname(display-only rename).
core: keychain master-key storage now deletes any existing entry before writing, so a vault recreated at the same path can never inherit a stale key (prevents a class of recovery-phrase mismatches).core/vault: owner-mode reads (the desktop reading its own data) no longer pollute the audit log as agent activity.
- Bump all
@dcprotocol/*dependencies to^3.0.0together; mixing2.xand3.xacross these packages is unsupported. - No API removals. Code written against
2.xcontinues to work; the major bump reflects the lockstep republish, not breaking signatures.
- Fixed auto-approved budget accounting so
sign_x402and/v1/vault/signspend is recorded even when no wallet session exists. - Kept internal budget ledger sessions out of user-facing agent lists, so Desktop does not show accounting-only sessions as connected agents.
- Added regression coverage for repeated under-threshold spend reaching the daily budget limit.
- Thanks to @TateLyman for reporting and fixing the auto-approved spend accounting issue, including the follow-up tests and internal-session UX cleanup.
@dcprotocol/client, a programmatic client for local or relay-backed vault experiments.@dcprotocol/agent, a lightweight runtime for local MCP, HTTP MCP, and remote/VPS sidecar use.- CLI support for trusted services with
dcp trust. - CLI support for service connection handoff with
dcp connect. - CLI support for short-lived proxy pairing tokens with
dcp pairing start. - CLI support for remote localhost proxies with
dcp proxy. - Desktop Trusted Services management UI.
- Desktop Connect flow for hosted relay setup, trusted service links, and VPS pairing commands.
- Pairing token flow for remote agents that should use a local proxy instead of direct relay credentials.
- End-to-end scripts for relay and pairing flows.
- Desktop production builds now bundle a complete Node runtime plus packaged DCP server runtime for end-user installs.
- Desktop close/quit behavior now matches standard desktop apps: closing hides to tray, quitting stops the bundled server.
- Local developer docs now cover CLI, agent, desktop, relay, and VPS proxy setup.
- Local CORS handling accepts localhost origins across dev ports for local approval and onboarding flows.
- Packaged desktop app now launches the bundled server from a stable runtime path instead of depending on a dev-only layout.
- Relay package no longer auto-starts when imported as a library.
- Vault schema migrations now run on startup so older vaults get pairing and trusted-service tables automatically.
- Desktop packaging ignores generated runtime artifacts and removes noisy debug output from public source.
- Relay and pairing end-to-end flows were stabilized and verified.
- Local approval UI + consent flow for REST/MCP (session support and MCP unlock bridge).
dcp readcommand and expanded scope set (drivers_license, travel, credentials, health, budget).- Canonical schema v1.0 (
SCHEMA.md) and improved docs. - CLI session cache (keychain-backed, 30-minute default).
- Wallet scope consistency across CLI/MCP/REST.
- EVM signing accepts JSON TransactionRequest or raw RLP hex.
- Keychain fallback and unlock flows hardened; no passphrase is written to disk.
- Non-TTY consent and locked-vault handling stabilized for MCP/REST.