Commit Graph
90 Commits
Author SHA1 Message Date
fz c2b668ccd8 Merge master and regenerate plugin manager translation record 2026-10-29 11:51:38 +08:00
_Kerman e5269b3bd6 fix(plugin-manager): keep the check's diagnostic honest and off the answer
Review fixes for the GitHub connection check: the returned packageResult
no longer carries the check's command line (it stays a module-local field
of the streamed run), and the recorded line drops URL user information
while Git still runs the address as typed. A check the deadline stopped
records the coerced status 1 in the result because an exit code is a
number, while its streamed run reports none; the JSDoc, package README
and boot subsystem page now say exactly that.
2026-10-28 16:35:13 +08:00
_Kerman 9005026ea6 fix(plugin-manager): stream the install diagnostics a failed run already holds
A failed installation could show the generic sentence while its details
panel stayed empty. A pnpm run that printed nothing had its diagnostic
written to the complete log and the result but never streamed, and the
GitHub connection check that stops an installation before pnpm ran kept
its captured output only in the result. Both now reach the install-log
stream the dialog renders: the no-output diagnostic streams as the run's
output, and a network or timeout check failure streams the exact
git ls-remote command line and its output as the installation's only
run under the caller's request id, with no exit code when the check
timed out. A check failure pnpm may resolve streams nothing.
2026-10-28 14:08:30 +08:00
fz 3a80325a71 fix(sdk): verify and document plugin management prerequisites 2026-10-26 23:50:27 +08:00
winewill 5be33a66d2 test(desktop): isolate diagnostic fixtures and clarify record limits 2026-10-26 11:12:50 +08:00
winewill 6cbbc8caa5 Merge master and reconcile desktop diagnostic records 2026-10-26 11:05:45 +08:00
winewill 36dce6b596 fix(desktop): preserve operation identity and bound diagnostic shutdown 2026-10-23 14:36:04 +08:00
creatixchu 205a465046 feat(plugins): hide unsupported bundles from default discovery 2026-10-23 14:10:57 +08:00
creatixchu 82bbf85894 fix(plugins): report unsupported bundle activation and address review 2026-10-23 13:15:05 +08:00
creatixchu 2e0cc478e8 Merge master into bundle Host platform support 2026-10-23 13:12:09 +08:00
winewill cda5c51b4f merge: reconcile desktop diagnostics with master 2026-10-22 18:47:16 +08:00
Turtle a8bf3e7600 fix(plugin-manager): harden git allowBuilds key parsing
Capture git keys that contain spaces, skip keys whose git URL carries a
credential, and isolate Git configuration for the real pnpm test.
2026-10-22 15:38:14 +08:00
Turtle 220301c614 fix(plugin-manager): offer script approval for git-hosted packages
pnpm 11 refuses to prepare a git-hosted dependency with
ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED instead of reporting ignored build
scripts. Classify that error as build-blocked and record the allowBuilds
key pnpm suggests, so the existing approval-and-retry flow applies.

Fixes #6837
2026-10-22 15:37:59 +08:00
Turtle 420a7797f6 fix(plugin-manager): harden Git transport probe prompts, fragments and attribution
Refs #6938
2026-10-22 14:07:10 +08:00
Turtle f59f0dfc67 fix(plugin-manager): install self-hosted Git plugins over SSH when only SSH can read them
Refs #6938
2026-10-22 13:42:56 +08:00
creatixchu 684bb206af Merge master into bundle platform support 2026-10-21 16:22:55 +08:00
Turtle f9ec718a48 feat(preset): enable plugin_manager in standard mode 2026-10-21 11:47:26 +08:00
creatixchu be0c971766 Merge updated approval base into bundle platform support 2026-10-21 10:42:25 +08:00
ZiyaandZiyaZhang 5e9bb51724 feat(plugins): Ralph 循环和会话搜索默认从 GUI 隐藏 (#6754)
* feat(plugins): hide Ralph and session search from default discovery

* fix: keep hidden bundled plugins explicitly activatable

---------

Co-authored-by: ZiyaZhang <[email protected]>
2026-10-20 10:26:31 -07:00
winewill 9738e49720 fix(desktop): preserve partial-write history and isolate journals 2026-10-20 15:56:15 +08:00
creatixchu c7b6fba276 feat(plugins): enforce bundle Host platform support 2026-10-20 15:28:55 +08:00
winewill e9e7722d53 fix(desktop): preserve safe operation diagnostics across failures 2026-10-20 15:09:37 +08:00
winewill 4478a868ae fix(plugin-manager): retain refused install identity in diagnostics 2026-10-20 14:16:48 +08:00
turtle1999 9c8522bb64 feat(plugin-detail): show Markdown plugin details on bundle and market entry pages
Plugins bundle pages and Discover entry pages show the plugin's long
description first, as Markdown with images, in a height-limited region
without its own heading. The document is the file locale meta.detail
names, otherwise the package README, otherwise (market entries only)
the declared repository's README.

The new dsh-plugin-detail library selects documents and reads local
package directories and npm file CDNs without state. plugin-manager
reads installed and offered bundles through readBundleDetail; plugin-market
reads market entries through readEntryDetail, single-file APIs, and a
size-limited partial clone cache serialized across processes. Raw HTML is
omitted, relative links stay text, and relative images load from Host
routes with a sandbox CSP.
2026-10-19 19:13:22 +08:00
winewill d136ac9f6f fix(diagnostics): retain observed plugin versions for recovery 2026-10-19 17:54:46 +08:00
winewill dfbe5d8da3 feat(desktop): retain bounded plugin operation diagnostics 2026-10-19 17:35:18 +08:00
turtle1999 b10bd84dfe feat(plugins): check and install newer registry versions of third-party bundles 2026-10-19 15:40:51 +08:00
turtle1999 3de3a977e0 feat(plugin-market): add the Custom plugin markets bundle and Discover tab
Read configured plugin market indexes on the Host, search them with fuzzy
multilingual matching, and install a chosen version from the Plugins page.

- dsh-plugin-market-index validates format-1 indexes and builds install
  arguments; inline icons are capped at 32 KiB.
- The pluginMarket service fetches configured http(s) URLs, parses bodies in
  a Worker Thread, caches documents, and pages filtered, ordered results with
  installation status and engines.dsh compatibility.
- Discover is an opt-in experimental bundle; the Plugins page gains a
  plugins.tab slot and confirmed installs.
- The plugin_market tool lists indexes, plugins, and versions for Creator mode.
- Plugin compatibility reads engines.dsh before DSH peer dependencies.
2026-10-15 05:37:44 +08:00
turtle1999 879ad372ac feat(hmr): replace plugins whose package files changed during profile recomposition
With HMR, installing, enabling, disabling and removing bundles take effect live. Each profile recomposition compares
the loaded modules below the profile directory and its linked targets with disk, stops the plugins whose files
changed, and recomposes the profile through app-boot's recomposeProfile(): the rows the next generation drops are
removed first, the latest runtime resolution is published once, and the generation is applied and judged. Afterwards
HMR evicts the modules below the mappings the recomposition dropped.

- app-boot: recomposeProfile(); PluginPackages.resolution; ResolutionRestartRequired; the resolver accepts in-place
  version changes and relinks, and relocates Node's cached link real paths.
- plugin-manager: with HMR, installBundle refuses an installed package (already-installed), so an upgrade is a
  removal and an installation; every restart-required result carries a restartReason; removal uses the registry the
  package was installed from.
- ui-plugin-manager: the Official Update removes and then installs; restart prompts name their reason.
2026-10-13 22:15:57 +08:00
turtle1999 5a107fdef5 fix(plugin-manager): keep anchors and comment placement when pruning switches 2026-10-13 00:50:54 +08:00
turtle1999 5b4cb3dd4d fix(plugin-manager): drop profile switches the bundles already imply 2026-10-12 19:28:12 +08:00
fz 634d7e96dc fix(plugin-manager): close pnpm logs when preparation fails 2026-10-12 13:05:37 +08:00
Turtle b173f3e2a2 revert(plugin): drop preset-scoped profile patches; ship optional tools as global Host rows
Remove the `{ preset, insert }` / `{ preset, id, ...override }` profile patch
operation added in #5773, together with the app-boot compiler and reload drain,
config-editor filtering, plugin-manager preset row inventory and retained-module
removal checks, the read-only preset rows on the Plugins page, and the
agent-preset-registry row identities that served them.

Session search, Ralph, persistent terminals, Codex, and Claude Code bundles now
insert ordinary Host rows whose tools register in the global tool layer, like the
earlier optional bundles. Every preset, including minimal, sees them, and toggling
a bundle updates live Agents without new composition generations.
2026-10-07 20:46:37 +08:00
Tianyi Cui b9bea234ce fix(plugin-manager): record ignored build scripts reported by a non-interactive pnpm
pnpm writes allowBuilds placeholders for blocked dependency scripts only when
it can prompt, so a managed run that always captures output left
pendingBuilds empty and the approval flow could not offer anything. The failed
run's own report is the surviving record: the profile policy now records those
names, which keeps approval, persistence, and the wildcard and decision guards
unchanged.
2026-10-07 12:58:25 +08:00
Tianyi Cui f7e5b6d354 fix(plugins): install official source bundles from the running checkout 2026-10-07 01:26:01 +08:00
Tianyi Cui e9a68b2484 fix(plugin): clarify on-demand recovery and preserve package diagnostics 2026-10-07 01:26:00 +08:00
Tianyi Cui 8ed0b530ed feat(plugins): offer official bundles through on-demand installation 2026-10-07 01:26:00 +08:00
Tianyi Cui 996007e103 fix(plugin): retain scoped row identity and source diagnostics 2026-10-06 23:48:59 +08:00
Tianyi Cui b6ef9d5503 fix(plugin): identify retained scoped bundle rows precisely 2026-10-06 23:48:59 +08:00
Tianyi Cui 8a9767c25e feat(plugin): validate optional bundle lifecycles and session output 2026-10-06 23:48:58 +08:00
Tianyi Cui 3aa1cab43a feat(plugin): compose optional bundles inside agent presets 2026-10-06 23:48:58 +08:00
imccyu 99fce8d4ea docs(plugin-manager): clarify runtime resolution publication rules 2026-10-02 17:09:01 +08:00
imccyu 869afc493d fix(plugin-manager): refresh runtime package resolution 2026-10-02 17:09:01 +08:00
Turtle 819eb8078e Merge origin/master into turtle/remove-invariants-ccf1396aaf61 2026-10-01 16:33:09 +08:00
Turtle 9c5fb6b0c5 Merge pull request #5550 from deepseek-harness/turtle/plugin-version-hint-66b6a2501f82
feat(plugin-manager): name the exact spec when pnpm installs an older version
2026-10-01 12:36:36 +08:00
Turtle 43c5f1e924 fix(plugin-manager): explain another installed version only for one-registry runs 2026-09-30 18:42:32 +08:00
Turtle bab69fbec5 feat(plugin-manager): name the exact spec when pnpm installs an older version 2026-09-30 18:13:26 +08:00
turtle1999 00b363074a fix(plugin-manager): let the page remove a selection no package holds
Desktop loads its profile with `loadProfileDirectory`, so the retired
bundle removal moves there from `loadProfile` and covers every loader.

A name in `dsh.profile.bundles` that neither the profile's dependencies
nor the installation holds had no uninstall on the Plugins page: the
button required `installed`. The Host now reports such a selection as
`removable`, and `removeBundle` deselects it without running pnpm. The
page shows uninstall for `installed || removable`.
2026-09-30 17:36:56 +08:00
Turtle f028f25667 refactor: remove runtime invariant plugins
Delete @deepseek-ai/dsh-invariants, every package's ./invariant companion
and its tests, the invariant gates and Vitest setup, the scoped-event
resolver generator, and the INVARIANT-coded listener rethrow paths.
Update docs, READMEs, Agent Notes, and add an upgrade guide.
2026-09-30 12:52:18 +08:00
turtle1999 9b79f97010 fix(plugins): keep aliases and whole user information in bundle sources
Address the second ds-review-bot round on the bundle Source section:

- remove an http(s) URL's user information up to its last `@`, so a
  username containing `@` no longer leaves the password behind;
- keep the dependency name before a local or git spec when the package's
  own manifest name differs, so reinstalling restores the alias;
- accept scp-like git addresses with any user name;
- show Built in for a profile dependency whose loaded copy the
  installation supplies, instead of hiding the section;
- align the PackageView, subsystem page, and README wording with the
  shadowing rule and the kept query string, and assert the source of
  not-bundle and unreadable bundles.
2026-09-29 13:27:43 +08:00