diff --git a/.agents/notes/implemented/architecture/2026-08-15-client-shells-and-dynamic-packages.i18n.yaml b/.agents/notes/implemented/architecture/2026-08-15-client-shells-and-dynamic-packages.i18n.yaml index 3afca5571b..a5863d41c7 100644 --- a/.agents/notes/implemented/architecture/2026-08-15-client-shells-and-dynamic-packages.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-08-15-client-shells-and-dynamic-packages.i18n.yaml @@ -15,8 +15,8 @@ en: a1750de2d48551af zh: ffea0b75c292f186 /agent-note-client-shell-layering-and-dynamic-package-boundaries/decision/shared-module-requests: - en: cedddcca8a7bae6d - zh: a568a1130229f48c + en: 96661da17622132a + zh: dab3424093130c2f /agent-note-client-shell-layering-and-dynamic-package-boundaries/decision/parser-preloading-and-react-handoff: en: 4b503618b271fc28 zh: e2148f44efa769d2 diff --git a/.agents/notes/implemented/architecture/2026-08-15-client-shells-and-dynamic-packages.md b/.agents/notes/implemented/architecture/2026-08-15-client-shells-and-dynamic-packages.md index ad2bb26b84..68c9ef1235 100644 --- a/.agents/notes/implemented/architecture/2026-08-15-client-shells-and-dynamic-packages.md +++ b/.agents/notes/implemented/architecture/2026-08-15-client-shells-and-dynamic-packages.md @@ -32,7 +32,7 @@ The `staticLinked` preset leaves every bare specifier as an external import in ` ### Shared module requests -Dynamic browser bundles implicitly externalize the common baseline: `PLATFORM_MODULES` names shell-seeded React, Cordis, and static UI identities, while `PRELOADED_CLIENT_EXTERNALS` is reserved for a dynamic identity that must arrive before shell boot and is currently empty. A package uses `dsh.client.external` only for an exact non-baseline value request. Type-only imports are erased and create no request; permitted third-party implementation libraries remain private bundle contents. +Dynamic browser bundles implicitly externalize the common baseline: `PLATFORM_MODULES` names shell-seeded React, Cordis, selected third-party libraries, and static UI identities, while `PRELOADED_CLIENT_EXTERNALS` is reserved for a dynamic identity that must arrive before shell boot and is currently empty. A package uses `dsh.client.external` only for an exact non-baseline value request. Type-only imports are erased and create no request; non-baseline third-party implementation libraries remain private bundle contents. Shared third-party libraries use the shell's declared versions without per-plugin version negotiation; promotion into the baseline requires a measured reduction across the shell and shipped plugin bundles. A request has exactly two suppliers: diff --git a/.agents/notes/implemented/architecture/2026-08-15-client-shells-and-dynamic-packages.zh.md b/.agents/notes/implemented/architecture/2026-08-15-client-shells-and-dynamic-packages.zh.md index 70563962b3..79017823a7 100644 --- a/.agents/notes/implemented/architecture/2026-08-15-client-shells-and-dynamic-packages.zh.md +++ b/.agents/notes/implemented/architecture/2026-08-15-client-shells-and-dynamic-packages.zh.md @@ -32,7 +32,7 @@ Client npm 依赖区段描述安装和开发关系,但不能可靠描述 bundl ### 共享模块请求 -动态浏览器 bundle 会隐式 external 统一基座:`PLATFORM_MODULES` 命名由外壳播种的 React、Cordis 和静态 UI 身份,`PRELOADED_CLIENT_EXTERNALS` 则为必须先于 shell 启动到达的动态身份预留,当前为空。包只在精确请求基座外实体时使用 `dsh.client.external`。纯类型 import 会被擦除,不产生请求;允许的第三方实现库保留为 bundle 私有内容。 +动态浏览器 bundle 会隐式 external 统一基座:`PLATFORM_MODULES` 命名由外壳播种的 React、Cordis、选定的第三方库和静态 UI 身份,`PRELOADED_CLIENT_EXTERNALS` 则为必须先于 shell 启动到达的动态身份预留,当前为空。包只在精确请求基座外实体时使用 `dsh.client.external`。纯类型 import 会被擦除,不产生请求;基座外的第三方实现库保留为 bundle 私有内容。共享第三方库使用外壳声明的版本,不为单个插件协商版本;只有测量确认外壳与随包插件 bundle 的总体积减少,才将库纳入基座。 请求只有两种提供方: diff --git a/apps/desktop-host/package.json b/apps/desktop-host/package.json index 9a4e93ad95..c442c84f56 100644 --- a/apps/desktop-host/package.json +++ b/apps/desktop-host/package.json @@ -11,7 +11,7 @@ "lib/cli.js" ], "dependencies": { - "koffi": "^3.1.0", + "koffi": "3.1.1", "@deepseek-ai/libreoffice-kit": "^0.1.5", "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh": "workspace:*", diff --git a/apps/desktop/package.json b/apps/desktop/package.json index c1009cb57b..563f60a858 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -68,7 +68,7 @@ "js-yaml": "^4.3.2", "koffi": "3.1.1", "pnpm": "11.28.5", - "sharp": "^0.35.5", + "sharp": "0.35.5", "typescript": "^6.0.3", "@deepseek-ai/dsh-deepseek-account": "workspace:*", "@types/ws": "^8.18.1", diff --git a/packages/api/account-controller/package.json b/packages/api/account-controller/package.json index 8bfa92bd6a..21e34502d8 100644 --- a/packages/api/account-controller/package.json +++ b/packages/api/account-controller/package.json @@ -44,7 +44,7 @@ ], "license": "MIT", "dependencies": { - "zod": "^4.4.3" + "zod": "4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:~", diff --git a/packages/api/gateway/package.json b/packages/api/gateway/package.json index b3426daa8b..d6fe3d21a2 100644 --- a/packages/api/gateway/package.json +++ b/packages/api/gateway/package.json @@ -75,6 +75,6 @@ "@deepseek-ai/dsh-util-crypto": "workspace:*", "@types/ws": "^8.18.1", "@deepseek-ai/cordis": "workspace:~", - "zod": "^4.4.3" + "zod": "4.4.3" } } diff --git a/packages/api/job-controller/package.json b/packages/api/job-controller/package.json index 7798801e03..233b307dbd 100644 --- a/packages/api/job-controller/package.json +++ b/packages/api/job-controller/package.json @@ -67,7 +67,7 @@ "dependencies": { "@deepseek-ai/dsh-typert-protocol": "workspace:*", "@deepseek-ai/schemastery": "workspace:~", - "zod": "^4.4.3" + "zod": "4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:~" diff --git a/packages/api/remotes/package.json b/packages/api/remotes/package.json index 674f55a9c1..ccf1611794 100644 --- a/packages/api/remotes/package.json +++ b/packages/api/remotes/package.json @@ -86,7 +86,7 @@ "@deepseek-ai/dsh-user-approval": "workspace:*", "@deepseek-ai/dsh-user-questions": "workspace:*", "@deepseek-ai/cordis": "workspace:~", - "zod": "^4.4.3", + "zod": "4.4.3", "@deepseek-ai/dsh-command-feedback": "workspace:*", "@deepseek-ai/dsh-api-terminal-controller": "workspace:*", "@deepseek-ai/dsh-plugin-manager": "workspace:*", diff --git a/packages/api/session-controller/package.json b/packages/api/session-controller/package.json index 938f7954be..f8948c3aa1 100644 --- a/packages/api/session-controller/package.json +++ b/packages/api/session-controller/package.json @@ -73,7 +73,7 @@ "@deepseek-ai/dsh-deque": "workspace:*", "@deepseek-ai/schemastery": "workspace:~", "mime-types": "^3.0.2", - "zod": "^4.4.3" + "zod": "4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:~", diff --git a/packages/api/settings-controller/package.json b/packages/api/settings-controller/package.json index 2da8004594..da78f22942 100644 --- a/packages/api/settings-controller/package.json +++ b/packages/api/settings-controller/package.json @@ -45,7 +45,7 @@ "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "workspace:~", - "zod": "^4.4.3" + "zod": "4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:~", diff --git a/packages/api/terminal-controller/package.json b/packages/api/terminal-controller/package.json index 43c94e7a08..05d21aeb4a 100644 --- a/packages/api/terminal-controller/package.json +++ b/packages/api/terminal-controller/package.json @@ -60,7 +60,7 @@ "@deepseek-ai/schemastery": "workspace:~", "@xterm/headless": "^6.0.0", "@xterm/addon-serialize": "^0.14.0", - "zod": "^4.4.3" + "zod": "4.4.3" }, "peerDependencies": { "@deepseek-ai/dsh-subprocess": "workspace:*", diff --git a/packages/api/workspace-controller/package.json b/packages/api/workspace-controller/package.json index bd46f01745..70ccb57c74 100644 --- a/packages/api/workspace-controller/package.json +++ b/packages/api/workspace-controller/package.json @@ -72,7 +72,7 @@ "@deepseek-ai/dsh-deque": "workspace:*", "@deepseek-ai/dsh-native-command": "workspace:*", "@deepseek-ai/schemastery": "workspace:~", - "zod": "^4.4.3" + "zod": "4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:~", diff --git a/packages/api/workspace-files/package.json b/packages/api/workspace-files/package.json index 994ba915f7..b29114ae0a 100644 --- a/packages/api/workspace-files/package.json +++ b/packages/api/workspace-files/package.json @@ -55,7 +55,7 @@ "@deepseek-ai/dsh-deque": "workspace:*", "@deepseek-ai/dsh-typert-protocol": "workspace:*", "@deepseek-ai/schemastery": "workspace:~", - "zod": "^4.4.3" + "zod": "4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:~" diff --git a/packages/attachment/attachment-local/package.json b/packages/attachment/attachment-local/package.json index 51fa75c09b..27f50c5174 100644 --- a/packages/attachment/attachment-local/package.json +++ b/packages/attachment/attachment-local/package.json @@ -28,7 +28,7 @@ "dependencies": { "@deepseek-ai/dsh-lazy-require": "workspace:*", "@deepseek-ai/schemastery": "workspace:~", - "sharp": "^0.35.5" + "sharp": "0.35.5" }, "devDependencies": { "@deepseek-ai/dsh-attachment": "workspace:*", diff --git a/packages/boot/hmr/README.i18n.yaml b/packages/boot/hmr/README.i18n.yaml index 4f1eef45bf..0c7fcc7a1f 100644 --- a/packages/boot/hmr/README.i18n.yaml +++ b/packages/boot/hmr/README.i18n.yaml @@ -21,8 +21,8 @@ en: 45ee194ad781d603 zh: b3d7fcd8ed73717c /deepseek-ai-dsh-hmr/understand-the-implementation: - en: 227c3c99c3c4b597 - zh: 853b656340cb8bce + en: 8c19121bdb5176c1 + zh: 8a01a60ecca6175c /deepseek-ai-dsh-hmr/model-experience: en: 215e7ba838619b7b zh: a311da3843709f90 diff --git a/packages/boot/hmr/README.md b/packages/boot/hmr/README.md index 513abc07b2..97ee67c8e9 100644 --- a/packages/boot/hmr/README.md +++ b/packages/boot/hmr/README.md @@ -54,7 +54,7 @@ Chokidar options, including polling, retain their existing meaning. Exact config
Implementation internals — click to expand -`watchConfig()` registers an awaited configuration handler. `runExclusive()` serializes configuration changes and Loader updates with automatic reloads and rejects nested transactions. Package installation and removal run outside this queue. HMR does not acquire the package writer lock; manifest notifications reload only when the ordered `dsh.profile.bundles` list changes. Profile and home patch changes also trigger recomposition. File events received during a configuration transaction are processed afterward. Include refreshes and profile reconciliation reach plugins through ordinary Loader entry updates; Loader commits volatile-only changes in place. +`watchConfig()` registers an awaited configuration handler and watches only its target path and required parent directories; sibling files, including temporary writer locks, are excluded before native watcher creation. `runExclusive()` serializes configuration changes and Loader updates with automatic reloads and rejects nested transactions. Package installation and removal run outside this queue. HMR does not acquire the package writer lock; manifest notifications reload only when the ordered `dsh.profile.bundles` list changes. Profile and home patch changes also trigger recomposition. File events received during a configuration transaction are processed afterward. Include refreshes and profile reconciliation reach plugins through ordinary Loader entry updates; Loader commits volatile-only changes in place. App-boot owns profile parsing and patch precedence. HMR reads the launcher’s data-only `profileContext`, registers the profile manifest and both user patch watches during initialization, and waits for application readiness before processing changes. Its disposal closes the watchers and cancels reloads waiting for startup. Configuration watchers start outside the active transaction context so later notifications can enter the queue. diff --git a/packages/boot/hmr/README.zh.md b/packages/boot/hmr/README.zh.md index ba99733ccf..a7a9f84b1b 100644 --- a/packages/boot/hmr/README.zh.md +++ b/packages/boot/hmr/README.zh.md @@ -54,7 +54,7 @@ Chokidar 选项(包括轮询)保持原有含义。精确配置监听同时
实现细节——点击展开 -`watchConfig()` 注册会被等待的配置处理器。`runExclusive()` 将配置变更、Loader 更新与自动重载串行化,并拒绝嵌套事务。包安装和删除在该队列之外执行。HMR 不获取包操作写锁;manifest 通知仅在有序的 `dsh.profile.bundles` 列表变化时触发重载。profile 与 home patch 变化也会触发重新组合。配置事务期间收到的文件事件在事务结束后处理。 Include 刷新和 profile 重载都通过普通的 Loader 条目更新到达插件;仅 volatile 变化由 Loader 就地提交。 +`watchConfig()` 注册会被等待的配置处理器,仅监听目标路径及必要的父目录;同级文件(包括临时写锁)在创建原生 watcher 前即被排除。`runExclusive()` 将配置变更、Loader 更新与自动重载串行化,并拒绝嵌套事务。包安装和删除在该队列之外执行。HMR 不获取包操作写锁;manifest 通知仅在有序的 `dsh.profile.bundles` 列表变化时触发重载。profile 与 home patch 变化也会触发重新组合。配置事务期间收到的文件事件在事务结束后处理。 Include 刷新和 profile 重载都通过普通的 Loader 条目更新到达插件;仅 volatile 变化由 Loader 就地提交。 App-boot 负责 profile 解析和 patch 优先级规则。HMR 读取启动器提供的纯数据 `profileContext`,在初始化时注册 profile manifest 和两份用户 patch 的监听,并等待应用就绪后处理更改。销毁 HMR 时会关闭监听器并取消等待启动的重载。配置监听器在当前事务上下文之外启动,使后续通知可以进入队列。 diff --git a/packages/boot/hmr/package.json b/packages/boot/hmr/package.json index edd4ca6527..403fe5ed76 100644 --- a/packages/boot/hmr/package.json +++ b/packages/boot/hmr/package.json @@ -37,7 +37,7 @@ }, "dependencies": { "@babel/code-frame": "^7.29.0", - "chokidar": "^4.0.3", + "chokidar": "5.0.0", "node-addon-require-builtin": "^0.1.9", "picomatch": "^4.0.7", "@deepseek-ai/schemastery": "workspace:~" diff --git a/packages/boot/hmr/src/watch-config.ts b/packages/boot/hmr/src/watch-config.ts index 6c62610dec..41815b5d8d 100644 --- a/packages/boot/hmr/src/watch-config.ts +++ b/packages/boot/hmr/src/watch-config.ts @@ -1,5 +1,5 @@ /** Exact-path watching for live profile patch files outside Cordis module roots. */ -import { dirname, relative, resolve } from 'node:path' +import { dirname, relative, resolve, sep } from 'node:path' import { realpath, stat } from 'node:fs/promises' import { watch, type ChokidarOptions } from 'chokidar' import type { Context } from '@deepseek-ai/cordis' @@ -25,7 +25,8 @@ async function findWatchRoot(filename: string): Promise<{ filename: string; root } /** - * Watch one patch path, including missing parents, and serialize refresh callbacks. + * Watch one patch path and its parent chain without subscribing to sibling files or directories. + * Missing parents are observed as they appear; refresh callbacks run serially. * @param ctx Context that owns watcher disposal and receives refresh failures. * @param filename Absolute patch-file path. * @param options Deployment watcher options; configuration watches enable write stabilization by default. @@ -46,6 +47,10 @@ export async function watchConfig( const watcher = watch(target.root, { // Stabilized events bypass Chokidar's lossy 50 ms change-event throttle. awaitWriteFinish: true, ...watchOptions, depth: target.depth, ignoreInitial: false, + ignored: (path) => { + const remainder = relative(resolve(path), target.filename) + return remainder === '..' || remainder.startsWith(`..${sep}`) + }, }) paths.add(target.filename) const state = { dirty: false } diff --git a/packages/boot/hmr/tests/watch-config.spec.ts b/packages/boot/hmr/tests/watch-config.spec.ts index 7d0caf035b..e187d20a07 100644 --- a/packages/boot/hmr/tests/watch-config.spec.ts +++ b/packages/boot/hmr/tests/watch-config.spec.ts @@ -10,10 +10,13 @@ import { watchConfig } from '../src/watch-config.ts' import Hmr from '../src/index.ts' import Loader from '@deepseek-ai/cordis-plugin-loader' import Timer from '@deepseek-ai/cordis-plugin-timer' +import { writeFileAtomic } from '@deepseek-ai/dsh-atomic-write' import { afterEach, describe, expect, it, onTestFinished, vi } from 'vitest' import { FSWatcher, type ChokidarOptions } from 'chokidar' -const configWatch = vi.hoisted(() => ({ create: undefined as ((options?: ChokidarOptions) => FSWatcher) | undefined })) +const configWatch = vi.hoisted(() => ({ + create: undefined as ((paths: string | string[], options?: ChokidarOptions) => FSWatcher) | undefined, +})) vi.mock('node:fs', async (importOriginal) => { const native = await importOriginal() return { ...native, realpathSync: vi.fn(native.realpathSync) } @@ -25,7 +28,7 @@ vi.mock('node:fs/promises', async (importOriginal) => { vi.mock('chokidar', async (importOriginal) => { const native = await importOriginal() return { ...native, watch: (paths: string | string[], options?: ChokidarOptions) => - configWatch.create === undefined ? native.watch(paths, options) : configWatch.create(options) } + configWatch.create === undefined ? native.watch(paths, options) : configWatch.create(paths, options) } }) /** Every per-test tree root, removed once the booted watcher has been disposed. */ @@ -80,6 +83,42 @@ describe('HMR exact config paths', () => { for (const root of hmrRoots.splice(0)) rmSync(root, { recursive: true, force: true }) }) + it.for([false, true])('excludes siblings while observing config replacement through an alias (missing parents: %s)', async (missingParents, test) => { + const root = mkdtempSync(join(tmpdir(), 'dsh-hmr-config-scope-')) + onTestFinished(() => { rmSync(root, { recursive: true, force: true }) }) + const target = join(root, 'target') + const dir = join(root, 'alias') + mkdirSync(target) + symlinkSync(target, dir, process.platform === 'win32' ? 'junction' : 'dir') + const filename = join(dir, ...(missingParents ? ['later', 'nested'] : []), 'package.json') + writeFileSync(join(dir, 'package.json.lock'), 'held') + mkdirSync(join(dir, 'unrelated')) + writeFileSync(join(dir, 'unrelated', 'config.yml'), 'ignored') + if (!missingParents) writeFileSync(filename, 'initial') + const ctx = new Context() + onTestFinished(() => ctx.fiber.dispose()) + let watcher!: FSWatcher + const previousFactory = configWatch.create + onTestFinished(() => { configWatch.create = previousFactory }) + configWatch.create = (paths, options) => { + watcher = new FSWatcher(options) + return watcher.add(paths) + } + const observed: string[] = [] + await watchConfig(ctx, filename, {}, () => { observed.push(readFileSync(filename, 'utf8')) }) + const watchedEntries = () => Object.values(watcher.getWatched()).flat() + expect(watchedEntries()).not.toContain('package.json.lock') + expect(watchedEntries()).not.toContain('unrelated') + ensureNativeWatchLive(dir) + await writeFileAtomic(filename, 'created', { mode: 0o600 }) + await eventually(() => observed.includes('created'), 'created config was not observed', test.task.timeout) + await writeFileAtomic(filename, 'replaced', { mode: 0o600 }) + await eventually(() => observed.includes('replaced'), 'replaced config was not observed', test.task.timeout) + expect(watchedEntries()).toContain('package.json') + expect(watchedEntries()).not.toContain('package.json.lock') + expect(watchedEntries()).not.toContain('unrelated') + }) + it.each(['relative', 'absolute'])('observes %s module roots through a filesystem alias', { timeout: 30_000 }, async (rootKind) => { const target = mkdtempSync(join(tmpdir(), 'dsh-hmr-module-canonical-')) const alias = `${target}-alias` @@ -252,7 +291,7 @@ describe('HMR exact config paths', () => { let watcher!: FSWatcher const previousFactory = configWatch.create onTestFinished(() => { configWatch.create = previousFactory }) - configWatch.create = (options) => { + configWatch.create = (_paths, options) => { watcher = new FSWatcher(options) // Use Chokidar's real normalization with deterministic event delivery. Reflect.set(watcher, '_readyEmitted', true) diff --git a/packages/boot/plugin-manager/package.json b/packages/boot/plugin-manager/package.json index 8b262ce3d1..d75e0ce99f 100644 --- a/packages/boot/plugin-manager/package.json +++ b/packages/boot/plugin-manager/package.json @@ -61,7 +61,7 @@ "@deepseek-ai/schemastery": "workspace:~", "execa": "^10.0.1", "yaml": "^2.9.0", - "zod": "^4.4.3", + "zod": "4.4.3", "@deepseek-ai/dsh-util-values": "workspace:*" }, "peerDependencies": { diff --git a/packages/client/AGENTS.md b/packages/client/AGENTS.md index 2d39d6b3ca..c6f92acce6 100644 --- a/packages/client/AGENTS.md +++ b/packages/client/AGENTS.md @@ -73,11 +73,11 @@ Client business code may statically read `process.env.DSH_CLIENT_*`; every refer ## Shared modules and the module graph -A dynamic browser half either carries a module privately or requests the shared module-table identity. The client baseline is centralized in [`web/src/platform.ts`](web/src/platform.ts): `PLATFORM_MODULES` names shell-seeded React, Cordis, and static Client libraries; `PRELOADED_CLIENT_EXTERNALS` is reserved for dynamic rows whose factories must arrive before shell boot and is empty when no such row exists. +A dynamic browser half either carries a module privately or requests the shared module-table identity. The client baseline is centralized in [`web/src/platform.ts`](web/src/platform.ts): `PLATFORM_MODULES` names shell-seeded React, Cordis, selected third-party libraries, and static Client libraries; `PRELOADED_CLIENT_EXTERNALS` is reserved for dynamic rows whose factories must arrive before shell boot and is empty when no such row exists. -1. **Baseline externals are implicit for every dynamic bundle.** Do not repeat React, Cordis, `client/store`, `ui-primitives`, `ui-slots`, or `ui-dockkit` in package manifests. +1. **Baseline externals are implicit for every dynamic bundle.** Do not repeat entries from `PLATFORM_MODULES` in `dsh.client.external`; npm dependency declarations still follow the dependency rules above. 2. **`dsh.client.external` is not a feature-plugin dependency mechanism.** Only infrastructure, transport, or generated assembly may add a package-specific non-baseline value request whose dynamic row must be materialized through the module table. Declare the exact import specifier; only a trailing `/client` aliases the package row. -3. **Silence means a private copy.** Ordinary third-party implementation libraries may be bundled independently. A value reached only through `import type` is erased and creates no request. +3. **Silence means a private copy.** Third-party implementation libraries outside the baseline may be bundled independently. A value reached only through `import type` is erased and creates no request. 4. **A request has two possible suppliers.** A dynamic package supplies its own row; `PLATFORM_MODULES` supplies an exact static-table key. There is no `dsh.client.provide` alias protocol. 5. **Validate both sides.** The dynamic build preset externalizes the baseline and rejects undeclared workspace value imports; [`verify-client-packages`](../../scripts/verify-client-packages.ts) rejects malformed or redundant requests, missing suppliers, and synchronous request cycles. 6. **Package-local dynamic chunks are self-contained.** Source uses `import()` and the shared preset emits `require.async("./client..js")`; an entry or chunk must not retain a synchronous relative `require("./client*.js")`. Keep every static relative dependency inside its owning output chunk rather than relying on a sibling-chunk graph the runtime does not support. diff --git a/packages/client/connection/package.json b/packages/client/connection/package.json index f485b921b1..bcd37df919 100644 --- a/packages/client/connection/package.json +++ b/packages/client/connection/package.json @@ -36,7 +36,7 @@ "dependencies": { "@deepseek-ai/dsh-credentials": "workspace:*", "@deepseek-ai/schemastery": "workspace:~", - "zod": "^4.4.3" + "zod": "4.4.3" }, "files": [ "lib/index.js", diff --git a/packages/client/file-upload/package.json b/packages/client/file-upload/package.json index b15bc3f944..027de0b95a 100644 --- a/packages/client/file-upload/package.json +++ b/packages/client/file-upload/package.json @@ -62,7 +62,7 @@ "lib/typert.remote-client.d.ts" ], "dependencies": { - "zod": "^4.4.3", + "zod": "4.4.3", "@deepseek-ai/dsh-typert-protocol": "workspace:*", "@deepseek-ai/dsh-brand": "workspace:*" }, diff --git a/packages/client/modules/README.i18n.yaml b/packages/client/modules/README.i18n.yaml index 4ab13cc6e9..ebb8ecbb3a 100644 --- a/packages/client/modules/README.i18n.yaml +++ b/packages/client/modules/README.i18n.yaml @@ -27,8 +27,8 @@ en: 45740a56e931d094 zh: b3362af77c804459 /deepseek-ai-dsh-client-modules/use-this-package/sharing-modules: - en: 0aaf0693db8bb203 - zh: 9f4738cdc6b55c26 + en: 1778b5a63ecde5e8 + zh: 537b4f8c755af8ad /deepseek-ai-dsh-client-modules/use-this-package/build-requirements: en: b6a4d3b901c89efe zh: 615b5f3eec41f281 diff --git a/packages/client/modules/README.md b/packages/client/modules/README.md index 3388eb2ae4..8224ab0ac7 100644 --- a/packages/client/modules/README.md +++ b/packages/client/modules/README.md @@ -43,7 +43,7 @@ An open Web page follows the Host's complete module graph through the HMR transp ### Sharing modules -The shell seeds a frozen module table (`PLATFORM_MODULES`: React, Cordis, and static UI libraries); every dynamic bundle resolves its externals against exactly that baseline. `dsh.client.external` adds only exact non-baseline requests, each answered by the dynamic package row it names or an exact static-table key. Type-only imports are erased and create no request. Composition rejects malformed requests, missing suppliers, self-requests, and synchronous request cycles. +The shell seeds a frozen module table ([`PLATFORM_MODULES`](../web/README.md#the-shared-module-table)); every dynamic bundle resolves its externals against exactly that baseline. `dsh.client.external` adds only exact non-baseline requests, each answered by the dynamic package row it names or an exact static-table key. Type-only imports are erased and create no request. Composition rejects malformed requests, missing suppliers, self-requests, and synchronous request cycles. ### Build requirements diff --git a/packages/client/modules/README.zh.md b/packages/client/modules/README.zh.md index 3cbc600ee5..c972fe38d4 100644 --- a/packages/client/modules/README.zh.md +++ b/packages/client/modules/README.zh.md @@ -43,7 +43,7 @@ application combo 脚本只携带每个插件的 `client.js` 入口,并在启 ### 共享模块 -外壳初始化一张冻结的模块表(`PLATFORM_MODULES`:React、Cordis 与静态 UI 库);每个动态 bundle 都精确针对该基座解析其 external。`dsh.client.external` 只添加基座之外的精确请求;系统会将每个请求解析到其指定的动态包 row 或完全匹配的静态表键。纯类型 import 会被擦除,不产生请求。组合阶段会拒绝畸形请求、缺失提供方、自请求与同步请求环。 +外壳初始化一张冻结的模块表([`PLATFORM_MODULES`](../web/README.zh.md#the-shared-module-table));每个动态 bundle 都精确针对该基座解析其 external。`dsh.client.external` 只添加基座之外的精确请求;系统会将每个请求解析到其指定的动态包 row 或完全匹配的静态表键。纯类型 import 会被擦除,不产生请求。组合阶段会拒绝畸形请求、缺失提供方、自请求与同步请求环。 ### 构建要求 diff --git a/packages/client/product-analytics/package.json b/packages/client/product-analytics/package.json index f7e576d8e2..0b35b21571 100644 --- a/packages/client/product-analytics/package.json +++ b/packages/client/product-analytics/package.json @@ -77,6 +77,6 @@ "dependencies": { "@deepseek-ai/dsh-typert-protocol": "workspace:*", "@deepseek-ai/schemastery": "workspace:~", - "zod": "^4.4.3" + "zod": "4.4.3" } } diff --git a/packages/client/tsdown.client.ts b/packages/client/tsdown.client.ts index 2e8c06b18e..9d9053ded3 100644 --- a/packages/client/tsdown.client.ts +++ b/packages/client/tsdown.client.ts @@ -490,7 +490,7 @@ function clientConfig(id: string, entry: string, clientBanner?: (fileName: strin deps: { neverBundle: isRequested, // Anything NOT requested from the loader module table must inline - // (wire/type layers, zod, clsx — every non-shared dep). A require() the + // (wire/type layers, clsx — every non-shared dep). A require() the // table cannot answer is a guaranteed runtime throw, so the rule is the // package's own request list: requested specifiers stay imports, // everything else is bundled. diff --git a/packages/client/ui-chat/package.json b/packages/client/ui-chat/package.json index 16d1fc99ba..a738710edb 100644 --- a/packages/client/ui-chat/package.json +++ b/packages/client/ui-chat/package.json @@ -87,7 +87,7 @@ "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/dsh-util-workspace-path": "workspace:*", "@deepseek-ai/dsh-util-values": "workspace:*", - "@tanstack/react-virtual": "^3.14.10", + "@tanstack/react-virtual": "3.14.10", "@types/react": "~18.3.1", "@types/react-dom": "~18.3.0", "react": "^18.2.0", diff --git a/packages/client/ui-conversation/package.json b/packages/client/ui-conversation/package.json index 7e61a9a2a6..20d6dd56b6 100644 --- a/packages/client/ui-conversation/package.json +++ b/packages/client/ui-conversation/package.json @@ -87,7 +87,7 @@ "@lexical/headless": "^0.49.0", "react-dom": "^18.2.0", "@types/react-dom": "~18.3.0", - "zod": "^4.4.3", + "zod": "4.4.3", "lexical": "^0.49.0", "clsx": "^2.0.0", "@lexical/utils": "^0.49.0", diff --git a/packages/client/ui-plugin-manager/package.json b/packages/client/ui-plugin-manager/package.json index c0e962b6a4..ed8e81484b 100644 --- a/packages/client/ui-plugin-manager/package.json +++ b/packages/client/ui-plugin-manager/package.json @@ -87,7 +87,7 @@ "dependencies": { "@deepseek-ai/dsh-timeout": "workspace:*", "@deepseek-ai/schemastery": "workspace:~", - "zod": "^4.4.3", + "zod": "4.4.3", "@deepseek-ai/dsh-typert-protocol": "workspace:*" } } diff --git a/packages/client/ui-sidebar-right/package.json b/packages/client/ui-sidebar-right/package.json index b627159734..a4247518af 100644 --- a/packages/client/ui-sidebar-right/package.json +++ b/packages/client/ui-sidebar-right/package.json @@ -70,7 +70,7 @@ "picomatch": "^4.0.7", "clsx": "^2.0.0", "@deepseek-ai/dsh-util-crypto": "workspace:*", - "zod": "^4.4.3", + "zod": "4.4.3", "@deepseek-ai/dsh-client-shortcuts": "workspace:*", "@deepseek-ai/dsh-brand": "workspace:*" }, diff --git a/packages/client/ui-trajectory/package.json b/packages/client/ui-trajectory/package.json index 47b1930370..d847bebe73 100644 --- a/packages/client/ui-trajectory/package.json +++ b/packages/client/ui-trajectory/package.json @@ -68,7 +68,7 @@ "@deepseek-ai/dsh-client-ui-session": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-attachment": "workspace:*", - "@tanstack/react-virtual": "^3.14.10", + "@tanstack/react-virtual": "3.14.10", "diff": "^9.0.0" }, "files": [ diff --git a/packages/client/ui-trajectory/tests/client-bundle.client.spec.ts b/packages/client/ui-trajectory/tests/client-bundle.client.spec.ts index 8a6751993a..6bdac1f28f 100644 --- a/packages/client/ui-trajectory/tests/client-bundle.client.spec.ts +++ b/packages/client/ui-trajectory/tests/client-bundle.client.spec.ts @@ -50,6 +50,7 @@ describe('tsdown client artifact', () => { ['react', await import('react')], ['react/jsx-runtime', await import('react/jsx-runtime')], ['react-dom', await import('react-dom')], + ['@tanstack/react-virtual', await import('@tanstack/react-virtual')], ['@deepseek-ai/dsh-client-store', await import('@deepseek-ai/dsh-client-store')], ['@deepseek-ai/dsh-client-ui-conversation/client', await import('@deepseek-ai/dsh-client-ui-conversation/client')], ['@deepseek-ai/dsh-client-ui-primitives', await import('@deepseek-ai/dsh-client-ui-primitives')], diff --git a/packages/client/web/README.i18n.yaml b/packages/client/web/README.i18n.yaml index 816b541cd8..bc5ef996f5 100644 --- a/packages/client/web/README.i18n.yaml +++ b/packages/client/web/README.i18n.yaml @@ -21,11 +21,11 @@ en: f3b01aa878764e5c zh: f02eab65d441bfe0 /deepseek-ai-dsh-client-web/use-this-package/the-boot-page: - en: add354591107b80d - zh: 41136254a00d785e + en: 1757ef1631612ff5 + zh: d2d3fd0313908c12 /deepseek-ai-dsh-client-web/use-this-package/the-shared-module-table: - en: 8380cd70b861a3a8 - zh: 5a331deb7ad8fca1 + en: 33b256e108a7bd6a + zh: 3b2b1368721803b7 /deepseek-ai-dsh-client-web/use-this-package/configuration: en: 942959cb40ee31a1 zh: 9c86ac2cf6a13976 diff --git a/packages/client/web/README.md b/packages/client/web/README.md index 8fbbd89fa1..5278ad3ccb 100644 --- a/packages/client/web/README.md +++ b/packages/client/web/README.md @@ -39,9 +39,12 @@ Boot runs in two stages: the module stage adopts the parser-loaded bootstrap bat The boot page uses plain DOM and local CSS, so bundle and plugin-activation failures remain visible: it shows one spinner node whose CSS arc grows as entries activate, and reports per-entry status. The spinner and its animation phase persist until the full UI replaces the boot page. A plugin that fails import or activation is reported by name with the reason (missing service, import failure, or state) instead of a blank page. The console contains the original import error. + ### The shared module table -`PLATFORM_MODULES` (in `src/platform.ts`) names the shell-seeded shared modules — React, Cordis, and static UI libraries — and together with `PRELOADED_CLIENT_EXTERNALS` (the parser-preloaded runtime row) defines the implicit external baseline every dynamic bundle resolves against. `dsh.client.external` adds only exact non-baseline requests; see [shared modules and the module graph](../AGENTS.md#shared-modules-and-the-module-graph). +`PLATFORM_MODULES` (in `src/platform.ts`) names the shell-seeded shared modules — React, Cordis, Zod (`zod`), TanStack Virtual (`@tanstack/react-virtual`), and static UI libraries — and together with `PRELOADED_CLIENT_EXTERNALS` (the parser-preloaded runtime row) defines the implicit external baseline every dynamic bundle resolves against. `dsh.client.external` adds only exact non-baseline requests; see [shared modules and the module graph](../AGENTS.md#shared-modules-and-the-module-graph). + +Built-in and installed browser plugins in the same page receive the same module instances. The shell supplies the dependency versions declared in this package's `package.json`; the module table does not negotiate versions per plugin. External plugins that use these modules must target a host that provides the required specifiers and APIs, and keep those imports external when building their client bundle. Inlined dependencies remain private to their bundle; Host code and Workers resolve their dependencies separately. ### Configuration diff --git a/packages/client/web/README.zh.md b/packages/client/web/README.zh.md index 4e64bf2978..ccaef3e558 100644 --- a/packages/client/web/README.zh.md +++ b/packages/client/web/README.zh.md @@ -39,9 +39,12 @@ kind: "package-library" 启动页只使用原生 DOM 与本地 CSS,因此 bundle 与插件激活失败保持可见:它显示一个 spinner 节点,其 CSS 圆弧随 entry 激活而增长,并逐 entry 报告状态。spinner 及其动画相位会一直保留,直到完整 UI 替换启动页。导入或激活失败的插件会按名称报告并给出原因(缺失服务、导入失败或状态),而不是白屏。控制台包含原始导入错误。 + ### 共享模块表 -`PLATFORM_MODULES`(位于 `src/platform.ts`)列出外壳预置的共享模块——React、Cordis 与静态 UI 库——并与 `PRELOADED_CLIENT_EXTERNALS`(parser 预载的运行时行)一起定义每个动态 bundle 解析所依据的隐式 external 基座。`dsh.client.external` 只添加基座之外的精确请求;参见[共享模块与模块图](../AGENTS.md#shared-modules-and-the-module-graph)。 +`PLATFORM_MODULES`(位于 `src/platform.ts`)列出外壳预置的共享模块——React、Cordis、Zod(`zod`)、TanStack Virtual(`@tanstack/react-virtual`)与静态 UI 库——并与 `PRELOADED_CLIENT_EXTERNALS`(parser 预载的运行时行)一起定义每个动态 bundle 解析所依据的隐式 external 基座。`dsh.client.external` 只添加基座之外的精确请求;参见[共享模块与模块图](../AGENTS.md#shared-modules-and-the-module-graph)。 + +同一页面中的内置浏览器插件和已安装的浏览器插件获得相同的模块实例。外壳提供本包 `package.json` 声明的依赖版本,模块表不会为每个插件协商版本。使用这些模块的外部插件必须以提供所需模块标识符和 API 的宿主为目标,并在构建客户端 bundle 时将相应导入保留为 external。内联依赖仍归各自 bundle 私有;Host 代码与 Worker 单独解析其依赖。 ### 配置 diff --git a/packages/client/web/package.json b/packages/client/web/package.json index 0d97465f4f..e3733a87e5 100644 --- a/packages/client/web/package.json +++ b/packages/client/web/package.json @@ -40,7 +40,9 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "typescript": "^6.0.3", - "@deepseek-ai/dsh-host-webserver": "workspace:*" + "@deepseek-ai/dsh-host-webserver": "workspace:*", + "zod": "4.4.3", + "@tanstack/react-virtual": "3.14.10" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:~" diff --git a/packages/client/web/src/platform.ts b/packages/client/web/src/platform.ts index 2549966986..3103555215 100644 --- a/packages/client/web/src/platform.ts +++ b/packages/client/web/src/platform.ts @@ -7,6 +7,7 @@ /** The module specifiers the shell shares into the frozen module table. */ export const PLATFORM_MODULES = [ 'react', 'react/jsx-runtime', 'react-dom', 'react-dom/client', '@deepseek-ai/cordis', + 'zod', '@tanstack/react-virtual', '@deepseek-ai/dsh-client-store', '@deepseek-ai/dsh-client-ui-slots', '@deepseek-ai/dsh-client-ui-primitives', diff --git a/packages/client/web/src/seed.ts b/packages/client/web/src/seed.ts index d41f338d42..bbba6643f3 100644 --- a/packages/client/web/src/seed.ts +++ b/packages/client/web/src/seed.ts @@ -11,6 +11,8 @@ import * as ReactJsxRuntime from 'react/jsx-runtime' import * as ReactDom from 'react-dom' import * as ReactDomClient from 'react-dom/client' import * as Cordis from '@deepseek-ai/cordis' +import * as Zod from 'zod' +import * as ReactVirtual from '@tanstack/react-virtual' import * as ClientStore from '@deepseek-ai/dsh-client-store' import * as UiSlots from '@deepseek-ai/dsh-client-ui-slots' import * as UiPrimitives from '@deepseek-ai/dsh-client-ui-primitives' @@ -31,6 +33,8 @@ export function getStaticModules(): Record { 'react-dom': ReactDom, 'react-dom/client': ReactDomClient, '@deepseek-ai/cordis': Cordis, + 'zod': Zod, + '@tanstack/react-virtual': ReactVirtual, '@deepseek-ai/dsh-client-store': ClientStore, '@deepseek-ai/dsh-client-ui-slots': UiSlots, '@deepseek-ai/dsh-client-ui-primitives': UiPrimitives, diff --git a/packages/context/session-reference/package.json b/packages/context/session-reference/package.json index 3ea29f276c..cc60df45da 100644 --- a/packages/context/session-reference/package.json +++ b/packages/context/session-reference/package.json @@ -47,7 +47,7 @@ "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/schemastery": "workspace:~", - "zod": "^4.4.3" + "zod": "4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:~", diff --git a/packages/context/time-context/package.json b/packages/context/time-context/package.json index 4867ee93c2..13f2be32e6 100644 --- a/packages/context/time-context/package.json +++ b/packages/context/time-context/package.json @@ -31,7 +31,7 @@ "dependencies": { "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/schemastery": "workspace:~", - "zod": "^4.4.3" + "zod": "4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:~", diff --git a/packages/context/tmux-context/package.json b/packages/context/tmux-context/package.json index 740f826bda..e6c68f4554 100644 --- a/packages/context/tmux-context/package.json +++ b/packages/context/tmux-context/package.json @@ -28,7 +28,7 @@ "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "workspace:~", - "zod": "^4.4.3" + "zod": "4.4.3" }, "peerDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", diff --git a/packages/core/agent-loop/package.json b/packages/core/agent-loop/package.json index abe17dc5a1..36f124ca94 100644 --- a/packages/core/agent-loop/package.json +++ b/packages/core/agent-loop/package.json @@ -40,7 +40,7 @@ "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/schemastery": "workspace:~", - "zod": "^4.4.3" + "zod": "4.4.3" }, "devDependencies": { "@deepseek-ai/dsh-llm-deepseek-api-key": "workspace:*", diff --git a/packages/credentials/credentials-local/package.json b/packages/credentials/credentials-local/package.json index 4370b901aa..7eafba6772 100644 --- a/packages/credentials/credentials-local/package.json +++ b/packages/credentials/credentials-local/package.json @@ -34,7 +34,7 @@ "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "chokidar": "^4.0.3", + "chokidar": "5.0.0", "@deepseek-ai/schemastery": "workspace:~", "yaml": "^2.9.0" }, diff --git a/packages/credentials/deepseek-account-platform/package.json b/packages/credentials/deepseek-account-platform/package.json index ffd0533e03..c07bd45e51 100644 --- a/packages/credentials/deepseek-account-platform/package.json +++ b/packages/credentials/deepseek-account-platform/package.json @@ -47,6 +47,6 @@ }, "dependencies": { "@deepseek-ai/schemastery": "workspace:~", - "zod": "^4.4.3" + "zod": "4.4.3" } } diff --git a/packages/document/office-to-pdf/package.json b/packages/document/office-to-pdf/package.json index afb67df1b4..087d544293 100644 --- a/packages/document/office-to-pdf/package.json +++ b/packages/document/office-to-pdf/package.json @@ -59,6 +59,6 @@ "@deepseek-ai/schemastery": "workspace:~", "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-typert-protocol": "workspace:*", - "zod": "^4.4.3" + "zod": "4.4.3" } } diff --git a/packages/experimental/agent-team/package.json b/packages/experimental/agent-team/package.json index 0a3a0a7d4b..2dde22ee3a 100644 --- a/packages/experimental/agent-team/package.json +++ b/packages/experimental/agent-team/package.json @@ -40,7 +40,7 @@ "dependencies": { "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/schemastery": "workspace:~", - "zod": "^4.4.3" + "zod": "4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:~", diff --git a/packages/experimental/api-speech-to-text/package.json b/packages/experimental/api-speech-to-text/package.json index f693719836..ea84596773 100644 --- a/packages/experimental/api-speech-to-text/package.json +++ b/packages/experimental/api-speech-to-text/package.json @@ -47,7 +47,7 @@ "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "workspace:~", - "zod": "^4.4.3" + "zod": "4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:~", diff --git a/packages/experimental/browser-use-stagehand-native/README.i18n.yaml b/packages/experimental/browser-use-stagehand-native/README.i18n.yaml index d65d51165d..e6668a0d43 100644 --- a/packages/experimental/browser-use-stagehand-native/README.i18n.yaml +++ b/packages/experimental/browser-use-stagehand-native/README.i18n.yaml @@ -24,8 +24,8 @@ en: fea3ad16a77fc478 zh: cf551a8a2d183f93 /deepseek-ai-dsh-experimental-browser-use-stagehand-native/understand-the-implementation: - en: ba13e1703d5aaca4 - zh: 91db415ed074307c + en: 123351a7c3d46f3e + zh: bf1cc2628edeb8d7 /deepseek-ai-dsh-experimental-browser-use-stagehand-native/further-exploration: en: eff8f4541eb26ca7 zh: 76a61fe9bd48df2a diff --git a/packages/experimental/browser-use-stagehand-native/README.md b/packages/experimental/browser-use-stagehand-native/README.md index 61f6c82c0a..ec1922366f 100644 --- a/packages/experimental/browser-use-stagehand-native/README.md +++ b/packages/experimental/browser-use-stagehand-native/README.md @@ -90,7 +90,7 @@ env -u NODE_USE_ENV_PROXY DSH_STAGEHAND_E2E=1 pnpm exec vitest run --config vite The host owns each launched Chromium process and its temporary profile before waiting for CDP readiness. Chromium receives the standard scrubbed child environment, preserving paths, locale, and proxy settings while excluding credential-shaped variables and DSH identity. Both modes connect the SDK inside a dedicated Worker. The Worker receives no ambient environment except the explicit source TypeScript configuration path, so its CDP connection does not inherit host proxy settings. SDK close waits for active operations. Cleanup terminates the connection Worker after the configured SDK grace; launch also kills and awaits its owned Chromium process before removing the profile. Attached external browsers remain open. Cleanup failures follow the [ownership limits](#known-limitations-and-deferred-work) below. -The [native runtime](src/native.ts) passes the explicit model configuration to Stagehand's public initialization API. Stagehand owns the model requests, response validation, and token accounting inside its browser extension. DSH records browser tool inputs and returned data, including SDK result metadata, through the existing Session log. Underlying inference request/response capture and integration into DSH Session usage accounting are deferred. +The [native runtime](src/native.ts) passes the explicit model configuration to Stagehand's public initialization API. The adapter pins Zod to the version required by Stagehand because extraction passes Zod schemas to the SDK. Stagehand owns the model requests, response validation, and token accounting inside its browser extension. DSH records browser tool inputs and returned data, including SDK result metadata, through the existing Session log. Underlying inference request/response capture and integration into DSH Session usage accounting are deferred.
diff --git a/packages/experimental/browser-use-stagehand-native/README.zh.md b/packages/experimental/browser-use-stagehand-native/README.zh.md index cc64481db9..47f7e908d6 100644 --- a/packages/experimental/browser-use-stagehand-native/README.zh.md +++ b/packages/experimental/browser-use-stagehand-native/README.zh.md @@ -90,7 +90,7 @@ env -u NODE_USE_ENV_PROXY DSH_STAGEHAND_E2E=1 pnpm exec vitest run --config vite 宿主在等待 CDP 就绪前即拥有启动的 Chromium 进程及其临时配置目录。Chromium 接收标准清理后的子进程环境,保留路径、区域设置和代理配置,排除凭据形式的变量及 DSH 身份信息。两种模式都在独立 Worker 中连接 SDK。Worker 除显式的源码 TypeScript 配置路径外不接收宿主环境,因此其 CDP 连接不继承宿主代理设置。SDK 关闭会等待活动操作。清理在配置的 SDK 宽限时间后终止连接 Worker;启动模式还会终止并等待自有 Chromium 进程退出,再移除配置目录。外部连接的浏览器保持运行。清理失败遵循下方的[所有权限制](#known-limitations-and-deferred-work)。 -[原生运行时](src/native.ts)将显式模型配置传入 Stagehand 的公开初始化 API。Stagehand 在其浏览器扩展中负责模型请求、响应验证与 token 计量。DSH 通过现有 Session 日志记录浏览器工具输入和返回数据,包括 SDK 结果元数据。底层推理请求/响应捕获及其与 DSH Session 用量计量的集成均属暂缓工作。 +[原生运行时](src/native.ts)将显式模型配置传入 Stagehand 的公开初始化 API。适配器将 Zod 固定为 Stagehand 要求的版本,因为提取操作会向 SDK 传递 Zod schema。Stagehand 在其浏览器扩展中负责模型请求、响应验证与 token 计量。DSH 通过现有 Session 日志记录浏览器工具输入和返回数据,包括 SDK 结果元数据。底层推理请求/响应捕获及其与 DSH Session 用量计量的集成均属暂缓工作。
diff --git a/packages/experimental/browser-use-stagehand-native/package.json b/packages/experimental/browser-use-stagehand-native/package.json index 62824586d4..1b9632f111 100644 --- a/packages/experimental/browser-use-stagehand-native/package.json +++ b/packages/experimental/browser-use-stagehand-native/package.json @@ -44,7 +44,7 @@ "@deepseek-ai/dsh-mcp-client": "workspace:*", "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/schemastery": "workspace:~", - "zod": "^4.4.3", + "zod": "4.4.3", "@deepseek-ai/dsh-subprocess": "workspace:*", "@puppeteer/browsers": "3.2.2" }, diff --git a/packages/experimental/computer-use-cua-driver-native/package.json b/packages/experimental/computer-use-cua-driver-native/package.json index 375d7591d2..f1f7ebcbd2 100644 --- a/packages/experimental/computer-use-cua-driver-native/package.json +++ b/packages/experimental/computer-use-cua-driver-native/package.json @@ -38,7 +38,7 @@ "@deepseek-ai/dsh-mcp-client": "workspace:*", "@deepseek-ai/schemastery": "workspace:~", "@trycua/cua-driver": "0.28.0", - "zod": "^4.4.3" + "zod": "4.4.3" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:~", diff --git a/packages/experimental/speech-to-text-sensevoice/package.json b/packages/experimental/speech-to-text-sensevoice/package.json index f651826f40..f1217e5475 100644 --- a/packages/experimental/speech-to-text-sensevoice/package.json +++ b/packages/experimental/speech-to-text-sensevoice/package.json @@ -37,7 +37,7 @@ "dependencies": { "@deepseek-ai/schemastery": "workspace:~", "@deepseek-ai/dsh-timeout": "workspace:*", - "zod": "^4.4.3", + "zod": "4.4.3", "sherpa-onnx-node": "1.13.8" }, "peerDependencies": { diff --git a/packages/experimental/webworker-runtime/package.json b/packages/experimental/webworker-runtime/package.json index 7f3398abf2..8605766f06 100644 --- a/packages/experimental/webworker-runtime/package.json +++ b/packages/experimental/webworker-runtime/package.json @@ -64,7 +64,7 @@ "@deepseek-ai/node-addon-system": "workspace:~", "@types/picomatch": "^4.0.3", "@types/readable-stream": "^4.0.24", - "chokidar": "^5.0.0" + "chokidar": "5.0.0" }, "files": [ "lib/index.js", diff --git a/packages/experimental/webworker-runtime/tests/node/chokidar.spec.ts b/packages/experimental/webworker-runtime/tests/node/chokidar.spec.ts index 9d78737a09..389cd6ebab 100644 --- a/packages/experimental/webworker-runtime/tests/node/chokidar.spec.ts +++ b/packages/experimental/webworker-runtime/tests/node/chokidar.spec.ts @@ -23,10 +23,10 @@ interface ChokidarFixture { const CHOKIDAR_FIXTURES: readonly ChokidarFixture[] = [ { - label: 'Chokidar 4 from credentials', + label: 'Chokidar 5 from credentials', consumerManifest: 'packages/credentials/credentials-local/package.json', - chokidarFiles: ['package.json', 'esm/package.json', 'esm/index.js', 'esm/handler.js'], - readdirpFiles: ['package.json', 'esm/package.json', 'esm/index.js'], + chokidarFiles: ['package.json', 'index.js', 'handler.js'], + readdirpFiles: ['package.json', 'index.js'], }, { label: 'Chokidar 5 from skill-filesystem', diff --git a/packages/extensions/cordis-host-runner/package.json b/packages/extensions/cordis-host-runner/package.json index 6f86264d34..6bf679baad 100644 --- a/packages/extensions/cordis-host-runner/package.json +++ b/packages/extensions/cordis-host-runner/package.json @@ -46,7 +46,7 @@ "dependencies": { "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/schemastery": "workspace:~", - "zod": "^4.4.3" + "zod": "4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:~", diff --git a/packages/feedback/command-feedback/package.json b/packages/feedback/command-feedback/package.json index fe12b14841..4272fcc315 100644 --- a/packages/feedback/command-feedback/package.json +++ b/packages/feedback/command-feedback/package.json @@ -51,7 +51,7 @@ "@deepseek-ai/dsh-typert-protocol": "workspace:*" }, "dependencies": { - "zod": "^4.4.3" + "zod": "4.4.3" }, "devDependencies": { "@deepseek-ai/cordis-plugin-include": "workspace:~", diff --git a/packages/feedback/message-feedback/package.json b/packages/feedback/message-feedback/package.json index 6c397886f0..f904b55a15 100644 --- a/packages/feedback/message-feedback/package.json +++ b/packages/feedback/message-feedback/package.json @@ -54,7 +54,7 @@ }, "dependencies": { "@deepseek-ai/schemastery": "workspace:~", - "zod": "^4.4.3" + "zod": "4.4.3" }, "devDependencies": { "@deepseek-ai/cordis-plugin-include": "workspace:~", diff --git a/packages/fs/fs-local/package.json b/packages/fs/fs-local/package.json index 27c6f15188..708ca9d9bc 100644 --- a/packages/fs/fs-local/package.json +++ b/packages/fs/fs-local/package.json @@ -31,7 +31,7 @@ "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "chokidar": "^4.0.3", + "chokidar": "5.0.0", "koffi": "3.1.1", "@deepseek-ai/schemastery": "workspace:~" }, diff --git a/packages/goal/goal/package.json b/packages/goal/goal/package.json index a8feaceb6c..8c99a4be08 100644 --- a/packages/goal/goal/package.json +++ b/packages/goal/goal/package.json @@ -59,7 +59,7 @@ }, "dependencies": { "@deepseek-ai/schemastery": "workspace:~", - "zod": "^4.4.3" + "zod": "4.4.3" }, "devDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", diff --git a/packages/host/plugin-inventory/package.json b/packages/host/plugin-inventory/package.json index fcb61c7121..abf51934ab 100644 --- a/packages/host/plugin-inventory/package.json +++ b/packages/host/plugin-inventory/package.json @@ -44,7 +44,7 @@ ], "license": "MIT", "dependencies": { - "zod": "^4.4.3" + "zod": "4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis-plugin-loader": "workspace:~", diff --git a/packages/host/product-telemetry-otel/package.json b/packages/host/product-telemetry-otel/package.json index af08c7f44e..5a6a98f5db 100644 --- a/packages/host/product-telemetry-otel/package.json +++ b/packages/host/product-telemetry-otel/package.json @@ -28,9 +28,9 @@ "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "workspace:~", - "@opentelemetry/api-logs": "^0.222.0", - "@opentelemetry/otlp-exporter-base": "^0.222.0", - "@opentelemetry/sdk-logs": "^0.222.0" + "@opentelemetry/api-logs": "0.222.0", + "@opentelemetry/otlp-exporter-base": "0.222.0", + "@opentelemetry/sdk-logs": "0.222.0" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:~", diff --git a/packages/interaction/commands/package.json b/packages/interaction/commands/package.json index fd21fcfa6a..3ccc8638f5 100644 --- a/packages/interaction/commands/package.json +++ b/packages/interaction/commands/package.json @@ -59,7 +59,7 @@ }, "dependencies": { "@deepseek-ai/dsh-util-crypto": "workspace:*", - "zod": "^4.4.3" + "zod": "4.4.3" }, "devDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", diff --git a/packages/interaction/permission-presets/package.json b/packages/interaction/permission-presets/package.json index 45fae52191..c0744dd1fc 100644 --- a/packages/interaction/permission-presets/package.json +++ b/packages/interaction/permission-presets/package.json @@ -60,7 +60,7 @@ }, "dependencies": { "@deepseek-ai/schemastery": "workspace:~", - "zod": "^4.4.3" + "zod": "4.4.3" }, "devDependencies": { "@deepseek-ai/dsh-shell": "workspace:*", diff --git a/packages/interaction/user-questions/package.json b/packages/interaction/user-questions/package.json index 3eea364e88..595a60fedc 100644 --- a/packages/interaction/user-questions/package.json +++ b/packages/interaction/user-questions/package.json @@ -64,7 +64,7 @@ "@deepseek-ai/dsh-tools": "workspace:*" }, "dependencies": { - "zod": "^4.4.3", + "zod": "4.4.3", "@deepseek-ai/schemastery": "workspace:~" } } diff --git a/packages/llm/llm-retry/package.json b/packages/llm/llm-retry/package.json index 306a3e3449..034b41d48e 100644 --- a/packages/llm/llm-retry/package.json +++ b/packages/llm/llm-retry/package.json @@ -41,7 +41,7 @@ }, "dependencies": { "@deepseek-ai/schemastery": "workspace:~", - "zod": "^4.4.3" + "zod": "4.4.3" }, "devDependencies": { "@deepseek-ai/dsh-brand": "workspace:*", diff --git a/packages/llm/llm/package.json b/packages/llm/llm/package.json index f4332ae941..1009deef35 100644 --- a/packages/llm/llm/package.json +++ b/packages/llm/llm/package.json @@ -61,7 +61,7 @@ "dependencies": { "@deepseek-ai/dsh-util-crypto": "workspace:*", "@deepseek-ai/schemastery": "workspace:~", - "zod": "^4.4.3", + "zod": "4.4.3", "@deepseek-ai/dsh-timeout": "workspace:*", "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-util-values": "workspace:*", diff --git a/packages/llm/token-meter/package.json b/packages/llm/token-meter/package.json index cbf27d0ca0..e0f83a29e7 100644 --- a/packages/llm/token-meter/package.json +++ b/packages/llm/token-meter/package.json @@ -47,7 +47,7 @@ "dependencies": { "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/schemastery": "workspace:~", - "zod": "^4.4.3" + "zod": "4.4.3" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:~", diff --git a/packages/mcp/mcp-client/package.json b/packages/mcp/mcp-client/package.json index eb29bc0d08..0def023e1b 100644 --- a/packages/mcp/mcp-client/package.json +++ b/packages/mcp/mcp-client/package.json @@ -56,7 +56,7 @@ "@deepseek-ai/dsh-http-proxy": "workspace:*", "@modelcontextprotocol/server": "2.2.0", "@modelcontextprotocol/node": "2.0.0", - "zod": "^4.4.3", + "zod": "4.4.3", "@deepseek-ai/dsh-mcp-resources": "workspace:*", "@deepseek-ai/dsh-system-prompt": "workspace:*" }, diff --git a/packages/plan/plan-mode/package.json b/packages/plan/plan-mode/package.json index a37b105c68..db1ba9197d 100644 --- a/packages/plan/plan-mode/package.json +++ b/packages/plan/plan-mode/package.json @@ -53,7 +53,7 @@ }, "dependencies": { "@deepseek-ai/dsh-brand": "workspace:*", - "zod": "^4.4.3" + "zod": "4.4.3" }, "devDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", diff --git a/packages/preset/agent-preset-registry/package.json b/packages/preset/agent-preset-registry/package.json index d9393248fc..bd30b49128 100644 --- a/packages/preset/agent-preset-registry/package.json +++ b/packages/preset/agent-preset-registry/package.json @@ -63,7 +63,7 @@ "dependencies": { "@deepseek-ai/dsh-app-boot": "workspace:*", "@deepseek-ai/schemastery": "workspace:~", - "zod": "^4.4.3", + "zod": "4.4.3", "js-yaml": "^4.3.2" }, "devDependencies": { diff --git a/packages/sandbox/sandbox-policy/package.json b/packages/sandbox/sandbox-policy/package.json index dd7221a067..3dc7f0be2c 100644 --- a/packages/sandbox/sandbox-policy/package.json +++ b/packages/sandbox/sandbox-policy/package.json @@ -36,7 +36,7 @@ }, "dependencies": { "@deepseek-ai/schemastery": "workspace:~", - "zod": "^4.4.3" + "zod": "4.4.3" }, "devDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", diff --git a/packages/schedule/schedule/package.json b/packages/schedule/schedule/package.json index 4bf38dfb51..3ae7fe54dd 100644 --- a/packages/schedule/schedule/package.json +++ b/packages/schedule/schedule/package.json @@ -63,7 +63,7 @@ "dependencies": { "@deepseek-ai/schemastery": "workspace:~", "@js-temporal/polyfill": "0.5.1", - "zod": "^4.4.3" + "zod": "4.4.3" }, "devDependencies": { "@deepseek-ai/cordis-plugin-loader": "workspace:~", diff --git a/packages/session/session-projection-cache/package.json b/packages/session/session-projection-cache/package.json index d831eecefd..5eb3c8fca6 100644 --- a/packages/session/session-projection-cache/package.json +++ b/packages/session/session-projection-cache/package.json @@ -29,7 +29,7 @@ "dependencies": { "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/schemastery": "workspace:~", - "zod": "^4.4.3" + "zod": "4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:~", diff --git a/packages/session/session-projection/package.json b/packages/session/session-projection/package.json index de95acb8d5..e222ea670c 100644 --- a/packages/session/session-projection/package.json +++ b/packages/session/session-projection/package.json @@ -32,7 +32,7 @@ ], "license": "MIT", "dependencies": { - "zod": "^4.4.3" + "zod": "4.4.3" }, "peerDependencies": { "@deepseek-ai/dsh-session": "workspace:*", diff --git a/packages/session/session-stats/package.json b/packages/session/session-stats/package.json index 495e41dae3..b6f18a1e27 100644 --- a/packages/session/session-stats/package.json +++ b/packages/session/session-stats/package.json @@ -42,7 +42,7 @@ "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "zod": "^4.4.3" + "zod": "4.4.3" }, "devDependencies": { "@deepseek-ai/cordis-plugin-include": "workspace:~", diff --git a/packages/session/session-telemetry-otel/package.json b/packages/session/session-telemetry-otel/package.json index 0f943c578f..0cf56f83df 100644 --- a/packages/session/session-telemetry-otel/package.json +++ b/packages/session/session-telemetry-otel/package.json @@ -27,7 +27,7 @@ ], "license": "MIT", "dependencies": { - "@opentelemetry/api-logs": "^0.222.0", + "@opentelemetry/api-logs": "0.222.0", "@deepseek-ai/schemastery": "workspace:~" }, "peerDependencies": { diff --git a/packages/session/session-title/package.json b/packages/session/session-title/package.json index f7453b3dce..d6dc02897e 100644 --- a/packages/session/session-title/package.json +++ b/packages/session/session-title/package.json @@ -46,7 +46,7 @@ "dependencies": { "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/schemastery": "workspace:~", - "zod": "^4.4.3" + "zod": "4.4.3" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:~", diff --git a/packages/session/session-turn-outline/package.json b/packages/session/session-turn-outline/package.json index 4bdfb5b1f8..83cbd0b0b2 100644 --- a/packages/session/session-turn-outline/package.json +++ b/packages/session/session-turn-outline/package.json @@ -42,7 +42,7 @@ "@deepseek-ai/dsh-session-projection": "workspace:*" }, "dependencies": { - "zod": "^4.4.3" + "zod": "4.4.3" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:~", diff --git a/packages/skill/skill-filesystem/package.json b/packages/skill/skill-filesystem/package.json index 5c5f31727c..fde17358c5 100644 --- a/packages/skill/skill-filesystem/package.json +++ b/packages/skill/skill-filesystem/package.json @@ -33,7 +33,7 @@ "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "chokidar": "^5.0.0", + "chokidar": "5.0.0", "@deepseek-ai/schemastery": "workspace:~", "yaml": "^2.4.2" }, diff --git a/packages/spill/spill-policy/package.json b/packages/spill/spill-policy/package.json index 399b628b31..d5e9499048 100644 --- a/packages/spill/spill-policy/package.json +++ b/packages/spill/spill-policy/package.json @@ -68,7 +68,7 @@ "@deepseek-ai/dsh-ptc-runtime": "workspace:*", "@deepseek-ai/dsh-attachment-local": "workspace:*", "@deepseek-ai/dsh-tool-fs": "workspace:*", - "sharp": "^0.35.5", + "sharp": "0.35.5", "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*" } } diff --git a/packages/ssh/fs-ssh/package.json b/packages/ssh/fs-ssh/package.json index 702a0681e9..9b44f31413 100644 --- a/packages/ssh/fs-ssh/package.json +++ b/packages/ssh/fs-ssh/package.json @@ -35,7 +35,7 @@ }, "dependencies": { "@deepseek-ai/schemastery": "workspace:~", - "zod": "^4.4.3" + "zod": "4.4.3" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:~", diff --git a/packages/ssh/sandbox-ssh/package.json b/packages/ssh/sandbox-ssh/package.json index 5360a69a7d..f23e1c7da0 100644 --- a/packages/ssh/sandbox-ssh/package.json +++ b/packages/ssh/sandbox-ssh/package.json @@ -33,7 +33,7 @@ }, "dependencies": { "@deepseek-ai/schemastery": "workspace:~", - "zod": "^4.4.3" + "zod": "4.4.3" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:~", diff --git a/packages/ssh/ssh/package.json b/packages/ssh/ssh/package.json index 2d21fc88e5..868acf1341 100644 --- a/packages/ssh/ssh/package.json +++ b/packages/ssh/ssh/package.json @@ -60,7 +60,7 @@ }, "dependencies": { "@deepseek-ai/schemastery": "workspace:~", - "zod": "^4.4.3" + "zod": "4.4.3" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:~", diff --git a/packages/ssh/subprocess-ssh/package.json b/packages/ssh/subprocess-ssh/package.json index 1116dbee24..7ac81535b9 100644 --- a/packages/ssh/subprocess-ssh/package.json +++ b/packages/ssh/subprocess-ssh/package.json @@ -34,7 +34,7 @@ }, "dependencies": { "@deepseek-ai/schemastery": "workspace:~", - "zod": "^4.4.3" + "zod": "4.4.3" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:~", diff --git a/packages/storage/storage-domain/package.json b/packages/storage/storage-domain/package.json index 9ee0670656..b04ff22e42 100644 --- a/packages/storage/storage-domain/package.json +++ b/packages/storage/storage-domain/package.json @@ -32,7 +32,7 @@ }, "dependencies": { "@deepseek-ai/schemastery": "workspace:~", - "zod": "^4.4.3" + "zod": "4.4.3" }, "devDependencies": { "@deepseek-ai/dsh-storage": "workspace:*", diff --git a/packages/subagent/subagent-claude-code/package.json b/packages/subagent/subagent-claude-code/package.json index 821e14b4de..29e5278691 100644 --- a/packages/subagent/subagent-claude-code/package.json +++ b/packages/subagent/subagent-claude-code/package.json @@ -50,7 +50,7 @@ "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/schemastery": "workspace:~", "@modelcontextprotocol/sdk": "^1.31.0", - "zod": "^4.4.3", + "zod": "4.4.3", "@deepseek-ai/dsh-tool-subagent": "workspace:*" }, "devDependencies": { diff --git a/packages/subagent/subagent-claude-code/tests/subagent-claude-code.spec.ts b/packages/subagent/subagent-claude-code/tests/subagent-claude-code.spec.ts index 9f9bc27d81..cbb516b28a 100644 --- a/packages/subagent/subagent-claude-code/tests/subagent-claude-code.spec.ts +++ b/packages/subagent/subagent-claude-code/tests/subagent-claude-code.spec.ts @@ -360,7 +360,7 @@ describe('task admission and package contracts', () => { '@modelcontextprotocol/sdk', '^1.31.0', ) - expect(manifest.dependencies).toHaveProperty('zod', '^4.4.3') + expect(manifest.dependencies).toHaveProperty('zod', '4.4.3') expect(manifest.dependencies).not.toHaveProperty('@deepseek-ai/dsh-subagent-codex') const sdkRoot = dirname(fileURLToPath( diff --git a/packages/subagent/subagent/package.json b/packages/subagent/subagent/package.json index 4910641dda..678886de4b 100644 --- a/packages/subagent/subagent/package.json +++ b/packages/subagent/subagent/package.json @@ -52,7 +52,7 @@ "@deepseek-ai/dsh-chunked-list": "workspace:*", "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/schemastery": "workspace:~", - "zod": "^4.4.3" + "zod": "4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:~", diff --git a/packages/subagent/tool-subagent/package.json b/packages/subagent/tool-subagent/package.json index 3996817bdd..e9aa173b5b 100644 --- a/packages/subagent/tool-subagent/package.json +++ b/packages/subagent/tool-subagent/package.json @@ -44,7 +44,7 @@ }, "dependencies": { "@deepseek-ai/schemastery": "workspace:~", - "zod": "^4.4.3" + "zod": "4.4.3" }, "devDependencies": { "@deepseek-ai/cordis-plugin-loader": "workspace:~", diff --git a/packages/telemetry/otel/README.i18n.yaml b/packages/telemetry/otel/README.i18n.yaml index 92d25cbcbb..fb3da80c49 100644 --- a/packages/telemetry/otel/README.i18n.yaml +++ b/packages/telemetry/otel/README.i18n.yaml @@ -18,8 +18,8 @@ en: f141a9d909c555d8 zh: e4f5b690ccb1337c /deepseek-ai-dsh-otel/understand-the-implementation: - en: db3709ac9594b0de - zh: 8e5c84967d1eafbb + en: 56298bd5a3be2cdb + zh: 4dff467a0cb30a38 /deepseek-ai-dsh-otel/further-exploration: en: ee17b991de098cc0 zh: f90257e411921f2b diff --git a/packages/telemetry/otel/README.md b/packages/telemetry/otel/README.md index d70e961cc2..e49ced6468 100644 --- a/packages/telemetry/otel/README.md +++ b/packages/telemetry/otel/README.md @@ -36,6 +36,8 @@ Headers are explicit. The service does not add a channel header or inherit ambie `src/index.ts` registers the service; `event-log.ts` owns ordinary SDK batching; `session-log.ts` owns byte/count scheduling; `transport.ts` supplies the Session SDK JSON HTTP delegate and owns the shared exporter metrics recorder, which receives no meter provider and records nothing; `event-transport.ts` uses Got for cancellable ordinary-event HTTP requests and retry waits with SDK serialization and export accounting. No global OTel provider is installed; the accepted exporter options exclude the upstream `selfObsMeterProvider`, and the Session processor accepts only the batching fields it implements, so exporter and Session-processor self-observability metrics stay unrecorded. The Session processor measures each record once, groups conservative sizes, and waits for the SDK concurrency queue to clear after every callback before sending another request. +OpenTelemetry SDK dependencies use exact versions from one coordinated release across this service and its two adapters. + Composition tests exercise independent channels and service removal; adapter tests cover dependent-fiber cleanup and feedback authorization. diff --git a/packages/telemetry/otel/README.zh.md b/packages/telemetry/otel/README.zh.md index 200e747a7c..7dd081deb5 100644 --- a/packages/telemetry/otel/README.zh.md +++ b/packages/telemetry/otel/README.zh.md @@ -36,6 +36,8 @@ Header 显式提供。服务不会附加 channel header,也不继承环境中 `src/index.ts` 注册服务;`event-log.ts` 负责普通事件的 SDK 聚合;`session-log.ts` 负责字节和条数调度;`transport.ts` 提供 Session 的 SDK JSON HTTP delegate,并持有共享的 exporter 指标记录器(不接收 meter provider,不记录任何指标);`event-transport.ts` 使用 Got 实现可取消的普通事件 HTTP 请求和重试等待,序列化与导出计数仍由 SDK 负责。不安装全局 OTel provider;接受的 exporter 选项排除上游的 `selfObsMeterProvider`,Session processor 也只接受它实现的聚合字段,因此 exporter 和 Session processor 的自观测指标都不会被记录。Session processor 对每条记录只计量一次,按保守大小组包,并在每次回调后等待 SDK 并发队列清理完成才发送下一请求。 +本服务及其两个适配器的 OpenTelemetry SDK 依赖使用同一配套版本系列的精确版本。 + 组合测试覆盖独立通道和服务移除;适配器测试覆盖依赖 fiber 清理与反馈授权。 diff --git a/packages/telemetry/otel/package.json b/packages/telemetry/otel/package.json index 4ea2b0a343..a725c0dd39 100644 --- a/packages/telemetry/otel/package.json +++ b/packages/telemetry/otel/package.json @@ -28,12 +28,12 @@ "license": "MIT", "dependencies": { "@opentelemetry/api": "^1.9.1", - "@opentelemetry/api-logs": "^0.222.0", - "@opentelemetry/otlp-exporter-base": "^0.222.0", - "@opentelemetry/resources": "^2.11.0", - "@opentelemetry/sdk-logs": "^0.222.0", + "@opentelemetry/api-logs": "0.222.0", + "@opentelemetry/otlp-exporter-base": "0.222.0", + "@opentelemetry/resources": "2.11.0", + "@opentelemetry/sdk-logs": "0.222.0", "@opentelemetry/core": "2.11.0", - "@opentelemetry/otlp-transformer": "^0.222.0", + "@opentelemetry/otlp-transformer": "0.222.0", "got": "^14.6.6" }, "peerDependencies": { diff --git a/packages/todo/tool-todo/package.json b/packages/todo/tool-todo/package.json index ce2eec2a7e..834d7e3fa1 100644 --- a/packages/todo/tool-todo/package.json +++ b/packages/todo/tool-todo/package.json @@ -33,7 +33,7 @@ "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "workspace:~", - "zod": "^4.4.3" + "zod": "4.4.3" }, "peerDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", diff --git a/packages/typert/generator/package.json b/packages/typert/generator/package.json index 324f20140a..73d22fd9a4 100644 --- a/packages/typert/generator/package.json +++ b/packages/typert/generator/package.json @@ -42,6 +42,6 @@ "@deepseek-ai/dsh-tool-cordis": "workspace:*", "@deepseek-ai/dsh-typert-registry": "workspace:*", "@deepseek-ai/cordis": "workspace:~", - "zod": "^4.4.3" + "zod": "4.4.3" } } diff --git a/packages/typert/loader/package.json b/packages/typert/loader/package.json index 196b1bb1f4..23e9137a93 100644 --- a/packages/typert/loader/package.json +++ b/packages/typert/loader/package.json @@ -39,6 +39,6 @@ "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-typert-registry": "workspace:*", "@deepseek-ai/cordis": "workspace:~", - "zod": "^4.4.3" + "zod": "4.4.3" } } diff --git a/packages/typert/registry/package.json b/packages/typert/registry/package.json index 6e6cbe8af7..8db9a4cacd 100644 --- a/packages/typert/registry/package.json +++ b/packages/typert/registry/package.json @@ -48,7 +48,7 @@ ], "license": "MIT", "dependencies": { - "zod": "^4.4.3" + "zod": "4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:~" diff --git a/packages/util/chunked-list/package.json b/packages/util/chunked-list/package.json index cad4762bc3..631ef1f226 100644 --- a/packages/util/chunked-list/package.json +++ b/packages/util/chunked-list/package.json @@ -33,6 +33,6 @@ "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "zod": "^4.4.3" + "zod": "4.4.3" } } diff --git a/packages/util/http-proxy/package.json b/packages/util/http-proxy/package.json index a8e7e36529..8c5f473cda 100644 --- a/packages/util/http-proxy/package.json +++ b/packages/util/http-proxy/package.json @@ -30,7 +30,7 @@ "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "undici": "^8.10.2" + "undici": "8.11.2" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:~" diff --git a/packages/web/web-fetch-http/package.json b/packages/web/web-fetch-http/package.json index c51ff64f40..d59f357822 100644 --- a/packages/web/web-fetch-http/package.json +++ b/packages/web/web-fetch-http/package.json @@ -35,7 +35,7 @@ "dependencies": { "@deepseek-ai/schemastery": "workspace:~", "ipaddr.js": "^2.5.0", - "undici": "^8.10.2" + "undici": "8.11.2" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:~", diff --git a/packages/workspace/workspace/package.json b/packages/workspace/workspace/package.json index 73e8c4d4a8..640d7155af 100644 --- a/packages/workspace/workspace/package.json +++ b/packages/workspace/workspace/package.json @@ -41,7 +41,7 @@ }, "dependencies": { "@deepseek-ai/dsh-brand": "workspace:*", - "zod": "^4.4.3" + "zod": "4.4.3" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:~", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dfaa16532d..f7e6215387 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -751,7 +751,7 @@ importers: specifier: ^18.2.0 version: 18.3.1(react@18.3.1) sharp: - specifier: ^0.35.5 + specifier: 0.35.5 version: 0.35.5(@types/node@22.20.1) typescript: specifier: ^6.0.3 @@ -805,7 +805,7 @@ importers: specifier: ^0.1.5 version: 0.1.5 koffi: - specifier: ^3.1.0 + specifier: 3.1.1 version: 3.1.1 devDependencies: '@deepseek-ai/cordis-plugin-include': @@ -1166,7 +1166,7 @@ importers: packages/api/account-controller: dependencies: zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -1228,7 +1228,7 @@ importers: specifier: ^8.18.1 version: 8.18.1 zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 packages/api/job-controller: @@ -1240,7 +1240,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -1389,7 +1389,7 @@ importers: specifier: workspace:* version: link:../../interaction/user-questions zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 packages/api/session-controller: @@ -1407,7 +1407,7 @@ importers: specifier: ^3.0.2 version: 3.0.2 zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -1549,7 +1549,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -1595,7 +1595,7 @@ importers: specifier: ^6.0.0 version: 6.0.0 zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -1656,7 +1656,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -1705,7 +1705,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -1760,7 +1760,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery sharp: - specifier: ^0.35.5 + specifier: 0.35.5 version: 0.35.5(@types/node@22.20.1) devDependencies: '@deepseek-ai/cordis': @@ -1889,8 +1889,8 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery chokidar: - specifier: ^4.0.3 - version: 4.0.3 + specifier: 5.0.0 + version: 5.0.0 node-addon-require-builtin: specifier: ^0.1.9 version: 0.1.9 @@ -1950,7 +1950,7 @@ importers: specifier: ^2.9.0 version: 2.9.0 zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -2938,7 +2938,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -2975,7 +2975,7 @@ importers: specifier: workspace:* version: link:../../typert/protocol zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -3095,7 +3095,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -3500,7 +3500,7 @@ importers: specifier: workspace:* version: link:../../util/workspace-path '@tanstack/react-virtual': - specifier: ^3.14.10 + specifier: 3.14.10 version: 3.14.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/react': specifier: ~18.3.1 @@ -3717,7 +3717,7 @@ importers: specifier: ^18.2.0 version: 18.3.1(react@18.3.1) zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 packages/client/ui-deliverables: @@ -4471,7 +4471,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -5752,7 +5752,7 @@ importers: specifier: ^18.2.0 version: 18.3.1(react@18.3.1) zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 packages/client/ui-sidebar-terminal: @@ -6185,7 +6185,7 @@ importers: specifier: workspace:* version: link:../../util/values '@tanstack/react-virtual': - specifier: ^3.14.10 + specifier: 3.14.10 version: 3.14.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/react': specifier: ~18.3.1 @@ -6448,6 +6448,9 @@ importers: '@deepseek-ai/dsh-host-webserver': specifier: workspace:* version: link:../../host/webserver + '@tanstack/react-virtual': + specifier: 3.14.10 + version: 3.14.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/react': specifier: ~18.3.1 version: 18.3.31 @@ -6463,6 +6466,9 @@ importers: typescript: specifier: ^6.0.3 version: 6.0.3 + zod: + specifier: 4.4.3 + version: 4.4.3 packages/compaction/command-compact: devDependencies: @@ -6769,7 +6775,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -6848,7 +6854,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -6903,7 +6909,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -6998,7 +7004,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -7193,8 +7199,8 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery chokidar: - specifier: ^4.0.3 - version: 4.0.3 + specifier: 5.0.0 + version: 5.0.0 yaml: specifier: ^2.9.0 version: 2.9.0 @@ -7236,7 +7242,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -7374,7 +7380,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -7405,7 +7411,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -7476,7 +7482,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -7779,7 +7785,7 @@ importers: specifier: 3.2.2 version: 3.2.2(yauzl@3.4.0) zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -8239,7 +8245,7 @@ importers: specifier: 0.28.0 version: 0.28.0 zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -8743,7 +8749,7 @@ importers: specifier: 1.13.8 version: 1.13.8 zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -9356,7 +9362,7 @@ importers: specifier: ^4.0.24 version: 4.0.24 chokidar: - specifier: ^5.0.0 + specifier: 5.0.0 version: 5.0.0 packages/experimental/worktree: @@ -9450,7 +9456,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -9565,7 +9571,7 @@ importers: packages/feedback/command-feedback: dependencies: zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -9605,7 +9611,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -9660,8 +9666,8 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery chokidar: - specifier: ^4.0.3 - version: 4.0.3 + specifier: 5.0.0 + version: 5.0.0 koffi: specifier: 3.1.1 version: 3.1.1 @@ -9928,7 +9934,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -10221,7 +10227,7 @@ importers: packages/host/plugin-inventory: dependencies: zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -10252,13 +10258,13 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery '@opentelemetry/api-logs': - specifier: ^0.222.0 + specifier: 0.222.0 version: 0.222.0 '@opentelemetry/otlp-exporter-base': - specifier: ^0.222.0 + specifier: 0.222.0 version: 0.222.0(@opentelemetry/api@1.9.1) '@opentelemetry/sdk-logs': - specifier: ^0.222.0 + specifier: 0.222.0 version: 0.222.0(@opentelemetry/api@1.9.1) devDependencies: '@deepseek-ai/cordis': @@ -10323,7 +10329,7 @@ importers: specifier: workspace:* version: link:../../util/crypto zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -10357,7 +10363,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -10450,7 +10456,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -10597,7 +10603,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -10772,7 +10778,7 @@ importers: version: link:../../../vendor/schemastery '@earendil-works/pi-ai': specifier: ^1.0.2 - version: 1.0.2(patch_hash=1cc211bc358d30cb58bd975f39c03e296f8a277c3de845514d12f9ae77ebab5f)(@aws-sdk/credential-provider-node@3.972.84)(@modelcontextprotocol/sdk@1.31.0(supports-color@9.4.0)(zod@4.4.3))(@smithy/signature-v4@5.7.4)(supports-color@9.4.0)(undici@8.10.2)(ws@8.21.3)(zod@4.4.3) + version: 1.0.2(patch_hash=1cc211bc358d30cb58bd975f39c03e296f8a277c3de845514d12f9ae77ebab5f)(@aws-sdk/credential-provider-node@3.972.84)(@modelcontextprotocol/sdk@1.31.0(supports-color@9.4.0)(zod@4.4.3))(@smithy/signature-v4@5.7.4)(supports-color@9.4.0)(undici@8.11.2)(ws@8.21.3)(zod@4.4.3) devDependencies: '@deepseek-ai/cordis': specifier: workspace:~ @@ -10820,7 +10826,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -10924,7 +10930,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -11114,7 +11120,7 @@ importers: specifier: ^2026.8.31 version: 2026.8.31(supports-color@9.4.0)(zod@4.4.3) zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 packages/mcp/mcp-resources: @@ -11151,7 +11157,7 @@ importers: specifier: workspace:* version: link:../../util/brand zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -11237,7 +11243,7 @@ importers: specifier: ^4.3.2 version: 4.3.2 zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -11425,7 +11431,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -11496,7 +11502,7 @@ importers: specifier: 0.5.1 version: 0.5.1 zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -12072,7 +12078,7 @@ importers: packages/session/session-projection: dependencies: zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -12091,7 +12097,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -12116,7 +12122,7 @@ importers: packages/session/session-stats: dependencies: zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -12156,7 +12162,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery '@opentelemetry/api-logs': - specifier: ^0.222.0 + specifier: 0.222.0 version: 0.222.0 devDependencies: '@deepseek-ai/cordis': @@ -12220,7 +12226,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -12322,7 +12328,7 @@ importers: packages/session/session-turn-outline: dependencies: zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -12906,7 +12912,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery chokidar: - specifier: ^5.0.0 + specifier: 5.0.0 version: 5.0.0 yaml: specifier: ^2.4.2 @@ -13134,7 +13140,7 @@ importers: specifier: workspace:* version: link:../../core/tools sharp: - specifier: ^0.35.5 + specifier: 0.35.5 version: 0.35.5(@types/node@22.20.1) packages/ssh/fs-ssh: @@ -13143,7 +13149,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -13168,7 +13174,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -13187,7 +13193,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -13360,7 +13366,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -13388,7 +13394,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -13439,7 +13445,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -13603,7 +13609,7 @@ importers: specifier: ^1.31.0 version: 1.31.0(supports-color@9.4.0)(zod@4.4.3) zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -13893,7 +13899,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -14047,22 +14053,22 @@ importers: specifier: ^1.9.1 version: 1.9.1 '@opentelemetry/api-logs': - specifier: ^0.222.0 + specifier: 0.222.0 version: 0.222.0 '@opentelemetry/core': specifier: 2.11.0 version: 2.11.0(@opentelemetry/api@1.9.1) '@opentelemetry/otlp-exporter-base': - specifier: ^0.222.0 + specifier: 0.222.0 version: 0.222.0(@opentelemetry/api@1.9.1) '@opentelemetry/otlp-transformer': - specifier: ^0.222.0 + specifier: 0.222.0 version: 0.222.0(@opentelemetry/api@1.9.1) '@opentelemetry/resources': - specifier: ^2.11.0 + specifier: 2.11.0 version: 2.11.0(@opentelemetry/api@1.9.1) '@opentelemetry/sdk-logs': - specifier: ^0.222.0 + specifier: 0.222.0 version: 0.222.0(@opentelemetry/api@1.9.1) got: specifier: ^14.6.6 @@ -14444,7 +14450,7 @@ importers: specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -14503,7 +14509,7 @@ importers: specifier: workspace:* version: link:../registry zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 packages/typert/loader: @@ -14525,7 +14531,7 @@ importers: specifier: workspace:* version: link:../registry zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 packages/typert/protocol: @@ -14541,7 +14547,7 @@ importers: packages/typert/registry: dependencies: zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -14566,7 +14572,7 @@ importers: packages/util/chunked-list: dependencies: zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -14600,8 +14606,8 @@ importers: packages/util/http-proxy: dependencies: undici: - specifier: ^8.10.2 - version: 8.10.2 + specifier: 8.11.2 + version: 8.11.2 devDependencies: '@deepseek-ai/cordis': specifier: workspace:~ @@ -14744,8 +14750,8 @@ importers: specifier: ^2.5.0 version: 2.5.0 undici: - specifier: ^8.10.2 - version: 8.10.2 + specifier: 8.11.2 + version: 8.11.2 devDependencies: '@deepseek-ai/cordis': specifier: workspace:~ @@ -14993,7 +14999,7 @@ importers: specifier: workspace:* version: link:../../util/brand zod: - specifier: ^4.4.3 + specifier: 4.4.3 version: 4.4.3 devDependencies: '@deepseek-ai/cordis': @@ -22698,8 +22704,8 @@ packages: resolution: {integrity: sha512-RYONW2MeafgYlkVOKYKkA/Ag7BmXqgIWCa8t1m0JcxrQg9pI9lEqRhAOruOBCbAohOa/gkCF+iPi9hrgvTzu6Q==} engines: {node: '>=20.18.1'} - undici@8.10.2: - resolution: {integrity: sha512-/y4/bH9YNU5hi9NIrpOuvGXFcxrj3CMrV+/AYpowAYTpHn8gX/XPFjNy766FPoYY0miQhdW977JFWKGNhBdwyQ==} + undici@8.11.2: + resolution: {integrity: sha512-u4UB2/IrKdU6lFxumHmmo1a3fCQO5tzQllRorfoRS63txhrB7xTpSn1PftwC4qEHkOaqP95fCWW4lJzwErwzhQ==} engines: {node: '>=22.19.0'} unicode-properties@1.4.1: @@ -23864,7 +23870,7 @@ snapshots: transitivePeerDependencies: - '@algolia/client-search' - '@earendil-works/pi-ai@1.0.2(patch_hash=1cc211bc358d30cb58bd975f39c03e296f8a277c3de845514d12f9ae77ebab5f)(@aws-sdk/credential-provider-node@3.972.84)(@modelcontextprotocol/sdk@1.31.0(supports-color@9.4.0)(zod@4.4.3))(@smithy/signature-v4@5.7.4)(supports-color@9.4.0)(undici@8.10.2)(ws@8.21.3)(zod@4.4.3)': + '@earendil-works/pi-ai@1.0.2(patch_hash=1cc211bc358d30cb58bd975f39c03e296f8a277c3de845514d12f9ae77ebab5f)(@aws-sdk/credential-provider-node@3.972.84)(@modelcontextprotocol/sdk@1.31.0(supports-color@9.4.0)(zod@4.4.3))(@smithy/signature-v4@5.7.4)(supports-color@9.4.0)(undici@8.11.2)(ws@8.21.3)(zod@4.4.3)': dependencies: '@anthropic-ai/sdk': 0.129.0(zod@4.4.3) '@aws-sdk/client-bedrock-runtime': 3.1127.0 @@ -23873,7 +23879,7 @@ snapshots: '@smithy/node-http-handler': 4.12.1 http-proxy-agent: 9.1.0(supports-color@9.4.0) https-proxy-agent: 9.1.0(supports-color@9.4.0) - openai: 7.19.0(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(undici@8.10.2)(ws@8.21.3)(zod@4.4.3) + openai: 7.19.0(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(undici@8.11.2)(ws@8.21.3)(zod@4.4.3) partial-json: 0.1.7 typebox: 1.3.27 transitivePeerDependencies: @@ -29344,11 +29350,11 @@ snapshots: powershell-utils: 0.2.1 wsl-utils: 1.0.0 - openai@7.19.0(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(undici@8.10.2)(ws@8.21.3)(zod@4.4.3): + openai@7.19.0(@aws-sdk/credential-provider-node@3.972.84)(@smithy/signature-v4@5.7.4)(undici@8.11.2)(ws@8.21.3)(zod@4.4.3): optionalDependencies: '@aws-sdk/credential-provider-node': 3.972.84 '@smithy/signature-v4': 5.7.4 - undici: 8.10.2 + undici: 8.11.2 ws: 8.21.3 zod: 4.4.3 @@ -30516,7 +30522,7 @@ snapshots: undici@7.29.1: {} - undici@8.10.2: {} + undici@8.11.2: {} unicode-properties@1.4.1: dependencies: diff --git a/scripts/client-bundle-purity.spec.ts b/scripts/client-bundle-purity.spec.ts index b172dab5f4..20fba8edbc 100644 --- a/scripts/client-bundle-purity.spec.ts +++ b/scripts/client-bundle-purity.spec.ts @@ -184,10 +184,12 @@ describe('client bundle purity gate', () => { neverBundle: (specifier: string) => boolean } - expect(requesting.neverBundle('react')).toBe(true) - expect(requesting.neverBundle('zod')).toBe(false) - expect(plain.neverBundle('react')).toBe(true) - expect(plain.neverBundle('@deepseek-ai/dsh-client-store')).toBe(true) + for (const bundle of [requesting, plain]) { + for (const specifier of ['react', 'zod', '@tanstack/react-virtual', '@deepseek-ai/dsh-client-store']) { + expect(bundle.neverBundle(specifier)).toBe(true) + } + expect(bundle.neverBundle('zod/v3')).toBe(false) + } }) })