@dsh-workbench/shared 0.3.11 → 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 (371) 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 +1 -1
  6. package/dist/api/workbench-client.js +2 -1
  7. package/dist/components/Activity.css +0 -1
  8. package/dist/components/ApprovalDetail.css +1 -2
  9. package/dist/components/ApprovalDetail.d.ts +1 -1
  10. package/dist/components/ApprovalPlan.css +0 -1
  11. package/dist/components/Card.css +0 -1
  12. package/dist/components/Card.d.ts +1 -1
  13. package/dist/components/CardBoundary.d.ts +1 -1
  14. package/dist/components/CardHead.css +0 -1
  15. package/dist/components/CardHead.d.ts +1 -1
  16. package/dist/components/ChoiceGroup.css +1 -2
  17. package/dist/components/ConfirmBar.d.ts +1 -1
  18. package/dist/components/ConfirmBar.js +1 -1
  19. package/dist/components/Form.css +1 -1
  20. package/dist/components/FormActions.js +1 -1
  21. package/dist/components/LongTaskRow.css +1 -2
  22. package/dist/components/LongTaskRow.d.ts +1 -1
  23. package/dist/components/LongTaskRow.js +1 -1
  24. package/dist/components/Note.css +0 -1
  25. package/dist/components/ResourceStates.css +0 -1
  26. package/dist/components/SettingsSection.css +0 -1
  27. package/dist/components/Spinner.css +0 -1
  28. package/dist/components/Stack.css +0 -1
  29. package/dist/components/StateBlock.css +0 -1
  30. package/dist/components/board-module.d.ts +3 -3
  31. package/dist/components/icons.d.ts +1 -1
  32. package/dist/components/icons.js +11 -4
  33. package/dist/config/constants.d.ts +2 -2
  34. package/dist/config/constants.js +2 -2
  35. package/dist/contract/adapters.d.ts +10 -0
  36. package/dist/contract/cli.d.ts +3 -0
  37. package/dist/contract/data.d.ts +126 -0
  38. package/dist/{api → contract}/facts.d.ts +12 -3
  39. package/dist/{api → contract}/facts.js +19 -1
  40. package/dist/contract/needs.d.ts +132 -0
  41. package/dist/contract/needs.js +232 -0
  42. package/dist/contract/plugin-source.d.ts +1 -0
  43. package/dist/contract/protocol/bundle-install.d.ts +136 -0
  44. package/dist/contract/protocol/bundle-install.js +12 -0
  45. package/dist/contract/protocol/config-sync.d.ts +55 -0
  46. package/dist/contract/protocol/config-sync.js +2 -0
  47. package/dist/contract/protocol/diy.d.ts +4 -0
  48. package/dist/contract/protocol/diy.js +4 -0
  49. package/dist/contract/protocol/dsh-plugins.d.ts +11 -0
  50. package/dist/contract/protocol/dsh-plugins.js +1 -0
  51. package/dist/contract/protocol/long-tasks.d.ts +13 -0
  52. package/dist/contract/protocol/long-tasks.js +1 -0
  53. package/dist/contract/protocol/market-index.d.ts +195 -0
  54. package/dist/contract/protocol/market-index.js +7 -0
  55. package/dist/contract/protocol/platform.d.ts +44 -0
  56. package/dist/contract/protocol/platform.js +1 -0
  57. package/dist/contract/protocol/preflight-wake.d.ts +7 -0
  58. package/dist/contract/protocol/preflight-wake.js +1 -0
  59. package/dist/contract/protocol/profile-create.d.ts +30 -0
  60. package/dist/contract/protocol/profile-create.js +2 -0
  61. package/dist/contract/protocol/sidebar-edition.d.ts +14 -0
  62. package/dist/contract/protocol/sidebar-edition.js +2 -0
  63. package/dist/contract/protocol/unit-manifests.d.ts +6 -0
  64. package/dist/contract/protocol/unit-manifests.js +1 -0
  65. package/dist/contract/unit-board.js +1 -0
  66. package/dist/contract/unit-capability.d.ts +34 -0
  67. package/dist/contract/unit-capability.js +1 -0
  68. package/dist/{host → contract}/unit-declaration.d.ts +7 -5
  69. package/dist/{api → contract}/unit-declaration.js +19 -13
  70. package/dist/contract/unit.d.ts +57 -0
  71. package/dist/contract/unit.js +24 -0
  72. package/dist/contract/workbench-contract.d.ts +15 -0
  73. package/dist/contract/workbench-contract.js +1 -0
  74. package/dist/host/adapter-set.d.ts +26 -0
  75. package/dist/host/adapter-set.js +243 -0
  76. package/dist/host/adapter-types.d.ts +79 -0
  77. package/dist/host/adapter-types.js +23 -0
  78. package/dist/host/adapters.d.ts +22 -0
  79. package/dist/host/adapters.js +9 -0
  80. package/dist/host/browser.d.ts +3 -0
  81. package/dist/host/browser.js +3 -0
  82. package/dist/host/changelog.d.ts +21 -0
  83. package/dist/host/changelog.js +188 -0
  84. package/dist/host/channel-plugin.d.ts +15 -0
  85. package/dist/host/channel-plugin.js +42 -0
  86. package/dist/host/cli.d.ts +4 -0
  87. package/dist/host/cli.js +7 -0
  88. package/dist/host/command-name.d.ts +1 -0
  89. package/dist/host/command-name.js +14 -0
  90. package/dist/host/data-error.d.ts +13 -0
  91. package/dist/host/data-error.js +20 -0
  92. package/dist/host/data-root.js +3 -0
  93. package/dist/host/diy-debug.js +2 -1
  94. package/dist/host/diy-record.js +2 -1
  95. package/dist/host/facts.d.ts +1 -1
  96. package/dist/host/facts.js +3 -2
  97. package/dist/host/git.js +2 -2
  98. package/dist/host/http.js +1 -1
  99. package/dist/host/lib-capabilities.d.ts +22 -0
  100. package/dist/host/lib-capabilities.js +37 -0
  101. package/dist/host/lib-install.d.ts +9 -0
  102. package/dist/host/lib-install.js +10 -0
  103. package/dist/host/long-task.d.ts +1 -1
  104. package/dist/host/long-task.js +4 -3
  105. package/dist/host/market-index.d.ts +22 -0
  106. package/dist/host/market-index.js +420 -0
  107. package/dist/host/needs.d.ts +4 -0
  108. package/dist/host/needs.js +2 -0
  109. package/dist/host/patch.d.ts +9 -0
  110. package/dist/host/patch.js +78 -0
  111. package/dist/host/paths.d.ts +12 -0
  112. package/dist/host/paths.js +28 -0
  113. package/dist/host/platform.d.ts +14 -0
  114. package/dist/host/platform.js +40 -0
  115. package/dist/host/plugin-source.d.ts +8 -6
  116. package/dist/host/plugin-source.js +43 -33
  117. package/dist/host/plugin.d.ts +4 -0
  118. package/dist/host/plugin.js +39 -0
  119. package/dist/host/port-types.d.ts +191 -0
  120. package/dist/host/port-types.js +1 -0
  121. package/dist/host/preflight.d.ts +28 -0
  122. package/dist/host/preflight.js +1 -0
  123. package/dist/host/profile-port.d.ts +4 -0
  124. package/dist/host/profile-port.js +4 -0
  125. package/dist/host/provision.d.ts +2 -2
  126. package/dist/host/provision.js +5 -3
  127. package/dist/host/recipe-rules.d.ts +5 -0
  128. package/dist/host/recipe-rules.js +382 -0
  129. package/dist/host/recipe.d.ts +14 -0
  130. package/dist/host/recipe.js +283 -0
  131. package/dist/host/shell-text.d.ts +9 -2
  132. package/dist/host/shell-text.js +15 -3
  133. package/dist/host/shell.d.ts +2 -0
  134. package/dist/host/shell.js +7 -0
  135. package/dist/host/spec.d.ts +8 -0
  136. package/dist/host/spec.js +24 -0
  137. package/dist/host/supply-index.d.ts +34 -0
  138. package/dist/host/supply-index.js +202 -0
  139. package/dist/host/supply-port.d.ts +5 -0
  140. package/dist/host/supply-port.js +39 -0
  141. package/dist/host/time.d.ts +12 -0
  142. package/dist/host/time.js +19 -0
  143. package/dist/host/tokens.d.ts +26 -0
  144. package/dist/host/tokens.js +154 -0
  145. package/dist/host/tool-kit.js +1 -1
  146. package/dist/host/unit-face.d.ts +5 -4
  147. package/dist/host/version-range.d.ts +2 -0
  148. package/dist/host/version-range.js +73 -0
  149. package/dist/host/version.d.ts +3 -0
  150. package/dist/host/version.js +29 -0
  151. package/dist/host.d.ts +47 -16
  152. package/dist/host.js +47 -16
  153. package/dist/i18n/en.js +224 -71
  154. package/dist/i18n/index.d.ts +298 -73
  155. package/dist/i18n/merge.js +1 -1
  156. package/dist/i18n/need-text.d.ts +26 -0
  157. package/dist/i18n/need-text.js +26 -0
  158. package/dist/i18n/settings.d.ts +70 -0
  159. package/dist/i18n/settings.js +136 -0
  160. package/dist/i18n/zh.d.ts +297 -72
  161. package/dist/i18n/zh.js +226 -73
  162. package/dist/index.d.ts +23 -7
  163. package/dist/index.js +23 -7
  164. package/dist/{api → lib}/dsh-client.d.ts +11 -1
  165. package/dist/lib/dsh-client.js +1 -0
  166. package/dist/lib/market-index.d.ts +7 -0
  167. package/dist/lib/market-index.js +25 -0
  168. package/dist/lib/react.d.ts +0 -40
  169. package/dist/lib/react.js +0 -36
  170. package/dist/lib/ui.js +3 -9
  171. package/dist/testing/data.d.ts +13 -0
  172. package/dist/testing/data.js +46 -0
  173. package/dist/testing/declaration.d.ts +1 -1
  174. package/dist/testing/declaration.js +1 -1
  175. package/dist/testing/host-fakes.d.ts +0 -13
  176. package/dist/testing/host-fakes.js +0 -24
  177. package/dist/testing/needs.d.ts +16 -0
  178. package/dist/testing/needs.js +46 -0
  179. package/dist/testing.d.ts +2 -0
  180. package/dist/testing.js +2 -0
  181. package/package.json +18 -2
  182. package/src/api/__tests__/blocker-table.test.ts +135 -86
  183. package/src/api/blocker-table.ts +52 -26
  184. package/src/api/dsh.ts +1 -1
  185. package/src/api/host-write.ts +0 -1
  186. package/src/api/workbench-client.test.ts +2 -2
  187. package/src/api/workbench-client.ts +2 -1
  188. package/src/components/Activity.css +0 -1
  189. package/src/components/ApprovalDetail.css +1 -2
  190. package/src/components/ApprovalDetail.tsx +1 -1
  191. package/src/components/ApprovalPlan.css +0 -1
  192. package/src/components/Card.css +0 -1
  193. package/src/components/Card.tsx +1 -1
  194. package/src/components/CardAnchor.test.tsx +1 -1
  195. package/src/components/CardBoundary.tsx +1 -1
  196. package/src/components/CardHead.css +0 -1
  197. package/src/components/CardHead.tsx +1 -1
  198. package/src/components/ChoiceGroup.css +1 -2
  199. package/src/components/ConfirmBar.tsx +1 -1
  200. package/src/components/Form.css +1 -1
  201. package/src/components/Form.tsx +1 -1
  202. package/src/components/FormActions.tsx +1 -1
  203. package/src/components/LongTaskRow.css +1 -2
  204. package/src/components/LongTaskRow.tsx +1 -1
  205. package/src/components/Note.css +0 -1
  206. package/src/components/ResourceStates.css +0 -1
  207. package/src/components/SelectFieldNodes.tsx +0 -1
  208. package/src/components/SettingsSection.css +0 -1
  209. package/src/components/Spinner.css +0 -1
  210. package/src/components/Stack.css +0 -1
  211. package/src/components/StateBlock.css +0 -1
  212. package/src/components/__tests__/long-task-row.test.ts +1 -1
  213. package/src/components/board-module.ts +3 -3
  214. package/src/components/icons.tsx +16 -8
  215. package/src/config/constants.ts +2 -2
  216. package/src/{api → contract}/__tests__/facts.test.ts +73 -25
  217. package/src/{api → contract}/__tests__/long-task.test.ts +3 -3
  218. package/src/contract/__tests__/needs.test.ts +74 -0
  219. package/src/{host → contract}/__tests__/unit-declaration.test.ts +1 -1
  220. package/src/contract/__tests__/unit.test.ts +43 -0
  221. package/src/contract/adapters.ts +9 -0
  222. package/src/contract/cli.ts +3 -0
  223. package/src/contract/data.ts +145 -0
  224. package/src/{api → contract}/facts.ts +34 -4
  225. package/src/contract/needs.ts +331 -0
  226. package/src/contract/plugin-source.ts +1 -0
  227. package/src/contract/protocol/bundle-install.ts +198 -0
  228. package/src/contract/protocol/config-sync.ts +65 -0
  229. package/src/contract/protocol/diy.ts +4 -0
  230. package/src/contract/protocol/dsh-plugins.ts +13 -0
  231. package/src/contract/protocol/long-tasks.ts +16 -0
  232. package/src/contract/protocol/market-index.ts +246 -0
  233. package/src/contract/protocol/platform.ts +47 -0
  234. package/src/contract/protocol/preflight-wake.ts +17 -0
  235. package/src/contract/protocol/profile-create.ts +36 -0
  236. package/src/contract/protocol/sidebar-edition.ts +19 -0
  237. package/src/contract/protocol/unit-manifests.ts +8 -0
  238. package/src/{api → contract}/unit-board.ts +0 -1
  239. package/src/contract/unit-capability.ts +37 -0
  240. package/src/{host → contract}/unit-declaration.ts +22 -18
  241. package/src/contract/unit.ts +76 -0
  242. package/src/contract/workbench-contract.ts +30 -0
  243. package/src/host/__tests__/adapter-set.test.ts +228 -0
  244. package/src/host/__tests__/adapters.test.ts +27 -0
  245. package/src/host/__tests__/changelog.test.ts +102 -0
  246. package/src/host/__tests__/command-name.test.ts +16 -0
  247. package/src/host/__tests__/diy-record.test.ts +3 -3
  248. package/src/host/__tests__/facts.test.ts +5 -5
  249. package/src/host/__tests__/long-task.test.ts +1 -1
  250. package/src/host/__tests__/market-index.test.ts +179 -0
  251. package/src/host/__tests__/plugin-ledger.test.ts +10 -10
  252. package/src/host/__tests__/provision.test.ts +7 -6
  253. package/src/host/__tests__/shell-text.test.ts +16 -1
  254. package/src/host/__tests__/supply-index.test.ts +137 -0
  255. package/src/host/__tests__/tokens.test.ts +110 -0
  256. package/src/host/__tests__/version-range.test.ts +21 -0
  257. package/src/host/adapter-set.ts +298 -0
  258. package/src/host/adapter-types.ts +105 -0
  259. package/src/host/adapters.ts +44 -0
  260. package/src/host/browser.ts +3 -0
  261. package/src/host/changelog.ts +212 -0
  262. package/src/host/channel-plugin.ts +55 -0
  263. package/src/host/cli.ts +11 -0
  264. package/src/host/command-name.ts +15 -0
  265. package/src/host/data-error.ts +21 -0
  266. package/src/host/data-root.ts +2 -0
  267. package/src/host/diy-debug.ts +2 -1
  268. package/src/host/diy-record.ts +2 -1
  269. package/src/host/facts.ts +4 -3
  270. package/src/host/git.ts +2 -2
  271. package/src/host/http.ts +1 -1
  272. package/src/host/lib-capabilities.ts +52 -0
  273. package/src/host/lib-install.ts +18 -0
  274. package/src/host/long-task.ts +4 -3
  275. package/src/host/market-index.ts +413 -0
  276. package/src/host/needs.ts +6 -0
  277. package/src/host/patch.ts +93 -0
  278. package/src/host/paths.ts +37 -0
  279. package/src/host/platform.ts +48 -0
  280. package/src/host/plugin-source.ts +48 -56
  281. package/src/host/plugin.ts +39 -0
  282. package/src/host/port-types.ts +222 -0
  283. package/src/host/preflight.ts +31 -0
  284. package/src/host/profile-port.ts +9 -0
  285. package/src/host/provision.ts +7 -4
  286. package/src/host/recipe-rules.ts +330 -0
  287. package/src/host/recipe.test.ts +334 -0
  288. package/src/host/recipe.ts +323 -0
  289. package/src/host/shell-text.ts +15 -3
  290. package/src/host/shell.ts +9 -0
  291. package/src/host/spec.ts +32 -0
  292. package/src/host/supply-index.ts +256 -0
  293. package/src/host/supply-port.ts +45 -0
  294. package/src/host/time.ts +22 -0
  295. package/src/host/tokens.ts +186 -0
  296. package/src/host/tool-kit.ts +1 -1
  297. package/src/host/unit-face.ts +5 -4
  298. package/src/host/version-range.ts +71 -0
  299. package/src/host/version.ts +30 -0
  300. package/src/host.ts +47 -16
  301. package/src/i18n/en.ts +224 -71
  302. package/src/i18n/merge.test.ts +6 -6
  303. package/src/i18n/merge.ts +1 -1
  304. package/src/i18n/need-text.ts +27 -0
  305. package/src/i18n/settings.ts +141 -0
  306. package/src/i18n/zh.ts +227 -73
  307. package/src/index.ts +23 -7
  308. package/src/lib/blocker-action.ts +0 -1
  309. package/src/{api → lib}/dsh-client.ts +12 -1
  310. package/src/lib/market-index.ts +36 -0
  311. package/src/lib/react.ts +0 -40
  312. package/src/lib/text.test.ts +2 -2
  313. package/src/lib/ui.test.ts +6 -5
  314. package/src/lib/ui.ts +3 -9
  315. package/src/testing/__tests__/declaration.test.ts +1 -1
  316. package/src/testing/data.ts +66 -0
  317. package/src/testing/declaration.ts +2 -2
  318. package/src/testing/host-fakes.ts +0 -38
  319. package/src/testing/needs.ts +80 -0
  320. package/src/testing.ts +2 -0
  321. package/dist/api/unit-declaration.d.ts +0 -65
  322. package/dist/api/unit.d.ts +0 -85
  323. package/dist/api/unit.js +0 -8
  324. package/dist/api/workbench-contract.d.ts +0 -44
  325. package/dist/components/MockStrip.css +0 -39
  326. package/dist/components/MockStrip.d.ts +0 -15
  327. package/dist/components/MockStrip.js +0 -8
  328. package/dist/components/SaveBar.css +0 -7
  329. package/dist/host/browser-find.d.ts +0 -38
  330. package/dist/host/browser-find.js +0 -242
  331. package/dist/host/browser-read.d.ts +0 -28
  332. package/dist/host/browser-read.js +0 -243
  333. package/dist/host/opencli-runtime.d.ts +0 -25
  334. package/dist/host/opencli-runtime.js +0 -56
  335. package/dist/host/opencli-window.d.ts +0 -2
  336. package/dist/host/opencli-window.js +0 -8
  337. package/dist/host/opencli.d.ts +0 -37
  338. package/dist/host/opencli.js +0 -155
  339. package/dist/host/unit-declaration.js +0 -213
  340. package/dist/host/unit-libs.d.ts +0 -37
  341. package/dist/lib/diy-debug.d.ts +0 -80
  342. package/dist/lib/diy-debug.js +0 -88
  343. package/dist/lib/diy-record.d.ts +0 -135
  344. package/dist/lib/diy-record.js +0 -162
  345. package/dist/lib/lint-probe.d.ts +0 -1
  346. package/dist/lib/lint-probe.js +0 -6
  347. package/dist/lib/panel-state.d.ts +0 -120
  348. package/dist/lib/panel-state.js +0 -176
  349. package/src/api/__tests__/unit.test.ts +0 -38
  350. package/src/api/unit.ts +0 -93
  351. package/src/api/workbench-contract.ts +0 -59
  352. package/src/host/__tests__/browser-find.test.ts +0 -330
  353. package/src/host/__tests__/browser-read.test.ts +0 -228
  354. package/src/host/__tests__/opencli-runtime.test.ts +0 -46
  355. package/src/host/browser-find.ts +0 -311
  356. package/src/host/browser-read.ts +0 -311
  357. package/src/host/opencli-runtime.ts +0 -79
  358. package/src/host/opencli-window.ts +0 -11
  359. package/src/host/opencli.ts +0 -213
  360. package/src/host/unit-libs.ts +0 -41
  361. /package/dist/{api/blocker.js → contract/adapters.js} +0 -0
  362. /package/dist/{api → contract}/blocker.d.ts +0 -0
  363. /package/dist/{api/dsh-client.js → contract/blocker.js} +0 -0
  364. /package/dist/{api/unit-board.js → contract/cli.js} +0 -0
  365. /package/dist/{api/workbench-contract.js → contract/data.js} +0 -0
  366. /package/dist/{api → contract}/long-task.d.ts +0 -0
  367. /package/dist/{api → contract}/long-task.js +0 -0
  368. /package/dist/{host/unit-libs.js → contract/plugin-source.js} +0 -0
  369. /package/dist/{api → contract}/unit-board.d.ts +0 -0
  370. /package/src/{api → contract}/blocker.ts +0 -0
  371. /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…',
@@ -91,9 +94,11 @@ export const en = {
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,10 @@ 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.',
125
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}.',
126
133
  'panels.market.updateUnknownVersion': '(unknown)',
127
134
  'panels.market.updateGone': 'Not updated: after the run the module cannot be read from disk.',
@@ -143,23 +150,18 @@ export const en = {
143
150
  'panels.market.failed': 'Failed: {reason}',
144
151
  'panels.market.needEnv': 'Set {env} in the terminal that started the workbench first',
145
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',
146
155
  'panels.market.localMark': 'local',
147
- 'panels.market.localHint': 'This is your machine’s own copy (not taken from the registry).',
148
156
  'panels.market.noSource': 'This module declares no install method — install it yourself',
149
157
  'panels.market.badSource': 'The install method is incomplete — install it yourself',
150
158
  'panels.market.empty': 'No modules available',
151
159
  'panels.market.sectionPlugins': 'Installed opencli plugins',
152
160
  'panels.market.moduleOutdated': 'update available',
153
161
  'panels.market.moduleRefused': 'This module does not match this workbench, so it cannot be used for now.',
154
- 'panels.market.moduleRefusedDetail': 'Why it cannot be used: {reason}',
155
162
  'panels.market.moduleRestartHint': 'restart dsh once to bring it up',
156
163
  'panels.market.pendingRestart': 'restart required',
157
164
  'panels.market.workbenchName': 'Workbench',
158
- 'panels.market.workbenchLocal': 'This is the copy from your working repository; it does not come from the registry.',
159
- 'panels.market.pluginKeptInUse': 'Files kept for now: {names} still uses it.',
160
- '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.',
161
- 'panels.market.pluginKeptHeld': 'Files kept: this one is yours, and a module letting go will not remove it.',
162
- 'panels.market.pluginKeptUnnamed': 'Files kept for now: this one cannot be identified as a plugin, so it is unclear who needs it.',
163
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.',
164
166
  'panels.market.restartNeeded': 'The new version is installed — restart once to pick it up.',
165
167
  'panels.market.foot': 'After installing, enable it in the panel page of that project.',
@@ -259,6 +261,142 @@ export const en = {
259
261
  'panels.market.add.close': 'Close',
260
262
  'panels.market.add.retry': 'Retry',
261
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}',
262
400
  'panels.market.add.approveBuilds': 'Allow these scripts and retry',
263
401
  'panels.market.add.approveHint': 'These packages want to run install scripts: {packages}',
264
402
  'panels.market.add.doneApplied': 'Installed and live.',
@@ -314,7 +452,7 @@ export const en = {
314
452
  'blocker.login.titleGeneric': 'Sign-in required',
315
453
  'blocker.login.hint': 'The workbench uses your browser session; sign in once and you are done.',
316
454
  'blocker.login.go': 'Go sign in',
317
- '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.',
318
456
  'blocker.forbidden.title': 'No access to {platform}',
319
457
  'blocker.forbidden.titleGeneric': 'No access',
320
458
  'blocker.forbidden.hint': 'You are signed in, but this project/repo is not permitted for your account.',
@@ -328,26 +466,29 @@ export const en = {
328
466
  'panels.empty': 'No modules on the panel yet',
329
467
  'panels.emptyHint': 'You can also just tell the agent: “add a module to the panel”.',
330
468
  'env.title': 'Preparing the workbench',
331
- 'env.checking': 'Checking the runtime environment…',
332
- '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…',
333
471
  'env.failed': 'One step away',
334
472
  'env.elapsed': 'Waiting {seconds}s',
335
473
  'env.stepFailed.install': 'install failed',
336
474
  'env.stepFailed.path': 'installed but not found',
337
475
  'env.stepFailed.shell': 'no shell channel',
476
+ 'env.toolchain.ok': 'Looks good',
477
+ 'env.toolchain.warn': 'Almost ready',
478
+ 'env.opencli.ok': 'Ready',
338
479
  'env.bridge.ok': 'Connected',
339
- 'env.bridge.short': 'Not connected',
340
- '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.',
341
- '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.',
342
483
  'env.bridge.daemon': 'The background service is not running. It usually starts by itself \u2014 run the command below in your terminal first.',
343
- '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).',
344
485
  'env.bridge.extensionLink': 'Get the extension in the Chrome Web Store',
345
- 'env.bridge.profile': 'Several browser profiles are connected but none is the default: list them (command below), then pick one.',
346
- 'env.bridge.stale': 'The default browser profile is stale (it names an extension instance that no longer exists): pick one again.',
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.',
347
488
  'env.bridge.unknown': 'Could not tell what went wrong. Expand the raw output and follow the steps in it.',
348
489
  'env.fix.title': 'How to fix it',
349
- '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.',
350
- 'env.fix.whyPath': 'opencli is installed, but this environment cannot find it \u2014 usually a PATH or shell-session issue.',
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.',
351
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.',
352
493
  'env.fix.step': 'Run this in a terminal, then hit Retry:',
353
494
  'env.fix.stepPath': 'Open a new terminal window (or make sure npm\u2019s global bin directory is on PATH), then hit Retry.',
@@ -356,32 +497,47 @@ export const en = {
356
497
  'env.fix.network': 'Network unreachable: check your network or proxy, then retry.',
357
498
  'env.fix.details': 'Details (for troubleshooting)',
358
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.',
359
505
  'env.bridge.continue': 'Enter the workbench anyway',
360
506
  'env.diy.ok': 'Available',
361
- 'env.diy.short': 'Cannot load',
362
- 'env.diy.hold': 'DIY mode cannot load \u2014 upgrade dsh, then hit Retry; or enter the workbench first.',
363
- 'env.diy.why': 'The dsh on this machine is older than the one this workbench was verified against, so DIY mode cannot load. Panels and everything else are unaffected. Upgrade dsh and restart.',
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.',
364
510
  'env.diy.rows': 'This dsh is missing these items: {rows}',
365
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.',
366
512
  'env.diy.step': 'Upgrade dsh, then restart the workbench:',
367
513
  'env.diy.continue': 'Enter the workbench anyway',
368
514
  'env.copyCommand': 'Copy command',
369
515
  'env.copied': 'Copied',
370
- 'env.step.opencli': 'Checking the workbench opencli',
371
- 'env.step.codingPlugin': 'Checking the coding plugin',
372
- 'env.step.bridge': 'Checking the browser bridge',
373
- 'env.step.diy': 'Checking DIY mode',
374
- 'env.step.warm': 'Warming up site sessions',
375
- 'env.warm.done': '{n} site(s) warmed up',
376
- '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',
377
523
  'env.unit.failed': 'This module cannot start',
378
524
  'env.unit.failedHint': 'It failed while assembling itself; other modules are unaffected.',
379
- 'env.unit.missingPlugin': 'This module is not ready yet',
380
- 'env.unit.missingCommandsHint': 'Updating it should fix this.',
381
525
  'env.unit.unchecked': 'Cannot check: no shell channel',
382
526
  'env.unit.uncheckedHint': 'The module is not the problem \u2014 the shell channel is unavailable. Restart the workbench.',
383
- '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.',
384
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.',
385
541
  'rightbar.label': 'Data panels',
386
542
  'rightbar.expand': 'Expand the data panel',
387
543
  'rightbar.collapse': 'Collapse the data panel',
@@ -393,11 +549,16 @@ export const en = {
393
549
  'rightbar.updatedAt': 'updated {time}',
394
550
  'rightbar.noProject': 'The current session has no workspace',
395
551
  'rightbar.openPlatform': 'Open on the platform',
396
- 'coding.notARepo.title': 'This workspace is not a Coding repository',
397
552
  'error.unknown': 'Something went wrong',
398
553
  'board.title': 'Workbench panel',
399
554
  'panel.conversation': 'Conversation',
400
555
  'panels.label': 'Global panels',
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.',
401
562
  'workbenchSettings.nav': 'Workbench settings',
402
563
  'workbenchSettings.lead': 'Settings the workbench itself owns live here.',
403
564
  'sidebarEdition.nav': 'Session list',
@@ -410,39 +571,6 @@ export const en = {
410
571
  'sidebarEdition.reloadRequired': 'Saved. Reload the page to apply — no workbench restart needed.',
411
572
  'sidebarEdition.reload': 'Reload page',
412
573
  'sidebarEdition.failed': 'That choice did not save; try again.',
413
- 'configSync.nav': 'Config sync',
414
- 'configSync.lead': 'Bring over the rows another profile configures explicitly — pick any profile as the source.',
415
- 'configSync.source': 'Source',
416
- 'configSync.sourceBroken': 'its config is unreadable',
417
- 'configSync.sourceRows': '{name}: {count} rows are new or different for the workbench',
418
- 'configSync.sourceDead': 'unreadable',
419
- 'configSync.refresh': 'Read again',
420
- 'configSync.loading': 'Reading the source config…',
421
- 'configSync.readHint': 'Pick another source, or read again.',
422
- 'configSync.tag.new': 'New',
423
- 'configSync.tag.differs': 'Differs',
424
- 'configSync.conflictNote': 'Applying replaces this workbench copy with the source',
425
- 'configSync.code.lang': 'yaml',
426
- 'configSync.code.copy': 'Copy',
427
- 'configSync.code.copied': 'Copied',
428
- 'configSync.code.wrap': 'Wrap lines',
429
- 'configSync.code.unwrap': 'No wrap',
430
- 'configSync.code.collapse': 'Collapse',
431
- 'configSync.code.collapseAria': 'Collapse this row',
432
- 'configSync.code.expandAria': 'Expand the diff ({count} more lines)',
433
- 'configSync.code.expand': 'Show {count} more lines',
434
- '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',
435
- 'configSync.apply': 'Sync {count} selected items',
436
- 'configSync.applyNone': 'Choose what to sync',
437
- 'configSync.applying': 'Writing…',
438
- 'configSync.applied': 'Written to the workbench config · applied',
439
- 'configSync.appliedIds': 'Written this time: {ids}',
440
- 'configSync.skippedIds': 'Left alone (already here): {ids}',
441
- 'configSync.nothing': 'Nothing to sync',
442
- 'configSync.unreadable': 'Cannot read {path}: {reason}',
443
- 'configSync.noSource': 'This machine has no other profile to sync from',
444
- 'configSync.emptyProviders': 'The workbench has no model provider yet — sync the model-provider rows from some profile, or configure one under Models.',
445
- 'configSync.failed': 'The sync did not go through; try again.',
446
574
  'debug.workspace': 'this workspace',
447
575
  'debug.status': 'Debugging “{title}”',
448
576
  'debug.status.trouble': 'Debugging needs your attention ({title})',
@@ -473,4 +601,29 @@ export const en = {
473
601
  'approval.record.noSwitch': 'it will not switch you back (the leftbar footer shows the state)',
474
602
  'approval.longTask.what': 'Stops',
475
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,
476
629
  };