Skip to content

Releases: ninipa/oh-my-dsh-slim

v0.6.3

Choose a tag to compare

@ninipa ninipa released this 10 Oct 06:13

[0.6.3] — host-row ownership: restore web_fetch, stop copying host prose

The declarative port rebuilt the agent plane row by row, and one copied value
changed meaning in the process: a preset row is a definition, not a patch. On
0.1.x, tool-web: { fetch: false } was inert — the host plane's own fetch:true
row won and production ran with web_fetch (measured 18 → 2 web_search calls
per librarian research run). On 0.2.0 the same value became effective, so every
0.6.x preset session silently lost web_fetch in web mode.

  • tool-web declares fetch: true again, restoring the effective 0.5.3
    behavior; web_search is unaffected.
  • plan-mode no longer ships a frozen copy of the host's prompt. The mounted
    definition reads the current section from the installed dsh-base base patch
    (the host rewrote a sentence of it after 0.5.3); the shipped string remains
    only as the baseline for hosts whose base patch cannot be read.
  • New host-row audit (scripts/audit-host-rows.mjs, run by T0 whenever a
    reference host is installed): every preset row sharing an id with the host's
    base bundle must match it unless listed with a reason; rows the host hands to
    the agent plane must be composed or listed as a deliberate absence; the
    inherited plan-mode text must stay byte-identical to the host's own parse.
    T0 also pins the two intent values, so the dead 0.5.3 declaration cannot come
    back unnoticed.
  • The web host smoke composes bundles like a real profile (dsh-base, then
    dsh-web-app, then this package). The earlier shape wrote the base rows into
    the profile root, where they outranked every bundle patch — so dsh-web-app's
    disabled: true entries never landed and the plane split this preset depends
    on was not exercised. The smoke now asserts the host's tool-web row stays
    off and that the preset's row yields both web_search and web_fetch.

v0.6.2 — plugin settings page on the DSH 0.2 desktop

Choose a tag to compare

@ninipa ninipa released this 10 Oct 02:26

Host range: >=0.2.0-rc.2 <0.3.0-0 (tested: DSH 0.2.0-rc.2). DSH ≤0.1.5 users stay on oh-my-dsh-slim@0.5.3.

dsh plugin --profile <profile> add oh-my-dsh-slim@0.6.2

Install, update and remove are dsh plugin; the desktop App manages its own profile through its
plugin manager. Restart DSH after installing or updating — plugin code mounts once per host
process. Then pick 极简角色委派 in Settings → Agent Presets.


Changes — plugin settings page on the DSH 0.2 desktop

  • The configuration card registers into the settings shell's settings.section
    slot, the convention the DSH 0.2 desktop renders (its own General/Models pages
    and third-party cards such as dsh-better-sidebar use it). The former
    plugins.item registration is not rendered by that UI, so the card had no
    visible entry.
  • Verified on an isolated DSH 0.2.0-rc.2 host with the plugin market installed:
    the settings navigation shows the 极简角色委派 page.
  • The card opens expanded: on this host it is a settings page, so the content is visible
    on entry instead of behind an extra click. Primitive lookups tolerate host generations
    that rename or drop components (an unknown name renders nothing instead of crashing the
    section), and the model catalog is probed defensively because 0.2 provides no nested
    remote.session service.

v0.6.1 — DSH 0.2 declarative line

Choose a tag to compare

@ninipa ninipa released this 09 Oct 13:29

Host range: >=0.2.0-rc.2 <0.3.0-0 (tested: DSH 0.2.0-rc.2). DSH ≤0.1.5 users stay on oh-my-dsh-slim@0.5.3.

dsh plugin --profile <profile> add oh-my-dsh-slim@0.6.1

Install, update and remove are dsh plugin; the desktop App manages its own profile through its
plugin manager. Restart DSH after installing or updating — plugin code mounts once per host
process. Then pick 极简角色委派 in Settings → Agent Presets.


Changes — continuable tool-filter fix

Released as 0.6.1; the contributor's 0.6.1-native.1/2/3 labels were pre-release iterations of
this same release. Independently reproduced on an isolated DSH 0.2.0-rc.2 host installed through
plain npm/CLI: preset roster and settings entry, /omds HTTP list/create/set-default plus restart
persistence, 101 tests, and both installed-host smokes.

Second review follow-up:

  • Fix /omds route ownership: call the exported native connection registration method with the injected companion child as explicit owner, preserving the host authentication fence, RPC protocol and route cleanup. The former rpc.handle captured a provider context without webServer injection.
  • Add focused transport lifecycle tests and opt-in full web-composition HTTP smoke; the former base-only smoke called profile endpoints directly and did not validate the transport layer.
  • Give the unchanged preset/profile-registry plugins exported package subpaths and keep only the companion on the package-root entry. rc.2 client-module discovery rejects multiple path-based Loader sources for one dsh.client package during a full web restart; explicit non-client subpaths avoid duplicate client ownership without changing plugin implementations.
  • Pin development-only semver and require its npm-acceptance cross-check on clean checkouts; remove remaining canonical-repository fork wording.

First PR review follow-up (same unreleased version):

  • Admit the bounded DSH 0.2 compatibility line instead of pinning rc.2; only rc.2 is currently host-tested.

  • Raise the runtime host floor to rc.2 with actionable guidance for older hosts before native registry access.

  • Replace development-branch installation examples with pinned official release instructions, explicitly pending publication.

  • Vendor byte-verified upstream baseline fixtures so tests work without Git history; preserve all historical archives.

  • Fix unknown tool names surviving the background delegation path: rc.2 startContinuable carries the filter under spec.request.toolFilter, not on the top-level spec. Filter both direct and nested request shapes without mutating stock requests or removing valid restrictions.

  • Correct the restrictable-tool lookup to the real rc.2 tools.view(scope).restrictableNames API. The former nonexistent tools.restrictableNames() call silently disabled filtering, and the test double incorrectly supplied it.

  • Extend actual rc.2 stock-tool execution regressions (direct and injected scopes, foreground and background starts) to exercise unknown skill entries in both allow and deny lists, plus actual ToolRuntime view/restrict execution and empty-allow preservation. The original native.2 acceptance did not cover this nested filter path; its successful smoke tests were not live delegation acceptance.

  • Verified 89/89 regressions with zero skipped. Isolated installed-ASAR smoke passes five explicit sentinels, including NATIVE_TOOL_FILTER_START_PASS, exercising the real installed ToolRuntime restriction API and scoped adapter request. This does not invoke a live provider.

  • The user installed native.3, retested a Chinese todo-page task without delegation instructions, and accepted the desktop result as successful. This is user acceptance, not a full tool-trace audit or live MCP validation. The implementation checks did not modify desktop files.

v0.5.3 — refuse DSH 0.1.6+: 0.1.7 replaced directory agent presets

Choose a tag to compare

@ninipa ninipa released this 28 Sep 13:13

[0.5.3] — 2026-09-28

Supported DSH: 0.1.2-rc.1 … 0.1.5-rc.2 — both host lines are verified end to end.
DSH 0.1.6 and newer are refused (see below): 0.1.7 replaced directory agent presets with
declarative ones, which this release does not implement yet.
Upgrading requires a DSH restart (plugin code mounts once per host process).

Changed

  • DSH 0.1.6 and newer are refused up front (ceiling added). DSH 0.1.7 replaced directory agent
    presets with declarative ones declared by plugin bundles, and the host design explicitly
    rejected keeping both sources ("preset 不再有独立路径"). This preset line delivers a directory
    preset, so on such a host it would install cleanly and then never appear — a silent no-op. The
    host gate now carries a ceiling beside its floor — the whole 0.1.6 line is refused, prereleases
    included, since it was never verified: plugin rows refuse to mount, the seeder seeds nothing and
    leaves existing files untouched, and the reason plus the fix appears on the
    oh-my-dsh-slim-compat settings page. engines.dsh and the optional peer ranges were
    tightened to match. A release for the declarative preset model is in development; compatibility
    probing on a newer host can set OMDS_ALLOW_NEW_HOST=1.

Fixed

  • A prerelease → release upgrade now re-seeds the bundled preset directory. The seeder decided
    with its own compareVersions that parsed only major.minor.patch, so a marker left at <v>-0 by
    a local transition package compared EQUAL to the released <v> and the "up to date" branch won.
    On 2026-09-18 that was cosmetic (the directory's code was byte-identical to the release; only its
    docs and version strings lagged), but an rc→final step that carries changes would have left the
    preset directory silently on the older plugin code while the package reported the new version.
    The decision now uses the prerelease-aware compareSemver the seeder already imports for the DSH
    floor, and test-preset-seeder covers the prerelease case.

v0.5.2 — effort levels are adapter-owned: any model-declared level saves

Choose a tag to compare

@ninipa ninipa released this 18 Sep 11:35

[0.5.2] — 2026-09-18

Supported DSH: 0.1.2-rc.1 … 0.1.5-rc.2 — both host lines are verified end to end
(the 0.1.5 line re-verified on rc.2; no host-facing contract changed in this release).
Upgrading requires a DSH restart (plugin code mounts once per host process).

Fixed

  • A reasoning-effort level a model genuinely declares can now be saved. The settings card
    derives the effort dropdown from the live model catalog, while the configuration paths
    validated the value against a fixed vocabulary (none/off/low/medium/high/max) — so a level
    outside that list (e.g. xhigh, which intelalloc/gpt-5.6-sol declares) was selectable in the
    GUI but rejected on save with effort is invalid, and on the bundled profile the host's
    settings schema rejected it the same way.

Changed

  • Effort values are shape-checked, not vocabulary-checked. Effort ids are adapter-owned and
    open-ended, so the writers now reject only malformed tokens; the question "does this model
    accept this level" moved to where it can actually be answered — llm.resolveModel at the first
    delegation, which fails with a readable error naming the model's declared levels and adapter
    default. Unavailable metadata (provider not imported, model unknown, host still starting) fails
    open and is re-checked later, so a configuration stays readable and writable offline and on
    another machine.

v0.5.1 — DSH 0.1.5 support, configuration migration

Choose a tag to compare

@ninipa ninipa released this 10 Sep 08:35

[0.5.1] — 2026-09-10

Supported DSH: 0.1.2-rc.1 … 0.1.5-rc.1 — both host lines are verified end to end.
Upgrading requires a DSH restart (plugin code mounts once per host process).

Added

  • One-click migration for custom configurations on DSH 0.1.5. DSH 0.1.3-alpha.2 renamed the
    persona configuration field (text → prefix). A configuration directory copied before that
    change carries the old field alone, and DSH 0.1.5 rejects the whole preset mount. The settings
    card now flags such a configuration and rewrites the row in place — the original
    agent.cordis.yml is kept as a backup beside it, and re-running the migration is a no-op.
  • scripts/run-real-models.mjs: one-command real-model acceptance whose model is a flag
    (--provider/--model/--effort); scripts/probe-omds-web.mjs: web-mode transport probe;
    scripts/test-omds-rpc.mjs: transport unit test.

Fixed

  • DSH 0.1.5: the preset could not mount at all. The persona row now carries both the text
    and prefix keys, so one preset artifact serves the 0.1.2 and 0.1.5 host lines; previously
    every new 0.1.5 session failed its preset mount.
  • DSH 0.1.5: the settings card's configuration list is back. The card's /omds channel was
    registered through an API that 0.1.5 resolves differently, so it silently never appeared — the
    card still rendered (with working model pickers) while reporting "Failed to read the
    configuration list" and disabling save.
  • Coded profile-API errors now reach the card as their real message (name conflicts and
    stale-revision conflicts included) instead of an opaque envelope parse failure.

v0.5.0 — targets DSH 0.1.2-rc.1, strict delegation discipline, old-host guards

Choose a tag to compare

@ninipa ninipa released this 04 Sep 12:01

⚠️ DSH version requirement

  • Requires DSH 0.1.2-rc.1 (latest). DSH changed substantially in 0.1.2, so oh-my-dsh-slim 0.5.0 is NOT compatible with older DSH releases — on DSH 0.1.1 or below, stay on 0.4.0.
  • Upgrading requires a DSH restart (plugin code mounts once per host process; new sessions alone do not pick it up).
  • On an older host the upgrade is harmless by design: the seeder detects the mismatch, leaves your existing preset directory untouched (fully usable), and shows a notice under Settings → Plugins → oh-my-dsh-slim-compat. The preset plugins refuse to mount half-working with a readable error.

What's new

  • Targets DSH 0.1.2: adapted to the removal of registerContinuableSetup (agent/created observer rework), retired the preset's own web_fetch layer and the web-fetch-gate plugin (the host ships web_fetch with SSRF protection), and the settings card now reads its model list from the host's remote model catalog.
  • Stricter delegation discipline, from real-session observations (multi-model GUI runs): delegation ownership rule (self-first/delegate-first, no overlapping re-work inside a running lane's scope), foreground runs only on explicit user request, end the turn with a brief status note after dispatching background lanes, treat interim reports as "not settled".
  • Delegation lifecycle driven by live host events: the early-close ledger updates synchronously from agent/inbox/inserted (host vocabulary agent-message relay vs subagent-settled notice) with settled-child tombstones; the render scan remains only for cold recovery.
  • Orchestrator persona aligned with oh-my-opencode-slim 2.2.18: Todo continuity, Scope check before writing (compare running-lane scopes before dispatching writers or editing locally; interrupt is not rollback; a cancelled generation does not cancel required validation), a Delegation contract (every delegation names a validation owner and scope), a Verify step (reconcile all writer lanes before final validation; reuse still-valid evidence), and a Communication section (clarity over assumptions, concise execution, no flattery, honest pushback).
  • Effort dropdown scoped to the selected model's declared reasoning efforts (from the host model catalog): unsupported levels are hidden, explicit mismatches warn inline and block save (the DeepSeek adapter accepts off/low/high/max; medium is rejected upstream).
  • Old-host compatibility guards: engines.dsh plus optional lockstep peerDependencies on every touched @deepseek-ai/dsh-* package; the seeder stays fully inert below the floor (existing preset untouched, settings channel alive, notice page shown); the preset plugins fail fast instead of mounting half-working.
  • Host-contract probe battery (scripts/run-host-probes.mjs): 8 probes / 9 phases against a real DSH host with the real preset mounted — zero model calls, no credentials; the standing smoke after every DSH upgrade (scripts/TEST-INVENTORY.md pins the host facts).

Fixed

  • Same-turn overlapping re-work after delegation: the "Decision point" reminder could be read as a license to redo the delegated scope while the lane ran; it now ends the turn ("keep this turn only to dispatch further independent lanes — do not redo the delegated scope yourself"), and the persona's Scope check forbids overlapping work explicitly.
  • Foreground slips: the run_in_background parameter schema carried the host stock wording ("Set false when your next action depends on it"), which intermittently pulled models into foreground runs against the discipline; the schema now repeats the strict rule and is guarded by unit tests.
  • GUI-TEST-TASKS.md rewritten as a user-facing self-test list (T1–T7 scenarios with prompts and expected behavior; T3 uses the bundled examples/omo-probe-baseline).

Verification

  • T0 static validation green across the three distribution copies; 13 unit suites green (including the new host-version gate, seeder old-host scenarios, and per-model effort regression); L1 host-contract battery 9/9 on a real DSH 0.1.2-rc.1 host with the guarded plugins; GUI acceptance T1–T7 all pass after a host restart (routing, background dispatch, end-turn discipline, settle integration, oracle/designer routing).

Docs

v0.4.0 — multi-preset: named configuration profiles

Choose a tag to compare

@ninipa ninipa released this 02 Sep 14:39

What's new

  • Multiple named configurations (multi-preset) — the settings card's top row is now a Delegation configuration dropdown managing named configurations; each configuration is a real native agent preset created through the seeder's /omds profile RPCs (profile-list / profile-create / profile-save / profile-set-default):
    • "+ New configuration" edits an in-place draft copied from the configuration being edited; nothing is persisted until Save, which asks for a display name only (the internal id is derived from the name and never changes).
    • A saved configuration materializes as $DSH_HOME/.agent-presets/profile-<prefix>-<hash>/ (whole-directory copy of the bundled preset) plus its own profile.json snapshot — configurations are isolated from each other and from the bundled one (config-loader reads its own directory; the three preset plugins needed zero changes).
    • Set as default for new sessions writes DSH's native agent-presets default setting — the same write the Agent preset picker performs, so the card and the picker always agree; only new sessions are affected.
    • Failure safety: creation that fails validation/writing rolls the copied directory back; saves carry an expectedRevision fence so concurrent writers cannot silently overwrite each other.
  • Profile RPC endpoints and card helpers unit-tested end to end (test-profile-rpc.mjs, client-card roster/validation/serialization/adapter/sentinel tests, config-loader snapshot isolation) plus a real-host standing-mount smoke with two profiles.

Fixed

  • A profile created FROM another profile silently inherited the bundled defaults except the edited field — the create snapshot now serializes against the new profile's own base (bundled defaults), with a regression test asserting the old behavior drops inherited fields.
  • Settings card opened on the bundled profile instead of the new-session default — it now opens on the new-session default once the roster is loaded, never overriding a manual selection.
  • The bundled profile had no "Set as default for new sessions" entry — the action now appears for every non-default profile (including the bundled one), never for the new-config draft.
  • Redundant selected-name badge beside the dropdown removed.

Verification

  • Full unit battery green; T0 static validation green across the three distribution copies (dev root / publish staging / npm preset); real-host smoke (three presets standing-mounted, A/B snapshots isolated) PASS; upgrade-guard probe PASS; zh/en locale keys symmetric.

Docs

v0.3.5 — fix: bounded shell probes (zsh -lic hang)

Choose a tag to compare

@ninipa ninipa released this 01 Sep 12:21

What's new

  • Fixed: preset could hang at load when zsh is installed. All five preset plugins resolve the host DSH install by probing npm root -g, falling back to zsh -lic "npm root -g". A login+interactive zsh sources the user's shell config and can hang — reported on Linux (zsh 5.5.1): the 极简角色委派 preset mode became unusable while standard mode kept working, and uninstalling zsh "fixed" it. The probes only run inside the preset plugins, so standard mode was never affected.
  • Every probe is now bounded (2 s timeout, child killed on expiry), silent on stderr (the /bin/sh: zsh: 未找到命令 noise when zsh is absent is gone), and the zsh fallback only runs when plain npm root -g fails (first success wins). Same hardening for the command -v dsh probe and the shipped diagnostic scripts.

Verification

  • Timeout mechanism: a hung child is killed at ~2 s (ETIMEDOUT).
  • T0 gained a static guard enforcing bounded probes for all five plugins; full unit battery green; three-way distribution sync verified.

Docs

v0.3.4 — effort 'none' mode for effort-less models + fixer description

Choose a tag to compare

@ninipa ninipa released this 01 Sep 05:38

What's new

  • effort: "none" — per-role opt-out of the reasoningEffort parameter (settings card + schema + runtime). Local LLMs (e.g. Llama/Qwen) that reject the reasoningEffort request field now work: pick none in the settings card (or set "effort": "none" in the config JSON) and the parameter is omitted entirely — deliberately distinct from off, which still sends reasoningEffort: "off" (explicitly disabling reasoning on models that support it). temperature injection is unaffected; shipped defaults are unchanged (high). Reported as issue #2.
  • Fixer card description updated: 定向修复 → 代码实现、修复与重构 / "Targeted fixes" → "Code implementation, fixes, and refactoring" — the role covers bounded implementation, bug fixes and refactoring.
  • GUI wording: 思考档 → 思考强度; the effort select no longer shows a placeholder option and always displays a real value (none | off | low | medium | high | max).

Verification

  • Unit tests: effort runtime (none omits reasoningEffort, keeps role temperature), settings-schema acceptance of none, GUI write-plan (set / no-op / reset), client-card — all green; T0 static validation (three-way distribution sync) green.
  • Production GUI acceptance confirmed: none option, inline explanation, save round-trip.

Docs

  • README (en/zh): effort vocabulary incl. none; zh known-limits parity (early close).
  • Full changelog: CHANGELOG.md