@michengai/dsh-agency-agents 0.1.36 → 0.1.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,17 +4,40 @@
4
4
 
5
5
  The five most recent published versions are listed below.
6
6
 
7
- ## Unreleased
7
+ ## 0.1.38 - 2026-09-10
8
+
9
+ - Add the exact release-age exception for official `dsh-chunked-list@0.1.5-rc.1`, fixing clean CI installation.
10
+ - Type-check browser tests, configuration, and server scripts; require Chromium regressions in the release gate and CI.
11
+ - Clean temporary test files even when building fails, allow a custom port, and clarify the boundary between source tests and published-artifact acceptance.
12
+
13
+ - Fix backdrop dismissal moving focus away after prompt preview closes; add real Chromium regressions for three dismissal paths and StrictMode.
14
+ - Centralize legacy cleanup checks in the expert library and avoid accessing unregistered or disposed settings when there is no cleanup work.
15
+ - Restore focus to the original View Prompt button when closing the preview with Escape or the Close button, including after asynchronous prompt loading.
16
+ - Enumerate the four validated DSH RC versions (`0.1.0-rc.8`, `0.1.1-rc.2`, `0.1.2-rc.1`, `0.1.5-rc.1`) in host and package peers; allow the matching older Cordis and Schemastery baselines. Keep the legacy client runtime optional.
17
+ - Wait for settings registration before cleaning legacy deleted experts, fixing the startup warning and skipped cleanup on older hosts.
18
+ - Build against DSH `0.1.5-rc.1` with pinned development dependencies.
19
+
20
+ ## 0.1.37 - 2026-09-10
21
+
22
+ This tag has a GitHub Release, but dependency release-age checks blocked CI and no npm package was published. Use 0.1.38.
23
+
24
+ - Type-check browser tests, configuration, and server scripts; require Chromium regressions in the release gate and CI.
25
+ - Clean temporary test files even when building fails, allow a custom port, and clarify the boundary between source tests and published-artifact acceptance.
26
+
27
+ - Fix backdrop dismissal moving focus away after prompt preview closes; add real Chromium regressions for three dismissal paths and StrictMode.
28
+ - Centralize legacy cleanup checks in the expert library and avoid accessing unregistered or disposed settings when there is no cleanup work.
29
+ - Restore focus to the original View Prompt button when closing the preview with Escape or the Close button, including after asynchronous prompt loading.
30
+ - Enumerate the four validated DSH RC versions (`0.1.0-rc.8`, `0.1.1-rc.2`, `0.1.2-rc.1`, `0.1.5-rc.1`) in host and package peers; allow the matching older Cordis and Schemastery baselines. Keep the legacy client runtime optional.
31
+ - Wait for settings registration before cleaning legacy deleted experts, fixing the startup warning and skipped cleanup on older hosts.
32
+ - Build against DSH `0.1.5-rc.1` with pinned development dependencies.
8
33
 
9
34
  ## 0.1.36 - 2026-09-09
10
35
 
11
- - Added custom expert management with creation, editing, copying built-ins, avatar and Emoji selection, and source and enabled-state filters. Custom experts are available through @ suggestions, the chat picker, and summon tools.
12
- - Made deletion permanent with immediate capacity recovery and automatic cleanup of legacy soft-deleted records. Name conflicts retain rename and delete access in Settings instead of making the entire catalog unavailable.
13
- - Strengthened settings revision and catalog consistency checks, rejected invalid enablement entries, and prevented in-flight reads and delayed write receipts from overwriting newer results.
14
- - Preserved drafts during editing conflicts and added review of the latest content before saving. Stale local catalogs no longer block valid saves after another window deletes or renames an expert to release its name.
15
- - Made viewing, copying, and summoning nested experts read the actual file selected by the catalog, avoiding missing prompts or the wrong persona from a same-named file.
16
- - Refined chat entry spacing, dropdown styling, blue focus feedback, and layered Escape handling. Prompt previews use a native dialog, and custom reference chips retain the same icon-and-name presentation as built-ins.
17
- - Fixed a concurrency gap in automatic update locking and made release validation compatible with Windows CRLF line endings.
36
+ - Create your own experts in Expert Settings: write custom instructions, copy and adapt a built-in expert, and choose an avatar and Emoji.
37
+ - Once enabled, custom experts are available by typing @ or clicking the Experts button in chat. Their reference tags use the same clean name display as built-in experts.
38
+ - Filter experts by source and enabled status for easier management. Deleting a custom expert is permanent and frees up a slot, so please check before deleting.
39
+ - Keep your draft when edits from multiple windows conflict, then review the latest content before saving. Experts with duplicate names can still be renamed or deleted in Settings without affecting other experts.
40
+ - Improved the chat entry, dropdown menus, and keyboard interactions; fixed issues with viewing, copying, and using some expert prompts; and improved update reliability.
18
41
 
19
42
  ## 0.1.35 - 2026-09-09
20
43
 
@@ -4,17 +4,40 @@
4
4
 
5
5
  以下记录最近发布的五个版本。
6
6
 
7
- ## 未发布
7
+ ## 0.1.38 - 2026-09-10
8
+
9
+ - 补齐官方 `dsh-chunked-list@0.1.5-rc.1` 的精确发布等待期例外,修复全新 CI 安装被阻止的问题。
10
+ - 将浏览器测试、配置和服务脚本纳入类型检查;发布门禁及 CI 强制执行 Chromium 回归。
11
+ - 测试服务在构建失败时也清理临时目录,支持自定义端口,并明确源码测试与发布产物验收的边界。
12
+
13
+ - 修复点击提示词预览遮罩关闭后焦点被鼠标默认行为移走的问题,新增真实 Chromium 回归,覆盖三种关闭方式及 StrictMode。
14
+ - 将旧记录清理判断集中到专家库,无待清理记录时不访问尚未注册或已卸载的设置区。
15
+ - 修复提示词异步加载后关闭预览的焦点恢复,按 Escape 或点击关闭均返回原“查看提示词”按钮。
16
+ - 在宿主和子包 peer 中枚举四个已验证的 DSH RC(`0.1.0-rc.8`、`0.1.1-rc.2`、`0.1.2-rc.1`、`0.1.5-rc.1`),放行对应旧版 Cordis 和 Schemastery,保留旧客户端 runtime 为可选依赖。
17
+ - 等设置区注册后再清理旧删除记录,修复旧宿主启动警告及清理未执行的问题。
18
+ - DSH 开发依赖固定为 `0.1.5-rc.1`。
19
+
20
+ ## 0.1.37 - 2026-09-10
21
+
22
+ 此标签已创建 GitHub Release,但依赖发布等待期检查阻止 CI,未发布到 npm;请使用 0.1.38。
23
+
24
+ - 将浏览器测试、配置和服务脚本纳入类型检查;发布门禁及 CI 强制执行 Chromium 回归。
25
+ - 测试服务在构建失败时也清理临时目录,支持自定义端口,并明确源码测试与发布产物验收的边界。
26
+
27
+ - 修复点击提示词预览遮罩关闭后焦点被鼠标默认行为移走的问题,新增真实 Chromium 回归,覆盖三种关闭方式及 StrictMode。
28
+ - 将旧记录清理判断集中到专家库,无待清理记录时不访问尚未注册或已卸载的设置区。
29
+ - 修复提示词异步加载后关闭预览的焦点恢复,按 Escape 或点击关闭均返回原“查看提示词”按钮。
30
+ - 在宿主和子包 peer 中枚举四个已验证的 DSH RC(`0.1.0-rc.8`、`0.1.1-rc.2`、`0.1.2-rc.1`、`0.1.5-rc.1`),放行对应旧版 Cordis 和 Schemastery,保留旧客户端 runtime 为可选依赖。
31
+ - 等设置区注册后再清理旧删除记录,修复旧宿主启动警告及清理未执行的问题。
32
+ - DSH 开发依赖固定为 `0.1.5-rc.1`。
8
33
 
9
34
  ## 0.1.36 - 2026-09-09
10
35
 
11
- - 新增自定义专家管理:支持创建、编辑、复制内置专家、选择头像与 Emoji,以及来源和启用状态筛选;自定义专家可从 @ 候选、聊天入口和召唤工具调用。
12
- - 专家删除改为永久删除并立即释放名额,自动清理旧版软删除记录;名称冲突保留设置页改名和删除入口,不再导致整张名册不可用。
13
- - 加强配置修订号和名册一致性校验,拒绝无效启用项,防止在途旧查询及延迟写入回执覆盖最新结果。
14
- - 编辑冲突时保留草稿,支持读取并核对最新内容后再保存;其他窗口删除或改名释放名称后,旧本地名册不再阻止合法保存。
15
- - 嵌套目录专家的查看、复制与召唤均读取名册选中的实际文件,避免正文缺失或读到同名专家的错误 persona。
16
- - 优化聊天入口间距、下拉样式、蓝色焦点反馈和 Escape 分层处理;提示词预览使用原生弹窗,自定义引用标签与内置保持统一图标和纯名称。
17
- - 修复自动更新请求的并发锁空档,并让发布校验兼容 Windows CRLF 换行。
36
+ - 新增自定义专家:在专家设置中创建自己的角色、编写提示词,也可以复制内置专家后修改,并选择头像和 Emoji。
37
+ - 自定义专家启用后,可在聊天中输入 @ 或点击「专家」按钮选择;引用标签与内置专家保持一致,简洁展示专家名称。
38
+ - 支持按来源和启用状态筛选,方便管理专家。删除自定义专家会永久移除并释放名额,请在删除前确认。
39
+ - 多窗口编辑发生冲突时保留草稿,可核对最新内容后继续保存;专家重名时仍可在设置中改名或删除,不影响其他专家使用。
40
+ - 优化聊天入口、下拉菜单和键盘操作体验,修复部分专家提示词查看、复制和调用异常,并提升更新稳定性。
18
41
 
19
42
  ## 0.1.35 - 2026-09-09
20
43
 
package/README.md CHANGED
@@ -64,8 +64,14 @@ For a ready-to-use workbench, download [DSH Codex Desktop](https://github.com/Mi
64
64
  - Examples use the `web` profile; replace it with the target profile.
65
65
  - Source installation and development require Node.js 22+ and pnpm. npm installation does not require running `pnpm install` separately.
66
66
 
67
+ ## Host dependencies and compatibility
68
+
69
+ DSH `dsh.client.inject` controls browser module loading order. Missing graph entries are skipped, and frozen modules need not exist as npm packages in a profile. Runtime / primitives entries remain for validated older RCs. Required peers such as `dsh-client-ui-slots` retain the runtime contract. Profiles with `auto-install-peers` disabled may report unmet peers; strict peer checks may also block installation. Check the host version and browser module availability rather than inferring runtime failure solely from the npm tree.
70
+
67
71
  ## Installation
68
72
 
73
+ Supported DeepSeek Harness RC versions: `0.1.0-rc.8`, `0.1.1-rc.2`, `0.1.2-rc.1`, and `0.1.5-rc.1`. The host is supplied by your existing CLI or Desktop installation; the plugin does not install another copy. Future RC versions require separate compatibility validation.
74
+
69
75
  The installation commands below use the official npm registry.
70
76
 
71
77
  ### Ask an agent to install it (recommended)
@@ -738,7 +744,18 @@ pnpm test
738
744
  pnpm verify
739
745
  ```
740
746
 
741
- `prepublishOnly` runs these build, test, and package-integrity checks before publishing.
747
+ `prepublishOnly` runs the build, unit tests, browser regressions, and package-integrity checks before publishing. Release CI installs Chromium and its system dependencies; before the first local release, run the browser installation command below.
748
+
749
+ Run browser interaction regressions separately (real React DOM and Chromium; no DSH credentials or user profile required):
750
+
751
+ ```powershell
752
+ [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
753
+ $OutputEncoding = [System.Text.Encoding]::UTF8
754
+ pnpm exec playwright install chromium
755
+ pnpm test:browser
756
+ ```
757
+
758
+ Coverage includes asynchronous loading, focus restoration after Escape, close-button and backdrop dismissal, StrictMode, and successive triggers. These component tests do not replace real-host or model-delegation acceptance. Browser tests bundle source rather than loading the published `lib/client.js`; artifacts still require build, package checks, and real-host acceptance. Override the default port 18769 with the `AGENCY_BROWSER_TEST_PORT` environment variable if needed.
742
759
 
743
760
  ## Custom experts
744
761
 
package/README.zh-CN.md CHANGED
@@ -64,8 +64,14 @@
64
64
  - 以下示例使用 `web` profile;请替换为实际目标 profile。
65
65
  - 从源码安装或二次开发需要 Node.js 22+ 与 pnpm;仅从 npm 安装无需单独执行 `pnpm install`。
66
66
 
67
+ ## 宿主依赖与兼容性
68
+
69
+ DSH 的 `dsh.client.inject` 声明浏览器模块的加载顺序;宿主模块图中不存在的项会跳过,冻结模块也不一定对应 Profile 内的 npm 包。为兼容已验证的旧 RC,保留 runtime / primitives 条目。`dsh-client-ui-slots` 等 required peer 仍表达运行时契约;关闭 `auto-install-peers` 的 Profile 可能出现 unmet peer 提示,严格 peer 检查还可能阻止安装,需核对宿主版本及浏览器模块是否提供,不能据 npm 包树缺失直接判定运行失败。
70
+
67
71
  ## 安装
68
72
 
73
+ 支持的 DeepSeek Harness RC 版本:`0.1.0-rc.8`、`0.1.1-rc.2`、`0.1.2-rc.1`、`0.1.5-rc.1`。主程序由现有 CLI 或 Desktop 提供,插件不会另行安装;后续 RC 需另行验证兼容性。
74
+
69
75
  以下安装命令使用官方 npm 源。
70
76
 
71
77
  ### 让 Agent 帮你安装(推荐)
@@ -738,7 +744,18 @@ pnpm test
738
744
  pnpm verify
739
745
  ```
740
746
 
741
- `prepublishOnly` 会在发布前依次执行上述构建、测试和包完整性检查。
747
+ `prepublishOnly` 在发布前执行构建、单元测试、浏览器回归和包完整性检查;发布 CI 自动安装 Chromium 及系统依赖。首次本地发布前需执行下方浏览器安装命令。
748
+
749
+ 浏览器交互回归独立运行(真实 React DOM 与 Chromium,不需要 DSH 认证或用户 Profile):
750
+
751
+ ```powershell
752
+ [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
753
+ $OutputEncoding = [System.Text.Encoding]::UTF8
754
+ pnpm exec playwright install chromium
755
+ pnpm test:browser
756
+ ```
757
+
758
+ 覆盖异步加载后通过 Escape、关闭按钮和遮罩退出时的焦点恢复,以及 StrictMode 和连续打开不同专家。该测试验证组件交互,不替代真实宿主和模型委派验收。 浏览器测试从源码构建,不加载发布的 `lib/client.js`;产物仍需构建、包校验及真实宿主验收。端口默认 18769,占用时可通过 `AGENCY_BROWSER_TEST_PORT` 环境变量覆盖。
742
759
 
743
760
  ## 自定义专家
744
761
 
package/lib/client.js CHANGED
@@ -34,13 +34,13 @@ window.__ModuleLoader__.load({
34
34
  const dialog = react.default.useRef(null);
35
35
  react.default.useEffect(() => {
36
36
  const node = dialog.current;
37
- const previous = document.activeElement;
37
+ const previous = props.returnFocus;
38
38
  node?.showModal();
39
39
  return () => {
40
40
  node?.close();
41
- previous?.focus();
41
+ if (previous.isConnected) previous.focus({ preventScroll: true });
42
42
  };
43
- }, []);
43
+ }, [props.returnFocus]);
44
44
  return react.default.createElement("dialog", {
45
45
  ref: dialog,
46
46
  className: "aag-prompt-modal",
@@ -61,7 +61,10 @@ window.__ModuleLoader__.load({
61
61
  onMouseDown: (event) => {
62
62
  if (event.target !== event.currentTarget) return;
63
63
  const rect = event.currentTarget.getBoundingClientRect();
64
- if (event.clientX < rect.left || event.clientX > rect.right || event.clientY < rect.top || event.clientY > rect.bottom) props.onClose();
64
+ if (event.clientX < rect.left || event.clientX > rect.right || event.clientY < rect.top || event.clientY > rect.bottom) {
65
+ event.preventDefault();
66
+ props.onClose();
67
+ }
65
68
  }
66
69
  }, react.default.createElement("div", { className: "aag-modal-head" }, react.default.createElement("h3", { className: "aag-modal-title" }, props.title), react.default.createElement("button", {
67
70
  type: "button",
@@ -9286,11 +9289,12 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9286
9289
  setError(null);
9287
9290
  readPrompt(props.remote, expert.slug, expert.division).then(action).catch((err) => setError(err instanceof Error ? err.message : String(err))).finally(() => setPromptBusySlug(null));
9288
9291
  };
9289
- const viewPrompt = (expert) => {
9292
+ const viewPrompt = (expert, returnFocus) => {
9290
9293
  withPrompt(expert, (prompt) => {
9291
9294
  setOpenPrompt({
9292
9295
  name: displayName(expert, props.getActive()),
9293
- prompt
9296
+ prompt,
9297
+ returnFocus
9294
9298
  });
9295
9299
  });
9296
9300
  };
@@ -9523,7 +9527,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9523
9527
  className: "aag-card-action",
9524
9528
  disabled: promptBusySlug !== null,
9525
9529
  "aria-haspopup": "dialog",
9526
- onClick: () => viewPrompt(expert)
9530
+ onClick: (event) => viewPrompt(expert, event.currentTarget)
9527
9531
  }, react.default.createElement(Eye, {
9528
9532
  size: 18,
9529
9533
  strokeWidth: 1.7,
@@ -9567,6 +9571,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9567
9571
  value: openPrompt,
9568
9572
  title: props.t("settings.promptTitle", { name: openPrompt.name }),
9569
9573
  closeLabel: props.t("settings.promptClose"),
9574
+ returnFocus: openPrompt.returnFocus,
9570
9575
  onClose: () => setOpenPrompt(null)
9571
9576
  }));
9572
9577
  }
package/lib/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import { C as validateSummonSpecs, M as ZH_NAME, S as unquote, _ as resolveExpert, a as SUMMON_EXPERTS_MAX, b as toSummonItemResult, c as createAgencyPersonaSource, d as mapPool, f as name, g as resolveCatalogRoot, h as readLocalizedExpertPrompt, i as SUMMON_EXPERTS_CONCURRENCY, l as inject, m as readExpertPrompt, n as Config, o as SUMMON_TASK_MAX_CHARS, p as parseFrontmatter, r as DEFAULT_DIVISIONS, s as apply, t as AGENCY_PERSONA_SERVICE, u as loadCatalog, v as sanitize, x as truncate, y as stripBom } from "./src-Di6THeMW.js";
1
+ import { C as validateSummonSpecs, M as ZH_NAME, S as unquote, _ as resolveExpert, a as SUMMON_EXPERTS_MAX, b as toSummonItemResult, c as createAgencyPersonaSource, d as mapPool, f as name, g as resolveCatalogRoot, h as readLocalizedExpertPrompt, i as SUMMON_EXPERTS_CONCURRENCY, l as inject, m as readExpertPrompt, n as Config, o as SUMMON_TASK_MAX_CHARS, p as parseFrontmatter, r as DEFAULT_DIVISIONS, s as apply, t as AGENCY_PERSONA_SERVICE, u as loadCatalog, v as sanitize, x as truncate, y as stripBom } from "./src-CtqSbp2k.js";
2
2
  export { AGENCY_PERSONA_SERVICE, Config, DEFAULT_DIVISIONS, SUMMON_EXPERTS_CONCURRENCY, SUMMON_EXPERTS_MAX, SUMMON_TASK_MAX_CHARS, ZH_NAME, apply, createAgencyPersonaSource, inject, loadCatalog, mapPool, name, parseFrontmatter, readExpertPrompt, readLocalizedExpertPrompt, resolveCatalogRoot, resolveExpert, sanitize, stripBom, toSummonItemResult, truncate, unquote, validateSummonSpecs };
package/lib/remote.js CHANGED
@@ -1,4 +1,4 @@
1
- import { A as readHostLocale, D as customExpertInputSchema, E as catalogSnapshotSchema, O as expertEditSchema, T as CUSTOM_EXPERT_SLUG, h as readLocalizedExpertPrompt, j as settingsNamespaceCompat, k as formatHost, m as readExpertPrompt, t as AGENCY_PERSONA_SERVICE, w as AGENCY_LIBRARY_SERVICE } from "./src-Di6THeMW.js";
1
+ import { A as readHostLocale, D as customExpertInputSchema, E as catalogSnapshotSchema, O as expertEditSchema, T as CUSTOM_EXPERT_SLUG, h as readLocalizedExpertPrompt, j as settingsNamespaceCompat, k as formatHost, m as readExpertPrompt, t as AGENCY_PERSONA_SERVICE, w as AGENCY_LIBRARY_SERVICE } from "./src-CtqSbp2k.js";
2
2
  import { z } from "zod";
3
3
  import { Remote, TypertRemoteService } from "@deepseek-ai/dsh-typert-protocol";
4
4
  //#region src/remote-contract.ts
@@ -1050,9 +1050,9 @@ function createExpertLibrary(base, store, divisions, locale) {
1050
1050
  };
1051
1051
  },
1052
1052
  async cleanupDeleted() {
1053
- const expectedRevision = store.revision();
1054
1053
  const state = read();
1055
1054
  if (!state.customExperts.some((item) => item.deleted !== void 0 || item.wasEnabled !== void 0)) return;
1055
+ const expectedRevision = store.revision();
1056
1056
  const records = activeRecords(state.customExperts);
1057
1057
  const deleted = new Set(state.customExperts.filter((item) => item.deleted).map((item) => item.slug));
1058
1058
  await store.mutate([{
@@ -1421,16 +1421,6 @@ function apply(ctx, config) {
1421
1421
  enabled: [],
1422
1422
  customExperts: []
1423
1423
  });
1424
- installSettingsSectionCompat(ctx, settingsNamespace, agencySettingsSchema, {
1425
- enabled: [],
1426
- customExperts: []
1427
- }, {
1428
- setSource: (current) => {
1429
- settingsSource = current;
1430
- },
1431
- onChange: () => {},
1432
- validate: (value) => validateAgencySettings(value, readHostLocale(ctx))
1433
- });
1434
1424
  const enabledSet = () => new Set(settingsSource().enabled);
1435
1425
  const activeLocale = () => readHostLocale(ctx);
1436
1426
  const catalogRoot = resolveCatalogRoot(config.root);
@@ -1464,7 +1454,17 @@ function apply(ctx, config) {
1464
1454
  },
1465
1455
  mutate: (ops, revision) => ctx.settings.mutate(settingsNamespace, ops, revision)
1466
1456
  }, [.../* @__PURE__ */ new Set([...DEFAULT_DIVISIONS, ...config.divisions])], activeLocale);
1467
- library.cleanupDeleted().catch((error) => console.warn("[agency-agents] 旧删除记录清理失败,下次写入时重试:", error));
1457
+ installSettingsSectionCompat(ctx, settingsNamespace, agencySettingsSchema, {
1458
+ enabled: [],
1459
+ customExperts: []
1460
+ }, {
1461
+ setSource: (current) => {
1462
+ settingsSource = current;
1463
+ library.cleanupDeleted().catch((error) => console.warn("[agency-agents] 旧删除记录清理失败,下次写入时重试:", error));
1464
+ },
1465
+ onChange: () => {},
1466
+ validate: (value) => validateAgencySettings(value, readHostLocale(ctx))
1467
+ });
1468
1468
  const personaSource = { async getPrompt(slug, division, locale) {
1469
1469
  if (slug.startsWith("custom-") && settingsSource().customExperts?.some((item) => item.slug === slug)) {
1470
1470
  const expert = await library.getCustom(slug);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@michengai/dsh-agency-agents",
3
3
  "description": "Agency Experts — a summonable domain-expert roster for DSH (expert mode)",
4
- "version": "0.1.36",
4
+ "version": "0.1.38",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@11.22.0",
7
7
  "engines": {
@@ -44,10 +44,11 @@
44
44
  ],
45
45
  "scripts": {
46
46
  "build": "pnpm typecheck && tsdown",
47
- "typecheck": "tsc --noEmit",
47
+ "typecheck": "tsc --noEmit && tsc -p tsconfig.browser.json",
48
48
  "test": "vitest run",
49
+ "test:browser": "playwright test",
49
50
  "verify": "node scripts/verify.mjs",
50
- "prepublishOnly": "pnpm build && pnpm test && pnpm verify"
51
+ "prepublishOnly": "pnpm build && pnpm test && pnpm test:browser && pnpm verify"
51
52
  },
52
53
  "dsh": {
53
54
  "bundle": {
@@ -76,27 +77,31 @@
76
77
  "registry": "https://registry.npmjs.org/"
77
78
  },
78
79
  "peerDependencies": {
79
- "@deepseek-ai/cordis": "^4.0.2",
80
- "@deepseek-ai/dsh-api-remotes": ">=0.1.0-rc.5 <0.2.0",
81
- "@deepseek-ai/dsh-client-connection": ">=0.1.0-rc.5 <0.2.0",
82
- "@deepseek-ai/dsh-client-locale": ">=0.1.0-rc.5 <0.2.0",
83
- "@deepseek-ai/dsh-client-runtime": ">=0.1.0-rc.5 <0.2.0",
84
- "@deepseek-ai/dsh-client-ui-conversation": ">=0.1.0-rc.5 <0.2.0",
85
- "@deepseek-ai/dsh-client-ui-input-trigger": ">=0.1.0-rc.5 <0.2.0",
86
- "@deepseek-ai/dsh-client-ui-settings": ">=0.1.0-rc.5 <0.2.0",
87
- "@deepseek-ai/dsh-client-ui-slots": ">=0.1.0-rc.5 <0.2.0",
88
- "@deepseek-ai/dsh-host-webserver": ">=0.1.0-rc.5 <0.2.0",
89
- "@deepseek-ai/dsh-llm": ">=0.1.0-rc.5 <0.2.0",
90
- "@deepseek-ai/dsh-settings": ">=0.1.0-rc.5 <0.2.0",
91
- "@deepseek-ai/dsh-subagent": ">=0.1.0-rc.5 <0.2.0",
92
- "@deepseek-ai/dsh-system-prompt": ">=0.1.0-rc.5 <0.2.0",
93
- "@deepseek-ai/dsh-tools": ">=0.1.0-rc.5 <0.2.0",
94
- "@deepseek-ai/dsh-typert-protocol": ">=0.1.0-rc.5 <0.2.0",
95
- "@deepseek-ai/dsh-typert-registry": ">=0.1.0-rc.5 <0.2.0",
96
- "@deepseek-ai/schemastery": "^3.18.2",
80
+ "@deepseek-ai/cordis": "^4.0.1",
81
+ "@deepseek-ai/dsh": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1",
82
+ "@deepseek-ai/dsh-api-remotes": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1",
83
+ "@deepseek-ai/dsh-client-connection": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1",
84
+ "@deepseek-ai/dsh-client-locale": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1",
85
+ "@deepseek-ai/dsh-client-runtime": "0.1.0-rc.8 || 0.1.1-rc.2",
86
+ "@deepseek-ai/dsh-client-ui-conversation": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1",
87
+ "@deepseek-ai/dsh-client-ui-input-trigger": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1",
88
+ "@deepseek-ai/dsh-client-ui-settings": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1",
89
+ "@deepseek-ai/dsh-client-ui-slots": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1",
90
+ "@deepseek-ai/dsh-host-webserver": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1",
91
+ "@deepseek-ai/dsh-llm": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1",
92
+ "@deepseek-ai/dsh-settings": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1",
93
+ "@deepseek-ai/dsh-subagent": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1",
94
+ "@deepseek-ai/dsh-system-prompt": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1",
95
+ "@deepseek-ai/dsh-tools": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1",
96
+ "@deepseek-ai/dsh-typert-protocol": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1",
97
+ "@deepseek-ai/dsh-typert-registry": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1",
98
+ "@deepseek-ai/schemastery": "^3.18.1",
97
99
  "react": "^18.2.0"
98
100
  },
99
101
  "peerDependenciesMeta": {
102
+ "@deepseek-ai/dsh": {
103
+ "optional": true
104
+ },
100
105
  "@deepseek-ai/dsh-client-runtime": {
101
106
  "optional": true
102
107
  }
@@ -106,35 +111,38 @@
106
111
  },
107
112
  "devDependencies": {
108
113
  "@deepseek-ai/cordis": "^4.0.2",
109
- "@deepseek-ai/dsh-agent": "0.1.2-rc.1",
110
- "@deepseek-ai/dsh-api-remotes": "0.1.2-rc.1",
111
- "@deepseek-ai/dsh-attachment": "0.1.2-rc.1",
112
- "@deepseek-ai/dsh-brand": "0.1.2-rc.1",
113
- "@deepseek-ai/dsh-client-connection": "0.1.2-rc.1",
114
- "@deepseek-ai/dsh-client-locale": "0.1.2-rc.1",
115
- "@deepseek-ai/dsh-client-ui-conversation": "0.1.2-rc.1",
116
- "@deepseek-ai/dsh-client-ui-input-trigger": "0.1.2-rc.1",
117
- "@deepseek-ai/dsh-client-ui-settings": "0.1.2-rc.1",
118
- "@deepseek-ai/dsh-client-ui-slots": "0.1.2-rc.1",
119
- "@deepseek-ai/dsh-host-webserver": "0.1.2-rc.1",
120
- "@deepseek-ai/dsh-code-runtime": "0.1.2-rc.1",
121
- "@deepseek-ai/dsh-invariants": "0.1.2-rc.1",
122
- "@deepseek-ai/dsh-llm": "0.1.2-rc.1",
123
- "@deepseek-ai/dsh-scope": "0.1.2-rc.1",
124
- "@deepseek-ai/dsh-session": "0.1.2-rc.1",
125
- "@deepseek-ai/dsh-session-projection": "0.1.2-rc.1",
126
- "@deepseek-ai/dsh-settings": "0.1.2-rc.1",
127
- "@deepseek-ai/dsh-subagent": "0.1.2-rc.1",
128
- "@deepseek-ai/dsh-system-prompt": "0.1.2-rc.1",
129
- "@deepseek-ai/dsh-tools": "0.1.2-rc.1",
130
- "@deepseek-ai/dsh-typert-protocol": "0.1.2-rc.1",
131
- "@deepseek-ai/dsh-typert-registry": "0.1.2-rc.1",
132
- "@deepseek-ai/dsh-user-approval": "0.1.2-rc.1",
133
- "@deepseek-ai/dsh-util-time": "0.1.2-rc.1",
114
+ "@deepseek-ai/dsh-agent": "0.1.5-rc.1",
115
+ "@deepseek-ai/dsh-api-remotes": "0.1.5-rc.1",
116
+ "@deepseek-ai/dsh-attachment": "0.1.5-rc.1",
117
+ "@deepseek-ai/dsh-brand": "0.1.5-rc.1",
118
+ "@deepseek-ai/dsh-client-connection": "0.1.5-rc.1",
119
+ "@deepseek-ai/dsh-client-locale": "0.1.5-rc.1",
120
+ "@deepseek-ai/dsh-client-ui-conversation": "0.1.5-rc.1",
121
+ "@deepseek-ai/dsh-client-ui-input-trigger": "0.1.5-rc.1",
122
+ "@deepseek-ai/dsh-client-ui-settings": "0.1.5-rc.1",
123
+ "@deepseek-ai/dsh-client-ui-slots": "0.1.5-rc.1",
124
+ "@deepseek-ai/dsh-code-runtime": "0.1.5-rc.1",
125
+ "@deepseek-ai/dsh-host-webserver": "0.1.5-rc.1",
126
+ "@deepseek-ai/dsh-invariants": "0.1.5-rc.1",
127
+ "@deepseek-ai/dsh-llm": "0.1.5-rc.1",
128
+ "@deepseek-ai/dsh-scope": "0.1.5-rc.1",
129
+ "@deepseek-ai/dsh-session": "0.1.5-rc.1",
130
+ "@deepseek-ai/dsh-session-projection": "0.1.5-rc.1",
131
+ "@deepseek-ai/dsh-settings": "0.1.5-rc.1",
132
+ "@deepseek-ai/dsh-subagent": "0.1.5-rc.1",
133
+ "@deepseek-ai/dsh-system-prompt": "0.1.5-rc.1",
134
+ "@deepseek-ai/dsh-tools": "0.1.5-rc.1",
135
+ "@deepseek-ai/dsh-typert-protocol": "0.1.5-rc.1",
136
+ "@deepseek-ai/dsh-typert-registry": "0.1.5-rc.1",
137
+ "@deepseek-ai/dsh-user-approval": "0.1.5-rc.1",
138
+ "@deepseek-ai/dsh-util-time": "0.1.5-rc.1",
134
139
  "@deepseek-ai/schemastery": "^3.18.2",
140
+ "@playwright/test": "1.63.0",
135
141
  "@types/node": "^22.20.0",
136
142
  "@types/react": "~18.3.1",
143
+ "@types/react-dom": "18.3.7",
137
144
  "react": "^18.2.0",
145
+ "react-dom": "18.3.1",
138
146
  "tsdown": "^0.22.2",
139
147
  "typescript": "^6.0.3",
140
148
  "vitest": "^4.1.10"