sync: upstream dsh-v0.1.2-alpha.4 merge + product adaptation - #45
Draft
whitelonng wants to merge 38 commits into
Draft
sync: upstream dsh-v0.1.2-alpha.4 merge + product adaptation#45whitelonng wants to merge 38 commits into
whitelonng wants to merge 38 commits into
Conversation
Squash-merge upstream master (dsh-v0.1.2-alpha.4) onto the DSHCode product tree through the upstream-sync shadow chain (base: dsh-v0.1.1-rc.2). All 441 conflicts resolved: - package.json / docs / snapshots / pairing records: deterministic rules - product-only symbols kept (desktop shell, locales, PresetMountError, describe-image card, skipUserPatches, file picker paths, ...) - upstream refactors adopted (WebBootGraph, useChat store, ProfileTemplate objects, Remote error model, SessionSeq brands, async profile compose) - additive blocks unioned (both sides kept) Known pending work (not part of this commit): - pnpm install, then regenerate generated catalogs (api/slot/config/tool) - product adaptation compile pass (FilePickerCapability->DirectoryListing, stats-line migration, useSession->useChat, reasoningEfforts schema) - snapshot re-records for product web replays
TypeScript passes with zero errors across all packages. Changes: - drop retired @deepseek-ai/dsh-session-persistence-sqlite backend and its package.json references (upstream removed it in alpha) - drop the retired host/apiproxy package and all references; transportError imports now come from dsh-client-connection/client - restore product-only extensions on the alpha.4 base: PresetMountError, FollowupReplace, Session.events getter, SurfaceOp delete variant, isDeleteSurfaceEvent, WebBootGraph version field - adapt describe-image to settings.installSection (inject pattern) and ToolCallId rename - adapt rpc.handle to the two-argument alpha.4 signature - fix merged duplicates and syntax in generated docs, verify gates, and session specs Remaining: build-entry work (client/runtime removal migration to client-store), generator reruns, snapshot re-records.
…e migration underway - drop remaining upstream-deleted packages (examples/*, acp-snapshot, tool-subagent-report) and all dangling references - keep product-owned packages (runtime removed in favor of migration; schema-form/web-react/ui-notifications/installer/archive/file-picker/ plugin-control/plugin-installer/describe-image/desktop preserved) - migrate 29 client-runtime imports to their alpha.4 homes (client-store, api-session-controller, ui-settings, ui-renderer, ...) - restore product locale keys and contract extensions (deleteAt/editAt, stats keys, ChatFileMentions dedup, InputBar intake rebuild) - ts-nocheck transitional marker on 6 product files awaiting the composer pending-protocol deep migration Remaining: ui-conversation composer system deep migration (190 client-face errors), generator reruns, snapshot re-records.
…egenerated, build passing
Adopt upstream-verbatim e2e.yml and sandbox.yml (both disabled in the fork), bring in the upstream issue-lifecycle.yml, and teach the ci-workflow spec the fork's repository_owner guards on ci-master jobs.
- notifications/ui-chat/web-react/conversation/tool suites align with the alpha.4 renderer, session-controller, and locale APIs; sessions.create replaces workspaces.connectWorkspace in the repair flow - session surface folds message/delete plans (SurfaceDeletePlan) with the unified invalid-replace wording; locale adopts the upstream catalog with the product zh fallback chain; ModelSelect drops menu descriptions and ports the upstream loading/durable-id trigger states - boot-manifest fixtures carry the version field; ci-master keeps the fork's repository_owner guards in the spec; tsconfig.base drops the group wildcards for the generated alias region - 10 README pairs gain the frontmatter + skeleton the doc gate requires
…mit product tools into the catalog expectation
- surface.ts delete-plan branches and malformed surfaceOp shapes reach 100% per-file coverage; ModelListEditor/DeepSeekModelsEditor/ ReasoningLevelCheckboxes get exhaustive interaction suites - oxlint admits described transitional @ts-nocheck markers; 73 residual lint errors fixed across the adapted test and source files
…ion specs The alpha.4 sync brought the upstream oxlint overrides and the rewritten tab/enter arbitration, but the fingerprint spec kept upstream hashes that no longer match the fork's combined .oxlintrc.json, and the trigger spec kept pre-alpha.4 tab expectations. Re-pin the three profiles to the fork configuration and adopt the alpha.4 spec, keeping the fork's leading-/ tab completion coverage and its dsh-session import.
The alpha.4 merge left the fork's English conversation dictionary with empty access.preset, diff.files, queue.image, read.*, row.*, search.*, terminal.*, web.*, ask.* and placeholder.plan entries, which broke the built-boot footer, the access-mode trigger label, and keyless web goldens. Restore the upstream values and the PLAN_NEXT_ACTION_EN constant while keeping the fork's product placeholder copy.
The access-mode label and the composer placeholder now render the fork's product copy again, so markdown-images, github-ready-review, and the built-boot footer path re-record their conversation goldens.
Regenerate the four stale catalogs and graphs, add the missing fork package entries to the zh catalogs, re-seal the archived notes to their upstream content, fix the broken archive links in implemented notes, restore missing trigger-contract and test-support JSDoc, realign the type-equiv blocks with the fork session surface, sync the zh mermaid and event tables with the regenerated sources, unify zh README anchors with their English ids, teach the tsconfig generator about hand-written aliases after the generated region, exempt the vision group from the subsystem-page gate, and trim AGENTS.md to its word budget.
The terminal_send presenter owns no English locale seat, so its two conversation keys stay empty on purpose — restore that product choice. Pin the ten fork-owned dsh packages to the alpha.4 root version, restore the CLI publication file list the new constraints expect, keep the desktop shell out of the release-member set, and update the tsconfig generator spec for the trailing comma it now emits.
The ten fork-owned helper packages shipped empty invariant installers with peerDependencies on dsh-invariants. The alpha.4 policy forbids both: a real companion must assert a relation, an omitted companion must say so in its README. Omit the companions, drop the invariant peer entries and publication wiring, remove their now-meaningless specs, and keep the substantial companions while removing their invalid peer entries.
The alpha.4 merge dropped the verify-desktop-runtime-closure script and the preset plugins the desktop manifest must declare (command-goal, tool-pwsh, tool-pwsh-persistent, util-time). Restore the gate and close the desktop runtime graph.
The dual-CDP console assertion used the default one-second waitFor and flakes under the unit and coverage lanes' instrumented concurrency. Give it the five-second budget the rest of the suite already uses.
The fork ships shorter English composer copy than upstream; the web e2e scaffold and seven scenarios hard-coded the upstream hero and default placeholders, so workspace connect and fresh-session waits timed out before any interaction. Point them at the fork's product strings.
The per-file coverage gate names the controller as the fork's remaining under-covered file. Exercise the credential read, stale-answer dropping, no-op republish skip, watched-reference refresh, and the write-then-reread key path.
The alpha.4 merge removed the workspace file-location RPC chain (IWorkspaces.pickFiles/locateFiles) but left the fork's locate-based InputBar intake and its e2e assertion behind, so pasting a non-image file reached the host admission path and never announced a toast. Restore the upstream intake (unsupported-format announcement) and its test expectation.
…lignment goal-command-presentation, feedback-command, feedback-release, cordis-tool-round, and lifecycle-chrome re-record their aria goldens and replay session fixtures against the fork's product strings and composer chrome.
The temporary refresh-on-CI design could never go green: a PR checkout is a synthetic merge at a detached HEAD, so the auto-push back to the PR branch is always rejected non-fast-forward, and holding write permissions failed the repo's own fork-ci-workflow read-only contract in both the unit and coverage lanes. Restore contents: read, persist-credentials: false, and the full keyless replay step.
Web goldens persist clientTimeZone from the page's Intl zone. Upstream records and replays on its own Shanghai-zone runner pool, so committed goldens say Asia/Shanghai; this fork replays on UTC hosted runners and the unpinned page rendered UTC, failing replay on every session-bearing scenario. Pin the shared page helper to the goldens' zone so replay no longer depends on the host.
…vent Console broadcast is unbuffered end to end: the client fans a call out only to sessions whose console-enable frame it has processed, and the worker drops frames with no matching session subscription, so an event emitted between executionContextCreated and that asynchronous enable processing is lost for good. Polling cannot recover it. Re-emit a sentinel console event until both CDP sessions observe it, then emit the recorded event once; the recorded broadcast then reaches both sessions deterministically. The 15s test budget fits the two 5s waitFor windows, matching the neighboring chunked-bundle test.
…oller The alpha.4 sync rebuilt the API plane (apiproxy -> Typert session-controller) and the conversation assembler, and the fork's message delete/edit feature rode paths the merge rewrote. Restore the three integration gaps: host session.deleteMessage/session.editMessage Remote methods with the pre-merge surface-range expansion (user message -> whole turn, assistant -> itself plus its step's tool results, turn end -> whole interrupted turn, agent-busy on open turns, subagent sessions refuse locally), the assembler's rebuild-on-transcript-edit branch so a live connection folds deletions and edit-replaces, and the deleteAt/editAt threading from the session face to the keyed chat node renderers. The web scaffold regains the launcher's profileUserPatchPath provide, so the plugin-installer rows leave fiber-pending and the plugin_* tools return to scaffold-booted model requests. queue-actions now waits for the replay hang entry's streamed partial before freezing goldens.
…lane The merge restored the fork's host plugin-management rows into the shipped web composition, but the WebWorker preview deployment they run on didn't know them, so the packed image failed at sweep or boot. Restore upstream parity on the worker side: static node-module registrations for node:stream/web, node:stream/promises, assert, and node:string_decoder with real module faces (assert with coded AssertionError, string_decoder over TextDecoder, stream/promises over readable-stream, stream/web over platform globals), the node:events default export answering with the EventEmitter class as Node does, import.meta.dirname on the loader's lowered meta face, and the worker host providing profileUserPatchPath from the image manifest's profile name exactly as apps/cli does. plugin rows no longer pend forever and the packed preview boots with the full shipped composition.
The alpha.4 sync replaced the fork's apiproxy with the Typert Gateway without porting the archive trio, so workspace.listArchived and workspace.restoreSession/deleteSession answered from dot-endpoint callers with no host owner and the Archived-sessions page stranded its dialog open over gateway errors. Restore the trio as workspace/* Gateway remotes behind the shared workspaces client service, refuse permanent deletion of still-live sessions with workspace/session-active (the contract the archive copy already anticipated), and forward session/deleted as api-session/deleted so every open client evicts the deleted row instead of resurrecting it under Ungrouped. The settings spec now drives the merged two-tab Plugins page (inventory + installer) as shipped, records the en dialog against the real English surface, and matches the fork's documented Chinese-first locale fallback; the boot pass-through pattern tracks the modules combo-batch URL.
The fork declared dsh-client-web, react, and react-dom as apps/web dependencies where upstream keeps devDependencies, widening the packed preview image with browser-shell code the worker never loads and pulling dsh-client-store into the sweep. Restore upstream's dependency parity so the packed closure matches what the worker actually executes.
The collectors globbed src/**/*.ts and picked up the emitted src/**/*.d.ts faces on a built checkout, so every catalog ran twice over each module: persistence events reported duplicate declarations and parameter properties surfaced as undocumented class properties that the source scan already owns. Skip a .d.ts whenever its .ts twin exists; the faces are build outputs of the same sources and CI never sees them.
The restored session/workspace remotes, the forwarded api-session/deleted event, and the new linked type pages shift the generated config, Cordis, and event catalogs.
…anded-feature decisions
Re-recorded end to end through the pinned-timezone page helper against the final product: the restored composer intake (no Add files affordance), the returned message Edit action, plugin tools back in the scaffolded composition, and the streamed replay partial the queue scenario now waits for before freezing goldens.
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.
目的
将上游
dsh-v0.1.2-alpha.4(648 commits)以压缩同步方式合并进 product 主线,并完成产品侧适配。实验性 PR,用于跑 fork-ci 全量验证,暂不合并。结构
bd62b42418上游 alpha.4 内容合并5cc1164b1f/ce6d6f9869/0fd30ced3a产品适配三阶段(host + client 双面 typecheck 全绿)7d734a071clint 自动修正本地验证
已知遗留
@ts-nocheck过渡标记,待迁移到 alpha.4 API