@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
package/dist/i18n/en.js CHANGED
@@ -1,5 +1,8 @@
1
+ import { enSettings } from './settings.js';
2
+ import { enNeedText } from './need-text.js';
1
3
  /** 外壳自带的英文词表:键必须与 `zh` 逐一对应,值不许为空串。 */
2
4
  export const en = {
5
+ ...enSettings,
3
6
  'brand.name': 'Workbench',
4
7
  'toggle.open': 'Open sidebar',
5
8
  'toggle.collapse': 'Collapse sidebar',
@@ -21,7 +24,7 @@ export const en = {
21
24
  'project.rename.title': 'Give “{name}” a display name',
22
25
  'project.rename.description': 'Shown after the folder name. It renames the workspace itself.',
23
26
  'project.rename.field': 'Display name',
24
- 'project.rename.placeholder': 'e.g. Workbench shell',
27
+ 'project.rename.placeholder': 'e.g. My workbench',
25
28
  'project.rename.hint': 'Empty = folder name only',
26
29
  'project.rename.save': 'Save',
27
30
  'project.rename.saving': 'Saving…',
@@ -87,13 +90,15 @@ export const en = {
87
90
  'panels.buildModule': 'Build a module',
88
91
  'panels.failed': 'Could not save the change. Try again.',
89
92
  'panels.dragHint': 'Drag to reorder',
90
- 'panels.unknownStep': 'No suite provides this view',
93
+ 'panels.unknownStep': 'No panel for this view yet',
91
94
  'panels.labelWithHint': '{label} ({hint})',
92
95
  'panels.hintJoin': '; ',
93
96
  'panels.dep.failed': '⚠ failed to start',
94
- 'panels.dep.missingPlugin': '⚠ not ready yet',
95
- 'panels.dep.missingCommands': '⚠ needs an update',
96
97
  'panels.dep.unchecked': '⚠ cannot check',
98
+ 'panels.dep.missing': '⚠ missing a dependency',
99
+ 'panels.dep.outdated': '⚠ needs an update',
100
+ 'panels.dep.degraded': '⚠ an optional item is missing',
101
+ 'panels.dep.unsupported': '⚠ needs a newer workbench',
97
102
  'panels.tab.modules': 'Panel setup',
98
103
  'panels.tab.market': 'Workbench module market',
99
104
  'panels.browseMarket': 'Browse the module market',
@@ -105,11 +110,12 @@ export const en = {
105
110
  'panels.market.broken': 'broken',
106
111
  'panels.market.hasNew': 'New version',
107
112
  'panels.market.hasProblem': 'Module problem',
108
- 'panels.market.missing': 'not installed',
113
+ 'panels.market.missing': 'missing dependency',
109
114
  'panels.market.unchecked': 'unknown',
115
+ 'panels.market.uncheckedHint': 'restart the workbench and try again',
110
116
  'panels.market.checking': 'checking',
111
117
  'panels.market.sectionInstalled': 'Installed modules',
112
- 'panels.market.sectionPending': 'Not installed',
118
+ 'panels.market.sectionPending': 'Not ready',
113
119
  'panels.market.sectionShared': 'Shared dependencies',
114
120
  'panels.market.sharedUsedBy': 'Used by module {modules}',
115
121
  'panels.market.listSeparator': ', ',
@@ -119,9 +125,18 @@ export const en = {
119
125
  'panels.market.sharedOk': 'ready',
120
126
  'panels.market.versionArrow': '{from} → {to}',
121
127
  'panels.market.lead': 'Installed on this machine, shared by every project.',
122
- 'panels.market.install': 'Install',
128
+ 'panels.market.install': 'Install dependency',
123
129
  'panels.market.update': 'Update',
124
130
  'panels.market.swapSlow': 'Not swapped yet — maybe a slow or failed download. Press Update again; if it stays like this, restart dsh.',
131
+ 'panels.market.removeSlow': 'Not removed yet — maybe a slow network or an uninstall that did not finish. Check again in a moment; if it stays like this, restart dsh.',
132
+ 'panels.market.updateNoChange': 'Not updated: you were on {from}, and after the run the disk still has that version; the newest on the registry is {latest}.',
133
+ 'panels.market.updateUnknownVersion': '(unknown)',
134
+ 'panels.market.updateGone': 'Not updated: after the run the module cannot be read from disk.',
135
+ 'panels.market.updateRestored': 'Not updated: the new version was missing from disk, so {version} was put back.',
136
+ 'panels.market.updateBehind': 'Installed {installed}, but the newest on the registry is {latest} — not the latest; you can update once more.',
137
+ 'panels.market.selfUpdateFailed': 'Self-update failed: {reason}',
138
+ 'panels.market.selfUpdateUnknown': 'the outside process left no reason (see ~/.dsh/workbench/self-update.log)',
139
+ 'panels.market.selfUpdateRolledBack': 'Not swapped; rolled back to {version}.',
125
140
  'panels.market.uninstall': 'Uninstall',
126
141
  'panels.market.uninstallLabel': 'Uninstall {name}',
127
142
  'panels.market.installing': 'Installing…',
@@ -135,24 +150,19 @@ export const en = {
135
150
  'panels.market.failed': 'Failed: {reason}',
136
151
  'panels.market.needEnv': 'Set {env} in the terminal that started the workbench first',
137
152
  'panels.market.needCommands': 'Missing commands: {commands}',
153
+ 'panels.market.needBinary': 'Install the {command} command first',
154
+ 'panels.market.needLib': 'Install the shared dependency {name} first',
138
155
  'panels.market.localMark': 'local',
139
- 'panels.market.localHint': 'This is your machine’s own copy (not taken from the registry).',
140
156
  'panels.market.noSource': 'This module declares no install method — install it yourself',
141
157
  'panels.market.badSource': 'The install method is incomplete — install it yourself',
142
158
  'panels.market.empty': 'No modules available',
143
159
  'panels.market.sectionPlugins': 'Installed opencli plugins',
144
160
  'panels.market.moduleOutdated': 'update available',
145
161
  'panels.market.moduleRefused': 'This module does not match this workbench, so it cannot be used for now.',
146
- 'panels.market.moduleRefusedDetail': 'Why it cannot be used: {reason}',
147
162
  'panels.market.moduleRestartHint': 'restart dsh once to bring it up',
148
163
  'panels.market.pendingRestart': 'restart required',
149
164
  'panels.market.workbenchName': 'Workbench',
150
- 'panels.market.workbenchLocal': 'This is the copy from your working repository; it does not come from the registry.',
151
- 'panels.market.pluginKeptInUse': 'Files kept for now: {names} still uses it.',
152
- 'panels.market.pluginKeptUnsure': 'Files kept for now: some modules on this machine do not say what they use, so it is unclear who needs it.',
153
- 'panels.market.pluginKeptHeld': 'Files kept: this one is yours, and a module letting go will not remove it.',
154
- 'panels.market.pluginKeptUnnamed': 'Files kept for now: this one cannot be identified as a plugin, so it is unclear who needs it.',
155
- 'panels.market.pluginBroken': 'This install is broken: it cannot be identified as a plugin. Uninstall it, or tell the agent to reinstall it by package name with workbench_modules_install_bundle.',
165
+ 'panels.market.pluginBroken': 'This plugin install is broken: it cannot be identified. Uninstall it first, then ask the agent to reinstall it by package name.',
156
166
  'panels.market.restartNeeded': 'The new version is installed — restart once to pick it up.',
157
167
  'panels.market.foot': 'After installing, enable it in the panel page of that project.',
158
168
  'panels.market.recheck': 'Check for updates',
@@ -197,7 +207,7 @@ export const en = {
197
207
  'panels.market.add.cancelledTitle': 'Cancelled',
198
208
  'panels.market.add.failureNetworkHost': 'Cannot reach {host}. Git URLs and .tgz links bypass the registry, so this machine needs direct access or a proxy; if the module is also on npm, use its package name instead.',
199
209
  'panels.market.add.problemInvalid': 'Cannot read this package name or address: {reason}',
200
- 'panels.market.add.problemInstalled': 'This module is already installed',
210
+ 'panels.market.add.problemInstalled': 'This module is already installed (add @version to switch versions)',
201
211
  'panels.market.add.problemNotFound': 'No such module found',
202
212
  'panels.market.add.problemNotPackage': 'That path does not exist or is not a valid module package',
203
213
  'panels.market.add.problemNotBundle': 'This package cannot be installed here: {reason}. This entry recognises workbench modules and opencli plugins by package name, and installs either; but a git URL or a tarball does not reveal what it is — if it is really one of those two, use its package name or a local folder instead.',
@@ -218,7 +228,7 @@ export const en = {
218
228
  'panels.market.add.failureIntegrity': 'The downloaded package failed its integrity check',
219
229
  'panels.market.add.failureTimeout': 'The install timed out',
220
230
  'panels.market.add.failurePnpmMissing': 'pnpm was not found, cannot install',
221
- 'panels.market.add.failureInstalled': 'It is already in this profile: this dsh runs with hot reload, which refuses to install over the same package (remove it first) — and removing it failed too',
231
+ 'panels.market.add.failureInstalled': 'It is already installed in this workbench. The same package cannot be installed over itself: uninstall it first, then install again. The uninstall did not succeed this time.',
222
232
  'panels.market.add.failureGeneric': 'Something went wrong during install — see the install details',
223
233
  'panels.market.add.approveTitle': 'Your approval is needed for install scripts',
224
234
  'panels.market.add.approveCaution': 'Only allow packages you trust: install scripts run on this machine with your permissions.',
@@ -251,12 +261,148 @@ export const en = {
251
261
  'panels.market.add.close': 'Close',
252
262
  'panels.market.add.retry': 'Retry',
253
263
  'panels.market.add.changeSource': 'Change source',
264
+ 'panels.market.tabInstalled': 'Installed',
265
+ 'panels.market.tabs': 'The two faces of the module market',
266
+ 'panels.tab.discover': 'Discover',
267
+ 'panels.discover.loading': 'Reading the index',
268
+ 'panels.discover.lead': 'Browse modules from an index source; install and go.',
269
+ 'panels.discover.addSource': 'Add',
270
+ 'panels.discover.addFirstSource': 'Add index source',
271
+ 'panels.discover.removeSource': 'Remove',
272
+ 'panels.discover.removeSourceNamed': 'Remove {url}',
273
+ 'panels.discover.refresh': 'Refresh',
274
+ 'panels.discover.search': 'Search modules',
275
+ 'panels.discover.all': 'All',
276
+ 'panels.discover.sourceLabel': 'Name',
277
+ 'panels.discover.sourceKind': 'Type',
278
+ 'panels.discover.sourceKindHttp': 'http address',
279
+ 'panels.discover.sourceKindGit': 'git repository',
280
+ 'panels.discover.sourceUrl': 'Index URL',
281
+ 'panels.discover.sourcePlaceholder': 'https://example.com/index.json or git@git.example.com:wb/market.git',
282
+ 'panels.discover.sourceRef': 'Branch',
283
+ 'panels.discover.sourcePath': 'Index file',
284
+ 'panels.discover.sourceLocal': 'Local clone (optional)',
285
+ 'panels.discover.sourceLocalHint': 'Leave empty to clone into ~/.dsh/workbench/market-index/.',
286
+ 'panels.discover.save': 'Save and refresh',
287
+ 'panels.discover.cancel': 'Cancel',
288
+ 'panels.discover.retry': 'Retry',
289
+ 'panels.discover.noSource': 'No module market yet',
290
+ 'panels.discover.noSourceHint': 'Add a module market index (http address or git repository) to browse and install its modules here',
291
+ 'panels.discover.sourcesFailed': 'Could not read the index sources.',
292
+ 'panels.discover.unreadable': 'Could not read this index.',
293
+ 'panels.discover.invalid': 'This index is not in a valid format.',
294
+ 'panels.discover.emptyRepo': 'This repository has no commits yet.',
295
+ 'panels.discover.missingIndex': 'This repository has no {path} yet.',
296
+ 'panels.discover.initTitle': 'Initialize this repository as a module market index?',
297
+ 'panels.discover.initCta': 'Initialize market index',
298
+ 'panels.discover.initWhat': 'It will write market.json and README.md on {branch}, commit once, and push. Modules you publish from this workbench will commit their artifacts under packages/<unit>/. The repository stays owned by its owner.',
299
+ 'panels.discover.initBranch': 'Branch',
300
+ 'panels.discover.initBranchHint': 'The index and artifacts go to this branch; an empty repository gets it created.',
301
+ 'panels.discover.initBranchBad': 'Use only letters, digits, dots, underscores, slashes, or dashes in a branch name.',
302
+ 'panels.discover.initOk': 'Initialize',
303
+ 'panels.discover.initBusy': 'Initializing…',
304
+ 'panels.discover.initDone': 'Market index initialized ({branch})',
305
+ 'panels.discover.stale': 'Cannot read the latest; showing the last good cache.',
306
+ 'panels.discover.empty': 'This index lists no modules.',
307
+ 'panels.discover.noMatch': 'No modules match.',
308
+ 'panels.discover.notInstalled': 'Not installed',
309
+ 'panels.discover.installed': 'Installed',
310
+ 'panels.discover.installedVersion': 'Installed {version}',
311
+ 'panels.discover.update': 'Update available',
312
+ 'panels.discover.badShell': 'Not installable',
313
+ 'panels.discover.badShellDetail': 'This version is not compatible with the running workbench {current}; it requires {peer}',
314
+ 'panels.discover.unverified': 'Workbench unverified',
315
+ 'panels.discover.installing': 'Installing…',
316
+ 'panels.discover.installedDone': 'Installed: {name}',
317
+ 'panels.discover.failed': 'Failed: {reason}',
318
+ 'panels.discover.expand': 'Show versions',
319
+ 'panels.discover.collapse': 'Hide versions',
320
+ 'panels.discover.versionCount': '{n} versions',
321
+ 'panels.discover.sourceNpm': 'npm · {registry}',
322
+ 'panels.discover.sourceNpmDefault': 'default registry',
323
+ 'panels.discover.sourceGit': 'git · {commit}',
324
+ 'panels.discover.installVersion': 'Install {version}',
325
+ 'panels.discover.confirmTitle': 'Install "{name}"?',
326
+ 'panels.discover.confirmDetail': 'Source: {source}. The index is a teammate-maintained catalog, not a signed official feed; installing a different version replaces the current one.',
327
+ 'panels.discover.confirmAck': 'I understand this is not an official source',
328
+ 'panels.discover.confirmOk': 'Install',
329
+ 'panels.discover.confirmCancel': 'Cancel',
330
+ 'panels.discover.marketMenu': 'Switch module market, currently {market}',
331
+ 'panels.discover.manageSources': 'Manage index sources…',
332
+ 'panels.discover.sourcesTitle': 'Index sources',
333
+ 'panels.discover.sourcesIntro': 'A module market is published as the URL of one index file, either an http(s) address or a git repository. Discover browses the indexes listed here.',
334
+ 'panels.discover.sourcesLabel': 'Added index sources',
335
+ 'panels.discover.sourceTrust': 'Indexes come from third parties. Add only sources you trust: their modules run with your permissions once installed.',
336
+ 'panels.discover.sourceDuplicate': 'This index source is already added.',
337
+ 'panels.discover.sourceBadUrl': 'Use an http(s) or git repository address without a user name, password, or # fragment',
338
+ 'panels.discover.close': 'Close',
339
+ 'panels.discover.labelsMenu': 'Labels',
340
+ 'panels.discover.labelsCount': 'Labels · {count}',
341
+ 'panels.discover.tagsAll': 'All labels',
342
+ 'panels.discover.sort': 'Sort',
343
+ 'panels.discover.sortWith': 'Sort: {label}',
344
+ 'panels.discover.sortRelevance': 'Best match',
345
+ 'panels.discover.sortDefault': 'Default order',
346
+ 'panels.discover.sortPublished': 'Publish date',
347
+ 'panels.discover.categoriesLabel': 'Categories',
348
+ 'panels.discover.showMore': 'Show more',
349
+ 'panels.discover.entryMeta': '{version} · {date}',
350
+ 'panels.discover.entryMetaAuthor': '{version} · {author} · {date}',
351
+ 'panels.discover.openEntry': 'View {name}',
352
+ 'panels.discover.cardInstall': 'Install',
353
+ 'panels.discover.cardInstalled': 'Installed',
354
+ 'panels.discover.cardUpdate': 'Update available',
355
+ 'panels.discover.cardBlocked': 'No usable version',
356
+ 'panels.discover.installTitle': 'Install {name}',
357
+ 'panels.discover.installVersionTitle': 'Install {name} {version}',
358
+ 'panels.discover.openInstalled': 'View {name} in Installed',
359
+ 'panels.discover.noCompatibleVersion': 'No version is compatible with workbench {runtime}',
360
+ 'panels.discover.detailBack': 'Discover',
361
+ 'panels.discover.publishedAt': 'Published {date}',
362
+ 'panels.discover.detailMarket': 'Index source {label}',
363
+ 'panels.discover.detailIncompatible': 'Needs workbench {peer}; this one is {current}',
364
+ 'panels.discover.detailUnknown': 'Workbench compatibility is unverified: the index has no readable package.json.',
365
+ 'panels.discover.detailSource': 'Source',
366
+ 'panels.discover.authorUnknown': 'Unattributed',
367
+ 'panels.discover.tabOverview': 'Overview',
368
+ 'panels.discover.tabReadme': 'Readme',
369
+ 'panels.discover.tabChangelog': 'Changelog',
370
+ 'panels.discover.docTitle': '{kind} for {version}',
371
+ 'panels.discover.docReadme': 'readme',
372
+ 'panels.discover.docChangelog': 'changelog',
373
+ 'panels.discover.docLoading': 'Reading…',
374
+ 'panels.discover.docMissing': 'This version ships no {kind}',
375
+ 'panels.discover.docUnavailable': 'Could not read the {kind} for this version: {reason}',
376
+ 'panels.discover.docUnknownReason': 'unknown',
377
+ 'panels.discover.detailTabs': 'Module details',
378
+ 'panels.discover.factPackage': 'Package',
379
+ 'panels.discover.factRegistry': 'Registry',
380
+ 'panels.discover.factRepository': 'Repository',
381
+ 'panels.discover.factCommit': 'Commit',
382
+ 'panels.discover.factDirectory': 'Directory',
383
+ 'panels.discover.factPublished': 'Published',
384
+ 'panels.discover.factAuthor': 'Author',
385
+ 'panels.discover.factHomepage': 'Homepage',
386
+ 'panels.discover.factCategory': 'Category',
387
+ 'panels.discover.factLabels': 'Labels',
388
+ 'panels.discover.factMarket': 'Index source',
389
+ 'panels.discover.detailVersions': 'Versions',
390
+ 'panels.discover.versionsLabel': 'Versions of {name}',
391
+ 'panels.discover.tagRecommended': 'Recommended',
392
+ 'panels.discover.tagPrerelease': 'Pre-release',
393
+ 'panels.discover.tagInstalled': 'Installed',
394
+ 'panels.discover.tagIncompatible': 'Incompatible',
395
+ 'panels.discover.tagUnknown': 'Unverified',
396
+ 'panels.discover.selected': 'Current',
397
+ 'panels.discover.done': 'Done',
398
+ 'panels.discover.installTrust': 'Modules run on this machine with your permissions. Make sure you trust where this comes from',
399
+ 'panels.discover.progress': 'Showing {shown} of {total}',
254
400
  'panels.market.add.approveBuilds': 'Allow these scripts and retry',
255
401
  'panels.market.add.approveHint': 'These packages want to run install scripts: {packages}',
256
402
  'panels.market.add.doneApplied': 'Installed and live.',
257
403
  'panels.market.add.doneRestart': 'Installed — restart once to pick it up.',
258
404
  'panels.market.add.restartWhy': 'Why this needs a restart: {reason}',
259
- 'panels.market.add.restartWhy.no-hmr': 'this profile only applies changes at startup (no hot reload)',
405
+ 'panels.market.add.restartWhy.no-hmr': 'this configuration only applies changes at startup (hot reload is off)',
260
406
  'panels.market.add.restartWhy.package-moved': 'an installed package now resolves to another directory, or the change replaced something dsh itself provides',
261
407
  'panels.market.add.restartWhy.host-module': 'the change reaches modules dsh itself loaded',
262
408
  'panels.market.add.restartWhy.unmanaged-plugin': 'the change reaches a plugin running outside the plugin list',
@@ -271,17 +417,17 @@ export const en = {
271
417
  'panels.market.add.remove': 'Remove it',
272
418
  'panels.market.add.problem.invalidSpec': "That is not a spec we accept: it cannot be empty or start with a dash.",
273
419
  'panels.market.add.problem.alreadyInstalled': 'That package is already in the profile (add @version to switch versions).',
274
- 'panels.market.add.problem.notFound': 'No such package on that source.',
275
- 'panels.market.add.problem.notAPackage': 'There is no package at that location.',
276
- 'panels.market.add.problem.notABundle': 'It is an npm package, but not a dsh plugin (no bundle patch).',
277
- 'panels.market.add.problem.network': 'The source is unreachable.',
278
- 'panels.market.add.problem.unknown': 'The check did not pass (reason unknown).',
420
+ 'panels.market.add.problem.notFound': 'No such package on that source. Try another name or version.',
421
+ 'panels.market.add.problem.notAPackage': 'There is no package at that location. Pick a folder that contains a package.json.',
422
+ 'panels.market.add.problem.notABundle': 'It is an npm package, but not a dsh plugin (it is missing the dsh wiring declaration).',
423
+ 'panels.market.add.problem.network': 'The source is unreachable. Check the network and retry.',
424
+ 'panels.market.add.problem.unknown': 'The check did not pass (reason unknown). Open the install details for the raw output, or retry.',
279
425
  'panels.market.add.reason.invalidSpec': 'the spec is not accepted',
280
426
  'panels.market.add.reason.incompatible': 'it wants a different dsh version than this machine runs',
281
427
  'panels.market.add.reason.notBundle': 'it is not a dsh plugin package',
282
428
  'panels.market.add.reason.notRemovable': 'it ships with the installation and cannot be removed',
283
429
  'panels.market.add.reason.bundleInUse': 'something is still using it',
284
- 'panels.market.add.reason.stopProfile': 'this profile has no hot reload, so stop the process first',
430
+ 'panels.market.add.reason.stopProfile': 'this configuration has no hot reload, so stop the process first',
285
431
  'panels.market.add.reason.staleApproval': 'the scripts to allow changed — start over',
286
432
  'panels.market.add.reason.operationError': 'pnpm failed (see the install output)',
287
433
  'panels.market.add.reason.buildBlocked': 'pnpm blocked install scripts',
@@ -306,7 +452,7 @@ export const en = {
306
452
  'blocker.login.titleGeneric': 'Sign-in required',
307
453
  'blocker.login.hint': 'The workbench uses your browser session; sign in once and you are done.',
308
454
  'blocker.login.go': 'Go sign in',
309
- 'blocker.login.manual': 'Run `opencli coding team-current` in a terminal, finish signing in, then retry.',
455
+ 'blocker.login.manual': 'Run the plugin login command in a terminal (see its docs), then retry.',
310
456
  'blocker.forbidden.title': 'No access to {platform}',
311
457
  'blocker.forbidden.titleGeneric': 'No access',
312
458
  'blocker.forbidden.hint': 'You are signed in, but this project/repo is not permitted for your account.',
@@ -320,27 +466,30 @@ export const en = {
320
466
  'panels.empty': 'No modules on the panel yet',
321
467
  'panels.emptyHint': 'You can also just tell the agent: “add a module to the panel”.',
322
468
  'env.title': 'Preparing the workbench',
323
- 'env.checking': 'Checking the runtime environment…',
324
- 'env.installing': 'Installing the missing dependency…',
469
+ 'env.checking': 'Getting the runtime ready…',
470
+ 'env.installing': 'Installing background tools — the first run takes a moment…',
325
471
  'env.failed': 'One step away',
326
472
  'env.elapsed': 'Waiting {seconds}s',
327
473
  'env.stepFailed.install': 'install failed',
328
474
  'env.stepFailed.path': 'installed but not found',
329
475
  'env.stepFailed.shell': 'no shell channel',
476
+ 'env.toolchain.ok': 'Looks good',
477
+ 'env.toolchain.warn': 'Almost ready',
478
+ 'env.opencli.ok': 'Ready',
330
479
  'env.bridge.ok': 'Connected',
331
- 'env.bridge.short': 'Not connected',
332
- 'env.bridge.why': 'Panel data goes through the login state in your browser: with this channel down, modules cannot fetch data. It does not block startup: fix it, or enter the workbench first.',
333
- 'env.bridge.hold': 'The browser bridge is not connected yet \u2014 fix it below and hit Retry, or enter the workbench first.',
480
+ 'env.bridge.short': 'Not connected yet',
481
+ 'env.bridge.why': 'Panel data uses the login state in your browser. Without this connection, modules cannot fetch data. It does not block startup: fix it, or enter the workbench first.',
482
+ 'env.bridge.hold': 'The browser is not connected yet \u2014 fix it below and hit Retry, or enter the workbench first.',
334
483
  'env.bridge.daemon': 'The background service is not running. It usually starts by itself \u2014 run the command below in your terminal first.',
335
- 'env.bridge.extension': 'The browser extension is not connected. Install it once from the Chrome Web Store (then hit Retry here). If it is already installed, run the command below first.',
484
+ 'env.bridge.extension': 'The browser extension is not connected. Make sure the browser is running and the extension is enabled; install it once from the store if needed (then hit Retry here).',
336
485
  'env.bridge.extensionLink': 'Get the extension in the Chrome Web Store',
337
- 'env.bridge.profile': 'Several browser profiles are connected but none is the default: list them (command below), then pick one.',
338
- 'env.bridge.stale': 'The default browser profile is stale (it names an extension instance that no longer exists): pick one again.',
339
- 'env.bridge.unknown': 'Could not tell what went wrong: the raw output below has the steps opencli itself suggests.',
486
+ 'env.bridge.profile': 'Several browser accounts are connected but none is the default: list them (command below), then pick one.',
487
+ 'env.bridge.stale': 'The default browser account is stale (it names an extension instance that no longer exists): pick one again.',
488
+ 'env.bridge.unknown': 'Could not tell what went wrong. Expand the raw output and follow the steps in it.',
340
489
  'env.fix.title': 'How to fix it',
341
- 'env.fix.why': 'The workbench uses its own opencli (installed separately from the one in your terminal), and it is not set up on this machine yet.',
342
- 'env.fix.whyPath': 'opencli is installed, but this environment cannot find it \u2014 usually a PATH or shell-session issue.',
343
- 'env.fix.whyShell': 'The workbench has no shell channel, so it cannot fetch data \u2014 nothing the user can install.',
490
+ 'env.fix.why': 'The workbench uses its own background tool (installed separately from the one in your terminal), and it is not set up on this machine yet.',
491
+ 'env.fix.whyPath': 'The background tool is installed, but this environment cannot find it \u2014 usually a PATH or shell-session issue.',
492
+ 'env.fix.whyShell': 'The workbench has no shell channel, so it cannot fetch data \u2014 you cannot install this from here; someone needs to fix the background environment.',
344
493
  'env.fix.step': 'Run this in a terminal, then hit Retry:',
345
494
  'env.fix.stepPath': 'Open a new terminal window (or make sure npm\u2019s global bin directory is on PATH), then hit Retry.',
346
495
  'env.fix.stepShell': 'Restart the workbench (or dsh); if it keeps happening, the shell channel is not wired up.',
@@ -348,32 +497,47 @@ export const en = {
348
497
  'env.fix.network': 'Network unreachable: check your network or proxy, then retry.',
349
498
  'env.fix.details': 'Details (for troubleshooting)',
350
499
  'env.retry': 'Retry',
500
+ 'env.wake': 'Open browser',
501
+ 'env.wake.opening': 'Opening the browser…',
502
+ 'env.wake.browserOpen': 'The browser is already running but the extension is not connected — check that it is enabled.',
503
+ 'env.wake.noBrowser': 'No Chrome / Edge / Brave / Chromium / Vivaldi found; open one manually.',
504
+ 'env.wake.failed': 'Could not open the browser this time; try again.',
351
505
  'env.bridge.continue': 'Enter the workbench anyway',
352
506
  'env.diy.ok': 'Available',
353
- 'env.diy.short': 'Cannot load',
354
- 'env.diy.hold': 'DIY mode cannot load \u2014 upgrade dsh, then hit Retry; or enter the workbench first.',
355
- 'env.diy.why': '\u201cWorkbench DIY\u201d is a dsh agent preset, and it is generated from the dsh generation this shell was verified against. The dsh on this machine is older and does not ship some of those rows, so the whole preset fails to mount. dsh lists only the presets that mount, so the mode will simply not appear \u2014 panels and everything else are unaffected.',
356
- 'env.diy.rows': 'This dsh is missing these rows: {rows}',
357
- 'env.diy.noRow': 'The health check did not find \u201cWorkbench DIY\u201d in dsh\u2019s preset roster \u2014 most likely this bundle\u2019s preset patch did not apply.',
507
+ 'env.diy.short': 'Unavailable for now',
508
+ 'env.diy.hold': 'DIY mode is unavailable for now \u2014 upgrade dsh, then hit Retry; or enter the workbench first.',
509
+ 'env.diy.why': 'The dsh on this machine is older than the one this workbench was verified against, so DIY mode cannot run. Panels and everything else are unaffected. Upgrade dsh and restart.',
510
+ 'env.diy.rows': 'This dsh is missing these items: {rows}',
511
+ 'env.diy.noRow': 'The health check did not find \u201cWorkbench DIY mode\u201d in dsh\u2019s mode roster \u2014 the workbench install most likely did not include the matching mode patch.',
358
512
  'env.diy.step': 'Upgrade dsh, then restart the workbench:',
359
513
  'env.diy.continue': 'Enter the workbench anyway',
360
514
  'env.copyCommand': 'Copy command',
361
515
  'env.copied': 'Copied',
362
- 'env.step.opencli': 'Checking the workbench opencli',
363
- 'env.step.codingPlugin': 'Checking the coding plugin',
364
- 'env.step.bridge': 'Checking the browser bridge',
365
- 'env.step.diy': 'Checking DIY mode',
366
- 'env.step.warm': 'Warming up site sessions',
367
- 'env.warm.done': '{n} site(s) warmed up',
368
- 'env.warm.short': 'Not warmed this time — harmless; the panel heals on first read',
516
+ 'env.step.toolchain': 'Runtime',
517
+ 'env.step.opencli': 'Background tools',
518
+ 'env.step.bridge': 'Browser connection',
519
+ 'env.step.diy': 'DIY mode',
520
+ 'env.step.warm': 'Site sign-in',
521
+ 'env.warm.done': 'Ready ({n} sites)',
522
+ 'env.warm.short': 'Could not sign in early this time \u2014 nothing breaks; the first read fills it in',
369
523
  'env.unit.failed': 'This module cannot start',
370
524
  'env.unit.failedHint': 'It failed while assembling itself; other modules are unaffected.',
371
- 'env.unit.missingPlugin': 'This module is not ready yet',
372
- 'env.unit.missingCommandsHint': 'Updating it should fix this.',
373
525
  'env.unit.unchecked': 'Cannot check: no shell channel',
374
526
  'env.unit.uncheckedHint': 'The module is not the problem \u2014 the shell channel is unavailable. Restart the workbench.',
375
- 'env.unit.missingCommands': 'This module is out of date',
527
+ 'adapterSet.not-configured': 'No adapter set configured; using the default.',
528
+ 'adapterSet.no-profile': 'No profile found, so the adapter set cannot load; using the default.',
529
+ 'adapterSet.malformed': 'An adapter set must be a package name (for example @acme/adapters-set); using the default.',
530
+ 'adapterSet.not-resolvable': '{spec} is not installed in this profile; install it or remove the config line.',
531
+ 'adapterSet.import-failed': '{spec} did not load; using the default set.',
532
+ 'adapterSet.bad-export': '{spec} does not export createAdapterSet(ctx); using the default set.',
533
+ 'adapterSet.factory-failed': '{spec} threw while creating the set; using the default set.',
534
+ 'adapterSet.incompatible-version': '{spec} uses an unsupported adapter protocol version; upgrade the adapter set or the workbench and retry.',
535
+ 'adapterSet.missing-member': '{spec} is missing a required member; using the default set.',
376
536
  'env.unit.hint': 'Retry after installing; other modules are unaffected.',
537
+ 'env.unit.unsupported': 'This module needs something this workbench does not know',
538
+ 'env.unit.unsupportedHint': 'It uses a need kind only newer workbenches have: upgrade the workbench, or ask the module author to use a v2 kind.',
539
+ 'env.unit.degraded': 'This module is missing one optional thing',
540
+ 'env.unit.degradedHint': 'It still works; use the command below to fill the gap.',
377
541
  'rightbar.label': 'Data panels',
378
542
  'rightbar.expand': 'Expand the data panel',
379
543
  'rightbar.collapse': 'Collapse the data panel',
@@ -385,44 +549,28 @@ export const en = {
385
549
  'rightbar.updatedAt': 'updated {time}',
386
550
  'rightbar.noProject': 'The current session has no workspace',
387
551
  'rightbar.openPlatform': 'Open on the platform',
388
- 'coding.notARepo.title': 'This workspace is not a Coding repository',
389
552
  'error.unknown': 'Something went wrong',
390
553
  'board.title': 'Workbench panel',
391
554
  'panel.conversation': 'Conversation',
392
555
  'panels.label': 'Global panels',
393
- 'configSync.nav': 'Config sync',
394
- 'configSync.lead': 'Bring over the rows another profile configures explicitly — pick any profile as the source.',
395
- 'configSync.source': 'Source',
396
- 'configSync.sourceBroken': 'its config is unreadable',
397
- 'configSync.sourceRows': '{name}: {count} rows are new or different for the workbench',
398
- 'configSync.sourceDead': 'unreadable',
399
- 'configSync.refresh': 'Read again',
400
- 'configSync.loading': 'Reading the source config…',
401
- 'configSync.readHint': 'Pick another source, or read again.',
402
- 'configSync.tag.new': 'New',
403
- 'configSync.tag.differs': 'Differs',
404
- 'configSync.conflictNote': 'Applying replaces this workbench copy with the source',
405
- 'configSync.code.lang': 'yaml',
406
- 'configSync.code.copy': 'Copy',
407
- 'configSync.code.copied': 'Copied',
408
- 'configSync.code.wrap': 'Wrap lines',
409
- 'configSync.code.unwrap': 'No wrap',
410
- 'configSync.code.collapse': 'Collapse',
411
- 'configSync.code.collapseAria': 'Collapse this row',
412
- 'configSync.code.expandAria': 'Expand the diff ({count} more lines)',
413
- 'configSync.code.expand': 'Show {count} more lines',
414
- 'configSync.missing': '{pkg} is not installed: the row will not take effect — run `dsh plugin --profile {profile} add {pkg}`, or install it from the module market',
415
- 'configSync.apply': 'Sync {count} selected',
416
- 'configSync.applyNone': 'Pick some rows first',
417
- 'configSync.applying': 'Writing…',
418
- 'configSync.applied': 'Written to the workbench config · applied',
419
- 'configSync.appliedIds': 'Written this time: {ids}',
420
- 'configSync.skippedIds': 'Left alone (already here): {ids}',
421
- 'configSync.nothing': 'Nothing to sync',
422
- 'configSync.unreadable': 'Cannot read {path}: {reason}',
423
- 'configSync.noSource': 'This machine has no other profile to sync from',
424
- 'configSync.emptyProviders': 'The workbench has no model provider yet — sync the llm- rows from some profile, or configure one under Models.',
425
- 'configSync.failed': 'The sync did not go through; try again.',
556
+ 'adapterSet.title': 'Adapter set',
557
+ 'adapterSet.lead': 'The host adapters this workbench is using. Change the workbench config in the profile and restart.',
558
+ 'adapterSet.active': 'Active: {id}@{version}',
559
+ 'adapterSet.defaults': 'Missing modules / runtime / plugins / actions are filled by the default set.',
560
+ 'adapterSet.failed': 'The configured set did not load; using the default.',
561
+ 'adapterSet.healthUnreadable': 'Could not read the workbench health; reopen this page later.',
562
+ 'workbenchSettings.nav': 'Workbench settings',
563
+ 'workbenchSettings.lead': 'Settings the workbench itself owns live here.',
564
+ 'sidebarEdition.nav': 'Session list',
565
+ 'sidebarEdition.lead': 'Which whole left column to use: the official dsh one, or the workbench’s own.',
566
+ 'sidebarEdition.official': 'Official',
567
+ 'sidebarEdition.officialHint': 'Matches dsh exactly and stays stable: search, view options, show more, archive, add workspace — no waiting for us to catch up. Pick it to keep things simple.',
568
+ 'sidebarEdition.custom': 'Custom',
569
+ 'sidebarEdition.customHint': 'Built for multi-project work: one project per dropdown, recency-first sessions, edge fades, marquee, DIY new session. Easier when you juggle projects.',
570
+ 'sidebarEdition.saving': 'Configuring…',
571
+ 'sidebarEdition.reloadRequired': 'Saved. Reload the page to apply — no workbench restart needed.',
572
+ 'sidebarEdition.reload': 'Reload page',
573
+ 'sidebarEdition.failed': 'That choice did not save; try again.',
426
574
  'debug.workspace': 'this workspace',
427
575
  'debug.status': 'Debugging “{title}”',
428
576
  'debug.status.trouble': 'Debugging needs your attention ({title})',
@@ -453,4 +601,29 @@ export const en = {
453
601
  'approval.record.noSwitch': 'it will not switch you back (the leftbar footer shows the state)',
454
602
  'approval.longTask.what': 'Stops',
455
603
  'approval.longTask.signal': 'stopping only sends an interrupt signal — how the platform-side run finishes is up to the module',
604
+ 'approval.publish.module': 'Module',
605
+ 'approval.publish.target': 'Target',
606
+ 'approval.publish.version': 'Version',
607
+ 'approval.publish.registry': 'Registry',
608
+ 'approval.publish.repo': 'Repository',
609
+ 'approval.publish.branch': 'Branch',
610
+ 'approval.publish.defaultBranch': 'default branch',
611
+ 'approval.publish.artifacts': 'Artifacts',
612
+ 'approval.publish.index': 'Index',
613
+ 'approval.publish.commits': 'Commits',
614
+ 'approval.publish.twoCommits': 'artifacts + market.json in 2 commits, one push',
615
+ 'approval.publish.reading': 'Reading…',
616
+ 'approval.publish.changelog': 'Changelog for {version}',
617
+ 'approval.publish.changelogMissing': 'No changelog entry for {version}; publishing will be blocked',
618
+ 'approval.publish.targetAuto': 'configured default',
619
+ 'approval.publish.targetTeam': 'team registry',
620
+ 'approval.publish.targetPublic': 'public npm',
621
+ 'approval.publish.targetTarball': 'local tarball',
622
+ 'approval.publish.targetGit': 'git repository',
623
+ 'approval.publish.targetMarket': 'module market index',
624
+ 'approval.publish.targetLocal': 'keep local',
625
+ 'markdown.copy': 'Copy',
626
+ 'markdown.copied': 'Copied',
627
+ 'markdown.footnotes': 'Footnotes',
628
+ ...enNeedText,
456
629
  };