@dsh-workbench/shared 1.1.3 → 1.1.5
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.
- package/dist/api/host-write.d.ts +4 -1
- package/dist/api/workbench-client.d.ts +2 -0
- package/dist/components/ApprovalPlan.css +7 -8
- package/dist/config/constants.d.ts +4 -0
- package/dist/config/constants.js +4 -0
- package/dist/contract/approval.d.ts +4 -0
- package/dist/contract/approval.js +4 -0
- package/dist/contract/command.d.ts +33 -0
- package/dist/contract/command.js +1 -1
- package/dist/contract/needs.d.ts +17 -0
- package/dist/contract/needs.js +41 -1
- package/dist/contract/protocol/bundle-install.d.ts +4 -0
- package/dist/contract/protocol/market-index.d.ts +14 -0
- package/dist/contract/protocol/market-index.js +1 -0
- package/dist/contract/unit.d.ts +10 -0
- package/dist/host/adapter-types.d.ts +2 -0
- package/dist/host/data-error.d.ts +2 -0
- package/dist/host/data-error.js +3 -0
- package/dist/host/http.js +1 -0
- package/dist/host/install-failure.d.ts +49 -0
- package/dist/host/install-failure.js +167 -0
- package/dist/host/installed-sources.d.ts +10 -0
- package/dist/host/installed-sources.js +64 -0
- package/dist/host/lib-install.d.ts +12 -1
- package/dist/host/lib-install.js +33 -1
- package/dist/host/paths.d.ts +7 -0
- package/dist/host/paths.js +17 -0
- package/dist/host/runtime-links.d.ts +7 -0
- package/dist/host/runtime-links.js +25 -0
- package/dist/host/tool-approval.d.ts +4 -2
- package/dist/host/tool-approval.js +4 -2
- package/dist/host.d.ts +3 -0
- package/dist/host.js +3 -0
- package/dist/i18n/en.js +46 -1
- package/dist/i18n/index.d.ts +47 -2
- package/dist/i18n/zh.d.ts +46 -1
- package/dist/i18n/zh.js +46 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/package.json +1 -1
- package/src/api/host-write.ts +5 -1
- package/src/api/workbench-client.ts +2 -0
- package/src/components/ApprovalPlan.css +7 -8
- package/src/config/constants.ts +6 -0
- package/src/contract/__tests__/needs.test.ts +53 -0
- package/src/contract/approval.ts +4 -0
- package/src/contract/command.ts +22 -0
- package/src/contract/needs.ts +56 -1
- package/src/contract/protocol/bundle-install.ts +5 -0
- package/src/contract/protocol/market-index.ts +17 -0
- package/src/contract/unit.ts +11 -0
- package/src/host/adapter-types.ts +2 -0
- package/src/host/data-error.ts +3 -1
- package/src/host/http.ts +1 -0
- package/src/host/install-failure.test.ts +121 -0
- package/src/host/install-failure.ts +198 -0
- package/src/host/installed-sources.test.ts +80 -0
- package/src/host/installed-sources.ts +73 -0
- package/src/host/lib-install.ts +38 -2
- package/src/host/paths.test.ts +26 -0
- package/src/host/paths.ts +18 -0
- package/src/host/runtime-links.test.ts +31 -0
- package/src/host/runtime-links.ts +23 -0
- package/src/host/tool-approval.ts +11 -4
- package/src/host.ts +3 -0
- package/src/i18n/en.ts +47 -1
- package/src/i18n/zh.ts +47 -1
- package/src/index.ts +1 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
const FILE_NAME = '.dsh-workbench-sources.json';
|
|
4
|
+
const FILE_VERSION = 1;
|
|
5
|
+
function asRecord(value) {
|
|
6
|
+
return typeof value === 'object' && value !== null ? value : undefined;
|
|
7
|
+
}
|
|
8
|
+
function asText(value) {
|
|
9
|
+
return typeof value === 'string' ? value.trim() : '';
|
|
10
|
+
}
|
|
11
|
+
export function installedSourcesFile(profileDir) {
|
|
12
|
+
return path.join(profileDir, FILE_NAME);
|
|
13
|
+
}
|
|
14
|
+
export function readInstalledSources(profileDir) {
|
|
15
|
+
if (profileDir === null)
|
|
16
|
+
return {};
|
|
17
|
+
let parsed;
|
|
18
|
+
try {
|
|
19
|
+
parsed = JSON.parse(fs.readFileSync(installedSourcesFile(profileDir), 'utf8'));
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return {};
|
|
23
|
+
}
|
|
24
|
+
const packages = asRecord(asRecord(parsed)?.packages);
|
|
25
|
+
if (packages === undefined)
|
|
26
|
+
return {};
|
|
27
|
+
const found = {};
|
|
28
|
+
for (const [pkg, value] of Object.entries(packages)) {
|
|
29
|
+
const record = asRecord(value);
|
|
30
|
+
if (record === undefined)
|
|
31
|
+
continue;
|
|
32
|
+
const version = asText(record.version);
|
|
33
|
+
const registry = asText(record.registry);
|
|
34
|
+
if (pkg === '' || version === '' || registry === '')
|
|
35
|
+
continue;
|
|
36
|
+
found[pkg] = { version, registry };
|
|
37
|
+
}
|
|
38
|
+
return found;
|
|
39
|
+
}
|
|
40
|
+
export function packageSourceOf(profileDir, pkg) {
|
|
41
|
+
return readInstalledSources(profileDir)[pkg];
|
|
42
|
+
}
|
|
43
|
+
function writeInstalledSources(profileDir, sources) {
|
|
44
|
+
const file = installedSourcesFile(profileDir);
|
|
45
|
+
const temp = `${file}.tmp`;
|
|
46
|
+
const text = `${JSON.stringify({ version: FILE_VERSION, packages: sources }, null, 2)}\n`;
|
|
47
|
+
fs.writeFileSync(temp, text, { mode: 0o600 });
|
|
48
|
+
fs.renameSync(temp, file);
|
|
49
|
+
}
|
|
50
|
+
export function rememberPackageSource(profileDir, pkg, source) {
|
|
51
|
+
const trimmed = pkg.trim();
|
|
52
|
+
if (trimmed === '' || source.version.trim() === '' || source.registry.trim() === '')
|
|
53
|
+
return;
|
|
54
|
+
const all = { ...readInstalledSources(profileDir) };
|
|
55
|
+
all[trimmed] = { version: source.version.trim(), registry: source.registry.trim() };
|
|
56
|
+
writeInstalledSources(profileDir, all);
|
|
57
|
+
}
|
|
58
|
+
export function forgetPackageSource(profileDir, pkg) {
|
|
59
|
+
const all = { ...readInstalledSources(profileDir) };
|
|
60
|
+
if (all[pkg] === undefined)
|
|
61
|
+
return;
|
|
62
|
+
delete all[pkg];
|
|
63
|
+
writeInstalledSources(profileDir, all);
|
|
64
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { LibNeed, SupplySource } from '../contract/needs.js';
|
|
1
|
+
import type { BinNeed, LibNeed, SupplySource } from '../contract/needs.js';
|
|
2
|
+
import type { HostOs } from '../contract/protocol/platform.js';
|
|
2
3
|
export type NpmSource = Extract<SupplySource, {
|
|
3
4
|
kind: 'npm';
|
|
4
5
|
}>;
|
|
@@ -6,4 +7,14 @@ export declare function libInstallCommand(options: {
|
|
|
6
7
|
readonly need: LibNeed;
|
|
7
8
|
readonly source: NpmSource;
|
|
8
9
|
readonly version?: string | undefined;
|
|
10
|
+
readonly env?: NodeJS.ProcessEnv | undefined;
|
|
9
11
|
}): string;
|
|
12
|
+
/**
|
|
13
|
+
* 这个 bin 在这台机器上怎么装:作者写了 `install` 且平台对得上才给出那条命令。
|
|
14
|
+
* `command` 原样照抄;`npm` 装进隔离运行时的共用依赖前缀(那份包里的 bin 会自动上 PATH)。
|
|
15
|
+
* @param need 一条 bin 需要。
|
|
16
|
+
* @param os 宿主平台(由平台适配器给出)。
|
|
17
|
+
* @param env 取 registry 环境变量的地方。
|
|
18
|
+
* @returns 一条能直接粘进终端的命令;没声明或平台不对就是 undefined。
|
|
19
|
+
*/
|
|
20
|
+
export declare function binInstallCommand(need: BinNeed, os: HostOs, env?: NodeJS.ProcessEnv): string | undefined;
|
package/dist/host/lib-install.js
CHANGED
|
@@ -3,8 +3,40 @@ import { quoteShellArg } from './shell-text.js';
|
|
|
3
3
|
import { libsPrefix, npmCacheDir } from './paths.js';
|
|
4
4
|
export function libInstallCommand(options) {
|
|
5
5
|
const { need, source, version } = options;
|
|
6
|
-
const registry = npmRegistryOf(source, process.env);
|
|
6
|
+
const registry = npmRegistryOf(source, options.env ?? process.env);
|
|
7
7
|
const spec = version ?? need.version ?? 'latest';
|
|
8
8
|
const registryFlag = registry.ok ? ` --registry ${quoteShellArg(registry.value)}` : '';
|
|
9
9
|
return `npm i --prefix ${quoteShellArg(libsPrefix())} ${quoteShellArg(`${need.name}@${spec}`)}${registryFlag} --cache ${quoteShellArg(npmCacheDir())}`;
|
|
10
10
|
}
|
|
11
|
+
/**
|
|
12
|
+
* 这个 bin 在这台机器上怎么装:作者写了 `install` 且平台对得上才给出那条命令。
|
|
13
|
+
* `command` 原样照抄;`npm` 装进隔离运行时的共用依赖前缀(那份包里的 bin 会自动上 PATH)。
|
|
14
|
+
* @param need 一条 bin 需要。
|
|
15
|
+
* @param os 宿主平台(由平台适配器给出)。
|
|
16
|
+
* @param env 取 registry 环境变量的地方。
|
|
17
|
+
* @returns 一条能直接粘进终端的命令;没声明或平台不对就是 undefined。
|
|
18
|
+
*/
|
|
19
|
+
export function binInstallCommand(need, os, env = process.env) {
|
|
20
|
+
const install = need.install;
|
|
21
|
+
if (install === undefined)
|
|
22
|
+
return undefined;
|
|
23
|
+
if (install.platforms !== undefined && !install.platforms.includes(os))
|
|
24
|
+
return undefined;
|
|
25
|
+
if (install.kind === 'command') {
|
|
26
|
+
const line = install.line.trim();
|
|
27
|
+
return line === '' ? undefined : line;
|
|
28
|
+
}
|
|
29
|
+
const packageName = install.package.trim();
|
|
30
|
+
if (packageName === '')
|
|
31
|
+
return undefined;
|
|
32
|
+
return libInstallCommand({
|
|
33
|
+
need: { kind: 'lib', name: packageName, purpose: need.purpose },
|
|
34
|
+
source: {
|
|
35
|
+
kind: 'npm',
|
|
36
|
+
package: packageName,
|
|
37
|
+
...(install.registryEnv === undefined ? {} : { registryEnv: install.registryEnv }),
|
|
38
|
+
...(install.registryDefault === undefined ? {} : { registryDefault: install.registryDefault }),
|
|
39
|
+
},
|
|
40
|
+
env,
|
|
41
|
+
});
|
|
42
|
+
}
|
package/dist/host/paths.d.ts
CHANGED
|
@@ -10,3 +10,10 @@ export declare function vendorPeerLink(): {
|
|
|
10
10
|
readonly parent: string;
|
|
11
11
|
};
|
|
12
12
|
export declare function npmCacheDir(): string;
|
|
13
|
+
export declare function libsBinDir(): string;
|
|
14
|
+
/**
|
|
15
|
+
* 把隔离运行时的共用依赖 bin 目录放到 PATH 最前面(可执行文件都从这儿找)。
|
|
16
|
+
* @param env 改哪份环境(默认当前进程)。
|
|
17
|
+
* @returns 真的插进去了就 `true`;已经在里面就 `false`。
|
|
18
|
+
*/
|
|
19
|
+
export declare function ensureLibsBinOnPath(env?: NodeJS.ProcessEnv): boolean;
|
package/dist/host/paths.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { delimiter } from 'node:path';
|
|
1
2
|
import { workbenchRoot } from './data-root.js';
|
|
2
3
|
export function isolatedRoot() {
|
|
3
4
|
return `${workbenchRoot()}/opencli`;
|
|
@@ -26,3 +27,19 @@ export function vendorPeerLink() {
|
|
|
26
27
|
export function npmCacheDir() {
|
|
27
28
|
return `${isolatedRoot()}/npm-cache`;
|
|
28
29
|
}
|
|
30
|
+
export function libsBinDir() {
|
|
31
|
+
return `${libsPrefix()}/node_modules/.bin`;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* 把隔离运行时的共用依赖 bin 目录放到 PATH 最前面(可执行文件都从这儿找)。
|
|
35
|
+
* @param env 改哪份环境(默认当前进程)。
|
|
36
|
+
* @returns 真的插进去了就 `true`;已经在里面就 `false`。
|
|
37
|
+
*/
|
|
38
|
+
export function ensureLibsBinOnPath(env = process.env) {
|
|
39
|
+
const dir = libsBinDir();
|
|
40
|
+
const parts = (env.PATH ?? '').split(delimiter).filter((one) => one !== '');
|
|
41
|
+
if (parts.includes(dir))
|
|
42
|
+
return false;
|
|
43
|
+
env.PATH = [dir, ...parts].join(delimiter);
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 让共用依赖也能 import opencli:把隔离运行时里那份 opencli 链接到 libs 的 node_modules。
|
|
3
|
+
* 跑在 libs 里的命令(比如 opencli-workflow 带的 gitops)会按包名找 @jackwener/opencli,
|
|
4
|
+
* 找不到就起不来 —— 它不在 libs 的依赖里,是运行时提供的那一份。
|
|
5
|
+
* @returns 这次真的建了链接就 `true`;已经有了、或运行时那份还没装,就是 `false`。
|
|
6
|
+
*/
|
|
7
|
+
export declare function ensureLibsOpencliPeer(): boolean;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, symlinkSync } from 'node:fs';
|
|
2
|
+
import { dirname } from 'node:path';
|
|
3
|
+
import { OPENCLI_NPM_PACKAGE, libsPrefix, toolchainOpencliDir } from './paths.js';
|
|
4
|
+
/**
|
|
5
|
+
* 让共用依赖也能 import opencli:把隔离运行时里那份 opencli 链接到 libs 的 node_modules。
|
|
6
|
+
* 跑在 libs 里的命令(比如 opencli-workflow 带的 gitops)会按包名找 @jackwener/opencli,
|
|
7
|
+
* 找不到就起不来 —— 它不在 libs 的依赖里,是运行时提供的那一份。
|
|
8
|
+
* @returns 这次真的建了链接就 `true`;已经有了、或运行时那份还没装,就是 `false`。
|
|
9
|
+
*/
|
|
10
|
+
export function ensureLibsOpencliPeer() {
|
|
11
|
+
const link = `${libsPrefix()}/node_modules/${OPENCLI_NPM_PACKAGE}`;
|
|
12
|
+
if (existsSync(link))
|
|
13
|
+
return false;
|
|
14
|
+
const target = toolchainOpencliDir();
|
|
15
|
+
if (!existsSync(target))
|
|
16
|
+
return false;
|
|
17
|
+
try {
|
|
18
|
+
mkdirSync(dirname(link), { recursive: true });
|
|
19
|
+
symlinkSync(target, link);
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -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
|
|
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,
|
|
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
|
@@ -147,7 +147,42 @@ export const en = {
|
|
|
147
147
|
'panels.market.confirmUninstallAck': 'I understand: using it again means reinstalling it.',
|
|
148
148
|
'panels.market.confirmYes': 'Uninstall',
|
|
149
149
|
'panels.market.confirmNo': 'Cancel',
|
|
150
|
+
'panels.market.noMarketSource': 'The index has no newer version of this module (refresh the index and retry)',
|
|
150
151
|
'panels.market.failed': 'Failed: {reason}',
|
|
152
|
+
'panels.market.askAgent': 'Ask the agent',
|
|
153
|
+
'panels.market.askAgentCopied': 'Copied',
|
|
154
|
+
'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.',
|
|
155
|
+
'panels.market.failure.permission': "Didn't install: no write access",
|
|
156
|
+
'panels.market.failure.diskFull': "Didn't install: the disk is full",
|
|
157
|
+
'panels.market.failure.sandbox': "Didn't install: the system blocked it",
|
|
158
|
+
'panels.market.failure.unknown': "Didn't install: cause not recognised",
|
|
159
|
+
'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).',
|
|
160
|
+
'panels.market.failure.factMode': '{path} is mode {mode}, so this account cannot write to it.',
|
|
161
|
+
'panels.market.failure.factSpace': 'The disk holding {path} is full.',
|
|
162
|
+
'panels.market.failure.factStuck': 'This command ran in a restricted environment and cannot write to {path}.',
|
|
163
|
+
'panels.market.failure.nowhere': '(the directory was not identified)',
|
|
164
|
+
'panels.market.failure.copyFix': 'Copy the fix command',
|
|
165
|
+
'panels.market.failure.copied': 'Copied',
|
|
166
|
+
'panels.market.failure.copiedHint': 'Paste it in a terminal, run it, then click Check again.',
|
|
167
|
+
'panels.market.failure.askAgent': 'Copy for the agent',
|
|
168
|
+
'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.',
|
|
169
|
+
'panels.market.failure.askAgentHint': 'Paste it into the chat and let the agent carry on.',
|
|
170
|
+
'panels.market.failure.recheck': 'Check again',
|
|
171
|
+
'panels.market.failure.showOutput': 'Show install output',
|
|
172
|
+
'panels.market.failure.hideOutput': 'Hide install output',
|
|
173
|
+
'panels.market.failure.term.commandLine': 'command on line {line}',
|
|
174
|
+
'panels.market.failure.term.signal': 'killed by {signal}',
|
|
175
|
+
'panels.market.failure.term.exitCode': 'exit code {exitCode}',
|
|
176
|
+
'panels.market.failure.term.noExitCode': 'no exit code',
|
|
177
|
+
'panels.market.failure.term.running': 'running',
|
|
178
|
+
'panels.market.failure.term.failed': 'failed',
|
|
179
|
+
'panels.market.failure.term.done': 'done',
|
|
180
|
+
'panels.market.failure.term.copy': 'Copy',
|
|
181
|
+
'panels.market.failure.term.copied': 'Copied',
|
|
182
|
+
'panels.market.failure.term.noOutput': 'No output',
|
|
183
|
+
'panels.market.failure.term.collapse': 'Collapse',
|
|
184
|
+
'panels.market.failure.term.expandAria': 'Show the remaining {hidden} lines',
|
|
185
|
+
'panels.market.failure.term.expand': 'Show {hidden} lines',
|
|
151
186
|
'panels.market.needEnv': 'Set {env} in the terminal that started the workbench first',
|
|
152
187
|
'panels.market.needCommands': 'Missing commands: {commands}',
|
|
153
188
|
'panels.market.needBinary': 'Install the {command} command first',
|
|
@@ -183,9 +218,13 @@ export const en = {
|
|
|
183
218
|
'panels.market.pluginBroken': 'This plugin install is broken: it cannot be identified. Uninstall it first, then ask the agent to reinstall it by package name.',
|
|
184
219
|
'panels.market.restartNeeded': 'The new version is installed — restart once to pick it up.',
|
|
185
220
|
'panels.market.foot': 'After installing, enable it in the panel page of that project.',
|
|
186
|
-
'panels.market.recheck': 'Check for updates',
|
|
187
221
|
'panels.market.checkUpdates': 'Check for updates',
|
|
222
|
+
'panels.market.checkingNow': 'Checking…',
|
|
223
|
+
'panels.market.checkFailed': 'The last check failed. Check your connection and retry.',
|
|
188
224
|
'panels.market.checkedAt': 'Last checked: {time}',
|
|
225
|
+
'panels.market.latestPartial': 'Could not check {n} modules',
|
|
226
|
+
'panels.market.latestNoRegistry': 'No source configured — the latest version was not checked',
|
|
227
|
+
'panels.market.latestProbeFailed': 'Could not reach the source — try again later',
|
|
189
228
|
'panels.market.justNow': 'just now',
|
|
190
229
|
'panels.market.minutesAgo': '{n} min ago',
|
|
191
230
|
'panels.market.hoursAgo': '{n} h ago',
|
|
@@ -362,6 +401,9 @@ export const en = {
|
|
|
362
401
|
'panels.discover.transportTest': 'Test this address',
|
|
363
402
|
'panels.discover.transportPlaceholder': 'Or paste another address (mirror, alias)',
|
|
364
403
|
'panels.discover.transportNeedsAuth': 'This repository needs credentials: clone it once in a terminal, or set up an SSH key / credential helper, then install again.',
|
|
404
|
+
'panels.discover.transportChange': 'Change address',
|
|
405
|
+
'panels.discover.transportChangeHide': 'Hide',
|
|
406
|
+
'panels.discover.transportNone': 'No readable address',
|
|
365
407
|
'panels.discover.expand': 'Show versions',
|
|
366
408
|
'panels.discover.collapse': 'Hide versions',
|
|
367
409
|
'panels.discover.versionCount': '{n} versions',
|
|
@@ -647,6 +689,9 @@ export const en = {
|
|
|
647
689
|
'approval.record.noSwitch': 'it will not switch you back (the leftbar footer shows the state)',
|
|
648
690
|
'approval.longTask.what': 'Task to stop',
|
|
649
691
|
'approval.longTask.signal': 'stopping only sends an interrupt signal \u2014 wrapping up the run is up to the module',
|
|
692
|
+
'approval.plugin.name': 'Plugin',
|
|
693
|
+
'approval.plugin.command': 'Command',
|
|
694
|
+
'approval.plugin.note': 'Agent says',
|
|
650
695
|
'approval.publish.module': 'Module',
|
|
651
696
|
'approval.publish.target': 'Target',
|
|
652
697
|
'approval.publish.version': 'Version',
|
package/dist/i18n/index.d.ts
CHANGED
|
@@ -157,7 +157,42 @@ export declare const dictionaries: {
|
|
|
157
157
|
readonly 'panels.market.confirmUninstallAck': "我明白:卸载后想再用,得重新装一遍。";
|
|
158
158
|
readonly 'panels.market.confirmYes': "卸载";
|
|
159
159
|
readonly 'panels.market.confirmNo': "取消";
|
|
160
|
+
readonly 'panels.market.noMarketSource': "索引里没有这个模块的新版本(刷新一次索引再试)";
|
|
160
161
|
readonly 'panels.market.failed': "没成功:{reason}";
|
|
162
|
+
readonly 'panels.market.askAgent': "问 agent";
|
|
163
|
+
readonly 'panels.market.askAgentCopied': "已复制";
|
|
164
|
+
readonly 'panels.market.askAgentText': "工作台里「{name}」(单元 {unit})用不了:{reason}。帮我查清缺什么、怎么补,补完确认真能用。";
|
|
165
|
+
readonly 'panels.market.failure.permission': "没装上:没有写入权限";
|
|
166
|
+
readonly 'panels.market.failure.diskFull': "没装上:磁盘满了";
|
|
167
|
+
readonly 'panels.market.failure.sandbox': "没装上:被系统拦住了";
|
|
168
|
+
readonly 'panels.market.failure.unknown': "没装上:原因没认出来";
|
|
169
|
+
readonly 'panels.market.failure.factOwner': "{path} 属于 {owner},当前账号({me})写不进去。把它还给自己就行(会要开机密码)。";
|
|
170
|
+
readonly 'panels.market.failure.factMode': "{path} 的权限是 {mode},当前账号没有写权限。";
|
|
171
|
+
readonly 'panels.market.failure.factSpace': "{path} 所在的磁盘满了。";
|
|
172
|
+
readonly 'panels.market.failure.factStuck': "这条命令跑在受限环境里,写不进 {path}。";
|
|
173
|
+
readonly 'panels.market.failure.nowhere': "(没认出是哪个目录)";
|
|
174
|
+
readonly 'panels.market.failure.copyFix': "复制修复命令";
|
|
175
|
+
readonly 'panels.market.failure.copied': "已复制";
|
|
176
|
+
readonly 'panels.market.failure.copiedHint': "粘到终端跑一次,回来点「再检测」。";
|
|
177
|
+
readonly 'panels.market.failure.askAgent': "复制给 agent";
|
|
178
|
+
readonly 'panels.market.failure.askAgentText': "装这个模块时写不进去:`{command}` 退出码 {code},卡在 {path}。帮我看看是被沙箱拦的还是权限问题,换一条能写进去的路再装。";
|
|
179
|
+
readonly 'panels.market.failure.askAgentHint': "粘到对话里,让 agent 接着弄。";
|
|
180
|
+
readonly 'panels.market.failure.recheck': "再检测";
|
|
181
|
+
readonly 'panels.market.failure.showOutput': "查看安装输出";
|
|
182
|
+
readonly 'panels.market.failure.hideOutput': "收起安装输出";
|
|
183
|
+
readonly 'panels.market.failure.term.commandLine': "第 {line} 行的命令";
|
|
184
|
+
readonly 'panels.market.failure.term.signal': "被 {signal} 终止";
|
|
185
|
+
readonly 'panels.market.failure.term.exitCode': "退出码 {exitCode}";
|
|
186
|
+
readonly 'panels.market.failure.term.noExitCode': "没有退出码";
|
|
187
|
+
readonly 'panels.market.failure.term.running': "在跑";
|
|
188
|
+
readonly 'panels.market.failure.term.failed': "没跑通";
|
|
189
|
+
readonly 'panels.market.failure.term.done': "跑完了";
|
|
190
|
+
readonly 'panels.market.failure.term.copy': "复制";
|
|
191
|
+
readonly 'panels.market.failure.term.copied': "已复制";
|
|
192
|
+
readonly 'panels.market.failure.term.noOutput': "没有输出";
|
|
193
|
+
readonly 'panels.market.failure.term.collapse': "收起";
|
|
194
|
+
readonly 'panels.market.failure.term.expandAria': "展开剩下的 {hidden} 行";
|
|
195
|
+
readonly 'panels.market.failure.term.expand': "展开 {hidden} 行";
|
|
161
196
|
readonly 'panels.market.needEnv': "先在启动工作台的终端里设 {env}";
|
|
162
197
|
readonly 'panels.market.needCommands': "缺这几条命令:{commands}";
|
|
163
198
|
readonly 'panels.market.needBinary': "先装 {command} 命令";
|
|
@@ -193,9 +228,13 @@ export declare const dictionaries: {
|
|
|
193
228
|
readonly 'panels.market.pluginBroken': "这份插件装坏了:认不出它是什么。可以先卸载,再让 agent 按包名重装一次。";
|
|
194
229
|
readonly 'panels.market.restartNeeded': "新版装好了,重启一次才生效。";
|
|
195
230
|
readonly 'panels.market.foot': "装好后到那个项目的面板页勾选它,模块才会出现。";
|
|
196
|
-
readonly 'panels.market.recheck': "重新检查更新";
|
|
197
231
|
readonly 'panels.market.checkUpdates': "检查更新";
|
|
232
|
+
readonly 'panels.market.checkingNow': "正在检查…";
|
|
233
|
+
readonly 'panels.market.checkFailed': "最近一次没查到,检查网络后重试";
|
|
198
234
|
readonly 'panels.market.checkedAt': "最近检查:{time}";
|
|
235
|
+
readonly 'panels.market.latestPartial': "{n} 个模块没查成";
|
|
236
|
+
readonly 'panels.market.latestNoRegistry': "没配来源,未检查新版";
|
|
237
|
+
readonly 'panels.market.latestProbeFailed': "问不到源,稍后重试";
|
|
199
238
|
readonly 'panels.market.justNow': "刚刚";
|
|
200
239
|
readonly 'panels.market.minutesAgo': "{n} 分钟前";
|
|
201
240
|
readonly 'panels.market.hoursAgo': "{n} 小时前";
|
|
@@ -372,6 +411,9 @@ export declare const dictionaries: {
|
|
|
372
411
|
readonly 'panels.discover.transportTest': "试这个地址";
|
|
373
412
|
readonly 'panels.discover.transportPlaceholder': "或贴一个别的地址(公司镜像、别名)";
|
|
374
413
|
readonly 'panels.discover.transportNeedsAuth': "这个仓库要凭证:先在终端里把它 clone 一次,或配好 SSH key / 凭据助手;配好后再点安装。";
|
|
414
|
+
readonly 'panels.discover.transportChange': "换一个地址";
|
|
415
|
+
readonly 'panels.discover.transportChangeHide': "收起";
|
|
416
|
+
readonly 'panels.discover.transportNone': "没有可读的地址";
|
|
375
417
|
readonly 'panels.discover.expand': "展开版本";
|
|
376
418
|
readonly 'panels.discover.collapse': "收起版本";
|
|
377
419
|
readonly 'panels.discover.versionCount': "{n} 个版本";
|
|
@@ -657,6 +699,9 @@ export declare const dictionaries: {
|
|
|
657
699
|
readonly 'approval.record.noSwitch': "录完不会替你切回来(左栏底部会亮一条状态)";
|
|
658
700
|
readonly 'approval.longTask.what': "要停的那次任务";
|
|
659
701
|
readonly 'approval.longTask.signal': "停了只是让工作台发出中断信号 —— 这次任务怎么收尾由模块自己负责";
|
|
702
|
+
readonly 'approval.plugin.name': "插件";
|
|
703
|
+
readonly 'approval.plugin.command': "命令";
|
|
704
|
+
readonly 'approval.plugin.note': "agent 说";
|
|
660
705
|
readonly 'approval.publish.module': "模块";
|
|
661
706
|
readonly 'approval.publish.target': "目标";
|
|
662
707
|
readonly 'approval.publish.version': "版本";
|
|
@@ -752,7 +797,7 @@ export declare const dictionaries: {
|
|
|
752
797
|
readonly 'configSync.emptyProviders': "工作台还没有任何模型供应商 —— 去「配置同步」从某个 profile 把模型供应商那几行同步过来,或自己去「模型」里配。";
|
|
753
798
|
readonly 'configSync.failed': "同步没成功,再试一次。";
|
|
754
799
|
};
|
|
755
|
-
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.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.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.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.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>;
|
|
800
|
+
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.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.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.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>;
|
|
756
801
|
};
|
|
757
802
|
/** 中文词表的键类型(从 `zh.ts` 转出):`en` 与模块词表都得覆盖同一批键。 */
|
|
758
803
|
export type { WorkbenchMessages };
|