@dsh-workbench/core 0.1.3 → 0.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.
@@ -1409,11 +1409,31 @@ function profileModules(profileDir) {
1409
1409
  if (read.kind === "module") found.push({
1410
1410
  pkg: read.pkg,
1411
1411
  unit: read.unit,
1412
- version: read.version
1412
+ version: read.version,
1413
+ ...read.registry === void 0 ? {} : { registry: read.registry }
1413
1414
  });
1414
1415
  }
1415
1416
  return found;
1416
1417
  }
1418
+ function registryFromLockfile(profileDir, pkg) {
1419
+ let text;
1420
+ try {
1421
+ text = fs.readFileSync(path.join(profileDir, "pnpm-lock.yaml"), "utf8");
1422
+ } catch {
1423
+ return;
1424
+ }
1425
+ const at = text.indexOf(` ${pkg}@`);
1426
+ const quoted = at === -1 ? text.indexOf(` '${pkg}@`) : at;
1427
+ if (quoted === -1) return void 0;
1428
+ const headerEnd = text.indexOf("\n", quoted);
1429
+ const end = headerEnd === -1 ? -1 : text.indexOf("\n ", headerEnd + 1);
1430
+ const block = text.slice(quoted, end === -1 ? quoted + 900 : end);
1431
+ const tarball = /tarball:\s*([^\s,}]+)/.exec(block)?.[1];
1432
+ if (tarball === void 0 || !tarball.startsWith("http")) return void 0;
1433
+ const cut = tarball.lastIndexOf(`/${pkg}/`);
1434
+ if (cut <= 8) return void 0;
1435
+ return tarball.slice(0, cut);
1436
+ }
1417
1437
  function readInstalledModule(profileDir, pkg) {
1418
1438
  if (profileDir === null || !isPackageName(pkg)) return {
1419
1439
  kind: "unknown",
@@ -1439,11 +1459,14 @@ function readInstalledModule(profileDir, pkg) {
1439
1459
  kind: "not-module",
1440
1460
  pkg
1441
1461
  };
1462
+ const declaredRegistry = asText$1(asRecord$1(record.publishConfig)?.registry);
1463
+ const registry = declaredRegistry === "" ? registryFromLockfile(profileDir, pkg) : declaredRegistry;
1442
1464
  return {
1443
1465
  kind: "module",
1444
1466
  pkg,
1445
1467
  unit,
1446
- version: asText$1(record.version)
1468
+ version: asText$1(record.version),
1469
+ ...registry === "" ? {} : { registry }
1447
1470
  };
1448
1471
  }
1449
1472
  //#endregion
@@ -1622,12 +1645,6 @@ function sharedDependencies(options) {
1622
1645
  };
1623
1646
  });
1624
1647
  }
1625
- function pluginNeedOf(target) {
1626
- for (const manifest of target.declarers) {
1627
- const need = (manifest.env?.plugins ?? []).find((item) => item.name === target.name);
1628
- if (need !== void 0) return need;
1629
- }
1630
- }
1631
1648
  function libNeedOf(target) {
1632
1649
  for (const manifest of target.declarers) {
1633
1650
  const need = (manifest.env?.libs ?? []).find((item) => item.name === target.name);
@@ -1635,22 +1652,27 @@ function libNeedOf(target) {
1635
1652
  }
1636
1653
  }
1637
1654
  function dependencyCommandPlan(options) {
1638
- const { target, capability, command } = options;
1655
+ const { target, capability, capabilities, command } = options;
1639
1656
  if (target.kind === "plugin") {
1640
- const need = pluginNeedOf(target);
1641
- if (need === void 0) return void 0;
1642
- const state = capability?.plugins?.find((item) => item.name === target.name);
1643
- if (state === void 0 || state.status !== "outdated") return void 0;
1644
- const release = state.release;
1645
- const latest = release?.latest;
1646
- const upgrade = release === void 0 || latest === void 0 || !isNewerVersion(latest, release.installed) ? void 0 : resolvePluginSource(need.installSource, process.env, {
1647
- command,
1648
- plugin: target.name,
1649
- version: latest,
1650
- mode: "update"
1651
- });
1652
- if (upgrade?.ok === true) return upgrade.commands;
1653
- return [{ line: `${quoteShellArg(command)} plugin update ${quoteShellArg(target.name)}` }];
1657
+ let outdated = false;
1658
+ for (const manifest of target.declarers) {
1659
+ const need = (manifest.env?.plugins ?? []).find((item) => item.name === target.name);
1660
+ if (need === void 0) continue;
1661
+ const seen = (capabilities?.get(manifest.id) ?? capability)?.plugins?.find((item) => item.name === target.name);
1662
+ if (seen?.status !== "outdated") continue;
1663
+ outdated = true;
1664
+ const release = seen.release;
1665
+ const latest = release?.latest;
1666
+ if (release === void 0 || latest === void 0 || !isNewerVersion(latest, release.installed)) continue;
1667
+ const upgrade = resolvePluginSource(need.installSource, process.env, {
1668
+ command,
1669
+ plugin: target.name,
1670
+ version: latest,
1671
+ mode: "update"
1672
+ });
1673
+ if (upgrade.ok === true) return upgrade.commands;
1674
+ }
1675
+ return outdated ? [{ line: `${quoteShellArg(command)} plugin update ${quoteShellArg(target.name)}` }] : void 0;
1654
1676
  }
1655
1677
  const need = libNeedOf(target);
1656
1678
  if (need === void 0) return void 0;
@@ -1759,11 +1781,13 @@ function createMarketService(options) {
1759
1781
  }
1760
1782
  async function updateDependencyRow(id) {
1761
1783
  const target = requireDependency(id);
1762
- for (const manifest of target.declarers) await capabilityOf(manifest.id, true);
1784
+ const seen = /* @__PURE__ */ new Map();
1785
+ for (const manifest of target.declarers) seen.set(manifest.id, await capabilityOf(manifest.id, true));
1763
1786
  const primary = target.declarers[0];
1764
1787
  const commands = dependencyCommandPlan({
1765
1788
  target,
1766
- capability: primary === void 0 ? void 0 : await capabilityOf(primary.id),
1789
+ capability: primary === void 0 ? void 0 : seen.get(primary.id),
1790
+ capabilities: seen,
1767
1791
  command
1768
1792
  });
1769
1793
  if (commands !== void 0) {
@@ -1970,7 +1994,21 @@ function createMarketService(options) {
1970
1994
  async updateBundle(unit) {
1971
1995
  const pkg = (modules?.() ?? []).find((item) => item.unit === unit)?.pkg;
1972
1996
  if (pkg === void 0) return null;
1973
- return service.installBundle(pkg);
1997
+ const read = installed?.(pkg) ?? {
1998
+ kind: "unknown",
1999
+ pkg
2000
+ };
2001
+ const registry = read.kind === "module" ? read.registry : void 0;
2002
+ const latest = shell === void 0 || registry === void 0 ? void 0 : await latestVersion({
2003
+ shell,
2004
+ name: pkg,
2005
+ registry,
2006
+ force: true
2007
+ });
2008
+ const spec = latest === void 0 ? pkg : `${pkg}@${latest}`;
2009
+ const outcome = await service.installBundle(spec, { ...registry === void 0 ? {} : { registry } });
2010
+ await service.update(unit).catch(() => void 0);
2011
+ return outcome;
1974
2012
  },
1975
2013
  updateDependency: updateDependencyRow
1976
2014
  };
@@ -2838,19 +2876,26 @@ function bundleRegistriesHandler(ctx) {
2838
2876
  };
2839
2877
  };
2840
2878
  }
2841
- function moduleVersionsHandler(ctx) {
2842
- return async () => {
2879
+ function moduleVersionsHandler(ctx, shell) {
2880
+ return async (search) => {
2843
2881
  const manager = readBundleManager(ctx);
2844
2882
  if (manager === void 0) return {
2845
2883
  ok: true,
2846
2884
  modules: []
2847
2885
  };
2848
2886
  const found = profileModules(profileDirOf(ctx));
2887
+ const force = param(search, "force") === "1";
2888
+ const fallback = (await manager.registries())?.resolved ?? void 0;
2849
2889
  return {
2850
2890
  ok: true,
2851
2891
  modules: await Promise.all(found.map(async (module) => {
2852
- const inspection = await manager.inspect(module.pkg).catch(() => null);
2853
- const latest = inspection?.status === "accepted" ? inspection.version : void 0;
2892
+ const registry = module.registry ?? fallback;
2893
+ const latest = shell === void 0 || registry === void 0 ? void 0 : await latestVersion({
2894
+ shell,
2895
+ name: module.pkg,
2896
+ registry,
2897
+ force
2898
+ });
2854
2899
  return {
2855
2900
  unit: module.unit,
2856
2901
  pkg: module.pkg,
@@ -3875,7 +3920,7 @@ function apply(ctx) {
3875
3920
  [DSH_PLUGINS_ROUTE]: dshPluginsHandler(ctx),
3876
3921
  [BUNDLE_REGISTRIES_ROUTE]: bundleRegistriesHandler(ctx),
3877
3922
  [BUNDLE_INSPECT_ROUTE]: bundleInspectHandler(ctx),
3878
- [MODULE_VERSIONS_ROUTE]: moduleVersionsHandler(ctx)
3923
+ [MODULE_VERSIONS_ROUTE]: moduleVersionsHandler(ctx, ctx.get("shell"))
3879
3924
  };
3880
3925
  const renderers = /* @__PURE__ */ new Map();
3881
3926
  const shell = ctx.get("shell");
@@ -1,4 +1,5 @@
1
1
  import type { DshClientContext } from '@dsh-workbench/shared';
2
+ import { Tip } from '../shared/components/Tip';
2
3
  import * as apiModule from '@dsh-workbench/shared';
3
4
  import * as chipsModule from '../shared/api/context-chips';
4
5
  import * as apiResourceModule from '../shared/hooks/use-api-resource';
@@ -53,6 +54,7 @@ export declare const kit: {
53
54
  }): apiResourceModule.ResourceState<T>;
54
55
  };
55
56
  components: {
57
+ Tip: typeof Tip;
56
58
  blockerOfError(error: apiModule.ApiError | undefined, t: apiModule.Translate, context?: {
57
59
  path?: string | null;
58
60
  platform?: string;
@@ -234,7 +236,8 @@ export declare const kit: {
234
236
  readonly "panels.market.badSource": "\u5B89\u88C5\u65B9\u5F0F\u6CA1\u5199\u5168\uFF0C\u53EA\u80FD\u81EA\u5DF1\u52A8\u624B";
235
237
  readonly "panels.market.empty": "\u6682\u65E0\u53EF\u7528\u6A21\u5757";
236
238
  readonly "panels.market.installedSection": "\u5DF2\u88C5";
237
- readonly "panels.market.moduleUpdate": "\u6709\u65B0\u7248 {version}\uFF1A\u5B89\u88C5\u5B8C\u6210\u540E\u53EF\u80FD\u9700\u8981\u91CD\u542F\u624D\u751F\u6548\u3002";
239
+ readonly "panels.market.moduleOutdated": "\u6709\u65B0\u7248";
240
+ readonly "panels.market.moduleRestartHint": "\u5B89\u88C5\u5B8C\u6210\u540E\u53EF\u80FD\u9700\u8981\u91CD\u542F\u624D\u751F\u6548";
238
241
  readonly "panels.market.restartNeeded": "\u65B0\u7248\u88C5\u597D\u4E86\uFF0C\u91CD\u542F\u4E00\u6B21\u624D\u751F\u6548\u3002";
239
242
  readonly "panels.market.foot": "\u88C5\u597D\u540E\u5230\u90A3\u4E2A\u9879\u76EE\u7684\u9762\u677F\u9875\u52FE\u9009\u5B83\uFF0C\u6A21\u5757\u624D\u4F1A\u51FA\u73B0\u3002";
240
243
  readonly "panels.market.recheck": "\u91CD\u65B0\u68C0\u67E5\u66F4\u65B0";
@@ -331,11 +334,10 @@ export declare const kit: {
331
334
  readonly "panels.market.add.doneRestart": "\u88C5\u597D\u4E86\uFF0C\u91CD\u542F\u4E00\u6B21\u624D\u751F\u6548\u3002";
332
335
  readonly "panels.market.add.cancelled": "\u5DF2\u53D6\u6D88\u3002";
333
336
  readonly "panels.market.add.failed": "\u6CA1\u6210\u529F\uFF1A{reason}";
334
- readonly "panels.market.add.supplyInstalled": "\u5B83\u8981\u7684\u63D2\u4EF6\u4E5F\u88C5\u4E0A\u4E86\u3002";
337
+ readonly "panels.market.add.removed": "\u5DF2\u7ECF\u79FB\u9664\u4E86\u3002";
335
338
  readonly "panels.market.add.supplyPending": "\u5B83\u8981\u7684\u63D2\u4EF6\u91CD\u542F\u540E\u518D\u88C5\u3002";
336
339
  readonly "panels.market.add.supplyFailed": "\u5B83\u8981\u7684\u63D2\u4EF6\u6CA1\u88C5\u4E0A\uFF1A{reason}";
337
340
  readonly "panels.market.add.notModule": "\u8FD9\u4E0D\u662F\u5DE5\u4F5C\u53F0\u6A21\u5757\uFF08\u6CA1\u6709 dsh.workbench \u58F0\u660E\uFF09\uFF0C\u4E0D\u4F1A\u51FA\u73B0\u5728\u9762\u677F\u4E0A\u3002";
338
- readonly "panels.market.add.removed": "\u5DF2\u7ECF\u79FB\u9664\u4E86\u3002";
339
341
  readonly "panels.market.add.removedRestart": "\u5378\u6389\u4E86\uFF0C\u91CD\u542F\u4E00\u6B21\u624D\u5F7B\u5E95\u751F\u6548\u3002";
340
342
  readonly "panels.market.add.remove": "\u79FB\u9664\u5B83";
341
343
  readonly "panels.market.add.problem.invalidSpec": "\u8FD9\u4E2A\u5199\u6CD5\u4E0D\u8BA4\uFF1A\u4E0D\u80FD\u662F\u7A7A\u7684\uFF0C\u4E5F\u4E0D\u80FD\u4EE5\u6A2A\u6760\u5F00\u5934\u3002";
@@ -441,7 +443,7 @@ export declare const kit: {
441
443
  readonly "panel.conversation": "\u5BF9\u8BDD";
442
444
  readonly "panels.label": "\u5168\u5C40\u9762\u677F";
443
445
  };
444
- 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.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" | "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.reset" | "panels.enabled" | "panels.disabled" | "panels.choose" | "panels.failed" | "panels.hintEffect" | "panels.dragHint" | "panels.unknownStep" | "panels.labelWithHint" | "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.outdated" | "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.noSource" | "panels.market.badSource" | "panels.market.empty" | "panels.market.installedSection" | "panels.market.moduleUpdate" | "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.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.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.supplyInstalled" | "panels.market.add.supplyPending" | "panels.market.add.supplyFailed" | "panels.market.add.notModule" | "panels.market.add.removed" | "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.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.refresh" | "rightbar.refreshing" | "rightbar.updatedAt" | "rightbar.noProject" | "coding.notARepo.title" | "error.unknown" | "board.title" | "panel.conversation" | "panels.label", string>;
446
+ 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.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" | "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.reset" | "panels.enabled" | "panels.disabled" | "panels.choose" | "panels.failed" | "panels.hintEffect" | "panels.dragHint" | "panels.unknownStep" | "panels.labelWithHint" | "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.outdated" | "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.noSource" | "panels.market.badSource" | "panels.market.empty" | "panels.market.installedSection" | "panels.market.moduleOutdated" | "panels.market.moduleRestartHint" | "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.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.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.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.refresh" | "rightbar.refreshing" | "rightbar.updatedAt" | "rightbar.noProject" | "coding.notARepo.title" | "error.unknown" | "board.title" | "panel.conversation" | "panels.label", string>;
445
447
  };
446
448
  mergeMessages(base: apiModule.Dictionaries, contributions: readonly apiModule.MessagesContribution[]): apiModule.Dictionaries;
447
449
  zh: {
@@ -524,7 +526,8 @@ export declare const kit: {
524
526
  readonly "panels.market.badSource": "\u5B89\u88C5\u65B9\u5F0F\u6CA1\u5199\u5168\uFF0C\u53EA\u80FD\u81EA\u5DF1\u52A8\u624B";
525
527
  readonly "panels.market.empty": "\u6682\u65E0\u53EF\u7528\u6A21\u5757";
526
528
  readonly "panels.market.installedSection": "\u5DF2\u88C5";
527
- readonly "panels.market.moduleUpdate": "\u6709\u65B0\u7248 {version}\uFF1A\u5B89\u88C5\u5B8C\u6210\u540E\u53EF\u80FD\u9700\u8981\u91CD\u542F\u624D\u751F\u6548\u3002";
529
+ readonly "panels.market.moduleOutdated": "\u6709\u65B0\u7248";
530
+ readonly "panels.market.moduleRestartHint": "\u5B89\u88C5\u5B8C\u6210\u540E\u53EF\u80FD\u9700\u8981\u91CD\u542F\u624D\u751F\u6548";
528
531
  readonly "panels.market.restartNeeded": "\u65B0\u7248\u88C5\u597D\u4E86\uFF0C\u91CD\u542F\u4E00\u6B21\u624D\u751F\u6548\u3002";
529
532
  readonly "panels.market.foot": "\u88C5\u597D\u540E\u5230\u90A3\u4E2A\u9879\u76EE\u7684\u9762\u677F\u9875\u52FE\u9009\u5B83\uFF0C\u6A21\u5757\u624D\u4F1A\u51FA\u73B0\u3002";
530
533
  readonly "panels.market.recheck": "\u91CD\u65B0\u68C0\u67E5\u66F4\u65B0";
@@ -621,11 +624,10 @@ export declare const kit: {
621
624
  readonly "panels.market.add.doneRestart": "\u88C5\u597D\u4E86\uFF0C\u91CD\u542F\u4E00\u6B21\u624D\u751F\u6548\u3002";
622
625
  readonly "panels.market.add.cancelled": "\u5DF2\u53D6\u6D88\u3002";
623
626
  readonly "panels.market.add.failed": "\u6CA1\u6210\u529F\uFF1A{reason}";
624
- readonly "panels.market.add.supplyInstalled": "\u5B83\u8981\u7684\u63D2\u4EF6\u4E5F\u88C5\u4E0A\u4E86\u3002";
627
+ readonly "panels.market.add.removed": "\u5DF2\u7ECF\u79FB\u9664\u4E86\u3002";
625
628
  readonly "panels.market.add.supplyPending": "\u5B83\u8981\u7684\u63D2\u4EF6\u91CD\u542F\u540E\u518D\u88C5\u3002";
626
629
  readonly "panels.market.add.supplyFailed": "\u5B83\u8981\u7684\u63D2\u4EF6\u6CA1\u88C5\u4E0A\uFF1A{reason}";
627
630
  readonly "panels.market.add.notModule": "\u8FD9\u4E0D\u662F\u5DE5\u4F5C\u53F0\u6A21\u5757\uFF08\u6CA1\u6709 dsh.workbench \u58F0\u660E\uFF09\uFF0C\u4E0D\u4F1A\u51FA\u73B0\u5728\u9762\u677F\u4E0A\u3002";
628
- readonly "panels.market.add.removed": "\u5DF2\u7ECF\u79FB\u9664\u4E86\u3002";
629
631
  readonly "panels.market.add.removedRestart": "\u5378\u6389\u4E86\uFF0C\u91CD\u542F\u4E00\u6B21\u624D\u5F7B\u5E95\u751F\u6548\u3002";
630
632
  readonly "panels.market.add.remove": "\u79FB\u9664\u5B83";
631
633
  readonly "panels.market.add.problem.invalidSpec": "\u8FD9\u4E2A\u5199\u6CD5\u4E0D\u8BA4\uFF1A\u4E0D\u80FD\u662F\u7A7A\u7684\uFF0C\u4E5F\u4E0D\u80FD\u4EE5\u6A2A\u6760\u5F00\u5934\u3002";
@@ -750,12 +752,6 @@ export declare const kit: {
750
752
  relativeTime(epochMs: number, t: apiModule.TimeTranslate): string;
751
753
  shortenPath(path: unknown): string;
752
754
  parseLocalTimestamp(text: string | null | undefined): number;
753
- LINK_BUTTON_STYLE: {
754
- readonly display: "inline-flex";
755
- readonly alignItems: "center";
756
- readonly gap: "var(--wb-gap-xs)";
757
- readonly textDecoration: "none";
758
- };
759
755
  BlockerState({ blocker, t, onRetry, busy, flush, onOpenMarket, }: blockerStateModule.BlockerStateProps): JSX.Element;
760
756
  };
761
757
  api: {
@@ -944,7 +940,8 @@ export declare const kit: {
944
940
  readonly "panels.market.badSource": "\u5B89\u88C5\u65B9\u5F0F\u6CA1\u5199\u5168\uFF0C\u53EA\u80FD\u81EA\u5DF1\u52A8\u624B";
945
941
  readonly "panels.market.empty": "\u6682\u65E0\u53EF\u7528\u6A21\u5757";
946
942
  readonly "panels.market.installedSection": "\u5DF2\u88C5";
947
- readonly "panels.market.moduleUpdate": "\u6709\u65B0\u7248 {version}\uFF1A\u5B89\u88C5\u5B8C\u6210\u540E\u53EF\u80FD\u9700\u8981\u91CD\u542F\u624D\u751F\u6548\u3002";
943
+ readonly "panels.market.moduleOutdated": "\u6709\u65B0\u7248";
944
+ readonly "panels.market.moduleRestartHint": "\u5B89\u88C5\u5B8C\u6210\u540E\u53EF\u80FD\u9700\u8981\u91CD\u542F\u624D\u751F\u6548";
948
945
  readonly "panels.market.restartNeeded": "\u65B0\u7248\u88C5\u597D\u4E86\uFF0C\u91CD\u542F\u4E00\u6B21\u624D\u751F\u6548\u3002";
949
946
  readonly "panels.market.foot": "\u88C5\u597D\u540E\u5230\u90A3\u4E2A\u9879\u76EE\u7684\u9762\u677F\u9875\u52FE\u9009\u5B83\uFF0C\u6A21\u5757\u624D\u4F1A\u51FA\u73B0\u3002";
950
947
  readonly "panels.market.recheck": "\u91CD\u65B0\u68C0\u67E5\u66F4\u65B0";
@@ -1041,11 +1038,10 @@ export declare const kit: {
1041
1038
  readonly "panels.market.add.doneRestart": "\u88C5\u597D\u4E86\uFF0C\u91CD\u542F\u4E00\u6B21\u624D\u751F\u6548\u3002";
1042
1039
  readonly "panels.market.add.cancelled": "\u5DF2\u53D6\u6D88\u3002";
1043
1040
  readonly "panels.market.add.failed": "\u6CA1\u6210\u529F\uFF1A{reason}";
1044
- readonly "panels.market.add.supplyInstalled": "\u5B83\u8981\u7684\u63D2\u4EF6\u4E5F\u88C5\u4E0A\u4E86\u3002";
1041
+ readonly "panels.market.add.removed": "\u5DF2\u7ECF\u79FB\u9664\u4E86\u3002";
1045
1042
  readonly "panels.market.add.supplyPending": "\u5B83\u8981\u7684\u63D2\u4EF6\u91CD\u542F\u540E\u518D\u88C5\u3002";
1046
1043
  readonly "panels.market.add.supplyFailed": "\u5B83\u8981\u7684\u63D2\u4EF6\u6CA1\u88C5\u4E0A\uFF1A{reason}";
1047
1044
  readonly "panels.market.add.notModule": "\u8FD9\u4E0D\u662F\u5DE5\u4F5C\u53F0\u6A21\u5757\uFF08\u6CA1\u6709 dsh.workbench \u58F0\u660E\uFF09\uFF0C\u4E0D\u4F1A\u51FA\u73B0\u5728\u9762\u677F\u4E0A\u3002";
1048
- readonly "panels.market.add.removed": "\u5DF2\u7ECF\u79FB\u9664\u4E86\u3002";
1049
1045
  readonly "panels.market.add.removedRestart": "\u5378\u6389\u4E86\uFF0C\u91CD\u542F\u4E00\u6B21\u624D\u5F7B\u5E95\u751F\u6548\u3002";
1050
1046
  readonly "panels.market.add.remove": "\u79FB\u9664\u5B83";
1051
1047
  readonly "panels.market.add.problem.invalidSpec": "\u8FD9\u4E2A\u5199\u6CD5\u4E0D\u8BA4\uFF1A\u4E0D\u80FD\u662F\u7A7A\u7684\uFF0C\u4E5F\u4E0D\u80FD\u4EE5\u6A2A\u6760\u5F00\u5934\u3002";
@@ -1151,7 +1147,7 @@ export declare const kit: {
1151
1147
  readonly "panel.conversation": "\u5BF9\u8BDD";
1152
1148
  readonly "panels.label": "\u5168\u5C40\u9762\u677F";
1153
1149
  };
1154
- 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.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" | "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.reset" | "panels.enabled" | "panels.disabled" | "panels.choose" | "panels.failed" | "panels.hintEffect" | "panels.dragHint" | "panels.unknownStep" | "panels.labelWithHint" | "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.outdated" | "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.noSource" | "panels.market.badSource" | "panels.market.empty" | "panels.market.installedSection" | "panels.market.moduleUpdate" | "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.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.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.supplyInstalled" | "panels.market.add.supplyPending" | "panels.market.add.supplyFailed" | "panels.market.add.notModule" | "panels.market.add.removed" | "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.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.refresh" | "rightbar.refreshing" | "rightbar.updatedAt" | "rightbar.noProject" | "coding.notARepo.title" | "error.unknown" | "board.title" | "panel.conversation" | "panels.label", string>;
1150
+ 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.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" | "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.reset" | "panels.enabled" | "panels.disabled" | "panels.choose" | "panels.failed" | "panels.hintEffect" | "panels.dragHint" | "panels.unknownStep" | "panels.labelWithHint" | "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.outdated" | "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.noSource" | "panels.market.badSource" | "panels.market.empty" | "panels.market.installedSection" | "panels.market.moduleOutdated" | "panels.market.moduleRestartHint" | "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.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.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.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.refresh" | "rightbar.refreshing" | "rightbar.updatedAt" | "rightbar.noProject" | "coding.notARepo.title" | "error.unknown" | "board.title" | "panel.conversation" | "panels.label", string>;
1155
1151
  };
1156
1152
  mergeMessages(base: apiModule.Dictionaries, contributions: readonly apiModule.MessagesContribution[]): apiModule.Dictionaries;
1157
1153
  zh: {
@@ -1234,7 +1230,8 @@ export declare const kit: {
1234
1230
  readonly "panels.market.badSource": "\u5B89\u88C5\u65B9\u5F0F\u6CA1\u5199\u5168\uFF0C\u53EA\u80FD\u81EA\u5DF1\u52A8\u624B";
1235
1231
  readonly "panels.market.empty": "\u6682\u65E0\u53EF\u7528\u6A21\u5757";
1236
1232
  readonly "panels.market.installedSection": "\u5DF2\u88C5";
1237
- readonly "panels.market.moduleUpdate": "\u6709\u65B0\u7248 {version}\uFF1A\u5B89\u88C5\u5B8C\u6210\u540E\u53EF\u80FD\u9700\u8981\u91CD\u542F\u624D\u751F\u6548\u3002";
1233
+ readonly "panels.market.moduleOutdated": "\u6709\u65B0\u7248";
1234
+ readonly "panels.market.moduleRestartHint": "\u5B89\u88C5\u5B8C\u6210\u540E\u53EF\u80FD\u9700\u8981\u91CD\u542F\u624D\u751F\u6548";
1238
1235
  readonly "panels.market.restartNeeded": "\u65B0\u7248\u88C5\u597D\u4E86\uFF0C\u91CD\u542F\u4E00\u6B21\u624D\u751F\u6548\u3002";
1239
1236
  readonly "panels.market.foot": "\u88C5\u597D\u540E\u5230\u90A3\u4E2A\u9879\u76EE\u7684\u9762\u677F\u9875\u52FE\u9009\u5B83\uFF0C\u6A21\u5757\u624D\u4F1A\u51FA\u73B0\u3002";
1240
1237
  readonly "panels.market.recheck": "\u91CD\u65B0\u68C0\u67E5\u66F4\u65B0";
@@ -1331,11 +1328,10 @@ export declare const kit: {
1331
1328
  readonly "panels.market.add.doneRestart": "\u88C5\u597D\u4E86\uFF0C\u91CD\u542F\u4E00\u6B21\u624D\u751F\u6548\u3002";
1332
1329
  readonly "panels.market.add.cancelled": "\u5DF2\u53D6\u6D88\u3002";
1333
1330
  readonly "panels.market.add.failed": "\u6CA1\u6210\u529F\uFF1A{reason}";
1334
- readonly "panels.market.add.supplyInstalled": "\u5B83\u8981\u7684\u63D2\u4EF6\u4E5F\u88C5\u4E0A\u4E86\u3002";
1331
+ readonly "panels.market.add.removed": "\u5DF2\u7ECF\u79FB\u9664\u4E86\u3002";
1335
1332
  readonly "panels.market.add.supplyPending": "\u5B83\u8981\u7684\u63D2\u4EF6\u91CD\u542F\u540E\u518D\u88C5\u3002";
1336
1333
  readonly "panels.market.add.supplyFailed": "\u5B83\u8981\u7684\u63D2\u4EF6\u6CA1\u88C5\u4E0A\uFF1A{reason}";
1337
1334
  readonly "panels.market.add.notModule": "\u8FD9\u4E0D\u662F\u5DE5\u4F5C\u53F0\u6A21\u5757\uFF08\u6CA1\u6709 dsh.workbench \u58F0\u660E\uFF09\uFF0C\u4E0D\u4F1A\u51FA\u73B0\u5728\u9762\u677F\u4E0A\u3002";
1338
- readonly "panels.market.add.removed": "\u5DF2\u7ECF\u79FB\u9664\u4E86\u3002";
1339
1335
  readonly "panels.market.add.removedRestart": "\u5378\u6389\u4E86\uFF0C\u91CD\u542F\u4E00\u6B21\u624D\u5F7B\u5E95\u751F\u6548\u3002";
1340
1336
  readonly "panels.market.add.remove": "\u79FB\u9664\u5B83";
1341
1337
  readonly "panels.market.add.problem.invalidSpec": "\u8FD9\u4E2A\u5199\u6CD5\u4E0D\u8BA4\uFF1A\u4E0D\u80FD\u662F\u7A7A\u7684\uFF0C\u4E5F\u4E0D\u80FD\u4EE5\u6A2A\u6760\u5F00\u5934\u3002";
@@ -1460,12 +1456,6 @@ export declare const kit: {
1460
1456
  relativeTime(epochMs: number, t: apiModule.TimeTranslate): string;
1461
1457
  shortenPath(path: unknown): string;
1462
1458
  parseLocalTimestamp(text: string | null | undefined): number;
1463
- LINK_BUTTON_STYLE: {
1464
- readonly display: "inline-flex";
1465
- readonly alignItems: "center";
1466
- readonly gap: "var(--wb-gap-xs)";
1467
- readonly textDecoration: "none";
1468
- };
1469
1459
  };
1470
1460
  lib: {
1471
1461
  blockerOfError(error: apiModule.ApiError | undefined, t: apiModule.Translate, context?: {
@@ -1649,7 +1639,8 @@ export declare const kit: {
1649
1639
  readonly "panels.market.badSource": "\u5B89\u88C5\u65B9\u5F0F\u6CA1\u5199\u5168\uFF0C\u53EA\u80FD\u81EA\u5DF1\u52A8\u624B";
1650
1640
  readonly "panels.market.empty": "\u6682\u65E0\u53EF\u7528\u6A21\u5757";
1651
1641
  readonly "panels.market.installedSection": "\u5DF2\u88C5";
1652
- readonly "panels.market.moduleUpdate": "\u6709\u65B0\u7248 {version}\uFF1A\u5B89\u88C5\u5B8C\u6210\u540E\u53EF\u80FD\u9700\u8981\u91CD\u542F\u624D\u751F\u6548\u3002";
1642
+ readonly "panels.market.moduleOutdated": "\u6709\u65B0\u7248";
1643
+ readonly "panels.market.moduleRestartHint": "\u5B89\u88C5\u5B8C\u6210\u540E\u53EF\u80FD\u9700\u8981\u91CD\u542F\u624D\u751F\u6548";
1653
1644
  readonly "panels.market.restartNeeded": "\u65B0\u7248\u88C5\u597D\u4E86\uFF0C\u91CD\u542F\u4E00\u6B21\u624D\u751F\u6548\u3002";
1654
1645
  readonly "panels.market.foot": "\u88C5\u597D\u540E\u5230\u90A3\u4E2A\u9879\u76EE\u7684\u9762\u677F\u9875\u52FE\u9009\u5B83\uFF0C\u6A21\u5757\u624D\u4F1A\u51FA\u73B0\u3002";
1655
1646
  readonly "panels.market.recheck": "\u91CD\u65B0\u68C0\u67E5\u66F4\u65B0";
@@ -1746,11 +1737,10 @@ export declare const kit: {
1746
1737
  readonly "panels.market.add.doneRestart": "\u88C5\u597D\u4E86\uFF0C\u91CD\u542F\u4E00\u6B21\u624D\u751F\u6548\u3002";
1747
1738
  readonly "panels.market.add.cancelled": "\u5DF2\u53D6\u6D88\u3002";
1748
1739
  readonly "panels.market.add.failed": "\u6CA1\u6210\u529F\uFF1A{reason}";
1749
- readonly "panels.market.add.supplyInstalled": "\u5B83\u8981\u7684\u63D2\u4EF6\u4E5F\u88C5\u4E0A\u4E86\u3002";
1740
+ readonly "panels.market.add.removed": "\u5DF2\u7ECF\u79FB\u9664\u4E86\u3002";
1750
1741
  readonly "panels.market.add.supplyPending": "\u5B83\u8981\u7684\u63D2\u4EF6\u91CD\u542F\u540E\u518D\u88C5\u3002";
1751
1742
  readonly "panels.market.add.supplyFailed": "\u5B83\u8981\u7684\u63D2\u4EF6\u6CA1\u88C5\u4E0A\uFF1A{reason}";
1752
1743
  readonly "panels.market.add.notModule": "\u8FD9\u4E0D\u662F\u5DE5\u4F5C\u53F0\u6A21\u5757\uFF08\u6CA1\u6709 dsh.workbench \u58F0\u660E\uFF09\uFF0C\u4E0D\u4F1A\u51FA\u73B0\u5728\u9762\u677F\u4E0A\u3002";
1753
- readonly "panels.market.add.removed": "\u5DF2\u7ECF\u79FB\u9664\u4E86\u3002";
1754
1744
  readonly "panels.market.add.removedRestart": "\u5378\u6389\u4E86\uFF0C\u91CD\u542F\u4E00\u6B21\u624D\u5F7B\u5E95\u751F\u6548\u3002";
1755
1745
  readonly "panels.market.add.remove": "\u79FB\u9664\u5B83";
1756
1746
  readonly "panels.market.add.problem.invalidSpec": "\u8FD9\u4E2A\u5199\u6CD5\u4E0D\u8BA4\uFF1A\u4E0D\u80FD\u662F\u7A7A\u7684\uFF0C\u4E5F\u4E0D\u80FD\u4EE5\u6A2A\u6760\u5F00\u5934\u3002";
@@ -1856,7 +1846,7 @@ export declare const kit: {
1856
1846
  readonly "panel.conversation": "\u5BF9\u8BDD";
1857
1847
  readonly "panels.label": "\u5168\u5C40\u9762\u677F";
1858
1848
  };
1859
- 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.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" | "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.reset" | "panels.enabled" | "panels.disabled" | "panels.choose" | "panels.failed" | "panels.hintEffect" | "panels.dragHint" | "panels.unknownStep" | "panels.labelWithHint" | "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.outdated" | "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.noSource" | "panels.market.badSource" | "panels.market.empty" | "panels.market.installedSection" | "panels.market.moduleUpdate" | "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.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.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.supplyInstalled" | "panels.market.add.supplyPending" | "panels.market.add.supplyFailed" | "panels.market.add.notModule" | "panels.market.add.removed" | "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.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.refresh" | "rightbar.refreshing" | "rightbar.updatedAt" | "rightbar.noProject" | "coding.notARepo.title" | "error.unknown" | "board.title" | "panel.conversation" | "panels.label", string>;
1849
+ 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.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" | "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.reset" | "panels.enabled" | "panels.disabled" | "panels.choose" | "panels.failed" | "panels.hintEffect" | "panels.dragHint" | "panels.unknownStep" | "panels.labelWithHint" | "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.outdated" | "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.noSource" | "panels.market.badSource" | "panels.market.empty" | "panels.market.installedSection" | "panels.market.moduleOutdated" | "panels.market.moduleRestartHint" | "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.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.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.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.refresh" | "rightbar.refreshing" | "rightbar.updatedAt" | "rightbar.noProject" | "coding.notARepo.title" | "error.unknown" | "board.title" | "panel.conversation" | "panels.label", string>;
1860
1850
  };
1861
1851
  mergeMessages(base: apiModule.Dictionaries, contributions: readonly apiModule.MessagesContribution[]): apiModule.Dictionaries;
1862
1852
  zh: {
@@ -1939,7 +1929,8 @@ export declare const kit: {
1939
1929
  readonly "panels.market.badSource": "\u5B89\u88C5\u65B9\u5F0F\u6CA1\u5199\u5168\uFF0C\u53EA\u80FD\u81EA\u5DF1\u52A8\u624B";
1940
1930
  readonly "panels.market.empty": "\u6682\u65E0\u53EF\u7528\u6A21\u5757";
1941
1931
  readonly "panels.market.installedSection": "\u5DF2\u88C5";
1942
- readonly "panels.market.moduleUpdate": "\u6709\u65B0\u7248 {version}\uFF1A\u5B89\u88C5\u5B8C\u6210\u540E\u53EF\u80FD\u9700\u8981\u91CD\u542F\u624D\u751F\u6548\u3002";
1932
+ readonly "panels.market.moduleOutdated": "\u6709\u65B0\u7248";
1933
+ readonly "panels.market.moduleRestartHint": "\u5B89\u88C5\u5B8C\u6210\u540E\u53EF\u80FD\u9700\u8981\u91CD\u542F\u624D\u751F\u6548";
1943
1934
  readonly "panels.market.restartNeeded": "\u65B0\u7248\u88C5\u597D\u4E86\uFF0C\u91CD\u542F\u4E00\u6B21\u624D\u751F\u6548\u3002";
1944
1935
  readonly "panels.market.foot": "\u88C5\u597D\u540E\u5230\u90A3\u4E2A\u9879\u76EE\u7684\u9762\u677F\u9875\u52FE\u9009\u5B83\uFF0C\u6A21\u5757\u624D\u4F1A\u51FA\u73B0\u3002";
1945
1936
  readonly "panels.market.recheck": "\u91CD\u65B0\u68C0\u67E5\u66F4\u65B0";
@@ -2036,11 +2027,10 @@ export declare const kit: {
2036
2027
  readonly "panels.market.add.doneRestart": "\u88C5\u597D\u4E86\uFF0C\u91CD\u542F\u4E00\u6B21\u624D\u751F\u6548\u3002";
2037
2028
  readonly "panels.market.add.cancelled": "\u5DF2\u53D6\u6D88\u3002";
2038
2029
  readonly "panels.market.add.failed": "\u6CA1\u6210\u529F\uFF1A{reason}";
2039
- readonly "panels.market.add.supplyInstalled": "\u5B83\u8981\u7684\u63D2\u4EF6\u4E5F\u88C5\u4E0A\u4E86\u3002";
2030
+ readonly "panels.market.add.removed": "\u5DF2\u7ECF\u79FB\u9664\u4E86\u3002";
2040
2031
  readonly "panels.market.add.supplyPending": "\u5B83\u8981\u7684\u63D2\u4EF6\u91CD\u542F\u540E\u518D\u88C5\u3002";
2041
2032
  readonly "panels.market.add.supplyFailed": "\u5B83\u8981\u7684\u63D2\u4EF6\u6CA1\u88C5\u4E0A\uFF1A{reason}";
2042
2033
  readonly "panels.market.add.notModule": "\u8FD9\u4E0D\u662F\u5DE5\u4F5C\u53F0\u6A21\u5757\uFF08\u6CA1\u6709 dsh.workbench \u58F0\u660E\uFF09\uFF0C\u4E0D\u4F1A\u51FA\u73B0\u5728\u9762\u677F\u4E0A\u3002";
2043
- readonly "panels.market.add.removed": "\u5DF2\u7ECF\u79FB\u9664\u4E86\u3002";
2044
2034
  readonly "panels.market.add.removedRestart": "\u5378\u6389\u4E86\uFF0C\u91CD\u542F\u4E00\u6B21\u624D\u5F7B\u5E95\u751F\u6548\u3002";
2045
2035
  readonly "panels.market.add.remove": "\u79FB\u9664\u5B83";
2046
2036
  readonly "panels.market.add.problem.invalidSpec": "\u8FD9\u4E2A\u5199\u6CD5\u4E0D\u8BA4\uFF1A\u4E0D\u80FD\u662F\u7A7A\u7684\uFF0C\u4E5F\u4E0D\u80FD\u4EE5\u6A2A\u6760\u5F00\u5934\u3002";
@@ -2165,12 +2155,6 @@ export declare const kit: {
2165
2155
  relativeTime(epochMs: number, t: apiModule.TimeTranslate): string;
2166
2156
  shortenPath(path: unknown): string;
2167
2157
  parseLocalTimestamp(text: string | null | undefined): number;
2168
- LINK_BUTTON_STYLE: {
2169
- readonly display: "inline-flex";
2170
- readonly alignItems: "center";
2171
- readonly gap: "var(--wb-gap-xs)";
2172
- readonly textDecoration: "none";
2173
- };
2174
2158
  };
2175
2159
  };
2176
2160
  export declare const inject: string[];
@@ -9,7 +9,6 @@ export interface AddModuleMock {
9
9
  readonly preview?: AddModulePreview;
10
10
  readonly outcome?: AddModuleOutcome;
11
11
  readonly failure?: string;
12
- readonly removed?: boolean;
13
12
  }
14
13
  export declare const ADD_MODULE_MOCKS: readonly AddModuleMock[];
15
14
  export declare function stateOfMock(base: AddModuleState, mock: AddModuleMock): AddModuleState;
@@ -28,7 +28,6 @@ export interface AddModuleState {
28
28
  readonly preview: AddModulePreview | null;
29
29
  readonly outcome: AddModuleOutcome | null;
30
30
  readonly failure: string | null;
31
- readonly removed: boolean;
32
31
  readonly builds: readonly string[];
33
32
  setSpec(value: string): void;
34
33
  setChoice(choice: RegistryChoice): void;
@@ -5,12 +5,13 @@ export type MarketState = 'checking' | 'installed' | 'outdated' | 'missing' | 'u
5
5
  export declare const MARKET_STATE_KEY: Readonly<Record<MarketState, string>>;
6
6
  export declare const MARKET_DOT: Readonly<Record<MarketState, 'ongoing' | 'done' | 'warning' | 'idle'>>;
7
7
  export interface MarketNote {
8
- readonly key: 'panels.market.needEnv' | 'panels.market.noSource' | 'panels.market.badSource' | 'panels.market.moduleUpdate';
8
+ readonly key: 'panels.market.needEnv' | 'panels.market.noSource' | 'panels.market.badSource' | 'panels.market.moduleRestartHint';
9
9
  readonly params: Readonly<Record<string, string>>;
10
10
  }
11
+ export type MarketHintKey = 'panels.market.moduleRestartHint';
11
12
  export interface ModuleUpdate {
12
13
  readonly installed: string;
13
- readonly latest: string;
14
+ readonly latest?: string;
14
15
  }
15
16
  export type ModuleUpdateMap = Readonly<Record<string, ModuleUpdate>>;
16
17
  export interface MarketRow {
@@ -21,6 +22,11 @@ export interface MarketRow {
21
22
  readonly canUpdate: boolean;
22
23
  readonly canUninstall: boolean;
23
24
  readonly note?: MarketNote;
25
+ readonly hint?: MarketHintKey;
26
+ readonly version?: {
27
+ readonly installed?: string;
28
+ readonly latest?: string;
29
+ };
24
30
  readonly moduleUpdate?: ModuleUpdate;
25
31
  readonly pkg?: string;
26
32
  }
@@ -36,6 +36,7 @@ export type DependencyPlan = readonly PluginSourceCommand[] | undefined;
36
36
  export declare function dependencyCommandPlan(options: {
37
37
  readonly target: DependencyTarget;
38
38
  readonly capability: UnitCapability | undefined;
39
+ readonly capabilities?: ReadonlyMap<string, UnitCapability> | undefined;
39
40
  readonly command: string;
40
41
  }): DependencyPlan;
41
42
  export declare function sourceProblemText(problem: PluginSourceProblem, env: string | undefined): string;
@@ -1,5 +1,5 @@
1
- import type { DshHostContext } from '@dsh-workbench/shared';
1
+ import type { DshHostContext, DshShell } from '@dsh-workbench/shared';
2
2
  import { type RouteHandler } from '@dsh-workbench/shared/host';
3
3
  export declare function bundleRegistriesHandler(ctx: DshHostContext): RouteHandler;
4
- export declare function moduleVersionsHandler(ctx: DshHostContext): RouteHandler;
4
+ export declare function moduleVersionsHandler(ctx: DshHostContext, shell: DshShell | undefined): RouteHandler;
5
5
  export declare function bundleInspectHandler(ctx: DshHostContext): RouteHandler;