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.