dsh-cliworker-now 0.0.0-stage → 0.7.7

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 (344) hide show
  1. package/LICENSE +21 -0
  2. package/README.en.md +364 -0
  3. package/README.md +368 -2
  4. package/cordis.patch.yml +3 -0
  5. package/lib/account-models.mjs +262 -0
  6. package/lib/client.js +22139 -0
  7. package/lib/client.js.map +1 -0
  8. package/lib/grok-catalog.mjs +145 -0
  9. package/lib/hermes-native-entry.py +96 -0
  10. package/lib/hermes-nous-refresh.py +331 -0
  11. package/lib/index.js +14544 -0
  12. package/lib/index.js.map +1 -0
  13. package/lib/native-launch.mjs +234 -0
  14. package/lib/native-spawn.mjs +32 -0
  15. package/lib/own-account-lease.mjs +105 -0
  16. package/lib/pi-installation.mjs +87 -0
  17. package/lib/pi-login.mjs +80 -0
  18. package/lib/pi-native-catalog.mjs +417 -0
  19. package/lib/pi-omp-bridge.mjs +602 -0
  20. package/lib/pi-omp-environment.mjs +15 -0
  21. package/lib/pi-omp-refresh.mjs +324 -0
  22. package/lib/private-launch.mjs +23 -0
  23. package/lib/terminal-bridge.mjs +18 -0
  24. package/lib/typert.host.d.ts +3 -0
  25. package/lib/typert.host.js +1430 -0
  26. package/lib/typert.remote-client.d.ts +72 -0
  27. package/lib/typert.remote-client.d.ts.map +1 -0
  28. package/lib/typert.remote-client.js +1256 -0
  29. package/lib/types/client/account-query-queue.d.ts +16 -0
  30. package/lib/types/client/account-query-queue.js +61 -0
  31. package/lib/types/client/account-query-queue.js.map +1 -0
  32. package/lib/types/client/account-terminal-css.d.ts +1 -0
  33. package/lib/types/client/account-terminal-css.js +3 -0
  34. package/lib/types/client/account-terminal-css.js.map +1 -0
  35. package/lib/types/client/account-terminal.d.ts +17 -0
  36. package/lib/types/client/account-terminal.js +525 -0
  37. package/lib/types/client/account-terminal.js.map +1 -0
  38. package/lib/types/client/assets/antigravity.png +0 -0
  39. package/lib/types/client/assets/claude-code.png +0 -0
  40. package/lib/types/client/assets/cliworker-now-logo.png +0 -0
  41. package/lib/types/client/assets/codex.png +0 -0
  42. package/lib/types/client/assets/grok.png +0 -0
  43. package/lib/types/client/assets/hermes.png +0 -0
  44. package/lib/types/client/assets/kimi-dark.png +0 -0
  45. package/lib/types/client/assets/kimi-light.png +0 -0
  46. package/lib/types/client/assets/mimo-code.png +0 -0
  47. package/lib/types/client/assets/omp.png +0 -0
  48. package/lib/types/client/assets/opencode.png +0 -0
  49. package/lib/types/client/assets/pi.png +0 -0
  50. package/lib/types/client/assets/zcode.png +0 -0
  51. package/lib/types/client/composer-keymap.d.ts +18 -0
  52. package/lib/types/client/composer-keymap.js +49 -0
  53. package/lib/types/client/composer-keymap.js.map +1 -0
  54. package/lib/types/client/conversation-timeline.d.ts +6 -0
  55. package/lib/types/client/conversation-timeline.js +65 -0
  56. package/lib/types/client/conversation-timeline.js.map +1 -0
  57. package/lib/types/client/copy-text.d.ts +5 -0
  58. package/lib/types/client/copy-text.js +45 -0
  59. package/lib/types/client/copy-text.js.map +1 -0
  60. package/lib/types/client/icons.d.ts +21 -0
  61. package/lib/types/client/icons.js +68 -0
  62. package/lib/types/client/icons.js.map +1 -0
  63. package/lib/types/client/index.d.ts +3 -0
  64. package/lib/types/client/index.js +124 -0
  65. package/lib/types/client/index.js.map +1 -0
  66. package/lib/types/client/management-styles.d.ts +1 -0
  67. package/lib/types/client/management-styles.js +17 -0
  68. package/lib/types/client/management-styles.js.map +1 -0
  69. package/lib/types/client/name-copy.d.ts +5 -0
  70. package/lib/types/client/name-copy.js +107 -0
  71. package/lib/types/client/name-copy.js.map +1 -0
  72. package/lib/types/client/native-job-overlay.d.ts +11 -0
  73. package/lib/types/client/native-job-overlay.js +129 -0
  74. package/lib/types/client/native-job-overlay.js.map +1 -0
  75. package/lib/types/client/operation-error.d.ts +2 -0
  76. package/lib/types/client/operation-error.js +12 -0
  77. package/lib/types/client/operation-error.js.map +1 -0
  78. package/lib/types/client/panel.d.ts +8 -0
  79. package/lib/types/client/panel.js +310 -0
  80. package/lib/types/client/panel.js.map +1 -0
  81. package/lib/types/client/rename-copy-styles.d.ts +1 -0
  82. package/lib/types/client/rename-copy-styles.js +21 -0
  83. package/lib/types/client/rename-copy-styles.js.map +1 -0
  84. package/lib/types/client/rename-worker.d.ts +9 -0
  85. package/lib/types/client/rename-worker.js +53 -0
  86. package/lib/types/client/rename-worker.js.map +1 -0
  87. package/lib/types/client/role-presets.d.ts +6 -0
  88. package/lib/types/client/role-presets.js +111 -0
  89. package/lib/types/client/role-presets.js.map +1 -0
  90. package/lib/types/client/settings-dialog.d.ts +13 -0
  91. package/lib/types/client/settings-dialog.js +442 -0
  92. package/lib/types/client/settings-dialog.js.map +1 -0
  93. package/lib/types/client/stat-popover.d.ts +10 -0
  94. package/lib/types/client/stat-popover.js +32 -0
  95. package/lib/types/client/stat-popover.js.map +1 -0
  96. package/lib/types/client/styles.d.ts +9 -0
  97. package/lib/types/client/styles.js +221 -0
  98. package/lib/types/client/styles.js.map +1 -0
  99. package/lib/types/client/telemetry.d.ts +11 -0
  100. package/lib/types/client/telemetry.js +24 -0
  101. package/lib/types/client/telemetry.js.map +1 -0
  102. package/lib/types/client/worker-card.d.ts +10 -0
  103. package/lib/types/client/worker-card.js +75 -0
  104. package/lib/types/client/worker-card.js.map +1 -0
  105. package/lib/types/client/worker-model-menu.d.ts +9 -0
  106. package/lib/types/client/worker-model-menu.js +136 -0
  107. package/lib/types/client/worker-model-menu.js.map +1 -0
  108. package/lib/types/client/workers.d.ts +21 -0
  109. package/lib/types/client/workers.js +59 -0
  110. package/lib/types/client/workers.js.map +1 -0
  111. package/lib/types/client/zcode-login-link-provider.d.ts +9 -0
  112. package/lib/types/client/zcode-login-link-provider.js +105 -0
  113. package/lib/types/client/zcode-login-link-provider.js.map +1 -0
  114. package/lib/types/client/zcode-login-link.d.ts +16 -0
  115. package/lib/types/client/zcode-login-link.js +194 -0
  116. package/lib/types/client/zcode-login-link.js.map +1 -0
  117. package/lib/types/host/account-identity.d.ts +16 -0
  118. package/lib/types/host/account-identity.js +126 -0
  119. package/lib/types/host/account-identity.js.map +1 -0
  120. package/lib/types/host/account-login.d.ts +10 -0
  121. package/lib/types/host/account-login.js +126 -0
  122. package/lib/types/host/account-login.js.map +1 -0
  123. package/lib/types/host/account-models.d.mts +21 -0
  124. package/lib/types/host/account-models.mjs +262 -0
  125. package/lib/types/host/accounts.d.ts +42 -0
  126. package/lib/types/host/accounts.js +945 -0
  127. package/lib/types/host/accounts.js.map +1 -0
  128. package/lib/types/host/adapters.d.ts +24 -0
  129. package/lib/types/host/adapters.js +380 -0
  130. package/lib/types/host/adapters.js.map +1 -0
  131. package/lib/types/host/agy-context.d.ts +8 -0
  132. package/lib/types/host/agy-context.js +122 -0
  133. package/lib/types/host/agy-context.js.map +1 -0
  134. package/lib/types/host/agy-models.d.ts +5 -0
  135. package/lib/types/host/agy-models.js +37 -0
  136. package/lib/types/host/agy-models.js.map +1 -0
  137. package/lib/types/host/agy-windows-account.d.ts +14 -0
  138. package/lib/types/host/agy-windows-account.js +104 -0
  139. package/lib/types/host/agy-windows-account.js.map +1 -0
  140. package/lib/types/host/authorized-catalog.d.ts +14 -0
  141. package/lib/types/host/authorized-catalog.js +35 -0
  142. package/lib/types/host/authorized-catalog.js.map +1 -0
  143. package/lib/types/host/bridge-protocol.d.ts +15 -0
  144. package/lib/types/host/bridge-protocol.js +80 -0
  145. package/lib/types/host/bridge-protocol.js.map +1 -0
  146. package/lib/types/host/claude-native-oauth.d.ts +17 -0
  147. package/lib/types/host/claude-native-oauth.js +272 -0
  148. package/lib/types/host/claude-native-oauth.js.map +1 -0
  149. package/lib/types/host/claude-own-route.d.ts +33 -0
  150. package/lib/types/host/claude-own-route.js +250 -0
  151. package/lib/types/host/claude-own-route.js.map +1 -0
  152. package/lib/types/host/cli-account-binding.d.ts +33 -0
  153. package/lib/types/host/cli-account-binding.js +540 -0
  154. package/lib/types/host/cli-account-binding.js.map +1 -0
  155. package/lib/types/host/cli-protocol.d.ts +27 -0
  156. package/lib/types/host/cli-protocol.js +212 -0
  157. package/lib/types/host/cli-protocol.js.map +1 -0
  158. package/lib/types/host/codex-account.d.ts +8 -0
  159. package/lib/types/host/codex-account.js +143 -0
  160. package/lib/types/host/codex-account.js.map +1 -0
  161. package/lib/types/host/codex-models.d.ts +6 -0
  162. package/lib/types/host/codex-models.js +169 -0
  163. package/lib/types/host/codex-models.js.map +1 -0
  164. package/lib/types/host/extended-adapters.d.ts +44 -0
  165. package/lib/types/host/extended-adapters.js +207 -0
  166. package/lib/types/host/extended-adapters.js.map +1 -0
  167. package/lib/types/host/first-party-account-context.d.ts +26 -0
  168. package/lib/types/host/first-party-account-context.js +55 -0
  169. package/lib/types/host/first-party-account-context.js.map +1 -0
  170. package/lib/types/host/first-party-models.d.ts +29 -0
  171. package/lib/types/host/first-party-models.js +459 -0
  172. package/lib/types/host/first-party-models.js.map +1 -0
  173. package/lib/types/host/grok-adapter.d.ts +44 -0
  174. package/lib/types/host/grok-adapter.js +293 -0
  175. package/lib/types/host/grok-adapter.js.map +1 -0
  176. package/lib/types/host/grok-models.d.ts +47 -0
  177. package/lib/types/host/grok-models.js +320 -0
  178. package/lib/types/host/grok-models.js.map +1 -0
  179. package/lib/types/host/harness-opencode-accounts.d.ts +17 -0
  180. package/lib/types/host/harness-opencode-accounts.js +80 -0
  181. package/lib/types/host/harness-opencode-accounts.js.map +1 -0
  182. package/lib/types/host/hermes-account-context.d.ts +8 -0
  183. package/lib/types/host/hermes-account-context.js +99 -0
  184. package/lib/types/host/hermes-account-context.js.map +1 -0
  185. package/lib/types/host/hermes-accounts.d.ts +19 -0
  186. package/lib/types/host/hermes-accounts.js +356 -0
  187. package/lib/types/host/hermes-accounts.js.map +1 -0
  188. package/lib/types/host/hermes-adapter.d.ts +93 -0
  189. package/lib/types/host/hermes-adapter.js +455 -0
  190. package/lib/types/host/hermes-adapter.js.map +1 -0
  191. package/lib/types/host/hermes-env.d.ts +4 -0
  192. package/lib/types/host/hermes-env.js +22 -0
  193. package/lib/types/host/hermes-env.js.map +1 -0
  194. package/lib/types/host/hermes-installation.d.ts +10 -0
  195. package/lib/types/host/hermes-installation.js +181 -0
  196. package/lib/types/host/hermes-installation.js.map +1 -0
  197. package/lib/types/host/hermes-models.d.ts +26 -0
  198. package/lib/types/host/hermes-models.js +328 -0
  199. package/lib/types/host/hermes-models.js.map +1 -0
  200. package/lib/types/host/hermes-native-entry.py +96 -0
  201. package/lib/types/host/hermes-nous-refresh.py +331 -0
  202. package/lib/types/host/hermes-nous.d.ts +53 -0
  203. package/lib/types/host/hermes-nous.js +343 -0
  204. package/lib/types/host/hermes-nous.js.map +1 -0
  205. package/lib/types/host/hermes-renewal.d.ts +27 -0
  206. package/lib/types/host/hermes-renewal.js +292 -0
  207. package/lib/types/host/hermes-renewal.js.map +1 -0
  208. package/lib/types/host/hermes-suppression.d.ts +7 -0
  209. package/lib/types/host/hermes-suppression.js +69 -0
  210. package/lib/types/host/hermes-suppression.js.map +1 -0
  211. package/lib/types/host/hermes-windows-installation.d.ts +5 -0
  212. package/lib/types/host/hermes-windows-installation.js +91 -0
  213. package/lib/types/host/hermes-windows-installation.js.map +1 -0
  214. package/lib/types/host/index.d.ts +140 -0
  215. package/lib/types/host/index.js +947 -0
  216. package/lib/types/host/index.js.map +1 -0
  217. package/lib/types/host/kimi-accounts.d.ts +17 -0
  218. package/lib/types/host/kimi-accounts.js +220 -0
  219. package/lib/types/host/kimi-accounts.js.map +1 -0
  220. package/lib/types/host/kimi-oauth-models.d.ts +14 -0
  221. package/lib/types/host/kimi-oauth-models.js +246 -0
  222. package/lib/types/host/kimi-oauth-models.js.map +1 -0
  223. package/lib/types/host/managed-agent.d.ts +4 -0
  224. package/lib/types/host/managed-agent.js +127 -0
  225. package/lib/types/host/managed-agent.js.map +1 -0
  226. package/lib/types/host/mimo-configuration.d.ts +22 -0
  227. package/lib/types/host/mimo-configuration.js +258 -0
  228. package/lib/types/host/mimo-configuration.js.map +1 -0
  229. package/lib/types/host/mimo-metadata-cache.d.ts +22 -0
  230. package/lib/types/host/mimo-metadata-cache.js +121 -0
  231. package/lib/types/host/mimo-metadata-cache.js.map +1 -0
  232. package/lib/types/host/native-capability-cache.d.ts +11 -0
  233. package/lib/types/host/native-capability-cache.js +94 -0
  234. package/lib/types/host/native-capability-cache.js.map +1 -0
  235. package/lib/types/host/native-launch.d.mts +2 -0
  236. package/lib/types/host/native-launch.mjs +234 -0
  237. package/lib/types/host/native-process.d.ts +5 -0
  238. package/lib/types/host/native-process.js +41 -0
  239. package/lib/types/host/native-process.js.map +1 -0
  240. package/lib/types/host/native-spawn.mjs +32 -0
  241. package/lib/types/host/opencode-adapter.d.ts +94 -0
  242. package/lib/types/host/opencode-adapter.js +507 -0
  243. package/lib/types/host/opencode-adapter.js.map +1 -0
  244. package/lib/types/host/opencode-native.d.ts +27 -0
  245. package/lib/types/host/opencode-native.js +403 -0
  246. package/lib/types/host/opencode-native.js.map +1 -0
  247. package/lib/types/host/own-account-lease.d.mts +5 -0
  248. package/lib/types/host/own-account-lease.mjs +105 -0
  249. package/lib/types/host/pi-installation.d.mts +7 -0
  250. package/lib/types/host/pi-installation.mjs +87 -0
  251. package/lib/types/host/pi-omp-accounts.d.ts +28 -0
  252. package/lib/types/host/pi-omp-accounts.js +175 -0
  253. package/lib/types/host/pi-omp-accounts.js.map +1 -0
  254. package/lib/types/host/pi-omp-adapter.d.ts +32 -0
  255. package/lib/types/host/pi-omp-adapter.js +190 -0
  256. package/lib/types/host/pi-omp-adapter.js.map +1 -0
  257. package/lib/types/host/pi-omp-environment.d.mts +1 -0
  258. package/lib/types/host/pi-omp-environment.mjs +15 -0
  259. package/lib/types/host/pi-omp-identity.d.ts +2 -0
  260. package/lib/types/host/pi-omp-identity.js +142 -0
  261. package/lib/types/host/pi-omp-identity.js.map +1 -0
  262. package/lib/types/host/pi-omp-logout.d.ts +3 -0
  263. package/lib/types/host/pi-omp-logout.js +152 -0
  264. package/lib/types/host/pi-omp-logout.js.map +1 -0
  265. package/lib/types/host/pi-omp-native.d.ts +71 -0
  266. package/lib/types/host/pi-omp-native.js +753 -0
  267. package/lib/types/host/pi-omp-native.js.map +1 -0
  268. package/lib/types/host/pi-omp-refresh.d.mts +7 -0
  269. package/lib/types/host/pi-omp-refresh.mjs +324 -0
  270. package/lib/types/host/private-launch.mjs +23 -0
  271. package/lib/types/host/process.d.ts +43 -0
  272. package/lib/types/host/process.js +134 -0
  273. package/lib/types/host/process.js.map +1 -0
  274. package/lib/types/host/protocol.d.ts +23 -0
  275. package/lib/types/host/protocol.js +112 -0
  276. package/lib/types/host/protocol.js.map +1 -0
  277. package/lib/types/host/roles.d.ts +34 -0
  278. package/lib/types/host/roles.js +80 -0
  279. package/lib/types/host/roles.js.map +1 -0
  280. package/lib/types/host/routing.d.ts +31 -0
  281. package/lib/types/host/routing.js +248 -0
  282. package/lib/types/host/routing.js.map +1 -0
  283. package/lib/types/host/runtime.d.ts +60 -0
  284. package/lib/types/host/runtime.js +598 -0
  285. package/lib/types/host/runtime.js.map +1 -0
  286. package/lib/types/host/storage.d.ts +48 -0
  287. package/lib/types/host/storage.js +449 -0
  288. package/lib/types/host/storage.js.map +1 -0
  289. package/lib/types/host/telemetry.d.ts +17 -0
  290. package/lib/types/host/telemetry.js +158 -0
  291. package/lib/types/host/telemetry.js.map +1 -0
  292. package/lib/types/host/windows-account-bootstrap.ps1 +44 -0
  293. package/lib/types/host/windows-account-launch.mjs +47 -0
  294. package/lib/types/host/windows-account-owner.ps1 +137 -0
  295. package/lib/types/host/windows-account-stdio.mjs +19 -0
  296. package/lib/types/host/windows-account-terminal.d.ts +17 -0
  297. package/lib/types/host/windows-account-terminal.js +208 -0
  298. package/lib/types/host/windows-account-terminal.js.map +1 -0
  299. package/lib/types/host/windows-agy-account.ps1 +81 -0
  300. package/lib/types/host/windows-cli-installation.d.ts +31 -0
  301. package/lib/types/host/windows-cli-installation.js +157 -0
  302. package/lib/types/host/windows-cli-installation.js.map +1 -0
  303. package/lib/types/host/windows-hidden-launch.mjs +49 -0
  304. package/lib/types/host/windows-hidden-process.d.ts +12 -0
  305. package/lib/types/host/windows-hidden-process.js +116 -0
  306. package/lib/types/host/windows-hidden-process.js.map +1 -0
  307. package/lib/types/host/zcode-account-models.d.ts +16 -0
  308. package/lib/types/host/zcode-account-models.js +114 -0
  309. package/lib/types/host/zcode-account-models.js.map +1 -0
  310. package/lib/types/host/zcode-adapter.d.ts +93 -0
  311. package/lib/types/host/zcode-adapter.js +808 -0
  312. package/lib/types/host/zcode-adapter.js.map +1 -0
  313. package/lib/types/host/zcode-grok-accounts.d.ts +30 -0
  314. package/lib/types/host/zcode-grok-accounts.js +408 -0
  315. package/lib/types/host/zcode-grok-accounts.js.map +1 -0
  316. package/lib/types/shared/accounts.d.ts +47 -0
  317. package/lib/types/shared/accounts.js +2 -0
  318. package/lib/types/shared/accounts.js.map +1 -0
  319. package/lib/types/shared/builtin-presets.d.ts +2 -0
  320. package/lib/types/shared/builtin-presets.js +231 -0
  321. package/lib/types/shared/builtin-presets.js.map +1 -0
  322. package/lib/types/shared/cli-settings.d.ts +5 -0
  323. package/lib/types/shared/cli-settings.js +2 -0
  324. package/lib/types/shared/cli-settings.js.map +1 -0
  325. package/lib/types/shared/model-presentation.d.ts +10 -0
  326. package/lib/types/shared/model-presentation.js +95 -0
  327. package/lib/types/shared/model-presentation.js.map +1 -0
  328. package/lib/types/shared/models.d.ts +7 -0
  329. package/lib/types/shared/models.js +35 -0
  330. package/lib/types/shared/models.js.map +1 -0
  331. package/lib/types/shared/telemetry.d.ts +18 -0
  332. package/lib/types/shared/telemetry.js +16 -0
  333. package/lib/types/shared/telemetry.js.map +1 -0
  334. package/lib/types/shared/types.d.ts +127 -0
  335. package/lib/types/shared/types.js +147 -0
  336. package/lib/types/shared/types.js.map +1 -0
  337. package/lib/windows-account-bootstrap.ps1 +44 -0
  338. package/lib/windows-account-launch.mjs +47 -0
  339. package/lib/windows-account-owner.ps1 +137 -0
  340. package/lib/windows-account-stdio.mjs +19 -0
  341. package/lib/windows-agy-account.ps1 +81 -0
  342. package/lib/windows-hidden-launch.mjs +49 -0
  343. package/lib/zcode-resume.mjs +423 -0
  344. package/package.json +109 -4
@@ -0,0 +1,525 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useRef, useState } from 'react';
3
+ import { Terminal } from '@xterm/xterm';
4
+ import { FitAddon } from '@xterm/addon-fit';
5
+ import { Button, StateDot, writeClipboard } from '@deepseek-ai/dsh-client-ui-primitives';
6
+ import { CLI_LABELS } from "../shared/types.js";
7
+ import { value } from "./workers.js";
8
+ import { accountTerminalCSS } from "./account-terminal-css.js";
9
+ import { createZcodeLoginLinkParser } from "./zcode-login-link.js";
10
+ import { createZcodeLoginLinkProvider } from "./zcode-login-link-provider.js";
11
+ const STARTUP_TIMEOUT_MS = 20_000;
12
+ const CLEANUP_TIMEOUT_MS = 12_000;
13
+ const MAX_INPUT_BYTES = 16_384;
14
+ function isPasteShortcut(event) {
15
+ if (event.altKey || event.isComposing)
16
+ return false;
17
+ return (((event.key.toLowerCase() === 'v' || event.code === 'KeyV') && event.ctrlKey !== event.metaKey) ||
18
+ (event.key === 'Insert' && event.shiftKey && !event.ctrlKey && !event.metaKey));
19
+ }
20
+ function isCopyShortcut(event) {
21
+ return (!event.altKey &&
22
+ !event.isComposing &&
23
+ (event.key.toLowerCase() === 'c' || event.code === 'KeyC') &&
24
+ event.ctrlKey !== event.metaKey);
25
+ }
26
+ // RPC errors may contain native output. Only plugin-owned, fixed diagnostics
27
+ // cross this boundary; never display arbitrary exception text from a CLI.
28
+ function startupMessage(error) {
29
+ const message = error instanceof Error ? error.message : '';
30
+ const safe = [
31
+ '此 CLI 已有账号终端,请先关闭后重试',
32
+ '当前宿主不支持交互终端',
33
+ '账号终端尚未确认完全退出,请重启应用',
34
+ 'Windows 账号终端托管不可用,请检查 PowerShell 后重试',
35
+ '账号终端启动超时,正在回收启动过程;请稍后重试',
36
+ '无法启动账号终端,请检查 CLI 安装',
37
+ 'CLI 启动入口无法确认,请配置原生程序或固定 Node/Bun 入口',
38
+ '无法确认 ZCode 账号功能,请检查完整 CLI 安装后重试',
39
+ '当前 ZCode 未声明原生登录能力,请检查 CLI 安装',
40
+ '当前 ZCode 未声明原生终端界面,请检查 CLI 安装',
41
+ '当前 ZCode 未声明原生退出登录能力,请检查 CLI 安装',
42
+ 'ZCode 配套资源不可用,请检查 CLI 安装或配置 zcodeBuiltinConfig',
43
+ '当前插件 Host 不支持 ZCode 授权来源选择,请更新插件后重试',
44
+ '不支持的 ZCode 授权来源',
45
+ '授权来源只支持 ZCode 登录时选择智谱 BigModel 或 Z.AI',
46
+ '当前 ZCode CLI 不支持智谱 BigModel 授权,请更新为支持 login bigmodel 的官方完整 CLI 后重试;不会改用 Z.AI 登录。',
47
+ 'OMP 执行入口身份不匹配,请检查该 CLI 的安装和路径',
48
+ 'Pi 执行入口身份不匹配,请检查该 CLI 的安装和路径',
49
+ 'Codex Windows 应用包入口无法确认,请检查安装',
50
+ 'Codex npm 安装入口无法确认,请检查安装',
51
+ 'Hermes Windows 安装入口无法确认,请检查安装',
52
+ '检测到 Hermes 安装目录,但未找到可用 CLI 入口,请完成安装或配置已有入口',
53
+ 'Windows CLI 安装入口无法读取,请检查安装',
54
+ 'Windows CLI 安装目录配置无效',
55
+ 'Windows 系统目录配置无效',
56
+ ];
57
+ return (safe.find((item) => message === item || message === `Error: ${item}`) ??
58
+ '账号终端暂不可用,请确认此 CLI 没有运行任务且当前项目允许执行,再重试');
59
+ }
60
+ async function waitForCleanup(cleanup) {
61
+ let timer;
62
+ try {
63
+ await Promise.race([
64
+ cleanup,
65
+ new Promise((_, reject) => {
66
+ timer = setTimeout(() => reject(new Error('account cleanup timed out')), CLEANUP_TIMEOUT_MS);
67
+ }),
68
+ ]);
69
+ }
70
+ finally {
71
+ clearTimeout(timer);
72
+ }
73
+ }
74
+ /** Only mounted after a human selects an account action. No prompt is auto-entered. */
75
+ export function AccountTerminal({ api, sessionId, cli, action, source, provider, onClose, onFinished, closeControl, }) {
76
+ const element = useRef(null);
77
+ const callbacks = useRef({ onClose, onFinished });
78
+ callbacks.current = { onClose, onFinished };
79
+ const stop = useRef(async () => { });
80
+ const focus = useRef(() => { });
81
+ const contextClipboard = useRef(async () => { });
82
+ const generation = useRef(0);
83
+ const closing = useRef();
84
+ const [attempt, setAttempt] = useState(0);
85
+ const [phase, setPhase] = useState('loading');
86
+ const [instruction, setInstruction] = useState('');
87
+ const [notice, setNotice] = useState('');
88
+ useEffect(() => {
89
+ const ownGeneration = ++generation.current;
90
+ setPhase('loading');
91
+ setInstruction('');
92
+ setNotice('');
93
+ let alive = true, id = '', ended = false, cleanupConfirmed = false, lastSeq = 0, queuedBytes = 0, resizeFrame = 0, viewDisposed = false;
94
+ const startup = new AbortController();
95
+ let startupTimer;
96
+ let stream;
97
+ let streamDisposal;
98
+ let terminal;
99
+ let observer;
100
+ let themeObserver;
101
+ let input;
102
+ let loginLinks;
103
+ let removePasteListener;
104
+ let readingClipboard = false;
105
+ // Only the current native login prompt may authorize browser navigation.
106
+ // Keep parsed URLs in this terminal's memory, outside persistent UI state.
107
+ const loginLinkParser = cli === 'zcode' && action === 'login' ? createZcodeLoginLinkParser(provider) : undefined;
108
+ let loginUrl;
109
+ const openedLoginUrls = new Set();
110
+ const clearLoginLink = () => {
111
+ loginUrl = undefined;
112
+ loginLinkParser?.reset();
113
+ openedLoginUrls.clear();
114
+ };
115
+ let inputQueue = Promise.resolve();
116
+ let stopping;
117
+ const disposeStream = () => {
118
+ if (!stream)
119
+ return Promise.resolve();
120
+ const currentStream = stream;
121
+ return (streamDisposal ??= Promise.resolve().then(() => currentStream.dispose()));
122
+ };
123
+ const disableInput = () => {
124
+ if (terminal)
125
+ terminal.options.disableStdin = true;
126
+ };
127
+ const finish = (failed = false) => {
128
+ disableInput();
129
+ clearLoginLink();
130
+ if (alive)
131
+ setPhase(failed ? 'failed' : 'closed');
132
+ if (!ended) {
133
+ ended = true;
134
+ if (alive)
135
+ callbacks.current.onFinished();
136
+ }
137
+ };
138
+ const stopSession = () => {
139
+ clearTimeout(startupTimer);
140
+ startup.abort();
141
+ disableInput();
142
+ clearLoginLink();
143
+ if (!id || cleanupConfirmed)
144
+ return Promise.resolve();
145
+ return (stopping ??= (async () => {
146
+ value(await api.cliworker.accountStop(sessionId, id));
147
+ if (!ended)
148
+ finish();
149
+ })().catch((error) => {
150
+ stopping = undefined;
151
+ throw error;
152
+ }));
153
+ };
154
+ stop.current = stopSession;
155
+ const fail = (message) => {
156
+ clearTimeout(startupTimer);
157
+ if (alive) {
158
+ setNotice(message);
159
+ finish(true);
160
+ }
161
+ void stopSession().catch(() => {
162
+ if (alive)
163
+ setNotice('终端尚未完成清理,请点击关闭终端后重试');
164
+ });
165
+ void disposeStream().catch(() => undefined);
166
+ };
167
+ const disposeView = () => {
168
+ if (viewDisposed)
169
+ return;
170
+ viewDisposed = true;
171
+ // A partially opened renderer may also fail during disposal. Always release
172
+ // the remaining observers; renderer cleanup must not skip PTY cleanup.
173
+ for (const dispose of [
174
+ () => observer?.disconnect(),
175
+ () => themeObserver?.disconnect(),
176
+ () => cancelAnimationFrame(resizeFrame),
177
+ () => input?.dispose(),
178
+ () => loginLinks?.dispose(),
179
+ () => removePasteListener?.(),
180
+ () => terminal?.dispose(),
181
+ ]) {
182
+ try {
183
+ dispose();
184
+ }
185
+ catch {
186
+ // The Host owns process cleanup, independently of these browser handles.
187
+ }
188
+ }
189
+ };
190
+ try {
191
+ if (!element.current)
192
+ throw new Error('terminal container unavailable');
193
+ terminal = new Terminal({
194
+ fontSize: 12,
195
+ fontFamily: 'ui-monospace, SFMono-Regular, Menlo, monospace',
196
+ cursorBlink: true,
197
+ cursorStyle: 'block',
198
+ cursorInactiveStyle: 'outline',
199
+ scrollback: 1000,
200
+ disableStdin: true,
201
+ // Do not turn CLI-controlled escape sequences into browser navigation.
202
+ linkHandler: { activate: () => { } },
203
+ allowProposedApi: false,
204
+ });
205
+ const view = terminal;
206
+ focus.current = () => {
207
+ if (alive && !ended && !startup.signal.aborted)
208
+ view.focus();
209
+ };
210
+ const fit = new FitAddon();
211
+ view.loadAddon(fit);
212
+ view.open(element.current);
213
+ const canWrite = () => alive && !!id && !ended && !startup.signal.aborted && !viewDisposed;
214
+ const canCopy = () => alive && !viewDisposed && !startup.signal.aborted;
215
+ const openLoginUrl = (url) => {
216
+ if (!canWrite() || url !== loginUrl)
217
+ return;
218
+ try {
219
+ // Harness routes HTTP(S) new-window requests to its native external
220
+ // browser handler on both Mac and Windows; no shell command is used.
221
+ window.open(url, '_blank', 'noopener,noreferrer');
222
+ }
223
+ catch {
224
+ setNotice('无法打开登录网页,请在终端中查看原生登录提示');
225
+ }
226
+ };
227
+ if (loginLinkParser)
228
+ loginLinks = view.registerLinkProvider(createZcodeLoginLinkProvider(view, () => (canWrite() ? loginUrl : undefined), openLoginUrl));
229
+ const pasteText = (text) => {
230
+ if (!canWrite())
231
+ return;
232
+ if (!text) {
233
+ setNotice('剪贴板中没有可粘贴的文本');
234
+ return;
235
+ }
236
+ setNotice('');
237
+ view.focus();
238
+ // xterm owns newline normalization and the CLI's bracketed-paste mode.
239
+ // Its onData handler remains the only path to the scoped Gateway.
240
+ view.paste(text);
241
+ };
242
+ contextClipboard.current = async () => {
243
+ if (!canCopy() || readingClipboard)
244
+ return;
245
+ // Native keyboard copy remains xterm's selection/copy event. Right click
246
+ // uses the same selected text; with no selection it pastes instead.
247
+ if (view.hasSelection()) {
248
+ const text = view.getSelection();
249
+ if (!text)
250
+ return;
251
+ readingClipboard = true;
252
+ try {
253
+ const copied = await writeClipboard(text);
254
+ if (!canCopy())
255
+ return;
256
+ if (!copied)
257
+ setNotice('复制失败,请重新选择文本后重试');
258
+ else {
259
+ setNotice('');
260
+ view.clearSelection();
261
+ view.focus();
262
+ }
263
+ }
264
+ catch {
265
+ if (canCopy())
266
+ setNotice('复制失败,请重新选择文本后重试');
267
+ }
268
+ finally {
269
+ readingClipboard = false;
270
+ }
271
+ return;
272
+ }
273
+ if (!canWrite())
274
+ return;
275
+ readingClipboard = true;
276
+ try {
277
+ if (!navigator.clipboard?.readText)
278
+ throw new Error('clipboard unavailable');
279
+ const text = await navigator.clipboard.readText();
280
+ pasteText(text);
281
+ }
282
+ catch {
283
+ if (canWrite())
284
+ setNotice('无法读取剪贴板,请聚焦终端后按 Ctrl+V(Mac 为 ⌘V)粘贴');
285
+ }
286
+ finally {
287
+ readingClipboard = false;
288
+ }
289
+ };
290
+ // Windows xterm otherwise turns Ctrl+V into ^V and cancels the native
291
+ // paste event. Leave the browser default intact; don't read twice.
292
+ view.attachCustomKeyEventHandler((event) => {
293
+ if (isCopyShortcut(event) && view.hasSelection()) {
294
+ event.stopPropagation();
295
+ return false;
296
+ }
297
+ if (!isPasteShortcut(event))
298
+ return true;
299
+ event.stopPropagation();
300
+ return false;
301
+ });
302
+ const container = element.current;
303
+ const onPaste = (event) => {
304
+ event.preventDefault();
305
+ event.stopPropagation();
306
+ if (!canWrite())
307
+ return;
308
+ if (!event.clipboardData) {
309
+ setNotice('无法读取粘贴内容,请右键重试');
310
+ return;
311
+ }
312
+ pasteText(event.clipboardData.getData('text/plain'));
313
+ };
314
+ // Capture before xterm's textarea listener so a native menu/shortcut
315
+ // paste is forwarded once and never retained in the hidden textarea.
316
+ container.addEventListener('paste', onPaste, { capture: true });
317
+ removePasteListener = () => container.removeEventListener('paste', onPaste, { capture: true });
318
+ const theme = () => {
319
+ if (!alive || viewDisposed)
320
+ return;
321
+ try {
322
+ const css = getComputedStyle(document.body);
323
+ view.options.theme = {
324
+ background: css.getPropertyValue('--dsw-alias-bg-layer-2').trim() || '#ffffff',
325
+ foreground: css.getPropertyValue('--dsw-alias-label-primary').trim() || '#222222',
326
+ cursor: css.getPropertyValue('--dsw-alias-label-primary').trim() || '#222222',
327
+ cursorAccent: css.getPropertyValue('--dsw-alias-bg-layer-2').trim() || '#ffffff',
328
+ };
329
+ }
330
+ catch {
331
+ fail('账号终端显示未能初始化,请重试');
332
+ }
333
+ };
334
+ theme();
335
+ if (ended)
336
+ throw new Error('terminal theme unavailable');
337
+ themeObserver = new MutationObserver(theme);
338
+ themeObserver.observe(document.body, {
339
+ attributes: true,
340
+ attributeFilter: ['data-ds-dark-theme', 'style', 'class'],
341
+ });
342
+ const resize = () => {
343
+ cancelAnimationFrame(resizeFrame);
344
+ resizeFrame = requestAnimationFrame(() => {
345
+ if (!alive || viewDisposed || ended)
346
+ return;
347
+ try {
348
+ fit.fit();
349
+ if (id && !startup.signal.aborted)
350
+ void api.cliworker.accountResize(sessionId, id, view.cols, view.rows).catch(() => undefined);
351
+ }
352
+ catch {
353
+ fail('账号终端显示未能初始化,请重试');
354
+ }
355
+ });
356
+ };
357
+ observer = new ResizeObserver(resize);
358
+ observer.observe(element.current);
359
+ resize();
360
+ input = view.onData((data) => {
361
+ if (!canWrite())
362
+ return;
363
+ const bytes = new TextEncoder().encode(data).byteLength;
364
+ if (queuedBytes + bytes > MAX_INPUT_BYTES) {
365
+ setNotice('输入过长或仍在发送,请缩短内容后重试');
366
+ return;
367
+ }
368
+ queuedBytes += bytes;
369
+ inputQueue = inputQueue
370
+ .then(async () => {
371
+ if (alive && !ended && !startup.signal.aborted)
372
+ value(await api.cliworker.accountWrite(sessionId, id, data));
373
+ })
374
+ .catch(() => {
375
+ if (alive)
376
+ setNotice('输入未能送达,请关闭终端后重试');
377
+ })
378
+ .finally(() => {
379
+ queuedBytes -= bytes;
380
+ });
381
+ });
382
+ startupTimer = setTimeout(() => {
383
+ fail('启动超过 20 秒,已取消本次请求。请确认 CLI 可用后重试');
384
+ }, STARTUP_TIMEOUT_MS);
385
+ void (async () => {
386
+ try {
387
+ if (provider && typeof api.cliworker.accountStartForProvider !== 'function')
388
+ throw new Error('当前插件 Host 不支持 ZCode 授权来源选择,请更新插件后重试');
389
+ const result = JSON.parse(value(await (provider
390
+ ? api.cliworker.accountStartForProvider(sessionId, cli, action, provider, startup.signal)
391
+ : source
392
+ ? api.cliworker.accountStartForSource(sessionId, cli, action, source, startup.signal)
393
+ : api.cliworker.accountStart(sessionId, cli, action, startup.signal))));
394
+ clearTimeout(startupTimer);
395
+ id = result.id;
396
+ if (!alive || startup.signal.aborted) {
397
+ await stopSession();
398
+ return;
399
+ }
400
+ setInstruction(result.instruction);
401
+ setPhase('running');
402
+ view.options.disableStdin = false;
403
+ view.focus();
404
+ resize();
405
+ const accountStream = api.$stream({
406
+ name: 'CLI 账号终端',
407
+ open: (signal) => api.cliworker.accountWatch(sessionId, id, signal),
408
+ ended: () => new Error('账号终端连接已结束'),
409
+ });
410
+ stream = accountStream;
411
+ for await (const item of accountStream) {
412
+ const frame = JSON.parse(item.value);
413
+ if (alive && !ended && frame.seq > lastSeq) {
414
+ lastSeq = frame.seq;
415
+ if (frame.data) {
416
+ view.write(frame.data);
417
+ const link = canWrite() ? loginLinkParser?.write(frame.data) : undefined;
418
+ if (link) {
419
+ loginUrl = link;
420
+ if (!openedLoginUrls.has(link)) {
421
+ openedLoginUrls.add(link);
422
+ openLoginUrl(link);
423
+ }
424
+ }
425
+ }
426
+ if (frame.message)
427
+ setNotice(frame.message);
428
+ }
429
+ item.accept();
430
+ if (frame.status === 'closed' || frame.status === 'failed') {
431
+ cleanupConfirmed = frame.cleanupConfirmed === true;
432
+ if (!ended)
433
+ finish(frame.status === 'failed');
434
+ break;
435
+ }
436
+ }
437
+ if (!ended) {
438
+ if (alive)
439
+ setNotice('账号终端连接已结束,请重试');
440
+ finish(true);
441
+ void stopSession().catch(() => undefined);
442
+ }
443
+ }
444
+ catch (error) {
445
+ clearTimeout(startupTimer);
446
+ if (alive && !startup.signal.aborted) {
447
+ setNotice(startupMessage(error));
448
+ finish(true);
449
+ }
450
+ // Start process cleanup independently so a slow stop RPC cannot keep
451
+ // a failed stream subscribed until the dialog is unmounted.
452
+ if (id)
453
+ void stopSession().catch(() => undefined);
454
+ }
455
+ finally {
456
+ await disposeStream().catch(() => undefined);
457
+ }
458
+ })();
459
+ }
460
+ catch {
461
+ fail('账号终端显示未能初始化,请重试');
462
+ disposeView();
463
+ focus.current = () => { };
464
+ contextClipboard.current = async () => { };
465
+ }
466
+ return () => {
467
+ alive = false;
468
+ clearLoginLink();
469
+ if (generation.current === ownGeneration)
470
+ generation.current++;
471
+ clearTimeout(startupTimer);
472
+ startup.abort();
473
+ disposeView();
474
+ void stopSession().catch(() => undefined);
475
+ void disposeStream().catch(() => undefined);
476
+ };
477
+ }, [api, sessionId, cli, action, source, provider, attempt]);
478
+ const close = (retry = false) => {
479
+ if (closing.current)
480
+ return closing.current;
481
+ const ownGeneration = generation.current;
482
+ setPhase('stopping');
483
+ const operation = (async () => {
484
+ try {
485
+ await waitForCleanup(stop.current());
486
+ if (generation.current !== ownGeneration)
487
+ return false;
488
+ if (retry)
489
+ setAttempt((value) => value + 1);
490
+ else
491
+ callbacks.current.onClose();
492
+ return true;
493
+ }
494
+ catch {
495
+ if (generation.current !== ownGeneration)
496
+ return false;
497
+ setPhase('failed');
498
+ setNotice('终端关闭失败,请重试');
499
+ return false;
500
+ }
501
+ })();
502
+ closing.current = operation;
503
+ void operation.finally(() => {
504
+ if (closing.current === operation)
505
+ closing.current = undefined;
506
+ });
507
+ return operation;
508
+ };
509
+ useEffect(() => {
510
+ if (!closeControl)
511
+ return;
512
+ const request = () => close();
513
+ closeControl.current = request;
514
+ return () => {
515
+ if (closeControl.current === request)
516
+ closeControl.current = undefined;
517
+ };
518
+ });
519
+ return (_jsxs("section", { className: "cwn-account-terminal", "data-cli": cli, children: [_jsx("style", { children: accountTerminalCSS }), _jsx("style", { children: `.cwn-account-terminal-view:focus-within { outline: none; }` }), _jsxs("div", { className: "cwn-account-terminal-head", children: [_jsxs("strong", { children: [CLI_LABELS[cli], " \u8D26\u53F7\u7EC8\u7AEF"] }), _jsx(Button, { variant: "ghost", size: "md", onClick: () => void close(), disabled: phase === 'stopping', children: "\u5173\u95ED\u7EC8\u7AEF" })] }), (phase === 'loading' || phase === 'stopping') && (_jsxs("div", { className: "cwn-loading", role: "status", children: [_jsx(StateDot, { state: "ongoing", size: 14 }), phase === 'loading' ? '正在启动账号终端…' : '正在关闭终端…'] })), instruction && _jsx("p", { className: "cwn-account-instruction", children: instruction }), _jsx("div", { className: "cwn-account-terminal-view", ref: element, "aria-label": `${CLI_LABELS[cli]} 原生账号终端`, onClick: () => focus.current(), onContextMenuCapture: (event) => {
520
+ event.preventDefault();
521
+ event.stopPropagation();
522
+ void contextClipboard.current();
523
+ } }), (phase === 'failed' || phase === 'closed') && (_jsx(Button, { variant: "ghost", size: "md", onClick: () => void close(true), children: phase === 'closed' ? '重新打开终端' : '重试' })), notice && (_jsx("p", { className: "cwn-account-instruction", role: "status", children: notice }))] }));
524
+ }
525
+ //# sourceMappingURL=account-terminal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account-terminal.js","sourceRoot":"","sources":["../../../src/client/account-terminal.tsx"],"names":[],"mappings":"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"}
Binary file
Binary file
Binary file
@@ -0,0 +1,18 @@
1
+ import type { KeyboardEvent } from 'react';
2
+ /** The event fields read by the native composer, narrowed for textarea and behavior tests. */
3
+ export type ComposerKeyEvent = Pick<KeyboardEvent<HTMLTextAreaElement>, 'key' | 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey' | 'repeat' | 'getModifierState' | 'preventDefault'> & {
4
+ nativeEvent: Pick<globalThis.KeyboardEvent, 'isComposing' | 'keyCode'>;
5
+ };
6
+ /**
7
+ * Adapt Harness 0.2.0-rc.2's private ui-conversation input/editor/keymap to a
8
+ * Worker textarea. The native InputBar's Lexical editor and submit transport
9
+ * belong to the Harness session; this adapter forwards accepted gestures to
10
+ * the caller's existing form submission instead.
11
+ */
12
+ export declare function createComposerKeymap(canSubmit: () => boolean, submit: () => void, now?: () => number): {
13
+ onCompositionStart(): void;
14
+ onCompositionEnd(): void;
15
+ onKeyDown(event: ComposerKeyEvent): void;
16
+ /** Discard composition state when the addressed Worker changes. */
17
+ reset(): void;
18
+ };
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Adapt Harness 0.2.0-rc.2's private ui-conversation input/editor/keymap to a
3
+ * Worker textarea. The native InputBar's Lexical editor and submit transport
4
+ * belong to the Harness session; this adapter forwards accepted gestures to
5
+ * the caller's existing form submission instead.
6
+ */
7
+ export function createComposerKeymap(canSubmit, submit, now = Date.now) {
8
+ let composing = false;
9
+ let composingUntil = 0;
10
+ return {
11
+ onCompositionStart() {
12
+ composing = true;
13
+ },
14
+ onCompositionEnd() {
15
+ composing = false;
16
+ // Safari can deliver the confirmation keydown after compositionend.
17
+ composingUntil = now() + 10;
18
+ },
19
+ onKeyDown(event) {
20
+ if (event.key !== 'Enter')
21
+ return;
22
+ if (event.altKey ||
23
+ event.getModifierState('AltGraph') ||
24
+ (event.ctrlKey && event.metaKey) ||
25
+ (event.shiftKey && (event.ctrlKey || event.metaKey)))
26
+ return;
27
+ // The native plain-text editor handles Shift+Enter's line break.
28
+ if (event.shiftKey)
29
+ return;
30
+ if (event.nativeEvent.isComposing ||
31
+ event.nativeEvent.keyCode === 229 ||
32
+ composing ||
33
+ now() < composingUntil)
34
+ return;
35
+ event.preventDefault();
36
+ if (event.repeat || !canSubmit())
37
+ return;
38
+ // Worker follow-up has no busy-state queue/steer transport, so native
39
+ // plain Enter and either supported accelerated chord share this sink.
40
+ submit();
41
+ },
42
+ /** Discard composition state when the addressed Worker changes. */
43
+ reset() {
44
+ composing = false;
45
+ composingUntil = 0;
46
+ },
47
+ };
48
+ }
49
+ //# sourceMappingURL=composer-keymap.js.map