feat!: alpha track v0.18.0-alpha.0 — adapt to DSH 0.1.2-alpha.2, drop pre-alpha hosts, fix blank Side Chat transcripts - #472
Merged
Conversation
DSH 0.1.2-alpha.1 removed the client `ctx.connection.api` face (Remote gateway migration), so every Side Chat transcript poll (`sessions.history`) threw TypeError into the view's catch and was swallowed — the tab rendered an empty transcript forever, silently (no console error, so the mount lane never caught it). The successor APIs are not a drop-in either: session/follow|page reject plain session addresses for origin:'subagent' logs (agent-busy fence) and paging cannot read past the current cursor. Move the transcript to the plugin's own wire — one transport for every DSH generation: - new `sidechat.events` route: live threads read the in-memory `agent.session.events`; cold threads read `sessionPersistence.inspect` (both seams exist since 0.1.0-rc.8; alpha.1's inspect returns the expanded logical log, never the packed chunk-row encoding). The inherited seed is cut host-side (`threadOwnLogEvents`), polls ride an `afterSeq` delta, and the response is tail-capped at 8000 events (the old client walk ceiling). - SideChatView.fetchThread is single-path; collectOwnEvents (the client walk) is gone, and so are the ctx.connection mirror and inject entry (no consumer left). - transcriptRows keeps re-cutting at session/end-seed as defense in depth. Verification: - unit: sidechat.events route (seed cut, afterSeq delta + never resurrecting the seed, cap, cold/live sources, 404/503/bad-request), full suite 1104 passed; typecheck and build (purity gate) green. - mount e2e vs a real dsh-v0.1.2-alpha.1 source build: 14/14, including the Side Chat tab sweep polling sidechat.events (performance resource assertion) and live + post-dispose (persisted) route reads. - mount e2e vs PATH dsh 0.1.0-rc.8: 14/14 (no regression).
DSH 0.1.2-alpha.2 is on npm under the `alpha` dist-tag, so the CI mount pin and the @deepseek-ai/* devDependencies baseline move up from 0.1.1-rc.1/rc.2 (the dead dsh-client-runtime devDep goes away with them). Verified end-to-end against a real 0.1.2-alpha.2 host: full vitest suite (1106), typecheck, build/pack, consumer type surface, and the headless mount smoke 14/14 — the token URL, slash RPC and MarkdownText labels contracts are unchanged from alpha.1. - dsh-settings dropped the runtime `settingsNamespace` export: namespaces are validated at compile time (SettingsNamespaceInput), so the host passes the 'dsh-better-sidebar' constant directly and the fake settings service in smoke.spec casts to the branded type. - dsh-subagent bumped SUBAGENT_DESCRIPTOR_VERSION 2 -> 3: the version is stamped by the host package; the sidechat seed assertion now follows the constant instead of pinning a literal. - Restored SessionEvent.ignorable and the RemoteError wrapping were verified to have no impact on this plugin. - e2e scratch profiles (e2e-mount.sh / e2e-aggregate-mount.sh) add '@deepseek-ai/*' to minimumReleaseAgeExclude (mirroring the repo root): alpha releases are often <24h old when the lane runs, which pnpm 11's default minimumReleaseAge would refuse to install. - vitest excludes .worktrees/** — local task worktrees carried stale code against the shared node_modules and broke on the devDeps bump. - Version lockstep 0.17.2 (package.json, dsh.plugin.json, SIDEBAR_SERVICE_VERSION, README/AGENTS/guide docs).
…a.0)
DSH itself is still on its 0.1.2-alpha line (npm `alpha` dist-tag), so the
plugin mirrors it: v0.18.0-alpha.0 publishes under the npm `alpha`
dist-tag and supports DSH 0.1.2-alpha.x only. Stable-DSH (0.1.0-rc.8 ~
0.1.1-rc.2) users stay on v0.17.1 (npm `latest`). Verified end-to-end
against a real 0.1.2-alpha.2 host: full vitest suite, typecheck,
build/pack, consumer type surface, and the headless mount smoke 14/14
(the prerelease version also passes `dsh plugin add file:`).
- peer floor raised `^0.1.0-rc.8` -> `^0.1.2-alpha.2` (the mount install
no longer warns: the old floor could not semver-match a prerelease
host); dsh.plugin.json engines.dsh `>=0.1.2-alpha.2`.
- Dropped the pre-alpha compatibility layer:
- e2e host RPC collapsed from the dot/slash dual dialect to slash-only
(rpcAttempt; the 404-probe negotiation and its cache are gone), and
parseLaunchUrl now requires the ?token= launch URL;
- MarkdownText labels collapsed to the nested single shape (the cast
became unnecessary against the alpha.2 declarations);
- the defunct `@deepseek-ai/dsh-client-runtime` row is gone from the
chunk externals allowlist (chunk-loader / tsdown / two specs) and
from dsh.client.inject.
- market-manifest guard now allows an exact prerelease version (alpha
cuts are not the market's verified `latest` target); release.yml picks
the npm dist-tag from the version (prerelease -> `alpha`, else
`latest`) so an alpha can never hijack `latest`.
- Docs retargeted: AGENTS.md §2/§3, README/README_EN badges + v0.18.0
-alpha.0 section + install note (`dsh-better-sidebar@alpha`), guide.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
DSH itself is still on its 0.1.2-alpha line, so the plugin mirrors it: this PR moves the plugin to an alpha track — v0.18.0-alpha.0, DSH 0.1.2-alpha.x only, published under the npm
alphadist-tag. Stable-DSH (0.1.0-rc.8 ~ 0.1.1-rc.2) users stay on v0.17.1 (npmlatest). It also merges the fix for blank Side Chat transcripts, which had been silently broken on every 0.1.2-alpha host.1. DSH 0.1.2-alpha.2 adaptation
@deepseek-ai/*devDependencies baseline at0.1.2-alpha.2; dead@deepseek-ai/dsh-client-runtimedevDep dropped.dsh-settingsremoved the runtimesettingsNamespaceexport — namespaces validate at compile time (SettingsNamespaceInput); the host passes the'dsh-better-sidebar'constant directly.dsh-subagentdescriptor version 2 → 3 — stamped by the host package; the sidechat seed assertion followsSUBAGENT_DESCRIPTOR_VERSION.SessionEvent.ignorable, RemoteError wrapping, token-URL auth, slash RPC dialect,MarkdownTextlabels contract.@deepseek-ai/*from pnpm 11'sminimumReleaseAge(alpha releases are often <24h old when the lane runs).2. Alpha track + compat layer removal
^0.1.0-rc.8→^0.1.2-alpha.2(+engines.dsh >=0.1.2-alpha.2). Bonus: the old floor could not semver-match a prerelease host (npm prerelease rules), so the mount install's peer warning is gone.rpcAttemptreplacesrpcAttempts; the dot-first/404-fallback negotiation and its process cache are deleted;parseLaunchUrlrequires the?token=URL (bare origin = unsupported host, fails loudly).MarkdownTextdual-shape labels → nested single shape:markdownTextPropspasses onlylabels: { code, footnotes }; theas unknown ascast became unnecessary against alpha.2 declarations.dsh-client-runtimeresidue gone: chunk externals allowlist (chunk-loader / tsdown / two specs) anddsh.client.injectno longer carry the defunct row.release.ymlderives the npm dist-tag from the version (prerelease →alpha, stable →latest) so an alpha can never hijacklatest; the market-manifest guard now allows an exact prerelease version (alpha cuts are not the market's verifiedlatesttarget).3. Side Chat transcript fix (cherry-picked from
fix/sidechat-transcript-host-route)Transcript polling still called
ctx.connection.api.sessions.history(...), removed in 0.1.2-alpha.1 — the error was silently swallowed and the tab rendered an empty transcript forever. Transcripts now come from the plugin's ownsidechat.eventsroute (live → in-memory event log, cold → session persistence, seed cut +afterSeqdeltas). Thectx.connectionmirror and inject are gone.Verification (all on DSH 0.1.2-alpha.2)
pnpm typecheck(alpha.2 declarations)pnpm test(103 files / 1103 tests)pnpm build+pnpm pack+pnpm check:consumer-typestest:mount, tarball viadsh plugin add)dsh plugin add file:)Release plan (after merge)
Tag
v0.18.0-alpha.0→ GitHub Release (notes clearly marking the DSH 0.1.2-alpha.2 target + alpha channel) →release.ymlpublishes to npm under thealphadist-tag;lateststays at 0.17.1.