The RPC settings.describe only serves namespaces on the WEB_SETTINGS_NAMESPACES
and PRODUCT_SETTINGS_NAMESPACES allowlists; a namespace absent from both answers
settings-not-exposed even when its owner registered it. image-recognition-http
was missing, so the plugin-config card's scope stayed unavailable and the card
rendered nothing. Add it to the web allowlist beside web-search-deepseek.
Co-Authored-By: Claude <noreply@anthropic.com>
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>
tsdown re-bundles all host packages every build:lib:host (~35s), which
desktop:dev runs each time. desktop:dev:fast skips it for web/client/
desktop-only changes (vite compiles from source), leaving the full path for
host-package changes.
Co-Authored-By: Claude <noreply@anthropic.com>
The package name must be a valid npm/pnpm workspace name; the display name
belongs in electron-builder productName. The invalid rename broke
pnpm --filter @deepseek-ai/dsh-desktop in desktop:dev.
Co-Authored-By: Claude <noreply@anthropic.com>
Expose ImageRecognitionRuntime.available() and gate the image-task pre-step
injection on it, so the capability is dormant until an endpoint is
configured instead of guiding the model to a call that can only fail.
Co-Authored-By: Claude <noreply@anthropic.com>
The web profile template mounts the bundle; apps/cli must declare it so the
harness resolves it from the installation anchor for both fresh and existing
web profiles.
Co-Authored-By: Claude <noreply@anthropic.com>
Add the image-recognition bundle to the web profile template so the
capability is on by default for new web profiles.
Co-Authored-By: Claude <noreply@anthropic.com>
Document the four image-recognition packages and the vision group, register
the vision domain in the package index, add the capability decision as an
Agent Note, declare the invariants peer dep, and drop the unused agents
injection from the consumer.
Co-Authored-By: Claude <noreply@anthropic.com>
Register the tool-image-recognition package in the tool-catalog generator so
its schema is catalogued, and add the model-agnostic vision seam/provider/
bundle to the README Model Experience omission allowlist.
Co-Authored-By: Claude <noreply@anthropic.com>
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>
Add the vision path domain to the tsconfig base paths catch-all, reference
the four new packages in the host TypeScript program, and record their
workspace deps in the lockfile.
Co-Authored-By: Claude <noreply@anthropic.com>
Mounts the capability seam, the configurable HTTP provider, and the
model-facing recognition consumer. Not in any default profile's bundles
list — a user opts in per profile.
Co-Authored-By: Claude <noreply@anthropic.com>
Registers the recognize_image tool and a bundled image-recognition skill,
and hooks agent/pre-step to deterministically inject the skill body when a
step input carries an image (content block or image path/URL), so the model
recognizes the image before continuing the task.
Co-Authored-By: Claude <noreply@anthropic.com>
Registers an OpenAI-compatible chat-completions provider into
ctx.imageRecognition with a user-editable baseURL + API key via a settings
section and the credential plane. Logs the secret-free vision request body
as the image-recognition/llm-request session event.
Co-Authored-By: Claude <noreply@anthropic.com>
Service Definition for ctx.imageRecognition: a provider registry and
provider-selecting execution, mirrored on the web seam (duplicate ids
rejected, order-independent selection, ImageRecognitionError taxonomy).
Co-Authored-By: Claude <noreply@anthropic.com>
Add desktop:dev/build/pack scripts, approve the electron build script in
pnpm-workspace.yaml allowBuilds, and reference apps/desktop (plus its
tests) in the host TypeScript program. Records the electron and
electron-builder deps in the lockfile.
Co-Authored-By: Claude <noreply@anthropic.com>
Spawn the real dsh CLI running the web profile on loopback (OS-assigned
port), parse the printed readiness URL, and open a native window at it.
The harness and its native addons stay on the system Node ABI; the main
imports only electron and node builtins.
Co-Authored-By: Claude <noreply@anthropic.com>
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.
Replace the single DSH_CI_FAILOVER variable with two independent
switches so an outage on one platform no longer retargets the other:
- DSH_CI_FAILOVER_LINUX: the three required Linux workers (node-24,
node-24-coverage, node-24-consumers) and the all-checks-passed verdict,
which resolves its pool to vm-backup and keeps its concurrency and
cache-restore branches.
- DSH_CI_FAILOVER_WINDOWS: the non-blocking windows-native job, which
resolves to the dsh-win-ci pool.
all-checks-passed rides the Linux switch because it aggregates the
required Linux workers and runs on the vm-backup pool. The Dependabot
exclusion is preserved on both switches. The failover runbook (EN/ZH)
and its translation pairing, plus the docs that referenced the old
variable, are updated in the same change.