feat(install-modal): multi-install skills without closing the dialog #14

Merged
lz merged 4 commits from feat/multi-install into main 2026-05-23 21:33:05 +02:00
Owner

Summary

The Install Skill modal in the Config Explorer is no longer single-shot. Operators can install many skills per dialog session, both across skills.sh searches and from a single pasted repo.

  • Search results: each hit has its own install button with per-row status (idle / installing / installed ✓ / error). The dialog stays open after each install so the operator can keep searching.
  • Repo picker: when a paste yields multiple skills, each row has its own install button and status. Repos with three or more skills get an Install all remaining (N) header button that walks the idle/errored rows sequentially. Single-skill paste flow is unchanged (auto-install + close).
  • Errors are per-row inline, not a top-of-modal banner.
  • Copy rename: user-facing strings change from "identifier" to "repo" (hint, link labels, empty-submit error). Internal API parameter names are unchanged.
  • Server change: installFromStaging no longer wipes the staging directory after a successful install. Cleanup is delegated to explicit cancelStaging (already called by the modal on close) and the existing TTL sweep.

Commits

  • 2970a30 feat(skills-installer): keep staging alive across multiple installs
  • 876e4db feat(install-modal): per-row install in search results, dialog stays open
  • 1dd3e5c feat(install-modal): per-row install in repo picker, install-all shortcut, repo rename

Test plan

  • pnpm --filter nexus test — 219 passed, 10 skipped (documented vault-store skips). Includes new multi-install from a single staging → both installed, meta survives until cancel test.
  • pnpm --filter nexus build — 257 Svelte modules transformed, 0 compile errors. (Post-build SSR step crashes on the unrelated better-sqlite3 native-binding mismatch from running Node 20 here.)
  • Manual smoke (operator):
    • Search → click 3 hits in a row → each row goes Installed ✓, dialog stays open.
    • Search → click a hit whose canonical name already exists → row shows ⚠ already installed, button re-enables, other rows still work.
    • Paste a multi-skill repo → install two via per-row buttons → close → both manifests present.
    • Paste a 3+ skill repo → Install all remaining appears → click it → rows pulse Installing… → Installed ✓ in order.
    • Single-skill paste → auto-installs and closes on success.
    • Install one skill, leave modal idle >5 min (TTL), click another row → row shows STAGING_EXPIRED. Close + re-paste works.
## Summary The Install Skill modal in the Config Explorer is no longer single-shot. Operators can install many skills per dialog session, both across `skills.sh` searches and from a single pasted repo. - **Search results**: each hit has its own install button with per-row status (`idle / installing / installed ✓ / error`). The dialog stays open after each install so the operator can keep searching. - **Repo picker**: when a paste yields multiple skills, each row has its own install button and status. Repos with three or more skills get an `Install all remaining (N)` header button that walks the idle/errored rows sequentially. Single-skill paste flow is unchanged (auto-install + close). - **Errors are per-row inline**, not a top-of-modal banner. - **Copy rename**: user-facing strings change from "identifier" to "repo" (hint, link labels, empty-submit error). Internal API parameter names are unchanged. - **Server change**: `installFromStaging` no longer wipes the staging directory after a successful install. Cleanup is delegated to explicit `cancelStaging` (already called by the modal on close) and the existing TTL sweep. ## Commits - `2970a30` feat(skills-installer): keep staging alive across multiple installs - `876e4db` feat(install-modal): per-row install in search results, dialog stays open - `1dd3e5c` feat(install-modal): per-row install in repo picker, install-all shortcut, repo rename ## Test plan - [x] `pnpm --filter nexus test` — 219 passed, 10 skipped (documented `vault-store` skips). Includes new `multi-install from a single staging → both installed, meta survives until cancel` test. - [x] `pnpm --filter nexus build` — 257 Svelte modules transformed, 0 compile errors. (Post-build SSR step crashes on the unrelated better-sqlite3 native-binding mismatch from running Node 20 here.) - [ ] Manual smoke (operator): - Search → click 3 hits in a row → each row goes `Installed ✓`, dialog stays open. - Search → click a hit whose canonical name already exists → row shows `⚠ already installed`, button re-enables, other rows still work. - Paste a multi-skill repo → install two via per-row buttons → close → both manifests present. - Paste a 3+ skill repo → `Install all remaining` appears → click it → rows pulse `Installing… → Installed ✓` in order. - Single-skill paste → auto-installs and closes on success. - Install one skill, leave modal idle >5 min (TTL), click another row → row shows `STAGING_EXPIRED`. Close + re-paste works.
lz added 3 commits 2026-05-16 09:49:24 +02:00
Search results now install per-row instead of one-shot. Each row tracks
its own status (idle/installing/installed/error) and the dialog persists
across multiple installs so the operator can keep searching. Errors land
under the row that failed rather than as a top-of-modal banner. The
loading variant of ModalState is dropped — the paste-preview spinner
simply disables its input.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
feat(install-modal): per-row install in repo picker, install-all shortcut, repo rename
All checks were successful
ci / nexus (pull_request) Successful in 2m2s
ci / images (./nexus, agent-nexus) (pull_request) Successful in 3m23s
ci / images (./worker, nexus-worker) (pull_request) Successful in 46s
1dd3e5c030
The repo picker now mirrors the search view: each skill row has its own
install button with idle / installing / installed / error states, and
errors render under the row that failed. Repos with three or more skills
get an "Install all remaining (N)" header button that walks the idle and
errored rows sequentially. The single-skill paste flow still auto-installs
and closes on success.

User-facing copy migrates from "identifier" to "repo" in the paste view
hint, the back/forth link labels, and the empty-submit error.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
feat(install-modal): uniform yellow install button with state transitions, mark already-installed rows
All checks were successful
ci / nexus (pull_request) Successful in 2m3s
ci / images (./nexus, agent-nexus) (pull_request) Successful in 3m50s
ci / images (./worker, nexus-worker) (pull_request) Successful in 51s
9b954fb32f
Search results and repo picker now share the same right-aligned install
button driven by a single `installLabel`/`installClass` pair. The button
transitions accent → dim-accent → green ("Installed ✓") → danger
("Retry"). An `installedNames` prop from the parent panel surfaces the
green state for skills that are already on disk, gated through
`effectiveStatus()` so live transitions still win.
lz merged commit 945b886625 into main 2026-05-23 21:33:05 +02:00
lz deleted branch feat/multi-install 2026-05-23 21:33:09 +02:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
lz/agent-nexus!14
No description provided.