@jingyi0605/codingns4dsh 0.2.0-beta.2 → 0.2.0-rc.2

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 (420) hide show
  1. package/README.en.md +4 -4
  2. package/README.md +7 -5
  3. package/assets/provider-icons/minimax-code.svg +4 -0
  4. package/assets/provider-icons/zcode.svg +14 -0
  5. package/data/build/dist/client/account-bar.d.ts +2 -1
  6. package/data/build/dist/client/account-bar.d.ts.map +1 -1
  7. package/data/build/dist/client/account-bar.js +21 -16
  8. package/data/build/dist/client/account-bar.js.map +1 -1
  9. package/data/build/dist/client/bundle.js +4172 -1540
  10. package/data/build/dist/client/bundle.js.map +1 -1
  11. package/data/build/dist/client/cli-slots.d.ts.map +1 -1
  12. package/data/build/dist/client/cli-slots.js +20 -12
  13. package/data/build/dist/client/cli-slots.js.map +1 -1
  14. package/data/build/dist/client/debug/ui.d.ts +2 -1
  15. package/data/build/dist/client/debug/ui.d.ts.map +1 -1
  16. package/data/build/dist/client/debug/ui.js +39 -33
  17. package/data/build/dist/client/debug/ui.js.map +1 -1
  18. package/data/build/dist/client/delegate-command.d.ts +16 -0
  19. package/data/build/dist/client/delegate-command.d.ts.map +1 -0
  20. package/data/build/dist/client/delegate-command.js +138 -0
  21. package/data/build/dist/client/delegate-command.js.map +1 -0
  22. package/data/build/dist/client/delegate-plan.d.ts +31 -0
  23. package/data/build/dist/client/delegate-plan.d.ts.map +1 -0
  24. package/data/build/dist/client/delegate-plan.js +59 -0
  25. package/data/build/dist/client/delegate-plan.js.map +1 -0
  26. package/data/build/dist/client/delegate-ui-dom.d.ts +40 -0
  27. package/data/build/dist/client/delegate-ui-dom.d.ts.map +1 -0
  28. package/data/build/dist/client/delegate-ui-dom.js +363 -0
  29. package/data/build/dist/client/delegate-ui-dom.js.map +1 -0
  30. package/data/build/dist/client/external-tool-stream.d.ts.map +1 -1
  31. package/data/build/dist/client/external-tool-stream.js +44 -36
  32. package/data/build/dist/client/external-tool-stream.js.map +1 -1
  33. package/data/build/dist/client/features/cli-adapters.d.ts +7 -2
  34. package/data/build/dist/client/features/cli-adapters.d.ts.map +1 -1
  35. package/data/build/dist/client/features/cli-adapters.js +52 -103
  36. package/data/build/dist/client/features/cli-adapters.js.map +1 -1
  37. package/data/build/dist/client/features/debug.d.ts.map +1 -1
  38. package/data/build/dist/client/features/debug.js +5 -3
  39. package/data/build/dist/client/features/debug.js.map +1 -1
  40. package/data/build/dist/client/features/file-management.d.ts.map +1 -1
  41. package/data/build/dist/client/features/file-management.js +7 -4
  42. package/data/build/dist/client/features/file-management.js.map +1 -1
  43. package/data/build/dist/client/features/lan-access-panel.js +10 -10
  44. package/data/build/dist/client/features/lan-access-panel.js.map +1 -1
  45. package/data/build/dist/client/features/lan-access.d.ts.map +1 -1
  46. package/data/build/dist/client/features/lan-access.js +8 -3
  47. package/data/build/dist/client/features/lan-access.js.map +1 -1
  48. package/data/build/dist/client/features/login-protection-panel.d.ts.map +1 -1
  49. package/data/build/dist/client/features/login-protection-panel.js +9 -7
  50. package/data/build/dist/client/features/login-protection-panel.js.map +1 -1
  51. package/data/build/dist/client/features/login-protection.js +2 -2
  52. package/data/build/dist/client/features/login-protection.js.map +1 -1
  53. package/data/build/dist/client/features/mobile-access.d.ts.map +1 -1
  54. package/data/build/dist/client/features/mobile-access.js +6 -2
  55. package/data/build/dist/client/features/mobile-access.js.map +1 -1
  56. package/data/build/dist/client/features/peer-host.d.ts.map +1 -1
  57. package/data/build/dist/client/features/peer-host.js +115 -11
  58. package/data/build/dist/client/features/peer-host.js.map +1 -1
  59. package/data/build/dist/client/features/reverse-proxy.js +2 -2
  60. package/data/build/dist/client/features/reverse-proxy.js.map +1 -1
  61. package/data/build/dist/client/features/terminal-enhancement.js +2 -2
  62. package/data/build/dist/client/features/terminal-enhancement.js.map +1 -1
  63. package/data/build/dist/client/features/workspace-session-enhancement-panel.js +1 -1
  64. package/data/build/dist/client/features/workspace-session-enhancement-panel.js.map +1 -1
  65. package/data/build/dist/client/features/workspace-session-enhancement.d.ts.map +1 -1
  66. package/data/build/dist/client/features/workspace-session-enhancement.js +8 -3
  67. package/data/build/dist/client/features/workspace-session-enhancement.js.map +1 -1
  68. package/data/build/dist/client/file-management-dom.d.ts +3 -0
  69. package/data/build/dist/client/file-management-dom.d.ts.map +1 -1
  70. package/data/build/dist/client/file-management-dom.js +41 -30
  71. package/data/build/dist/client/file-management-dom.js.map +1 -1
  72. package/data/build/dist/client/git-management.d.ts +2 -0
  73. package/data/build/dist/client/git-management.d.ts.map +1 -1
  74. package/data/build/dist/client/git-management.js +82 -74
  75. package/data/build/dist/client/git-management.js.map +1 -1
  76. package/data/build/dist/client/git-workspace-events.d.ts +7 -0
  77. package/data/build/dist/client/git-workspace-events.d.ts.map +1 -0
  78. package/data/build/dist/client/git-workspace-events.js +32 -0
  79. package/data/build/dist/client/git-workspace-events.js.map +1 -0
  80. package/data/build/dist/client/index.d.ts +2 -0
  81. package/data/build/dist/client/index.d.ts.map +1 -1
  82. package/data/build/dist/client/index.js +6 -5
  83. package/data/build/dist/client/index.js.map +1 -1
  84. package/data/build/dist/client/locale.d.ts +7 -0
  85. package/data/build/dist/client/locale.d.ts.map +1 -1
  86. package/data/build/dist/client/locale.js +80 -36
  87. package/data/build/dist/client/locale.js.map +1 -1
  88. package/data/build/dist/client/locales/debug.d.ts +9 -0
  89. package/data/build/dist/client/locales/debug.d.ts.map +1 -0
  90. package/data/build/dist/client/locales/debug.js +163 -0
  91. package/data/build/dist/client/locales/debug.js.map +1 -0
  92. package/data/build/dist/client/locales/fileWorkspace.d.ts +9 -0
  93. package/data/build/dist/client/locales/fileWorkspace.d.ts.map +1 -0
  94. package/data/build/dist/client/locales/fileWorkspace.js +139 -0
  95. package/data/build/dist/client/locales/fileWorkspace.js.map +1 -0
  96. package/data/build/dist/client/locales/git.d.ts +9 -0
  97. package/data/build/dist/client/locales/git.d.ts.map +1 -0
  98. package/data/build/dist/client/locales/git.js +223 -0
  99. package/data/build/dist/client/locales/git.js.map +1 -0
  100. package/data/build/dist/client/locales/panels.d.ts +9 -0
  101. package/data/build/dist/client/locales/panels.d.ts.map +1 -0
  102. package/data/build/dist/client/locales/panels.js +33 -0
  103. package/data/build/dist/client/locales/panels.js.map +1 -0
  104. package/data/build/dist/client/locales/peerHost.d.ts +9 -0
  105. package/data/build/dist/client/locales/peerHost.d.ts.map +1 -0
  106. package/data/build/dist/client/locales/peerHost.js +153 -0
  107. package/data/build/dist/client/locales/peerHost.js.map +1 -0
  108. package/data/build/dist/client/locales/peerHostWorkspace.d.ts +9 -0
  109. package/data/build/dist/client/locales/peerHostWorkspace.d.ts.map +1 -0
  110. package/data/build/dist/client/locales/peerHostWorkspace.js +69 -0
  111. package/data/build/dist/client/locales/peerHostWorkspace.js.map +1 -0
  112. package/data/build/dist/client/locales/terminalAuth.d.ts +9 -0
  113. package/data/build/dist/client/locales/terminalAuth.d.ts.map +1 -0
  114. package/data/build/dist/client/locales/terminalAuth.js +67 -0
  115. package/data/build/dist/client/locales/terminalAuth.js.map +1 -0
  116. package/data/build/dist/client/locales/usage.d.ts +9 -0
  117. package/data/build/dist/client/locales/usage.d.ts.map +1 -0
  118. package/data/build/dist/client/locales/usage.js +195 -0
  119. package/data/build/dist/client/locales/usage.js.map +1 -0
  120. package/data/build/dist/client/mobile-session-interaction.d.ts +44 -0
  121. package/data/build/dist/client/mobile-session-interaction.d.ts.map +1 -0
  122. package/data/build/dist/client/mobile-session-interaction.js +291 -0
  123. package/data/build/dist/client/mobile-session-interaction.js.map +1 -0
  124. package/data/build/dist/client/mobile-sidebar-rail-dom.d.ts +10 -2
  125. package/data/build/dist/client/mobile-sidebar-rail-dom.d.ts.map +1 -1
  126. package/data/build/dist/client/mobile-sidebar-rail-dom.js +14 -6
  127. package/data/build/dist/client/mobile-sidebar-rail-dom.js.map +1 -1
  128. package/data/build/dist/client/peer-host-connection-button.d.ts +14 -1
  129. package/data/build/dist/client/peer-host-connection-button.d.ts.map +1 -1
  130. package/data/build/dist/client/peer-host-connection-button.js +12 -4
  131. package/data/build/dist/client/peer-host-connection-button.js.map +1 -1
  132. package/data/build/dist/client/peer-host-management-panel.d.ts +3 -0
  133. package/data/build/dist/client/peer-host-management-panel.d.ts.map +1 -1
  134. package/data/build/dist/client/peer-host-management-panel.js +83 -79
  135. package/data/build/dist/client/peer-host-management-panel.js.map +1 -1
  136. package/data/build/dist/client/peer-host-native-projection.d.ts +1 -0
  137. package/data/build/dist/client/peer-host-native-projection.d.ts.map +1 -1
  138. package/data/build/dist/client/peer-host-native-projection.js +5 -0
  139. package/data/build/dist/client/peer-host-native-projection.js.map +1 -1
  140. package/data/build/dist/client/peer-host-scoped-client.js +5 -5
  141. package/data/build/dist/client/peer-host-scoped-client.js.map +1 -1
  142. package/data/build/dist/client/peer-host-workspace-tab.d.ts +8 -0
  143. package/data/build/dist/client/peer-host-workspace-tab.d.ts.map +1 -1
  144. package/data/build/dist/client/peer-host-workspace-tab.js +48 -28
  145. package/data/build/dist/client/peer-host-workspace-tab.js.map +1 -1
  146. package/data/build/dist/client/provider-icon-assets.js +4 -0
  147. package/data/build/dist/client/provider-icon-assets.js.map +1 -1
  148. package/data/build/dist/client/provider-icons.d.ts +8 -2
  149. package/data/build/dist/client/provider-icons.d.ts.map +1 -1
  150. package/data/build/dist/client/provider-icons.js +13 -4
  151. package/data/build/dist/client/provider-icons.js.map +1 -1
  152. package/data/build/dist/client/pwa-install-prompt.d.ts +4 -1
  153. package/data/build/dist/client/pwa-install-prompt.d.ts.map +1 -1
  154. package/data/build/dist/client/pwa-install-prompt.js +8 -7
  155. package/data/build/dist/client/pwa-install-prompt.js.map +1 -1
  156. package/data/build/dist/client/quick-phrase-layout.d.ts +11 -0
  157. package/data/build/dist/client/quick-phrase-layout.d.ts.map +1 -1
  158. package/data/build/dist/client/quick-phrase-layout.js +20 -0
  159. package/data/build/dist/client/quick-phrase-layout.js.map +1 -1
  160. package/data/build/dist/client/quick-phrase-slot.d.ts.map +1 -1
  161. package/data/build/dist/client/quick-phrase-slot.js +20 -8
  162. package/data/build/dist/client/quick-phrase-slot.js.map +1 -1
  163. package/data/build/dist/client/session-changed-files-view.d.ts +8 -1
  164. package/data/build/dist/client/session-changed-files-view.d.ts.map +1 -1
  165. package/data/build/dist/client/session-changed-files-view.js +71 -28
  166. package/data/build/dist/client/session-changed-files-view.js.map +1 -1
  167. package/data/build/dist/client/settings-anchor.d.ts +9 -3
  168. package/data/build/dist/client/settings-anchor.d.ts.map +1 -1
  169. package/data/build/dist/client/settings-anchor.js +8 -2
  170. package/data/build/dist/client/settings-anchor.js.map +1 -1
  171. package/data/build/dist/client/settings-section.js +3 -3
  172. package/data/build/dist/client/settings-section.js.map +1 -1
  173. package/data/build/dist/client/subscription-slot.d.ts +4 -1
  174. package/data/build/dist/client/subscription-slot.d.ts.map +1 -1
  175. package/data/build/dist/client/subscription-slot.js +327 -51
  176. package/data/build/dist/client/subscription-slot.js.map +1 -1
  177. package/data/build/dist/client/terminal/model.d.ts +13 -2
  178. package/data/build/dist/client/terminal/model.d.ts.map +1 -1
  179. package/data/build/dist/client/terminal/model.js +27 -7
  180. package/data/build/dist/client/terminal/model.js.map +1 -1
  181. package/data/build/dist/client/terminal/ui.d.ts.map +1 -1
  182. package/data/build/dist/client/terminal/ui.js +3 -1
  183. package/data/build/dist/client/terminal/ui.js.map +1 -1
  184. package/data/build/dist/client/terminal/xterm-view.d.ts +4 -1
  185. package/data/build/dist/client/terminal/xterm-view.d.ts.map +1 -1
  186. package/data/build/dist/client/terminal/xterm-view.js +19 -17
  187. package/data/build/dist/client/terminal/xterm-view.js.map +1 -1
  188. package/data/build/dist/client/workspace-session-archive-dom.d.ts +3 -0
  189. package/data/build/dist/client/workspace-session-archive-dom.d.ts.map +1 -1
  190. package/data/build/dist/client/workspace-session-archive-dom.js +131 -45
  191. package/data/build/dist/client/workspace-session-archive-dom.js.map +1 -1
  192. package/data/build/dist/client/workspace-session-logo-dom.d.ts +3 -0
  193. package/data/build/dist/client/workspace-session-logo-dom.d.ts.map +1 -1
  194. package/data/build/dist/client/workspace-session-logo-dom.js +3 -1
  195. package/data/build/dist/client/workspace-session-logo-dom.js.map +1 -1
  196. package/data/build/dist/client/workspace-session-visibility-dom.d.ts +3 -0
  197. package/data/build/dist/client/workspace-session-visibility-dom.d.ts.map +1 -1
  198. package/data/build/dist/client/workspace-session-visibility-dom.js +46 -17
  199. package/data/build/dist/client/workspace-session-visibility-dom.js.map +1 -1
  200. package/data/build/dist/dsh-capabilities/client/primitives-adapter.d.ts +10 -0
  201. package/data/build/dist/dsh-capabilities/client/primitives-adapter.d.ts.map +1 -1
  202. package/data/build/dist/dsh-capabilities/client/primitives-adapter.js +20 -0
  203. package/data/build/dist/dsh-capabilities/client/primitives-adapter.js.map +1 -1
  204. package/data/build/dist/host/browser-text.d.ts +30 -0
  205. package/data/build/dist/host/browser-text.d.ts.map +1 -0
  206. package/data/build/dist/host/browser-text.js +105 -0
  207. package/data/build/dist/host/browser-text.js.map +1 -0
  208. package/data/build/dist/host/cli-adapters/claude-driver.d.ts +28 -2
  209. package/data/build/dist/host/cli-adapters/claude-driver.d.ts.map +1 -1
  210. package/data/build/dist/host/cli-adapters/claude-driver.js +73 -3
  211. package/data/build/dist/host/cli-adapters/claude-driver.js.map +1 -1
  212. package/data/build/dist/host/cli-adapters/claude-model-options.d.ts.map +1 -1
  213. package/data/build/dist/host/cli-adapters/claude-model-options.js +22 -9
  214. package/data/build/dist/host/cli-adapters/claude-model-options.js.map +1 -1
  215. package/data/build/dist/host/cli-adapters/codex-driver.d.ts +10 -0
  216. package/data/build/dist/host/cli-adapters/codex-driver.d.ts.map +1 -1
  217. package/data/build/dist/host/cli-adapters/codex-driver.js +105 -5
  218. package/data/build/dist/host/cli-adapters/codex-driver.js.map +1 -1
  219. package/data/build/dist/host/cli-adapters/command-code-driver.d.ts.map +1 -1
  220. package/data/build/dist/host/cli-adapters/command-code-driver.js +49 -7
  221. package/data/build/dist/host/cli-adapters/command-code-driver.js.map +1 -1
  222. package/data/build/dist/host/cli-adapters/delegate-dispatch.d.ts +47 -0
  223. package/data/build/dist/host/cli-adapters/delegate-dispatch.d.ts.map +1 -0
  224. package/data/build/dist/host/cli-adapters/delegate-dispatch.js +158 -0
  225. package/data/build/dist/host/cli-adapters/delegate-dispatch.js.map +1 -0
  226. package/data/build/dist/host/cli-adapters/desktop-app-runtime.d.ts +32 -0
  227. package/data/build/dist/host/cli-adapters/desktop-app-runtime.d.ts.map +1 -0
  228. package/data/build/dist/host/cli-adapters/desktop-app-runtime.js +121 -0
  229. package/data/build/dist/host/cli-adapters/desktop-app-runtime.js.map +1 -0
  230. package/data/build/dist/host/cli-adapters/dsh-message-projector.d.ts.map +1 -1
  231. package/data/build/dist/host/cli-adapters/dsh-message-projector.js +5 -4
  232. package/data/build/dist/host/cli-adapters/dsh-message-projector.js.map +1 -1
  233. package/data/build/dist/host/cli-adapters/dsh-virtual-providers.d.ts +16 -0
  234. package/data/build/dist/host/cli-adapters/dsh-virtual-providers.d.ts.map +1 -0
  235. package/data/build/dist/host/cli-adapters/dsh-virtual-providers.js +73 -0
  236. package/data/build/dist/host/cli-adapters/dsh-virtual-providers.js.map +1 -0
  237. package/data/build/dist/host/cli-adapters/feature.d.ts.map +1 -1
  238. package/data/build/dist/host/cli-adapters/feature.js +196 -14
  239. package/data/build/dist/host/cli-adapters/feature.js.map +1 -1
  240. package/data/build/dist/host/cli-adapters/gemini-driver.d.ts.map +1 -1
  241. package/data/build/dist/host/cli-adapters/gemini-driver.js +21 -5
  242. package/data/build/dist/host/cli-adapters/gemini-driver.js.map +1 -1
  243. package/data/build/dist/host/cli-adapters/grok-driver.d.ts.map +1 -1
  244. package/data/build/dist/host/cli-adapters/grok-driver.js +24 -7
  245. package/data/build/dist/host/cli-adapters/grok-driver.js.map +1 -1
  246. package/data/build/dist/host/cli-adapters/json-rpc-process.d.ts +22 -6
  247. package/data/build/dist/host/cli-adapters/json-rpc-process.d.ts.map +1 -1
  248. package/data/build/dist/host/cli-adapters/json-rpc-process.js +118 -21
  249. package/data/build/dist/host/cli-adapters/json-rpc-process.js.map +1 -1
  250. package/data/build/dist/host/cli-adapters/kimi-driver.d.ts.map +1 -1
  251. package/data/build/dist/host/cli-adapters/kimi-driver.js +25 -4
  252. package/data/build/dist/host/cli-adapters/kimi-driver.js.map +1 -1
  253. package/data/build/dist/host/cli-adapters/legacy-session-adapter.d.ts +11 -2
  254. package/data/build/dist/host/cli-adapters/legacy-session-adapter.d.ts.map +1 -1
  255. package/data/build/dist/host/cli-adapters/legacy-session-adapter.js +15 -6
  256. package/data/build/dist/host/cli-adapters/legacy-session-adapter.js.map +1 -1
  257. package/data/build/dist/host/cli-adapters/mcode-catalog.d.ts +23 -0
  258. package/data/build/dist/host/cli-adapters/mcode-catalog.d.ts.map +1 -0
  259. package/data/build/dist/host/cli-adapters/mcode-catalog.js +120 -0
  260. package/data/build/dist/host/cli-adapters/mcode-catalog.js.map +1 -0
  261. package/data/build/dist/host/cli-adapters/mcode-driver.d.ts +56 -0
  262. package/data/build/dist/host/cli-adapters/mcode-driver.d.ts.map +1 -0
  263. package/data/build/dist/host/cli-adapters/mcode-driver.js +544 -0
  264. package/data/build/dist/host/cli-adapters/mcode-driver.js.map +1 -0
  265. package/data/build/dist/host/cli-adapters/model-catalog.d.ts +30 -5
  266. package/data/build/dist/host/cli-adapters/model-catalog.d.ts.map +1 -1
  267. package/data/build/dist/host/cli-adapters/model-catalog.js +83 -8
  268. package/data/build/dist/host/cli-adapters/model-catalog.js.map +1 -1
  269. package/data/build/dist/host/cli-adapters/native-subagent-dispatch.d.ts +51 -0
  270. package/data/build/dist/host/cli-adapters/native-subagent-dispatch.d.ts.map +1 -0
  271. package/data/build/dist/host/cli-adapters/native-subagent-dispatch.js +193 -0
  272. package/data/build/dist/host/cli-adapters/native-subagent-dispatch.js.map +1 -0
  273. package/data/build/dist/host/cli-adapters/native-subagent-holder.d.ts +4 -0
  274. package/data/build/dist/host/cli-adapters/native-subagent-holder.d.ts.map +1 -0
  275. package/data/build/dist/host/cli-adapters/native-subagent-holder.js +4 -0
  276. package/data/build/dist/host/cli-adapters/native-subagent-holder.js.map +1 -0
  277. package/data/build/dist/host/cli-adapters/native-team-proxy.js +18 -15
  278. package/data/build/dist/host/cli-adapters/native-team-proxy.js.map +1 -1
  279. package/data/build/dist/host/cli-adapters/native-team-subagent.d.ts +45 -0
  280. package/data/build/dist/host/cli-adapters/native-team-subagent.d.ts.map +1 -0
  281. package/data/build/dist/host/cli-adapters/native-team-subagent.js +107 -0
  282. package/data/build/dist/host/cli-adapters/native-team-subagent.js.map +1 -0
  283. package/data/build/dist/host/cli-adapters/opencode-driver.js +13 -3
  284. package/data/build/dist/host/cli-adapters/opencode-driver.js.map +1 -1
  285. package/data/build/dist/host/cli-adapters/pi-driver.js +24 -7
  286. package/data/build/dist/host/cli-adapters/pi-driver.js.map +1 -1
  287. package/data/build/dist/host/cli-adapters/provider-subscription.d.ts +8 -1
  288. package/data/build/dist/host/cli-adapters/provider-subscription.d.ts.map +1 -1
  289. package/data/build/dist/host/cli-adapters/provider-subscription.js +98 -2
  290. package/data/build/dist/host/cli-adapters/provider-subscription.js.map +1 -1
  291. package/data/build/dist/host/cli-adapters/registry-holder.d.ts +4 -0
  292. package/data/build/dist/host/cli-adapters/registry-holder.d.ts.map +1 -0
  293. package/data/build/dist/host/cli-adapters/registry-holder.js +9 -0
  294. package/data/build/dist/host/cli-adapters/registry-holder.js.map +1 -0
  295. package/data/build/dist/host/cli-adapters/registry.d.ts +13 -0
  296. package/data/build/dist/host/cli-adapters/registry.d.ts.map +1 -1
  297. package/data/build/dist/host/cli-adapters/registry.js +37 -0
  298. package/data/build/dist/host/cli-adapters/registry.js.map +1 -1
  299. package/data/build/dist/host/cli-adapters/session-store.d.ts +6 -1
  300. package/data/build/dist/host/cli-adapters/session-store.d.ts.map +1 -1
  301. package/data/build/dist/host/cli-adapters/session-store.js +42 -4
  302. package/data/build/dist/host/cli-adapters/session-store.js.map +1 -1
  303. package/data/build/dist/host/cli-adapters/standard-stream-driver.d.ts +2 -0
  304. package/data/build/dist/host/cli-adapters/standard-stream-driver.d.ts.map +1 -1
  305. package/data/build/dist/host/cli-adapters/standard-stream-driver.js +30 -4
  306. package/data/build/dist/host/cli-adapters/standard-stream-driver.js.map +1 -1
  307. package/data/build/dist/host/cli-adapters/subagent-tool.d.ts +5 -0
  308. package/data/build/dist/host/cli-adapters/subagent-tool.d.ts.map +1 -0
  309. package/data/build/dist/host/cli-adapters/subagent-tool.js +66 -0
  310. package/data/build/dist/host/cli-adapters/subagent-tool.js.map +1 -0
  311. package/data/build/dist/host/cli-adapters/zcode-driver.d.ts +57 -0
  312. package/data/build/dist/host/cli-adapters/zcode-driver.d.ts.map +1 -0
  313. package/data/build/dist/host/cli-adapters/zcode-driver.js +843 -0
  314. package/data/build/dist/host/cli-adapters/zcode-driver.js.map +1 -0
  315. package/data/build/dist/host/cli-adapters/zcode-subscription.d.ts +28 -0
  316. package/data/build/dist/host/cli-adapters/zcode-subscription.d.ts.map +1 -0
  317. package/data/build/dist/host/cli-adapters/zcode-subscription.js +212 -0
  318. package/data/build/dist/host/cli-adapters/zcode-subscription.js.map +1 -0
  319. package/data/build/dist/host/cli-bridge/bridge-holder.d.ts +27 -0
  320. package/data/build/dist/host/cli-bridge/bridge-holder.d.ts.map +1 -0
  321. package/data/build/dist/host/cli-bridge/bridge-holder.js +51 -0
  322. package/data/build/dist/host/cli-bridge/bridge-holder.js.map +1 -0
  323. package/data/build/dist/host/cli-bridge/bridge-server.d.ts +34 -0
  324. package/data/build/dist/host/cli-bridge/bridge-server.d.ts.map +1 -0
  325. package/data/build/dist/host/cli-bridge/bridge-server.js +135 -0
  326. package/data/build/dist/host/cli-bridge/bridge-server.js.map +1 -0
  327. package/data/build/dist/host/cli-bridge/command-code-mod.d.ts +25 -0
  328. package/data/build/dist/host/cli-bridge/command-code-mod.d.ts.map +1 -0
  329. package/data/build/dist/host/cli-bridge/command-code-mod.js +60 -0
  330. package/data/build/dist/host/cli-bridge/command-code-mod.js.map +1 -0
  331. package/data/build/dist/host/cli-bridge/dispatch.d.ts +19 -0
  332. package/data/build/dist/host/cli-bridge/dispatch.d.ts.map +1 -0
  333. package/data/build/dist/host/cli-bridge/dispatch.js +90 -0
  334. package/data/build/dist/host/cli-bridge/dispatch.js.map +1 -0
  335. package/data/build/dist/host/cli-bridge/injections.d.ts +28 -0
  336. package/data/build/dist/host/cli-bridge/injections.d.ts.map +1 -0
  337. package/data/build/dist/host/cli-bridge/injections.js +131 -0
  338. package/data/build/dist/host/cli-bridge/injections.js.map +1 -0
  339. package/data/build/dist/host/cli-bridge/mcp-stdio-entry.d.ts +8 -0
  340. package/data/build/dist/host/cli-bridge/mcp-stdio-entry.d.ts.map +1 -0
  341. package/data/build/dist/host/cli-bridge/mcp-stdio-entry.js +151 -0
  342. package/data/build/dist/host/cli-bridge/mcp-stdio-entry.js.map +1 -0
  343. package/data/build/dist/host/features/lan-access-dsh.d.ts.map +1 -1
  344. package/data/build/dist/host/features/lan-access-dsh.js +6 -2
  345. package/data/build/dist/host/features/lan-access-dsh.js.map +1 -1
  346. package/data/build/dist/host/features/peer-host.d.ts.map +1 -1
  347. package/data/build/dist/host/features/peer-host.js +2 -1
  348. package/data/build/dist/host/features/peer-host.js.map +1 -1
  349. package/data/build/dist/host/index.d.ts +4 -0
  350. package/data/build/dist/host/index.d.ts.map +1 -1
  351. package/data/build/dist/host/index.js +36 -0
  352. package/data/build/dist/host/index.js.map +1 -1
  353. package/data/build/dist/host/lan-access-dsh.d.ts +7 -1
  354. package/data/build/dist/host/lan-access-dsh.d.ts.map +1 -1
  355. package/data/build/dist/host/lan-access-dsh.js +95 -19
  356. package/data/build/dist/host/lan-access-dsh.js.map +1 -1
  357. package/data/build/dist/host/login-attempt-guard.d.ts +55 -0
  358. package/data/build/dist/host/login-attempt-guard.d.ts.map +1 -0
  359. package/data/build/dist/host/login-attempt-guard.js +201 -0
  360. package/data/build/dist/host/login-attempt-guard.js.map +1 -0
  361. package/data/build/dist/host/modules/peer-host/host-api-proxy-service.d.ts +3 -0
  362. package/data/build/dist/host/modules/peer-host/host-api-proxy-service.d.ts.map +1 -1
  363. package/data/build/dist/host/modules/peer-host/host-api-proxy-service.js +2 -0
  364. package/data/build/dist/host/modules/peer-host/host-api-proxy-service.js.map +1 -1
  365. package/data/build/dist/host/modules/peer-host/peer-host-aggregate-service.d.ts +1 -0
  366. package/data/build/dist/host/modules/peer-host/peer-host-aggregate-service.d.ts.map +1 -1
  367. package/data/build/dist/host/modules/peer-host/peer-host-aggregate-service.js +1 -0
  368. package/data/build/dist/host/modules/peer-host/peer-host-aggregate-service.js.map +1 -1
  369. package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.d.ts +1 -1
  370. package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.d.ts.map +1 -1
  371. package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.js +3 -0
  372. package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.js.map +1 -1
  373. package/data/build/dist/host/modules/peer-host/peer-host-native-transport.d.ts +8 -0
  374. package/data/build/dist/host/modules/peer-host/peer-host-native-transport.d.ts.map +1 -1
  375. package/data/build/dist/host/modules/peer-host/peer-host-native-transport.js +9 -0
  376. package/data/build/dist/host/modules/peer-host/peer-host-native-transport.js.map +1 -1
  377. package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.d.ts +7 -0
  378. package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.d.ts.map +1 -1
  379. package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.js +31 -3
  380. package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.js.map +1 -1
  381. package/data/build/dist/host/modules/pwa/pwa-assets.d.ts +6 -4
  382. package/data/build/dist/host/modules/pwa/pwa-assets.d.ts.map +1 -1
  383. package/data/build/dist/host/modules/pwa/pwa-assets.js +11 -9
  384. package/data/build/dist/host/modules/pwa/pwa-assets.js.map +1 -1
  385. package/data/build/dist/host/modules/pwa/pwa-session-notifications.d.ts +3 -0
  386. package/data/build/dist/host/modules/pwa/pwa-session-notifications.d.ts.map +1 -1
  387. package/data/build/dist/host/modules/pwa/pwa-session-notifications.js +6 -4
  388. package/data/build/dist/host/modules/pwa/pwa-session-notifications.js.map +1 -1
  389. package/data/build/dist/host/native-session-bridge.d.ts.map +1 -1
  390. package/data/build/dist/host/native-session-bridge.js +70 -52
  391. package/data/build/dist/host/native-session-bridge.js.map +1 -1
  392. package/data/build/dist/host/rpc.js +4 -1
  393. package/data/build/dist/host/rpc.js.map +1 -1
  394. package/data/build/dist/host/settings.d.ts.map +1 -1
  395. package/data/build/dist/host/settings.js +3 -0
  396. package/data/build/dist/host/settings.js.map +1 -1
  397. package/data/build/dist/shared/contracts/cli-adapter.d.ts +5 -0
  398. package/data/build/dist/shared/contracts/cli-adapter.d.ts.map +1 -1
  399. package/data/build/dist/shared/contracts/config.d.ts +10 -0
  400. package/data/build/dist/shared/contracts/config.d.ts.map +1 -1
  401. package/data/build/dist/shared/contracts/config.js +8 -0
  402. package/data/build/dist/shared/contracts/config.js.map +1 -1
  403. package/data/build/dist/shared/contracts/peer-host.d.ts +2 -0
  404. package/data/build/dist/shared/contracts/peer-host.d.ts.map +1 -1
  405. package/data/build/dist/shared/contracts/peer-host.js.map +1 -1
  406. package/data/build/dist/shared/contracts/subscription.d.ts +15 -0
  407. package/data/build/dist/shared/contracts/subscription.d.ts.map +1 -1
  408. package/data/build/dist/shared/contracts/subscription.js.map +1 -1
  409. package/data/build/dist/shared/contracts/version.d.ts +1 -1
  410. package/data/build/dist/shared/contracts/version.d.ts.map +1 -1
  411. package/data/build/dist/shared/contracts/version.js +1 -1
  412. package/data/build/dist/shared/contracts/version.js.map +1 -1
  413. package/data/build/dist/shared/index.d.ts +1 -1
  414. package/data/build/dist/shared/index.d.ts.map +1 -1
  415. package/data/build/dist/shared/index.js.map +1 -1
  416. package/package.json +3 -1
  417. package/profile/README.md +2 -2
  418. package/profile/package.json +2 -2
  419. package/profile/version.json +1 -1
  420. package/version.json +1 -1
@@ -0,0 +1,67 @@
1
+ /**
2
+ * terminalAuth 域词典片段。
3
+ *
4
+ * 只放该域新增的键;合并与命名空间注册由 ../locale.ts 统一完成。
5
+ * 规范见 docs/开发规范/20260930-前端文案国际化规范.md。
6
+ */
7
+ export const en = {
8
+ 'terminalView.errorDetail': 'Terminal error: {message}',
9
+ 'terminalView.readOnly': 'This page is currently read-only.',
10
+ 'terminalView.reconnect': 'Reconnect',
11
+ 'terminalView.readingEnvironment': 'Reading the terminal environment…',
12
+ 'terminalView.starting': 'Starting…',
13
+ 'terminalView.connecting': 'Connecting…',
14
+ 'terminalView.disconnected': 'Connection lost.',
15
+ 'terminalView.exited': 'Process exited ({exitCode})',
16
+ 'terminalView.unavailable': 'Unavailable',
17
+ 'terminalView.closed': 'The terminal is closed.',
18
+ 'loginProtection.saved': 'Login protection settings saved',
19
+ 'loginProtection.savedRelaySession': 'Settings saved. Relay access requires entering the password again to establish a session for this tab.',
20
+ 'loginProtection.panelHint': 'Add local account verification for LAN and relay access. Loopback 127.0.0.1 / ::1 is never protected. The password is verified only on the Host and never enters browser settings or the URL; while the page stays open, the session is renewed automatically as it nears expiry.',
21
+ 'loginProtection.enable': 'Enable login protection',
22
+ 'loginProtection.username': 'Local username',
23
+ 'loginProtection.newPassword': 'New password (leave blank to keep the current one)',
24
+ 'loginProtection.password': 'Password (at least 8 characters)',
25
+ 'loginProtection.timeoutSeconds': 'Session timeout (seconds)',
26
+ 'loginProtection.scopes': 'Applies to',
27
+ 'loginProtection.scopeLan': 'LAN access',
28
+ 'loginProtection.scopeLanHint': 'LAN interface entry',
29
+ 'loginProtection.scopeRelay': 'Relay access',
30
+ 'loginProtection.scopeRelayHint': 'Codingns4DSH relay',
31
+ 'loginProtection.scopeOption': '{label} ({hint})',
32
+ 'loginProtection.saving': 'Saving…',
33
+ 'loginProtection.save': 'Save login protection',
34
+ 'loginProtection.errorTimeoutRange': 'The session timeout must be between 60 and 604800 seconds',
35
+ 'loginProtection.errorScopesRequired': 'Select at least one scope',
36
+ };
37
+ export const zh = {
38
+ 'terminalView.errorDetail': '终端错误:{message}',
39
+ 'terminalView.readOnly': '此页面当前只读。',
40
+ 'terminalView.reconnect': '重新连接',
41
+ 'terminalView.readingEnvironment': '正在读取终端环境…',
42
+ 'terminalView.starting': '正在启动…',
43
+ 'terminalView.connecting': '正在连接…',
44
+ 'terminalView.disconnected': '连接已断开。',
45
+ 'terminalView.exited': '进程已退出({exitCode})',
46
+ 'terminalView.unavailable': '不可用',
47
+ 'terminalView.closed': '终端已关闭。',
48
+ 'loginProtection.saved': '登录保护设置已保存',
49
+ 'loginProtection.savedRelaySession': '设置已保存;中继访问需要重新输入密码以建立当前标签页会话',
50
+ 'loginProtection.panelHint': '为局域网和中继访问统一增加本地账号验证。本机 127.0.0.1 / ::1 永远不受此保护。密码只在 Host 侧验证,不会进入浏览器设置或 URL;页面保持打开时,会在会话临近超时时自动续期。',
51
+ 'loginProtection.enable': '启用登录保护',
52
+ 'loginProtection.username': '本地用户名',
53
+ 'loginProtection.newPassword': '新密码(留空保持不变)',
54
+ 'loginProtection.password': '密码(至少 8 位)',
55
+ 'loginProtection.timeoutSeconds': '会话超时(秒)',
56
+ 'loginProtection.scopes': '应用范围',
57
+ 'loginProtection.scopeLan': '局域网访问',
58
+ 'loginProtection.scopeLanHint': '局域网网卡入口',
59
+ 'loginProtection.scopeRelay': '中继访问',
60
+ 'loginProtection.scopeRelayHint': 'Codingns4DSH 中继',
61
+ 'loginProtection.scopeOption': '{label}({hint})',
62
+ 'loginProtection.saving': '保存中…',
63
+ 'loginProtection.save': '保存登录保护',
64
+ 'loginProtection.errorTimeoutRange': '会话超时时间必须是 60 到 604800 秒',
65
+ 'loginProtection.errorScopesRequired': '至少选择一个应用范围',
66
+ };
67
+ //# sourceMappingURL=terminalAuth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminalAuth.js","sourceRoot":"","sources":["../../../../../src/client/locales/terminalAuth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,EAAE,GAA2B;IACxC,0BAA0B,EAAE,2BAA2B;IACvD,uBAAuB,EAAE,mCAAmC;IAC5D,wBAAwB,EAAE,WAAW;IACrC,iCAAiC,EAAE,mCAAmC;IACtE,uBAAuB,EAAE,WAAW;IACpC,yBAAyB,EAAE,aAAa;IACxC,2BAA2B,EAAE,kBAAkB;IAC/C,qBAAqB,EAAE,6BAA6B;IACpD,0BAA0B,EAAE,aAAa;IACzC,qBAAqB,EAAE,yBAAyB;IAChD,uBAAuB,EAAE,iCAAiC;IAC1D,mCAAmC,EAAE,wGAAwG;IAC7I,2BAA2B,EAAE,mRAAmR;IAChT,wBAAwB,EAAE,yBAAyB;IACnD,0BAA0B,EAAE,gBAAgB;IAC5C,6BAA6B,EAAE,oDAAoD;IACnF,0BAA0B,EAAE,kCAAkC;IAC9D,gCAAgC,EAAE,2BAA2B;IAC7D,wBAAwB,EAAE,YAAY;IACtC,0BAA0B,EAAE,YAAY;IACxC,8BAA8B,EAAE,qBAAqB;IACrD,4BAA4B,EAAE,cAAc;IAC5C,gCAAgC,EAAE,oBAAoB;IACtD,6BAA6B,EAAE,kBAAkB;IACjD,wBAAwB,EAAE,SAAS;IACnC,sBAAsB,EAAE,uBAAuB;IAC/C,mCAAmC,EAAE,2DAA2D;IAChG,qCAAqC,EAAE,2BAA2B;CACnE,CAAA;AAED,MAAM,CAAC,MAAM,EAAE,GAA2B;IACxC,0BAA0B,EAAE,gBAAgB;IAC5C,uBAAuB,EAAE,UAAU;IACnC,wBAAwB,EAAE,MAAM;IAChC,iCAAiC,EAAE,WAAW;IAC9C,uBAAuB,EAAE,OAAO;IAChC,yBAAyB,EAAE,OAAO;IAClC,2BAA2B,EAAE,QAAQ;IACrC,qBAAqB,EAAE,mBAAmB;IAC1C,0BAA0B,EAAE,KAAK;IACjC,qBAAqB,EAAE,QAAQ;IAC/B,uBAAuB,EAAE,WAAW;IACpC,mCAAmC,EAAE,8BAA8B;IACnE,2BAA2B,EAAE,oGAAoG;IACjI,wBAAwB,EAAE,QAAQ;IAClC,0BAA0B,EAAE,OAAO;IACnC,6BAA6B,EAAE,aAAa;IAC5C,0BAA0B,EAAE,YAAY;IACxC,gCAAgC,EAAE,SAAS;IAC3C,wBAAwB,EAAE,MAAM;IAChC,0BAA0B,EAAE,OAAO;IACnC,8BAA8B,EAAE,SAAS;IACzC,4BAA4B,EAAE,MAAM;IACpC,gCAAgC,EAAE,iBAAiB;IACnD,6BAA6B,EAAE,iBAAiB;IAChD,wBAAwB,EAAE,MAAM;IAChC,sBAAsB,EAAE,QAAQ;IAChC,mCAAmC,EAAE,yBAAyB;IAC9D,qCAAqC,EAAE,YAAY;CACpD,CAAA"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * usage 域词典片段。
3
+ *
4
+ * 只放该域新增的键;合并与命名空间注册由 ../locale.ts 统一完成。
5
+ * 规范见 docs/开发规范/20260930-前端文案国际化规范.md。
6
+ */
7
+ export declare const en: Record<string, string>;
8
+ export declare const zh: Record<string, string>;
9
+ //# sourceMappingURL=usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../../../../src/client/locales/usage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA6FrC,CAAA;AAED,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA6FrC,CAAA"}
@@ -0,0 +1,195 @@
1
+ /**
2
+ * usage 域词典片段。
3
+ *
4
+ * 只放该域新增的键;合并与命名空间注册由 ../locale.ts 统一完成。
5
+ * 规范见 docs/开发规范/20260930-前端文案国际化规范.md。
6
+ */
7
+ export const en = {
8
+ 'usage.slotLabel': 'Agent subscription balance',
9
+ 'usage.remainingLabel': '{provider} subscription balance {percent}%',
10
+ 'usage.upstreamBalanceLabel': '{provider} upstream balance {amount}',
11
+ 'usage.balanceLabel': '{provider} balance {amount}',
12
+ 'usage.providerBalanceLabel': '{provider} remaining {amount}',
13
+ 'usage.providerBalancePlanLabel': '{provider} · {plan} · {amount}',
14
+ 'usage.unavailable': 'Unavailable',
15
+ 'usage.available': 'Available',
16
+ 'usage.subscriptionRemaining': 'Subscription balance',
17
+ 'usage.todayCostShort': 'Today {amount}',
18
+ 'usage.accountBalance': 'Account balance',
19
+ 'usage.officialRemaining': 'Official balance',
20
+ 'usage.windowFiveHour': '5-hour quota',
21
+ 'usage.windowWeekly': 'Weekly quota',
22
+ 'usage.windowMonthly': 'Monthly quota',
23
+ 'usage.popoverSubscriptionUsage': '{provider} subscription usage',
24
+ 'usage.popoverSubscriptionTitle': '{provider} subscription',
25
+ 'usage.windowRemaining': '{label} remaining {percent}%',
26
+ 'usage.resetsIn': 'Resets in {time}',
27
+ 'usage.windowDays': '{count}-day quota',
28
+ 'usage.windowHours': '{count}-hour quota',
29
+ 'usage.windowMinutes': '{count}-minute quota',
30
+ 'usage.officialRemainingPopover': '{provider} official balance',
31
+ 'usage.usedOfTotal': 'Used {used} / {total}',
32
+ 'usage.usedShort': 'Used {amount}',
33
+ 'usage.expiresIn': 'Expires in {time}',
34
+ 'usage.expired': 'Expired',
35
+ 'usage.noMoreStats': 'No further statistics',
36
+ 'usage.providerAccountBalance': '{provider} account balance',
37
+ 'usage.granted': 'Granted {amount}',
38
+ 'usage.toppedUp': 'Topped up {amount}',
39
+ 'usage.deepseekApiNote': 'The official DeepSeek API currently exposes only an account balance endpoint; request, token, and cost details are unavailable.',
40
+ 'usage.upstreamUsageTitle': '{provider} upstream usage',
41
+ 'usage.addressMissing': 'Address not provided',
42
+ 'usage.statTodayRequests': 'Requests today',
43
+ 'usage.statTodayTokens': 'Tokens today',
44
+ 'usage.statTodayCost': 'Cost today',
45
+ 'usage.statTotalRequests': 'Total requests',
46
+ 'usage.statTotalTokens': 'Total tokens',
47
+ 'usage.statTotalCost': 'Total cost',
48
+ 'usage.statTodayCacheHitRate': 'Cache hit rate today',
49
+ 'usage.statTotalCacheHitRate': 'Overall cache hit rate',
50
+ 'usage.byModel': 'By model',
51
+ 'usage.noModelStats': 'No per-model statistics',
52
+ 'usage.colModel': 'Model',
53
+ 'usage.colRequests': 'Requests',
54
+ 'usage.colToken': 'Token',
55
+ 'usage.colCost': 'Cost',
56
+ 'usage.colCache': 'Cache',
57
+ 'usage.providerDeepseekOfficial': 'DeepSeek Official',
58
+ 'usage.providerUpstream': '{name} upstream',
59
+ 'usage.countdownDaysHours': '{days}d {hours}h',
60
+ 'usage.countdownHoursMinutes': '{hours}h {minutes}m',
61
+ 'usage.countdownHours': '{hours}h',
62
+ 'usage.countdownMinutes': '{minutes}m',
63
+ 'usage.creditBalanceLabel': 'Credits',
64
+ 'usage.creditUnlimited': 'Unlimited',
65
+ 'usage.resetCreditsLabel': 'Reset credits',
66
+ 'usage.resetCreditsCount': '{count}',
67
+ 'usage.resetCreditsExpiresAt': 'expires in {time}',
68
+ 'usage.resetCreditsExpired': 'expired',
69
+ 'usage.resetCreditsMore': '{count} more',
70
+ 'usage.resetButton': 'Reset subscription',
71
+ 'usage.resetTooltipReady': 'Consumes one reset credit to restore the current window',
72
+ 'usage.resetTooltipNone': 'No reset credits available',
73
+ 'usage.resetDialogTitle': 'Reset subscription usage?',
74
+ 'usage.resetDialogBody': 'This consumes one reset credit and immediately restores the current usage window, with {count} left. This cannot be undone. Continue?',
75
+ 'usage.resetDialogCancel': 'Cancel',
76
+ 'usage.resetDialogConfirm': 'Confirm reset',
77
+ 'usage.resetDialogPending': 'Resetting…',
78
+ 'usage.resetDialogClose': 'Close',
79
+ 'usage.resetOutcomeReset': 'The current usage window has been reset and reset credits refreshed.',
80
+ 'usage.resetOutcomeAlreadyRedeemed': 'This reset already took effect; usage has been refreshed.',
81
+ 'usage.resetOutcomeNothingToReset': 'No window has reached its limit; no reset credit was consumed.',
82
+ 'usage.resetOutcomeNoCredit': 'No reset credits available; nothing was reset.',
83
+ 'usage.resetFailed': 'Reset failed. Try again later.',
84
+ 'accountBar.userFallback': 'User',
85
+ 'accountBar.connectionManageTitle': 'Connection management · Manage other DSH Hosts',
86
+ 'accountBar.identityClickHint': '{identity} · Click to manage sign-in',
87
+ 'accountBar.connectionManage': 'Connection management',
88
+ 'accountBar.userAria': 'User: {identity}',
89
+ 'accountBar.localAccount': '{identity} (local account)',
90
+ 'accountBar.unknownAccount': 'Unrecognized account',
91
+ 'accountBar.access': 'Access: {access}',
92
+ 'accountBar.accessWithLatency': 'Access: {access} · {latency} ms',
93
+ 'accountBar.memory': 'Memory',
94
+ 'accountBar.managePeerHost': 'Manage PeerHost',
95
+ 'accountBar.managePeerHostHint': 'Connect and manage other DSH Hosts',
96
+ 'accountBar.loggingOut': 'Signing out…',
97
+ 'accountBar.logout': 'Sign out',
98
+ 'accountBar.relay': 'Relay',
99
+ 'accountBar.direct': 'Direct',
100
+ };
101
+ export const zh = {
102
+ 'usage.slotLabel': 'Agent 订阅余量',
103
+ 'usage.remainingLabel': '{provider} 订阅余量 {percent}%',
104
+ 'usage.upstreamBalanceLabel': '{provider} 上游余额 {amount}',
105
+ 'usage.balanceLabel': '{provider} 余额 {amount}',
106
+ 'usage.providerBalanceLabel': '{provider} 余量 {amount}',
107
+ 'usage.providerBalancePlanLabel': '{provider} · {plan} · {amount}',
108
+ 'usage.unavailable': '不可用',
109
+ 'usage.available': '可用',
110
+ 'usage.subscriptionRemaining': '订阅余量',
111
+ 'usage.todayCostShort': '今日 {amount}',
112
+ 'usage.accountBalance': '账户余额',
113
+ 'usage.officialRemaining': '官方余量',
114
+ 'usage.windowFiveHour': '5 小时额度',
115
+ 'usage.windowWeekly': '周额度',
116
+ 'usage.windowMonthly': '月额度',
117
+ 'usage.popoverSubscriptionUsage': '{provider} 订阅使用情况',
118
+ 'usage.popoverSubscriptionTitle': '{provider} 订阅',
119
+ 'usage.windowRemaining': '{label}剩余 {percent}%',
120
+ 'usage.resetsIn': '重置于 {time}',
121
+ 'usage.windowDays': '{count} 天额度',
122
+ 'usage.windowHours': '{count} 小时额度',
123
+ 'usage.windowMinutes': '{count} 分钟额度',
124
+ 'usage.officialRemainingPopover': '{provider} 官方余量',
125
+ 'usage.usedOfTotal': '已用 {used} / {total}',
126
+ 'usage.usedShort': '已用 {amount}',
127
+ 'usage.expiresIn': '{time}到期',
128
+ 'usage.expired': '已到期',
129
+ 'usage.noMoreStats': '暂无更多统计',
130
+ 'usage.providerAccountBalance': '{provider} 账户余额',
131
+ 'usage.granted': '赠送 {amount}',
132
+ 'usage.toppedUp': '充值 {amount}',
133
+ 'usage.deepseekApiNote': '官方 DeepSeek API 当前只提供账户余额接口,暂无请求量、Token 或费用明细。',
134
+ 'usage.upstreamUsageTitle': '{provider} 上游用量',
135
+ 'usage.addressMissing': '地址未提供',
136
+ 'usage.statTodayRequests': '今日请求数',
137
+ 'usage.statTodayTokens': '今日 Token 用量',
138
+ 'usage.statTodayCost': '今日费用',
139
+ 'usage.statTotalRequests': '累计请求数',
140
+ 'usage.statTotalTokens': '累计 Token 用量',
141
+ 'usage.statTotalCost': '累计费用',
142
+ 'usage.statTodayCacheHitRate': '今日缓存命中率',
143
+ 'usage.statTotalCacheHitRate': '累计缓存命中率',
144
+ 'usage.byModel': '按模型统计',
145
+ 'usage.noModelStats': '暂无按模型统计',
146
+ 'usage.colModel': '模型',
147
+ 'usage.colRequests': '请求',
148
+ 'usage.colToken': 'Token',
149
+ 'usage.colCost': '费用',
150
+ 'usage.colCache': '缓存',
151
+ 'usage.providerDeepseekOfficial': 'DeepSeek 官方',
152
+ 'usage.providerUpstream': '{name} 上游',
153
+ 'usage.countdownDaysHours': '{days}天{hours}小时后',
154
+ 'usage.countdownHoursMinutes': '{hours}小时{minutes}分钟后',
155
+ 'usage.countdownHours': '{hours}小时后',
156
+ 'usage.countdownMinutes': '{minutes}分钟后',
157
+ 'usage.creditBalanceLabel': '剩余点数',
158
+ 'usage.creditUnlimited': '不限',
159
+ 'usage.resetCreditsLabel': '重置次数',
160
+ 'usage.resetCreditsCount': '{count} 次',
161
+ 'usage.resetCreditsExpiresAt': '{time}到期',
162
+ 'usage.resetCreditsExpired': '已过期',
163
+ 'usage.resetCreditsMore': '还有 {count} 张',
164
+ 'usage.resetButton': '重置订阅',
165
+ 'usage.resetTooltipReady': '消耗 1 次重置次数以立即恢复当前窗口',
166
+ 'usage.resetTooltipNone': '没有可用的重置次数',
167
+ 'usage.resetDialogTitle': '确认重置订阅用量',
168
+ 'usage.resetDialogBody': '将消耗 1 次重置次数立即恢复当前用量窗口,剩余 {count} 次。此操作不可撤销,确定继续吗?',
169
+ 'usage.resetDialogCancel': '取消',
170
+ 'usage.resetDialogConfirm': '确认重置',
171
+ 'usage.resetDialogPending': '正在重置…',
172
+ 'usage.resetDialogClose': '关闭',
173
+ 'usage.resetOutcomeReset': '已重置当前用量窗口,重置次数已更新。',
174
+ 'usage.resetOutcomeAlreadyRedeemed': '该次重置此前已生效,已刷新最新用量。',
175
+ 'usage.resetOutcomeNothingToReset': '当前没有达到限额的窗口,未消耗重置次数。',
176
+ 'usage.resetOutcomeNoCredit': '没有可用的重置次数,未执行重置。',
177
+ 'usage.resetFailed': '重置失败,请稍后重试。',
178
+ 'accountBar.userFallback': '用户',
179
+ 'accountBar.connectionManageTitle': '连接管理 · 管理其他 DSH Host',
180
+ 'accountBar.identityClickHint': '{identity} · 点击管理登录',
181
+ 'accountBar.connectionManage': '连接管理',
182
+ 'accountBar.userAria': '用户:{identity}',
183
+ 'accountBar.localAccount': '{identity}(本地账号)',
184
+ 'accountBar.unknownAccount': '未识别账号',
185
+ 'accountBar.access': '访问:{access}',
186
+ 'accountBar.accessWithLatency': '访问:{access} · {latency} ms',
187
+ 'accountBar.memory': '内存',
188
+ 'accountBar.managePeerHost': '管理 PeerHost',
189
+ 'accountBar.managePeerHostHint': '连接和管理其他 DSH Host',
190
+ 'accountBar.loggingOut': '注销中…',
191
+ 'accountBar.logout': '注销登录',
192
+ 'accountBar.relay': '中转',
193
+ 'accountBar.direct': '直连',
194
+ };
195
+ //# sourceMappingURL=usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../../../../src/client/locales/usage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * 移动端会话交互修正。
3
+ *
4
+ * DSH 的会话行是带 `role="treeitem"` 的普通 div,桌面端依赖浏览器把触摸
5
+ * 转换成 click。iOS 独立窗口在这条链路上会额外触发双击与延迟 click,导致
6
+ * 会话标题的双击重命名被误触发。这里把短触摸明确转换为一次 click,并屏蔽
7
+ * 移动端的双击重命名;Composer 的焦点则只接受来自用户点按输入框的动作。
8
+ */
9
+ export interface MobileSessionInteractionWindowLike {
10
+ readonly innerWidth?: number;
11
+ readonly navigator?: {
12
+ readonly maxTouchPoints?: number;
13
+ };
14
+ addEventListener(type: string, listener: (event: never) => void, options?: unknown): void;
15
+ removeEventListener(type: string, listener: (event: never) => void, options?: unknown): void;
16
+ }
17
+ export interface MobileSessionInteractionDocumentLike {
18
+ addEventListener(type: string, listener: (event: never) => void, options?: unknown): void;
19
+ removeEventListener(type: string, listener: (event: never) => void, options?: unknown): void;
20
+ }
21
+ export interface MobileSessionInteractionOptions {
22
+ readonly window?: MobileSessionInteractionWindowLike;
23
+ readonly document?: MobileSessionInteractionDocumentLike;
24
+ readonly mobileViewportMaxPx?: number;
25
+ }
26
+ export interface MobileSessionInteractionController {
27
+ refresh(): boolean;
28
+ dispose(): void;
29
+ }
30
+ interface TouchPoint {
31
+ readonly x: number;
32
+ readonly y: number;
33
+ readonly target: unknown;
34
+ }
35
+ interface TouchRecord {
36
+ readonly point: TouchPoint;
37
+ readonly at: number;
38
+ }
39
+ /** 纯函数:判断触摸是否足够像一次点按。 */
40
+ export declare function isShortMobileTap(start: TouchRecord, end: TouchRecord): boolean;
41
+ /** 启动移动端会话交互修正;桌面视口不注册任何全局监听。 */
42
+ export declare function startMobileSessionInteractionDom(options?: MobileSessionInteractionOptions): MobileSessionInteractionController;
43
+ export {};
44
+ //# sourceMappingURL=mobile-session-interaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mobile-session-interaction.d.ts","sourceRoot":"","sources":["../../../../src/client/mobile-session-interaction.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE;QAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACzD,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IACzF,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;CAC7F;AAED,MAAM,WAAW,oCAAoC;IACnD,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IACzF,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;CAC7F;AAED,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,MAAM,CAAC,EAAE,kCAAkC,CAAA;IACpD,QAAQ,CAAC,QAAQ,CAAC,EAAE,oCAAoC,CAAA;IACxD,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;CACtC;AAED,MAAM,WAAW,kCAAkC;IACjD,OAAO,IAAI,OAAO,CAAA;IAClB,OAAO,IAAI,IAAI,CAAA;CAChB;AAED,UAAU,UAAU;IAClB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CACzB;AAED,UAAU,WAAW;IACnB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CACpB;AAmBD,yBAAyB;AACzB,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAK9E;AAED,iCAAiC;AACjC,wBAAgB,gCAAgC,CAC9C,OAAO,GAAE,+BAAoC,GAC5C,kCAAkC,CA8IpC"}
@@ -0,0 +1,291 @@
1
+ /**
2
+ * 移动端会话交互修正。
3
+ *
4
+ * DSH 的会话行是带 `role="treeitem"` 的普通 div,桌面端依赖浏览器把触摸
5
+ * 转换成 click。iOS 独立窗口在这条链路上会额外触发双击与延迟 click,导致
6
+ * 会话标题的双击重命名被误触发。这里把短触摸明确转换为一次 click,并屏蔽
7
+ * 移动端的双击重命名;Composer 的焦点则只接受来自用户点按输入框的动作。
8
+ */
9
+ const DEFAULT_MOBILE_VIEWPORT_MAX_PX = 1024;
10
+ const TAP_MAX_DURATION_MS = 700;
11
+ const TAP_MAX_DISTANCE_PX = 12;
12
+ const FOCUS_ACTIVATION_WINDOW_MS = 700;
13
+ const NATIVE_CLICK_SUPPRESSION_WINDOW_MS = 900;
14
+ /** 纯函数:判断触摸是否足够像一次点按。 */
15
+ export function isShortMobileTap(start, end) {
16
+ const dx = end.point.x - start.point.x;
17
+ const dy = end.point.y - start.point.y;
18
+ return end.at - start.at <= TAP_MAX_DURATION_MS
19
+ && Math.hypot(dx, dy) <= TAP_MAX_DISTANCE_PX;
20
+ }
21
+ /** 启动移动端会话交互修正;桌面视口不注册任何全局监听。 */
22
+ export function startMobileSessionInteractionDom(options = {}) {
23
+ const hostWindow = options.window
24
+ ?? globalThis.window;
25
+ const hostDocument = options.document
26
+ ?? globalThis.document;
27
+ const viewportMaxPx = options.mobileViewportMaxPx ?? DEFAULT_MOBILE_VIEWPORT_MAX_PX;
28
+ let active = false;
29
+ let disposed = false;
30
+ let touchStart;
31
+ let userActivation;
32
+ let suppressedClick;
33
+ let dispatchingSyntheticClick = false;
34
+ const now = () => Date.now();
35
+ const blurComposer = () => {
36
+ const activeElement = hostDocument?.activeElement;
37
+ const element = asElement(activeElement);
38
+ if (element === null || !isComposerTarget(element))
39
+ return;
40
+ try {
41
+ element.blur?.();
42
+ }
43
+ catch { /* 浏览器焦点已被销毁时忽略。 */ }
44
+ };
45
+ const onPointerDown = (event) => {
46
+ const target = asElement(eventTarget(event));
47
+ if (target === null)
48
+ return;
49
+ userActivation = { target, at: now() };
50
+ if (!isComposerTarget(target))
51
+ blurComposer();
52
+ };
53
+ const onFocusIn = (event) => {
54
+ const target = asElement(eventTarget(event));
55
+ if (target === null || !isComposerTarget(target))
56
+ return;
57
+ const activation = userActivation;
58
+ const allowed = activation !== undefined
59
+ && now() - activation.at <= FOCUS_ACTIVATION_WINDOW_MS
60
+ && activationInsideComposer(activation.target, target);
61
+ if (allowed)
62
+ return;
63
+ // React/Lexical 可能在会话切换完成后的微任务中再次 focus;同步 blur 后再补
64
+ // 一次微任务,确保 Android WebView 和 iOS Web App 都不会留下软键盘。
65
+ blurElementLater(target);
66
+ };
67
+ const onTouchStart = (event) => {
68
+ const point = firstTouch(event);
69
+ if (point === null)
70
+ return;
71
+ const record = { point, at: now() };
72
+ touchStart = record;
73
+ const target = asElement(point.target);
74
+ userActivation = { target: target ?? emptyElement(), at: record.at };
75
+ if (target === null || !isComposerTarget(target))
76
+ blurComposer();
77
+ };
78
+ const onTouchEnd = (event) => {
79
+ const start = touchStart;
80
+ touchStart = undefined;
81
+ if (start === undefined)
82
+ return;
83
+ const point = endTouch(event, start.point);
84
+ if (point === null)
85
+ return;
86
+ const end = { point, at: now() };
87
+ if (!isShortMobileTap(start, end))
88
+ return;
89
+ const row = sessionRow(point.target);
90
+ if (row === null || isRowControl(point.target, row))
91
+ return;
92
+ // 阻止 iOS 在 touchend 后补发延迟 click;马上交给 React 的 onClick。
93
+ preventDefault(event);
94
+ suppressedClick = { row, at: end.at };
95
+ dispatchingSyntheticClick = true;
96
+ try {
97
+ row.click?.();
98
+ }
99
+ finally {
100
+ dispatchingSyntheticClick = false;
101
+ }
102
+ };
103
+ const onClickCapture = (event) => {
104
+ if (dispatchingSyntheticClick)
105
+ return;
106
+ const suppressed = suppressedClick;
107
+ if (suppressed === undefined || now() - suppressed.at > NATIVE_CLICK_SUPPRESSION_WINDOW_MS) {
108
+ suppressedClick = undefined;
109
+ return;
110
+ }
111
+ const row = sessionRow(eventTarget(event));
112
+ if (row !== null && row === suppressed.row) {
113
+ preventDefault(event);
114
+ stopPropagation(event);
115
+ }
116
+ suppressedClick = undefined;
117
+ };
118
+ const onDoubleClickCapture = (event) => {
119
+ const row = sessionRow(eventTarget(event));
120
+ if (row === null || isRowControl(eventTarget(event), row))
121
+ return;
122
+ // DSH 的标题双击就是重命名入口。移动端保留菜单中的重命名动作,
123
+ // 但不允许连续点按会话记录误开重命名对话框。
124
+ preventDefault(event);
125
+ stopPropagation(event);
126
+ };
127
+ const addListeners = () => {
128
+ if (active || hostDocument === undefined)
129
+ return;
130
+ active = true;
131
+ const capture = { capture: true, passive: false };
132
+ hostDocument.addEventListener('pointerdown', onPointerDown, capture);
133
+ hostDocument.addEventListener('mousedown', onPointerDown, capture);
134
+ hostDocument.addEventListener('touchstart', onTouchStart, capture);
135
+ hostDocument.addEventListener('touchend', onTouchEnd, capture);
136
+ hostDocument.addEventListener('focusin', onFocusIn, capture);
137
+ hostDocument.addEventListener('click', onClickCapture, capture);
138
+ hostDocument.addEventListener('dblclick', onDoubleClickCapture, capture);
139
+ };
140
+ const removeListeners = () => {
141
+ if (!active || hostDocument === undefined)
142
+ return;
143
+ active = false;
144
+ hostDocument.removeEventListener('pointerdown', onPointerDown, true);
145
+ hostDocument.removeEventListener('mousedown', onPointerDown, true);
146
+ hostDocument.removeEventListener('touchstart', onTouchStart, true);
147
+ hostDocument.removeEventListener('touchend', onTouchEnd, true);
148
+ hostDocument.removeEventListener('focusin', onFocusIn, true);
149
+ hostDocument.removeEventListener('click', onClickCapture, true);
150
+ hostDocument.removeEventListener('dblclick', onDoubleClickCapture, true);
151
+ touchStart = undefined;
152
+ userActivation = undefined;
153
+ suppressedClick = undefined;
154
+ };
155
+ const refresh = () => {
156
+ if (disposed)
157
+ return false;
158
+ const wanted = isMobileTouchViewport(hostWindow, viewportMaxPx);
159
+ if (wanted)
160
+ addListeners();
161
+ else
162
+ removeListeners();
163
+ return active;
164
+ };
165
+ const onResize = () => { refresh(); };
166
+ hostWindow?.addEventListener('resize', onResize);
167
+ refresh();
168
+ return {
169
+ refresh,
170
+ dispose() {
171
+ if (disposed)
172
+ return;
173
+ disposed = true;
174
+ removeListeners();
175
+ hostWindow?.removeEventListener('resize', onResize);
176
+ },
177
+ };
178
+ }
179
+ function isMobileTouchViewport(windowLike, maxPx) {
180
+ const width = windowLike?.innerWidth;
181
+ if (typeof width !== 'number' || !Number.isFinite(width) || width <= 0 || width > maxPx)
182
+ return false;
183
+ const touchPoints = windowLike?.navigator?.maxTouchPoints;
184
+ return typeof touchPoints !== 'number' || touchPoints > 0;
185
+ }
186
+ function sessionRow(target) {
187
+ const element = asElement(target);
188
+ if (element === null || typeof element.closest !== 'function')
189
+ return null;
190
+ try {
191
+ const row = element.closest('[role="treeitem"][aria-selected]');
192
+ const expanded = row?.getAttribute?.('aria-expanded');
193
+ if (row === null || (expanded !== null && expanded !== undefined))
194
+ return null;
195
+ return row;
196
+ }
197
+ catch {
198
+ return null;
199
+ }
200
+ }
201
+ function isRowControl(target, row) {
202
+ const element = asElement(target);
203
+ if (element === null || typeof element.closest !== 'function')
204
+ return false;
205
+ try {
206
+ const control = element.closest('button, a, input, textarea, select, [contenteditable="true"]');
207
+ return control !== null && control !== row;
208
+ }
209
+ catch {
210
+ return false;
211
+ }
212
+ }
213
+ function isComposerTarget(target) {
214
+ try {
215
+ return target.closest?.('[data-composer-input="true"]') !== null;
216
+ }
217
+ catch {
218
+ return false;
219
+ }
220
+ }
221
+ function activationInsideComposer(activation, target) {
222
+ if (activation === target)
223
+ return true;
224
+ try {
225
+ return target.contains?.(activation) === true || activation.closest?.('[data-composer-input="true"]') === target.closest?.('[data-composer-input="true"]');
226
+ }
227
+ catch {
228
+ return false;
229
+ }
230
+ }
231
+ function asElement(value) {
232
+ return typeof value === 'object' && value !== null ? value : null;
233
+ }
234
+ function emptyElement() {
235
+ return { closest: () => null };
236
+ }
237
+ function eventTarget(event) {
238
+ return typeof event === 'object' && event !== null ? event.target : undefined;
239
+ }
240
+ function firstTouch(event) {
241
+ if (typeof event !== 'object' || event === null)
242
+ return null;
243
+ const list = event.touches;
244
+ const first = typeof list === 'object' && list !== null ? list[0] : undefined;
245
+ return readTouch(first, eventTarget(event));
246
+ }
247
+ function endTouch(event, fallbackTarget) {
248
+ if (typeof event !== 'object' || event === null)
249
+ return null;
250
+ const list = event.changedTouches;
251
+ const first = typeof list === 'object' && list !== null ? list[0] : undefined;
252
+ return readTouch(first, eventTarget(event) ?? fallbackTarget);
253
+ }
254
+ function readTouch(value, target) {
255
+ if (typeof value !== 'object' || value === null)
256
+ return null;
257
+ const x = value.clientX;
258
+ const y = value.clientY;
259
+ return typeof x === 'number' && typeof y === 'number' && Number.isFinite(x) && Number.isFinite(y)
260
+ ? { x, y, target }
261
+ : null;
262
+ }
263
+ function blurElementLater(element) {
264
+ try {
265
+ element.blur?.();
266
+ }
267
+ catch { /* 忽略失效的焦点节点。 */ }
268
+ const schedule = typeof queueMicrotask === 'function' ? queueMicrotask : (callback) => { setTimeout(callback, 0); };
269
+ schedule(() => {
270
+ try {
271
+ if (isComposerTarget(element))
272
+ element.blur?.();
273
+ }
274
+ catch { /* 节点已卸载。 */ }
275
+ });
276
+ }
277
+ function preventDefault(event) {
278
+ const method = typeof event === 'object' && event !== null ? event.preventDefault : undefined;
279
+ if (typeof method === 'function')
280
+ method.call(event);
281
+ }
282
+ function stopPropagation(event) {
283
+ if (typeof event !== 'object' || event === null)
284
+ return;
285
+ const value = event;
286
+ if (typeof value.stopImmediatePropagation === 'function')
287
+ value.stopImmediatePropagation.call(event);
288
+ else if (typeof value.stopPropagation === 'function')
289
+ value.stopPropagation.call(event);
290
+ }
291
+ //# sourceMappingURL=mobile-session-interaction.js.map