Skip to content

Upgrade Harness to 0.1.0-rc.8 - #101

Merged
wisdomqin merged 8 commits into
mainfrom
chore/upgrade-dsh-rc8
Aug 20, 2026
Merged

Upgrade Harness to 0.1.0-rc.8#101
wisdomqin merged 8 commits into
mainfrom
chore/upgrade-dsh-rc8

Conversation

@yaojin3616

Copy link
Copy Markdown
Contributor

Rebuilds every dependency patch against @deepseek-ai/dsh@0.1.0-rc.8 and takes the desktop shell off ui-sidebar entirely.

What rc.8 changed for us

Area rc.8 Our response
Sidebar Adds sidebar.brand.mark, sidebar.brand.name, sidebar.footer.action slots; default wordmark is now "DSH Local Build" + build revision Deleted the sidebar patch, moved branding + phone entry to slot fills
Models Select-all/deselect-all toggle landed upstream Dropped those hunks from our patch
Models ProviderEditor now takes a schema prop; provider rows carry declared Reworked the onboarding dialog against the new shape
Conversation ChatView root is already a multi-child jsxs; adds a conversation.message.images slot QueryRail now prepends into the existing children array
apiproxy New homedir/release and admitEncodedImages imports Widened our fs/promises + path import hunk
Web server Opens the loopback URL in the system browser on launch Pass --no-open

Changes

Sidebar patch deleted. New local plugin packages/dsh-desktop-shell fills the three slots. src/preload/index.ts loses ~60 lines: the MutationObserver, the DOM-injected button, and the 1s status poll are replaced by an openPhonePairing/phoneStatus pair on the existing window.dshDesktop bridge, which the plugin calls from a real React component. The collapsed rail still only shows the entry once a phone is paired.

--no-open. Without it rc.8 pops a browser tab over the desktop window on every launch.

Patch surface: 1825 → 1712 lines, one fewer patched package.

Two things worth a look

  1. patches/@deepseek-ai+dsh+0.1.0-rc.8.patch is hand-edited. patch-package on the dsh package reinstalls its whole tree and did not finish in several minutes. The change is one line, verified to apply cleanly with patch --fuzz=0 --dry-run against a pristine npm pack of rc.8.

    That line matters more than it looks: Harness builds $DSH_HOME/profiles/node_modules by BFS over the dsh package's manifest, not this project's. A local plugin that is only a dependency here resolves in tests and then fails at runtime with ERR_MODULE_NOT_FOUND — which is exactly what the first integration run hit. There is now a test pinning this.

  2. test/release.test.ts guard was loosened, deliberately. rc.8 nests React 19 under ui-trajectory, and the old startsWith('node_modules/@deepseek-ai/') check read @deepseek-ai/dsh-client-ui-trajectory/node_modules/react as a peer-only DSH package. The filter now takes the segment after the last node_modules/, so it still catches any genuinely peer-only DSH package. Worth confirming you agree that is the right read.

Verification

  • npm test — 97 passed
  • npm run typecheck, npm run build — clean
  • Fresh npm install applies all 8 patches (verified after deleting the patched packages)
  • Ran the composed profile end to end: server up, no module errors, dsh-desktop-shell linked into the profile farm, and its client bundle served with all slot registrations intact

Tests now resolve patch files by package name rather than hardcoding the version, so the next upgrade renames patches without breaking every assertion.

Not verified: the sidebar rendering was checked by serving the composed bundle, not by eyeballing the running window — worth a quick visual pass on branding and the phone entry before merge.

yaojin and others added 3 commits August 19, 2026 21:32
Rebuild every dependency patch against rc.8 and take the desktop shell off
ui-sidebar entirely.

Harness rc.8 adds `sidebar.brand.mark`, `sidebar.brand.name`, and
`sidebar.footer.action` slots, which cover everything the sidebar patch was
doing by hand. Branding and the phone-pairing entry now ship as a local
plugin (packages/dsh-desktop-shell), so the patch is deleted and the preload
loses its MutationObserver, its DOM injection, and its 1s status poll in
favour of a contextBridge pair the plugin calls. The plugin is registered in
the patched dsh manifest because Harness builds the profile link farm from
that manifest, not from this project's.

rc.8 also took the model select-all toggle upstream, so those hunks are gone
from the settings-models patch; the remaining rework covers the provider
search, provider ranking, and the multi-provider onboarding dialog against
rc.8's reshaped code (ProviderEditor now takes `schema`).

Harness rc.8 opens the loopback URL in the system browser on launch, which
would pop a browser tab over the desktop window every start. Pass --no-open.

Patch surface drops from 1825 to 1712 lines with one fewer patched package.

Tests resolve patch files by package name instead of hardcoding the version,
so the next upgrade renames patches without breaking every assertion. The
release guard now identifies a package by the segment after its last
node_modules/ — rc.8 nests React 19 under ui-trajectory, which the old
prefix check misread as a peer-only DSH package.
@yaojin3616

Copy link
Copy Markdown
Contributor Author

Added on top of the rc.8 upgrade:

  • merge latest main / PR Fix plugin recovery for internal loader failures #98 recovery flow
  • retry late renderer evidence for up to 1.5 seconds
  • parse rc.8 generic UI slot ... has duplicate registrations errors
  • map the official slot provider back to a unique configured third-party bundle, including dynamic package references such as dsh-full-remote
  • preserve fail-safe behavior when ownership is ambiguous
  • carry the provider error patches forward from rc.7 to rc.8

Local verification:

  • npm test -- --run: 26 files, 161 tests passed
  • npm run typecheck: passed
  • npm run build: passed
  • npx patch-package --error-on-fail: all 11 rc.8 patches applied

@wisdomqin
wisdomqin merged commit 1771bda into main Aug 20, 2026
4 checks passed
@wisdomqin
wisdomqin deleted the chore/upgrade-dsh-rc8 branch August 20, 2026 08:22
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.

2 participants