Commit Graph
218 Commits
Author SHA1 Message Date
bowenliang123 c27d082502 docs(AGENTS): update linting and testing instructions for improved efficiency 2026-10-13 22:53:31 +08:00
bowenliang123 a1772d9717 chore(build): drop redundant tailwindcss direct dependency
@tailwindcss/node already depends on tailwindcss at the same exact
version (4.3.3), so a top-level entry would only risk a second copy
resolving in the build process. The one-copy pin the native-binding
rule requires is now held solely by @tailwindcss/node's exact
dependency; update the tailwind.css comment to match.
2026-10-12 13:57:21 +08:00
bowenliang123 f6ab4a29ff chore: release v0.69.1 2026-10-12 08:40:43 +08:00
bowenliang123 2468390522 chore: release v0.69.0 2026-10-12 02:43:22 +08:00
bowenliang123 2c8095c34d chore: release v0.68.1 2026-10-11 21:08:45 +08:00
bowenliang123 425fd2e7b8 chore: release v0.68.0 2026-10-11 10:37:14 +08:00
bowenliang123 df136da57d chore: release v0.67.0 2026-10-10 18:10:23 +08:00
bowenliang123 0164778f95 chore(docs): move the social-preview generator out of docs
AGENTS.md keeps docs/ to end-user-facing files, and a headless Chromium
generator plus its HTML template are build tooling. They move to
scripts/social-preview/ beside the other maintenance scripts, and the npm
script and its usage comment follow.
2026-10-10 02:19:00 +08:00
bowenliang123 def8b2b74a chore: release v0.66.1 2026-10-09 17:29:50 +08:00
bowenliang123 f60e1a5643 build(deps): carry zustand and immer, the rest of the phantom set
@deepseek-ai/dsh-client-store declares both under devDependencies
while its published lib/index.js imports them, so the client lane's
inlined harness bundle needs them hoisted at the root exactly like
`diff` in the previous commit. A clean-room install of the lockfile now
resolves the whole runtime import graph from the checkout alone:
zustand, immer, diff, shiki, katex, anser, clsx, simple-icons and the
micromark/mdast set.
2026-10-09 01:41:58 +08:00
bowenliang123 95d36a3013 build(deps): carry diff, the harness bundle's phantom dependency
@deepseek-ai/dsh-client-ui-primitives declares `diff` under
devDependencies while its published lib/index.js imports it, so the bare
import only resolves when the consumer's workspace hoists it — exactly
how shiki, katex, anser, clsx and the micromark/mdast set are already
carried here. `diff` was the one name missing, which failed the release
workflow's `pnpm test` with "Failed to resolve import \"diff\"" across 47
client suites while passing on any tree with a hoisted copy above it.
2026-10-09 01:37:43 +08:00
bowenliang123 4ae8e2338b chore: release v0.66.0 2026-10-09 01:33:18 +08:00
bowenliang123 b784fd8c32 build(test): enable tsc incremental for the typecheck
tsc --noEmit supports --incremental in TS >=5.6: it emits a .tsbuildinfo
(ignored via *.tsbuildinfo) and reuses it across runs, halving the
per-check cost (0.74s -> ~0.35s) on every pnpm test since vitest runs the
typecheck first. Still catches injected src errors (verified).

Vitest's experimental.fsModuleCache was measured and rejected: cold runs
pay a ~23MB write with no gain, warm runs sit inside the run-to-run noise
band, and caching transformed modules conflicts with the suite's stated
contract that specs import src/ directly so coverage reflects what ships.
2026-10-08 01:39:30 +08:00
bowenliang123 5e6a5b862c build(test): collapse the typecheck to a single program
The src-only tsc pass was redundant with the tests pass: tsconfig.tests.json
extends the base config, so its program loads every src file (96/96, both
passes identical) plus the specs, and tsc type-checks the whole program —
injected src errors surface from the tests pass alone. Verified zero src-only
diagnostics on the clean tree. One pass now covers src + tests; drop the
duplicated full-program compile.
2026-10-08 01:30:08 +08:00
bowenliang123 8364917ea7 build(test): run the two typecheck phases concurrently
The src and tests tsc --noEmit passes are independent (different program
scopes), so they fork instead of running back-to-back: ~0.9s -> ~0.65s.
The vitest body is CPU-bound jsdom startup (workers already saturated:
sequential client is 62s vs 14s in parallel), so no test-file changes are
warranted — the spec sleeps are deliberate (act-attributed state via real
timers, host pacing, real debounce), not redundancy.
2026-10-08 01:26:14 +08:00
bowenliang123 c93a2498b1 chore(deps): drop unused playwright-core
The other suspects from the audit (shiki, katex, anser, clsx, the
mdast/micromark set) stay: the published ui-primitives lib is ESM whose
bare imports are undeclared, and vitest resolves that file for real, so
they are load-bearing devDependencies of this workspace.
2026-10-08 00:18:09 +08:00
bowenliang123 a988c9a8fb feat(compat): drop dsh 0.1.5-rc.1, floor the support matrix at 0.1.7-rc.2
The supported set is now the two V4-generation lines (0.1.7-rc.2+ and
0.2.0-rc.2+): the manifest's dshReleases, the peer floors (>=0.1.7-rc.2,
cordis ^4.0.4 — both lines vendor 4.0.4), the devDependency pins, the
baseline matrix, the release workflow's tag fetch, and the compatibility
docs.

With every supported line on session format V4, the V3-only paths leave:
the fold reads the tool result's first-class message alone (source.callId
pairing, message.isError — the admission validation refuses any row whose
data.error outlives it); the settings.register host face module is gone
(the Config-form entry schema serves the preferences); the client drops
the settingsScope/settings.plugin.item card seat, the retired sessions.open
jump fallback, the legacy icon spellings, and the settings-dialog leg of
the settings jump; the history page's tool/result mapper reads the V4
message (its V3 wrapper reads were dropping result content on supported
lines); the cache probe rides the 2-arg cachedSnapshot face. The baseline
gate stays: a below-floor harness composes the fallback units and the
upgrade prompt, and an undetectable version still fails open.

Verified: pnpm run lint:fix && pnpm run test && pnpm run build green (1918
tests, 100% per-file coverage); the compat matrix passes against the real
dsh sources at both baseline tags; live on dsh 0.2.0-rc.2 the plugin
composes, the Plugins-page preference card renders and round-trips a
write, the insights warm-up fills the heatmap, and the session jump and
Context tab work end to end.
2026-10-07 23:37:52 +08:00
bowenliang123 65d1c77ac9 chore: release v0.65.0 2026-10-07 17:38:18 +08:00
bowenliang123 bcb73fca8c chore: release v0.64.0 2026-10-05 15:24:08 +08:00
bowenliang123 501b2f8329 chore(release): v0.63.0 2026-10-04 11:24:35 +08:00
bowenliang123 be28102882 chore(release): v0.62.3 2026-10-03 10:50:04 +08:00
bowenliang123 42f8491561 chore(release): v0.62.2 2026-10-01 05:28:06 +08:00
bowenliang123 df2a239603 chore(release): v0.62.1
The v0.62.0 publish wedged in npm's staged pipeline (the registry accepted
it, signed provenance, then never completed processing — publicly invisible,
and a re-publish is refused with E409 'previously staged'). Same content,
new version to route around the stuck stage.
2026-09-30 21:49:58 +08:00
bowenliang123 78b7f7817b chore(release): v0.62.0 2026-09-30 19:27:40 +08:00
bowenliang123 084a2d7f54 chore(release): v0.61.0 2026-09-30 14:17:29 +08:00
bowenliang123 74117d8ae5 feat(compat): support dsh 0.2.0-rc.2 as a third baseline
Add dsh-v0.2.0-rc.2 to the supported set alongside the 0.1.5-rc.1 and
0.1.7-rc.2 lines: the manifest's dshReleases, the baseline matrix, the
release workflow's tag fetch, and the compatibility docs.

Every seam the plugin rides is spelled as at 0.1.7-rc.2 - the projection
registry contract, the platform module table, the right Sidebar seats and
guide-entry contract, the session-jump verb pair, the detail channel RPC
faces, the Plugins page card slot over the configForms transport, the
balance settings faces, the step-boundary guard, and the durable event
vocabulary (still the V4 log generation, no v4-to-v5 migration). Cordis
stays 4.0.4 and the dsh peers stay >=0.1.5-rc.1.

Verified on the new tag: all 25 compat-matrix probes pass against the real
harness sources and the vendored cordis, `pnpm run lint:fix && pnpm run
test && pnpm run build` is green (1837 tests, 100% per-file coverage), and
on a disposable DSH_HOME the 0.2.0-rc.2 CLI installs dsh-context@0.60.0
into exactly one composed config row and removes it back to zero.

Also refresh the docs' verification stamp (plugin 0.58.0 -> 0.60.0).
2026-09-29 19:38:55 +08:00
bowenliang123 6d412f622a chore(release): v0.60.0 2026-09-29 18:53:03 +08:00
bowenliang123 fc44fff954 chore: release v0.59.2 2026-09-28 22:20:09 +08:00
bowenliang123 49b7af50d7 chore: release v0.59.1 2026-09-28 18:39:22 +08:00
bowenliang123 addccdd4aa chore: release v0.59.0
Closes #92
2026-09-28 14:27:36 +08:00
bowenliang123 8103022a1d chore(deps): prune unused devDependencies and refresh the dev toolchain
Drop @deepseek-ai/dsh-invariants and @deepseek-ai/dsh-scope (unreferenced
since the two-baseline re-fit) and the duplicate zod entry from
devDependencies; the dependencies entry stays the runtime one. Declare
react-dom as an optional peer - the client bundle requires it and the
host's platform module table provides it, mirroring the react peer.

Refresh dev-only tooling in range: oxlint 1.85.0, oxlint-tsgolint,
simple-icons, @types/node, jsdom, eslint-plugin-sonarjs, playwright-core.
Everything coupled to the dsh baselines stays put on purpose: the
primitives resolution shim at the versions dsh-v0.1.5-rc.1 itself
resolves, dev cordis 4.0.2 against the vendored packages' exact peers,
lightningcss 1.32.0 deduped with @tailwindcss/node, and the zod floor at
^4.4.3 to match the harness's own. Drop the two orphaned
minimumReleaseAgeExclude rows along with the removed packages.
2026-09-28 10:23:19 +08:00
bowenliang123 fc29e6ba9f chore: release v0.58.0 2026-09-28 05:15:11 +08:00
bowenliang123 53f4cf6248 chore(deps): bump @opencode-ai/models to 0.0.87
Fresher vendored snapshot fallback for the models.dev client; the
providers() entrypoint used by the price-book fetch is unchanged.
2026-09-28 02:37:17 +08:00
bowenliang123 43274f9982 chore: release v0.57.0 2026-09-27 09:26:12 +08:00
bowenliang123 198ec93105 chore: release v0.56.2 2026-09-25 22:59:42 +08:00
bowenliang123 eab750c5d7 chore: release v0.56.1 2026-09-25 03:50:12 +08:00
bowenliang123 cbf02e1524 chore: release v0.56.0 2026-09-25 02:02:17 +08:00
bowenliang123 9acbf7eb45 feat: support dsh 0.1.5-rc.1+ and 0.1.7-rc.2+ as the supported lines
The supported range is now two baselines - dsh-v0.1.5-rc.1 (session
format V3) and dsh-v0.1.7-rc.2 (V4) - enforced by the runtime gate at
BASELINE_DSH_VERSION = 0.1.5-rc.1; below it the fallback units and the
upgrade modal take over (0.1.2/0.1.3 hosts were previously served by the
real folds).

The pre-V3 log shapes are dead code on every supported harness: the
running harness migrates historical logs on every read path (or refuses
the session wholesale), and 0.1.5-rc.1 rejects a request/header carrying
header.system outright. The fold therefore drops the V0/V2-only paths -
the header.system envelope system prompt, assistant/chunk floods,
{start, end} replacement endpoints, tool/code-dispatch - and the state
fields only they wrote (systemsFromHeader, the stepStart decode
accumulators). stateVersion stays 20: no supported log folds
differently, and pre-V3-era cached rows are discarded by the projection
cache's identity gate (and the strict stepStart sub-schema) instead of
served. The headers unit folds metadata-only epochs (envelope
systemTokens write dropped; the v1 cached-row read-compat and its pinned
stateVersion 1 stay); replaceRangeOf speaks startSeq/endSeq only; the
browser's epoch fetch maps request/header to tools and system/message to
the prompt text.

tests/baselines.ts re-fits to the two entries (the right Sidebar seam is
required on both), the compat matrix drives both tags' REAL sources
(canonical logs re-shaped to V3, the hostile probe renumbered past them),
and the version fixtures pin the new floor. Manifest: dshReleases
{0.1.5-rc.1, 0.1.7-rc.2}, dsh peers >=0.1.5-rc.1 (satisfies the 0.1.7
admission check under includePrerelease), devDeps pinned to the
0.1.5-rc.1 surface plus the ui-primitives runtime closure the client
lane inlines (test-only), and the release workflow fetches the two tags.
docs/compatibility.md is rewritten around the two-line matrix; README,
AGENTS.md and the issue template follow.

Also riding this move, from the audit pass: the fold re-proves an inject
source's form before it books the event record (the harness validates
`kind` but not `form` - a hostile one previously failed the strict
wire/state schemas on every delivery, the #44 freeze class), the headers
unit guards a data-less envelope (it has no try/catch of its own), the
schemastery schema annotations drop the explicit z<T> wrappers the 3.18.4
Mode generics reject, and the version-history note records why
stateVersion is deliberately not bumped.
2026-09-25 01:08:38 +08:00
bowenliang123 d72b6f8d12 feat: support dsh 0.1.7-rc.1 as the supported V4 line
Every runtime seam the plugin rides is source-identical from
0.1.7-alpha.2, so no code changes; the supported V4 baseline moves
from 0.1.7-alpha.2 to 0.1.7-rc.1 (the alphas leave the matrix). rc.1
adds the harness-side plugin peer-compatibility admission gate
(evaluatePluginCompatibility); the plugin's >=0.1.2-rc.1 dsh peers
satisfy it under the gate's includePrerelease check, so the bundle
composes with no exemption. The release workflow fetches the rc.1 tag
for the compat matrix and points the plugin checker at the npm next
dist-tag (0.1.7-rc.1).
2026-09-24 11:05:05 +08:00
bowenliang123 091a8b3521 chore: release v0.55.0 2026-09-23 17:20:56 +08:00
bowenliang123 aa0c0a5f57 feat: localize the Plugins-page title and description
The Host's package-meta reader serves each plugin's localized
title/description from the dictionaries exported under locale/ - the
same surface the official plugins use, so the Plugins page and the
settings inventory present dsh-context in the active locale instead of
the raw manifest fields. en carries the canonical copy (matching the
manifest name/description it overlays), zh the translation; the
exports pattern and the files list ship both dictionaries. A spec pins
the dictionaries' shape, the exports/files alignment, and the en/manifest
agreement.
2026-09-23 16:52:20 +08:00
bowenliang123 bdb63a1aed feat(client): brand the Plugins page cards with the package icon.svg
The Plugins page's package cards draw each bundle's icon from the Host's
package metadata (manifest-relative SVG/PNG/JPEG/WebP, inlined as a data
URI), which we never declared - the cards fell back to the default
artwork. The Context emblem's single graphic source is now the
package-root icon.svg: the package.json "icon" field points the Host's
reader at it, and the client build inlines the same file through a
"*.svg?raw" channel (the bundled ContextIcon re-renders it at every
requested size), so the code carries no second copy of the paths. A spec
pins the file and the component in lockstep; the files list ships the
asset.
2026-09-23 16:44:08 +08:00
bowenliang123 bc2544adfa feat(host): serve the preferences through the entry Config schema
The Config-form generation (dsh 0.1.7+) derives the Plugins page's live
form from each loader entry's own Config schema, so the entry schema must
be the schemastery one: cordis keeps validating the config: block through
its Standard Schema face, and the same schema now carries the six display
preferences as .volatile() fields (live-editable there, namespace = the
entry id). The fold bounds stay ordinary fields — their edit remounts the
entry, a preference edit commits volatile-only.

The .volatile() modifier ships only with the newer schemastery, so the
builder feature-detects it and the same bundle loads on the older lines
(3.18.2 predates the modifier). The devDependency bumps to 3.18.4 to
exercise the marked path in tests. Deliberate relaxations against the
replaced zod schema: unknown keys merge through, and integers are
expressed as min 1 + step 1.
2026-09-23 15:57:28 +08:00
bowenliang123 6064731c9f chore(compat): advance the V4 baseline to dsh 0.1.7-alpha.2
dsh 0.1.7-alpha.2 introduces no breaking change for the plugin: the
vendored cordis 4.0.3 -> 4.0.4 bump is version-metadata only, the
durable log stays at V4 with an unchanged event vocabulary, and every
seam the plugin rides (session-projection registry, right-Sidebar tab
and navigation faces, connection RPC, settings namespace, agent-loop
pre-step, ui-primitives icons and markdown labels, the plugins.bundle
config slot) is source-identical or additively extended. The remaining
deltas are internal to the harness: an optional turnWindow on history
page requests, client-module batch-failure recovery, and host-side
tool-result retention (the already-documented deferred image-offload
area).

Per the one-representative-per-generation convention, replace the
alpha.1 baseline with alpha.2 across the declared releases, the seam
matrix, the release workflow's tag fetch, and the compatibility page.
The compat matrix now boots the real alpha.2 sources on cordis 4.0.4.
2026-09-23 00:11:24 +08:00
bowenliang123 c53d40a45e chore: release v0.54.4 2026-09-22 16:41:30 +08:00
bowenliang123 390399ff24 feat(compat): support dsh 0.1.7-alpha.1
Add the V4 baseline (session format 4, cordis 4.0.3): the fold's switched
event families are unchanged, so its entry rides the V3 seam face with a
per-generation settings surface — the `register` face and the retired
`settings.plugin.item` slot are asserted BOTH ways (present through V3,
absent on V4+), and the modal dock probe now pins the sidebar-leading
grid track the measure actually reads instead of one generation's exact
template. New ICON_SEAMS probe: every icon the client renders must exist
in at least one spelling per tag, so a platform rename fails the matrix
instead of the browser. Declare the release in the manifest, fetch its
tag in the release workflow, and document the V4 generation with its
known deltas (deferred: the preferences card's Plugins-page migration,
image-offload accounting).
2026-09-22 16:28:46 +08:00
bowenliang123 df06e62d0b chore: release v0.54.3 2026-09-22 13:03:21 +08:00
bowenliang123 f3b4c88390 feat(client): lead the Plugin Info rows with site marks
The Plugin / GitHub / Settings labels open with siDeepseek, siGithub,
and the harness's IconSettingsOutline14 gear, riding currentColor at the
label's baseline. simple-icons is a dev-only dependency pinned to the
harness ui-primitives' own 16.31.0 and tree-shakes into lib/client.js as
exactly the two mark paths, so no runtime dependency is added and the
marks are identical to the harness's own SiteGlyph artwork.
2026-09-22 08:08:22 +08:00
bowenliang123 c8e1b16b75 chore: release v0.54.2 2026-09-21 10:37:08 +08:00
bowenliang123 cd53e1403c chore: release v0.54.1 2026-09-21 10:20:40 +08:00