Releases: toon-protocol/toon-client
TOON Desktop extension — latest
Always the newest client-mcp .mcpb (currently 0.12.0). Stable download: https://github.com/toon-protocol/toon-client/releases/download/mcpb-latest/toon.mcpb — install via Claude Desktop → Settings → Extensions → Advanced → Install Extension.
@toon-protocol/views@0.12.0
Minor Changes
-
b243c10: Wallet balance correctness (#199/#200), async funding, UI auto-refresh, and media posts.
- Balances: fast-fail with correct error attribution instead of a 35s control-plane hang; always emit wrapped
structuredContent; the views seam validates the wire contract (no silent blank); read the settlement chain (not the preset-first chain) and from an identity-level client (works with no apex). - Funding: async submit+poll
fund-walletwith atoon_fund_statustool, a generous background faucet timeout, and a distincttimeoutstatus so a slow-but-successful drip isn't reported as a failure. - UI: rendered views auto-refresh after any write action; the Fund button resets once the balance updates.
- Media posts: captioned media uploader (compose → caption → publish) and an optional media/file attach on the default post composer (kind:1 with NIP-92 imeta, rendered inline); the dedicated uploader remains for upload-only.
- Balances: fast-fail with correct error attribution instead of a 35s control-plane hang; always emit wrapped
Patch Changes
@toon-protocol/views@0.11.0
Minor Changes
-
48205b0: Wallet balance correctness (#199/#200), async funding, UI auto-refresh, and media posts.
- Balances: fast-fail with correct error attribution instead of a 35s control-plane hang; always emit wrapped
structuredContent; the views seam validates the wire contract (no silent blank); read the settlement chain (not the preset-first chain) and from an identity-level client (works with no apex). - Funding: async submit+poll
fund-walletwith atoon_fund_statustool, a generous background faucet timeout, and a distincttimeoutstatus so a slow-but-successful drip isn't reported as a failure. - UI: rendered views auto-refresh after any write action; the Fund button resets once the balance updates.
- Media posts: captioned media uploader (compose → caption → publish) and an optional media/file attach on the default post composer (kind:1 with NIP-92 imeta, rendered inline); the dedicated uploader remains for upload-only.
- Balances: fast-fail with correct error attribution instead of a 35s control-plane hang; always emit wrapped
Patch Changes
- Updated dependencies [48205b0]
- @toon-protocol/client@0.14.10
@toon-protocol/client@0.14.11
Patch Changes
-
b243c10: Fix the wallet falsely showing "No channels open yet" on funded channels, and
make rendered TOON views render-first with no preflight ceremony.GET /channels500 → wallet "No channels open yet".getChannels()
calledapex.client.getSettleableAt(channelId), butToonClientnever got the
public passthrough when it was added toChannelManager(#181) — it only used
this.channelManager.getSettleableAtinternally. The wallet atom renders the
failed fetch as empty, so funded, actively-paying channels showed as none.
Added the passthrough, plus a compile-time conformance guard
(toon-client-conformance.ts) assertingToonClientsatisfies the daemon's
ToonClientLikesurface — the channel-tool tests use a mock client, which is
why this gap shipped green.- Resumed channels showed 0 deposit / 0 available. Persisted channel state
omits the on-chain deposit, so after a daemon restartdepositTotalwas0
and the wallet showed 0 spendable on a funded channel. The daemon now re-reads
the participant's on-chaindeposit(newparticipantsaccessor on the
TokenNetwork ABI +ToonClient.rehydrateChannelDeposit) when resuming an EVM
apex channel, soavailable = deposit − cumulativeis correct again. - Render-first, zero ceremony. The server
instructionsand the
toon_status/toon_identitytool descriptions now state that a read-only
render goes straighttoon_atoms→toon_render— no status/identity/balance
preflight, no tool-call narration. SKILL.md's "always start withtoon_status"
is reframed to lazy/render-first.
-
b243c10: Wallet balance correctness (#199/#200), async funding, UI auto-refresh, and media posts.
- Balances: fast-fail with correct error attribution instead of a 35s control-plane hang; always emit wrapped
structuredContent; the views seam validates the wire contract (no silent blank); read the settlement chain (not the preset-first chain) and from an identity-level client (works with no apex). - Funding: async submit+poll
fund-walletwith atoon_fund_statustool, a generous background faucet timeout, and a distincttimeoutstatus so a slow-but-successful drip isn't reported as a failure. - UI: rendered views auto-refresh after any write action; the Fund button resets once the balance updates.
- Media posts: captioned media uploader (compose → caption → publish) and an optional media/file attach on the default post composer (kind:1 with NIP-92 imeta, rendered inline); the dedicated uploader remains for upload-only.
- Balances: fast-fail with correct error attribution instead of a 35s control-plane hang; always emit wrapped
@toon-protocol/client@0.14.10
Patch Changes
-
48205b0: Wallet balance correctness (#199/#200), async funding, UI auto-refresh, and media posts.
- Balances: fast-fail with correct error attribution instead of a 35s control-plane hang; always emit wrapped
structuredContent; the views seam validates the wire contract (no silent blank); read the settlement chain (not the preset-first chain) and from an identity-level client (works with no apex). - Funding: async submit+poll
fund-walletwith atoon_fund_statustool, a generous background faucet timeout, and a distincttimeoutstatus so a slow-but-successful drip isn't reported as a failure. - UI: rendered views auto-refresh after any write action; the Fund button resets once the balance updates.
- Media posts: captioned media uploader (compose → caption → publish) and an optional media/file attach on the default post composer (kind:1 with NIP-92 imeta, rendered inline); the dedicated uploader remains for upload-only.
- Balances: fast-fail with correct error attribution instead of a 35s control-plane hang; always emit wrapped
@toon-protocol/client-mcp@0.12.0
Minor Changes
-
b243c10: Wallet balance correctness (#199/#200), async funding, UI auto-refresh, and media posts.
- Balances: fast-fail with correct error attribution instead of a 35s control-plane hang; always emit wrapped
structuredContent; the views seam validates the wire contract (no silent blank); read the settlement chain (not the preset-first chain) and from an identity-level client (works with no apex). - Funding: async submit+poll
fund-walletwith atoon_fund_statustool, a generous background faucet timeout, and a distincttimeoutstatus so a slow-but-successful drip isn't reported as a failure. - UI: rendered views auto-refresh after any write action; the Fund button resets once the balance updates.
- Media posts: captioned media uploader (compose → caption → publish) and an optional media/file attach on the default post composer (kind:1 with NIP-92 imeta, rendered inline); the dedicated uploader remains for upload-only.
- Balances: fast-fail with correct error attribution instead of a 35s control-plane hang; always emit wrapped
Patch Changes
-
b243c10: Fix the wallet falsely showing "No channels open yet" on funded channels, and
make rendered TOON views render-first with no preflight ceremony.GET /channels500 → wallet "No channels open yet".getChannels()
calledapex.client.getSettleableAt(channelId), butToonClientnever got the
public passthrough when it was added toChannelManager(#181) — it only used
this.channelManager.getSettleableAtinternally. The wallet atom renders the
failed fetch as empty, so funded, actively-paying channels showed as none.
Added the passthrough, plus a compile-time conformance guard
(toon-client-conformance.ts) assertingToonClientsatisfies the daemon's
ToonClientLikesurface — the channel-tool tests use a mock client, which is
why this gap shipped green.- Resumed channels showed 0 deposit / 0 available. Persisted channel state
omits the on-chain deposit, so after a daemon restartdepositTotalwas0
and the wallet showed 0 spendable on a funded channel. The daemon now re-reads
the participant's on-chaindeposit(newparticipantsaccessor on the
TokenNetwork ABI +ToonClient.rehydrateChannelDeposit) when resuming an EVM
apex channel, soavailable = deposit − cumulativeis correct again. - Render-first, zero ceremony. The server
instructionsand the
toon_status/toon_identitytool descriptions now state that a read-only
render goes straighttoon_atoms→toon_render— no status/identity/balance
preflight, no tool-call narration. SKILL.md's "always start withtoon_status"
is reframed to lazy/render-first.
@toon-protocol/client-mcp@0.11.0
Minor Changes
-
48205b0: Wallet balance correctness (#199/#200), async funding, UI auto-refresh, and media posts.
- Balances: fast-fail with correct error attribution instead of a 35s control-plane hang; always emit wrapped
structuredContent; the views seam validates the wire contract (no silent blank); read the settlement chain (not the preset-first chain) and from an identity-level client (works with no apex). - Funding: async submit+poll
fund-walletwith atoon_fund_statustool, a generous background faucet timeout, and a distincttimeoutstatus so a slow-but-successful drip isn't reported as a failure. - UI: rendered views auto-refresh after any write action; the Fund button resets once the balance updates.
- Media posts: captioned media uploader (compose → caption → publish) and an optional media/file attach on the default post composer (kind:1 with NIP-92 imeta, rendered inline); the dedicated uploader remains for upload-only.
- Balances: fast-fail with correct error attribution instead of a 35s control-plane hang; always emit wrapped
@toon-protocol/views@0.10.9
Patch Changes
- Updated dependencies [cb2362b]
- @toon-protocol/client@0.14.9
@toon-protocol/views@0.10.8
Patch Changes
-
0f6fc74: Fix three wallet-overview bugs that made the wallet card look broken in the host iframe:
- Copy button was a silent no-op. The TOON app runs in the host iframe, which
isn't granted theclipboard-writepermission policy, so
navigator.clipboard.writeTextrejects there — and the click had no rejection
handler.CopyButtonnow falls back to the legacydocument.execCommand('copy')
over a hidden textarea (works in a sandboxed frame), same iframe-limitation
class as thewindow.confirm→ consent fix. - Fund button gave no feedback. Tapping "Fund" fired the faucet but the card
never changed, so it read as broken. The button now shows aFunding…→
Requested(orRetry fundon failure) state and re-reads balances after a
successful drip. - Balances rendered blank on a flaky read. The
toon_balancescontrol plane
can transiently refuse on:8787while the websocket transport is healthy
(toon-client#186) — it succeeds on retry.readBalancesnow retries before
giving up and throws on persistent failure, andwallet-overviewshows a
"Balances temporarily unavailable — Retry" state instead of a blank card that's
indistinguishable from a real zero balance.
Also fixes the daemon-side root cause of that flakiness (toon-client#186), not
just the symptom:- Stale keep-alive socket race. The long-lived MCP server calls the localhost
control plane infrequently, so the daemon (Node's default 5s keep-alive) reaped
idle sockets the undici client pool still held — the next request reused a dead
socket and failed withECONNRESET, mislabeled as "daemon not reachable". The
daemon now keeps idle sockets alive past the client's pool window
(keepAliveTimeout: 650s), and theControlClienttransparently retries
idempotent (GET/DELETE) requests on a transient connection failure. Mutating
POSTs are not retried (no double publish/fund/deposit). - Timeouts no longer masquerade as "daemon not reachable". A request the
client aborts on its own timeout (e.g. a hung on-chain balance read) is now a
retryable504, so the surfaced message says "retry" instead of "the daemon
failed to start — check the log".
- Copy button was a silent no-op. The TOON app runs in the host iframe, which
@toon-protocol/views@0.10.7
@toon-protocol/views@0.10.7