@dsh-workbench/core 0.2.2 → 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.
package/client.js CHANGED
@@ -1243,6 +1243,8 @@ window.__ModuleLoader__.load({
1243
1243
  "project.search.label": "Search workspaces",
1244
1244
  "project.search.placeholder": "Search workspaces (folder / name / path)",
1245
1245
  "project.search.empty": "No workspace matches “{query}”.",
1246
+ "project.group.workspaces": "Workspaces",
1247
+ "project.group.workshop": "Workshop",
1246
1248
  "project.rename.row": "Rename “{name}”",
1247
1249
  "project.rename.current": "Give this workspace a display name…",
1248
1250
  "project.rename.title": "Give “{name}” a display name",
@@ -1417,6 +1419,7 @@ window.__ModuleLoader__.load({
1417
1419
  "panels.market.add.failureIntegrity": "The downloaded package failed its integrity check",
1418
1420
  "panels.market.add.failureTimeout": "The install timed out",
1419
1421
  "panels.market.add.failurePnpmMissing": "pnpm was not found, cannot install",
1422
+ "panels.market.add.failureInstalled": "It is already in this profile: this dsh runs with hot reload, which refuses to install over the same package (remove it first) — and removing it failed too",
1420
1423
  "panels.market.add.failureGeneric": "Something went wrong during install — see the install details",
1421
1424
  "panels.market.add.approveTitle": "Your approval is needed for install scripts",
1422
1425
  "panels.market.add.approveCaution": "Only allow packages you trust: install scripts run on this machine with your permissions.",
@@ -1588,6 +1591,8 @@ window.__ModuleLoader__.load({
1588
1591
  "project.search.label": "搜索工作区",
1589
1592
  "project.search.placeholder": "搜索工作区(目录名 / 中文名 / 路径)",
1590
1593
  "project.search.empty": "没有匹配「{query}」的工作区。",
1594
+ "project.group.workspaces": "工作区",
1595
+ "project.group.workshop": "工坊",
1591
1596
  "project.rename.row": "改「{name}」的中文名",
1592
1597
  "project.rename.current": "改当前工作区的中文名…",
1593
1598
  "project.rename.title": "给「{name}」配一个中文名",
@@ -1762,6 +1767,7 @@ window.__ModuleLoader__.load({
1762
1767
  "panels.market.add.failureIntegrity": "下载的安装包校验失败",
1763
1768
  "panels.market.add.failureTimeout": "安装超时",
1764
1769
  "panels.market.add.failurePnpmMissing": "没有找到 pnpm,无法安装",
1770
+ "panels.market.add.failureInstalled": "它已经在这份 profile 里了:这一版 dsh 开着热更新,同一个包不许就地覆盖装(得先卸载再装),而这次也没能把它卸下来",
1765
1771
  "panels.market.add.failureGeneric": "安装过程中出错,原因见安装详情",
1766
1772
  "panels.market.add.approveTitle": "需要你允许安装脚本",
1767
1773
  "panels.market.add.approveCaution": "只允许你信得过的包:安装脚本会以你的权限在这台机器上运行。",
@@ -4692,6 +4698,7 @@ window.__ModuleLoader__.load({
4692
4698
  integrity: "panels.market.add.failureIntegrity",
4693
4699
  timeout: "panels.market.add.failureTimeout",
4694
4700
  "pnpm-missing": "panels.market.add.failurePnpmMissing",
4701
+ "already-installed": "panels.market.add.failureInstalled",
4695
4702
  "operation-error": "panels.market.add.failureGeneric",
4696
4703
  "incompatible-version": "panels.market.add.failureGeneric",
4697
4704
  "not-bundle": "panels.market.add.failureGeneric",
@@ -6254,8 +6261,12 @@ window.__ModuleLoader__.load({
6254
6261
  //#endregion
6255
6262
  //#region src/shared/api/diy.ts
6256
6263
  var DIY_PRESET_ID = "workbench-diy";
6264
+ var WORKSHOP_RELATIVE = "workbench/diy";
6257
6265
  var WORKSHOP_TITLE = "工作台DIY";
6258
6266
  var WORKSHOP_PAST_TITLES = ["DIY 工坊", "工作台自带 · DIY 模块住这儿"];
6267
+ function isWorkshopPath(path) {
6268
+ return path.replace(/\\/g, "/").replace(/\/+$/, "").endsWith(`/${WORKSHOP_RELATIVE}`);
6269
+ }
6259
6270
  //#endregion
6260
6271
  //#region src/app/units/index.ts
6261
6272
  var CLIENT_UNITS = [];
@@ -8783,6 +8794,29 @@ window.__ModuleLoader__.load({
8783
8794
  }));
8784
8795
  }
8785
8796
  //#endregion
8797
+ //#region src/app/layouts/sidebar/workspace-groups.ts
8798
+ function workspaceSections(items, headings) {
8799
+ const workspaces = [];
8800
+ const workshop = [];
8801
+ for (const item of items) if (isWorkshopPath(item.path)) workshop.push(item);
8802
+ else workspaces.push(item);
8803
+ const sections = [];
8804
+ if (workspaces.length > 0) sections.push({
8805
+ id: "workspaces",
8806
+ heading: workshop.length > 0 ? headings.workspaces : null,
8807
+ items: workspaces
8808
+ });
8809
+ if (workshop.length > 0) sections.push({
8810
+ id: "workshop",
8811
+ heading: headings.workshop,
8812
+ items: workshop
8813
+ });
8814
+ return sections;
8815
+ }
8816
+ function flattenSections(sections) {
8817
+ return sections.flatMap((section) => section.items);
8818
+ }
8819
+ //#endregion
8786
8820
  //#region src/app/layouts/sidebar/WorkspaceRowAction.tsx
8787
8821
  function WorkspaceRowAction({ workspace, t, onEdit }) {
8788
8822
  return /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
@@ -8830,8 +8864,8 @@ window.__ModuleLoader__.load({
8830
8864
  //#endregion
8831
8865
  //#region src/app/layouts/sidebar/workspace-items.tsx
8832
8866
  function workspaceMenuItems(options) {
8833
- const { results, currentId, hoverId, t, onHover, onEdit } = options;
8834
- return results.map((workspace) => ({
8867
+ const { sections, currentId, hoverId, t, onHover, onEdit } = options;
8868
+ const rowOf = (workspace) => ({
8835
8869
  id: workspace.workspaceId,
8836
8870
  icon: /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconFolderOpenRegular, { size: 16 }),
8837
8871
  label: /* @__PURE__ */ h(WorkspaceRowLabel, {
@@ -8844,7 +8878,12 @@ window.__ModuleLoader__.load({
8844
8878
  onEdit: () => onEdit(workspace)
8845
8879
  }) : void 0
8846
8880
  })
8847
- }));
8881
+ });
8882
+ return sections.flatMap((section) => [...section.heading === null ? [] : [{
8883
+ type: "label",
8884
+ id: section.id,
8885
+ text: section.heading
8886
+ }], ...section.items.map(rowOf)]);
8848
8887
  }
8849
8888
  //#endregion
8850
8889
  //#region src/app/layouts/sidebar/ProjectSwitcher.tsx
@@ -8864,7 +8903,12 @@ window.__ModuleLoader__.load({
8864
8903
  const wasOpenRef = useRef(false);
8865
8904
  const currentId = current?.workspaceId ?? null;
8866
8905
  const results = useMemo(() => matchWorkspaces(items, query), [items, query]);
8867
- const cursorId = cursor === null || results.length === 0 ? null : results[Math.min(cursor, results.length - 1)]?.workspaceId ?? null;
8906
+ const sections = useMemo(() => workspaceSections(results, {
8907
+ workspaces: t("project.group.workspaces"),
8908
+ workshop: t("project.group.workshop")
8909
+ }), [results, t]);
8910
+ const ordered = useMemo(() => flattenSections(sections), [sections]);
8911
+ const cursorId = cursor === null || ordered.length === 0 ? null : ordered[Math.min(cursor, ordered.length - 1)]?.workspaceId ?? null;
8868
8912
  useEffect(() => {
8869
8913
  if (open) {
8870
8914
  wasOpenRef.current = true;
@@ -8887,11 +8931,11 @@ window.__ModuleLoader__.load({
8887
8931
  setCursor(null);
8888
8932
  },
8889
8933
  onCursor: (step) => {
8890
- if (results.length === 0) return;
8891
- setCursor((at) => at === null ? step === 1 ? 0 : results.length - 1 : (at + step + results.length) % results.length);
8934
+ if (ordered.length === 0) return;
8935
+ setCursor((at) => at === null ? step === 1 ? 0 : ordered.length - 1 : (at + step + ordered.length) % ordered.length);
8892
8936
  },
8893
8937
  onSubmit: () => {
8894
- const pick = results[Math.min(cursor ?? 0, results.length - 1)];
8938
+ const pick = ordered[Math.min(cursor ?? 0, ordered.length - 1)];
8895
8939
  if (pick === void 0) return;
8896
8940
  close();
8897
8941
  onPick(pick.workspaceId);
@@ -8921,7 +8965,7 @@ window.__ModuleLoader__.load({
8921
8965
  id: "empty",
8922
8966
  text: t("project.search.empty", { query: query.trim() })
8923
8967
  }] : [], ...workspaceMenuItems({
8924
- results,
8968
+ sections,
8925
8969
  currentId,
8926
8970
  hoverId,
8927
8971
  t,
@@ -9642,7 +9686,7 @@ window.__ModuleLoader__.load({
9642
9686
  disposeDictionary?.();
9643
9687
  };
9644
9688
  }, "dsh-workbench: dictionaries");
9645
- const workshopWorkspace = () => ctx.workspaces.list.getSnapshot().items.find((item) => item.path.endsWith("/workbench/diy"));
9689
+ const workshopWorkspace = () => ctx.workspaces.list.getSnapshot().items.find((item) => isWorkshopPath(item.path));
9646
9690
  const openDiySession = (workspaceId, fallback) => {
9647
9691
  const remoteCreate = sessionCreateOf(ctx.remote);
9648
9692
  try {
@@ -1236,6 +1236,8 @@ var en = {
1236
1236
  "project.search.label": "Search workspaces",
1237
1237
  "project.search.placeholder": "Search workspaces (folder / name / path)",
1238
1238
  "project.search.empty": "No workspace matches “{query}”.",
1239
+ "project.group.workspaces": "Workspaces",
1240
+ "project.group.workshop": "Workshop",
1239
1241
  "project.rename.row": "Rename “{name}”",
1240
1242
  "project.rename.current": "Give this workspace a display name…",
1241
1243
  "project.rename.title": "Give “{name}” a display name",
@@ -1410,6 +1412,7 @@ var en = {
1410
1412
  "panels.market.add.failureIntegrity": "The downloaded package failed its integrity check",
1411
1413
  "panels.market.add.failureTimeout": "The install timed out",
1412
1414
  "panels.market.add.failurePnpmMissing": "pnpm was not found, cannot install",
1415
+ "panels.market.add.failureInstalled": "It is already in this profile: this dsh runs with hot reload, which refuses to install over the same package (remove it first) — and removing it failed too",
1413
1416
  "panels.market.add.failureGeneric": "Something went wrong during install — see the install details",
1414
1417
  "panels.market.add.approveTitle": "Your approval is needed for install scripts",
1415
1418
  "panels.market.add.approveCaution": "Only allow packages you trust: install scripts run on this machine with your permissions.",
@@ -1581,6 +1584,8 @@ var zh = {
1581
1584
  "project.search.label": "搜索工作区",
1582
1585
  "project.search.placeholder": "搜索工作区(目录名 / 中文名 / 路径)",
1583
1586
  "project.search.empty": "没有匹配「{query}」的工作区。",
1587
+ "project.group.workspaces": "工作区",
1588
+ "project.group.workshop": "工坊",
1584
1589
  "project.rename.row": "改「{name}」的中文名",
1585
1590
  "project.rename.current": "改当前工作区的中文名…",
1586
1591
  "project.rename.title": "给「{name}」配一个中文名",
@@ -1755,6 +1760,7 @@ var zh = {
1755
1760
  "panels.market.add.failureIntegrity": "下载的安装包校验失败",
1756
1761
  "panels.market.add.failureTimeout": "安装超时",
1757
1762
  "panels.market.add.failurePnpmMissing": "没有找到 pnpm,无法安装",
1763
+ "panels.market.add.failureInstalled": "它已经在这份 profile 里了:这一版 dsh 开着热更新,同一个包不许就地覆盖装(得先卸载再装),而这次也没能把它卸下来",
1758
1764
  "panels.market.add.failureGeneric": "安装过程中出错,原因见安装详情",
1759
1765
  "panels.market.add.approveTitle": "需要你允许安装脚本",
1760
1766
  "panels.market.add.approveCaution": "只允许你信得过的包:安装脚本会以你的权限在这台机器上运行。",
@@ -4685,6 +4691,7 @@ var FAILURE_KEYS = {
4685
4691
  integrity: "panels.market.add.failureIntegrity",
4686
4692
  timeout: "panels.market.add.failureTimeout",
4687
4693
  "pnpm-missing": "panels.market.add.failurePnpmMissing",
4694
+ "already-installed": "panels.market.add.failureInstalled",
4688
4695
  "operation-error": "panels.market.add.failureGeneric",
4689
4696
  "incompatible-version": "panels.market.add.failureGeneric",
4690
4697
  "not-bundle": "panels.market.add.failureGeneric",
@@ -6247,8 +6254,12 @@ function registerMarketPanel(ctx, units) {
6247
6254
  //#endregion
6248
6255
  //#region src/shared/api/diy.ts
6249
6256
  var DIY_PRESET_ID = "workbench-diy";
6257
+ var WORKSHOP_RELATIVE = "workbench/diy";
6250
6258
  var WORKSHOP_TITLE = "工作台DIY";
6251
6259
  var WORKSHOP_PAST_TITLES = ["DIY 工坊", "工作台自带 · DIY 模块住这儿"];
6260
+ function isWorkshopPath(path) {
6261
+ return path.replace(/\\/g, "/").replace(/\/+$/, "").endsWith(`/${WORKSHOP_RELATIVE}`);
6262
+ }
6252
6263
  //#endregion
6253
6264
  //#region src/app/units/index.ts
6254
6265
  var CLIENT_UNITS = [];
@@ -8776,6 +8787,29 @@ function WorkspaceSearchField({ t, query, onQuery, onCursor, onSubmit }) {
8776
8787
  }));
8777
8788
  }
8778
8789
  //#endregion
8790
+ //#region src/app/layouts/sidebar/workspace-groups.ts
8791
+ function workspaceSections(items, headings) {
8792
+ const workspaces = [];
8793
+ const workshop = [];
8794
+ for (const item of items) if (isWorkshopPath(item.path)) workshop.push(item);
8795
+ else workspaces.push(item);
8796
+ const sections = [];
8797
+ if (workspaces.length > 0) sections.push({
8798
+ id: "workspaces",
8799
+ heading: workshop.length > 0 ? headings.workspaces : null,
8800
+ items: workspaces
8801
+ });
8802
+ if (workshop.length > 0) sections.push({
8803
+ id: "workshop",
8804
+ heading: headings.workshop,
8805
+ items: workshop
8806
+ });
8807
+ return sections;
8808
+ }
8809
+ function flattenSections(sections) {
8810
+ return sections.flatMap((section) => section.items);
8811
+ }
8812
+ //#endregion
8779
8813
  //#region src/app/layouts/sidebar/WorkspaceRowAction.tsx
8780
8814
  function WorkspaceRowAction({ workspace, t, onEdit }) {
8781
8815
  return /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.Button, {
@@ -8823,8 +8857,8 @@ function WorkspaceRowLabel({ workspace, current, action, onHover }) {
8823
8857
  //#endregion
8824
8858
  //#region src/app/layouts/sidebar/workspace-items.tsx
8825
8859
  function workspaceMenuItems(options) {
8826
- const { results, currentId, hoverId, t, onHover, onEdit } = options;
8827
- return results.map((workspace) => ({
8860
+ const { sections, currentId, hoverId, t, onHover, onEdit } = options;
8861
+ const rowOf = (workspace) => ({
8828
8862
  id: workspace.workspaceId,
8829
8863
  icon: /* @__PURE__ */ h(_deepseek_ai_dsh_client_ui_primitives.IconFolderOpenRegular, { size: 16 }),
8830
8864
  label: /* @__PURE__ */ h(WorkspaceRowLabel, {
@@ -8837,7 +8871,12 @@ function workspaceMenuItems(options) {
8837
8871
  onEdit: () => onEdit(workspace)
8838
8872
  }) : void 0
8839
8873
  })
8840
- }));
8874
+ });
8875
+ return sections.flatMap((section) => [...section.heading === null ? [] : [{
8876
+ type: "label",
8877
+ id: section.id,
8878
+ text: section.heading
8879
+ }], ...section.items.map(rowOf)]);
8841
8880
  }
8842
8881
  //#endregion
8843
8882
  //#region src/app/layouts/sidebar/ProjectSwitcher.tsx
@@ -8857,7 +8896,12 @@ function ProjectSwitcher({ items, current, onPick, onAdd, onRename, t }) {
8857
8896
  const wasOpenRef = useRef(false);
8858
8897
  const currentId = current?.workspaceId ?? null;
8859
8898
  const results = useMemo(() => matchWorkspaces(items, query), [items, query]);
8860
- const cursorId = cursor === null || results.length === 0 ? null : results[Math.min(cursor, results.length - 1)]?.workspaceId ?? null;
8899
+ const sections = useMemo(() => workspaceSections(results, {
8900
+ workspaces: t("project.group.workspaces"),
8901
+ workshop: t("project.group.workshop")
8902
+ }), [results, t]);
8903
+ const ordered = useMemo(() => flattenSections(sections), [sections]);
8904
+ const cursorId = cursor === null || ordered.length === 0 ? null : ordered[Math.min(cursor, ordered.length - 1)]?.workspaceId ?? null;
8861
8905
  useEffect(() => {
8862
8906
  if (open) {
8863
8907
  wasOpenRef.current = true;
@@ -8880,11 +8924,11 @@ function ProjectSwitcher({ items, current, onPick, onAdd, onRename, t }) {
8880
8924
  setCursor(null);
8881
8925
  },
8882
8926
  onCursor: (step) => {
8883
- if (results.length === 0) return;
8884
- setCursor((at) => at === null ? step === 1 ? 0 : results.length - 1 : (at + step + results.length) % results.length);
8927
+ if (ordered.length === 0) return;
8928
+ setCursor((at) => at === null ? step === 1 ? 0 : ordered.length - 1 : (at + step + ordered.length) % ordered.length);
8885
8929
  },
8886
8930
  onSubmit: () => {
8887
- const pick = results[Math.min(cursor ?? 0, results.length - 1)];
8931
+ const pick = ordered[Math.min(cursor ?? 0, ordered.length - 1)];
8888
8932
  if (pick === void 0) return;
8889
8933
  close();
8890
8934
  onPick(pick.workspaceId);
@@ -8914,7 +8958,7 @@ function ProjectSwitcher({ items, current, onPick, onAdd, onRename, t }) {
8914
8958
  id: "empty",
8915
8959
  text: t("project.search.empty", { query: query.trim() })
8916
8960
  }] : [], ...workspaceMenuItems({
8917
- results,
8961
+ sections,
8918
8962
  currentId,
8919
8963
  hoverId,
8920
8964
  t,
@@ -9635,7 +9679,7 @@ function mount(ctx) {
9635
9679
  disposeDictionary?.();
9636
9680
  };
9637
9681
  }, "dsh-workbench: dictionaries");
9638
- const workshopWorkspace = () => ctx.workspaces.list.getSnapshot().items.find((item) => item.path.endsWith("/workbench/diy"));
9682
+ const workshopWorkspace = () => ctx.workspaces.list.getSnapshot().items.find((item) => isWorkshopPath(item.path));
9639
9683
  const openDiySession = (workspaceId, fallback) => {
9640
9684
  const remoteCreate = sessionCreateOf(ctx.remote);
9641
9685
  try {
@@ -1239,6 +1239,8 @@ var en = {
1239
1239
  "project.search.label": "Search workspaces",
1240
1240
  "project.search.placeholder": "Search workspaces (folder / name / path)",
1241
1241
  "project.search.empty": "No workspace matches “{query}”.",
1242
+ "project.group.workspaces": "Workspaces",
1243
+ "project.group.workshop": "Workshop",
1242
1244
  "project.rename.row": "Rename “{name}”",
1243
1245
  "project.rename.current": "Give this workspace a display name…",
1244
1246
  "project.rename.title": "Give “{name}” a display name",
@@ -1413,6 +1415,7 @@ var en = {
1413
1415
  "panels.market.add.failureIntegrity": "The downloaded package failed its integrity check",
1414
1416
  "panels.market.add.failureTimeout": "The install timed out",
1415
1417
  "panels.market.add.failurePnpmMissing": "pnpm was not found, cannot install",
1418
+ "panels.market.add.failureInstalled": "It is already in this profile: this dsh runs with hot reload, which refuses to install over the same package (remove it first) — and removing it failed too",
1416
1419
  "panels.market.add.failureGeneric": "Something went wrong during install — see the install details",
1417
1420
  "panels.market.add.approveTitle": "Your approval is needed for install scripts",
1418
1421
  "panels.market.add.approveCaution": "Only allow packages you trust: install scripts run on this machine with your permissions.",
@@ -1584,6 +1587,8 @@ var zh = {
1584
1587
  "project.search.label": "搜索工作区",
1585
1588
  "project.search.placeholder": "搜索工作区(目录名 / 中文名 / 路径)",
1586
1589
  "project.search.empty": "没有匹配「{query}」的工作区。",
1590
+ "project.group.workspaces": "工作区",
1591
+ "project.group.workshop": "工坊",
1587
1592
  "project.rename.row": "改「{name}」的中文名",
1588
1593
  "project.rename.current": "改当前工作区的中文名…",
1589
1594
  "project.rename.title": "给「{name}」配一个中文名",
@@ -1758,6 +1763,7 @@ var zh = {
1758
1763
  "panels.market.add.failureIntegrity": "下载的安装包校验失败",
1759
1764
  "panels.market.add.failureTimeout": "安装超时",
1760
1765
  "panels.market.add.failurePnpmMissing": "没有找到 pnpm,无法安装",
1766
+ "panels.market.add.failureInstalled": "它已经在这份 profile 里了:这一版 dsh 开着热更新,同一个包不许就地覆盖装(得先卸载再装),而这次也没能把它卸下来",
1761
1767
  "panels.market.add.failureGeneric": "安装过程中出错,原因见安装详情",
1762
1768
  "panels.market.add.approveTitle": "需要你允许安装脚本",
1763
1769
  "panels.market.add.approveCaution": "只允许你信得过的包:安装脚本会以你的权限在这台机器上运行。",
@@ -4688,6 +4694,7 @@ var FAILURE_KEYS = {
4688
4694
  integrity: "panels.market.add.failureIntegrity",
4689
4695
  timeout: "panels.market.add.failureTimeout",
4690
4696
  "pnpm-missing": "panels.market.add.failurePnpmMissing",
4697
+ "already-installed": "panels.market.add.failureInstalled",
4691
4698
  "operation-error": "panels.market.add.failureGeneric",
4692
4699
  "incompatible-version": "panels.market.add.failureGeneric",
4693
4700
  "not-bundle": "panels.market.add.failureGeneric",
@@ -6250,8 +6257,12 @@ function registerMarketPanel(ctx, units) {
6250
6257
  //#endregion
6251
6258
  //#region src/shared/api/diy.ts
6252
6259
  var DIY_PRESET_ID = "workbench-diy";
6260
+ var WORKSHOP_RELATIVE = "workbench/diy";
6253
6261
  var WORKSHOP_TITLE = "工作台DIY";
6254
6262
  var WORKSHOP_PAST_TITLES = ["DIY 工坊", "工作台自带 · DIY 模块住这儿"];
6263
+ function isWorkshopPath(path) {
6264
+ return path.replace(/\\/g, "/").replace(/\/+$/, "").endsWith(`/${WORKSHOP_RELATIVE}`);
6265
+ }
6255
6266
  //#endregion
6256
6267
  //#region src/app/units/index.ts
6257
6268
  var CLIENT_UNITS = [];
@@ -8779,6 +8790,29 @@ function WorkspaceSearchField({ t, query, onQuery, onCursor, onSubmit }) {
8779
8790
  }));
8780
8791
  }
8781
8792
  //#endregion
8793
+ //#region src/app/layouts/sidebar/workspace-groups.ts
8794
+ function workspaceSections(items, headings) {
8795
+ const workspaces = [];
8796
+ const workshop = [];
8797
+ for (const item of items) if (isWorkshopPath(item.path)) workshop.push(item);
8798
+ else workspaces.push(item);
8799
+ const sections = [];
8800
+ if (workspaces.length > 0) sections.push({
8801
+ id: "workspaces",
8802
+ heading: workshop.length > 0 ? headings.workspaces : null,
8803
+ items: workspaces
8804
+ });
8805
+ if (workshop.length > 0) sections.push({
8806
+ id: "workshop",
8807
+ heading: headings.workshop,
8808
+ items: workshop
8809
+ });
8810
+ return sections;
8811
+ }
8812
+ function flattenSections(sections) {
8813
+ return sections.flatMap((section) => section.items);
8814
+ }
8815
+ //#endregion
8782
8816
  //#region src/app/layouts/sidebar/WorkspaceRowAction.tsx
8783
8817
  function WorkspaceRowAction({ workspace, t, onEdit }) {
8784
8818
  return /* @__PURE__ */ h(Button, {
@@ -8826,8 +8860,8 @@ function WorkspaceRowLabel({ workspace, current, action, onHover }) {
8826
8860
  //#endregion
8827
8861
  //#region src/app/layouts/sidebar/workspace-items.tsx
8828
8862
  function workspaceMenuItems(options) {
8829
- const { results, currentId, hoverId, t, onHover, onEdit } = options;
8830
- return results.map((workspace) => ({
8863
+ const { sections, currentId, hoverId, t, onHover, onEdit } = options;
8864
+ const rowOf = (workspace) => ({
8831
8865
  id: workspace.workspaceId,
8832
8866
  icon: /* @__PURE__ */ h(IconFolderOpenRegular, { size: 16 }),
8833
8867
  label: /* @__PURE__ */ h(WorkspaceRowLabel, {
@@ -8840,7 +8874,12 @@ function workspaceMenuItems(options) {
8840
8874
  onEdit: () => onEdit(workspace)
8841
8875
  }) : void 0
8842
8876
  })
8843
- }));
8877
+ });
8878
+ return sections.flatMap((section) => [...section.heading === null ? [] : [{
8879
+ type: "label",
8880
+ id: section.id,
8881
+ text: section.heading
8882
+ }], ...section.items.map(rowOf)]);
8844
8883
  }
8845
8884
  //#endregion
8846
8885
  //#region src/app/layouts/sidebar/ProjectSwitcher.tsx
@@ -8860,7 +8899,12 @@ function ProjectSwitcher({ items, current, onPick, onAdd, onRename, t }) {
8860
8899
  const wasOpenRef = useRef(false);
8861
8900
  const currentId = current?.workspaceId ?? null;
8862
8901
  const results = useMemo(() => matchWorkspaces(items, query), [items, query]);
8863
- const cursorId = cursor === null || results.length === 0 ? null : results[Math.min(cursor, results.length - 1)]?.workspaceId ?? null;
8902
+ const sections = useMemo(() => workspaceSections(results, {
8903
+ workspaces: t("project.group.workspaces"),
8904
+ workshop: t("project.group.workshop")
8905
+ }), [results, t]);
8906
+ const ordered = useMemo(() => flattenSections(sections), [sections]);
8907
+ const cursorId = cursor === null || ordered.length === 0 ? null : ordered[Math.min(cursor, ordered.length - 1)]?.workspaceId ?? null;
8864
8908
  useEffect(() => {
8865
8909
  if (open) {
8866
8910
  wasOpenRef.current = true;
@@ -8883,11 +8927,11 @@ function ProjectSwitcher({ items, current, onPick, onAdd, onRename, t }) {
8883
8927
  setCursor(null);
8884
8928
  },
8885
8929
  onCursor: (step) => {
8886
- if (results.length === 0) return;
8887
- setCursor((at) => at === null ? step === 1 ? 0 : results.length - 1 : (at + step + results.length) % results.length);
8930
+ if (ordered.length === 0) return;
8931
+ setCursor((at) => at === null ? step === 1 ? 0 : ordered.length - 1 : (at + step + ordered.length) % ordered.length);
8888
8932
  },
8889
8933
  onSubmit: () => {
8890
- const pick = results[Math.min(cursor ?? 0, results.length - 1)];
8934
+ const pick = ordered[Math.min(cursor ?? 0, ordered.length - 1)];
8891
8935
  if (pick === void 0) return;
8892
8936
  close();
8893
8937
  onPick(pick.workspaceId);
@@ -8917,7 +8961,7 @@ function ProjectSwitcher({ items, current, onPick, onAdd, onRename, t }) {
8917
8961
  id: "empty",
8918
8962
  text: t("project.search.empty", { query: query.trim() })
8919
8963
  }] : [], ...workspaceMenuItems({
8920
- results,
8964
+ sections,
8921
8965
  currentId,
8922
8966
  hoverId,
8923
8967
  t,
@@ -9638,7 +9682,7 @@ function mount(ctx) {
9638
9682
  disposeDictionary?.();
9639
9683
  };
9640
9684
  }, "dsh-workbench: dictionaries");
9641
- const workshopWorkspace = () => ctx.workspaces.list.getSnapshot().items.find((item) => item.path.endsWith("/workbench/diy"));
9685
+ const workshopWorkspace = () => ctx.workspaces.list.getSnapshot().items.find((item) => isWorkshopPath(item.path));
9642
9686
  const openDiySession = (workspaceId, fallback) => {
9643
9687
  const remoteCreate = sessionCreateOf(ctx.remote);
9644
9688
  try {
@@ -2724,8 +2724,11 @@ function createRegistryNotebook(dir) {
2724
2724
  };
2725
2725
  }
2726
2726
  //#endregion
2727
- //#region src/shared/api/host/diy.ts
2727
+ //#region src/shared/api/diy.ts
2728
2728
  var WORKSHOP_RELATIVE = "workbench/diy";
2729
+ var WORKSHOP_TITLE = "工作台DIY";
2730
+ //#endregion
2731
+ //#region src/shared/api/host/diy.ts
2729
2732
  function workshopPathOf(ctx) {
2730
2733
  const homePath = ctx.get("dshHomePath");
2731
2734
  if (typeof homePath !== "function") return null;
@@ -4353,13 +4356,39 @@ function outcomeOf(deps, pkg, change, plugin) {
4353
4356
  };
4354
4357
  }
4355
4358
  async function installDshBundle(deps, spec, options) {
4356
- const change = await deps.manager.install({
4357
- 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 {
4358
4378
  ...options?.registry === void 0 ? {} : { registry: options.registry },
4359
4379
  ...options?.requestId === void 0 ? {} : { requestId: options.requestId },
4360
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)
4361
4387
  });
4362
4388
  if (change === null) throw new Error("插件管理器回的安装结果看不懂。");
4389
+ return change;
4390
+ }
4391
+ async function settle(deps, spec, options, change) {
4363
4392
  const pkg = bundleNameOf(change, spec);
4364
4393
  const module = deps.installed?.(pkg) ?? {
4365
4394
  kind: "unknown",
@@ -4813,6 +4842,11 @@ function createMarketService(options) {
4813
4842
  ...registries === void 0 ? {} : { registries },
4814
4843
  ...logger === void 0 ? {} : { logger }
4815
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
+ }
4816
4850
  function routeDeps(manager) {
4817
4851
  return {
4818
4852
  manager,
@@ -4820,6 +4854,7 @@ function createMarketService(options) {
4820
4854
  runAll,
4821
4855
  rememberSource: (manager, pkg, registry) => rememberInstalledSource(registryFix, manager, pkg, registry),
4822
4856
  supplyAfter,
4857
+ remove: (pkg) => removeInstalledBundle(manager, pkg),
4823
4858
  ...shell === void 0 ? {} : { shell },
4824
4859
  ...installed === void 0 ? {} : { installed },
4825
4860
  ...ledger === void 0 ? {} : { ledger },
@@ -4962,9 +4997,7 @@ function createMarketService(options) {
4962
4997
  const unit = module.kind === "module" ? module.unit : void 0;
4963
4998
  const manifest = unit === void 0 ? void 0 : catalog().find((item) => item.id === unit);
4964
4999
  const before = unit === void 0 ? void 0 : await capabilityOf(unit, true);
4965
- const first = await manager.remove(pkg);
4966
- if (first === null) throw new Error("插件管理器回的卸载结果看不懂。");
4967
- const change = await retryAfterRegistryFix(registryFix, manager, pkg, first);
5000
+ const change = await removeInstalledBundle(manager, pkg);
4968
5001
  if (change.application !== "applied" || unit === void 0) return {
4969
5002
  change,
4970
5003
  keptFor: []
@@ -4981,8 +5014,10 @@ function createMarketService(options) {
4981
5014
  return requireBundles().cancel(requestId);
4982
5015
  },
4983
5016
  async updateBundle(unit) {
4984
- const pkg = (modules?.() ?? []).find((item) => item.unit === unit)?.pkg;
4985
- 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;
4986
5021
  const read = installed?.(pkg) ?? {
4987
5022
  kind: "unknown",
4988
5023
  pkg
@@ -4995,7 +5030,7 @@ function createMarketService(options) {
4995
5030
  force: true
4996
5031
  });
4997
5032
  const spec = latest === void 0 ? pkg : `${pkg}@${latest}`;
4998
- const outcome = await installDshBundle(routeDeps(requireBundles()), spec, { ...registry === void 0 ? {} : { registry } });
5033
+ const outcome = await replaceDshBundle(routeDeps(requireBundles()), spec, { ...registry === void 0 ? {} : { registry } });
4999
5034
  await plugins.sweep();
5000
5035
  await service.update(unit).catch(() => void 0);
5001
5036
  return outcome;
@@ -5023,7 +5058,7 @@ function createMarketService(options) {
5023
5058
  if (missing.length > 0) throw new Error(`源上已经有 ${read.pkg}@${latest},但这一份发布还没铺齐:${missing.join("、")} 在这一版上还拉不到。装上会缺依赖,稍等再试 —— 市场页那颗「重新检查」会重新探一次。`);
5024
5059
  }
5025
5060
  const spec = latest === void 0 ? `${read.pkg}@latest` : `${read.pkg}@${latest}`;
5026
- const outcome = await installDshBundle(routeDeps(requireBundles()), spec, { ...registry === void 0 ? {} : { registry } });
5061
+ const outcome = await replaceDshBundle(routeDeps(requireBundles()), spec, { ...registry === void 0 ? {} : { registry } });
5027
5062
  logger?.info?.(`[dsh-workbench] 已更新工作台 ${read.version} → ${latest ?? "最新版"}`);
5028
5063
  return outcome;
5029
5064
  },
@@ -5162,8 +5197,19 @@ function render$1(entries, shared) {
5162
5197
  if (shared.length === 0) return modules;
5163
5198
  return `${modules}\n\n共用依赖(只有升级):\n${shared.map((dep) => `${dep.id} · ${stateOfDependency(dep)}${versionsOf(dep)}` + (dep.usedBy.length === 0 ? "" : ` · 供 ${dep.usedBy.join("、")} 使用`)).join("\n")}`;
5164
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
+ }
5165
5211
  function describeInstall(spec, module, supply, change) {
5166
- 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})`;
5167
5213
  }
5168
5214
  var OUTPUT_SCHEMA$1 = {
5169
5215
  type: "object",
@@ -5191,7 +5237,7 @@ function describePluginUninstall(pkg, outcome) {
5191
5237
  return `已从「你装的插件」里去掉 ${pkg}。${outcome.kept === void 0 ? "" : pluginKeptText(outcome.kept)}`;
5192
5238
  }
5193
5239
  function describeWorkbenchUpdate(change) {
5194
- if (change.application === "failed" || change.application === "cancelled") return `没成功:${change.errorCode ?? change.application}`;
5240
+ if (change.application === "failed" || change.application === "cancelled") return `没成功:${failureText(change)}`;
5195
5241
  return change.application === "restart-required" ? "工作台更新到新版了 —— 这一版要重启一次 dsh 才生效(重启由用户来,别自己重启)。" : "工作台更新到新版了 —— 客户端与宿主自己换上,不用重启。";
5196
5242
  }
5197
5243
  function usersOf(shared, names) {
@@ -6499,9 +6545,6 @@ function bundleInspectHandler(ctx) {
6499
6545
  };
6500
6546
  }
6501
6547
  //#endregion
6502
- //#region src/shared/api/diy.ts
6503
- var WORKSHOP_TITLE = "工作台DIY";
6504
- //#endregion
6505
6548
  //#region src/shared/api/dsh-plugins.ts
6506
6549
  var DSH_PLUGINS_ROUTE = "dsh-plugins";
6507
6550
  //#endregion
@@ -204,6 +204,8 @@ export declare const kit: {
204
204
  readonly "project.search.label": "\u641C\u7D22\u5DE5\u4F5C\u533A";
205
205
  readonly "project.search.placeholder": "\u641C\u7D22\u5DE5\u4F5C\u533A\uFF08\u76EE\u5F55\u540D / \u4E2D\u6587\u540D / \u8DEF\u5F84\uFF09";
206
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";
207
209
  readonly "project.rename.row": "\u6539\u300C{name}\u300D\u7684\u4E2D\u6587\u540D";
208
210
  readonly "project.rename.current": "\u6539\u5F53\u524D\u5DE5\u4F5C\u533A\u7684\u4E2D\u6587\u540D\u2026";
209
211
  readonly "project.rename.title": "\u7ED9\u300C{name}\u300D\u914D\u4E00\u4E2A\u4E2D\u6587\u540D";
@@ -378,6 +380,7 @@ export declare const kit: {
378
380
  readonly "panels.market.add.failureIntegrity": "\u4E0B\u8F7D\u7684\u5B89\u88C5\u5305\u6821\u9A8C\u5931\u8D25";
379
381
  readonly "panels.market.add.failureTimeout": "\u5B89\u88C5\u8D85\u65F6";
380
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";
381
384
  readonly "panels.market.add.failureGeneric": "\u5B89\u88C5\u8FC7\u7A0B\u4E2D\u51FA\u9519\uFF0C\u539F\u56E0\u89C1\u5B89\u88C5\u8BE6\u60C5";
382
385
  readonly "panels.market.add.approveTitle": "\u9700\u8981\u4F60\u5141\u8BB8\u5B89\u88C5\u811A\u672C";
383
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";
@@ -533,7 +536,7 @@ export declare const kit: {
533
536
  readonly "panel.conversation": "\u5BF9\u8BDD";
534
537
  readonly "panels.label": "\u5168\u5C40\u9762\u677F";
535
538
  };
536
- 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>;
537
540
  };
538
541
  mergeMessages(base: apiModule.Dictionaries, contributions: readonly MessagesContribution[]): apiModule.Dictionaries;
539
542
  mergeMessagesSkipping(base: apiModule.Dictionaries, contributions: readonly MessagesContribution[]): apiModule.MessagesMerge;
@@ -551,6 +554,8 @@ export declare const kit: {
551
554
  readonly "project.search.label": "\u641C\u7D22\u5DE5\u4F5C\u533A";
552
555
  readonly "project.search.placeholder": "\u641C\u7D22\u5DE5\u4F5C\u533A\uFF08\u76EE\u5F55\u540D / \u4E2D\u6587\u540D / \u8DEF\u5F84\uFF09";
553
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";
554
559
  readonly "project.rename.row": "\u6539\u300C{name}\u300D\u7684\u4E2D\u6587\u540D";
555
560
  readonly "project.rename.current": "\u6539\u5F53\u524D\u5DE5\u4F5C\u533A\u7684\u4E2D\u6587\u540D\u2026";
556
561
  readonly "project.rename.title": "\u7ED9\u300C{name}\u300D\u914D\u4E00\u4E2A\u4E2D\u6587\u540D";
@@ -725,6 +730,7 @@ export declare const kit: {
725
730
  readonly "panels.market.add.failureIntegrity": "\u4E0B\u8F7D\u7684\u5B89\u88C5\u5305\u6821\u9A8C\u5931\u8D25";
726
731
  readonly "panels.market.add.failureTimeout": "\u5B89\u88C5\u8D85\u65F6";
727
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";
728
734
  readonly "panels.market.add.failureGeneric": "\u5B89\u88C5\u8FC7\u7A0B\u4E2D\u51FA\u9519\uFF0C\u539F\u56E0\u89C1\u5B89\u88C5\u8BE6\u60C5";
729
735
  readonly "panels.market.add.approveTitle": "\u9700\u8981\u4F60\u5141\u8BB8\u5B89\u88C5\u811A\u672C";
730
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";
@@ -1062,6 +1068,8 @@ export declare const kit: {
1062
1068
  readonly "project.search.label": "\u641C\u7D22\u5DE5\u4F5C\u533A";
1063
1069
  readonly "project.search.placeholder": "\u641C\u7D22\u5DE5\u4F5C\u533A\uFF08\u76EE\u5F55\u540D / \u4E2D\u6587\u540D / \u8DEF\u5F84\uFF09";
1064
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";
1065
1073
  readonly "project.rename.row": "\u6539\u300C{name}\u300D\u7684\u4E2D\u6587\u540D";
1066
1074
  readonly "project.rename.current": "\u6539\u5F53\u524D\u5DE5\u4F5C\u533A\u7684\u4E2D\u6587\u540D\u2026";
1067
1075
  readonly "project.rename.title": "\u7ED9\u300C{name}\u300D\u914D\u4E00\u4E2A\u4E2D\u6587\u540D";
@@ -1236,6 +1244,7 @@ export declare const kit: {
1236
1244
  readonly "panels.market.add.failureIntegrity": "\u4E0B\u8F7D\u7684\u5B89\u88C5\u5305\u6821\u9A8C\u5931\u8D25";
1237
1245
  readonly "panels.market.add.failureTimeout": "\u5B89\u88C5\u8D85\u65F6";
1238
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";
1239
1248
  readonly "panels.market.add.failureGeneric": "\u5B89\u88C5\u8FC7\u7A0B\u4E2D\u51FA\u9519\uFF0C\u539F\u56E0\u89C1\u5B89\u88C5\u8BE6\u60C5";
1240
1249
  readonly "panels.market.add.approveTitle": "\u9700\u8981\u4F60\u5141\u8BB8\u5B89\u88C5\u811A\u672C";
1241
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";
@@ -1391,7 +1400,7 @@ export declare const kit: {
1391
1400
  readonly "panel.conversation": "\u5BF9\u8BDD";
1392
1401
  readonly "panels.label": "\u5168\u5C40\u9762\u677F";
1393
1402
  };
1394
- 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>;
1395
1404
  };
1396
1405
  mergeMessages(base: apiModule.Dictionaries, contributions: readonly MessagesContribution[]): apiModule.Dictionaries;
1397
1406
  mergeMessagesSkipping(base: apiModule.Dictionaries, contributions: readonly MessagesContribution[]): apiModule.MessagesMerge;
@@ -1409,6 +1418,8 @@ export declare const kit: {
1409
1418
  readonly "project.search.label": "\u641C\u7D22\u5DE5\u4F5C\u533A";
1410
1419
  readonly "project.search.placeholder": "\u641C\u7D22\u5DE5\u4F5C\u533A\uFF08\u76EE\u5F55\u540D / \u4E2D\u6587\u540D / \u8DEF\u5F84\uFF09";
1411
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";
1412
1423
  readonly "project.rename.row": "\u6539\u300C{name}\u300D\u7684\u4E2D\u6587\u540D";
1413
1424
  readonly "project.rename.current": "\u6539\u5F53\u524D\u5DE5\u4F5C\u533A\u7684\u4E2D\u6587\u540D\u2026";
1414
1425
  readonly "project.rename.title": "\u7ED9\u300C{name}\u300D\u914D\u4E00\u4E2A\u4E2D\u6587\u540D";
@@ -1583,6 +1594,7 @@ export declare const kit: {
1583
1594
  readonly "panels.market.add.failureIntegrity": "\u4E0B\u8F7D\u7684\u5B89\u88C5\u5305\u6821\u9A8C\u5931\u8D25";
1584
1595
  readonly "panels.market.add.failureTimeout": "\u5B89\u88C5\u8D85\u65F6";
1585
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";
1586
1598
  readonly "panels.market.add.failureGeneric": "\u5B89\u88C5\u8FC7\u7A0B\u4E2D\u51FA\u9519\uFF0C\u539F\u56E0\u89C1\u5B89\u88C5\u8BE6\u60C5";
1587
1599
  readonly "panels.market.add.approveTitle": "\u9700\u8981\u4F60\u5141\u8BB8\u5B89\u88C5\u811A\u672C";
1588
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";
@@ -1915,6 +1927,8 @@ export declare const kit: {
1915
1927
  readonly "project.search.label": "\u641C\u7D22\u5DE5\u4F5C\u533A";
1916
1928
  readonly "project.search.placeholder": "\u641C\u7D22\u5DE5\u4F5C\u533A\uFF08\u76EE\u5F55\u540D / \u4E2D\u6587\u540D / \u8DEF\u5F84\uFF09";
1917
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";
1918
1932
  readonly "project.rename.row": "\u6539\u300C{name}\u300D\u7684\u4E2D\u6587\u540D";
1919
1933
  readonly "project.rename.current": "\u6539\u5F53\u524D\u5DE5\u4F5C\u533A\u7684\u4E2D\u6587\u540D\u2026";
1920
1934
  readonly "project.rename.title": "\u7ED9\u300C{name}\u300D\u914D\u4E00\u4E2A\u4E2D\u6587\u540D";
@@ -2089,6 +2103,7 @@ export declare const kit: {
2089
2103
  readonly "panels.market.add.failureIntegrity": "\u4E0B\u8F7D\u7684\u5B89\u88C5\u5305\u6821\u9A8C\u5931\u8D25";
2090
2104
  readonly "panels.market.add.failureTimeout": "\u5B89\u88C5\u8D85\u65F6";
2091
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";
2092
2107
  readonly "panels.market.add.failureGeneric": "\u5B89\u88C5\u8FC7\u7A0B\u4E2D\u51FA\u9519\uFF0C\u539F\u56E0\u89C1\u5B89\u88C5\u8BE6\u60C5";
2093
2108
  readonly "panels.market.add.approveTitle": "\u9700\u8981\u4F60\u5141\u8BB8\u5B89\u88C5\u811A\u672C";
2094
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";
@@ -2244,7 +2259,7 @@ export declare const kit: {
2244
2259
  readonly "panel.conversation": "\u5BF9\u8BDD";
2245
2260
  readonly "panels.label": "\u5168\u5C40\u9762\u677F";
2246
2261
  };
2247
- 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>;
2248
2263
  };
2249
2264
  mergeMessages(base: apiModule.Dictionaries, contributions: readonly MessagesContribution[]): apiModule.Dictionaries;
2250
2265
  mergeMessagesSkipping(base: apiModule.Dictionaries, contributions: readonly MessagesContribution[]): apiModule.MessagesMerge;
@@ -2262,6 +2277,8 @@ export declare const kit: {
2262
2277
  readonly "project.search.label": "\u641C\u7D22\u5DE5\u4F5C\u533A";
2263
2278
  readonly "project.search.placeholder": "\u641C\u7D22\u5DE5\u4F5C\u533A\uFF08\u76EE\u5F55\u540D / \u4E2D\u6587\u540D / \u8DEF\u5F84\uFF09";
2264
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";
2265
2282
  readonly "project.rename.row": "\u6539\u300C{name}\u300D\u7684\u4E2D\u6587\u540D";
2266
2283
  readonly "project.rename.current": "\u6539\u5F53\u524D\u5DE5\u4F5C\u533A\u7684\u4E2D\u6587\u540D\u2026";
2267
2284
  readonly "project.rename.title": "\u7ED9\u300C{name}\u300D\u914D\u4E00\u4E2A\u4E2D\u6587\u540D";
@@ -2436,6 +2453,7 @@ export declare const kit: {
2436
2453
  readonly "panels.market.add.failureIntegrity": "\u4E0B\u8F7D\u7684\u5B89\u88C5\u5305\u6821\u9A8C\u5931\u8D25";
2437
2454
  readonly "panels.market.add.failureTimeout": "\u5B89\u88C5\u8D85\u65F6";
2438
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";
2439
2457
  readonly "panels.market.add.failureGeneric": "\u5B89\u88C5\u8FC7\u7A0B\u4E2D\u51FA\u9519\uFF0C\u539F\u56E0\u89C1\u5B89\u88C5\u8BE6\u60C5";
2440
2458
  readonly "panels.market.add.approveTitle": "\u9700\u8981\u4F60\u5141\u8BB8\u5B89\u88C5\u811A\u672C";
2441
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;
@@ -21,6 +21,11 @@ export interface BundleInstallDeps {
21
21
  readonly runAll: (commands: readonly PluginSourceCommand[]) => Promise<void>;
22
22
  readonly supplyAfter: (module: InstalledModule, change: BundleChange) => Promise<BundleSupply>;
23
23
  readonly rememberSource: (manager: BundleManager, pkg: string, registry: string | undefined) => Promise<void>;
24
+ readonly remove?: ((pkg: string) => Promise<BundleChange>) | undefined;
24
25
  }
25
26
  export declare function installDshBundle(deps: Omit<BundleInstallDeps, 'spec' | 'options'>, spec: string, options?: BundleInstallOptions): Promise<BundleInstallOutcome>;
27
+ export type ReplaceBundleDeps = Omit<BundleInstallDeps, 'spec' | 'options' | 'remove'> & {
28
+ readonly remove: (pkg: string) => Promise<BundleChange>;
29
+ };
30
+ export declare function replaceDshBundle(deps: ReplaceBundleDeps, spec: string, options?: BundleInstallOptions): Promise<BundleInstallOutcome>;
26
31
  export declare function installRouted(deps: BundleInstallDeps): Promise<BundleInstallOutcome>;
@@ -1,3 +1,5 @@
1
1
  export declare const DIY_PRESET_ID = "workbench-diy";
2
+ export declare const WORKSHOP_RELATIVE = "workbench/diy";
2
3
  export declare const WORKSHOP_TITLE = "\u5DE5\u4F5C\u53F0DIY";
3
4
  export declare const WORKSHOP_PAST_TITLES: readonly string[];
5
+ export declare function isWorkshopPath(path: string): boolean;
@@ -1,3 +1,2 @@
1
1
  import type { DshHostContext } from '@dsh-workbench/shared';
2
- export declare const WORKSHOP_RELATIVE = "workbench/diy";
3
2
  export declare function workshopPathOf(ctx: DshHostContext): string | null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dsh-workbench/core",
3
- "version": "0.2.2",
3
+ "version": "0.2.3",
4
4
  "description": "个人工作台:Agent 工作台外壳(左栏 + 常驻对话 + 自研右侧数据面板)。",
5
5
  "type": "module",
6
6
  "icon": "./icon.svg",
@@ -87,7 +87,7 @@
87
87
  "access": "public"
88
88
  },
89
89
  "dependencies": {
90
- "@dsh-workbench/shared": "0.2.2"
90
+ "@dsh-workbench/shared": "0.2.3"
91
91
  },
92
92
  "scripts": {
93
93
  "build": "node scripts/build.mjs && node scripts/build-types.mjs",