Commit Graph
3847 Commits
Author SHA1 Message Date
turtle1999 9a83772560 fix(plugin-manager): request approval for single-call full access 2026-09-16 16:53:34 +08:00
turtle1999 470d4aae11 fix(plugin-manager): require full access for agent tool calls 2026-09-16 16:27:48 +08:00
turtle1999 040be00cb4 test(creator): align Web fixtures with persistent plugin management 2026-09-16 16:10:40 +08:00
turtle1999 92da029f6d test(creator): replace retired Cordis tool scenarios 2026-09-16 15:39:17 +08:00
turtle1999 ed32f57f88 feat(creator): use Plugin Manager for persistent plugins 2026-09-16 15:39:16 +08:00
yudshj 82ab876331 fix(office): validate strict and corrupt OOXML 2026-09-16 15:21:18 +08:00
yudshj fa518ecd89 feat(desktop): enable standalone Office skills 2026-09-16 15:21:18 +08:00
Yichen Jiang 99402378b7 Merge pull request #4333 from deepseek-harness/worktree/user-terminal-permissions
feat(web): give user terminals system-user permissions
2026-09-16 15:04:33 +08:00
Turtle e879c7456a Merge pull request #4321 from deepseek-harness/turtle/builtin-plugin-i18n
fix(web): localize built-in plugin names and descriptions
2026-09-16 14:37:15 +08:00
07akioni 46bac5f7db Merge master and retain desktop execution PATH isolation 2026-09-16 14:20:57 +08:00
07akioni 3e6d93171d Keep desktop package launchers out of the Host execution PATH 2026-09-16 14:03:41 +08:00
lsdsjy 285da0fa64 style(desktop): wrap dialog mock after rebase 2026-09-16 14:03:25 +08:00
Yichen Jiang ab695ef4cf feat(web): give user terminals system-user permissions 2026-09-16 13:52:23 +08:00
lsdsjy 21c7828678 docs(desktop,client): align native directory picker summaries 2026-09-16 13:50:38 +08:00
lsdsjy 48dd4b3bea test(desktop,client): keep picker composition coverage with its feature 2026-09-16 13:50:37 +08:00
lsdsjy ea5f1dce4a fix(desktop,client): preserve folder creation and verify picker wiring 2026-09-16 13:50:21 +08:00
lsdsjy 73dcae2915 fix(desktop,client): attach workspace folder dialogs to the application window 2026-09-16 13:50:07 +08:00
07akioni a66d81e33f fix(ptc): limit Electron selector to startup and budget native tests 2026-09-16 13:11:08 +08:00
yudshj 869a3f6d27 feat(desktop): ship standalone Python Office runtime 2026-09-16 13:00:13 +08:00
07akioni a139e6e9e1 fix(ptc): preserve Electron Node mode when launching programs 2026-09-16 12:52:50 +08:00
Tianyi Cui c4f1cae6c6 Merge pull request #4313 from deepseek-harness/fix/llm-remove-v4-flash-models
feat(llm): drop the V4 Flash and V4 Flash Vision Exp default models
2026-09-16 12:36:35 +08:00
Turtle 6bc7938a15 fix(web): localize built-in plugin names and descriptions 2026-09-16 12:26:54 +08:00
Kexin Liu ac0acf55a6 Merge pull request #4231 from deepseek-harness/feat/composer-selection-keyboard
feat(client): give the composer's selections and its menus one keyboard model
2026-09-16 11:49:20 +08:00
Tianyi Cui f2beb99c3b feat(llm): remove the V4 Flash and V4 Flash Vision Exp defaults
The shipped DeepSeek catalog keeps V41 Flash and V4 Pro only; the removed
ids still pass through as text-only routes when configured explicitly.

Updates the adapter tests, the Web settings goldens that render the default
catalog, and the regenerated config catalog.
2026-09-16 11:26:21 +08:00
Yichen Jiang 2bc7697265 Merge pull request #3596 from deepseek-harness/feat/plugin-mgmt-4-web
feat(web): manage global plugins from the sidebar
2026-09-15 23:40:55 +08:00
Yichen Jiang a9fe93fc0b refactor(plugins): name bundles by their package name only
`dsh.title` was a manifest field this branch introduced: the manager read
it for `listBundles` and `inspect`, and the Web page showed it over the
package name. A bundle is named by its package name now, so `DshManifest`
keeps only its shipped fields, the page derives every heading from the
name, and the install dialog's subject line reads the name the Host
answered. The two e2e fixtures drop their titles and the manager lane's
goldens follow.
2026-09-15 23:31:54 +08:00
Yichen Jiang e22c63185a test(web): resolve the built app-boot when a scaffold launches
scaffold.ts required the launcher's built module at import time, so the
unit lane, which runs without a build, failed to load
scaffold-generation.spec.ts for its fixture-name helpers. The built copy
is now resolved on the first launch, which needs the build anyway; the
mounted copy is unchanged.
2026-09-15 22:56:07 +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 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
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
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 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 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
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
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
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
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
Yichen Jiang dc9256536b Merge remote-tracking branch 'origin/master' into feat/plugin-mgmt-4-web
Master now carries the final #4182 plugin manager and the live client
module graph of #4189, so the web management layer is re-ported onto
them:

- The manager keeps master's `ManagementError` codes, `ChangeResult`
  stages, `configure()` under `hmr.runExclusive`, `reload()` warnings
  and `writePluginEnabled` name matching, and adds back `inspect`,
  request-id installs with `plugin-manager/install-log` and
  `plugin-manager/install-state`, `cancelInstall`, `listBundles` titles,
  rows and overrides, `packageResult.kind`, `pnpmCommand` and
  `inspectTimeoutMs`, and `plugin-manager/changed` after each change and
  each `profile/reconciled`. A failed or cancelled installation restores
  the snapshotted manifest and lockfile instead of master's one-shot
  `pnpm remove` cleanup, so `cleanup` and `remainingDependencies` leave
  the result.
- App boot keeps master's reconciliation diagnostics and emits
  `profile/reconciled`; `watchUserPatches` goes with the launcher's
  watcher now that HMR owns profile reloads.
- The settings Plugin list tab stays read-only with #4189's page-local
  sync failures and retry; master's bundle form and row checkboxes are
  dropped again. The sidebar page words the Host's codes through its
  dictionary, and a client bundle change follows the live module graph
  without a page reload.
- The web e2e scaffold no longer chooses a reload policy: the base
  bundle's `hmr` row turns on with the profile context and application
  readiness, and `profile.hmr: false` disables it through an overlay for
  the startup-only scenario.
2026-09-15 17:28:08 +08:00