mirror of
https://github.com/deepseek-ai/deepseek-harness.git
synced 2026-11-10 12:47:44 +08:00
The sidebar Plugins page now drives `ctx.pluginManager` from #4182 and the settings Plugin list tab goes back to read-only: its bundle form and row checkboxes are removed, and the page joins `listBundles` with `listPlugins` into one view per bundle, decides availability from the inventory's `managementAvailable`, switches bundles and rows through `setBundleEnabled` and `setPluginEnabled`, and confirms uninstalls. The manager gains what the guided install dialog needs: `inspect(spec)` reads a spec through the registry or a directory before anything installs and refuses specs without a bundle; `installBundle` takes a request id, streams each pnpm run as `plugin-manager/install-log`, reports its phases as `plugin-manager/install-state`, classifies a failed run into `packageResult.kind`, names the bundle it added, and restores `package.json` and `pnpm-lock.yaml` when the run fails, is cancelled, or adds a package without a bundle patch; `cancelInstall(requestId)` answers only after pnpm exited and the files are back; `listBundles` carries titles, one-liners, declared rows with their live entries, and the built-in rows a bundle overrides; every completed operation and every patch generation applied outside the manager emits `plugin-manager/changed`. The config gains `pnpmCommand` and `inspectTimeoutMs`. App boot emits `profile/reconciled` after each applied patch generation and finds a root Include mounted under its pinned id by another copy of the module. Row diagnostics, dependency checks, and the non-bundle dependency group are not carried over; the web e2e scaffold mounts a launcher-style managed profile instead of the removed profile runtime.