Commit Graph
93 Commits
Author SHA1 Message Date
imccyu b67cf4d381 test(web): verify plugin header wrapping by intrinsic fit 2026-10-13 01:44:18 +08:00
Yif 9e62c1c229 fix(web): restore the plugin header subtitle row to its flex layout
The responsive change had moved `.pageIntro` off flex, which put the information
icon 1.06px off the subtitle's vertical centre and failed the existing geometry
assertion in `plugin-manager.e2e.ts`. Restore the flex row and the button's
`flex: none`, which keeps the 4px gap and the centring. The header still wraps
its action group onto another line, which is what this change is for.

Pin the wrap threshold in both header scenarios. Each records whether the action
group sits beside or below the heading, the plugin scenario asserts the wide and
narrow sides explicitly, and the plugin scenario launches its own scaffold so an
install task left by an earlier test cannot move the threshold between runs.
2026-10-12 23:15:20 +08:00
Yif ee558c82d7 feat(web): reflow the Plugins page header at narrow widths
The page header wraps its action group onto another line when the title and the
actions no longer fit together, so the title keeps its width and the actions keep
their labels on one line. The information button follows the subtitle text
instead of a flex row, which keeps it beside the copy at every width.

Cover the header in the plugin-manager browser scenario: the action group stays
inline when it fits, moves below when it does not, keeps its labels on one line,
stays inside the header, and retains focus across the change.
2026-10-12 21:56:08 +08:00
Ziya 640e28cd94 feat(web): reorganize plugin settings and add experimental catalog page (#5922)
Group built-in settings before optional and installed plugins, and open the full experimental catalog on a separate page.

Preserve detail navigation and unsaved configuration when installation finishes, and use the visible More label as the accessible name.
2026-10-08 23:42:56 -07:00
Tianyi Cui c13e225301 test(web): budget the remaining plugin switch writes
Review found the same Host profile write plus inventory reload chain still
uncovered in worktree-opt-in.e2e.ts, and still written as 10_000 literals in
plugin-manager.e2e.ts. Both now use PLUGIN_TOGGLE_SETTLE_MS, the README keeps
only the convention, and the constant's JSDoc names the store's load() as the
reader that republishes the switch.
2026-10-07 12:28:36 +08:00
Tianyi Cui 530c4d67aa test(web): bound plugin-card switch polls by the profile write chain
A plugin-card switch republishes `aria-checked` only after the Host writes
the profile and the panel re-reads its inventory. That chain measured
0.5-0.8 s on an idle host and 2.0-4.8 s across 32 samples in a 16-worker
lane, so Vitest's 1-second `expect.poll` default truncated it and failed
the switch assertions of the CoT translation scenarios in CI.

Every poll that follows a plugin-card switch click now passes the shared
PLUGIN_TOGGLE_SETTLE_MS budget; assertions, retries, and product code are
unchanged.
2026-10-07 12:11:03 +08:00
Tianyi Cui c135bdf483 test(plugin): refresh official discovery browser and API evidence 2026-10-07 01:26:00 +08:00
Tianyi Cui de27882007 test(plugin): refresh optional bundle inventory and browser evidence 2026-10-06 23:48:59 +08:00
Tianyi Cui cfc6be809c feat(reasoning): persist opt-in machine translations 2026-10-06 15:36:14 +08:00
Tianyi Cui a1363f7f47 fix(worktree): offer GUI opt-in through official plugins 2026-10-06 01:39:47 +08:00
imccyu 732dd913cf feat(inspector): embed Chrome DevTools and bundle optional diagnostics 2026-10-01 00:14:13 +08:00
Turtle c006c6c074 Merge pull request #5535 from deepseek-harness/fix/retired-schedule-bundle
fix: drop retired bundle selections and let the Plugins page remove orphans
2026-09-30 18:11:54 +08:00
Turtle 4ac4e95460 Merge pull request #5394 from deepseek-harness/fix/bundle-only-metadata
fix(plugins): read package.json only for package-root plugins
2026-09-30 18:10:34 +08:00
turtle1999 d9d9ad3716 test(web): expect Uninstall on an unresolvable bundle selection 2026-09-30 17:54:03 +08:00
Chinesezjc 3e5231bc6f Merge origin/master into feat/preset-scoped-schedule-tools
Resolutions:
- `docs/subsystems/schedule.*` and `packages/client/ui-schedule/README.*` keep
  this branch's shipped-composition text with master's newer wording (Rules and
  Records tabs, the icon-button linked-session layout).
- `docs/event-producer-consumer.*` regenerated by `gen-doc-graphs`.
2026-09-30 13:49:30 +08:00
turtle1999 6c6b85e572 Merge remote-tracking branch 'origin/master' into turtle/bundle-only-metadata-5394 2026-09-30 11:41:32 +08:00
turtle1999 8339f16c1d fix(plugins): read package.json only for package-root plugins
Subpath plugins are not packages, so they never read a package.json and
take their icon from the exported <specifier>/icon resource, like locale.
Package roots keep manifest text fallback and icon, with ./icon as the
fallback image. Drop the bundle-only reader option.
2026-09-30 11:41:26 +08:00
Turtle 508e71b686 Merge pull request #5428 from deepseek-harness/turtle/plugin-source-section
feat(plugins): 在组合包详情页显示来源信息
2026-09-30 11:15:39 +08:00
Ziya 4d59dc2dd6 Merge pull request #5399 from deepseek-harness/demo/plugin-first-ui
feat(web): add Creator entry to the plugin menu
2026-09-29 08:03:23 -07:00
ZiyaZhang 57383630a6 Merge updated Creator mode parent and keep shared entry flow 2026-09-29 02:30:07 -07:00
Chinesezjc fc395556b6 Merge remote-tracking branch 'origin/master' into feat/preset-scoped-schedule-tools 2026-09-29 16:39:19 +08:00
Ziya 2bde15f551 Merge pull request #5410 from deepseek-harness/turtle/plugin-upgrade-copy-66fc552187f2
fix(ui-plugin-manager): tell users to reinstall a plugin to upgrade it
2026-09-29 00:00:44 -07:00
Yif fd4cd8b348 docs(web): correct the install guide's stale comments, JSDoc, and README
Review follow-up: the guide shows one package-name entry, so the comments
and copy that still described three forms or a displayed Git/local-path
example no longer match. The Git and local-path template strings keep their
replacement reminder for a field that still holds them; the constants' JSDoc
and the package READMEs now say that instead of claiming a displayed example.

Also moves .installSafetyText below the rule its comment heads, and pins the
upgrade assertion to the trust box rather than the whole dialog text.
2026-09-29 12:04:21 +08:00
Yif 7a0c6ebd9e refine(web): show only the package-name example in the install guide
The install guide listed the package name, a GitHub address, and a local
directory as numbered steps; only the package name needs an example. Keep
that entry and drop the index badge, give the item's hint and example the
title's text color, and balance the container's vertical padding.

The trust box above Install also states that installed plugins do not update
automatically, that upgrading means uninstalling and installing the new
version, and that later releases will keep improving that experience.
2026-09-29 11:57:21 +08:00
turtle1999 b96959ecf4 feat(plugins): show where a bundle comes from on its page
The bundle page ends with a Source section: the spec that installs the
bundle elsewhere, as `pnpm add` accepts it, or Built in for an official
bundle the installation ships, followed by its current version.

The Host's listBundles carries the new `source` field for profile
dependencies: git addresses and URLs as recorded, file:/link: paths made
absolute against the profile, and registry ranges, tags, or aliases after
the package name.
2026-09-29 10:51:33 +08:00
ZiyaZhang 66f00a9170 test(web): verify plugin entry across modes and session states 2026-09-28 12:21:45 -07:00
turtle1999 d12257c959 fix(plugins): preserve manifest icon precedence 2026-09-28 23:30:05 +08:00
Turtle de1ec63678 fix(ui-plugin-manager): tell users to reinstall a plugin to upgrade it
The already-installed refusal and the incompatible-version reason now say
that upgrading an installed plugin means uninstalling and installing again.
2026-09-28 22:46:51 +08:00
turtle1999 ecedbbc2e6 fix(plugins): reuse locale metadata and export bundle icons 2026-09-28 22:34:46 +08:00
ZiyaZhang 93a7d221ed test(web): align plugin menu snapshots and verify Creator flow 2026-09-28 06:55:46 -07:00
turtle1999 f30aec98b6 fix(plugins): reserve package display resources for bundles 2026-09-28 19:33:17 +08:00
Chinesezjc c6dd905972 feat(web): ship the Schedule service and task page in the Web composition
The reminder stack no longer hides behind an optional experimental bundle.
`packages/bundle/web-app/cordis.patch.yml` inserts `schedule` and
`ui-schedule`, so a shipped profile mounts the task store, the delivery
runtime, and the Automation tasks page; the
`@deepseek-ai/dsh-experimental-schedule-bundle` package and its wiring are
removed.

Preset ownership is unchanged: `standard`, `cordis`, and `ptc` declare the
clock and the four reminder tools in their own scope, and `minimal` declares
neither, so a minimal session carries no reading and no reminder tool even
though the service is mounted.

`apps/cli` depends on `@deepseek-ai/dsh-tool-schedule`, and
`packages/bundle/web-app` declares `@deepseek-ai/dsh-schedule` and
`@deepseek-ai/dsh-client-ui-schedule`: preset and profile rows resolve plugin
names from the installation anchor, so a missing declaration leaves the row
without a fiber and every session creation fails with
`agent-preset/invalid`.

Documentation, Agent Notes, and the recorded Web fixtures follow the shipped
composition.
2026-09-28 18:31:53 +08:00
Chinesezjc ab86d7a568 Merge remote-tracking branch 'origin/master' into feat/preset-scoped-schedule-tools 2026-09-28 16:34:27 +08:00
Yif 9e8db21d2f fix(web): distinguish an off switch from a disabled one in dark mode
The off-state thumb reused the palette's primary foreground, which resolves
to near-black in dark mode; against the translucent track it read as
disabled, while a disabled control differs only by half opacity. Give the
off state its own thumb color through the new `--dsw-alias-switch-thumb`
alias: white in light mode and neutral-bluish 400 in dark mode.

The plugin management info button also becomes an 11px caption-colored icon
in a 20px square, keeping the 4px gap beside the subtitle.

Refs #5347
2026-09-28 15:46:43 +08:00
Chinesezjc 8d7ba898f8 Merge origin/master into feat/preset-scoped-schedule-tools
master now ships the reminder stack as the optional
`@deepseek-ai/dsh-experimental-schedule-bundle`, which inserts the rows the
Web composition leaves out. This branch keeps the preset-level ownership
beside it.

Resolutions:
- The bundle inserts `schedule` and `ui-schedule` only. It no longer inserts
  `time-context`: the clock belongs to the `standard`, `cordis`, and `ptc`
  presets, and a Host row for the same package would mount it in two scopes
  and append two readings per step.
- `packages/bundle/web-app/package.json` declares `@deepseek-ai/dsh-time-context`
  again: the presets reference it by bare name, so `verify-cordis-config`
  requires the dependency.
- The bundle's patch spec, locale, package, README pair, the optional-bundle
  composition spec, the plugin-manager component list, and the
  `schedule-after` roster assertions describe the two-row bundle and the
  preset-owned clock and tools.
- Documentation and Agent Notes follow the same split; the note master
  archived stays frozen with its manifest hashes.
2026-09-28 13:04:51 +08:00
ZiyaZhang adb58a76d1 fix(web): align plugin guidance with review feedback 2026-09-27 09:31:07 -07:00
ZiyaZhang 473fd15101 fix(web): clarify plugin management guidance and warnings 2026-09-27 07:18:09 -07:00
Yif 69b55fb53b fix(plugins): preserve registry keyboard selection and focus feedback 2026-09-27 14:25:27 +08:00
Yif db5ed22884 test(plugins): make the refresh spinner hold deterministic
Extract settleRefresh() so the spinner-minimum hold has one settle point,
advance the e2e fake clock past the 400ms hold before asserting the button
restores, and drive the disposal-during-hold store test on fake timers for
both success and failure reads.
2026-09-27 12:42:30 +08:00
Yif 9fabb67bca test(plugins): trim redundant refresh/tooltip coverage
Drop the plugin-manager refresh e2e to a single failure round: the store's
success and retry outcomes are covered deterministically by
manager-store.client.spec.ts, while the e2e keeps its unique value — real
500ms tooltip timing, a running spinner animation, aria-busy, and the
portaled failure toast over kept cards. Regenerate refresh.expected.md.

Remove the components spec tooltip-delay case; ui-primitives'
tooltip.client.spec.tsx already covers 499/500ms hover/focus delay, early
cancellation, and portaling. PluginManagerPage.tsx stays at 100% coverage.
2026-09-27 02:28:09 +08:00
Yif 9c6bdd020c Merge master into ui/plugin-example-visual-polish 2026-09-27 02:03:39 +08:00
Yif f057cc37c4 fix(plugins): guard IME submission and refine automation icon 2026-09-27 01:44:00 +08:00
Yif 5d72bfbe49 fix(plugins): refine refresh feedback and plugin artwork 2026-09-27 01:00:50 +08:00
Yif d27663918d Merge master scheduling updates and preserve approved icon 2026-09-26 22:11:11 +08:00
Yif 16c30ed6ba fix(plugins): polish installation interactions and loading visuals 2026-09-26 00:50:42 +08:00
ZiyaZhang 912e5bafa1 refactor(schedule-bundle): give the Schedule rows the usual per-row switches
The bundle no longer declares `dsh.bundle.rowSwitches`, so its page offers a
switch per row while it is on, as every other bundle does. The README records
that the three rows work only together, and the Agent Note records the
rejected lock.
2026-09-25 07:50:15 -07:00
ZiyaZhang 6085a56eb6 Revert "feat(plugin-manager): refuse to switch a row alone when its bundle switches its rows as a whole"
This reverts commit 5bc789e8617bc7b7fe8b56ad3629ed385692c54d.
2026-09-25 06:57:32 -07:00
ZiyaZhang 5511abfa14 Merge remote-tracking branch 'origin/ux/automation-tasks-plugin-row' into feat/schedule-bundle-owns-rows
# Conflicts:
#	docs/user/guide/schedule.i18n.yaml
#	docs/user/guide/schedule.md
2026-09-25 01:52:10 -07:00
ZiyaZhang b9ace787e4 feat(plugin-manager): refuse to switch a row alone when its bundle switches its rows as a whole
With `dsh.bundle.rowSwitches: false`, `listPlugins` reports each row the
bundle inserts with the `bundle-switch` read-only reason, so
`setPluginEnabled`, the `plugin_manager` tool, and the Plugins page agree,
and the page draws no switch for such a row. `bundleRowSwitches` validates
the manifest field; `listBundles` reports a non-boolean value on the bundle.
`BundleInfo.rowSwitches` is removed.
2026-09-25 01:51:00 -07:00
ZiyaZhang d6ffaa0198 test(plugin-manager): pin the English Automation tasks row and write its label as text
The language-switch case now reads the Automation tasks row's English title
and description, and the English guide writes the UI label as plain text like
the rest of the guide.
2026-09-25 01:19:47 -07:00