Skip to content

Releases: Harvey-Will/dsh-vision-analysis

v0.2.1-rc.3

Choose a tag to compare

@Harvey-Will Harvey-Will released this 25 Oct 17:20

Version aligned with the DeepSeek Harness 0.2.1-rc.3 release (upstream
"wrap-up" cut published 2026-10-23). No code changes — every upstream API
this plugin uses was verified unchanged against the installed 0.2.1-rc.3
runtime.

Changed

  • Dev dependencies aligned to 0.2.1-rc.3; dependency/peer ranges extended
    with || >=0.2.1-rc.3. The engines.dsh: ">=0.1.0-rc.6" declaration
    already covers this runtime; the installed gate accepts the plugin across
    0.1.7-rc.2 → 0.2.2-alpha.1 (verified against the gate predicate in the
    0.2.1-rc.3 runtime).
  • pnpm overrides (session-projection, storage, dsh-llm dedupe) pinned to
    0.2.1-rc.3.

Verified

  • Upstream release notes cover three items — plugin browse/create "More"
    menus in the sidebars and conversation views, New Session draft recovery,
    and DeepSeek API-key model-list sync — none touch plugin APIs. Seventeen of
    eighteen plugin-relevant packages are byte-identical to 0.2.1-rc.2; the
    only changed package, dsh-client-ui-conversation, adds the
    conversation.session.header.views.actions slot (the More menu) and
    draft-adoption options (whenDraftExists) — both additive and unused by
    this plugin. Every contract we rely on is unchanged: InputZone,
    conversation.input.dock, InputState.attachmentIds, and
    resolveDraftAttachments verified in place.
  • 155/155 tests green; tsc 0 errors; client bundle build OK; real profile
    composition loads the plugin with zero warnings.

Known limitations

  • Unchanged from 0.2.0-rc.1.

v0.2.1-rc.2

Choose a tag to compare

@Harvey-Will Harvey-Will released this 17 Oct 12:57

Version aligned with the DeepSeek Harness 0.2.1-rc.2 release. No code
changes — every upstream API this plugin uses was verified byte-identical
against the installed 0.2.1-rc.2 runtime.

Changed

  • Dev dependencies aligned to 0.2.1-rc.2; dependency/peer ranges extended
    with || >=0.2.1-rc.2. The engines.dsh: ">=0.1.0-rc.6" declaration from
    0.2.1-rc.1 already covers this runtime; the installed gate accepts the
    plugin across 0.1.7-rc.2 → 0.2.2-alpha.1 (verified against the gate
    predicate in the 0.2.1-rc.2 runtime).
  • pnpm overrides (session-projection, storage, dsh-llm dedupe) pinned to
    0.2.1-rc.2.

Verified

  • Upstream release notes contain only DeepSeek-V4.1-Flash-1017 model support
    and DeepSeek Search/Fetch API integration — no plugin-surface changes. All
    sixteen plugin-relevant packages (dsh-settings, dsh-llm,
    dsh-attachment, dsh-tools, dsh-client-ui-slots / -renderer /
    -locale / -connection / -conversation, dsh-util-values, manifest /
    plugin-manager / app-boot / client-modules, api controllers) are
    byte-identical to 0.2.1-rc.1.
  • 155/155 tests green; tsc 0 errors; client bundle build OK; real profile
    composition loads the plugin with zero warnings.

Known limitations

  • Unchanged from 0.2.0-rc.1.

v0.2.1-rc.1

Choose a tag to compare

@Harvey-Will Harvey-Will released this 17 Oct 12:57

Version aligned with the DeepSeek Harness 0.2.1-rc.1 release, covering the
seven upstream releases since 0.2.0-rc.2 (0.2.1-alpha.1 … alpha.5,
rc.1, rc.2). One real adaptation: the compatibility gate now prioritizes
engines.dsh; everything else was verified unchanged.

Added

  • Declare engines.dsh: ">=0.1.0-rc.6" in engines. Since 0.2.1-alpha.4
    the plugin compatibility gate judges engines.dsh alone when declared
    (falling back to @deepseek-ai/dsh* peer ranges otherwise), and the
    release notes ask plugin authors to declare it. The range expresses the
    same supported span as the peer OR-ranges and was verified against the
    installed gate predicate: ACCEPT across 0.1.0-rc.8 → 0.3.0, the
    no-engines.dsh peer fallback still ACCEPTs, and a deliberately wrong
    engines.dsh is correctly REJECTed. Peer ranges are kept unchanged for
    older gates that only read peers.

Changed

  • Dev dependencies aligned to 0.2.1-rc.1 (pinned exact — the audited
    runtime); dependency/peer ranges extended with || >=0.2.1-rc.1.
  • Removed the @deepseek-ai/dsh-invariants dev dependency: upstream deleted
    the package and every ./invariant export in 0.2.1-alpha.1 (breaking
    change), and this plugin never imported it. The stale host-apiproxy
    transitive tree still peer-requires it through a final-only range (the
    known workspace:^ conversion bug), so an override pins its last published
    version (0.2.0-rc.2) to keep resolution working.
  • pnpm overrides (session-projection, storage, dsh-llm dedupe) pinned to
    0.2.1-rc.1.

Verified

  • API audit across 0.2.0-rc.2 → 0.2.1-rc.1 (against the installed
    runtime): zero breaking changes on every surface this plugin uses.
    dsh-settings/dsh-attachment/dsh-client-ui-slots/-locale/manifest/
    plugin-manager/app-boot/api controllers are byte-identical; dsh-llm
    adds adapter-only fields (defaultBaseURL, imageRequestTarget,
    ConfigureCall) with Message/ContentBlock/llm/stream untouched
    (message.ts unchanged); dsh-tools adds an optional meta field;
    dsh-client-ui-conversation keeps the InputZone dock contract,
    InputState.attachmentIds and resolveDraftAttachments unchanged
    (changes are additive: user-text factory, message-image labels);
    renderer/util-values/connection changes are additive.
  • Upstream breaking notes reviewed and confirmed irrelevant: ./invariant
    removal, subpath-plugin metadata moved to subpath exports (this plugin is
    a main-entry bundle; manifest schema unchanged), composer stats split
    into activity/usage (unused), tool-presentation both removal
    (unused).
  • 155/155 tests green; tsc 0 errors; client bundle build OK; real profile
    composition loads the plugin on 0.2.1-rc.1 with zero warnings; gate
    matrix verified against the installed predicate (engines.dsh path, peers
    fallback, and negative case).
  • 0.2.1-rc.2 (published after the audited runtime) changed only DeepSeek
    model/search surfaces per its release notes; dsh-settings is
    byte-identical across rc.1/rc.2 and the ranges accept rc.2.

Known limitations

  • Unchanged from 0.2.0-rc.1.

v0.2.0-rc.2

Choose a tag to compare

@Harvey-Will Harvey-Will released this 30 Sep 11:54

Version aligned with the DeepSeek Harness 0.2.0-rc.2 release. No code
changes — every upstream API this plugin uses was verified against the
installed 0.2.0-rc.2 runtime.

Changed

  • Dev dependencies aligned to 0.2.0-rc.2; dependency/peer ranges extended
    with >=0.2.0-rc.2 for strict resolvers. The installed compatibility gate
    accepts the plugin across 0.1.5-rc.1 → 0.2.1-alpha.1 — verified against
    the gate predicate in the 0.2.0-rc.2 runtime.
  • pnpm overrides (session-projection, storage, dsh-llm dedupe) pinned to
    0.2.0-rc.2.

Verified

  • Upstream surfaces byte-identical to 0.2.0-rc.1: dsh-settings,
    dsh-attachment, dsh-tools, dsh-client-ui-slots / -locale /
    -connection, the api-session/api-settings controllers, and the plugin
    loading chain. The 0.2.0-rc.2 deltas are confined to a typert declaration
    string in dsh-llm (new user-question-reply message source for the
    experimental async Q&A mode), a useMemo refactor in the slot renderer, and
    additive conversation client/locale changes — none touch the llm/stream
    waterfall, the InputZone dock contract, or the settings surface.
  • The pi-ai 0.87.1 model-catalog refresh ("some older model IDs removed")
    affects DSH model selection only: the plugin has zero pi-ai coupling and
    IMAGE_CAPABLE_MODEL_HINTS stays a deliberately conservative allowlist.
  • 155/155 tests green; tsc 0 errors; client build OK; real profile
    composition loads the plugin on 0.2.0-rc.2 (dsh --dump-config).

Known limitations

  • Unchanged from 0.2.0-rc.1.

v0.2.0-rc.1

Choose a tag to compare

@Harvey-Will Harvey-Will released this 30 Sep 11:54

Version aligned with the DeepSeek Harness 0.2.0-rc.1 release (first 0.2.0
series candidate; no intermediate versions were published after 0.1.7-rc.2).
The API audit against the installed runtime also surfaced two pre-existing
client-face defects (both present on 0.1.7-rc.2 as well, not 0.2.0
regressions), fixed here.

Changed

  • Dev dependencies aligned to 0.2.0-rc.1; dependency/peer ranges extended
    with >=0.2.0-rc.1. The 0.1.7-rc.1 compatibility gate evaluates
    @deepseek-ai/dsh* peer ranges with includePrerelease, so the previous
    ranges already passed on 0.2.0-rc.1 — verified against the installed gate
    predicate — but strict resolver semantics (pnpm/npm) need the explicit
    branch to resolve the aligned 0.2.0-rc.1 packages.
  • pnpm overrides (session-projection, storage, dsh-llm dedupe) pinned to
    0.2.0-rc.1.

Fixed

  • The conversation.input.dock Web UI hint never rendered: it read
    input.imageIds, a field no runtime build publishes (draft attachments live
    in InputState.attachmentIds), and its sessionId prop was never injected,
    silently disabling the model-capability check. The entry now follows the
    typed InputZone owner contract ({ session, input }), takes the session id
    from the slot inject(sessionId) argument (falling back to owner props for
    older builds), and resolves draft attachment kinds (image/file) through
    the optional uiConversation face — degrading to kind-unknown logic when
    that service is absent. Visibility rule extracted as the pure, tested
    shouldShowInterpretHint().
  • The settings change listener subscribed to settings/updated, an event name
    no observed runtime build emits. The Forms service emits
    settings/document-updated (verified in 0.1.7-rc.2 and 0.2.0-rc.1); the shim
    now subscribes to the real name and keeps the old one as a legacy alias.

Verified

  • Upstream surfaces this plugin uses are byte-identical between 0.1.7-rc.2 and
    0.2.0-rc.1: dsh-settings (SettingsForms), dsh-llm (llm/stream),
    dsh-attachment (attachments.readImage), dsh-tools, dsh-client-ui-slots
    / -renderer / -locale / -connection, the api-session/api-settings
    controllers, dsh-plugin-manager, dsh-app-boot, dsh-client-modules.
    dsh-client-ui-conversation changes are additive (submission-arbitration
    fields); the conversation.input.dock InputZone contract is unchanged.
    dsh-util-values changed only an internal realm-intrinsic probe.
  • 155/155 tests green (130 + 25 new: shim event wiring, dock decision logic,
    real-react render tests for the dock incl. regressions, and real-cordis
    Context integration — plugin boot, fiber disposal, settings events and
    llm/stream image projection through the real event bus); tsc 0 errors;
    client bundle build OK. Live verification on 0.2.0-rc.1: real profile
    composition loads the plugin (dsh --dump-config), the installed
    compatibility gate accepts the plugin across 0.1.0-rc.8 → 0.2.1-alpha.1,
    Config schema auto-discovery emits the vision-analysis form, and the
    deployed artifact answered a real vision request (3.6 s) with the full
    within-group 429 fallback chain exercised live.

Known limitations

  • Unchanged: modalities auto-sync is a no-op on 0.1.7+ profile storage;
    _visionBridge declarations survive the upstream settings migration.

v0.1.7-rc.2

Choose a tag to compare

@Harvey-Will Harvey-Will released this 26 Sep 05:32

[0.1.7-rc.2] — 2026-09-24

Version aligned with the DeepSeek Harness 0.1.7-rc.2 release. No code changes
required — every upstream API this plugin uses was verified against the
installed 0.1.7-rc.2 runtime.

Changed

  • Dev dependencies aligned to 0.1.7-rc.2; peer/dependency ranges extended with
    >=0.1.7-rc.1 documenting 0.1.7-rc line support. The plugin-version
    compatibility gate introduced in 0.1.7-rc.1 (which checks @deepseek-ai/dsh*
    peer ranges against the runtime, prereleases participating) accepts this
    plugin on 0.1.7-rc.2 — verified against the gate's own predicate.
  • Desktop variant (0.1.7-rc.2): the desktop app embeds the same web frontend —
    the plugin's client face (platform: "web") loads there unchanged. No
    desktop-specific plugin surface exists in the runtime to adapt to.

Verified

  • SettingsForms third-generation settings path, llm/stream waterfall,
    attachments.readImage, and the conversation.input.dock slot are unchanged
    in 0.1.7-rc.2. 130/130 tests green; tsc 0 errors; client build OK.
  • Upstream since 0.1.7-alpha.1 (alpha.2 / rc.1 / rc.2) touches plugin-adjacent
    surfaces we do not use (spill-policy token budgets, agent/created events,
    Session sync-history deprecations, PTC renames, readBytes migration) — none
    affect this plugin.

Known limitations

  • Unchanged from 0.1.7-alpha.1: modalities auto-sync is a no-op on 0.1.7+
    profile storage; _visionBridge declarations survive the upstream settings
    migration.

v0.1.7-alpha.1

Choose a tag to compare

@Harvey-Will Harvey-Will released this 23 Sep 16:57

[0.1.7-alpha.1] — 2026-09-22

Version aligned with the DeepSeek Harness 0.1.7-alpha.1 release. Three upstream
breaking changes handled; all plugin features remain functional.

Changed

  • Settings API third generation (SettingsProvider.installSection removed
    upstream): the compatibility shim now detects SettingsForms (0.1.7+) and
    wires lazy config reading through describe() plus a best-effort
    settings/updated change listener. Schema registration is automatic (derived
    from the plugin's Config export).
  • Message types (Message → RequestMessage = Message | RequestUserInput):
    bridge helpers now use RequestMessage throughout.
  • ContentBlock vocabulary (tool-result removed → tool-call /
    tool-addition / tool-removal): image projection recurses into both legacy
    tool-result and new tool-call nested content, keeping the bridge-specific
    placeholder format (not the upstream projectImagesForTextModel default).
  • Bridge modalities sync degrades gracefully when settings.yaml is absent
    (0.1.7 migrates it into the profile) instead of failing plugin boot.
  • Dev dependencies aligned to 0.1.7-alpha.1; dsh-code-runtime pinned to
    0.1.5-rc.3 (not republished in the 0.1.7 line). Peer/dependency ranges
    extended with >=0.1.7-alpha.1.

Known limitations

  • Modalities auto-sync is a no-op on 0.1.7+ (model config storage moved from
    settings.yaml into the profile patch). Existing _visionBridge declarations
    survive the upstream migration; new bridge models need their image
    inputModalities configured via the profile until sync is ported.
  • Session format V4 in 0.1.7 is read-only for this plugin (no session I/O).

v0.1.5-rc.1

Choose a tag to compare

@Harvey-Will Harvey-Will released this 10 Sep 06:49

[0.1.5-rc.1] — 2026-09-10

Version aligned with the DeepSeek Harness 0.1.5-rc.1 release. API-compatible upgrade from 0.1.2-rc.1 — no plugin code changes required; all upstream APIs used by the plugin (SettingsProvider.installSection, llm/stream waterfall, attachments.readImage, conversation.input.dock slot, ctx.slots.inject/register) are unchanged.

Changed

  • Dev dependencies aligned to 0.1.5-rc.1 (26 packages updated; 3 stale packages — dsh-client-runtime, dsh-client-web-react, dsh-host-apiproxy — remain at their latest published versions).
  • Peer/dependency ranges extended with >=0.1.5-alpha.1 to cover the 0.1.5 minor (SemVer prerelease tuple rule).
  • pnpm-workspace.yaml overrides updated to 0.1.5-rc.1.
  • Plugin benefits from upstream improvements without code changes: HTTP_PROXY support for vision API calls, read_image results rendered directly in Web tool cards, pi-ai 0.85.1 upgrade (catalog-changed validator fix).

Known limitations

  • Session format V3 migration is irreversible — users who upgrade cannot downgrade to 0.1.2-rc.1 session logs.
  • @deepseek-ai/dsh-client-runtime, @deepseek-ai/dsh-client-web-react and @deepseek-ai/dsh-host-apiproxy were not republished in the 0.1.5 line; dev-installed copies stay at their latest versions. They resolve only at build time — at runtime the host frontend still serves these module ids.
  • The image bridge requires per-deployment setup (bridgeModels plus an image declaration in the model's inputModalities) and is not zero-config. The modalities auto-sync removes the manual settings.yaml step; a restart is still needed for the running harness to reload the model registry.

v0.1.2-rc.1

Choose a tag to compare

@Harvey-Will Harvey-Will released this 10 Sep 06:49

[0.1.2-rc.1] — 2026-09-03

Version aligned with the DeepSeek Harness 0.1.2-rc.1 release (installed via the npm alpha → 0.1.2-rc.1 dist-tag).

Added

  • Bridge modalities auto-sync: models listed in bridgeModels are configured automatically — the plugin adds image to the model's inputModalities in settings.yaml and marks the entry with _visionBridge: true, so the harness admits image prompts without manual editing. Removing a model from bridgeModels (or deactivating the plugin) reverts every marked entry to its pre-bridge state; native multimodal models are never touched. Edits are surgical (raw-text line patches — the whole file is never rewritten) and every modification is preceded by a timestamped backup.
  • Multi-endpoint priority groups (F1): endpoints: [{ baseURL, apiKey, model, fallbackModels? }, …] — additional vision provider groups tried in priority order when the groups before them fail (rate limits, auth errors, endpoint 404/subscription errors, network failures). Each group carries its own key and model ids (ids never cross groups). The stock OVHcloud free group automatically demotes to last-resort fallback once any own group is configured. Chain exhaustion reports every attempt (组N [model @ baseURL]: error); pure rate-limit exhaustion keeps the existing quota notice. Bridge and analyze_image both fail over across groups; a single-group deployment behaves exactly as before.
  • Client-side composer dock entry, settings section, and analyze_image tool all registered through the rc.1 settings/tool APIs (see Changed).

Changed

  • Dev dependencies aligned to 0.1.2-rc.1 so typecheck and the client-face build run against the same package set the rc.1 host ships.
  • Peer/dependency ranges verified to accept 0.1.2-rc.1 (>=0.1.2-alpha.1 branch; SemVer prerelease tuples mean ^0.1.1-rc.2 alone does NOT match it).
  • Settings registration runs through the rc.1 SettingsProvider.installSection method with an automatic fallback to the legacy standalone installSettingsSection for older hosts; the client ctx.slots Context merge now loads from dsh-client-ui-renderer/client, and JsonValue from dsh-util-values (both moved upstream in rc.1).
  • Sync hardening (P1): post-write integrity verification with automatic backup rollback (top-level key loss and empty-object corruption both trigger restore), backup retention (5 most recent), and byte-for-byte round-trip fidelity tests over a real-structure settings.yaml benchmark.

Known limitations

  • @deepseek-ai/dsh-client-runtime, @deepseek-ai/dsh-client-web-react and
    @deepseek-ai/dsh-host-apiproxy were not republished in the 0.1.2 line;
    dev-installed copies stay at their latest versions. They resolve only at
    build time — at runtime the host frontend still serves these module ids
    (active community plugins declare the same injects).
  • The image bridge requires per-deployment setup (bridgeModels plus an
    image declaration in the model's inputModalities) and is not zero-config.
    The modalities auto-sync removes the manual settings.yaml step; a restart is
    still needed for the running harness to reload the model registry.
  • Failover fallback model ids are endpoint-specific and must be adjusted when
    pointing away from the default provider (each endpoints group carries its own).

[0.1.2-alpha.5] - 2026-08-28

Version aligned with the DeepSeek Harness dsh-v0.1.2-alpha.5 prerelease line.

Added

  • Built-in default vision source: OVHcloud AI Endpoints free anonymous tier (Qwen2.5-VL-72B-Instruct), zero-config on first install.
  • fallbackModels: rate-limit failover across same-endpoint models (HTTP 429 rotates to the next model; non-429 errors never rotate).
  • VisionRateLimitError with user-facing recovery guidance when every model is limited; the image bridge surfaces it in conversation.
  • Tool output reports the model that actually answered.
  • In-repo screenshots.json declaration per the awesome-dsh-plugin convention.
  • bugs.url and author metadata in package.json.

Changed

  • README (en/zh): two clearly separated usage modes (analyze_image tool vs. image bridge setup), real OCR/chart/UI demo outputs, unified version references, fixed issue links.
  • Repository topics widened for discoverability.

Known limitations

  • The image bridge requires per-deployment setup (bridgeModels plus an
    image declaration in the model's inputModalities) and is not zero-config.
  • Failover fallback model ids are endpoint-specific and must be adjusted when
    pointing away from the default provider.

[0.1.1-rc.2] — 2026-08-22

Added

  • Image bridge: route pasted/sent images to the configured vision endpoint for models listed in bridgeModels (originally text-only models declared image-capable).
  • Structured output: chart-data / ocr return machine-readable data (JSON) alongside text, with automatic fallback when the endpoint lacks response_format support.
  • Result caching (cacheTtlMs, cacheMaxEntries) and retry with exponential backoff (retryCount, retryBackoffMs) on HTTP 429 / transient 5xx.
  • Bilingual README with demo screenshot; composer hint for image-incapable models.

[0.1.0-rc.8] — 2026-08-21

Added

  • analyze_image tool with 8 modes (describe, ocr, ui-review, chart-data, object-detect, compare, code-gen, debug).
  • OpenAI and Anthropic wire formats; local path / http(s) URL / data URL input; up to 4 images per call.
  • Privacy-first design: image bytes never enter the session log or the main model; debug report masks API keys entirely.

v0.1.1-rc.2

Choose a tag to compare

@Harvey-Will Harvey-Will released this 22 Aug 04:30

Adapted and optimized for DeepSeek Harness 0.1.1-rc.2.

Harness rc.2 capabilities leveraged:

  • DeepSeek adapter Files API image uploads with file reuse
  • Automatic image resizing/format conversion per model requirements

Plugin features: analyze_image tool with 8 analysis modes (describe, OCR, UI review, chart data, object detection, compare, code-gen, endpoint debug), any OpenAI-/Anthropic-compatible vision endpoint, local path / URL / data URL input, up to 4 images per call, live settings UI with masked secrets, composer hint for image-incapable models, native support for the official DeepSeek-V4-Flash-Vision-Exp multimodal model.

Install: dsh plugin --profile web add github:Harvey-Will/dsh-vision-analysis
Tarball install: attached — dsh plugin --profile web add ./dsh-vision-analysis-0.1.1-rc.2.tgz