Repository navigation
Releases
v0.7.0 — support harness 0.2.0-rc.2 only
Harness compatibility release: @deepseek-ai/dsh 0.2.0-rc.2 is now the only supported line. 0.1.1-rc.2, 0.1.2-rc.1, 0.1.5-rc.x, and 0.1.7-rc.x were dropped.
Fixed
On 0.2.0-rc.2 the harness refused to load the bundle:
Plugin @auggieteo/dsh-output-styles@0.6.0 is incompatible with dsh 0.2.0-rc.2:
peerDependencies {"@deepseek-ai/dsh-typert-protocol":"^0.1.7-rc.1"}.
evaluatePluginCompatibility only inspects peers named @deepseek-ai/dsh-*, and ^0.1.7-rc.1 excludes 0.2.0-rc.2 even with prereleases included, so the peer range was the whole failure. It is now ^0.2.0-rc.1.
No source change
0.2.0 keeps both contracts 0.1.7 introduced, so this is a metadata-only release. Comparing the published 0.1.7-rc.2 and 0.2.0-rc.2 tarballs, the lib/ trees are byte-identical for every surface this plugin uses: dsh-typert-protocol (the codec create() factory is unchanged), dsh-settings, dsh-system-prompt, dsh-typert-loader, dsh-typert-registry, dsh-client-modules, dsh-web, dsh-web-app, dsh-client-ui-settings, and dsh-client-ui-slots. dsh-app-boot differs only by one added bundle name, and the remaining client-side diffs are unrelated to this plugin.
Also
dsh.client.injectnow names@deepseek-ai/dsh-api-gatewayinstead of@deepseek-ai/dsh-client-web.dsh-client-webis still published, but only as the page-boot library — it declares nodsh.clientblock and has no./clientexport, so the old value was a dangling informational edge. The field is documented as informational and does not drive Cordis service injection.@deepseek-ai/dsh-api-gatewayis the provider of theremoteservice the Settings page mounts theoutputStylesremote into; theslotsservice comes from the shell.scripts/patch-dsh-settings-nav-icon.mjsstill matches the 0.2.0 settings shell; its models-branch regex captures theMediumicon suffix.
Verification
Verified in an isolated DSH_HOME against the real 0.2.0-rc.2 loader: the 0.7.0 tarball installs and composes with the output-styles row present and no skip, while the published 0.6.0 is rejected with the exact diagnostic above. A headless boot reaches turn_start with no activation error.
All 25 tests pass.
Upgrade note
This release requires @deepseek-ai/dsh 0.2.0-rc.2 or later on the same line. On 0.1.7 and earlier, stay on 0.6.0.
v0.6.0 — support harness 0.1.7-rc.2 only
Harness compatibility release: @deepseek-ai/dsh 0.1.7-rc.2 is now the only supported line. 0.1.1-rc.2, 0.1.2-rc.1, and 0.1.5-rc.x were dropped, because 0.1.7 replaced two surfaces this plugin builds on and neither replacement exists on the older lines.
Fixed
Two separate breaks made the plugin fail to activate on 0.1.7.
Typert codecs now require a create() factory. dsh-typert-loader rejected every strict codec that carried only the old _zod-backed schema object:
typert-loader: @auggieteo/dsh-output-styles invocation
"@auggieteo/dsh-output-styles#outputStyles/get" result codec has no create() factory
Both lib/remote.js and lib/client.js now build codecs with a lazy create() returning the { parse } capability the gateway calls, so the outputStyles remote service registers again.
Editable settings moved to volatile Config. ctx.settings.register(...) no longer exists in 0.1.7, which surfaced as TypeError: ctx.settings.register is not a function. Editable fields are now schemastery .volatile() references on the plugin's own exported Config, read through .get() and written with ctx.settings.update(<profile entry id>, patch).
.volatile() does not exist in the schemastery the 0.1.5 harness ships, so the two models cannot be supported side by side — a runtime dual path was not possible. This is why the legacy lines were dropped rather than kept.
Behaviour
- Live updates are preserved. The loader's
_commitVolatileparses a volatile-only config change and commits it into the running plugin's references without remounting, so a style change still applies from the next model step with no restart. - Prompt placement is unchanged: the
output-stylesection stays at order 5, right after the persona prefix. - Settings namespace now derives from the plugin's profile entry id instead of a fixed literal, falling back to the canonical
output-styles. The auto-generated settings form is suppressed so this plugin's own page is the onlyoutput-stylessection. - Persistence moved to the entry's
configin the profile patch. DSH 0.1.7 imports a legacy~/.dsh/settings.yamlsection itself, once. - The reported "only one custom style" symptom is expected to disappear with the activation fix: with
apply()throwing, theoutputStylesservice never mounted, so the page could not round-trip the style list.
Also
scripts/patch-dsh-settings-nav-icon.mjsnow understands both icon conventions: 0.1.5 exportsIconDataOutline16/IconEditOutline16, 0.1.7 exportsIconDataOutlineMedium/IconEditOutlineMedium. It still anchors on the models branch but captures the icon suffix from the shell being patched.- Peer ranges narrow to the tested tuple:
@deepseek-ai/cordis~4.0.4,@deepseek-ai/dsh-typert-protocol^0.1.7-rc.1,@deepseek-ai/schemastery^3.18.4. dsh.client.injectdrops the unpublished legacy@deepseek-ai/dsh-client-runtimebootstrap.
Verification
Verified against the published 0.1.7-rc.2 tarballs: validateTypertManifest accepts the manifest (4 invocations); every codec create() materializes and parses with strictness preserved; apply() wires the prompt section and disables the auto page; Config projects its two volatile form fields; and the nav-icon script patches, re-runs idempotently, and reverts byte-identically on both the 0.1.5 and 0.1.7 shells.
All 25 tests pass.
Upgrade note
This release requires @deepseek-ai/dsh 0.1.7-rc.2 or later on the same line. On 0.1.5 and earlier, stay on 0.5.0.
v0.5.0
Compatibility with @deepseek-ai/dsh 0.1.5-rc.2 while staying on 0.1.1-rc.2 and 0.1.2-rc.1.
- The tag-to-tag audit (1486 commits) found no breaking API change for this plugin:
settings.register/get/update,systemPrompt.section, theRemotedecorator +TypertRemoteServicemount, the gateway$mountdescriptor contract and{ok, value}envelope, theslots.inject/registercontract, thesettings.sectionslot, thedsh.bundle.patchinstall path, and the dynamic-plugin builtins (harness.handle,host.call,styles.insert) all kept their shapes. @deepseek-ai/dsh-typert-protocolpeer range adds a^0.1.5-rc.1clause. Strict semver matches a prerelease only on the same major.minor.patch tuple, so 0.1.5-rc.2 resolved against no existing clause: npm refused the install, and pnpm could pull a second, older protocol copy that mounts a remote service with no methods (the TYPERT manifest ownership crash documented since 0.2.0).
v0.4.2
Added
scripts/patch-dsh-settings-nav-icon.mjs: patches the installed DSH settings shell so theoutput-stylesnav row in Settings shows an edit-pen icon (IconEditOutline16) instead of the generic settings-gear fallback. The branch also matchesoutput-style, the id the dynamic-Plugin face registers. The insert is idempotent, marked// dsh-output-styles, and coexists with the dsh-mcp-adapter insert;--revertrestores the original bytes. A DSH upgrade replaces the patched file, so re-run the script afterwards, then restartdsh weband refresh the page.
0.4.1
Output styles for DeepSeek Harness Web.
Highlights
- README refreshed on npm — this release ships the Standard Readme-spec README and the trimmed package description to the npm package page. 0.4.0 was published before the rewrite and npm versions are immutable, so the docs ride 0.4.1. No code changes since 0.4.0: same dual-bootstrap inject list, same peer ranges, same settings namespace and stored styles.
- If you upgrade from 0.3.x, the harness 0.1.2-rc.1 compatibility notes from the 0.4.0 release notes apply: one manifest works on
@deepseek-ai/dsh0.1.1-rc.2 and 0.1.2-rc.1.
Upgrade
dsh plugin --profile web add @auggieteo/dsh-output-styles@0.4.1No stored data changes: the output-styles namespace, the cordis plugin id (output-styles), and existing styles are untouched.
See CHANGELOG.md for the full history.
Full changelog: v0.4.0...v0.4.1
0.4.0
Output styles for DeepSeek Harness Web.
Highlights
- Harness 0.1.2-rc.1 compatible — audited against the 0.1.1-rc.2...0.1.2-rc.1 diff:
settings.register/get/update,systemPrompt.section, theRemotedecorator +TypertRemoteServicemount, the gateway$mountdescriptor contract and{ok, value}envelope,slots.inject/register, thesettings.sectionslot, thedsh.bundle.patchinstall path, and the dynamic-plugin builtins (harness.handle,host.call,styles.insert) all kept their shapes. Nothing in the plugin code needed to change. - Dual bootstrap inject —
dsh.client.injectnow lists both harness bootstraps:@deepseek-ai/dsh-client-runtime(0.1.1-rc.x) and@deepseek-ai/dsh-client-web(0.1.2-rc.1 dissolved the former). Loaders on both versions silently skip an inject name they do not ship, so the ordering edge degrades to a no-op instead of a break. - Peer range widened —
@deepseek-ai/dsh-typert-protocolis now^0.1.0-rc.7 || ^0.1.1-rc.2 || ^0.1.2-rc.1. Strict semver matches a prerelease only when a comparator carries a prerelease tag on the same major.minor.patch tuple; the per-tuple clauses keep the peer resolving to the harness's own protocol copy (a second, older copy would mount a remote service with no methods). - README rewritten to the Standard Readme spec — this tag carries the new README. npm 0.4.0 was published before the rewrite, and npm never allows re-publishing the same version, so the npm package page keeps the previous README until the next release.
Upgrade
dsh plugin --profile web add @auggieteo/dsh-output-styles@0.4.0No stored data changes: the output-styles namespace, the cordis plugin id (output-styles), and existing styles are untouched.
See CHANGELOG.md for the full history.
Full changelog: v0.3.0...v0.4.0
0.3.0
Persistent output styles for DeepSeek Harness Web.
Highlights
- Style descriptions — user styles carry an optional description, stored and shown under the name.
- Frontmatter extraction — paste a whole style file (Claude Code output styles, Agent Skills
SKILL.md);nameanddescriptionfill their fields, the body becomes the instructions, other keys are reported as ignored. - In-place editing — Edit turns the style's own row into the edit form; no edit form spawns below the list, and the create form hides while an edit is open.
- Markdown instructions — the Instructions field is labelled Markdown, uses a monospace font, and its placeholder shows a complete example style file with frontmatter.
Install
dsh plugin --profile web add @auggieteo/dsh-output-stylesThen append the composition row from cordis.patch.example.yml to your profile's cordis.patch.yml and restart dsh web.
Upgrade
dsh plugin --profile web add @auggieteo/dsh-output-styles@0.3.0Host and client ship together; the save call now carries a description. Stored styles without a description load with an empty one.
See CHANGELOG.md for the full history.