@jingyi0605/codingns4dsh 0.2.1-rc.8 → 0.2.2-beta.1

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.
Files changed (103) hide show
  1. package/README.en.md +5 -5
  2. package/README.md +6 -6
  3. package/data/build/dist/bootstrap/dsh-connection-adapter.d.ts +1 -1
  4. package/data/build/dist/bootstrap/dsh-connection-adapter.d.ts.map +1 -1
  5. package/data/build/dist/bootstrap/index.d.ts +1 -1
  6. package/data/build/dist/bootstrap/index.d.ts.map +1 -1
  7. package/data/build/dist/client/bundle.js +513 -715
  8. package/data/build/dist/client/bundle.js.map +1 -1
  9. package/data/build/dist/client/client.command-token.js +1 -2
  10. package/data/build/dist/client/client.delegate-command.js +4 -8
  11. package/data/build/dist/client/client.delegate-command.js.map +1 -1
  12. package/data/build/dist/client/client.editor-engine.js +266 -198
  13. package/data/build/dist/client/client.editor-engine.js.map +1 -1
  14. package/data/build/dist/client/client.magpie-model-tag.js +25 -50
  15. package/data/build/dist/client/client.magpie-model-tag.js.map +1 -1
  16. package/data/build/dist/client/client.rolldown-runtime.js +2 -3
  17. package/data/build/dist/client/client.xterm-engine.js +3 -6
  18. package/data/build/dist/client/client.xterm-engine.js.map +1 -1
  19. package/data/build/dist/client/features/file-management.d.ts.map +1 -1
  20. package/data/build/dist/client/features/file-management.js +6 -0
  21. package/data/build/dist/client/features/file-management.js.map +1 -1
  22. package/data/build/dist/client/features/plugin-update.d.ts.map +1 -1
  23. package/data/build/dist/client/features/plugin-update.js +6 -0
  24. package/data/build/dist/client/features/plugin-update.js.map +1 -1
  25. package/data/build/dist/client/features/session-translation.d.ts.map +1 -1
  26. package/data/build/dist/client/features/session-translation.js +6 -0
  27. package/data/build/dist/client/features/session-translation.js.map +1 -1
  28. package/data/build/dist/client/features/terminal-enhancement.d.ts.map +1 -1
  29. package/data/build/dist/client/features/terminal-enhancement.js +6 -0
  30. package/data/build/dist/client/features/terminal-enhancement.js.map +1 -1
  31. package/data/build/dist/client/features/workspace-session-enhancement.d.ts.map +1 -1
  32. package/data/build/dist/client/features/workspace-session-enhancement.js +6 -0
  33. package/data/build/dist/client/features/workspace-session-enhancement.js.map +1 -1
  34. package/data/build/dist/client/git-management.d.ts.map +1 -1
  35. package/data/build/dist/client/git-management.js +6 -0
  36. package/data/build/dist/client/git-management.js.map +1 -1
  37. package/data/build/dist/dsh-capabilities/client/primitives-adapter.d.ts +3 -1
  38. package/data/build/dist/dsh-capabilities/client/primitives-adapter.d.ts.map +1 -1
  39. package/data/build/dist/dsh-capabilities/host/session-prompt-adapter.d.ts +1 -1
  40. package/data/build/dist/dsh-capabilities/host/session-prompt-adapter.d.ts.map +1 -1
  41. package/data/build/dist/dsh-capabilities/host/session-prompt-adapter.js +36 -4
  42. package/data/build/dist/dsh-capabilities/host/session-prompt-adapter.js.map +1 -1
  43. package/data/build/dist/dsh-capabilities/matrix.d.ts.map +1 -1
  44. package/data/build/dist/dsh-capabilities/matrix.js +4 -5
  45. package/data/build/dist/dsh-capabilities/matrix.js.map +1 -1
  46. package/data/build/dist/dsh-capabilities/routes.js +6 -13
  47. package/data/build/dist/dsh-capabilities/routes.js.map +1 -1
  48. package/data/build/dist/features/index.d.ts +1 -1
  49. package/data/build/dist/features/index.d.ts.map +1 -1
  50. package/data/build/dist/features/registry.js +19 -0
  51. package/data/build/dist/features/registry.js.map +1 -1
  52. package/data/build/dist/host/cli-adapters/dsh-model-catalog.d.ts +11 -0
  53. package/data/build/dist/host/cli-adapters/dsh-model-catalog.d.ts.map +1 -0
  54. package/data/build/dist/host/cli-adapters/dsh-model-catalog.js +34 -0
  55. package/data/build/dist/host/cli-adapters/dsh-model-catalog.js.map +1 -0
  56. package/data/build/dist/host/cli-adapters/feature.d.ts.map +1 -1
  57. package/data/build/dist/host/cli-adapters/feature.js +3 -1
  58. package/data/build/dist/host/cli-adapters/feature.js.map +1 -1
  59. package/data/build/dist/host/features/file-management.d.ts.map +1 -1
  60. package/data/build/dist/host/features/file-management.js +6 -0
  61. package/data/build/dist/host/features/file-management.js.map +1 -1
  62. package/data/build/dist/host/features/git-management.d.ts.map +1 -1
  63. package/data/build/dist/host/features/git-management.js +6 -0
  64. package/data/build/dist/host/features/git-management.js.map +1 -1
  65. package/data/build/dist/host/features/host-status.d.ts +8 -0
  66. package/data/build/dist/host/features/host-status.d.ts.map +1 -1
  67. package/data/build/dist/host/features/host-status.js +14 -0
  68. package/data/build/dist/host/features/host-status.js.map +1 -1
  69. package/data/build/dist/host/features/plugin-update.d.ts.map +1 -1
  70. package/data/build/dist/host/features/plugin-update.js +6 -0
  71. package/data/build/dist/host/features/plugin-update.js.map +1 -1
  72. package/data/build/dist/host/features/session-prompt-translation.js +1 -1
  73. package/data/build/dist/host/features/session-prompt-translation.js.map +1 -1
  74. package/data/build/dist/host/features/session-title-optimization.d.ts.map +1 -1
  75. package/data/build/dist/host/features/session-title-optimization.js +6 -0
  76. package/data/build/dist/host/features/session-title-optimization.js.map +1 -1
  77. package/data/build/dist/host/features/session-translation.d.ts.map +1 -1
  78. package/data/build/dist/host/features/session-translation.js +6 -0
  79. package/data/build/dist/host/features/session-translation.js.map +1 -1
  80. package/data/build/dist/host/features/types.d.ts +3 -0
  81. package/data/build/dist/host/features/types.d.ts.map +1 -1
  82. package/data/build/dist/host/index.d.ts.map +1 -1
  83. package/data/build/dist/host/index.js +10 -1
  84. package/data/build/dist/host/index.js.map +1 -1
  85. package/data/build/dist/host/session-handle-eviction.d.ts +2 -0
  86. package/data/build/dist/host/session-handle-eviction.d.ts.map +1 -1
  87. package/data/build/dist/host/session-handle-eviction.js +21 -6
  88. package/data/build/dist/host/session-handle-eviction.js.map +1 -1
  89. package/data/build/dist/shared/contracts/errors.d.ts +2 -2
  90. package/data/build/dist/shared/contracts/errors.d.ts.map +1 -1
  91. package/data/build/dist/shared/contracts/feature.d.ts +14 -0
  92. package/data/build/dist/shared/contracts/feature.d.ts.map +1 -1
  93. package/data/build/dist/shared/contracts/host-status.d.ts +18 -0
  94. package/data/build/dist/shared/contracts/host-status.d.ts.map +1 -1
  95. package/data/build/dist/shared/contracts/version.d.ts +4 -4
  96. package/data/build/dist/shared/contracts/version.d.ts.map +1 -1
  97. package/data/build/dist/shared/contracts/version.js +3 -3
  98. package/data/build/dist/shared/contracts/version.js.map +1 -1
  99. package/package.json +35 -35
  100. package/profile/README.md +2 -2
  101. package/profile/package.json +3 -3
  102. package/profile/version.json +3 -3
  103. package/version.json +3 -3
@@ -6,7 +6,7 @@ window.__ModuleLoader__.load({
6
6
  factory: () => { const require = __codingnsOwnerRequire;
7
7
  var module = { exports: {} };
8
8
  var exports = module.exports;
9
- //#region src/client/command-token.ts
9
+ // src/client/command-token.ts
10
10
  /** Returns the standalone slash opened by the operation menu when it is still in the draft. */
11
11
  function bareSlashSpanAtCaret(draft, draftRev, selection) {
12
12
  if (selection !== void 0 && selection.start !== selection.end) return void 0;
@@ -21,7 +21,6 @@ window.__ModuleLoader__.load({
21
21
  draftRev
22
22
  };
23
23
  }
24
- //#endregion
25
24
  Object.defineProperty(exports, "bareSlashSpanAtCaret", {
26
25
  enumerable: true,
27
26
  get: function() {
@@ -42,7 +41,7 @@ window.__ModuleLoader__.load({
42
41
  let _deepseek_ai_dsh_client_ui_primitives = require("@deepseek-ai/dsh-client-ui-primitives");
43
42
  _deepseek_ai_dsh_client_ui_primitives = require_rolldown_runtime.__toESM(_deepseek_ai_dsh_client_ui_primitives, 1);
44
43
  let react = require("react");
45
- //#region src/shared/provider-icon-resources.ts
44
+ // src/shared/provider-icon-resources.ts
46
45
  /** Client 与 Host 共用固定资源目录;避开 Desktop 将 /assets 固定映射到应用安装目录的路径。 */
47
46
  const PROVIDER_ICON_PATH = "/api/codingns/provider-icons/";
48
47
  const PROVIDER_ICON_FILES = {
@@ -68,8 +67,7 @@ window.__ModuleLoader__.load({
68
67
  antigravity: "antigravity.svg",
69
68
  doubao: "doubao.png"
70
69
  };
71
- //#endregion
72
- //#region src/client/locales/debug.ts
70
+ // src/client/locales/debug.ts
73
71
  /**
74
72
  * debug 域词典片段。
75
73
  *
@@ -232,8 +230,7 @@ window.__ModuleLoader__.load({
232
230
  "feature.debug.label": "工作区调试",
233
231
  "feature.debug.description": "启动终端并检查服务"
234
232
  };
235
- //#endregion
236
- //#region src/client/locales/fileWorkspace.ts
233
+ // src/client/locales/fileWorkspace.ts
237
234
  /**
238
235
  * fileWorkspace 域词典片段。
239
236
  *
@@ -386,8 +383,7 @@ window.__ModuleLoader__.load({
386
383
  "pwaPrompt.dismiss": "以后再说",
387
384
  "pwaPrompt.iosHint": "点击「分享」→「添加到主屏幕」即可安装。"
388
385
  };
389
- //#endregion
390
- //#region src/client/locales/git.ts
386
+ // src/client/locales/git.ts
391
387
  /**
392
388
  * git 域词典片段。
393
389
  *
@@ -638,8 +634,7 @@ window.__ModuleLoader__.load({
638
634
  "git.unknownTime": "未知时间",
639
635
  "git.dateLabel": "{month}月{day}日"
640
636
  };
641
- //#endregion
642
- //#region src/client/locales/panels.ts
637
+ // src/client/locales/panels.ts
643
638
  /**
644
639
  * panels 域词典片段。
645
640
  *
@@ -866,8 +861,7 @@ window.__ModuleLoader__.load({
866
861
  "translation.adapter.cursor": "Cursor",
867
862
  "translation.adapter.kiro": "Kiro"
868
863
  };
869
- //#endregion
870
- //#region src/client/locales/peerHost.ts
864
+ // src/client/locales/peerHost.ts
871
865
  /**
872
866
  * peerHost 域词典片段。
873
867
  *
@@ -1036,8 +1030,7 @@ window.__ModuleLoader__.load({
1036
1030
  "peerHost.stateActive": "preboot shim 已接管页面 Transport;本次页面的原生 Connection 将继续复用同一实例。",
1037
1031
  "peerHost.statePending": "preboot shim 已随 CodingNS 安装;启用 PeerHost 后立即生效,原生工作区会直接读取聚合 Transport。"
1038
1032
  };
1039
- //#endregion
1040
- //#region src/client/locales/peerHostWorkspace.ts
1033
+ // src/client/locales/peerHostWorkspace.ts
1041
1034
  /**
1042
1035
  * peerHostWorkspace 域词典片段。
1043
1036
  *
@@ -1136,8 +1129,7 @@ window.__ModuleLoader__.load({
1136
1129
  "peerHostWorkspace.hintNotReady": "“{host}”当前状态为“{status}”,请先在管理面板完成连接。",
1137
1130
  "peerHostWorkspace.manageHosts": "管理其他 DSH Host"
1138
1131
  };
1139
- //#endregion
1140
- //#region src/client/locales/terminalAuth.ts
1132
+ // src/client/locales/terminalAuth.ts
1141
1133
  /**
1142
1134
  * terminalAuth 域词典片段。
1143
1135
  *
@@ -1290,8 +1282,7 @@ window.__ModuleLoader__.load({
1290
1282
  "loginProtection.errorTimeoutRange": "会话超时时间必须是 60 到 604800 秒",
1291
1283
  "loginProtection.errorScopesRequired": "至少选择一个应用范围"
1292
1284
  };
1293
- //#endregion
1294
- //#region src/client/locales/usage.ts
1285
+ // src/client/locales/usage.ts
1295
1286
  /**
1296
1287
  * usage 域词典片段。
1297
1288
  *
@@ -1724,8 +1715,7 @@ window.__ModuleLoader__.load({
1724
1715
  "usage.magpieRequestsTitle": "Magpie 请求",
1725
1716
  "usage.magpieRequestsClose": "关闭"
1726
1717
  };
1727
- //#endregion
1728
- //#region src/client/locales/subagentCollapsed.ts
1718
+ // src/client/locales/subagentCollapsed.ts
1729
1719
  /**
1730
1720
  * subagentCollapsed 域词典片段。
1731
1721
  *
@@ -1820,8 +1810,7 @@ window.__ModuleLoader__.load({
1820
1810
  "subagentCollapsed.open.sidebar": "Open in sidebar",
1821
1811
  "subagentCollapsed.open.sidebar.aria": "Open {label} in sidebar"
1822
1812
  };
1823
- //#endregion
1824
- //#region src/shared/quick-apps-bootstrap-locale.ts
1813
+ // src/shared/quick-apps-bootstrap-locale.ts
1825
1814
  /** Shared by the client dictionary and the isolated credential landing page. */
1826
1815
  const quickAppBootstrapEn = {
1827
1816
  "quickApps.opening": "Opening application…",
@@ -1831,8 +1820,7 @@ window.__ModuleLoader__.load({
1831
1820
  "quickApps.opening": "正在打开应用…",
1832
1821
  "quickApps.bootstrapFailed": "无法建立应用访问,请从快捷应用重新打开并检查浏览器 Cookie 设置。"
1833
1822
  };
1834
- //#endregion
1835
- //#region src/client/locales/quickApps.ts
1823
+ // src/client/locales/quickApps.ts
1836
1824
  const en$5 = {
1837
1825
  "quickApps.storagePreview": "App data is saved in this browser. IndexedDB and URLs starting with / are not supported in this view.",
1838
1826
  "quickApps.storageFailed": "App data could not be saved in this browser: {message}",
@@ -2099,8 +2087,7 @@ window.__ModuleLoader__.load({
2099
2087
  "quickApps.status.missing-workspace": "原工作区不可用。",
2100
2088
  "quickApps.status.missing-file": "入口文件或应用目录不存在或无法访问。"
2101
2089
  };
2102
- //#endregion
2103
- //#region src/client/locales/cliManagement.ts
2090
+ // src/client/locales/cliManagement.ts
2104
2091
  const en$4 = {
2105
2092
  "cli.team.label": "Team eligibility",
2106
2093
  "cli.team.leadAndMember": "Collaborator and Lead",
@@ -2255,8 +2242,7 @@ window.__ModuleLoader__.load({
2255
2242
  "cli.manage.retryStatus": "重新查询状态",
2256
2243
  "cli.manage.reviewAgain": "查看新的操作"
2257
2244
  };
2258
- //#endregion
2259
- //#region src/client/locales/magpie.ts
2245
+ // src/client/locales/magpie.ts
2260
2246
  /** Copy for the optional Magpie usage dashboard. */
2261
2247
  const en$3 = {
2262
2248
  "feature.magpieManagement.label": "Magpie management and usage",
@@ -2972,8 +2958,7 @@ window.__ModuleLoader__.load({
2972
2958
  "magpie.install.customReset": "恢复自动检测",
2973
2959
  "magpie.install.disabledNote": "检测到可用的 Magpie CLI 前,Magpie 管理保持关闭。"
2974
2960
  };
2975
- //#endregion
2976
- //#region src/client/locales/pluginUpdate.ts
2961
+ // src/client/locales/pluginUpdate.ts
2977
2962
  const en$2 = {
2978
2963
  "update.localeTag": "en-US",
2979
2964
  "update.newVersionBadge": "New",
@@ -3104,8 +3089,7 @@ window.__ModuleLoader__.load({
3104
3089
  "update.package.rolled-back": "DSH 已恢复配置文件",
3105
3090
  "update.package.unknown": "未知;请检查 DSH 原生插件页面"
3106
3091
  };
3107
- //#endregion
3108
- //#region src/client/locales/credentials.ts
3092
+ // src/client/locales/credentials.ts
3109
3093
  const en$1 = {
3110
3094
  "feature.credentials.label": "Credential management",
3111
3095
  "feature.credentials.description": "Store usernames, passwords, API keys, and other confidential values on the Host. Selected fields reach external Agent processes only through environment variables.",
@@ -3198,8 +3182,7 @@ window.__ModuleLoader__.load({
3198
3182
  "credentials.commandDescription": "向当前外部 Agent 会话插入 Host 管理的凭据引用。",
3199
3183
  "credentials.commandUnavailable": "无法插入此凭据引用。"
3200
3184
  };
3201
- //#endregion
3202
- //#region src/client/locale.ts
3185
+ // src/client/locale.ts
3203
3186
  /** Codingns4DSH 自有词典命名空间。词典缺少的语言由 DSH 自动回退到英文。 */
3204
3187
  const CODINGNS_LOCALE_NS = "codingns";
3205
3188
  const CORE_EN = {
@@ -4242,8 +4225,7 @@ window.__ModuleLoader__.load({
4242
4225
  const adapterId = provider.slice(13);
4243
4226
  return adapterId === "" ? void 0 : adapterId;
4244
4227
  }
4245
- //#endregion
4246
- //#region src/client/provider-icons.ts
4228
+ // src/client/provider-icons.ts
4247
4229
  /** 未绑定和未知 Agent 使用中性灰,绝不冒充任一已知品牌色。 */
4248
4230
  const PROVIDER_NEUTRAL_COLOR = "#71717a";
4249
4231
  /**
@@ -4545,12 +4527,10 @@ window.__ModuleLoader__.load({
4545
4527
  if (/^(1|true|yes|on|info|debug)$/u.test(normalized)) return "info";
4546
4528
  return "off";
4547
4529
  }
4548
- //#endregion
4549
- //#region src/shared/contracts/transport.ts
4530
+ // src/shared/contracts/transport.ts
4550
4531
  /** Codingns4DSH Host RPC 的固定逻辑通道。 */
4551
4532
  const CODINGNS_RPC_CHANNEL = "/codingns";
4552
- //#endregion
4553
- //#region src/shared/contracts/peer-host.ts
4533
+ // src/shared/contracts/peer-host.ts
4554
4534
  /**
4555
4535
  * 工作区标签配色的取值范围。
4556
4536
  *
@@ -4656,8 +4636,7 @@ window.__ModuleLoader__.load({
4656
4636
  this.name = "ResourceScopeStaleError";
4657
4637
  }
4658
4638
  };
4659
- //#endregion
4660
- //#region src/client/cli-catalog.ts
4639
+ // src/client/cli-catalog.ts
4661
4640
  /** 设置页和选择器使用同一状态文案,检测中或失败都不能显示成未安装。 */
4662
4641
  function adapterDetectionLabel(adapter) {
4663
4642
  if (adapter.detectionState === "pending" || adapter.detectionState === "running") return "cli.detecting";
@@ -4742,8 +4721,7 @@ window.__ModuleLoader__.load({
4742
4721
  const message = errorMessage(error);
4743
4722
  return /^未知 CLI RPC: cli\/catalog\/refresh$/u.test(message) ? t("cli.redetectHostUnsupported") : message;
4744
4723
  }
4745
- //#endregion
4746
- //#region src/client/adapter-catalog-watch.ts
4724
+ // src/client/adapter-catalog-watch.ts
4747
4725
  const loads = /* @__PURE__ */ new WeakMap();
4748
4726
  const listeners = /* @__PURE__ */ new WeakMap();
4749
4727
  /** 手动检测完成后,让已挂载的选择器和模型目录一起更新。 */
@@ -4836,8 +4814,7 @@ window.__ModuleLoader__.load({
4836
4814
  remove();
4837
4815
  };
4838
4816
  }
4839
- //#endregion
4840
- //#region src/client/model-catalog-cache.ts
4817
+ // src/client/model-catalog-cache.ts
4841
4818
  /**
4842
4819
  * Client 侧模型目录缓存。
4843
4820
  *
@@ -5010,8 +4987,7 @@ window.__ModuleLoader__.load({
5010
4987
  }
5011
4988
  return cache;
5012
4989
  }
5013
- //#endregion
5014
- //#region src/dsh-capabilities/client/primitives-adapter.ts
4990
+ // src/dsh-capabilities/client/primitives-adapter.ts
5015
4991
  /** Older primitive packages may lack Markdown delegation. Do not fail the whole footer. */
5016
4992
  function hasNativeMarkdown(source = _deepseek_ai_dsh_client_ui_primitives) {
5017
4993
  const value = source;
@@ -5205,8 +5181,7 @@ window.__ModuleLoader__.load({
5205
5181
  ranked.sort((left, right) => Number(right.prefix) - Number(left.prefix) || right.score - left.score || left.index - right.index);
5206
5182
  return ranked.map((match) => match.item);
5207
5183
  }
5208
- //#endregion
5209
- //#region src/client/magpie-model-tag.ts
5184
+ // src/client/magpie-model-tag.ts
5210
5185
  const MAGPIE_MODEL_TAG_ATTRIBUTE = "data-codingns-magpie-model-tag";
5211
5186
  /**
5212
5187
  * Magpie 模型来源标签使用的喜鹊图标。
@@ -5284,7 +5259,6 @@ window.__ModuleLoader__.load({
5284
5259
  tag.append(logo);
5285
5260
  return tag;
5286
5261
  }
5287
- //#endregion
5288
5262
  Object.defineProperty(exports, "CODINGNS_RPC_CHANNEL", {
5289
5263
  enumerable: true,
5290
5264
  get: function() {
@@ -5637,14 +5611,14 @@ window.__ModuleLoader__.load({
5637
5611
  factory: () => { const require = __codingnsOwnerRequire;
5638
5612
  var module = { exports: {} };
5639
5613
  var exports = module.exports;
5640
- //#region \0rolldown/runtime.js
5614
+ // \0rolldown/runtime.js
5641
5615
  var __create = Object.create;
5642
5616
  var __defProp = Object.defineProperty;
5643
5617
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5644
5618
  var __getOwnPropNames = Object.getOwnPropertyNames;
5645
5619
  var __getProtoOf = Object.getPrototypeOf;
5646
5620
  var __hasOwnProp = Object.prototype.hasOwnProperty;
5647
- var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
5621
+ var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod, mod.exports), cb = null), mod.exports);
5648
5622
  var __exportAll = (all, no_symbols) => {
5649
5623
  let target = {};
5650
5624
  for (var name in all) __defProp(target, name, {
@@ -5668,7 +5642,6 @@ window.__ModuleLoader__.load({
5668
5642
  value: mod,
5669
5643
  enumerable: true
5670
5644
  }) : target, mod));
5671
- //#endregion
5672
5645
  Object.defineProperty(exports, "__commonJSMin", {
5673
5646
  enumerable: true,
5674
5647
  get: function() {
@@ -5704,12 +5677,12 @@ window.__ModuleLoader__.load({
5704
5677
  _deepseek_ai_dsh_client_ui_primitives = require_rolldown_runtime.__toESM(_deepseek_ai_dsh_client_ui_primitives, 1);
5705
5678
  let react = require("react");
5706
5679
  /** DSH 测试版本别名,供新代码表达语义,保留 DSH_VERSION 兼容旧调用方。 */
5707
- const DSH_TESTED_VERSION = "0.2.1-rc.5";
5680
+ const DSH_TESTED_VERSION = "0.2.2-alpha.2";
5708
5681
  /**
5709
5682
  * Only the minimum version blocks installation and activation.
5710
5683
  * Hosts newer than DSH_TESTED_VERSION receive an advisory warning.
5711
5684
  */
5712
- const DSH_COMPATIBILITY = ">=0.2.0-rc.2";
5685
+ const DSH_COMPATIBILITY = ">=0.2.1-alpha.2";
5713
5686
  /**
5714
5687
  * 兼容范围下界,即插件仍然接受的最低 DSH 版本。
5715
5688
  *
@@ -5718,7 +5691,7 @@ window.__ModuleLoader__.load({
5718
5691
  * “不支持的 DSH 版本”,把仅仅缺少启动页注入的页面误判为宿主不兼容。
5719
5692
  */
5720
5693
  function minimumSupportedDshVersion() {
5721
- return /^>=([^ ]+)/u.exec(">=0.2.0-rc.2")?.[1] ?? "0.2.1-rc.5";
5694
+ return /^>=([^ ]+)/u.exec(">=0.2.1-alpha.2")?.[1] ?? "0.2.2-alpha.2";
5722
5695
  }
5723
5696
  /** Host 注入到浏览器页面的真实 DSH 版本全局字段。 */
5724
5697
  const CODINGNS_DSH_VERSION_GLOBAL = "__CODINGNS_DSH_VERSION__";
@@ -5727,7 +5700,7 @@ window.__ModuleLoader__.load({
5727
5700
  return /^0\.1\.5(?:-|$)/u.test(version);
5728
5701
  }
5729
5702
  /** Codingns4DSH 插件自身的 npm 版本。 */
5730
- const CODINGNS_VERSION = "0.2.1-rc.8";
5703
+ const CODINGNS_VERSION = "0.2.2-beta.1";
5731
5704
  /** Accept any valid host version at or above the supported minimum. */
5732
5705
  function isDshVersionCompatible(version) {
5733
5706
  return isDshVersionAtLeast(version, minimumSupportedDshVersion());
@@ -5783,12 +5756,10 @@ window.__ModuleLoader__.load({
5783
5756
  }
5784
5757
  return 0;
5785
5758
  }
5786
- //#endregion
5787
- //#region src/client/provider-icon-assets.ts
5759
+ // src/client/provider-icon-assets.ts
5788
5760
  /** 保留同步查询接口;浏览器仅在实际显示图标时请求图片,版本变化自动更新缓存。 */
5789
5761
  require_magpie_model_tag.installProviderIcons(Object.fromEntries(Object.entries(require_magpie_model_tag.PROVIDER_ICON_FILES).map(([provider, filename]) => [provider, `${require_magpie_model_tag.PROVIDER_ICON_PATH}${filename}?v=${encodeURIComponent(CODINGNS_VERSION)}`])));
5790
- //#endregion
5791
- //#region src/features/registry.ts
5762
+ // src/features/registry.ts
5792
5763
  var FeatureRegistryError = class extends Error {
5793
5764
  code;
5794
5765
  featureName;
@@ -6194,6 +6165,7 @@ window.__ModuleLoader__.load({
6194
6165
  if (typeof descriptor.version !== "string" || descriptor.version.trim() === "") throw new FeatureRegistryError("FEATURE_INVALID_DESCRIPTOR", `Feature ${descriptor.name} requires a version`, descriptor.name);
6195
6166
  if (typeof descriptor.enabledByDefault !== "boolean") throw new FeatureRegistryError("FEATURE_INVALID_DESCRIPTOR", `Feature ${descriptor.name} has invalid enabledByDefault`, descriptor.name);
6196
6167
  if (descriptor.disabled !== void 0 && typeof descriptor.disabled !== "boolean") throw new FeatureRegistryError("FEATURE_INVALID_DESCRIPTOR", `Feature ${descriptor.name} has invalid disabled`, descriptor.name);
6168
+ if (descriptor.nativeReplacement !== void 0) validateNativeReplacement(descriptor);
6197
6169
  if (descriptor.runtime !== "host" && descriptor.runtime !== "client" && descriptor.runtime !== "both") throw new FeatureRegistryError("FEATURE_INVALID_DESCRIPTOR", `Feature ${descriptor.name} has invalid runtime`, descriptor.name);
6198
6170
  if (descriptor.activation !== void 0 && descriptor.activation !== "live" && descriptor.activation !== "restart") throw new FeatureRegistryError("FEATURE_INVALID_DESCRIPTOR", `Feature ${descriptor.name} has invalid activation`, descriptor.name);
6199
6171
  if (descriptor.minimumDshVersion !== void 0 && (typeof descriptor.minimumDshVersion !== "string" || descriptor.minimumDshVersion.trim() === "")) throw new FeatureRegistryError("FEATURE_INVALID_DESCRIPTOR", `Feature ${descriptor.name} has invalid minimumDshVersion`, descriptor.name);
@@ -6215,6 +6187,14 @@ window.__ModuleLoader__.load({
6215
6187
  if (new Set(descriptor.dependencies).size !== descriptor.dependencies.length) throw new FeatureRegistryError("FEATURE_INVALID_DESCRIPTOR", `Feature ${descriptor.name} has duplicate dependencies`, descriptor.name);
6216
6188
  validateUiDescriptor(descriptor);
6217
6189
  }
6190
+ function validateNativeReplacement(descriptor) {
6191
+ const replacement = descriptor.nativeReplacement;
6192
+ if (replacement === void 0) return;
6193
+ if (typeof replacement.dshFeature !== "string" || replacement.dshFeature.trim() === "") throw new FeatureRegistryError("FEATURE_INVALID_DESCRIPTOR", `Feature ${descriptor.name} has invalid nativeReplacement.dshFeature`, descriptor.name);
6194
+ if (typeof replacement.since !== "string" || replacement.since.trim() === "") throw new FeatureRegistryError("FEATURE_INVALID_DESCRIPTOR", `Feature ${descriptor.name} has invalid nativeReplacement.since`, descriptor.name);
6195
+ if (replacement.coverage !== "full" && replacement.coverage !== "partial") throw new FeatureRegistryError("FEATURE_INVALID_DESCRIPTOR", `Feature ${descriptor.name} has invalid nativeReplacement.coverage`, descriptor.name);
6196
+ if (typeof replacement.note !== "string" || replacement.note.trim() === "") throw new FeatureRegistryError("FEATURE_INVALID_DESCRIPTOR", `Feature ${descriptor.name} has invalid nativeReplacement.note`, descriptor.name);
6197
+ }
6218
6198
  function validateUiDescriptor(descriptor) {
6219
6199
  const ui = descriptor.ui;
6220
6200
  if (ui === void 0) return;
@@ -6243,8 +6223,7 @@ window.__ModuleLoader__.load({
6243
6223
  function errorMessage$3(error) {
6244
6224
  return error instanceof Error ? error.message : String(error);
6245
6225
  }
6246
- //#endregion
6247
- //#region src/shared/contracts/session-translation.ts
6226
+ // src/shared/contracts/session-translation.ts
6248
6227
  const SESSION_TRANSLATION_ADAPTER_IDS = [
6249
6228
  "command-code",
6250
6229
  "claude-code",
@@ -6388,8 +6367,7 @@ window.__ModuleLoader__.load({
6388
6367
  function asRecord$10(value) {
6389
6368
  return typeof value === "object" && value !== null && !Array.isArray(value) ? value : null;
6390
6369
  }
6391
- //#endregion
6392
- //#region src/shared/contracts/git.ts
6370
+ // src/shared/contracts/git.ts
6393
6371
  const DEFAULT_GIT_MANAGEMENT_SETTINGS = {
6394
6372
  commitMessageEnabled: true,
6395
6373
  commitMessageDetail: "concise",
@@ -6418,8 +6396,7 @@ window.__ModuleLoader__.load({
6418
6396
  })
6419
6397
  };
6420
6398
  }
6421
- //#endregion
6422
- //#region src/shared/contracts/config.ts
6399
+ // src/shared/contracts/config.ts
6423
6400
  /** 并发子代理数上限:下限 1 保证至少能派发,上限避免一次性压垮本机。 */
6424
6401
  const SUBAGENT_BRIDGE_MAX_CONCURRENT_LIMITS = {
6425
6402
  min: 1,
@@ -6683,8 +6660,7 @@ window.__ModuleLoader__.load({
6683
6660
  if (descriptor.minimumDshVersion === void 0 || dshVersion === void 0) return true;
6684
6661
  return isDshVersionAtLeast(dshVersion, descriptor.minimumDshVersion);
6685
6662
  }
6686
- //#endregion
6687
- //#region src/client/lan-access.ts
6663
+ // src/client/lan-access.ts
6688
6664
  /**
6689
6665
  * 确保目标页面拥有 `crypto.randomUUID`。
6690
6666
  *
@@ -6744,8 +6720,7 @@ window.__ModuleLoader__.load({
6744
6720
  function fillWithMathRandom(bytes) {
6745
6721
  for (let index = 0; index < bytes.length; index += 1) bytes[index] = Math.floor(Math.random() * 256);
6746
6722
  }
6747
- //#endregion
6748
- //#region src/client/pwa-install-prompt.ts
6723
+ // src/client/pwa-install-prompt.ts
6749
6724
  /**
6750
6725
  * 安装引导条。
6751
6726
  *
@@ -6910,8 +6885,7 @@ window.__ModuleLoader__.load({
6910
6885
  if (/iPad|iPhone|iPod/u.test(agent)) return true;
6911
6886
  return /Macintosh/u.test(agent) && (navigatorLike?.maxTouchPoints ?? 0) > 1;
6912
6887
  }
6913
- //#endregion
6914
- //#region src/client/mobile-rightbar-visibility.ts
6888
+ // src/client/mobile-rightbar-visibility.ts
6915
6889
  /** 移动端右栏显示权只属于用户,标签恢复与会话持久化不能自行展开面板。 */
6916
6890
  const MOBILE_RIGHTBAR_MANUAL_OPEN_EVENT = "codingns4dsh-mobile-rightbar-manual-open";
6917
6891
  const MOBILE_RIGHTBAR_MANUAL_CLOSE_EVENT = "codingns4dsh-mobile-rightbar-manual-close";
@@ -7060,8 +7034,7 @@ window.__ModuleLoader__.load({
7060
7034
  const parts = shortcut.toLowerCase().split("+");
7061
7035
  return parts.pop() === event.key?.toLowerCase() && event.ctrlKey === parts.includes("control") && event.metaKey === parts.includes("meta") && event.altKey === parts.includes("alt") && event.shiftKey === parts.includes("shift");
7062
7036
  }
7063
- //#endregion
7064
- //#region src/client/touch-input-focus.ts
7037
+ // src/client/touch-input-focus.ts
7065
7038
  const INPUT_SELECTOR = "input, textarea, [contenteditable=\"\"], [contenteditable=\"true\"], [contenteditable=\"plaintext-only\"], [data-composer-input=\"true\"]";
7066
7039
  const POPUP_SURFACE_SELECTOR = "[role=\"menu\"],[role=\"listbox\"],[role=\"dialog\"],[role=\"group\"],[aria-modal=\"true\"]";
7067
7040
  const POPUP_ITEM_SELECTOR = "[role=\"menuitem\"],[role=\"menuitemradio\"],[role=\"menuitemcheckbox\"],[role=\"option\"]";
@@ -7260,8 +7233,7 @@ window.__ModuleLoader__.load({
7260
7233
  y: point.clientY
7261
7234
  } : null;
7262
7235
  }
7263
- //#endregion
7264
- //#region src/client/mobile-session-interaction.ts
7236
+ // src/client/mobile-session-interaction.ts
7265
7237
  /**
7266
7238
  * 移动端会话交互修正。
7267
7239
  *
@@ -7494,8 +7466,7 @@ window.__ModuleLoader__.load({
7494
7466
  else root.style.setProperty(FONT_BASE_VARIABLE, previous);
7495
7467
  };
7496
7468
  }
7497
- //#endregion
7498
- //#region src/client/theme.ts
7469
+ // src/client/theme.ts
7499
7470
  /**
7500
7471
  * DSH 0.1.6 暴露的主题令牌。
7501
7472
  *
@@ -7730,8 +7701,7 @@ window.__ModuleLoader__.load({
7730
7701
  background: dshThemeColor.menuBackground,
7731
7702
  boxShadow: dshThemeColor.prominentShadow
7732
7703
  };
7733
- //#endregion
7734
- //#region src/client/features/lan-access-status.ts
7704
+ // src/client/features/lan-access-status.ts
7735
7705
  /** 监听全部网卡的写法;这些地址不能直接用于浏览器访问。 */
7736
7706
  const WILDCARD_HOSTS = /* @__PURE__ */ new Set([
7737
7707
  "0.0.0.0",
@@ -7853,8 +7823,7 @@ window.__ModuleLoader__.load({
7853
7823
  }
7854
7824
  return result;
7855
7825
  }
7856
- //#endregion
7857
- //#region src/client/settings-controls.ts
7826
+ // src/client/settings-controls.ts
7858
7827
  const settingsControlClass = {
7859
7828
  switch: "codingns4dsh-settings-switch",
7860
7829
  track: "codingns4dsh-settings-switch-track",
@@ -7993,8 +7962,7 @@ window.__ModuleLoader__.load({
7993
7962
  .${settingsControlClass.iconButton}:disabled{opacity:.5;cursor:not-allowed}
7994
7963
  @media (prefers-reduced-motion:reduce){.${settingsControlClass.track},.${settingsControlClass.thumb}{transition:none}}
7995
7964
  `;
7996
- //#endregion
7997
- //#region src/client/features/lan-access-panel.ts
7965
+ // src/client/features/lan-access-panel.ts
7998
7966
  /** “局域网访问DSH”设置卡片:只配置一条监听并转发到当前 DSH Web。 */
7999
7967
  function LanAccessPanel({ services, enabled, snapshot: settingsSnapshot, notify }) {
8000
7968
  const { rpc, settings } = services;
@@ -8348,8 +8316,7 @@ window.__ModuleLoader__.load({
8348
8316
  if (!response.ok) throw new Error(response.error.message);
8349
8317
  return response.value;
8350
8318
  }
8351
- //#endregion
8352
- //#region src/client/features/lan-access.ts
8319
+ // src/client/features/lan-access.ts
8353
8320
  /**
8354
8321
  * 局域网访问DSH模块。
8355
8322
  *
@@ -8402,8 +8369,7 @@ window.__ModuleLoader__.load({
8402
8369
  },
8403
8370
  settingsPanel: LanAccessPanel
8404
8371
  };
8405
- //#endregion
8406
- //#region src/dsh-capabilities/settings-store.ts
8372
+ // src/dsh-capabilities/settings-store.ts
8407
8373
  /** 将 DSH 两代写入结果统一成内部成功布尔值。 */
8408
8374
  function accepted(write) {
8409
8375
  return write.then((result) => result !== false);
@@ -8435,8 +8401,7 @@ window.__ModuleLoader__.load({
8435
8401
  if (leftKeys.length !== rightKeys.length) return false;
8436
8402
  return leftKeys.every((key) => Object.prototype.hasOwnProperty.call(rightRecord, key) && sameSettingsValue(leftRecord[key], rightRecord[key]));
8437
8403
  }
8438
- //#endregion
8439
- //#region src/client/popup-dismiss.ts
8404
+ // src/client/popup-dismiss.ts
8440
8405
  /** 解析 ref 或裸元素;ref 尚未挂载时返回 null。 */
8441
8406
  function resolveRoot(root) {
8442
8407
  if (root === null || root === void 0) return null;
@@ -8523,8 +8488,7 @@ window.__ModuleLoader__.load({
8523
8488
  if (event.target === event.currentTarget) close();
8524
8489
  };
8525
8490
  }
8526
- //#endregion
8527
- //#region src/client/features/reverse-proxy-panel.ts
8491
+ // src/client/features/reverse-proxy-panel.ts
8528
8492
  /**
8529
8493
  * 「中转访问服务」卡片的设置面板:Control API 地址、登录和 DSH 独立设备。
8530
8494
  *
@@ -9024,8 +8988,7 @@ window.__ModuleLoader__.load({
9024
8988
  input.remove();
9025
8989
  }
9026
8990
  }
9027
- //#endregion
9028
- //#region src/shared/contracts/errors.ts
8991
+ // src/shared/contracts/errors.ts
9029
8992
  const CODINGNS_DSH_ERROR_CODES = {
9030
8993
  PLUGIN_MANIFEST_INVALID: "PLUGIN_MANIFEST_INVALID",
9031
8994
  DSH_VERSION_UNSUPPORTED: "DSH_VERSION_UNSUPPORTED",
@@ -9174,8 +9137,7 @@ window.__ModuleLoader__.load({
9174
9137
  function validateLimit(value, name) {
9175
9138
  if (!Number.isSafeInteger(value) || value <= 0) throw new Error(`${name} 大小限制无效`);
9176
9139
  }
9177
- //#endregion
9178
- //#region src/shared/contracts/subscription.ts
9140
+ // src/shared/contracts/subscription.ts
9179
9141
  /**
9180
9142
  * 判断上一次用量查询结果是否仍在可复用窗口内。
9181
9143
  *
@@ -9188,8 +9150,7 @@ window.__ModuleLoader__.load({
9188
9150
  const age = nowMs - capturedAtMs;
9189
9151
  return age >= 0 && age < refreshIntervalMins * 6e4;
9190
9152
  }
9191
- //#endregion
9192
- //#region src/shared/magpie-provider-id.ts
9153
+ // src/shared/magpie-provider-id.ts
9193
9154
  /**
9194
9155
  * Magpie's own spelling of a provider ID (`provider.Slug`): lower-case letters and digits, every
9195
9156
  * run of anything else folded into one dash, and no dash at either end.
@@ -9201,8 +9162,7 @@ window.__ModuleLoader__.load({
9201
9162
  function magpieProviderId(value) {
9202
9163
  return value.toLocaleLowerCase().replace(/[^a-z0-9]+/gu, "-").replace(/^-+|-+$/gu, "");
9203
9164
  }
9204
- //#endregion
9205
- //#region src/transport/debug.ts
9165
+ // src/transport/debug.ts
9206
9166
  /** 创建一个可注入测试 sink 的调试 logger。默认开关由当前运行环境决定。 */
9207
9167
  function createDshTransportDebugLogger(options = {}) {
9208
9168
  const level = options.level ?? (options.enabled === void 0 ? resolveDshTransportDebugLevel() : options.enabled ? "info" : "off");
@@ -9318,8 +9278,7 @@ window.__ModuleLoader__.load({
9318
9278
  function resolveDshTransportDebugLevel() {
9319
9279
  return require_magpie_model_tag.resolveCodingNsDebugLevel();
9320
9280
  }
9321
- //#endregion
9322
- //#region src/transport/multiplexer.ts
9281
+ // src/transport/multiplexer.ts
9323
9282
  const DEFAULT_SCOPE = {
9324
9283
  hostId: "unknown",
9325
9284
  kind: "remote"
@@ -9715,8 +9674,7 @@ window.__ModuleLoader__.load({
9715
9674
  ...value.payload === void 0 ? {} : { body: new TextEncoder().encode(JSON.stringify(value.payload)) }
9716
9675
  };
9717
9676
  }
9718
- //#endregion
9719
- //#region src/transport/dsh-transport.ts
9677
+ // src/transport/dsh-transport.ts
9720
9678
  /** 将 Tunnel Multiplexer 映射为 DSH ClientTransportHooks。 */
9721
9679
  var DshCodingNsTransport = class {
9722
9680
  options;
@@ -9849,8 +9807,7 @@ window.__ModuleLoader__.load({
9849
9807
  return hooks;
9850
9808
  }
9851
9809
  };
9852
- //#endregion
9853
- //#region src/bootstrap/dsh-peer-host-preboot-shim.ts
9810
+ // src/bootstrap/dsh-peer-host-preboot-shim.ts
9854
9811
  /** 页面级 PeerHost preboot shim 的全局名称。 */
9855
9812
  const DSH_PEER_HOST_PREBOOT_SHIM_GLOBAL = "__CODINGNS4DSH_PREBOOT_SHIM__";
9856
9813
  /**
@@ -9874,8 +9831,7 @@ window.__ModuleLoader__.load({
9874
9831
  return;
9875
9832
  }
9876
9833
  }
9877
- //#endregion
9878
- //#region src/bootstrap/index.ts
9834
+ // src/bootstrap/index.ts
9879
9835
  /**
9880
9836
  * 在 DSH Client/Cordis 启动前登记唯一 Transport。
9881
9837
  *
@@ -9897,8 +9853,7 @@ window.__ModuleLoader__.load({
9897
9853
  }
9898
9854
  };
9899
9855
  }
9900
- //#endregion
9901
- //#region src/bootstrap/dsh-connection-adapter.ts
9856
+ // src/bootstrap/dsh-connection-adapter.ts
9902
9857
  /**
9903
9858
  * 将插件内部 Transport 映射为 DSH 的 ClientTransportHooks。
9904
9859
  *
@@ -9974,8 +9929,7 @@ window.__ModuleLoader__.load({
9974
9929
  hooks
9975
9930
  };
9976
9931
  }
9977
- //#endregion
9978
- //#region src/transport/dsh-session.ts
9932
+ // src/transport/dsh-session.ts
9979
9933
  /** 负责 DSH hello/ready、协议与能力协商和心跳,不执行任何业务。 */
9980
9934
  var DshSession = class {
9981
9935
  options;
@@ -10059,15 +10013,15 @@ window.__ModuleLoader__.load({
10059
10013
  sendHello() {
10060
10014
  this.send(this.createEnvelope("session.hello", "session", {
10061
10015
  protocol: this.options.protocol ?? "dsh-transport-v1",
10062
- dshVersion: this.options.dshVersion ?? "0.2.1-rc.5",
10016
+ dshVersion: this.options.dshVersion ?? "0.2.2-alpha.2",
10063
10017
  capabilities: [...this.options.capabilities ?? []]
10064
10018
  }));
10065
10019
  }
10066
10020
  sendReady(capabilities, peerDshVersion) {
10067
10021
  this.send(this.createEnvelope("session.ready", "session", {
10068
10022
  protocol: this.options.protocol ?? "dsh-transport-v1",
10069
- dshVersion: peerDshVersion ?? this.options.dshVersion ?? "0.2.1-rc.5",
10070
- hostDshVersion: this.options.dshVersion ?? "0.2.1-rc.5",
10023
+ dshVersion: peerDshVersion ?? this.options.dshVersion ?? "0.2.2-alpha.2",
10024
+ hostDshVersion: this.options.dshVersion ?? "0.2.2-alpha.2",
10071
10025
  capabilities: [...capabilities],
10072
10026
  byteCredit: 65536,
10073
10027
  messageCredit: 32
@@ -10348,8 +10302,7 @@ window.__ModuleLoader__.load({
10348
10302
  function bodyOf(frame) {
10349
10303
  return "body" in frame ? frame.body : empty;
10350
10304
  }
10351
- //#endregion
10352
- //#region src/transport/carrier.ts
10305
+ // src/transport/carrier.ts
10353
10306
  const TUNNEL_DATA_CHANNEL_LABEL = "codingns-tunnel";
10354
10307
  /** 单个分片的正文上限;整帧为正文加上分片头。 */
10355
10308
  const DATA_CHANNEL_FRAGMENT_PAYLOAD_BYTES = 65536;
@@ -10681,8 +10634,7 @@ window.__ModuleLoader__.load({
10681
10634
  function bytesToHex(value) {
10682
10635
  return [...value].map((item) => item.toString(16).padStart(2, "0")).join("");
10683
10636
  }
10684
- //#endregion
10685
- //#region src/transport/webrtc-client.ts
10637
+ // src/transport/webrtc-client.ts
10686
10638
  /** 客户端发起 offer,校验 Host fingerprint 后返回 DataChannel Carrier。 */
10687
10639
  async function connectWebRtcClient(options) {
10688
10640
  const ticket = options.signalingTicket;
@@ -11013,8 +10965,7 @@ window.__ModuleLoader__.load({
11013
10965
  if (url.protocol !== "ws:" && url.protocol !== "wss:") throw new Error("Relay URL 必须使用 HTTP(S) 或 WS(S)");
11014
10966
  return url.toString();
11015
10967
  }
11016
- //#endregion
11017
- //#region src/client/provider-icon-bridge.ts
10968
+ // src/client/provider-icon-bridge.ts
11018
10969
  /**
11019
10970
  * 注入 H5 iframe 的窄图片桥。函数必须自包含:调用方将函数源码写进 srcdoc,
11020
10971
  * 不依赖父窗口模块变量,也不增加全页面 MutationObserver。
@@ -11072,8 +11023,7 @@ window.__ModuleLoader__.load({
11072
11023
  nativeRemove.call(this, name);
11073
11024
  };
11074
11025
  }
11075
- //#endregion
11076
- //#region src/client/remote-web-context.ts
11026
+ // src/client/remote-web-context.ts
11077
11027
  /**
11078
11028
  * 一个 HostScope 对应一个独立 iframe。iframe 内的 fetch 和 WebSocket 都经由
11079
11029
  * postMessage 回到父页面,再由 DSH Transport 走 web.* Envelope;页面本身不接触
@@ -12145,8 +12095,7 @@ window.__ModuleLoader__.load({
12145
12095
  if (/\.png(?:$|\?)/u.test(path)) return "image/png";
12146
12096
  return "application/octet-stream";
12147
12097
  }
12148
- //#endregion
12149
- //#region src/client/dsh-runtime-version.ts
12098
+ // src/client/dsh-runtime-version.ts
12150
12099
  /**
12151
12100
  * 读取 Host 注入的真实 DSH 版本,并在无法读取时拒绝启用 Client。
12152
12101
  *
@@ -12176,8 +12125,7 @@ window.__ModuleLoader__.load({
12176
12125
  return false;
12177
12126
  }
12178
12127
  }
12179
- //#endregion
12180
- //#region src/client/dsh-h5-bootstrap.ts
12128
+ // src/client/dsh-h5-bootstrap.ts
12181
12129
  /**
12182
12130
  * DSH H5 的最小入口:选择独立 DSH 设备、申请票据、建立 WebRTC,最后才启动远程 DSH。
12183
12131
  * 账号凭据只在 Host RPC 内部使用,浏览器只看到设备摘要和短期票据。
@@ -12587,8 +12535,7 @@ window.__ModuleLoader__.load({
12587
12535
  if (!response.ok) throw new Error(data.detail ?? data.errorCode ?? `Control API 请求失败 (${response.status})`);
12588
12536
  return data;
12589
12537
  }
12590
- //#endregion
12591
- //#region src/client/settings-bridge.ts
12538
+ // src/client/settings-bridge.ts
12592
12539
  const REMOTE_LOAD_RETRY_DELAYS_MS = [
12593
12540
  0,
12594
12541
  250,
@@ -12841,8 +12788,7 @@ window.__ModuleLoader__.load({
12841
12788
  status: snapshot.status
12842
12789
  };
12843
12790
  }
12844
- //#endregion
12845
- //#region src/client/features/login-protection-session.ts
12791
+ // src/client/features/login-protection-session.ts
12846
12792
  /** 登录保护会话只放在当前浏览器标签页,关闭标签页即失效。 */
12847
12793
  const LOGIN_PROTECTION_SESSION_KEY = "codingns4dsh.login-protection.relay-token";
12848
12794
  const LOGIN_PROTECTION_SESSION_EVENT = "codingns4dsh-login-protection-session";
@@ -12878,8 +12824,7 @@ window.__ModuleLoader__.load({
12878
12824
  } catch {}
12879
12825
  globalThis.dispatchEvent(new Event(LOGIN_PROTECTION_SESSION_EVENT));
12880
12826
  }
12881
- //#endregion
12882
- //#region src/client/features/reverse-proxy.ts
12827
+ // src/client/features/reverse-proxy.ts
12883
12828
  function isRemoteWebContext$1() {
12884
12829
  return globalThis.__CODINGNS4DSH_REMOTE_WEB_CONTEXT__ === true;
12885
12830
  }
@@ -13037,8 +12982,7 @@ window.__ModuleLoader__.load({
13037
12982
  async function readAuthSnapshot(rpc) {
13038
12983
  return callCodingNsRpc(rpc, "auth/snapshot", {});
13039
12984
  }
13040
- //#endregion
13041
- //#region src/client/features/login-protection-panel.ts
12985
+ // src/client/features/login-protection-panel.ts
13042
12986
  const DEFAULT_SCOPES = {
13043
12987
  lan: true,
13044
12988
  relay: true
@@ -13209,8 +13153,7 @@ window.__ModuleLoader__.load({
13209
13153
  if (!response.ok) throw new Error(response.error.message);
13210
13154
  return response.value;
13211
13155
  }
13212
- //#endregion
13213
- //#region src/client/features/login-protection.ts
13156
+ // src/client/features/login-protection.ts
13214
13157
  /** 独立的本地账号登录保护模块,位于局域网和中继访问模块之间。 */
13215
13158
  const loginProtectionFeature = {
13216
13159
  descriptor: {
@@ -13232,8 +13175,7 @@ window.__ModuleLoader__.load({
13232
13175
  start: () => void 0,
13233
13176
  settingsPanel: LoginProtectionPanel
13234
13177
  };
13235
- //#endregion
13236
- //#region node_modules/.pnpm/scheduler@0.23.2/node_modules/scheduler/cjs/scheduler.production.min.js
13178
+ // node_modules/.pnpm/scheduler@0.23.2/node_modules/scheduler/cjs/scheduler.production.min.js
13237
13179
  /**
13238
13180
  * @license React
13239
13181
  * scheduler.production.min.js
@@ -13487,13 +13429,11 @@ window.__ModuleLoader__.load({
13487
13429
  };
13488
13430
  };
13489
13431
  }));
13490
- //#endregion
13491
- //#region node_modules/.pnpm/scheduler@0.23.2/node_modules/scheduler/index.js
13432
+ // node_modules/.pnpm/scheduler@0.23.2/node_modules/scheduler/index.js
13492
13433
  var require_scheduler = /* @__PURE__ */ require_rolldown_runtime.__commonJSMin(((exports, module) => {
13493
13434
  module.exports = require_scheduler_production_min();
13494
13435
  }));
13495
- //#endregion
13496
- //#region node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js
13436
+ // node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js
13497
13437
  /**
13498
13438
  * @license React
13499
13439
  * react-dom.production.min.js
@@ -20166,8 +20106,7 @@ window.__ModuleLoader__.load({
20166
20106
  return cl(a, b, null, c);
20167
20107
  };
20168
20108
  }));
20169
- //#endregion
20170
- //#region src/client/cli-settings-dialog.ts
20109
+ // src/client/cli-settings-dialog.ts
20171
20110
  var import_react_dom = (/* @__PURE__ */ require_rolldown_runtime.__commonJSMin(((exports, module) => {
20172
20111
  function checkDCE() {
20173
20112
  if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === "undefined" || typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== "function") return;
@@ -20232,8 +20171,7 @@ window.__ModuleLoader__.load({
20232
20171
  }, children);
20233
20172
  return typeof document === "undefined" ? dialog : (0, import_react_dom.createPortal)(dialog, document.body);
20234
20173
  }
20235
- //#endregion
20236
- //#region src/client/external-tool-stream.ts
20174
+ // src/client/external-tool-stream.ts
20237
20175
  /**
20238
20176
  * 把实时 assistant/live-chunk 工具标记投影成 Chat 节点。
20239
20177
  * assistant/attempt 读取仅为兼容已经存在的旧历史;新 Host 的持久时间线使用原生
@@ -20361,8 +20299,7 @@ window.__ModuleLoader__.load({
20361
20299
  function isRecord$13(value) {
20362
20300
  return typeof value === "object" && value !== null && !Array.isArray(value);
20363
20301
  }
20364
- //#endregion
20365
- //#region src/client/native-translation-default.ts
20302
+ // src/client/native-translation-default.ts
20366
20303
  /**
20367
20304
  * DSH 原生会话翻译开关的默认值读取器。
20368
20305
  *
@@ -20392,8 +20329,7 @@ window.__ModuleLoader__.load({
20392
20329
  function notifyNativeTranslationDefaultChanged() {
20393
20330
  for (const listener of listeners$1) listener();
20394
20331
  }
20395
- //#endregion
20396
- //#region src/client/session-adapter-cache.ts
20332
+ // src/client/session-adapter-cache.ts
20397
20333
  const adaptersBySession = /* @__PURE__ */ new Map();
20398
20334
  const listeners = /* @__PURE__ */ new Set();
20399
20335
  const requests = /* @__PURE__ */ new WeakMap();
@@ -20472,8 +20408,7 @@ window.__ModuleLoader__.load({
20472
20408
  const record = value;
20473
20409
  return typeof record.sessionId === "string" && record.sessionId.trim() !== "" && typeof record.adapterId === "string" && record.adapterId.trim() !== "";
20474
20410
  }
20475
- //#endregion
20476
- //#region src/client/context-breakdown-dom.ts
20411
+ // src/client/context-breakdown-dom.ts
20477
20412
  /**
20478
20413
  * DSH 上下文面板(ContextMeter)的构成明细隐藏器。
20479
20414
  *
@@ -20612,8 +20547,7 @@ window.__ModuleLoader__.load({
20612
20547
  style.textContent = CONTEXT_BREAKDOWN_STYLE_TEXT;
20613
20548
  dom.head.appendChild(style);
20614
20549
  }
20615
- //#endregion
20616
- //#region src/dsh-capabilities/types.ts
20550
+ // src/dsh-capabilities/types.ts
20617
20551
  function createCapabilityProfile(dshVersion, runtime, capabilities, diagnostics) {
20618
20552
  return Object.freeze({
20619
20553
  dshVersion,
@@ -20633,8 +20567,7 @@ window.__ModuleLoader__.load({
20633
20567
  } });
20634
20568
  return Object.freeze(view);
20635
20569
  }
20636
- //#endregion
20637
- //#region src/dsh-capabilities/registry.ts
20570
+ // src/dsh-capabilities/registry.ts
20638
20571
  var DshCapabilityRegistryError = class extends Error {
20639
20572
  code;
20640
20573
  capability;
@@ -20821,8 +20754,7 @@ window.__ModuleLoader__.load({
20821
20754
  function errorMessage$2(error) {
20822
20755
  return error instanceof Error ? error.message : String(error);
20823
20756
  }
20824
- //#endregion
20825
- //#region src/dsh-capabilities/client/terminal-sharing-adapter.ts
20757
+ // src/dsh-capabilities/client/terminal-sharing-adapter.ts
20826
20758
  /** DSH 版本差异只在本适配器探测,终端业务不读取宿主私有编辑器。 */
20827
20759
  function supportsTerminalSharing(context) {
20828
20760
  return typeof service(context, "sessions")?.scope === "function" && typeof service(context, "conversation")?.input?.for === "function" && typeof service(context, "uiWorkspace")?.openSession === "function";
@@ -20987,8 +20919,7 @@ window.__ModuleLoader__.load({
20987
20919
  if (item?.ok === false) throw new Error(string$3(record$2(item.error)?.message) || "读取会话列表失败");
20988
20920
  return item?.ok === true ? item.value : value;
20989
20921
  }
20990
- //#endregion
20991
- //#region src/shared/contracts/interaction-translation.ts
20922
+ // src/shared/contracts/interaction-translation.ts
20992
20923
  function questionTranslationFields(questions) {
20993
20924
  const fields = [];
20994
20925
  const add = (key, text) => {
@@ -21033,8 +20964,7 @@ window.__ModuleLoader__.load({
21033
20964
  const record = result?.records[key];
21034
20965
  return result?.enabled && record !== void 0 && record.original === original && !record.failed ? record.translated : original;
21035
20966
  }
21036
- //#endregion
21037
- //#region src/dsh-capabilities/client/question-history-adapter.ts
20967
+ // src/dsh-capabilities/client/question-history-adapter.ts
21038
20968
  /** Read complete recorded JSON only. Preparing or unrecognized tool shapes remain native. */
21039
20969
  function readQuestionHistory(block, settled) {
21040
20970
  const call = block?.kind === void 0 ? block : block.call;
@@ -21115,8 +21045,7 @@ window.__ModuleLoader__.load({
21115
21045
  function validAnswers(value) {
21116
21046
  return Array.isArray(value) && value.every((a) => a !== null && typeof a === "object" && typeof a.id === "string" && Array.isArray(a.selected) && a.selected.every((label) => typeof label === "string") && (a.custom === void 0 || typeof a.custom === "string"));
21117
21047
  }
21118
- //#endregion
21119
- //#region src/dsh-capabilities/client/slot-presentation-mirror.ts
21048
+ // src/dsh-capabilities/client/slot-presentation-mirror.ts
21120
21049
  /** Follow a native entry that may load after its slot or be replaced during reload. */
21121
21050
  function followPresentationEntry(slots, name, matches, mount) {
21122
21051
  return slots.inject(name, () => {
@@ -21205,8 +21134,7 @@ window.__ModuleLoader__.load({
21205
21134
  };
21206
21135
  });
21207
21136
  }
21208
- //#endregion
21209
- //#region src/dsh-capabilities/client/interaction-presentation-adapter.ts
21137
+ // src/dsh-capabilities/client/interaction-presentation-adapter.ts
21210
21138
  function supportsInteractionPresentation(context) {
21211
21139
  const slots = context?.slots;
21212
21140
  return typeof slots?.inject === "function" && typeof slots.register === "function" && typeof slots.entries === "function" && typeof slots.subscribe === "function";
@@ -21340,8 +21268,7 @@ window.__ModuleLoader__.load({
21340
21268
  "completed"
21341
21269
  ].includes(item.status ?? "");
21342
21270
  }
21343
- //#endregion
21344
- //#region src/dsh-capabilities/client/message-presentation-adapter.ts
21271
+ // src/dsh-capabilities/client/message-presentation-adapter.ts
21345
21272
  function slotsOf(context) {
21346
21273
  return context?.slots;
21347
21274
  }
@@ -21381,8 +21308,7 @@ window.__ModuleLoader__.load({
21381
21308
  })
21382
21309
  };
21383
21310
  }
21384
- //#endregion
21385
- //#region src/dsh-capabilities/host/session-model-selection-adapter.ts
21311
+ // src/dsh-capabilities/host/session-model-selection-adapter.ts
21386
21312
  const NATIVE_ACCESSOR = Symbol.for("codingns4dsh.native-model-selection");
21387
21313
  const NATIVE_CURRENT = Symbol.for("codingns4dsh.native-model-current");
21388
21314
  function selectionOwner(controller) {
@@ -21454,8 +21380,7 @@ window.__ModuleLoader__.load({
21454
21380
  };
21455
21381
  } };
21456
21382
  }
21457
- //#endregion
21458
- //#region src/dsh-capabilities/host/workspace-session-control-adapter.ts
21383
+ // src/dsh-capabilities/host/workspace-session-control-adapter.ts
21459
21384
  /** Narrow typed adapter over DSH's public SessionController surface. */
21460
21385
  function supportsWorkspaceSessionControl(context) {
21461
21386
  const controller = asController(readContext(context, "sessionController"));
@@ -21524,8 +21449,7 @@ window.__ModuleLoader__.load({
21524
21449
  function asRecord$9(value) {
21525
21450
  return typeof value === "object" && value !== null && !Array.isArray(value) ? value : void 0;
21526
21451
  }
21527
- //#endregion
21528
- //#region src/dsh-capabilities/host/workspace-pending-questions-adapter.ts
21452
+ // src/dsh-capabilities/host/workspace-pending-questions-adapter.ts
21529
21453
  function supportsWorkspacePendingQuestions(context) {
21530
21454
  const get = contextGet(context);
21531
21455
  return hasMethod$2(get?.("sessions"), "get") && hasMethod$2(get?.("agents"), "get") && hasMethod$2(get?.("agents"), "roots") && hasMethod$2(get?.("sessionProjections"), "stateOf") && hasMethod$2(get?.("userQuestions"), "answer");
@@ -21611,8 +21535,7 @@ window.__ModuleLoader__.load({
21611
21535
  const item = record$1(value);
21612
21536
  return typeof item?.id === "string" && typeof item.question === "string";
21613
21537
  }
21614
- //#endregion
21615
- //#region src/dsh-capabilities/host/workspace-approval-adapter.ts
21538
+ // src/dsh-capabilities/host/workspace-approval-adapter.ts
21616
21539
  function supportsWorkspaceApproval(context) {
21617
21540
  const nativeContext = asContext(context);
21618
21541
  const get = nativeContext?.get.bind(nativeContext);
@@ -21759,8 +21682,7 @@ window.__ModuleLoader__.load({
21759
21682
  function isOutcome(value) {
21760
21683
  return value === "allowed-once" || value === "rejected" || value === "cancelled" || value === "unavailable";
21761
21684
  }
21762
- //#endregion
21763
- //#region src/dsh-capabilities/host/session-prompt-adapter.ts
21685
+ // src/dsh-capabilities/host/session-prompt-adapter.ts
21764
21686
  function supportsSessionPromptAssembly(value) {
21765
21687
  const ctx = value;
21766
21688
  const prompt = ctx?.get?.("systemPrompt") ?? ctx?.systemPrompt;
@@ -21779,30 +21701,62 @@ window.__ModuleLoader__.load({
21779
21701
  function createSessionPromptAdapter(value) {
21780
21702
  const ctx = value;
21781
21703
  return { install(transform) {
21782
- const dispose = ctx.on("system-prompt/assemble", async (_assembly, context, next) => {
21704
+ const prompt = ctx.get?.("systemPrompt") ?? ctx.systemPrompt;
21705
+ const original = prompt?.assemble;
21706
+ if (typeof original !== "function" || prompt === void 0) return () => void 0;
21707
+ const transformedByWaterfall = /* @__PURE__ */ new WeakMap();
21708
+ const disposeWaterfall = ctx.on?.("system-prompt/assemble", async (_assembly, context, next) => {
21783
21709
  const assembly = await next();
21784
21710
  const scope = sessionPromptScope(context?.agent, context?.signal);
21785
- if (scope.sessionId === "" || scope.subagent || !Array.isArray(assembly?.sections) || !Array.isArray(assembly.tools)) return assembly;
21786
- return transform(assembly, scope);
21711
+ if (scope.sessionId === "" || scope.subagent || !Array.isArray(assembly?.sections)) return assembly;
21712
+ const hasTools = Array.isArray(assembly.tools);
21713
+ const transformed = await transform(hasTools ? assembly : {
21714
+ ...assembly,
21715
+ tools: []
21716
+ }, scope);
21717
+ if (context !== null && typeof context === "object") transformedByWaterfall.set(context, hasTools);
21718
+ return transformed;
21787
21719
  }, {
21788
21720
  global: true,
21789
21721
  prepend: true
21790
21722
  });
21791
- return typeof dispose === "function" ? dispose : () => void 0;
21723
+ const wrapped = async function(context) {
21724
+ const assembly = await original.call(this, context);
21725
+ const scope = sessionPromptScope(context?.agent, context?.signal);
21726
+ const hasWaterfallResult = context !== null && typeof context === "object" && transformedByWaterfall.has(context);
21727
+ const waterfallHadTools = hasWaterfallResult ? transformedByWaterfall.get(context) === true : false;
21728
+ if (hasWaterfallResult) transformedByWaterfall.delete(context);
21729
+ if (waterfallHadTools || scope.sessionId === "" || scope.subagent || !Array.isArray(assembly?.sections) || !Array.isArray(assembly.tools)) return assembly;
21730
+ const transformed = await transform({
21731
+ ...assembly,
21732
+ sections: [],
21733
+ tools: assembly.tools
21734
+ }, scope);
21735
+ return {
21736
+ ...assembly,
21737
+ tools: transformed.tools ?? []
21738
+ };
21739
+ };
21740
+ try {
21741
+ prompt.assemble = wrapped;
21742
+ } catch {
21743
+ return typeof disposeWaterfall === "function" ? disposeWaterfall : () => void 0;
21744
+ }
21745
+ return () => {
21746
+ prompt.assemble = original;
21747
+ if (typeof disposeWaterfall === "function") disposeWaterfall();
21748
+ };
21792
21749
  } };
21793
21750
  }
21794
- //#endregion
21795
- //#region src/shared/quick-app-proxy-path.ts
21751
+ // src/shared/quick-app-proxy-path.ts
21796
21752
  /** The native Desktop embedding origin; preview resources use the verified Host listener. */
21797
21753
  const QUICK_APP_DESKTOP_ORIGIN = "dsh-app://app";
21798
- //#endregion
21799
- //#region src/dsh-capabilities/host/quick-app-origin-adapter.ts
21754
+ // src/dsh-capabilities/host/quick-app-origin-adapter.ts
21800
21755
  /** A prefix route is deliberately insufficient; the Host must install a dedicated provider. */
21801
21756
  function supportsQuickAppOrigins(provider) {
21802
21757
  return typeof provider === "object" && provider !== null && typeof provider.open === "function";
21803
21758
  }
21804
- //#endregion
21805
- //#region src/dsh-capabilities/host/quick-app-proxy-adapter.ts
21759
+ // src/dsh-capabilities/host/quick-app-proxy-adapter.ts
21806
21760
  function webServer(context) {
21807
21761
  const ctx = context;
21808
21762
  try {
@@ -21830,8 +21784,7 @@ window.__ModuleLoader__.load({
21830
21784
  register: (route) => server.register(route)
21831
21785
  };
21832
21786
  }
21833
- //#endregion
21834
- //#region src/dsh-capabilities/client/quick-app-footer-adapter.ts
21787
+ // src/dsh-capabilities/client/quick-app-footer-adapter.ts
21835
21788
  function supportsQuickAppFooter(value) {
21836
21789
  const slots = value;
21837
21790
  return typeof slots?.inject === "function" && typeof slots.register === "function";
@@ -21845,8 +21798,7 @@ window.__ModuleLoader__.load({
21845
21798
  order: 40
21846
21799
  }, component));
21847
21800
  }
21848
- //#endregion
21849
- //#region src/dsh-capabilities/host/workspace-directory-adapter.ts
21801
+ // src/dsh-capabilities/host/workspace-directory-adapter.ts
21850
21802
  function supportsWorkspaceDirectory(context) {
21851
21803
  return typeof readWorkspaceFiles(context)?.list === "function";
21852
21804
  }
@@ -21866,8 +21818,7 @@ window.__ModuleLoader__.load({
21866
21818
  return;
21867
21819
  }
21868
21820
  }
21869
- //#endregion
21870
- //#region src/dsh-capabilities/host/session-performance-adapter.ts
21821
+ // src/dsh-capabilities/host/session-performance-adapter.ts
21871
21822
  function supportsSessionPerformance(context) {
21872
21823
  return typeof projections(context)?.register === "function";
21873
21824
  }
@@ -21884,15 +21835,12 @@ window.__ModuleLoader__.load({
21884
21835
  const service = projections(context);
21885
21836
  return { install: (definition) => service.register(definition) };
21886
21837
  }
21887
- //#endregion
21888
- //#region src/shared/codex-performance.ts
21838
+ // src/shared/codex-performance.ts
21889
21839
  const CODEX_PERFORMANCE_PROJECTION = "codingnsCodexStats";
21890
- //#endregion
21891
- //#region src/shared/request-performance.ts
21840
+ // src/shared/request-performance.ts
21892
21841
  const GROK_PERFORMANCE_PROJECTION = "codingnsGrokStats";
21893
21842
  const GROK_CONTEXT_PROJECTION = "codingnsGrokContext";
21894
- //#endregion
21895
- //#region src/dsh-capabilities/client/composer-slot-selectors.ts
21843
+ // src/dsh-capabilities/client/composer-slot-selectors.ts
21896
21844
  /** Keep DOM consumers aligned with the context presentation's owned child slots. */
21897
21845
  function contextComposerSlotName(name) {
21898
21846
  return `codingns.grok-context.${name}`;
@@ -21900,8 +21848,7 @@ window.__ModuleLoader__.load({
21900
21848
  function composerSlotSelector(name) {
21901
21849
  return `:is([data-slot="${name}"],[data-slot="${contextComposerSlotName(name)}"])`;
21902
21850
  }
21903
- //#endregion
21904
- //#region src/dsh-capabilities/client/composer-presentation-adapter.ts
21851
+ // src/dsh-capabilities/client/composer-presentation-adapter.ts
21905
21852
  const presentations = /* @__PURE__ */ new WeakMap();
21906
21853
  /** Compose customizations over one native composer, sharing its child-slot mirror. */
21907
21854
  function installComposerPresentation(owner, slots, decorate, element, hooks) {
@@ -21970,8 +21917,7 @@ window.__ModuleLoader__.load({
21970
21917
  } else for (const listener of state.listeners) listener();
21971
21918
  };
21972
21919
  }
21973
- //#endregion
21974
- //#region src/dsh-capabilities/client/session-performance-adapter.ts
21920
+ // src/dsh-capabilities/client/session-performance-adapter.ts
21975
21921
  function supportsSessionPerformancePresentation(context) {
21976
21922
  const slots = context?.slots;
21977
21923
  return slots !== void 0 && [
@@ -22089,8 +22035,7 @@ window.__ModuleLoader__.load({
22089
22035
  })
22090
22036
  }, (props) => element(magpieContext.component, props)));
22091
22037
  }
22092
- //#endregion
22093
- //#region src/dsh-capabilities/host/agent-team-adapter.ts
22038
+ // src/dsh-capabilities/host/agent-team-adapter.ts
22094
22039
  const MEMBER_METHODS = [
22095
22040
  "membership",
22096
22041
  "listMembers",
@@ -22224,8 +22169,7 @@ window.__ModuleLoader__.load({
22224
22169
  return;
22225
22170
  }
22226
22171
  }
22227
- //#endregion
22228
- //#region src/dsh-capabilities/client/global-panel-adapter.ts
22172
+ // src/dsh-capabilities/client/global-panel-adapter.ts
22229
22173
  function supportsGlobalPanel(context) {
22230
22174
  return readGlobalPanelContext(context) !== void 0;
22231
22175
  }
@@ -22321,8 +22265,7 @@ window.__ModuleLoader__.load({
22321
22265
  return false;
22322
22266
  }
22323
22267
  }
22324
- //#endregion
22325
- //#region src/shared/contracts/plugin-update.ts
22268
+ // src/shared/contracts/plugin-update.ts
22326
22269
  const CODINGNS_PACKAGE_NAME = "@jingyi0605/codingns4dsh";
22327
22270
  const CODINGNS_NPM_REGISTRY = "https://registry.npmjs.org";
22328
22271
  function isSemver(value) {
@@ -22367,8 +22310,7 @@ window.__ModuleLoader__.load({
22367
22310
  prerelease: match[4]?.split(".") ?? []
22368
22311
  };
22369
22312
  }
22370
- //#endregion
22371
- //#region src/dsh-capabilities/host/plugin-update-adapter.ts
22313
+ // src/dsh-capabilities/host/plugin-update-adapter.ts
22372
22314
  function readUpdateService(context, name) {
22373
22315
  if (typeof context !== "object" || context === null) return void 0;
22374
22316
  try {
@@ -22438,8 +22380,7 @@ window.__ModuleLoader__.load({
22438
22380
  ...code === void 0 ? {} : { errorCode: code }
22439
22381
  };
22440
22382
  }
22441
- //#endregion
22442
- //#region src/dsh-capabilities/routes.ts
22383
+ // src/dsh-capabilities/routes.ts
22443
22384
  /**
22444
22385
  * 注册 Codingns4DSH 当前实际消费的 DSH 服务能力。
22445
22386
  *
@@ -22555,11 +22496,11 @@ window.__ModuleLoader__.load({
22555
22496
  add({
22556
22497
  id: "session-activation-020",
22557
22498
  capability: "session.activation",
22558
- supportedDsh: ">=0.2.0-rc.2 <=0.2.1-alpha.2",
22499
+ supportedDsh: ">=0.2.1-alpha.2 <=0.2.1-alpha.2",
22559
22500
  runtime,
22560
22501
  priority: 10,
22561
22502
  status: "supported",
22562
- introducedIn: "0.2.0-rc.2",
22503
+ introducedIn: "0.2.1-alpha.2",
22563
22504
  detect: (ctx) => hasMethods(read(ctx, "sessionController"), ["create"]),
22564
22505
  create: (ctx) => read(ctx, "sessionController")
22565
22506
  });
@@ -22734,11 +22675,11 @@ window.__ModuleLoader__.load({
22734
22675
  add({
22735
22676
  id: "message-presentation-020",
22736
22677
  capability: "conversation.message-presentation",
22737
- supportedDsh: ">=0.2.0-rc.2 <=0.2.1-alpha.2",
22678
+ supportedDsh: ">=0.2.1-alpha.2 <=0.2.1-alpha.2",
22738
22679
  runtime,
22739
22680
  priority: 10,
22740
22681
  status: "supported",
22741
- introducedIn: "0.2.0-rc.2",
22682
+ introducedIn: "0.2.1-alpha.2",
22742
22683
  detect: (ctx) => supportsLegacyMessagePresentation({ slots: read(ctx, "slots") }, facts.primitives),
22743
22684
  create: () => createLegacyMessagePresentation(facts.primitives)
22744
22685
  });
@@ -22928,11 +22869,11 @@ window.__ModuleLoader__.load({
22928
22869
  add({
22929
22870
  id: "connection-peer-admission-020",
22930
22871
  capability: "connection.peer",
22931
- supportedDsh: ">=0.2.0-rc.2 <=0.2.1-alpha.2",
22872
+ supportedDsh: ">=0.2.1-alpha.2 <=0.2.1-alpha.2",
22932
22873
  runtime: "host",
22933
22874
  priority: 30,
22934
22875
  status: "supported",
22935
- introducedIn: "0.2.0-rc.1",
22876
+ introducedIn: "0.2.1-alpha.2",
22936
22877
  detect: (ctx) => hasMethods(read(ctx, "connection"), ["admit", "requestRejection"]) && read(ctx, "connection.operator") !== void 0,
22937
22878
  create: (ctx) => read(ctx, "connection")
22938
22879
  });
@@ -22950,11 +22891,11 @@ window.__ModuleLoader__.load({
22950
22891
  add({
22951
22892
  id: "connection-rpc-uplink-020",
22952
22893
  capability: "connection.uplink",
22953
- supportedDsh: ">=0.2.0-rc.2 <=0.2.1-alpha.2",
22894
+ supportedDsh: ">=0.2.1-alpha.2 <=0.2.1-alpha.2",
22954
22895
  runtime: "host",
22955
22896
  priority: 10,
22956
22897
  status: "supported",
22957
- introducedIn: "0.2.0-rc.1",
22898
+ introducedIn: "0.2.1-alpha.2",
22958
22899
  detect: (ctx) => hasMethods(read(ctx, "connection.rpc"), ["handle"]) && read(ctx, "connection.operator") !== void 0,
22959
22900
  create: (ctx) => read(ctx, "connection")
22960
22901
  });
@@ -23013,17 +22954,6 @@ window.__ModuleLoader__.load({
23013
22954
  detect: (ctx) => hasMethods(read(ctx, "subagents"), ["startActivation", "sendMessage"]),
23014
22955
  create: (ctx) => read(ctx, "subagents")
23015
22956
  });
23016
- add({
23017
- id: "subagent-continuable-020",
23018
- capability: "subagent.continuable",
23019
- supportedDsh: ">=0.2.0-rc.1 <=0.2.1-alpha.1",
23020
- runtime: "host",
23021
- priority: 10,
23022
- status: "supported",
23023
- introducedIn: "0.2.0-rc.1",
23024
- detect: (ctx) => hasMethods(read(ctx, "subagents"), ["startContinuable", "sendMessage"]),
23025
- create: (ctx) => read(ctx, "subagents")
23026
- });
23027
22957
  add({
23028
22958
  id: "agent-team-native-020",
23029
22959
  capability: "agent-team.native",
@@ -23362,8 +23292,7 @@ window.__ModuleLoader__.load({
23362
23292
  if (Array.isArray(context)) return void 0;
23363
23293
  return readKey(context, field);
23364
23294
  }
23365
- //#endregion
23366
- //#region src/client/rpc-call.ts
23295
+ // src/client/rpc-call.ts
23367
23296
  const apiRoutes = /* @__PURE__ */ new WeakMap();
23368
23297
  /** 只在路由确实不存在或方法不兼容时回退,普通超时不能重复提交写操作。 */
23369
23298
  async function callCodingNsRpcResult(rpc, endpoint, payload, signal) {
@@ -23382,8 +23311,7 @@ window.__ModuleLoader__.load({
23382
23311
  return result;
23383
23312
  }
23384
23313
  }
23385
- //#endregion
23386
- //#region src/client/magpie-context-store.ts
23314
+ // src/client/magpie-context-store.ts
23387
23315
  const POLL_INTERVAL_MS = 3e3;
23388
23316
  const IDLE_STATE = { status: "idle" };
23389
23317
  const NATIVE_STATE = { status: "native" };
@@ -23512,8 +23440,7 @@ window.__ModuleLoader__.load({
23512
23440
  }
23513
23441
  return true;
23514
23442
  }
23515
- //#endregion
23516
- //#region src/client/magpie-context-meter.ts
23443
+ // src/client/magpie-context-meter.ts
23517
23444
  const STYLE_ID$4 = "codingns4dsh-magpie-context-meter";
23518
23445
  const COLORS = {
23519
23446
  system: "#8b5cf6",
@@ -23838,8 +23765,7 @@ window.__ModuleLoader__.load({
23838
23765
  function truncate(value) {
23839
23766
  return value.length > 24 ? `${value.slice(0, 24)}…` : value;
23840
23767
  }
23841
- //#endregion
23842
- //#region src/client/peer-host-scoped-client.ts
23768
+ // src/client/peer-host-scoped-client.ts
23843
23769
  /** 根据当前 Host 自有端点生成作用域 WebSocket 工厂;不接受目标 Host URL。 */
23844
23770
  function createPeerHostWebSocketFactory(endpoint, options = {}) {
23845
23771
  if (!Number.isSafeInteger(endpoint.port) || endpoint.port < 0 || endpoint.port > 65535) throw new TypeError("PeerHost WebSocket 端口无效");
@@ -24207,8 +24133,7 @@ window.__ModuleLoader__.load({
24207
24133
  function currentLocationProtocol() {
24208
24134
  return globalThis.location?.protocol === "https:" ? "wss" : "ws";
24209
24135
  }
24210
- //#endregion
24211
- //#region src/client/cli-settings-rpc.ts
24136
+ // src/client/cli-settings-rpc.ts
24212
24137
  const CATALOG_ENDPOINTS = /* @__PURE__ */ new Set([
24213
24138
  "cli/catalog",
24214
24139
  "cli/catalog/refresh",
@@ -24287,8 +24212,7 @@ window.__ModuleLoader__.load({
24287
24212
  function asRecord$7(value) {
24288
24213
  return typeof value === "object" && value !== null && !Array.isArray(value) ? value : null;
24289
24214
  }
24290
- //#endregion
24291
- //#region src/client/peer-host-management-api.ts
24215
+ // src/client/peer-host-management-api.ts
24292
24216
  /** PeerHost 管理 RPC 封装;客户端不接受目标凭据字段。 */
24293
24217
  function createPeerHostManagementApi(rpc) {
24294
24218
  const call = async (endpoint, payload, signal) => {
@@ -24340,8 +24264,7 @@ window.__ModuleLoader__.load({
24340
24264
  diagnostics: () => call("peerHost/diagnostics", {})
24341
24265
  };
24342
24266
  }
24343
- //#endregion
24344
- //#region src/client/cli-management-terminal.ts
24267
+ // src/client/cli-management-terminal.ts
24345
24268
  /** Follow new output until the user scrolls up to inspect earlier lines. */
24346
24269
  function CliManagementTerminal({ operation, t }) {
24347
24270
  const viewport = (0, react.useRef)(null);
@@ -24437,8 +24360,7 @@ window.__ModuleLoader__.load({
24437
24360
  }
24438
24361
  }, operation.output || t(operation.state === "running" ? "cli.manage.waitingOutput" : "cli.manage.emptyOutput")));
24439
24362
  }
24440
- //#endregion
24441
- //#region src/client/cli-management-dialog.ts
24363
+ // src/client/cli-management-dialog.ts
24442
24364
  function cliManagementAction(adapter) {
24443
24365
  if (adapter.detectionState === "pending" || adapter.detectionState === "running" || adapter.detectionState === "error" || adapter.detectionFailure) return null;
24444
24366
  if (!adapter.installed) return "install";
@@ -24785,8 +24707,7 @@ window.__ModuleLoader__.load({
24785
24707
  whiteSpace: "pre-wrap"
24786
24708
  } }, state === "succeeded" ? t("cli.manage.succeeded", { version: operation.adapter?.version ?? "—" }) : operation.error ?? t(`cli.manage.${state}`))));
24787
24709
  }
24788
- //#endregion
24789
- //#region src/client/features/cli-adapters.ts
24710
+ // src/client/features/cli-adapters.ts
24790
24711
  const CLI_ADAPTER_STYLE_ID = "codingns4dsh-cli-adapter-settings-style";
24791
24712
  const cliAdapterClass = {
24792
24713
  panel: "codingns4dsh-cli-adapter-panel",
@@ -25668,8 +25589,7 @@ window.__ModuleLoader__.load({
25668
25589
  fontSize: uiFontSize(13)
25669
25590
  } }, t("cli.thinkingLevel", { value: model.efforts.length > 0 ? model.efforts.map((effort) => model.effortLabels?.[effort] ?? effort).join(t("common.listSeparator")) : t("cli.defaultEffort") })));
25670
25591
  }
25671
- //#endregion
25672
- //#region src/client/feature-requirement.ts
25592
+ // src/client/feature-requirement.ts
25673
25593
  /** Magpie 安装探测的 RPC 端点;设置卡片与模块面板共用一个探测结果。 */
25674
25594
  const MAGPIE_DETECTION_ENDPOINT = "magpie/management/detection";
25675
25595
  /**
@@ -25775,8 +25695,7 @@ window.__ModuleLoader__.load({
25775
25695
  function isRecord$12(value) {
25776
25696
  return typeof value === "object" && value !== null && !Array.isArray(value);
25777
25697
  }
25778
- //#endregion
25779
- //#region src/client/features/magpie-provider-logo.ts
25698
+ // src/client/features/magpie-provider-logo.ts
25780
25699
  function MagpieProviderLogo({ identities, logoDataUrl, size = 24, className = "codingns-magpie-provider-logo", fallback = "initial" }) {
25781
25700
  const identity = identities.find((value) => value !== void 0 && value !== null && value.trim() !== "");
25782
25701
  const hostLogo = logoDataUrl?.trim() ?? "";
@@ -25806,8 +25725,7 @@ window.__ModuleLoader__.load({
25806
25725
  function isHostImageAsset(dataUrl) {
25807
25726
  return /^data:image\/(?:png|jpe?g|gif|webp|x-icon|vnd\.microsoft\.icon)[;,]/u.test(dataUrl);
25808
25727
  }
25809
- //#endregion
25810
- //#region src/client/features/magpie-management-controls.ts
25728
+ // src/client/features/magpie-management-controls.ts
25811
25729
  /** Magpie's own names for routing-group policies; a value it does not name stays as returned. */
25812
25730
  const ROUTING_POLICY_LABELS = {
25813
25731
  smart: "magpie.management.routing.smart",
@@ -26872,8 +26790,7 @@ window.__ModuleLoader__.load({
26872
26790
  if (update.effort !== void 0) changes.push(t("magpie.management.reviewEffort", { value: update.effort === GROUP_EFFORT_AUTO ? t("magpie.management.reviewEffortAuto", { model: update.classifier ?? "" }) : t("magpie.management.effortAgent") }));
26873
26791
  return changes.join(" · ");
26874
26792
  }
26875
- //#endregion
26876
- //#region src/client/features/subscription-quota-groups.ts
26793
+ // src/client/features/subscription-quota-groups.ts
26877
26794
  /**
26878
26795
  * 按厂商分组,保持上游首次出现的顺序。
26879
26796
  *
@@ -27454,8 +27371,7 @@ window.__ModuleLoader__.load({
27454
27371
  }
27455
27372
  return null;
27456
27373
  }
27457
- //#endregion
27458
- //#region src/client/features/magpie-management-page.ts
27374
+ // src/client/features/magpie-management-page.ts
27459
27375
  const PERIODS = [
27460
27376
  {
27461
27377
  id: "today",
@@ -29280,8 +29196,7 @@ html[data-codingns-mobile-sidebar="on"] .codingns-magpie-page{padding-left:0;--m
29280
29196
  style.textContent = MAGPIE_PAGE_CSS;
29281
29197
  document.head.appendChild(style);
29282
29198
  }
29283
- //#endregion
29284
- //#region src/client/features/magpie-mark.ts
29199
+ // src/client/features/magpie-mark.ts
29285
29200
  /**
29286
29201
  * 侧栏入口使用的喜鹊剪影路径(viewBox 0 0 100 100,单条闭合轮廓,配合 `fill-rule="evenodd"`)。
29287
29202
  *
@@ -29291,8 +29206,7 @@ html[data-codingns-mobile-sidebar="on"] .codingns-magpie-page{padding-left:0;--m
29291
29206
  * 与 DSH 原生图标同色,也不依赖任何图标路由是否已重启生效。
29292
29207
  */
29293
29208
  const MAGPIE_MARK_PATH = "M2.36 11.50L3.78 11.50L7.56 13.39L10.87 15.91L14.17 19.21L18.43 25.35L22.36 34.17L25.51 39.53L29.76 44.25L32.60 46.14L35.43 47.40L36.85 47.40L37.95 46.77L51.81 36.69L54.02 34.33L56.38 30.87L61.57 21.10L65.67 17.17L69.13 15.28L71.34 14.65L74.17 14.49L77.64 14.65L80.00 15.28L83.94 17.32L87.40 20.31L88.66 20.94L90.39 20.94L95.12 22.20L99.69 24.41L100.00 25.04L99.53 25.35L92.60 26.46L88.82 27.72L85.98 29.92L84.88 31.97L84.72 35.91L85.35 37.95L88.50 44.09L88.50 45.04L89.13 46.30L89.76 50.39L89.76 56.06L88.50 62.36L86.61 67.40L83.46 73.07L80.94 76.54L76.06 81.42L72.13 84.25L69.45 85.67L61.89 88.19L54.02 88.50L48.50 87.56L43.62 85.67L38.43 82.52L28.66 74.96L24.41 73.07L19.84 72.28L22.05 70.08L24.57 68.82L25.51 68.82L25.98 68.35L25.67 68.03L24.09 68.03L21.89 68.66L17.17 70.71L17.01 70.24L18.11 68.03L20.63 64.09L25.98 57.80L25.20 57.01L23.31 58.43L19.37 51.97L15.43 48.03L4.57 40.94L1.26 37.17L0.00 33.39L0.00 31.81L0.31 31.65L4.57 34.17L9.76 38.11L10.55 37.95L10.08 37.01L4.57 32.76L2.36 30.55L0.47 27.09L0.00 25.20L0.16 21.26L1.42 21.73L8.82 29.45L9.61 28.82L5.51 24.09L2.36 19.21L1.42 15.43L1.73 12.13L2.20 11.65Z";
29294
- //#endregion
29295
- //#region src/client/features/magpie-management.ts
29209
+ // src/client/features/magpie-management.ts
29296
29210
  const MAGPIE_PANEL_ID = "codingns4dsh-magpie-management";
29297
29211
  /** Opt-in Magpie dashboard contributed to DSH's native global panel list. */
29298
29212
  const magpieManagementFeature = {
@@ -29497,8 +29411,7 @@ html[data-codingns-mobile-sidebar="on"] .codingns-magpie-page{padding-left:0;--m
29497
29411
  const time = Date.parse(value);
29498
29412
  return Number.isFinite(time) ? new Date(time).toLocaleTimeString() : value;
29499
29413
  }
29500
- //#endregion
29501
- //#region src/client/features/terminal-enhancement-panel.ts
29414
+ // src/client/features/terminal-enhancement-panel.ts
29502
29415
  const profileLabels = {
29503
29416
  system: "terminal.systemRecommended",
29504
29417
  zsh: "zsh",
@@ -29816,8 +29729,7 @@ html[data-codingns-mobile-sidebar="on"] .codingns-magpie-page{padding-left:0;--m
29816
29729
  fontSize: uiFontSize(12),
29817
29730
  lineHeight: 1
29818
29731
  };
29819
- //#endregion
29820
- //#region src/client/features/terminal-enhancement.ts
29732
+ // src/client/features/terminal-enhancement.ts
29821
29733
  /** “终端增强”只切换 backend;插件 controller 与 Sidebar UI 始终存在。 */
29822
29734
  const terminalEnhancementFeature = {
29823
29735
  descriptor: {
@@ -29827,6 +29739,12 @@ html[data-codingns-mobile-sidebar="on"] .codingns-magpie-page{padding-left:0;--m
29827
29739
  dependencies: [],
29828
29740
  runtime: "client",
29829
29741
  activation: "restart",
29742
+ nativeReplacement: {
29743
+ dshFeature: "@deepseek-ai/dsh-experimental-terminal-bundle",
29744
+ since: "0.2.2-alpha.2",
29745
+ coverage: "full",
29746
+ note: "DSH now bundles the native terminal surface and its settings path."
29747
+ },
29830
29748
  ui: {
29831
29749
  label: "Terminal enhancements",
29832
29750
  description: "Configure the default shell and terminal appearance. Enabling or disabling requires a DSH restart.",
@@ -29840,8 +29758,7 @@ html[data-codingns-mobile-sidebar="on"] .codingns-magpie-page{padding-left:0;--m
29840
29758
  start: () => void 0,
29841
29759
  settingsPanel: TerminalEnhancementPanel
29842
29760
  };
29843
- //#endregion
29844
- //#region src/client/native-workspace-store.ts
29761
+ // src/client/native-workspace-store.ts
29845
29762
  /**
29846
29763
  * 读取原生 Workspace 列表 Store 对象本身。
29847
29764
  *
@@ -29918,8 +29835,7 @@ html[data-codingns-mobile-sidebar="on"] .codingns-magpie-page{padding-left:0;--m
29918
29835
  function isRecord$11(value) {
29919
29836
  return typeof value === "object" && value !== null && !Array.isArray(value);
29920
29837
  }
29921
- //#endregion
29922
- //#region src/client/peer-host-aggregate-refresh.ts
29838
+ // src/client/peer-host-aggregate-refresh.ts
29923
29839
  let refresh;
29924
29840
  let refreshGeneration = 0;
29925
29841
  /** 注册当前页面的聚合刷新入口;返回取消注册。 */
@@ -29941,8 +29857,7 @@ html[data-codingns-mobile-sidebar="on"] .codingns-magpie-page{padding-left:0;--m
29941
29857
  function isPeerHostAggregateRefreshRegistered() {
29942
29858
  return refresh !== void 0;
29943
29859
  }
29944
- //#endregion
29945
- //#region src/client/workspace-session-fiber.ts
29860
+ // src/client/workspace-session-fiber.ts
29946
29861
  /** 从 DSH 侧栏会话行对应的 React Fiber 向上查找会话身份。 */
29947
29862
  function resolveDshSessionId(row) {
29948
29863
  const carrier = row;
@@ -29968,8 +29883,7 @@ html[data-codingns-mobile-sidebar="on"] .codingns-magpie-page{padding-left:0;--m
29968
29883
  function isRecord$10(value) {
29969
29884
  return typeof value === "object" && value !== null && !Array.isArray(value);
29970
29885
  }
29971
- //#endregion
29972
- //#region src/client/workspace-session-logo-dom.ts
29886
+ // src/client/workspace-session-logo-dom.ts
29973
29887
  const WORKSPACE_SESSION_ROW_SELECTOR = "[role=\"treeitem\"]";
29974
29888
  const WORKSPACE_SESSION_LOGO_ATTRIBUTE = "data-codingns-session-logo";
29975
29889
  /**
@@ -30078,8 +29992,7 @@ html[data-codingns-mobile-sidebar="on"] .codingns-magpie-page{padding-left:0;--m
30078
29992
  });
30079
29993
  return container;
30080
29994
  }
30081
- //#endregion
30082
- //#region src/client/workspace-session-archive-dom.ts
29995
+ // src/client/workspace-session-archive-dom.ts
30083
29996
  /** 归档入口和模态框节点使用的标记,便于重复扫描与停用时完整清理。 */
30084
29997
  const WORKSPACE_SESSION_ARCHIVE_ATTRIBUTE = "data-codingns-session-archive";
30085
29998
  const WORKSPACE_SESSION_ARCHIVE_MODAL_ATTRIBUTE = "data-codingns-session-archive-modal";
@@ -30826,8 +30739,7 @@ html[data-codingns-mobile-sidebar="on"] .codingns-magpie-page{padding-left:0;--m
30826
30739
  function isRecord$9(value) {
30827
30740
  return typeof value === "object" && value !== null && !Array.isArray(value);
30828
30741
  }
30829
- //#endregion
30830
- //#region src/client/workspace-session-visibility-dom.ts
30742
+ // src/client/workspace-session-visibility-dom.ts
30831
30743
  /** 工作区隐藏注入节点的标记,便于重复扫描和停用时完整清理。 */
30832
30744
  const WORKSPACE_SESSION_HIDDEN_ATTRIBUTE = "data-codingns-hidden-workspace";
30833
30745
  const WORKSPACE_SESSION_HIDDEN_MENU_ATTRIBUTE = "data-codingns-hidden-workspace-menu";
@@ -31412,8 +31324,7 @@ html[data-codingns-mobile-sidebar="on"] .codingns-magpie-page{padding-left:0;--m
31412
31324
  paddingTop: "4px",
31413
31325
  borderTop: "1px solid var(--dsw-alias-border-l3, rgba(128,128,128,.18))"
31414
31326
  };
31415
- //#endregion
31416
- //#region src/client/features/subscription-usage-panel.ts
31327
+ // src/client/features/subscription-usage-panel.ts
31417
31328
  /**
31418
31329
  * 用量查询设置对话框:单次查询超时与自动查询间隔。
31419
31330
  *
@@ -31570,8 +31481,7 @@ html[data-codingns-mobile-sidebar="on"] .codingns-magpie-page{padding-left:0;--m
31570
31481
  borderRadius: 6,
31571
31482
  fontSize: uiFontSize(13)
31572
31483
  };
31573
- //#endregion
31574
- //#region src/client/features/workspace-session-enhancement-panel.ts
31484
+ // src/client/features/workspace-session-enhancement-panel.ts
31575
31485
  /** 工作区会话增强的单列设置面板。 */
31576
31486
  function WorkspaceSessionEnhancementPanel({ services, enabled, snapshot, notify }) {
31577
31487
  const t = require_magpie_model_tag.useCodingNsTranslator(services.locale);
@@ -31715,8 +31625,7 @@ html[data-codingns-mobile-sidebar="on"] .codingns-magpie-page{padding-left:0;--m
31715
31625
  strokeWidth: 1.15
31716
31626
  }));
31717
31627
  }
31718
- //#endregion
31719
- //#region src/client/serial-polling.ts
31628
+ // src/client/serial-polling.ts
31720
31629
  /**
31721
31630
  * 完成后再计时,失败逐步退避;隐藏页面暂停,销毁时取消在途请求。
31722
31631
  * 手动刷新复用在途 Promise,避免慢 Host 上请求越积越多。
@@ -31775,8 +31684,7 @@ html[data-codingns-mobile-sidebar="on"] .codingns-magpie-page{padding-left:0;--m
31775
31684
  }
31776
31685
  };
31777
31686
  }
31778
- //#endregion
31779
- //#region src/client/cli-session-config-cache.ts
31687
+ // src/client/cli-session-config-cache.ts
31780
31688
  /** 会话配置在一次导航期间由多个 Slot 共同读取;共享短期快照即可消除重复 RPC。 */
31781
31689
  const SESSION_CONFIG_CACHE_TTL_MS = 5e3;
31782
31690
  const caches = /* @__PURE__ */ new WeakMap();
@@ -31826,8 +31734,7 @@ html[data-codingns-mobile-sidebar="on"] .codingns-magpie-page{padding-left:0;--m
31826
31734
  }
31827
31735
  return cache;
31828
31736
  }
31829
- //#endregion
31830
- //#region src/client/subscription-slot.ts
31737
+ // src/client/subscription-slot.ts
31831
31738
  const SUBSCRIPTION_STYLE_ID = "codingns4dsh-subscription-responsive-style";
31832
31739
  /**
31833
31740
  * 没有 locale 服务时的静态兜底:命名空间绑定固定指向内置中文词典,
@@ -34607,8 +34514,7 @@ html[data-codingns-mobile-sidebar="on"] .codingns-magpie-page{padding-left:0;--m
34607
34514
  function isStylable(element) {
34608
34515
  return element.style !== void 0;
34609
34516
  }
34610
- //#endregion
34611
- //#region src/client/quick-phrase-slot.ts
34517
+ // src/client/quick-phrase-slot.ts
34612
34518
  const QUICK_PHRASE_FALLBACK_SIZE = 28;
34613
34519
  const QUICK_PHRASE_FALLBACK_ICON_SIZE = 14;
34614
34520
  const QUICK_PHRASE_STYLE_ID = "codingns4dsh-quick-phrase-responsive-style";
@@ -35179,8 +35085,7 @@ html[data-codingns-mobile-sidebar="on"] .codingns-magpie-page{padding-left:0;--m
35179
35085
  textAlign: "center",
35180
35086
  fontSize: uiFontSize(13)
35181
35087
  };
35182
- //#endregion
35183
- //#region src/client/workspace-session-rightbar-dom.ts
35088
+ // src/client/workspace-session-rightbar-dom.ts
35184
35089
  /** 右侧栏宽度比例的本地存储键;宽度属于浏览器布局,不应同步到 Host。 */
35185
35090
  const WORKSPACE_RIGHTBAR_RATIO_STORAGE_KEY = "codingns4dsh.workspace.rightbar-ratio.v1";
35186
35091
  const RIGHTBAR_HANDLE_SELECTOR = "[data-side=\"rightbar\"], .workbench-side-resizer[data-side=\"right\"]";
@@ -35441,8 +35346,7 @@ html[data-codingns-mobile-sidebar="on"] .codingns-magpie-page{padding-left:0;--m
35441
35346
  function sharesMatch(left, right) {
35442
35347
  return Math.abs(left - right) < .002;
35443
35348
  }
35444
- //#endregion
35445
- //#region src/client/service-tier.ts
35349
+ // src/client/service-tier.ts
35446
35350
  /**
35447
35351
  * 服务档位(例如 Codex 官方订阅的 Fast)的展示与选择规则。
35448
35352
  *
@@ -35531,8 +35435,7 @@ html[data-codingns-mobile-sidebar="on"] .codingns-magpie-page{padding-left:0;--m
35531
35435
  if (current === void 0 || current === "") return void 0;
35532
35436
  return modelServiceTiers(model).some((tier) => tier.id === current) ? current : STANDARD_SERVICE_TIER_ID;
35533
35437
  }
35534
- //#endregion
35535
- //#region src/client/native-model-translation-menu.ts
35438
+ // src/client/native-model-translation-menu.ts
35536
35439
  /**
35537
35440
  * DSH 模型菜单尚无扩展插槽,通过原生触发器的 aria-controls 定位当前会话菜单。
35538
35441
  * 只添加翻译行的 Portal 容器,原生模型选择、思考强度和菜单交互继续由 DSH 管理。
@@ -35670,8 +35573,7 @@ html[data-codingns-mobile-sidebar="on"] .codingns-magpie-page{padding-left:0;--m
35670
35573
  const name = value.trim().replace(/\s+/gu, " ").toLocaleLowerCase("en-US");
35671
35574
  return name === "" ? null : name;
35672
35575
  }
35673
- //#endregion
35674
- //#region src/client/conversation-translation-settings.ts
35576
+ // src/client/conversation-translation-settings.ts
35675
35577
  const messageSettings = [
35676
35578
  ["inputEnabled", "cli.translationUserMessages"],
35677
35579
  ["reasoningEnabled", "cli.translationThinkingMessages"],
@@ -35731,18 +35633,8 @@ html[data-codingns-mobile-sidebar="on"] .codingns-magpie-page{padding-left:0;--m
35731
35633
  }
35732
35634
  }, error));
35733
35635
  }
35734
- //#endregion
35735
- //#region src/client/cli-slots.ts
35736
- var cli_slots_exports = /* @__PURE__ */ require_rolldown_runtime.__exportAll({
35737
- AgentSlot: () => AgentSlot,
35738
- ModelSlot: () => ModelSlot,
35739
- cliSessionSelectionRevision: () => cliSessionSelectionRevision,
35740
- modelMenuLeftOffset: () => modelMenuLeftOffset,
35741
- registerCliConversationSlots: () => registerCliConversationSlots,
35742
- useCliSessionTranslationEnabled: () => useCliSessionTranslationEnabled,
35743
- useCliSessionTranslationState: () => useCliSessionTranslationState,
35744
- waitForCliSessionSelection: () => waitForCliSessionSelection
35745
- });
35636
+ // src/client/cli-slots.ts
35637
+ var cli_slots_exports = /* @__PURE__ */ require_rolldown_runtime.__exportAll({ registerCliConversationSlots: () => registerCliConversationSlots });
35746
35638
  const claudeModelAliases = [
35747
35639
  "provider-default",
35748
35640
  "sonnet",
@@ -36973,8 +36865,7 @@ html[data-codingns-mobile-sidebar="on"] .codingns-magpie-page{padding-left:0;--m
36973
36865
  function isSessionLocked(session) {
36974
36866
  return session !== void 0 && (!session.blank || Boolean(session.promptAttempted) || Boolean(session.running) || (session.queue?.length ?? 0) > 0);
36975
36867
  }
36976
- //#endregion
36977
- //#region src/client/skill-reference-dom.ts
36868
+ // src/client/skill-reference-dom.ts
36978
36869
  /**
36979
36870
  * Skill 引用的视觉投影。
36980
36871
  *
@@ -37139,8 +37030,7 @@ html[data-codingns-mobile-sidebar="on"] .codingns-magpie-page{padding-left:0;--m
37139
37030
  ].join("");
37140
37031
  dom.head.appendChild(style);
37141
37032
  }
37142
- //#endregion
37143
- //#region src/client/skill-command.ts
37033
+ // src/client/skill-command.ts
37144
37034
  const SKILL_COMMAND_NAME = "skills";
37145
37035
  const SKILL_INPUT_SOURCE = "codingns-skills";
37146
37036
  const SKILL_CATALOG_CACHE_TTL_MS = 3e4;
@@ -37408,8 +37298,7 @@ html[data-codingns-mobile-sidebar="on"] .codingns-magpie-page{padding-left:0;--m
37408
37298
  return;
37409
37299
  }
37410
37300
  }
37411
- //#endregion
37412
- //#region src/client/features/workspace-session-enhancement.ts
37301
+ // src/client/features/workspace-session-enhancement.ts
37413
37302
  /** descriptor 的 label/description 只是词典缺失时的兜底,取内置中文词典。 */
37414
37303
  const fallbackT$4 = require_magpie_model_tag.resolveCodingNsTranslator();
37415
37304
  /** DSH 0.1.6 原生会话行增强:Logo 与归档会话入口共用同一生命周期。 */
@@ -37420,6 +37309,12 @@ html[data-codingns-mobile-sidebar="on"] .codingns-magpie-page{padding-left:0;--m
37420
37309
  enabledByDefault: false,
37421
37310
  dependencies: ["cliAdapters"],
37422
37311
  runtime: "client",
37312
+ nativeReplacement: {
37313
+ dshFeature: "DSH native session list, session search, plugin icons, and working-directory presentation",
37314
+ since: "0.2.2-alpha.2",
37315
+ coverage: "partial",
37316
+ note: "Native DSH now covers several session-list and navigation enhancements; plugin-specific workspace/archive presentation remains."
37317
+ },
37423
37318
  ui: {
37424
37319
  label: fallbackT$4("feature.workspaceSession.label"),
37425
37320
  description: fallbackT$4("feature.workspaceSession.description"),
@@ -37618,8 +37513,7 @@ html[data-codingns-mobile-sidebar="on"] .codingns-magpie-page{padding-left:0;--m
37618
37513
  },
37619
37514
  settingsPanel: WorkspaceSessionEnhancementPanel
37620
37515
  };
37621
- //#endregion
37622
- //#region src/client/mobile-sidebar-logo.ts
37516
+ // src/client/mobile-sidebar-logo.ts
37623
37517
  /**
37624
37518
  * DSH 官方品牌鲸鱼图形的几何数据。
37625
37519
  *
@@ -37637,8 +37531,7 @@ html[data-codingns-mobile-sidebar="on"] .codingns-magpie-page{padding-left:0;--m
37637
37531
  width: 23.16,
37638
37532
  height: 17.04
37639
37533
  };
37640
- //#endregion
37641
- //#region src/client/mobile-sidebar-rail-dom.ts
37534
+ // src/client/mobile-sidebar-rail-dom.ts
37642
37535
  /**
37643
37536
  * 移动端左侧边栏彻底隐藏器。
37644
37537
  *
@@ -37993,8 +37886,7 @@ html[data-codingns-mobile-sidebar="on"] .codingns-magpie-page{padding-left:0;--m
37993
37886
  if (typeof dom.documentElement.contains !== "function") return true;
37994
37887
  return dom.documentElement.contains(element);
37995
37888
  }
37996
- //#endregion
37997
- //#region src/client/mobile-vibration.ts
37889
+ // src/client/mobile-vibration.ts
37998
37890
  /** 尝试触发一次振动;返回 true 表示浏览器接受了调用。 */
37999
37891
  function vibrateMobile(pattern = 10, globalLike = globalThis) {
38000
37892
  const navigatorLike = globalLike.navigator;
@@ -38516,8 +38408,7 @@ html[data-codingns-mobile-sidebar="on"] .codingns-magpie-page{padding-left:0;--m
38516
38408
  }
38517
38409
  return now();
38518
38410
  }
38519
- //#endregion
38520
- //#region src/client/mobile-rightbar-tabs-dom.ts
38411
+ // src/client/mobile-rightbar-tabs-dom.ts
38521
38412
  /**
38522
38413
  * 移动端右栏标签条优先使用浏览器原生横向滚动。
38523
38414
  *
@@ -38601,8 +38492,7 @@ ${scope} [data-dockkit-strip-tabs] {
38601
38492
  }
38602
38493
  `;
38603
38494
  }
38604
- //#endregion
38605
- //#region src/client/mobile-settings-modal-dom.ts
38495
+ // src/client/mobile-settings-modal-dom.ts
38606
38496
  /**
38607
38497
  * DSH 设置弹窗的移动端布局适配。
38608
38498
  *
@@ -38727,8 +38617,7 @@ ${scope} [data-dockkit-strip-tabs] {
38727
38617
  `[${MOBILE_SETTINGS_MODAL_ATTRIBUTE}="on"]>div{box-sizing:border-box!important;min-width:0!important;flex:1 1 auto!important;width:auto!important}`,
38728
38618
  `[${MOBILE_SETTINGS_MODAL_ATTRIBUTE}="on"]>div>div:last-child{box-sizing:border-box!important;min-width:0!important;width:100%!important;padding-left:8px!important;padding-right:8px!important}`
38729
38619
  ].join("");
38730
- //#endregion
38731
- //#region src/client/mobile-team-panel-dom.ts
38620
+ // src/client/mobile-team-panel-dom.ts
38732
38621
  const PANEL = "[data-team-panel][role=\"dialog\"]";
38733
38622
  const MOBILE = "data-codingns-mobile-team";
38734
38623
  const HEADER = "data-codingns-team-header";
@@ -38888,8 +38777,7 @@ ${SCOPE} article>div:last-child { display:flex; flex-wrap:wrap; align-items:cent
38888
38777
  ${SCOPE} article>div:last-child>span { min-width:0; max-width:100%; margin-right:0!important; overflow-wrap:anywhere; }
38889
38778
  ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-height:36px; margin-left:auto!important; padding:6px!important; touch-action:manipulation; }
38890
38779
  `;
38891
- //#endregion
38892
- //#region src/client/features/mobile-access-panel.ts
38780
+ // src/client/features/mobile-access-panel.ts
38893
38781
  /**
38894
38782
  * 移动端访问增强的单列设置面板。
38895
38783
  *
@@ -39302,8 +39190,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
39302
39190
  if (!response.ok) throw new Error(response.error.message);
39303
39191
  return response.value;
39304
39192
  }
39305
- //#endregion
39306
- //#region src/client/features/mobile-access.ts
39193
+ // src/client/features/mobile-access.ts
39307
39194
  /** descriptor 的 label/description 只是词典缺失时的兜底,取内置中文词典。 */
39308
39195
  const fallbackT$3 = require_magpie_model_tag.resolveCodingNsTranslator();
39309
39196
  /**
@@ -39386,8 +39273,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
39386
39273
  },
39387
39274
  settingsPanel: MobileAccessPanel
39388
39275
  };
39389
- //#endregion
39390
- //#region src/client/debug/ui.ts
39276
+ // src/client/debug/ui.ts
39391
39277
  const DEBUG_KIND = "debug";
39392
39278
  const DEBUG_PROVIDER_ID = "codingns4dsh/debug";
39393
39279
  const PORT_CHECK_INTERVAL_MS = 5e3;
@@ -40477,8 +40363,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
40477
40363
  function createProfileId() {
40478
40364
  return `debug-${(typeof globalThis.crypto?.randomUUID === "function" ? globalThis.crypto.randomUUID() : `${Date.now()}-${Math.random().toString(16).slice(2)}`).slice(0, 12)}`;
40479
40365
  }
40480
- //#endregion
40481
- //#region src/client/features/debug.ts
40366
+ // src/client/features/debug.ts
40482
40367
  /** 工作区调试面板模块;开关关闭时同时移除 Sidebar 标签和注入内容。 */
40483
40368
  const debugFeature = {
40484
40369
  descriptor: {
@@ -40502,8 +40387,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
40502
40387
  context.resources.add(registerDebugUi(uiContext, context.services.rpc, context.services.remote, context.services.terminalRemote, context.services.locale));
40503
40388
  }
40504
40389
  };
40505
- //#endregion
40506
- //#region src/client/model-priority-pool.ts
40390
+ // src/client/model-priority-pool.ts
40507
40391
  /** The persisted pool owns priority; modal choices and drag previews remain local until confirmed. */
40508
40392
  function ModelPriorityPool({ models: pool, catalog, disabled, pending, t, onChange, titleKey = "translation.modelTitle", pickerTitleKey = "translation.modelPickerTitle", helpKey = "translation.modelHelp", saveRejectedKey = "translation.saveRejected" }) {
40509
40393
  const available = new Map((catalog?.models ?? []).filter((model) => !isSessionTranslationAdapter(model.provider)).map((model) => [modelKey(model), model]));
@@ -40881,8 +40765,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
40881
40765
  .codingns-translation-picker-count{margin-right:auto}
40882
40766
  @media(max-width:480px){.codingns-translation-pool-row{gap:6px;padding-right:8px}.codingns-translation-pool-unavailable{max-width:70px}.codingns-translation-picker-choice{padding:10px}}
40883
40767
  `;
40884
- //#endregion
40885
- //#region src/client/git-management-settings.ts
40768
+ // src/client/git-management-settings.ts
40886
40769
  function GitManagementSettingsPanel({ services, enabled, snapshot, notify }) {
40887
40770
  const t = require_magpie_model_tag.useCodingNsTranslator(services.locale);
40888
40771
  const value = normalizeGitManagementSettings(snapshot.value?.gitManagement);
@@ -41008,8 +40891,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
41008
40891
  }
41009
40892
  }, t(saving ? "git.messagePromptSaving" : "git.messagePromptSave")))));
41010
40893
  }
41011
- //#endregion
41012
- //#region src/client/git-history-graph.ts
40894
+ // src/client/git-history-graph.ts
41013
40895
  /**
41014
40896
  * 版本列表左侧提交图的泳道布局。
41015
40897
  *
@@ -41216,8 +41098,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
41216
41098
  function laneCenterX(lane) {
41217
41099
  return lane * 12 + 6;
41218
41100
  }
41219
- //#endregion
41220
- //#region src/client/git-panel-styles.ts
41101
+ // src/client/git-panel-styles.ts
41221
41102
  const STYLE_ID$3 = "codingns4dsh-git-panel";
41222
41103
  /**
41223
41104
  * Git 面板的交互态类名。
@@ -41324,8 +41205,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
41324
41205
  @keyframes codingns4dsh-git-spin{to{transform:rotate(360deg)}}
41325
41206
  @media (prefers-reduced-motion: reduce){.${gitPanelClass.row}{transition:none}.${gitPanelClass.segmentedIndicator},.${gitPanelClass.segment}{transition:none}.${gitPanelClass.progress}{animation:none}}
41326
41207
  `;
41327
- //#endregion
41328
- //#region src/client/git-workspace-events.ts
41208
+ // src/client/git-workspace-events.ts
41329
41209
  const listenersByWorkspace = /* @__PURE__ */ new Map();
41330
41210
  /** 订阅一个工作区的 Git 状态变化;返回幂等取消函数。 */
41331
41211
  function subscribeGitWorkspaceChanged(workspaceId, listener) {
@@ -41352,8 +41232,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
41352
41232
  function normalizeWorkspaceId$1(value) {
41353
41233
  return value.trim();
41354
41234
  }
41355
- //#endregion
41356
- //#region src/client/git-management.ts
41235
+ // src/client/git-management.ts
41357
41236
  function SegmentedControl({ id, value, options, onChange, label, disabled }) {
41358
41237
  const index = Math.max(0, options.findIndex((option) => option.value === value));
41359
41238
  return (0, react.createElement)("div", {
@@ -43599,6 +43478,12 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
43599
43478
  enabledByDefault: true,
43600
43479
  dependencies: [],
43601
43480
  runtime: "client",
43481
+ nativeReplacement: {
43482
+ dshFeature: "@deepseek-ai/dsh-experimental-tool-worktree change requests",
43483
+ since: "0.2.2-alpha.2",
43484
+ coverage: "partial",
43485
+ note: "Native worktrees and change requests overlap the repository panel only for isolated change workflows."
43486
+ },
43602
43487
  ui: {
43603
43488
  label: "Git repository management",
43604
43489
  labelKey: "feature.gitManagement.label",
@@ -43620,8 +43505,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
43620
43505
  },
43621
43506
  settingsPanel: GitManagementSettingsPanel
43622
43507
  };
43623
- //#endregion
43624
- //#region src/client/engine-loader.ts
43508
+ // src/client/engine-loader.ts
43625
43509
  /** 合并并发加载;失败后清除 Promise,让用户下次操作能重新下载分块。 */
43626
43510
  function createEngineLoader(load) {
43627
43511
  let pending;
@@ -43652,8 +43536,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
43652
43536
  });
43653
43537
  return dispose;
43654
43538
  }
43655
- //#endregion
43656
- //#region src/client/file-management-dom.ts
43539
+ // src/client/file-management-dom.ts
43657
43540
  const DOCUMENT_PREVIEW_SELECTOR = "[data-document-preview]";
43658
43541
  const FILE_TREE_ENTRY_SELECTOR = "[data-files-entry][data-files-path]";
43659
43542
  const PREVIEW_PATH_SELECTOR = "[data-textpreview-path]";
@@ -44434,8 +44317,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
44434
44317
  document.body.append(notice);
44435
44318
  globalThis.setTimeout(() => notice.remove(), 2200);
44436
44319
  }
44437
- //#endregion
44438
- //#region src/client/features/file-management-panel.ts
44320
+ // src/client/features/file-management-panel.ts
44439
44321
  /** 文件管理增强的独立能力开关面板。 */
44440
44322
  function FileManagementPanel({ services, enabled, snapshot, notify }) {
44441
44323
  const t = require_magpie_model_tag.useCodingNsTranslator(services.locale);
@@ -44489,8 +44371,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
44489
44371
  onChange
44490
44372
  });
44491
44373
  }
44492
- //#endregion
44493
- //#region src/client/session-changed-files-view.ts
44374
+ // src/client/session-changed-files-view.ts
44494
44375
  const SESSION_CHANGED_FILES_VIEW_ID = "codingns4dsh/session-changed-files";
44495
44376
  /** 后台轮询只负责兜底发现外部文件变化,不能和页面交互争夺刷新节奏。 */
44496
44377
  const SESSION_CHANGED_FILES_BACKGROUND_REFRESH_MS = 3e4;
@@ -45346,8 +45227,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
45346
45227
  background: "rgba(220,38,38,.12)"
45347
45228
  };
45348
45229
  const diffContextLineStyle = { display: "block" };
45349
- //#endregion
45350
- //#region src/client/file-viewer-copy-path-menu.ts
45230
+ // src/client/file-viewer-copy-path-menu.ts
45351
45231
  const FILE_VIEWER_COPY_PATH_MENU_ID = "codingns4dsh-copy-file-path";
45352
45232
  /** 标签菜单 extras 在单测或 Slot 未注入 locale 时退回内置中文词典。 */
45353
45233
  const FALLBACK_LOCALE = {
@@ -45438,8 +45318,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
45438
45318
  function cssAttribute(value) {
45439
45319
  return value.replaceAll("\\", "\\\\").replaceAll("\"", "\\\"");
45440
45320
  }
45441
- //#endregion
45442
- //#region src/client/html-workspace-files.ts
45321
+ // src/client/html-workspace-files.ts
45443
45322
  const REQUEST = "codingns.html-files.request.v1";
45444
45323
  const RESPONSE = "codingns.html-files.response.v1";
45445
45324
  const OPERATIONS = /* @__PURE__ */ new Set([
@@ -45584,8 +45463,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
45584
45463
  window.removeEventListener("message", onMessage);
45585
45464
  };
45586
45465
  }
45587
- //#endregion
45588
- //#region src/client/features/file-management.ts
45466
+ // src/client/features/file-management.ts
45589
45467
  /** descriptor 的 label/description 只是词典缺失时的兜底,取内置中文词典。 */
45590
45468
  const fallbackT$2 = require_magpie_model_tag.resolveCodingNsTranslator();
45591
45469
  /** 文件管理增强:只在模块启用期间挂载右键菜单和文本编辑器。 */
@@ -45596,6 +45474,12 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
45596
45474
  enabledByDefault: false,
45597
45475
  dependencies: [],
45598
45476
  runtime: "client",
45477
+ nativeReplacement: {
45478
+ dshFeature: "DSH native file delivery, image upload, and drag-and-drop",
45479
+ since: "0.2.2-alpha.2",
45480
+ coverage: "partial",
45481
+ note: "Native delivery replaces the file-transfer subset; the plugin still owns its editor, HTML workspace, and change-management surfaces."
45482
+ },
45599
45483
  ui: {
45600
45484
  label: fallbackT$2("feature.fileManagement.label"),
45601
45485
  description: fallbackT$2("feature.fileManagement.description"),
@@ -45658,8 +45542,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
45658
45542
  },
45659
45543
  settingsPanel: FileManagementPanel
45660
45544
  };
45661
- //#endregion
45662
- //#region src/shared/contracts/quick-apps.ts
45545
+ // src/shared/contracts/quick-apps.ts
45663
45546
  const QUICK_APP_RUNTIME_REASONS = [
45664
45547
  "not-configured",
45665
45548
  "config-invalid",
@@ -45678,8 +45561,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
45678
45561
  shortcuts: 200,
45679
45562
  lifetimeMs: 18e5
45680
45563
  });
45681
- //#endregion
45682
- //#region src/client/quick-apps/client.ts
45564
+ // src/client/quick-apps/client.ts
45683
45565
  /** The controlling Host keeps metadata; no active conversation or browser storage is consulted. */
45684
45566
  var QuickAppsClient = class {
45685
45567
  rpc;
@@ -45758,8 +45640,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
45758
45640
  if (id) await this.call("close", { id });
45759
45641
  }
45760
45642
  };
45761
- //#endregion
45762
- //#region src/shared/quick-app-network-allow.ts
45643
+ // src/shared/quick-app-network-allow.ts
45763
45644
  const RANGES = [
45764
45645
  ["0.0.0.0", 8],
45765
45646
  ["10.0.0.0", 8],
@@ -45928,8 +45809,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
45928
45809
  function invalid() {
45929
45810
  return /* @__PURE__ */ new Error("Invalid local network allow list.");
45930
45811
  }
45931
- //#endregion
45932
- //#region src/client/quick-apps/presentation.ts
45812
+ // src/client/quick-apps/presentation.ts
45933
45813
  function newQuickAppDraft(order) {
45934
45814
  return {
45935
45815
  id: "",
@@ -45992,8 +45872,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
45992
45872
  }
45993
45873
  };
45994
45874
  }
45995
- //#endregion
45996
- //#region src/client/quick-apps/ui.ts
45875
+ // src/client/quick-apps/ui.ts
45997
45876
  /** Content atoms follow CodingNS ModalAtoms; DSH retains the portal and focus lifecycle. */
45998
45877
  function QuickAppField({ id, label, help, error, children }) {
45999
45878
  return (0, react.createElement)("div", { className: "qa-field" }, (0, react.createElement)("label", { htmlFor: id }, label), children, error ? (0, react.createElement)("span", {
@@ -46037,8 +45916,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
46037
45916
  "aria-hidden": true
46038
45917
  }, (0, react.createElement)("path", { d: path }));
46039
45918
  }
46040
- //#endregion
46041
- //#region src/client/quick-apps/styles.ts
45919
+ // src/client/quick-apps/styles.ts
46042
45920
  /** Parent ModalAtoms/shortcut-rail layout, scoped to this plugin and mapped to DSH theme tokens. */
46043
45921
  const quickAppsCss = `
46044
45922
  .codingns-quick-app-rail{width:100%;min-width:0;margin:0 0 6px;color:${dshThemeColor.labelPrimary};font-size:${uiFontSize(12)}}
@@ -46189,8 +46067,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
46189
46067
  .codingns-quick-app-dialog .qa-file-input .qa-browse{min-height:36px}
46190
46068
  }
46191
46069
  `;
46192
- //#endregion
46193
- //#region src/client/quick-apps/workspace-picker.ts
46070
+ // src/client/quick-apps/workspace-picker.ts
46194
46071
  const workspaceChoiceId = (workspace) => JSON.stringify([workspace.hostId ?? "local", workspace.workspaceId]);
46195
46072
  /** The native menu owns placement, keyboard navigation and focus return. IDs never depend on list order. */
46196
46073
  function QuickAppWorkspacePicker({ workspaces, hostId, workspaceId, disabled, error, t, onSelect }) {
@@ -46251,8 +46128,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
46251
46128
  role: "alert"
46252
46129
  }, error) : null);
46253
46130
  }
46254
- //#endregion
46255
- //#region src/client/quick-apps/file-picker.ts
46131
+ // src/client/quick-apps/file-picker.ts
46256
46132
  /** A selection dialog over the native Host directory service, independent of conversation tabs. */
46257
46133
  function QuickAppFilePicker({ client, workspace, value, t, onSelect, onClose }) {
46258
46134
  const [path, setPath] = (0, react.useState)(value.includes("/") ? value.slice(0, value.lastIndexOf("/")) : "");
@@ -46374,8 +46250,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
46374
46250
  role: "status"
46375
46251
  }, selected || t("quickApps.selectFileHint"))));
46376
46252
  }
46377
- //#endregion
46378
- //#region node_modules/.pnpm/mdast-util-to-string@4.0.0/node_modules/mdast-util-to-string/lib/index.js
46253
+ // node_modules/.pnpm/mdast-util-to-string@4.0.0/node_modules/mdast-util-to-string/lib/index.js
46379
46254
  /**
46380
46255
  * @typedef {import('mdast').Nodes} Nodes
46381
46256
  *
@@ -46456,8 +46331,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
46456
46331
  function node$1(value) {
46457
46332
  return Boolean(value && typeof value === "object");
46458
46333
  }
46459
- //#endregion
46460
- //#region node_modules/.pnpm/character-entities@2.0.2/node_modules/character-entities/index.js
46334
+ // node_modules/.pnpm/character-entities@2.0.2/node_modules/character-entities/index.js
46461
46335
  /**
46462
46336
  * Map of named character references.
46463
46337
  *
@@ -48590,8 +48464,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
48590
48464
  zwj: "‍",
48591
48465
  zwnj: "‌"
48592
48466
  };
48593
- //#endregion
48594
- //#region node_modules/.pnpm/decode-named-character-reference@1.3.0/node_modules/decode-named-character-reference/index.js
48467
+ // node_modules/.pnpm/decode-named-character-reference@1.3.0/node_modules/decode-named-character-reference/index.js
48595
48468
  const own$2 = {}.hasOwnProperty;
48596
48469
  /**
48597
48470
  * Decode a single character reference (without the `&` or `;`).
@@ -48607,8 +48480,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
48607
48480
  function decodeNamedCharacterReference(value) {
48608
48481
  return own$2.call(characterEntities, value) ? characterEntities[value] : false;
48609
48482
  }
48610
- //#endregion
48611
- //#region node_modules/.pnpm/micromark-util-chunked@2.0.1/node_modules/micromark-util-chunked/index.js
48483
+ // node_modules/.pnpm/micromark-util-chunked@2.0.1/node_modules/micromark-util-chunked/index.js
48612
48484
  /**
48613
48485
  * Like `Array#splice`, but smarter for giant arrays.
48614
48486
  *
@@ -48677,8 +48549,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
48677
48549
  }
48678
48550
  return items;
48679
48551
  }
48680
- //#endregion
48681
- //#region node_modules/.pnpm/micromark-util-combine-extensions@2.0.1/node_modules/micromark-util-combine-extensions/index.js
48552
+ // node_modules/.pnpm/micromark-util-combine-extensions@2.0.1/node_modules/micromark-util-combine-extensions/index.js
48682
48553
  /**
48683
48554
  * @import {
48684
48555
  * Extension,
@@ -48748,8 +48619,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
48748
48619
  while (++index < list.length) (list[index].add === "after" ? existing : before).push(list[index]);
48749
48620
  splice(existing, 0, 0, before);
48750
48621
  }
48751
- //#endregion
48752
- //#region node_modules/.pnpm/micromark-util-decode-numeric-character-reference@2.0.2/node_modules/micromark-util-decode-numeric-character-reference/index.js
48622
+ // node_modules/.pnpm/micromark-util-decode-numeric-character-reference@2.0.2/node_modules/micromark-util-decode-numeric-character-reference/index.js
48753
48623
  /**
48754
48624
  * Turn the number (in string form as either hexa- or plain decimal) coming from
48755
48625
  * a numeric character reference into a character.
@@ -48769,8 +48639,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
48769
48639
  if (code < 9 || code === 11 || code > 13 && code < 32 || code > 126 && code < 160 || code > 55295 && code < 57344 || code > 64975 && code < 65008 || (code & 65535) === 65535 || (code & 65535) === 65534 || code > 1114111) return "�";
48770
48640
  return String.fromCodePoint(code);
48771
48641
  }
48772
- //#endregion
48773
- //#region node_modules/.pnpm/micromark-util-normalize-identifier@2.0.1/node_modules/micromark-util-normalize-identifier/index.js
48642
+ // node_modules/.pnpm/micromark-util-normalize-identifier@2.0.1/node_modules/micromark-util-normalize-identifier/index.js
48774
48643
  /**
48775
48644
  * Normalize an identifier (as found in references, definitions).
48776
48645
  *
@@ -48793,8 +48662,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
48793
48662
  function normalizeIdentifier(value) {
48794
48663
  return value.replace(/[\t\n\r ]+/g, " ").replace(/^ | $/g, "").toLowerCase().toUpperCase();
48795
48664
  }
48796
- //#endregion
48797
- //#region node_modules/.pnpm/micromark-util-character@2.1.1/node_modules/micromark-util-character/index.js
48665
+ // node_modules/.pnpm/micromark-util-character@2.1.1/node_modules/micromark-util-character/index.js
48798
48666
  /**
48799
48667
  * @import {Code} from 'micromark-util-types'
48800
48668
  */
@@ -49021,8 +48889,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
49021
48889
  return code !== null && code > -1 && regex.test(String.fromCharCode(code));
49022
48890
  }
49023
48891
  }
49024
- //#endregion
49025
- //#region node_modules/.pnpm/micromark-factory-space@2.1.0/node_modules/micromark-factory-space/index.js
48892
+ // node_modules/.pnpm/micromark-factory-space@2.1.0/node_modules/micromark-factory-space/index.js
49026
48893
  /**
49027
48894
  * @import {Effects, State, TokenType} from 'micromark-util-types'
49028
48895
  */
@@ -49128,8 +48995,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
49128
48995
  return size >= min ? ok(code) : nok(code);
49129
48996
  }
49130
48997
  }
49131
- //#endregion
49132
- //#region node_modules/.pnpm/micromark@4.0.3/node_modules/micromark/lib/initialize/content.js
48998
+ // node_modules/.pnpm/micromark@4.0.3/node_modules/micromark/lib/initialize/content.js
49133
48999
  /**
49134
49000
  * @import {
49135
49001
  * InitialConstruct,
@@ -49195,8 +49061,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
49195
49061
  return data;
49196
49062
  }
49197
49063
  }
49198
- //#endregion
49199
- //#region node_modules/.pnpm/micromark-util-edit-map@1.0.0/node_modules/micromark-util-edit-map/index.js
49064
+ // node_modules/.pnpm/micromark-util-edit-map@1.0.0/node_modules/micromark-util-edit-map/index.js
49200
49065
  /**
49201
49066
  * @import {Event} from 'micromark-util-types'
49202
49067
  */
@@ -49341,8 +49206,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
49341
49206
  editMap.map.push(change);
49342
49207
  editMap.index.set(at, change);
49343
49208
  }
49344
- //#endregion
49345
- //#region node_modules/.pnpm/micromark@4.0.3/node_modules/micromark/lib/initialize/document.js
49209
+ // node_modules/.pnpm/micromark@4.0.3/node_modules/micromark/lib/initialize/document.js
49346
49210
  /**
49347
49211
  * @import {
49348
49212
  * Construct,
@@ -49561,8 +49425,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
49561
49425
  function tokenizeContainer(effects, ok, nok) {
49562
49426
  return factorySpace(effects, effects.attempt(this.parser.constructs.document, ok, nok), "linePrefix", this.parser.constructs.disable.null.includes("codeIndented") ? void 0 : 4);
49563
49427
  }
49564
- //#endregion
49565
- //#region node_modules/.pnpm/micromark-util-classify-character@2.0.1/node_modules/micromark-util-classify-character/index.js
49428
+ // node_modules/.pnpm/micromark-util-classify-character@2.0.1/node_modules/micromark-util-classify-character/index.js
49566
49429
  /**
49567
49430
  * @import {Code} from 'micromark-util-types'
49568
49431
  */
@@ -49584,8 +49447,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
49584
49447
  if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) return 1;
49585
49448
  if (unicodePunctuation(code)) return 2;
49586
49449
  }
49587
- //#endregion
49588
- //#region node_modules/.pnpm/micromark-util-resolve-all@2.0.1/node_modules/micromark-util-resolve-all/index.js
49450
+ // node_modules/.pnpm/micromark-util-resolve-all@2.0.1/node_modules/micromark-util-resolve-all/index.js
49589
49451
  /**
49590
49452
  * @import {Event, Resolver, TokenizeContext} from 'micromark-util-types'
49591
49453
  */
@@ -49614,8 +49476,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
49614
49476
  }
49615
49477
  return events;
49616
49478
  }
49617
- //#endregion
49618
- //#region node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/attention.js
49479
+ // node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/attention.js
49619
49480
  /**
49620
49481
  * @import {
49621
49482
  * Code,
@@ -49822,8 +49683,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
49822
49683
  point.offset += offset;
49823
49684
  point._bufferIndex += offset;
49824
49685
  }
49825
- //#endregion
49826
- //#region node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/autolink.js
49686
+ // node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/autolink.js
49827
49687
  /**
49828
49688
  * @import {
49829
49689
  * Construct,
@@ -50033,8 +49893,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
50033
49893
  return nok(code);
50034
49894
  }
50035
49895
  }
50036
- //#endregion
50037
- //#region node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/blank-line.js
49896
+ // node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/blank-line.js
50038
49897
  /**
50039
49898
  * @import {
50040
49899
  * Construct,
@@ -50090,8 +49949,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
50090
49949
  return code === null || markdownLineEnding(code) ? ok(code) : nok(code);
50091
49950
  }
50092
49951
  }
50093
- //#endregion
50094
- //#region node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/block-quote.js
49952
+ // node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/block-quote.js
50095
49953
  /**
50096
49954
  * @import {
50097
49955
  * Construct,
@@ -50217,8 +50075,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
50217
50075
  function exit(effects) {
50218
50076
  effects.exit("blockQuote");
50219
50077
  }
50220
- //#endregion
50221
- //#region node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/character-escape.js
50078
+ // node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/character-escape.js
50222
50079
  /**
50223
50080
  * @import {
50224
50081
  * Construct,
@@ -50277,8 +50134,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
50277
50134
  return nok(code);
50278
50135
  }
50279
50136
  }
50280
- //#endregion
50281
- //#region node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/character-reference.js
50137
+ // node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/character-reference.js
50282
50138
  /**
50283
50139
  * @import {
50284
50140
  * Code,
@@ -50415,8 +50271,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
50415
50271
  return nok(code);
50416
50272
  }
50417
50273
  }
50418
- //#endregion
50419
- //#region node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/partial-non-lazy-continuation.js
50274
+ // node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/partial-non-lazy-continuation.js
50420
50275
  /** @type {Construct} */
50421
50276
  const nonLazyContinuation = {
50422
50277
  partial: true,
@@ -50463,8 +50318,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
50463
50318
  return self.parser.lazy[self.now().line] ? nok(code) : ok(code);
50464
50319
  }
50465
50320
  }
50466
- //#endregion
50467
- //#region node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/code-fenced.js
50321
+ // node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/code-fenced.js
50468
50322
  /**
50469
50323
  * @import {
50470
50324
  * Code,
@@ -50844,8 +50698,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
50844
50698
  }
50845
50699
  }
50846
50700
  }
50847
- //#endregion
50848
- //#region node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/code-indented.js
50701
+ // node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/code-indented.js
50849
50702
  /**
50850
50703
  * @import {
50851
50704
  * Construct,
@@ -50976,8 +50829,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
50976
50829
  return markdownLineEnding(code) ? furtherStart(code) : nok(code);
50977
50830
  }
50978
50831
  }
50979
- //#endregion
50980
- //#region node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/code-text.js
50832
+ // node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/code-text.js
50981
50833
  /**
50982
50834
  * @import {
50983
50835
  * Construct,
@@ -51161,8 +51013,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
51161
51013
  return data(code);
51162
51014
  }
51163
51015
  }
51164
- //#endregion
51165
- //#region node_modules/.pnpm/micromark-util-subtokenize@2.1.0/node_modules/micromark-util-subtokenize/lib/splice-buffer.js
51016
+ // node_modules/.pnpm/micromark-util-subtokenize@2.1.0/node_modules/micromark-util-subtokenize/lib/splice-buffer.js
51166
51017
  /**
51167
51018
  * Some of the internal operations of micromark do lots of editing
51168
51019
  * operations on very large arrays. This runs into problems with two
@@ -51391,8 +51242,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
51391
51242
  chunkStart += 1e4;
51392
51243
  }
51393
51244
  }
51394
- //#endregion
51395
- //#region node_modules/.pnpm/micromark-util-subtokenize@2.1.0/node_modules/micromark-util-subtokenize/index.js
51245
+ // node_modules/.pnpm/micromark-util-subtokenize@2.1.0/node_modules/micromark-util-subtokenize/index.js
51396
51246
  /**
51397
51247
  * @import {Chunk, Event, Token} from 'micromark-util-types'
51398
51248
  */
@@ -51546,8 +51396,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
51546
51396
  }
51547
51397
  return gaps;
51548
51398
  }
51549
- //#endregion
51550
- //#region node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/content.js
51399
+ // node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/content.js
51551
51400
  /**
51552
51401
  * @import {
51553
51402
  * Construct,
@@ -51679,8 +51528,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
51679
51528
  return effects.interrupt(self.parser.constructs.flow, nok, ok)(code);
51680
51529
  }
51681
51530
  }
51682
- //#endregion
51683
- //#region node_modules/.pnpm/micromark-factory-destination@2.0.1/node_modules/micromark-factory-destination/index.js
51531
+ // node_modules/.pnpm/micromark-factory-destination@2.0.1/node_modules/micromark-factory-destination/index.js
51684
51532
  /**
51685
51533
  * @import {Effects, State, TokenType} from 'micromark-util-types'
51686
51534
  */
@@ -51863,8 +51711,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
51863
51711
  return raw(code);
51864
51712
  }
51865
51713
  }
51866
- //#endregion
51867
- //#region node_modules/.pnpm/micromark-factory-label@2.0.1/node_modules/micromark-factory-label/index.js
51714
+ // node_modules/.pnpm/micromark-factory-label@2.0.1/node_modules/micromark-factory-label/index.js
51868
51715
  /**
51869
51716
  * @import {
51870
51717
  * Effects,
@@ -51997,8 +51844,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
51997
51844
  return labelInside(code);
51998
51845
  }
51999
51846
  }
52000
- //#endregion
52001
- //#region node_modules/.pnpm/micromark-factory-title@2.0.1/node_modules/micromark-factory-title/index.js
51847
+ // node_modules/.pnpm/micromark-factory-title@2.0.1/node_modules/micromark-factory-title/index.js
52002
51848
  /**
52003
51849
  * @import {
52004
51850
  * Code,
@@ -52142,8 +51988,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
52142
51988
  return inside(code);
52143
51989
  }
52144
51990
  }
52145
- //#endregion
52146
- //#region node_modules/.pnpm/micromark-factory-whitespace@2.0.1/node_modules/micromark-factory-whitespace/index.js
51991
+ // node_modules/.pnpm/micromark-factory-whitespace@2.0.1/node_modules/micromark-factory-whitespace/index.js
52147
51992
  /**
52148
51993
  * @import {Effects, State} from 'micromark-util-types'
52149
51994
  */
@@ -52182,8 +52027,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
52182
52027
  return ok(code);
52183
52028
  }
52184
52029
  }
52185
- //#endregion
52186
- //#region node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/definition.js
52030
+ // node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/definition.js
52187
52031
  /**
52188
52032
  * @import {
52189
52033
  * Construct,
@@ -52397,8 +52241,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
52397
52241
  return code === null || markdownLineEnding(code) ? ok(code) : nok(code);
52398
52242
  }
52399
52243
  }
52400
- //#endregion
52401
- //#region node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/hard-break-escape.js
52244
+ // node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/hard-break-escape.js
52402
52245
  /**
52403
52246
  * @import {
52404
52247
  * Construct,
@@ -52454,8 +52297,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
52454
52297
  return nok(code);
52455
52298
  }
52456
52299
  }
52457
- //#endregion
52458
- //#region node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/heading-atx.js
52300
+ // node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/heading-atx.js
52459
52301
  /**
52460
52302
  * @import {
52461
52303
  * Construct,
@@ -52635,8 +52477,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
52635
52477
  return data;
52636
52478
  }
52637
52479
  }
52638
- //#endregion
52639
- //#region node_modules/.pnpm/micromark-util-html-tag-name@2.0.1/node_modules/micromark-util-html-tag-name/index.js
52480
+ // node_modules/.pnpm/micromark-util-html-tag-name@2.0.1/node_modules/micromark-util-html-tag-name/index.js
52640
52481
  /**
52641
52482
  * List of lowercase HTML “block” tag names.
52642
52483
  *
@@ -52734,8 +52575,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
52734
52575
  "style",
52735
52576
  "textarea"
52736
52577
  ];
52737
- //#endregion
52738
- //#region node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/html-flow.js
52578
+ // node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/html-flow.js
52739
52579
  /**
52740
52580
  * @import {
52741
52581
  * Code,
@@ -53460,8 +53300,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
53460
53300
  return effects.attempt(blankLine, ok, nok);
53461
53301
  }
53462
53302
  }
53463
- //#endregion
53464
- //#region node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/html-text.js
53303
+ // node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/html-text.js
53465
53304
  /**
53466
53305
  * @import {
53467
53306
  * Code,
@@ -54074,8 +53913,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
54074
53913
  return returnState(code);
54075
53914
  }
54076
53915
  }
54077
- //#endregion
54078
- //#region node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/label-end.js
53916
+ // node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/label-end.js
54079
53917
  /**
54080
53918
  * @import {
54081
53919
  * Construct,
@@ -54543,8 +54381,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
54543
54381
  return nok(code);
54544
54382
  }
54545
54383
  }
54546
- //#endregion
54547
- //#region node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/label-start-image.js
54384
+ // node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/label-start-image.js
54548
54385
  /**
54549
54386
  * @import {
54550
54387
  * Construct,
@@ -54642,8 +54479,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
54642
54479
  return ok(code);
54643
54480
  }
54644
54481
  }
54645
- //#endregion
54646
- //#region node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/label-start-link.js
54482
+ // node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/label-start-link.js
54647
54483
  /**
54648
54484
  * @import {
54649
54485
  * Construct,
@@ -54696,8 +54532,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
54696
54532
  return ok(code);
54697
54533
  }
54698
54534
  }
54699
- //#endregion
54700
- //#region node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/line-ending.js
54535
+ // node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/line-ending.js
54701
54536
  /**
54702
54537
  * @import {
54703
54538
  * Construct,
@@ -54726,8 +54561,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
54726
54561
  return factorySpace(effects, ok, "linePrefix");
54727
54562
  }
54728
54563
  }
54729
- //#endregion
54730
- //#region node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/thematic-break.js
54564
+ // node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/thematic-break.js
54731
54565
  /**
54732
54566
  * @import {
54733
54567
  * Code,
@@ -54821,8 +54655,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
54821
54655
  return markdownSpace(code) ? factorySpace(effects, atBreak, "whitespace")(code) : atBreak(code);
54822
54656
  }
54823
54657
  }
54824
- //#endregion
54825
- //#region node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/list.js
54658
+ // node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/list.js
54826
54659
  /**
54827
54660
  * @import {
54828
54661
  * Code,
@@ -54993,8 +54826,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
54993
54826
  return !markdownSpace(code) && tail && tail[1].type === "listItemPrefixWhitespace" ? ok(code) : nok(code);
54994
54827
  }
54995
54828
  }
54996
- //#endregion
54997
- //#region node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/setext-underline.js
54829
+ // node_modules/.pnpm/micromark-core-commonmark@2.0.4/node_modules/micromark-core-commonmark/lib/setext-underline.js
54998
54830
  /**
54999
54831
  * @import {
55000
54832
  * Code,
@@ -55147,8 +54979,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
55147
54979
  return nok(code);
55148
54980
  }
55149
54981
  }
55150
- //#endregion
55151
- //#region node_modules/.pnpm/micromark@4.0.3/node_modules/micromark/lib/initialize/flow.js
54982
+ // node_modules/.pnpm/micromark@4.0.3/node_modules/micromark/lib/initialize/flow.js
55152
54983
  /**
55153
54984
  * @import {
55154
54985
  * InitialConstruct,
@@ -55194,8 +55025,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
55194
55025
  return initial;
55195
55026
  }
55196
55027
  }
55197
- //#endregion
55198
- //#region node_modules/.pnpm/micromark@4.0.3/node_modules/micromark/lib/initialize/text.js
55028
+ // node_modules/.pnpm/micromark@4.0.3/node_modules/micromark/lib/initialize/text.js
55199
55029
  /**
55200
55030
  * @import {
55201
55031
  * Code,
@@ -55370,8 +55200,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
55370
55200
  editMap.consume(events);
55371
55201
  return events;
55372
55202
  }
55373
- //#endregion
55374
- //#region node_modules/.pnpm/micromark@4.0.3/node_modules/micromark/lib/constructs.js
55203
+ // node_modules/.pnpm/micromark@4.0.3/node_modules/micromark/lib/constructs.js
55375
55204
  /**
55376
55205
  * @import {Extension} from 'micromark-util-types'
55377
55206
  */
@@ -55448,8 +55277,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
55448
55277
  const attentionMarkers = { null: [42, 95] };
55449
55278
  /** @satisfies {Extension['disable']} */
55450
55279
  const disable = { null: [] };
55451
- //#endregion
55452
- //#region node_modules/.pnpm/micromark@4.0.3/node_modules/micromark/lib/create-tokenizer.js
55280
+ // node_modules/.pnpm/micromark@4.0.3/node_modules/micromark/lib/create-tokenizer.js
55453
55281
  /**
55454
55282
  * @import {
55455
55283
  * Chunk,
@@ -55915,8 +55743,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
55915
55743
  }
55916
55744
  return result.join("");
55917
55745
  }
55918
- //#endregion
55919
- //#region node_modules/.pnpm/micromark@4.0.3/node_modules/micromark/lib/parse.js
55746
+ // node_modules/.pnpm/micromark@4.0.3/node_modules/micromark/lib/parse.js
55920
55747
  /**
55921
55748
  * @import {
55922
55749
  * Create,
@@ -55959,8 +55786,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
55959
55786
  }
55960
55787
  }
55961
55788
  }
55962
- //#endregion
55963
- //#region node_modules/.pnpm/micromark@4.0.3/node_modules/micromark/lib/postprocess.js
55789
+ // node_modules/.pnpm/micromark@4.0.3/node_modules/micromark/lib/postprocess.js
55964
55790
  /**
55965
55791
  * @import {Event} from 'micromark-util-types'
55966
55792
  */
@@ -55974,8 +55800,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
55974
55800
  while (!subtokenize(events));
55975
55801
  return events;
55976
55802
  }
55977
- //#endregion
55978
- //#region node_modules/.pnpm/micromark@4.0.3/node_modules/micromark/lib/preprocess.js
55803
+ // node_modules/.pnpm/micromark@4.0.3/node_modules/micromark/lib/preprocess.js
55979
55804
  /**
55980
55805
  * @import {Chunk, Code, Encoding, Value} from 'micromark-util-types'
55981
55806
  */
@@ -56066,8 +55891,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
56066
55891
  return chunks;
56067
55892
  }
56068
55893
  }
56069
- //#endregion
56070
- //#region node_modules/.pnpm/micromark-util-decode-string@2.0.1/node_modules/micromark-util-decode-string/index.js
55894
+ // node_modules/.pnpm/micromark-util-decode-string@2.0.1/node_modules/micromark-util-decode-string/index.js
56071
55895
  const characterEscapeOrReference = /\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;
56072
55896
  /**
56073
55897
  * Decode markdown strings (which occur in places such as fenced code info
@@ -56103,8 +55927,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
56103
55927
  }
56104
55928
  return decodeNamedCharacterReference($2) || $0;
56105
55929
  }
56106
- //#endregion
56107
- //#region node_modules/.pnpm/unist-util-stringify-position@4.0.0/node_modules/unist-util-stringify-position/lib/index.js
55930
+ // node_modules/.pnpm/unist-util-stringify-position@4.0.0/node_modules/unist-util-stringify-position/lib/index.js
56108
55931
  /**
56109
55932
  * @typedef {import('unist').Node} Node
56110
55933
  * @typedef {import('unist').Point} Point
@@ -56167,8 +55990,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
56167
55990
  function index(value) {
56168
55991
  return value && typeof value === "number" ? value : 1;
56169
55992
  }
56170
- //#endregion
56171
- //#region node_modules/.pnpm/mdast-util-from-markdown@2.1.0/node_modules/mdast-util-from-markdown/lib/index.js
55993
+ // node_modules/.pnpm/mdast-util-from-markdown@2.1.0/node_modules/mdast-util-from-markdown/lib/index.js
56172
55994
  /**
56173
55995
  * @import {
56174
55996
  * Break,
@@ -57214,8 +57036,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
57214
57036
  end: right.end
57215
57037
  }) + ") is still open");
57216
57038
  }
57217
- //#endregion
57218
- //#region src/client/quick-apps/document.ts
57039
+ // src/client/quick-apps/document.ts
57219
57040
  const loadEditor = createEngineLoader(() => require.async("./client.editor-engine.js"));
57220
57041
  /** Resolve authored relative paths without allowing the document to nominate another root. */
57221
57042
  function documentPath(root, current, value) {
@@ -57351,8 +57172,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
57351
57172
  })
57352
57173
  }));
57353
57174
  }
57354
- //#endregion
57355
- //#region src/shared/quick-app-browser-storage.ts
57175
+ // src/shared/quick-app-browser-storage.ts
57356
57176
  const QUICK_APP_STORAGE_PROTOCOL = "codingns.quick-app-storage.v1";
57357
57177
  const QUICK_APP_STORAGE_LIMITS = Object.freeze({
57358
57178
  bytes: 2097152,
@@ -57384,8 +57204,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
57384
57204
  "flush"
57385
57205
  ].includes(request.operation) && request.key === void 0 && request.value === void 0;
57386
57206
  }
57387
- //#endregion
57388
- //#region src/client/quick-apps/browser-storage.ts
57207
+ // src/client/quick-apps/browser-storage.ts
57389
57208
  function storageFailure(error) {
57390
57209
  return {
57391
57210
  name: error instanceof Error ? error.name : "UnknownError",
@@ -57514,8 +57333,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
57514
57333
  shutdown();
57515
57334
  };
57516
57335
  }
57517
- //#endregion
57518
- //#region src/client/quick-apps/viewer.ts
57336
+ // src/client/quick-apps/viewer.ts
57519
57337
  const defaultMode = (path) => /\.(?:md|markdown)$/iu.test(path) && require_magpie_model_tag.hasNativeMarkdown() ? "markdown" : "source";
57520
57338
  /** Native renderers and editor with Quick Apps ownership, save preconditions and lifetime. */
57521
57339
  function QuickAppViewer({ app, view, client, busy, error, t, onClose, onReload }) {
@@ -57835,8 +57653,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
57835
57653
  }, t(confirmation.kind === "edit" ? "quickApps.allowEditing" : "quickApps.discard")))
57836
57654
  }, (0, react.createElement)("p", null, t(confirmation.kind === "edit" ? "quickApps.allowEditingHelp" : "quickApps.discardHelp", { path }))) : null);
57837
57655
  }
57838
- //#endregion
57839
- //#region src/client/quick-apps/reorder-animation.ts
57656
+ // src/client/quick-apps/reorder-animation.ts
57840
57657
  /** Animate grid moves on the outer shortcut, independently of the tile's jiggle. */
57841
57658
  function createQuickAppReorderAnimation() {
57842
57659
  let positions = /* @__PURE__ */ new Map();
@@ -57890,8 +57707,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
57890
57707
  }
57891
57708
  };
57892
57709
  }
57893
- //#endregion
57894
- //#region src/client/quick-apps/reorder.ts
57710
+ // src/client/quick-apps/reorder.ts
57895
57711
  function move(items, from, to) {
57896
57712
  const next = [...items];
57897
57713
  next.splice(to, 0, next.splice(from, 1)[0]);
@@ -58027,8 +57843,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
58027
57843
  })
58028
57844
  };
58029
57845
  }
58030
- //#endregion
58031
- //#region src/client/quick-apps/rail-preference.ts
57846
+ // src/client/quick-apps/rail-preference.ts
58032
57847
  const QUICK_APPS_RAIL_COLLAPSED_KEY = "codingns4dsh.quickApps.railCollapsed";
58033
57848
  /** Edit mode is a session action; only the collapsed rail is restored after reload. */
58034
57849
  function readQuickAppsRailCollapsed() {
@@ -58043,8 +57858,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
58043
57858
  globalThis.localStorage?.setItem(QUICK_APPS_RAIL_COLLAPSED_KEY, collapsed ? "1" : "0");
58044
57859
  } catch {}
58045
57860
  }
58046
- //#endregion
58047
- //#region src/client/settings-anchor.ts
57861
+ // src/client/settings-anchor.ts
58048
57862
  /**
58049
57863
  * 设置区锚点解析。
58050
57864
  *
@@ -58110,8 +57924,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
58110
57924
  function settingsAnchorContainer(match) {
58111
57925
  return match.kind === "settings-button" ? match.node.parentElement : match.node;
58112
57926
  }
58113
- //#endregion
58114
- //#region src/client/sidebar-footer-style.ts
57927
+ // src/client/sidebar-footer-style.ts
58115
57928
  /** Shared geometry for Quick Apps and the account/connection entry beside Settings. */
58116
57929
  const sidebarFooterControlStyle = {
58117
57930
  width: "32px",
@@ -58167,8 +57980,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
58167
57980
  }, [wide]);
58168
57981
  return rail;
58169
57982
  }
58170
- //#endregion
58171
- //#region src/client/quick-apps/launcher.ts
57983
+ // src/client/quick-apps/launcher.ts
58172
57984
  function QuickAppsLauncher({ services, wide }) {
58173
57985
  const rail = useSidebarFooterAlignment(wide);
58174
57986
  const t = require_magpie_model_tag.useCodingNsTranslator(services.locale);
@@ -58635,8 +58447,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
58635
58447
  role: notice.tone === "error" ? "alert" : "status"
58636
58448
  }, notice.text) : null, body)) : null);
58637
58449
  }
58638
- //#endregion
58639
- //#region src/client/features/quick-apps.ts
58450
+ // src/client/features/quick-apps.ts
58640
58451
  const t = require_magpie_model_tag.resolveCodingNsTranslator();
58641
58452
  const quickAppsFeature = {
58642
58453
  descriptor: {
@@ -58666,11 +58477,9 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
58666
58477
  })));
58667
58478
  }
58668
58479
  };
58669
- //#endregion
58670
- //#region src/client/peer-host-connection-button.ts
58480
+ // src/client/peer-host-connection-button.ts
58671
58481
  const PEER_HOST_OPEN_EVENT = "codingns4dsh:peer-host-open";
58672
- //#endregion
58673
- //#region src/dsh-capabilities/client/sidebar-footer-icon-adapter.ts
58482
+ // src/dsh-capabilities/client/sidebar-footer-icon-adapter.ts
58674
58483
  /** DOM counterparts of DSH's regular User and Link outline artwork. */
58675
58484
  function createSidebarFooterIcon(dom, kind) {
58676
58485
  const svg = dom.createElementNS("http://www.w3.org/2000/svg", "svg");
@@ -58695,8 +58504,7 @@ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-heig
58695
58504
  }
58696
58505
  return svg;
58697
58506
  }
58698
- //#endregion
58699
- //#region src/client/account-bar.ts
58507
+ // src/client/account-bar.ts
58700
58508
  const ACCOUNT_ATTRIBUTE = "data-codingns-account-button";
58701
58509
  const MENU_ATTRIBUTE = "data-codingns-account-menu";
58702
58510
  const POLL_MS = 5e3;
@@ -59292,8 +59100,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${dshThemeColor.lab
59292
59100
  errorCode: null
59293
59101
  };
59294
59102
  }
59295
- //#endregion
59296
- //#region src/client/peer-host-color.ts
59103
+ // src/client/peer-host-color.ts
59297
59104
  /**
59298
59105
  * 工作区标签配色的推导与缓存。
59299
59106
  *
@@ -59363,8 +59170,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${dshThemeColor.lab
59363
59170
  background: peerHostTagBackground(color)
59364
59171
  };
59365
59172
  }
59366
- //#endregion
59367
- //#region src/client/peer-host-management-panel.ts
59173
+ // src/client/peer-host-management-panel.ts
59368
59174
  /** PeerHost 管理面板;入口来自统一账户菜单,面板只渲染脱敏记录。 */
59369
59175
  function startPeerHostManagementPanel(options) {
59370
59176
  const dom = options.document ?? (typeof document === "undefined" ? void 0 : document);
@@ -60253,8 +60059,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${dshThemeColor.lab
60253
60059
  if (value < 1024 ** 3) return `${Math.round(value / 1024 ** 2)} MB`;
60254
60060
  return `${(value / 1024 ** 3).toFixed(1)} GB`;
60255
60061
  }
60256
- //#endregion
60257
- //#region src/shared/peer-host-file-location.ts
60062
+ // src/shared/peer-host-file-location.ts
60258
60063
  /**
60259
60064
  * Windows 消息链接常写成 `/C:/项目/文件.md:170`,但斜杠和行号都不是文件名。
60260
60065
  * 仅在目标工作区使用 Windows 路径时纠正,保留 POSIX 下合法的冒号文件名。
@@ -60273,8 +60078,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${dshThemeColor.lab
60273
60078
  line
60274
60079
  };
60275
60080
  }
60276
- //#endregion
60277
- //#region src/host/modules/peer-host/peer-host-native-protocol.ts
60081
+ // src/host/modules/peer-host/peer-host-native-protocol.ts
60278
60082
  /** DSH 0.2.x Workspace/Session Remote 方法;这里只登记原生协议,不登记插件私有 RPC。 */
60279
60083
  const DSH_NATIVE_REMOTE_METHODS = Object.freeze([
60280
60084
  "$events",
@@ -60381,8 +60185,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${dshThemeColor.lab
60381
60185
  }
60382
60186
  throw new Error("当前运行时不支持 Base64 解码");
60383
60187
  }
60384
- //#endregion
60385
- //#region src/client/peer-host-native-projection.ts
60188
+ // src/client/peer-host-native-projection.ts
60386
60189
  /**
60387
60190
  * 为需要稳定显示标识的调用方生成虚拟 URI。
60388
60191
  *
@@ -60616,8 +60419,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${dshThemeColor.lab
60616
60419
  return candidate !== void 0 && session.sessionId === candidate.sessionId && session.agentAvailable === candidate.agentAvailable && session.updatedAt === candidate.updatedAt && session.running === candidate.running && session.blank === candidate.blank && session.cwd === candidate.cwd && session.adapterId === candidate.adapterId && session.origin === candidate.origin && session.parentSessionId === candidate.parentSessionId && session.projections.kind === candidate.projections.kind && session.projections.asOfSeq === candidate.projections.asOfSeq && session.projections.values.title === candidate.projections.values.title;
60617
60420
  });
60618
60421
  }
60619
- //#endregion
60620
- //#region src/client/peer-host-native-store-projection.ts
60422
+ // src/client/peer-host-native-store-projection.ts
60621
60423
  /**
60622
60424
  * 把虚拟工作区就地投影进 DSH 原生 Workspace Store。
60623
60425
  *
@@ -60970,8 +60772,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${dshThemeColor.lab
60970
60772
  function isSnapshotStore(value) {
60971
60773
  return isRecord$7(value) && typeof value.getSnapshot === "function" && typeof value.subscribe === "function";
60972
60774
  }
60973
- //#endregion
60974
- //#region src/client/peer-host-workspace-tag.ts
60775
+ // src/client/peer-host-workspace-tag.ts
60975
60776
  /**
60976
60777
  * 在工作区名称后注入彩色 Host 标签。
60977
60778
  *
@@ -61201,8 +61002,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${dshThemeColor.lab
61201
61002
  function isRecord$6(value) {
61202
61003
  return typeof value === "object" && value !== null && !Array.isArray(value);
61203
61004
  }
61204
- //#endregion
61205
- //#region src/client/peer-host-workspace-tab.ts
61005
+ // src/client/peer-host-workspace-tab.ts
61206
61006
  /**
61207
61007
  * 在 DSH 原生"添加工作区"对话框里追加一个"远程 HOST"标签页。
61208
61008
  *
@@ -61768,8 +61568,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${dshThemeColor.lab
61768
61568
  });
61769
61569
  }
61770
61570
  }
61771
- //#endregion
61772
- //#region src/client/peer-host-remote-events.ts
61571
+ // src/client/peer-host-remote-events.ts
61773
61572
  const EVENT_PREFIX = "codingns-peer-event:";
61774
61573
  const INTERACTION_EVENTS = /* @__PURE__ */ new Set(["approval/request", "user-questions/request"]);
61775
61574
  /**
@@ -62075,8 +61874,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${dshThemeColor.lab
62075
61874
  if (signal.aborted) finish();
62076
61875
  });
62077
61876
  }
62078
- //#endregion
62079
- //#region src/shared/session-reference.ts
61877
+ // src/shared/session-reference.ts
62080
61878
  /**
62081
61879
  * 生成 DSH 原生会话引用使用的 canonical URI。
62082
61880
  *
@@ -62100,8 +61898,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${dshThemeColor.lab
62100
61898
  if (buffer !== void 0) return buffer;
62101
61899
  throw new Error("当前运行时不支持 Base64 编码");
62102
61900
  }
62103
- //#endregion
62104
- //#region src/client/peer-host-reference-source.ts
61901
+ // src/client/peer-host-reference-source.ts
62105
61902
  const PEER_HOST_REFERENCE_SOURCE = "codingns-peer-host-reference";
62106
61903
  /**
62107
61904
  * 注册远程会话引用兜底源。
@@ -62237,8 +62034,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${dshThemeColor.lab
62237
62034
  if (typeof workspaceId !== "string") return void 0;
62238
62035
  return require_magpie_model_tag.parseVirtualWorkspaceId(workspaceId)?.targetHostId ?? void 0;
62239
62036
  }
62240
- //#endregion
62241
- //#region src/dsh-capabilities/client/peer-host-attachment-adapter.ts
62037
+ // src/dsh-capabilities/client/peer-host-attachment-adapter.ts
62242
62038
  /** Native file paths describe the client machine; remote sessions must upload bytes. */
62243
62039
  function installPeerHostAttachmentIntake(context, folderError) {
62244
62040
  const slots = context?.get?.("slots");
@@ -62265,8 +62061,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${dshThemeColor.lab
62265
62061
  useSyncExternalStore: react.useSyncExternalStore
62266
62062
  });
62267
62063
  }
62268
- //#endregion
62269
- //#region src/client/features/peer-host.ts
62064
+ // src/client/features/peer-host.ts
62270
62065
  /** 聚合刷新周期;远端资源只影响自身节点,刷新失败不改变本机界面。 */
62271
62066
  const PEER_HOST_AGGREGATE_REFRESH_MS = 3e4;
62272
62067
  /** 有断线节点时缩短复检周期,成功重连后恢复正常频率。 */
@@ -63596,8 +63391,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${dshThemeColor.lab
63596
63391
  }
63597
63392
  }, message);
63598
63393
  }
63599
- //#endregion
63600
- //#region src/client/subagent-collapsed-lineage.ts
63394
+ // src/client/subagent-collapsed-lineage.ts
63601
63395
  /** 停止子 Agent 分组的专用词典,避免改写 DSH 原生 subagent 词典。 */
63602
63396
  const SUBAGENT_COLLAPSED_LOCALE_NS = "codingnsSubagentCollapsed";
63603
63397
  /**
@@ -64620,8 +64414,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${dshThemeColor.lab
64620
64414
  disposeLocale();
64621
64415
  };
64622
64416
  }
64623
- //#endregion
64624
- //#region src/client/features/subagent-collapsed-lineage.ts
64417
+ // src/client/features/subagent-collapsed-lineage.ts
64625
64418
  /**
64626
64419
  * 子 Agent 列表的显示策略。
64627
64420
  *
@@ -64644,8 +64437,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${dshThemeColor.lab
64644
64437
  context.resources.add(dispose);
64645
64438
  }
64646
64439
  };
64647
- //#endregion
64648
- //#region src/client/session-translation-rules.ts
64440
+ // src/client/session-translation-rules.ts
64649
64441
  /** Only saved entries enter translation prompts; cancelled or failed edits stay local. */
64650
64442
  function SessionTranslationRules({ rules, disabled, pending, t, onChange }) {
64651
64443
  const [draft, setDraft] = (0, react.useState)(null);
@@ -64775,8 +64567,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${dshThemeColor.lab
64775
64567
  }
64776
64568
  }, t("translation.saveRejected"))));
64777
64569
  }
64778
- //#endregion
64779
- //#region src/shared/translation-indicator.ts
64570
+ // src/shared/translation-indicator.ts
64780
64571
  const TRANSLATION_GLYPH_PATHS = ["M3.5 5.5h10M8.5 3.5v2M12.5 5.5c0 4.4-3.3 7.2-8 9", "M5.5 8.5c1.4 2 3.4 3.7 6 4.8M14.5 19.5l3-8 3 8M15.7 17h3.6"];
64781
64572
  const TRANSLATION_STATUS_BADGE_STYLE = {
64782
64573
  position: "absolute",
@@ -64800,8 +64591,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${dshThemeColor.lab
64800
64591
  borderTopColor: "transparent",
64801
64592
  background: "transparent"
64802
64593
  };
64803
- //#endregion
64804
- //#region src/client/session-translation-pending-dom.ts
64594
+ // src/client/session-translation-pending-dom.ts
64805
64595
  /** Pending DSH bubbles and queue previews have no renderer slot. */
64806
64596
  function watchPendingTranslationTargets(anchor, onChange) {
64807
64597
  const root = anchor.closest("[data-conversation-session]");
@@ -64863,8 +64653,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${dshThemeColor.lab
64863
64653
  targets.clear();
64864
64654
  };
64865
64655
  }
64866
- //#endregion
64867
- //#region src/client/session-translation-retry.ts
64656
+ // src/client/session-translation-retry.ts
64868
64657
  const stores = /* @__PURE__ */ new WeakMap();
64869
64658
  /** Share a display result between the reply, collapsed reasoning, and its popup. */
64870
64659
  function useOutputTranslation(props) {
@@ -64950,8 +64739,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${dshThemeColor.lab
64950
64739
  for (const entry of store?.values() ?? []) entry.controller?.abort();
64951
64740
  stores.delete(owner);
64952
64741
  }
64953
- //#endregion
64954
- //#region src/client/session-translation-chat.ts
64742
+ // src/client/session-translation-chat.ts
64955
64743
  /**
64956
64744
  * 把翻译状态和查看原文的入口放回对应消息块,不占用 AI 回复底部的统一操作栏。
64957
64745
  */
@@ -66012,8 +65800,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${dshThemeColor.lab
66012
65800
  function asRecord(value) {
66013
65801
  return typeof value === "object" && value !== null && !Array.isArray(value) ? value : void 0;
66014
65802
  }
66015
- //#endregion
66016
- //#region src/dsh-capabilities/client/interaction-text-dom.ts
65803
+ // src/dsh-capabilities/client/interaction-text-dom.ts
66017
65804
  const SELECTORS = {
66018
65805
  question: [
66019
65806
  "[data-question-key] h2",
@@ -66203,8 +65990,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${dshThemeColor.lab
66203
65990
  ]) marker.addEventListener(name, stop);
66204
65991
  return marker;
66205
65992
  }
66206
- //#endregion
66207
- //#region src/client/session-translation-interactions.ts
65993
+ // src/client/session-translation-interactions.ts
66208
65994
  const EMPTY_RESULT = {
66209
65995
  enabled: false,
66210
65996
  records: {}
@@ -66402,8 +66188,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${dshThemeColor.lab
66402
66188
  function TranslatedQuestionHistory({ sessionId, fields, render, services }) {
66403
66189
  return render(useFieldTranslations(services, sessionId, fields, useCliSessionTranslationEnabled(sessionId, services.rpc)) ?? EMPTY_RESULT);
66404
66190
  }
66405
- //#endregion
66406
- //#region src/client/features/session-translation.ts
66191
+ // src/client/features/session-translation.ts
66407
66192
  const languageLabelKeys = {
66408
66193
  zh: "translation.language.zh",
66409
66194
  en: "translation.language.en",
@@ -66418,6 +66203,12 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${dshThemeColor.lab
66418
66203
  enabledByDefault: false,
66419
66204
  dependencies: ["cliAdapters"],
66420
66205
  runtime: "client",
66206
+ nativeReplacement: {
66207
+ dshFeature: "@deepseek-ai/dsh-experimental-cot-translation-bundle",
66208
+ since: "0.2.2-alpha.2",
66209
+ coverage: "partial",
66210
+ note: "The native translation switch is now host-owned; this feature still provides external Agent translation UI and presentation."
66211
+ },
66421
66212
  requires: [{
66422
66213
  capability: "conversation.interaction-translation",
66423
66214
  required: false,
@@ -66572,8 +66363,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${dshThemeColor.lab
66572
66363
  function readOutputLanguage(value) {
66573
66364
  return value === "en" || value === "fr" || value === "de" || value === "ja" ? value : "zh";
66574
66365
  }
66575
- //#endregion
66576
- //#region src/client/features/plugin-update.ts
66366
+ // src/client/features/plugin-update.ts
66577
66367
  const pluginUpdateFeature = {
66578
66368
  descriptor: {
66579
66369
  name: "pluginUpdate",
@@ -66581,6 +66371,12 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${dshThemeColor.lab
66581
66371
  enabledByDefault: true,
66582
66372
  dependencies: [],
66583
66373
  runtime: "client",
66374
+ nativeReplacement: {
66375
+ dshFeature: "@deepseek-ai/dsh-plugin-manager third-party updates",
66376
+ since: "0.2.2-alpha.2",
66377
+ coverage: "full",
66378
+ note: "The native DSH plugin manager now owns third-party plugin update presentation and recovery."
66379
+ },
66584
66380
  requires: [{
66585
66381
  capability: "plugin.client.reload-status",
66586
66382
  required: false,
@@ -66589,8 +66385,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${dshThemeColor.lab
66589
66385
  },
66590
66386
  start: () => void 0
66591
66387
  };
66592
- //#endregion
66593
- //#region src/client/features/workspace-mcp.ts
66388
+ // src/client/features/workspace-mcp.ts
66594
66389
  const fallbackT$1 = require_magpie_model_tag.resolveCodingNsTranslator();
66595
66390
  const workspaceMcpFeature = {
66596
66391
  descriptor: {
@@ -67112,16 +66907,14 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${dshThemeColor.lab
67112
66907
  function isRecord$5(value) {
67113
66908
  return typeof value === "object" && value !== null && !Array.isArray(value);
67114
66909
  }
67115
- //#endregion
67116
- //#region src/shared/credential-carrier.ts
66910
+ // src/shared/credential-carrier.ts
67117
66911
  function encodeCredentialCarrier(requestCode, label) {
67118
66912
  const code = requestCode.trim();
67119
66913
  const display = label.trim() || code;
67120
66914
  if (code === "") throw new Error("The credential request code cannot be empty.");
67121
66915
  return `@[${encodeURIComponent(display)}](codingns-credential:${encodeURIComponent(code)})`;
67122
66916
  }
67123
- //#endregion
67124
- //#region src/client/credential-reference.ts
66917
+ // src/client/credential-reference.ts
67125
66918
  const CREDENTIAL_INPUT_SOURCE = "codingns-credentials";
67126
66919
  const CREDENTIAL_PAGE_SIZE = 32;
67127
66920
  function registerCredentialReferenceSource(ctx, rpc, locale) {
@@ -67384,8 +67177,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${dshThemeColor.lab
67384
67177
  return;
67385
67178
  }
67386
67179
  }
67387
- //#endregion
67388
- //#region src/client/credential-ui-dom.ts
67180
+ // src/client/credential-ui-dom.ts
67389
67181
  /**
67390
67182
  * Places the credential command in DSH's native Add section.
67391
67183
  *
@@ -67554,8 +67346,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${dshThemeColor.lab
67554
67346
  function removeProxies(listbox) {
67555
67347
  for (const node of listbox.querySelectorAll(`[${CREDENTIAL_MENU_PROXY_ATTRIBUTE}]`)) node.remove();
67556
67348
  }
67557
- //#endregion
67558
- //#region src/client/features/credentials.ts
67349
+ // src/client/features/credentials.ts
67559
67350
  const fallbackT = require_magpie_model_tag.resolveCodingNsTranslator();
67560
67351
  const credentialsFeature = {
67561
67352
  descriptor: {
@@ -67665,8 +67456,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${dshThemeColor.lab
67665
67456
  background: dshThemeColor.surfaceSubtle,
67666
67457
  fontSize: uiFontSize(13)
67667
67458
  };
67668
- //#endregion
67669
- //#region src/features/host-router.ts
67459
+ // src/features/host-router.ts
67670
67460
  /** 统一管理当前 Host/PeerHost 的完整作用域和 generation。 */
67671
67461
  var HostRouter = class {
67672
67462
  current = null;
@@ -67785,8 +67575,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${dshThemeColor.lab
67785
67575
  }
67786
67576
  return errors;
67787
67577
  }
67788
- //#endregion
67789
- //#region src/client/peer-host-session-controller.ts
67578
+ // src/client/peer-host-session-controller.ts
67790
67579
  /**
67791
67580
  * 远端会话的唯一 Client 入口。
67792
67581
  *
@@ -67879,8 +67668,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${dshThemeColor.lab
67879
67668
  this.router.assertCurrent(scope);
67880
67669
  }
67881
67670
  };
67882
- //#endregion
67883
- //#region src/client/features/index.ts
67671
+ // src/client/features/index.ts
67884
67672
  /** Client 侧功能模块清单:新增模块在这里登记一行,不需要改动设置页和入口。 */
67885
67673
  const CLIENT_FEATURES = [
67886
67674
  pluginUpdateFeature,
@@ -67921,8 +67709,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${dshThemeColor.lab
67921
67709
  entries.sort((left, right) => (left.ui.order ?? 0) - (right.ui.order ?? 0));
67922
67710
  return entries;
67923
67711
  }
67924
- //#endregion
67925
- //#region src/client/settings-promo-styles.ts
67712
+ // src/client/settings-promo-styles.ts
67926
67713
  /**
67927
67714
  * 设置页顶部推广条的样式与交互态。
67928
67715
  *
@@ -67990,8 +67777,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
67990
67777
  @media (max-width:640px){.${settingsPromoClass.root}{gap:10px;padding:12px}.${settingsPromoClass.row}{flex-direction:column;align-items:center;gap:10px}.${settingsPromoClass.brand}{align-items:center}.${settingsPromoClass.version}{align-self:center}.${settingsPromoClass.versionControl}{align-self:center}.${settingsPromoClass.versionControl} button{flex-shrink:0}}
67991
67778
  @media (prefers-reduced-motion:reduce){.${settingsPromoClass.action}{transition:none}}
67992
67779
  `;
67993
- //#endregion
67994
- //#region src/client/settings-promo.ts
67780
+ // src/client/settings-promo.ts
67995
67781
  /**
67996
67782
  * 设置页顶部的 GitHub Star 推广条。
67997
67783
  *
@@ -68015,7 +67801,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
68015
67801
  return (0, react.createElement)("aside", {
68016
67802
  className: settingsPromoClass.root,
68017
67803
  "aria-label": t("settings.promo.sectionLabel")
68018
- }, (0, react.createElement)("div", { className: settingsPromoClass.row }, (0, react.createElement)("div", { className: settingsPromoClass.brand }, (0, react.createElement)("div", { className: settingsPromoClass.headline }, (0, react.createElement)(StarBurstIcon, { className: settingsPromoClass.logo }), (0, react.createElement)("h3", { className: settingsPromoClass.title }, t("common.brand"))), versionControl ?? (0, react.createElement)("span", { className: settingsPromoClass.version }, t("settings.promo.version", { version: "0.2.1-rc.8" }))), (0, react.createElement)("p", { className: settingsPromoClass.text }, t("settings.promo.starHint"), (0, react.createElement)("span", {
67804
+ }, (0, react.createElement)("div", { className: settingsPromoClass.row }, (0, react.createElement)("div", { className: settingsPromoClass.brand }, (0, react.createElement)("div", { className: settingsPromoClass.headline }, (0, react.createElement)(StarBurstIcon, { className: settingsPromoClass.logo }), (0, react.createElement)("h3", { className: settingsPromoClass.title }, t("common.brand"))), versionControl ?? (0, react.createElement)("span", { className: settingsPromoClass.version }, t("settings.promo.version", { version: "0.2.2-beta.1" }))), (0, react.createElement)("p", { className: settingsPromoClass.text }, t("settings.promo.starHint"), (0, react.createElement)("span", {
68019
67805
  className: settingsPromoClass.hand,
68020
67806
  "aria-hidden": true
68021
67807
  }, "👉")), (0, react.createElement)("a", {
@@ -68062,8 +67848,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
68062
67848
  focusable: false
68063
67849
  }, (0, react.createElement)("path", { d: "M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82a7.4 7.4 0 0 1 2-.27c.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8Z" }));
68064
67850
  }
68065
- //#endregion
68066
- //#region src/dsh-capabilities/client/plugin-reload-adapter.ts
67851
+ // src/dsh-capabilities/client/plugin-reload-adapter.ts
68067
67852
  /** Supported DSH Desktop releases expose no authoritative Client replacement contract. */
68068
67853
  function pluginClientReloadStatus() {
68069
67854
  return {
@@ -68072,9 +67857,8 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
68072
67857
  code: "UPDATE_CLIENT_RELOAD_UNSUPPORTED"
68073
67858
  };
68074
67859
  }
68075
- //#endregion
68076
- //#region src/client/update-store.ts
68077
- const DEFAULT_PLUGIN_UPDATE_CHANNEL = "0.2.1-rc.8".includes("-") ? "next" : "latest";
67860
+ // src/client/update-store.ts
67861
+ const DEFAULT_PLUGIN_UPDATE_CHANNEL = "0.2.2-beta.1".includes("-") ? "next" : "latest";
68078
67862
  var PluginUpdateStore = class {
68079
67863
  rpc;
68080
67864
  snapshot = {
@@ -68297,8 +68081,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
68297
68081
  const code = error?.code;
68298
68082
  return typeof code === "string" && /^UPDATE_[A-Z_]{1,80}$/u.test(code) ? code : "UPDATE_REQUEST_FAILED";
68299
68083
  }
68300
- //#endregion
68301
- //#region src/client/update-panel-styles.ts
68084
+ // src/client/update-panel-styles.ts
68302
68085
  const STYLE_ID$1 = "codingns4dsh-update-panel";
68303
68086
  const updatePanelClass = {
68304
68087
  root: "codingns4dsh-update-panel",
@@ -68364,8 +68147,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
68364
68147
  document.head.appendChild(style);
68365
68148
  return () => style.remove();
68366
68149
  }
68367
- //#endregion
68368
- //#region src/client/update-panel.ts
68150
+ // src/client/update-panel.ts
68369
68151
  const column = {
68370
68152
  display: "flex",
68371
68153
  flexDirection: "column",
@@ -68508,8 +68290,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
68508
68290
  }
68509
68291
  }, t("update.refreshStatus")))) : null);
68510
68292
  }
68511
- //#endregion
68512
- //#region src/client/settings-update.ts
68293
+ // src/client/settings-update.ts
68513
68294
  function hasNewerPluginVersion(snapshot) {
68514
68295
  const target = snapshot.check?.target;
68515
68296
  if (!target) return false;
@@ -68574,8 +68355,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
68574
68355
  store
68575
68356
  }) : null));
68576
68357
  }
68577
- //#endregion
68578
- //#region src/client/settings-section.ts
68358
+ // src/client/settings-section.ts
68579
68359
  /**
68580
68360
  * DSH 设置页中的 Codingns4DSH 区块。
68581
68361
  *
@@ -68803,8 +68583,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
68803
68583
  onChange: (event) => onChange(event.currentTarget.checked)
68804
68584
  }));
68805
68585
  }
68806
- //#endregion
68807
- //#region src/client/credentials-settings-section.ts
68586
+ // src/client/credentials-settings-section.ts
68808
68587
  function CredentialsSettingsSection({ settings, services }) {
68809
68588
  const t = require_magpie_model_tag.useCodingNsTranslator(services.locale);
68810
68589
  const [items, setItems] = (0, react.useState)([]);
@@ -69311,8 +69090,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
69311
69090
  });
69312
69091
  return typeof document === "undefined" ? modal : (0, import_react_dom.createPortal)(modal, document.body);
69313
69092
  }
69314
- //#endregion
69315
- //#region src/dsh-capabilities/client/config-forms-adapter.ts
69093
+ // src/dsh-capabilities/client/config-forms-adapter.ts
69316
69094
  /**
69317
69095
  * 未暴露 ConfigForm(memory 模式、命名空间未下发或版本缺少该接口)时的占位快照。
69318
69096
  *
@@ -69457,8 +69235,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
69457
69235
  function toClientValue(value) {
69458
69236
  return value === void 0 ? void 0 : (({ cliSessions: _cliSessions, ...clientValue }) => clientValue)(value);
69459
69237
  }
69460
- //#endregion
69461
- //#region node_modules/.pnpm/@deepseek-ai+cosmokit@1.8.6/node_modules/@deepseek-ai/cosmokit/lib/index.js
69238
+ // node_modules/.pnpm/@deepseek-ai+cosmokit@1.8.7-alpha.1/node_modules/@deepseek-ai/cosmokit/lib/index.js
69462
69239
  /** Return true when a value is `null` or `undefined`. */
69463
69240
  function isNullable(value) {
69464
69241
  return value === null || value === void 0;
@@ -69626,8 +69403,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
69626
69403
  }
69627
69404
  Time.template = template;
69628
69405
  })(Time || (Time = {}));
69629
- //#endregion
69630
- //#region node_modules/.pnpm/@deepseek-ai+cordis@4.0.5_@deepseek-ai+cordis-plugin-include@1.0.10_@deepseek-ai+cordis-plugin-loader@1.0.6/node_modules/@deepseek-ai/cordis/lib/index.js
69406
+ // node_modules/.pnpm/@deepseek-ai+cordis@4.0.6-alpha.1_@deepseek-ai+cordis-plugin-include@1.0.11-alpha.1_@de_782585c5ba9930e61e782d060d4eca18/node_modules/@deepseek-ai/cordis/lib/index.js
69631
69407
  /** Ordered collection of disposable values with O(1) deletion by value. */
69632
69408
  var DisposableList = class {
69633
69409
  sn = 0;
@@ -70633,9 +70409,9 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
70633
70409
  uid;
70634
70410
  /** The context this fiber's plugin runs in (extends the parent context). */
70635
70411
  ctx;
70636
- /** The validated plugin config (updated by `update()`). */
70412
+ /** The validated plugin config (updated by `update()`); read through {@link effectiveConfig}. */
70637
70413
  config;
70638
- /** The raw plugin config, re-resolved before each activation. */
70414
+ /** The raw plugin config, re-resolved before activation; use {@link rawConfig} to read or retain it. */
70639
70415
  _config;
70640
70416
  /** Current lifecycle state; transitions emit `internal/status`. */
70641
70417
  state = 0;
@@ -70962,9 +70738,33 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
70962
70738
  }
70963
70739
  });
70964
70740
  }
70965
- _resolveConfig(config) {
70966
- config = this.context.waterfall(this, "internal/config", config, () => config);
70967
- return this.runtime ? resolveConfig(this.runtime, config) : config;
70741
+ /** Raw input retained for the next activation, without evaluating expressions or validating it. */
70742
+ get rawConfig() {
70743
+ return this.ctx.fiber._config;
70744
+ }
70745
+ /** Retain raw input without changing the running config or triggering an update. */
70746
+ set rawConfig(config) {
70747
+ this.ctx.fiber._config = config;
70748
+ }
70749
+ /**
70750
+ * The config object published by the existing activation/update lifecycle, without cloning or re-parsing.
70751
+ * It is undefined before the first resolution and remains readable after unload; callers requiring a live instance check `state`.
70752
+ */
70753
+ get effectiveConfig() {
70754
+ return this.ctx.fiber.config;
70755
+ }
70756
+ /**
70757
+ * Evaluate and validate a candidate using this fiber's `internal/config` hooks and runtime schema.
70758
+ * Does not publish the result, replace raw input, or commit running volatile references.
70759
+ * Required injections must be available when a hook uses them.
70760
+ * @param config Raw candidate input.
70761
+ * @returns The candidate's resolved config, retaining the schema's result identity.
70762
+ * @throws {ValidationError} when the runtime schema rejects the candidate; hook errors propagate.
70763
+ */
70764
+ resolveConfig(config) {
70765
+ const fiber = this.ctx.fiber;
70766
+ config = fiber.context.waterfall(fiber, "internal/config", config, () => config);
70767
+ return fiber.runtime ? resolveConfig(fiber.runtime, config) : config;
70968
70768
  }
70969
70769
  async _reload() {
70970
70770
  this.store = { ...this._store };
@@ -70972,7 +70772,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
70972
70772
  try {
70973
70773
  await Promise.resolve();
70974
70774
  if (this._runner.epoch === oldEpoch) {
70975
- this.config = this._resolveConfig(this._config);
70775
+ this.config = this.resolveConfig(this._config);
70976
70776
  await this._execute(this._runner);
70977
70777
  this._error = void 0;
70978
70778
  }
@@ -71028,10 +70828,11 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
71028
70828
  * @throws {CordisError} `INACTIVE_EFFECT` when the fiber is already disposed.
71029
70829
  */
71030
70830
  async restart() {
71031
- this.assertActive();
71032
- this._setEpoch(INACTIVE);
71033
- this._refresh();
71034
- await this.await();
70831
+ const fiber = this.ctx.fiber;
70832
+ fiber.assertActive();
70833
+ fiber._setEpoch(INACTIVE);
70834
+ fiber._refresh();
70835
+ await fiber.await();
71035
70836
  }
71036
70837
  /**
71037
70838
  * Validate and apply new config, then restart the plugin.
@@ -71045,19 +70846,20 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
71045
70846
  * @throws {ValidationError} when the new config fails validation.
71046
70847
  */
71047
70848
  update(config, noSave = false) {
71048
- this.assertActive();
71049
- this._config = config;
71050
- if (this.state !== 2) {
71051
- this._error = void 0;
71052
- this._setEpoch(INACTIVE);
71053
- this._refresh();
70849
+ const fiber = this.ctx.fiber;
70850
+ fiber.assertActive();
70851
+ fiber._config = config;
70852
+ if (fiber.state !== 2) {
70853
+ fiber._error = void 0;
70854
+ fiber._setEpoch(INACTIVE);
70855
+ fiber._refresh();
71054
70856
  return;
71055
70857
  }
71056
- config = this._resolveConfig(config);
71057
- this.context.waterfall(this, "internal/update", config, noSave, () => {
71058
- this.config = config;
71059
- this._error = void 0;
71060
- return this.restart();
70858
+ config = fiber.resolveConfig(config);
70859
+ fiber.context.waterfall(fiber, "internal/update", config, noSave, () => {
70860
+ fiber.config = config;
70861
+ fiber._error = void 0;
70862
+ return fiber.restart();
71061
70863
  });
71062
70864
  }
71063
70865
  };
@@ -71439,8 +71241,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
71439
71241
  return false;
71440
71242
  }
71441
71243
  };
71442
- //#endregion
71443
- //#region src/shared/terminal-input.ts
71244
+ // src/shared/terminal-input.ts
71444
71245
  /**
71445
71246
  * 移除终端模拟器回答 shell 设备属性查询时产生的控制序列。
71446
71247
  *
@@ -71450,8 +71251,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
71450
71251
  function stripTerminalDeviceAttributeResponses(data) {
71451
71252
  return data.replace(/\u001b\[[?>][0-9;]*c/gu, "");
71452
71253
  }
71453
- //#endregion
71454
- //#region src/client/terminal/model.ts
71254
+ // src/client/terminal/model.ts
71455
71255
  var ObservableValue = class {
71456
71256
  value;
71457
71257
  listeners = /* @__PURE__ */ new Set();
@@ -72611,8 +72411,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
72611
72411
  localStorage.setItem(key, value);
72612
72412
  } catch {}
72613
72413
  }
72614
- //#endregion
72615
- //#region src/client/terminal/recovery.ts
72414
+ // src/client/terminal/recovery.ts
72616
72415
  /**
72617
72416
  * 将 Host 已存在的终端补回当前 DSH 会话的 Sidebar。
72618
72417
  *
@@ -72766,8 +72565,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
72766
72565
  function isRecord$1(value) {
72767
72566
  return typeof value === "object" && value !== null;
72768
72567
  }
72769
- //#endregion
72770
- //#region src/client/terminal/styles.ts
72568
+ // src/client/terminal/styles.ts
72771
72569
  const STYLE_ID = "codingns4dsh-terminal-ui";
72772
72570
  const terminalClass = {
72773
72571
  guideEntry: "codingns4dsh-terminal-guide-entry",
@@ -72897,8 +72695,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
72897
72695
  .${terminalClass.cleanupNotice} button{border:.5px solid var(--dsw-alias-border-l3);color:inherit;cursor:pointer;background:transparent;border-radius:4px;flex-shrink:0;padding:4px 8px}
72898
72696
  @media (max-width:640px){.${terminalClass.list}{padding-left:6px;padding-right:6px}.${terminalClass.listActions}{margin-left:2px;padding-left:2px}.${terminalClass.toolsPanel}{padding-left:6px;padding-right:6px}}
72899
72697
  `;
72900
- //#endregion
72901
- //#region src/client/terminal/share-menu.ts
72698
+ // src/client/terminal/share-menu.ts
72902
72699
  const NEW_SESSION_ITEM = "terminal-share:new-session";
72903
72700
  /** 工具栏和选区按钮复用同一个原生菜单,选中会话即加入固定引用卡片。 */
72904
72701
  function TerminalShareMenu({ sharing, snapshot, sessionId, anchor, t, onClose, align = "end" }) {
@@ -73077,8 +72874,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
73077
72874
  function messageOf$2(value) {
73078
72875
  return value instanceof Error ? value.message : String(value);
73079
72876
  }
73080
- //#endregion
73081
- //#region src/client/terminal/selection-actions.ts
72877
+ // src/client/terminal/selection-actions.ts
73082
72878
  /** 根据公开选区末端定位按钮;窗口边缘与移动端可视视口内都保留间距。 */
73083
72879
  function positionTerminalSelectionActions(rect, end, cols, rows, viewportY, viewport) {
73084
72880
  const row = end.y - viewportY - (end.x === 0 && end.y > viewportY ? 1 : 0);
@@ -73256,8 +73052,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
73256
73052
  function messageOf$1(value) {
73257
73053
  return value instanceof Error ? value.message : String(value);
73258
73054
  }
73259
- //#endregion
73260
- //#region src/client/terminal/surface-cache.ts
73055
+ // src/client/terminal/surface-cache.ts
73261
73056
  /** 屏幕由终端模型持有;卡片只借用显示位置,不拥有屏幕的销毁权。 */
73262
73057
  var TerminalSurfaceCache = class {
73263
73058
  surfaces = /* @__PURE__ */ new WeakMap();
@@ -73274,8 +73069,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
73274
73069
  return surface;
73275
73070
  }
73276
73071
  };
73277
- //#endregion
73278
- //#region src/client/terminal/xterm-view.ts
73072
+ // src/client/terminal/xterm-view.ts
73279
73073
  /** 每个工作区终端只有一块屏幕,切换会话时移动 DOM,保留缓冲区、光标与滚动位置。 */
73280
73074
  const surfaces = new TerminalSurfaceCache();
73281
73075
  const loadXtermEngine = createEngineLoader(() => require.async("./client.xterm-engine.js"));
@@ -74088,8 +73882,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
74088
73882
  fence
74089
73883
  ].join("\n");
74090
73884
  }
74091
- //#endregion
74092
- //#region src/client/terminal/sharing.ts
73885
+ // src/client/terminal/sharing.ts
74093
73886
  /** 终端视图只登记读取器,不把 xterm 实例泄漏给会话输入框。 */
74094
73887
  var TerminalSharing = class {
74095
73888
  t;
@@ -74237,8 +74030,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
74237
74030
  return this.bridge;
74238
74031
  }
74239
74032
  };
74240
- //#endregion
74241
- //#region src/client/terminal/log-preview.ts
74033
+ // src/client/terminal/log-preview.ts
74242
74034
  /** 根级模态框常驻于 shell.overlay,关闭和焦点恢复由原生 Modal 处理。 */
74243
74035
  function TerminalLogPreview({ sharing, locale }) {
74244
74036
  const state = (0, react.useSyncExternalStore)(sharing.subscribePreview, sharing.getPreviewSnapshot, sharing.getPreviewSnapshot);
@@ -74277,8 +74069,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
74277
74069
  "aria-label": t("terminalShare.preview.title")
74278
74070
  }, snapshot.text || t("terminalShare.empty")));
74279
74071
  }
74280
- //#endregion
74281
- //#region src/client/terminal/ui.ts
74072
+ // src/client/terminal/ui.ts
74282
74073
  const TERMINAL_PROVIDER_ID = "codingns4dsh/terminal";
74283
74074
  const TERMINAL_KIND = "terminal";
74284
74075
  const AUTO_CREATE_INTENT_TTL_MS = 5e3;
@@ -74993,8 +74784,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
74993
74784
  strokeLinejoin: "round"
74994
74785
  }));
74995
74786
  }
74996
- //#endregion
74997
- //#region src/shared/runtime-environment.ts
74787
+ // src/shared/runtime-environment.ts
74998
74788
  /** Host 下发的运行环境标识;缺失或非布尔真值时按正式环境处理。 */
74999
74789
  const CODINGNS_STAGE0_GLOBAL = "__CODINGNS_STAGE0__";
75000
74790
  /** 浏览器只读 Host 注入值,不依赖 process、端口、URL 或用户设置。 */
@@ -75021,7 +74811,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
75021
74811
  "dsh-capabilities/host/session-prompt-adapter.ts",
75022
74812
  "host/features/session-prompt-translation.ts",
75023
74813
  "host/cli-adapters/feature.ts"
75024
- ]), route("session.external-model-selection", "session-external-model-selection-021", "host", ">=0.2.1-alpha.3", "supported", ["dsh-capabilities/host/session-model-selection-adapter.ts", "host/cli-adapters/feature.ts"]), route("session.activation", "session-activation-020", "host", ">=0.2.0-rc.2 <=0.2.1-alpha.2", "supported", ["dsh-capabilities/host/session-activation-adapter.ts", "host/native-session-bridge.ts"]), route("session.activation", "session-activation-021", "host", ">=0.2.1-alpha.3", "supported", ["dsh-capabilities/host/session-activation-adapter.ts", "host/native-session-bridge.ts"]), route("workspace.session-control", "workspace-session-control-020", "host", DSH_COMPATIBILITY, "supported", ["dsh-capabilities/host/workspace-session-control-adapter.ts", "host/workspace-mcp/tools.ts"]), route("workspace.pending-questions", "workspace-pending-questions-020", "host", DSH_COMPATIBILITY, "supported", ["dsh-capabilities/host/workspace-pending-questions-adapter.ts", "host/workspace-mcp/tools.ts"]), route("workspace.approval", "workspace-approval-020", "host", DSH_COMPATIBILITY, "supported", ["dsh-capabilities/host/workspace-approval-adapter.ts", "host/workspace-mcp/tools.ts"]), route("conversation.message-presentation", "message-presentation-020", "client", ">=0.2.0-rc.2 <=0.2.1-alpha.2", "supported", ["dsh-capabilities/client/message-presentation-adapter.ts", "client/session-translation-chat.ts"]), route("conversation.message-presentation", "message-presentation-021", "client", ">=0.2.1-alpha.3", "supported", ["dsh-capabilities/client/message-presentation-adapter.ts", "client/session-translation-chat.ts"]), route("connection.peer", "connection.peer-021", "host", ">=0.2.1-alpha.3", "supported", [
74814
+ ]), route("session.external-model-selection", "session-external-model-selection-021", "host", ">=0.2.1-alpha.3", "supported", ["dsh-capabilities/host/session-model-selection-adapter.ts", "host/cli-adapters/feature.ts"]), route("session.activation", "session-activation-020", "host", ">=0.2.1-alpha.2 <=0.2.1-alpha.2", "supported", ["dsh-capabilities/host/session-activation-adapter.ts", "host/native-session-bridge.ts"]), route("session.activation", "session-activation-021", "host", ">=0.2.1-alpha.3", "supported", ["dsh-capabilities/host/session-activation-adapter.ts", "host/native-session-bridge.ts"]), route("workspace.session-control", "workspace-session-control-020", "host", DSH_COMPATIBILITY, "supported", ["dsh-capabilities/host/workspace-session-control-adapter.ts", "host/workspace-mcp/tools.ts"]), route("workspace.pending-questions", "workspace-pending-questions-020", "host", DSH_COMPATIBILITY, "supported", ["dsh-capabilities/host/workspace-pending-questions-adapter.ts", "host/workspace-mcp/tools.ts"]), route("workspace.approval", "workspace-approval-020", "host", DSH_COMPATIBILITY, "supported", ["dsh-capabilities/host/workspace-approval-adapter.ts", "host/workspace-mcp/tools.ts"]), route("conversation.message-presentation", "message-presentation-020", "client", ">=0.2.1-alpha.2 <=0.2.1-alpha.2", "supported", ["dsh-capabilities/client/message-presentation-adapter.ts", "client/session-translation-chat.ts"]), route("conversation.message-presentation", "message-presentation-021", "client", ">=0.2.1-alpha.3", "supported", ["dsh-capabilities/client/message-presentation-adapter.ts", "client/session-translation-chat.ts"]), route("connection.peer", "connection.peer-021", "host", ">=0.2.1-alpha.3", "supported", [
75025
74815
  "dsh-capabilities/host/connection-peer-adapter.ts",
75026
74816
  "host/rpc.ts",
75027
74817
  "host/modules/peer-host/peer-host-native-dispatch.ts"
@@ -75030,7 +74820,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
75030
74820
  "dsh-capabilities/host/session-title-adapter.ts",
75031
74821
  "host/features/session-title-optimization.ts",
75032
74822
  "host/features/git-management.ts"
75033
- ]), route("settings.store", "legacy-settings-scope", "host", ">=0.1.5-rc.3 <=0.1.6", "supported", ["host/settings.ts", "host/features/*"]), route("settings.store", "config-forms", "host", ">=0.1.7-rc.2 <=0.1.7-rc.2", "supported", ["host/settings.ts", "client/settings-bridge.ts"]), route("connection.rpc", "legacy-rpc-handler", "host", ">=0.1.5-rc.3 <=0.1.6", "supported", ["host/rpc.ts"]), route("connection.rpc", "peer-aware-rpc-handler", "host", ">=0.1.7-rc.2 <=0.1.7-rc.2", "supported", ["host/rpc.ts"]), route("connection.peer", "peer-scope", "host", ">=0.1.7-rc.2 <=0.1.7-rc.2", "supported", ["host/rpc.ts"]), route("ui.icon.plus", "fixed-plus-icon", "client", ">=0.1.5-rc.3 <=0.1.6", "supported", ["client/terminal/xterm-view.ts"]), route("ui.icon.plus", "regular-plus-icon", "client", ">=0.1.7-rc.2 <=0.1.7-rc.2", "supported", ["client/terminal/xterm-view.ts"]), route("ui.icon.chevron", "fixed-chevron-icon", "client", ">=0.1.5-rc.3 <=0.1.6", "supported", ["client/terminal/ui.ts"]), route("ui.icon.chevron", "regular-chevron-icon", "client", ">=0.1.7-rc.2 <=0.1.7-rc.2", "supported", ["client/terminal/ui.ts"]), route("locale.runtime", "locale-runtime", "client", ">=0.1.5-rc.3 <=0.1.7-rc.2", "supported", ["client/locale.ts"]), route("theme.runtime", "theme-runtime", "client", ">=0.1.5-rc.3 <=0.1.7-rc.2", "supported", ["client/theme.ts"]), route("conversation.tool-call", "conversation-events", "client", ">=0.1.5-rc.3 <=0.1.7-rc.2", "supported", ["client/external-tool-stream.ts"]), route("sidebar.right", "sidebar-right-tabs", "client", ">=0.1.5-rc.3 <=0.1.7-rc.2", "supported", ["client/terminal/ui.ts"]), route("sidebar.global-panel", "sidebar-panellist-main-020", "client", DSH_COMPATIBILITY, "supported", ["dsh-capabilities/client/global-panel-adapter.ts", "client/features/magpie-management.ts"]), route("typert.remote", "remote-result", "host", ">=0.1.5-rc.3 <=0.1.7-rc.2", "supported", ["host/terminal/terminal-controller.ts", "client/terminal/model.ts"]), route("peer-host.store", "peer-host-store", "host", ">=0.1.5-rc.3 <=0.1.7-rc.2", "supported", ["host/features/peer-host.ts"]), route("peer-host.handshake", "peer-host-handshake", "host", ">=0.1.5-rc.3 <=0.1.7-rc.2", "supported", ["host/features/peer-host.ts"]), route("peer-host.http-proxy", "peer-host-http-proxy", "host", ">=0.1.5-rc.3 <=0.1.7-rc.2", "supported", ["host/features/peer-host.ts"]), route("peer-host.ws-proxy", "peer-host-ws-proxy", "host", ">=0.1.5-rc.3 <=0.1.7-rc.2", "supported", ["host/features/peer-host.ts"]), route("peer-host.aggregate", "peer-host-aggregate", "host", ">=0.1.5-rc.3 <=0.1.7-rc.2", "supported", ["host/features/peer-host.ts"]), route("peer-host.relay-route", "peer-host-relay-route", "host", ">=0.1.5-rc.3 <=0.1.7-rc.2", "supported", ["host/features/peer-host.ts"]), route("peer-host.native-navigation", "peer-host-native-navigation-legacy", "client", ">=0.1.5-rc.3 <=0.1.6", "deprecated", ["client/features/peer-host.ts"]), route("peer-host.native-navigation", "peer-host-native-navigation-modern", "client", ">=0.1.7-rc.2 <=0.1.7-rc.2", "supported", ["client/features/peer-host.ts"]), route("peer-host.remote-web-context-fallback", "peer-host-remote-web-context-fallback", "client", ">=0.1.5-rc.3 <=0.1.7-rc.2", "supported", ["client/features/peer-host.ts"]), route("settings.store", "settings-forms-020", "host", DSH_COMPATIBILITY, "supported", ["host/settings.ts", "host/rpc.ts"]), route("connection.rpc", "connection-rpc-020", "host", DSH_COMPATIBILITY, "supported", ["host/rpc.ts", "transport/dsh-transport.ts"]), route("connection.peer", "connection-peer-admission-020", "host", ">=0.2.0-rc.2 <=0.2.1-alpha.2", "supported", ["host/rpc.ts"]), route("connection.attachment", "connection-rpc-attachment-020", "host", DSH_COMPATIBILITY, "supported", ["host/rpc.ts", "transport/dsh-transport.ts"]), route("connection.uplink", "connection-rpc-uplink-020", "host", ">=0.2.0-rc.2 <=0.2.1-alpha.2", "supported", ["host/rpc.ts", "transport/dsh-transport.ts"]), route("typert.remote", "remote-context-stream-020", "host", DSH_COMPATIBILITY, "supported", ["host/terminal/terminal-controller.ts", "client/terminal/model.ts"]), route("typert.context", "typert-context-registry-020", "host", DSH_COMPATIBILITY, "supported", ["typert.host.ts", "host/terminal/terminal-controller.ts"]), route("typert.stream", "typert-remote-stream-020", "host", DSH_COMPATIBILITY, "supported", ["typert.host.ts", "typert.remote-client.ts"]), route("session.format-v4", "session-format-v4", "host", DSH_COMPATIBILITY, "supported", ["host/native-session-bridge.ts", "host/session-migration-repair.ts"]), route("subagent.continuable", "subagent-continuable-020", "host", ">=0.2.0-rc.1 <=0.2.1-alpha.1", "supported", ["host/cli-adapters/session-store.ts", "host/cli-adapters/feature.ts"]), route("subagent.continuable", "subagent-activation-021", "host", ">=0.2.1-alpha.2", "supported", ["host/cli-adapters/native-team-subagent.ts", "host/cli-adapters/native-subagent-dispatch.ts"]), route("agent-team.native", "agent-team-native-020", "host", DSH_COMPATIBILITY, "supported", ["host/cli-adapters/feature.ts", "host/cli-adapters/native-team-proxy.ts"]), route("agent-team.external-member", "agent-team-external-member-021", "host", ">=0.2.1-alpha.2", "supported", ["host/cli-adapters/feature.ts", "host/cli-bridge/team-dispatch.ts"]), route("agent-team.external-lead", "agent-team-external-lead-021", "host", ">=0.2.1-alpha.2", "supported", ["host/cli-adapters/feature.ts", "host/cli-bridge/team-dispatch.ts"]), route("ui.icon.plus", "regular-plus-icon-020", "client", DSH_COMPATIBILITY, "supported", ["client/terminal/xterm-view.ts"]), route("ui.icon.chevron", "regular-chevron-icon-020", "client", DSH_COMPATIBILITY, "supported", ["client/terminal/ui.ts"]), route("locale.runtime", "locale-runtime-020", "client", DSH_COMPATIBILITY, "supported", ["client/locale.ts"]), route("theme.runtime", "theme-runtime-020", "client", DSH_COMPATIBILITY, "supported", ["client/theme.ts"]), route("theme.font-scale", "theme-font-scale-021", "client", ">=0.2.1-alpha.2", "supported", ["client/font-scale.ts", "client/index.ts"]), route("conversation.tool-call", "conversation-events-020", "client", DSH_COMPATIBILITY, "supported", ["client/external-tool-stream.ts"]), route("conversation.draft-share", "conversation-draft-share-021", "client", ">=0.2.1-alpha.1", "supported", ["client/terminal/ui.ts", "client/terminal/sharing.ts"]), route("conversation.interaction-translation", "interaction-presentation-021", "client", DSH_COMPATIBILITY, "supported", ["client/session-translation-interactions.ts"]), route("sidebar.right", "sidebar-right-dock-020", "client", DSH_COMPATIBILITY, "supported", ["client/terminal/ui.ts"]), route("typert.remote", "remote-context-stream-020-client", "client", DSH_COMPATIBILITY, "supported", ["client/terminal/model.ts"]), route("typert.context", "typert-context-registry-020-client", "client", DSH_COMPATIBILITY, "supported", ["typert.remote-client.ts", "client/terminal/model.ts"]), route("typert.stream", "typert-remote-stream-020-client", "client", DSH_COMPATIBILITY, "supported", ["typert.remote-client.ts", "client/terminal/model.ts"]), route("client.boot-graph", "client-web-boot-graph-020", "client", DSH_COMPATIBILITY, "supported", ["client/index.ts", "package.json"]), route("peer-host.native-navigation", "peer-host-native-navigation-020", "client", DSH_COMPATIBILITY, "supported", ["client/features/peer-host.ts"]), route("peer-host.remote-web-context-fallback", "peer-host-remote-web-context-fallback-020", "client", DSH_COMPATIBILITY, "supported", ["client/features/peer-host.ts"]), route("peer-host.store", "peer-host-store-020", "host", DSH_COMPATIBILITY, "supported", ["host/features/peer-host.ts"]), route("peer-host.handshake", "peer-host-handshake-020", "host", DSH_COMPATIBILITY, "supported", ["host/features/peer-host.ts"]), route("peer-host.http-proxy", "peer-host-http-proxy-020", "host", DSH_COMPATIBILITY, "supported", ["host/features/peer-host.ts", "host/modules/peer-host/quick-app-gateway.ts"]), route("peer-host.ws-proxy", "peer-host-ws-proxy-020", "host", DSH_COMPATIBILITY, "supported", ["host/features/peer-host.ts"]), route("peer-host.aggregate", "peer-host-aggregate-020", "host", DSH_COMPATIBILITY, "supported", ["host/features/peer-host.ts"]), route("peer-host.aggregated-transport", "peer-host-aggregated-transport-020", "host", DSH_COMPATIBILITY, "supported", ["host/modules/peer-host/aggregated-host-transport.ts"]), route("peer-host.client-preboot-transport", "peer-host-client-preboot-transport-020", "client", DSH_COMPATIBILITY, "supported", [
74823
+ ]), route("settings.store", "legacy-settings-scope", "host", ">=0.1.5-rc.3 <=0.1.6", "supported", ["host/settings.ts", "host/features/*"]), route("settings.store", "config-forms", "host", ">=0.1.7-rc.2 <=0.1.7-rc.2", "supported", ["host/settings.ts", "client/settings-bridge.ts"]), route("connection.rpc", "legacy-rpc-handler", "host", ">=0.1.5-rc.3 <=0.1.6", "supported", ["host/rpc.ts"]), route("connection.rpc", "peer-aware-rpc-handler", "host", ">=0.1.7-rc.2 <=0.1.7-rc.2", "supported", ["host/rpc.ts"]), route("connection.peer", "peer-scope", "host", ">=0.1.7-rc.2 <=0.1.7-rc.2", "supported", ["host/rpc.ts"]), route("ui.icon.plus", "fixed-plus-icon", "client", ">=0.1.5-rc.3 <=0.1.6", "supported", ["client/terminal/xterm-view.ts"]), route("ui.icon.plus", "regular-plus-icon", "client", ">=0.1.7-rc.2 <=0.1.7-rc.2", "supported", ["client/terminal/xterm-view.ts"]), route("ui.icon.chevron", "fixed-chevron-icon", "client", ">=0.1.5-rc.3 <=0.1.6", "supported", ["client/terminal/ui.ts"]), route("ui.icon.chevron", "regular-chevron-icon", "client", ">=0.1.7-rc.2 <=0.1.7-rc.2", "supported", ["client/terminal/ui.ts"]), route("locale.runtime", "locale-runtime", "client", ">=0.1.5-rc.3 <=0.1.7-rc.2", "supported", ["client/locale.ts"]), route("theme.runtime", "theme-runtime", "client", ">=0.1.5-rc.3 <=0.1.7-rc.2", "supported", ["client/theme.ts"]), route("conversation.tool-call", "conversation-events", "client", ">=0.1.5-rc.3 <=0.1.7-rc.2", "supported", ["client/external-tool-stream.ts"]), route("sidebar.right", "sidebar-right-tabs", "client", ">=0.1.5-rc.3 <=0.1.7-rc.2", "supported", ["client/terminal/ui.ts"]), route("sidebar.global-panel", "sidebar-panellist-main-020", "client", DSH_COMPATIBILITY, "supported", ["dsh-capabilities/client/global-panel-adapter.ts", "client/features/magpie-management.ts"]), route("typert.remote", "remote-result", "host", ">=0.1.5-rc.3 <=0.1.7-rc.2", "supported", ["host/terminal/terminal-controller.ts", "client/terminal/model.ts"]), route("peer-host.store", "peer-host-store", "host", ">=0.1.5-rc.3 <=0.1.7-rc.2", "supported", ["host/features/peer-host.ts"]), route("peer-host.handshake", "peer-host-handshake", "host", ">=0.1.5-rc.3 <=0.1.7-rc.2", "supported", ["host/features/peer-host.ts"]), route("peer-host.http-proxy", "peer-host-http-proxy", "host", ">=0.1.5-rc.3 <=0.1.7-rc.2", "supported", ["host/features/peer-host.ts"]), route("peer-host.ws-proxy", "peer-host-ws-proxy", "host", ">=0.1.5-rc.3 <=0.1.7-rc.2", "supported", ["host/features/peer-host.ts"]), route("peer-host.aggregate", "peer-host-aggregate", "host", ">=0.1.5-rc.3 <=0.1.7-rc.2", "supported", ["host/features/peer-host.ts"]), route("peer-host.relay-route", "peer-host-relay-route", "host", ">=0.1.5-rc.3 <=0.1.7-rc.2", "supported", ["host/features/peer-host.ts"]), route("peer-host.native-navigation", "peer-host-native-navigation-legacy", "client", ">=0.1.5-rc.3 <=0.1.6", "deprecated", ["client/features/peer-host.ts"]), route("peer-host.native-navigation", "peer-host-native-navigation-modern", "client", ">=0.1.7-rc.2 <=0.1.7-rc.2", "supported", ["client/features/peer-host.ts"]), route("peer-host.remote-web-context-fallback", "peer-host-remote-web-context-fallback", "client", ">=0.1.5-rc.3 <=0.1.7-rc.2", "supported", ["client/features/peer-host.ts"]), route("settings.store", "settings-forms-020", "host", DSH_COMPATIBILITY, "supported", ["host/settings.ts", "host/rpc.ts"]), route("connection.rpc", "connection-rpc-020", "host", DSH_COMPATIBILITY, "supported", ["host/rpc.ts", "transport/dsh-transport.ts"]), route("connection.peer", "connection-peer-admission-020", "host", ">=0.2.1-alpha.2 <=0.2.1-alpha.2", "supported", ["host/rpc.ts"]), route("connection.attachment", "connection-rpc-attachment-020", "host", DSH_COMPATIBILITY, "supported", ["host/rpc.ts", "transport/dsh-transport.ts"]), route("connection.uplink", "connection-rpc-uplink-020", "host", ">=0.2.1-alpha.2 <=0.2.1-alpha.2", "supported", ["host/rpc.ts", "transport/dsh-transport.ts"]), route("typert.remote", "remote-context-stream-020", "host", DSH_COMPATIBILITY, "supported", ["host/terminal/terminal-controller.ts", "client/terminal/model.ts"]), route("typert.context", "typert-context-registry-020", "host", DSH_COMPATIBILITY, "supported", ["typert.host.ts", "host/terminal/terminal-controller.ts"]), route("typert.stream", "typert-remote-stream-020", "host", DSH_COMPATIBILITY, "supported", ["typert.host.ts", "typert.remote-client.ts"]), route("session.format-v4", "session-format-v4", "host", DSH_COMPATIBILITY, "supported", ["host/native-session-bridge.ts", "host/session-migration-repair.ts"]), route("subagent.continuable", "subagent-activation-021", "host", ">=0.2.1-alpha.2", "supported", ["host/cli-adapters/native-team-subagent.ts", "host/cli-adapters/native-subagent-dispatch.ts"]), route("agent-team.native", "agent-team-native-020", "host", DSH_COMPATIBILITY, "supported", ["host/cli-adapters/feature.ts", "host/cli-adapters/native-team-proxy.ts"]), route("agent-team.external-member", "agent-team-external-member-021", "host", ">=0.2.1-alpha.2", "supported", ["host/cli-adapters/feature.ts", "host/cli-bridge/team-dispatch.ts"]), route("agent-team.external-lead", "agent-team-external-lead-021", "host", ">=0.2.1-alpha.2", "supported", ["host/cli-adapters/feature.ts", "host/cli-bridge/team-dispatch.ts"]), route("ui.icon.plus", "regular-plus-icon-020", "client", DSH_COMPATIBILITY, "supported", ["client/terminal/xterm-view.ts"]), route("ui.icon.chevron", "regular-chevron-icon-020", "client", DSH_COMPATIBILITY, "supported", ["client/terminal/ui.ts"]), route("locale.runtime", "locale-runtime-020", "client", DSH_COMPATIBILITY, "supported", ["client/locale.ts"]), route("theme.runtime", "theme-runtime-020", "client", DSH_COMPATIBILITY, "supported", ["client/theme.ts"]), route("theme.font-scale", "theme-font-scale-021", "client", ">=0.2.1-alpha.2", "supported", ["client/font-scale.ts", "client/index.ts"]), route("conversation.tool-call", "conversation-events-020", "client", DSH_COMPATIBILITY, "supported", ["client/external-tool-stream.ts"]), route("conversation.draft-share", "conversation-draft-share-021", "client", ">=0.2.1-alpha.1", "supported", ["client/terminal/ui.ts", "client/terminal/sharing.ts"]), route("conversation.interaction-translation", "interaction-presentation-021", "client", DSH_COMPATIBILITY, "supported", ["client/session-translation-interactions.ts"]), route("sidebar.right", "sidebar-right-dock-020", "client", DSH_COMPATIBILITY, "supported", ["client/terminal/ui.ts"]), route("typert.remote", "remote-context-stream-020-client", "client", DSH_COMPATIBILITY, "supported", ["client/terminal/model.ts"]), route("typert.context", "typert-context-registry-020-client", "client", DSH_COMPATIBILITY, "supported", ["typert.remote-client.ts", "client/terminal/model.ts"]), route("typert.stream", "typert-remote-stream-020-client", "client", DSH_COMPATIBILITY, "supported", ["typert.remote-client.ts", "client/terminal/model.ts"]), route("client.boot-graph", "client-web-boot-graph-020", "client", DSH_COMPATIBILITY, "supported", ["client/index.ts", "package.json"]), route("peer-host.native-navigation", "peer-host-native-navigation-020", "client", DSH_COMPATIBILITY, "supported", ["client/features/peer-host.ts"]), route("peer-host.remote-web-context-fallback", "peer-host-remote-web-context-fallback-020", "client", DSH_COMPATIBILITY, "supported", ["client/features/peer-host.ts"]), route("peer-host.store", "peer-host-store-020", "host", DSH_COMPATIBILITY, "supported", ["host/features/peer-host.ts"]), route("peer-host.handshake", "peer-host-handshake-020", "host", DSH_COMPATIBILITY, "supported", ["host/features/peer-host.ts"]), route("peer-host.http-proxy", "peer-host-http-proxy-020", "host", DSH_COMPATIBILITY, "supported", ["host/features/peer-host.ts", "host/modules/peer-host/quick-app-gateway.ts"]), route("peer-host.ws-proxy", "peer-host-ws-proxy-020", "host", DSH_COMPATIBILITY, "supported", ["host/features/peer-host.ts"]), route("peer-host.aggregate", "peer-host-aggregate-020", "host", DSH_COMPATIBILITY, "supported", ["host/features/peer-host.ts"]), route("peer-host.aggregated-transport", "peer-host-aggregated-transport-020", "host", DSH_COMPATIBILITY, "supported", ["host/modules/peer-host/aggregated-host-transport.ts"]), route("peer-host.client-preboot-transport", "peer-host-client-preboot-transport-020", "client", DSH_COMPATIBILITY, "supported", [
75034
74824
  "bootstrap/index.ts",
75035
74825
  "host/index-injection.ts",
75036
74826
  "client/features/peer-host.ts"
@@ -75053,8 +74843,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
75053
74843
  consumers
75054
74844
  };
75055
74845
  }
75056
- //#endregion
75057
- //#region node_modules/.pnpm/@deepseek-ai+dsh-util-workspace-path@0.2.1-rc.5_@deepseek-ai+cordis@4.0.5/node_modules/@deepseek-ai/dsh-util-workspace-path/lib/index.js
74846
+ // node_modules/.pnpm/@deepseek-ai+dsh-util-workspace-path@0.2.2-alpha.2_@deepseek-ai+cordis@4.0.6-alpha.1/node_modules/@deepseek-ai/dsh-util-workspace-path/lib/index.js
75058
74847
  /**
75059
74848
  * The `dsh-resource://file/…` address grammar: how a file is named across the
75060
74849
  * Sidebar and the resource model, built and parsed without touching a
@@ -75123,8 +74912,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
75123
74912
  return;
75124
74913
  }
75125
74914
  }
75126
- //#endregion
75127
- //#region src/client/session-file-links.ts
74915
+ // src/client/session-file-links.ts
75128
74916
  /**
75129
74917
  * 在原生资源入口规范本地及远端链接,保留资源里的会话身份和导航参数。
75130
74918
  * 右栏文件树、消息与预览内链接共用这个入口;不扫描消息正文或当前选择。
@@ -75165,8 +74953,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
75165
74953
  return workspace?.workspacePath ?? sessions?.getSnapshot().byId?.[sessionId]?.cwd ?? workspace?.path;
75166
74954
  });
75167
74955
  }
75168
- //#endregion
75169
- //#region node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/util.js
74956
+ // node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/util.js
75170
74957
  function getEnumValues(entries) {
75171
74958
  const numericValues = Object.values(entries).filter((v) => typeof v === "number");
75172
74959
  return Object.entries(entries).filter(([k, _]) => numericValues.indexOf(+k) === -1).map(([_, v]) => v);
@@ -75473,6 +75260,17 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
75473
75260
  function unwrapMessage(message) {
75474
75261
  return typeof message === "string" ? message : message?.message;
75475
75262
  }
75263
+ /** The leading size checks of `defChecks` that set an upper bound, each paired with it. */
75264
+ function sizeCaps(defChecks) {
75265
+ const caps = [];
75266
+ for (const ch of defChecks ?? []) {
75267
+ const d = ch._zod.def;
75268
+ if (!/_(length|size)$|_equals$/.test(d.check)) break;
75269
+ const max = d.maximum ?? d.length ?? d.size;
75270
+ if (max >= 0) caps.push([max, ch]);
75271
+ }
75272
+ return caps;
75273
+ }
75476
75274
  function attachSchema(issues, start, inst) {
75477
75275
  var _a;
75478
75276
  for (let i = start; i < issues.length; i++) (_a = issues[i]).schema ?? (_a.schema = inst);
@@ -75565,6 +75363,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
75565
75363
  return own(inst, key, value, false);
75566
75364
  }
75567
75365
  /** Adds members a table derives from the instance: each builds on first read and shadows as own data, and assignment shadows the same way, as when these were own properties. */
75366
+ /* @__NO_SIDE_EFFECTS__ */
75568
75367
  function derived(computes, table) {
75569
75368
  for (const key in computes) {
75570
75369
  const compute = computes[key];
@@ -75688,8 +75487,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
75688
75487
  fn[CONSTANT_CATCH] = true;
75689
75488
  return fn;
75690
75489
  }
75691
- //#endregion
75692
- //#region node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/core.js
75490
+ // node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/core.js
75693
75491
  var _a$1;
75694
75492
  const _zodDesc = {
75695
75493
  value: void 0,
@@ -75716,6 +75514,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
75716
75514
  }
75717
75515
  return new Definition();
75718
75516
  }
75517
+ /* @__NO_SIDE_EFFECTS__ */
75719
75518
  function $constructor(name, initializer, proto, params) {
75720
75519
  const zodProto = {};
75721
75520
  function Internals(def) {
@@ -75794,8 +75593,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
75794
75593
  if (newConfig) Object.assign(globalConfig, newConfig);
75795
75594
  return globalConfig;
75796
75595
  }
75797
- //#endregion
75798
- //#region node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/errors.js
75596
+ // node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/errors.js
75799
75597
  function _getMessage() {
75800
75598
  const internals = this._zod;
75801
75599
  internals.message ?? (internals.message = JSON.stringify(internals.def, jsonStringifyReplacer, 2));
@@ -75846,8 +75644,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
75846
75644
  });
75847
75645
  }
75848
75646
  };
75849
- const $ZodError = $constructor("$ZodError", initializer$1);
75850
- $constructor("$ZodError", initializer$1, void 0, { Parent: Error });
75647
+ const $ZodError = /* @__PURE__ */ $constructor("$ZodError", initializer$1);
75851
75648
  /** Get-or-create `obj[key]` as an own data property. A path segment naming an inherited member
75852
75649
  * ("toString", "constructor") would otherwise read through to the prototype, and assigning
75853
75650
  * "__proto__" would hit the setter instead of creating a key. */
@@ -75910,8 +75707,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
75910
75707
  processError(error);
75911
75708
  return fieldErrors;
75912
75709
  }
75913
- //#endregion
75914
- //#region node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/parse.js
75710
+ // node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/parse.js
75915
75711
  function finalizeParams(callee, params) {
75916
75712
  return {
75917
75713
  callee: params?.callee ?? callee,
@@ -76113,8 +75909,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
76113
75909
  const _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {
76114
75910
  return _safeParseAsync(_Err)(schema, value, _ctx);
76115
75911
  };
76116
- //#endregion
76117
- //#region node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/regexes.js
75912
+ // node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/regexes.js
76118
75913
  /**
76119
75914
  * @deprecated CUID v1 is deprecated by its authors due to information leakage
76120
75915
  * (timestamps embedded in the id). Use {@link cuid2} instead.
@@ -76183,8 +75978,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
76183
75978
  const number$1 = /^-?\d+(?:\.\d+)?$/;
76184
75979
  const lowercase = /^[^A-Z]*$/;
76185
75980
  const uppercase = /^[^a-z]*$/;
76186
- //#endregion
76187
- //#region node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/checks.js
75981
+ // node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/checks.js
76188
75982
  const $ZodCheck = /*@__PURE__*/ $constructor("$ZodCheck", (inst, def) => {
76189
75983
  var _a;
76190
75984
  inst._zod ?? (inst._zod = {});
@@ -76479,8 +76273,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
76479
76273
  payload.value = def.tx(payload.value);
76480
76274
  };
76481
76275
  });
76482
- //#endregion
76483
- //#region node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/doc.js
76276
+ // node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/doc.js
76484
76277
  var Doc = class {
76485
76278
  constructor(args = [], closed = {}) {
76486
76279
  this.content = [];
@@ -76513,15 +76306,13 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
76513
76306
  return new F(...Object.keys(this.closed), `return function (${this.args.join(", ")}) {\n${content.join("\n")}\n};`)(...Object.values(this.closed));
76514
76307
  }
76515
76308
  };
76516
- //#endregion
76517
- //#region node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/versions.js
76309
+ // node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/versions.js
76518
76310
  const version = {
76519
76311
  major: 4,
76520
76312
  minor: 6,
76521
- patch: 5
76313
+ patch: 7
76522
76314
  };
76523
- //#endregion
76524
- //#region node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/schemas.js
76315
+ // node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/schemas.js
76525
76316
  const $ZodType = /*@__PURE__*/ $constructor("$ZodType", (inst, def) => {
76526
76317
  var _a;
76527
76318
  inst ?? (inst = {});
@@ -77014,6 +76805,26 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
77014
76805
  return payload;
77015
76806
  };
77016
76807
  });
76808
+ function capSize(inst, size) {
76809
+ const caps = sizeCaps(inst._zod.def.checks);
76810
+ if (!caps.length) return;
76811
+ const cap = Math.min(...caps.map((c) => c[0]));
76812
+ const parse = inst._zod.parse;
76813
+ inst._zod.parse = (payload, ctx) => {
76814
+ const n = size(payload.value);
76815
+ if (n > cap && !ctx?.skipChecks && ctx?.direction !== "backward") {
76816
+ for (const [max, ch] of sizeCaps(inst._zod.def.checks)) if (n > max && ch._zod.def.when(payload)) {
76817
+ const start = payload.issues.length;
76818
+ ch._zod.check(payload);
76819
+ payload.issues[start].continue = false;
76820
+ attachSchema(payload.issues, start, inst);
76821
+ return payload;
76822
+ }
76823
+ }
76824
+ return parse(payload, ctx);
76825
+ };
76826
+ }
76827
+ const arraySize = (input) => Array.isArray(input) ? input.length : -1;
77017
76828
  function handleArrayResult(result, final, index) {
77018
76829
  if (result.issues.length) final.issues.push(...prefixIssues(index, result.issues));
77019
76830
  final.value[index] = result.value;
@@ -77051,6 +76862,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
77051
76862
  if (proms.length) return Promise.all(proms).then(() => payload);
77052
76863
  return payload;
77053
76864
  };
76865
+ capSize(inst, arraySize);
77054
76866
  });
77055
76867
  function handlePropertyResult(result, final, key, input, optin, optout) {
77056
76868
  const isPresent = key in input;
@@ -77159,7 +76971,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
77159
76971
  }
77160
76972
  return propValues;
77161
76973
  });
77162
- const isObject$3 = isObject;
76974
+ const isObject$2 = isObject;
77163
76975
  const catchall = def.catchall;
77164
76976
  let value;
77165
76977
  const memo = globalConfig.memoizer;
@@ -77167,7 +76979,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
77167
76979
  inst._zod.parse = (payload, ctx) => {
77168
76980
  value ?? (value = _normalized.value);
77169
76981
  const input = payload.value;
77170
- if (!isObject$3(input)) {
76982
+ if (!isObject$2(input)) {
77171
76983
  payload.issues.push({
77172
76984
  expected: "object",
77173
76985
  code: "invalid_type",
@@ -77297,7 +77109,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
77297
77109
  return doc.compile();
77298
77110
  };
77299
77111
  let fastpass;
77300
- const isObject$2 = isObject;
77112
+ const isObject$3 = isObject;
77301
77113
  const jit = !globalConfig.jitless;
77302
77114
  const fastEnabled = jit && allowsEval.value;
77303
77115
  const catchall = def.catchall;
@@ -77305,7 +77117,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
77305
77117
  inst._zod.parse = (payload, ctx) => {
77306
77118
  value ?? (value = _normalized.value);
77307
77119
  const input = payload.value;
77308
- if (!isObject$2(input)) {
77120
+ if (!isObject$3(input)) {
77309
77121
  payload.issues.push({
77310
77122
  expected: "object",
77311
77123
  code: "invalid_type",
@@ -77754,8 +77566,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
77754
77566
  payload.issues.push(issue(_iss));
77755
77567
  }
77756
77568
  }
77757
- //#endregion
77758
- //#region node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/memoizer.js
77569
+ // node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/memoizer.js
77759
77570
  var $ZodCyclicError = class extends Error {
77760
77571
  constructor() {
77761
77572
  super(`Cannot parse a reference cycle that closes through a transform`);
@@ -78007,8 +77818,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
78007
77818
  const backEdges = ctx[STATE]?.backEdges;
78008
77819
  return backEdges !== void 0 && isRef(value) && backEdges.has(value);
78009
77820
  }
78010
- //#endregion
78011
- //#region node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/locales/en.js
77821
+ // node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/locales/en.js
78012
77822
  const error = () => {
78013
77823
  const Sizable = {
78014
77824
  string: {
@@ -78115,8 +77925,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
78115
77925
  function en_default() {
78116
77926
  return { localeError: error() };
78117
77927
  }
78118
- //#endregion
78119
- //#region node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/registries.js
77928
+ // node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/registries.js
78120
77929
  var _a;
78121
77930
  var $ZodRegistry = class {
78122
77931
  constructor() {
@@ -78162,8 +77971,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
78162
77971
  }
78163
77972
  (_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());
78164
77973
  const globalRegistry = globalThis.__zod_globalRegistry;
78165
- //#endregion
78166
- //#region node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/api.js
77974
+ // node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/api.js
78167
77975
  function snapshotChecks(def) {
78168
77976
  if (def.checks) def.checks = [...def.checks];
78169
77977
  return def;
@@ -78671,8 +78479,7 @@ button.${settingsPromoClass.version}:focus-visible{${focusRing}}
78671
78479
  ch._zod.check = fn;
78672
78480
  return ch;
78673
78481
  }
78674
- //#endregion
78675
- //#region node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/to-json-schema.js
78482
+ // node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/to-json-schema.js
78676
78483
  function assignProps(target, ...sources) {
78677
78484
  for (const source of sources) for (const key of Reflect.ownKeys(source)) if (Object.prototype.propertyIsEnumerable.call(source, key)) assignProp(target, key, source[key]);
78678
78485
  return target;
@@ -79115,8 +78922,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
79115
78922
  extractDefs(ctx, schema);
79116
78923
  return finalize(ctx, schema);
79117
78924
  };
79118
- //#endregion
79119
- //#region node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/core/json-schema-processors.js
78925
+ // node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/json-schema-processors.js
79120
78926
  const narrowMin = (agg, key, value) => {
79121
78927
  if (agg[key] === void 0 || value > agg[key]) agg[key] = value;
79122
78928
  };
@@ -79462,8 +79268,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
79462
79268
  const seen = ctx.seen.get(schema);
79463
79269
  seen.ref = def.innerType;
79464
79270
  };
79465
- //#endregion
79466
- //#region node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/errors.js
79271
+ // node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/classic/errors.js
79467
79272
  const _installedErrorProtos = /* @__PURE__ */ new WeakSet([Object.prototype, Error.prototype]);
79468
79273
  function _lazyMethod(proto, key, make) {
79469
79274
  Object.defineProperty(proto, key, {
@@ -79512,8 +79317,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
79512
79317
  });
79513
79318
  };
79514
79319
  const ZodRealError = /*@__PURE__*/ $constructor("ZodError", initializer, void 0, { Parent: Error });
79515
- //#endregion
79516
- //#region node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/parse.js
79320
+ // node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/classic/parse.js
79517
79321
  const parse = /* @__PURE__ */ _parse(ZodRealError);
79518
79322
  const parseAsync = /* @__PURE__ */ _parseAsync(ZodRealError);
79519
79323
  const safeParse = /* @__PURE__ */ _safeParse(ZodRealError);
@@ -79526,8 +79330,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
79526
79330
  const safeDecode = /* @__PURE__ */ _safeDecode(ZodRealError);
79527
79331
  const safeEncodeAsync = /* @__PURE__ */ _safeEncodeAsync(ZodRealError);
79528
79332
  const safeDecodeAsync = /* @__PURE__ */ _safeDecodeAsync(ZodRealError);
79529
- //#endregion
79530
- //#region node_modules/.pnpm/zod@4.6.5/node_modules/zod/v4/classic/schemas.js
79333
+ // node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/classic/schemas.js
79531
79334
  function _ensureDefaultLocale() {
79532
79335
  if (!globalConfig.localeError) config(en_default());
79533
79336
  }
@@ -80374,8 +80177,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
80374
80177
  function superRefine(fn, params) {
80375
80178
  return /* @__PURE__ */ _superRefine(fn, params);
80376
80179
  }
80377
- //#endregion
80378
- //#region src/typert.host.ts
80180
+ // src/typert.host.ts
80379
80181
  const sessionIdSchema = string();
80380
80182
  const terminalIdSchema = string();
80381
80183
  const attachmentIdSchema = string();
@@ -80564,14 +80366,12 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
80564
80366
  objects: []
80565
80367
  }
80566
80368
  };
80567
- //#endregion
80568
- //#region src/typert.remote-client.ts
80369
+ // src/typert.remote-client.ts
80569
80370
  const TYPERT_REMOTE = {
80570
80371
  package: TYPERT.package,
80571
80372
  descriptors: TYPERT.invocations.filter((item) => item.namespace === "codingnsTerminal")
80572
80373
  };
80573
- //#endregion
80574
- //#region src/client/pwa-notifications.ts
80374
+ // src/client/pwa-notifications.ts
80575
80375
  /** 通知与推送的统一入口;同一实例可重复调用。 */
80576
80376
  var PwaNotificationClient = class {
80577
80377
  globalLike;
@@ -80723,8 +80523,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
80723
80523
  for (let index = 0; index < binary.length; index += 1) bytes[index] = binary.charCodeAt(index);
80724
80524
  return bytes;
80725
80525
  }
80726
- //#endregion
80727
- //#region src/client/index.ts
80526
+ // src/client/index.ts
80728
80527
  /** Client Runner 用于等待核心服务就绪的 Cordis 依赖声明。 */
80729
80528
  const inject = [
80730
80529
  "slots",
@@ -80950,7 +80749,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
80950
80749
  readLatest: async () => callCodingNsRpc(rpc, "settings/get", {})
80951
80750
  });
80952
80751
  }
80953
- //#endregion
80954
80752
  exports.CLIENT_FEATURES = CLIENT_FEATURES;
80955
80753
  exports.CONTEXT_BREAKDOWN_CONVERSATION_ATTRIBUTE = CONTEXT_BREAKDOWN_CONVERSATION_ATTRIBUTE;
80956
80754
  exports.CONTEXT_BREAKDOWN_HIDDEN_ATTRIBUTE = CONTEXT_BREAKDOWN_HIDDEN_ATTRIBUTE;
@@ -81004,5 +80802,5 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
81004
80802
  });
81005
80803
 
81006
80804
  })();
81007
- // codingns-client-revision: 60679affa9dc32eff2c816403a4d5d04e73ba823e4612ac0bd5c12aac3db282f
80805
+ // codingns-client-revision: 670f31c71312770761eba2caa6de2527dfbe3de6c81d8774ffd3ae84834cef9c
81008
80806
  //# sourceMappingURL=bundle.js.map