Skip to content

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
Menghuan1918 merged 3 commits into
mainfrom
fix/dsh-0.1.2-alpha.2
Aug 30, 2026
Merged

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
Menghuan1918 merged 3 commits into
mainfrom
fix/dsh-0.1.2-alpha.2

Conversation

@Menghuan1918

@Menghuan1918 Menghuan1918 commented Aug 30, 2026

Copy link
Copy Markdown
Collaborator

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 trackv0.18.0-alpha.0, DSH 0.1.2-alpha.x only, published under the npm alpha dist-tag. Stable-DSH (0.1.0-rc.8 ~ 0.1.1-rc.2) users stay on v0.17.1 (npm latest). 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

  • CI pin + @deepseek-ai/* devDependencies baseline at 0.1.2-alpha.2; dead @deepseek-ai/dsh-client-runtime devDep dropped.
  • dsh-settings removed the runtime settingsNamespace export — namespaces validate at compile time (SettingsNamespaceInput); the host passes the 'dsh-better-sidebar' constant directly.
  • dsh-subagent descriptor version 2 → 3 — stamped by the host package; the sidechat seed assertion follows SUBAGENT_DESCRIPTOR_VERSION.
  • Verified no impact: restored SessionEvent.ignorable, RemoteError wrapping, token-URL auth, slash RPC dialect, MarkdownText labels contract.
  • e2e scratch profiles exempt @deepseek-ai/* from pnpm 11's minimumReleaseAge (alpha releases are often <24h old when the lane runs).

2. Alpha track + compat layer removal

  • Peer floor ^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.
  • Dual-dialect e2e RPC → slash-only: rpcAttempt replaces rpcAttempts; the dot-first/404-fallback negotiation and its process cache are deleted; parseLaunchUrl requires the ?token= URL (bare origin = unsupported host, fails loudly).
  • MarkdownText dual-shape labels → nested single shape: markdownTextProps passes only labels: { code, footnotes }; the as unknown as cast became unnecessary against alpha.2 declarations.
  • dsh-client-runtime residue gone: chunk externals allowlist (chunk-loader / tsdown / two specs) and dsh.client.inject no longer carry the defunct row.
  • Publishing: release.yml derives the npm dist-tag from the version (prerelease → alpha, stable → latest) so an alpha can never hijack latest; the market-manifest guard now allows an exact prerelease version (alpha cuts are not the market's verified latest target).

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 own sidechat.events route (live → in-memory event log, cold → session persistence, seed cut + afterSeq deltas). The ctx.connection mirror and inject are gone.

Verification (all on DSH 0.1.2-alpha.2)

Gate Result
pnpm typecheck (alpha.2 declarations)
pnpm test (103 files / 1103 tests)
pnpm build + pnpm pack + pnpm check:consumer-types
Real-host mount smoke (test:mount, tarball via dsh plugin add) ✅ 14/14 (run on both the v0.17.2-state and the final v0.18.0-alpha.0 tarballs; the prerelease version passes 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.yml publishes to npm under the alpha dist-tag; latest stays at 0.17.1.

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.
@Menghuan1918 Menghuan1918 changed the title feat: adapt to DSH 0.1.2-alpha.2 + fix blank Side Chat transcripts on 0.1.2-alpha.1+ 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 Aug 30, 2026
@Menghuan1918
Menghuan1918 merged commit 9494774 into main Aug 30, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant