The webserver renders a boot-readiness tail after the injection rows and AppWebEntry.run awaits the __DSH_BOOT_READY__ deferred before reading any injected state. Whichever bootstrap applies the injection table settles the deferred - the served renderer resolves it inline, an asynchronous bootstrap installs it ahead of the entry module and settles it with the handshake - so both deployments run one startup chain and a failed handshake surfaces on the boot page instead of proceeding on missing globals.
@deepseek-ai/dsh-client-web
English | 中文
Web boot kernel: new AppWebEntry(el, seams?).run() mounts the client through two stages. The module stage calls the Host-installed window.__ModuleLoader__.create() with window.__DSH_BOOT__, the shell's static modules, and any test transport override; the facade returns the constructed module system and parsed manifest after adopting parser-preloaded registrations. This package then prefetches the immediately tier. The plugin stage mounts the vendored Cordis Loader, injects that module system through the Loader's internal interface, creates every graph entry uniformly, and waits for every fiber to become ACTIVE. It then hands the marked boot DOM to the dynamic UI renderer's ctx.uiRenderer.mount(el) operation; the renderer hydrates that DOM before switching to the complete UI. The Host owns the graph, parser preloads, and facade; AppWebEntry does not know the bootstrap package id or parse the wire format.
The boot page uses plain DOM and local CSS, so client-bundle and plugin-activation failures remain visible. Its fallback fonts and colors match the theme tokens that arrive during loading. Fiber updates retain one spinner node and grow its CSS arc as entries first become active; hydration preserves that node and its animation phase until the application commit. React mounting, slot rendering, application assembly, and browser-title projection live in ui-renderer. The modules bundle caches its own materialized exports and provides the closed-over system when its ordinary graph entry activates; Cordis service waiting makes graph-row creation order independent from that activation.
PLATFORM_MODULES (src/platform.ts) is the single source of truth for shell-seeded shared modules. Together with PRELOADED_CLIENT_EXTERNALS, it defines the implicit external baseline for every dynamic bundle; dsh.client.external adds only exact non-baseline requests.
The optional override parameter seams forwards the module system's loadBundle transport override (BootSeams) for environments where external <script> execution cannot reach the page context; ordinary browser callers omit it. A pre-injected page transport is the default ahead of it: when globalThis.__DSH_TRANSPORT__ (the connection package's ClientTransportHooks) carries loadBundle, the module stage adopts it as the bundle transport and skips the immediate-tier HTTP prefetch — explicit seams still win.
Model Experience
None, as the entry shell boots the browser plugin tree; nothing here reaches a model request.
KV Cache effect
None; this package neither assembles nor sends a provider request.
Known Limitations and Deferred Work
- The application waits for the full roster — one failed entry keeps the framework-free boot page visible with a per-entry report; partial UI availability is not supported.