@dsh-workbench/core 0.2.1 → 0.2.3

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.
@@ -6,6 +6,7 @@ import { spawn } from "node:child_process";
6
6
  import { fileURLToPath } from "node:url";
7
7
  //#region ../shared/dist/config/constants.js
8
8
  var PLUGIN_ID = "@dsh-workbench/core";
9
+ var RELEASE_SIBLINGS = ["@dsh-workbench/shared", "@dsh-workbench/module-tools"];
9
10
  var API_PREFIX = "/workbench/api";
10
11
  var PREFS_PREFIX = `${API_PREFIX}/prefs`;
11
12
  var EVENTS_PATH = "/workbench/events";
@@ -2723,8 +2724,11 @@ function createRegistryNotebook(dir) {
2723
2724
  };
2724
2725
  }
2725
2726
  //#endregion
2726
- //#region src/shared/api/host/diy.ts
2727
+ //#region src/shared/api/diy.ts
2727
2728
  var WORKSHOP_RELATIVE = "workbench/diy";
2729
+ var WORKSHOP_TITLE = "工作台DIY";
2730
+ //#endregion
2731
+ //#region src/shared/api/host/diy.ts
2728
2732
  function workshopPathOf(ctx) {
2729
2733
  const homePath = ctx.get("dshHomePath");
2730
2734
  if (typeof homePath !== "function") return null;
@@ -3862,6 +3866,32 @@ async function latestVersion(options) {
3862
3866
  });
3863
3867
  return value;
3864
3868
  }
3869
+ var existsCache = /* @__PURE__ */ new Map();
3870
+ async function versionExists(options) {
3871
+ const { shell, name, version, registry, force = false } = options;
3872
+ const key = `${registry}|${name}@${version}`;
3873
+ const hit = existsCache.get(key);
3874
+ if (!force && hit !== void 0 && (hit.value || Date.now() - hit.at < 6e5)) return hit.value;
3875
+ const result = await runShell(shell, `npm view ${quoteShellArg(`${name}@${version}`)} version --registry ${quoteShellArg(registry)} --cache ${quoteShellArg(npmCacheDir())}`, { timeoutMs: VERSION_CHECK_TIMEOUT_MS }).catch(() => void 0);
3876
+ const value = result?.exitCode === 0 && parseVersion(result.stdout) !== void 0;
3877
+ existsCache.set(key, {
3878
+ at: Date.now(),
3879
+ value
3880
+ });
3881
+ return value;
3882
+ }
3883
+ async function missingReleaseParts(options) {
3884
+ const { shell, registry, version, force = false } = options;
3885
+ const missing = [];
3886
+ for (const name of RELEASE_SIBLINGS) if (!await versionExists({
3887
+ shell,
3888
+ name,
3889
+ version,
3890
+ registry,
3891
+ force
3892
+ })) missing.push(name);
3893
+ return missing;
3894
+ }
3865
3895
  async function probeRelease(options) {
3866
3896
  const { shell, package: pkg, registry, force = false } = options;
3867
3897
  if (pkg === "") return void 0;
@@ -4326,13 +4356,39 @@ function outcomeOf(deps, pkg, change, plugin) {
4326
4356
  };
4327
4357
  }
4328
4358
  async function installDshBundle(deps, spec, options) {
4329
- const change = await deps.manager.install({
4330
- spec,
4359
+ return settle(deps, spec, options, await installOnce(deps, spec, options));
4360
+ }
4361
+ async function replaceDshBundle(deps, spec, options) {
4362
+ const first = await installOnce(deps, spec, options);
4363
+ if (first.errorCode !== "already-installed") return settle(deps, spec, options, first);
4364
+ const pkg = bundleNameOf(first, spec);
4365
+ const removed = await deps.remove(pkg);
4366
+ if (removed.application !== "applied") return {
4367
+ change: removed,
4368
+ module: deps.installed?.(pkg) ?? {
4369
+ kind: "unknown",
4370
+ pkg
4371
+ },
4372
+ supply: { state: "no-needs" }
4373
+ };
4374
+ return settle(deps, spec, options, await installOnce(deps, spec, options));
4375
+ }
4376
+ function installOptions(options) {
4377
+ return {
4331
4378
  ...options?.registry === void 0 ? {} : { registry: options.registry },
4332
4379
  ...options?.requestId === void 0 ? {} : { requestId: options.requestId },
4333
4380
  ...options?.approvedBuilds === void 0 ? {} : { approvedBuilds: options.approvedBuilds }
4381
+ };
4382
+ }
4383
+ async function installOnce(deps, spec, options) {
4384
+ const change = await deps.manager.install({
4385
+ spec,
4386
+ ...installOptions(options)
4334
4387
  });
4335
4388
  if (change === null) throw new Error("插件管理器回的安装结果看不懂。");
4389
+ return change;
4390
+ }
4391
+ async function settle(deps, spec, options, change) {
4336
4392
  const pkg = bundleNameOf(change, spec);
4337
4393
  const module = deps.installed?.(pkg) ?? {
4338
4394
  kind: "unknown",
@@ -4786,6 +4842,11 @@ function createMarketService(options) {
4786
4842
  ...registries === void 0 ? {} : { registries },
4787
4843
  ...logger === void 0 ? {} : { logger }
4788
4844
  };
4845
+ async function removeInstalledBundle(manager, pkg) {
4846
+ const first = await manager.remove(pkg);
4847
+ if (first === null) throw new Error("插件管理器回的卸载结果看不懂。");
4848
+ return retryAfterRegistryFix(registryFix, manager, pkg, first);
4849
+ }
4789
4850
  function routeDeps(manager) {
4790
4851
  return {
4791
4852
  manager,
@@ -4793,6 +4854,7 @@ function createMarketService(options) {
4793
4854
  runAll,
4794
4855
  rememberSource: (manager, pkg, registry) => rememberInstalledSource(registryFix, manager, pkg, registry),
4795
4856
  supplyAfter,
4857
+ remove: (pkg) => removeInstalledBundle(manager, pkg),
4796
4858
  ...shell === void 0 ? {} : { shell },
4797
4859
  ...installed === void 0 ? {} : { installed },
4798
4860
  ...ledger === void 0 ? {} : { ledger },
@@ -4935,9 +4997,7 @@ function createMarketService(options) {
4935
4997
  const unit = module.kind === "module" ? module.unit : void 0;
4936
4998
  const manifest = unit === void 0 ? void 0 : catalog().find((item) => item.id === unit);
4937
4999
  const before = unit === void 0 ? void 0 : await capabilityOf(unit, true);
4938
- const first = await manager.remove(pkg);
4939
- if (first === null) throw new Error("插件管理器回的卸载结果看不懂。");
4940
- const change = await retryAfterRegistryFix(registryFix, manager, pkg, first);
5000
+ const change = await removeInstalledBundle(manager, pkg);
4941
5001
  if (change.application !== "applied" || unit === void 0) return {
4942
5002
  change,
4943
5003
  keptFor: []
@@ -4954,8 +5014,10 @@ function createMarketService(options) {
4954
5014
  return requireBundles().cancel(requestId);
4955
5015
  },
4956
5016
  async updateBundle(unit) {
4957
- const pkg = (modules?.() ?? []).find((item) => item.unit === unit)?.pkg;
4958
- if (pkg === void 0) return null;
5017
+ const found = (modules?.() ?? []).find((item) => item.unit === unit);
5018
+ if (found === void 0) return null;
5019
+ if (found.local === true) throw new Error(`这份模块装的是本地那一份(${found.pkg}),不从源上更新 —— 要更新先把它换成源上的版本。`);
5020
+ const pkg = found.pkg;
4959
5021
  const read = installed?.(pkg) ?? {
4960
5022
  kind: "unknown",
4961
5023
  pkg
@@ -4968,7 +5030,7 @@ function createMarketService(options) {
4968
5030
  force: true
4969
5031
  });
4970
5032
  const spec = latest === void 0 ? pkg : `${pkg}@${latest}`;
4971
- const outcome = await installDshBundle(routeDeps(requireBundles()), spec, { ...registry === void 0 ? {} : { registry } });
5033
+ const outcome = await replaceDshBundle(routeDeps(requireBundles()), spec, { ...registry === void 0 ? {} : { registry } });
4972
5034
  await plugins.sweep();
4973
5035
  await service.update(unit).catch(() => void 0);
4974
5036
  return outcome;
@@ -4986,8 +5048,17 @@ function createMarketService(options) {
4986
5048
  registry,
4987
5049
  force: true
4988
5050
  });
5051
+ if (shell !== void 0 && registry !== void 0 && latest !== void 0) {
5052
+ const missing = await missingReleaseParts({
5053
+ shell,
5054
+ registry,
5055
+ version: latest,
5056
+ force: true
5057
+ });
5058
+ if (missing.length > 0) throw new Error(`源上已经有 ${read.pkg}@${latest},但这一份发布还没铺齐:${missing.join("、")} 在这一版上还拉不到。装上会缺依赖,稍等再试 —— 市场页那颗「重新检查」会重新探一次。`);
5059
+ }
4989
5060
  const spec = latest === void 0 ? `${read.pkg}@latest` : `${read.pkg}@${latest}`;
4990
- const outcome = await installDshBundle(routeDeps(requireBundles()), spec, { ...registry === void 0 ? {} : { registry } });
5061
+ const outcome = await replaceDshBundle(routeDeps(requireBundles()), spec, { ...registry === void 0 ? {} : { registry } });
4991
5062
  logger?.info?.(`[dsh-workbench] 已更新工作台 ${read.version} → ${latest ?? "最新版"}`);
4992
5063
  return outcome;
4993
5064
  },
@@ -5126,8 +5197,19 @@ function render$1(entries, shared) {
5126
5197
  if (shared.length === 0) return modules;
5127
5198
  return `${modules}\n\n共用依赖(只有升级):\n${shared.map((dep) => `${dep.id} · ${stateOfDependency(dep)}${versionsOf(dep)}` + (dep.usedBy.length === 0 ? "" : ` · 供 ${dep.usedBy.join("、")} 使用`)).join("\n")}`;
5128
5199
  }
5200
+ var REMOVE_BLOCKED = /* @__PURE__ */ new Set([
5201
+ "not-removable",
5202
+ "management-required",
5203
+ "stop-profile",
5204
+ "bundle-in-use"
5205
+ ]);
5206
+ function failureText(change) {
5207
+ const code = change.errorCode ?? change.application;
5208
+ if (code === "already-installed") return "它已经在这份 profile 里,而这次没能把它卸下来(这一版 dsh 不肯就地覆盖装,得先卸再装)";
5209
+ return REMOVE_BLOCKED.has(code) ? "旧版卸不掉,而这一版 dsh 又不许就地覆盖装 —— 让用户重启一次 dsh,或者从终端更新" : code;
5210
+ }
5129
5211
  function describeInstall(spec, module, supply, change) {
5130
- return `${change.application === "applied" ? "装好了,已生效" : change.application === "restart-required" ? "装好了,要重启一次才生效" : `没成功:${change.errorCode ?? change.application}`}:${module.kind === "module" ? `${module.unit}(${module.pkg})` : module.pkg}${supply.state === "installed" ? ";它要的 opencli 插件也装上了" : supply.state === "pending-restart" ? ";重启后再装它要的 opencli 插件" : supply.state === "not-a-module" ? ";但它不是工作台模块(没有 dsh.workbench 声明,不会出现在面板上)" : supply.state === "failed" ? `;但它要的插件没装上:${supply.reason}` : ""}(spec:${spec})`;
5212
+ return `${change.application === "applied" ? "装好了,已生效" : change.application === "restart-required" ? "装好了,要重启一次才生效" : `没成功:${failureText(change)}`}:${module.kind === "module" ? `${module.unit}(${module.pkg})` : module.pkg}${supply.state === "installed" ? ";它要的 opencli 插件也装上了" : supply.state === "pending-restart" ? ";重启后再装它要的 opencli 插件" : supply.state === "not-a-module" ? ";但它不是工作台模块(没有 dsh.workbench 声明,不会出现在面板上)" : supply.state === "failed" ? `;但它要的插件没装上:${supply.reason}` : ""}(spec:${spec})`;
5131
5213
  }
5132
5214
  var OUTPUT_SCHEMA$1 = {
5133
5215
  type: "object",
@@ -5155,7 +5237,7 @@ function describePluginUninstall(pkg, outcome) {
5155
5237
  return `已从「你装的插件」里去掉 ${pkg}。${outcome.kept === void 0 ? "" : pluginKeptText(outcome.kept)}`;
5156
5238
  }
5157
5239
  function describeWorkbenchUpdate(change) {
5158
- if (change.application === "failed" || change.application === "cancelled") return `没成功:${change.errorCode ?? change.application}`;
5240
+ if (change.application === "failed" || change.application === "cancelled") return `没成功:${failureText(change)}`;
5159
5241
  return change.application === "restart-required" ? "工作台更新到新版了 —— 这一版要重启一次 dsh 才生效(重启由用户来,别自己重启)。" : "工作台更新到新版了 —— 客户端与宿主自己换上,不用重启。";
5160
5242
  }
5161
5243
  function usersOf(shared, names) {
@@ -6283,17 +6365,43 @@ function bundleRegistriesHandler(ctx) {
6283
6365
  };
6284
6366
  }
6285
6367
  var refusalLog = /* @__PURE__ */ new Map();
6368
+ var holdLog = /* @__PURE__ */ new Map();
6369
+ async function latestIfReleaseReady(input) {
6370
+ const missing = await missingReleaseParts({
6371
+ shell: input.shell,
6372
+ registry: input.registry,
6373
+ version: input.version,
6374
+ force: input.force
6375
+ });
6376
+ if (missing.length === 0) {
6377
+ holdLog.delete(input.pkg);
6378
+ return input.version;
6379
+ }
6380
+ const line = `${input.version}|${missing.join("、")}`;
6381
+ if (holdLog.get(input.pkg) !== line) {
6382
+ holdLog.set(input.pkg, line);
6383
+ input.logger?.warn?.(`[dsh-workbench] 源上已经有 ${input.pkg}@${input.version},但这一份发布还没铺齐(${missing.join("、")} 在这个版本上还拉不到)—— 先不提示更新;等铺齐或点「重新检查」。`);
6384
+ }
6385
+ }
6286
6386
  async function workbenchVersion(input) {
6287
6387
  const read = readProfilePackage(input.dir, PLUGIN_ID);
6288
6388
  if (read === void 0) return void 0;
6289
6389
  const registry = read.registry ?? input.fallback;
6290
- const queried = read.local === true || input.shell === void 0 || registry === void 0 ? void 0 : await latestVersion({
6291
- shell: input.shell,
6390
+ const shell = input.shell;
6391
+ const queried = read.local === true || shell === void 0 || registry === void 0 ? void 0 : await latestVersion({
6392
+ shell,
6292
6393
  name: read.pkg,
6293
6394
  registry,
6294
6395
  force: input.force
6295
6396
  });
6296
- const latest = queried !== void 0 && isNewerVersion(queried, read.version) ? queried : void 0;
6397
+ const latest = queried === void 0 || shell === void 0 || registry === void 0 || !isNewerVersion(queried, read.version) ? void 0 : await latestIfReleaseReady({
6398
+ pkg: read.pkg,
6399
+ version: queried,
6400
+ registry,
6401
+ shell,
6402
+ force: input.force,
6403
+ logger: input.logger
6404
+ });
6297
6405
  return {
6298
6406
  pkg: read.pkg,
6299
6407
  installed: read.version,
@@ -6345,7 +6453,8 @@ function moduleVersionsHandler(ctx, shell) {
6345
6453
  dir,
6346
6454
  shell,
6347
6455
  fallback,
6348
- force
6456
+ force,
6457
+ logger: ctx.logger
6349
6458
  });
6350
6459
  return {
6351
6460
  ok: true,
@@ -6436,9 +6545,6 @@ function bundleInspectHandler(ctx) {
6436
6545
  };
6437
6546
  }
6438
6547
  //#endregion
6439
- //#region src/shared/api/diy.ts
6440
- var WORKSHOP_TITLE = "工作台DIY";
6441
- //#endregion
6442
6548
  //#region src/shared/api/dsh-plugins.ts
6443
6549
  var DSH_PLUGINS_ROUTE = "dsh-plugins";
6444
6550
  //#endregion
@@ -152,6 +152,7 @@ export declare const kit: {
152
152
  IconModules({ size }: apiModule.IconProps): JSX.Element;
153
153
  IconPanelScreen({ size }: apiModule.IconProps): JSX.Element;
154
154
  PLUGIN_ID: "@dsh-workbench/core";
155
+ RELEASE_SIBLINGS: readonly ["@dsh-workbench/shared", "@dsh-workbench/module-tools"];
155
156
  API_PREFIX: "/workbench/api";
156
157
  PREFS_PREFIX: "/workbench/api/prefs";
157
158
  EVENTS_PATH: "/workbench/events";
@@ -203,6 +204,8 @@ export declare const kit: {
203
204
  readonly "project.search.label": "\u641C\u7D22\u5DE5\u4F5C\u533A";
204
205
  readonly "project.search.placeholder": "\u641C\u7D22\u5DE5\u4F5C\u533A\uFF08\u76EE\u5F55\u540D / \u4E2D\u6587\u540D / \u8DEF\u5F84\uFF09";
205
206
  readonly "project.search.empty": "\u6CA1\u6709\u5339\u914D\u300C{query}\u300D\u7684\u5DE5\u4F5C\u533A\u3002";
207
+ readonly "project.group.workspaces": "\u5DE5\u4F5C\u533A";
208
+ readonly "project.group.workshop": "\u5DE5\u574A";
206
209
  readonly "project.rename.row": "\u6539\u300C{name}\u300D\u7684\u4E2D\u6587\u540D";
207
210
  readonly "project.rename.current": "\u6539\u5F53\u524D\u5DE5\u4F5C\u533A\u7684\u4E2D\u6587\u540D\u2026";
208
211
  readonly "project.rename.title": "\u7ED9\u300C{name}\u300D\u914D\u4E00\u4E2A\u4E2D\u6587\u540D";
@@ -377,6 +380,7 @@ export declare const kit: {
377
380
  readonly "panels.market.add.failureIntegrity": "\u4E0B\u8F7D\u7684\u5B89\u88C5\u5305\u6821\u9A8C\u5931\u8D25";
378
381
  readonly "panels.market.add.failureTimeout": "\u5B89\u88C5\u8D85\u65F6";
379
382
  readonly "panels.market.add.failurePnpmMissing": "\u6CA1\u6709\u627E\u5230 pnpm\uFF0C\u65E0\u6CD5\u5B89\u88C5";
383
+ readonly "panels.market.add.failureInstalled": "\u5B83\u5DF2\u7ECF\u5728\u8FD9\u4EFD profile \u91CC\u4E86\uFF1A\u8FD9\u4E00\u7248 dsh \u5F00\u7740\u70ED\u66F4\u65B0\uFF0C\u540C\u4E00\u4E2A\u5305\u4E0D\u8BB8\u5C31\u5730\u8986\u76D6\u88C5\uFF08\u5F97\u5148\u5378\u8F7D\u518D\u88C5\uFF09\uFF0C\u800C\u8FD9\u6B21\u4E5F\u6CA1\u80FD\u628A\u5B83\u5378\u4E0B\u6765";
380
384
  readonly "panels.market.add.failureGeneric": "\u5B89\u88C5\u8FC7\u7A0B\u4E2D\u51FA\u9519\uFF0C\u539F\u56E0\u89C1\u5B89\u88C5\u8BE6\u60C5";
381
385
  readonly "panels.market.add.approveTitle": "\u9700\u8981\u4F60\u5141\u8BB8\u5B89\u88C5\u811A\u672C";
382
386
  readonly "panels.market.add.approveCaution": "\u53EA\u5141\u8BB8\u4F60\u4FE1\u5F97\u8FC7\u7684\u5305\uFF1A\u5B89\u88C5\u811A\u672C\u4F1A\u4EE5\u4F60\u7684\u6743\u9650\u5728\u8FD9\u53F0\u673A\u5668\u4E0A\u8FD0\u884C\u3002";
@@ -532,7 +536,7 @@ export declare const kit: {
532
536
  readonly "panel.conversation": "\u5BF9\u8BDD";
533
537
  readonly "panels.label": "\u5168\u5C40\u9762\u677F";
534
538
  };
535
- en: Record<"time.now" | "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.fix.update" | "blocker.market.open" | "env.unit.failed" | "env.unit.failedHint" | "env.unit.missingPlugin" | "env.unit.hint" | "env.unit.missingCommands" | "env.unit.missingCommandsHint" | "env.unit.unchecked" | "env.unit.uncheckedHint" | "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.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.pinned" | "session.actions" | "status.idle" | "status.running" | "status.waitingApproval" | "status.planReview" | "status.waitingAnswer" | "status.completed" | "status.subagentsRunning.one" | "status.subagentsRunning.other" | "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.dep.failed" | "panels.dep.missingPlugin" | "panels.dep.missingCommands" | "panels.dep.unchecked" | "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.missing" | "panels.market.unchecked" | "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.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.localMark" | "panels.market.localHint" | "panels.market.noSource" | "panels.market.badSource" | "panels.market.empty" | "panels.market.sectionPlugins" | "panels.market.moduleOutdated" | "panels.market.moduleRefused" | "panels.market.moduleRefusedDetail" | "panels.market.moduleRestartHint" | "panels.market.workbenchName" | "panels.market.workbenchLocal" | "panels.market.pluginKeptInUse" | "panels.market.pluginKeptUnsure" | "panels.market.pluginKeptHeld" | "panels.market.pluginKeptUnnamed" | "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.failureGeneric" | "panels.market.add.approveTitle" | "panels.market.add.approveCaution" | "panels.market.add.approveRun" | "panels.market.add.restart" | "panels.market.add.tookEffect" | "panels.market.add.details" | "panels.market.add.open" | "panels.market.add.title" | "panels.market.add.intro" | "panels.market.add.specLabel" | "panels.market.add.specHint" | "panels.market.add.exampleTitle" | "panels.market.add.exampleFill" | "panels.market.add.registryLabel" | "panels.market.add.registryProfile" | "panels.market.add.registryPnpm" | "panels.market.add.check" | "panels.market.add.checking" | "panels.market.add.classifying" | "panels.market.add.change" | "panels.market.add.previewTitle" | "panels.market.add.fieldName" | "panels.market.add.fieldVersion" | "panels.market.add.fieldDescription" | "panels.market.add.fieldSource" | "panels.market.add.install" | "panels.market.add.installing" | "panels.market.add.cancel" | "panels.market.add.close" | "panels.market.add.retry" | "panels.market.add.changeSource" | "panels.market.add.approveBuilds" | "panels.market.add.approveHint" | "panels.market.add.doneApplied" | "panels.market.add.doneRestart" | "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.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.bridge.ok" | "env.bridge.short" | "env.bridge.why" | "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.copyCommand" | "env.copied" | "env.step.opencli" | "env.step.codingPlugin" | "env.step.bridge" | "env.step.warm" | "env.warm.done" | "env.warm.short" | "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" | "coding.notARepo.title" | "error.unknown" | "board.title" | "panel.conversation" | "panels.label", string>;
539
+ en: Record<"time.now" | "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.fix.update" | "blocker.market.open" | "env.unit.failed" | "env.unit.failedHint" | "env.unit.missingPlugin" | "env.unit.hint" | "env.unit.missingCommands" | "env.unit.missingCommandsHint" | "env.unit.unchecked" | "env.unit.uncheckedHint" | "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.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.pinned" | "session.actions" | "status.idle" | "status.running" | "status.waitingApproval" | "status.planReview" | "status.waitingAnswer" | "status.completed" | "status.subagentsRunning.one" | "status.subagentsRunning.other" | "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.dep.failed" | "panels.dep.missingPlugin" | "panels.dep.missingCommands" | "panels.dep.unchecked" | "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.missing" | "panels.market.unchecked" | "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.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.localMark" | "panels.market.localHint" | "panels.market.noSource" | "panels.market.badSource" | "panels.market.empty" | "panels.market.sectionPlugins" | "panels.market.moduleOutdated" | "panels.market.moduleRefused" | "panels.market.moduleRefusedDetail" | "panels.market.moduleRestartHint" | "panels.market.workbenchName" | "panels.market.workbenchLocal" | "panels.market.pluginKeptInUse" | "panels.market.pluginKeptUnsure" | "panels.market.pluginKeptHeld" | "panels.market.pluginKeptUnnamed" | "panels.market.pluginBroken" | "panels.market.restartNeeded" | "panels.market.foot" | "panels.market.recheck" | "panels.market.checkUpdates" | "panels.market.checkedAt" | "panels.market.justNow" | "panels.market.minutesAgo" | "panels.market.hoursAgo" | "panels.market.add.description" | "panels.market.add.specPlaceholder" | "panels.market.add.guideToggle" | "panels.market.add.guideHide" | "panels.market.add.guideIdTitle" | "panels.market.add.guideIdExample" | "panels.market.add.guideIdHint" | "panels.market.add.guideGitTitle" | "panels.market.add.guideGitExample" | "panels.market.add.guideGitHint" | "panels.market.add.guidePathTitle" | "panels.market.add.guidePathExample" | "panels.market.add.guidePathHint" | "panels.market.add.guideExampleLabel" | "panels.market.add.guideFill" | "panels.market.add.guideSafety" | "panels.market.add.registryLegend" | "panels.market.add.registryOfficial" | "panels.market.add.registryMirror" | "panels.market.add.registryWithHost" | "panels.market.add.registryToggle" | "panels.market.add.installVersion" | "panels.market.add.registryDefault" | "panels.market.add.registryCustom" | "panels.market.add.registryCustomPlaceholder" | "panels.market.add.registryCustomHint" | "panels.market.add.registryCustomInvalid" | "panels.market.add.run" | "panels.market.add.edit" | "panels.market.add.changeRegistry" | "panels.market.add.installingTitle" | "panels.market.add.installedTitle" | "panels.market.add.failedTitle" | "panels.market.add.cancelledTitle" | "panels.market.add.failureNetworkHost" | "panels.market.add.problemInvalid" | "panels.market.add.problemInstalled" | "panels.market.add.problemNotFound" | "panels.market.add.problemNotPackage" | "panels.market.add.problemNotBundle" | "panels.market.add.problemNotWorkbenchModule" | "panels.market.add.problemNotModuleOrPlugin" | "panels.market.add.failureNotModuleOrPlugin" | "panels.market.add.installedPlugin" | "panels.market.add.pluginPreview" | "panels.market.add.pluginAlias" | "panels.market.add.problemNetwork" | "panels.market.add.problemUnknown" | "panels.market.add.failureNetwork" | "panels.market.add.failureNotFound" | "panels.market.add.failureNoMatchingVersion" | "panels.market.add.failureDiskFull" | "panels.market.add.failurePermission" | "panels.market.add.failureBuildBlocked" | "panels.market.add.failureIntegrity" | "panels.market.add.failureTimeout" | "panels.market.add.failurePnpmMissing" | "panels.market.add.failureInstalled" | "panels.market.add.failureGeneric" | "panels.market.add.approveTitle" | "panels.market.add.approveCaution" | "panels.market.add.approveRun" | "panels.market.add.restart" | "panels.market.add.tookEffect" | "panels.market.add.details" | "panels.market.add.open" | "panels.market.add.title" | "panels.market.add.intro" | "panels.market.add.specLabel" | "panels.market.add.specHint" | "panels.market.add.exampleTitle" | "panels.market.add.exampleFill" | "panels.market.add.registryLabel" | "panels.market.add.registryProfile" | "panels.market.add.registryPnpm" | "panels.market.add.check" | "panels.market.add.checking" | "panels.market.add.classifying" | "panels.market.add.change" | "panels.market.add.previewTitle" | "panels.market.add.fieldName" | "panels.market.add.fieldVersion" | "panels.market.add.fieldDescription" | "panels.market.add.fieldSource" | "panels.market.add.install" | "panels.market.add.installing" | "panels.market.add.cancel" | "panels.market.add.close" | "panels.market.add.retry" | "panels.market.add.changeSource" | "panels.market.add.approveBuilds" | "panels.market.add.approveHint" | "panels.market.add.doneApplied" | "panels.market.add.doneRestart" | "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.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.bridge.ok" | "env.bridge.short" | "env.bridge.why" | "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.copyCommand" | "env.copied" | "env.step.opencli" | "env.step.codingPlugin" | "env.step.bridge" | "env.step.warm" | "env.warm.done" | "env.warm.short" | "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" | "coding.notARepo.title" | "error.unknown" | "board.title" | "panel.conversation" | "panels.label", string>;
536
540
  };
537
541
  mergeMessages(base: apiModule.Dictionaries, contributions: readonly MessagesContribution[]): apiModule.Dictionaries;
538
542
  mergeMessagesSkipping(base: apiModule.Dictionaries, contributions: readonly MessagesContribution[]): apiModule.MessagesMerge;
@@ -550,6 +554,8 @@ export declare const kit: {
550
554
  readonly "project.search.label": "\u641C\u7D22\u5DE5\u4F5C\u533A";
551
555
  readonly "project.search.placeholder": "\u641C\u7D22\u5DE5\u4F5C\u533A\uFF08\u76EE\u5F55\u540D / \u4E2D\u6587\u540D / \u8DEF\u5F84\uFF09";
552
556
  readonly "project.search.empty": "\u6CA1\u6709\u5339\u914D\u300C{query}\u300D\u7684\u5DE5\u4F5C\u533A\u3002";
557
+ readonly "project.group.workspaces": "\u5DE5\u4F5C\u533A";
558
+ readonly "project.group.workshop": "\u5DE5\u574A";
553
559
  readonly "project.rename.row": "\u6539\u300C{name}\u300D\u7684\u4E2D\u6587\u540D";
554
560
  readonly "project.rename.current": "\u6539\u5F53\u524D\u5DE5\u4F5C\u533A\u7684\u4E2D\u6587\u540D\u2026";
555
561
  readonly "project.rename.title": "\u7ED9\u300C{name}\u300D\u914D\u4E00\u4E2A\u4E2D\u6587\u540D";
@@ -724,6 +730,7 @@ export declare const kit: {
724
730
  readonly "panels.market.add.failureIntegrity": "\u4E0B\u8F7D\u7684\u5B89\u88C5\u5305\u6821\u9A8C\u5931\u8D25";
725
731
  readonly "panels.market.add.failureTimeout": "\u5B89\u88C5\u8D85\u65F6";
726
732
  readonly "panels.market.add.failurePnpmMissing": "\u6CA1\u6709\u627E\u5230 pnpm\uFF0C\u65E0\u6CD5\u5B89\u88C5";
733
+ readonly "panels.market.add.failureInstalled": "\u5B83\u5DF2\u7ECF\u5728\u8FD9\u4EFD profile \u91CC\u4E86\uFF1A\u8FD9\u4E00\u7248 dsh \u5F00\u7740\u70ED\u66F4\u65B0\uFF0C\u540C\u4E00\u4E2A\u5305\u4E0D\u8BB8\u5C31\u5730\u8986\u76D6\u88C5\uFF08\u5F97\u5148\u5378\u8F7D\u518D\u88C5\uFF09\uFF0C\u800C\u8FD9\u6B21\u4E5F\u6CA1\u80FD\u628A\u5B83\u5378\u4E0B\u6765";
727
734
  readonly "panels.market.add.failureGeneric": "\u5B89\u88C5\u8FC7\u7A0B\u4E2D\u51FA\u9519\uFF0C\u539F\u56E0\u89C1\u5B89\u88C5\u8BE6\u60C5";
728
735
  readonly "panels.market.add.approveTitle": "\u9700\u8981\u4F60\u5141\u8BB8\u5B89\u88C5\u811A\u672C";
729
736
  readonly "panels.market.add.approveCaution": "\u53EA\u5141\u8BB8\u4F60\u4FE1\u5F97\u8FC7\u7684\u5305\uFF1A\u5B89\u88C5\u811A\u672C\u4F1A\u4EE5\u4F60\u7684\u6743\u9650\u5728\u8FD9\u53F0\u673A\u5668\u4E0A\u8FD0\u884C\u3002";
@@ -1009,6 +1016,7 @@ export declare const kit: {
1009
1016
  IconModules({ size }: apiModule.IconProps): JSX.Element;
1010
1017
  IconPanelScreen({ size }: apiModule.IconProps): JSX.Element;
1011
1018
  PLUGIN_ID: "@dsh-workbench/core";
1019
+ RELEASE_SIBLINGS: readonly ["@dsh-workbench/shared", "@dsh-workbench/module-tools"];
1012
1020
  API_PREFIX: "/workbench/api";
1013
1021
  PREFS_PREFIX: "/workbench/api/prefs";
1014
1022
  EVENTS_PATH: "/workbench/events";
@@ -1060,6 +1068,8 @@ export declare const kit: {
1060
1068
  readonly "project.search.label": "\u641C\u7D22\u5DE5\u4F5C\u533A";
1061
1069
  readonly "project.search.placeholder": "\u641C\u7D22\u5DE5\u4F5C\u533A\uFF08\u76EE\u5F55\u540D / \u4E2D\u6587\u540D / \u8DEF\u5F84\uFF09";
1062
1070
  readonly "project.search.empty": "\u6CA1\u6709\u5339\u914D\u300C{query}\u300D\u7684\u5DE5\u4F5C\u533A\u3002";
1071
+ readonly "project.group.workspaces": "\u5DE5\u4F5C\u533A";
1072
+ readonly "project.group.workshop": "\u5DE5\u574A";
1063
1073
  readonly "project.rename.row": "\u6539\u300C{name}\u300D\u7684\u4E2D\u6587\u540D";
1064
1074
  readonly "project.rename.current": "\u6539\u5F53\u524D\u5DE5\u4F5C\u533A\u7684\u4E2D\u6587\u540D\u2026";
1065
1075
  readonly "project.rename.title": "\u7ED9\u300C{name}\u300D\u914D\u4E00\u4E2A\u4E2D\u6587\u540D";
@@ -1234,6 +1244,7 @@ export declare const kit: {
1234
1244
  readonly "panels.market.add.failureIntegrity": "\u4E0B\u8F7D\u7684\u5B89\u88C5\u5305\u6821\u9A8C\u5931\u8D25";
1235
1245
  readonly "panels.market.add.failureTimeout": "\u5B89\u88C5\u8D85\u65F6";
1236
1246
  readonly "panels.market.add.failurePnpmMissing": "\u6CA1\u6709\u627E\u5230 pnpm\uFF0C\u65E0\u6CD5\u5B89\u88C5";
1247
+ readonly "panels.market.add.failureInstalled": "\u5B83\u5DF2\u7ECF\u5728\u8FD9\u4EFD profile \u91CC\u4E86\uFF1A\u8FD9\u4E00\u7248 dsh \u5F00\u7740\u70ED\u66F4\u65B0\uFF0C\u540C\u4E00\u4E2A\u5305\u4E0D\u8BB8\u5C31\u5730\u8986\u76D6\u88C5\uFF08\u5F97\u5148\u5378\u8F7D\u518D\u88C5\uFF09\uFF0C\u800C\u8FD9\u6B21\u4E5F\u6CA1\u80FD\u628A\u5B83\u5378\u4E0B\u6765";
1237
1248
  readonly "panels.market.add.failureGeneric": "\u5B89\u88C5\u8FC7\u7A0B\u4E2D\u51FA\u9519\uFF0C\u539F\u56E0\u89C1\u5B89\u88C5\u8BE6\u60C5";
1238
1249
  readonly "panels.market.add.approveTitle": "\u9700\u8981\u4F60\u5141\u8BB8\u5B89\u88C5\u811A\u672C";
1239
1250
  readonly "panels.market.add.approveCaution": "\u53EA\u5141\u8BB8\u4F60\u4FE1\u5F97\u8FC7\u7684\u5305\uFF1A\u5B89\u88C5\u811A\u672C\u4F1A\u4EE5\u4F60\u7684\u6743\u9650\u5728\u8FD9\u53F0\u673A\u5668\u4E0A\u8FD0\u884C\u3002";
@@ -1389,7 +1400,7 @@ export declare const kit: {
1389
1400
  readonly "panel.conversation": "\u5BF9\u8BDD";
1390
1401
  readonly "panels.label": "\u5168\u5C40\u9762\u677F";
1391
1402
  };
1392
- en: Record<"time.now" | "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.fix.update" | "blocker.market.open" | "env.unit.failed" | "env.unit.failedHint" | "env.unit.missingPlugin" | "env.unit.hint" | "env.unit.missingCommands" | "env.unit.missingCommandsHint" | "env.unit.unchecked" | "env.unit.uncheckedHint" | "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.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.pinned" | "session.actions" | "status.idle" | "status.running" | "status.waitingApproval" | "status.planReview" | "status.waitingAnswer" | "status.completed" | "status.subagentsRunning.one" | "status.subagentsRunning.other" | "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.dep.failed" | "panels.dep.missingPlugin" | "panels.dep.missingCommands" | "panels.dep.unchecked" | "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.missing" | "panels.market.unchecked" | "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.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.localMark" | "panels.market.localHint" | "panels.market.noSource" | "panels.market.badSource" | "panels.market.empty" | "panels.market.sectionPlugins" | "panels.market.moduleOutdated" | "panels.market.moduleRefused" | "panels.market.moduleRefusedDetail" | "panels.market.moduleRestartHint" | "panels.market.workbenchName" | "panels.market.workbenchLocal" | "panels.market.pluginKeptInUse" | "panels.market.pluginKeptUnsure" | "panels.market.pluginKeptHeld" | "panels.market.pluginKeptUnnamed" | "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.failureGeneric" | "panels.market.add.approveTitle" | "panels.market.add.approveCaution" | "panels.market.add.approveRun" | "panels.market.add.restart" | "panels.market.add.tookEffect" | "panels.market.add.details" | "panels.market.add.open" | "panels.market.add.title" | "panels.market.add.intro" | "panels.market.add.specLabel" | "panels.market.add.specHint" | "panels.market.add.exampleTitle" | "panels.market.add.exampleFill" | "panels.market.add.registryLabel" | "panels.market.add.registryProfile" | "panels.market.add.registryPnpm" | "panels.market.add.check" | "panels.market.add.checking" | "panels.market.add.classifying" | "panels.market.add.change" | "panels.market.add.previewTitle" | "panels.market.add.fieldName" | "panels.market.add.fieldVersion" | "panels.market.add.fieldDescription" | "panels.market.add.fieldSource" | "panels.market.add.install" | "panels.market.add.installing" | "panels.market.add.cancel" | "panels.market.add.close" | "panels.market.add.retry" | "panels.market.add.changeSource" | "panels.market.add.approveBuilds" | "panels.market.add.approveHint" | "panels.market.add.doneApplied" | "panels.market.add.doneRestart" | "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.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.bridge.ok" | "env.bridge.short" | "env.bridge.why" | "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.copyCommand" | "env.copied" | "env.step.opencli" | "env.step.codingPlugin" | "env.step.bridge" | "env.step.warm" | "env.warm.done" | "env.warm.short" | "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" | "coding.notARepo.title" | "error.unknown" | "board.title" | "panel.conversation" | "panels.label", string>;
1403
+ en: Record<"time.now" | "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.fix.update" | "blocker.market.open" | "env.unit.failed" | "env.unit.failedHint" | "env.unit.missingPlugin" | "env.unit.hint" | "env.unit.missingCommands" | "env.unit.missingCommandsHint" | "env.unit.unchecked" | "env.unit.uncheckedHint" | "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.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.pinned" | "session.actions" | "status.idle" | "status.running" | "status.waitingApproval" | "status.planReview" | "status.waitingAnswer" | "status.completed" | "status.subagentsRunning.one" | "status.subagentsRunning.other" | "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.dep.failed" | "panels.dep.missingPlugin" | "panels.dep.missingCommands" | "panels.dep.unchecked" | "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.missing" | "panels.market.unchecked" | "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.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.localMark" | "panels.market.localHint" | "panels.market.noSource" | "panels.market.badSource" | "panels.market.empty" | "panels.market.sectionPlugins" | "panels.market.moduleOutdated" | "panels.market.moduleRefused" | "panels.market.moduleRefusedDetail" | "panels.market.moduleRestartHint" | "panels.market.workbenchName" | "panels.market.workbenchLocal" | "panels.market.pluginKeptInUse" | "panels.market.pluginKeptUnsure" | "panels.market.pluginKeptHeld" | "panels.market.pluginKeptUnnamed" | "panels.market.pluginBroken" | "panels.market.restartNeeded" | "panels.market.foot" | "panels.market.recheck" | "panels.market.checkUpdates" | "panels.market.checkedAt" | "panels.market.justNow" | "panels.market.minutesAgo" | "panels.market.hoursAgo" | "panels.market.add.description" | "panels.market.add.specPlaceholder" | "panels.market.add.guideToggle" | "panels.market.add.guideHide" | "panels.market.add.guideIdTitle" | "panels.market.add.guideIdExample" | "panels.market.add.guideIdHint" | "panels.market.add.guideGitTitle" | "panels.market.add.guideGitExample" | "panels.market.add.guideGitHint" | "panels.market.add.guidePathTitle" | "panels.market.add.guidePathExample" | "panels.market.add.guidePathHint" | "panels.market.add.guideExampleLabel" | "panels.market.add.guideFill" | "panels.market.add.guideSafety" | "panels.market.add.registryLegend" | "panels.market.add.registryOfficial" | "panels.market.add.registryMirror" | "panels.market.add.registryWithHost" | "panels.market.add.registryToggle" | "panels.market.add.installVersion" | "panels.market.add.registryDefault" | "panels.market.add.registryCustom" | "panels.market.add.registryCustomPlaceholder" | "panels.market.add.registryCustomHint" | "panels.market.add.registryCustomInvalid" | "panels.market.add.run" | "panels.market.add.edit" | "panels.market.add.changeRegistry" | "panels.market.add.installingTitle" | "panels.market.add.installedTitle" | "panels.market.add.failedTitle" | "panels.market.add.cancelledTitle" | "panels.market.add.failureNetworkHost" | "panels.market.add.problemInvalid" | "panels.market.add.problemInstalled" | "panels.market.add.problemNotFound" | "panels.market.add.problemNotPackage" | "panels.market.add.problemNotBundle" | "panels.market.add.problemNotWorkbenchModule" | "panels.market.add.problemNotModuleOrPlugin" | "panels.market.add.failureNotModuleOrPlugin" | "panels.market.add.installedPlugin" | "panels.market.add.pluginPreview" | "panels.market.add.pluginAlias" | "panels.market.add.problemNetwork" | "panels.market.add.problemUnknown" | "panels.market.add.failureNetwork" | "panels.market.add.failureNotFound" | "panels.market.add.failureNoMatchingVersion" | "panels.market.add.failureDiskFull" | "panels.market.add.failurePermission" | "panels.market.add.failureBuildBlocked" | "panels.market.add.failureIntegrity" | "panels.market.add.failureTimeout" | "panels.market.add.failurePnpmMissing" | "panels.market.add.failureInstalled" | "panels.market.add.failureGeneric" | "panels.market.add.approveTitle" | "panels.market.add.approveCaution" | "panels.market.add.approveRun" | "panels.market.add.restart" | "panels.market.add.tookEffect" | "panels.market.add.details" | "panels.market.add.open" | "panels.market.add.title" | "panels.market.add.intro" | "panels.market.add.specLabel" | "panels.market.add.specHint" | "panels.market.add.exampleTitle" | "panels.market.add.exampleFill" | "panels.market.add.registryLabel" | "panels.market.add.registryProfile" | "panels.market.add.registryPnpm" | "panels.market.add.check" | "panels.market.add.checking" | "panels.market.add.classifying" | "panels.market.add.change" | "panels.market.add.previewTitle" | "panels.market.add.fieldName" | "panels.market.add.fieldVersion" | "panels.market.add.fieldDescription" | "panels.market.add.fieldSource" | "panels.market.add.install" | "panels.market.add.installing" | "panels.market.add.cancel" | "panels.market.add.close" | "panels.market.add.retry" | "panels.market.add.changeSource" | "panels.market.add.approveBuilds" | "panels.market.add.approveHint" | "panels.market.add.doneApplied" | "panels.market.add.doneRestart" | "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.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.bridge.ok" | "env.bridge.short" | "env.bridge.why" | "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.copyCommand" | "env.copied" | "env.step.opencli" | "env.step.codingPlugin" | "env.step.bridge" | "env.step.warm" | "env.warm.done" | "env.warm.short" | "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" | "coding.notARepo.title" | "error.unknown" | "board.title" | "panel.conversation" | "panels.label", string>;
1393
1404
  };
1394
1405
  mergeMessages(base: apiModule.Dictionaries, contributions: readonly MessagesContribution[]): apiModule.Dictionaries;
1395
1406
  mergeMessagesSkipping(base: apiModule.Dictionaries, contributions: readonly MessagesContribution[]): apiModule.MessagesMerge;
@@ -1407,6 +1418,8 @@ export declare const kit: {
1407
1418
  readonly "project.search.label": "\u641C\u7D22\u5DE5\u4F5C\u533A";
1408
1419
  readonly "project.search.placeholder": "\u641C\u7D22\u5DE5\u4F5C\u533A\uFF08\u76EE\u5F55\u540D / \u4E2D\u6587\u540D / \u8DEF\u5F84\uFF09";
1409
1420
  readonly "project.search.empty": "\u6CA1\u6709\u5339\u914D\u300C{query}\u300D\u7684\u5DE5\u4F5C\u533A\u3002";
1421
+ readonly "project.group.workspaces": "\u5DE5\u4F5C\u533A";
1422
+ readonly "project.group.workshop": "\u5DE5\u574A";
1410
1423
  readonly "project.rename.row": "\u6539\u300C{name}\u300D\u7684\u4E2D\u6587\u540D";
1411
1424
  readonly "project.rename.current": "\u6539\u5F53\u524D\u5DE5\u4F5C\u533A\u7684\u4E2D\u6587\u540D\u2026";
1412
1425
  readonly "project.rename.title": "\u7ED9\u300C{name}\u300D\u914D\u4E00\u4E2A\u4E2D\u6587\u540D";
@@ -1581,6 +1594,7 @@ export declare const kit: {
1581
1594
  readonly "panels.market.add.failureIntegrity": "\u4E0B\u8F7D\u7684\u5B89\u88C5\u5305\u6821\u9A8C\u5931\u8D25";
1582
1595
  readonly "panels.market.add.failureTimeout": "\u5B89\u88C5\u8D85\u65F6";
1583
1596
  readonly "panels.market.add.failurePnpmMissing": "\u6CA1\u6709\u627E\u5230 pnpm\uFF0C\u65E0\u6CD5\u5B89\u88C5";
1597
+ readonly "panels.market.add.failureInstalled": "\u5B83\u5DF2\u7ECF\u5728\u8FD9\u4EFD profile \u91CC\u4E86\uFF1A\u8FD9\u4E00\u7248 dsh \u5F00\u7740\u70ED\u66F4\u65B0\uFF0C\u540C\u4E00\u4E2A\u5305\u4E0D\u8BB8\u5C31\u5730\u8986\u76D6\u88C5\uFF08\u5F97\u5148\u5378\u8F7D\u518D\u88C5\uFF09\uFF0C\u800C\u8FD9\u6B21\u4E5F\u6CA1\u80FD\u628A\u5B83\u5378\u4E0B\u6765";
1584
1598
  readonly "panels.market.add.failureGeneric": "\u5B89\u88C5\u8FC7\u7A0B\u4E2D\u51FA\u9519\uFF0C\u539F\u56E0\u89C1\u5B89\u88C5\u8BE6\u60C5";
1585
1599
  readonly "panels.market.add.approveTitle": "\u9700\u8981\u4F60\u5141\u8BB8\u5B89\u88C5\u811A\u672C";
1586
1600
  readonly "panels.market.add.approveCaution": "\u53EA\u5141\u8BB8\u4F60\u4FE1\u5F97\u8FC7\u7684\u5305\uFF1A\u5B89\u88C5\u811A\u672C\u4F1A\u4EE5\u4F60\u7684\u6743\u9650\u5728\u8FD9\u53F0\u673A\u5668\u4E0A\u8FD0\u884C\u3002";
@@ -1861,6 +1875,7 @@ export declare const kit: {
1861
1875
  IconModules({ size }: apiModule.IconProps): JSX.Element;
1862
1876
  IconPanelScreen({ size }: apiModule.IconProps): JSX.Element;
1863
1877
  PLUGIN_ID: "@dsh-workbench/core";
1878
+ RELEASE_SIBLINGS: readonly ["@dsh-workbench/shared", "@dsh-workbench/module-tools"];
1864
1879
  API_PREFIX: "/workbench/api";
1865
1880
  PREFS_PREFIX: "/workbench/api/prefs";
1866
1881
  EVENTS_PATH: "/workbench/events";
@@ -1912,6 +1927,8 @@ export declare const kit: {
1912
1927
  readonly "project.search.label": "\u641C\u7D22\u5DE5\u4F5C\u533A";
1913
1928
  readonly "project.search.placeholder": "\u641C\u7D22\u5DE5\u4F5C\u533A\uFF08\u76EE\u5F55\u540D / \u4E2D\u6587\u540D / \u8DEF\u5F84\uFF09";
1914
1929
  readonly "project.search.empty": "\u6CA1\u6709\u5339\u914D\u300C{query}\u300D\u7684\u5DE5\u4F5C\u533A\u3002";
1930
+ readonly "project.group.workspaces": "\u5DE5\u4F5C\u533A";
1931
+ readonly "project.group.workshop": "\u5DE5\u574A";
1915
1932
  readonly "project.rename.row": "\u6539\u300C{name}\u300D\u7684\u4E2D\u6587\u540D";
1916
1933
  readonly "project.rename.current": "\u6539\u5F53\u524D\u5DE5\u4F5C\u533A\u7684\u4E2D\u6587\u540D\u2026";
1917
1934
  readonly "project.rename.title": "\u7ED9\u300C{name}\u300D\u914D\u4E00\u4E2A\u4E2D\u6587\u540D";
@@ -2086,6 +2103,7 @@ export declare const kit: {
2086
2103
  readonly "panels.market.add.failureIntegrity": "\u4E0B\u8F7D\u7684\u5B89\u88C5\u5305\u6821\u9A8C\u5931\u8D25";
2087
2104
  readonly "panels.market.add.failureTimeout": "\u5B89\u88C5\u8D85\u65F6";
2088
2105
  readonly "panels.market.add.failurePnpmMissing": "\u6CA1\u6709\u627E\u5230 pnpm\uFF0C\u65E0\u6CD5\u5B89\u88C5";
2106
+ readonly "panels.market.add.failureInstalled": "\u5B83\u5DF2\u7ECF\u5728\u8FD9\u4EFD profile \u91CC\u4E86\uFF1A\u8FD9\u4E00\u7248 dsh \u5F00\u7740\u70ED\u66F4\u65B0\uFF0C\u540C\u4E00\u4E2A\u5305\u4E0D\u8BB8\u5C31\u5730\u8986\u76D6\u88C5\uFF08\u5F97\u5148\u5378\u8F7D\u518D\u88C5\uFF09\uFF0C\u800C\u8FD9\u6B21\u4E5F\u6CA1\u80FD\u628A\u5B83\u5378\u4E0B\u6765";
2089
2107
  readonly "panels.market.add.failureGeneric": "\u5B89\u88C5\u8FC7\u7A0B\u4E2D\u51FA\u9519\uFF0C\u539F\u56E0\u89C1\u5B89\u88C5\u8BE6\u60C5";
2090
2108
  readonly "panels.market.add.approveTitle": "\u9700\u8981\u4F60\u5141\u8BB8\u5B89\u88C5\u811A\u672C";
2091
2109
  readonly "panels.market.add.approveCaution": "\u53EA\u5141\u8BB8\u4F60\u4FE1\u5F97\u8FC7\u7684\u5305\uFF1A\u5B89\u88C5\u811A\u672C\u4F1A\u4EE5\u4F60\u7684\u6743\u9650\u5728\u8FD9\u53F0\u673A\u5668\u4E0A\u8FD0\u884C\u3002";
@@ -2241,7 +2259,7 @@ export declare const kit: {
2241
2259
  readonly "panel.conversation": "\u5BF9\u8BDD";
2242
2260
  readonly "panels.label": "\u5168\u5C40\u9762\u677F";
2243
2261
  };
2244
- en: Record<"time.now" | "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.fix.update" | "blocker.market.open" | "env.unit.failed" | "env.unit.failedHint" | "env.unit.missingPlugin" | "env.unit.hint" | "env.unit.missingCommands" | "env.unit.missingCommandsHint" | "env.unit.unchecked" | "env.unit.uncheckedHint" | "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.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.pinned" | "session.actions" | "status.idle" | "status.running" | "status.waitingApproval" | "status.planReview" | "status.waitingAnswer" | "status.completed" | "status.subagentsRunning.one" | "status.subagentsRunning.other" | "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.dep.failed" | "panels.dep.missingPlugin" | "panels.dep.missingCommands" | "panels.dep.unchecked" | "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.missing" | "panels.market.unchecked" | "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.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.localMark" | "panels.market.localHint" | "panels.market.noSource" | "panels.market.badSource" | "panels.market.empty" | "panels.market.sectionPlugins" | "panels.market.moduleOutdated" | "panels.market.moduleRefused" | "panels.market.moduleRefusedDetail" | "panels.market.moduleRestartHint" | "panels.market.workbenchName" | "panels.market.workbenchLocal" | "panels.market.pluginKeptInUse" | "panels.market.pluginKeptUnsure" | "panels.market.pluginKeptHeld" | "panels.market.pluginKeptUnnamed" | "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.failureGeneric" | "panels.market.add.approveTitle" | "panels.market.add.approveCaution" | "panels.market.add.approveRun" | "panels.market.add.restart" | "panels.market.add.tookEffect" | "panels.market.add.details" | "panels.market.add.open" | "panels.market.add.title" | "panels.market.add.intro" | "panels.market.add.specLabel" | "panels.market.add.specHint" | "panels.market.add.exampleTitle" | "panels.market.add.exampleFill" | "panels.market.add.registryLabel" | "panels.market.add.registryProfile" | "panels.market.add.registryPnpm" | "panels.market.add.check" | "panels.market.add.checking" | "panels.market.add.classifying" | "panels.market.add.change" | "panels.market.add.previewTitle" | "panels.market.add.fieldName" | "panels.market.add.fieldVersion" | "panels.market.add.fieldDescription" | "panels.market.add.fieldSource" | "panels.market.add.install" | "panels.market.add.installing" | "panels.market.add.cancel" | "panels.market.add.close" | "panels.market.add.retry" | "panels.market.add.changeSource" | "panels.market.add.approveBuilds" | "panels.market.add.approveHint" | "panels.market.add.doneApplied" | "panels.market.add.doneRestart" | "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.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.bridge.ok" | "env.bridge.short" | "env.bridge.why" | "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.copyCommand" | "env.copied" | "env.step.opencli" | "env.step.codingPlugin" | "env.step.bridge" | "env.step.warm" | "env.warm.done" | "env.warm.short" | "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" | "coding.notARepo.title" | "error.unknown" | "board.title" | "panel.conversation" | "panels.label", string>;
2262
+ en: Record<"time.now" | "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.fix.update" | "blocker.market.open" | "env.unit.failed" | "env.unit.failedHint" | "env.unit.missingPlugin" | "env.unit.hint" | "env.unit.missingCommands" | "env.unit.missingCommandsHint" | "env.unit.unchecked" | "env.unit.uncheckedHint" | "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.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.pinned" | "session.actions" | "status.idle" | "status.running" | "status.waitingApproval" | "status.planReview" | "status.waitingAnswer" | "status.completed" | "status.subagentsRunning.one" | "status.subagentsRunning.other" | "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.dep.failed" | "panels.dep.missingPlugin" | "panels.dep.missingCommands" | "panels.dep.unchecked" | "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.missing" | "panels.market.unchecked" | "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.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.localMark" | "panels.market.localHint" | "panels.market.noSource" | "panels.market.badSource" | "panels.market.empty" | "panels.market.sectionPlugins" | "panels.market.moduleOutdated" | "panels.market.moduleRefused" | "panels.market.moduleRefusedDetail" | "panels.market.moduleRestartHint" | "panels.market.workbenchName" | "panels.market.workbenchLocal" | "panels.market.pluginKeptInUse" | "panels.market.pluginKeptUnsure" | "panels.market.pluginKeptHeld" | "panels.market.pluginKeptUnnamed" | "panels.market.pluginBroken" | "panels.market.restartNeeded" | "panels.market.foot" | "panels.market.recheck" | "panels.market.checkUpdates" | "panels.market.checkedAt" | "panels.market.justNow" | "panels.market.minutesAgo" | "panels.market.hoursAgo" | "panels.market.add.description" | "panels.market.add.specPlaceholder" | "panels.market.add.guideToggle" | "panels.market.add.guideHide" | "panels.market.add.guideIdTitle" | "panels.market.add.guideIdExample" | "panels.market.add.guideIdHint" | "panels.market.add.guideGitTitle" | "panels.market.add.guideGitExample" | "panels.market.add.guideGitHint" | "panels.market.add.guidePathTitle" | "panels.market.add.guidePathExample" | "panels.market.add.guidePathHint" | "panels.market.add.guideExampleLabel" | "panels.market.add.guideFill" | "panels.market.add.guideSafety" | "panels.market.add.registryLegend" | "panels.market.add.registryOfficial" | "panels.market.add.registryMirror" | "panels.market.add.registryWithHost" | "panels.market.add.registryToggle" | "panels.market.add.installVersion" | "panels.market.add.registryDefault" | "panels.market.add.registryCustom" | "panels.market.add.registryCustomPlaceholder" | "panels.market.add.registryCustomHint" | "panels.market.add.registryCustomInvalid" | "panels.market.add.run" | "panels.market.add.edit" | "panels.market.add.changeRegistry" | "panels.market.add.installingTitle" | "panels.market.add.installedTitle" | "panels.market.add.failedTitle" | "panels.market.add.cancelledTitle" | "panels.market.add.failureNetworkHost" | "panels.market.add.problemInvalid" | "panels.market.add.problemInstalled" | "panels.market.add.problemNotFound" | "panels.market.add.problemNotPackage" | "panels.market.add.problemNotBundle" | "panels.market.add.problemNotWorkbenchModule" | "panels.market.add.problemNotModuleOrPlugin" | "panels.market.add.failureNotModuleOrPlugin" | "panels.market.add.installedPlugin" | "panels.market.add.pluginPreview" | "panels.market.add.pluginAlias" | "panels.market.add.problemNetwork" | "panels.market.add.problemUnknown" | "panels.market.add.failureNetwork" | "panels.market.add.failureNotFound" | "panels.market.add.failureNoMatchingVersion" | "panels.market.add.failureDiskFull" | "panels.market.add.failurePermission" | "panels.market.add.failureBuildBlocked" | "panels.market.add.failureIntegrity" | "panels.market.add.failureTimeout" | "panels.market.add.failurePnpmMissing" | "panels.market.add.failureInstalled" | "panels.market.add.failureGeneric" | "panels.market.add.approveTitle" | "panels.market.add.approveCaution" | "panels.market.add.approveRun" | "panels.market.add.restart" | "panels.market.add.tookEffect" | "panels.market.add.details" | "panels.market.add.open" | "panels.market.add.title" | "panels.market.add.intro" | "panels.market.add.specLabel" | "panels.market.add.specHint" | "panels.market.add.exampleTitle" | "panels.market.add.exampleFill" | "panels.market.add.registryLabel" | "panels.market.add.registryProfile" | "panels.market.add.registryPnpm" | "panels.market.add.check" | "panels.market.add.checking" | "panels.market.add.classifying" | "panels.market.add.change" | "panels.market.add.previewTitle" | "panels.market.add.fieldName" | "panels.market.add.fieldVersion" | "panels.market.add.fieldDescription" | "panels.market.add.fieldSource" | "panels.market.add.install" | "panels.market.add.installing" | "panels.market.add.cancel" | "panels.market.add.close" | "panels.market.add.retry" | "panels.market.add.changeSource" | "panels.market.add.approveBuilds" | "panels.market.add.approveHint" | "panels.market.add.doneApplied" | "panels.market.add.doneRestart" | "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.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.bridge.ok" | "env.bridge.short" | "env.bridge.why" | "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.copyCommand" | "env.copied" | "env.step.opencli" | "env.step.codingPlugin" | "env.step.bridge" | "env.step.warm" | "env.warm.done" | "env.warm.short" | "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" | "coding.notARepo.title" | "error.unknown" | "board.title" | "panel.conversation" | "panels.label", string>;
2245
2263
  };
2246
2264
  mergeMessages(base: apiModule.Dictionaries, contributions: readonly MessagesContribution[]): apiModule.Dictionaries;
2247
2265
  mergeMessagesSkipping(base: apiModule.Dictionaries, contributions: readonly MessagesContribution[]): apiModule.MessagesMerge;
@@ -2259,6 +2277,8 @@ export declare const kit: {
2259
2277
  readonly "project.search.label": "\u641C\u7D22\u5DE5\u4F5C\u533A";
2260
2278
  readonly "project.search.placeholder": "\u641C\u7D22\u5DE5\u4F5C\u533A\uFF08\u76EE\u5F55\u540D / \u4E2D\u6587\u540D / \u8DEF\u5F84\uFF09";
2261
2279
  readonly "project.search.empty": "\u6CA1\u6709\u5339\u914D\u300C{query}\u300D\u7684\u5DE5\u4F5C\u533A\u3002";
2280
+ readonly "project.group.workspaces": "\u5DE5\u4F5C\u533A";
2281
+ readonly "project.group.workshop": "\u5DE5\u574A";
2262
2282
  readonly "project.rename.row": "\u6539\u300C{name}\u300D\u7684\u4E2D\u6587\u540D";
2263
2283
  readonly "project.rename.current": "\u6539\u5F53\u524D\u5DE5\u4F5C\u533A\u7684\u4E2D\u6587\u540D\u2026";
2264
2284
  readonly "project.rename.title": "\u7ED9\u300C{name}\u300D\u914D\u4E00\u4E2A\u4E2D\u6587\u540D";
@@ -2433,6 +2453,7 @@ export declare const kit: {
2433
2453
  readonly "panels.market.add.failureIntegrity": "\u4E0B\u8F7D\u7684\u5B89\u88C5\u5305\u6821\u9A8C\u5931\u8D25";
2434
2454
  readonly "panels.market.add.failureTimeout": "\u5B89\u88C5\u8D85\u65F6";
2435
2455
  readonly "panels.market.add.failurePnpmMissing": "\u6CA1\u6709\u627E\u5230 pnpm\uFF0C\u65E0\u6CD5\u5B89\u88C5";
2456
+ readonly "panels.market.add.failureInstalled": "\u5B83\u5DF2\u7ECF\u5728\u8FD9\u4EFD profile \u91CC\u4E86\uFF1A\u8FD9\u4E00\u7248 dsh \u5F00\u7740\u70ED\u66F4\u65B0\uFF0C\u540C\u4E00\u4E2A\u5305\u4E0D\u8BB8\u5C31\u5730\u8986\u76D6\u88C5\uFF08\u5F97\u5148\u5378\u8F7D\u518D\u88C5\uFF09\uFF0C\u800C\u8FD9\u6B21\u4E5F\u6CA1\u80FD\u628A\u5B83\u5378\u4E0B\u6765";
2436
2457
  readonly "panels.market.add.failureGeneric": "\u5B89\u88C5\u8FC7\u7A0B\u4E2D\u51FA\u9519\uFF0C\u539F\u56E0\u89C1\u5B89\u88C5\u8BE6\u60C5";
2437
2458
  readonly "panels.market.add.approveTitle": "\u9700\u8981\u4F60\u5141\u8BB8\u5B89\u88C5\u811A\u672C";
2438
2459
  readonly "panels.market.add.approveCaution": "\u53EA\u5141\u8BB8\u4F60\u4FE1\u5F97\u8FC7\u7684\u5305\uFF1A\u5B89\u88C5\u811A\u672C\u4F1A\u4EE5\u4F60\u7684\u6743\u9650\u5728\u8FD9\u53F0\u673A\u5668\u4E0A\u8FD0\u884C\u3002";
@@ -0,0 +1,13 @@
1
+ export interface WorkspaceHeadings {
2
+ readonly workspaces: string;
3
+ readonly workshop: string;
4
+ }
5
+ export interface WorkspaceSectionPlan<T> {
6
+ readonly id: 'workspaces' | 'workshop';
7
+ readonly heading: string | null;
8
+ readonly items: readonly T[];
9
+ }
10
+ export declare function workspaceSections<T extends {
11
+ readonly path: string;
12
+ }>(items: readonly T[], headings: WorkspaceHeadings): readonly WorkspaceSectionPlan<T>[];
13
+ export declare function flattenSections<T>(sections: readonly WorkspaceSectionPlan<T>[]): readonly T[];
@@ -1,7 +1,8 @@
1
1
  import type { Translate, WorkspaceView } from '@dsh-workbench/shared';
2
2
  import type { MenuEntry } from '@deepseek-ai/dsh-client-ui-primitives';
3
+ import type { WorkspaceSectionPlan } from './workspace-groups';
3
4
  export interface WorkspaceItemsOptions {
4
- readonly results: readonly WorkspaceView[];
5
+ readonly sections: readonly WorkspaceSectionPlan<WorkspaceView>[];
5
6
  readonly currentId: string | null;
6
7
  readonly hoverId: string | null;
7
8
  readonly t: Translate;