@dsh-workbench/shared 0.3.10 → 1.0.0-beta.0

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 (391) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +97 -0
  3. package/dist/api/blocker-table.d.ts +3 -3
  4. package/dist/api/blocker-table.js +47 -23
  5. package/dist/api/dsh.d.ts +19 -1
  6. package/dist/api/host-write.d.ts +0 -15
  7. package/dist/api/host-write.js +1 -35
  8. package/dist/api/workbench-client.js +2 -1
  9. package/dist/components/Activity.css +0 -1
  10. package/dist/components/ApprovalDetail.css +1 -2
  11. package/dist/components/ApprovalDetail.d.ts +1 -1
  12. package/dist/components/ApprovalPlan.css +0 -1
  13. package/dist/components/Card.css +0 -1
  14. package/dist/components/Card.d.ts +1 -1
  15. package/dist/components/CardBoundary.d.ts +1 -1
  16. package/dist/components/CardHead.css +0 -1
  17. package/dist/components/CardHead.d.ts +1 -1
  18. package/dist/components/ChoiceGroup.css +1 -2
  19. package/dist/components/ConfirmBar.d.ts +1 -1
  20. package/dist/components/ConfirmBar.js +1 -1
  21. package/dist/components/Form.css +1 -1
  22. package/dist/components/FormActions.js +1 -1
  23. package/dist/components/LongTaskRow.css +1 -2
  24. package/dist/components/LongTaskRow.d.ts +1 -1
  25. package/dist/components/LongTaskRow.js +1 -1
  26. package/dist/components/Note.css +0 -1
  27. package/dist/components/ResourceStates.css +0 -1
  28. package/dist/components/SettingsSection.css +0 -1
  29. package/dist/components/Spinner.css +0 -1
  30. package/dist/components/Stack.css +0 -1
  31. package/dist/components/StateBlock.css +0 -1
  32. package/dist/components/board-module.d.ts +3 -3
  33. package/dist/components/icons.d.ts +1 -7
  34. package/dist/components/icons.js +11 -16
  35. package/dist/config/constants.d.ts +2 -2
  36. package/dist/config/constants.js +2 -2
  37. package/dist/config/storage.d.ts +0 -4
  38. package/dist/config/storage.js +0 -11
  39. package/dist/contract/adapters.d.ts +10 -0
  40. package/dist/contract/cli.d.ts +3 -0
  41. package/dist/contract/data.d.ts +126 -0
  42. package/dist/{api → contract}/facts.d.ts +12 -3
  43. package/dist/{api → contract}/facts.js +19 -1
  44. package/dist/contract/needs.d.ts +132 -0
  45. package/dist/contract/needs.js +232 -0
  46. package/dist/contract/plugin-source.d.ts +1 -0
  47. package/dist/contract/plugin-source.js +1 -0
  48. package/dist/contract/protocol/bundle-install.d.ts +136 -0
  49. package/dist/contract/protocol/bundle-install.js +12 -0
  50. package/dist/contract/protocol/config-sync.d.ts +55 -0
  51. package/dist/contract/protocol/config-sync.js +2 -0
  52. package/dist/contract/protocol/diy.d.ts +4 -0
  53. package/dist/contract/protocol/diy.js +4 -0
  54. package/dist/contract/protocol/dsh-plugins.d.ts +11 -0
  55. package/dist/contract/protocol/dsh-plugins.js +1 -0
  56. package/dist/contract/protocol/long-tasks.d.ts +13 -0
  57. package/dist/contract/protocol/long-tasks.js +1 -0
  58. package/dist/contract/protocol/market-index.d.ts +195 -0
  59. package/dist/contract/protocol/market-index.js +7 -0
  60. package/dist/contract/protocol/platform.d.ts +44 -0
  61. package/dist/contract/protocol/platform.js +1 -0
  62. package/dist/contract/protocol/preflight-wake.d.ts +7 -0
  63. package/dist/contract/protocol/preflight-wake.js +1 -0
  64. package/dist/contract/protocol/profile-create.d.ts +30 -0
  65. package/dist/contract/protocol/profile-create.js +2 -0
  66. package/dist/contract/protocol/sidebar-edition.d.ts +14 -0
  67. package/dist/contract/protocol/sidebar-edition.js +2 -0
  68. package/dist/contract/protocol/unit-manifests.d.ts +6 -0
  69. package/dist/contract/protocol/unit-manifests.js +1 -0
  70. package/dist/contract/unit-board.d.ts +18 -0
  71. package/dist/contract/unit-board.js +1 -0
  72. package/dist/contract/unit-capability.d.ts +34 -0
  73. package/dist/contract/unit-capability.js +1 -0
  74. package/dist/{api → contract}/unit-declaration.d.ts +7 -5
  75. package/dist/{api → contract}/unit-declaration.js +19 -13
  76. package/dist/contract/unit.d.ts +57 -0
  77. package/dist/contract/unit.js +24 -0
  78. package/dist/contract/workbench-contract.d.ts +15 -0
  79. package/dist/contract/workbench-contract.js +1 -0
  80. package/dist/host/adapter-set.d.ts +26 -0
  81. package/dist/host/adapter-set.js +243 -0
  82. package/dist/host/adapter-types.d.ts +79 -0
  83. package/dist/host/adapter-types.js +23 -0
  84. package/dist/host/adapters.d.ts +22 -0
  85. package/dist/host/adapters.js +9 -0
  86. package/dist/host/browser.d.ts +3 -0
  87. package/dist/host/browser.js +3 -0
  88. package/dist/host/changelog.d.ts +21 -0
  89. package/dist/host/changelog.js +188 -0
  90. package/dist/host/channel-plugin.d.ts +15 -0
  91. package/dist/host/channel-plugin.js +42 -0
  92. package/dist/host/cli.d.ts +4 -0
  93. package/dist/host/cli.js +7 -0
  94. package/dist/host/command-name.d.ts +1 -0
  95. package/dist/host/command-name.js +14 -0
  96. package/dist/host/data-error.d.ts +13 -0
  97. package/dist/host/data-error.js +20 -0
  98. package/dist/host/data-root.js +3 -0
  99. package/dist/host/diy-debug.js +2 -1
  100. package/dist/host/diy-record.js +2 -1
  101. package/dist/host/facts.d.ts +1 -1
  102. package/dist/host/facts.js +3 -2
  103. package/dist/host/git.js +2 -2
  104. package/dist/host/http.js +1 -1
  105. package/dist/host/lib-capabilities.d.ts +22 -0
  106. package/dist/host/lib-capabilities.js +37 -0
  107. package/dist/host/lib-install.d.ts +9 -0
  108. package/dist/host/lib-install.js +10 -0
  109. package/dist/host/long-task.d.ts +1 -1
  110. package/dist/host/long-task.js +4 -3
  111. package/dist/host/market-index.d.ts +22 -0
  112. package/dist/host/market-index.js +420 -0
  113. package/dist/host/needs.d.ts +4 -0
  114. package/dist/host/needs.js +2 -0
  115. package/dist/host/patch.d.ts +9 -0
  116. package/dist/host/patch.js +78 -0
  117. package/dist/host/paths.d.ts +12 -0
  118. package/dist/host/paths.js +28 -0
  119. package/dist/host/platform.d.ts +14 -0
  120. package/dist/host/platform.js +40 -0
  121. package/dist/host/plugin-source.d.ts +8 -6
  122. package/dist/host/plugin-source.js +43 -33
  123. package/dist/host/plugin.d.ts +4 -0
  124. package/dist/host/plugin.js +39 -0
  125. package/dist/host/port-types.d.ts +191 -0
  126. package/dist/host/port-types.js +1 -0
  127. package/dist/host/preflight.d.ts +28 -0
  128. package/dist/host/preflight.js +1 -0
  129. package/dist/host/profile-port.d.ts +4 -0
  130. package/dist/host/profile-port.js +4 -0
  131. package/dist/host/provision.d.ts +2 -2
  132. package/dist/host/provision.js +5 -3
  133. package/dist/host/recipe-rules.d.ts +5 -0
  134. package/dist/host/recipe-rules.js +382 -0
  135. package/dist/host/recipe.d.ts +14 -0
  136. package/dist/host/recipe.js +283 -0
  137. package/dist/host/shell-text.d.ts +9 -2
  138. package/dist/host/shell-text.js +15 -3
  139. package/dist/host/shell.d.ts +2 -0
  140. package/dist/host/shell.js +7 -0
  141. package/dist/host/spec.d.ts +8 -0
  142. package/dist/host/spec.js +24 -0
  143. package/dist/host/supply-index.d.ts +34 -0
  144. package/dist/host/supply-index.js +202 -0
  145. package/dist/host/supply-port.d.ts +5 -0
  146. package/dist/host/supply-port.js +39 -0
  147. package/dist/host/time.d.ts +12 -0
  148. package/dist/host/time.js +19 -0
  149. package/dist/host/tokens.d.ts +26 -0
  150. package/dist/host/tokens.js +154 -0
  151. package/dist/host/tool-approval.d.ts +12 -0
  152. package/dist/host/tool-approval.js +4 -0
  153. package/dist/host/tool-kit.js +1 -1
  154. package/dist/host/unit-face.d.ts +5 -4
  155. package/dist/host/version-range.d.ts +2 -0
  156. package/dist/host/version-range.js +73 -0
  157. package/dist/host/version.d.ts +3 -0
  158. package/dist/host/version.js +29 -0
  159. package/dist/host.d.ts +47 -16
  160. package/dist/host.js +47 -16
  161. package/dist/i18n/en.js +259 -86
  162. package/dist/i18n/index.d.ts +333 -88
  163. package/dist/i18n/merge.js +1 -1
  164. package/dist/i18n/need-text.d.ts +26 -0
  165. package/dist/i18n/need-text.js +26 -0
  166. package/dist/i18n/settings.d.ts +70 -0
  167. package/dist/i18n/settings.js +136 -0
  168. package/dist/i18n/zh.d.ts +332 -87
  169. package/dist/i18n/zh.js +260 -87
  170. package/dist/index.d.ts +24 -8
  171. package/dist/index.js +24 -8
  172. package/dist/lib/blocker-action.d.ts +0 -15
  173. package/dist/lib/blocker-action.js +1 -25
  174. package/dist/{api → lib}/dsh-client.d.ts +12 -1
  175. package/dist/lib/dsh-client.js +1 -0
  176. package/dist/lib/market-index.d.ts +7 -0
  177. package/dist/lib/market-index.js +25 -0
  178. package/dist/lib/react-types.d.ts +5 -0
  179. package/dist/lib/react-types.js +1 -0
  180. package/dist/lib/react.d.ts +1 -40
  181. package/dist/lib/react.js +0 -36
  182. package/dist/lib/ui.js +3 -9
  183. package/dist/testing/data.d.ts +13 -0
  184. package/dist/testing/data.js +46 -0
  185. package/dist/testing/declaration.d.ts +1 -1
  186. package/dist/testing/declaration.js +1 -1
  187. package/dist/testing/host-fakes.d.ts +0 -13
  188. package/dist/testing/host-fakes.js +0 -24
  189. package/dist/testing/needs.d.ts +16 -0
  190. package/dist/testing/needs.js +46 -0
  191. package/dist/testing.d.ts +2 -0
  192. package/dist/testing.js +2 -0
  193. package/package.json +18 -2
  194. package/src/api/__tests__/blocker-table.test.ts +135 -86
  195. package/src/api/blocker-table.ts +52 -26
  196. package/src/api/dsh.ts +17 -1
  197. package/src/api/host-write.ts +0 -43
  198. package/src/api/workbench-client.test.ts +2 -2
  199. package/src/api/workbench-client.ts +2 -1
  200. package/src/components/Activity.css +0 -1
  201. package/src/components/ApprovalDetail.css +1 -2
  202. package/src/components/ApprovalDetail.tsx +1 -1
  203. package/src/components/ApprovalPlan.css +0 -1
  204. package/src/components/Card.css +0 -1
  205. package/src/components/Card.tsx +1 -1
  206. package/src/components/CardAnchor.test.tsx +1 -1
  207. package/src/components/CardBoundary.tsx +1 -1
  208. package/src/components/CardHead.css +0 -1
  209. package/src/components/CardHead.tsx +1 -1
  210. package/src/components/ChoiceGroup.css +1 -2
  211. package/src/components/ConfirmBar.tsx +1 -1
  212. package/src/components/Form.css +1 -1
  213. package/src/components/Form.tsx +1 -1
  214. package/src/components/FormActions.tsx +1 -1
  215. package/src/components/LongTaskRow.css +1 -2
  216. package/src/components/LongTaskRow.tsx +1 -1
  217. package/src/components/Note.css +0 -1
  218. package/src/components/ResourceStates.css +0 -1
  219. package/src/components/SelectFieldNodes.tsx +0 -1
  220. package/src/components/SettingsSection.css +0 -1
  221. package/src/components/Spinner.css +0 -1
  222. package/src/components/Stack.css +0 -1
  223. package/src/components/StateBlock.css +0 -1
  224. package/src/components/__tests__/long-task-row.test.ts +1 -1
  225. package/src/components/board-module.ts +3 -3
  226. package/src/components/icons.tsx +16 -24
  227. package/src/config/constants.ts +2 -2
  228. package/src/config/storage.test.ts +1 -25
  229. package/src/config/storage.ts +0 -12
  230. package/src/{api → contract}/__tests__/facts.test.ts +73 -25
  231. package/src/{api → contract}/__tests__/long-task.test.ts +3 -3
  232. package/src/contract/__tests__/needs.test.ts +74 -0
  233. package/src/{host → contract}/__tests__/unit-declaration.test.ts +1 -1
  234. package/src/contract/__tests__/unit.test.ts +43 -0
  235. package/src/contract/adapters.ts +9 -0
  236. package/src/contract/cli.ts +3 -0
  237. package/src/contract/data.ts +145 -0
  238. package/src/{api → contract}/facts.ts +34 -4
  239. package/src/contract/needs.ts +331 -0
  240. package/src/contract/plugin-source.ts +1 -0
  241. package/src/contract/protocol/bundle-install.ts +198 -0
  242. package/src/contract/protocol/config-sync.ts +65 -0
  243. package/src/contract/protocol/diy.ts +4 -0
  244. package/src/contract/protocol/dsh-plugins.ts +13 -0
  245. package/src/contract/protocol/long-tasks.ts +16 -0
  246. package/src/contract/protocol/market-index.ts +246 -0
  247. package/src/contract/protocol/platform.ts +47 -0
  248. package/src/contract/protocol/preflight-wake.ts +17 -0
  249. package/src/contract/protocol/profile-create.ts +36 -0
  250. package/src/contract/protocol/sidebar-edition.ts +19 -0
  251. package/src/contract/protocol/unit-manifests.ts +8 -0
  252. package/src/contract/unit-board.ts +23 -0
  253. package/src/contract/unit-capability.ts +37 -0
  254. package/src/{host → contract}/unit-declaration.ts +22 -18
  255. package/src/contract/unit.ts +76 -0
  256. package/src/contract/workbench-contract.ts +30 -0
  257. package/src/host/__tests__/adapter-set.test.ts +228 -0
  258. package/src/host/__tests__/adapters.test.ts +27 -0
  259. package/src/host/__tests__/changelog.test.ts +102 -0
  260. package/src/host/__tests__/command-name.test.ts +16 -0
  261. package/src/host/__tests__/diy-record.test.ts +3 -3
  262. package/src/host/__tests__/facts.test.ts +5 -5
  263. package/src/host/__tests__/long-task.test.ts +1 -1
  264. package/src/host/__tests__/market-index.test.ts +179 -0
  265. package/src/host/__tests__/plugin-ledger.test.ts +10 -10
  266. package/src/host/__tests__/provision.test.ts +7 -6
  267. package/src/host/__tests__/shell-text.test.ts +16 -1
  268. package/src/host/__tests__/supply-index.test.ts +137 -0
  269. package/src/host/__tests__/tokens.test.ts +110 -0
  270. package/src/host/__tests__/version-range.test.ts +21 -0
  271. package/src/host/adapter-set.ts +298 -0
  272. package/src/host/adapter-types.ts +105 -0
  273. package/src/host/adapters.ts +44 -0
  274. package/src/host/browser.ts +3 -0
  275. package/src/host/changelog.ts +212 -0
  276. package/src/host/channel-plugin.ts +55 -0
  277. package/src/host/cli.ts +11 -0
  278. package/src/host/command-name.ts +15 -0
  279. package/src/host/data-error.ts +21 -0
  280. package/src/host/data-root.ts +2 -0
  281. package/src/host/diy-debug.ts +2 -1
  282. package/src/host/diy-record.ts +2 -1
  283. package/src/host/facts.ts +4 -3
  284. package/src/host/git.ts +2 -2
  285. package/src/host/http.ts +1 -1
  286. package/src/host/lib-capabilities.ts +52 -0
  287. package/src/host/lib-install.ts +18 -0
  288. package/src/host/long-task.ts +4 -3
  289. package/src/host/market-index.ts +413 -0
  290. package/src/host/needs.ts +6 -0
  291. package/src/host/patch.ts +93 -0
  292. package/src/host/paths.ts +37 -0
  293. package/src/host/platform.ts +48 -0
  294. package/src/host/plugin-source.ts +48 -56
  295. package/src/host/plugin.ts +39 -0
  296. package/src/host/port-types.ts +222 -0
  297. package/src/host/preflight.ts +31 -0
  298. package/src/host/profile-port.ts +9 -0
  299. package/src/host/provision.ts +7 -4
  300. package/src/host/recipe-rules.ts +330 -0
  301. package/src/host/recipe.test.ts +334 -0
  302. package/src/host/recipe.ts +323 -0
  303. package/src/host/shell-text.ts +15 -3
  304. package/src/host/shell.ts +9 -0
  305. package/src/host/spec.ts +32 -0
  306. package/src/host/supply-index.ts +256 -0
  307. package/src/host/supply-port.ts +45 -0
  308. package/src/host/time.ts +22 -0
  309. package/src/host/tokens.ts +186 -0
  310. package/src/host/tool-approval.ts +17 -0
  311. package/src/host/tool-kit.ts +1 -1
  312. package/src/host/unit-face.ts +5 -4
  313. package/src/host/version-range.ts +71 -0
  314. package/src/host/version.ts +30 -0
  315. package/src/host.ts +47 -16
  316. package/src/i18n/en.ts +261 -86
  317. package/src/i18n/merge.test.ts +6 -6
  318. package/src/i18n/merge.ts +1 -1
  319. package/src/i18n/need-text.ts +27 -0
  320. package/src/i18n/settings.ts +141 -0
  321. package/src/i18n/zh.ts +263 -87
  322. package/src/index.ts +24 -8
  323. package/src/lib/blocker-action.ts +0 -28
  324. package/src/{api → lib}/dsh-client.ts +16 -2
  325. package/src/lib/market-index.ts +36 -0
  326. package/src/lib/react-types.ts +5 -0
  327. package/src/lib/react.ts +1 -40
  328. package/src/lib/text.test.ts +2 -2
  329. package/src/lib/ui.test.ts +6 -5
  330. package/src/lib/ui.ts +3 -9
  331. package/src/testing/__tests__/declaration.test.ts +1 -1
  332. package/src/testing/data.ts +66 -0
  333. package/src/testing/declaration.ts +2 -2
  334. package/src/testing/host-fakes.ts +0 -38
  335. package/src/testing/needs.ts +80 -0
  336. package/src/testing.ts +2 -0
  337. package/dist/api/unit-board.d.ts +0 -39
  338. package/dist/api/unit-board.js +0 -45
  339. package/dist/api/unit.d.ts +0 -85
  340. package/dist/api/unit.js +0 -8
  341. package/dist/api/workbench-contract.d.ts +0 -44
  342. package/dist/components/MockStrip.css +0 -39
  343. package/dist/components/MockStrip.d.ts +0 -15
  344. package/dist/components/MockStrip.js +0 -8
  345. package/dist/components/SaveBar.css +0 -7
  346. package/dist/host/browser-find.d.ts +0 -38
  347. package/dist/host/browser-find.js +0 -242
  348. package/dist/host/browser-read.d.ts +0 -28
  349. package/dist/host/browser-read.js +0 -243
  350. package/dist/host/opencli-runtime.d.ts +0 -25
  351. package/dist/host/opencli-runtime.js +0 -56
  352. package/dist/host/opencli-window.d.ts +0 -2
  353. package/dist/host/opencli-window.js +0 -8
  354. package/dist/host/opencli.d.ts +0 -37
  355. package/dist/host/opencli.js +0 -155
  356. package/dist/host/unit-declaration.d.ts +0 -65
  357. package/dist/host/unit-declaration.js +0 -213
  358. package/dist/host/unit-libs.d.ts +0 -37
  359. package/dist/lib/diy-debug.d.ts +0 -80
  360. package/dist/lib/diy-debug.js +0 -88
  361. package/dist/lib/diy-record.d.ts +0 -135
  362. package/dist/lib/diy-record.js +0 -162
  363. package/dist/lib/lint-probe.d.ts +0 -1
  364. package/dist/lib/lint-probe.js +0 -6
  365. package/dist/lib/panel-state.d.ts +0 -120
  366. package/dist/lib/panel-state.js +0 -176
  367. package/src/api/__tests__/host-write.test.ts +0 -75
  368. package/src/api/__tests__/unit-board.test.ts +0 -76
  369. package/src/api/__tests__/unit.test.ts +0 -38
  370. package/src/api/unit-board.ts +0 -69
  371. package/src/api/unit.ts +0 -93
  372. package/src/api/workbench-contract.ts +0 -59
  373. package/src/host/__tests__/browser-find.test.ts +0 -330
  374. package/src/host/__tests__/browser-read.test.ts +0 -228
  375. package/src/host/__tests__/opencli-runtime.test.ts +0 -46
  376. package/src/host/browser-find.ts +0 -311
  377. package/src/host/browser-read.ts +0 -311
  378. package/src/host/opencli-runtime.ts +0 -79
  379. package/src/host/opencli-window.ts +0 -11
  380. package/src/host/opencli.ts +0 -213
  381. package/src/host/unit-libs.ts +0 -41
  382. package/src/lib/blocker-action.test.ts +0 -40
  383. /package/dist/{api/blocker.js → contract/adapters.js} +0 -0
  384. /package/dist/{api → contract}/blocker.d.ts +0 -0
  385. /package/dist/{api/dsh-client.js → contract/blocker.js} +0 -0
  386. /package/dist/{api/workbench-contract.js → contract/cli.js} +0 -0
  387. /package/dist/{host/unit-libs.js → contract/data.js} +0 -0
  388. /package/dist/{api → contract}/long-task.d.ts +0 -0
  389. /package/dist/{api → contract}/long-task.js +0 -0
  390. /package/src/{api → contract}/blocker.ts +0 -0
  391. /package/src/{api → contract}/long-task.ts +0 -0
@@ -2,6 +2,17 @@ import { type WorkbenchMessages } from './zh.js';
2
2
  /** 外壳自带的两份词表(`zh` 为基准、`en` 同构):`client.tsx` 拿它当合并各套件词表的底座。 */
3
3
  export declare const dictionaries: {
4
4
  zh: {
5
+ readonly 'env.need.bin.missing': "这台机器上缺命令";
6
+ readonly 'env.need.bin.hint': "先把这条命令装进 PATH,再重试。";
7
+ readonly 'env.need.extension.missing': "这个模块要的插件没装";
8
+ readonly 'env.need.extension.outdated': "这个模块要的插件版本旧了";
9
+ readonly 'env.need.extension.hint': "装好或升级之后点重试;不影响其它模块。";
10
+ readonly 'env.need.lib.missing': "这个模块要的共用依赖没装";
11
+ readonly 'env.need.lib.outdated': "这个模块要的共用依赖版本旧了";
12
+ readonly 'env.need.lib.unsatisfied': "这个模块要的共用依赖版本不对";
13
+ readonly 'env.need.lib.hint': "按下面的命令装好,再重试。";
14
+ readonly 'env.need.env.missing': "这个模块要的环境变量没设";
15
+ readonly 'env.need.env.hint': "设好这个变量后重启工作台;它的值不会被任何界面回显。";
5
16
  readonly 'brand.name': "工作台";
6
17
  readonly 'toggle.open': "打开侧边栏";
7
18
  readonly 'toggle.collapse': "收起侧边栏";
@@ -23,7 +34,7 @@ export declare const dictionaries: {
23
34
  readonly 'project.rename.title': "给「{name}」配一个中文名";
24
35
  readonly 'project.rename.description': "显示在目录名后面。改的是工作区本身的名字。";
25
36
  readonly 'project.rename.field': "中文名";
26
- readonly 'project.rename.placeholder': "例如:工作台外壳";
37
+ readonly 'project.rename.placeholder': "例如:我的工作台";
27
38
  readonly 'project.rename.hint': "留空 = 只显示目录名";
28
39
  readonly 'project.rename.save': "保存";
29
40
  readonly 'project.rename.saving': "保存中…";
@@ -89,13 +100,15 @@ export declare const dictionaries: {
89
100
  readonly 'panels.buildModule': "造一个模块";
90
101
  readonly 'panels.failed': "改配置失败了,再试一次。";
91
102
  readonly 'panels.dragHint': "拖动调整顺序";
92
- readonly 'panels.unknownStep': "这一层没有套件提供";
103
+ readonly 'panels.unknownStep': "这一块还没有面板";
93
104
  readonly 'panels.labelWithHint': "{label}({hint})";
94
105
  readonly 'panels.hintJoin': ";";
95
106
  readonly 'panels.dep.failed': "⚠ 起不来";
96
- readonly 'panels.dep.missingPlugin': "⚠ 还没装好";
97
- readonly 'panels.dep.missingCommands': "⚠ 需要更新";
98
107
  readonly 'panels.dep.unchecked': "⚠ 检测不了";
108
+ readonly 'panels.dep.missing': "⚠ 缺依赖";
109
+ readonly 'panels.dep.outdated': "⚠ 需要更新";
110
+ readonly 'panels.dep.degraded': "⚠ 可选没装";
111
+ readonly 'panels.dep.unsupported': "⚠ 需要更新工作台";
99
112
  readonly 'panels.tab.modules': "面板配置";
100
113
  readonly 'panels.tab.market': "工作台模块市场";
101
114
  readonly 'panels.browseMarket': "浏览模块市场";
@@ -107,11 +120,12 @@ export declare const dictionaries: {
107
120
  readonly 'panels.market.broken': "装坏了";
108
121
  readonly 'panels.market.hasNew': "有新版本";
109
122
  readonly 'panels.market.hasProblem': "模块异常";
110
- readonly 'panels.market.missing': "未装";
123
+ readonly 'panels.market.missing': "缺依赖";
111
124
  readonly 'panels.market.unchecked': "状态未知";
125
+ readonly 'panels.market.uncheckedHint': "重启一次工作台再试";
112
126
  readonly 'panels.market.checking': "检测中";
113
127
  readonly 'panels.market.sectionInstalled': "已安装模块";
114
- readonly 'panels.market.sectionPending': "未安装";
128
+ readonly 'panels.market.sectionPending': "未就绪";
115
129
  readonly 'panels.market.sectionShared': "共用依赖";
116
130
  readonly 'panels.market.sharedUsedBy': "供 {modules} 模块使用";
117
131
  readonly 'panels.market.listSeparator': "、";
@@ -121,9 +135,18 @@ export declare const dictionaries: {
121
135
  readonly 'panels.market.sharedOk': "已就绪";
122
136
  readonly 'panels.market.versionArrow': "{from} → {to}";
123
137
  readonly 'panels.market.lead': "装在这台机器上,所有项目共用。";
124
- readonly 'panels.market.install': "安装";
138
+ readonly 'panels.market.install': "装依赖";
125
139
  readonly 'panels.market.update': "更新";
126
140
  readonly 'panels.market.swapSlow': "还没换上:可能网慢或没装上。再点一次「更新」;一直这样就把 dsh 重启一遍。";
141
+ readonly 'panels.market.removeSlow': "还没卸掉:可能网慢或卸载没走完。等一下再看;一直这样就把 dsh 重启一遍。";
142
+ readonly 'panels.market.updateNoChange': "没换成:点下去是 {from},跑完盘上还是这一版;源上最新是 {latest}。";
143
+ readonly 'panels.market.updateUnknownVersion': "(问不到)";
144
+ readonly 'panels.market.updateGone': "没换成:更新跑完盘上读不到这个模块。";
145
+ readonly 'panels.market.updateRestored': "没换成:盘上已经读不到新版本,已把 {version} 装回去。";
146
+ readonly 'panels.market.updateBehind': "装上了 {installed},但源上最新是 {latest} —— 没更到最新,可以再点一次。";
147
+ readonly 'panels.market.selfUpdateFailed': "自更新没成:{reason}";
148
+ readonly 'panels.market.selfUpdateUnknown': "外部进程没留下原因(看 ~/.dsh/workbench/self-update.log)";
149
+ readonly 'panels.market.selfUpdateRolledBack': "没换成,已回滚到 {version}。";
127
150
  readonly 'panels.market.uninstall': "卸载";
128
151
  readonly 'panels.market.uninstallLabel': "卸载 {name}";
129
152
  readonly 'panels.market.installing': "正在安装…";
@@ -137,24 +160,19 @@ export declare const dictionaries: {
137
160
  readonly 'panels.market.failed': "没成功:{reason}";
138
161
  readonly 'panels.market.needEnv': "先在启动工作台的终端里设 {env}";
139
162
  readonly 'panels.market.needCommands': "缺这几条命令:{commands}";
163
+ readonly 'panels.market.needBinary': "先装 {command} 命令";
164
+ readonly 'panels.market.needLib': "先装共用依赖 {name}";
140
165
  readonly 'panels.market.localMark': "本地";
141
- readonly 'panels.market.localHint': "本机那份(不从源上取)。";
142
166
  readonly 'panels.market.noSource': "这个模块没声明怎么装,只能自己动手";
143
167
  readonly 'panels.market.badSource': "安装方式没写全,只能自己动手";
144
168
  readonly 'panels.market.empty': "暂无可用模块";
145
169
  readonly 'panels.market.sectionPlugins': "已安装 opencli 插件";
146
170
  readonly 'panels.market.moduleOutdated': "有新版";
147
171
  readonly 'panels.market.moduleRefused': "模块版本与工作台不匹配,暂时无法使用";
148
- readonly 'panels.market.moduleRefusedDetail': "装不上的原因:{reason}";
149
172
  readonly 'panels.market.moduleRestartHint': "重启后生效";
150
173
  readonly 'panels.market.pendingRestart': "重启后生效";
151
174
  readonly 'panels.market.workbenchName': "工作台";
152
- readonly 'panels.market.workbenchLocal': "这份是本仓正在开发的那一份,不从源上取。";
153
- readonly 'panels.market.pluginKeptInUse': "文件先留着:{names} 还要用它。";
154
- readonly 'panels.market.pluginKeptUnsure': "文件先留着:这台机器上还有模块看不出用了什么,说不准谁在用它。";
155
- readonly 'panels.market.pluginKeptHeld': "文件留着:你自己装的那一份,模块放手不动它。";
156
- readonly 'panels.market.pluginKeptUnnamed': "文件先留着:看不出这是哪个插件,说不准谁在用它。";
157
- readonly 'panels.market.pluginBroken': "这份装坏了:看不出它是个插件。可以卸载,或者直接跟 agent 说:用 workbench_modules_install_bundle 按包名再装一次。";
175
+ readonly 'panels.market.pluginBroken': "这份插件装坏了:认不出它是什么。可以先卸载,再让 agent 按包名重装一次。";
158
176
  readonly 'panels.market.restartNeeded': "新版装好了,重启一次才生效。";
159
177
  readonly 'panels.market.foot': "装好后到那个项目的面板页勾选它,模块才会出现。";
160
178
  readonly 'panels.market.recheck': "重新检查更新";
@@ -199,7 +217,7 @@ export declare const dictionaries: {
199
217
  readonly 'panels.market.add.cancelledTitle': "已取消";
200
218
  readonly 'panels.market.add.failureNetworkHost': "无法连接 {host}。Git 地址和 .tgz 直链不经过安装源,需要本机能直接访问它或配置代理;如果这个模块也发布到了 npm,请改填包名。";
201
219
  readonly 'panels.market.add.problemInvalid': "无法识别这个包名或地址:{reason}";
202
- readonly 'panels.market.add.problemInstalled': "该模块已安装";
220
+ readonly 'panels.market.add.problemInstalled': "这个模块已经装过了(要换版本请带上 @版本)";
203
221
  readonly 'panels.market.add.problemNotFound': "未找到相关模块";
204
222
  readonly 'panels.market.add.problemNotPackage': "该路径不存在或不是有效的模块包";
205
223
  readonly 'panels.market.add.problemNotBundle': "这个包装不进这里:{reason}。这个入口按包名认工作台模块和 opencli 插件,两种都能装;但 git 地址和 tarball 判断不出它是什么 —— 要是它其实是这两样之一,请改填包名或本地目录。";
@@ -220,7 +238,7 @@ export declare const dictionaries: {
220
238
  readonly 'panels.market.add.failureIntegrity': "下载的安装包校验失败";
221
239
  readonly 'panels.market.add.failureTimeout': "安装超时";
222
240
  readonly 'panels.market.add.failurePnpmMissing': "没有找到 pnpm,无法安装";
223
- readonly 'panels.market.add.failureInstalled': "它已经在这份 profile 里了:这一版 dsh 开着热更新,同一个包不许就地覆盖装(得先卸载再装),而这次也没能把它卸下来";
241
+ readonly 'panels.market.add.failureInstalled': "它已经装在这份工作台里了。同一个包不能就地覆盖,得先卸载再装;这次卸载也没成功。";
224
242
  readonly 'panels.market.add.failureGeneric': "安装过程中出错,原因见安装详情";
225
243
  readonly 'panels.market.add.approveTitle': "需要你允许安装脚本";
226
244
  readonly 'panels.market.add.approveCaution': "只允许你信得过的包:安装脚本会以你的权限在这台机器上运行。";
@@ -253,12 +271,148 @@ export declare const dictionaries: {
253
271
  readonly 'panels.market.add.close': "关闭";
254
272
  readonly 'panels.market.add.retry': "重试";
255
273
  readonly 'panels.market.add.changeSource': "换源";
274
+ readonly 'panels.market.tabInstalled': "已安装";
275
+ readonly 'panels.market.tabs': "模块市场的两个面";
276
+ readonly 'panels.tab.discover': "发现";
277
+ readonly 'panels.discover.loading': "正在读取索引";
278
+ readonly 'panels.discover.lead': "从索引源浏览模块;装上就能用。";
279
+ readonly 'panels.discover.addSource': "添加";
280
+ readonly 'panels.discover.addFirstSource': "添加索引源";
281
+ readonly 'panels.discover.removeSource': "移除";
282
+ readonly 'panels.discover.removeSourceNamed': "移除 {url}";
283
+ readonly 'panels.discover.refresh': "刷新";
284
+ readonly 'panels.discover.search': "搜索模块";
285
+ readonly 'panels.discover.all': "全部";
286
+ readonly 'panels.discover.sourceLabel': "名字";
287
+ readonly 'panels.discover.sourceKind': "类型";
288
+ readonly 'panels.discover.sourceKindHttp': "http 地址";
289
+ readonly 'panels.discover.sourceKindGit': "git 仓库";
290
+ readonly 'panels.discover.sourceUrl': "索引 URL";
291
+ readonly 'panels.discover.sourcePlaceholder': "https://example.com/index.json 或 git@git.example.com:wb/market.git";
292
+ readonly 'panels.discover.sourceRef': "分支";
293
+ readonly 'panels.discover.sourcePath': "索引文件";
294
+ readonly 'panels.discover.sourceLocal': "本地 clone(可选)";
295
+ readonly 'panels.discover.sourceLocalHint': "不填就 clone 到 ~/.dsh/workbench/market-index/。";
296
+ readonly 'panels.discover.save': "保存并刷新";
297
+ readonly 'panels.discover.cancel': "取消";
298
+ readonly 'panels.discover.retry': "重试";
299
+ readonly 'panels.discover.noSource': "还没有模块市场";
300
+ readonly 'panels.discover.noSourceHint': "添加一个模块市场索引(http 地址或 git 仓库),即可在这里浏览和安装其中的模块";
301
+ readonly 'panels.discover.sourcesFailed': "无法读取索引源";
302
+ readonly 'panels.discover.unreadable': "无法读取此索引";
303
+ readonly 'panels.discover.invalid': "此索引的格式无效";
304
+ readonly 'panels.discover.emptyRepo': "这个仓库还没有任何提交";
305
+ readonly 'panels.discover.missingIndex': "仓库里还没有索引文件 {path}";
306
+ readonly 'panels.discover.initTitle': "把这个仓库初始化成模块市场索引?";
307
+ readonly 'panels.discover.initCta': "初始化成市场索引";
308
+ readonly 'panels.discover.initWhat': "会在 {branch} 分支写 market.json 与 README.md,提交一次并推上去;之后从这个工作台发布的模块会把产物提交到 packages/<unit>/。仓库的写权限归它的所有者。";
309
+ readonly 'panels.discover.initBranch': "分支";
310
+ readonly 'panels.discover.initBranchHint': "索引与产物都发到这个分支;空仓库会新建它。";
311
+ readonly 'panels.discover.initBranchBad': "分支名只能用字母、数字、点、下划线、斜杠或短横线";
312
+ readonly 'panels.discover.initOk': "初始化";
313
+ readonly 'panels.discover.initBusy': "正在初始化…";
314
+ readonly 'panels.discover.initDone': "市场索引已初始化({branch})";
315
+ readonly 'panels.discover.stale': "读不到最新的,下面仍是上次成功的缓存。";
316
+ readonly 'panels.discover.empty': "此索引没有模块";
317
+ readonly 'panels.discover.noMatch': "没有符合条件的模块";
318
+ readonly 'panels.discover.notInstalled': "未装";
319
+ readonly 'panels.discover.installed': "已装";
320
+ readonly 'panels.discover.installedVersion': "已装 {version}";
321
+ readonly 'panels.discover.update': "可更新";
322
+ readonly 'panels.discover.badShell': "不可装";
323
+ readonly 'panels.discover.badShellDetail': "此版本与当前的工作台 {current} 不兼容,它要求 {peer}";
324
+ readonly 'panels.discover.unverified': "工作台未验证";
325
+ readonly 'panels.discover.installing': "正在安装…";
326
+ readonly 'panels.discover.installedDone': "装好了:{name}";
327
+ readonly 'panels.discover.failed': "操作失败:{reason}";
328
+ readonly 'panels.discover.expand': "展开版本";
329
+ readonly 'panels.discover.collapse': "收起版本";
330
+ readonly 'panels.discover.versionCount': "{n} 个版本";
331
+ readonly 'panels.discover.sourceNpm': "npm · {registry}";
332
+ readonly 'panels.discover.sourceNpmDefault': "默认源";
333
+ readonly 'panels.discover.sourceGit': "git · {commit}";
334
+ readonly 'panels.discover.installVersion': "安装 {version}";
335
+ readonly 'panels.discover.confirmTitle': "安装「{name}」?";
336
+ readonly 'panels.discover.confirmDetail': "来源:{source}。索引源是同事维护的目录,不是官方签名;已装别的版本会先卸载再装。";
337
+ readonly 'panels.discover.confirmAck': "我知道这不是官方来源";
338
+ readonly 'panels.discover.confirmOk': "安装";
339
+ readonly 'panels.discover.confirmCancel': "取消";
340
+ readonly 'panels.discover.marketMenu': "切换模块市场,当前为 {market}";
341
+ readonly 'panels.discover.manageSources': "管理索引源…";
342
+ readonly 'panels.discover.sourcesTitle': "索引源";
343
+ readonly 'panels.discover.sourcesIntro': "模块市场以一个索引文件的 URL 提供,支持 http(s) 地址或 git 仓库;「发现」从这里列出的索引浏览模块";
344
+ readonly 'panels.discover.sourcesLabel': "已添加的索引源";
345
+ readonly 'panels.discover.sourceTrust': "索引由第三方提供。只添加你信任的来源:其中的模块安装后以你的权限运行";
346
+ readonly 'panels.discover.sourceDuplicate': "已添加过这个索引源";
347
+ readonly 'panels.discover.sourceBadUrl': "请使用 http(s) 地址或 git 仓库地址,且不要包含用户名、密码或 # 片段";
348
+ readonly 'panels.discover.close': "关闭";
349
+ readonly 'panels.discover.labelsMenu': "标签";
350
+ readonly 'panels.discover.labelsCount': "标签 · {count}";
351
+ readonly 'panels.discover.tagsAll': "全部标签";
352
+ readonly 'panels.discover.sort': "排序";
353
+ readonly 'panels.discover.sortWith': "排序:{label}";
354
+ readonly 'panels.discover.sortRelevance': "最佳匹配";
355
+ readonly 'panels.discover.sortDefault': "默认顺序";
356
+ readonly 'panels.discover.sortPublished': "发布时间";
357
+ readonly 'panels.discover.categoriesLabel': "分类";
358
+ readonly 'panels.discover.showMore': "显示更多";
359
+ readonly 'panels.discover.entryMeta': "{version} · {date}";
360
+ readonly 'panels.discover.entryMetaAuthor': "{version} · {author} · {date}";
361
+ readonly 'panels.discover.openEntry': "查看 {name}";
362
+ readonly 'panels.discover.cardInstall': "安装";
363
+ readonly 'panels.discover.cardInstalled': "已安装";
364
+ readonly 'panels.discover.cardUpdate': "有新版本";
365
+ readonly 'panels.discover.cardBlocked': "无可用版本";
366
+ readonly 'panels.discover.installTitle': "安装 {name}";
367
+ readonly 'panels.discover.installVersionTitle': "安装 {name} {version}";
368
+ readonly 'panels.discover.openInstalled': "在已安装中查看 {name}";
369
+ readonly 'panels.discover.noCompatibleVersion': "没有与当前工作台 {runtime} 兼容的版本";
370
+ readonly 'panels.discover.detailBack': "发现";
371
+ readonly 'panels.discover.publishedAt': "发布于 {date}";
372
+ readonly 'panels.discover.detailMarket': "索引源 {label}";
373
+ readonly 'panels.discover.detailIncompatible': "需要工作台 {peer},当前是 {current}";
374
+ readonly 'panels.discover.detailUnknown': "工作台兼容性未验证:索引里没有可读的 package.json。";
375
+ readonly 'panels.discover.detailSource': "来源";
376
+ readonly 'panels.discover.authorUnknown': "未署名";
377
+ readonly 'panels.discover.tabOverview': "概览";
378
+ readonly 'panels.discover.tabReadme': "说明";
379
+ readonly 'panels.discover.tabChangelog': "更新日志";
380
+ readonly 'panels.discover.docTitle': "{version} 的{kind}";
381
+ readonly 'panels.discover.docReadme': "说明";
382
+ readonly 'panels.discover.docChangelog': "更新日志";
383
+ readonly 'panels.discover.docLoading': "正在读取…";
384
+ readonly 'panels.discover.docMissing': "这个版本没有随包发布{kind}";
385
+ readonly 'panels.discover.docUnavailable': "读不到这个版本的{kind}:{reason}";
386
+ readonly 'panels.discover.docUnknownReason': "未知原因";
387
+ readonly 'panels.discover.detailTabs': "模块详情";
388
+ readonly 'panels.discover.factPackage': "软件包";
389
+ readonly 'panels.discover.factRegistry': "注册表";
390
+ readonly 'panels.discover.factRepository': "仓库";
391
+ readonly 'panels.discover.factCommit': "提交";
392
+ readonly 'panels.discover.factDirectory': "目录";
393
+ readonly 'panels.discover.factPublished': "发布时间";
394
+ readonly 'panels.discover.factAuthor': "作者";
395
+ readonly 'panels.discover.factHomepage': "主页";
396
+ readonly 'panels.discover.factCategory': "分类";
397
+ readonly 'panels.discover.factLabels': "标签";
398
+ readonly 'panels.discover.factMarket': "索引源";
399
+ readonly 'panels.discover.detailVersions': "版本";
400
+ readonly 'panels.discover.versionsLabel': "{name} 的版本";
401
+ readonly 'panels.discover.tagRecommended': "推荐";
402
+ readonly 'panels.discover.tagPrerelease': "预发布";
403
+ readonly 'panels.discover.tagInstalled': "当前已安装";
404
+ readonly 'panels.discover.tagIncompatible': "不兼容";
405
+ readonly 'panels.discover.tagUnknown': "未验证";
406
+ readonly 'panels.discover.selected': "当前";
407
+ readonly 'panels.discover.done': "完成";
408
+ readonly 'panels.discover.installTrust': "模块在本机以你的权限运行。请确认你信任它的来源";
409
+ readonly 'panels.discover.progress': "已显示 {shown} / {total}";
256
410
  readonly 'panels.market.add.approveBuilds': "允许这些脚本并重试";
257
411
  readonly 'panels.market.add.approveHint': "这几个包要跑安装脚本:{packages}";
258
412
  readonly 'panels.market.add.doneApplied': "装好了,已经生效。";
259
413
  readonly 'panels.market.add.doneRestart': "装好了,重启一次才生效。";
260
414
  readonly 'panels.market.add.restartWhy': "为什么这一版要重启:{reason}";
261
- readonly 'panels.market.add.restartWhy.no-hmr': "这个 profile 只在启动时应用改动(没开热换)";
415
+ readonly 'panels.market.add.restartWhy.no-hmr': "这个配置只在启动时应用改动(没开热更新)";
262
416
  readonly 'panels.market.add.restartWhy.package-moved': "某个已经装着的包换到了新的目录,或者这一下换掉了 dsh 自己提供的那份";
263
417
  readonly 'panels.market.add.restartWhy.host-module': "这一下动到了 dsh 自己加载的模块";
264
418
  readonly 'panels.market.add.restartWhy.unmanaged-plugin': "这一下动到了插件清单之外正在跑的插件";
@@ -273,17 +427,17 @@ export declare const dictionaries: {
273
427
  readonly 'panels.market.add.remove': "移除它";
274
428
  readonly 'panels.market.add.problem.invalidSpec': "这个写法不认:不能是空的,也不能以横杠开头。";
275
429
  readonly 'panels.market.add.problem.alreadyInstalled': "这个包已经在 profile 里了(要换版本请带上 @版本)。";
276
- readonly 'panels.market.add.problem.notFound': "源上没有这个包。";
277
- readonly 'panels.market.add.problem.notAPackage': "这个位置没有包。";
278
- readonly 'panels.market.add.problem.notABundle': "它是一个 npm 包,但不是 dsh 插件包(没有 bundle patch)。";
279
- readonly 'panels.market.add.problem.network': "源连不上。";
280
- readonly 'panels.market.add.problem.unknown': "预检没通过(原因未知)。";
430
+ readonly 'panels.market.add.problem.notFound': "源上没有这个包。换个包名或版本再试。";
431
+ readonly 'panels.market.add.problem.notAPackage': "这个位置没有包。选一个包含 package.json 的目录。";
432
+ readonly 'panels.market.add.problem.notABundle': "它是一个 npm 包,但不是 dsh 插件包(缺 dsh 的接线声明)。";
433
+ readonly 'panels.market.add.problem.network': "源连不上。检查网络后重试。";
434
+ readonly 'panels.market.add.problem.unknown': "预检没通过(原因未知)。展开安装详情看原始输出,或重试。";
281
435
  readonly 'panels.market.add.reason.invalidSpec': "写法不认";
282
436
  readonly 'panels.market.add.reason.incompatible': "它要的 dsh 版本和这台机器上的不一致";
283
437
  readonly 'panels.market.add.reason.notBundle': "它不是一个 dsh 插件包";
284
438
  readonly 'panels.market.add.reason.notRemovable': "它是安装自带的组合包,不能卸";
285
439
  readonly 'panels.market.add.reason.bundleInUse': "还有东西在用它,卸不掉";
286
- readonly 'panels.market.add.reason.stopProfile': "这个 profile 没开热更新,得先停掉进程";
440
+ readonly 'panels.market.add.reason.stopProfile': "这个配置没开热更新,得先停掉进程";
287
441
  readonly 'panels.market.add.reason.staleApproval': "要允许的安装脚本已经变了,重新来一次";
288
442
  readonly 'panels.market.add.reason.operationError': "pnpm 执行出错(详情见安装输出)";
289
443
  readonly 'panels.market.add.reason.buildBlocked': "pnpm 拦下了安装脚本";
@@ -308,7 +462,7 @@ export declare const dictionaries: {
308
462
  readonly 'blocker.login.titleGeneric': "需要登录";
309
463
  readonly 'blocker.login.hint': "工作台用你的浏览器登录态;登录一次就行,之后不用再登。";
310
464
  readonly 'blocker.login.go': "去登录";
311
- readonly 'blocker.login.manual': "在终端执行 `opencli coding team-current`,按提示完成登录后重试。";
465
+ readonly 'blocker.login.manual': "在终端执行该插件的登录命令(见插件的文档),按提示完成登录后重试。";
312
466
  readonly 'blocker.forbidden.title': "没有权限访问 {platform}";
313
467
  readonly 'blocker.forbidden.titleGeneric': "没有权限";
314
468
  readonly 'blocker.forbidden.hint': "账号已登录,但没有这个项目/仓库的权限;申请之后再试。";
@@ -322,27 +476,30 @@ export declare const dictionaries: {
322
476
  readonly 'panels.empty': "面板里还没有模块";
323
477
  readonly 'panels.emptyHint': "也可以直接跟 agent 说:「把某个模块加到面板」。";
324
478
  readonly 'env.title': "准备工作台";
325
- readonly 'env.checking': "正在检测运行环境…";
326
- readonly 'env.installing': "正在安装缺失的依赖…";
479
+ readonly 'env.checking': "正在准备运行环境…";
480
+ readonly 'env.installing': "正在安装后台工具,第一次会慢一点…";
327
481
  readonly 'env.failed': "还差一步就能用了";
328
482
  readonly 'env.elapsed': "已等待 {seconds} 秒";
329
483
  readonly 'env.stepFailed.install': "装不上";
330
484
  readonly 'env.stepFailed.path': "装了但还找不到";
331
485
  readonly 'env.stepFailed.shell': "执行通道不可用";
486
+ readonly 'env.toolchain.ok': "正常";
487
+ readonly 'env.toolchain.warn': "还没完全准备好";
488
+ readonly 'env.opencli.ok': "已就绪";
332
489
  readonly 'env.bridge.ok': "已连接";
333
- readonly 'env.bridge.short': "没连上";
334
- readonly 'env.bridge.why': "面板的数据要走你浏览器里的登录态:这个通道没连上,模块就取不到数据(不拦路:修好它,或者先进入工作台)。";
335
- readonly 'env.bridge.hold': "浏览器通道还没连上 —— 按下面修好后点「重试」,也可以先进工作台。";
490
+ readonly 'env.bridge.short': "还没连上";
491
+ readonly 'env.bridge.why': "面板的数据要用你浏览器里的登录状态。这个连接没通,模块就取不到数据;不拦路:修好它,或者先进入工作台。";
492
+ readonly 'env.bridge.hold': "浏览器还没连上 —— 按下面修好后点「重试」,也可以先进工作台。";
336
493
  readonly 'env.bridge.daemon': "后台服务没起来:正常它会自己起,先在终端跑下面这条命令。";
337
- readonly 'env.bridge.extension': "浏览器扩展没连上:在 Chrome 应用商店装一次就好(装完回来点「重试」)。已经装过的话,先跑下面这条命令。";
494
+ readonly 'env.bridge.extension': "浏览器扩展没连上:确认浏览器开着、扩展已启用;没装就从商店装一次(装完回来点「重试」)。";
338
495
  readonly 'env.bridge.extensionLink': "去 Chrome 应用商店装扩展";
339
- readonly 'env.bridge.profile': "连上了多个浏览器 profile,但没选默认的那个:先看有哪些(下面这条命令),再选一个。";
340
- readonly 'env.bridge.stale': "默认的浏览器 profile 已经失效(它记的是上一次的扩展实例):重新选一个。";
341
- readonly 'env.bridge.unknown': "没认出是哪种问题:下面原始输出里有 opencli 自己给的步骤。";
496
+ readonly 'env.bridge.profile': "连上了多个浏览器账号,但没选默认的那个:先看有哪些(下面这条命令),再选一个。";
497
+ readonly 'env.bridge.stale': "默认的浏览器账号已经失效(它记的是上一次的扩展实例):重新选一个。";
498
+ readonly 'env.bridge.unknown': "没认出是哪种问题:展开原文,按里面的步骤处理。";
342
499
  readonly 'env.fix.title': "怎么解决";
343
- readonly 'env.fix.why': "工作台用它自己那份 opencli(与你在终端里那套分开装,互不影响),这台机器上还没装好它。";
344
- readonly 'env.fix.whyPath': "opencli 装上了,但当前环境还找不到它 —— 通常是 PATH 或终端会话的问题。";
345
- readonly 'env.fix.whyShell': "工作台拿不到执行命令的通道,所以取不了数据 —— 这一步用户自己装不了。";
500
+ readonly 'env.fix.why': "工作台用它自己那份后台工具(与你在终端里那套分开装,互不影响),这台机器上还没装好它。";
501
+ readonly 'env.fix.whyPath': "后台工具装上了,但当前环境还找不到它 —— 通常是 PATH 或终端会话的问题。";
502
+ readonly 'env.fix.whyShell': "工作台拿不到执行命令的通道,所以取不了数据 —— 这一步你装不了,需要有人处理后台环境。";
346
503
  readonly 'env.fix.step': "在终端里运行下面这条命令,装好之后点「重试」:";
347
504
  readonly 'env.fix.stepPath': "新开一个终端窗口(或确认 npm 的全局 bin 目录在 PATH 里),然后点「重试」。";
348
505
  readonly 'env.fix.stepShell': "重启一次工作台(或 dsh);如果反复出现,说明执行通道没配好。";
@@ -350,32 +507,47 @@ export declare const dictionaries: {
350
507
  readonly 'env.fix.network': "网络不通:检查网络或代理设置后重试。";
351
508
  readonly 'env.fix.details': "详细输出(排障用)";
352
509
  readonly 'env.retry': "重试";
510
+ readonly 'env.wake': "打开浏览器";
511
+ readonly 'env.wake.opening': "正在打开浏览器…";
512
+ readonly 'env.wake.browserOpen': "浏览器已经开着,但扩展没连上 —— 检查扩展是否启用。";
513
+ readonly 'env.wake.noBrowser': "没找到可打开的 Chrome / Edge / Brave / Chromium / Vivaldi,请手动打开。";
514
+ readonly 'env.wake.failed': "这次没打开成功,可以再试一次。";
353
515
  readonly 'env.bridge.continue': "先进入工作台";
354
516
  readonly 'env.diy.ok': "可用";
355
- readonly 'env.diy.short': "挂不起来";
356
- readonly 'env.diy.hold': "DIY 模式挂不起来 —— 升级 dsh 后点「重试」,也可以先进工作台。";
357
- readonly 'env.diy.why': "「工作台 DIY」是 dsh 的一个 agent preset,而它是照这份外壳验过的那一代 dsh 生成的:这台机器上的 dsh 比它旧,其中几行 dsh 根本没有,于是这个模式整个挂不起来。dsh 的模式选择器只列挂得起来的,进去之后它会整个不出现 —— 面板与其它功能不受影响。";
358
- readonly 'env.diy.rows': "这一代 dsh 缺这几行:{rows}";
359
- readonly 'env.diy.noRow': "体检没在 dsh 的 preset 名单里看到「工作台 DIY」—— 多半是这份 bundle 的 preset 补丁没生效。";
517
+ readonly 'env.diy.short': "暂时不可用";
518
+ readonly 'env.diy.hold': "DIY 模式暂时不可用 —— 升级 dsh 后点「重试」,也可以先进工作台。";
519
+ readonly 'env.diy.why': "这台机器上的 dsh 比工作台验过的旧,DIY 模式用不了;面板和其它功能不受影响。升级 dsh 后重启再试。";
520
+ readonly 'env.diy.rows': "这一代 dsh 缺这几项:{rows}";
521
+ readonly 'env.diy.noRow': "体检没在 dsh 的模式名单里看到「工作台 DIY 模式」—— 多半是工作台这份安装没带上对应的模式补丁。";
360
522
  readonly 'env.diy.step': "升级 dsh,然后重启一次工作台:";
361
523
  readonly 'env.diy.continue': "先进入工作台";
362
524
  readonly 'env.copyCommand': "复制命令";
363
525
  readonly 'env.copied': "已复制";
364
- readonly 'env.step.opencli': "检测工作台的 opencli";
365
- readonly 'env.step.codingPlugin': "检测 coding 插件";
366
- readonly 'env.step.bridge': "检测浏览器通道";
367
- readonly 'env.step.diy': "检查 DIY 模式";
368
- readonly 'env.step.warm': "预热站点登录态";
369
- readonly 'env.warm.done': "已预热 {n} 个站点";
370
- readonly 'env.warm.short': "这次没热上 —— 不影响用,面板第一次读取会自己补";
526
+ readonly 'env.step.toolchain': "运行环境";
527
+ readonly 'env.step.opencli': "后台工具";
528
+ readonly 'env.step.bridge': "浏览器连接";
529
+ readonly 'env.step.diy': "DIY 模式";
530
+ readonly 'env.step.warm': "站点登录状态";
531
+ readonly 'env.warm.done': "已就绪({n} 个站点)";
532
+ readonly 'env.warm.short': "这次没提前连上 —— 不影响用,第一次取数会自己补";
371
533
  readonly 'env.unit.failed': "这个模块起不来";
372
534
  readonly 'env.unit.failedHint': "它自己装配时报了错,别的模块不受影响。";
373
- readonly 'env.unit.missingPlugin': "这个模块还没装好";
374
- readonly 'env.unit.missingCommandsHint': "更新之后就能用了。";
375
535
  readonly 'env.unit.unchecked': "检测不了:拿不到执行通道";
376
536
  readonly 'env.unit.uncheckedHint': "不是这个模块的问题,是执行通道不可用 —— 重启一次工作台再试。";
377
- readonly 'env.unit.missingCommands': "这个模块的版本旧了";
537
+ readonly 'adapterSet.not-configured': "没配置适配器集合,用默认的。";
538
+ readonly 'adapterSet.no-profile': "找不到 profile,没法加载适配器集合;先用默认的。";
539
+ readonly 'adapterSet.malformed': "适配器集合要写包名(如 @acme/adapters-set);先用默认的。";
540
+ readonly 'adapterSet.not-resolvable': "配置里的 {spec} 在这个 profile 里找不到;先把它装进来,或删掉这行配置。";
541
+ readonly 'adapterSet.import-failed': "{spec} 的入口没加载成;先用默认集合。";
542
+ readonly 'adapterSet.bad-export': "{spec} 没导出 createAdapterSet(ctx);先用默认集合。";
543
+ readonly 'adapterSet.factory-failed': "{spec} 的工厂抛错了;先用默认集合。";
544
+ readonly 'adapterSet.incompatible-version': "{spec} 的适配器协议版本不对;升级适配器集合或工作台,再重试。";
545
+ readonly 'adapterSet.missing-member': "{spec} 少了必需的成员;先用默认集合。";
378
546
  readonly 'env.unit.hint': "装好之后点重试;不影响其它模块。";
547
+ readonly 'env.unit.unsupported': "这个模块要的东西工作台还不认识";
548
+ readonly 'env.unit.unsupportedHint': "它用了更新的工作台才有的需要类型:升级工作台,或让模块作者降回 v2 已有的种类。";
549
+ readonly 'env.unit.degraded': "这个模块少一样可选的东西";
550
+ readonly 'env.unit.degradedHint': "不影响使用;要补齐就按下面的命令来。";
379
551
  readonly 'rightbar.label': "数据面板";
380
552
  readonly 'rightbar.expand': "展开数据面板";
381
553
  readonly 'rightbar.collapse': "收起数据面板";
@@ -387,44 +559,28 @@ export declare const dictionaries: {
387
559
  readonly 'rightbar.updatedAt': "更新于 {time}";
388
560
  readonly 'rightbar.noProject': "当前会话没有所属项目";
389
561
  readonly 'rightbar.openPlatform': "在平台上打开";
390
- readonly 'coding.notARepo.title': "这个项目不是 Coding 仓库";
391
562
  readonly 'error.unknown': "出错了";
392
563
  readonly 'board.title': "工作台面板";
393
564
  readonly 'panel.conversation': "对话";
394
565
  readonly 'panels.label': "全局面板";
395
- readonly 'configSync.nav': "配置同步";
396
- readonly 'configSync.lead': "把另一个 profile 里显式配过的行搬过来 —— 来源随你选。";
397
- readonly 'configSync.source': "来源";
398
- readonly 'configSync.sourceBroken': "读不到它的配置";
399
- readonly 'configSync.sourceRows': "{name} 这份里你有 {count} 行可搬";
400
- readonly 'configSync.sourceDead': "读不到";
401
- readonly 'configSync.refresh': "重新读一遍";
402
- readonly 'configSync.loading': "正在读来源的配置…";
403
- readonly 'configSync.readHint': "换个来源,或再读一遍。";
404
- readonly 'configSync.tag.new': "新增";
405
- readonly 'configSync.tag.differs': "差异";
406
- readonly 'configSync.conflictNote': "应用后工作台这份会被来源覆盖";
407
- readonly 'configSync.code.lang': "yaml";
408
- readonly 'configSync.code.copy': "复制";
409
- readonly 'configSync.code.copied': "已复制";
410
- readonly 'configSync.code.wrap': "自动换行";
411
- readonly 'configSync.code.unwrap': "不换行";
412
- readonly 'configSync.code.collapse': "收起";
413
- readonly 'configSync.code.collapseAria': "收起这一行的配置";
414
- readonly 'configSync.code.expandAria': "展开差异(还有 {count} 行)";
415
- readonly 'configSync.code.expand': "展开剩余 {count} 行";
416
- readonly 'configSync.missing': "{pkg} 还没装:这一行搬过来也不会生效 —— 先 `dsh plugin --profile {profile} add {pkg}`,或在模块市场里装";
417
- readonly 'configSync.apply': "同步选中的 {count} 行";
418
- readonly 'configSync.applyNone': "先勾几行";
419
- readonly 'configSync.applying': "正在写入…";
420
- readonly 'configSync.applied': "已写入工作台配置 · 已生效";
421
- readonly 'configSync.appliedIds': "这次写进去:{ids}";
422
- readonly 'configSync.skippedIds': "这几行工作台自己已有,没动:{ids}";
423
- readonly 'configSync.nothing': "没有需要同步的内容";
424
- readonly 'configSync.unreadable': "读不到 {path}:{reason}";
425
- readonly 'configSync.noSource': "这台机器上只有工作台这一个 profile,没有可同步的来源";
426
- readonly 'configSync.emptyProviders': "工作台还没有任何模型供应商 —— 去「配置同步」从某个 profile 把 llm- 那几行搬过来,或自己去「模型」里配。";
427
- readonly 'configSync.failed': "同步没成功,再试一次。";
566
+ readonly 'adapterSet.title': "适配器集合";
567
+ readonly 'adapterSet.lead': "工作台当前使用的宿主适配器。换集合在 profile 的 workbench 行配置,重启后生效。";
568
+ readonly 'adapterSet.active': "当前:{id}@{version}";
569
+ readonly 'adapterSet.defaults': "缺少的 modules / runtime / plugins / actions 由默认集合补齐。";
570
+ readonly 'adapterSet.failed': "配置的集合没生效,正在用默认集合。";
571
+ readonly 'adapterSet.healthUnreadable': "读不到工作台的健康信息,稍后再打开这一页。";
572
+ readonly 'workbenchSettings.nav': "工作台设置";
573
+ readonly 'workbenchSettings.lead': "工作台自己这一侧的配置都收在这里。";
574
+ readonly 'sidebarEdition.nav': "会话列表";
575
+ readonly 'sidebarEdition.lead': "左栏整条用哪一套:官方 dsh 的,还是工作台自己的。";
576
+ readonly 'sidebarEdition.official': "官方";
577
+ readonly 'sidebarEdition.officialHint': "跟 dsh 官方一致、最稳:搜索、视图选项、显示更多、归档、添加工作区都齐,升级也不等我们适配。想省心就选它。";
578
+ readonly 'sidebarEdition.custom': "自定义";
579
+ readonly 'sidebarEdition.customHint': "为多项目工作流做的:项目下拉一屏一个项目,会话按最近更新排,两端淡出、跑马灯、工坊 DIY 新会话。项目多时更顺手。";
580
+ readonly 'sidebarEdition.saving': "配置中…";
581
+ readonly 'sidebarEdition.reloadRequired': "已写入。刷新页面后生效(不用重启工作台)。";
582
+ readonly 'sidebarEdition.reload': "刷新页面";
583
+ readonly 'sidebarEdition.failed': "这一档没写进去,再试一次。";
428
584
  readonly 'debug.workspace': "这个工作区";
429
585
  readonly 'debug.status': "「{title}」调试中";
430
586
  readonly 'debug.status.trouble': "调试要你看一眼({title})";
@@ -454,9 +610,98 @@ export declare const dictionaries: {
454
610
  readonly 'approval.record.oneAction': "一次操作";
455
611
  readonly 'approval.record.noSwitch': "录完不会替你切回来(左栏底部会亮一条状态)";
456
612
  readonly 'approval.longTask.what': "要停的那一趟";
457
- readonly 'approval.longTask.signal': "停了只是让外壳发出中断信号 —— 平台侧那趟活儿的收尾看模块自己";
613
+ readonly 'approval.longTask.signal': "停了只是让工作台发出中断信号 —— 平台侧那趟活儿的收尾看模块自己";
614
+ readonly 'approval.publish.module': "模块";
615
+ readonly 'approval.publish.target': "目标";
616
+ readonly 'approval.publish.version': "版本";
617
+ readonly 'approval.publish.registry': "源";
618
+ readonly 'approval.publish.repo': "仓库";
619
+ readonly 'approval.publish.branch': "分支";
620
+ readonly 'approval.publish.defaultBranch': "默认分支";
621
+ readonly 'approval.publish.artifacts': "产物";
622
+ readonly 'approval.publish.index': "索引";
623
+ readonly 'approval.publish.commits': "提交";
624
+ readonly 'approval.publish.twoCommits': "产物 + market.json 两个 commit,一次 push";
625
+ readonly 'approval.publish.reading': "读取中…";
626
+ readonly 'approval.publish.changelog': "{version} 的更新日志";
627
+ readonly 'approval.publish.changelogMissing': "这一版还没有更新日志({version}),发布会被拦下";
628
+ readonly 'approval.publish.targetAuto': "按配置默认";
629
+ readonly 'approval.publish.targetTeam': "团队源";
630
+ readonly 'approval.publish.targetPublic': "公共 npm";
631
+ readonly 'approval.publish.targetTarball': "本机安装包";
632
+ readonly 'approval.publish.targetGit': "git 仓库";
633
+ readonly 'approval.publish.targetMarket': "模块市场索引";
634
+ readonly 'approval.publish.targetLocal': "留在本机";
635
+ readonly 'markdown.copy': "复制";
636
+ readonly 'markdown.copied': "已复制";
637
+ readonly 'markdown.footnotes': "脚注";
638
+ readonly 'profileCreate.nav': "新建工作台";
639
+ readonly 'profileCreate.lead': "以已有 profile 为模板,建一个独立的新工作台。建好后关掉当前实例,再启动新的。";
640
+ readonly 'profileCreate.name': "新工作台的名字";
641
+ readonly 'profileCreate.nameHint': "例如 wb2(只用字母、数字、点、下划线或短横线)";
642
+ readonly 'profileCreate.source': "来源 profile";
643
+ readonly 'profileCreate.current': "当前";
644
+ readonly 'profileCreate.copy': "从来源复制";
645
+ readonly 'profileCreate.settings': "设置(模型、主题等)";
646
+ readonly 'profileCreate.plugins': "本地插件文件";
647
+ readonly 'profileCreate.pluginsRequired': "设置里引用了,不能单独去掉";
648
+ readonly 'profileCreate.projects': "项目列表";
649
+ readonly 'profileCreate.sessions': "会话记录";
650
+ readonly 'profileCreate.create': "创建";
651
+ readonly 'profileCreate.creating': "正在创建…";
652
+ readonly 'profileCreate.created': "已建好 {profile}。";
653
+ readonly 'profileCreate.command': "关掉当前工作台后,运行这条命令启动它:";
654
+ readonly 'profileCreate.readFailed': "读不到本机的 profile 列表。";
655
+ readonly 'profileCreate.retry': "重试";
656
+ readonly 'profileCreate.reading': "正在读 profile…";
657
+ readonly 'profileCreate.noProfiles': "这台机器上还没有可用的来源 profile。";
658
+ readonly 'profileCreate.failed': "创建没有成功,看看下面的输出。";
659
+ readonly 'configSync.nav': "配置同步";
660
+ readonly 'configSync.lead': "只搬设置行和它们引用的本地文件;不搬项目列表和会话记录 —— 要整套新建工作台用「新建工作台」。";
661
+ readonly 'configSync.source': "来源";
662
+ readonly 'configSync.sourceBroken': "读不到它的配置";
663
+ readonly 'configSync.sourceRows': "{name} 这份里你有 {count} 行可搬";
664
+ readonly 'configSync.sourceDead': "读不到";
665
+ readonly 'configSync.refresh': "重新读一遍";
666
+ readonly 'configSync.loading': "正在读来源的配置…";
667
+ readonly 'configSync.readHint': "换个来源,或再读一遍。";
668
+ readonly 'configSync.tag.new': "新增";
669
+ readonly 'configSync.tag.differs': "差异";
670
+ readonly 'configSync.tag.asset': "缺文件";
671
+ readonly 'configSync.tag.fileDiffers': "文件不同";
672
+ readonly 'configSync.assetOnly': "设置内容一样,只差文件。";
673
+ readonly 'configSync.assetMissingOne': "还要 1 个文件:{path}";
674
+ readonly 'configSync.assetMissingMany': "还要 {count} 个文件:{path}";
675
+ readonly 'configSync.assetDiffers': "文件不一样:{path}";
676
+ readonly 'configSync.assetDiffersMany': "文件有差异:{path}({count} 个)";
677
+ readonly 'configSync.assetExternal': "这个文件搬不过来:{path}({reason})";
678
+ readonly 'configSync.assetOverwrite': "覆盖工作台里的同名文件";
679
+ readonly 'configSync.conflictNote': "应用后工作台这份会被来源覆盖";
680
+ readonly 'configSync.code.lang': "yaml";
681
+ readonly 'configSync.code.copy': "复制";
682
+ readonly 'configSync.code.copied': "已复制";
683
+ readonly 'configSync.code.wrap': "自动换行";
684
+ readonly 'configSync.code.unwrap': "不换行";
685
+ readonly 'configSync.code.collapse': "收起";
686
+ readonly 'configSync.code.collapseAria': "收起这一行的配置";
687
+ readonly 'configSync.code.expandAria': "展开差异(还有 {count} 行)";
688
+ readonly 'configSync.code.expand': "展开剩余 {count} 行";
689
+ readonly 'configSync.missing': "{pkg} 还没装:这一行搬过来也不会生效 —— 先在模块市场里装它";
690
+ readonly 'configSync.apply': "同步选中的 {count} 项";
691
+ readonly 'configSync.applyNone': "请选择同步内容";
692
+ readonly 'configSync.applying': "正在写入…";
693
+ readonly 'configSync.applied': "已写入并检查通过";
694
+ readonly 'configSync.appliedUnverified': "已写入;重启后检查是否生效";
695
+ readonly 'configSync.appliedFiles': "复制了 {count} 个文件";
696
+ readonly 'configSync.appliedIds': "这次写进去:{ids}";
697
+ readonly 'configSync.skippedIds': "这几行工作台自己已有,没动:{ids}";
698
+ readonly 'configSync.nothing': "没有需要同步的内容";
699
+ readonly 'configSync.unreadable': "读不到 {path}:{reason}";
700
+ readonly 'configSync.noSource': "这台机器上只有工作台这一个 profile,没有可同步的来源";
701
+ readonly 'configSync.emptyProviders': "工作台还没有任何模型供应商 —— 去「配置同步」从某个 profile 把模型供应商那几行搬过来,或自己去「模型」里配。";
702
+ readonly 'configSync.failed': "同步没成功,再试一次。";
458
703
  };
459
- en: Record<"time.now" | "time.ago" | "time.minutes" | "time.hours" | "time.days" | "blocker.retry" | "blocker.copy" | "blocker.unknown.title" | "blocker.login.go" | "blocker.login.titleGeneric" | "blocker.login.title" | "blocker.login.manual" | "blocker.login.hint" | "blocker.forbidden.open" | "blocker.forbidden.titleGeneric" | "blocker.forbidden.title" | "blocker.forbidden.hint" | "blocker.timeout.hint" | "blocker.exec.hint" | "blocker.fix.install" | "blocker.fix.update" | "blocker.market.open" | "env.unit.failed" | "env.unit.failedHint" | "env.unit.missingPlugin" | "env.unit.hint" | "env.unit.missingCommands" | "env.unit.missingCommandsHint" | "env.unit.unchecked" | "env.unit.uncheckedHint" | "brand.name" | "toggle.open" | "toggle.collapse" | "project.label" | "workspace.section" | "project.none" | "project.empty" | "project.add" | "project.add.busy" | "project.add.failed" | "project.search.label" | "project.search.placeholder" | "project.search.empty" | "project.group.workspaces" | "project.group.defaultWorkspace" | "project.group.workshop" | "project.rename.row" | "project.rename.current" | "project.rename.title" | "project.rename.description" | "project.rename.field" | "project.rename.placeholder" | "project.rename.hint" | "project.rename.save" | "project.rename.saving" | "project.rename.cancel" | "project.rename.failed" | "session.new" | "session.new.label" | "session.empty" | "session.noProject" | "session.list.label" | "session.copy" | "session.pinned" | "session.actions" | "status.idle" | "status.running" | "status.longTask" | "status.waitingApproval" | "status.planReview" | "status.waitingAnswer" | "status.compact.approval" | "status.compact.planReview" | "status.compact.answer" | "status.completed" | "status.subagentsRunning.one" | "status.subagentsRunning.other" | "project.attention.warning.one" | "project.attention.warning.other" | "project.attention.running.one" | "project.attention.running.other" | "project.attention.longTask.one" | "project.attention.longTask.other" | "project.attention.done.one" | "project.attention.done.other" | "project.attention.state.warning" | "project.attention.state.running" | "project.attention.state.done" | "hover.copied" | "time.short.minutes" | "time.short.hours" | "time.short.days" | "time.short.months" | "time.short.years" | "panels.title" | "panels.groupBoardless" | "panels.groupPlugins" | "panels.market.defaultHint" | "panels.market.defaultLabel" | "panels.market.defaultLocked" | "panels.followAll" | "panels.followAllConfirmTitle" | "panels.followAllConfirmDetail" | "panels.followAllConfirmAck" | "panels.followAllConfirmYes" | "panels.followAllConfirmNo" | "panels.enabled" | "panels.disabled" | "panels.choose" | "panels.buildModule" | "panels.failed" | "panels.dragHint" | "panels.unknownStep" | "panels.labelWithHint" | "panels.hintJoin" | "panels.dep.failed" | "panels.dep.missingPlugin" | "panels.dep.missingCommands" | "panels.dep.unchecked" | "panels.tab.modules" | "panels.tab.market" | "panels.browseMarket" | "panels.noneInstalled" | "panels.noneInstalledHint" | "panels.market.installed" | "panels.market.notActive" | "panels.market.notUsable" | "panels.market.broken" | "panels.market.hasNew" | "panels.market.hasProblem" | "panels.market.missing" | "panels.market.unchecked" | "panels.market.checking" | "panels.market.sectionInstalled" | "panels.market.sectionPending" | "panels.market.sectionShared" | "panels.market.sharedUsedBy" | "panels.market.listSeparator" | "panels.market.sharedMissing" | "panels.market.sharedOutdated" | "panels.market.sharedUnsatisfied" | "panels.market.sharedOk" | "panels.market.versionArrow" | "panels.market.lead" | "panels.market.install" | "panels.market.update" | "panels.market.swapSlow" | "panels.market.uninstall" | "panels.market.uninstallLabel" | "panels.market.installing" | "panels.market.updating" | "panels.market.uninstalling" | "panels.market.confirmUninstallTitle" | "panels.market.confirmUninstallDetail" | "panels.market.confirmUninstallAck" | "panels.market.confirmYes" | "panels.market.confirmNo" | "panels.market.failed" | "panels.market.needEnv" | "panels.market.needCommands" | "panels.market.localMark" | "panels.market.localHint" | "panels.market.noSource" | "panels.market.badSource" | "panels.market.empty" | "panels.market.sectionPlugins" | "panels.market.moduleOutdated" | "panels.market.moduleRefused" | "panels.market.moduleRefusedDetail" | "panels.market.moduleRestartHint" | "panels.market.pendingRestart" | "panels.market.workbenchName" | "panels.market.workbenchLocal" | "panels.market.pluginKeptInUse" | "panels.market.pluginKeptUnsure" | "panels.market.pluginKeptHeld" | "panels.market.pluginKeptUnnamed" | "panels.market.pluginBroken" | "panels.market.restartNeeded" | "panels.market.foot" | "panels.market.recheck" | "panels.market.checkUpdates" | "panels.market.checkedAt" | "panels.market.justNow" | "panels.market.minutesAgo" | "panels.market.hoursAgo" | "panels.market.add.description" | "panels.market.add.specPlaceholder" | "panels.market.add.guideToggle" | "panels.market.add.guideHide" | "panels.market.add.guideIdTitle" | "panels.market.add.guideIdExample" | "panels.market.add.guideIdHint" | "panels.market.add.guideGitTitle" | "panels.market.add.guideGitExample" | "panels.market.add.guideGitHint" | "panels.market.add.guidePathTitle" | "panels.market.add.guidePathExample" | "panels.market.add.guidePathHint" | "panels.market.add.guideExampleLabel" | "panels.market.add.guideFill" | "panels.market.add.guideSafety" | "panels.market.add.registryLegend" | "panels.market.add.registryOfficial" | "panels.market.add.registryMirror" | "panels.market.add.registryWithHost" | "panels.market.add.registryToggle" | "panels.market.add.installVersion" | "panels.market.add.registryDefault" | "panels.market.add.registryCustom" | "panels.market.add.registryCustomPlaceholder" | "panels.market.add.registryCustomHint" | "panels.market.add.registryCustomInvalid" | "panels.market.add.run" | "panels.market.add.edit" | "panels.market.add.changeRegistry" | "panels.market.add.installingTitle" | "panels.market.add.installedTitle" | "panels.market.add.failedTitle" | "panels.market.add.cancelledTitle" | "panels.market.add.failureNetworkHost" | "panels.market.add.problemInvalid" | "panels.market.add.problemInstalled" | "panels.market.add.problemNotFound" | "panels.market.add.problemNotPackage" | "panels.market.add.problemNotBundle" | "panels.market.add.problemNotWorkbenchModule" | "panels.market.add.problemNotModuleOrPlugin" | "panels.market.add.failureNotModuleOrPlugin" | "panels.market.add.installedPlugin" | "panels.market.add.pluginPreview" | "panels.market.add.pluginAlias" | "panels.market.add.problemNetwork" | "panels.market.add.problemUnknown" | "panels.market.add.failureNetwork" | "panels.market.add.failureNotFound" | "panels.market.add.failureNoMatchingVersion" | "panels.market.add.failureDiskFull" | "panels.market.add.failurePermission" | "panels.market.add.failureBuildBlocked" | "panels.market.add.failureIntegrity" | "panels.market.add.failureTimeout" | "panels.market.add.failurePnpmMissing" | "panels.market.add.failureInstalled" | "panels.market.add.failureGeneric" | "panels.market.add.approveTitle" | "panels.market.add.approveCaution" | "panels.market.add.approveRun" | "panels.market.add.restart" | "panels.market.add.tookEffect" | "panels.market.add.details" | "panels.market.add.open" | "panels.market.add.title" | "panels.market.add.intro" | "panels.market.add.specLabel" | "panels.market.add.specHint" | "panels.market.add.exampleTitle" | "panels.market.add.exampleFill" | "panels.market.add.registryLabel" | "panels.market.add.registryProfile" | "panels.market.add.registryPnpm" | "panels.market.add.check" | "panels.market.add.checking" | "panels.market.add.classifying" | "panels.market.add.change" | "panels.market.add.previewTitle" | "panels.market.add.fieldName" | "panels.market.add.fieldVersion" | "panels.market.add.fieldDescription" | "panels.market.add.fieldSource" | "panels.market.add.install" | "panels.market.add.installing" | "panels.market.add.cancel" | "panels.market.add.close" | "panels.market.add.retry" | "panels.market.add.changeSource" | "panels.market.add.approveBuilds" | "panels.market.add.approveHint" | "panels.market.add.doneApplied" | "panels.market.add.doneRestart" | "panels.market.add.restartWhy" | "panels.market.add.restartWhy.no-hmr" | "panels.market.add.restartWhy.package-moved" | "panels.market.add.restartWhy.host-module" | "panels.market.add.restartWhy.unmanaged-plugin" | "panels.market.add.restartWhy.module-comparison" | "panels.market.add.cancelled" | "panels.market.add.failed" | "panels.market.add.removed" | "panels.market.add.supplyPending" | "panels.market.add.supplyFailed" | "panels.market.add.notModule" | "panels.market.add.removedRestart" | "panels.market.add.remove" | "panels.market.add.problem.invalidSpec" | "panels.market.add.problem.alreadyInstalled" | "panels.market.add.problem.notFound" | "panels.market.add.problem.notAPackage" | "panels.market.add.problem.notABundle" | "panels.market.add.problem.network" | "panels.market.add.problem.unknown" | "panels.market.add.reason.invalidSpec" | "panels.market.add.reason.incompatible" | "panels.market.add.reason.notBundle" | "panels.market.add.reason.notRemovable" | "panels.market.add.reason.bundleInUse" | "panels.market.add.reason.stopProfile" | "panels.market.add.reason.staleApproval" | "panels.market.add.reason.operationError" | "panels.market.add.reason.buildBlocked" | "panels.market.add.reason.pnpmMissing" | "panels.market.add.reason.noMatchingVersion" | "panels.market.add.reason.diskFull" | "panels.market.add.reason.permission" | "panels.market.add.reason.integrity" | "panels.market.add.reason.timeout" | "panels.market.add.reason.network" | "panels.market.add.reason.notFound" | "panels.market.add.reason.unknown" | "blocker.fix.running" | "blocker.fix.failed" | "blocker.retry.running" | "panels.reading" | "panels.cardBroken" | "panels.cardRetry" | "panels.empty" | "panels.emptyHint" | "env.title" | "env.checking" | "env.installing" | "env.failed" | "env.elapsed" | "env.stepFailed.install" | "env.stepFailed.path" | "env.stepFailed.shell" | "env.bridge.ok" | "env.bridge.short" | "env.bridge.why" | "env.bridge.hold" | "env.bridge.daemon" | "env.bridge.extension" | "env.bridge.extensionLink" | "env.bridge.profile" | "env.bridge.stale" | "env.bridge.unknown" | "env.fix.title" | "env.fix.why" | "env.fix.whyPath" | "env.fix.whyShell" | "env.fix.step" | "env.fix.stepPath" | "env.fix.stepShell" | "env.fix.permission" | "env.fix.network" | "env.fix.details" | "env.retry" | "env.bridge.continue" | "env.diy.ok" | "env.diy.short" | "env.diy.hold" | "env.diy.why" | "env.diy.rows" | "env.diy.noRow" | "env.diy.step" | "env.diy.continue" | "env.copyCommand" | "env.copied" | "env.step.opencli" | "env.step.codingPlugin" | "env.step.bridge" | "env.step.diy" | "env.step.warm" | "env.warm.done" | "env.warm.short" | "rightbar.label" | "rightbar.expand" | "rightbar.collapse" | "rightbar.column.label" | "rightbar.column.workbench" | "rightbar.column.dsh" | "rightbar.refresh" | "rightbar.refreshing" | "rightbar.updatedAt" | "rightbar.noProject" | "rightbar.openPlatform" | "coding.notARepo.title" | "error.unknown" | "board.title" | "panel.conversation" | "panels.label" | "configSync.nav" | "configSync.lead" | "configSync.source" | "configSync.sourceBroken" | "configSync.sourceRows" | "configSync.sourceDead" | "configSync.refresh" | "configSync.loading" | "configSync.readHint" | "configSync.tag.new" | "configSync.tag.differs" | "configSync.conflictNote" | "configSync.code.lang" | "configSync.code.copy" | "configSync.code.copied" | "configSync.code.wrap" | "configSync.code.unwrap" | "configSync.code.collapse" | "configSync.code.collapseAria" | "configSync.code.expandAria" | "configSync.code.expand" | "configSync.missing" | "configSync.apply" | "configSync.applyNone" | "configSync.applying" | "configSync.applied" | "configSync.appliedIds" | "configSync.skippedIds" | "configSync.nothing" | "configSync.unreadable" | "configSync.noSource" | "configSync.emptyProviders" | "configSync.failed" | "debug.workspace" | "debug.status" | "debug.status.trouble" | "debug.stalled" | "debug.act.pause" | "debug.act.resume" | "debug.act.stop" | "debug.act.stop.ask" | "debug.card.here.title" | "debug.card.here.note" | "debug.card.away.note" | "debug.card.paused.note" | "debug.card.hidden.note" | "record.waiting" | "record.waiting.note" | "record.recording" | "record.recording.note" | "record.recording.shots" | "record.finished" | "record.finished.note" | "record.act.cancel" | "record.act.halt" | "approval.record.site" | "approval.record.what" | "approval.record.lands" | "approval.record.noUrl" | "approval.record.oneAction" | "approval.record.noSwitch" | "approval.longTask.what" | "approval.longTask.signal", string>;
704
+ en: Record<"time.now" | "time.ago" | "time.minutes" | "time.hours" | "time.days" | "blocker.retry" | "blocker.copy" | "blocker.unknown.title" | "blocker.login.go" | "blocker.login.titleGeneric" | "blocker.login.title" | "blocker.login.manual" | "blocker.login.hint" | "blocker.forbidden.open" | "blocker.forbidden.titleGeneric" | "blocker.forbidden.title" | "blocker.forbidden.hint" | "blocker.timeout.hint" | "blocker.exec.hint" | "blocker.fix.install" | "blocker.market.open" | "env.unit.failed" | "env.unit.failedHint" | "env.unit.unsupported" | "env.unit.unsupportedHint" | "env.unit.degraded" | "env.unit.degradedHint" | "env.unit.unchecked" | "env.unit.uncheckedHint" | "profileCreate.nav" | "profileCreate.lead" | "profileCreate.name" | "profileCreate.nameHint" | "profileCreate.source" | "profileCreate.current" | "profileCreate.copy" | "profileCreate.settings" | "profileCreate.plugins" | "profileCreate.pluginsRequired" | "profileCreate.projects" | "profileCreate.sessions" | "profileCreate.create" | "profileCreate.creating" | "profileCreate.created" | "profileCreate.command" | "profileCreate.readFailed" | "profileCreate.retry" | "profileCreate.reading" | "profileCreate.noProfiles" | "profileCreate.failed" | "configSync.nav" | "configSync.lead" | "configSync.source" | "configSync.sourceBroken" | "configSync.sourceRows" | "configSync.sourceDead" | "configSync.refresh" | "configSync.loading" | "configSync.readHint" | "configSync.tag.new" | "configSync.tag.differs" | "configSync.tag.asset" | "configSync.tag.fileDiffers" | "configSync.assetOnly" | "configSync.assetMissingOne" | "configSync.assetMissingMany" | "configSync.assetDiffers" | "configSync.assetDiffersMany" | "configSync.assetExternal" | "configSync.assetOverwrite" | "configSync.conflictNote" | "configSync.code.lang" | "configSync.code.copy" | "configSync.code.copied" | "configSync.code.wrap" | "configSync.code.unwrap" | "configSync.code.collapse" | "configSync.code.collapseAria" | "configSync.code.expandAria" | "configSync.code.expand" | "configSync.missing" | "configSync.apply" | "configSync.applyNone" | "configSync.applying" | "configSync.applied" | "configSync.appliedUnverified" | "configSync.appliedFiles" | "configSync.appliedIds" | "configSync.skippedIds" | "configSync.nothing" | "configSync.unreadable" | "configSync.noSource" | "configSync.emptyProviders" | "configSync.failed" | "env.need.bin.missing" | "env.need.bin.hint" | "env.need.extension.missing" | "env.need.extension.outdated" | "env.need.extension.hint" | "env.need.lib.missing" | "env.need.lib.outdated" | "env.need.lib.unsatisfied" | "env.need.lib.hint" | "env.need.env.missing" | "env.need.env.hint" | "brand.name" | "toggle.open" | "toggle.collapse" | "project.label" | "workspace.section" | "project.none" | "project.empty" | "project.add" | "project.add.busy" | "project.add.failed" | "project.search.label" | "project.search.placeholder" | "project.search.empty" | "project.group.workspaces" | "project.group.defaultWorkspace" | "project.group.workshop" | "project.rename.row" | "project.rename.current" | "project.rename.title" | "project.rename.description" | "project.rename.field" | "project.rename.placeholder" | "project.rename.hint" | "project.rename.save" | "project.rename.saving" | "project.rename.cancel" | "project.rename.failed" | "session.new" | "session.new.label" | "session.empty" | "session.noProject" | "session.list.label" | "session.copy" | "session.pinned" | "session.actions" | "status.idle" | "status.running" | "status.longTask" | "status.waitingApproval" | "status.planReview" | "status.waitingAnswer" | "status.compact.approval" | "status.compact.planReview" | "status.compact.answer" | "status.completed" | "status.subagentsRunning.one" | "status.subagentsRunning.other" | "project.attention.warning.one" | "project.attention.warning.other" | "project.attention.running.one" | "project.attention.running.other" | "project.attention.longTask.one" | "project.attention.longTask.other" | "project.attention.done.one" | "project.attention.done.other" | "project.attention.state.warning" | "project.attention.state.running" | "project.attention.state.done" | "hover.copied" | "time.short.minutes" | "time.short.hours" | "time.short.days" | "time.short.months" | "time.short.years" | "panels.title" | "panels.groupBoardless" | "panels.groupPlugins" | "panels.market.defaultHint" | "panels.market.defaultLabel" | "panels.market.defaultLocked" | "panels.followAll" | "panels.followAllConfirmTitle" | "panels.followAllConfirmDetail" | "panels.followAllConfirmAck" | "panels.followAllConfirmYes" | "panels.followAllConfirmNo" | "panels.enabled" | "panels.disabled" | "panels.choose" | "panels.buildModule" | "panels.failed" | "panels.dragHint" | "panels.unknownStep" | "panels.labelWithHint" | "panels.hintJoin" | "panels.dep.failed" | "panels.dep.unchecked" | "panels.dep.missing" | "panels.dep.outdated" | "panels.dep.degraded" | "panels.dep.unsupported" | "panels.tab.modules" | "panels.tab.market" | "panels.browseMarket" | "panels.noneInstalled" | "panels.noneInstalledHint" | "panels.market.installed" | "panels.market.notActive" | "panels.market.notUsable" | "panels.market.broken" | "panels.market.hasNew" | "panels.market.hasProblem" | "panels.market.missing" | "panels.market.unchecked" | "panels.market.uncheckedHint" | "panels.market.checking" | "panels.market.sectionInstalled" | "panels.market.sectionPending" | "panels.market.sectionShared" | "panels.market.sharedUsedBy" | "panels.market.listSeparator" | "panels.market.sharedMissing" | "panels.market.sharedOutdated" | "panels.market.sharedUnsatisfied" | "panels.market.sharedOk" | "panels.market.versionArrow" | "panels.market.lead" | "panels.market.install" | "panels.market.update" | "panels.market.swapSlow" | "panels.market.removeSlow" | "panels.market.updateNoChange" | "panels.market.updateUnknownVersion" | "panels.market.updateGone" | "panels.market.updateRestored" | "panels.market.updateBehind" | "panels.market.selfUpdateFailed" | "panels.market.selfUpdateUnknown" | "panels.market.selfUpdateRolledBack" | "panels.market.uninstall" | "panels.market.uninstallLabel" | "panels.market.installing" | "panels.market.updating" | "panels.market.uninstalling" | "panels.market.confirmUninstallTitle" | "panels.market.confirmUninstallDetail" | "panels.market.confirmUninstallAck" | "panels.market.confirmYes" | "panels.market.confirmNo" | "panels.market.failed" | "panels.market.needEnv" | "panels.market.needCommands" | "panels.market.needBinary" | "panels.market.needLib" | "panels.market.localMark" | "panels.market.noSource" | "panels.market.badSource" | "panels.market.empty" | "panels.market.sectionPlugins" | "panels.market.moduleOutdated" | "panels.market.moduleRefused" | "panels.market.moduleRestartHint" | "panels.market.pendingRestart" | "panels.market.workbenchName" | "panels.market.pluginBroken" | "panels.market.restartNeeded" | "panels.market.foot" | "panels.market.recheck" | "panels.market.checkUpdates" | "panels.market.checkedAt" | "panels.market.justNow" | "panels.market.minutesAgo" | "panels.market.hoursAgo" | "panels.market.add.description" | "panels.market.add.specPlaceholder" | "panels.market.add.guideToggle" | "panels.market.add.guideHide" | "panels.market.add.guideIdTitle" | "panels.market.add.guideIdExample" | "panels.market.add.guideIdHint" | "panels.market.add.guideGitTitle" | "panels.market.add.guideGitExample" | "panels.market.add.guideGitHint" | "panels.market.add.guidePathTitle" | "panels.market.add.guidePathExample" | "panels.market.add.guidePathHint" | "panels.market.add.guideExampleLabel" | "panels.market.add.guideFill" | "panels.market.add.guideSafety" | "panels.market.add.registryLegend" | "panels.market.add.registryOfficial" | "panels.market.add.registryMirror" | "panels.market.add.registryWithHost" | "panels.market.add.registryToggle" | "panels.market.add.installVersion" | "panels.market.add.registryDefault" | "panels.market.add.registryCustom" | "panels.market.add.registryCustomPlaceholder" | "panels.market.add.registryCustomHint" | "panels.market.add.registryCustomInvalid" | "panels.market.add.run" | "panels.market.add.edit" | "panels.market.add.changeRegistry" | "panels.market.add.installingTitle" | "panels.market.add.installedTitle" | "panels.market.add.failedTitle" | "panels.market.add.cancelledTitle" | "panels.market.add.failureNetworkHost" | "panels.market.add.problemInvalid" | "panels.market.add.problemInstalled" | "panels.market.add.problemNotFound" | "panels.market.add.problemNotPackage" | "panels.market.add.problemNotBundle" | "panels.market.add.problemNotWorkbenchModule" | "panels.market.add.problemNotModuleOrPlugin" | "panels.market.add.failureNotModuleOrPlugin" | "panels.market.add.installedPlugin" | "panels.market.add.pluginPreview" | "panels.market.add.pluginAlias" | "panels.market.add.problemNetwork" | "panels.market.add.problemUnknown" | "panels.market.add.failureNetwork" | "panels.market.add.failureNotFound" | "panels.market.add.failureNoMatchingVersion" | "panels.market.add.failureDiskFull" | "panels.market.add.failurePermission" | "panels.market.add.failureBuildBlocked" | "panels.market.add.failureIntegrity" | "panels.market.add.failureTimeout" | "panels.market.add.failurePnpmMissing" | "panels.market.add.failureInstalled" | "panels.market.add.failureGeneric" | "panels.market.add.approveTitle" | "panels.market.add.approveCaution" | "panels.market.add.approveRun" | "panels.market.add.restart" | "panels.market.add.tookEffect" | "panels.market.add.details" | "panels.market.add.open" | "panels.market.add.title" | "panels.market.add.intro" | "panels.market.add.specLabel" | "panels.market.add.specHint" | "panels.market.add.exampleTitle" | "panels.market.add.exampleFill" | "panels.market.add.registryLabel" | "panels.market.add.registryProfile" | "panels.market.add.registryPnpm" | "panels.market.add.check" | "panels.market.add.checking" | "panels.market.add.classifying" | "panels.market.add.change" | "panels.market.add.previewTitle" | "panels.market.add.fieldName" | "panels.market.add.fieldVersion" | "panels.market.add.fieldDescription" | "panels.market.add.fieldSource" | "panels.market.add.install" | "panels.market.add.installing" | "panels.market.add.cancel" | "panels.market.add.close" | "panels.market.add.retry" | "panels.market.add.changeSource" | "panels.market.tabInstalled" | "panels.market.tabs" | "panels.tab.discover" | "panels.discover.loading" | "panels.discover.lead" | "panels.discover.addSource" | "panels.discover.addFirstSource" | "panels.discover.removeSource" | "panels.discover.removeSourceNamed" | "panels.discover.refresh" | "panels.discover.search" | "panels.discover.all" | "panels.discover.sourceLabel" | "panels.discover.sourceKind" | "panels.discover.sourceKindHttp" | "panels.discover.sourceKindGit" | "panels.discover.sourceUrl" | "panels.discover.sourcePlaceholder" | "panels.discover.sourceRef" | "panels.discover.sourcePath" | "panels.discover.sourceLocal" | "panels.discover.sourceLocalHint" | "panels.discover.save" | "panels.discover.cancel" | "panels.discover.retry" | "panels.discover.noSource" | "panels.discover.noSourceHint" | "panels.discover.sourcesFailed" | "panels.discover.unreadable" | "panels.discover.invalid" | "panels.discover.emptyRepo" | "panels.discover.missingIndex" | "panels.discover.initTitle" | "panels.discover.initCta" | "panels.discover.initWhat" | "panels.discover.initBranch" | "panels.discover.initBranchHint" | "panels.discover.initBranchBad" | "panels.discover.initOk" | "panels.discover.initBusy" | "panels.discover.initDone" | "panels.discover.stale" | "panels.discover.empty" | "panels.discover.noMatch" | "panels.discover.notInstalled" | "panels.discover.installed" | "panels.discover.installedVersion" | "panels.discover.update" | "panels.discover.badShell" | "panels.discover.badShellDetail" | "panels.discover.unverified" | "panels.discover.installing" | "panels.discover.installedDone" | "panels.discover.failed" | "panels.discover.expand" | "panels.discover.collapse" | "panels.discover.versionCount" | "panels.discover.sourceNpm" | "panels.discover.sourceNpmDefault" | "panels.discover.sourceGit" | "panels.discover.installVersion" | "panels.discover.confirmTitle" | "panels.discover.confirmDetail" | "panels.discover.confirmAck" | "panels.discover.confirmOk" | "panels.discover.confirmCancel" | "panels.discover.marketMenu" | "panels.discover.manageSources" | "panels.discover.sourcesTitle" | "panels.discover.sourcesIntro" | "panels.discover.sourcesLabel" | "panels.discover.sourceTrust" | "panels.discover.sourceDuplicate" | "panels.discover.sourceBadUrl" | "panels.discover.close" | "panels.discover.labelsMenu" | "panels.discover.labelsCount" | "panels.discover.tagsAll" | "panels.discover.sort" | "panels.discover.sortWith" | "panels.discover.sortRelevance" | "panels.discover.sortDefault" | "panels.discover.sortPublished" | "panels.discover.categoriesLabel" | "panels.discover.showMore" | "panels.discover.entryMeta" | "panels.discover.entryMetaAuthor" | "panels.discover.openEntry" | "panels.discover.cardInstall" | "panels.discover.cardInstalled" | "panels.discover.cardUpdate" | "panels.discover.cardBlocked" | "panels.discover.installTitle" | "panels.discover.installVersionTitle" | "panels.discover.openInstalled" | "panels.discover.noCompatibleVersion" | "panels.discover.detailBack" | "panels.discover.publishedAt" | "panels.discover.detailMarket" | "panels.discover.detailIncompatible" | "panels.discover.detailUnknown" | "panels.discover.detailSource" | "panels.discover.authorUnknown" | "panels.discover.tabOverview" | "panels.discover.tabReadme" | "panels.discover.tabChangelog" | "panels.discover.docTitle" | "panels.discover.docReadme" | "panels.discover.docChangelog" | "panels.discover.docLoading" | "panels.discover.docMissing" | "panels.discover.docUnavailable" | "panels.discover.docUnknownReason" | "panels.discover.detailTabs" | "panels.discover.factPackage" | "panels.discover.factRegistry" | "panels.discover.factRepository" | "panels.discover.factCommit" | "panels.discover.factDirectory" | "panels.discover.factPublished" | "panels.discover.factAuthor" | "panels.discover.factHomepage" | "panels.discover.factCategory" | "panels.discover.factLabels" | "panels.discover.factMarket" | "panels.discover.detailVersions" | "panels.discover.versionsLabel" | "panels.discover.tagRecommended" | "panels.discover.tagPrerelease" | "panels.discover.tagInstalled" | "panels.discover.tagIncompatible" | "panels.discover.tagUnknown" | "panels.discover.selected" | "panels.discover.done" | "panels.discover.installTrust" | "panels.discover.progress" | "panels.market.add.approveBuilds" | "panels.market.add.approveHint" | "panels.market.add.doneApplied" | "panels.market.add.doneRestart" | "panels.market.add.restartWhy" | "panels.market.add.restartWhy.no-hmr" | "panels.market.add.restartWhy.package-moved" | "panels.market.add.restartWhy.host-module" | "panels.market.add.restartWhy.unmanaged-plugin" | "panels.market.add.restartWhy.module-comparison" | "panels.market.add.cancelled" | "panels.market.add.failed" | "panels.market.add.removed" | "panels.market.add.supplyPending" | "panels.market.add.supplyFailed" | "panels.market.add.notModule" | "panels.market.add.removedRestart" | "panels.market.add.remove" | "panels.market.add.problem.invalidSpec" | "panels.market.add.problem.alreadyInstalled" | "panels.market.add.problem.notFound" | "panels.market.add.problem.notAPackage" | "panels.market.add.problem.notABundle" | "panels.market.add.problem.network" | "panels.market.add.problem.unknown" | "panels.market.add.reason.invalidSpec" | "panels.market.add.reason.incompatible" | "panels.market.add.reason.notBundle" | "panels.market.add.reason.notRemovable" | "panels.market.add.reason.bundleInUse" | "panels.market.add.reason.stopProfile" | "panels.market.add.reason.staleApproval" | "panels.market.add.reason.operationError" | "panels.market.add.reason.buildBlocked" | "panels.market.add.reason.pnpmMissing" | "panels.market.add.reason.noMatchingVersion" | "panels.market.add.reason.diskFull" | "panels.market.add.reason.permission" | "panels.market.add.reason.integrity" | "panels.market.add.reason.timeout" | "panels.market.add.reason.network" | "panels.market.add.reason.notFound" | "panels.market.add.reason.unknown" | "blocker.fix.update" | "blocker.fix.running" | "blocker.fix.failed" | "blocker.retry.running" | "panels.reading" | "panels.cardBroken" | "panels.cardRetry" | "panels.empty" | "panels.emptyHint" | "env.title" | "env.checking" | "env.installing" | "env.failed" | "env.elapsed" | "env.stepFailed.install" | "env.stepFailed.path" | "env.stepFailed.shell" | "env.toolchain.ok" | "env.toolchain.warn" | "env.opencli.ok" | "env.bridge.ok" | "env.bridge.short" | "env.bridge.why" | "env.bridge.hold" | "env.bridge.daemon" | "env.bridge.extension" | "env.bridge.extensionLink" | "env.bridge.profile" | "env.bridge.stale" | "env.bridge.unknown" | "env.fix.title" | "env.fix.why" | "env.fix.whyPath" | "env.fix.whyShell" | "env.fix.step" | "env.fix.stepPath" | "env.fix.stepShell" | "env.fix.permission" | "env.fix.network" | "env.fix.details" | "env.retry" | "env.wake" | "env.wake.opening" | "env.wake.browserOpen" | "env.wake.noBrowser" | "env.wake.failed" | "env.bridge.continue" | "env.diy.ok" | "env.diy.short" | "env.diy.hold" | "env.diy.why" | "env.diy.rows" | "env.diy.noRow" | "env.diy.step" | "env.diy.continue" | "env.copyCommand" | "env.copied" | "env.step.toolchain" | "env.step.opencli" | "env.step.bridge" | "env.step.diy" | "env.step.warm" | "env.warm.done" | "env.warm.short" | "adapterSet.not-configured" | "adapterSet.no-profile" | "adapterSet.malformed" | "adapterSet.not-resolvable" | "adapterSet.import-failed" | "adapterSet.bad-export" | "adapterSet.factory-failed" | "adapterSet.incompatible-version" | "adapterSet.missing-member" | "env.unit.hint" | "rightbar.label" | "rightbar.expand" | "rightbar.collapse" | "rightbar.column.label" | "rightbar.column.workbench" | "rightbar.column.dsh" | "rightbar.refresh" | "rightbar.refreshing" | "rightbar.updatedAt" | "rightbar.noProject" | "rightbar.openPlatform" | "error.unknown" | "board.title" | "panel.conversation" | "panels.label" | "adapterSet.title" | "adapterSet.lead" | "adapterSet.active" | "adapterSet.defaults" | "adapterSet.failed" | "adapterSet.healthUnreadable" | "workbenchSettings.nav" | "workbenchSettings.lead" | "sidebarEdition.nav" | "sidebarEdition.lead" | "sidebarEdition.official" | "sidebarEdition.officialHint" | "sidebarEdition.custom" | "sidebarEdition.customHint" | "sidebarEdition.saving" | "sidebarEdition.reloadRequired" | "sidebarEdition.reload" | "sidebarEdition.failed" | "debug.workspace" | "debug.status" | "debug.status.trouble" | "debug.stalled" | "debug.act.pause" | "debug.act.resume" | "debug.act.stop" | "debug.act.stop.ask" | "debug.card.here.title" | "debug.card.here.note" | "debug.card.away.note" | "debug.card.paused.note" | "debug.card.hidden.note" | "record.waiting" | "record.waiting.note" | "record.recording" | "record.recording.note" | "record.recording.shots" | "record.finished" | "record.finished.note" | "record.act.cancel" | "record.act.halt" | "approval.record.site" | "approval.record.what" | "approval.record.lands" | "approval.record.noUrl" | "approval.record.oneAction" | "approval.record.noSwitch" | "approval.longTask.what" | "approval.longTask.signal" | "approval.publish.module" | "approval.publish.target" | "approval.publish.version" | "approval.publish.registry" | "approval.publish.repo" | "approval.publish.branch" | "approval.publish.defaultBranch" | "approval.publish.artifacts" | "approval.publish.index" | "approval.publish.commits" | "approval.publish.twoCommits" | "approval.publish.reading" | "approval.publish.changelog" | "approval.publish.changelogMissing" | "approval.publish.targetAuto" | "approval.publish.targetTeam" | "approval.publish.targetPublic" | "approval.publish.targetTarball" | "approval.publish.targetGit" | "approval.publish.targetMarket" | "approval.publish.targetLocal" | "markdown.copy" | "markdown.copied" | "markdown.footnotes", string>;
460
705
  };
461
706
  /** 中文词表的键类型(从 `zh.ts` 转出):`en` 与模块词表都得覆盖同一批键。 */
462
707
  export type { WorkbenchMessages };