Commit Graph

2261 Commits

Author SHA1 Message Date
Pine a53769955b feat(plugin): plugin marketplace, durable install persistence, skill manager
Add an in-app plugin marketplace fed by a remote web catalog: the host
plugin-inventory gateway gains marketplaceList/Install/Uninstall remotes,
a durable per-user install table reconciled against the actual profile, and
git/npm/tarball/bundle install paths with non-interactive git and vendored
pnpm. The Web Settings surface gains a sibling 插件市场 tab that lists the
catalog with recommended badges, repository links, and a combined sort
(recommended first, then catalog priority, then id).

Add a host + client skill manager: list local skills by direct filesystem
discovery, and install/uninstall/toggle/edit their SKILL.md from git/npm/
tarball/local sources in the writable user root.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-15 17:04:36 +08:00
Pine ebe2d43bee chore(ui-conversation): clarify the preview badge copy
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-14 23:02:06 +08:00
Pine c90beb5289 style(plugin-inventory): align install/toggle controls with the design system
The install input matched the catalog search field, and the install button plus
the enable/disable toggles now use the shared Button primitive (primary /
outline sm), replacing unstyled native buttons. The install hint clarifies that
registry installs require a published npm package.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-14 23:01:57 +08:00
Pine aaa434afbd feat(desktop): dynamic About version, update manifest date, and a unified publish flow
The About section hardcoded its version; the main process now exposes
get-app-info so it reads app.getVersion() dynamically, and the update result
carries the manifest release date. The manifest generator orders versions
numerically (0.10.0 outranks 0.9.0). A new stage-release script copies
releases.json plus installers into the deepseek-harness-web site root's
updates/, which deploy.py publishes to OSS alongside the download page, so the
app and web share one update channel. The About section also gains links to the
release site and official site.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-14 23:01:36 +08:00
Pine 768bcd4356 fix(image-recognition): keep the vision key on its own ref; add clear-key
Image recognition and the chat model shared DEEPSEEK_API_KEY: the
image-recognition bundle defaulted apiKeyEnv to the model key, so saving one
overwrote the other. Point the bundle at IMAGE_RECOGNITION_API_KEY and guard
both the provider and the settings card against a stale model ref, so vision
never reads or writes the chat key. Also add a clear-key button, default the
model to qwen3-vl-flash on the DashScope compatible-mode endpoint, and send
file images as base64 with a normalized base URL.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-14 23:01:15 +08:00
Pine e87a3084ea feat(desktop): manual-download update check and OSS release manifest
Adds an unsigned, manual-download update flow. The main process fetches the OSS
updates/releases.json manifest (DSH_UPDATE_URL overrides), compares the latest
version, and on startup and hourly prompts to open the per-platform installer
URL; a preload bridge exposes the same check to the SPA's About "check for
updates" button, which renders the version, notes, and a download link.
scripts/generate-release-json.mjs builds the manifest from the packaged
.dmg/.exe. Windows nsis packaging is configured.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-14 20:45:21 +08:00
Pine e18cfbfb93 feat(plugin-inventory): live plugin activation, mirror install, and toggle lists
Installing a plugin now activates it without a restart: the CLI boot provides a
dshReloadProfile handle that re-runs the profile composition and applies it to
the running root Include, and the install/uninstall Remotes recompose live when
the handle is present (restartRequired: false). Registry installs try the
ordered INSTALL_REGISTRIES mirrors with the official npm registry as the final
fallback, erroring only when every source is unreachable. The enable/disable
guard splits into a REQUIRED_PLUGINS blacklist and a USER_TOGGLEABLE_PLUGINS
whitelist (default toggleable) generated from the running plugin list, and the
offline optional-bundle catalog is emptied (default bundles are not
installable/uninstallable). The plugin-list tab becomes a registry install form
and shows immediate-activation instead of a restart notice.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-14 20:45:00 +08:00
Pine a0efe02c04 fix(plugin-inventory): rename install Remote to installPlugin
The RemoteNamespaceService reserves `install` as its private registration
method, so a Remote method also named `install` collided at client-api boot
(`pluginInventory/install conflicts with its namespace service`). Rename the
plugin-install Remote to `installPlugin` across host, client, and tests.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-14 18:57:08 +08:00
Pine 6cd7c5a590 feat(plugin-inventory): offline bundle and pnpm plugin install for the desktop
Adds an install surface to the plugin-inventory gateway: availableBundles lists
the curated offline-installable optional bundles (AVAILABLE_BUNDLES); install
composes an offline bundle into the profile's dsh.profile.bundles, or for a
registry spec runs pnpm against the writable profile via the bundled Node and a
vendored pnpm (gated behind the dshAllowPluginInstall context flag, set only by
the desktop boot); uninstall removes a bundle layer. The reconcile logic from
`dsh plugin add` moves into app-boot as shared helpers. The desktop vendored
pnpm into the harness and sets the allow-install env; the plugin-list SPA gains
an installable-bundles section. Tests cover the guard, install helpers, and the
SPA section at 100% host coverage.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-14 18:46:39 +08:00
Pine 7f4a87b992 i18n(ui): clarify preview build and extended image-recognition copy
Notes the preview build as unofficial in the conversation hero and describes the
image-recognition plugin as an extension beyond the official DeepSeek surface.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-14 17:39:47 +08:00
Pine 1031b63100 feat(ui-settings): add an About section with company copy and version check
Registers a new `settings.section` (id `about`) in ui-settings-general that
introduces PineSound, names the product build, shows the current version, and
offers a check-updates control (a client-side placeholder comparing against a
known-latest constant pending a real update channel). Adds a 16px info icon to
ui-primitives and wires the section into the settings nav. Tests cover the
registration and the About component; READMEs and translation-pairing hashes
are updated.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-14 17:39:02 +08:00
Pine a8ec40ad34 feat(plugin-inventory): flat plugin list with a default-open toggle guard
The plugin-list tab rendered one flat list of every Loader entry — no separate
"system plugins" section — with each card showing its real enabled state and an
enable/disable button (a required plugin shows only a read-only note). The
enable/disable guard flipped from default-protect to default-open: only the
small REQUIRED_PLUGINS core (entry tree, Remote RPC spine, session/agent spines)
is protected from being disabled, so the shipped plugins are actually
toggleable. Tests, host READMEs, and the enable-disable agent note track the new
grouping and guard.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-14 17:38:38 +08:00
Pine cbec8cd6a9 feat(plugin-inventory): group by enabled state and allow re-enabling disabled plugins
The plugin-list tab now splits by current state: disabled plugins sit in the
main list with an enable button (so a bundle-default-disabled plugin can be
re-enabled), while enabled plugins sit in the collapsible system section —
a user-added enabled plugin keeps a disable toggle, a required one shows
none. setEnabled refuses to disable a required plugin but allows re-enabling
a disabled one, verifying the fiber activates and reverting a
dependency-missing enable.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-14 14:30:13 +08:00
Pine d385b7cf05 feat(ui): group the plugin list into toggleable and system sections
User-added (toggleable) plugins carry an enable/disable button in the main
list; required system plugins sit in a separate collapsible 'system plugins'
section with no controls. The system section starts expanded so the existing
web e2e/snapshot (which targets a system plugin row) still passes.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-14 14:23:42 +08:00
Pine df085ac6f8 feat(plugin-inventory): guard critical plugins from enable/disable
Every entry now carries a protected flag. The guard is default-protect:
disabling a plugin another plugin injects breaks the dependent, and enabling
one whose service is unavailable fails the boot (dsh-tool-ralph: pending on
workflowEngine). setEnabled refuses and the UI hides the toggle for every
shipped plugin; only opt-in-bundle plugins (USER_TOGGLEABLE_PLUGINS in
required.ts) are toggleable.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-14 14:10:38 +08:00
Pine f01795ea97 feat(ui): add enable/disable toggle to the plugin-list tab
Each expanded plugin card gains an enable/disable button wired to
pluginInventory.setEnabled; the tab re-lists after toggling. Adds zh/en
copy for the toggle states.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-14 13:53:36 +08:00
Pine 18457f57b9 test(ui): render the image-recognition card's endpoint, key, and model controls
Unit-render the card after expanding its disclosure header, asserting the
three configurable controls appear (getByLabelText throws when absent).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-14 13:36:28 +08:00
Pine f0500eea3d test(ui): update ui-settings-plugins assertions for the image-recognition card
The apply test now expects four plugin.item cards (bash, agent-loop,
web-search, image-recognition), a cardCount of 4, and two credential
re-reads (web-search and image-recognition both watch the reference).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-14 13:17:34 +08:00
Pine c73b9eb403 feat(ui): add model field to the image-recognition settings card
The card now configures the provider endpoint, API key, and model, mirroring
the provider Config.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-14 11:33:13 +08:00
Pine b6b982dc87 feat(ui): add the image-recognition settings card
An image-recognition card in the Plugins settings page (endpoint + key),
cloned from the web-search card: baseURL via the settings section, the key
through the credentials domain.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-14 11:15:26 +08:00
imccyu abe560f81e release(dsh): 0.1.0-rc.5 2026-08-13 18:49:33 +08:00
imccyu 8c1e8d9890 build(release): publish the dsh family publicly
Every release member now declares publishConfig.access: public, so the scope no
longer mixes levels: the 221 packages/*/* and apps/* manifests join the vendored
framework and the native packages.

check-workspace-constraints drops the per-sequence expectation and holds every
release member to public, which is what stops a member from drifting back.

Access is a property of the package, not of a version: the dsh packages already
published as restricted become world-readable at their next publication.
2026-08-13 18:49:32 +08:00
imccyu 8a954b2eca release(dsh): 0.1.0-rc.3 2026-08-13 18:39:06 +08:00
imccyu a41085dfd4 ci: skip 2026-08-13 18:25:49 +08:00
imccyu 42c359e57b fix: ci 2026-08-13 18:14:13 +08:00
creatixchu 0f1c29c751 test(web): cover onboarding branches 2026-08-13 18:03:15 +08:00
creatixchu fc90114ad9 fix(web): add English onboarding copy 2026-08-13 17:35:21 +08:00
imccyu 60b04b6ef7 release(dsh): 0.1.0-rc.2 2026-08-13 17:19:37 +08:00
Tianyi Cui 5c2244cc9c Merge origin/master into agent/onboarding-modal-flow 2026-08-13 16:57:01 +08:00
imccyu d8f5b0507d Merge pull request #2495 from deepseek-harness/release/dsh-0.1.0-rc.1
release(dsh): 0.1.0-rc.1
2026-08-13 16:51:36 +08:00
Ziya f8c0bf9186 Merge branch 'master' into agent/onboarding-modal-flow 2026-08-13 16:40:58 +08:00
Tianyi Cui 7cbb40bc8a Merge remote-tracking branch 'origin/master' into worktree/fail-web-wildcard-host 2026-08-13 16:39:00 +08:00
Tianyi Cui 0a42836fbb fix(web): address wildcard host review 2026-08-13 16:37:49 +08:00
Tianyi Cui f75d785e79 fix(web): show newest sessions first by default 2026-08-13 16:24:30 +08:00
imccyu 22ab3beac1 release(dsh): 0.1.0-rc.1 2026-08-13 16:22:33 +08:00
ZiyaZhang 9ee5aef98c feat(web): unify onboarding dialogs 2026-08-13 01:19:52 -07:00
_Kerman df643627c9 Merge pull request #2423 from deepseek-harness/xtr/fix-web-ui-geometry-and-sidebar-motion
fix(web): align composer geometry and sidebar motion
2026-08-13 15:57:44 +08:00
_Kerman dc0843c630 Merge pull request #2474 from deepseek-harness/xtr/trajectory-load-more-row
fix(web): keep older trajectory history loadable
2026-08-13 15:53:22 +08:00
_Kerman 2c837c267f fix(web): address trajectory pagination review 2026-08-13 14:38:15 +08:00
_Kerman 93d7eea12a fix(web): thin trajectory history divider 2026-08-13 14:20:19 +08:00
_Kerman 14cf3334be fix(web): keep older trajectory history loadable 2026-08-13 14:04:06 +08:00
creatixchu 5061ec2ef0 feat(web): 移除首启内测声明,遥测保持默认关闭 2026-08-13 13:47:09 +08:00
Tianyi Cui c905c4694e Adopt MIT for DSH packages 2026-08-13 13:07:24 +08:00
imccyu 3e8a1cfa33 release(dsh): 0.0.1-rc.5 2026-08-13 06:14:27 +08:00
imccyu a90d9af1b2 release(dsh): 0.0.1-rc.4 2026-08-13 05:16:02 +08:00
_Kerman 68e1d5a587 Merge remote-tracking branch 'origin/master' into dshw/pr-2423
# Conflicts:
#	packages/client/ui-sidebar/src/client/SidebarRoot.tsx
2026-08-13 04:32:57 +08:00
imccyu 57abe62a83 Merge pull request #2438 from deepseek-harness/release/dsh-0.0.1-rc.3
Release: dsh@0.0.1-rc.3
2026-08-13 04:18:26 +08:00
imccyu 499d397631 feat: optimze skill and tool 2026-08-13 03:46:20 +08:00
imccyu 1e99f20963 release(dsh): 0.0.1-rc.3 2026-08-13 03:24:38 +08:00
imccyu 1ff62760d1 fix: rebase 3 2026-08-13 02:29:17 +08:00