Skip to content

feat(extensions): bulk sync to agents and bulk delete - #154

Merged
RealZST merged 5 commits into
RealZST:mainfrom
tazztone:feat/153-bulk-sync-global-extensions
Oct 10, 2026
Merged

RealZST merged 5 commits into
RealZST:mainfrom
tazztone:feat/153-bulk-sync-global-extensions

Conversation

@tazztone

@tazztone tazztone commented Oct 7, 2026

Copy link
Copy Markdown
Contributor

Closes #153.

The Extensions page multi-select only enabled/disabled. This adds the two missing bulk actions:

  • Sync to agents — installs the selection onto chosen agents at Global scope (no project needed), with per-pair installed/failed rows plus preflight skips (already-installed, hook-unsupported, global-hook-blocked, transport-unsupported, no-source). Frontend-only: reuses the existing install_to_agent primitive with Global scope; backend Validation errors land as failed rows.
  • Delete — confirm dialog over the selection; CLI rows carry an all-or-nothing warning.

No backend, wire-schema, or kit changes.

Verification

  • npx tsc --noEmit clean; npm test 36 files / 320 pass (8 new sync-pairs tests); biome check clean; 2/2 internal reviewers approve.
  • Manual smoke against a live Tauri backend (select 2 -> Sync -> Start; select 2 -> Delete -> confirm) still wanted before merge.

- Add "Sync to agents" action to install selected extensions at Global
  scope across enabled agents, with per-agent skip reasons (already
  installed, unsupported hooks/transport, no source).
- Add "Delete" action with a confirmation dialog that bulk-removes
  selected extensions and warns about full CLI bundle uninstall.
- Introduce `sync-pairs` helper that pairs selected extension groups with
  target agents, plus unit tests.
- Wire both dialogs into the extensions page selection toolbar.
- Add i18n strings for sync and bulkDelete sections in en, zh, and zh-TW.
@tazztone

tazztone commented Oct 7, 2026

Copy link
Copy Markdown
Contributor Author

looks like this:
SYNC:
image

DELETE:
image

RealZST and others added 4 commits October 10, 2026 10:30
- Renamed to "Install to agents". The target scope follows the active
  scope and can be changed in the dialog; the detail panel's single
  install gets the same picker. All-scopes mode requires a pick.
- No agents are pre-selected.
- "Overwrite existing copies" re-installs agents that already have the
  item, from the most recently modified copy; the agent holding that
  copy is left alone. Without it, any same-named copy in the target
  scope counts as installed.
- One gate (`installBlockReason`) and one plan builder
  (`buildInstallPlan`) decide what each agent can take, replacing the
  predicates copied from the detail panel. The detail panel's single
  install, including the Hermes category path, runs through the same
  plan and the same store action (`installPairs`).
- Plugins, unsupported hooks/MCP/scopes/transports and existing copies
  are skipped instead of attempted. A CLI bundle whose items are also
  selected on their own leaves those items to their own rows instead of
  installing them twice.
- Never copies a file onto itself (agents sharing one skill folder; a
  project-scope CLI child whose preferred source is the target's own
  copy).
- Each copy shows up in the table as it lands, with one rescan at the
  end instead of one per install. Failures and skips are reported after
  the run.
- Bulk delete is removed: the per-extension delete shows every copy's
  path and lets the user pick, which a bulk dialog can't match.
- package-lock.json restored to main.

Closes RealZST#153

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ith skips

- While installing, Cancel becomes Stop: the install in flight
  finishes, nothing after it is attempted, the table is rescanned once,
  and the summary reports how many were not run.
- A CLI bundle covered by its separately selected parts is listed at
  the top of the skipped list (not counted), or on its own when nothing
  else was skipped.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@RealZST
RealZST merged commit be7aa17 into RealZST:main Oct 10, 2026
3 checks passed
@RealZST

RealZST commented Oct 10, 2026

Copy link
Copy Markdown
Owner

Thanks for the PR and the clear issue!

Building on your commit, I pushed a few changes:

  • Renamed it to "Install to agents": "Sync" sounds like the agents stay in sync afterwards, while this is a one-time copy. It also matches the detail panel's "Install to Agent".
  • The target scope follows the current scope and can be changed in the dialog, instead of always Global.
  • No agents are pre-selected. "Overwrite existing copies" updates agents that already have an extension, using its most recently modified copy.
  • Plugins and anything an agent can't take are skipped instead of failing, and a CLI bundle no longer installs children that are also selected on their own.
  • The capability checks now live in one place, shared with the detail panel's install, so the two can't drift.
  • A long run can be stopped midway: the current install finishes and the rest are left out.

I left bulk delete out for now. The per-extension delete shows every copy's path and lets you pick which ones to remove. A bulk version can't show that much, and deletes can't be undone, so I'd rather design it separately.

Before installing:

file-b726fd6ee6cecd40f036933eb8c607c0

While installing, each agent lights up as its copy lands:

file-22e740002e29f11b5e6787a1a83518b2

After installing, you can see what was installed, what failed and why (the failures shown here are simulated), and what was skipped:

file-e9d20c7148bb0b6340c331314e1e20bb

A run can also be stopped midway, and the summary shows what didn't run:

file-f64b0fb4a122f824b057eb145501e8bd

If anything doesn't work the way you expected, please let me know.

Thanks again! Merged.

@RealZST RealZST mentioned this pull request Oct 10, 2026
@tazztone

Copy link
Copy Markdown
Contributor Author

good stuff thanks!

@tazztone
tazztone deleted the feat/153-bulk-sync-global-extensions branch October 10, 2026 18:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bulk-sync global extensions across agents

2 participants