@dsh-workbench/shared 1.0.0-beta.0 → 1.0.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 (82) hide show
  1. package/dist/components/FormNodes.js +5 -1
  2. package/dist/components/FormRows.css +1 -0
  3. package/dist/components/FormRows.d.ts +4 -2
  4. package/dist/components/FormRows.js +5 -4
  5. package/dist/config/constants.d.ts +0 -2
  6. package/dist/config/constants.js +0 -5
  7. package/dist/contract/command.d.ts +22 -0
  8. package/dist/contract/command.js +1 -0
  9. package/dist/contract/data.d.ts +2 -1
  10. package/dist/contract/extension.d.ts +14 -0
  11. package/dist/contract/extension.js +1 -0
  12. package/dist/contract/git.d.ts +38 -0
  13. package/dist/contract/git.js +1 -0
  14. package/dist/contract/lib.d.ts +4 -0
  15. package/dist/contract/lib.js +1 -0
  16. package/dist/contract/protocol/config-sync.d.ts +1 -21
  17. package/dist/contract/protocol/market-index.d.ts +1 -0
  18. package/dist/contract/protocol/profile-create.d.ts +0 -3
  19. package/dist/host/adapter-set.js +1 -0
  20. package/dist/host/adapters.d.ts +6 -0
  21. package/dist/host/extension.d.ts +7 -0
  22. package/dist/host/extension.js +39 -0
  23. package/dist/host/git.d.ts +2 -52
  24. package/dist/host/git.js +1 -64
  25. package/dist/host/http.js +1 -1
  26. package/dist/host/market-index.js +3 -44
  27. package/dist/host/port-types.d.ts +1 -0
  28. package/dist/host/release-packages.generated.d.ts +1 -0
  29. package/dist/host/release-packages.generated.js +10 -0
  30. package/dist/host/tool-kit.d.ts +0 -6
  31. package/dist/host/tool-kit.js +0 -22
  32. package/dist/host/unit-face.d.ts +7 -0
  33. package/dist/host/version-range.js +7 -67
  34. package/dist/host/version.d.ts +3 -2
  35. package/dist/host/version.js +17 -19
  36. package/dist/host.d.ts +6 -0
  37. package/dist/host.js +6 -0
  38. package/dist/i18n/en.js +3 -1
  39. package/dist/i18n/index.d.ts +9 -21
  40. package/dist/i18n/settings.d.ts +5 -19
  41. package/dist/i18n/settings.js +7 -35
  42. package/dist/i18n/zh.d.ts +8 -20
  43. package/dist/i18n/zh.js +3 -1
  44. package/dist/index.d.ts +4 -0
  45. package/dist/index.js +4 -0
  46. package/dist/lib/version.d.ts +4 -0
  47. package/dist/lib/version.js +21 -0
  48. package/dist/testing/git.d.ts +3 -0
  49. package/dist/testing/git.js +36 -0
  50. package/package.json +6 -4
  51. package/src/components/Form.test.tsx +6 -0
  52. package/src/components/FormNodes.tsx +6 -1
  53. package/src/components/FormRows.css +1 -0
  54. package/src/components/FormRows.test.tsx +30 -0
  55. package/src/components/FormRows.tsx +9 -5
  56. package/src/config/constants.ts +0 -6
  57. package/src/contract/command.ts +25 -0
  58. package/src/contract/data.ts +2 -1
  59. package/src/contract/extension.ts +20 -0
  60. package/src/contract/git.ts +20 -0
  61. package/src/contract/lib.ts +5 -0
  62. package/src/contract/protocol/config-sync.ts +1 -24
  63. package/src/contract/protocol/market-index.ts +1 -0
  64. package/src/contract/protocol/profile-create.ts +0 -3
  65. package/src/host/adapter-set.ts +1 -0
  66. package/src/host/adapters.ts +6 -0
  67. package/src/host/extension.test.ts +55 -0
  68. package/src/host/extension.ts +57 -0
  69. package/src/host/git.ts +6 -92
  70. package/src/host/http.ts +1 -1
  71. package/src/host/market-index.ts +3 -33
  72. package/src/host/port-types.ts +1 -0
  73. package/src/host/release-packages.generated.ts +10 -0
  74. package/src/host/tool-kit.ts +0 -35
  75. package/src/host/unit-face.ts +7 -0
  76. package/src/host/version-range.ts +6 -64
  77. package/src/host/version.ts +18 -18
  78. package/src/host.ts +6 -0
  79. package/src/i18n/en.ts +3 -1
  80. package/src/i18n/settings.ts +7 -35
  81. package/src/i18n/zh.ts +3 -1
  82. package/src/index.ts +4 -0
@@ -1,73 +1,13 @@
1
- import { compareVersions } from './version.js';
2
- function readable(version) {
3
- return compareVersions(version, '0.0.0') !== undefined;
4
- }
5
- function segmentsOf(version) {
6
- if (!readable(version))
7
- return undefined;
8
- return version.split('.').map((part) => Number.parseInt(part, 10));
9
- }
10
- function caretUpper(base) {
11
- const [major = 0, minor = 0, patch = 0] = base;
12
- if (major > 0)
13
- return `${major + 1}.0.0`;
14
- return minor > 0 ? `0.${minor + 1}.0` : `0.0.${patch + 1}`;
15
- }
16
- function tildeUpper(base) {
17
- const [major = 0, minor = 0] = base;
18
- return `${major}.${minor + 1}.0`;
19
- }
20
- function comparator(token, version) {
21
- const match = /^(>=|<=|>|<|=|\^|~)?\s*(.+)$/.exec(token.trim());
22
- if (match === null)
23
- return undefined;
24
- const [, operator = '', raw = ''] = match;
25
- const base = segmentsOf(raw.trim());
26
- if (base === undefined)
27
- return undefined;
28
- const at = (other) => compareVersions(version, other);
29
- switch (operator) {
30
- case '^':
31
- return (at(raw) ?? -1) >= 0 && (at(caretUpper(base)) ?? 1) < 0;
32
- case '~':
33
- return (at(raw) ?? -1) >= 0 && (at(tildeUpper(base)) ?? 1) < 0;
34
- default:
35
- break;
36
- }
37
- const compared = at(raw.trim());
38
- if (compared === undefined)
39
- return undefined;
40
- switch (operator) {
41
- case '>=':
42
- return compared >= 0;
43
- case '<=':
44
- return compared <= 0;
45
- case '>':
46
- return compared > 0;
47
- case '<':
48
- return compared < 0;
49
- case '=':
50
- case '':
51
- return compared === 0;
52
- default:
53
- return undefined;
54
- }
55
- }
1
+ import semver from 'semver';
56
2
  export function checkVersionRange(contract, version) {
57
3
  const spec = contract?.trim() ?? '';
58
4
  if (spec === '')
59
5
  return 'satisfied';
60
- if (!readable(version))
6
+ const range = semver.validRange(spec);
7
+ if (range === null)
61
8
  return 'malformed';
62
- const tokens = spec.split(/\s+/).filter((token) => token !== '');
63
- if (tokens.length === 0)
64
- return 'satisfied';
65
- for (const token of tokens) {
66
- const verdict = comparator(token, version);
67
- if (verdict === undefined)
68
- return 'malformed';
69
- if (!verdict)
70
- return 'unsatisfied';
71
- }
72
- return 'satisfied';
9
+ const parsed = semver.coerce(version);
10
+ if (parsed === null)
11
+ return 'malformed';
12
+ return semver.satisfies(parsed, range) ? 'satisfied' : 'unsatisfied';
73
13
  }
@@ -1,3 +1,4 @@
1
- export declare function runningVersionOf(moduleUrl: string): string | undefined;
2
- export declare function compareVersions(a: string, b: string): number | undefined;
1
+ export declare function compareVersions(left: string, right: string): number | undefined;
2
+ export declare function isValidVersion(value: string): boolean;
3
3
  export declare function isNewerVersion(latest: string, installed: string): boolean;
4
+ export declare function runningVersionOf(moduleUrl: string): string | undefined;
@@ -1,25 +1,14 @@
1
1
  import { readFileSync } from 'node:fs';
2
- export function runningVersionOf(moduleUrl) {
3
- try {
4
- const read = JSON.parse(readFileSync(new URL('../../package.json', moduleUrl), 'utf8'));
5
- return typeof read.version === 'string' && read.version !== '' ? read.version : undefined;
6
- }
7
- catch {
2
+ import semver from 'semver';
3
+ export function compareVersions(left, right) {
4
+ const a = semver.valid(left.trim());
5
+ const b = semver.valid(right.trim());
6
+ if (a === null || b === null)
8
7
  return undefined;
9
- }
8
+ return semver.compare(a, b);
10
9
  }
11
- export function compareVersions(a, b) {
12
- const na = a.split('.').map((part) => Number.parseInt(part, 10));
13
- const nb = b.split('.').map((part) => Number.parseInt(part, 10));
14
- if (na.some(Number.isNaN) || nb.some(Number.isNaN))
15
- return undefined;
16
- for (let index = 0; index < Math.max(na.length, nb.length); index += 1) {
17
- const left = na[index] ?? 0;
18
- const right = nb[index] ?? 0;
19
- if (left !== right)
20
- return left > right ? 1 : -1;
21
- }
22
- return 0;
10
+ export function isValidVersion(value) {
11
+ return semver.valid(value.trim()) !== null;
23
12
  }
24
13
  export function isNewerVersion(latest, installed) {
25
14
  if (latest === installed)
@@ -27,3 +16,12 @@ export function isNewerVersion(latest, installed) {
27
16
  const compared = compareVersions(latest, installed);
28
17
  return compared === undefined ? true : compared > 0;
29
18
  }
19
+ export function runningVersionOf(moduleUrl) {
20
+ try {
21
+ const read = JSON.parse(readFileSync(new URL('../../package.json', moduleUrl), 'utf8'));
22
+ return typeof read.version === 'string' && read.version !== '' ? read.version : undefined;
23
+ }
24
+ catch {
25
+ return undefined;
26
+ }
27
+ }
package/dist/host.d.ts CHANGED
@@ -3,6 +3,10 @@ export * from './api/context-ref.js';
3
3
  export * from './contract/unit.js';
4
4
  export * from './contract/needs.js';
5
5
  export * from './contract/data.js';
6
+ export * from './contract/extension.js';
7
+ export * from './contract/lib.js';
8
+ export * from './contract/git.js';
9
+ export * from './contract/command.js';
6
10
  export * from './contract/unit-board.js';
7
11
  export * from './contract/workbench-contract.js';
8
12
  export * from './contract/blocker.js';
@@ -41,6 +45,7 @@ export * from './host/provision.js';
41
45
  export * from './host/channel-plugin.js';
42
46
  export * from './host/recipe.js';
43
47
  export * from './host/recipe-rules.js';
48
+ export * from './host/release-packages.generated.js';
44
49
  export * from './contract/unit-capability.js';
45
50
  export * from './contract/plugin-source.js';
46
51
  export * from './contract/cli.js';
@@ -63,6 +68,7 @@ export * from './host/patch.js';
63
68
  export * from './host/adapters.js';
64
69
  export * from './host/adapter-set.js';
65
70
  export * from './host/needs.js';
71
+ export * from './host/extension.js';
66
72
  export * from './host/port-types.js';
67
73
  export * from './host/version-range.js';
68
74
  export * from './host/market-index.js';
package/dist/host.js CHANGED
@@ -3,6 +3,10 @@ export * from './api/context-ref.js';
3
3
  export * from './contract/unit.js';
4
4
  export * from './contract/needs.js';
5
5
  export * from './contract/data.js';
6
+ export * from './contract/extension.js';
7
+ export * from './contract/lib.js';
8
+ export * from './contract/git.js';
9
+ export * from './contract/command.js';
6
10
  export * from './contract/unit-board.js';
7
11
  export * from './contract/workbench-contract.js';
8
12
  export * from './contract/blocker.js';
@@ -41,6 +45,7 @@ export * from './host/provision.js';
41
45
  export * from './host/channel-plugin.js';
42
46
  export * from './host/recipe.js';
43
47
  export * from './host/recipe-rules.js';
48
+ export * from './host/release-packages.generated.js';
44
49
  export * from './contract/unit-capability.js';
45
50
  export * from './contract/plugin-source.js';
46
51
  export * from './contract/cli.js';
@@ -63,6 +68,7 @@ export * from './host/patch.js';
63
68
  export * from './host/adapters.js';
64
69
  export * from './host/adapter-set.js';
65
70
  export * from './host/needs.js';
71
+ export * from './host/extension.js';
66
72
  export * from './host/port-types.js';
67
73
  export * from './host/version-range.js';
68
74
  export * from './host/market-index.js';
package/dist/i18n/en.js CHANGED
@@ -267,6 +267,7 @@ export const en = {
267
267
  'panels.discover.loading': 'Reading the index',
268
268
  'panels.discover.lead': 'Browse modules from an index source; install and go.',
269
269
  'panels.discover.addSource': 'Add',
270
+ 'panels.discover.addingSource': 'Adding…',
270
271
  'panels.discover.addFirstSource': 'Add index source',
271
272
  'panels.discover.removeSource': 'Remove',
272
273
  'panels.discover.removeSourceNamed': 'Remove {url}',
@@ -367,7 +368,6 @@ export const en = {
367
368
  'panels.discover.tabOverview': 'Overview',
368
369
  'panels.discover.tabReadme': 'Readme',
369
370
  'panels.discover.tabChangelog': 'Changelog',
370
- 'panels.discover.docTitle': '{kind} for {version}',
371
371
  'panels.discover.docReadme': 'readme',
372
372
  'panels.discover.docChangelog': 'changelog',
373
373
  'panels.discover.docLoading': 'Reading…',
@@ -604,6 +604,8 @@ export const en = {
604
604
  'approval.publish.module': 'Module',
605
605
  'approval.publish.target': 'Target',
606
606
  'approval.publish.version': 'Version',
607
+ 'approval.publish.author': 'Author',
608
+ 'approval.publish.authorMissing': 'unsigned (commits use the local git identity)',
607
609
  'approval.publish.registry': 'Registry',
608
610
  'approval.publish.repo': 'Repository',
609
611
  'approval.publish.branch': 'Branch',
@@ -277,6 +277,7 @@ export declare const dictionaries: {
277
277
  readonly 'panels.discover.loading': "正在读取索引";
278
278
  readonly 'panels.discover.lead': "从索引源浏览模块;装上就能用。";
279
279
  readonly 'panels.discover.addSource': "添加";
280
+ readonly 'panels.discover.addingSource': "正在添加…";
280
281
  readonly 'panels.discover.addFirstSource': "添加索引源";
281
282
  readonly 'panels.discover.removeSource': "移除";
282
283
  readonly 'panels.discover.removeSourceNamed': "移除 {url}";
@@ -377,7 +378,6 @@ export declare const dictionaries: {
377
378
  readonly 'panels.discover.tabOverview': "概览";
378
379
  readonly 'panels.discover.tabReadme': "说明";
379
380
  readonly 'panels.discover.tabChangelog': "更新日志";
380
- readonly 'panels.discover.docTitle': "{version} 的{kind}";
381
381
  readonly 'panels.discover.docReadme': "说明";
382
382
  readonly 'panels.discover.docChangelog': "更新日志";
383
383
  readonly 'panels.discover.docLoading': "正在读取…";
@@ -614,6 +614,8 @@ export declare const dictionaries: {
614
614
  readonly 'approval.publish.module': "模块";
615
615
  readonly 'approval.publish.target': "目标";
616
616
  readonly 'approval.publish.version': "版本";
617
+ readonly 'approval.publish.author': "作者";
618
+ readonly 'approval.publish.authorMissing': "未署名(提交用本机 git 身份)";
617
619
  readonly 'approval.publish.registry': "源";
618
620
  readonly 'approval.publish.repo': "仓库";
619
621
  readonly 'approval.publish.branch': "分支";
@@ -636,17 +638,13 @@ export declare const dictionaries: {
636
638
  readonly 'markdown.copied': "已复制";
637
639
  readonly 'markdown.footnotes': "脚注";
638
640
  readonly 'profileCreate.nav': "新建工作台";
639
- readonly 'profileCreate.lead': "以已有 profile 为模板,建一个独立的新工作台。建好后关掉当前实例,再启动新的。";
641
+ readonly 'profileCreate.lead': "以已有 profile 为模板,建一个独立的新工作台。会话 / 项目 / 附件跟 web 共用,这里只复制设置。建好后关掉当前实例,再启动新的。";
640
642
  readonly 'profileCreate.name': "新工作台的名字";
641
643
  readonly 'profileCreate.nameHint': "例如 wb2(只用字母、数字、点、下划线或短横线)";
642
644
  readonly 'profileCreate.source': "来源 profile";
643
645
  readonly 'profileCreate.current': "当前";
644
646
  readonly 'profileCreate.copy': "从来源复制";
645
647
  readonly 'profileCreate.settings': "设置(模型、主题等)";
646
- readonly 'profileCreate.plugins': "本地插件文件";
647
- readonly 'profileCreate.pluginsRequired': "设置里引用了,不能单独去掉";
648
- readonly 'profileCreate.projects': "项目列表";
649
- readonly 'profileCreate.sessions': "会话记录";
650
648
  readonly 'profileCreate.create': "创建";
651
649
  readonly 'profileCreate.creating': "正在创建…";
652
650
  readonly 'profileCreate.created': "已建好 {profile}。";
@@ -657,25 +655,16 @@ export declare const dictionaries: {
657
655
  readonly 'profileCreate.noProfiles': "这台机器上还没有可用的来源 profile。";
658
656
  readonly 'profileCreate.failed': "创建没有成功,看看下面的输出。";
659
657
  readonly 'configSync.nav': "配置同步";
660
- readonly 'configSync.lead': "只搬设置行和它们引用的本地文件;不搬项目列表和会话记录 —— 要整套新建工作台用「新建工作台」。";
658
+ readonly 'configSync.lead': "只同步「改已有插件的设置」的行;挂新插件的行不同步。会话 / 项目 / 附件本来就共用,不用同步。要整套新建工作台用「新建工作台」。";
661
659
  readonly 'configSync.source': "来源";
662
660
  readonly 'configSync.sourceBroken': "读不到它的配置";
663
- readonly 'configSync.sourceRows': "{name} 这份里你有 {count} 行可搬";
661
+ readonly 'configSync.sourceRows': "{name} 这份里你有 {count} 行可同步";
664
662
  readonly 'configSync.sourceDead': "读不到";
665
663
  readonly 'configSync.refresh': "重新读一遍";
666
664
  readonly 'configSync.loading': "正在读来源的配置…";
667
665
  readonly 'configSync.readHint': "换个来源,或再读一遍。";
668
666
  readonly 'configSync.tag.new': "新增";
669
667
  readonly 'configSync.tag.differs': "差异";
670
- readonly 'configSync.tag.asset': "缺文件";
671
- readonly 'configSync.tag.fileDiffers': "文件不同";
672
- readonly 'configSync.assetOnly': "设置内容一样,只差文件。";
673
- readonly 'configSync.assetMissingOne': "还要 1 个文件:{path}";
674
- readonly 'configSync.assetMissingMany': "还要 {count} 个文件:{path}";
675
- readonly 'configSync.assetDiffers': "文件不一样:{path}";
676
- readonly 'configSync.assetDiffersMany': "文件有差异:{path}({count} 个)";
677
- readonly 'configSync.assetExternal': "这个文件搬不过来:{path}({reason})";
678
- readonly 'configSync.assetOverwrite': "覆盖工作台里的同名文件";
679
668
  readonly 'configSync.conflictNote': "应用后工作台这份会被来源覆盖";
680
669
  readonly 'configSync.code.lang': "yaml";
681
670
  readonly 'configSync.code.copy': "复制";
@@ -686,22 +675,21 @@ export declare const dictionaries: {
686
675
  readonly 'configSync.code.collapseAria': "收起这一行的配置";
687
676
  readonly 'configSync.code.expandAria': "展开差异(还有 {count} 行)";
688
677
  readonly 'configSync.code.expand': "展开剩余 {count} 行";
689
- readonly 'configSync.missing': "{pkg} 还没装:这一行搬过来也不会生效 —— 先在模块市场里装它";
678
+ readonly 'configSync.missing': "{pkg} 还没装:这一行同步过来也不会生效 —— 先在模块市场里装它";
690
679
  readonly 'configSync.apply': "同步选中的 {count} 项";
691
680
  readonly 'configSync.applyNone': "请选择同步内容";
692
681
  readonly 'configSync.applying': "正在写入…";
693
682
  readonly 'configSync.applied': "已写入并检查通过";
694
683
  readonly 'configSync.appliedUnverified': "已写入;重启后检查是否生效";
695
- readonly 'configSync.appliedFiles': "复制了 {count} 个文件";
696
684
  readonly 'configSync.appliedIds': "这次写进去:{ids}";
697
685
  readonly 'configSync.skippedIds': "这几行工作台自己已有,没动:{ids}";
698
686
  readonly 'configSync.nothing': "没有需要同步的内容";
699
687
  readonly 'configSync.unreadable': "读不到 {path}:{reason}";
700
688
  readonly 'configSync.noSource': "这台机器上只有工作台这一个 profile,没有可同步的来源";
701
- readonly 'configSync.emptyProviders': "工作台还没有任何模型供应商 —— 去「配置同步」从某个 profile 把模型供应商那几行搬过来,或自己去「模型」里配。";
689
+ readonly 'configSync.emptyProviders': "工作台还没有任何模型供应商 —— 去「配置同步」从某个 profile 把模型供应商那几行同步过来,或自己去「模型」里配。";
702
690
  readonly 'configSync.failed': "同步没成功,再试一次。";
703
691
  };
704
- en: Record<"time.now" | "time.ago" | "time.minutes" | "time.hours" | "time.days" | "blocker.retry" | "blocker.copy" | "blocker.unknown.title" | "blocker.login.go" | "blocker.login.titleGeneric" | "blocker.login.title" | "blocker.login.manual" | "blocker.login.hint" | "blocker.forbidden.open" | "blocker.forbidden.titleGeneric" | "blocker.forbidden.title" | "blocker.forbidden.hint" | "blocker.timeout.hint" | "blocker.exec.hint" | "blocker.fix.install" | "blocker.market.open" | "env.unit.failed" | "env.unit.failedHint" | "env.unit.unsupported" | "env.unit.unsupportedHint" | "env.unit.degraded" | "env.unit.degradedHint" | "env.unit.unchecked" | "env.unit.uncheckedHint" | "profileCreate.nav" | "profileCreate.lead" | "profileCreate.name" | "profileCreate.nameHint" | "profileCreate.source" | "profileCreate.current" | "profileCreate.copy" | "profileCreate.settings" | "profileCreate.plugins" | "profileCreate.pluginsRequired" | "profileCreate.projects" | "profileCreate.sessions" | "profileCreate.create" | "profileCreate.creating" | "profileCreate.created" | "profileCreate.command" | "profileCreate.readFailed" | "profileCreate.retry" | "profileCreate.reading" | "profileCreate.noProfiles" | "profileCreate.failed" | "configSync.nav" | "configSync.lead" | "configSync.source" | "configSync.sourceBroken" | "configSync.sourceRows" | "configSync.sourceDead" | "configSync.refresh" | "configSync.loading" | "configSync.readHint" | "configSync.tag.new" | "configSync.tag.differs" | "configSync.tag.asset" | "configSync.tag.fileDiffers" | "configSync.assetOnly" | "configSync.assetMissingOne" | "configSync.assetMissingMany" | "configSync.assetDiffers" | "configSync.assetDiffersMany" | "configSync.assetExternal" | "configSync.assetOverwrite" | "configSync.conflictNote" | "configSync.code.lang" | "configSync.code.copy" | "configSync.code.copied" | "configSync.code.wrap" | "configSync.code.unwrap" | "configSync.code.collapse" | "configSync.code.collapseAria" | "configSync.code.expandAria" | "configSync.code.expand" | "configSync.missing" | "configSync.apply" | "configSync.applyNone" | "configSync.applying" | "configSync.applied" | "configSync.appliedUnverified" | "configSync.appliedFiles" | "configSync.appliedIds" | "configSync.skippedIds" | "configSync.nothing" | "configSync.unreadable" | "configSync.noSource" | "configSync.emptyProviders" | "configSync.failed" | "env.need.bin.missing" | "env.need.bin.hint" | "env.need.extension.missing" | "env.need.extension.outdated" | "env.need.extension.hint" | "env.need.lib.missing" | "env.need.lib.outdated" | "env.need.lib.unsatisfied" | "env.need.lib.hint" | "env.need.env.missing" | "env.need.env.hint" | "brand.name" | "toggle.open" | "toggle.collapse" | "project.label" | "workspace.section" | "project.none" | "project.empty" | "project.add" | "project.add.busy" | "project.add.failed" | "project.search.label" | "project.search.placeholder" | "project.search.empty" | "project.group.workspaces" | "project.group.defaultWorkspace" | "project.group.workshop" | "project.rename.row" | "project.rename.current" | "project.rename.title" | "project.rename.description" | "project.rename.field" | "project.rename.placeholder" | "project.rename.hint" | "project.rename.save" | "project.rename.saving" | "project.rename.cancel" | "project.rename.failed" | "session.new" | "session.new.label" | "session.empty" | "session.noProject" | "session.list.label" | "session.copy" | "session.pinned" | "session.actions" | "status.idle" | "status.running" | "status.longTask" | "status.waitingApproval" | "status.planReview" | "status.waitingAnswer" | "status.compact.approval" | "status.compact.planReview" | "status.compact.answer" | "status.completed" | "status.subagentsRunning.one" | "status.subagentsRunning.other" | "project.attention.warning.one" | "project.attention.warning.other" | "project.attention.running.one" | "project.attention.running.other" | "project.attention.longTask.one" | "project.attention.longTask.other" | "project.attention.done.one" | "project.attention.done.other" | "project.attention.state.warning" | "project.attention.state.running" | "project.attention.state.done" | "hover.copied" | "time.short.minutes" | "time.short.hours" | "time.short.days" | "time.short.months" | "time.short.years" | "panels.title" | "panels.groupBoardless" | "panels.groupPlugins" | "panels.market.defaultHint" | "panels.market.defaultLabel" | "panels.market.defaultLocked" | "panels.followAll" | "panels.followAllConfirmTitle" | "panels.followAllConfirmDetail" | "panels.followAllConfirmAck" | "panels.followAllConfirmYes" | "panels.followAllConfirmNo" | "panels.enabled" | "panels.disabled" | "panels.choose" | "panels.buildModule" | "panels.failed" | "panels.dragHint" | "panels.unknownStep" | "panels.labelWithHint" | "panels.hintJoin" | "panels.dep.failed" | "panels.dep.unchecked" | "panels.dep.missing" | "panels.dep.outdated" | "panels.dep.degraded" | "panels.dep.unsupported" | "panels.tab.modules" | "panels.tab.market" | "panels.browseMarket" | "panels.noneInstalled" | "panels.noneInstalledHint" | "panels.market.installed" | "panels.market.notActive" | "panels.market.notUsable" | "panels.market.broken" | "panels.market.hasNew" | "panels.market.hasProblem" | "panels.market.missing" | "panels.market.unchecked" | "panels.market.uncheckedHint" | "panels.market.checking" | "panels.market.sectionInstalled" | "panels.market.sectionPending" | "panels.market.sectionShared" | "panels.market.sharedUsedBy" | "panels.market.listSeparator" | "panels.market.sharedMissing" | "panels.market.sharedOutdated" | "panels.market.sharedUnsatisfied" | "panels.market.sharedOk" | "panels.market.versionArrow" | "panels.market.lead" | "panels.market.install" | "panels.market.update" | "panels.market.swapSlow" | "panels.market.removeSlow" | "panels.market.updateNoChange" | "panels.market.updateUnknownVersion" | "panels.market.updateGone" | "panels.market.updateRestored" | "panels.market.updateBehind" | "panels.market.selfUpdateFailed" | "panels.market.selfUpdateUnknown" | "panels.market.selfUpdateRolledBack" | "panels.market.uninstall" | "panels.market.uninstallLabel" | "panels.market.installing" | "panels.market.updating" | "panels.market.uninstalling" | "panels.market.confirmUninstallTitle" | "panels.market.confirmUninstallDetail" | "panels.market.confirmUninstallAck" | "panels.market.confirmYes" | "panels.market.confirmNo" | "panels.market.failed" | "panels.market.needEnv" | "panels.market.needCommands" | "panels.market.needBinary" | "panels.market.needLib" | "panels.market.localMark" | "panels.market.noSource" | "panels.market.badSource" | "panels.market.empty" | "panels.market.sectionPlugins" | "panels.market.moduleOutdated" | "panels.market.moduleRefused" | "panels.market.moduleRestartHint" | "panels.market.pendingRestart" | "panels.market.workbenchName" | "panels.market.pluginBroken" | "panels.market.restartNeeded" | "panels.market.foot" | "panels.market.recheck" | "panels.market.checkUpdates" | "panels.market.checkedAt" | "panels.market.justNow" | "panels.market.minutesAgo" | "panels.market.hoursAgo" | "panels.market.add.description" | "panels.market.add.specPlaceholder" | "panels.market.add.guideToggle" | "panels.market.add.guideHide" | "panels.market.add.guideIdTitle" | "panels.market.add.guideIdExample" | "panels.market.add.guideIdHint" | "panels.market.add.guideGitTitle" | "panels.market.add.guideGitExample" | "panels.market.add.guideGitHint" | "panels.market.add.guidePathTitle" | "panels.market.add.guidePathExample" | "panels.market.add.guidePathHint" | "panels.market.add.guideExampleLabel" | "panels.market.add.guideFill" | "panels.market.add.guideSafety" | "panels.market.add.registryLegend" | "panels.market.add.registryOfficial" | "panels.market.add.registryMirror" | "panels.market.add.registryWithHost" | "panels.market.add.registryToggle" | "panels.market.add.installVersion" | "panels.market.add.registryDefault" | "panels.market.add.registryCustom" | "panels.market.add.registryCustomPlaceholder" | "panels.market.add.registryCustomHint" | "panels.market.add.registryCustomInvalid" | "panels.market.add.run" | "panels.market.add.edit" | "panels.market.add.changeRegistry" | "panels.market.add.installingTitle" | "panels.market.add.installedTitle" | "panels.market.add.failedTitle" | "panels.market.add.cancelledTitle" | "panels.market.add.failureNetworkHost" | "panels.market.add.problemInvalid" | "panels.market.add.problemInstalled" | "panels.market.add.problemNotFound" | "panels.market.add.problemNotPackage" | "panels.market.add.problemNotBundle" | "panels.market.add.problemNotWorkbenchModule" | "panels.market.add.problemNotModuleOrPlugin" | "panels.market.add.failureNotModuleOrPlugin" | "panels.market.add.installedPlugin" | "panels.market.add.pluginPreview" | "panels.market.add.pluginAlias" | "panels.market.add.problemNetwork" | "panels.market.add.problemUnknown" | "panels.market.add.failureNetwork" | "panels.market.add.failureNotFound" | "panels.market.add.failureNoMatchingVersion" | "panels.market.add.failureDiskFull" | "panels.market.add.failurePermission" | "panels.market.add.failureBuildBlocked" | "panels.market.add.failureIntegrity" | "panels.market.add.failureTimeout" | "panels.market.add.failurePnpmMissing" | "panels.market.add.failureInstalled" | "panels.market.add.failureGeneric" | "panels.market.add.approveTitle" | "panels.market.add.approveCaution" | "panels.market.add.approveRun" | "panels.market.add.restart" | "panels.market.add.tookEffect" | "panels.market.add.details" | "panels.market.add.open" | "panels.market.add.title" | "panels.market.add.intro" | "panels.market.add.specLabel" | "panels.market.add.specHint" | "panels.market.add.exampleTitle" | "panels.market.add.exampleFill" | "panels.market.add.registryLabel" | "panels.market.add.registryProfile" | "panels.market.add.registryPnpm" | "panels.market.add.check" | "panels.market.add.checking" | "panels.market.add.classifying" | "panels.market.add.change" | "panels.market.add.previewTitle" | "panels.market.add.fieldName" | "panels.market.add.fieldVersion" | "panels.market.add.fieldDescription" | "panels.market.add.fieldSource" | "panels.market.add.install" | "panels.market.add.installing" | "panels.market.add.cancel" | "panels.market.add.close" | "panels.market.add.retry" | "panels.market.add.changeSource" | "panels.market.tabInstalled" | "panels.market.tabs" | "panels.tab.discover" | "panels.discover.loading" | "panels.discover.lead" | "panels.discover.addSource" | "panels.discover.addFirstSource" | "panels.discover.removeSource" | "panels.discover.removeSourceNamed" | "panels.discover.refresh" | "panels.discover.search" | "panels.discover.all" | "panels.discover.sourceLabel" | "panels.discover.sourceKind" | "panels.discover.sourceKindHttp" | "panels.discover.sourceKindGit" | "panels.discover.sourceUrl" | "panels.discover.sourcePlaceholder" | "panels.discover.sourceRef" | "panels.discover.sourcePath" | "panels.discover.sourceLocal" | "panels.discover.sourceLocalHint" | "panels.discover.save" | "panels.discover.cancel" | "panels.discover.retry" | "panels.discover.noSource" | "panels.discover.noSourceHint" | "panels.discover.sourcesFailed" | "panels.discover.unreadable" | "panels.discover.invalid" | "panels.discover.emptyRepo" | "panels.discover.missingIndex" | "panels.discover.initTitle" | "panels.discover.initCta" | "panels.discover.initWhat" | "panels.discover.initBranch" | "panels.discover.initBranchHint" | "panels.discover.initBranchBad" | "panels.discover.initOk" | "panels.discover.initBusy" | "panels.discover.initDone" | "panels.discover.stale" | "panels.discover.empty" | "panels.discover.noMatch" | "panels.discover.notInstalled" | "panels.discover.installed" | "panels.discover.installedVersion" | "panels.discover.update" | "panels.discover.badShell" | "panels.discover.badShellDetail" | "panels.discover.unverified" | "panels.discover.installing" | "panels.discover.installedDone" | "panels.discover.failed" | "panels.discover.expand" | "panels.discover.collapse" | "panels.discover.versionCount" | "panels.discover.sourceNpm" | "panels.discover.sourceNpmDefault" | "panels.discover.sourceGit" | "panels.discover.installVersion" | "panels.discover.confirmTitle" | "panels.discover.confirmDetail" | "panels.discover.confirmAck" | "panels.discover.confirmOk" | "panels.discover.confirmCancel" | "panels.discover.marketMenu" | "panels.discover.manageSources" | "panels.discover.sourcesTitle" | "panels.discover.sourcesIntro" | "panels.discover.sourcesLabel" | "panels.discover.sourceTrust" | "panels.discover.sourceDuplicate" | "panels.discover.sourceBadUrl" | "panels.discover.close" | "panels.discover.labelsMenu" | "panels.discover.labelsCount" | "panels.discover.tagsAll" | "panels.discover.sort" | "panels.discover.sortWith" | "panels.discover.sortRelevance" | "panels.discover.sortDefault" | "panels.discover.sortPublished" | "panels.discover.categoriesLabel" | "panels.discover.showMore" | "panels.discover.entryMeta" | "panels.discover.entryMetaAuthor" | "panels.discover.openEntry" | "panels.discover.cardInstall" | "panels.discover.cardInstalled" | "panels.discover.cardUpdate" | "panels.discover.cardBlocked" | "panels.discover.installTitle" | "panels.discover.installVersionTitle" | "panels.discover.openInstalled" | "panels.discover.noCompatibleVersion" | "panels.discover.detailBack" | "panels.discover.publishedAt" | "panels.discover.detailMarket" | "panels.discover.detailIncompatible" | "panels.discover.detailUnknown" | "panels.discover.detailSource" | "panels.discover.authorUnknown" | "panels.discover.tabOverview" | "panels.discover.tabReadme" | "panels.discover.tabChangelog" | "panels.discover.docTitle" | "panels.discover.docReadme" | "panels.discover.docChangelog" | "panels.discover.docLoading" | "panels.discover.docMissing" | "panels.discover.docUnavailable" | "panels.discover.docUnknownReason" | "panels.discover.detailTabs" | "panels.discover.factPackage" | "panels.discover.factRegistry" | "panels.discover.factRepository" | "panels.discover.factCommit" | "panels.discover.factDirectory" | "panels.discover.factPublished" | "panels.discover.factAuthor" | "panels.discover.factHomepage" | "panels.discover.factCategory" | "panels.discover.factLabels" | "panels.discover.factMarket" | "panels.discover.detailVersions" | "panels.discover.versionsLabel" | "panels.discover.tagRecommended" | "panels.discover.tagPrerelease" | "panels.discover.tagInstalled" | "panels.discover.tagIncompatible" | "panels.discover.tagUnknown" | "panels.discover.selected" | "panels.discover.done" | "panels.discover.installTrust" | "panels.discover.progress" | "panels.market.add.approveBuilds" | "panels.market.add.approveHint" | "panels.market.add.doneApplied" | "panels.market.add.doneRestart" | "panels.market.add.restartWhy" | "panels.market.add.restartWhy.no-hmr" | "panels.market.add.restartWhy.package-moved" | "panels.market.add.restartWhy.host-module" | "panels.market.add.restartWhy.unmanaged-plugin" | "panels.market.add.restartWhy.module-comparison" | "panels.market.add.cancelled" | "panels.market.add.failed" | "panels.market.add.removed" | "panels.market.add.supplyPending" | "panels.market.add.supplyFailed" | "panels.market.add.notModule" | "panels.market.add.removedRestart" | "panels.market.add.remove" | "panels.market.add.problem.invalidSpec" | "panels.market.add.problem.alreadyInstalled" | "panels.market.add.problem.notFound" | "panels.market.add.problem.notAPackage" | "panels.market.add.problem.notABundle" | "panels.market.add.problem.network" | "panels.market.add.problem.unknown" | "panels.market.add.reason.invalidSpec" | "panels.market.add.reason.incompatible" | "panels.market.add.reason.notBundle" | "panels.market.add.reason.notRemovable" | "panels.market.add.reason.bundleInUse" | "panels.market.add.reason.stopProfile" | "panels.market.add.reason.staleApproval" | "panels.market.add.reason.operationError" | "panels.market.add.reason.buildBlocked" | "panels.market.add.reason.pnpmMissing" | "panels.market.add.reason.noMatchingVersion" | "panels.market.add.reason.diskFull" | "panels.market.add.reason.permission" | "panels.market.add.reason.integrity" | "panels.market.add.reason.timeout" | "panels.market.add.reason.network" | "panels.market.add.reason.notFound" | "panels.market.add.reason.unknown" | "blocker.fix.update" | "blocker.fix.running" | "blocker.fix.failed" | "blocker.retry.running" | "panels.reading" | "panels.cardBroken" | "panels.cardRetry" | "panels.empty" | "panels.emptyHint" | "env.title" | "env.checking" | "env.installing" | "env.failed" | "env.elapsed" | "env.stepFailed.install" | "env.stepFailed.path" | "env.stepFailed.shell" | "env.toolchain.ok" | "env.toolchain.warn" | "env.opencli.ok" | "env.bridge.ok" | "env.bridge.short" | "env.bridge.why" | "env.bridge.hold" | "env.bridge.daemon" | "env.bridge.extension" | "env.bridge.extensionLink" | "env.bridge.profile" | "env.bridge.stale" | "env.bridge.unknown" | "env.fix.title" | "env.fix.why" | "env.fix.whyPath" | "env.fix.whyShell" | "env.fix.step" | "env.fix.stepPath" | "env.fix.stepShell" | "env.fix.permission" | "env.fix.network" | "env.fix.details" | "env.retry" | "env.wake" | "env.wake.opening" | "env.wake.browserOpen" | "env.wake.noBrowser" | "env.wake.failed" | "env.bridge.continue" | "env.diy.ok" | "env.diy.short" | "env.diy.hold" | "env.diy.why" | "env.diy.rows" | "env.diy.noRow" | "env.diy.step" | "env.diy.continue" | "env.copyCommand" | "env.copied" | "env.step.toolchain" | "env.step.opencli" | "env.step.bridge" | "env.step.diy" | "env.step.warm" | "env.warm.done" | "env.warm.short" | "adapterSet.not-configured" | "adapterSet.no-profile" | "adapterSet.malformed" | "adapterSet.not-resolvable" | "adapterSet.import-failed" | "adapterSet.bad-export" | "adapterSet.factory-failed" | "adapterSet.incompatible-version" | "adapterSet.missing-member" | "env.unit.hint" | "rightbar.label" | "rightbar.expand" | "rightbar.collapse" | "rightbar.column.label" | "rightbar.column.workbench" | "rightbar.column.dsh" | "rightbar.refresh" | "rightbar.refreshing" | "rightbar.updatedAt" | "rightbar.noProject" | "rightbar.openPlatform" | "error.unknown" | "board.title" | "panel.conversation" | "panels.label" | "adapterSet.title" | "adapterSet.lead" | "adapterSet.active" | "adapterSet.defaults" | "adapterSet.failed" | "adapterSet.healthUnreadable" | "workbenchSettings.nav" | "workbenchSettings.lead" | "sidebarEdition.nav" | "sidebarEdition.lead" | "sidebarEdition.official" | "sidebarEdition.officialHint" | "sidebarEdition.custom" | "sidebarEdition.customHint" | "sidebarEdition.saving" | "sidebarEdition.reloadRequired" | "sidebarEdition.reload" | "sidebarEdition.failed" | "debug.workspace" | "debug.status" | "debug.status.trouble" | "debug.stalled" | "debug.act.pause" | "debug.act.resume" | "debug.act.stop" | "debug.act.stop.ask" | "debug.card.here.title" | "debug.card.here.note" | "debug.card.away.note" | "debug.card.paused.note" | "debug.card.hidden.note" | "record.waiting" | "record.waiting.note" | "record.recording" | "record.recording.note" | "record.recording.shots" | "record.finished" | "record.finished.note" | "record.act.cancel" | "record.act.halt" | "approval.record.site" | "approval.record.what" | "approval.record.lands" | "approval.record.noUrl" | "approval.record.oneAction" | "approval.record.noSwitch" | "approval.longTask.what" | "approval.longTask.signal" | "approval.publish.module" | "approval.publish.target" | "approval.publish.version" | "approval.publish.registry" | "approval.publish.repo" | "approval.publish.branch" | "approval.publish.defaultBranch" | "approval.publish.artifacts" | "approval.publish.index" | "approval.publish.commits" | "approval.publish.twoCommits" | "approval.publish.reading" | "approval.publish.changelog" | "approval.publish.changelogMissing" | "approval.publish.targetAuto" | "approval.publish.targetTeam" | "approval.publish.targetPublic" | "approval.publish.targetTarball" | "approval.publish.targetGit" | "approval.publish.targetMarket" | "approval.publish.targetLocal" | "markdown.copy" | "markdown.copied" | "markdown.footnotes", string>;
692
+ en: Record<"time.now" | "time.ago" | "time.minutes" | "time.hours" | "time.days" | "blocker.retry" | "blocker.copy" | "blocker.unknown.title" | "blocker.login.go" | "blocker.login.titleGeneric" | "blocker.login.title" | "blocker.login.manual" | "blocker.login.hint" | "blocker.forbidden.open" | "blocker.forbidden.titleGeneric" | "blocker.forbidden.title" | "blocker.forbidden.hint" | "blocker.timeout.hint" | "blocker.exec.hint" | "blocker.fix.install" | "blocker.market.open" | "env.unit.failed" | "env.unit.failedHint" | "env.unit.unsupported" | "env.unit.unsupportedHint" | "env.unit.degraded" | "env.unit.degradedHint" | "env.unit.unchecked" | "env.unit.uncheckedHint" | "profileCreate.nav" | "profileCreate.lead" | "profileCreate.name" | "profileCreate.nameHint" | "profileCreate.source" | "profileCreate.current" | "profileCreate.copy" | "profileCreate.settings" | "profileCreate.create" | "profileCreate.creating" | "profileCreate.created" | "profileCreate.command" | "profileCreate.readFailed" | "profileCreate.retry" | "profileCreate.reading" | "profileCreate.noProfiles" | "profileCreate.failed" | "configSync.nav" | "configSync.lead" | "configSync.source" | "configSync.sourceBroken" | "configSync.sourceRows" | "configSync.sourceDead" | "configSync.refresh" | "configSync.loading" | "configSync.readHint" | "configSync.tag.new" | "configSync.tag.differs" | "configSync.conflictNote" | "configSync.code.lang" | "configSync.code.copy" | "configSync.code.copied" | "configSync.code.wrap" | "configSync.code.unwrap" | "configSync.code.collapse" | "configSync.code.collapseAria" | "configSync.code.expandAria" | "configSync.code.expand" | "configSync.missing" | "configSync.apply" | "configSync.applyNone" | "configSync.applying" | "configSync.applied" | "configSync.appliedUnverified" | "configSync.appliedIds" | "configSync.skippedIds" | "configSync.nothing" | "configSync.unreadable" | "configSync.noSource" | "configSync.emptyProviders" | "configSync.failed" | "env.need.bin.missing" | "env.need.bin.hint" | "env.need.extension.missing" | "env.need.extension.outdated" | "env.need.extension.hint" | "env.need.lib.missing" | "env.need.lib.outdated" | "env.need.lib.unsatisfied" | "env.need.lib.hint" | "env.need.env.missing" | "env.need.env.hint" | "brand.name" | "toggle.open" | "toggle.collapse" | "project.label" | "workspace.section" | "project.none" | "project.empty" | "project.add" | "project.add.busy" | "project.add.failed" | "project.search.label" | "project.search.placeholder" | "project.search.empty" | "project.group.workspaces" | "project.group.defaultWorkspace" | "project.group.workshop" | "project.rename.row" | "project.rename.current" | "project.rename.title" | "project.rename.description" | "project.rename.field" | "project.rename.placeholder" | "project.rename.hint" | "project.rename.save" | "project.rename.saving" | "project.rename.cancel" | "project.rename.failed" | "session.new" | "session.new.label" | "session.empty" | "session.noProject" | "session.list.label" | "session.copy" | "session.pinned" | "session.actions" | "status.idle" | "status.running" | "status.longTask" | "status.waitingApproval" | "status.planReview" | "status.waitingAnswer" | "status.compact.approval" | "status.compact.planReview" | "status.compact.answer" | "status.completed" | "status.subagentsRunning.one" | "status.subagentsRunning.other" | "project.attention.warning.one" | "project.attention.warning.other" | "project.attention.running.one" | "project.attention.running.other" | "project.attention.longTask.one" | "project.attention.longTask.other" | "project.attention.done.one" | "project.attention.done.other" | "project.attention.state.warning" | "project.attention.state.running" | "project.attention.state.done" | "hover.copied" | "time.short.minutes" | "time.short.hours" | "time.short.days" | "time.short.months" | "time.short.years" | "panels.title" | "panels.groupBoardless" | "panels.groupPlugins" | "panels.market.defaultHint" | "panels.market.defaultLabel" | "panels.market.defaultLocked" | "panels.followAll" | "panels.followAllConfirmTitle" | "panels.followAllConfirmDetail" | "panels.followAllConfirmAck" | "panels.followAllConfirmYes" | "panels.followAllConfirmNo" | "panels.enabled" | "panels.disabled" | "panels.choose" | "panels.buildModule" | "panels.failed" | "panels.dragHint" | "panels.unknownStep" | "panels.labelWithHint" | "panels.hintJoin" | "panels.dep.failed" | "panels.dep.unchecked" | "panels.dep.missing" | "panels.dep.outdated" | "panels.dep.degraded" | "panels.dep.unsupported" | "panels.tab.modules" | "panels.tab.market" | "panels.browseMarket" | "panels.noneInstalled" | "panels.noneInstalledHint" | "panels.market.installed" | "panels.market.notActive" | "panels.market.notUsable" | "panels.market.broken" | "panels.market.hasNew" | "panels.market.hasProblem" | "panels.market.missing" | "panels.market.unchecked" | "panels.market.uncheckedHint" | "panels.market.checking" | "panels.market.sectionInstalled" | "panels.market.sectionPending" | "panels.market.sectionShared" | "panels.market.sharedUsedBy" | "panels.market.listSeparator" | "panels.market.sharedMissing" | "panels.market.sharedOutdated" | "panels.market.sharedUnsatisfied" | "panels.market.sharedOk" | "panels.market.versionArrow" | "panels.market.lead" | "panels.market.install" | "panels.market.update" | "panels.market.swapSlow" | "panels.market.removeSlow" | "panels.market.updateNoChange" | "panels.market.updateUnknownVersion" | "panels.market.updateGone" | "panels.market.updateRestored" | "panels.market.updateBehind" | "panels.market.selfUpdateFailed" | "panels.market.selfUpdateUnknown" | "panels.market.selfUpdateRolledBack" | "panels.market.uninstall" | "panels.market.uninstallLabel" | "panels.market.installing" | "panels.market.updating" | "panels.market.uninstalling" | "panels.market.confirmUninstallTitle" | "panels.market.confirmUninstallDetail" | "panels.market.confirmUninstallAck" | "panels.market.confirmYes" | "panels.market.confirmNo" | "panels.market.failed" | "panels.market.needEnv" | "panels.market.needCommands" | "panels.market.needBinary" | "panels.market.needLib" | "panels.market.localMark" | "panels.market.noSource" | "panels.market.badSource" | "panels.market.empty" | "panels.market.sectionPlugins" | "panels.market.moduleOutdated" | "panels.market.moduleRefused" | "panels.market.moduleRestartHint" | "panels.market.pendingRestart" | "panels.market.workbenchName" | "panels.market.pluginBroken" | "panels.market.restartNeeded" | "panels.market.foot" | "panels.market.recheck" | "panels.market.checkUpdates" | "panels.market.checkedAt" | "panels.market.justNow" | "panels.market.minutesAgo" | "panels.market.hoursAgo" | "panels.market.add.description" | "panels.market.add.specPlaceholder" | "panels.market.add.guideToggle" | "panels.market.add.guideHide" | "panels.market.add.guideIdTitle" | "panels.market.add.guideIdExample" | "panels.market.add.guideIdHint" | "panels.market.add.guideGitTitle" | "panels.market.add.guideGitExample" | "panels.market.add.guideGitHint" | "panels.market.add.guidePathTitle" | "panels.market.add.guidePathExample" | "panels.market.add.guidePathHint" | "panels.market.add.guideExampleLabel" | "panels.market.add.guideFill" | "panels.market.add.guideSafety" | "panels.market.add.registryLegend" | "panels.market.add.registryOfficial" | "panels.market.add.registryMirror" | "panels.market.add.registryWithHost" | "panels.market.add.registryToggle" | "panels.market.add.installVersion" | "panels.market.add.registryDefault" | "panels.market.add.registryCustom" | "panels.market.add.registryCustomPlaceholder" | "panels.market.add.registryCustomHint" | "panels.market.add.registryCustomInvalid" | "panels.market.add.run" | "panels.market.add.edit" | "panels.market.add.changeRegistry" | "panels.market.add.installingTitle" | "panels.market.add.installedTitle" | "panels.market.add.failedTitle" | "panels.market.add.cancelledTitle" | "panels.market.add.failureNetworkHost" | "panels.market.add.problemInvalid" | "panels.market.add.problemInstalled" | "panels.market.add.problemNotFound" | "panels.market.add.problemNotPackage" | "panels.market.add.problemNotBundle" | "panels.market.add.problemNotWorkbenchModule" | "panels.market.add.problemNotModuleOrPlugin" | "panels.market.add.failureNotModuleOrPlugin" | "panels.market.add.installedPlugin" | "panels.market.add.pluginPreview" | "panels.market.add.pluginAlias" | "panels.market.add.problemNetwork" | "panels.market.add.problemUnknown" | "panels.market.add.failureNetwork" | "panels.market.add.failureNotFound" | "panels.market.add.failureNoMatchingVersion" | "panels.market.add.failureDiskFull" | "panels.market.add.failurePermission" | "panels.market.add.failureBuildBlocked" | "panels.market.add.failureIntegrity" | "panels.market.add.failureTimeout" | "panels.market.add.failurePnpmMissing" | "panels.market.add.failureInstalled" | "panels.market.add.failureGeneric" | "panels.market.add.approveTitle" | "panels.market.add.approveCaution" | "panels.market.add.approveRun" | "panels.market.add.restart" | "panels.market.add.tookEffect" | "panels.market.add.details" | "panels.market.add.open" | "panels.market.add.title" | "panels.market.add.intro" | "panels.market.add.specLabel" | "panels.market.add.specHint" | "panels.market.add.exampleTitle" | "panels.market.add.exampleFill" | "panels.market.add.registryLabel" | "panels.market.add.registryProfile" | "panels.market.add.registryPnpm" | "panels.market.add.check" | "panels.market.add.checking" | "panels.market.add.classifying" | "panels.market.add.change" | "panels.market.add.previewTitle" | "panels.market.add.fieldName" | "panels.market.add.fieldVersion" | "panels.market.add.fieldDescription" | "panels.market.add.fieldSource" | "panels.market.add.install" | "panels.market.add.installing" | "panels.market.add.cancel" | "panels.market.add.close" | "panels.market.add.retry" | "panels.market.add.changeSource" | "panels.market.tabInstalled" | "panels.market.tabs" | "panels.tab.discover" | "panels.discover.loading" | "panels.discover.lead" | "panels.discover.addSource" | "panels.discover.addingSource" | "panels.discover.addFirstSource" | "panels.discover.removeSource" | "panels.discover.removeSourceNamed" | "panels.discover.refresh" | "panels.discover.search" | "panels.discover.all" | "panels.discover.sourceLabel" | "panels.discover.sourceKind" | "panels.discover.sourceKindHttp" | "panels.discover.sourceKindGit" | "panels.discover.sourceUrl" | "panels.discover.sourcePlaceholder" | "panels.discover.sourceRef" | "panels.discover.sourcePath" | "panels.discover.sourceLocal" | "panels.discover.sourceLocalHint" | "panels.discover.save" | "panels.discover.cancel" | "panels.discover.retry" | "panels.discover.noSource" | "panels.discover.noSourceHint" | "panels.discover.sourcesFailed" | "panels.discover.unreadable" | "panels.discover.invalid" | "panels.discover.emptyRepo" | "panels.discover.missingIndex" | "panels.discover.initTitle" | "panels.discover.initCta" | "panels.discover.initWhat" | "panels.discover.initBranch" | "panels.discover.initBranchHint" | "panels.discover.initBranchBad" | "panels.discover.initOk" | "panels.discover.initBusy" | "panels.discover.initDone" | "panels.discover.stale" | "panels.discover.empty" | "panels.discover.noMatch" | "panels.discover.notInstalled" | "panels.discover.installed" | "panels.discover.installedVersion" | "panels.discover.update" | "panels.discover.badShell" | "panels.discover.badShellDetail" | "panels.discover.unverified" | "panels.discover.installing" | "panels.discover.installedDone" | "panels.discover.failed" | "panels.discover.expand" | "panels.discover.collapse" | "panels.discover.versionCount" | "panels.discover.sourceNpm" | "panels.discover.sourceNpmDefault" | "panels.discover.sourceGit" | "panels.discover.installVersion" | "panels.discover.confirmTitle" | "panels.discover.confirmDetail" | "panels.discover.confirmAck" | "panels.discover.confirmOk" | "panels.discover.confirmCancel" | "panels.discover.marketMenu" | "panels.discover.manageSources" | "panels.discover.sourcesTitle" | "panels.discover.sourcesIntro" | "panels.discover.sourcesLabel" | "panels.discover.sourceTrust" | "panels.discover.sourceDuplicate" | "panels.discover.sourceBadUrl" | "panels.discover.close" | "panels.discover.labelsMenu" | "panels.discover.labelsCount" | "panels.discover.tagsAll" | "panels.discover.sort" | "panels.discover.sortWith" | "panels.discover.sortRelevance" | "panels.discover.sortDefault" | "panels.discover.sortPublished" | "panels.discover.categoriesLabel" | "panels.discover.showMore" | "panels.discover.entryMeta" | "panels.discover.entryMetaAuthor" | "panels.discover.openEntry" | "panels.discover.cardInstall" | "panels.discover.cardInstalled" | "panels.discover.cardUpdate" | "panels.discover.cardBlocked" | "panels.discover.installTitle" | "panels.discover.installVersionTitle" | "panels.discover.openInstalled" | "panels.discover.noCompatibleVersion" | "panels.discover.detailBack" | "panels.discover.publishedAt" | "panels.discover.detailMarket" | "panels.discover.detailIncompatible" | "panels.discover.detailUnknown" | "panels.discover.detailSource" | "panels.discover.authorUnknown" | "panels.discover.tabOverview" | "panels.discover.tabReadme" | "panels.discover.tabChangelog" | "panels.discover.docReadme" | "panels.discover.docChangelog" | "panels.discover.docLoading" | "panels.discover.docMissing" | "panels.discover.docUnavailable" | "panels.discover.docUnknownReason" | "panels.discover.detailTabs" | "panels.discover.factPackage" | "panels.discover.factRegistry" | "panels.discover.factRepository" | "panels.discover.factCommit" | "panels.discover.factDirectory" | "panels.discover.factPublished" | "panels.discover.factAuthor" | "panels.discover.factHomepage" | "panels.discover.factCategory" | "panels.discover.factLabels" | "panels.discover.factMarket" | "panels.discover.detailVersions" | "panels.discover.versionsLabel" | "panels.discover.tagRecommended" | "panels.discover.tagPrerelease" | "panels.discover.tagInstalled" | "panels.discover.tagIncompatible" | "panels.discover.tagUnknown" | "panels.discover.selected" | "panels.discover.done" | "panels.discover.installTrust" | "panels.discover.progress" | "panels.market.add.approveBuilds" | "panels.market.add.approveHint" | "panels.market.add.doneApplied" | "panels.market.add.doneRestart" | "panels.market.add.restartWhy" | "panels.market.add.restartWhy.no-hmr" | "panels.market.add.restartWhy.package-moved" | "panels.market.add.restartWhy.host-module" | "panels.market.add.restartWhy.unmanaged-plugin" | "panels.market.add.restartWhy.module-comparison" | "panels.market.add.cancelled" | "panels.market.add.failed" | "panels.market.add.removed" | "panels.market.add.supplyPending" | "panels.market.add.supplyFailed" | "panels.market.add.notModule" | "panels.market.add.removedRestart" | "panels.market.add.remove" | "panels.market.add.problem.invalidSpec" | "panels.market.add.problem.alreadyInstalled" | "panels.market.add.problem.notFound" | "panels.market.add.problem.notAPackage" | "panels.market.add.problem.notABundle" | "panels.market.add.problem.network" | "panels.market.add.problem.unknown" | "panels.market.add.reason.invalidSpec" | "panels.market.add.reason.incompatible" | "panels.market.add.reason.notBundle" | "panels.market.add.reason.notRemovable" | "panels.market.add.reason.bundleInUse" | "panels.market.add.reason.stopProfile" | "panels.market.add.reason.staleApproval" | "panels.market.add.reason.operationError" | "panels.market.add.reason.buildBlocked" | "panels.market.add.reason.pnpmMissing" | "panels.market.add.reason.noMatchingVersion" | "panels.market.add.reason.diskFull" | "panels.market.add.reason.permission" | "panels.market.add.reason.integrity" | "panels.market.add.reason.timeout" | "panels.market.add.reason.network" | "panels.market.add.reason.notFound" | "panels.market.add.reason.unknown" | "blocker.fix.update" | "blocker.fix.running" | "blocker.fix.failed" | "blocker.retry.running" | "panels.reading" | "panels.cardBroken" | "panels.cardRetry" | "panels.empty" | "panels.emptyHint" | "env.title" | "env.checking" | "env.installing" | "env.failed" | "env.elapsed" | "env.stepFailed.install" | "env.stepFailed.path" | "env.stepFailed.shell" | "env.toolchain.ok" | "env.toolchain.warn" | "env.opencli.ok" | "env.bridge.ok" | "env.bridge.short" | "env.bridge.why" | "env.bridge.hold" | "env.bridge.daemon" | "env.bridge.extension" | "env.bridge.extensionLink" | "env.bridge.profile" | "env.bridge.stale" | "env.bridge.unknown" | "env.fix.title" | "env.fix.why" | "env.fix.whyPath" | "env.fix.whyShell" | "env.fix.step" | "env.fix.stepPath" | "env.fix.stepShell" | "env.fix.permission" | "env.fix.network" | "env.fix.details" | "env.retry" | "env.wake" | "env.wake.opening" | "env.wake.browserOpen" | "env.wake.noBrowser" | "env.wake.failed" | "env.bridge.continue" | "env.diy.ok" | "env.diy.short" | "env.diy.hold" | "env.diy.why" | "env.diy.rows" | "env.diy.noRow" | "env.diy.step" | "env.diy.continue" | "env.copyCommand" | "env.copied" | "env.step.toolchain" | "env.step.opencli" | "env.step.bridge" | "env.step.diy" | "env.step.warm" | "env.warm.done" | "env.warm.short" | "adapterSet.not-configured" | "adapterSet.no-profile" | "adapterSet.malformed" | "adapterSet.not-resolvable" | "adapterSet.import-failed" | "adapterSet.bad-export" | "adapterSet.factory-failed" | "adapterSet.incompatible-version" | "adapterSet.missing-member" | "env.unit.hint" | "rightbar.label" | "rightbar.expand" | "rightbar.collapse" | "rightbar.column.label" | "rightbar.column.workbench" | "rightbar.column.dsh" | "rightbar.refresh" | "rightbar.refreshing" | "rightbar.updatedAt" | "rightbar.noProject" | "rightbar.openPlatform" | "error.unknown" | "board.title" | "panel.conversation" | "panels.label" | "adapterSet.title" | "adapterSet.lead" | "adapterSet.active" | "adapterSet.defaults" | "adapterSet.failed" | "adapterSet.healthUnreadable" | "workbenchSettings.nav" | "workbenchSettings.lead" | "sidebarEdition.nav" | "sidebarEdition.lead" | "sidebarEdition.official" | "sidebarEdition.officialHint" | "sidebarEdition.custom" | "sidebarEdition.customHint" | "sidebarEdition.saving" | "sidebarEdition.reloadRequired" | "sidebarEdition.reload" | "sidebarEdition.failed" | "debug.workspace" | "debug.status" | "debug.status.trouble" | "debug.stalled" | "debug.act.pause" | "debug.act.resume" | "debug.act.stop" | "debug.act.stop.ask" | "debug.card.here.title" | "debug.card.here.note" | "debug.card.away.note" | "debug.card.paused.note" | "debug.card.hidden.note" | "record.waiting" | "record.waiting.note" | "record.recording" | "record.recording.note" | "record.recording.shots" | "record.finished" | "record.finished.note" | "record.act.cancel" | "record.act.halt" | "approval.record.site" | "approval.record.what" | "approval.record.lands" | "approval.record.noUrl" | "approval.record.oneAction" | "approval.record.noSwitch" | "approval.longTask.what" | "approval.longTask.signal" | "approval.publish.module" | "approval.publish.target" | "approval.publish.version" | "approval.publish.author" | "approval.publish.authorMissing" | "approval.publish.registry" | "approval.publish.repo" | "approval.publish.branch" | "approval.publish.defaultBranch" | "approval.publish.artifacts" | "approval.publish.index" | "approval.publish.commits" | "approval.publish.twoCommits" | "approval.publish.reading" | "approval.publish.changelog" | "approval.publish.changelogMissing" | "approval.publish.targetAuto" | "approval.publish.targetTeam" | "approval.publish.targetPublic" | "approval.publish.targetTarball" | "approval.publish.targetGit" | "approval.publish.targetMarket" | "approval.publish.targetLocal" | "markdown.copy" | "markdown.copied" | "markdown.footnotes", string>;
705
693
  };
706
694
  /** 中文词表的键类型(从 `zh.ts` 转出):`en` 与模块词表都得覆盖同一批键。 */
707
695
  export type { WorkbenchMessages };
@@ -1,17 +1,13 @@
1
1
  /** 「工作台设置」这一组的词条:配置同步 / 新建工作台。 */
2
2
  export declare const zhSettings: {
3
3
  readonly 'profileCreate.nav': "新建工作台";
4
- readonly 'profileCreate.lead': "以已有 profile 为模板,建一个独立的新工作台。建好后关掉当前实例,再启动新的。";
4
+ readonly 'profileCreate.lead': "以已有 profile 为模板,建一个独立的新工作台。会话 / 项目 / 附件跟 web 共用,这里只复制设置。建好后关掉当前实例,再启动新的。";
5
5
  readonly 'profileCreate.name': "新工作台的名字";
6
6
  readonly 'profileCreate.nameHint': "例如 wb2(只用字母、数字、点、下划线或短横线)";
7
7
  readonly 'profileCreate.source': "来源 profile";
8
8
  readonly 'profileCreate.current': "当前";
9
9
  readonly 'profileCreate.copy': "从来源复制";
10
10
  readonly 'profileCreate.settings': "设置(模型、主题等)";
11
- readonly 'profileCreate.plugins': "本地插件文件";
12
- readonly 'profileCreate.pluginsRequired': "设置里引用了,不能单独去掉";
13
- readonly 'profileCreate.projects': "项目列表";
14
- readonly 'profileCreate.sessions': "会话记录";
15
11
  readonly 'profileCreate.create': "创建";
16
12
  readonly 'profileCreate.creating': "正在创建…";
17
13
  readonly 'profileCreate.created': "已建好 {profile}。";
@@ -22,25 +18,16 @@ export declare const zhSettings: {
22
18
  readonly 'profileCreate.noProfiles': "这台机器上还没有可用的来源 profile。";
23
19
  readonly 'profileCreate.failed': "创建没有成功,看看下面的输出。";
24
20
  readonly 'configSync.nav': "配置同步";
25
- readonly 'configSync.lead': "只搬设置行和它们引用的本地文件;不搬项目列表和会话记录 —— 要整套新建工作台用「新建工作台」。";
21
+ readonly 'configSync.lead': "只同步「改已有插件的设置」的行;挂新插件的行不同步。会话 / 项目 / 附件本来就共用,不用同步。要整套新建工作台用「新建工作台」。";
26
22
  readonly 'configSync.source': "来源";
27
23
  readonly 'configSync.sourceBroken': "读不到它的配置";
28
- readonly 'configSync.sourceRows': "{name} 这份里你有 {count} 行可搬";
24
+ readonly 'configSync.sourceRows': "{name} 这份里你有 {count} 行可同步";
29
25
  readonly 'configSync.sourceDead': "读不到";
30
26
  readonly 'configSync.refresh': "重新读一遍";
31
27
  readonly 'configSync.loading': "正在读来源的配置…";
32
28
  readonly 'configSync.readHint': "换个来源,或再读一遍。";
33
29
  readonly 'configSync.tag.new': "新增";
34
30
  readonly 'configSync.tag.differs': "差异";
35
- readonly 'configSync.tag.asset': "缺文件";
36
- readonly 'configSync.tag.fileDiffers': "文件不同";
37
- readonly 'configSync.assetOnly': "设置内容一样,只差文件。";
38
- readonly 'configSync.assetMissingOne': "还要 1 个文件:{path}";
39
- readonly 'configSync.assetMissingMany': "还要 {count} 个文件:{path}";
40
- readonly 'configSync.assetDiffers': "文件不一样:{path}";
41
- readonly 'configSync.assetDiffersMany': "文件有差异:{path}({count} 个)";
42
- readonly 'configSync.assetExternal': "这个文件搬不过来:{path}({reason})";
43
- readonly 'configSync.assetOverwrite': "覆盖工作台里的同名文件";
44
31
  readonly 'configSync.conflictNote': "应用后工作台这份会被来源覆盖";
45
32
  readonly 'configSync.code.lang': "yaml";
46
33
  readonly 'configSync.code.copy': "复制";
@@ -51,19 +38,18 @@ export declare const zhSettings: {
51
38
  readonly 'configSync.code.collapseAria': "收起这一行的配置";
52
39
  readonly 'configSync.code.expandAria': "展开差异(还有 {count} 行)";
53
40
  readonly 'configSync.code.expand': "展开剩余 {count} 行";
54
- readonly 'configSync.missing': "{pkg} 还没装:这一行搬过来也不会生效 —— 先在模块市场里装它";
41
+ readonly 'configSync.missing': "{pkg} 还没装:这一行同步过来也不会生效 —— 先在模块市场里装它";
55
42
  readonly 'configSync.apply': "同步选中的 {count} 项";
56
43
  readonly 'configSync.applyNone': "请选择同步内容";
57
44
  readonly 'configSync.applying': "正在写入…";
58
45
  readonly 'configSync.applied': "已写入并检查通过";
59
46
  readonly 'configSync.appliedUnverified': "已写入;重启后检查是否生效";
60
- readonly 'configSync.appliedFiles': "复制了 {count} 个文件";
61
47
  readonly 'configSync.appliedIds': "这次写进去:{ids}";
62
48
  readonly 'configSync.skippedIds': "这几行工作台自己已有,没动:{ids}";
63
49
  readonly 'configSync.nothing': "没有需要同步的内容";
64
50
  readonly 'configSync.unreadable': "读不到 {path}:{reason}";
65
51
  readonly 'configSync.noSource': "这台机器上只有工作台这一个 profile,没有可同步的来源";
66
- readonly 'configSync.emptyProviders': "工作台还没有任何模型供应商 —— 去「配置同步」从某个 profile 把模型供应商那几行搬过来,或自己去「模型」里配。";
52
+ readonly 'configSync.emptyProviders': "工作台还没有任何模型供应商 —— 去「配置同步」从某个 profile 把模型供应商那几行同步过来,或自己去「模型」里配。";
67
53
  readonly 'configSync.failed': "同步没成功,再试一次。";
68
54
  };
69
55
  /** 上面那组的中文对照。 */