Files
buzz/desktop/src-tauri
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7andWill Pfleger 108a31e9c1 feat(desktop): add scoped _at() storage APIs and retarget event-sync chokepoints
## Scoped storage APIs

Add path-based `_at(definitions_dir)` variants alongside every
`app: &AppHandle` storage chokepoint. These are the primary API for
long-running operations that have captured a `WorkspaceAgentScope` at
their entry point:

- `storage.rs`: `load_agent_store_at`, `load_managed_agents_at`,
  `load_agent_definitions_at`, `save_managed_agents_at`,
  `save_agent_definitions_at`, `managed_agents_store_path_at`; the
  internal `write_agent_store` now delegates to `write_agent_store_to_path`
  which is shared with the new scoped write path.
- `teams.rs`: `teams_store_path_at`, `load_teams_at`, `save_teams_at`.
- `global_config/mod.rs`: `global_config_path_at`,
  `load_global_agent_config_at`, `save_global_agent_config_at`;
  the load path is factored into `load_global_agent_config_from_path`.

## AppState scope helpers

- `capture_active_scope()` — snapshot of current `Option<WorkspaceAgentScope>`.
  Callers crossing `.await` or thread boundaries capture at entry.
- `commit_active_scope(scope)` — infallible commit-stage setter (Layer 2).
- `clear_active_scope()` — clear + generation bump for identity import
  drain and prepare-stage rollback.

## Event-sync retarget

`run_event_sync`, `spawn_event_sync`, `migrate_personas_to_events`,
`migrate_teams_to_events`, and `reconcile_agents_to_events` all gain a
`definitions_dir: &Path` / `PathBuf` parameter. They no longer resolve the
base dir from `AppHandle` — the caller passes the scoped definitions dir
directly, closing the bypass that read from the legacy unscoped root.

## apply_workspace scope commit

After applying relay + keys, `apply_workspace` derives a
`WorkspaceAgentScope` from the effective (relay, owner) pair and commits
it via `commit_active_scope`. The immediately following `spawn_event_sync`
call reads the committed scope via `capture_active_scope()`, so event sync
for this apply uses the scoped definitions dir. A legacy-root fallback is
preserved during the Phase 1→2 transition period for pre-apply boot callers.

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-08-02 22:53:30 -04:00
..
…