App frames: store.proxy.disconnect({platform}) removes this app's delegation - #1745
Open
michielbdejong wants to merge 1 commit into
Open
michielbdejong wants to merge 1 commit into
michielbdejong wants to merge 1 commit into
Conversation
…egation
An app could connect a proxy platform but not let go of it, so notion and
timesheets hid Disconnect.
- New view op `proxyDisconnect`. The host takes this app's delegation off
every `platform` connection delegated to it, one
`DELETE /connections/{id}/agents/{app agent}` each, via
`ProxyConnections.disconnectApp`. A 404 counts as gone. It never deletes
a connection: other apps may share it, and that stays a page action.
- For an Installation it also undelegates the recorded
`integrationConnections[platform]` and removes that key, as the
Installation page's Disconnect does.
- The frame drops its cached capabilities for the platform. Resolves to
`{ status: 'disconnected', platform, connectionIds }`
(`ProxyDisconnectResult` in `@tomic/plugin`).
Closes #1736
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Sep 24, 2026
Contributor
Author
|
Merge-risk triage (2026-09-28). This is a read-only review of this PR's own diff. The rule it applies: nothing that works today may break for existing users or clients, and new behaviour is added alongside the old. The stack is being rebased onto Verdict: SAFE Needs no click, but it can only remove this app's own delegation ( 🤖 Generated with Claude Code |
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #1736
Stacked on #1744 (
claude/frame-open-external), which is stacked on #1733.store.proxy.disconnect({ platform })→{ status: 'disconnected', platform, connectionIds }An app can now let go of an integration-proxy platform it connected. Notion and timesheets hid Disconnect until this existed.
ProxyConnections.disconnectApp, reusingdelegated()andundelegate()inproxyConnections.ts) sends oneDELETE /connections/{id}/agents/{app agent}for eachplatformconnection delegated to this app, signed with the user's key. A 404 counts as already gone.revoke()(DELETE /connections/{id}) is not reachable from a frame. Other apps may share the connection, so deleting it stays a page action.integrationConnections[platform]is undelegated too, even if the proxy no longer lists it as this app's. The key is then removed withforgetInstallationConnection, the same way Installation page: connect proxy platforms, and no proxy calls without one (#1700) #1733's Disconnect does it: other platforms are kept, and the property is removed once it is empty. AcreateAppapp writes nothing.proxyDisconnectop.ProxyDisconnectResultis exported from@tomic/plugin. Docs are in the "App frames" section ofcustom-views.md.No UI text, so no catalog changes.
Tests
helpers/proxyConnections.test.ts, against the fake proxy that verifies every v2 signature:DELETE …/agents/{app}calls are sent;chunks/AppPage/hostStore.test.ts:proxyDisconnectpasses the Installation's recorded id and removes only that platform's key;createAppapp;browser/plugin/src/viewProtocol.test.ts: the op is on the wire, and the frame forgets its cached capability.🤖 Generated with Claude Code