Commit Graph
18711 Commits
Author SHA1 Message Date
Yichen Jiang 430f88d1c5 refactor(web): keep the plugin manager's store state types package-private
The Client entry re-exported ConfirmState, InstallState, ManagerNotice and
PluginManagerState from the controller store although no other package names
them; the page, its tests and the presentation module import them from the
store directly. Only the face, the page props and the locale key stay public.
2026-09-15 22:38:48 +08:00
Yichen Jiang 79729c3422 refactor(plugins): read a bundle's one-liner from the package description only
The dsh manifest gains no description field: a bundle's card shows the
package.json description, and the shipped optional bundles carry no
display title or description of their own until localized metadata is
designed. The plugin author tutorial shows the bundle declaration alone.
2026-09-15 22:26:58 +08:00
Yichen Jiang fa320209ab refactor(plugins): name the optional bundles in the launcher, not the installation manifest
OPTIONAL_BUNDLES in app-boot lists the bundles the installation ships
switched off; the plugin manager, the default-product isolation gate,
the workspace constraints, and the packed-install check read that one
list instead of a dsh.optionalBundles field in apps/cli/package.json.
2026-09-15 22:22:22 +08:00
Yichen Jiang f04c265725 refactor(plugins): stop announcing patch generations applied outside the manager
app-boot no longer emits profile/reconciled after a reload, and the plugin
manager no longer turns such a generation into a plugin-manager/changed
notice: the Web page learns of a CLI or hand edit on its next read. The
change event keeps only the reasons a manager operation produces.
2026-09-15 22:21:06 +08:00
Turtle 3e9b6ad94e fix: authenticate and reconcile approval delegations 2026-09-15 22:12:41 +08:00
Turtle 60d26ac4ab fix: dismiss prior reviews when delegating approval 2026-09-15 21:41:04 +08:00
Yichen Jiang 5e5f0a2393 fix(web): start the approval retry with a fresh log and keep the install dialog in view
The retry that allows blocked install scripts drops the failed run from
the dialog instead of stacking the new run under it. The dialog no longer
grows past the viewport: the card is capped and everything under the
head scrolls, so the close and edit controls stay reachable however long
pnpm's output is.
2026-09-15 21:40:54 +08:00
Yichen Jiang c3c7a4f412 refactor(app-boot): drop the root Include lookup by id
reconcileProfilePatches finds the root Include only through the registry
the module that mounted it keeps, as it did before the Web page: a tree
mounted by another copy of app-boot was a test-harness situation, not a
product one. The web e2e scaffold now mounts and resolves the profile
through the built app-boot, loaded with Node's own require so it shares
the module map with the Host plugins the profile loads, instead of the
source copy a bare import resolves to.
2026-09-15 21:39:42 +08:00
Yichen Jiang c13d21fb95 feat(web): approve blocked install scripts from the install dialog
When pnpm leaves a dependency's install scripts undecided, the failed
screen lists the pending packages and offers to allow them and retry in
place of plain retry; the Host saves the permission in the profile before
running pnpm again, and the installed screen names what was allowed. A
failure the Host could not name falls back to the manual instruction, and
a stale approval is worded like the other refusals. A new web lane drives
the whole flow through a fake pnpm that blocks, then installs.
2026-09-15 21:23:01 +08:00
Yichen Jiang 075aab54a7 Merge remote-tracking branch 'origin/master' into feat/plugin-mgmt-4-web
# Conflicts:
#	docs/config-catalog.i18n.yaml
#	docs/config-catalog.md
#	docs/config-catalog.zh.md
#	docs/module-graph.i18n.yaml
#	docs/module-graph.md
#	docs/module-graph.zh.md
#	docs/subsystems/boot.i18n.yaml
#	docs/subsystems/boot.md
#	docs/subsystems/boot.zh.md
#	packages/api/remotes/src/client/index.ts
#	packages/boot/plugin-manager/README.i18n.yaml
#	packages/boot/plugin-manager/README.md
#	packages/boot/plugin-manager/README.zh.md
#	packages/boot/plugin-manager/src/index.ts
#	packages/boot/plugin-manager/src/types.ts
#	packages/boot/plugin-manager/tests/manager.spec.ts
#	packages/client/ui-settings-plugin-inventory/src/client/locales.ts
#	packages/client/ui-settings-plugin-inventory/src/client/management.tsx
#	packages/client/ui-settings-plugin-inventory/tests/components.client.spec.tsx
#	packages/extensions/tool-cordis/src/api-catalog.ts
#	pnpm-lock.yaml
#	scripts/verify-default-product-isolation.spec.ts
2026-09-15 21:15:15 +08:00
07akioni 6f893f270a Merge pull request #4263 from deepseek-harness/desktop/native-fatal-recovery
feat(desktop): use native dialogs for fatal recovery
2026-09-15 21:06:04 +08:00
Turtle faf8da83f0 Merge pull request #4277 from deepseek-harness/turtle/plugin-build-approval
fix(plugin-manager): approve blocked dependency builds before retrying
2026-09-15 20:59:02 +08:00
Yichen Jiang 8059d76ea3 feat(plugins): ship Auto review as an optional bundle
The installation lists @deepseek-ai/dsh-experimental-auto-review beside
the two Agent Teams layers under dsh.optionalBundles, so a blank Web
profile offers it in the built-in group switched off. The bundle gets a
display title and one-liner, and its README says where it is switched on.
2026-09-15 20:58:37 +08:00
07akioni 8c28d87de8 Merge remote-tracking branch 'origin/master' into desktop/native-fatal-recovery
# Conflicts:
#	apps/web/tests/composer-draft-scroll.e2e.ts
2026-09-15 20:55:28 +08:00
imccyu 8129f8f6bd Merge pull request #4238 from deepseek-harness/worktree-bootfast3
Optimize Web startup dependency loading
2026-09-15 20:52:53 +08:00
Turtle e2ae9411cb feat: support weighted approval delegation 2026-09-15 20:51:47 +08:00
Yichen Jiang bc0ecae21f feat(plugins): ship optional bundles switched off and guide the install dialog
The dsh installation lists under `dsh.optionalBundles` the bundles it
ships for a person to switch on. The plugin manager reports them as
`optional`, and the Web plugin page shows them first, in a built-in
group with an official tag, off until selected and never removable.
Agent Teams ships this way, so a blank profile offers both of its
layers. Default-product isolation, the workspace constraints, and the
packed-install check accept that one dependency edge and nothing else
experimental.

A bundle's title and one-liner come from `dsh.title` and the new
`dsh.description`, else from the package name and `description`. A
dependency without a bundle patch is no longer listed unless the
profile selects it. The install dialog asks for a package name or
address; a guide under the field shows the three accepted forms with
an example each and ends in a security warning, and the copy no longer
speaks of a plugin ID.
2026-09-15 20:51:12 +08:00
imccyu 7fb4cb4c8e fix(client): version lazy chunks by build generation 2026-09-15 20:45:49 +08:00
imccyu 45c74c5483 fix(client): satisfy chunk loader test lint 2026-09-15 20:45:49 +08:00
imccyu b98d5c8003 test(client): cover lazy chunk loader branches 2026-09-15 20:45:49 +08:00
imccyu 72aaad53fd docs(config): refresh generated catalog pairing 2026-09-15 20:45:49 +08:00
imccyu b1471fd73c perf(client): load split bundles on demand 2026-09-15 20:45:49 +08:00
imccyu 7f5385bf01 revert(client): remove eager chunk scanning 2026-09-15 20:45:49 +08:00
imccyu d28807e05c fix(client): preserve lazy chunk runtime semantics 2026-09-15 20:45:49 +08:00
imccyu 7c74636892 perf(api-gateway): avoid duplicate client input parsing 2026-09-15 20:45:49 +08:00
imccyu 75a56be10c perf(llm): avoid aggregate pi-ai runtime import 2026-09-15 20:45:49 +08:00
imccyu ee9f43bc5d fix(client): align lazy chunk metadata 2026-09-15 20:45:49 +08:00
imccyu a5c224f9b1 feat(client): lazy-load PDF and terminal runtimes 2026-09-15 20:45:49 +08:00
Turtle ef4985792d docs: refresh plugin manager dependency graph 2026-09-15 20:45:09 +08:00
imccyu 49c341a449 Merge pull request #4292 from deepseek-harness/revert-4285-fix/composer-draft-scroll-jump
Revert "fix(web): insert pasted composer text as line-break nodes"
2026-09-15 20:44:54 +08:00
imccyu f0367432d4 Revert "fix(web): insert pasted composer text as line-break nodes" 2026-09-15 20:44:32 +08:00
07akioni 89a89408c6 refactor(desktop): remove unused recovery IPC paths 2026-09-15 20:38:37 +08:00
Turtle a5dea502a6 fix(plugin-manager): address approval review and remove agent notices 2026-09-15 20:37:36 +08:00
07akioni 6db9466c4e test(web): synchronize composer selection before deletion 2026-09-15 20:30:04 +08:00
07akioni 7b36291967 Merge remote-tracking branch 'origin/master' into desktop/native-fatal-recovery 2026-09-15 20:27:09 +08:00
07akioni 09be5f750a fix(desktop): clean profile core packages before production startup 2026-09-15 20:23:08 +08:00
Chinesezjc 0810a4403a Merge pull request #4285 from deepseek-harness/fix/composer-draft-scroll-jump
fix(web): insert pasted composer text as line-break nodes
2026-09-15 20:03:25 +08:00
07akioni 791f731c08 fix(desktop): bound fatal diagnostics and restore failed package operations 2026-09-15 20:00:05 +08:00
07akioni f4b7a5948c fix(desktop): support Node 26 runtime archive extraction 2026-09-15 19:44:59 +08:00
liukx0205 cccfdb6040 Merge origin/master into feat/composer-selection-keyboard 2026-09-15 19:42:37 +08:00
gengruilin 7aca916679 fix(docs): keep platform commands readable in MPA builds 2026-09-15 19:30:58 +08:00
Chinesezjc 96da25c8f5 fix(web): insert pasted composer text as line-break nodes
The composer's paste path used RangeSelection.insertText, which keeps every
pasted newline inside one text node. In that document the browser reports the
collapsed caret's geometry as the whole block's, so deleting the draft's last
line moved the capped scrollport to the draft's head while the caret stayed at
its end.

RangeSelection.insertRawText splits the input into text and line-break nodes,
the document a typed draft already has.
2026-09-15 19:29:53 +08:00
Yichen Jiang 96136c0282 Merge remote-tracking branch 'origin/master' into feat/plugin-mgmt-4-web 2026-09-15 19:17:09 +08:00
Yichen Jiang d50f062c64 fix(web): reword the plugin install dialog and name failed actions
Drop the "built-in components it changes" section from a bundle's page:
the rows a patch overrides are a composition detail nobody acts on from
the page. A failed enable, disable, uninstall, or row switch now says
which it was, and the Chinese toasts lose their trailing period. The
install dialog is worded around the plugin ID, which is the package
name, with a hint on what an ID looks like and no real plugin as the
example; the spec forms it names are the ones the Host's inspect takes.
2026-09-15 19:06:52 +08:00
Yichen Jiang 5c8b4e5834 fix(web): show the full package name on a bundle's page
A bundle's title is its `dsh.title` or a shortened name, so the page
never said which package a bundle is, and nothing on it could be typed
into an install elsewhere. The name now sits under the title as the exact
package spec.
2026-09-15 18:41:56 +08:00
creatixchu a79b97ecca feat(deliverables): compare each changed file from the card
Rows of the changed-files card open a `changes-diff` right-Sidebar tab that compares the file at turn start and turn end. The workspace-changes recorder copies every file a file tool edits into the Session's temporary directory before the first edit and again at turn end, so files git does not cover are compared without git and counted first-to-last; `maxFileBytes` caps copies and snapshot reads, and `diffTimeoutMs` degrades a slow line comparison to whole-file replacement.
2026-09-15 18:38:33 +08:00
Turtle f9756edac0 test(plugin-manager): canonicalize pnpm fixture workspace paths 2026-09-15 18:33:00 +08:00
Turtle db2e03b89d refactor(web): derive workspace hierarchy automatically from paths 2026-09-15 18:31:22 +08:00
Turtle 8848e1e94f test(plugin-manager): install packed addon for build approval coverage 2026-09-15 18:22:31 +08:00
Yif c6b81a75fd fix(web): polish the plugin page, detail page, and rail per design
Ported from fix/plugin-manager-ui-polish (cce193cff3, 4ed0f1c9cb) onto
the page as it stands after the #4182 re-port: a 32px rhythm on the page
and the detail sections; a four-arc pinwheel icon on the cards, the
detail head, and the sidebar entry; the version as a tag beside the
detail title and the crumb leading back only; a red-tinted uninstall pill
with its trash icon and a plus icon on Add plugin; a round refresh action
and caption-toned counts; 12px hover rounding across the rail controls;
and the group copy renamed to Installed. The non-bundle group and its
info tooltip are not carried, since the page lists bundles only.
2026-09-15 18:11:11 +08:00