@jingyi0605/codingns4dsh 0.2.1-beta.13 → 0.2.1-beta.14

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 (247) hide show
  1. package/README.en.md +5 -5
  2. package/README.md +6 -9
  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 +675 -106
  8. package/data/build/dist/client/bundle.js.map +1 -1
  9. package/data/build/dist/client/cli-slots.d.ts.map +1 -1
  10. package/data/build/dist/client/cli-slots.js +11 -3
  11. package/data/build/dist/client/cli-slots.js.map +1 -1
  12. package/data/build/dist/client/client.model-catalog-cache.js +9 -1
  13. package/data/build/dist/client/client.model-catalog-cache.js.map +1 -1
  14. package/data/build/dist/client/client.native-workspace-store.js +9 -15
  15. package/data/build/dist/client/client.native-workspace-store.js.map +1 -1
  16. package/data/build/dist/client/client.transport.js +28 -0
  17. package/data/build/dist/client/client.transport.js.map +1 -1
  18. package/data/build/dist/client/desktop-assistant.js +138 -110
  19. package/data/build/dist/client/features/cli-adapters.js +3 -1
  20. package/data/build/dist/client/features/cli-adapters.js.map +1 -1
  21. package/data/build/dist/client/features/mobile-access.d.ts.map +1 -1
  22. package/data/build/dist/client/features/mobile-access.js +7 -0
  23. package/data/build/dist/client/features/mobile-access.js.map +1 -1
  24. package/data/build/dist/client/features/workspace-session-enhancement.d.ts.map +1 -1
  25. package/data/build/dist/client/features/workspace-session-enhancement.js +6 -0
  26. package/data/build/dist/client/features/workspace-session-enhancement.js.map +1 -1
  27. package/data/build/dist/client/git-management.d.ts.map +1 -1
  28. package/data/build/dist/client/git-management.js +11 -30
  29. package/data/build/dist/client/git-management.js.map +1 -1
  30. package/data/build/dist/client/git-panel-styles.d.ts +4 -0
  31. package/data/build/dist/client/git-panel-styles.d.ts.map +1 -1
  32. package/data/build/dist/client/git-panel-styles.js +14 -0
  33. package/data/build/dist/client/git-panel-styles.js.map +1 -1
  34. package/data/build/dist/client/locale.d.ts.map +1 -1
  35. package/data/build/dist/client/locale.js +8 -0
  36. package/data/build/dist/client/locale.js.map +1 -1
  37. package/data/build/dist/client/locales/cliManagement.d.ts.map +1 -1
  38. package/data/build/dist/client/locales/cliManagement.js +16 -0
  39. package/data/build/dist/client/locales/cliManagement.js.map +1 -1
  40. package/data/build/dist/client/locales/quickApps.d.ts +2 -0
  41. package/data/build/dist/client/locales/quickApps.d.ts.map +1 -1
  42. package/data/build/dist/client/locales/quickApps.js +4 -0
  43. package/data/build/dist/client/locales/quickApps.js.map +1 -1
  44. package/data/build/dist/client/mobile-team-panel-dom.d.ts +14 -0
  45. package/data/build/dist/client/mobile-team-panel-dom.d.ts.map +1 -0
  46. package/data/build/dist/client/mobile-team-panel-dom.js +164 -0
  47. package/data/build/dist/client/mobile-team-panel-dom.js.map +1 -0
  48. package/data/build/dist/client/provider-icons.d.ts.map +1 -1
  49. package/data/build/dist/client/provider-icons.js +3 -1
  50. package/data/build/dist/client/provider-icons.js.map +1 -1
  51. package/data/build/dist/client/quick-apps/browser-storage.d.ts +24 -0
  52. package/data/build/dist/client/quick-apps/browser-storage.d.ts.map +1 -0
  53. package/data/build/dist/client/quick-apps/browser-storage.js +114 -0
  54. package/data/build/dist/client/quick-apps/browser-storage.js.map +1 -0
  55. package/data/build/dist/client/quick-apps/client.d.ts +3 -1
  56. package/data/build/dist/client/quick-apps/client.d.ts.map +1 -1
  57. package/data/build/dist/client/quick-apps/client.js +2 -2
  58. package/data/build/dist/client/quick-apps/client.js.map +1 -1
  59. package/data/build/dist/client/quick-apps/launcher.js +2 -2
  60. package/data/build/dist/client/quick-apps/launcher.js.map +1 -1
  61. package/data/build/dist/client/quick-apps/viewer.d.ts.map +1 -1
  62. package/data/build/dist/client/quick-apps/viewer.js +12 -2
  63. package/data/build/dist/client/quick-apps/viewer.js.map +1 -1
  64. package/data/build/dist/client/style.css +219 -219
  65. package/data/build/dist/client/workspace-session-rightbar-dom.d.ts.map +1 -1
  66. package/data/build/dist/client/workspace-session-rightbar-dom.js +12 -21
  67. package/data/build/dist/client/workspace-session-rightbar-dom.js.map +1 -1
  68. package/data/build/dist/client/workspace-session-visibility-dom.d.ts +3 -0
  69. package/data/build/dist/client/workspace-session-visibility-dom.d.ts.map +1 -1
  70. package/data/build/dist/client/workspace-session-visibility-dom.js +5 -4
  71. package/data/build/dist/client/workspace-session-visibility-dom.js.map +1 -1
  72. package/data/build/dist/dsh-capabilities/host/agent-team-adapter.d.ts +52 -0
  73. package/data/build/dist/dsh-capabilities/host/agent-team-adapter.d.ts.map +1 -0
  74. package/data/build/dist/dsh-capabilities/host/agent-team-adapter.js +109 -0
  75. package/data/build/dist/dsh-capabilities/host/agent-team-adapter.js.map +1 -0
  76. package/data/build/dist/dsh-capabilities/matrix.d.ts.map +1 -1
  77. package/data/build/dist/dsh-capabilities/matrix.js +11 -9
  78. package/data/build/dist/dsh-capabilities/matrix.js.map +1 -1
  79. package/data/build/dist/dsh-capabilities/routes.d.ts.map +1 -1
  80. package/data/build/dist/dsh-capabilities/routes.js +13 -8
  81. package/data/build/dist/dsh-capabilities/routes.js.map +1 -1
  82. package/data/build/dist/dsh-capabilities/types.d.ts +1 -1
  83. package/data/build/dist/dsh-capabilities/types.d.ts.map +1 -1
  84. package/data/build/dist/dsh-capabilities/types.js.map +1 -1
  85. package/data/build/dist/host/cli-adapters/acp-cli-driver.d.ts.map +1 -1
  86. package/data/build/dist/host/cli-adapters/acp-cli-driver.js +6 -3
  87. package/data/build/dist/host/cli-adapters/acp-cli-driver.js.map +1 -1
  88. package/data/build/dist/host/cli-adapters/claude-driver.d.ts.map +1 -1
  89. package/data/build/dist/host/cli-adapters/claude-driver.js +4 -0
  90. package/data/build/dist/host/cli-adapters/claude-driver.js.map +1 -1
  91. package/data/build/dist/host/cli-adapters/codex-driver.d.ts.map +1 -1
  92. package/data/build/dist/host/cli-adapters/codex-driver.js +13 -6
  93. package/data/build/dist/host/cli-adapters/codex-driver.js.map +1 -1
  94. package/data/build/dist/host/cli-adapters/command-code-acp-loader.d.ts.map +1 -1
  95. package/data/build/dist/host/cli-adapters/command-code-acp-loader.js +11 -1
  96. package/data/build/dist/host/cli-adapters/command-code-acp-loader.js.map +1 -1
  97. package/data/build/dist/host/cli-adapters/command-code-driver.js +3 -2
  98. package/data/build/dist/host/cli-adapters/command-code-driver.js.map +1 -1
  99. package/data/build/dist/host/cli-adapters/desktop-app-runtime.d.ts +3 -1
  100. package/data/build/dist/host/cli-adapters/desktop-app-runtime.d.ts.map +1 -1
  101. package/data/build/dist/host/cli-adapters/desktop-app-runtime.js +41 -4
  102. package/data/build/dist/host/cli-adapters/desktop-app-runtime.js.map +1 -1
  103. package/data/build/dist/host/cli-adapters/dsh-message-projector.d.ts.map +1 -1
  104. package/data/build/dist/host/cli-adapters/dsh-message-projector.js +2 -1
  105. package/data/build/dist/host/cli-adapters/dsh-message-projector.js.map +1 -1
  106. package/data/build/dist/host/cli-adapters/dsh-virtual-providers.d.ts.map +1 -1
  107. package/data/build/dist/host/cli-adapters/dsh-virtual-providers.js +3 -2
  108. package/data/build/dist/host/cli-adapters/dsh-virtual-providers.js.map +1 -1
  109. package/data/build/dist/host/cli-adapters/feature.d.ts.map +1 -1
  110. package/data/build/dist/host/cli-adapters/feature.js +130 -29
  111. package/data/build/dist/host/cli-adapters/feature.js.map +1 -1
  112. package/data/build/dist/host/cli-adapters/gemini-driver.d.ts.map +1 -1
  113. package/data/build/dist/host/cli-adapters/gemini-driver.js +4 -2
  114. package/data/build/dist/host/cli-adapters/gemini-driver.js.map +1 -1
  115. package/data/build/dist/host/cli-adapters/grok-driver.d.ts +4 -0
  116. package/data/build/dist/host/cli-adapters/grok-driver.d.ts.map +1 -1
  117. package/data/build/dist/host/cli-adapters/grok-driver.js +169 -8
  118. package/data/build/dist/host/cli-adapters/grok-driver.js.map +1 -1
  119. package/data/build/dist/host/cli-adapters/grok-performance-projection.d.ts.map +1 -1
  120. package/data/build/dist/host/cli-adapters/grok-performance-projection.js +2 -1
  121. package/data/build/dist/host/cli-adapters/grok-performance-projection.js.map +1 -1
  122. package/data/build/dist/host/cli-adapters/legacy-session-adapter.d.ts.map +1 -1
  123. package/data/build/dist/host/cli-adapters/legacy-session-adapter.js +20 -3
  124. package/data/build/dist/host/cli-adapters/legacy-session-adapter.js.map +1 -1
  125. package/data/build/dist/host/cli-adapters/management-methods.d.ts +5 -0
  126. package/data/build/dist/host/cli-adapters/management-methods.d.ts.map +1 -1
  127. package/data/build/dist/host/cli-adapters/management-methods.js +9 -0
  128. package/data/build/dist/host/cli-adapters/management-methods.js.map +1 -1
  129. package/data/build/dist/host/cli-adapters/management-process.d.ts.map +1 -1
  130. package/data/build/dist/host/cli-adapters/management-process.js +13 -2
  131. package/data/build/dist/host/cli-adapters/management-process.js.map +1 -1
  132. package/data/build/dist/host/cli-adapters/management.d.ts.map +1 -1
  133. package/data/build/dist/host/cli-adapters/management.js +6 -1
  134. package/data/build/dist/host/cli-adapters/management.js.map +1 -1
  135. package/data/build/dist/host/cli-adapters/mcode-driver.d.ts.map +1 -1
  136. package/data/build/dist/host/cli-adapters/mcode-driver.js +11 -4
  137. package/data/build/dist/host/cli-adapters/mcode-driver.js.map +1 -1
  138. package/data/build/dist/host/cli-adapters/native-subagent-dispatch.d.ts +1 -1
  139. package/data/build/dist/host/cli-adapters/native-subagent-dispatch.d.ts.map +1 -1
  140. package/data/build/dist/host/cli-adapters/native-subagent-dispatch.js +11 -3
  141. package/data/build/dist/host/cli-adapters/native-subagent-dispatch.js.map +1 -1
  142. package/data/build/dist/host/cli-adapters/native-team-subagent.d.ts +7 -1
  143. package/data/build/dist/host/cli-adapters/native-team-subagent.d.ts.map +1 -1
  144. package/data/build/dist/host/cli-adapters/native-team-subagent.js +4 -2
  145. package/data/build/dist/host/cli-adapters/native-team-subagent.js.map +1 -1
  146. package/data/build/dist/host/cli-adapters/registry.d.ts +4 -1
  147. package/data/build/dist/host/cli-adapters/registry.d.ts.map +1 -1
  148. package/data/build/dist/host/cli-adapters/registry.js +65 -25
  149. package/data/build/dist/host/cli-adapters/registry.js.map +1 -1
  150. package/data/build/dist/host/cli-adapters/standard-stream-driver.d.ts.map +1 -1
  151. package/data/build/dist/host/cli-adapters/standard-stream-driver.js +4 -0
  152. package/data/build/dist/host/cli-adapters/standard-stream-driver.js.map +1 -1
  153. package/data/build/dist/host/cli-adapters/subagent-tool.js +1 -1
  154. package/data/build/dist/host/cli-adapters/subagent-tool.js.map +1 -1
  155. package/data/build/dist/host/cli-adapters/team-input.d.ts +17 -0
  156. package/data/build/dist/host/cli-adapters/team-input.d.ts.map +1 -0
  157. package/data/build/dist/host/cli-adapters/team-input.js +67 -0
  158. package/data/build/dist/host/cli-adapters/team-input.js.map +1 -0
  159. package/data/build/dist/host/cli-adapters/update-check.d.ts.map +1 -1
  160. package/data/build/dist/host/cli-adapters/update-check.js +5 -5
  161. package/data/build/dist/host/cli-adapters/update-check.js.map +1 -1
  162. package/data/build/dist/host/cli-adapters/zcode-driver.d.ts.map +1 -1
  163. package/data/build/dist/host/cli-adapters/zcode-driver.js +6 -1
  164. package/data/build/dist/host/cli-adapters/zcode-driver.js.map +1 -1
  165. package/data/build/dist/host/cli-adapters/zcode-update.d.ts +8 -0
  166. package/data/build/dist/host/cli-adapters/zcode-update.d.ts.map +1 -0
  167. package/data/build/dist/host/cli-adapters/zcode-update.js +149 -0
  168. package/data/build/dist/host/cli-adapters/zcode-update.js.map +1 -0
  169. package/data/build/dist/host/cli-bridge/bridge-holder.d.ts +14 -0
  170. package/data/build/dist/host/cli-bridge/bridge-holder.d.ts.map +1 -1
  171. package/data/build/dist/host/cli-bridge/bridge-holder.js +53 -6
  172. package/data/build/dist/host/cli-bridge/bridge-holder.js.map +1 -1
  173. package/data/build/dist/host/cli-bridge/bridge-server.d.ts +4 -0
  174. package/data/build/dist/host/cli-bridge/bridge-server.d.ts.map +1 -1
  175. package/data/build/dist/host/cli-bridge/bridge-server.js +34 -6
  176. package/data/build/dist/host/cli-bridge/bridge-server.js.map +1 -1
  177. package/data/build/dist/host/cli-bridge/command-code-mod.d.ts.map +1 -1
  178. package/data/build/dist/host/cli-bridge/command-code-mod.js +43 -0
  179. package/data/build/dist/host/cli-bridge/command-code-mod.js.map +1 -1
  180. package/data/build/dist/host/cli-bridge/dispatch.js +1 -1
  181. package/data/build/dist/host/cli-bridge/dispatch.js.map +1 -1
  182. package/data/build/dist/host/cli-bridge/injections.d.ts +3 -0
  183. package/data/build/dist/host/cli-bridge/injections.d.ts.map +1 -1
  184. package/data/build/dist/host/cli-bridge/injections.js +23 -7
  185. package/data/build/dist/host/cli-bridge/injections.js.map +1 -1
  186. package/data/build/dist/host/cli-bridge/mcp-stdio-entry.js +22 -3
  187. package/data/build/dist/host/cli-bridge/mcp-stdio-entry.js.map +1 -1
  188. package/data/build/dist/host/cli-bridge/team-adapters.d.ts +11 -0
  189. package/data/build/dist/host/cli-bridge/team-adapters.d.ts.map +1 -0
  190. package/data/build/dist/host/cli-bridge/team-adapters.js +22 -0
  191. package/data/build/dist/host/cli-bridge/team-adapters.js.map +1 -0
  192. package/data/build/dist/host/cli-bridge/team-dispatch.d.ts +28 -0
  193. package/data/build/dist/host/cli-bridge/team-dispatch.d.ts.map +1 -0
  194. package/data/build/dist/host/cli-bridge/team-dispatch.js +208 -0
  195. package/data/build/dist/host/cli-bridge/team-dispatch.js.map +1 -0
  196. package/data/build/dist/host/cli-bridge/team-tool.d.ts +3 -0
  197. package/data/build/dist/host/cli-bridge/team-tool.d.ts.map +1 -0
  198. package/data/build/dist/host/cli-bridge/team-tool.js +18 -0
  199. package/data/build/dist/host/cli-bridge/team-tool.js.map +1 -0
  200. package/data/build/dist/host/features/quick-apps.js +2 -2
  201. package/data/build/dist/host/features/quick-apps.js.map +1 -1
  202. package/data/build/dist/host/features/session-prompt-translation.d.ts.map +1 -1
  203. package/data/build/dist/host/features/session-prompt-translation.js +11 -3
  204. package/data/build/dist/host/features/session-prompt-translation.js.map +1 -1
  205. package/data/build/dist/host/modules/quick-apps/remote.d.ts +1 -1
  206. package/data/build/dist/host/modules/quick-apps/remote.d.ts.map +1 -1
  207. package/data/build/dist/host/modules/quick-apps/remote.js +5 -4
  208. package/data/build/dist/host/modules/quick-apps/remote.js.map +1 -1
  209. package/data/build/dist/host/modules/quick-apps/service.d.ts +1 -1
  210. package/data/build/dist/host/modules/quick-apps/service.d.ts.map +1 -1
  211. package/data/build/dist/host/modules/quick-apps/service.js +8 -4
  212. package/data/build/dist/host/modules/quick-apps/service.js.map +1 -1
  213. package/data/build/dist/host/modules/quick-apps/static-handler.d.ts +1 -1
  214. package/data/build/dist/host/modules/quick-apps/static-handler.d.ts.map +1 -1
  215. package/data/build/dist/host/modules/quick-apps/static-handler.js +11 -2
  216. package/data/build/dist/host/modules/quick-apps/static-handler.js.map +1 -1
  217. package/data/build/dist/host/session-migration-repair.js +48 -35
  218. package/data/build/dist/host/session-migration-repair.js.map +1 -1
  219. package/data/build/dist/shared/cli-provider-route.d.ts +7 -0
  220. package/data/build/dist/shared/cli-provider-route.d.ts.map +1 -0
  221. package/data/build/dist/shared/cli-provider-route.js +13 -0
  222. package/data/build/dist/shared/cli-provider-route.js.map +1 -0
  223. package/data/build/dist/shared/contracts/agent-team.d.ts +14 -0
  224. package/data/build/dist/shared/contracts/agent-team.d.ts.map +1 -0
  225. package/data/build/dist/shared/contracts/agent-team.js +48 -0
  226. package/data/build/dist/shared/contracts/agent-team.js.map +1 -0
  227. package/data/build/dist/shared/contracts/cli-adapter.d.ts +10 -0
  228. package/data/build/dist/shared/contracts/cli-adapter.d.ts.map +1 -1
  229. package/data/build/dist/shared/contracts/errors.d.ts +2 -2
  230. package/data/build/dist/shared/contracts/errors.d.ts.map +1 -1
  231. package/data/build/dist/shared/contracts/version.d.ts +9 -15
  232. package/data/build/dist/shared/contracts/version.d.ts.map +1 -1
  233. package/data/build/dist/shared/contracts/version.js +8 -14
  234. package/data/build/dist/shared/contracts/version.js.map +1 -1
  235. package/data/build/dist/shared/quick-app-browser-storage.d.ts +33 -0
  236. package/data/build/dist/shared/quick-app-browser-storage.d.ts.map +1 -0
  237. package/data/build/dist/shared/quick-app-browser-storage.js +33 -0
  238. package/data/build/dist/shared/quick-app-browser-storage.js.map +1 -0
  239. package/data/build/dist/shared/quick-app-storage-bootstrap.d.ts +9 -0
  240. package/data/build/dist/shared/quick-app-storage-bootstrap.d.ts.map +1 -0
  241. package/data/build/dist/shared/quick-app-storage-bootstrap.js +186 -0
  242. package/data/build/dist/shared/quick-app-storage-bootstrap.js.map +1 -0
  243. package/package.json +32 -32
  244. package/profile/README.md +2 -2
  245. package/profile/package.json +3 -3
  246. package/profile/version.json +3 -3
  247. package/version.json +3 -3
@@ -7013,6 +7013,13 @@ window.__ModuleLoader__.load({
7013
7013
  var exports = module.exports;
7014
7014
  const require_transport = require("@jingyi0605/codingns4dsh/client.transport.js");
7015
7015
  const require_primitives_adapter = require("@jingyi0605/codingns4dsh/client.primitives-adapter.js");
7016
+ /** A bare brand name does not establish ownership of a DSH provider. */
7017
+ function fromCliProviderId(provider) {
7018
+ if (typeof provider !== "string" || !provider.startsWith("codingns-cli-")) return void 0;
7019
+ const adapterId = provider.slice(13);
7020
+ return adapterId === "" ? void 0 : adapterId;
7021
+ }
7022
+ //#endregion
7016
7023
  //#region src/client/provider-icons.ts
7017
7024
  /** 未绑定和未知 Agent 使用中性灰,绝不冒充任一已知品牌色。 */
7018
7025
  const PROVIDER_NEUTRAL_COLOR = "#71717a";
@@ -7162,7 +7169,8 @@ window.__ModuleLoader__.load({
7162
7169
  }
7163
7170
  /** 兼容旧版 CN profile 的会话快照,但不重新暴露第二个 Provider。 */
7164
7171
  function normalizeProviderAdapterId(adapterId) {
7165
- return adapterId === "codebuddy-cn" ? "codebuddy" : adapterId;
7172
+ const normalized = fromCliProviderId(adapterId) ?? adapterId;
7173
+ return normalized === "codebuddy-cn" ? "codebuddy" : normalized;
7166
7174
  }
7167
7175
  const CODINGNS4DSH_DEBUG_LEVEL_ENV = "CODINGNS4DSH_DEBUG_LEVEL";
7168
7176
  const LEGACY_DEBUG_ENV = "CODINGNS4DSH_TUNNEL_DEBUG";
@@ -7971,21 +7979,15 @@ window.__ModuleLoader__.load({
7971
7979
  const require_assistant_notifications = require("@jingyi0605/codingns4dsh/client.assistant-notifications.js");
7972
7980
  const require_session_translation = require("@jingyi0605/codingns4dsh/client.session-translation.js");
7973
7981
  //#region src/shared/contracts/version.ts
7974
- /** 当前经过完整验证的 DSH 版本;源文件由根目录 version.json 同步。 */
7975
- const DSH_VERSION = "0.2.1-alpha.3";
7982
+ /** DSH verification target, synchronized with the root version.json. */
7983
+ const DSH_VERSION = "0.2.1-rc.2";
7976
7984
  /**
7977
- * 插件正式验证的 DSH 版本范围,覆盖 rc.2 到当前验证的 alpha.2。
7978
- *
7979
- * 0.2.0-rc.2、0.2.1-alpha.1 与 0.2.1-alpha.2 属于同一 API 世代:插件直接消费的
7980
- * 20 个宿主包中 18 个接口面未变,会话格式仍为 v4。唯一的服务级破坏性变化是
7981
- * alpha.2 用 `subagents.startActivation()` 取代 `startContinuable()`,由
7982
- * `subagent.activation` / `subagent.continuable` 两条能力路由分别探测,业务侧
7983
- * 经 `startNativeSubagent()` 归一化调用,因此同一个版本范围仍然成立。
7984
- *
7985
- * 这里保留明确上界,是为了让 npm/DSH 安装期也能识别 0.2.1-alpha.2 这个跨 patch
7986
- * 预发布版本;出现新的 API 世代或结构变化时,应重新验证并更新范围与能力路由。
7985
+ * Supported hosts retain the 0.2.0-rc.2 floor and include 0.2.1-rc.2.
7986
+ * Capability adapters preserve earlier subagent, peer and message contracts.
7987
+ * Keep an explicit upper bound: a later prerelease requires verification before
7988
+ * either installation checks or runtime capability selection may accept it.
7987
7989
  */
7988
- const DSH_COMPATIBILITY = ">=0.2.0-rc.2 <=0.2.1-alpha.3";
7990
+ const DSH_COMPATIBILITY = ">=0.2.0-rc.2 <=0.2.1-rc.2";
7989
7991
  /**
7990
7992
  * 兼容范围下界,即插件仍然接受的最低 DSH 版本。
7991
7993
  *
@@ -7994,7 +7996,7 @@ window.__ModuleLoader__.load({
7994
7996
  * “不支持的 DSH 版本”,把仅仅缺少启动页注入的页面误判为宿主不兼容。
7995
7997
  */
7996
7998
  function minimumSupportedDshVersion() {
7997
- return /^>=([^ ]+)/u.exec(">=0.2.0-rc.2 <=0.2.1-alpha.3")?.[1] ?? "0.2.1-alpha.3";
7999
+ return /^>=([^ ]+)/u.exec(">=0.2.0-rc.2 <=0.2.1-rc.2")?.[1] ?? "0.2.1-rc.2";
7998
8000
  }
7999
8001
  /** Host 注入到浏览器页面的真实 DSH 版本全局字段。 */
8000
8002
  const CODINGNS_DSH_VERSION_GLOBAL = "__CODINGNS_DSH_VERSION__";
@@ -8003,7 +8005,7 @@ window.__ModuleLoader__.load({
8003
8005
  return /^0\.1\.5(?:-|$)/u.test(version);
8004
8006
  }
8005
8007
  /** Codingns4DSH 插件自身的 npm 版本。 */
8006
- const CODINGNS_VERSION = "0.2.1-beta.13";
8008
+ const CODINGNS_VERSION = "0.2.1-beta.14";
8007
8009
  /** 判断宿主版本是否落在当前插件声明的 DSH 兼容范围内;范围省略上界时不校验上限。 */
8008
8010
  function isDshVersionCompatible(version) {
8009
8011
  const match = /^>=([^ ]+)(?: <=([^ ]+))?$/u.exec(DSH_COMPATIBILITY);
@@ -19675,6 +19677,8 @@ window.__ModuleLoader__.load({
19675
19677
  //#endregion
19676
19678
  //#region src/client/locales/quickApps.ts
19677
19679
  const en$2 = {
19680
+ "quickApps.storagePreview": "App data is saved in this browser. IndexedDB and URLs starting with / are not supported in this view.",
19681
+ "quickApps.storageFailed": "App data could not be saved in this browser: {message}",
19678
19682
  "quickApps.sandboxPreview": "Workspace preview. Browser storage and URLs starting with / may not work in this view.",
19679
19683
  "quickApps.runtime.not-configured": "This Host does not provide workspace HTML previews. Update its CodingNS plugin and reopen the shortcut.",
19680
19684
  "quickApps.runtime.config-invalid": "The Host’s HTML hosting configuration or TLS certificate is invalid.",
@@ -19802,6 +19806,8 @@ window.__ModuleLoader__.load({
19802
19806
  "quickApps.status.missing-file": "The entry file or application folder is missing or cannot be accessed."
19803
19807
  };
19804
19808
  const zh$2 = {
19809
+ "quickApps.storagePreview": "应用数据保存在当前浏览器中。此视图不支持 IndexedDB 和以 / 开头的网址。",
19810
+ "quickApps.storageFailed": "无法在当前浏览器中保存应用数据:{message}",
19805
19811
  "quickApps.sandboxPreview": "工作区预览:浏览器存储和以 / 开头的网址可能无法在此视图中使用。",
19806
19812
  "quickApps.runtime.not-configured": "此主机尚不支持工作区 HTML 预览,请更新其 CodingNS 插件后重新打开快捷方式。",
19807
19813
  "quickApps.runtime.config-invalid": "主机的 HTML 托管配置或 TLS 证书无效。",
@@ -19931,6 +19937,14 @@ window.__ModuleLoader__.load({
19931
19937
  //#endregion
19932
19938
  //#region src/client/locales/cliManagement.ts
19933
19939
  const en$1 = {
19940
+ "cli.team.label": "Team eligibility",
19941
+ "cli.team.leadAndMember": "Collaborator and Lead",
19942
+ "cli.team.member": "Collaborator",
19943
+ "cli.team.reason.version": "Full Team support requires a verified DSH alpha.2 or alpha.3 host.",
19944
+ "cli.team.reason.profile": "Enable the native DSH Team profile to use Teams.",
19945
+ "cli.team.reason.disabled": "Enable the CodingNS bridge and this Agent to use Teams.",
19946
+ "cli.team.reason.adapter": "This Agent does not provide the required Team tool transport.",
19947
+ "cli.team.reason.installation": "Install and enable this Agent before using Teams.",
19934
19948
  "cli.manage.reasonLabel.application-managed": "Check in app",
19935
19949
  "cli.manage.reasonLabel.unknown-version": "Version unknown",
19936
19950
  "cli.manage.reasonLabel.legacy-distribution": "Legacy distribution",
@@ -20000,6 +20014,14 @@ window.__ModuleLoader__.load({
20000
20014
  "cli.manage.reviewAgain": "Review another operation"
20001
20015
  };
20002
20016
  const zh$1 = {
20017
+ "cli.team.label": "团队适配能力",
20018
+ "cli.team.leadAndMember": "协作者和管理者",
20019
+ "cli.team.member": "协作者",
20020
+ "cli.team.reason.version": "完整团队功能需要经过验证的 DSH alpha.2 或 alpha.3 主机。",
20021
+ "cli.team.reason.profile": "请启用 DSH 原生团队配置后使用团队功能。",
20022
+ "cli.team.reason.disabled": "请启用 CodingNS 桥接和此 Agent 后使用团队功能。",
20023
+ "cli.team.reason.adapter": "此 Agent 尚未提供所需的团队工具通道。",
20024
+ "cli.team.reason.installation": "请先安装并启用此 Agent,再使用团队功能。",
20003
20025
  "cli.manage.reasonLabel.application-managed": "在应用中检查",
20004
20026
  "cli.manage.reasonLabel.unknown-version": "版本未知",
20005
20027
  "cli.manage.reasonLabel.legacy-distribution": "旧版发行包",
@@ -20468,6 +20490,8 @@ window.__ModuleLoader__.load({
20468
20490
  "cli.currentAgent": "Current Agent: {name}{locked}",
20469
20491
  "cli.locked": " (locked)",
20470
20492
  "cli.selectAgent": "Select Agent",
20493
+ "cli.catalogLoadFailed": "Could not load external Agents.",
20494
+ "cli.retryCatalog": "Retry loading Agents",
20471
20495
  "workspace.showLogo": "Show Agent logo",
20472
20496
  "workspace.logoDescription": "Display the selected external Agent logo in native workspace session rows.",
20473
20497
  "workspace.optimizeSessionTitles": "Optimize DSH session title generation",
@@ -20494,6 +20518,8 @@ window.__ModuleLoader__.load({
20494
20518
  "workspace.rememberConversationRightbarRatio": "Remember conversation and right sidebar width ratio",
20495
20519
  "workspace.rememberConversationRightbarRatioDescription": "Restore the right sidebar proportion after refreshing this browser; the ratio is stored locally.",
20496
20520
  "mobile.sidebarGestures": "Swipe to open or close sidebars",
20521
+ "mobile.team.title": "Agent Team",
20522
+ "mobile.team.close": "Close Agent Team",
20497
20523
  "mobile.sidebarGesturesDescription": "On touch devices, swipe horizontally in the conversation area to toggle a sidebar. Cross the configured share of the viewport width, or give a quick flick to trigger it.",
20498
20524
  "mobile.sidebarGestureMapping": "Swipe direction",
20499
20525
  "mobile.sidebarGestureMappingInward": "Swipe right: session list; swipe left: right sidebar",
@@ -20917,6 +20943,8 @@ window.__ModuleLoader__.load({
20917
20943
  "cli.currentAgent": "当前 Agent:{name}{locked}",
20918
20944
  "cli.locked": "(已锁定)",
20919
20945
  "cli.selectAgent": "选择 Agent",
20946
+ "cli.catalogLoadFailed": "无法加载外部 Agent。",
20947
+ "cli.retryCatalog": "重新加载 Agent",
20920
20948
  "workspace.showLogo": "显示 Agent Logo",
20921
20949
  "workspace.logoDescription": "在原生工作区会话行显示所选外部 Agent 的 Logo。",
20922
20950
  "workspace.optimizeSessionTitles": "优化DSH会话标题生成逻辑",
@@ -20943,6 +20971,8 @@ window.__ModuleLoader__.load({
20943
20971
  "workspace.rememberConversationRightbarRatio": "记忆对话窗口与右侧栏的宽度比例",
20944
20972
  "workspace.rememberConversationRightbarRatioDescription": "刷新后恢复右侧栏比例;比例仅保存在当前浏览器中。",
20945
20973
  "mobile.sidebarGestures": "横滑开合侧栏",
20974
+ "mobile.team.title": "智能体团队",
20975
+ "mobile.team.close": "关闭智能体团队",
20946
20976
  "mobile.sidebarGesturesDescription": "触摸设备上在对话区横滑即可开合侧栏;跨过设定的视口宽度比例即触发,快速轻甩同样有效。",
20947
20977
  "mobile.sidebarGestureMapping": "方向映射",
20948
20978
  "mobile.sidebarGestureMappingInward": "右滑开合会话列表,左滑开合右边栏",
@@ -24532,15 +24562,15 @@ window.__ModuleLoader__.load({
24532
24562
  sendHello() {
24533
24563
  this.send(this.createEnvelope("session.hello", "session", {
24534
24564
  protocol: this.options.protocol ?? "dsh-transport-v1",
24535
- dshVersion: this.options.dshVersion ?? "0.2.1-alpha.3",
24565
+ dshVersion: this.options.dshVersion ?? "0.2.1-rc.2",
24536
24566
  capabilities: [...this.options.capabilities ?? []]
24537
24567
  }));
24538
24568
  }
24539
24569
  sendReady(capabilities, peerDshVersion) {
24540
24570
  this.send(this.createEnvelope("session.ready", "session", {
24541
24571
  protocol: this.options.protocol ?? "dsh-transport-v1",
24542
- dshVersion: peerDshVersion ?? this.options.dshVersion ?? "0.2.1-alpha.3",
24543
- hostDshVersion: this.options.dshVersion ?? "0.2.1-alpha.3",
24572
+ dshVersion: peerDshVersion ?? this.options.dshVersion ?? "0.2.1-rc.2",
24573
+ hostDshVersion: this.options.dshVersion ?? "0.2.1-rc.2",
24544
24574
  capabilities: [...capabilities],
24545
24575
  byteCredit: 65536,
24546
24576
  messageCredit: 32
@@ -29173,6 +29203,141 @@ window.__ModuleLoader__.load({
29173
29203
  });
29174
29204
  }
29175
29205
  //#endregion
29206
+ //#region src/dsh-capabilities/host/agent-team-adapter.ts
29207
+ const MEMBER_METHODS = [
29208
+ "membership",
29209
+ "listMembers",
29210
+ "sendMessage",
29211
+ "listTasks",
29212
+ "getTask",
29213
+ "createTask",
29214
+ "updateTask",
29215
+ "waitForChange"
29216
+ ];
29217
+ function supportsExternalAgentTeam(context, lead = false) {
29218
+ return hasMethods$1(read$1(context, "agentTeams"), [...MEMBER_METHODS, ...lead ? ["spawnTeammate", "interrupt"] : []]) && hasMethods$1(read$1(context, "agents"), ["get", "list"]) && hasMethods$1(read$1(context, "subagents"), [
29219
+ "registerProvider",
29220
+ "startActivation",
29221
+ "sendMessage"
29222
+ ]);
29223
+ }
29224
+ function createAgentTeamAdapter(context) {
29225
+ return new DshAgentTeamAdapter(read$1(context, "agentTeams"), read$1(context, "agents"), () => read$1(context, "sessionController"));
29226
+ }
29227
+ /** Exact Agent identity and all DSH-specific calls stay at this boundary. */
29228
+ var DshAgentTeamAdapter = class {
29229
+ service;
29230
+ agents;
29231
+ controller;
29232
+ lifetime = new AbortController();
29233
+ supportsLead;
29234
+ constructor(service, agents, controller) {
29235
+ this.service = service;
29236
+ this.agents = agents;
29237
+ this.controller = controller;
29238
+ this.supportsLead = hasMethods$1(service, ["spawnTeammate", "interrupt"]);
29239
+ }
29240
+ get signal() {
29241
+ return this.lifetime.signal;
29242
+ }
29243
+ async nativeRoute(model, effort, provider) {
29244
+ const controller = typeof this.controller === "function" ? this.controller() : this.controller;
29245
+ if (!controller?.modelCatalog) throw teamError("TEAM_NATIVE_ROUTE_UNAVAILABLE", "A native DSH model catalog is required for mixed Teams.");
29246
+ const catalog = await controller.modelCatalog();
29247
+ const selectedModel = model ?? catalog.default?.model;
29248
+ const selectedProvider = provider ?? (model === void 0 ? catalog.default?.provider : void 0);
29249
+ const matches = (catalog.groups ?? []).flatMap((group) => group.id.startsWith("codingns-cli-") || selectedProvider && group.id !== selectedProvider ? [] : (group.models ?? []).filter((item) => item.id === selectedModel).map((item) => ({
29250
+ provider: group.id,
29251
+ item
29252
+ })));
29253
+ if (matches.length !== 1) throw teamError("TEAM_NATIVE_ROUTE_UNAVAILABLE", "Select an unambiguous native DSH provider and model.");
29254
+ const match = matches[0];
29255
+ const reasoningEffort = effort ?? (model === void 0 && match.provider === catalog.default?.provider ? catalog.default?.reasoningEffort : void 0);
29256
+ if (reasoningEffort && !match.item.reasoning?.efforts?.some((item) => item.id === reasoningEffort)) throw teamError("TEAM_MODEL_UNSUPPORTED", "The requested native effort is unavailable.");
29257
+ return {
29258
+ provider: match.provider,
29259
+ model: match.item.id,
29260
+ ...reasoningEffort ? { reasoningEffort } : {}
29261
+ };
29262
+ }
29263
+ resolveAgent(sessionId) {
29264
+ if (this.signal.aborted || sessionId.trim() === "") return void 0;
29265
+ const direct = this.agents.get(sessionId);
29266
+ if (isAgent(direct) && this.isCurrent(direct) && sessionIdOf(direct) === sessionId) return direct;
29267
+ return this.agents.list().find((candidate) => isAgent(candidate) && this.isCurrent(candidate) && sessionIdOf(candidate) === sessionId);
29268
+ }
29269
+ identity(agent) {
29270
+ this.signal.throwIfAborted();
29271
+ if (!this.isCurrent(agent)) throw teamError("TEAM_CALLER_UNAVAILABLE", "The calling Agent is no longer live.");
29272
+ const member = this.service.membership(agent);
29273
+ if (member?.role !== "lead" && member?.role !== "teammate" || typeof member.id !== "string" || typeof member.name !== "string") throw teamError("TEAM_NOT_MEMBER", "The calling Agent is not a native Team member.");
29274
+ return {
29275
+ sessionId: sessionIdOf(agent),
29276
+ teamId: member.id,
29277
+ role: member.role,
29278
+ name: member.name
29279
+ };
29280
+ }
29281
+ invoke(agent, action, input, signal) {
29282
+ const identity = this.identity(agent);
29283
+ if ((action === "spawn" || action === "interrupt" || action === "task_update" && input.action === "reassign") && identity.role !== "lead") throw teamError("TEAM_LEAD_REQUIRED", "Only the Team Lead may perform this operation.");
29284
+ const combined = signal ? AbortSignal.any([signal, this.signal]) : this.signal;
29285
+ combined.throwIfAborted();
29286
+ switch (action) {
29287
+ case "status": return {
29288
+ identity,
29289
+ supportsLead: this.supportsLead
29290
+ };
29291
+ case "members": return this.service.listMembers(agent);
29292
+ case "message": return this.service.sendMessage(agent, {
29293
+ ...input,
29294
+ signal: combined
29295
+ });
29296
+ case "tasks": return this.service.listTasks(agent);
29297
+ case "task": return this.service.getTask(agent, String(input.taskId));
29298
+ case "task_create": return this.service.createTask(agent, input);
29299
+ case "task_update": return this.service.updateTask(agent, input);
29300
+ case "wait": return this.service.waitForChange(agent, Number(input.timeoutMs), combined);
29301
+ case "spawn":
29302
+ if (!this.service.spawnTeammate) throw teamError("TEAM_OPERATION_UNAVAILABLE", "Teammate creation is unavailable.");
29303
+ return this.service.spawnTeammate(agent, {
29304
+ ...input,
29305
+ signal: combined
29306
+ });
29307
+ case "interrupt":
29308
+ if (!this.service.interrupt) throw teamError("TEAM_OPERATION_UNAVAILABLE", "Team interruption is unavailable.");
29309
+ return this.service.interrupt(agent, String(input.target));
29310
+ }
29311
+ }
29312
+ dispose() {
29313
+ this.lifetime.abort(teamError("TEAM_SERVICE_UNAVAILABLE", "The native Team service was removed."));
29314
+ }
29315
+ isCurrent(agent) {
29316
+ return this.agents.get(agent.id) === agent;
29317
+ }
29318
+ };
29319
+ function sessionIdOf(agent) {
29320
+ return agent.session?.header?.id?.trim() || agent.id;
29321
+ }
29322
+ function teamError(code, message) {
29323
+ return Object.assign(new Error(message), { code });
29324
+ }
29325
+ function isAgent(value) {
29326
+ return typeof value === "object" && value !== null && typeof Reflect.get(value, "id") === "string";
29327
+ }
29328
+ function hasMethods$1(value, methods) {
29329
+ return value !== null && (typeof value === "object" || typeof value === "function") && methods.every((method) => typeof Reflect.get(value, method) === "function");
29330
+ }
29331
+ function read$1(context, name) {
29332
+ if (typeof context !== "object" || context === null) return void 0;
29333
+ try {
29334
+ const get = Reflect.get(context, "get");
29335
+ return typeof get === "function" ? get.call(context, name) : Reflect.get(context, name);
29336
+ } catch {
29337
+ return;
29338
+ }
29339
+ }
29340
+ //#endregion
29176
29341
  //#region src/dsh-capabilities/routes.ts
29177
29342
  /**
29178
29343
  * 注册 Codingns4DSH 当前实际消费的 DSH 服务能力。
@@ -29187,10 +29352,21 @@ window.__ModuleLoader__.load({
29187
29352
  const range020 = require_native_workspace_store.DSH_COMPATIBILITY;
29188
29353
  const add = (route) => registry.register(route);
29189
29354
  if (runtime === "host") {
29355
+ for (const role of ["member", "lead"]) add({
29356
+ id: `agent-team-external-${role}-021`,
29357
+ capability: `agent-team.external-${role}`,
29358
+ supportedDsh: ">=0.2.1-alpha.2 <=0.2.1-rc.2",
29359
+ runtime,
29360
+ priority: 10,
29361
+ status: "supported",
29362
+ introducedIn: "0.2.1-alpha.2",
29363
+ detect: (ctx) => supportsExternalAgentTeam(ctx, role === "lead"),
29364
+ create: createAgentTeamAdapter
29365
+ });
29190
29366
  add({
29191
29367
  id: "session-performance-projection-021",
29192
29368
  capability: "session.external-performance",
29193
- supportedDsh: ">=0.2.1-alpha.3 <=0.2.1-alpha.3",
29369
+ supportedDsh: ">=0.2.1-alpha.3 <=0.2.1-rc.2",
29194
29370
  runtime,
29195
29371
  priority: 10,
29196
29372
  status: "supported",
@@ -29234,7 +29410,7 @@ window.__ModuleLoader__.load({
29234
29410
  add({
29235
29411
  id: "session-prompt-assembly-021",
29236
29412
  capability: "session.prompt-assembly",
29237
- supportedDsh: ">=0.2.1-alpha.3 <=0.2.1-alpha.3",
29413
+ supportedDsh: ">=0.2.1-alpha.3 <=0.2.1-rc.2",
29238
29414
  runtime,
29239
29415
  priority: 10,
29240
29416
  status: "supported",
@@ -29245,7 +29421,7 @@ window.__ModuleLoader__.load({
29245
29421
  add({
29246
29422
  id: "session-external-model-selection-021",
29247
29423
  capability: "session.external-model-selection",
29248
- supportedDsh: ">=0.2.1-alpha.3 <=0.2.1-alpha.3",
29424
+ supportedDsh: ">=0.2.1-alpha.3 <=0.2.1-rc.2",
29249
29425
  runtime,
29250
29426
  priority: 10,
29251
29427
  status: "supported",
@@ -29267,7 +29443,7 @@ window.__ModuleLoader__.load({
29267
29443
  add({
29268
29444
  id: "session-activation-021",
29269
29445
  capability: "session.activation",
29270
- supportedDsh: ">=0.2.1-alpha.3 <=0.2.1-alpha.3",
29446
+ supportedDsh: ">=0.2.1-alpha.3 <=0.2.1-rc.2",
29271
29447
  runtime,
29272
29448
  priority: 10,
29273
29449
  status: "supported",
@@ -29278,7 +29454,7 @@ window.__ModuleLoader__.load({
29278
29454
  for (const capability of ["connection.peer", "connection.uplink"]) add({
29279
29455
  id: `${capability}-021`,
29280
29456
  capability,
29281
- supportedDsh: ">=0.2.1-alpha.3 <=0.2.1-alpha.3",
29457
+ supportedDsh: ">=0.2.1-alpha.3 <=0.2.1-rc.2",
29282
29458
  runtime,
29283
29459
  priority: 40,
29284
29460
  status: "supported",
@@ -29374,7 +29550,7 @@ window.__ModuleLoader__.load({
29374
29550
  add({
29375
29551
  id: "session-performance-presentation-021",
29376
29552
  capability: "session.external-performance",
29377
- supportedDsh: ">=0.2.1-alpha.3 <=0.2.1-alpha.3",
29553
+ supportedDsh: ">=0.2.1-alpha.3 <=0.2.1-rc.2",
29378
29554
  runtime,
29379
29555
  priority: 10,
29380
29556
  status: "supported",
@@ -29407,7 +29583,7 @@ window.__ModuleLoader__.load({
29407
29583
  add({
29408
29584
  id: "message-presentation-021",
29409
29585
  capability: "conversation.message-presentation",
29410
- supportedDsh: ">=0.2.1-alpha.3 <=0.2.1-alpha.3",
29586
+ supportedDsh: ">=0.2.1-alpha.3 <=0.2.1-rc.2",
29411
29587
  runtime,
29412
29588
  priority: 10,
29413
29589
  status: "supported",
@@ -29728,7 +29904,7 @@ window.__ModuleLoader__.load({
29728
29904
  add({
29729
29905
  id: "conversation-draft-share-021",
29730
29906
  capability: "conversation.draft-share",
29731
- supportedDsh: ">=0.2.1-alpha.1 <=0.2.1-alpha.3",
29907
+ supportedDsh: ">=0.2.1-alpha.1 <=0.2.1-rc.2",
29732
29908
  runtime: "client",
29733
29909
  priority: 30,
29734
29910
  status: "supported",
@@ -31850,7 +32026,10 @@ window.__ModuleLoader__.load({
31850
32026
  margin: 0,
31851
32027
  overflowWrap: "anywhere",
31852
32028
  color: require_theme.dshThemeColor.labelSecondary
31853
- } }, adapter.diagnostic), (0, react.createElement)("dt", void 0, t("cli.protocol")), (0, react.createElement)("dd", { style: { margin: 0 } }, adapter.protocol ?? t("cli.undeclared")), (0, react.createElement)("dt", void 0, t("cli.capabilities")), (0, react.createElement)("dd", { style: {
32029
+ } }, adapter.diagnostic), adapter.team && (0, react.createElement)("dt", void 0, t("cli.team.label")), adapter.team && (0, react.createElement)("dd", { style: {
32030
+ margin: 0,
32031
+ overflowWrap: "anywhere"
32032
+ } }, adapter.team.member ? t(adapter.team.lead ? "cli.team.leadAndMember" : "cli.team.member") : t(`cli.team.reason.${adapter.team.reason ?? "adapter"}`)), (0, react.createElement)("dt", void 0, t("cli.protocol")), (0, react.createElement)("dd", { style: { margin: 0 } }, adapter.protocol ?? t("cli.undeclared")), (0, react.createElement)("dt", void 0, t("cli.capabilities")), (0, react.createElement)("dd", { style: {
31854
32033
  margin: 0,
31855
32034
  overflowWrap: "anywhere"
31856
32035
  } }, adapter.capabilities?.join(t("common.listSeparator")) ?? t("cli.undeclared"))), (0, react.createElement)("h4", { style: { margin: "16px 0 8px" } }, t("cli.modelCatalog")), modelsError && (0, react.createElement)("div", {
@@ -33122,7 +33301,7 @@ window.__ModuleLoader__.load({
33122
33301
  const remote = options.remote;
33123
33302
  const t = require_transport.resolveCodingNsTranslator(options.locale);
33124
33303
  let hiddenWorkspaceIds = new Set(normalizeIds(options.hiddenWorkspaceIds ?? []));
33125
- let workspaces = [];
33304
+ let fallbackWorkspaces = [];
33126
33305
  let disposed = false;
33127
33306
  let scanQueued = false;
33128
33307
  let loading;
@@ -33154,14 +33333,14 @@ window.__ModuleLoader__.load({
33154
33333
  });
33155
33334
  };
33156
33335
  const refreshData = async () => {
33157
- if (disposed) return;
33336
+ if (disposed || options.readNativeWorkspaceSnapshot?.() !== void 0) return;
33158
33337
  if (loading !== void 0) {
33159
33338
  await loading;
33160
33339
  return;
33161
33340
  }
33162
33341
  loading = loadWorkspaceRecords(remote).then((next) => {
33163
33342
  if (disposed) return;
33164
- workspaces = next;
33343
+ fallbackWorkspaces = next;
33165
33344
  scan();
33166
33345
  }).catch(() => void 0).finally(() => {
33167
33346
  loading = void 0;
@@ -33174,6 +33353,7 @@ window.__ModuleLoader__.load({
33174
33353
  try {
33175
33354
  clearHiddenWorkspaceNodes(dom);
33176
33355
  if (!showHiddenWorkspaces) removeVisibilityEntries(dom);
33356
+ const workspaces = options.readNativeWorkspaceSnapshot?.()?.items ?? fallbackWorkspaces;
33177
33357
  const headers = findWorkspaceHeaders(dom);
33178
33358
  const workspaceIds = new Set(workspaces.map((workspace) => workspace.workspaceId));
33179
33359
  for (const header of headers) {
@@ -33453,9 +33633,7 @@ window.__ModuleLoader__.load({
33453
33633
  const workspaceId = resolveWorkspaceId(header);
33454
33634
  if (workspaceId !== void 0 && !recordsById.has(workspaceId)) recordsById.set(workspaceId, {
33455
33635
  workspaceId,
33456
- title: workspaceId,
33457
- sessionIds: [],
33458
- archivedSessionIds: []
33636
+ title: workspaceId
33459
33637
  });
33460
33638
  }
33461
33639
  const hidden = [...hiddenWorkspaceIds].reverse().flatMap((workspaceId) => {
@@ -36167,23 +36345,21 @@ window.__ModuleLoader__.load({
36167
36345
  let userInteracting = false;
36168
36346
  let userCommitPending = false;
36169
36347
  let applying = false;
36170
- let pendingShare;
36348
+ let lastRestore;
36171
36349
  const scan = () => {
36172
36350
  if (disposed || dom === void 0 || win === void 0) return;
36173
36351
  const handle = findRightbarHandle(dom);
36174
- if (handle === void 0) return;
36352
+ if (handle === void 0) {
36353
+ lastRestore = void 0;
36354
+ return;
36355
+ }
36175
36356
  if (applying) return;
36176
36357
  const share = readRightbarShare(handle, win);
36177
36358
  if (share === void 0) return;
36178
- if (pendingShare !== void 0) {
36179
- const expectedShare = pendingShare;
36180
- pendingShare = void 0;
36181
- if (sharesMatch(share, expectedShare)) return;
36182
- if (handle.style.left !== "") return;
36183
- }
36184
36359
  if (userCommitPending) {
36185
36360
  userCommitPending = false;
36186
36361
  desiredShare = share;
36362
+ lastRestore = void 0;
36187
36363
  writeStoredShare(storage, share);
36188
36364
  return;
36189
36365
  }
@@ -36222,9 +36398,7 @@ window.__ModuleLoader__.load({
36222
36398
  };
36223
36399
  const onResize = () => {
36224
36400
  if (disposed || win === void 0 || dom === void 0) return;
36225
- const handle = findRightbarHandle(dom);
36226
- const savedShare = readStoredShare(storage);
36227
- if (handle !== void 0 && savedShare !== void 0) applyShare(handle, savedShare, win);
36401
+ desiredShare = readStoredShare(storage) ?? desiredShare;
36228
36402
  scheduleScan();
36229
36403
  };
36230
36404
  dom?.addEventListener("mousedown", onPointerStart, true);
@@ -36234,7 +36408,10 @@ window.__ModuleLoader__.load({
36234
36408
  win?.addEventListener("resize", onResize);
36235
36409
  scheduleScan();
36236
36410
  return {
36237
- refresh: scheduleScan,
36411
+ refresh() {
36412
+ lastRestore = void 0;
36413
+ scheduleScan();
36414
+ },
36238
36415
  dispose() {
36239
36416
  if (disposed) return;
36240
36417
  disposed = true;
@@ -36248,10 +36425,15 @@ window.__ModuleLoader__.load({
36248
36425
  };
36249
36426
  function applyShare(handle, share, targetWindow) {
36250
36427
  const containerWidth = resolveContainerWidth(handle, targetWindow);
36428
+ if (lastRestore?.handle === handle && Math.abs(lastRestore.containerWidth - containerWidth) < 1 && sharesMatch(lastRestore.share, share)) return;
36429
+ lastRestore = {
36430
+ handle,
36431
+ containerWidth,
36432
+ share
36433
+ };
36251
36434
  const rightWidth = containerWidth * share;
36252
36435
  const targetClientX = resolveContainerRect(handle, targetWindow.innerWidth).left + containerWidth - rightWidth;
36253
36436
  applying = true;
36254
- pendingShare = share;
36255
36437
  try {
36256
36438
  const nativeResizeDispatched = dispatchNativeResize(handle, targetWindow, targetClientX);
36257
36439
  if (!nativeResizeDispatched && handle.matches("[data-side=\"rightbar\"]")) handle.style.left = `${Math.round(containerWidth - rightWidth)}px`;
@@ -36810,13 +36992,22 @@ window.__ModuleLoader__.load({
36810
36992
  version: null,
36811
36993
  command: null
36812
36994
  }]);
36995
+ const [catalogFailed, setCatalogFailed] = (0, react.useState)(false);
36996
+ const [catalogRetry, setCatalogRetry] = (0, react.useState)(0);
36813
36997
  const [open, setOpen] = (0, react.useState)(false);
36814
36998
  const rootRef = (0, react.useRef)(null);
36815
36999
  const locked = isSessionLocked(session);
36816
37000
  useDismissOnOutsidePointer(rootRef, open, () => setOpen(false));
36817
37001
  (0, react.useEffect)(() => {
36818
- return watchAdapterCatalog(props.rpc, sessionId, (value) => setAgents(require_model_catalog_cache.adapterCatalogWithDsh(value)));
36819
- }, [props.rpc, sessionId]);
37002
+ return watchAdapterCatalog(props.rpc, sessionId, (value) => {
37003
+ setAgents(require_model_catalog_cache.adapterCatalogWithDsh(value));
37004
+ setCatalogFailed(false);
37005
+ }, () => setCatalogFailed(true));
37006
+ }, [
37007
+ props.rpc,
37008
+ sessionId,
37009
+ catalogRetry
37010
+ ]);
36820
37011
  (0, react.useEffect)(() => {
36821
37012
  if (locked) setOpen(false);
36822
37013
  }, [locked]);
@@ -36865,7 +37056,24 @@ window.__ModuleLoader__.load({
36865
37056
  role: "menu",
36866
37057
  "aria-label": t("cli.selectAgent"),
36867
37058
  style: agentMenuStyle
36868
- }, ...agents.map((agent) => {
37059
+ }, catalogFailed && (0, react.createElement)("div", {
37060
+ role: "alert",
37061
+ style: {
37062
+ padding: 8,
37063
+ fontSize: require_theme.uiFontSize(13)
37064
+ }
37065
+ }, (0, react.createElement)("div", null, t("cli.catalogLoadFailed")), (0, react.createElement)("button", {
37066
+ type: "button",
37067
+ role: "menuitem",
37068
+ style: {
37069
+ ...agentOptionStyle,
37070
+ minHeight: 30
37071
+ },
37072
+ onClick: () => {
37073
+ setCatalogFailed(false);
37074
+ setCatalogRetry((value) => value + 1);
37075
+ }
37076
+ }, t("cli.retryCatalog"))), ...agents.map((agent) => {
36869
37077
  const selected = agent.id === selection.adapterId;
36870
37078
  const available = agent.installed && agent.enabled;
36871
37079
  const icon = require_model_catalog_cache.providerIconUrl(agent.id);
@@ -38060,6 +38268,7 @@ window.__ModuleLoader__.load({
38060
38268
  let visibilityDom;
38061
38269
  let rightbarDom;
38062
38270
  let disposeAdapterRefresh;
38271
+ let disposeVisibilityRefresh;
38063
38272
  let disposeSubscription;
38064
38273
  let disposeQuickPhrases;
38065
38274
  let disposeSkillCommand;
@@ -38088,6 +38297,7 @@ window.__ModuleLoader__.load({
38088
38297
  if (visibilityDom === void 0) {
38089
38298
  visibilityDom = startWorkspaceSessionVisibilityDom({
38090
38299
  remote: context.services.remote,
38300
+ readNativeWorkspaceSnapshot: () => require_native_workspace_store.readNativeWorkspaceSnapshot(context.services.uiContext),
38091
38301
  hiddenWorkspaceIds,
38092
38302
  locale: context.services.locale,
38093
38303
  onHiddenWorkspaceIdsChange: async (ids) => {
@@ -38098,11 +38308,14 @@ window.__ModuleLoader__.load({
38098
38308
  }]);
38099
38309
  }
38100
38310
  });
38311
+ disposeVisibilityRefresh = require_native_workspace_store.readNativeWorkspaceListStore(context.services.uiContext)?.subscribe(() => visibilityDom?.refresh());
38101
38312
  return;
38102
38313
  }
38103
38314
  visibilityDom.setHiddenWorkspaceIds(hiddenWorkspaceIds);
38104
38315
  };
38105
38316
  const disableWorkspaceVisibility = () => {
38317
+ disposeVisibilityRefresh?.();
38318
+ disposeVisibilityRefresh = void 0;
38106
38319
  visibilityDom?.dispose();
38107
38320
  visibilityDom = void 0;
38108
38321
  };
@@ -39344,6 +39557,167 @@ ${scope} [data-dockkit-strip-tabs] {
39344
39557
  `[${MOBILE_SETTINGS_MODAL_ATTRIBUTE}="on"]>div{box-sizing:border-box!important;min-width:0!important;flex:1 1 auto!important;width:auto!important}`,
39345
39558
  `[${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}`
39346
39559
  ].join("");
39560
+ //#endregion
39561
+ //#region src/client/mobile-team-panel-dom.ts
39562
+ const PANEL = "[data-team-panel][role=\"dialog\"]";
39563
+ const MOBILE = "data-codingns-mobile-team";
39564
+ const HEADER = "data-codingns-team-header";
39565
+ /** Adapt the native portal while DSH retains roster, task, and dismissal ownership. */
39566
+ function startMobileTeamPanelDom(options = {}) {
39567
+ const dom = options.document ?? (typeof document === "undefined" ? void 0 : document);
39568
+ const win = options.window ?? (typeof window === "undefined" ? void 0 : window);
39569
+ const Observer = options.MutationObserver ?? (typeof MutationObserver === "undefined" ? void 0 : MutationObserver);
39570
+ const t = require_transport.resolveCodingNsTranslator(options.locale);
39571
+ const headers = /* @__PURE__ */ new Map();
39572
+ let style;
39573
+ let queued = false;
39574
+ let disposed = false;
39575
+ const remove = (panel, header) => {
39576
+ header.remove();
39577
+ panel.removeAttribute(MOBILE);
39578
+ headers.delete(panel);
39579
+ };
39580
+ const refresh = () => {
39581
+ if (disposed || !dom) return;
39582
+ const max = typeof options.mobileViewportMaxPx === "function" ? options.mobileViewportMaxPx() : options.mobileViewportMaxPx ?? 1024;
39583
+ const width = win?.innerWidth ?? 0;
39584
+ const panels = new Set(Number.isFinite(width) && width > 0 && Number.isFinite(max) && width <= max ? dom.querySelectorAll(PANEL) : []);
39585
+ for (const [panel, header] of headers) if (!panels.has(panel)) remove(panel, header);
39586
+ if (!panels.size) {
39587
+ style?.remove();
39588
+ style = void 0;
39589
+ return;
39590
+ }
39591
+ if (!style) {
39592
+ style = dom.createElement("style");
39593
+ style.dataset.plugin = "codingns4dsh";
39594
+ style.dataset.pluginCss = "codingns4dsh-mobile-team-panel";
39595
+ style.textContent = MOBILE_TEAM_PANEL_STYLES;
39596
+ dom.head.appendChild(style);
39597
+ }
39598
+ for (const panel of panels) {
39599
+ panel.setAttribute(MOBILE, "on");
39600
+ let header = headers.get(panel);
39601
+ if (!header) {
39602
+ header = createHeader(dom, panel);
39603
+ panel.insertBefore(header, panel.firstChild);
39604
+ headers.set(panel, header);
39605
+ }
39606
+ const title = panel.getAttribute("aria-label") || t("mobile.team.title");
39607
+ const heading = header.firstElementChild;
39608
+ if (heading.textContent !== title) heading.textContent = title;
39609
+ const button = header.lastElementChild;
39610
+ const label = t("mobile.team.close");
39611
+ if (button.getAttribute("aria-label") !== label) button.setAttribute("aria-label", label);
39612
+ if (button.getAttribute("title") !== label) button.setAttribute("title", label);
39613
+ }
39614
+ };
39615
+ const schedule = () => {
39616
+ if (disposed || queued) return;
39617
+ queued = true;
39618
+ queueMicrotask(() => {
39619
+ queued = false;
39620
+ refresh();
39621
+ });
39622
+ };
39623
+ const observer = dom && Observer ? new Observer(schedule) : void 0;
39624
+ if (dom?.documentElement) observer?.observe(dom.documentElement, {
39625
+ childList: true,
39626
+ subtree: true,
39627
+ attributes: true,
39628
+ attributeFilter: ["data-team-panel", "aria-label"]
39629
+ });
39630
+ win?.addEventListener("resize", schedule);
39631
+ const unsubscribeLocale = options.locale?.subscribe(schedule);
39632
+ refresh();
39633
+ return {
39634
+ refresh,
39635
+ dispose() {
39636
+ if (disposed) return;
39637
+ disposed = true;
39638
+ observer?.disconnect();
39639
+ win?.removeEventListener("resize", schedule);
39640
+ unsubscribeLocale?.();
39641
+ for (const [panel, header] of headers) remove(panel, header);
39642
+ style?.remove();
39643
+ style = void 0;
39644
+ }
39645
+ };
39646
+ }
39647
+ function createHeader(dom, panel) {
39648
+ const header = dom.createElement("div");
39649
+ header.setAttribute(HEADER, "");
39650
+ const button = dom.createElement("button");
39651
+ button.type = "button";
39652
+ const svg = dom.createElementNS("http://www.w3.org/2000/svg", "svg");
39653
+ svg.setAttribute("viewBox", "0 0 24 24");
39654
+ svg.setAttribute("width", "20");
39655
+ svg.setAttribute("height", "20");
39656
+ svg.setAttribute("aria-hidden", "true");
39657
+ const close = dom.createElementNS("http://www.w3.org/2000/svg", "path");
39658
+ close.setAttribute("d", "M6 6l12 12m0-12L6 18");
39659
+ close.setAttribute("fill", "none");
39660
+ close.setAttribute("stroke", "currentColor");
39661
+ close.setAttribute("stroke-width", "2");
39662
+ close.setAttribute("stroke-linecap", "round");
39663
+ svg.appendChild(close);
39664
+ button.appendChild(svg);
39665
+ button.addEventListener("click", (event) => {
39666
+ event.stopPropagation();
39667
+ const Keyboard = dom.defaultView?.KeyboardEvent;
39668
+ if (!Keyboard) return;
39669
+ button.focus({ preventScroll: true });
39670
+ panel.dispatchEvent(new Keyboard("keydown", {
39671
+ key: "Escape",
39672
+ bubbles: true,
39673
+ cancelable: true
39674
+ }));
39675
+ });
39676
+ header.append(dom.createElement("strong"), button);
39677
+ return header;
39678
+ }
39679
+ const SCOPE = `[${MOBILE}="on"]`;
39680
+ const MOBILE_TEAM_PANEL_STYLES = `
39681
+ ${SCOPE} {
39682
+ box-sizing:border-box!important;
39683
+ top:max(8px, env(safe-area-inset-top, 0px))!important;
39684
+ left:max(8px, env(safe-area-inset-left, 0px))!important;
39685
+ right:max(8px, env(safe-area-inset-right, 0px))!important;
39686
+ bottom:auto!important; width:auto!important; max-width:none!important;
39687
+ height:calc(100vh - 16px)!important;
39688
+ height:calc(100dvh - max(8px, env(safe-area-inset-top, 0px)) - max(8px, env(safe-area-inset-bottom, 0px)))!important;
39689
+ max-height:none!important; padding:0!important; visibility:visible!important; overflow:hidden!important;
39690
+ }
39691
+ ${SCOPE}>[${HEADER}] {
39692
+ flex:0 0 auto; display:flex; align-items:center; justify-content:space-between; gap:12px; padding:6px 8px 6px 16px;
39693
+ border-bottom:1px solid var(--dsw-alias-border-l2, #ddd); color:var(--dsw-alias-label-primary, CanvasText);
39694
+ }
39695
+ ${SCOPE}>[${HEADER}] strong { min-width:0; font-size:15px; overflow-wrap:anywhere; }
39696
+ ${SCOPE}>[${HEADER}] button {
39697
+ display:inline-flex; align-items:center; justify-content:center; flex:0 0 44px; width:44px; height:44px;
39698
+ padding:0; border:0; border-radius:10px; color:var(--dsw-alias-label-primary, CanvasText); background:transparent;
39699
+ cursor:pointer; touch-action:manipulation; -webkit-tap-highlight-color:transparent;
39700
+ }
39701
+ ${SCOPE}>[${HEADER}] button:hover { background:var(--dsw-alias-interactive-bg-hover, rgba(127,127,127,.1)); }
39702
+ ${SCOPE}>[${HEADER}] button:focus-visible { outline:2px solid var(--dsw-focus-ring-color, #1677ff); outline-offset:-2px; }
39703
+ ${SCOPE}>[${HEADER}] svg { display:block; pointer-events:none; }
39704
+ ${SCOPE}>div:not([${HEADER}]) {
39705
+ flex:1 1 auto!important; min-height:0!important; min-width:0; padding:0 12px 12px!important;
39706
+ overflow-y:auto!important; overscroll-behavior:contain; scrollbar-gutter:auto!important; -webkit-overflow-scrolling:touch;
39707
+ }
39708
+ ${SCOPE} section:first-of-type>div { grid-template-columns:repeat(auto-fit, minmax(min(150px, 100%), 1fr))!important; }
39709
+ ${SCOPE} section:first-of-type button { min-height:64px; padding:10px!important; touch-action:manipulation; }
39710
+ ${SCOPE} section:first-of-type button>span:last-child>span { flex-wrap:wrap; }
39711
+ ${SCOPE} section:first-of-type button>span:last-child>span>span:first-child { white-space:normal!important; overflow-wrap:anywhere; }
39712
+ ${SCOPE} article { min-width:0; padding:12px!important; }
39713
+ ${SCOPE} article>div:first-child { align-items:flex-start!important; }
39714
+ ${SCOPE} article>div:first-child strong { flex:1; min-width:0; font-size:14px!important; line-height:1.45; overflow-wrap:anywhere; }
39715
+ ${SCOPE} article>div:first-child>span { flex:0 0 auto; white-space:nowrap; }
39716
+ ${SCOPE} article p { font-size:13px!important; line-height:1.55!important; overflow-wrap:anywhere; }
39717
+ ${SCOPE} article>div:last-child { display:flex; flex-wrap:wrap; align-items:center; gap:4px 10px; }
39718
+ ${SCOPE} article>div:last-child>span { min-width:0; max-width:100%; margin-right:0!important; overflow-wrap:anywhere; }
39719
+ ${SCOPE} article>div:last-child>button { float:none!important; order:1; min-height:36px; margin-left:auto!important; padding:6px!important; touch-action:manipulation; }
39720
+ `;
39347
39721
  //#endregion
39348
39722
  //#region src/client/features/mobile-access-panel.ts
39349
39723
  /**
@@ -39821,17 +40195,23 @@ ${scope} [data-dockkit-strip-tabs] {
39821
40195
  mobileViewportMaxPx: () => require_native_workspace_store.normalizeMobileAccessSettings(context.services.settings.getSnapshot().value?.mobileAccess).mobileViewportMaxPx
39822
40196
  });
39823
40197
  const rightbarTabs = startMobileRightbarTabsDom({ mobileViewportMaxPx: () => require_native_workspace_store.normalizeMobileAccessSettings(context.services.settings.getSnapshot().value?.mobileAccess).mobileViewportMaxPx });
40198
+ const teamPanel = startMobileTeamPanelDom({
40199
+ locale: context.services.locale,
40200
+ mobileViewportMaxPx: () => require_native_workspace_store.normalizeMobileAccessSettings(context.services.settings.getSnapshot().value?.mobileAccess).mobileViewportMaxPx
40201
+ });
39824
40202
  context.resources.add(context.services.settings.subscribe(() => {
39825
40203
  controller.refresh();
39826
40204
  gestures.refresh();
39827
40205
  settingsModal.refresh();
39828
40206
  rightbarTabs.refresh();
40207
+ teamPanel.refresh();
39829
40208
  }));
39830
40209
  context.resources.add(() => {
39831
40210
  controller.dispose();
39832
40211
  gestures.dispose();
39833
40212
  settingsModal.dispose();
39834
40213
  rightbarTabs.dispose();
40214
+ teamPanel.dispose();
39835
40215
  });
39836
40216
  },
39837
40217
  settingsPanel: MobileAccessPanel
@@ -41171,6 +41551,10 @@ ${scope} [data-dockkit-strip-tabs] {
41171
41551
  * 内联样式只负责尺寸与排版。取值全部来自 DSH 真实令牌,与内置组件同一套观感。
41172
41552
  */
41173
41553
  const gitPanelClass = {
41554
+ panel: "codingns4dsh-git-panel",
41555
+ contentGrid: "codingns4dsh-git-content-grid",
41556
+ column: "codingns4dsh-git-column",
41557
+ columnSwitch: "codingns4dsh-git-column-switch",
41174
41558
  action: "codingns4dsh-git-action",
41175
41559
  actionDanger: "codingns4dsh-git-action-danger",
41176
41560
  button: "codingns4dsh-git-button",
@@ -41205,6 +41589,16 @@ ${scope} [data-dockkit-strip-tabs] {
41205
41589
  const active = "background:var(--dsw-alias-interactive-bg-active)";
41206
41590
  const disabled = "opacity:.4;cursor:not-allowed";
41207
41591
  const gitPanelCss = `
41592
+ .${gitPanelClass.panel}{container-type:inline-size;container-name:codingns4dsh-git;scrollbar-gutter:stable}
41593
+ .${gitPanelClass.contentGrid}{grid-template-columns:minmax(0,1fr)}
41594
+ .${gitPanelClass.column},.${gitPanelClass.columnSwitch}{display:flex}
41595
+ .${gitPanelClass.contentGrid}[data-active-column='files']>[data-git-column='history'],.${gitPanelClass.contentGrid}[data-active-column='history']>[data-git-column='files']{display:none}
41596
+ /* Column visibility depends on the scrollport width, never on the rendered grid tracks. */
41597
+ @container codingns4dsh-git (min-width:612px){
41598
+ .${gitPanelClass.columnSwitch}{display:none}
41599
+ .${gitPanelClass.contentGrid}{grid-template-columns:repeat(2,minmax(0,1fr))}
41600
+ .${gitPanelClass.contentGrid}[data-active-column]>[data-git-column]{display:flex}
41601
+ }
41208
41602
  .${gitPanelClass.action}{box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;padding:0;border:0;border-radius:var(--dsw-radius-sm);color:var(--dsw-alias-label-secondary);background:transparent;cursor:pointer;font-size:16px;line-height:1}
41209
41603
  .${gitPanelClass.action}:hover:not(:disabled){${hover};color:var(--dsw-alias-label-primary)}
41210
41604
  .${gitPanelClass.action}:active:not(:disabled){${active}}
@@ -41419,12 +41813,10 @@ ${scope} [data-dockkit-strip-tabs] {
41419
41813
  const [toast, setToast] = (0, react.useState)(null);
41420
41814
  const [diffView, setDiffView] = (0, react.useState)(null);
41421
41815
  const [fileDiff, setFileDiff] = (0, react.useState)(null);
41422
- const [singleColumn, setSingleColumn] = (0, react.useState)(false);
41423
41816
  const [activeColumn, setActiveColumn] = (0, react.useState)("files");
41424
41817
  const [historyScope, setHistoryScope] = (0, react.useState)("all");
41425
41818
  const [historyTotalCount, setHistoryTotalCount] = (0, react.useState)(0);
41426
41819
  const [historyLoadingMore, setHistoryLoadingMore] = (0, react.useState)(false);
41427
- const contentGridRef = (0, react.useRef)(null);
41428
41820
  const historyExpanded = (0, react.useRef)(false);
41429
41821
  const gridVisible = status !== null && status.snapshot.enabled !== false;
41430
41822
  (0, react.useEffect)(() => {
@@ -41432,25 +41824,6 @@ ${scope} [data-dockkit-strip-tabs] {
41432
41824
  const timer = globalThis.setTimeout(() => setToast(null), 3200);
41433
41825
  return () => globalThis.clearTimeout(timer);
41434
41826
  }, [toast]);
41435
- (0, react.useEffect)(() => {
41436
- const element = contentGridRef.current;
41437
- if (element === null) {
41438
- setSingleColumn(false);
41439
- return;
41440
- }
41441
- const update = () => {
41442
- const tracks = getComputedStyle(element).gridTemplateColumns.split(" ").filter((track) => track !== "");
41443
- setSingleColumn(tracks.length <= 1);
41444
- };
41445
- update();
41446
- if (typeof ResizeObserver === "undefined") {
41447
- window.addEventListener("resize", update);
41448
- return () => window.removeEventListener("resize", update);
41449
- }
41450
- const observer = new ResizeObserver(update);
41451
- observer.observe(element);
41452
- return () => observer.disconnect();
41453
- }, [gridVisible]);
41454
41827
  const notify = (kind, message) => setToast({
41455
41828
  kind,
41456
41829
  message
@@ -41692,10 +42065,14 @@ ${scope} [data-dockkit-strip-tabs] {
41692
42065
  const discardAll = () => {
41693
42066
  run("git/discard", { targets: changes.map((item) => item.path) });
41694
42067
  };
41695
- return (0, react.createElement)("section", {
42068
+ const panel = (0, react.createElement)("section", {
42069
+ className: gitPanelClass.panel,
41696
42070
  style: panelStyle,
41697
42071
  "data-git-management-panel": "true"
41698
- }, (0, react.createElement)("header", { style: headerStyle }, singleColumn ? (0, react.createElement)("div", { style: columnSwitchStyle }, (0, react.createElement)(SegmentedControl, {
42072
+ }, (0, react.createElement)("header", { style: headerStyle }, gridVisible ? (0, react.createElement)("div", {
42073
+ className: gitPanelClass.columnSwitch,
42074
+ style: columnSwitchStyle
42075
+ }, (0, react.createElement)(SegmentedControl, {
41699
42076
  id: "codingns4dsh-git-view",
41700
42077
  value: activeColumn,
41701
42078
  onChange: setActiveColumn,
@@ -41747,20 +42124,15 @@ ${scope} [data-dockkit-strip-tabs] {
41747
42124
  unstaged: unstaged.length,
41748
42125
  total: historyTotalCount,
41749
42126
  scope: historyScope === "all" ? t("git.allBranches") : t("git.currentBranch")
41750
- })) : null, diffView !== null ? (0, react.createElement)(DiffViewer, {
41751
- diff: diffView,
41752
- onClose: () => setDiffView(null),
41753
- t
41754
- }) : null, fileDiff !== null ? (0, react.createElement)(FileDiffViewer, {
41755
- path: fileDiff.path,
41756
- staged: fileDiff.staged,
41757
- diff: fileDiff.diff,
41758
- onClose: () => setFileDiff(null),
41759
- t
41760
- }) : null, status !== null && status.snapshot.enabled !== false ? (0, react.createElement)("div", {
41761
- ref: contentGridRef,
41762
- style: contentGridStyle
41763
- }, singleColumn && activeColumn !== "files" ? null : (0, react.createElement)("div", { style: columnStyle }, (0, react.createElement)("section", { style: commitSectionStyle }, (0, react.createElement)("div", { style: sectionHeaderStyle }, (0, react.createElement)("strong", void 0, t("git.commitChanges")), (0, react.createElement)("span", { style: mutedStyle }, staged.length === 0 ? t("git.stagingEmpty") : t("git.stagedCount", { count: staged.length }))), (0, react.createElement)("div", { style: commitEditorRowStyle }, (0, react.createElement)("textarea", {
42127
+ })) : null, status !== null && status.snapshot.enabled !== false ? (0, react.createElement)("div", {
42128
+ className: gitPanelClass.contentGrid,
42129
+ style: contentGridStyle,
42130
+ "data-active-column": activeColumn
42131
+ }, (0, react.createElement)("div", {
42132
+ className: gitPanelClass.column,
42133
+ style: columnStyle,
42134
+ "data-git-column": "files"
42135
+ }, (0, react.createElement)("section", { style: commitSectionStyle }, (0, react.createElement)("div", { style: sectionHeaderStyle }, (0, react.createElement)("strong", void 0, t("git.commitChanges")), (0, react.createElement)("span", { style: mutedStyle }, staged.length === 0 ? t("git.stagingEmpty") : t("git.stagedCount", { count: staged.length }))), (0, react.createElement)("div", { style: commitEditorRowStyle }, (0, react.createElement)("textarea", {
41764
42136
  value: subject,
41765
42137
  disabled: busy || workspaceId === void 0,
41766
42138
  className: gitPanelClass.field,
@@ -41811,7 +42183,11 @@ ${scope} [data-dockkit-strip-tabs] {
41811
42183
  onBatchAction: (action, paths) => void run(`git/${action}`, { targets: paths }),
41812
42184
  onBulkAction: () => void run("git/stage", { targets: unstaged.map((item) => item.path) }),
41813
42185
  t
41814
- }) : null), singleColumn && activeColumn !== "history" ? null : (0, react.createElement)("div", { style: columnStyle }, (0, react.createElement)(HistorySection, {
42186
+ }) : null), (0, react.createElement)("div", {
42187
+ className: gitPanelClass.column,
42188
+ style: columnStyle,
42189
+ "data-git-column": "history"
42190
+ }, (0, react.createElement)(HistorySection, {
41815
42191
  history,
41816
42192
  totalCount: historyTotalCount,
41817
42193
  hasMore: history.length < historyTotalCount,
@@ -41832,6 +42208,17 @@ ${scope} [data-dockkit-strip-tabs] {
41832
42208
  onUndo: () => runGitOperation("undo"),
41833
42209
  t
41834
42210
  }))) : null);
42211
+ return (0, react.createElement)(react.Fragment, void 0, panel, diffView !== null ? (0, react.createElement)(DiffViewer, {
42212
+ diff: diffView,
42213
+ onClose: () => setDiffView(null),
42214
+ t
42215
+ }) : null, fileDiff !== null ? (0, react.createElement)(FileDiffViewer, {
42216
+ path: fileDiff.path,
42217
+ staged: fileDiff.staged,
42218
+ diff: fileDiff.diff,
42219
+ onClose: () => setFileDiff(null),
42220
+ t
42221
+ }) : null);
41835
42222
  }
41836
42223
  function ChangeSection({ title, staged, items, busy, onOpenDiff, onAction, onBatchAction, onBulkAction, t }) {
41837
42224
  const [hoveredPath, setHoveredPath] = (0, react.useState)(null);
@@ -43042,7 +43429,8 @@ ${scope} [data-dockkit-strip-tabs] {
43042
43429
  display: "flex",
43043
43430
  flexDirection: "column",
43044
43431
  gap: 12,
43045
- minHeight: "100%",
43432
+ height: "100%",
43433
+ minHeight: 0,
43046
43434
  padding: "12px 14px 20px",
43047
43435
  overflow: "auto",
43048
43436
  color: require_theme.dshThemeColor.labelPrimary
@@ -43067,7 +43455,6 @@ ${scope} [data-dockkit-strip-tabs] {
43067
43455
  gap: 4
43068
43456
  };
43069
43457
  const columnSwitchStyle = {
43070
- display: "flex",
43071
43458
  alignItems: "center",
43072
43459
  justifyContent: "center",
43073
43460
  width: "100%",
@@ -43079,12 +43466,10 @@ ${scope} [data-dockkit-strip-tabs] {
43079
43466
  };
43080
43467
  const contentGridStyle = {
43081
43468
  display: "grid",
43082
- gridTemplateColumns: "repeat(auto-fit, minmax(300px, 1fr))",
43083
43469
  alignItems: "start",
43084
43470
  gap: 12
43085
43471
  };
43086
43472
  const columnStyle = {
43087
- display: "flex",
43088
43473
  flexDirection: "column",
43089
43474
  gap: 12,
43090
43475
  minWidth: 0
@@ -45469,12 +45854,15 @@ ${scope} [data-dockkit-strip-tabs] {
45469
45854
  }
45470
45855
  return saved;
45471
45856
  }
45472
- async open(id) {
45857
+ async open(id, browserStorage = true) {
45473
45858
  const closing = this.close();
45474
45859
  const generation = this.generation;
45475
45860
  await closing;
45476
45861
  if (generation !== this.generation) return void 0;
45477
- const result = await this.call("launch", { id });
45862
+ const result = await this.call("launch", {
45863
+ id,
45864
+ ...browserStorage ? { browserStorage: true } : {}
45865
+ });
45478
45866
  if (generation !== this.generation) {
45479
45867
  if (result.launchId) await this.call("close", { id: result.launchId });
45480
45868
  return;
@@ -56890,6 +57278,169 @@ ${scope} [data-dockkit-strip-tabs] {
56890
57278
  }));
56891
57279
  }
56892
57280
  //#endregion
57281
+ //#region src/shared/quick-app-browser-storage.ts
57282
+ const QUICK_APP_STORAGE_PROTOCOL = "codingns.quick-app-storage.v1";
57283
+ const QUICK_APP_STORAGE_LIMITS = Object.freeze({
57284
+ bytes: 2097152,
57285
+ keys: 1024,
57286
+ pending: 64,
57287
+ timeoutMs: 1e4
57288
+ });
57289
+ function validateQuickAppStorageEntries(value) {
57290
+ if (!Array.isArray(value)) throw new DOMException("Invalid application storage data.", "DataError");
57291
+ if (value.length > QUICK_APP_STORAGE_LIMITS.keys) throw new DOMException("Application storage quota exceeded.", "QuotaExceededError");
57292
+ if (Array.from(value).some((entry) => !Array.isArray(entry) || entry.length !== 2 || Array.from(entry).some((part) => typeof part !== "string")) || new Set(value.map((entry) => entry[0])).size !== value.length) throw new DOMException("Invalid application storage data.", "DataError");
57293
+ if (JSON.stringify(value).length * 2 > QUICK_APP_STORAGE_LIMITS.bytes) throw new DOMException("Application storage quota exceeded.", "QuotaExceededError");
57294
+ }
57295
+ function isQuickAppStorageRequest(value) {
57296
+ if (!value || typeof value !== "object") return false;
57297
+ const request = value;
57298
+ if (Object.keys(request).some((key) => ![
57299
+ "id",
57300
+ "area",
57301
+ "operation",
57302
+ "key",
57303
+ "value"
57304
+ ].includes(key)) || !Number.isSafeInteger(request.id) || Number(request.id) < 1 || request.area !== "local" && request.area !== "session" || typeof request.operation !== "string") return false;
57305
+ if (request.operation === "setItem") return typeof request.key === "string" && typeof request.value === "string" && (request.key.length + request.value.length) * 2 <= QUICK_APP_STORAGE_LIMITS.bytes;
57306
+ if (request.operation === "getItem" || request.operation === "removeItem") return typeof request.key === "string" && request.key.length * 2 <= QUICK_APP_STORAGE_LIMITS.bytes && request.value === void 0;
57307
+ return [
57308
+ "clear",
57309
+ "keys",
57310
+ "flush"
57311
+ ].includes(request.operation) && request.key === void 0 && request.value === void 0;
57312
+ }
57313
+ //#endregion
57314
+ //#region src/client/quick-apps/browser-storage.ts
57315
+ function storageFailure(error) {
57316
+ return {
57317
+ name: error instanceof Error ? error.name : "UnknownError",
57318
+ message: error instanceof Error ? error.message : "Application storage failed."
57319
+ };
57320
+ }
57321
+ /** Only this object chooses the namespace; requests cannot provide storage keys or identities. */
57322
+ function createQuickAppBrowserStore(scope, resolve) {
57323
+ const key = scope;
57324
+ if (!key.startsWith("codingns.quickApps.storage.v1:") || key.length > 8192) throw new DOMException("Invalid application storage scope.", "SecurityError");
57325
+ const read = (area) => {
57326
+ const text = resolve(area).getItem(key);
57327
+ if (text !== null && text.length * 2 > QUICK_APP_STORAGE_LIMITS.bytes) throw new DOMException("Application storage quota exceeded.", "QuotaExceededError");
57328
+ let entries;
57329
+ try {
57330
+ entries = text === null ? [] : JSON.parse(text);
57331
+ } catch {
57332
+ throw new DOMException("Application storage is not valid JSON.", "DataError");
57333
+ }
57334
+ validateQuickAppStorageEntries(entries);
57335
+ return entries;
57336
+ };
57337
+ return {
57338
+ read,
57339
+ execute(request) {
57340
+ if (!isQuickAppStorageRequest(request)) throw new DOMException("Invalid application storage request.", "SecurityError");
57341
+ const store = resolve(request.area);
57342
+ const entries = new Map(request.operation === "clear" ? [] : read(request.area));
57343
+ let value = null;
57344
+ switch (request.operation) {
57345
+ case "getItem":
57346
+ value = entries.get(request.key) ?? null;
57347
+ break;
57348
+ case "setItem":
57349
+ entries.set(request.key, request.value);
57350
+ break;
57351
+ case "removeItem":
57352
+ entries.delete(request.key);
57353
+ break;
57354
+ case "keys": value = [...entries.keys()];
57355
+ }
57356
+ const snapshot = [...entries];
57357
+ validateQuickAppStorageEntries(snapshot);
57358
+ if (request.operation === "clear") store.removeItem(key);
57359
+ else if (request.operation === "setItem" || request.operation === "removeItem") store.setItem(key, JSON.stringify(snapshot));
57360
+ return {
57361
+ id: request.id,
57362
+ value,
57363
+ entries: snapshot
57364
+ };
57365
+ }
57366
+ };
57367
+ }
57368
+ /** Exact window + launch token authenticate the initial transfer; Origin:null alone never does. */
57369
+ function attachQuickAppStorageBroker(options) {
57370
+ const { owner, token, expiresAt, onError } = options;
57371
+ const store = createQuickAppBrowserStore(options.scope, (area) => area === "local" ? owner.localStorage : owner.sessionStorage);
57372
+ let active = true;
57373
+ let port;
57374
+ let documentId;
57375
+ const shutdown = () => {
57376
+ port?.postMessage({
57377
+ type: "closed",
57378
+ error: {
57379
+ name: "SecurityError",
57380
+ message: "The application storage channel was closed."
57381
+ }
57382
+ });
57383
+ port?.close();
57384
+ port = void 0;
57385
+ };
57386
+ const connect = (event) => {
57387
+ const frameWindow = options.frame()?.contentWindow;
57388
+ const data = event.data;
57389
+ if (!active || Date.now() >= expiresAt || !frameWindow || event.source !== frameWindow || event.origin !== "null" || !data || data.type !== "codingns.quick-app-storage.v1" || data.token !== token || typeof data.documentId !== "string" || !/^[a-f0-9]{32}$/u.test(data.documentId) || documentId === data.documentId) return;
57390
+ shutdown();
57391
+ documentId = data.documentId;
57392
+ const channel = new MessageChannel();
57393
+ port = channel.port1;
57394
+ const current = port;
57395
+ const snapshot = {};
57396
+ const errors = {};
57397
+ for (const area of ["local", "session"]) try {
57398
+ snapshot[area] = store.read(area);
57399
+ } catch (error) {
57400
+ errors[area] = storageFailure(error);
57401
+ onError(new Error(errors[area].message));
57402
+ }
57403
+ current.onmessage = (message) => {
57404
+ if (current !== port) return;
57405
+ if (!active || Date.now() >= expiresAt) {
57406
+ shutdown();
57407
+ return;
57408
+ }
57409
+ try {
57410
+ current.postMessage(store.execute(message.data));
57411
+ } catch (error) {
57412
+ const failure = storageFailure(error);
57413
+ const id = message.data?.id;
57414
+ current.postMessage({
57415
+ id,
57416
+ error: failure
57417
+ });
57418
+ onError(new Error(failure.message));
57419
+ if (!isQuickAppStorageRequest(message.data)) shutdown();
57420
+ }
57421
+ };
57422
+ frameWindow.postMessage({
57423
+ type: QUICK_APP_STORAGE_PROTOCOL,
57424
+ token,
57425
+ documentId,
57426
+ snapshot,
57427
+ errors
57428
+ }, "*", [channel.port2]);
57429
+ };
57430
+ owner.addEventListener("message", connect);
57431
+ const expiry = setTimeout(() => {
57432
+ active = false;
57433
+ shutdown();
57434
+ owner.removeEventListener("message", connect);
57435
+ }, Math.max(0, Math.min(expiresAt - Date.now(), 2147483647)));
57436
+ return () => {
57437
+ active = false;
57438
+ clearTimeout(expiry);
57439
+ owner.removeEventListener("message", connect);
57440
+ shutdown();
57441
+ };
57442
+ }
57443
+ //#endregion
56893
57444
  //#region src/client/quick-apps/viewer.ts
56894
57445
  const defaultMode = (path) => /\.(?:md|markdown)$/iu.test(path) && require_primitives_adapter.hasNativeMarkdown() ? "markdown" : "source";
56895
57446
  /** Native renderers and editor with Quick Apps ownership, save preconditions and lifetime. */
@@ -56912,6 +57463,9 @@ ${scope} [data-dockkit-strip-tabs] {
56912
57463
  const [confirmation, setConfirmation] = (0, react.useState)(null);
56913
57464
  const generation = (0, react.useRef)(0);
56914
57465
  const pending = (0, react.useRef)(false);
57466
+ const frame = (0, react.useRef)(null);
57467
+ const storageTranslator = (0, react.useRef)(t);
57468
+ storageTranslator.current = t;
56915
57469
  const dirty = doc !== void 0 && draft !== doc.content;
56916
57470
  const path = doc?.path ?? app.entryPath;
56917
57471
  const accept = (next) => {
@@ -56934,6 +57488,20 @@ ${scope} [data-dockkit-strip-tabs] {
56934
57488
  (0, react.useEffect)(() => {
56935
57489
  if (error) setFrameLoading(false);
56936
57490
  }, [error]);
57491
+ (0, react.useEffect)(() => {
57492
+ if (view.kind !== "html" || view.isolation !== "sandbox-proxy" || !view.storageToken || !view.storageScope || typeof window === "undefined") return;
57493
+ return attachQuickAppStorageBroker({
57494
+ owner: window,
57495
+ frame: () => frame.current,
57496
+ token: view.storageToken,
57497
+ scope: view.storageScope,
57498
+ expiresAt: view.expiresAt,
57499
+ onError: (cause) => setMessage({
57500
+ error: true,
57501
+ text: storageTranslator.current("quickApps.storageFailed", { message: cause.message })
57502
+ })
57503
+ });
57504
+ }, [view]);
56937
57505
  (0, react.useEffect)(() => {
56938
57506
  if (!dirty || typeof window === "undefined") return;
56939
57507
  const prevent = (event) => {
@@ -57145,7 +57713,7 @@ ${scope} [data-dockkit-strip-tabs] {
57145
57713
  }, t("quickApps.markdownUnavailable")) : null, view.kind === "html" && view.isolation === "sandbox-proxy" ? (0, react.createElement)("p", {
57146
57714
  className: "qa-view-status",
57147
57715
  role: "status"
57148
- }, t("quickApps.sandboxPreview")) : null, doc ? mode === "edit" ? (0, react.createElement)(QuickAppEditor, {
57716
+ }, t(view.storageToken ? "quickApps.storagePreview" : "quickApps.sandboxPreview")) : null, doc ? mode === "edit" ? (0, react.createElement)(QuickAppEditor, {
57149
57717
  key: path,
57150
57718
  content: draft,
57151
57719
  path,
@@ -57167,6 +57735,7 @@ ${scope} [data-dockkit-strip-tabs] {
57167
57735
  tabIndex: 0,
57168
57736
  "aria-label": app.title
57169
57737
  }, (0, react.createElement)("pre", null, draft)) : view.kind === "html" ? (0, react.createElement)("iframe", {
57738
+ ref: frame,
57170
57739
  key: view.launchId,
57171
57740
  className: "qa-view-frame",
57172
57741
  title: app.title,
@@ -57886,7 +58455,7 @@ ${scope} [data-dockkit-strip-tabs] {
57886
58455
  return;
57887
58456
  }
57888
58457
  perform(async (current) => {
57889
- const view = await client.open(app.id);
58458
+ const view = await client.open(app.id, app.kind === "html");
57890
58459
  if (current() && view) navigate({
57891
58460
  kind: "view",
57892
58461
  app,
@@ -57920,7 +58489,7 @@ ${scope} [data-dockkit-strip-tabs] {
57920
58489
  onClose: close,
57921
58490
  onReload: () => {
57922
58491
  perform(async (current) => {
57923
- const view = await client.open(screen.app.id);
58492
+ const view = await client.open(screen.app.id, screen.app.kind === "html");
57924
58493
  if (current() && view) setScreen({
57925
58494
  ...screen,
57926
58495
  view
@@ -71114,7 +71683,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${require_theme.dsh
71114
71683
  return value === void 0 ? void 0 : (({ cliSessions: _cliSessions, ...clientValue }) => clientValue)(value);
71115
71684
  }
71116
71685
  //#endregion
71117
- //#region node_modules/.pnpm/@deepseek-ai+cosmokit@1.8.6-alpha.2/node_modules/@deepseek-ai/cosmokit/lib/index.js
71686
+ //#region node_modules/.pnpm/@deepseek-ai+cosmokit@1.8.6/node_modules/@deepseek-ai/cosmokit/lib/index.js
71118
71687
  /** Return true when a value is `null` or `undefined`. */
71119
71688
  function isNullable(value) {
71120
71689
  return value === null || value === void 0;
@@ -71283,7 +71852,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${require_theme.dsh
71283
71852
  Time.template = template;
71284
71853
  })(Time || (Time = {}));
71285
71854
  //#endregion
71286
- //#region node_modules/.pnpm/@deepseek-ai+cordis@4.0.5-alpha.2_@deepseek-ai+cordis-plugin-include@1.0.10-alpha.2_@de_d750ba50d5bee7081316b89f08b32afa/node_modules/@deepseek-ai/cordis/lib/index.js
71855
+ //#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
71287
71856
  /** Ordered collection of disposable values with O(1) deletion by value. */
71288
71857
  var DisposableList = class {
71289
71858
  sn = 0;
@@ -76657,7 +77226,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${require_theme.dsh
76657
77226
  function isInjectedStage0Runtime(scope = globalThis) {
76658
77227
  return scope[CODINGNS_STAGE0_GLOBAL] === true;
76659
77228
  }
76660
- route("session.external-performance", "session-performance-projection-021", "host", ">=0.2.1-alpha.3 <=0.2.1-alpha.3", "supported", ["dsh-capabilities/host/session-performance-adapter.ts", "host/cli-adapters/feature.ts"]), route("session.external-performance", "session-performance-presentation-021", "client", ">=0.2.1-alpha.3 <=0.2.1-alpha.3", "supported", ["dsh-capabilities/client/session-performance-adapter.ts", "client/features/cli-adapters.ts"]), route("quick-app.proxy", "quick-app-host-proxy-021", "host", require_native_workspace_store.DSH_COMPATIBILITY, "supported", [
77229
+ route("session.external-performance", "session-performance-projection-021", "host", ">=0.2.1-alpha.3 <=0.2.1-rc.2", "supported", ["dsh-capabilities/host/session-performance-adapter.ts", "host/cli-adapters/feature.ts"]), route("session.external-performance", "session-performance-presentation-021", "client", ">=0.2.1-alpha.3 <=0.2.1-rc.2", "supported", ["dsh-capabilities/client/session-performance-adapter.ts", "client/features/cli-adapters.ts"]), route("quick-app.proxy", "quick-app-host-proxy-021", "host", require_native_workspace_store.DSH_COMPATIBILITY, "supported", [
76661
77230
  "dsh-capabilities/host/quick-app-proxy-adapter.ts",
76662
77231
  "dsh-capabilities/host/quick-app-proxy-provider.ts",
76663
77232
  "host/features/quick-apps.ts",
@@ -76673,21 +77242,21 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${require_theme.dsh
76673
77242
  "dsh-capabilities/host/quick-app-transport.ts",
76674
77243
  "host/features/quick-apps.ts",
76675
77244
  "host/features/lan-access-dsh.ts"
76676
- ]), route("sidebar.footer-action", "sidebar-footer-action-021", "client", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["dsh-capabilities/client/quick-app-footer-adapter.ts", "client/features/quick-apps.ts"]), route("session.prompt-assembly", "session-prompt-assembly-021", "host", ">=0.2.1-alpha.3 <=0.2.1-alpha.3", "supported", [
77245
+ ]), route("sidebar.footer-action", "sidebar-footer-action-021", "client", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["dsh-capabilities/client/quick-app-footer-adapter.ts", "client/features/quick-apps.ts"]), route("session.prompt-assembly", "session-prompt-assembly-021", "host", ">=0.2.1-alpha.3 <=0.2.1-rc.2", "supported", [
76677
77246
  "dsh-capabilities/host/session-prompt-adapter.ts",
76678
77247
  "host/features/session-prompt-translation.ts",
76679
77248
  "host/cli-adapters/feature.ts"
76680
- ]), route("session.external-model-selection", "session-external-model-selection-021", "host", ">=0.2.1-alpha.3 <=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 <=0.2.1-alpha.3", "supported", ["dsh-capabilities/host/session-activation-adapter.ts", "host/native-session-bridge.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 <=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 <=0.2.1-alpha.3", "supported", [
77249
+ ]), route("session.external-model-selection", "session-external-model-selection-021", "host", ">=0.2.1-alpha.3 <=0.2.1-rc.2", "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 <=0.2.1-rc.2", "supported", ["dsh-capabilities/host/session-activation-adapter.ts", "host/native-session-bridge.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 <=0.2.1-rc.2", "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 <=0.2.1-rc.2", "supported", [
76681
77250
  "dsh-capabilities/host/connection-peer-adapter.ts",
76682
77251
  "host/rpc.ts",
76683
77252
  "host/features/global-voice-rpc.ts",
76684
77253
  "host/modules/peer-host/peer-host-native-dispatch.ts"
76685
- ]), route("connection.uplink", "connection.uplink-021", "host", ">=0.2.1-alpha.3 <=0.2.1-alpha.3", "supported", ["dsh-capabilities/host/native-dispatch-adapter.ts", "host/modules/peer-host/peer-host-native-dispatch.ts"]), route("session.title", "session-title-020", "host", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["dsh-capabilities/host/session-title-adapter.ts", "host/features/session-title-optimization.ts"]), route("session.working-directory", "session-working-directory-021", "host", ">=0.2.1-alpha.2", "supported", ["host/terminal/terminal-controller.ts", "host/index.ts"]), route("llm.text", "llm-text-021", "host", require_native_workspace_store.DSH_COMPATIBILITY, "supported", [
77254
+ ]), route("connection.uplink", "connection.uplink-021", "host", ">=0.2.1-alpha.3 <=0.2.1-rc.2", "supported", ["dsh-capabilities/host/native-dispatch-adapter.ts", "host/modules/peer-host/peer-host-native-dispatch.ts"]), route("session.title", "session-title-020", "host", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["dsh-capabilities/host/session-title-adapter.ts", "host/features/session-title-optimization.ts"]), route("session.working-directory", "session-working-directory-021", "host", ">=0.2.1-alpha.2", "supported", ["host/terminal/terminal-controller.ts", "host/index.ts"]), route("llm.text", "llm-text-021", "host", require_native_workspace_store.DSH_COMPATIBILITY, "supported", [
76686
77255
  "dsh-capabilities/host/assistant-llm-adapter.ts",
76687
77256
  "host/features/assistant-text-chat.ts",
76688
77257
  "dsh-capabilities/host/session-title-adapter.ts",
76689
77258
  "host/features/session-title-optimization.ts"
76690
- ]), route("assistant.agent", "assistant-agent-021", "host", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["dsh-capabilities/host/assistant-agent-adapter.ts", "host/features/global-voice-rpc.ts"]), 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("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", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["host/settings.ts", "host/rpc.ts"]), route("connection.rpc", "connection-rpc-020", "host", require_native_workspace_store.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", require_native_workspace_store.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", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["host/terminal/terminal-controller.ts", "client/terminal/model.ts"]), route("typert.context", "typert-context-registry-020", "host", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["typert.host.ts", "host/terminal/terminal-controller.ts"]), route("typert.stream", "typert-remote-stream-020", "host", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["typert.host.ts", "typert.remote-client.ts"]), route("session.format-v4", "session-format-v4", "host", require_native_workspace_store.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", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["host/cli-adapters/feature.ts", "host/cli-adapters/native-team-proxy.ts"]), route("ui.icon.plus", "regular-plus-icon-020", "client", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["client/terminal/xterm-view.ts"]), route("ui.icon.chevron", "regular-chevron-icon-020", "client", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["client/terminal/ui.ts"]), route("locale.runtime", "locale-runtime-020", "client", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["client/locale.ts"]), route("theme.runtime", "theme-runtime-020", "client", require_native_workspace_store.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", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["client/external-tool-stream.ts"]), route("conversation.draft-share", "conversation-draft-share-021", "client", ">=0.2.1-alpha.1 <=0.2.1-alpha.3", "supported", ["client/terminal/ui.ts", "client/terminal/sharing.ts"]), route("conversation.interaction-translation", "interaction-presentation-021", "client", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["client/session-translation-interactions.ts"]), route("sidebar.right", "sidebar-right-dock-020", "client", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["client/terminal/ui.ts"]), route("typert.remote", "remote-context-stream-020-client", "client", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["client/terminal/model.ts"]), route("typert.context", "typert-context-registry-020-client", "client", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["typert.remote-client.ts", "client/terminal/model.ts"]), route("typert.stream", "typert-remote-stream-020-client", "client", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["typert.remote-client.ts", "client/terminal/model.ts"]), route("client.boot-graph", "client-web-boot-graph-020", "client", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["client/index.ts", "package.json"]), route("peer-host.native-navigation", "peer-host-native-navigation-020", "client", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["client/features/peer-host.ts"]), route("peer-host.remote-web-context-fallback", "peer-host-remote-web-context-fallback-020", "client", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["client/features/peer-host.ts"]), route("peer-host.store", "peer-host-store-020", "host", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["host/features/peer-host.ts"]), route("peer-host.handshake", "peer-host-handshake-020", "host", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["host/features/peer-host.ts"]), route("peer-host.http-proxy", "peer-host-http-proxy-020", "host", require_native_workspace_store.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", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["host/features/peer-host.ts"]), route("peer-host.aggregate", "peer-host-aggregate-020", "host", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["host/features/peer-host.ts"]), route("peer-host.aggregated-transport", "peer-host-aggregated-transport-020", "host", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["host/modules/peer-host/aggregated-host-transport.ts"]), route("peer-host.client-preboot-transport", "peer-host-client-preboot-transport-020", "client", require_native_workspace_store.DSH_COMPATIBILITY, "supported", [
77259
+ ]), route("assistant.agent", "assistant-agent-021", "host", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["dsh-capabilities/host/assistant-agent-adapter.ts", "host/features/global-voice-rpc.ts"]), 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("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", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["host/settings.ts", "host/rpc.ts"]), route("connection.rpc", "connection-rpc-020", "host", require_native_workspace_store.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", require_native_workspace_store.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", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["host/terminal/terminal-controller.ts", "client/terminal/model.ts"]), route("typert.context", "typert-context-registry-020", "host", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["typert.host.ts", "host/terminal/terminal-controller.ts"]), route("typert.stream", "typert-remote-stream-020", "host", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["typert.host.ts", "typert.remote-client.ts"]), route("session.format-v4", "session-format-v4", "host", require_native_workspace_store.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", require_native_workspace_store.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 <=0.2.1-rc.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 <=0.2.1-rc.2", "supported", ["host/cli-adapters/feature.ts", "host/cli-bridge/team-dispatch.ts"]), route("ui.icon.plus", "regular-plus-icon-020", "client", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["client/terminal/xterm-view.ts"]), route("ui.icon.chevron", "regular-chevron-icon-020", "client", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["client/terminal/ui.ts"]), route("locale.runtime", "locale-runtime-020", "client", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["client/locale.ts"]), route("theme.runtime", "theme-runtime-020", "client", require_native_workspace_store.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", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["client/external-tool-stream.ts"]), route("conversation.draft-share", "conversation-draft-share-021", "client", ">=0.2.1-alpha.1 <=0.2.1-rc.2", "supported", ["client/terminal/ui.ts", "client/terminal/sharing.ts"]), route("conversation.interaction-translation", "interaction-presentation-021", "client", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["client/session-translation-interactions.ts"]), route("sidebar.right", "sidebar-right-dock-020", "client", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["client/terminal/ui.ts"]), route("typert.remote", "remote-context-stream-020-client", "client", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["client/terminal/model.ts"]), route("typert.context", "typert-context-registry-020-client", "client", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["typert.remote-client.ts", "client/terminal/model.ts"]), route("typert.stream", "typert-remote-stream-020-client", "client", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["typert.remote-client.ts", "client/terminal/model.ts"]), route("client.boot-graph", "client-web-boot-graph-020", "client", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["client/index.ts", "package.json"]), route("peer-host.native-navigation", "peer-host-native-navigation-020", "client", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["client/features/peer-host.ts"]), route("peer-host.remote-web-context-fallback", "peer-host-remote-web-context-fallback-020", "client", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["client/features/peer-host.ts"]), route("peer-host.store", "peer-host-store-020", "host", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["host/features/peer-host.ts"]), route("peer-host.handshake", "peer-host-handshake-020", "host", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["host/features/peer-host.ts"]), route("peer-host.http-proxy", "peer-host-http-proxy-020", "host", require_native_workspace_store.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", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["host/features/peer-host.ts"]), route("peer-host.aggregate", "peer-host-aggregate-020", "host", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["host/features/peer-host.ts"]), route("peer-host.aggregated-transport", "peer-host-aggregated-transport-020", "host", require_native_workspace_store.DSH_COMPATIBILITY, "supported", ["host/modules/peer-host/aggregated-host-transport.ts"]), route("peer-host.client-preboot-transport", "peer-host-client-preboot-transport-020", "client", require_native_workspace_store.DSH_COMPATIBILITY, "supported", [
76691
77260
  "bootstrap/index.ts",
76692
77261
  "host/index-injection.ts",
76693
77262
  "client/features/peer-host.ts"
@@ -76711,7 +77280,7 @@ button[${ACCOUNT_ATTRIBUTE}]:focus-visible{outline:2px solid ${require_theme.dsh
76711
77280
  };
76712
77281
  }
76713
77282
  //#endregion
76714
- //#region node_modules/.pnpm/@deepseek-ai+dsh-util-workspace-path@0.2.1-alpha.3_@deepseek-ai+cordis@4.0.5-alpha.2/node_modules/@deepseek-ai/dsh-util-workspace-path/lib/index.js
77283
+ //#region node_modules/.pnpm/@deepseek-ai+dsh-util-workspace-path@0.2.1-rc.2_@deepseek-ai+cordis@4.0.5/node_modules/@deepseek-ai/dsh-util-workspace-path/lib/index.js
76715
77284
  /**
76716
77285
  * The `dsh-resource://file/…` address grammar: how a file is named across the
76717
77286
  * Sidebar and the resource model, built and parsed without touching a
@@ -82707,5 +83276,5 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
82707
83276
  });
82708
83277
 
82709
83278
  })();
82710
- // codingns-client-revision: d8d89415f203949d6b5364ae54ea8e25cbe03bb2149cbf1f7b5d436d466d8101
83279
+ // codingns-client-revision: 75471ae1b8c6158ff3a696d9b8d4440efd9c6f8212760d2e2bdcf208a469d952
82711
83280
  //# sourceMappingURL=bundle.js.map