fix(subscriptions): isolate observers and silence unrequested feeds

Filtered plugin observations shared a replaceable directory subscription with the app. Give each observation independent source ownership and route all application feeds through explicit demand, preserving combined listing and subscription.
This commit is contained in:
Mohamed Boudra
2026-09-09 22:43:18 +02:00
parent ec4e81ce0f
commit 9b09ba7d48
198 changed files with 9341 additions and 4491 deletions
+10
View File
@@ -355,6 +355,16 @@ Native sheets teleport their children. Button surfaces rebuild the installation'
query, and toast providers inside the surface content, including overflow pages from different
plugins. Providers only around the trigger do not reach those bodies.
Request observation with `client.paseo.agents.list({ subscribe: {} })` and consume the returned
`subscription` handle. Plain `list()` and local `.subscribe(handler)` listeners create no daemon
demand. Each list-and-subscribe call has its own server ID, even for the same query. Handle snapshots
also run after reconnect; replace your view before applying its subsequent updates. The installation
owns every observation created through its API and releases them on unload, including setup failure.
Mounted surfaces and command invocations have shorter API lifetimes.
Keep the client entry synchronous: return its cleanup function immediately and start asynchronous
work inside it. See the maintained [composer pill example](../plugin-examples/local-plugin/client/main.tsx).
## Contribute timeline items
Timeline transformers and renderers are client contributions. The daemon's canonical rows and