@dsh-workbench/shared 1.1.4 → 1.1.6

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 (81) hide show
  1. package/dist/api/host-write.d.ts +4 -1
  2. package/dist/api/workbench-client.d.ts +2 -0
  3. package/dist/components/ApprovalPlan.css +7 -8
  4. package/dist/config/constants.d.ts +4 -0
  5. package/dist/config/constants.js +4 -0
  6. package/dist/contract/approval.d.ts +4 -0
  7. package/dist/contract/approval.js +4 -0
  8. package/dist/contract/command.d.ts +33 -0
  9. package/dist/contract/command.js +1 -1
  10. package/dist/contract/needs.d.ts +17 -0
  11. package/dist/contract/needs.js +41 -1
  12. package/dist/contract/protocol/bundle-install.d.ts +2 -0
  13. package/dist/contract/protocol/market-index.d.ts +3 -1
  14. package/dist/contract/protocol/market-index.js +2 -0
  15. package/dist/contract/unit.d.ts +10 -0
  16. package/dist/host/adapter-types.d.ts +2 -0
  17. package/dist/host/data-error.d.ts +2 -0
  18. package/dist/host/data-error.js +3 -0
  19. package/dist/host/http.js +1 -0
  20. package/dist/host/install-failure.d.ts +49 -0
  21. package/dist/host/install-failure.js +167 -0
  22. package/dist/host/installed-sources.d.ts +10 -0
  23. package/dist/host/installed-sources.js +64 -0
  24. package/dist/host/lib-install.d.ts +12 -1
  25. package/dist/host/lib-install.js +33 -1
  26. package/dist/host/market-index-claim.d.ts +2 -0
  27. package/dist/host/market-index-claim.js +7 -0
  28. package/dist/host/market-index-doc.d.ts +56 -0
  29. package/dist/host/market-index-doc.js +1 -0
  30. package/dist/host/market-index-parse.d.ts +23 -0
  31. package/dist/host/market-index-parse.js +485 -0
  32. package/dist/host/market-index.d.ts +13 -21
  33. package/dist/host/market-index.js +120 -368
  34. package/dist/host/paths.d.ts +7 -0
  35. package/dist/host/paths.js +17 -0
  36. package/dist/host/runtime-links.d.ts +7 -0
  37. package/dist/host/runtime-links.js +25 -0
  38. package/dist/host/tool-approval.d.ts +4 -2
  39. package/dist/host/tool-approval.js +4 -2
  40. package/dist/host.d.ts +3 -0
  41. package/dist/host.js +3 -0
  42. package/dist/i18n/en.js +50 -4
  43. package/dist/i18n/index.d.ts +51 -5
  44. package/dist/i18n/zh.d.ts +50 -4
  45. package/dist/i18n/zh.js +50 -4
  46. package/dist/index.d.ts +1 -0
  47. package/dist/index.js +1 -0
  48. package/package.json +1 -1
  49. package/src/api/host-write.ts +5 -1
  50. package/src/api/workbench-client.ts +2 -0
  51. package/src/components/ApprovalPlan.css +7 -8
  52. package/src/config/constants.ts +6 -0
  53. package/src/contract/__tests__/needs.test.ts +53 -0
  54. package/src/contract/approval.ts +4 -0
  55. package/src/contract/command.ts +22 -0
  56. package/src/contract/needs.ts +56 -1
  57. package/src/contract/protocol/bundle-install.ts +3 -0
  58. package/src/contract/protocol/market-index.ts +4 -0
  59. package/src/contract/unit.ts +11 -0
  60. package/src/host/__tests__/market-index.test.ts +114 -0
  61. package/src/host/adapter-types.ts +2 -0
  62. package/src/host/data-error.ts +3 -1
  63. package/src/host/http.ts +1 -0
  64. package/src/host/install-failure.test.ts +121 -0
  65. package/src/host/install-failure.ts +198 -0
  66. package/src/host/installed-sources.test.ts +80 -0
  67. package/src/host/installed-sources.ts +73 -0
  68. package/src/host/lib-install.ts +38 -2
  69. package/src/host/market-index-claim.ts +9 -0
  70. package/src/host/market-index-doc.ts +62 -0
  71. package/src/host/market-index-parse.ts +482 -0
  72. package/src/host/market-index.ts +162 -357
  73. package/src/host/paths.test.ts +26 -0
  74. package/src/host/paths.ts +18 -0
  75. package/src/host/runtime-links.test.ts +31 -0
  76. package/src/host/runtime-links.ts +23 -0
  77. package/src/host/tool-approval.ts +11 -4
  78. package/src/host.ts +3 -0
  79. package/src/i18n/en.ts +51 -4
  80. package/src/i18n/zh.ts +51 -4
  81. package/src/index.ts +1 -0
@@ -1,3 +1,4 @@
1
+ export { APPROVAL_NOTE_ARG } from '../contract/approval.js';
1
2
  export type AskDecision = {
2
3
  readonly kind: 'ask';
3
4
  readonly reason: string;
@@ -16,7 +17,6 @@ export interface ApprovalDetail {
16
17
  export type ApprovalFacts = ApprovalDetail | {
17
18
  readonly blocked: string;
18
19
  };
19
- export declare const APPROVAL_NOTE_ARG = "approval_note";
20
20
  export declare const APPROVAL_NOTE_LIMIT = 40;
21
21
  export declare const APPROVAL_DETAIL_LIMIT = 20;
22
22
  export declare const APPROVAL_QUESTION_LIMIT = 40;
@@ -33,7 +33,8 @@ export interface ApprovalCall {
33
33
  }
34
34
  /**
35
35
  * 套件对一次写调用给出的判定:`read` 只是看看、`allow` 会写但本套件不问、`deny` 这一次根本跑不成
36
- * (连问都不该问,`reason` 原样交给 agent)、`ask` 要用户点头(`question` 接在明细后,`fallback` 是没明细时的整句)。
36
+ * (连问都不该问,`reason` 原样交给 agent)、`ask` 要用户点头(`question` 接在明细后,`fallback` 是没明细时的整句;
37
+ * `noteInDetail` 为真表示套件把 agent 的附注画在自己的详情座里,标题只留动作、不再追加)。
37
38
  */
38
39
  export type ApprovalVerdict = {
39
40
  readonly kind: 'read';
@@ -47,6 +48,7 @@ export type ApprovalVerdict = {
47
48
  readonly reason: string;
48
49
  readonly question: ApprovalDetail;
49
50
  readonly fallback: ApprovalDetail;
51
+ readonly noteInDetail?: boolean;
50
52
  };
51
53
  export type ApprovalPolicy = (call: ApprovalCall) => ApprovalVerdict | undefined;
52
54
  /**
@@ -1,4 +1,5 @@
1
- export const APPROVAL_NOTE_ARG = 'approval_note';
1
+ export { APPROVAL_NOTE_ARG } from '../contract/approval.js';
2
+ import { APPROVAL_NOTE_ARG } from '../contract/approval.js';
2
3
  export const APPROVAL_NOTE_LIMIT = 40;
3
4
  export const APPROVAL_DETAIL_LIMIT = 20;
4
5
  export const APPROVAL_QUESTION_LIMIT = 40;
@@ -85,9 +86,10 @@ export async function approvalFor(call, context = {}) {
85
86
  return { kind: 'deny', reason: facts.blocked };
86
87
  if (context.skipAsk === true)
87
88
  return undefined;
89
+ const note = context.declaredNote === true && verdict.noteInDetail !== true ? approvalNoteOf(call) : undefined;
88
90
  return {
89
91
  kind: 'ask',
90
92
  reason: verdict.reason,
91
- displayReason: compose(facts, verdict, context.declaredNote === true ? approvalNoteOf(call) : undefined),
93
+ displayReason: compose(facts, verdict, note),
92
94
  };
93
95
  }
package/dist/host.d.ts CHANGED
@@ -42,6 +42,8 @@ export * from './host/data-root.js';
42
42
  export * from './host/shell-text.js';
43
43
  export * from './host/shell.js';
44
44
  export * from './host/data-error.js';
45
+ export * from './host/install-failure.js';
46
+ export * from './host/runtime-links.js';
45
47
  export * from './host/provision.js';
46
48
  export * from './host/channel-plugin.js';
47
49
  export * from './host/recipe.js';
@@ -75,3 +77,4 @@ export * from './host/version-range.js';
75
77
  export * from './host/market-index.js';
76
78
  export * from './host/market-index-claim.js';
77
79
  export * from './host/changelog.js';
80
+ export * from './host/installed-sources.js';
package/dist/host.js CHANGED
@@ -42,6 +42,8 @@ export * from './host/data-root.js';
42
42
  export * from './host/shell-text.js';
43
43
  export * from './host/shell.js';
44
44
  export * from './host/data-error.js';
45
+ export * from './host/install-failure.js';
46
+ export * from './host/runtime-links.js';
45
47
  export * from './host/provision.js';
46
48
  export * from './host/channel-plugin.js';
47
49
  export * from './host/recipe.js';
@@ -75,3 +77,4 @@ export * from './host/version-range.js';
75
77
  export * from './host/market-index.js';
76
78
  export * from './host/market-index-claim.js';
77
79
  export * from './host/changelog.js';
80
+ export * from './host/installed-sources.js';
package/dist/i18n/en.js CHANGED
@@ -129,11 +129,14 @@ export const en = {
129
129
  'panels.market.update': 'Update',
130
130
  'panels.market.swapSlow': 'Not swapped yet — maybe a slow or failed download. Press Update again; if it stays like this, restart dsh.',
131
131
  'panels.market.removeSlow': 'Not removed yet — maybe a slow network or an uninstall that did not finish. Check again in a moment; if it stays like this, restart dsh.',
132
- 'panels.market.updateNoChange': 'Update failed: still {from}. The newest on the registry is {latest} — press Update again.',
132
+ 'panels.market.updateNoChange': 'Update did not swap in: still {from}; the registry has {latest}.',
133
133
  'panels.market.updateUnknownVersion': '(unknown)',
134
134
  'panels.market.updateGone': 'Update failed: the module is gone after the update.',
135
135
  'panels.market.updateRestored': 'Update failed: the new version could not be found after the update, so {version} was put back.',
136
- 'panels.market.updateBehind': 'Installed {installed}, but the newest on the registry is {latest} — not the latest; you can update once more.',
136
+ 'panels.market.updateBehind': 'Installed {installed}, but the registry has {latest}.',
137
+ 'panels.market.updateStuck.title': 'Update did not swap in',
138
+ 'panels.market.updateStuck.factNoChange': 'Still {from} on disk; the registry has {latest}.',
139
+ 'panels.market.updateStuck.copiedHint': 'Paste it into a terminal, then restart the workbench once.',
137
140
  'panels.market.selfUpdateFailed': 'Workbench update failed: {reason}',
138
141
  'panels.market.selfUpdateUnknown': 'the outside process left no reason (see ~/.dsh/workbench/self-update.log)',
139
142
  'panels.market.selfUpdateRolledBack': 'Workbench update failed; rolled back to {version}.',
@@ -149,6 +152,40 @@ export const en = {
149
152
  'panels.market.confirmNo': 'Cancel',
150
153
  'panels.market.noMarketSource': 'The index has no newer version of this module (refresh the index and retry)',
151
154
  'panels.market.failed': 'Failed: {reason}',
155
+ 'panels.market.askAgent': 'Ask the agent',
156
+ 'panels.market.askAgentCopied': 'Copied',
157
+ 'panels.market.askAgentText': 'This workbench module cannot be used: "{name}" (unit {unit}) — {reason}. Work out what is missing and how to add it, then confirm it works.',
158
+ 'panels.market.failure.permission': "Didn't install: no write access",
159
+ 'panels.market.failure.diskFull': "Didn't install: the disk is full",
160
+ 'panels.market.failure.sandbox': "Didn't install: the system blocked it",
161
+ 'panels.market.failure.unknown': "Didn't install: cause not recognised",
162
+ 'panels.market.failure.factOwner': '{path} belongs to {owner}, and this account ({me}) cannot write to it. Hand it back to yourself (asks for your login password).',
163
+ 'panels.market.failure.factMode': '{path} is mode {mode}, so this account cannot write to it.',
164
+ 'panels.market.failure.factSpace': 'The disk holding {path} is full.',
165
+ 'panels.market.failure.factStuck': 'This command ran in a restricted environment and cannot write to {path}.',
166
+ 'panels.market.failure.nowhere': '(the directory was not identified)',
167
+ 'panels.market.failure.copyFix': 'Copy the fix command',
168
+ 'panels.market.failure.copied': 'Copied',
169
+ 'panels.market.failure.copiedHint': 'Paste it in a terminal, run it, then click Check again.',
170
+ 'panels.market.failure.askAgent': 'Copy for the agent',
171
+ 'panels.market.failure.askAgentText': 'Installing this module could not write: `{command}` exited {code} at {path}. Work out whether the sandbox or file permissions blocked it, then install again somewhere writable.',
172
+ 'panels.market.failure.askAgentHint': 'Paste it into the chat and let the agent carry on.',
173
+ 'panels.market.failure.recheck': 'Check again',
174
+ 'panels.market.failure.showOutput': 'Show install output',
175
+ 'panels.market.failure.hideOutput': 'Hide install output',
176
+ 'panels.market.failure.term.commandLine': 'command on line {line}',
177
+ 'panels.market.failure.term.signal': 'killed by {signal}',
178
+ 'panels.market.failure.term.exitCode': 'exit code {exitCode}',
179
+ 'panels.market.failure.term.noExitCode': 'no exit code',
180
+ 'panels.market.failure.term.running': 'running',
181
+ 'panels.market.failure.term.failed': 'failed',
182
+ 'panels.market.failure.term.done': 'done',
183
+ 'panels.market.failure.term.copy': 'Copy',
184
+ 'panels.market.failure.term.copied': 'Copied',
185
+ 'panels.market.failure.term.noOutput': 'No output',
186
+ 'panels.market.failure.term.collapse': 'Collapse',
187
+ 'panels.market.failure.term.expandAria': 'Show the remaining {hidden} lines',
188
+ 'panels.market.failure.term.expand': 'Show {hidden} lines',
152
189
  'panels.market.needEnv': 'Set {env} in the terminal that started the workbench first',
153
190
  'panels.market.needCommands': 'Missing commands: {commands}',
154
191
  'panels.market.needBinary': 'Install the {command} command first',
@@ -185,9 +222,13 @@ export const en = {
185
222
  'panels.market.restartNeeded': 'The new version is installed — restart once to pick it up.',
186
223
  'panels.market.foot': 'After installing, enable it in the panel page of that project.',
187
224
  'panels.market.checkUpdates': 'Check for updates',
225
+ 'panels.market.checkAll': 'Check all updates',
188
226
  'panels.market.checkingNow': 'Checking…',
189
227
  'panels.market.checkFailed': 'The last check failed. Check your connection and retry.',
190
228
  'panels.market.checkedAt': 'Last checked: {time}',
229
+ 'panels.market.latestPartial': 'Could not check {n} modules',
230
+ 'panels.market.latestNoRegistry': 'No source configured — the latest version was not checked',
231
+ 'panels.market.latestProbeFailed': 'Could not reach the source — try again later',
191
232
  'panels.market.justNow': 'just now',
192
233
  'panels.market.minutesAgo': '{n} min ago',
193
234
  'panels.market.hoursAgo': '{n} h ago',
@@ -246,6 +287,8 @@ export const en = {
246
287
  'panels.market.add.failurePermission': 'No write permission, cannot install',
247
288
  'panels.market.add.failureBuildBlocked': 'A dependency wants to run install scripts; you have to allow it first',
248
289
  'panels.market.add.failureIntegrity': 'The downloaded package failed its integrity check',
290
+ 'panels.market.add.failureStopProfile': 'The old copy is still in use (the workbench has this module loaded), so this dsh version will not overwrite it in place.',
291
+ 'panels.market.add.failureCancelled': 'This run was cancelled and nothing changed.',
249
292
  'panels.market.add.failureTimeout': 'The install timed out',
250
293
  'panels.market.add.failurePnpmMissing': 'pnpm was not found, cannot install',
251
294
  'panels.market.add.failureInstalled': 'It is already installed in this workbench. The same package cannot be installed over itself: uninstall it first, then install again. The uninstall did not succeed this time.',
@@ -329,7 +372,7 @@ export const en = {
329
372
  'panels.discover.missingIndex': 'This repository has no {path} yet.',
330
373
  'panels.discover.initTitle': 'Initialize this repository as a module market index?',
331
374
  'panels.discover.initCta': 'Initialize market index',
332
- '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 build files under packages/<package-name>/. The repository stays owned by its owner.',
375
+ 'panels.discover.initWhat': 'It will write the index directory market/ and README.md on {branch}, commit once, and push. Modules you publish from this workbench will commit their build files under artifacts/<package-name>/<version>/ and their entry under market/<package-name>/<version>.json. The repository stays owned by its owner.',
333
376
  'panels.discover.initBranch': 'Branch',
334
377
  'panels.discover.initBranchHint': 'The index and build files go to this branch; an empty repository gets it created.',
335
378
  'panels.discover.initBranchBad': 'Use only letters, digits, dots, underscores, slashes, or dashes in a branch name.',
@@ -652,6 +695,9 @@ export const en = {
652
695
  'approval.record.noSwitch': 'it will not switch you back (the leftbar footer shows the state)',
653
696
  'approval.longTask.what': 'Task to stop',
654
697
  'approval.longTask.signal': 'stopping only sends an interrupt signal \u2014 wrapping up the run is up to the module',
698
+ 'approval.plugin.name': 'Plugin',
699
+ 'approval.plugin.command': 'Command',
700
+ 'approval.plugin.note': 'Agent says',
655
701
  'approval.publish.module': 'Module',
656
702
  'approval.publish.target': 'Target',
657
703
  'approval.publish.version': 'Version',
@@ -671,7 +717,7 @@ export const en = {
671
717
  'approval.publish.artifacts': 'Build files',
672
718
  'approval.publish.index': 'Index',
673
719
  'approval.publish.commits': 'Commits',
674
- 'approval.publish.twoCommits': 'build files + market.json in 2 commits, one push',
720
+ 'approval.publish.twoCommits': 'build files + entry file in 2 commits, one push',
675
721
  'approval.publish.reading': 'Reading…',
676
722
  'approval.publish.changelog': 'Changelog for {version}',
677
723
  'approval.publish.changelogPending': 'This release writes the {version} changelog entry',
@@ -139,11 +139,14 @@ export declare const dictionaries: {
139
139
  readonly 'panels.market.update': "更新";
140
140
  readonly 'panels.market.swapSlow': "还没换上:可能网慢或没装上。再点一次「更新」;一直这样就把 dsh 重启一遍。";
141
141
  readonly 'panels.market.removeSlow': "还没卸掉:可能网慢或卸载没走完。等一下再看;一直这样就把 dsh 重启一遍。";
142
- readonly 'panels.market.updateNoChange': "更新失败:还是 {from};源上最新是 {latest},可以再点一次「更新」。";
142
+ readonly 'panels.market.updateNoChange': "更新没换上:还是 {from};源上最新是 {latest}。";
143
143
  readonly 'panels.market.updateUnknownVersion': "(问不到)";
144
144
  readonly 'panels.market.updateGone': "更新失败:更新后找不到这个模块。";
145
145
  readonly 'panels.market.updateRestored': "更新失败:更新后找不到新版本,已把 {version} 装回去。";
146
- readonly 'panels.market.updateBehind': "装上了 {installed},但源上最新是 {latest} —— 没更到最新,可以再点一次。";
146
+ readonly 'panels.market.updateBehind': "装上了 {installed},但源上最新是 {latest}。";
147
+ readonly 'panels.market.updateStuck.title': "更新没换上";
148
+ readonly 'panels.market.updateStuck.factNoChange': "盘上还是 {from};源上最新是 {latest}。";
149
+ readonly 'panels.market.updateStuck.copiedHint': "粘到终端跑一次,跑完重启一次工作台。";
147
150
  readonly 'panels.market.selfUpdateFailed': "工作台更新失败:{reason}";
148
151
  readonly 'panels.market.selfUpdateUnknown': "外部进程没留下原因(看 ~/.dsh/workbench/self-update.log)";
149
152
  readonly 'panels.market.selfUpdateRolledBack': "工作台更新失败,已回滚到 {version}。";
@@ -159,6 +162,40 @@ export declare const dictionaries: {
159
162
  readonly 'panels.market.confirmNo': "取消";
160
163
  readonly 'panels.market.noMarketSource': "索引里没有这个模块的新版本(刷新一次索引再试)";
161
164
  readonly 'panels.market.failed': "没成功:{reason}";
165
+ readonly 'panels.market.askAgent': "问 agent";
166
+ readonly 'panels.market.askAgentCopied': "已复制";
167
+ readonly 'panels.market.askAgentText': "工作台里「{name}」(单元 {unit})用不了:{reason}。帮我查清缺什么、怎么补,补完确认真能用。";
168
+ readonly 'panels.market.failure.permission': "没装上:没有写入权限";
169
+ readonly 'panels.market.failure.diskFull': "没装上:磁盘满了";
170
+ readonly 'panels.market.failure.sandbox': "没装上:被系统拦住了";
171
+ readonly 'panels.market.failure.unknown': "没装上:原因没认出来";
172
+ readonly 'panels.market.failure.factOwner': "{path} 属于 {owner},当前账号({me})写不进去。把它还给自己就行(会要开机密码)。";
173
+ readonly 'panels.market.failure.factMode': "{path} 的权限是 {mode},当前账号没有写权限。";
174
+ readonly 'panels.market.failure.factSpace': "{path} 所在的磁盘满了。";
175
+ readonly 'panels.market.failure.factStuck': "这条命令跑在受限环境里,写不进 {path}。";
176
+ readonly 'panels.market.failure.nowhere': "(没认出是哪个目录)";
177
+ readonly 'panels.market.failure.copyFix': "复制修复命令";
178
+ readonly 'panels.market.failure.copied': "已复制";
179
+ readonly 'panels.market.failure.copiedHint': "粘到终端跑一次,回来点「再检测」。";
180
+ readonly 'panels.market.failure.askAgent': "复制给 agent";
181
+ readonly 'panels.market.failure.askAgentText': "装这个模块时写不进去:`{command}` 退出码 {code},卡在 {path}。帮我看看是被沙箱拦的还是权限问题,换一条能写进去的路再装。";
182
+ readonly 'panels.market.failure.askAgentHint': "粘到对话里,让 agent 接着弄。";
183
+ readonly 'panels.market.failure.recheck': "再检测";
184
+ readonly 'panels.market.failure.showOutput': "查看安装输出";
185
+ readonly 'panels.market.failure.hideOutput': "收起安装输出";
186
+ readonly 'panels.market.failure.term.commandLine': "第 {line} 行的命令";
187
+ readonly 'panels.market.failure.term.signal': "被 {signal} 终止";
188
+ readonly 'panels.market.failure.term.exitCode': "退出码 {exitCode}";
189
+ readonly 'panels.market.failure.term.noExitCode': "没有退出码";
190
+ readonly 'panels.market.failure.term.running': "在跑";
191
+ readonly 'panels.market.failure.term.failed': "没跑通";
192
+ readonly 'panels.market.failure.term.done': "跑完了";
193
+ readonly 'panels.market.failure.term.copy': "复制";
194
+ readonly 'panels.market.failure.term.copied': "已复制";
195
+ readonly 'panels.market.failure.term.noOutput': "没有输出";
196
+ readonly 'panels.market.failure.term.collapse': "收起";
197
+ readonly 'panels.market.failure.term.expandAria': "展开剩下的 {hidden} 行";
198
+ readonly 'panels.market.failure.term.expand': "展开 {hidden} 行";
162
199
  readonly 'panels.market.needEnv': "先在启动工作台的终端里设 {env}";
163
200
  readonly 'panels.market.needCommands': "缺这几条命令:{commands}";
164
201
  readonly 'panels.market.needBinary': "先装 {command} 命令";
@@ -195,9 +232,13 @@ export declare const dictionaries: {
195
232
  readonly 'panels.market.restartNeeded': "新版装好了,重启一次才生效。";
196
233
  readonly 'panels.market.foot': "装好后到那个项目的面板页勾选它,模块才会出现。";
197
234
  readonly 'panels.market.checkUpdates': "检查更新";
235
+ readonly 'panels.market.checkAll': "检查全部更新";
198
236
  readonly 'panels.market.checkingNow': "正在检查…";
199
237
  readonly 'panels.market.checkFailed': "最近一次没查到,检查网络后重试";
200
238
  readonly 'panels.market.checkedAt': "最近检查:{time}";
239
+ readonly 'panels.market.latestPartial': "{n} 个模块没查成";
240
+ readonly 'panels.market.latestNoRegistry': "没配来源,未检查新版";
241
+ readonly 'panels.market.latestProbeFailed': "问不到源,稍后重试";
201
242
  readonly 'panels.market.justNow': "刚刚";
202
243
  readonly 'panels.market.minutesAgo': "{n} 分钟前";
203
244
  readonly 'panels.market.hoursAgo': "{n} 小时前";
@@ -256,6 +297,8 @@ export declare const dictionaries: {
256
297
  readonly 'panels.market.add.failurePermission': "没有写入权限,无法安装";
257
298
  readonly 'panels.market.add.failureBuildBlocked': "有依赖的安装脚本需要你允许后才能继续";
258
299
  readonly 'panels.market.add.failureIntegrity': "下载的安装包校验失败";
300
+ readonly 'panels.market.add.failureStopProfile': "旧版还在用着(工作台正加载这个模块),这一版 dsh 不肯就地覆盖。";
301
+ readonly 'panels.market.add.failureCancelled': "这次操作被取消了,什么都没动。";
259
302
  readonly 'panels.market.add.failureTimeout': "安装超时";
260
303
  readonly 'panels.market.add.failurePnpmMissing': "没有找到 pnpm,无法安装";
261
304
  readonly 'panels.market.add.failureInstalled': "它已经装在这份工作台里了。同一个包不能就地覆盖,得先卸载再装;这次卸载也没成功。";
@@ -339,7 +382,7 @@ export declare const dictionaries: {
339
382
  readonly 'panels.discover.missingIndex': "仓库里还没有索引文件 {path}";
340
383
  readonly 'panels.discover.initTitle': "把这个仓库初始化成模块市场索引?";
341
384
  readonly 'panels.discover.initCta': "初始化成市场索引";
342
- readonly 'panels.discover.initWhat': "会在 {branch} 分支写 market.json 与 README.md,提交一次并推上去;之后从这个工作台发布的模块会把打包好的文件提交到按包名分的 packages/<包名>/。仓库的写权限归它的所有者。";
385
+ readonly 'panels.discover.initWhat': "会在 {branch} 分支写索引目录 market/ 与 README.md,提交一次并推上去;之后从这个工作台发布的模块会把打包好的文件提交到 artifacts/<包名>/<版本>/,条目写到 market/<包名>/<版本>.json。仓库的写权限归它的所有者。";
343
386
  readonly 'panels.discover.initBranch': "分支";
344
387
  readonly 'panels.discover.initBranchHint': "索引和打包文件都发到这个分支;空仓库会新建它。";
345
388
  readonly 'panels.discover.initBranchBad': "分支名只能用字母、数字、点、下划线、斜杠或短横线";
@@ -662,6 +705,9 @@ export declare const dictionaries: {
662
705
  readonly 'approval.record.noSwitch': "录完不会替你切回来(左栏底部会亮一条状态)";
663
706
  readonly 'approval.longTask.what': "要停的那次任务";
664
707
  readonly 'approval.longTask.signal': "停了只是让工作台发出中断信号 —— 这次任务怎么收尾由模块自己负责";
708
+ readonly 'approval.plugin.name': "插件";
709
+ readonly 'approval.plugin.command': "命令";
710
+ readonly 'approval.plugin.note': "agent 说";
665
711
  readonly 'approval.publish.module': "模块";
666
712
  readonly 'approval.publish.target': "目标";
667
713
  readonly 'approval.publish.version': "版本";
@@ -681,7 +727,7 @@ export declare const dictionaries: {
681
727
  readonly 'approval.publish.artifacts': "打包文件";
682
728
  readonly 'approval.publish.index': "索引";
683
729
  readonly 'approval.publish.commits': "提交";
684
- readonly 'approval.publish.twoCommits': "打包文件 + market.json 两次提交,一次推送";
730
+ readonly 'approval.publish.twoCommits': "打包文件 + 条目文件两次提交,一次推送";
685
731
  readonly 'approval.publish.reading': "读取中…";
686
732
  readonly 'approval.publish.changelog': "{version} 的更新日志";
687
733
  readonly 'approval.publish.changelogPending': "{version} 这一版会写进更新日志,随包发布";
@@ -757,7 +803,7 @@ export declare const dictionaries: {
757
803
  readonly 'configSync.emptyProviders': "工作台还没有任何模型供应商 —— 去「配置同步」从某个 profile 把模型供应商那几行同步过来,或自己去「模型」里配。";
758
804
  readonly 'configSync.failed': "同步没成功,再试一次。";
759
805
  };
760
- 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.noMarketSource" | "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.updateNeedsWorkbench" | "panels.market.updateIncompatible" | "panels.market.moduleRefused" | "panels.market.moduleRestartHint" | "panels.market.pendingRestart" | "panels.market.pendingFollowUp" | "panels.market.migrationHint" | "panels.market.migrateAction" | "panels.market.migrating" | "panels.market.migrateConfirmTitle" | "panels.market.migrateConfirmDetail" | "panels.market.migrateConfirmAck" | "panels.market.migrateConfirmYes" | "panels.market.migrateDone" | "panels.market.dismissFollowUp" | "panels.market.dismissing" | "panels.market.dismissFollowUpTitle" | "panels.market.dismissFollowUpDetail" | "panels.market.dismissFollowUpAck" | "panels.market.dismissFollowUpYes" | "panels.market.dismissed" | "panels.market.workbenchName" | "panels.market.pluginBroken" | "panels.market.restartNeeded" | "panels.market.foot" | "panels.market.checkUpdates" | "panels.market.checkingNow" | "panels.market.checkFailed" | "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.failureCredentials" | "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.slowHint" | "panels.discover.lead" | "panels.discover.addSource" | "panels.discover.addingSource" | "panels.discover.addFirstSource" | "panels.discover.removeSource" | "panels.discover.removeTitle" | "panels.discover.removeBody" | "panels.discover.sourceActions" | "panels.discover.sourceStateWritable" | "panels.discover.sourceStateReadOnly" | "panels.discover.sourceEnable" | "panels.discover.sourceDisable" | "panels.discover.sourceWorking" | "panels.discover.sourceEnabled" | "panels.discover.sourceReadOnly" | "panels.discover.refresh" | "panels.discover.search" | "panels.discover.clearSearch" | "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.sourceAuth" | "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.installingNamed" | "panels.discover.cancelInstall" | "panels.discover.cancelling" | "panels.discover.installCancelled" | "panels.discover.installedDone" | "panels.discover.failed" | "panels.discover.transportTitle" | "panels.discover.transportSsh" | "panels.discover.transportHttps" | "panels.discover.transportOk" | "panels.discover.transportAuth" | "panels.discover.transportUnreachable" | "panels.discover.transportUnknown" | "panels.discover.transportChecking" | "panels.discover.transportTest" | "panels.discover.transportPlaceholder" | "panels.discover.transportNeedsAuth" | "panels.discover.transportChange" | "panels.discover.transportChangeHide" | "panels.discover.transportNone" | "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.owner" | "approval.publish.ownerUnowned" | "approval.publish.ownerTaken" | "approval.publish.unit" | "approval.publish.unitTaken" | "approval.publish.path" | "approval.publish.pathTaken" | "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.changelogPending" | "approval.publish.changelogMissing" | "approval.publish.targetAuto" | "approval.publish.targetTeam" | "approval.publish.targetPublic" | "approval.publish.targetTarball" | "approval.publish.targetGit" | "approval.publish.targetMarket" | "approval.publish.targetLocal" | "approval.market.source" | "approval.market.url" | "approval.market.action" | "approval.market.policy" | "approval.market.enable" | "approval.market.disable" | "approval.market.writable" | "approval.market.readOnly" | "approval.market.reading" | "markdown.copy" | "markdown.copied" | "markdown.footnotes", string>;
806
+ 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.updateStuck.title" | "panels.market.updateStuck.factNoChange" | "panels.market.updateStuck.copiedHint" | "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.noMarketSource" | "panels.market.failed" | "panels.market.askAgent" | "panels.market.askAgentCopied" | "panels.market.askAgentText" | "panels.market.failure.permission" | "panels.market.failure.diskFull" | "panels.market.failure.sandbox" | "panels.market.failure.unknown" | "panels.market.failure.factOwner" | "panels.market.failure.factMode" | "panels.market.failure.factSpace" | "panels.market.failure.factStuck" | "panels.market.failure.nowhere" | "panels.market.failure.copyFix" | "panels.market.failure.copied" | "panels.market.failure.copiedHint" | "panels.market.failure.askAgent" | "panels.market.failure.askAgentText" | "panels.market.failure.askAgentHint" | "panels.market.failure.recheck" | "panels.market.failure.showOutput" | "panels.market.failure.hideOutput" | "panels.market.failure.term.commandLine" | "panels.market.failure.term.signal" | "panels.market.failure.term.exitCode" | "panels.market.failure.term.noExitCode" | "panels.market.failure.term.running" | "panels.market.failure.term.failed" | "panels.market.failure.term.done" | "panels.market.failure.term.copy" | "panels.market.failure.term.copied" | "panels.market.failure.term.noOutput" | "panels.market.failure.term.collapse" | "panels.market.failure.term.expandAria" | "panels.market.failure.term.expand" | "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.updateNeedsWorkbench" | "panels.market.updateIncompatible" | "panels.market.moduleRefused" | "panels.market.moduleRestartHint" | "panels.market.pendingRestart" | "panels.market.pendingFollowUp" | "panels.market.migrationHint" | "panels.market.migrateAction" | "panels.market.migrating" | "panels.market.migrateConfirmTitle" | "panels.market.migrateConfirmDetail" | "panels.market.migrateConfirmAck" | "panels.market.migrateConfirmYes" | "panels.market.migrateDone" | "panels.market.dismissFollowUp" | "panels.market.dismissing" | "panels.market.dismissFollowUpTitle" | "panels.market.dismissFollowUpDetail" | "panels.market.dismissFollowUpAck" | "panels.market.dismissFollowUpYes" | "panels.market.dismissed" | "panels.market.workbenchName" | "panels.market.pluginBroken" | "panels.market.restartNeeded" | "panels.market.foot" | "panels.market.checkUpdates" | "panels.market.checkAll" | "panels.market.checkingNow" | "panels.market.checkFailed" | "panels.market.checkedAt" | "panels.market.latestPartial" | "panels.market.latestNoRegistry" | "panels.market.latestProbeFailed" | "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.failureStopProfile" | "panels.market.add.failureCancelled" | "panels.market.add.failureTimeout" | "panels.market.add.failurePnpmMissing" | "panels.market.add.failureInstalled" | "panels.market.add.failureGeneric" | "panels.market.add.failureCredentials" | "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.slowHint" | "panels.discover.lead" | "panels.discover.addSource" | "panels.discover.addingSource" | "panels.discover.addFirstSource" | "panels.discover.removeSource" | "panels.discover.removeTitle" | "panels.discover.removeBody" | "panels.discover.sourceActions" | "panels.discover.sourceStateWritable" | "panels.discover.sourceStateReadOnly" | "panels.discover.sourceEnable" | "panels.discover.sourceDisable" | "panels.discover.sourceWorking" | "panels.discover.sourceEnabled" | "panels.discover.sourceReadOnly" | "panels.discover.refresh" | "panels.discover.search" | "panels.discover.clearSearch" | "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.sourceAuth" | "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.installingNamed" | "panels.discover.cancelInstall" | "panels.discover.cancelling" | "panels.discover.installCancelled" | "panels.discover.installedDone" | "panels.discover.failed" | "panels.discover.transportTitle" | "panels.discover.transportSsh" | "panels.discover.transportHttps" | "panels.discover.transportOk" | "panels.discover.transportAuth" | "panels.discover.transportUnreachable" | "panels.discover.transportUnknown" | "panels.discover.transportChecking" | "panels.discover.transportTest" | "panels.discover.transportPlaceholder" | "panels.discover.transportNeedsAuth" | "panels.discover.transportChange" | "panels.discover.transportChangeHide" | "panels.discover.transportNone" | "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.plugin.name" | "approval.plugin.command" | "approval.plugin.note" | "approval.publish.module" | "approval.publish.target" | "approval.publish.version" | "approval.publish.author" | "approval.publish.authorMissing" | "approval.publish.owner" | "approval.publish.ownerUnowned" | "approval.publish.ownerTaken" | "approval.publish.unit" | "approval.publish.unitTaken" | "approval.publish.path" | "approval.publish.pathTaken" | "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.changelogPending" | "approval.publish.changelogMissing" | "approval.publish.targetAuto" | "approval.publish.targetTeam" | "approval.publish.targetPublic" | "approval.publish.targetTarball" | "approval.publish.targetGit" | "approval.publish.targetMarket" | "approval.publish.targetLocal" | "approval.market.source" | "approval.market.url" | "approval.market.action" | "approval.market.policy" | "approval.market.enable" | "approval.market.disable" | "approval.market.writable" | "approval.market.readOnly" | "approval.market.reading" | "markdown.copy" | "markdown.copied" | "markdown.footnotes", string>;
761
807
  };
762
808
  /** 中文词表的键类型(从 `zh.ts` 转出):`en` 与模块词表都得覆盖同一批键。 */
763
809
  export type { WorkbenchMessages };
package/dist/i18n/zh.d.ts CHANGED
@@ -137,11 +137,14 @@ export declare const zh: {
137
137
  readonly 'panels.market.update': "更新";
138
138
  readonly 'panels.market.swapSlow': "还没换上:可能网慢或没装上。再点一次「更新」;一直这样就把 dsh 重启一遍。";
139
139
  readonly 'panels.market.removeSlow': "还没卸掉:可能网慢或卸载没走完。等一下再看;一直这样就把 dsh 重启一遍。";
140
- readonly 'panels.market.updateNoChange': "更新失败:还是 {from};源上最新是 {latest},可以再点一次「更新」。";
140
+ readonly 'panels.market.updateNoChange': "更新没换上:还是 {from};源上最新是 {latest}。";
141
141
  readonly 'panels.market.updateUnknownVersion': "(问不到)";
142
142
  readonly 'panels.market.updateGone': "更新失败:更新后找不到这个模块。";
143
143
  readonly 'panels.market.updateRestored': "更新失败:更新后找不到新版本,已把 {version} 装回去。";
144
- readonly 'panels.market.updateBehind': "装上了 {installed},但源上最新是 {latest} —— 没更到最新,可以再点一次。";
144
+ readonly 'panels.market.updateBehind': "装上了 {installed},但源上最新是 {latest}。";
145
+ readonly 'panels.market.updateStuck.title': "更新没换上";
146
+ readonly 'panels.market.updateStuck.factNoChange': "盘上还是 {from};源上最新是 {latest}。";
147
+ readonly 'panels.market.updateStuck.copiedHint': "粘到终端跑一次,跑完重启一次工作台。";
145
148
  readonly 'panels.market.selfUpdateFailed': "工作台更新失败:{reason}";
146
149
  readonly 'panels.market.selfUpdateUnknown': "外部进程没留下原因(看 ~/.dsh/workbench/self-update.log)";
147
150
  readonly 'panels.market.selfUpdateRolledBack': "工作台更新失败,已回滚到 {version}。";
@@ -157,6 +160,40 @@ export declare const zh: {
157
160
  readonly 'panels.market.confirmNo': "取消";
158
161
  readonly 'panels.market.noMarketSource': "索引里没有这个模块的新版本(刷新一次索引再试)";
159
162
  readonly 'panels.market.failed': "没成功:{reason}";
163
+ readonly 'panels.market.askAgent': "问 agent";
164
+ readonly 'panels.market.askAgentCopied': "已复制";
165
+ readonly 'panels.market.askAgentText': "工作台里「{name}」(单元 {unit})用不了:{reason}。帮我查清缺什么、怎么补,补完确认真能用。";
166
+ readonly 'panels.market.failure.permission': "没装上:没有写入权限";
167
+ readonly 'panels.market.failure.diskFull': "没装上:磁盘满了";
168
+ readonly 'panels.market.failure.sandbox': "没装上:被系统拦住了";
169
+ readonly 'panels.market.failure.unknown': "没装上:原因没认出来";
170
+ readonly 'panels.market.failure.factOwner': "{path} 属于 {owner},当前账号({me})写不进去。把它还给自己就行(会要开机密码)。";
171
+ readonly 'panels.market.failure.factMode': "{path} 的权限是 {mode},当前账号没有写权限。";
172
+ readonly 'panels.market.failure.factSpace': "{path} 所在的磁盘满了。";
173
+ readonly 'panels.market.failure.factStuck': "这条命令跑在受限环境里,写不进 {path}。";
174
+ readonly 'panels.market.failure.nowhere': "(没认出是哪个目录)";
175
+ readonly 'panels.market.failure.copyFix': "复制修复命令";
176
+ readonly 'panels.market.failure.copied': "已复制";
177
+ readonly 'panels.market.failure.copiedHint': "粘到终端跑一次,回来点「再检测」。";
178
+ readonly 'panels.market.failure.askAgent': "复制给 agent";
179
+ readonly 'panels.market.failure.askAgentText': "装这个模块时写不进去:`{command}` 退出码 {code},卡在 {path}。帮我看看是被沙箱拦的还是权限问题,换一条能写进去的路再装。";
180
+ readonly 'panels.market.failure.askAgentHint': "粘到对话里,让 agent 接着弄。";
181
+ readonly 'panels.market.failure.recheck': "再检测";
182
+ readonly 'panels.market.failure.showOutput': "查看安装输出";
183
+ readonly 'panels.market.failure.hideOutput': "收起安装输出";
184
+ readonly 'panels.market.failure.term.commandLine': "第 {line} 行的命令";
185
+ readonly 'panels.market.failure.term.signal': "被 {signal} 终止";
186
+ readonly 'panels.market.failure.term.exitCode': "退出码 {exitCode}";
187
+ readonly 'panels.market.failure.term.noExitCode': "没有退出码";
188
+ readonly 'panels.market.failure.term.running': "在跑";
189
+ readonly 'panels.market.failure.term.failed': "没跑通";
190
+ readonly 'panels.market.failure.term.done': "跑完了";
191
+ readonly 'panels.market.failure.term.copy': "复制";
192
+ readonly 'panels.market.failure.term.copied': "已复制";
193
+ readonly 'panels.market.failure.term.noOutput': "没有输出";
194
+ readonly 'panels.market.failure.term.collapse': "收起";
195
+ readonly 'panels.market.failure.term.expandAria': "展开剩下的 {hidden} 行";
196
+ readonly 'panels.market.failure.term.expand': "展开 {hidden} 行";
160
197
  readonly 'panels.market.needEnv': "先在启动工作台的终端里设 {env}";
161
198
  readonly 'panels.market.needCommands': "缺这几条命令:{commands}";
162
199
  readonly 'panels.market.needBinary': "先装 {command} 命令";
@@ -193,9 +230,13 @@ export declare const zh: {
193
230
  readonly 'panels.market.restartNeeded': "新版装好了,重启一次才生效。";
194
231
  readonly 'panels.market.foot': "装好后到那个项目的面板页勾选它,模块才会出现。";
195
232
  readonly 'panels.market.checkUpdates': "检查更新";
233
+ readonly 'panels.market.checkAll': "检查全部更新";
196
234
  readonly 'panels.market.checkingNow': "正在检查…";
197
235
  readonly 'panels.market.checkFailed': "最近一次没查到,检查网络后重试";
198
236
  readonly 'panels.market.checkedAt': "最近检查:{time}";
237
+ readonly 'panels.market.latestPartial': "{n} 个模块没查成";
238
+ readonly 'panels.market.latestNoRegistry': "没配来源,未检查新版";
239
+ readonly 'panels.market.latestProbeFailed': "问不到源,稍后重试";
199
240
  readonly 'panels.market.justNow': "刚刚";
200
241
  readonly 'panels.market.minutesAgo': "{n} 分钟前";
201
242
  readonly 'panels.market.hoursAgo': "{n} 小时前";
@@ -254,6 +295,8 @@ export declare const zh: {
254
295
  readonly 'panels.market.add.failurePermission': "没有写入权限,无法安装";
255
296
  readonly 'panels.market.add.failureBuildBlocked': "有依赖的安装脚本需要你允许后才能继续";
256
297
  readonly 'panels.market.add.failureIntegrity': "下载的安装包校验失败";
298
+ readonly 'panels.market.add.failureStopProfile': "旧版还在用着(工作台正加载这个模块),这一版 dsh 不肯就地覆盖。";
299
+ readonly 'panels.market.add.failureCancelled': "这次操作被取消了,什么都没动。";
257
300
  readonly 'panels.market.add.failureTimeout': "安装超时";
258
301
  readonly 'panels.market.add.failurePnpmMissing': "没有找到 pnpm,无法安装";
259
302
  readonly 'panels.market.add.failureInstalled': "它已经装在这份工作台里了。同一个包不能就地覆盖,得先卸载再装;这次卸载也没成功。";
@@ -337,7 +380,7 @@ export declare const zh: {
337
380
  readonly 'panels.discover.missingIndex': "仓库里还没有索引文件 {path}";
338
381
  readonly 'panels.discover.initTitle': "把这个仓库初始化成模块市场索引?";
339
382
  readonly 'panels.discover.initCta': "初始化成市场索引";
340
- readonly 'panels.discover.initWhat': "会在 {branch} 分支写 market.json 与 README.md,提交一次并推上去;之后从这个工作台发布的模块会把打包好的文件提交到按包名分的 packages/<包名>/。仓库的写权限归它的所有者。";
383
+ readonly 'panels.discover.initWhat': "会在 {branch} 分支写索引目录 market/ 与 README.md,提交一次并推上去;之后从这个工作台发布的模块会把打包好的文件提交到 artifacts/<包名>/<版本>/,条目写到 market/<包名>/<版本>.json。仓库的写权限归它的所有者。";
341
384
  readonly 'panels.discover.initBranch': "分支";
342
385
  readonly 'panels.discover.initBranchHint': "索引和打包文件都发到这个分支;空仓库会新建它。";
343
386
  readonly 'panels.discover.initBranchBad': "分支名只能用字母、数字、点、下划线、斜杠或短横线";
@@ -660,6 +703,9 @@ export declare const zh: {
660
703
  readonly 'approval.record.noSwitch': "录完不会替你切回来(左栏底部会亮一条状态)";
661
704
  readonly 'approval.longTask.what': "要停的那次任务";
662
705
  readonly 'approval.longTask.signal': "停了只是让工作台发出中断信号 —— 这次任务怎么收尾由模块自己负责";
706
+ readonly 'approval.plugin.name': "插件";
707
+ readonly 'approval.plugin.command': "命令";
708
+ readonly 'approval.plugin.note': "agent 说";
663
709
  readonly 'approval.publish.module': "模块";
664
710
  readonly 'approval.publish.target': "目标";
665
711
  readonly 'approval.publish.version': "版本";
@@ -679,7 +725,7 @@ export declare const zh: {
679
725
  readonly 'approval.publish.artifacts': "打包文件";
680
726
  readonly 'approval.publish.index': "索引";
681
727
  readonly 'approval.publish.commits': "提交";
682
- readonly 'approval.publish.twoCommits': "打包文件 + market.json 两次提交,一次推送";
728
+ readonly 'approval.publish.twoCommits': "打包文件 + 条目文件两次提交,一次推送";
683
729
  readonly 'approval.publish.reading': "读取中…";
684
730
  readonly 'approval.publish.changelog': "{version} 的更新日志";
685
731
  readonly 'approval.publish.changelogPending': "{version} 这一版会写进更新日志,随包发布";