@jingyi0605/codingns4dsh 0.2.0-beta.1 → 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 (872) hide show
  1. package/README.en.md +29 -12
  2. package/README.md +22 -13
  3. package/assets/provider-icons/minimax-code.svg +4 -0
  4. package/assets/provider-icons/zcode.svg +14 -0
  5. package/data/build/dist/bootstrap/dsh-connection-adapter.d.ts +1 -1
  6. package/data/build/dist/bootstrap/dsh-connection-adapter.d.ts.map +1 -0
  7. package/data/build/dist/bootstrap/dsh-connection-adapter.js.map +1 -0
  8. package/data/build/dist/bootstrap/dsh-peer-host-preboot-shim.d.ts +50 -0
  9. package/data/build/dist/bootstrap/dsh-peer-host-preboot-shim.d.ts.map +1 -0
  10. package/data/build/dist/bootstrap/dsh-peer-host-preboot-shim.js +239 -0
  11. package/data/build/dist/bootstrap/dsh-peer-host-preboot-shim.js.map +1 -0
  12. package/data/build/dist/bootstrap/index.d.ts +3 -1
  13. package/data/build/dist/bootstrap/index.d.ts.map +1 -0
  14. package/data/build/dist/bootstrap/index.js +1 -0
  15. package/data/build/dist/bootstrap/index.js.map +1 -0
  16. package/data/build/dist/client/account-bar.d.ts +8 -1
  17. package/data/build/dist/client/account-bar.d.ts.map +1 -0
  18. package/data/build/dist/client/account-bar.js +166 -79
  19. package/data/build/dist/client/account-bar.js.map +1 -0
  20. package/data/build/dist/client/bundle.js +16641 -8889
  21. package/data/build/dist/client/bundle.js.map +1 -0
  22. package/data/build/dist/client/cli-catalog.d.ts.map +1 -0
  23. package/data/build/dist/client/cli-catalog.js.map +1 -0
  24. package/data/build/dist/client/cli-slots.d.ts.map +1 -0
  25. package/data/build/dist/client/cli-slots.js +32 -13
  26. package/data/build/dist/client/cli-slots.js.map +1 -0
  27. package/data/build/dist/client/context-breakdown-dom.d.ts.map +1 -0
  28. package/data/build/dist/client/context-breakdown-dom.js.map +1 -0
  29. package/data/build/dist/client/debug/ui.d.ts +2 -1
  30. package/data/build/dist/client/debug/ui.d.ts.map +1 -0
  31. package/data/build/dist/client/debug/ui.js +40 -33
  32. package/data/build/dist/client/debug/ui.js.map +1 -0
  33. package/data/build/dist/client/delegate-command.d.ts +16 -0
  34. package/data/build/dist/client/delegate-command.d.ts.map +1 -0
  35. package/data/build/dist/client/delegate-command.js +138 -0
  36. package/data/build/dist/client/delegate-command.js.map +1 -0
  37. package/data/build/dist/client/delegate-plan.d.ts +31 -0
  38. package/data/build/dist/client/delegate-plan.d.ts.map +1 -0
  39. package/data/build/dist/client/delegate-plan.js +59 -0
  40. package/data/build/dist/client/delegate-plan.js.map +1 -0
  41. package/data/build/dist/client/delegate-ui-dom.d.ts +40 -0
  42. package/data/build/dist/client/delegate-ui-dom.d.ts.map +1 -0
  43. package/data/build/dist/client/delegate-ui-dom.js +363 -0
  44. package/data/build/dist/client/delegate-ui-dom.js.map +1 -0
  45. package/data/build/dist/client/dsh-h5-bootstrap.d.ts.map +1 -0
  46. package/data/build/dist/client/dsh-h5-bootstrap.js +12 -5
  47. package/data/build/dist/client/dsh-h5-bootstrap.js.map +1 -0
  48. package/data/build/dist/client/dsh-runtime-version.d.ts +3 -2
  49. package/data/build/dist/client/dsh-runtime-version.d.ts.map +1 -0
  50. package/data/build/dist/client/dsh-runtime-version.js +7 -6
  51. package/data/build/dist/client/dsh-runtime-version.js.map +1 -0
  52. package/data/build/dist/client/external-tool-stream.d.ts.map +1 -0
  53. package/data/build/dist/client/external-tool-stream.js +44 -36
  54. package/data/build/dist/client/external-tool-stream.js.map +1 -0
  55. package/data/build/dist/client/features/cli-adapters.d.ts +7 -2
  56. package/data/build/dist/client/features/cli-adapters.d.ts.map +1 -0
  57. package/data/build/dist/client/features/cli-adapters.js +59 -105
  58. package/data/build/dist/client/features/cli-adapters.js.map +1 -0
  59. package/data/build/dist/client/features/debug.d.ts.map +1 -0
  60. package/data/build/dist/client/features/debug.js +6 -4
  61. package/data/build/dist/client/features/debug.js.map +1 -0
  62. package/data/build/dist/client/features/file-management-panel.d.ts.map +1 -0
  63. package/data/build/dist/client/features/file-management-panel.js.map +1 -0
  64. package/data/build/dist/client/features/file-management.d.ts.map +1 -0
  65. package/data/build/dist/client/features/file-management.js +8 -5
  66. package/data/build/dist/client/features/file-management.js.map +1 -0
  67. package/data/build/dist/client/features/index.d.ts +4 -2
  68. package/data/build/dist/client/features/index.d.ts.map +1 -0
  69. package/data/build/dist/client/features/index.js +5 -2
  70. package/data/build/dist/client/features/index.js.map +1 -0
  71. package/data/build/dist/client/features/lan-access-panel.d.ts.map +1 -0
  72. package/data/build/dist/client/features/lan-access-panel.js +89 -11
  73. package/data/build/dist/client/features/lan-access-panel.js.map +1 -0
  74. package/data/build/dist/client/features/lan-access-status.d.ts +40 -0
  75. package/data/build/dist/client/features/lan-access-status.d.ts.map +1 -0
  76. package/data/build/dist/client/features/lan-access-status.js +118 -0
  77. package/data/build/dist/client/features/lan-access-status.js.map +1 -0
  78. package/data/build/dist/client/features/lan-access.d.ts +4 -1
  79. package/data/build/dist/client/features/lan-access.d.ts.map +1 -0
  80. package/data/build/dist/client/features/lan-access.js +35 -5
  81. package/data/build/dist/client/features/lan-access.js.map +1 -0
  82. package/data/build/dist/client/features/login-protection-panel.d.ts.map +1 -0
  83. package/data/build/dist/client/features/login-protection-panel.js +9 -7
  84. package/data/build/dist/client/features/login-protection-panel.js.map +1 -0
  85. package/data/build/dist/client/features/login-protection-session.d.ts.map +1 -0
  86. package/data/build/dist/client/features/login-protection-session.js.map +1 -0
  87. package/data/build/dist/client/features/login-protection.d.ts.map +1 -0
  88. package/data/build/dist/client/features/login-protection.js +3 -3
  89. package/data/build/dist/client/features/login-protection.js.map +1 -0
  90. package/data/build/dist/client/features/mobile-access-panel.d.ts +12 -0
  91. package/data/build/dist/client/features/mobile-access-panel.d.ts.map +1 -0
  92. package/data/build/dist/client/features/mobile-access-panel.js +259 -0
  93. package/data/build/dist/client/features/mobile-access-panel.js.map +1 -0
  94. package/data/build/dist/client/features/mobile-access.d.ts +13 -0
  95. package/data/build/dist/client/features/mobile-access.d.ts.map +1 -0
  96. package/data/build/dist/client/features/mobile-access.js +79 -0
  97. package/data/build/dist/client/features/mobile-access.js.map +1 -0
  98. package/data/build/dist/client/features/peer-host.d.ts +35 -1
  99. package/data/build/dist/client/features/peer-host.d.ts.map +1 -0
  100. package/data/build/dist/client/features/peer-host.js +599 -56
  101. package/data/build/dist/client/features/peer-host.js.map +1 -0
  102. package/data/build/dist/client/features/reverse-proxy-panel.d.ts.map +1 -0
  103. package/data/build/dist/client/features/reverse-proxy-panel.js +2 -1
  104. package/data/build/dist/client/features/reverse-proxy-panel.js.map +1 -0
  105. package/data/build/dist/client/features/reverse-proxy.d.ts.map +1 -0
  106. package/data/build/dist/client/features/reverse-proxy.js +3 -3
  107. package/data/build/dist/client/features/reverse-proxy.js.map +1 -0
  108. package/data/build/dist/client/features/subscription-usage-panel.d.ts.map +1 -0
  109. package/data/build/dist/client/features/subscription-usage-panel.js.map +1 -0
  110. package/data/build/dist/client/features/terminal-enhancement-panel.d.ts.map +1 -0
  111. package/data/build/dist/client/features/terminal-enhancement-panel.js.map +1 -0
  112. package/data/build/dist/client/features/terminal-enhancement.d.ts.map +1 -0
  113. package/data/build/dist/client/features/terminal-enhancement.js +3 -3
  114. package/data/build/dist/client/features/terminal-enhancement.js.map +1 -0
  115. package/data/build/dist/client/features/types.d.ts +12 -0
  116. package/data/build/dist/client/features/types.d.ts.map +1 -0
  117. package/data/build/dist/client/features/types.js.map +1 -0
  118. package/data/build/dist/client/features/workspace-session-enhancement-panel.d.ts.map +1 -0
  119. package/data/build/dist/client/features/workspace-session-enhancement-panel.js +5 -2
  120. package/data/build/dist/client/features/workspace-session-enhancement-panel.js.map +1 -0
  121. package/data/build/dist/client/features/workspace-session-enhancement.d.ts.map +1 -0
  122. package/data/build/dist/client/features/workspace-session-enhancement.js +24 -6
  123. package/data/build/dist/client/features/workspace-session-enhancement.js.map +1 -0
  124. package/data/build/dist/client/file-management-dom.d.ts +5 -0
  125. package/data/build/dist/client/file-management-dom.d.ts.map +1 -0
  126. package/data/build/dist/client/file-management-dom.js +78 -38
  127. package/data/build/dist/client/file-management-dom.js.map +1 -0
  128. package/data/build/dist/client/git-history-graph.d.ts +81 -0
  129. package/data/build/dist/client/git-history-graph.d.ts.map +1 -0
  130. package/data/build/dist/client/git-history-graph.js +195 -0
  131. package/data/build/dist/client/git-history-graph.js.map +1 -0
  132. package/data/build/dist/client/git-management.d.ts +2 -0
  133. package/data/build/dist/client/git-management.d.ts.map +1 -0
  134. package/data/build/dist/client/git-management.js +284 -108
  135. package/data/build/dist/client/git-management.js.map +1 -0
  136. package/data/build/dist/client/git-panel-styles.d.ts +28 -0
  137. package/data/build/dist/client/git-panel-styles.d.ts.map +1 -0
  138. package/data/build/dist/client/git-panel-styles.js +95 -0
  139. package/data/build/dist/client/git-panel-styles.js.map +1 -0
  140. package/data/build/dist/client/git-workspace-events.d.ts +7 -0
  141. package/data/build/dist/client/git-workspace-events.d.ts.map +1 -0
  142. package/data/build/dist/client/git-workspace-events.js +32 -0
  143. package/data/build/dist/client/git-workspace-events.js.map +1 -0
  144. package/data/build/dist/client/h5-bootstrap-entry.d.ts.map +1 -0
  145. package/data/build/dist/client/h5-bootstrap-entry.js.map +1 -0
  146. package/data/build/dist/client/host-router.d.ts.map +1 -0
  147. package/data/build/dist/client/host-router.js.map +1 -0
  148. package/data/build/dist/client/index.d.ts +7 -4
  149. package/data/build/dist/client/index.d.ts.map +1 -0
  150. package/data/build/dist/client/index.js +16 -9
  151. package/data/build/dist/client/index.js.map +1 -0
  152. package/data/build/dist/client/lan-access.d.ts.map +1 -0
  153. package/data/build/dist/client/lan-access.js.map +1 -0
  154. package/data/build/dist/client/locale.d.ts +7 -0
  155. package/data/build/dist/client/locale.d.ts.map +1 -0
  156. package/data/build/dist/client/locale.js +231 -47
  157. package/data/build/dist/client/locale.js.map +1 -0
  158. package/data/build/dist/client/locales/debug.d.ts +9 -0
  159. package/data/build/dist/client/locales/debug.d.ts.map +1 -0
  160. package/data/build/dist/client/locales/debug.js +163 -0
  161. package/data/build/dist/client/locales/debug.js.map +1 -0
  162. package/data/build/dist/client/locales/fileWorkspace.d.ts +9 -0
  163. package/data/build/dist/client/locales/fileWorkspace.d.ts.map +1 -0
  164. package/data/build/dist/client/locales/fileWorkspace.js +139 -0
  165. package/data/build/dist/client/locales/fileWorkspace.js.map +1 -0
  166. package/data/build/dist/client/locales/git.d.ts +9 -0
  167. package/data/build/dist/client/locales/git.d.ts.map +1 -0
  168. package/data/build/dist/client/locales/git.js +223 -0
  169. package/data/build/dist/client/locales/git.js.map +1 -0
  170. package/data/build/dist/client/locales/panels.d.ts +9 -0
  171. package/data/build/dist/client/locales/panels.d.ts.map +1 -0
  172. package/data/build/dist/client/locales/panels.js +33 -0
  173. package/data/build/dist/client/locales/panels.js.map +1 -0
  174. package/data/build/dist/client/locales/peerHost.d.ts +9 -0
  175. package/data/build/dist/client/locales/peerHost.d.ts.map +1 -0
  176. package/data/build/dist/client/locales/peerHost.js +153 -0
  177. package/data/build/dist/client/locales/peerHost.js.map +1 -0
  178. package/data/build/dist/client/locales/peerHostWorkspace.d.ts +9 -0
  179. package/data/build/dist/client/locales/peerHostWorkspace.d.ts.map +1 -0
  180. package/data/build/dist/client/locales/peerHostWorkspace.js +69 -0
  181. package/data/build/dist/client/locales/peerHostWorkspace.js.map +1 -0
  182. package/data/build/dist/client/locales/terminalAuth.d.ts +9 -0
  183. package/data/build/dist/client/locales/terminalAuth.d.ts.map +1 -0
  184. package/data/build/dist/client/locales/terminalAuth.js +67 -0
  185. package/data/build/dist/client/locales/terminalAuth.js.map +1 -0
  186. package/data/build/dist/client/locales/usage.d.ts +9 -0
  187. package/data/build/dist/client/locales/usage.d.ts.map +1 -0
  188. package/data/build/dist/client/locales/usage.js +195 -0
  189. package/data/build/dist/client/locales/usage.js.map +1 -0
  190. package/data/build/dist/client/mobile-session-interaction.d.ts +44 -0
  191. package/data/build/dist/client/mobile-session-interaction.d.ts.map +1 -0
  192. package/data/build/dist/client/mobile-session-interaction.js +291 -0
  193. package/data/build/dist/client/mobile-session-interaction.js.map +1 -0
  194. package/data/build/dist/client/mobile-settings-modal-dom.d.ts +49 -0
  195. package/data/build/dist/client/mobile-settings-modal-dom.d.ts.map +1 -0
  196. package/data/build/dist/client/mobile-settings-modal-dom.js +152 -0
  197. package/data/build/dist/client/mobile-settings-modal-dom.js.map +1 -0
  198. package/data/build/dist/client/mobile-sidebar-gestures.d.ts +97 -0
  199. package/data/build/dist/client/mobile-sidebar-gestures.d.ts.map +1 -0
  200. package/data/build/dist/client/mobile-sidebar-gestures.js +316 -0
  201. package/data/build/dist/client/mobile-sidebar-gestures.js.map +1 -0
  202. package/data/build/dist/client/mobile-sidebar-logo.d.ts +18 -0
  203. package/data/build/dist/client/mobile-sidebar-logo.d.ts.map +1 -0
  204. package/data/build/dist/client/mobile-sidebar-logo.js +15 -0
  205. package/data/build/dist/client/mobile-sidebar-logo.js.map +1 -0
  206. package/data/build/dist/client/mobile-sidebar-rail-dom.d.ts +114 -0
  207. package/data/build/dist/client/mobile-sidebar-rail-dom.d.ts.map +1 -0
  208. package/data/build/dist/client/mobile-sidebar-rail-dom.js +452 -0
  209. package/data/build/dist/client/mobile-sidebar-rail-dom.js.map +1 -0
  210. package/data/build/dist/client/mobile-vibration.d.ts +16 -0
  211. package/data/build/dist/client/mobile-vibration.d.ts.map +1 -0
  212. package/data/build/dist/client/mobile-vibration.js +20 -0
  213. package/data/build/dist/client/mobile-vibration.js.map +1 -0
  214. package/data/build/dist/client/native-workspace-store.d.ts +29 -0
  215. package/data/build/dist/client/native-workspace-store.d.ts.map +1 -0
  216. package/data/build/dist/client/native-workspace-store.js +64 -0
  217. package/data/build/dist/client/native-workspace-store.js.map +1 -0
  218. package/data/build/dist/client/peer-host-aggregate-refresh.d.ts +13 -0
  219. package/data/build/dist/client/peer-host-aggregate-refresh.d.ts.map +1 -0
  220. package/data/build/dist/client/peer-host-aggregate-refresh.js +14 -0
  221. package/data/build/dist/client/peer-host-aggregate-refresh.js.map +1 -0
  222. package/data/build/dist/client/peer-host-color.d.ts +13 -0
  223. package/data/build/dist/client/peer-host-color.d.ts.map +1 -0
  224. package/data/build/dist/client/peer-host-color.js +57 -0
  225. package/data/build/dist/client/peer-host-color.js.map +1 -0
  226. package/data/build/dist/client/peer-host-connection-button.d.ts +14 -1
  227. package/data/build/dist/client/peer-host-connection-button.d.ts.map +1 -0
  228. package/data/build/dist/client/peer-host-connection-button.js +18 -7
  229. package/data/build/dist/client/peer-host-connection-button.js.map +1 -0
  230. package/data/build/dist/client/peer-host-management-api.d.ts +34 -0
  231. package/data/build/dist/client/peer-host-management-api.d.ts.map +1 -0
  232. package/data/build/dist/client/peer-host-management-api.js +12 -0
  233. package/data/build/dist/client/peer-host-management-api.js.map +1 -0
  234. package/data/build/dist/client/peer-host-management-panel.d.ts +4 -1
  235. package/data/build/dist/client/peer-host-management-panel.d.ts.map +1 -0
  236. package/data/build/dist/client/peer-host-management-panel.js +533 -94
  237. package/data/build/dist/client/peer-host-management-panel.js.map +1 -0
  238. package/data/build/dist/client/peer-host-native-projection.d.ts +47 -0
  239. package/data/build/dist/client/peer-host-native-projection.d.ts.map +1 -0
  240. package/data/build/dist/client/peer-host-native-projection.js +142 -0
  241. package/data/build/dist/client/peer-host-native-projection.js.map +1 -0
  242. package/data/build/dist/client/peer-host-native-store-projection.d.ts +21 -0
  243. package/data/build/dist/client/peer-host-native-store-projection.d.ts.map +1 -0
  244. package/data/build/dist/client/peer-host-native-store-projection.js +114 -0
  245. package/data/build/dist/client/peer-host-native-store-projection.js.map +1 -0
  246. package/data/build/dist/client/peer-host-scoped-client.d.ts.map +1 -0
  247. package/data/build/dist/client/peer-host-scoped-client.js +5 -5
  248. package/data/build/dist/client/peer-host-scoped-client.js.map +1 -0
  249. package/data/build/dist/client/peer-host-session-controller.d.ts.map +1 -0
  250. package/data/build/dist/client/peer-host-session-controller.js.map +1 -0
  251. package/data/build/dist/client/peer-host-workspace-tab.d.ts +52 -0
  252. package/data/build/dist/client/peer-host-workspace-tab.d.ts.map +1 -0
  253. package/data/build/dist/client/peer-host-workspace-tab.js +492 -0
  254. package/data/build/dist/client/peer-host-workspace-tab.js.map +1 -0
  255. package/data/build/dist/client/peer-host-workspace-tag.d.ts +47 -0
  256. package/data/build/dist/client/peer-host-workspace-tag.d.ts.map +1 -0
  257. package/data/build/dist/client/peer-host-workspace-tag.js +207 -0
  258. package/data/build/dist/client/peer-host-workspace-tag.js.map +1 -0
  259. package/data/build/dist/client/popup-dismiss.d.ts +48 -0
  260. package/data/build/dist/client/popup-dismiss.d.ts.map +1 -0
  261. package/data/build/dist/client/popup-dismiss.js +93 -0
  262. package/data/build/dist/client/popup-dismiss.js.map +1 -0
  263. package/data/build/dist/client/provider-icon-assets.d.ts.map +1 -0
  264. package/data/build/dist/client/provider-icon-assets.js +4 -0
  265. package/data/build/dist/client/provider-icon-assets.js.map +1 -0
  266. package/data/build/dist/client/provider-icons.d.ts +18 -3
  267. package/data/build/dist/client/provider-icons.d.ts.map +1 -0
  268. package/data/build/dist/client/provider-icons.js +30 -14
  269. package/data/build/dist/client/provider-icons.js.map +1 -0
  270. package/data/build/dist/client/pwa-install-prompt.d.ts +76 -0
  271. package/data/build/dist/client/pwa-install-prompt.d.ts.map +1 -0
  272. package/data/build/dist/client/pwa-install-prompt.js +179 -0
  273. package/data/build/dist/client/pwa-install-prompt.js.map +1 -0
  274. package/data/build/dist/client/pwa-notifications.d.ts +105 -0
  275. package/data/build/dist/client/pwa-notifications.d.ts.map +1 -0
  276. package/data/build/dist/client/pwa-notifications.js +192 -0
  277. package/data/build/dist/client/pwa-notifications.js.map +1 -0
  278. package/data/build/dist/client/quick-phrase-layout.d.ts +11 -0
  279. package/data/build/dist/client/quick-phrase-layout.d.ts.map +1 -0
  280. package/data/build/dist/client/quick-phrase-layout.js +20 -0
  281. package/data/build/dist/client/quick-phrase-layout.js.map +1 -0
  282. package/data/build/dist/client/quick-phrase-slot.d.ts.map +1 -0
  283. package/data/build/dist/client/quick-phrase-slot.js +20 -8
  284. package/data/build/dist/client/quick-phrase-slot.js.map +1 -0
  285. package/data/build/dist/client/remote-web-context.d.ts.map +1 -0
  286. package/data/build/dist/client/remote-web-context.js.map +1 -0
  287. package/data/build/dist/client/session-adapter-cache.d.ts.map +1 -0
  288. package/data/build/dist/client/session-adapter-cache.js.map +1 -0
  289. package/data/build/dist/client/session-changed-files-view.d.ts +8 -1
  290. package/data/build/dist/client/session-changed-files-view.d.ts.map +1 -0
  291. package/data/build/dist/client/session-changed-files-view.js +71 -28
  292. package/data/build/dist/client/session-changed-files-view.js.map +1 -0
  293. package/data/build/dist/client/settings-anchor.d.ts +73 -0
  294. package/data/build/dist/client/settings-anchor.d.ts.map +1 -0
  295. package/data/build/dist/client/settings-anchor.js +70 -0
  296. package/data/build/dist/client/settings-anchor.js.map +1 -0
  297. package/data/build/dist/client/settings-bridge.d.ts.map +1 -0
  298. package/data/build/dist/client/settings-bridge.js.map +1 -0
  299. package/data/build/dist/client/settings-section.d.ts.map +1 -0
  300. package/data/build/dist/client/settings-section.js +19 -5
  301. package/data/build/dist/client/settings-section.js.map +1 -0
  302. package/data/build/dist/client/subscription-slot.d.ts +4 -1
  303. package/data/build/dist/client/subscription-slot.d.ts.map +1 -0
  304. package/data/build/dist/client/subscription-slot.js +328 -69
  305. package/data/build/dist/client/subscription-slot.js.map +1 -0
  306. package/data/build/dist/client/terminal/index.d.ts.map +1 -0
  307. package/data/build/dist/client/terminal/index.js.map +1 -0
  308. package/data/build/dist/client/terminal/model.d.ts +13 -2
  309. package/data/build/dist/client/terminal/model.d.ts.map +1 -0
  310. package/data/build/dist/client/terminal/model.js +27 -7
  311. package/data/build/dist/client/terminal/model.js.map +1 -0
  312. package/data/build/dist/client/terminal/recovery.d.ts.map +1 -0
  313. package/data/build/dist/client/terminal/recovery.js.map +1 -0
  314. package/data/build/dist/client/terminal/styles.d.ts.map +1 -0
  315. package/data/build/dist/client/terminal/styles.js.map +1 -0
  316. package/data/build/dist/client/terminal/ui.d.ts.map +1 -0
  317. package/data/build/dist/client/terminal/ui.js +3 -1
  318. package/data/build/dist/client/terminal/ui.js.map +1 -0
  319. package/data/build/dist/client/terminal/xterm-view.d.ts +4 -1
  320. package/data/build/dist/client/terminal/xterm-view.d.ts.map +1 -0
  321. package/data/build/dist/client/terminal/xterm-view.js +19 -17
  322. package/data/build/dist/client/terminal/xterm-view.js.map +1 -0
  323. package/data/build/dist/client/theme.d.ts +17 -5
  324. package/data/build/dist/client/theme.d.ts.map +1 -0
  325. package/data/build/dist/client/theme.js +35 -13
  326. package/data/build/dist/client/theme.js.map +1 -0
  327. package/data/build/dist/client/workspace-session-archive-dom.d.ts +17 -0
  328. package/data/build/dist/client/workspace-session-archive-dom.d.ts.map +1 -0
  329. package/data/build/dist/client/workspace-session-archive-dom.js +192 -47
  330. package/data/build/dist/client/workspace-session-archive-dom.js.map +1 -0
  331. package/data/build/dist/client/workspace-session-fiber.d.ts.map +1 -0
  332. package/data/build/dist/client/workspace-session-fiber.js.map +1 -0
  333. package/data/build/dist/client/workspace-session-logo-dom.d.ts +3 -0
  334. package/data/build/dist/client/workspace-session-logo-dom.d.ts.map +1 -0
  335. package/data/build/dist/client/workspace-session-logo-dom.js +3 -1
  336. package/data/build/dist/client/workspace-session-logo-dom.js.map +1 -0
  337. package/data/build/dist/client/workspace-session-rightbar-dom.d.ts.map +1 -0
  338. package/data/build/dist/client/workspace-session-rightbar-dom.js.map +1 -0
  339. package/data/build/dist/client/workspace-session-visibility-dom.d.ts +3 -0
  340. package/data/build/dist/client/workspace-session-visibility-dom.d.ts.map +1 -0
  341. package/data/build/dist/client/workspace-session-visibility-dom.js +46 -17
  342. package/data/build/dist/client/workspace-session-visibility-dom.js.map +1 -0
  343. package/data/build/dist/dsh-capabilities/client/config-forms-adapter.d.ts.map +1 -0
  344. package/data/build/dist/dsh-capabilities/client/config-forms-adapter.js.map +1 -0
  345. package/data/build/dist/dsh-capabilities/client/conversation-adapter.d.ts.map +1 -0
  346. package/data/build/dist/dsh-capabilities/client/conversation-adapter.js.map +1 -0
  347. package/data/build/dist/dsh-capabilities/client/locale-adapter.d.ts.map +1 -0
  348. package/data/build/dist/dsh-capabilities/client/locale-adapter.js.map +1 -0
  349. package/data/build/dist/dsh-capabilities/client/primitives-adapter.d.ts +10 -0
  350. package/data/build/dist/dsh-capabilities/client/primitives-adapter.d.ts.map +1 -0
  351. package/data/build/dist/dsh-capabilities/client/primitives-adapter.js +20 -0
  352. package/data/build/dist/dsh-capabilities/client/primitives-adapter.js.map +1 -0
  353. package/data/build/dist/dsh-capabilities/client/settings-scope-adapter.d.ts.map +1 -0
  354. package/data/build/dist/dsh-capabilities/client/settings-scope-adapter.js.map +1 -0
  355. package/data/build/dist/dsh-capabilities/client/sidebar-adapter.d.ts.map +1 -0
  356. package/data/build/dist/dsh-capabilities/client/sidebar-adapter.js.map +1 -0
  357. package/data/build/dist/dsh-capabilities/client/theme-adapter.d.ts.map +1 -0
  358. package/data/build/dist/dsh-capabilities/client/theme-adapter.js.map +1 -0
  359. package/data/build/dist/dsh-capabilities/client/typert-adapter.d.ts.map +1 -0
  360. package/data/build/dist/dsh-capabilities/client/typert-adapter.js.map +1 -0
  361. package/data/build/dist/dsh-capabilities/host/config-forms-adapter.d.ts.map +1 -0
  362. package/data/build/dist/dsh-capabilities/host/config-forms-adapter.js.map +1 -0
  363. package/data/build/dist/dsh-capabilities/host/connection-rpc-adapter.d.ts.map +1 -0
  364. package/data/build/dist/dsh-capabilities/host/connection-rpc-adapter.js.map +1 -0
  365. package/data/build/dist/dsh-capabilities/host/settings-scope-adapter.d.ts.map +1 -0
  366. package/data/build/dist/dsh-capabilities/host/settings-scope-adapter.js.map +1 -0
  367. package/data/build/dist/dsh-capabilities/host/typert-adapter.d.ts.map +1 -0
  368. package/data/build/dist/dsh-capabilities/host/typert-adapter.js.map +1 -0
  369. package/data/build/dist/dsh-capabilities/index.d.ts.map +1 -0
  370. package/data/build/dist/dsh-capabilities/index.js.map +1 -0
  371. package/data/build/dist/dsh-capabilities/matrix.d.ts.map +1 -0
  372. package/data/build/dist/dsh-capabilities/matrix.js +44 -31
  373. package/data/build/dist/dsh-capabilities/matrix.js.map +1 -0
  374. package/data/build/dist/dsh-capabilities/registry.d.ts.map +1 -0
  375. package/data/build/dist/dsh-capabilities/registry.js +6 -2
  376. package/data/build/dist/dsh-capabilities/registry.js.map +1 -0
  377. package/data/build/dist/dsh-capabilities/routes.d.ts.map +1 -0
  378. package/data/build/dist/dsh-capabilities/routes.js +96 -11
  379. package/data/build/dist/dsh-capabilities/routes.js.map +1 -0
  380. package/data/build/dist/dsh-capabilities/settings-store.d.ts.map +1 -0
  381. package/data/build/dist/dsh-capabilities/settings-store.js.map +1 -0
  382. package/data/build/dist/dsh-capabilities/types.d.ts +1 -1
  383. package/data/build/dist/dsh-capabilities/types.d.ts.map +1 -0
  384. package/data/build/dist/dsh-capabilities/types.js.map +1 -0
  385. package/data/build/dist/features/host-router.d.ts.map +1 -0
  386. package/data/build/dist/features/host-router.js.map +1 -0
  387. package/data/build/dist/features/index.d.ts.map +1 -0
  388. package/data/build/dist/features/index.js.map +1 -0
  389. package/data/build/dist/features/registry.d.ts.map +1 -0
  390. package/data/build/dist/features/registry.js.map +1 -0
  391. package/data/build/dist/features/resource-scope/index.d.ts.map +1 -0
  392. package/data/build/dist/features/resource-scope/index.js.map +1 -0
  393. package/data/build/dist/host/auth-session.d.ts.map +1 -0
  394. package/data/build/dist/host/auth-session.js.map +1 -0
  395. package/data/build/dist/host/browser-text.d.ts +30 -0
  396. package/data/build/dist/host/browser-text.d.ts.map +1 -0
  397. package/data/build/dist/host/browser-text.js +105 -0
  398. package/data/build/dist/host/browser-text.js.map +1 -0
  399. package/data/build/dist/host/cli-adapters/attachment-utils.d.ts +14 -0
  400. package/data/build/dist/host/cli-adapters/attachment-utils.d.ts.map +1 -0
  401. package/data/build/dist/host/cli-adapters/attachment-utils.js +78 -0
  402. package/data/build/dist/host/cli-adapters/attachment-utils.js.map +1 -0
  403. package/data/build/dist/host/cli-adapters/claude-driver.d.ts +28 -2
  404. package/data/build/dist/host/cli-adapters/claude-driver.d.ts.map +1 -0
  405. package/data/build/dist/host/cli-adapters/claude-driver.js +78 -5
  406. package/data/build/dist/host/cli-adapters/claude-driver.js.map +1 -0
  407. package/data/build/dist/host/cli-adapters/claude-model-options.d.ts.map +1 -0
  408. package/data/build/dist/host/cli-adapters/claude-model-options.js +22 -9
  409. package/data/build/dist/host/cli-adapters/claude-model-options.js.map +1 -0
  410. package/data/build/dist/host/cli-adapters/codex-driver.d.ts +10 -0
  411. package/data/build/dist/host/cli-adapters/codex-driver.d.ts.map +1 -0
  412. package/data/build/dist/host/cli-adapters/codex-driver.js +352 -49
  413. package/data/build/dist/host/cli-adapters/codex-driver.js.map +1 -0
  414. package/data/build/dist/host/cli-adapters/command-code-driver.d.ts +24 -2
  415. package/data/build/dist/host/cli-adapters/command-code-driver.d.ts.map +1 -0
  416. package/data/build/dist/host/cli-adapters/command-code-driver.js +296 -34
  417. package/data/build/dist/host/cli-adapters/command-code-driver.js.map +1 -0
  418. package/data/build/dist/host/cli-adapters/command-code-subscription.d.ts.map +1 -0
  419. package/data/build/dist/host/cli-adapters/command-code-subscription.js.map +1 -0
  420. package/data/build/dist/host/cli-adapters/delegate-dispatch.d.ts +47 -0
  421. package/data/build/dist/host/cli-adapters/delegate-dispatch.d.ts.map +1 -0
  422. package/data/build/dist/host/cli-adapters/delegate-dispatch.js +158 -0
  423. package/data/build/dist/host/cli-adapters/delegate-dispatch.js.map +1 -0
  424. package/data/build/dist/host/cli-adapters/desktop-app-runtime.d.ts +32 -0
  425. package/data/build/dist/host/cli-adapters/desktop-app-runtime.d.ts.map +1 -0
  426. package/data/build/dist/host/cli-adapters/desktop-app-runtime.js +121 -0
  427. package/data/build/dist/host/cli-adapters/desktop-app-runtime.js.map +1 -0
  428. package/data/build/dist/host/cli-adapters/driver.d.ts.map +1 -0
  429. package/data/build/dist/host/cli-adapters/driver.js.map +1 -0
  430. package/data/build/dist/host/cli-adapters/dsh-message-projector.d.ts.map +1 -0
  431. package/data/build/dist/host/cli-adapters/dsh-message-projector.js +5 -4
  432. package/data/build/dist/host/cli-adapters/dsh-message-projector.js.map +1 -0
  433. package/data/build/dist/host/cli-adapters/dsh-tool-history.d.ts.map +1 -0
  434. package/data/build/dist/host/cli-adapters/dsh-tool-history.js +49 -1
  435. package/data/build/dist/host/cli-adapters/dsh-tool-history.js.map +1 -0
  436. package/data/build/dist/host/cli-adapters/dsh-virtual-providers.d.ts +16 -0
  437. package/data/build/dist/host/cli-adapters/dsh-virtual-providers.d.ts.map +1 -0
  438. package/data/build/dist/host/cli-adapters/dsh-virtual-providers.js +73 -0
  439. package/data/build/dist/host/cli-adapters/dsh-virtual-providers.js.map +1 -0
  440. package/data/build/dist/host/cli-adapters/feature.d.ts.map +1 -0
  441. package/data/build/dist/host/cli-adapters/feature.js +348 -19
  442. package/data/build/dist/host/cli-adapters/feature.js.map +1 -0
  443. package/data/build/dist/host/cli-adapters/gemini-driver.d.ts.map +1 -0
  444. package/data/build/dist/host/cli-adapters/gemini-driver.js +27 -8
  445. package/data/build/dist/host/cli-adapters/gemini-driver.js.map +1 -0
  446. package/data/build/dist/host/cli-adapters/grok-driver.d.ts.map +1 -0
  447. package/data/build/dist/host/cli-adapters/grok-driver.js +27 -9
  448. package/data/build/dist/host/cli-adapters/grok-driver.js.map +1 -0
  449. package/data/build/dist/host/cli-adapters/http-sse-client.d.ts.map +1 -0
  450. package/data/build/dist/host/cli-adapters/http-sse-client.js.map +1 -0
  451. package/data/build/dist/host/cli-adapters/interaction-events.d.ts.map +1 -0
  452. package/data/build/dist/host/cli-adapters/interaction-events.js.map +1 -0
  453. package/data/build/dist/host/cli-adapters/json-rpc-process.d.ts +22 -6
  454. package/data/build/dist/host/cli-adapters/json-rpc-process.d.ts.map +1 -0
  455. package/data/build/dist/host/cli-adapters/json-rpc-process.js +118 -21
  456. package/data/build/dist/host/cli-adapters/json-rpc-process.js.map +1 -0
  457. package/data/build/dist/host/cli-adapters/kimi-driver.d.ts.map +1 -0
  458. package/data/build/dist/host/cli-adapters/kimi-driver.js +33 -7
  459. package/data/build/dist/host/cli-adapters/kimi-driver.js.map +1 -0
  460. package/data/build/dist/host/cli-adapters/legacy-session-adapter.d.ts +11 -2
  461. package/data/build/dist/host/cli-adapters/legacy-session-adapter.d.ts.map +1 -0
  462. package/data/build/dist/host/cli-adapters/legacy-session-adapter.js +15 -6
  463. package/data/build/dist/host/cli-adapters/legacy-session-adapter.js.map +1 -0
  464. package/data/build/dist/host/cli-adapters/legacy-session-settings.d.ts.map +1 -0
  465. package/data/build/dist/host/cli-adapters/legacy-session-settings.js.map +1 -0
  466. package/data/build/dist/host/cli-adapters/mcode-catalog.d.ts +23 -0
  467. package/data/build/dist/host/cli-adapters/mcode-catalog.d.ts.map +1 -0
  468. package/data/build/dist/host/cli-adapters/mcode-catalog.js +120 -0
  469. package/data/build/dist/host/cli-adapters/mcode-catalog.js.map +1 -0
  470. package/data/build/dist/host/cli-adapters/mcode-driver.d.ts +56 -0
  471. package/data/build/dist/host/cli-adapters/mcode-driver.d.ts.map +1 -0
  472. package/data/build/dist/host/cli-adapters/mcode-driver.js +544 -0
  473. package/data/build/dist/host/cli-adapters/mcode-driver.js.map +1 -0
  474. package/data/build/dist/host/cli-adapters/model-catalog.d.ts +30 -5
  475. package/data/build/dist/host/cli-adapters/model-catalog.d.ts.map +1 -0
  476. package/data/build/dist/host/cli-adapters/model-catalog.js +83 -8
  477. package/data/build/dist/host/cli-adapters/model-catalog.js.map +1 -0
  478. package/data/build/dist/host/cli-adapters/native-subagent-dispatch.d.ts +51 -0
  479. package/data/build/dist/host/cli-adapters/native-subagent-dispatch.d.ts.map +1 -0
  480. package/data/build/dist/host/cli-adapters/native-subagent-dispatch.js +193 -0
  481. package/data/build/dist/host/cli-adapters/native-subagent-dispatch.js.map +1 -0
  482. package/data/build/dist/host/cli-adapters/native-subagent-holder.d.ts +4 -0
  483. package/data/build/dist/host/cli-adapters/native-subagent-holder.d.ts.map +1 -0
  484. package/data/build/dist/host/cli-adapters/native-subagent-holder.js +4 -0
  485. package/data/build/dist/host/cli-adapters/native-subagent-holder.js.map +1 -0
  486. package/data/build/dist/host/cli-adapters/native-team-proxy.d.ts.map +1 -0
  487. package/data/build/dist/host/cli-adapters/native-team-proxy.js +18 -15
  488. package/data/build/dist/host/cli-adapters/native-team-proxy.js.map +1 -0
  489. package/data/build/dist/host/cli-adapters/native-team-subagent.d.ts +45 -0
  490. package/data/build/dist/host/cli-adapters/native-team-subagent.d.ts.map +1 -0
  491. package/data/build/dist/host/cli-adapters/native-team-subagent.js +107 -0
  492. package/data/build/dist/host/cli-adapters/native-team-subagent.js.map +1 -0
  493. package/data/build/dist/host/cli-adapters/official-provider-subscription.d.ts.map +1 -0
  494. package/data/build/dist/host/cli-adapters/official-provider-subscription.js.map +1 -0
  495. package/data/build/dist/host/cli-adapters/opencode-driver.d.ts.map +1 -0
  496. package/data/build/dist/host/cli-adapters/opencode-driver.js +20 -4
  497. package/data/build/dist/host/cli-adapters/opencode-driver.js.map +1 -0
  498. package/data/build/dist/host/cli-adapters/pi-driver.d.ts.map +1 -0
  499. package/data/build/dist/host/cli-adapters/pi-driver.js +30 -8
  500. package/data/build/dist/host/cli-adapters/pi-driver.js.map +1 -0
  501. package/data/build/dist/host/cli-adapters/process-utils.d.ts.map +1 -0
  502. package/data/build/dist/host/cli-adapters/process-utils.js.map +1 -0
  503. package/data/build/dist/host/cli-adapters/provider-registry.d.ts.map +1 -0
  504. package/data/build/dist/host/cli-adapters/provider-registry.js.map +1 -0
  505. package/data/build/dist/host/cli-adapters/provider-subscription.d.ts +8 -1
  506. package/data/build/dist/host/cli-adapters/provider-subscription.d.ts.map +1 -0
  507. package/data/build/dist/host/cli-adapters/provider-subscription.js +98 -2
  508. package/data/build/dist/host/cli-adapters/provider-subscription.js.map +1 -0
  509. package/data/build/dist/host/cli-adapters/registry-holder.d.ts +4 -0
  510. package/data/build/dist/host/cli-adapters/registry-holder.d.ts.map +1 -0
  511. package/data/build/dist/host/cli-adapters/registry-holder.js +9 -0
  512. package/data/build/dist/host/cli-adapters/registry-holder.js.map +1 -0
  513. package/data/build/dist/host/cli-adapters/registry.d.ts +13 -0
  514. package/data/build/dist/host/cli-adapters/registry.d.ts.map +1 -0
  515. package/data/build/dist/host/cli-adapters/registry.js +37 -0
  516. package/data/build/dist/host/cli-adapters/registry.js.map +1 -0
  517. package/data/build/dist/host/cli-adapters/rpc-driver-utils.d.ts.map +1 -0
  518. package/data/build/dist/host/cli-adapters/rpc-driver-utils.js.map +1 -0
  519. package/data/build/dist/host/cli-adapters/session-probe.d.ts.map +1 -0
  520. package/data/build/dist/host/cli-adapters/session-probe.js.map +1 -0
  521. package/data/build/dist/host/cli-adapters/session-store.d.ts +6 -1
  522. package/data/build/dist/host/cli-adapters/session-store.d.ts.map +1 -0
  523. package/data/build/dist/host/cli-adapters/session-store.js +42 -4
  524. package/data/build/dist/host/cli-adapters/session-store.js.map +1 -0
  525. package/data/build/dist/host/cli-adapters/standard-stream-driver.d.ts +2 -0
  526. package/data/build/dist/host/cli-adapters/standard-stream-driver.d.ts.map +1 -0
  527. package/data/build/dist/host/cli-adapters/standard-stream-driver.js +30 -4
  528. package/data/build/dist/host/cli-adapters/standard-stream-driver.js.map +1 -0
  529. package/data/build/dist/host/cli-adapters/stream-normalizer.d.ts.map +1 -0
  530. package/data/build/dist/host/cli-adapters/stream-normalizer.js.map +1 -0
  531. package/data/build/dist/host/cli-adapters/subagent-tool.d.ts +5 -0
  532. package/data/build/dist/host/cli-adapters/subagent-tool.d.ts.map +1 -0
  533. package/data/build/dist/host/cli-adapters/subagent-tool.js +66 -0
  534. package/data/build/dist/host/cli-adapters/subagent-tool.js.map +1 -0
  535. package/data/build/dist/host/cli-adapters/tool-observation.d.ts.map +1 -0
  536. package/data/build/dist/host/cli-adapters/tool-observation.js.map +1 -0
  537. package/data/build/dist/host/cli-adapters/zcode-driver.d.ts +57 -0
  538. package/data/build/dist/host/cli-adapters/zcode-driver.d.ts.map +1 -0
  539. package/data/build/dist/host/cli-adapters/zcode-driver.js +843 -0
  540. package/data/build/dist/host/cli-adapters/zcode-driver.js.map +1 -0
  541. package/data/build/dist/host/cli-adapters/zcode-subscription.d.ts +28 -0
  542. package/data/build/dist/host/cli-adapters/zcode-subscription.d.ts.map +1 -0
  543. package/data/build/dist/host/cli-adapters/zcode-subscription.js +212 -0
  544. package/data/build/dist/host/cli-adapters/zcode-subscription.js.map +1 -0
  545. package/data/build/dist/host/cli-bridge/bridge-holder.d.ts +27 -0
  546. package/data/build/dist/host/cli-bridge/bridge-holder.d.ts.map +1 -0
  547. package/data/build/dist/host/cli-bridge/bridge-holder.js +51 -0
  548. package/data/build/dist/host/cli-bridge/bridge-holder.js.map +1 -0
  549. package/data/build/dist/host/cli-bridge/bridge-server.d.ts +34 -0
  550. package/data/build/dist/host/cli-bridge/bridge-server.d.ts.map +1 -0
  551. package/data/build/dist/host/cli-bridge/bridge-server.js +135 -0
  552. package/data/build/dist/host/cli-bridge/bridge-server.js.map +1 -0
  553. package/data/build/dist/host/cli-bridge/command-code-mod.d.ts +25 -0
  554. package/data/build/dist/host/cli-bridge/command-code-mod.d.ts.map +1 -0
  555. package/data/build/dist/host/cli-bridge/command-code-mod.js +60 -0
  556. package/data/build/dist/host/cli-bridge/command-code-mod.js.map +1 -0
  557. package/data/build/dist/host/cli-bridge/dispatch.d.ts +19 -0
  558. package/data/build/dist/host/cli-bridge/dispatch.d.ts.map +1 -0
  559. package/data/build/dist/host/cli-bridge/dispatch.js +90 -0
  560. package/data/build/dist/host/cli-bridge/dispatch.js.map +1 -0
  561. package/data/build/dist/host/cli-bridge/injections.d.ts +28 -0
  562. package/data/build/dist/host/cli-bridge/injections.d.ts.map +1 -0
  563. package/data/build/dist/host/cli-bridge/injections.js +131 -0
  564. package/data/build/dist/host/cli-bridge/injections.js.map +1 -0
  565. package/data/build/dist/host/cli-bridge/mcp-stdio-entry.d.ts +8 -0
  566. package/data/build/dist/host/cli-bridge/mcp-stdio-entry.d.ts.map +1 -0
  567. package/data/build/dist/host/cli-bridge/mcp-stdio-entry.js +151 -0
  568. package/data/build/dist/host/cli-bridge/mcp-stdio-entry.js.map +1 -0
  569. package/data/build/dist/host/control-api-client.d.ts.map +1 -0
  570. package/data/build/dist/host/control-api-client.js.map +1 -0
  571. package/data/build/dist/host/credential-store.d.ts.map +1 -0
  572. package/data/build/dist/host/credential-store.js.map +1 -0
  573. package/data/build/dist/host/debug.d.ts.map +1 -0
  574. package/data/build/dist/host/debug.js.map +1 -0
  575. package/data/build/dist/host/dsh-device-runtime.d.ts.map +1 -0
  576. package/data/build/dist/host/dsh-device-runtime.js.map +1 -0
  577. package/data/build/dist/host/dsh-gateway-feature.d.ts.map +1 -0
  578. package/data/build/dist/host/dsh-gateway-feature.js.map +1 -0
  579. package/data/build/dist/host/dsh-runtime-version.d.ts.map +1 -0
  580. package/data/build/dist/host/dsh-runtime-version.js.map +1 -0
  581. package/data/build/dist/host/features/auth.d.ts.map +1 -0
  582. package/data/build/dist/host/features/auth.js.map +1 -0
  583. package/data/build/dist/host/features/debug.d.ts.map +1 -0
  584. package/data/build/dist/host/features/debug.js.map +1 -0
  585. package/data/build/dist/host/features/file-management.d.ts.map +1 -0
  586. package/data/build/dist/host/features/file-management.js.map +1 -0
  587. package/data/build/dist/host/features/git-management.d.ts.map +1 -0
  588. package/data/build/dist/host/features/git-management.js +97 -10
  589. package/data/build/dist/host/features/git-management.js.map +1 -0
  590. package/data/build/dist/host/features/host-status.d.ts.map +1 -0
  591. package/data/build/dist/host/features/host-status.js.map +1 -0
  592. package/data/build/dist/host/features/index.d.ts.map +1 -0
  593. package/data/build/dist/host/features/index.js.map +1 -0
  594. package/data/build/dist/host/features/lan-access-dsh.d.ts.map +1 -0
  595. package/data/build/dist/host/features/lan-access-dsh.js +34 -1
  596. package/data/build/dist/host/features/lan-access-dsh.js.map +1 -0
  597. package/data/build/dist/host/features/peer-host.d.ts.map +1 -0
  598. package/data/build/dist/host/features/peer-host.js +341 -20
  599. package/data/build/dist/host/features/peer-host.js.map +1 -0
  600. package/data/build/dist/host/features/terminal-process.d.ts.map +1 -0
  601. package/data/build/dist/host/features/terminal-process.js.map +1 -0
  602. package/data/build/dist/host/features/terminal-status.d.ts.map +1 -0
  603. package/data/build/dist/host/features/terminal-status.js.map +1 -0
  604. package/data/build/dist/host/features/types.d.ts +3 -0
  605. package/data/build/dist/host/features/types.d.ts.map +1 -0
  606. package/data/build/dist/host/features/types.js.map +1 -0
  607. package/data/build/dist/host/host-router.d.ts.map +1 -0
  608. package/data/build/dist/host/host-router.js.map +1 -0
  609. package/data/build/dist/host/index-injection.d.ts +15 -0
  610. package/data/build/dist/host/index-injection.d.ts.map +1 -0
  611. package/data/build/dist/host/index-injection.js +45 -0
  612. package/data/build/dist/host/index-injection.js.map +1 -0
  613. package/data/build/dist/host/index.d.ts +12 -2
  614. package/data/build/dist/host/index.d.ts.map +1 -0
  615. package/data/build/dist/host/index.js +75 -3
  616. package/data/build/dist/host/index.js.map +1 -0
  617. package/data/build/dist/host/lan-access-dsh.d.ts +93 -2
  618. package/data/build/dist/host/lan-access-dsh.d.ts.map +1 -0
  619. package/data/build/dist/host/lan-access-dsh.js +438 -27
  620. package/data/build/dist/host/lan-access-dsh.js.map +1 -0
  621. package/data/build/dist/host/login-attempt-guard.d.ts +55 -0
  622. package/data/build/dist/host/login-attempt-guard.d.ts.map +1 -0
  623. package/data/build/dist/host/login-attempt-guard.js +201 -0
  624. package/data/build/dist/host/login-attempt-guard.js.map +1 -0
  625. package/data/build/dist/host/modules/peer-host/aggregated-host-transport.d.ts +146 -0
  626. package/data/build/dist/host/modules/peer-host/aggregated-host-transport.d.ts.map +1 -0
  627. package/data/build/dist/host/modules/peer-host/aggregated-host-transport.js +322 -0
  628. package/data/build/dist/host/modules/peer-host/aggregated-host-transport.js.map +1 -0
  629. package/data/build/dist/host/modules/peer-host/dsh-native-summary-source.d.ts +8 -0
  630. package/data/build/dist/host/modules/peer-host/dsh-native-summary-source.d.ts.map +1 -0
  631. package/data/build/dist/host/modules/peer-host/dsh-native-summary-source.js +120 -0
  632. package/data/build/dist/host/modules/peer-host/dsh-native-summary-source.js.map +1 -0
  633. package/data/build/dist/host/modules/peer-host/host-api-proxy-service.d.ts +25 -0
  634. package/data/build/dist/host/modules/peer-host/host-api-proxy-service.d.ts.map +1 -0
  635. package/data/build/dist/host/modules/peer-host/host-api-proxy-service.js +26 -3
  636. package/data/build/dist/host/modules/peer-host/host-api-proxy-service.js.map +1 -0
  637. package/data/build/dist/host/modules/peer-host/host-ws-connector.d.ts.map +1 -0
  638. package/data/build/dist/host/modules/peer-host/host-ws-connector.js.map +1 -0
  639. package/data/build/dist/host/modules/peer-host/host-ws-proxy-service.d.ts.map +1 -0
  640. package/data/build/dist/host/modules/peer-host/host-ws-proxy-service.js.map +1 -0
  641. package/data/build/dist/host/modules/peer-host/peer-host-aggregate-service.d.ts +10 -0
  642. package/data/build/dist/host/modules/peer-host/peer-host-aggregate-service.d.ts.map +1 -0
  643. package/data/build/dist/host/modules/peer-host/peer-host-aggregate-service.js +27 -12
  644. package/data/build/dist/host/modules/peer-host/peer-host-aggregate-service.js.map +1 -0
  645. package/data/build/dist/host/modules/peer-host/peer-host-diagnostics.d.ts.map +1 -0
  646. package/data/build/dist/host/modules/peer-host/peer-host-diagnostics.js +3 -0
  647. package/data/build/dist/host/modules/peer-host/peer-host-diagnostics.js.map +1 -0
  648. package/data/build/dist/host/modules/peer-host/peer-host-handshake.d.ts +2 -0
  649. package/data/build/dist/host/modules/peer-host/peer-host-handshake.d.ts.map +1 -0
  650. package/data/build/dist/host/modules/peer-host/peer-host-handshake.js +6 -0
  651. package/data/build/dist/host/modules/peer-host/peer-host-handshake.js.map +1 -0
  652. package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.d.ts +17 -0
  653. package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.d.ts.map +1 -0
  654. package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.js +52 -0
  655. package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.js.map +1 -0
  656. package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.d.ts +25 -0
  657. package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.d.ts.map +1 -0
  658. package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.js +187 -0
  659. package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.js.map +1 -0
  660. package/data/build/dist/host/modules/peer-host/peer-host-native-transport.d.ts +30 -0
  661. package/data/build/dist/host/modules/peer-host/peer-host-native-transport.d.ts.map +1 -0
  662. package/data/build/dist/host/modules/peer-host/peer-host-native-transport.js +120 -0
  663. package/data/build/dist/host/modules/peer-host/peer-host-native-transport.js.map +1 -0
  664. package/data/build/dist/host/modules/peer-host/peer-host-relay.d.ts.map +1 -0
  665. package/data/build/dist/host/modules/peer-host/peer-host-relay.js.map +1 -0
  666. package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.d.ts +60 -0
  667. package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.d.ts.map +1 -0
  668. package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.js +181 -0
  669. package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.js.map +1 -0
  670. package/data/build/dist/host/modules/peer-host/peer-host-session.d.ts +20 -1
  671. package/data/build/dist/host/modules/peer-host/peer-host-session.d.ts.map +1 -0
  672. package/data/build/dist/host/modules/peer-host/peer-host-session.js +118 -37
  673. package/data/build/dist/host/modules/peer-host/peer-host-session.js.map +1 -0
  674. package/data/build/dist/host/modules/peer-host/peer-host-store.d.ts +21 -0
  675. package/data/build/dist/host/modules/peer-host/peer-host-store.d.ts.map +1 -0
  676. package/data/build/dist/host/modules/peer-host/peer-host-store.js +65 -3
  677. package/data/build/dist/host/modules/peer-host/peer-host-store.js.map +1 -0
  678. package/data/build/dist/host/modules/peer-host/peer-host-virtual-registry.d.ts +49 -0
  679. package/data/build/dist/host/modules/peer-host/peer-host-virtual-registry.d.ts.map +1 -0
  680. package/data/build/dist/host/modules/peer-host/peer-host-virtual-registry.js +174 -0
  681. package/data/build/dist/host/modules/peer-host/peer-host-virtual-registry.js.map +1 -0
  682. package/data/build/dist/host/modules/peer-host/peer-host-ws-gateway.d.ts.map +1 -0
  683. package/data/build/dist/host/modules/peer-host/peer-host-ws-gateway.js.map +1 -0
  684. package/data/build/dist/host/modules/pwa/index.d.ts +7 -0
  685. package/data/build/dist/host/modules/pwa/index.d.ts.map +1 -0
  686. package/data/build/dist/host/modules/pwa/index.js +7 -0
  687. package/data/build/dist/host/modules/pwa/index.js.map +1 -0
  688. package/data/build/dist/host/modules/pwa/pwa-assets.d.ts +50 -0
  689. package/data/build/dist/host/modules/pwa/pwa-assets.d.ts.map +1 -0
  690. package/data/build/dist/host/modules/pwa/pwa-assets.js +182 -0
  691. package/data/build/dist/host/modules/pwa/pwa-assets.js.map +1 -0
  692. package/data/build/dist/host/modules/pwa/pwa-client-script.d.ts +10 -0
  693. package/data/build/dist/host/modules/pwa/pwa-client-script.d.ts.map +1 -0
  694. package/data/build/dist/host/modules/pwa/pwa-client-script.js +38 -0
  695. package/data/build/dist/host/modules/pwa/pwa-client-script.js.map +1 -0
  696. package/data/build/dist/host/modules/pwa/pwa-icons.d.ts +10 -0
  697. package/data/build/dist/host/modules/pwa/pwa-icons.d.ts.map +1 -0
  698. package/data/build/dist/host/modules/pwa/pwa-icons.js +185 -0
  699. package/data/build/dist/host/modules/pwa/pwa-icons.js.map +1 -0
  700. package/data/build/dist/host/modules/pwa/pwa-push.d.ts +74 -0
  701. package/data/build/dist/host/modules/pwa/pwa-push.d.ts.map +1 -0
  702. package/data/build/dist/host/modules/pwa/pwa-push.js +288 -0
  703. package/data/build/dist/host/modules/pwa/pwa-push.js.map +1 -0
  704. package/data/build/dist/host/modules/pwa/pwa-session-notifications.d.ts +17 -0
  705. package/data/build/dist/host/modules/pwa/pwa-session-notifications.d.ts.map +1 -0
  706. package/data/build/dist/host/modules/pwa/pwa-session-notifications.js +82 -0
  707. package/data/build/dist/host/modules/pwa/pwa-session-notifications.js.map +1 -0
  708. package/data/build/dist/host/modules/pwa/pwa-viewport.d.ts +12 -0
  709. package/data/build/dist/host/modules/pwa/pwa-viewport.d.ts.map +1 -0
  710. package/data/build/dist/host/modules/pwa/pwa-viewport.js +47 -0
  711. package/data/build/dist/host/modules/pwa/pwa-viewport.js.map +1 -0
  712. package/data/build/dist/host/native-session-bridge.d.ts.map +1 -0
  713. package/data/build/dist/host/native-session-bridge.js +86 -55
  714. package/data/build/dist/host/native-session-bridge.js.map +1 -0
  715. package/data/build/dist/host/relay-tunnel-runtime.d.ts +33 -0
  716. package/data/build/dist/host/relay-tunnel-runtime.d.ts.map +1 -0
  717. package/data/build/dist/host/relay-tunnel-runtime.js +71 -19
  718. package/data/build/dist/host/relay-tunnel-runtime.js.map +1 -0
  719. package/data/build/dist/host/remote-web-runtime.d.ts.map +1 -0
  720. package/data/build/dist/host/remote-web-runtime.js.map +1 -0
  721. package/data/build/dist/host/rpc-table.d.ts.map +1 -0
  722. package/data/build/dist/host/rpc-table.js.map +1 -0
  723. package/data/build/dist/host/rpc.d.ts.map +1 -0
  724. package/data/build/dist/host/rpc.js +21 -6
  725. package/data/build/dist/host/rpc.js.map +1 -0
  726. package/data/build/dist/host/session-changes.d.ts.map +1 -0
  727. package/data/build/dist/host/session-changes.js.map +1 -0
  728. package/data/build/dist/host/session-migration-repair.d.ts.map +1 -0
  729. package/data/build/dist/host/session-migration-repair.js.map +1 -0
  730. package/data/build/dist/host/settings.d.ts.map +1 -0
  731. package/data/build/dist/host/settings.js +33 -1
  732. package/data/build/dist/host/settings.js.map +1 -0
  733. package/data/build/dist/host/terminal/attachment-registry.d.ts.map +1 -0
  734. package/data/build/dist/host/terminal/attachment-registry.js.map +1 -0
  735. package/data/build/dist/host/terminal/backends/conpty-backend.d.ts.map +1 -0
  736. package/data/build/dist/host/terminal/backends/conpty-backend.js.map +1 -0
  737. package/data/build/dist/host/terminal/backends/local-pty-backend.d.ts.map +1 -0
  738. package/data/build/dist/host/terminal/backends/local-pty-backend.js.map +1 -0
  739. package/data/build/dist/host/terminal/backends/tmux-backend.d.ts.map +1 -0
  740. package/data/build/dist/host/terminal/backends/tmux-backend.js.map +1 -0
  741. package/data/build/dist/host/terminal/broker/conpty-broker-client.d.ts.map +1 -0
  742. package/data/build/dist/host/terminal/broker/conpty-broker-client.js.map +1 -0
  743. package/data/build/dist/host/terminal/broker/conpty-broker-process.d.ts.map +1 -0
  744. package/data/build/dist/host/terminal/broker/conpty-broker-process.js.map +1 -0
  745. package/data/build/dist/host/terminal/broker/conpty-broker-protocol.d.ts.map +1 -0
  746. package/data/build/dist/host/terminal/broker/conpty-broker-protocol.js.map +1 -0
  747. package/data/build/dist/host/terminal/controller-factory.d.ts.map +1 -0
  748. package/data/build/dist/host/terminal/controller-factory.js.map +1 -0
  749. package/data/build/dist/host/terminal/index.d.ts.map +1 -0
  750. package/data/build/dist/host/terminal/index.js.map +1 -0
  751. package/data/build/dist/host/terminal/runtime-adapter.d.ts.map +1 -0
  752. package/data/build/dist/host/terminal/runtime-adapter.js.map +1 -0
  753. package/data/build/dist/host/terminal/runtime-manager.d.ts.map +1 -0
  754. package/data/build/dist/host/terminal/runtime-manager.js.map +1 -0
  755. package/data/build/dist/host/terminal/shell-detection.d.ts.map +1 -0
  756. package/data/build/dist/host/terminal/shell-detection.js.map +1 -0
  757. package/data/build/dist/host/terminal/startup.d.ts.map +1 -0
  758. package/data/build/dist/host/terminal/startup.js.map +1 -0
  759. package/data/build/dist/host/terminal/terminal-controller.d.ts.map +1 -0
  760. package/data/build/dist/host/terminal/terminal-controller.js.map +1 -0
  761. package/data/build/dist/host/terminal/terminal-process-service.d.ts.map +1 -0
  762. package/data/build/dist/host/terminal/terminal-process-service.js.map +1 -0
  763. package/data/build/dist/host/terminal/terminal-process-store.d.ts.map +1 -0
  764. package/data/build/dist/host/terminal/terminal-process-store.js.map +1 -0
  765. package/data/build/dist/host/terminal/terminal-service.d.ts.map +1 -0
  766. package/data/build/dist/host/terminal/terminal-service.js.map +1 -0
  767. package/data/build/dist/host/terminal/terminal-store.d.ts.map +1 -0
  768. package/data/build/dist/host/terminal/terminal-store.js.map +1 -0
  769. package/data/build/dist/index.d.ts +2 -2
  770. package/data/build/dist/index.d.ts.map +1 -0
  771. package/data/build/dist/index.js +2 -2
  772. package/data/build/dist/index.js.map +1 -0
  773. package/data/build/dist/shared/contracts/auth.d.ts.map +1 -0
  774. package/data/build/dist/shared/contracts/auth.js.map +1 -0
  775. package/data/build/dist/shared/contracts/cli-adapter.d.ts +35 -0
  776. package/data/build/dist/shared/contracts/cli-adapter.d.ts.map +1 -0
  777. package/data/build/dist/shared/contracts/cli-adapter.js.map +1 -0
  778. package/data/build/dist/shared/contracts/command-code.d.ts.map +1 -0
  779. package/data/build/dist/shared/contracts/command-code.js.map +1 -0
  780. package/data/build/dist/shared/contracts/config.d.ts +89 -0
  781. package/data/build/dist/shared/contracts/config.d.ts.map +1 -0
  782. package/data/build/dist/shared/contracts/config.js +92 -0
  783. package/data/build/dist/shared/contracts/config.js.map +1 -0
  784. package/data/build/dist/shared/contracts/debug-config.d.ts.map +1 -0
  785. package/data/build/dist/shared/contracts/debug-config.js.map +1 -0
  786. package/data/build/dist/shared/contracts/debug.d.ts.map +1 -0
  787. package/data/build/dist/shared/contracts/debug.js.map +1 -0
  788. package/data/build/dist/shared/contracts/dsh-device.d.ts.map +1 -0
  789. package/data/build/dist/shared/contracts/dsh-device.js.map +1 -0
  790. package/data/build/dist/shared/contracts/errors.d.ts +2 -2
  791. package/data/build/dist/shared/contracts/errors.d.ts.map +1 -0
  792. package/data/build/dist/shared/contracts/errors.js.map +1 -0
  793. package/data/build/dist/shared/contracts/feature.d.ts.map +1 -0
  794. package/data/build/dist/shared/contracts/feature.js.map +1 -0
  795. package/data/build/dist/shared/contracts/file-management.d.ts.map +1 -0
  796. package/data/build/dist/shared/contracts/file-management.js.map +1 -0
  797. package/data/build/dist/shared/contracts/git.d.ts +15 -1
  798. package/data/build/dist/shared/contracts/git.d.ts.map +1 -0
  799. package/data/build/dist/shared/contracts/git.js.map +1 -0
  800. package/data/build/dist/shared/contracts/host-status.d.ts.map +1 -0
  801. package/data/build/dist/shared/contracts/host-status.js.map +1 -0
  802. package/data/build/dist/shared/contracts/lan-access-dsh.d.ts +23 -0
  803. package/data/build/dist/shared/contracts/lan-access-dsh.d.ts.map +1 -0
  804. package/data/build/dist/shared/contracts/lan-access-dsh.js.map +1 -0
  805. package/data/build/dist/shared/contracts/peer-host.d.ts +160 -1
  806. package/data/build/dist/shared/contracts/peer-host.d.ts.map +1 -0
  807. package/data/build/dist/shared/contracts/peer-host.js +73 -0
  808. package/data/build/dist/shared/contracts/peer-host.js.map +1 -0
  809. package/data/build/dist/shared/contracts/signaling.d.ts.map +1 -0
  810. package/data/build/dist/shared/contracts/signaling.js.map +1 -0
  811. package/data/build/dist/shared/contracts/subscription.d.ts +15 -0
  812. package/data/build/dist/shared/contracts/subscription.d.ts.map +1 -0
  813. package/data/build/dist/shared/contracts/subscription.js.map +1 -0
  814. package/data/build/dist/shared/contracts/terminal-process.d.ts.map +1 -0
  815. package/data/build/dist/shared/contracts/terminal-process.js.map +1 -0
  816. package/data/build/dist/shared/contracts/terminal.d.ts.map +1 -0
  817. package/data/build/dist/shared/contracts/terminal.js.map +1 -0
  818. package/data/build/dist/shared/contracts/transport.d.ts.map +1 -0
  819. package/data/build/dist/shared/contracts/transport.js.map +1 -0
  820. package/data/build/dist/shared/contracts/version.d.ts +14 -6
  821. package/data/build/dist/shared/contracts/version.d.ts.map +1 -0
  822. package/data/build/dist/shared/contracts/version.js +23 -8
  823. package/data/build/dist/shared/contracts/version.js.map +1 -0
  824. package/data/build/dist/shared/debug.d.ts.map +1 -0
  825. package/data/build/dist/shared/debug.js.map +1 -0
  826. package/data/build/dist/shared/index.d.ts +6 -6
  827. package/data/build/dist/shared/index.d.ts.map +1 -0
  828. package/data/build/dist/shared/index.js +3 -3
  829. package/data/build/dist/shared/index.js.map +1 -0
  830. package/data/build/dist/transport/carrier.d.ts.map +1 -0
  831. package/data/build/dist/transport/carrier.js.map +1 -0
  832. package/data/build/dist/transport/debug.d.ts.map +1 -0
  833. package/data/build/dist/transport/debug.js +2 -0
  834. package/data/build/dist/transport/debug.js.map +1 -0
  835. package/data/build/dist/transport/dsh-envelope.d.ts.map +1 -0
  836. package/data/build/dist/transport/dsh-envelope.js.map +1 -0
  837. package/data/build/dist/transport/dsh-gateway.d.ts.map +1 -0
  838. package/data/build/dist/transport/dsh-gateway.js.map +1 -0
  839. package/data/build/dist/transport/dsh-session.d.ts.map +1 -0
  840. package/data/build/dist/transport/dsh-session.js.map +1 -0
  841. package/data/build/dist/transport/dsh-transport.d.ts.map +1 -0
  842. package/data/build/dist/transport/dsh-transport.js.map +1 -0
  843. package/data/build/dist/transport/frame.d.ts.map +1 -0
  844. package/data/build/dist/transport/frame.js.map +1 -0
  845. package/data/build/dist/transport/index.d.ts +1 -1
  846. package/data/build/dist/transport/index.d.ts.map +1 -0
  847. package/data/build/dist/transport/index.js +1 -1
  848. package/data/build/dist/transport/index.js.map +1 -0
  849. package/data/build/dist/transport/multiplexer.d.ts.map +1 -0
  850. package/data/build/dist/transport/multiplexer.js.map +1 -0
  851. package/data/build/dist/transport/webrtc-client.d.ts +8 -0
  852. package/data/build/dist/transport/webrtc-client.d.ts.map +1 -0
  853. package/data/build/dist/transport/webrtc-client.js +135 -9
  854. package/data/build/dist/transport/webrtc-client.js.map +1 -0
  855. package/data/build/dist/transport/webrtc-host.d.ts.map +1 -0
  856. package/data/build/dist/transport/webrtc-host.js +5 -1
  857. package/data/build/dist/transport/webrtc-host.js.map +1 -0
  858. package/data/build/dist/typert.host.d.ts.map +1 -0
  859. package/data/build/dist/typert.host.js.map +1 -0
  860. package/data/build/dist/typert.remote-client.d.ts.map +1 -0
  861. package/data/build/dist/typert.remote-client.js.map +1 -0
  862. package/package.json +36 -19
  863. package/profile/README.md +18 -5
  864. package/profile/package.json +3 -3
  865. package/profile/scripts/check-dsh-install.mjs +100 -9
  866. package/profile/version.json +3 -3
  867. package/scripts/check-dsh-install.mjs +98 -17
  868. package/version.json +3 -3
  869. package/data/build/dist/client/host-navigation.d.ts +0 -29
  870. package/data/build/dist/client/host-navigation.js +0 -29
  871. package/data/build/dist/client/peer-host-native-session-ui.d.ts +0 -60
  872. package/data/build/dist/client/peer-host-native-session-ui.js +0 -372
@@ -2,15 +2,29 @@ import { createElement, useEffect, useRef, useState } from 'react';
2
2
  import { isSubscriptionUsageFresh } from '../shared/contracts/subscription.js';
3
3
  import { DEFAULT_SUBSCRIPTION_USAGE_SETTINGS } from '../shared/contracts/config.js';
4
4
  import { callCliRpc } from './cli-catalog.js';
5
+ import { resolveCodingNsTranslator, useCodingNsTranslator } from './locale.js';
5
6
  import { providerIconUrl } from './provider-icons.js';
6
7
  import { subscribeSessionAdapters } from './session-adapter-cache.js';
7
- import { dshPopupSurfaceStyle, dshThemeColor } from './theme.js';
8
+ import { dshPopupSurfaceStyle, dshSettingsButtonStyle, dshSettingsPrimaryButtonStyle, dshThemeColor } from './theme.js';
9
+ import { useDismissOnOutsidePointer } from './popup-dismiss.js';
8
10
  const SUBSCRIPTION_STYLE_ID = 'codingns4dsh-subscription-responsive-style';
11
+ /**
12
+ * 没有 locale 服务时的静态兜底:命名空间绑定固定指向内置中文词典,
13
+ * 且不产生任何语言变更通知。生产路径由 registerSubscriptionSlot 注入 DSH locale。
14
+ */
15
+ const FALLBACK_LOCALE = {
16
+ bind: () => resolveCodingNsTranslator(undefined),
17
+ getSnapshot: () => ({ revision: 0 }),
18
+ subscribe: () => () => { },
19
+ register: () => () => { },
20
+ };
9
21
  /**
10
22
  * 进程内用量结果缓存:同一适配器/提供商在刷新间隔内直接复用上次结果,
11
23
  * 避免每次进入会话或切回同一 Agent 都请求上游;null 结果不缓存,便于刚登录后立刻重试。
12
24
  */
13
25
  const subscriptionUsageCache = new Map();
26
+ /** 图标重置按钮的悬停/按下/聚焦/禁用只能由注入样式表表达,内联样式无法命中伪类。 */
27
+ const RESET_BUTTON_CSS = '.codingns4dsh-subscription-reset{display:inline-flex;align-items:center;justify-content:center;flex:none;width:26px;height:26px;padding:0;border:1px solid var(--dsw-alias-border-l2,#d9d9d9);border-radius:50%;background:transparent;color:var(--dsw-alias-label-secondary,GrayText);cursor:pointer;transition:background .15s ease,color .15s ease}.codingns4dsh-subscription-reset:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover,rgba(127,127,127,.08));color:var(--dsw-alias-label-primary,CanvasText)}.codingns4dsh-subscription-reset:active:not(:disabled){background:var(--dsw-alias-interactive-bg-active,rgba(127,127,127,.14))}.codingns4dsh-subscription-reset:focus-visible{outline:none;box-shadow:0 0 0 var(--dsw-focus-ring-width,2px) var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary,#1677ff))}.codingns4dsh-subscription-reset:disabled{opacity:.4;cursor:not-allowed}@media (prefers-reduced-motion: reduce){.codingns4dsh-subscription-reset{transition:none}}';
14
28
  /** 移动端订阅入口只保留图标,完整数据仍可在点击后的弹层中查看。 */
15
29
  function installSubscriptionStyles() {
16
30
  if (typeof document === 'undefined' || document.querySelector(`style[data-plugin-css="${SUBSCRIPTION_STYLE_ID}"]`) !== null)
@@ -18,21 +32,28 @@ function installSubscriptionStyles() {
18
32
  const style = document.createElement('style');
19
33
  style.dataset.plugin = 'codingns4dsh';
20
34
  style.dataset.pluginCss = SUBSCRIPTION_STYLE_ID;
21
- style.textContent = '@media (max-width: 768px){.codingns4dsh-subscription-trigger{gap:0!important;padding-left:4px!important;padding-right:4px!important}.codingns4dsh-subscription-label,.codingns4dsh-subscription-value{display:none!important}.codingns4dsh-subscription-popover{position:fixed!important;left:12px!important;right:12px!important;bottom:48px!important;width:auto!important;min-width:0!important;max-width:none!important;max-height:calc(100vh - 72px)!important;overflow:auto!important}}';
35
+ style.textContent = '@media (max-width: 768px){.codingns4dsh-subscription-trigger{gap:0!important;padding-left:4px!important;padding-right:4px!important}.codingns4dsh-subscription-label,.codingns4dsh-subscription-value{display:none!important}.codingns4dsh-subscription-popover{position:fixed!important;left:12px!important;right:12px!important;bottom:48px!important;width:auto!important;min-width:0!important;max-width:none!important;max-height:calc(100vh - 72px)!important;overflow:auto!important}}' + RESET_BUTTON_CSS;
22
36
  document.head.appendChild(style);
23
37
  }
24
38
  /** 在 DSH 原生步骤统计左侧显示当前 Agent 的订阅余量。 */
25
- export function registerSubscriptionSlot(slots, rpc, getRefreshIntervalMins) {
39
+ export function registerSubscriptionSlot(slots, rpc, getRefreshIntervalMins, locale) {
26
40
  installSubscriptionStyles();
41
+ const t = resolveCodingNsTranslator(locale);
27
42
  return slots.inject('conversation.composer.dock', () => slots.register({
28
43
  name: 'conversation.composer.dock',
29
44
  id: 'codingns4dsh-subscription',
30
45
  order: -20,
31
- label: 'Agent 订阅余量',
32
- inject: (sessionId) => ({ rpc, sessionId, ...(getRefreshIntervalMins === undefined ? {} : { getRefreshIntervalMins }) }),
46
+ label: t('usage.slotLabel'),
47
+ inject: (sessionId) => ({
48
+ rpc,
49
+ sessionId,
50
+ locale: locale ?? FALLBACK_LOCALE,
51
+ ...(getRefreshIntervalMins === undefined ? {} : { getRefreshIntervalMins }),
52
+ }),
33
53
  }, CommandCodeSubscriptionSlot));
34
54
  }
35
55
  function CommandCodeSubscriptionSlot(props) {
56
+ const t = useCodingNsTranslator(props.locale ?? FALLBACK_LOCALE);
36
57
  const [usage, setUsage] = useState(null);
37
58
  const [adapterId, setAdapterId] = useState(null);
38
59
  const [providerId, setProviderId] = useState(null);
@@ -41,6 +62,13 @@ function CommandCodeSubscriptionSlot(props) {
41
62
  const [loading, setLoading] = useState(false);
42
63
  const [clock, setClock] = useState(() => Date.now());
43
64
  const rootRef = useRef(null);
65
+ const resetDialogRef = useRef(null);
66
+ // 重置成功后的刷新不能重跑加载 effect,否则 usage 会被清空导致底部入口闪断。
67
+ const refreshRef = useRef(null);
68
+ const [resetOpen, setResetOpen] = useState(false);
69
+ const [resetPending, setResetPending] = useState(false);
70
+ const [resetResult, setResetResult] = useState(null);
71
+ const [resetError, setResetError] = useState(null);
44
72
  const modelSelectionRevision = props.useSession?.((value) => JSON.stringify(value.modelSelection));
45
73
  // 切换 Agent 可能只改变 Host 侧会话配置,DSH 会话快照不一定会更新;订阅适配器
46
74
  // 缓存的变更才能真正触发重新查询,否则底部会一直显示上一个 Agent 的订阅数据。
@@ -54,6 +82,10 @@ function CommandCodeSubscriptionSlot(props) {
54
82
  setAdapterId(null);
55
83
  setProviderId(null);
56
84
  setOpen(false);
85
+ setResetOpen(false);
86
+ setResetPending(false);
87
+ setResetResult(null);
88
+ setResetError(null);
57
89
  return;
58
90
  }
59
91
  let active = true;
@@ -62,6 +94,10 @@ function CommandCodeSubscriptionSlot(props) {
62
94
  setAdapterId(null);
63
95
  setProviderId(null);
64
96
  setOpen(false);
97
+ setResetOpen(false);
98
+ setResetPending(false);
99
+ setResetResult(null);
100
+ setResetError(null);
65
101
  const refresh = async () => {
66
102
  setLoading(true);
67
103
  try {
@@ -109,11 +145,13 @@ function CommandCodeSubscriptionSlot(props) {
109
145
  setLoading(false);
110
146
  }
111
147
  };
148
+ refreshRef.current = refresh;
112
149
  void refresh();
113
150
  const intervalMins = props.getRefreshIntervalMins?.() ?? DEFAULT_SUBSCRIPTION_USAGE_SETTINGS.refreshIntervalMins;
114
151
  const timer = intervalMins > 0 ? globalThis.setInterval(() => { void refresh(); }, intervalMins * 60_000) : undefined;
115
152
  return () => {
116
153
  active = false;
154
+ refreshRef.current = null;
117
155
  if (timer !== undefined)
118
156
  globalThis.clearInterval(timer);
119
157
  };
@@ -124,25 +162,40 @@ function CommandCodeSubscriptionSlot(props) {
124
162
  const timer = globalThis.setInterval(() => setClock(Date.now()), 60_000);
125
163
  return () => globalThis.clearInterval(timer);
126
164
  }, [eligible, usage]);
127
- useEffect(() => {
128
- if (!open)
165
+ const closeResetDialog = () => {
166
+ if (resetPending)
129
167
  return;
130
- const closeOnPointerDown = (event) => {
131
- const target = event.target;
132
- if (target instanceof Node && !rootRef.current?.contains(target))
133
- setOpen(false);
134
- };
135
- const closeOnEscape = (event) => {
136
- if (event.key === 'Escape')
137
- setOpen(false);
138
- };
139
- document.addEventListener('pointerdown', closeOnPointerDown);
140
- document.addEventListener('keydown', closeOnEscape);
141
- return () => {
142
- document.removeEventListener('pointerdown', closeOnPointerDown);
143
- document.removeEventListener('keydown', closeOnEscape);
144
- };
145
- }, [open]);
168
+ setResetOpen(false);
169
+ setResetResult(null);
170
+ setResetError(null);
171
+ };
172
+ const confirmReset = () => {
173
+ if (resetPending || adapterId === null)
174
+ return;
175
+ const cacheKey = `${adapterId}|${providerId ?? ''}`;
176
+ setResetPending(true);
177
+ setResetError(null);
178
+ void (async () => {
179
+ try {
180
+ const result = await callCliRpc(props.rpc, 'subscription/reset', {
181
+ adapterId,
182
+ ...(providerId === null ? {} : { providerId }),
183
+ });
184
+ setResetResult(result.outcome);
185
+ // 重置改变了窗口与次数,必须绕过进程内缓存重新读取。
186
+ subscriptionUsageCache.delete(cacheKey);
187
+ await refreshRef.current?.();
188
+ }
189
+ catch (error) {
190
+ setResetError(error instanceof Error ? error.message : '');
191
+ }
192
+ finally {
193
+ setResetPending(false);
194
+ }
195
+ })();
196
+ };
197
+ useDismissOnOutsidePointer(rootRef, open, () => setOpen(false));
198
+ useDismissOnOutsidePointer(resetDialogRef, resetOpen && !resetPending, closeResetDialog);
146
199
  // 未拿到真实订阅数据时不占用底部栏空间;加载状态不能伪装成订阅存在。
147
200
  if (!eligible || usage === null || (usage.sub2api === undefined && usage.deepseek === undefined && usage.providerBalance === undefined && resolveDisplayWindow(usage) === null))
148
201
  return null;
@@ -151,26 +204,48 @@ function CommandCodeSubscriptionSlot(props) {
151
204
  const providerBalance = usage.providerBalance;
152
205
  const displayWindow = sub2api === undefined && deepseek === undefined && providerBalance === undefined ? resolveDisplayWindow(usage) : null;
153
206
  const remaining = displayWindow?.remainingPercent ?? null;
154
- const resetLabel = displayWindow === null ? null : formatCountdown(displayWindow.resetsAt, clock);
155
- const providerName = subscriptionProviderName(adapterId, providerId, usage);
207
+ const resetLabel = displayWindow === null ? null : formatCountdown(displayWindow.resetsAt, t, clock);
208
+ const providerName = subscriptionProviderName(adapterId, providerId, usage, t);
156
209
  const deepseekBalance = deepseek === undefined ? null : selectDeepseekBalance(deepseek);
157
- const providerLogoSource = usage.provider?.logoDataUrl ?? (isRemoteWebContext() ? '' : usage.provider?.logoUrl ?? '');
158
- const deepseekIconSource = providerLogoSource || (providerBalance === undefined ? providerIconUrl('dsh') : '');
210
+ const providerBalanceRemaining = providerBalance === undefined ? null : balancePercent(providerBalance.remaining, providerBalance.total);
211
+ const providerBalancePlan = providerBalance?.planName?.trim() || null;
212
+ // 官方余额读取器可能没有可直连的 Provider Logo;此时统一回退到当前
213
+ // 适配器注册的内置图标,ZCode 等 Agent 不再显示空 src 的破图。
214
+ const adapterIconSource = providerIconUrl(adapterId ?? 'dsh') ?? '';
215
+ const providerLogoSource = usage.provider?.logoDataUrl?.trim() || (!isRemoteWebContext() ? usage.provider?.logoUrl?.trim() : '') || adapterIconSource;
216
+ const deepseekIconSource = providerLogoSource;
159
217
  const label = sub2api === undefined && deepseek === undefined && providerBalance === undefined
160
- ? `${providerName} 订阅余量 ${formatPercent(remaining ?? 0)}%`
218
+ ? t('usage.remainingLabel', { provider: providerName, percent: formatPercent(remaining ?? 0) })
161
219
  : sub2api !== undefined
162
- ? `${providerName} 上游余额 ${formatSub2ApiMoney(sub2api.balance, sub2api.unit)}`
220
+ ? t('usage.upstreamBalanceLabel', { provider: providerName, amount: formatSub2ApiMoney(sub2api.balance, sub2api.unit) })
163
221
  : deepseek !== undefined
164
- ? `${providerName} 余额 ${deepseekBalance === null ? '不可用' : formatDeepseekMoney(deepseekBalance.totalBalance, deepseekBalance.currency)}`
165
- : `${providerName} 余量 ${formatProviderBalance(providerBalance)}`;
222
+ ? t('usage.balanceLabel', { provider: providerName, amount: deepseekBalance === null ? t('usage.unavailable') : formatDeepseekMoney(deepseekBalance.totalBalance, deepseekBalance.currency) })
223
+ : providerBalancePlan === null
224
+ ? t('usage.providerBalanceLabel', { provider: providerName, amount: formatProviderBalance(providerBalance) })
225
+ : t('usage.providerBalancePlanLabel', { provider: providerName, plan: providerBalancePlan, amount: formatProviderBalance(providerBalance) });
166
226
  const logoSource = providerLogoSource || (sub2api === undefined ? '' : (sub2api.logoDataUrl ?? (isRemoteWebContext() ? '' : sub2api.logoUrl)));
227
+ const resetCredits = usage.resetCredits;
228
+ // 重置只对官方 Codex 订阅开放;第三方上游走 sub2api 面板,不会带出重置券。
229
+ const resetRequest = adapterId === 'codex' && resetCredits !== null
230
+ ? {
231
+ enabled: resetCredits.availableCount > 0 && !resetPending,
232
+ onRequest: () => {
233
+ setOpen(false);
234
+ setResetResult(null);
235
+ setResetError(null);
236
+ setResetOpen(true);
237
+ },
238
+ }
239
+ : null;
167
240
  const triggerContent = sub2api === undefined && deepseek === undefined && providerBalance === undefined
168
241
  ? createElement('span', { 'aria-hidden': true, style: progressRingStyle() }, createElement('span', { style: { ...progressRingVisualStyle, background: progressRingVisualBackground(remaining === null ? 0 : remaining / 100, false) } }, createElement('span', { style: progressRingValueStyle }, createElement('span', undefined, formatRingPercentage(remaining ?? 0)), createElement('span', { style: progressRingSuffixStyle }, '%'))))
169
242
  : sub2api !== undefined
170
243
  ? createElement('span', { 'aria-hidden': true, style: sub2apiIdentityStyle }, createElement('img', { src: logoSource || providerIconUrl(adapterId ?? 'dsh') || '', alt: '', width: 20, height: 20, style: sub2apiLogoStyle }), createElement('span', { className: 'codingns4dsh-subscription-value' }, formatSub2ApiMoney(sub2api.balance, sub2api.unit)))
171
244
  : deepseek !== undefined
172
- ? createElement('span', { 'aria-hidden': true, style: deepseekBalanceIdentityStyle }, deepseekIconSource !== undefined && createElement('img', { src: deepseekIconSource, alt: '', width: 18, height: 18, style: deepseekLogoStyle }), createElement('span', { className: 'codingns4dsh-subscription-value', style: deepseekBalanceStyle }, deepseekBalance === null ? '--' : formatDeepseekMoney(deepseekBalance.totalBalance, deepseekBalance.currency)))
173
- : createElement('span', { 'aria-hidden': true, style: deepseekBalanceIdentityStyle }, deepseekIconSource !== undefined && createElement('img', { src: deepseekIconSource, alt: '', width: 18, height: 18, style: deepseekLogoStyle }), createElement('span', { className: 'codingns4dsh-subscription-value', style: deepseekBalanceStyle }, formatProviderBalance(providerBalance)));
245
+ ? createElement('span', { 'aria-hidden': true, style: deepseekBalanceIdentityStyle }, deepseekIconSource !== '' && createElement('img', { src: deepseekIconSource, alt: '', width: 18, height: 18, style: deepseekLogoStyle }), createElement('span', { className: 'codingns4dsh-subscription-value', style: deepseekBalanceStyle }, deepseekBalance === null ? '--' : formatDeepseekMoney(deepseekBalance.totalBalance, deepseekBalance.currency)))
246
+ : providerBalanceRemaining !== null
247
+ ? createRemainingRing(providerBalanceRemaining)
248
+ : createElement('span', { 'aria-hidden': true, style: deepseekBalanceIdentityStyle }, deepseekIconSource !== '' && createElement('img', { src: deepseekIconSource, alt: '', width: 18, height: 18, style: deepseekLogoStyle }), createElement('span', { className: 'codingns4dsh-subscription-value', style: deepseekBalanceStyle }, formatProviderBalance(providerBalance)));
174
249
  return createElement('div', { ref: rootRef, style: subscriptionRootStyle }, createElement('button', {
175
250
  type: 'button',
176
251
  className: 'codingns4dsh-subscription-trigger',
@@ -180,48 +255,166 @@ function CommandCodeSubscriptionSlot(props) {
180
255
  'aria-expanded': open,
181
256
  style: subscriptionTriggerStyle,
182
257
  }, triggerContent, createElement('span', { className: 'codingns4dsh-subscription-label', style: subscriptionLabelStyle }, sub2api === undefined && deepseek === undefined && providerBalance === undefined
183
- ? (resetLabel ?? '订阅余量')
184
- : sub2api !== undefined ? `今日 ${formatSub2ApiMoney(sub2api.today.cost, sub2api.unit)}` : deepseek !== undefined ? '账户余额' : '官方余量')), open && createElement(SubscriptionPopover, { usage, providerName }));
258
+ ? (resetLabel ?? t('usage.subscriptionRemaining'))
259
+ : sub2api !== undefined ? t('usage.todayCostShort', { amount: formatSub2ApiMoney(sub2api.today.cost, sub2api.unit) }) : deepseek !== undefined ? t('usage.accountBalance') : providerBalancePlan ?? t('usage.officialRemaining'))), open && createElement(SubscriptionPopover, { usage, providerName, t, nowMs: clock, reset: resetRequest }), resetOpen && createElement(ResetConfirmDialog, {
260
+ count: resetCredits?.availableCount ?? 0,
261
+ pending: resetPending,
262
+ result: resetResult,
263
+ error: resetError,
264
+ t,
265
+ onCancel: closeResetDialog,
266
+ onConfirm: confirmReset,
267
+ onClose: closeResetDialog,
268
+ dialogRef: resetDialogRef,
269
+ }));
185
270
  }
186
- function SubscriptionPopover({ usage, providerName }) {
271
+ function SubscriptionPopover({ usage, providerName, t, nowMs, reset }) {
187
272
  if (usage.sub2api !== undefined)
188
- return createElement(Sub2ApiPopover, { usage: usage.sub2api, providerName });
273
+ return createElement(Sub2ApiPopover, { usage: usage.sub2api, providerName, t });
189
274
  if (usage.deepseek !== undefined)
190
- return createElement(DeepseekPopover, { usage: usage.deepseek, providerName });
275
+ return createElement(DeepseekPopover, { usage: usage.deepseek, providerName, t });
191
276
  if (usage.providerBalance !== undefined)
192
- return createElement(ProviderBalancePopover, { usage: usage.providerBalance, providerName });
277
+ return createElement(ProviderBalancePopover, { usage: usage.providerBalance, providerName, t, nowMs });
193
278
  const windows = [
194
- { id: 'primary', label: formatSubscriptionWindowLabel(usage.primary, '5 小时额度'), window: usage.primary },
195
- { id: 'secondary', label: formatSubscriptionWindowLabel(usage.secondary, '周额度'), window: usage.secondary },
196
- { id: 'monthly', label: formatSubscriptionWindowLabel(usage.monthly, '月额度'), window: usage.monthly },
279
+ { id: 'primary', label: formatSubscriptionWindowLabel(usage.primary, t('usage.windowFiveHour'), t), window: usage.primary },
280
+ { id: 'secondary', label: formatSubscriptionWindowLabel(usage.secondary, t('usage.windowWeekly'), t), window: usage.secondary },
281
+ { id: 'monthly', label: formatSubscriptionWindowLabel(usage.monthly, t('usage.windowMonthly'), t), window: usage.monthly },
197
282
  ];
198
- return createElement('div', { className: 'codingns4dsh-subscription-popover', role: 'dialog', 'aria-label': `${providerName} 订阅使用情况`, style: subscriptionPopoverStyle }, createElement('div', { style: popoverHeadingStyle }, createElement('strong', undefined, `${providerName} 订阅`), usage.planType && createElement('span', { style: { color: dshThemeColor.labelTertiary } }, formatPlanType(usage.planType))), ...windows.map(({ id, label, window }) => window === null ? null : createElement('section', { key: id, style: windowStyle }, createElement('div', { style: windowHeadingStyle }, createElement('span', undefined, label), createElement('span', undefined, `${formatPercent(window.remainingPercent)}%`)), createElement('div', { role: 'progressbar', 'aria-label': `${label}剩余 ${formatPercent(window.remainingPercent)}%`, 'aria-valuemin': 0, 'aria-valuemax': 100, 'aria-valuenow': window.remainingPercent, style: barStyle }, createElement('span', { style: { ...barFillStyle, width: `${window.remainingPercent}%` } })), window.resetsAt !== null && createElement('div', { style: resetStyle }, `重置于 ${formatCountdown(window.resetsAt)}`))));
283
+ const credits = usage.credits ?? null;
284
+ const creditText = credits === null
285
+ ? null
286
+ : credits.unlimited
287
+ ? t('usage.creditUnlimited')
288
+ : credits.balance !== null
289
+ ? formatCreditBalance(credits.balance)
290
+ : credits.hasCredits ? '0.00' : '--';
291
+ const expiries = usage.resetCredits === null
292
+ ? []
293
+ : usage.resetCredits.credits
294
+ .map((credit) => credit.expiresAt)
295
+ .filter((expiry) => expiry !== null)
296
+ .sort((left, right) => left - right);
297
+ return createElement('div', { className: 'codingns4dsh-subscription-popover', role: 'dialog', 'aria-label': t('usage.popoverSubscriptionUsage', { provider: providerName }), style: subscriptionPopoverStyle }, createElement('div', { style: popoverHeadingStyle }, createElement('strong', undefined, t('usage.popoverSubscriptionTitle', { provider: providerName })), usage.planType && createElement('span', { style: { color: dshThemeColor.labelTertiary } }, formatPlanType(usage.planType))), ...windows.map(({ id, label, window }) => window === null ? null : createElement('section', { key: id, style: windowStyle }, createElement('div', { style: windowHeadingStyle }, createElement('span', undefined, label), createElement('span', undefined, `${formatPercent(window.remainingPercent)}%`)), createElement('div', { role: 'progressbar', 'aria-label': t('usage.windowRemaining', { label, percent: formatPercent(window.remainingPercent) }), 'aria-valuemin': 0, 'aria-valuemax': 100, 'aria-valuenow': window.remainingPercent, style: barStyle }, createElement('span', { style: { ...barFillStyle, width: `${window.remainingPercent}%` } })), window.resetsAt !== null && createElement('div', { style: resetStyle }, t('usage.resetsIn', { time: formatCountdown(window.resetsAt, t) })))), (creditText !== null || usage.resetCredits !== null) && createElement('section', { style: resetCreditsSectionStyle }, creditText !== null && createElement('div', { style: resetCreditsRowStyle }, createElement('span', undefined, t('usage.creditBalanceLabel')), createElement('span', { style: resetCreditsValueStyle }, creditText)), usage.resetCredits !== null && createElement('div', { style: resetCreditsRowStyle }, createElement('span', undefined, t('usage.resetCreditsLabel')), createElement('span', { style: resetCreditsValueGroupStyle }, createElement('span', { style: resetCreditsValueStyle }, t('usage.resetCreditsCount', { count: usage.resetCredits.availableCount })), reset !== null && createElement('button', {
298
+ type: 'button',
299
+ className: 'codingns4dsh-subscription-reset',
300
+ disabled: !reset.enabled,
301
+ onClick: reset.onRequest,
302
+ title: reset.enabled ? t('usage.resetTooltipReady') : t('usage.resetTooltipNone'),
303
+ 'aria-label': t('usage.resetButton'),
304
+ }, createElement(ResetIcon, undefined)))), expiries.slice(0, 3).map((expiry, index) => createElement('div', { key: `${expiry}-${index}`, style: resetCreditsExpiryStyle }, t('usage.resetCreditsExpiresAt', { time: formatResetExpiry(expiry, t, nowMs) }))), expiries.length > 3 && createElement('div', { style: resetCreditsExpiryStyle }, t('usage.resetCreditsMore', { count: expiries.length - 3 }))));
305
+ }
306
+ /** 重置按钮复用会话变更视图的刷新字形,保持插件内图标语言一致。 */
307
+ function ResetIcon() {
308
+ return createElement('svg', { width: 14, height: 14, viewBox: '0 0 20 20', fill: 'none', 'aria-hidden': true }, createElement('path', { d: 'M16 8.5A6.2 6.2 0 1 0 16.1 12', stroke: 'currentColor', strokeWidth: 1.6, strokeLinecap: 'round' }), createElement('path', { d: 'M16 4.5v4h-4', stroke: 'currentColor', strokeWidth: 1.6, strokeLinecap: 'round', strokeLinejoin: 'round' }));
309
+ }
310
+ function ResetConfirmDialog({ count, pending, result, error, t, onCancel, onConfirm, onClose, dialogRef }) {
311
+ const finished = result !== null || error !== null;
312
+ const message = pending
313
+ ? t('usage.resetDialogPending')
314
+ : result !== null
315
+ ? resetOutcomeMessage(result, t)
316
+ : error !== null && error.trim() !== ''
317
+ ? error
318
+ : t('usage.resetDialogBody', { count });
319
+ const messageColor = error !== null
320
+ ? dshThemeColor.error
321
+ : result === 'reset' || result === 'alreadyRedeemed' ? dshThemeColor.success : dshThemeColor.labelTertiary;
322
+ return createElement('div', { className: 'codingns4dsh-subscription-reset-overlay', role: 'presentation', style: resetDialogOverlayStyle }, createElement('div', {
323
+ ref: dialogRef,
324
+ role: 'dialog',
325
+ 'aria-modal': true,
326
+ 'aria-label': t('usage.resetDialogTitle'),
327
+ style: resetDialogStyle,
328
+ }, createElement('div', { style: { display: 'grid', gap: 4 } }, createElement('strong', { style: { fontSize: 14, lineHeight: 1.4 } }, t('usage.resetDialogTitle')), createElement('span', { style: { color: messageColor, fontSize: 12, lineHeight: '18px' } }, message)), createElement('div', { style: { display: 'flex', justifyContent: 'flex-end', gap: 8, paddingTop: 4 } }, finished
329
+ ? createElement('button', { type: 'button', onClick: onClose, style: dshSettingsPrimaryButtonStyle }, t('usage.resetDialogClose'))
330
+ : createElement('button', { type: 'button', disabled: pending, onClick: onCancel, style: dshSettingsButtonStyle, autoFocus: true }, t('usage.resetDialogCancel')), !finished && createElement('button', { type: 'button', disabled: pending, onClick: onConfirm, style: dshSettingsPrimaryButtonStyle }, t('usage.resetDialogConfirm')))));
331
+ }
332
+ function resetOutcomeMessage(outcome, t) {
333
+ switch (outcome) {
334
+ case 'reset': return t('usage.resetOutcomeReset');
335
+ case 'alreadyRedeemed': return t('usage.resetOutcomeAlreadyRedeemed');
336
+ case 'nothingToReset': return t('usage.resetOutcomeNothingToReset');
337
+ case 'noCredit': return t('usage.resetOutcomeNoCredit');
338
+ }
199
339
  }
200
340
  /** 根据服务端返回的窗口时长生成准确的额度标签,避免把七天窗口误显示成五小时。 */
201
- function formatSubscriptionWindowLabel(window, fallback) {
341
+ function formatSubscriptionWindowLabel(window, fallback, t) {
202
342
  const durationMins = window?.windowDurationMins;
203
343
  if (durationMins === null || durationMins === undefined || !Number.isFinite(durationMins) || durationMins <= 0)
204
344
  return fallback;
205
345
  if (durationMins % (24 * 60) === 0)
206
- return `${durationMins / (24 * 60)} 天额度`;
346
+ return t('usage.windowDays', { count: durationMins / (24 * 60) });
207
347
  if (durationMins % 60 === 0)
208
- return `${durationMins / 60} 小时额度`;
209
- return `${durationMins} 分钟额度`;
348
+ return t('usage.windowHours', { count: durationMins / 60 });
349
+ return t('usage.windowMinutes', { count: durationMins });
350
+ }
351
+ function ProviderBalancePopover({ usage, providerName, t, nowMs }) {
352
+ const models = summarizeProviderBalance(usage);
353
+ const overallPercent = balancePercent(usage.remaining, usage.total);
354
+ return createElement('div', { className: 'codingns4dsh-subscription-popover', role: 'dialog', 'aria-label': t('usage.officialRemainingPopover', { provider: providerName }), style: subscriptionPopoverStyle }, createElement('div', { style: popoverHeadingStyle }, createElement('span', { style: providerBalanceHeadingStyle }, createElement('strong', undefined, providerName), usage.planName?.trim() && createElement('span', { style: providerBalancePlanStyle }, usage.planName.trim())), createElement('span', { style: { color: dshThemeColor.labelTertiary } }, formatProviderBalance(usage))), overallPercent !== null && createElement(BalanceProgress, {
355
+ label: t('usage.officialRemainingPopover', { provider: providerName }),
356
+ percent: overallPercent,
357
+ value: `${formatProviderBalanceAmount(usage.remaining ?? 0, usage.unit)} / ${formatProviderBalanceAmount(usage.total ?? 0, usage.unit)}`,
358
+ style: overallBalanceStyle,
359
+ }), usage.used !== null && createElement('div', { style: balanceMetaStyle }, t('usage.usedShort', { amount: formatProviderBalanceAmount(usage.used, usage.unit) })), models.length === 0
360
+ ? createElement('div', { style: resetStyle }, t('usage.noMoreStats'))
361
+ : models.map((model) => createElement('section', { key: model.name, style: providerBalanceModelStyle }, createElement('div', { style: windowHeadingStyle }, createElement('span', undefined, model.name), createElement('span', undefined, model.total === null ? formatProviderBalanceAmount(model.remaining ?? 0, usage.unit) : `${formatProviderBalanceAmount(model.remaining ?? 0, usage.unit)} / ${formatProviderBalanceAmount(model.total, usage.unit)}`)), model.total !== null && model.remaining !== null && createElement(BalanceProgress, {
362
+ label: model.name,
363
+ percent: balancePercent(model.remaining, model.total) ?? 0,
364
+ value: '',
365
+ }), createElement('div', { style: balanceMetaStyle }, model.used === null ? null : createElement('span', undefined, t('usage.usedShort', { amount: formatProviderBalanceAmount(model.used, usage.unit) })), model.periodEnd === null ? null : createElement('span', undefined, t('usage.expiresIn', { time: formatExpiryCountdown(model.periodEnd, t, nowMs) }))))));
366
+ }
367
+ function BalanceProgress({ label, percent, value, style }) {
368
+ const normalized = Math.max(0, Math.min(100, percent));
369
+ return createElement('div', { style: style ?? providerBalanceProgressStyle }, createElement('div', { style: balanceProgressHeaderStyle }, createElement('span', { style: visuallyHiddenStyle }, label), value !== '' && createElement('span', { style: balanceProgressValueStyle }, value), createElement('span', { style: balanceProgressPercentStyle }, `${Math.round(normalized)}%`)), createElement('div', { role: 'progressbar', 'aria-label': label, 'aria-valuemin': 0, 'aria-valuemax': 100, 'aria-valuenow': normalized, style: providerBalanceBarStyle }, createElement('span', { style: { ...providerBalanceBarFillStyle, width: `${normalized}%` } })));
370
+ }
371
+ function summarizeProviderBalance(usage) {
372
+ const models = new Map();
373
+ for (const item of usage.details) {
374
+ const label = item.label.trim();
375
+ const matched = PROVIDER_DETAIL_SUFFIXES.find(({ suffix }) => label.endsWith(` ${suffix}`));
376
+ if (matched === undefined)
377
+ continue;
378
+ const name = label.slice(0, -(matched.suffix.length + 1)).trim();
379
+ if (name === '')
380
+ continue;
381
+ const model = models.get(name) ?? { name, remaining: null, used: null, total: null, periodEnd: null };
382
+ if (matched.kind === 'remaining')
383
+ model.remaining = typeof item.value === 'number' ? item.value : null;
384
+ else if (matched.kind === 'used')
385
+ model.used = typeof item.value === 'number' ? item.value : null;
386
+ else if (matched.kind === 'total')
387
+ model.total = typeof item.value === 'number' ? item.value : null;
388
+ else
389
+ model.periodEnd = typeof item.value === 'string' ? item.value : null;
390
+ models.set(name, model);
391
+ }
392
+ return [...models.values()];
210
393
  }
211
- function ProviderBalancePopover({ usage, providerName }) {
212
- return createElement('div', { className: 'codingns4dsh-subscription-popover', role: 'dialog', 'aria-label': `${providerName} 官方余量`, style: subscriptionPopoverStyle }, createElement('div', { style: popoverHeadingStyle }, createElement('strong', undefined, `${providerName} 官方余量`), createElement('span', { style: { color: dshThemeColor.labelTertiary } }, formatProviderBalance(usage))), usage.used !== null && usage.total !== null && createElement('div', { style: upstreamMetaStyle }, `已用 ${formatProviderBalanceValue(usage.used, usage.unit)} / ${formatProviderBalanceValue(usage.total, usage.unit)}`), usage.details.length === 0
213
- ? createElement('div', { style: resetStyle }, '暂无更多统计')
214
- : usage.details.map((item) => createElement('div', { key: item.label, style: deepseekBalanceDetailsStyle }, createElement('span', undefined, item.label), createElement('span', undefined, String(item.value)))));
394
+ const PROVIDER_DETAIL_SUFFIXES = [
395
+ { suffix: String.fromCodePoint(0x5269, 0x4f59), kind: 'remaining' },
396
+ { suffix: String.fromCodePoint(0x5df2, 0x7528), kind: 'used' },
397
+ { suffix: String.fromCodePoint(0x603b, 0x91cf), kind: 'total' },
398
+ { suffix: String.fromCodePoint(0x5468, 0x671f, 0x7ed3, 0x675f), kind: 'periodEnd' },
399
+ { suffix: 'remaining', kind: 'remaining' },
400
+ { suffix: 'used', kind: 'used' },
401
+ { suffix: 'total', kind: 'total' },
402
+ { suffix: 'period end', kind: 'periodEnd' },
403
+ ];
404
+ function balancePercent(remaining, total) {
405
+ if (remaining === null || total === null || !Number.isFinite(remaining) || !Number.isFinite(total) || total <= 0)
406
+ return null;
407
+ return Math.max(0, Math.min(100, remaining / total * 100));
215
408
  }
216
- function DeepseekPopover({ usage, providerName }) {
217
- return createElement('div', { className: 'codingns4dsh-subscription-popover', role: 'dialog', 'aria-label': `${providerName} 账户余额`, style: subscriptionPopoverStyle }, createElement('div', { style: popoverHeadingStyle }, createElement('strong', undefined, `${providerName} 账户余额`), createElement('span', { style: { color: usage.isAvailable === false ? dshThemeColor.error : dshThemeColor.labelTertiary } }, usage.isAvailable === false ? '不可用' : '可用')), usage.balances.map((balance) => createElement('section', { key: balance.currency, style: deepseekBalanceSectionStyle }, createElement('div', { style: windowHeadingStyle }, createElement('span', undefined, balance.currency), createElement('strong', undefined, formatDeepseekMoney(balance.totalBalance, balance.currency))), createElement('div', { style: deepseekBalanceDetailsStyle }, createElement('span', undefined, `赠送 ${formatDeepseekMoney(balance.grantedBalance, balance.currency)}`), createElement('span', undefined, `充值 ${formatDeepseekMoney(balance.toppedUpBalance, balance.currency)}`)))), createElement('div', { style: deepseekUnavailableStatsStyle }, '官方 DeepSeek API 当前只提供账户余额接口,暂无请求量、Token 或费用明细。'));
409
+ function DeepseekPopover({ usage, providerName, t }) {
410
+ return createElement('div', { className: 'codingns4dsh-subscription-popover', role: 'dialog', 'aria-label': t('usage.providerAccountBalance', { provider: providerName }), style: subscriptionPopoverStyle }, createElement('div', { style: popoverHeadingStyle }, createElement('strong', undefined, t('usage.providerAccountBalance', { provider: providerName })), createElement('span', { style: { color: usage.isAvailable === false ? dshThemeColor.error : dshThemeColor.labelTertiary } }, usage.isAvailable === false ? t('usage.unavailable') : t('usage.available'))), usage.balances.map((balance) => createElement('section', { key: balance.currency, style: deepseekBalanceSectionStyle }, createElement('div', { style: windowHeadingStyle }, createElement('span', undefined, balance.currency), createElement('strong', undefined, formatDeepseekMoney(balance.totalBalance, balance.currency))), createElement('div', { style: deepseekBalanceDetailsStyle }, createElement('span', undefined, t('usage.granted', { amount: formatDeepseekMoney(balance.grantedBalance, balance.currency) })), createElement('span', undefined, t('usage.toppedUp', { amount: formatDeepseekMoney(balance.toppedUpBalance, balance.currency) }))))), createElement('div', { style: deepseekUnavailableStatsStyle }, t('usage.deepseekApiNote')));
218
411
  }
219
- function Sub2ApiPopover({ usage, providerName }) {
220
- return createElement('div', { className: 'codingns4dsh-subscription-popover', role: 'dialog', 'aria-label': `${providerName} 上游用量`, style: subscriptionPopoverStyle }, createElement('div', { style: popoverHeadingStyle }, createElement('strong', undefined, `${providerName} 上游用量`), createElement('span', { style: { color: dshThemeColor.labelTertiary } }, formatSub2ApiMoney(usage.balance, usage.unit))), createElement('div', { style: upstreamMetaStyle }, createElement('span', { style: upstreamTypeStyle }, usage.upstreamType), usage.upstreamUrl === ''
221
- ? createElement('span', { style: upstreamMutedStyle }, '地址未提供')
222
- : createElement('a', { href: usage.upstreamUrl, target: '_blank', rel: 'noreferrer', title: usage.upstreamUrl, style: upstreamLinkStyle }, usage.upstreamUrl)), createElement('div', { style: sub2apiStatsGridStyle }, createSub2ApiStat('今日请求数', formatInteger(usage.today.requests)), createSub2ApiStat('今日 Token 用量', formatSub2ApiTokens(usage.today.totalTokens)), createSub2ApiStat('今日费用', formatSub2ApiMoney(usage.today.cost, usage.unit)), createSub2ApiStat('累计请求数', formatInteger(usage.total.requests)), createSub2ApiStat('累计 Token 用量', formatSub2ApiTokens(usage.total.totalTokens)), createSub2ApiStat('累计费用', formatSub2ApiMoney(usage.total.cost, usage.unit)), createSub2ApiStat('今日缓存命中率', formatSub2ApiPercent(usage.today.cacheHitRate)), createSub2ApiStat('累计缓存命中率', formatSub2ApiPercent(usage.total.cacheHitRate))), createElement('section', { style: sub2apiSectionStyle }, createElement('strong', { style: sub2apiSectionTitleStyle }, '按模型统计'), usage.models.length === 0
223
- ? createElement('div', { style: resetStyle }, '暂无按模型统计')
224
- : createElement('div', { style: sub2apiTableScrollStyle }, createElement('table', { style: sub2apiTableStyle }, createElement('thead', undefined, createElement('tr', undefined, createElement('th', { style: sub2apiThStyle }, '模型'), createElement('th', { style: sub2apiThStyle }, '请求'), createElement('th', { style: sub2apiThStyle }, 'Token'), createElement('th', { style: sub2apiThStyle }, '费用'), createElement('th', { style: sub2apiThStyle }, '缓存'))), createElement('tbody', undefined, ...usage.models.map((model) => createModelRow(model, usage.unit)))))));
412
+ function Sub2ApiPopover({ usage, providerName, t }) {
413
+ return createElement('div', { className: 'codingns4dsh-subscription-popover', role: 'dialog', 'aria-label': t('usage.upstreamUsageTitle', { provider: providerName }), style: subscriptionPopoverStyle }, createElement('div', { style: popoverHeadingStyle }, createElement('strong', undefined, t('usage.upstreamUsageTitle', { provider: providerName })), createElement('span', { style: { color: dshThemeColor.labelTertiary } }, formatSub2ApiMoney(usage.balance, usage.unit))), createElement('div', { style: upstreamMetaStyle }, createElement('span', { style: upstreamTypeStyle }, usage.upstreamType), usage.upstreamUrl === ''
414
+ ? createElement('span', { style: upstreamMutedStyle }, t('usage.addressMissing'))
415
+ : createElement('a', { href: usage.upstreamUrl, target: '_blank', rel: 'noreferrer', title: usage.upstreamUrl, style: upstreamLinkStyle }, usage.upstreamUrl)), createElement('div', { style: sub2apiStatsGridStyle }, createSub2ApiStat(t('usage.statTodayRequests'), formatInteger(usage.today.requests)), createSub2ApiStat(t('usage.statTodayTokens'), formatSub2ApiTokens(usage.today.totalTokens)), createSub2ApiStat(t('usage.statTodayCost'), formatSub2ApiMoney(usage.today.cost, usage.unit)), createSub2ApiStat(t('usage.statTotalRequests'), formatInteger(usage.total.requests)), createSub2ApiStat(t('usage.statTotalTokens'), formatSub2ApiTokens(usage.total.totalTokens)), createSub2ApiStat(t('usage.statTotalCost'), formatSub2ApiMoney(usage.total.cost, usage.unit)), createSub2ApiStat(t('usage.statTodayCacheHitRate'), formatSub2ApiPercent(usage.today.cacheHitRate)), createSub2ApiStat(t('usage.statTotalCacheHitRate'), formatSub2ApiPercent(usage.total.cacheHitRate))), createElement('section', { style: sub2apiSectionStyle }, createElement('strong', { style: sub2apiSectionTitleStyle }, t('usage.byModel')), usage.models.length === 0
416
+ ? createElement('div', { style: resetStyle }, t('usage.noModelStats'))
417
+ : createElement('div', { style: sub2apiTableScrollStyle }, createElement('table', { style: sub2apiTableStyle }, createElement('thead', undefined, createElement('tr', undefined, createElement('th', { style: sub2apiThStyle }, t('usage.colModel')), createElement('th', { style: sub2apiThStyle }, t('usage.colRequests')), createElement('th', { style: sub2apiThStyle }, t('usage.colToken')), createElement('th', { style: sub2apiThStyle }, t('usage.colCost')), createElement('th', { style: sub2apiThStyle }, t('usage.colCache')))), createElement('tbody', undefined, ...usage.models.map((model) => createModelRow(model, usage.unit)))))));
225
418
  }
226
419
  function createSub2ApiStat(label, value) {
227
420
  return createElement('div', { style: sub2apiStatStyle }, createElement('span', { style: sub2apiStatLabelStyle }, label), createElement('strong', undefined, value));
@@ -236,21 +429,21 @@ function selectDeepseekBalance(usage) {
236
429
  return usage.balances.find((balance) => balance.currency.toUpperCase() === 'USD') ?? usage.balances[0] ?? null;
237
430
  }
238
431
  function isSubscriptionAdapter(adapterId) {
239
- return adapterId === 'command-code' || adapterId === 'codex' || adapterId === 'claude-code' || adapterId === 'dsh' || adapterId === 'grok' || adapterId === 'kimi' || adapterId === 'opencode';
432
+ return adapterId === 'command-code' || adapterId === 'codex' || adapterId === 'claude-code' || adapterId === 'dsh' || adapterId === 'grok' || adapterId === 'kimi' || adapterId === 'opencode' || adapterId === 'zcode';
240
433
  }
241
434
  function isRemoteWebContext() {
242
435
  return globalThis.__CODINGNS4DSH_REMOTE_WEB_CONTEXT__ === true;
243
436
  }
244
- function subscriptionProviderName(adapterId, providerId, usage) {
437
+ function subscriptionProviderName(adapterId, providerId, usage, t) {
245
438
  if (usage.provider?.displayName)
246
439
  return usage.provider.displayName;
247
440
  if (adapterId === 'dsh' && providerId !== null) {
248
441
  if (/^(?:deepseek(?:-official)?|official-deepseek)$/iu.test(providerId))
249
- return 'DeepSeek 官方';
442
+ return t('usage.providerDeepseekOfficial');
250
443
  return formatProviderName(providerId);
251
444
  }
252
445
  if (adapterId === 'dsh' && usage.sub2api !== undefined)
253
- return `${usage.sub2api.upstreamType} 上游`;
446
+ return t('usage.providerUpstream', { name: usage.sub2api.upstreamType });
254
447
  switch (adapterId) {
255
448
  case 'command-code': return 'Command Code';
256
449
  case 'codex': return 'Codex';
@@ -259,6 +452,7 @@ function subscriptionProviderName(adapterId, providerId, usage) {
259
452
  case 'grok': return 'Grok';
260
453
  case 'kimi': return 'Kimi Code';
261
454
  case 'opencode': return 'OpenCode';
455
+ case 'zcode': return 'ZCode';
262
456
  default: return 'Agent';
263
457
  }
264
458
  }
@@ -288,18 +482,43 @@ function formatProviderBalance(usage) {
288
482
  return formatProviderBalanceValue(usage.remaining, usage.unit);
289
483
  }
290
484
  function formatProviderBalanceValue(value, unit) {
485
+ const normalized = unit?.trim().toUpperCase() ?? '';
486
+ const amount = formatProviderBalanceAmount(value, unit);
487
+ if (normalized === '%' || normalized === 'USD')
488
+ return amount;
489
+ return `${amount}${normalized === '' ? '' : ` ${normalized}`}`;
490
+ }
491
+ function formatProviderBalanceAmount(value, unit) {
291
492
  const normalized = unit?.trim().toUpperCase() ?? '';
292
493
  if (normalized === '%')
293
494
  return `${value.toFixed(0)}%`;
294
495
  if (normalized === 'USD')
295
496
  return `$${value.toFixed(2)}`;
296
- return `${value.toFixed(2)}${normalized === '' ? '' : ` ${normalized}`}`;
497
+ return isTokenUnit(normalized) ? formatCompactTokenCount(value) : value.toFixed(2);
498
+ }
499
+ function formatSub2ApiTokens(value) { return formatCompactTokenCount(value); }
500
+ function formatCompactTokenCount(value) {
501
+ if (!Number.isFinite(value))
502
+ return '--';
503
+ const absolute = Math.abs(value);
504
+ const format = (divisor, suffix) => {
505
+ const amount = value / divisor;
506
+ const rounded = Math.round(amount * 10) / 10;
507
+ return `${Number.isInteger(rounded) ? rounded.toFixed(0) : rounded.toFixed(1)}${suffix}`;
508
+ };
509
+ if (absolute >= 1_000_000_000)
510
+ return format(1_000_000_000, 'B');
511
+ if (absolute >= 1_000_000)
512
+ return format(1_000_000, 'M');
513
+ if (absolute >= 1_000)
514
+ return format(1_000, 'K');
515
+ return String(Math.round(value));
297
516
  }
298
- function formatSub2ApiTokens(value) { return new Intl.NumberFormat('zh-CN', { notation: 'compact', maximumFractionDigits: 1 }).format(value); }
517
+ function isTokenUnit(unit) { return /^(?:TOKENS?|TOKEN_COUNT)$/u.test(unit); }
299
518
  function formatSub2ApiPercent(value) { return `${Math.max(0, Math.min(100, value)).toFixed(1)}%`; }
300
519
  function formatInteger(value) { return new Intl.NumberFormat('zh-CN').format(Math.max(0, Math.round(value))); }
301
520
  function formatPlanType(value) { return value.replace(/^individual-/u, '').replace(/(^|-)([a-z])/gu, (_match, _separator, letter) => ` ${letter.toUpperCase()}`).trim(); }
302
- function formatCountdown(timestampSeconds, nowMs = Date.now()) {
521
+ function formatCountdown(timestampSeconds, t, nowMs = Date.now()) {
303
522
  if (timestampSeconds === null)
304
523
  return null;
305
524
  const minutes = Math.max(0, Math.ceil((timestampSeconds * 1000 - nowMs) / 60_000));
@@ -307,10 +526,28 @@ function formatCountdown(timestampSeconds, nowMs = Date.now()) {
307
526
  const hours = Math.floor((minutes % 1440) / 60);
308
527
  const remainder = minutes % 60;
309
528
  if (days > 0)
310
- return `${days}天${hours}小时后`;
529
+ return t('usage.countdownDaysHours', { days, hours });
311
530
  if (hours > 0)
312
- return `${hours}小时${remainder > 0 ? `${remainder}分钟` : ''}后`;
313
- return `${remainder}分钟后`;
531
+ return remainder > 0 ? t('usage.countdownHoursMinutes', { hours, minutes: remainder }) : t('usage.countdownHours', { hours });
532
+ return t('usage.countdownMinutes', { minutes: remainder });
533
+ }
534
+ function formatExpiryCountdown(value, t, nowMs) {
535
+ const timestamp = Date.parse(value);
536
+ if (Number.isNaN(timestamp))
537
+ return value;
538
+ if (timestamp <= nowMs)
539
+ return t('usage.expired');
540
+ return formatCountdown(timestamp / 1000, t, nowMs) ?? t('usage.expired');
541
+ }
542
+ function formatResetExpiry(expiry, t, nowMs) {
543
+ if (expiry * 1000 <= nowMs)
544
+ return t('usage.resetCreditsExpired');
545
+ return formatCountdown(expiry, t, nowMs) ?? t('usage.resetCreditsExpired');
546
+ }
547
+ /** 点数余额保留两位小数展示;无法解析时原样保留上游字符串。 */
548
+ function formatCreditBalance(value) {
549
+ const numeric = Number(value);
550
+ return Number.isFinite(numeric) ? numeric.toFixed(2) : value;
314
551
  }
315
552
  const subscriptionRootStyle = { position: 'relative', minWidth: 0, display: 'inline-flex', alignItems: 'center' };
316
553
  const subscriptionTriggerStyle = { display: 'inline-flex', alignItems: 'center', gap: 6, height: 28, border: 0, borderRadius: 14, padding: '0 8px 0 4px', color: dshThemeColor.labelSecondary, background: 'transparent', cursor: 'pointer', fontSize: 13, lineHeight: '20px' };
@@ -320,8 +557,20 @@ const sub2apiLogoStyle = { display: 'block', borderRadius: 4, objectFit: 'contai
320
557
  const deepseekBalanceIdentityStyle = { display: 'inline-flex', alignItems: 'center', gap: 5, whiteSpace: 'nowrap', fontVariantNumeric: 'tabular-nums' };
321
558
  const deepseekLogoStyle = { display: 'block', borderRadius: 5, objectFit: 'contain' };
322
559
  const deepseekBalanceStyle = { display: 'inline-flex', alignItems: 'center', color: dshThemeColor.labelSecondary, fontSize: 13, fontWeight: 600, fontVariantNumeric: 'tabular-nums' };
560
+ const providerBalanceHeadingStyle = { display: 'grid', gap: 2, minWidth: 0 };
561
+ const providerBalancePlanStyle = { color: dshThemeColor.labelTertiary, fontSize: 11, fontWeight: 500, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' };
323
562
  const deepseekBalanceSectionStyle = { display: 'grid', gap: 6, marginTop: 10, padding: '10px 0 2px', borderTop: `1px solid ${dshThemeColor.border}` };
324
563
  const deepseekBalanceDetailsStyle = { display: 'flex', justifyContent: 'space-between', gap: 12, color: dshThemeColor.labelTertiary, fontSize: 12 };
564
+ const overallBalanceStyle = { display: 'grid', gap: 5, marginTop: 10 };
565
+ const providerBalanceModelStyle = { display: 'grid', gap: 6, marginTop: 12, paddingTop: 10, borderTop: `1px solid ${dshThemeColor.border}` };
566
+ const providerBalanceProgressStyle = { display: 'grid', gap: 5, marginTop: 10 };
567
+ const balanceProgressHeaderStyle = { display: 'flex', justifyContent: 'space-between', gap: 8, minWidth: 0, color: dshThemeColor.labelTertiary, fontSize: 11, fontVariantNumeric: 'tabular-nums' };
568
+ const balanceProgressValueStyle = { color: dshThemeColor.labelSecondary, fontWeight: 600 };
569
+ const balanceProgressPercentStyle = { color: dshThemeColor.labelTertiary, fontVariantNumeric: 'tabular-nums' };
570
+ const balanceMetaStyle = { display: 'flex', justifyContent: 'space-between', gap: 12, color: dshThemeColor.labelTertiary, fontSize: 11, lineHeight: '16px', fontVariantNumeric: 'tabular-nums' };
571
+ const visuallyHiddenStyle = { position: 'absolute', width: 1, height: 1, padding: 0, margin: -1, overflow: 'hidden', clip: 'rect(0, 0, 0, 0)', whiteSpace: 'nowrap', border: 0 };
572
+ const providerBalanceBarStyle = { height: 7, overflow: 'hidden', borderRadius: 4, background: dshThemeColor.border };
573
+ const providerBalanceBarFillStyle = { display: 'block', height: '100%', borderRadius: 4, background: dshThemeColor.accent, transition: 'width .2s ease' };
325
574
  const deepseekUnavailableStatsStyle = { marginTop: 12, paddingTop: 10, borderTop: `1px solid ${dshThemeColor.border}`, color: dshThemeColor.labelTertiary, fontSize: 12, lineHeight: '17px' };
326
575
  const progressRingVisualStyle = { boxSizing: 'border-box', width: '100%', height: '100%', display: 'inline-flex', alignItems: 'center', justifyContent: 'center', padding: 2, borderRadius: 'inherit' };
327
576
  const progressRingValueStyle = { boxSizing: 'border-box', width: '100%', height: '100%', display: 'inline-flex', alignItems: 'center', justifyContent: 'center', gap: 0.5, borderRadius: 'inherit', background: dshThemeColor.menuBackground, fontSize: 7, lineHeight: 1, fontWeight: 700, color: dshThemeColor.labelPrimary, whiteSpace: 'nowrap' };
@@ -337,6 +586,13 @@ const barStyle = { height: 7, overflow: 'hidden', borderRadius: 4, background: d
337
586
  const barFillStyle = { display: 'block', height: '100%', borderRadius: 4, background: dshThemeColor.accent, transition: 'width .2s ease' };
338
587
  const resetStyle = { color: dshThemeColor.labelTertiary, fontSize: 12 };
339
588
  const subscriptionPopoverStyle = { ...dshPopupSurfaceStyle, position: 'absolute', zIndex: 1200, bottom: 'calc(100% + 8px)', left: 0, width: 'max-content', minWidth: 280, maxWidth: 'min(400px, calc(100vw - 24px))', boxSizing: 'border-box', padding: 14, borderRadius: 12 };
589
+ const resetCreditsSectionStyle = { display: 'grid', gap: 6, marginTop: 10, padding: '10px 12px', border: `1px solid ${dshThemeColor.border}`, borderRadius: 10, background: dshThemeColor.surfaceSubtle };
590
+ const resetCreditsRowStyle = { display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: 12, color: dshThemeColor.labelSecondary, fontSize: 13 };
591
+ const resetCreditsValueGroupStyle = { display: 'inline-flex', alignItems: 'center', gap: 8 };
592
+ const resetCreditsValueStyle = { color: dshThemeColor.labelPrimary, fontWeight: 600, fontVariantNumeric: 'tabular-nums' };
593
+ const resetCreditsExpiryStyle = { color: dshThemeColor.labelTertiary, fontSize: 11, lineHeight: '16px', fontVariantNumeric: 'tabular-nums' };
594
+ const resetDialogOverlayStyle = { position: 'fixed', inset: 0, zIndex: 1400, display: 'flex', alignItems: 'center', justifyContent: 'center', padding: 20, boxSizing: 'border-box', background: dshThemeColor.overlay };
595
+ const resetDialogStyle = { ...dshPopupSurfaceStyle, width: 'min(100%, 420px)', boxSizing: 'border-box', padding: 16, borderRadius: 12, display: 'grid', gap: 12 };
340
596
  const sub2apiStatsGridStyle = { display: 'grid', gridTemplateColumns: 'repeat(2, minmax(0, 1fr))', gap: 8, paddingTop: 12 };
341
597
  const sub2apiStatStyle = { display: 'grid', gap: 2, minWidth: 0 };
342
598
  const sub2apiStatLabelStyle = { color: dshThemeColor.labelTertiary, fontSize: 11 };
@@ -348,6 +604,9 @@ const sub2apiThStyle = { padding: '4px 5px', textAlign: 'left', color: dshThemeC
348
604
  const sub2apiTdStyle = { padding: '5px', borderTop: `1px solid ${dshThemeColor.border}`, color: dshThemeColor.labelSecondary, overflowWrap: 'anywhere' };
349
605
  function progressRingStyle() { return { position: 'relative', display: 'inline-flex', flex: '0 0 28px', width: 28, height: 28, alignItems: 'center', justifyContent: 'center', borderRadius: '50%', padding: 0, border: 0, boxShadow: `inset 0 0 0 1px ${dshThemeColor.border}`, background: 'transparent' }; }
350
606
  function progressRingVisualBackground(progress, loading) { return loading ? dshThemeColor.border : `conic-gradient(${dshThemeColor.accent} ${Math.max(0, Math.min(1, progress)) * 360}deg, ${dshThemeColor.border} 0deg)`; }
607
+ function createRemainingRing(percent) {
608
+ return createElement('span', { 'aria-hidden': true, style: progressRingStyle() }, createElement('span', { style: { ...progressRingVisualStyle, background: progressRingVisualBackground(percent / 100, false) } }, createElement('span', { style: progressRingValueStyle }, createElement('span', undefined, formatRingPercentage(percent)), createElement('span', { style: progressRingSuffixStyle }, '%'))));
609
+ }
351
610
  export { CommandCodeSubscriptionSlot };
352
611
  export const registerCommandCodeSubscriptionSlot = registerSubscriptionSlot;
353
612
  //# sourceMappingURL=subscription-slot.js.map