Plugin Workspace Scope and Addressing
- Status: Todo
- Kind: Feature
- Authors: Jean Mertz git@jeanmertz.com
- Date: 2026-09-28
- Implements: 114
- Label: type=tracking
Tracking ticket for RFD 114.
Implementation plan
- Add the last-root record: Introduces
metadata.local.jsonin the conversation's user-local directory with unknown-key preservation, makes projection sync replace only managed files, and writeslast_rootwhen a turn first persists. Reportslast_rootonlist_conversationsandread_events, addsexpected_last_roottoquerywith a lock-time check, and hasjp-serve-webhandle a dead record by sending the confirmation. - Declare plugin workspace scope: Adds
workspace_scopetoDescribeResponse(defaultsingle) and derives the plugin dispatch'sWorkspaceRequirementfrom it. Admits the plugin under the discovery configuration beforedescribe, and again under the selected workspace's configuration forsingle, makesinit's workspace/config fields conditional on scope, and rejects a plugin whose declaration disagrees with its requests. - Expose list_workspaces: Projects
roots::known_workspacesonto the wire, including per-root storage paths and thelaunchmarker, giving a frontend enough to show a workspace list. - Wire up addressing and the workspace registry: Adds
WorkspaceRefto data and mutation requests (requiringrootwhen a workspace has multiple live checkouts), lazily populatesWorkspaceCtxper addressed checkout with per-checkout lock tracking, routes background tasks' destinations through the registry, implements idle-shutdown for unleased MCP server instances, and updatesjp-serve-webto declaremulti, address explicitly, and continue conversations vialast_root/expected_last_root.