@dsh-workbench/core 0.1.7 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/client.js +858 -408
  2. package/dist/client/client.body.js +858 -408
  3. package/dist/client/index.js +858 -408
  4. package/dist/host/index.js +154 -6
  5. package/dist/types/app/client.d.ts +78 -15
  6. package/dist/types/app/layouts/env-gate/__tests__/gate-deadline.test.d.ts +1 -0
  7. package/dist/types/app/layouts/env-gate/gate-deadline.d.ts +4 -0
  8. package/dist/types/app/layouts/rightbar/ColumnSwitch.d.ts +10 -0
  9. package/dist/types/app/layouts/rightbar/MarketStates.d.ts +7 -0
  10. package/dist/types/app/layouts/rightbar/MarketView.d.ts +2 -1
  11. package/dist/types/app/layouts/rightbar/Rightbar.d.ts +3 -1
  12. package/dist/types/app/layouts/rightbar/SharedSection.d.ts +11 -0
  13. package/dist/types/app/layouts/rightbar/__tests__/market-change.test.d.ts +1 -0
  14. package/dist/types/app/layouts/rightbar/__tests__/market-live.test.d.ts +1 -0
  15. package/dist/types/app/layouts/rightbar/__tests__/market-settle.test.d.ts +1 -0
  16. package/dist/types/app/layouts/rightbar/dsh-column-source.d.ts +6 -0
  17. package/dist/types/app/layouts/rightbar/dsh-column-source.test.d.ts +1 -0
  18. package/dist/types/app/layouts/rightbar/market-change.d.ts +4 -0
  19. package/dist/types/app/layouts/rightbar/market-rows.d.ts +3 -1
  20. package/dist/types/app/layouts/rightbar/market-settle.d.ts +2 -0
  21. package/dist/types/app/layouts/rightbar/market-view-text.d.ts +10 -0
  22. package/dist/types/app/layouts/rightbar/presentation.d.ts +9 -0
  23. package/dist/types/app/layouts/rightbar/presentation.test.d.ts +1 -0
  24. package/dist/types/app/layouts/rightbar/store.d.ts +9 -0
  25. package/dist/types/modules/panels/__tests__/market-registries.test.d.ts +1 -0
  26. package/dist/types/modules/panels/model/market.d.ts +2 -0
  27. package/dist/types/shared/api/host/__tests__/profile-registries.test.d.ts +1 -0
  28. package/dist/types/shared/api/host/profile-registries.d.ts +21 -0
  29. package/docs/OPERATIONS.md +2 -0
  30. package/package.json +2 -2
  31. package/dist/types/app/layouts/rightbar/ExpandButton.d.ts +0 -9
@@ -91,7 +91,12 @@ export declare const kit: {
91
91
  probeKeyOf(error: apiModule.ApiError | undefined): string | null;
92
92
  apiGet<T>(route: string, query?: apiModule.Query, options?: apiModule.ApiGetOptions): Promise<apiModule.ApiResponse<T>>;
93
93
  apiPost<T>(route: string, body: Record<string, unknown>): Promise<apiModule.ApiResponse<T>>;
94
+ ActivityBlock({ head, children }: apiModule.ActivityBlockProps): JSX.Element;
95
+ ActivityLine({ dot, text, at, actions }: apiModule.ActivityLineProps): JSX.Element;
96
+ ActivityAction({ label, hint, icon, href, onClick, failed }: apiModule.ActivityActionProps): JSX.Element;
94
97
  ApprovalDetail(props: apiModule.ApprovalDetailProps): JSX.Element | null;
98
+ ApprovalPlan({ rows, hint, warn, children }: apiModule.ApprovalPlanProps): JSX.Element;
99
+ Card({ t, title, refreshing, onRefresh, meta, head, children }: apiModule.CardProps): JSX.Element;
95
100
  CardHead({ t, title, meta, refreshing, onRefresh, gear, gearOpen, onToggleGear, platformHref, platform, platformTitle, }: apiModule.CardHeadProps): JSX.Element;
96
101
  ChoiceGroup({ label, name, value, options, disabled, onChange }: apiModule.ChoiceGroupProps): JSX.Element;
97
102
  LongTaskRow(props: apiModule.LongTaskRowProps): JSX.Element;
@@ -109,6 +114,7 @@ export declare const kit: {
109
114
  readonly onPick: () => void;
110
115
  } | undefined;
111
116
  }): JSX.Element;
117
+ Note({ tone, as, children }: apiModule.NoteProps): JSX.Element;
112
118
  SkeletonRows({ rows }: {
113
119
  rows?: number;
114
120
  }): JSX.Element;
@@ -118,11 +124,17 @@ export declare const kit: {
118
124
  icon?: apiModule.ReactNode;
119
125
  compact?: boolean;
120
126
  }): JSX.Element;
127
+ Rows({ children }: apiModule.RowsProps): JSX.Element;
128
+ Row({ label, value }: apiModule.RowProps): JSX.Element;
121
129
  SaveBar({ busy, disabled, labels, onCancel, onSave }: apiModule.SaveBarProps): JSX.Element;
130
+ SettingsSection({ label, title, action, children }: apiModule.SettingsSectionProps): JSX.Element;
131
+ Stack({ children }: apiModule.StackProps): JSX.Element;
132
+ StateBlock({ title, dot, hint, actions, resolving, children }: apiModule.StateBlockProps): JSX.Element;
122
133
  TextField({ invalid, className, ...rest }: apiModule.TextFieldProps): JSX.Element;
123
134
  IconConversation({ size }: apiModule.IconProps): JSX.Element;
124
135
  IconBrandMark({ size }: apiModule.IconProps): JSX.Element;
125
136
  IconModules({ size }: apiModule.IconProps): JSX.Element;
137
+ IconPanelScreen({ size }: apiModule.IconProps): JSX.Element;
126
138
  PLUGIN_ID: "@dsh-workbench/core";
127
139
  API_PREFIX: "/workbench/api";
128
140
  PREFS_PREFIX: "/workbench/api/prefs";
@@ -148,6 +160,8 @@ export declare const kit: {
148
160
  DEFAULT_WORKSPACE_TITLE: "default-workspace";
149
161
  STORAGE_KEY_PROJECT: "dsh-workbench.project";
150
162
  STORAGE_KEY_RIGHTBAR: "dsh-workbench.rightbar.expanded";
163
+ STORAGE_KEY_RIGHTBAR_COLUMN: "dsh-workbench.rightbar.column";
164
+ RIGHTBAR_FULLSCREEN_WIDTH: 768;
151
165
  LOCALE_NS: "workbench";
152
166
  LOCALES: readonly ["zh", "en"];
153
167
  readText(key: string): string | null;
@@ -237,7 +251,7 @@ export declare const kit: {
237
251
  readonly "panels.market.empty": "\u6682\u65E0\u53EF\u7528\u6A21\u5757";
238
252
  readonly "panels.market.installedSection": "\u5DF2\u88C5";
239
253
  readonly "panels.market.moduleOutdated": "\u6709\u65B0\u7248";
240
- readonly "panels.market.moduleRestartHint": "\u5B89\u88C5\u5B8C\u6210\u540E\u53EF\u80FD\u9700\u8981\u91CD\u542F\u624D\u751F\u6548";
254
+ readonly "panels.market.moduleRestartHint": "\u88C5\u597D\u4E86\u4F46\u8FD8\u6CA1\u751F\u6548 \u2014\u2014 \u91CD\u542F\u4E00\u6B21 dsh \u5C31\u4F1A\u51FA\u6765";
241
255
  readonly "panels.market.restartNeeded": "\u65B0\u7248\u88C5\u597D\u4E86\uFF0C\u91CD\u542F\u4E00\u6B21\u624D\u751F\u6548\u3002";
242
256
  readonly "panels.market.foot": "\u88C5\u597D\u540E\u5230\u90A3\u4E2A\u9879\u76EE\u7684\u9762\u677F\u9875\u52FE\u9009\u5B83\uFF0C\u6A21\u5757\u624D\u4F1A\u51FA\u73B0\u3002";
243
257
  readonly "panels.market.recheck": "\u91CD\u65B0\u68C0\u67E5\u66F4\u65B0";
@@ -433,17 +447,20 @@ export declare const kit: {
433
447
  readonly "rightbar.label": "\u6570\u636E\u9762\u677F";
434
448
  readonly "rightbar.expand": "\u5C55\u5F00\u6570\u636E\u9762\u677F";
435
449
  readonly "rightbar.collapse": "\u6536\u8D77\u6570\u636E\u9762\u677F";
450
+ readonly "rightbar.column.label": "\u53F3\u4FA7\u680F";
451
+ readonly "rightbar.column.workbench": "\u5DE5\u4F5C\u53F0\u9762\u677F";
452
+ readonly "rightbar.column.dsh": "dsh \u9762\u677F";
436
453
  readonly "rightbar.refresh": "\u5237\u65B0";
437
454
  readonly "rightbar.refreshing": "\u5237\u65B0\u4E2D\u2026";
438
455
  readonly "rightbar.updatedAt": "\u66F4\u65B0\u4E8E {time}";
439
456
  readonly "rightbar.noProject": "\u5F53\u524D\u4F1A\u8BDD\u6CA1\u6709\u6240\u5C5E\u9879\u76EE";
440
457
  readonly "coding.notARepo.title": "\u8FD9\u4E2A\u9879\u76EE\u4E0D\u662F Coding \u4ED3\u5E93";
441
458
  readonly "error.unknown": "\u51FA\u9519\u4E86";
442
- readonly "board.title": "\u770B\u677F";
459
+ readonly "board.title": "\u5DE5\u4F5C\u53F0\u9762\u677F";
443
460
  readonly "panel.conversation": "\u5BF9\u8BDD";
444
461
  readonly "panels.label": "\u5168\u5C40\u9762\u677F";
445
462
  };
446
- en: Record<"time.now" | "time.minutes" | "time.hours" | "time.days" | "blocker.retry" | "blocker.copy" | "blocker.unknown.title" | "blocker.login.go" | "blocker.login.titleGeneric" | "blocker.login.title" | "blocker.login.manual" | "blocker.login.hint" | "blocker.forbidden.open" | "blocker.forbidden.titleGeneric" | "blocker.forbidden.title" | "blocker.forbidden.hint" | "blocker.timeout.hint" | "blocker.exec.hint" | "blocker.fix.install" | "blocker.fix.update" | "blocker.market.open" | "env.unit.missingPlugin" | "env.unit.hint" | "env.unit.missingCommands" | "env.unit.missingCommandsHint" | "env.unit.unchecked" | "env.unit.uncheckedHint" | "brand.name" | "toggle.open" | "toggle.collapse" | "project.label" | "workspace.section" | "project.none" | "project.empty" | "project.add" | "session.new" | "session.new.label" | "session.empty" | "session.noProject" | "session.pinned" | "session.actions" | "status.idle" | "status.running" | "status.waitingApproval" | "status.planReview" | "status.waitingAnswer" | "status.completed" | "status.subagentsRunning.one" | "status.subagentsRunning.other" | "panels.title" | "panels.reset" | "panels.enabled" | "panels.disabled" | "panels.choose" | "panels.failed" | "panels.hintEffect" | "panels.dragHint" | "panels.unknownStep" | "panels.labelWithHint" | "panels.dep.missingPlugin" | "panels.dep.missingCommands" | "panels.dep.unchecked" | "panels.tab.modules" | "panels.tab.market" | "panels.browseMarket" | "panels.noneInstalled" | "panels.noneInstalledHint" | "panels.market.installed" | "panels.market.outdated" | "panels.market.hasNew" | "panels.market.missing" | "panels.market.unchecked" | "panels.market.checking" | "panels.market.sectionInstalled" | "panels.market.sectionPending" | "panels.market.sectionShared" | "panels.market.sharedUsedBy" | "panels.market.listSeparator" | "panels.market.sharedMissing" | "panels.market.sharedOutdated" | "panels.market.sharedUnsatisfied" | "panels.market.sharedOk" | "panels.market.versionArrow" | "panels.market.lead" | "panels.market.install" | "panels.market.update" | "panels.market.uninstall" | "panels.market.uninstallLabel" | "panels.market.installing" | "panels.market.updating" | "panels.market.uninstalling" | "panels.market.confirmUninstallTitle" | "panels.market.confirmUninstallDetail" | "panels.market.confirmUninstallAck" | "panels.market.confirmYes" | "panels.market.confirmNo" | "panels.market.failed" | "panels.market.needEnv" | "panels.market.noSource" | "panels.market.badSource" | "panels.market.empty" | "panels.market.installedSection" | "panels.market.moduleOutdated" | "panels.market.moduleRestartHint" | "panels.market.restartNeeded" | "panels.market.foot" | "panels.market.recheck" | "panels.market.checkUpdates" | "panels.market.checkedAt" | "panels.market.justNow" | "panels.market.minutesAgo" | "panels.market.hoursAgo" | "panels.market.add.description" | "panels.market.add.specPlaceholder" | "panels.market.add.guideToggle" | "panels.market.add.guideHide" | "panels.market.add.guideIdTitle" | "panels.market.add.guideIdExample" | "panels.market.add.guideIdHint" | "panels.market.add.guideGitTitle" | "panels.market.add.guideGitExample" | "panels.market.add.guideGitHint" | "panels.market.add.guidePathTitle" | "panels.market.add.guidePathExample" | "panels.market.add.guidePathHint" | "panels.market.add.guideExampleLabel" | "panels.market.add.guideFill" | "panels.market.add.guideSafety" | "panels.market.add.registryLegend" | "panels.market.add.registryOfficial" | "panels.market.add.registryMirror" | "panels.market.add.registryWithHost" | "panels.market.add.registryToggle" | "panels.market.add.installVersion" | "panels.market.add.registryDefault" | "panels.market.add.registryCustom" | "panels.market.add.registryCustomPlaceholder" | "panels.market.add.registryCustomHint" | "panels.market.add.registryCustomInvalid" | "panels.market.add.run" | "panels.market.add.edit" | "panels.market.add.changeRegistry" | "panels.market.add.installingTitle" | "panels.market.add.installedTitle" | "panels.market.add.failedTitle" | "panels.market.add.cancelledTitle" | "panels.market.add.failureNetworkHost" | "panels.market.add.problemInvalid" | "panels.market.add.problemInstalled" | "panels.market.add.problemNotFound" | "panels.market.add.problemNotPackage" | "panels.market.add.problemNotBundle" | "panels.market.add.problemNetwork" | "panels.market.add.problemUnknown" | "panels.market.add.failureNetwork" | "panels.market.add.failureNotFound" | "panels.market.add.failureNoMatchingVersion" | "panels.market.add.failureDiskFull" | "panels.market.add.failurePermission" | "panels.market.add.failureBuildBlocked" | "panels.market.add.failureIntegrity" | "panels.market.add.failureTimeout" | "panels.market.add.failurePnpmMissing" | "panels.market.add.failureGeneric" | "panels.market.add.approveTitle" | "panels.market.add.approveCaution" | "panels.market.add.approveRun" | "panels.market.add.restart" | "panels.market.add.tookEffect" | "panels.market.add.details" | "panels.market.add.open" | "panels.market.add.title" | "panels.market.add.intro" | "panels.market.add.specLabel" | "panels.market.add.specHint" | "panels.market.add.exampleTitle" | "panels.market.add.exampleFill" | "panels.market.add.registryLabel" | "panels.market.add.registryProfile" | "panels.market.add.registryPnpm" | "panels.market.add.check" | "panels.market.add.checking" | "panels.market.add.change" | "panels.market.add.previewTitle" | "panels.market.add.fieldName" | "panels.market.add.fieldVersion" | "panels.market.add.fieldDescription" | "panels.market.add.fieldSource" | "panels.market.add.install" | "panels.market.add.installing" | "panels.market.add.cancel" | "panels.market.add.close" | "panels.market.add.retry" | "panels.market.add.changeSource" | "panels.market.add.approveBuilds" | "panels.market.add.approveHint" | "panels.market.add.doneApplied" | "panels.market.add.doneRestart" | "panels.market.add.cancelled" | "panels.market.add.failed" | "panels.market.add.removed" | "panels.market.add.supplyPending" | "panels.market.add.supplyFailed" | "panels.market.add.notModule" | "panels.market.add.removedRestart" | "panels.market.add.remove" | "panels.market.add.problem.invalidSpec" | "panels.market.add.problem.alreadyInstalled" | "panels.market.add.problem.notFound" | "panels.market.add.problem.notAPackage" | "panels.market.add.problem.notABundle" | "panels.market.add.problem.network" | "panels.market.add.problem.unknown" | "panels.market.add.reason.invalidSpec" | "panels.market.add.reason.incompatible" | "panels.market.add.reason.notBundle" | "panels.market.add.reason.notRemovable" | "panels.market.add.reason.bundleInUse" | "panels.market.add.reason.stopProfile" | "panels.market.add.reason.staleApproval" | "panels.market.add.reason.operationError" | "panels.market.add.reason.buildBlocked" | "panels.market.add.reason.pnpmMissing" | "panels.market.add.reason.noMatchingVersion" | "panels.market.add.reason.diskFull" | "panels.market.add.reason.permission" | "panels.market.add.reason.integrity" | "panels.market.add.reason.timeout" | "panels.market.add.reason.network" | "panels.market.add.reason.notFound" | "panels.market.add.reason.unknown" | "blocker.fix.running" | "blocker.fix.failed" | "blocker.retry.running" | "panels.reading" | "panels.empty" | "panels.emptyHint" | "env.title" | "env.checking" | "env.installing" | "env.failed" | "env.elapsed" | "env.stepFailed.install" | "env.stepFailed.path" | "env.stepFailed.shell" | "env.bridge.ok" | "env.bridge.short" | "env.bridge.why" | "env.bridge.daemon" | "env.bridge.extension" | "env.bridge.extensionLink" | "env.bridge.profile" | "env.bridge.stale" | "env.bridge.unknown" | "env.fix.title" | "env.fix.why" | "env.fix.whyPath" | "env.fix.whyShell" | "env.fix.step" | "env.fix.stepPath" | "env.fix.stepShell" | "env.fix.permission" | "env.fix.network" | "env.fix.details" | "env.retry" | "env.copyCommand" | "env.copied" | "env.step.opencli" | "env.step.codingPlugin" | "env.step.bridge" | "env.step.warm" | "env.warm.done" | "env.warm.short" | "rightbar.label" | "rightbar.expand" | "rightbar.collapse" | "rightbar.refresh" | "rightbar.refreshing" | "rightbar.updatedAt" | "rightbar.noProject" | "coding.notARepo.title" | "error.unknown" | "board.title" | "panel.conversation" | "panels.label", string>;
463
+ en: Record<"time.now" | "time.minutes" | "time.hours" | "time.days" | "blocker.retry" | "blocker.copy" | "blocker.unknown.title" | "blocker.login.go" | "blocker.login.titleGeneric" | "blocker.login.title" | "blocker.login.manual" | "blocker.login.hint" | "blocker.forbidden.open" | "blocker.forbidden.titleGeneric" | "blocker.forbidden.title" | "blocker.forbidden.hint" | "blocker.timeout.hint" | "blocker.exec.hint" | "blocker.fix.install" | "blocker.fix.update" | "blocker.market.open" | "env.unit.missingPlugin" | "env.unit.hint" | "env.unit.missingCommands" | "env.unit.missingCommandsHint" | "env.unit.unchecked" | "env.unit.uncheckedHint" | "brand.name" | "toggle.open" | "toggle.collapse" | "project.label" | "workspace.section" | "project.none" | "project.empty" | "project.add" | "session.new" | "session.new.label" | "session.empty" | "session.noProject" | "session.pinned" | "session.actions" | "status.idle" | "status.running" | "status.waitingApproval" | "status.planReview" | "status.waitingAnswer" | "status.completed" | "status.subagentsRunning.one" | "status.subagentsRunning.other" | "panels.title" | "panels.reset" | "panels.enabled" | "panels.disabled" | "panels.choose" | "panels.failed" | "panels.hintEffect" | "panels.dragHint" | "panels.unknownStep" | "panels.labelWithHint" | "panels.dep.missingPlugin" | "panels.dep.missingCommands" | "panels.dep.unchecked" | "panels.tab.modules" | "panels.tab.market" | "panels.browseMarket" | "panels.noneInstalled" | "panels.noneInstalledHint" | "panels.market.installed" | "panels.market.outdated" | "panels.market.hasNew" | "panels.market.missing" | "panels.market.unchecked" | "panels.market.checking" | "panels.market.sectionInstalled" | "panels.market.sectionPending" | "panels.market.sectionShared" | "panels.market.sharedUsedBy" | "panels.market.listSeparator" | "panels.market.sharedMissing" | "panels.market.sharedOutdated" | "panels.market.sharedUnsatisfied" | "panels.market.sharedOk" | "panels.market.versionArrow" | "panels.market.lead" | "panels.market.install" | "panels.market.update" | "panels.market.uninstall" | "panels.market.uninstallLabel" | "panels.market.installing" | "panels.market.updating" | "panels.market.uninstalling" | "panels.market.confirmUninstallTitle" | "panels.market.confirmUninstallDetail" | "panels.market.confirmUninstallAck" | "panels.market.confirmYes" | "panels.market.confirmNo" | "panels.market.failed" | "panels.market.needEnv" | "panels.market.noSource" | "panels.market.badSource" | "panels.market.empty" | "panels.market.installedSection" | "panels.market.moduleOutdated" | "panels.market.moduleRestartHint" | "panels.market.restartNeeded" | "panels.market.foot" | "panels.market.recheck" | "panels.market.checkUpdates" | "panels.market.checkedAt" | "panels.market.justNow" | "panels.market.minutesAgo" | "panels.market.hoursAgo" | "panels.market.add.description" | "panels.market.add.specPlaceholder" | "panels.market.add.guideToggle" | "panels.market.add.guideHide" | "panels.market.add.guideIdTitle" | "panels.market.add.guideIdExample" | "panels.market.add.guideIdHint" | "panels.market.add.guideGitTitle" | "panels.market.add.guideGitExample" | "panels.market.add.guideGitHint" | "panels.market.add.guidePathTitle" | "panels.market.add.guidePathExample" | "panels.market.add.guidePathHint" | "panels.market.add.guideExampleLabel" | "panels.market.add.guideFill" | "panels.market.add.guideSafety" | "panels.market.add.registryLegend" | "panels.market.add.registryOfficial" | "panels.market.add.registryMirror" | "panels.market.add.registryWithHost" | "panels.market.add.registryToggle" | "panels.market.add.installVersion" | "panels.market.add.registryDefault" | "panels.market.add.registryCustom" | "panels.market.add.registryCustomPlaceholder" | "panels.market.add.registryCustomHint" | "panels.market.add.registryCustomInvalid" | "panels.market.add.run" | "panels.market.add.edit" | "panels.market.add.changeRegistry" | "panels.market.add.installingTitle" | "panels.market.add.installedTitle" | "panels.market.add.failedTitle" | "panels.market.add.cancelledTitle" | "panels.market.add.failureNetworkHost" | "panels.market.add.problemInvalid" | "panels.market.add.problemInstalled" | "panels.market.add.problemNotFound" | "panels.market.add.problemNotPackage" | "panels.market.add.problemNotBundle" | "panels.market.add.problemNetwork" | "panels.market.add.problemUnknown" | "panels.market.add.failureNetwork" | "panels.market.add.failureNotFound" | "panels.market.add.failureNoMatchingVersion" | "panels.market.add.failureDiskFull" | "panels.market.add.failurePermission" | "panels.market.add.failureBuildBlocked" | "panels.market.add.failureIntegrity" | "panels.market.add.failureTimeout" | "panels.market.add.failurePnpmMissing" | "panels.market.add.failureGeneric" | "panels.market.add.approveTitle" | "panels.market.add.approveCaution" | "panels.market.add.approveRun" | "panels.market.add.restart" | "panels.market.add.tookEffect" | "panels.market.add.details" | "panels.market.add.open" | "panels.market.add.title" | "panels.market.add.intro" | "panels.market.add.specLabel" | "panels.market.add.specHint" | "panels.market.add.exampleTitle" | "panels.market.add.exampleFill" | "panels.market.add.registryLabel" | "panels.market.add.registryProfile" | "panels.market.add.registryPnpm" | "panels.market.add.check" | "panels.market.add.checking" | "panels.market.add.change" | "panels.market.add.previewTitle" | "panels.market.add.fieldName" | "panels.market.add.fieldVersion" | "panels.market.add.fieldDescription" | "panels.market.add.fieldSource" | "panels.market.add.install" | "panels.market.add.installing" | "panels.market.add.cancel" | "panels.market.add.close" | "panels.market.add.retry" | "panels.market.add.changeSource" | "panels.market.add.approveBuilds" | "panels.market.add.approveHint" | "panels.market.add.doneApplied" | "panels.market.add.doneRestart" | "panels.market.add.cancelled" | "panels.market.add.failed" | "panels.market.add.removed" | "panels.market.add.supplyPending" | "panels.market.add.supplyFailed" | "panels.market.add.notModule" | "panels.market.add.removedRestart" | "panels.market.add.remove" | "panels.market.add.problem.invalidSpec" | "panels.market.add.problem.alreadyInstalled" | "panels.market.add.problem.notFound" | "panels.market.add.problem.notAPackage" | "panels.market.add.problem.notABundle" | "panels.market.add.problem.network" | "panels.market.add.problem.unknown" | "panels.market.add.reason.invalidSpec" | "panels.market.add.reason.incompatible" | "panels.market.add.reason.notBundle" | "panels.market.add.reason.notRemovable" | "panels.market.add.reason.bundleInUse" | "panels.market.add.reason.stopProfile" | "panels.market.add.reason.staleApproval" | "panels.market.add.reason.operationError" | "panels.market.add.reason.buildBlocked" | "panels.market.add.reason.pnpmMissing" | "panels.market.add.reason.noMatchingVersion" | "panels.market.add.reason.diskFull" | "panels.market.add.reason.permission" | "panels.market.add.reason.integrity" | "panels.market.add.reason.timeout" | "panels.market.add.reason.network" | "panels.market.add.reason.notFound" | "panels.market.add.reason.unknown" | "blocker.fix.running" | "blocker.fix.failed" | "blocker.retry.running" | "panels.reading" | "panels.empty" | "panels.emptyHint" | "env.title" | "env.checking" | "env.installing" | "env.failed" | "env.elapsed" | "env.stepFailed.install" | "env.stepFailed.path" | "env.stepFailed.shell" | "env.bridge.ok" | "env.bridge.short" | "env.bridge.why" | "env.bridge.daemon" | "env.bridge.extension" | "env.bridge.extensionLink" | "env.bridge.profile" | "env.bridge.stale" | "env.bridge.unknown" | "env.fix.title" | "env.fix.why" | "env.fix.whyPath" | "env.fix.whyShell" | "env.fix.step" | "env.fix.stepPath" | "env.fix.stepShell" | "env.fix.permission" | "env.fix.network" | "env.fix.details" | "env.retry" | "env.copyCommand" | "env.copied" | "env.step.opencli" | "env.step.codingPlugin" | "env.step.bridge" | "env.step.warm" | "env.warm.done" | "env.warm.short" | "rightbar.label" | "rightbar.expand" | "rightbar.collapse" | "rightbar.column.label" | "rightbar.column.workbench" | "rightbar.column.dsh" | "rightbar.refresh" | "rightbar.refreshing" | "rightbar.updatedAt" | "rightbar.noProject" | "coding.notARepo.title" | "error.unknown" | "board.title" | "panel.conversation" | "panels.label", string>;
447
464
  };
448
465
  mergeMessages(base: apiModule.Dictionaries, contributions: readonly apiModule.MessagesContribution[]): apiModule.Dictionaries;
449
466
  zh: {
@@ -527,7 +544,7 @@ export declare const kit: {
527
544
  readonly "panels.market.empty": "\u6682\u65E0\u53EF\u7528\u6A21\u5757";
528
545
  readonly "panels.market.installedSection": "\u5DF2\u88C5";
529
546
  readonly "panels.market.moduleOutdated": "\u6709\u65B0\u7248";
530
- readonly "panels.market.moduleRestartHint": "\u5B89\u88C5\u5B8C\u6210\u540E\u53EF\u80FD\u9700\u8981\u91CD\u542F\u624D\u751F\u6548";
547
+ readonly "panels.market.moduleRestartHint": "\u88C5\u597D\u4E86\u4F46\u8FD8\u6CA1\u751F\u6548 \u2014\u2014 \u91CD\u542F\u4E00\u6B21 dsh \u5C31\u4F1A\u51FA\u6765";
531
548
  readonly "panels.market.restartNeeded": "\u65B0\u7248\u88C5\u597D\u4E86\uFF0C\u91CD\u542F\u4E00\u6B21\u624D\u751F\u6548\u3002";
532
549
  readonly "panels.market.foot": "\u88C5\u597D\u540E\u5230\u90A3\u4E2A\u9879\u76EE\u7684\u9762\u677F\u9875\u52FE\u9009\u5B83\uFF0C\u6A21\u5757\u624D\u4F1A\u51FA\u73B0\u3002";
533
550
  readonly "panels.market.recheck": "\u91CD\u65B0\u68C0\u67E5\u66F4\u65B0";
@@ -723,13 +740,16 @@ export declare const kit: {
723
740
  readonly "rightbar.label": "\u6570\u636E\u9762\u677F";
724
741
  readonly "rightbar.expand": "\u5C55\u5F00\u6570\u636E\u9762\u677F";
725
742
  readonly "rightbar.collapse": "\u6536\u8D77\u6570\u636E\u9762\u677F";
743
+ readonly "rightbar.column.label": "\u53F3\u4FA7\u680F";
744
+ readonly "rightbar.column.workbench": "\u5DE5\u4F5C\u53F0\u9762\u677F";
745
+ readonly "rightbar.column.dsh": "dsh \u9762\u677F";
726
746
  readonly "rightbar.refresh": "\u5237\u65B0";
727
747
  readonly "rightbar.refreshing": "\u5237\u65B0\u4E2D\u2026";
728
748
  readonly "rightbar.updatedAt": "\u66F4\u65B0\u4E8E {time}";
729
749
  readonly "rightbar.noProject": "\u5F53\u524D\u4F1A\u8BDD\u6CA1\u6709\u6240\u5C5E\u9879\u76EE";
730
750
  readonly "coding.notARepo.title": "\u8FD9\u4E2A\u9879\u76EE\u4E0D\u662F Coding \u4ED3\u5E93";
731
751
  readonly "error.unknown": "\u51FA\u9519\u4E86";
732
- readonly "board.title": "\u770B\u677F";
752
+ readonly "board.title": "\u5DE5\u4F5C\u53F0\u9762\u677F";
733
753
  readonly "panel.conversation": "\u5BF9\u8BDD";
734
754
  readonly "panels.label": "\u5168\u5C40\u9762\u677F";
735
755
  };
@@ -740,6 +760,7 @@ export declare const kit: {
740
760
  Fragment: import("react").ExoticComponent<import("react").FragmentProps>;
741
761
  useState: typeof import("react").useState;
742
762
  useEffect: typeof import("react").useEffect;
763
+ useLayoutEffect: typeof import("react").useLayoutEffect;
743
764
  useMemo: typeof import("react").useMemo;
744
765
  useCallback: typeof import("react").useCallback;
745
766
  useRef: typeof import("react").useRef;
@@ -795,7 +816,12 @@ export declare const kit: {
795
816
  probeKeyOf(error: apiModule.ApiError | undefined): string | null;
796
817
  apiGet<T>(route: string, query?: apiModule.Query, options?: apiModule.ApiGetOptions): Promise<apiModule.ApiResponse<T>>;
797
818
  apiPost<T>(route: string, body: Record<string, unknown>): Promise<apiModule.ApiResponse<T>>;
819
+ ActivityBlock({ head, children }: apiModule.ActivityBlockProps): JSX.Element;
820
+ ActivityLine({ dot, text, at, actions }: apiModule.ActivityLineProps): JSX.Element;
821
+ ActivityAction({ label, hint, icon, href, onClick, failed }: apiModule.ActivityActionProps): JSX.Element;
798
822
  ApprovalDetail(props: apiModule.ApprovalDetailProps): JSX.Element | null;
823
+ ApprovalPlan({ rows, hint, warn, children }: apiModule.ApprovalPlanProps): JSX.Element;
824
+ Card({ t, title, refreshing, onRefresh, meta, head, children }: apiModule.CardProps): JSX.Element;
799
825
  CardHead({ t, title, meta, refreshing, onRefresh, gear, gearOpen, onToggleGear, platformHref, platform, platformTitle, }: apiModule.CardHeadProps): JSX.Element;
800
826
  ChoiceGroup({ label, name, value, options, disabled, onChange }: apiModule.ChoiceGroupProps): JSX.Element;
801
827
  LongTaskRow(props: apiModule.LongTaskRowProps): JSX.Element;
@@ -813,6 +839,7 @@ export declare const kit: {
813
839
  readonly onPick: () => void;
814
840
  } | undefined;
815
841
  }): JSX.Element;
842
+ Note({ tone, as, children }: apiModule.NoteProps): JSX.Element;
816
843
  SkeletonRows({ rows }: {
817
844
  rows?: number;
818
845
  }): JSX.Element;
@@ -822,11 +849,17 @@ export declare const kit: {
822
849
  icon?: apiModule.ReactNode;
823
850
  compact?: boolean;
824
851
  }): JSX.Element;
852
+ Rows({ children }: apiModule.RowsProps): JSX.Element;
853
+ Row({ label, value }: apiModule.RowProps): JSX.Element;
825
854
  SaveBar({ busy, disabled, labels, onCancel, onSave }: apiModule.SaveBarProps): JSX.Element;
855
+ SettingsSection({ label, title, action, children }: apiModule.SettingsSectionProps): JSX.Element;
856
+ Stack({ children }: apiModule.StackProps): JSX.Element;
857
+ StateBlock({ title, dot, hint, actions, resolving, children }: apiModule.StateBlockProps): JSX.Element;
826
858
  TextField({ invalid, className, ...rest }: apiModule.TextFieldProps): JSX.Element;
827
859
  IconConversation({ size }: apiModule.IconProps): JSX.Element;
828
860
  IconBrandMark({ size }: apiModule.IconProps): JSX.Element;
829
861
  IconModules({ size }: apiModule.IconProps): JSX.Element;
862
+ IconPanelScreen({ size }: apiModule.IconProps): JSX.Element;
830
863
  PLUGIN_ID: "@dsh-workbench/core";
831
864
  API_PREFIX: "/workbench/api";
832
865
  PREFS_PREFIX: "/workbench/api/prefs";
@@ -852,6 +885,8 @@ export declare const kit: {
852
885
  DEFAULT_WORKSPACE_TITLE: "default-workspace";
853
886
  STORAGE_KEY_PROJECT: "dsh-workbench.project";
854
887
  STORAGE_KEY_RIGHTBAR: "dsh-workbench.rightbar.expanded";
888
+ STORAGE_KEY_RIGHTBAR_COLUMN: "dsh-workbench.rightbar.column";
889
+ RIGHTBAR_FULLSCREEN_WIDTH: 768;
855
890
  LOCALE_NS: "workbench";
856
891
  LOCALES: readonly ["zh", "en"];
857
892
  readText(key: string): string | null;
@@ -941,7 +976,7 @@ export declare const kit: {
941
976
  readonly "panels.market.empty": "\u6682\u65E0\u53EF\u7528\u6A21\u5757";
942
977
  readonly "panels.market.installedSection": "\u5DF2\u88C5";
943
978
  readonly "panels.market.moduleOutdated": "\u6709\u65B0\u7248";
944
- readonly "panels.market.moduleRestartHint": "\u5B89\u88C5\u5B8C\u6210\u540E\u53EF\u80FD\u9700\u8981\u91CD\u542F\u624D\u751F\u6548";
979
+ readonly "panels.market.moduleRestartHint": "\u88C5\u597D\u4E86\u4F46\u8FD8\u6CA1\u751F\u6548 \u2014\u2014 \u91CD\u542F\u4E00\u6B21 dsh \u5C31\u4F1A\u51FA\u6765";
945
980
  readonly "panels.market.restartNeeded": "\u65B0\u7248\u88C5\u597D\u4E86\uFF0C\u91CD\u542F\u4E00\u6B21\u624D\u751F\u6548\u3002";
946
981
  readonly "panels.market.foot": "\u88C5\u597D\u540E\u5230\u90A3\u4E2A\u9879\u76EE\u7684\u9762\u677F\u9875\u52FE\u9009\u5B83\uFF0C\u6A21\u5757\u624D\u4F1A\u51FA\u73B0\u3002";
947
982
  readonly "panels.market.recheck": "\u91CD\u65B0\u68C0\u67E5\u66F4\u65B0";
@@ -1137,17 +1172,20 @@ export declare const kit: {
1137
1172
  readonly "rightbar.label": "\u6570\u636E\u9762\u677F";
1138
1173
  readonly "rightbar.expand": "\u5C55\u5F00\u6570\u636E\u9762\u677F";
1139
1174
  readonly "rightbar.collapse": "\u6536\u8D77\u6570\u636E\u9762\u677F";
1175
+ readonly "rightbar.column.label": "\u53F3\u4FA7\u680F";
1176
+ readonly "rightbar.column.workbench": "\u5DE5\u4F5C\u53F0\u9762\u677F";
1177
+ readonly "rightbar.column.dsh": "dsh \u9762\u677F";
1140
1178
  readonly "rightbar.refresh": "\u5237\u65B0";
1141
1179
  readonly "rightbar.refreshing": "\u5237\u65B0\u4E2D\u2026";
1142
1180
  readonly "rightbar.updatedAt": "\u66F4\u65B0\u4E8E {time}";
1143
1181
  readonly "rightbar.noProject": "\u5F53\u524D\u4F1A\u8BDD\u6CA1\u6709\u6240\u5C5E\u9879\u76EE";
1144
1182
  readonly "coding.notARepo.title": "\u8FD9\u4E2A\u9879\u76EE\u4E0D\u662F Coding \u4ED3\u5E93";
1145
1183
  readonly "error.unknown": "\u51FA\u9519\u4E86";
1146
- readonly "board.title": "\u770B\u677F";
1184
+ readonly "board.title": "\u5DE5\u4F5C\u53F0\u9762\u677F";
1147
1185
  readonly "panel.conversation": "\u5BF9\u8BDD";
1148
1186
  readonly "panels.label": "\u5168\u5C40\u9762\u677F";
1149
1187
  };
1150
- en: Record<"time.now" | "time.minutes" | "time.hours" | "time.days" | "blocker.retry" | "blocker.copy" | "blocker.unknown.title" | "blocker.login.go" | "blocker.login.titleGeneric" | "blocker.login.title" | "blocker.login.manual" | "blocker.login.hint" | "blocker.forbidden.open" | "blocker.forbidden.titleGeneric" | "blocker.forbidden.title" | "blocker.forbidden.hint" | "blocker.timeout.hint" | "blocker.exec.hint" | "blocker.fix.install" | "blocker.fix.update" | "blocker.market.open" | "env.unit.missingPlugin" | "env.unit.hint" | "env.unit.missingCommands" | "env.unit.missingCommandsHint" | "env.unit.unchecked" | "env.unit.uncheckedHint" | "brand.name" | "toggle.open" | "toggle.collapse" | "project.label" | "workspace.section" | "project.none" | "project.empty" | "project.add" | "session.new" | "session.new.label" | "session.empty" | "session.noProject" | "session.pinned" | "session.actions" | "status.idle" | "status.running" | "status.waitingApproval" | "status.planReview" | "status.waitingAnswer" | "status.completed" | "status.subagentsRunning.one" | "status.subagentsRunning.other" | "panels.title" | "panels.reset" | "panels.enabled" | "panels.disabled" | "panels.choose" | "panels.failed" | "panels.hintEffect" | "panels.dragHint" | "panels.unknownStep" | "panels.labelWithHint" | "panels.dep.missingPlugin" | "panels.dep.missingCommands" | "panels.dep.unchecked" | "panels.tab.modules" | "panels.tab.market" | "panels.browseMarket" | "panels.noneInstalled" | "panels.noneInstalledHint" | "panels.market.installed" | "panels.market.outdated" | "panels.market.hasNew" | "panels.market.missing" | "panels.market.unchecked" | "panels.market.checking" | "panels.market.sectionInstalled" | "panels.market.sectionPending" | "panels.market.sectionShared" | "panels.market.sharedUsedBy" | "panels.market.listSeparator" | "panels.market.sharedMissing" | "panels.market.sharedOutdated" | "panels.market.sharedUnsatisfied" | "panels.market.sharedOk" | "panels.market.versionArrow" | "panels.market.lead" | "panels.market.install" | "panels.market.update" | "panels.market.uninstall" | "panels.market.uninstallLabel" | "panels.market.installing" | "panels.market.updating" | "panels.market.uninstalling" | "panels.market.confirmUninstallTitle" | "panels.market.confirmUninstallDetail" | "panels.market.confirmUninstallAck" | "panels.market.confirmYes" | "panels.market.confirmNo" | "panels.market.failed" | "panels.market.needEnv" | "panels.market.noSource" | "panels.market.badSource" | "panels.market.empty" | "panels.market.installedSection" | "panels.market.moduleOutdated" | "panels.market.moduleRestartHint" | "panels.market.restartNeeded" | "panels.market.foot" | "panels.market.recheck" | "panels.market.checkUpdates" | "panels.market.checkedAt" | "panels.market.justNow" | "panels.market.minutesAgo" | "panels.market.hoursAgo" | "panels.market.add.description" | "panels.market.add.specPlaceholder" | "panels.market.add.guideToggle" | "panels.market.add.guideHide" | "panels.market.add.guideIdTitle" | "panels.market.add.guideIdExample" | "panels.market.add.guideIdHint" | "panels.market.add.guideGitTitle" | "panels.market.add.guideGitExample" | "panels.market.add.guideGitHint" | "panels.market.add.guidePathTitle" | "panels.market.add.guidePathExample" | "panels.market.add.guidePathHint" | "panels.market.add.guideExampleLabel" | "panels.market.add.guideFill" | "panels.market.add.guideSafety" | "panels.market.add.registryLegend" | "panels.market.add.registryOfficial" | "panels.market.add.registryMirror" | "panels.market.add.registryWithHost" | "panels.market.add.registryToggle" | "panels.market.add.installVersion" | "panels.market.add.registryDefault" | "panels.market.add.registryCustom" | "panels.market.add.registryCustomPlaceholder" | "panels.market.add.registryCustomHint" | "panels.market.add.registryCustomInvalid" | "panels.market.add.run" | "panels.market.add.edit" | "panels.market.add.changeRegistry" | "panels.market.add.installingTitle" | "panels.market.add.installedTitle" | "panels.market.add.failedTitle" | "panels.market.add.cancelledTitle" | "panels.market.add.failureNetworkHost" | "panels.market.add.problemInvalid" | "panels.market.add.problemInstalled" | "panels.market.add.problemNotFound" | "panels.market.add.problemNotPackage" | "panels.market.add.problemNotBundle" | "panels.market.add.problemNetwork" | "panels.market.add.problemUnknown" | "panels.market.add.failureNetwork" | "panels.market.add.failureNotFound" | "panels.market.add.failureNoMatchingVersion" | "panels.market.add.failureDiskFull" | "panels.market.add.failurePermission" | "panels.market.add.failureBuildBlocked" | "panels.market.add.failureIntegrity" | "panels.market.add.failureTimeout" | "panels.market.add.failurePnpmMissing" | "panels.market.add.failureGeneric" | "panels.market.add.approveTitle" | "panels.market.add.approveCaution" | "panels.market.add.approveRun" | "panels.market.add.restart" | "panels.market.add.tookEffect" | "panels.market.add.details" | "panels.market.add.open" | "panels.market.add.title" | "panels.market.add.intro" | "panels.market.add.specLabel" | "panels.market.add.specHint" | "panels.market.add.exampleTitle" | "panels.market.add.exampleFill" | "panels.market.add.registryLabel" | "panels.market.add.registryProfile" | "panels.market.add.registryPnpm" | "panels.market.add.check" | "panels.market.add.checking" | "panels.market.add.change" | "panels.market.add.previewTitle" | "panels.market.add.fieldName" | "panels.market.add.fieldVersion" | "panels.market.add.fieldDescription" | "panels.market.add.fieldSource" | "panels.market.add.install" | "panels.market.add.installing" | "panels.market.add.cancel" | "panels.market.add.close" | "panels.market.add.retry" | "panels.market.add.changeSource" | "panels.market.add.approveBuilds" | "panels.market.add.approveHint" | "panels.market.add.doneApplied" | "panels.market.add.doneRestart" | "panels.market.add.cancelled" | "panels.market.add.failed" | "panels.market.add.removed" | "panels.market.add.supplyPending" | "panels.market.add.supplyFailed" | "panels.market.add.notModule" | "panels.market.add.removedRestart" | "panels.market.add.remove" | "panels.market.add.problem.invalidSpec" | "panels.market.add.problem.alreadyInstalled" | "panels.market.add.problem.notFound" | "panels.market.add.problem.notAPackage" | "panels.market.add.problem.notABundle" | "panels.market.add.problem.network" | "panels.market.add.problem.unknown" | "panels.market.add.reason.invalidSpec" | "panels.market.add.reason.incompatible" | "panels.market.add.reason.notBundle" | "panels.market.add.reason.notRemovable" | "panels.market.add.reason.bundleInUse" | "panels.market.add.reason.stopProfile" | "panels.market.add.reason.staleApproval" | "panels.market.add.reason.operationError" | "panels.market.add.reason.buildBlocked" | "panels.market.add.reason.pnpmMissing" | "panels.market.add.reason.noMatchingVersion" | "panels.market.add.reason.diskFull" | "panels.market.add.reason.permission" | "panels.market.add.reason.integrity" | "panels.market.add.reason.timeout" | "panels.market.add.reason.network" | "panels.market.add.reason.notFound" | "panels.market.add.reason.unknown" | "blocker.fix.running" | "blocker.fix.failed" | "blocker.retry.running" | "panels.reading" | "panels.empty" | "panels.emptyHint" | "env.title" | "env.checking" | "env.installing" | "env.failed" | "env.elapsed" | "env.stepFailed.install" | "env.stepFailed.path" | "env.stepFailed.shell" | "env.bridge.ok" | "env.bridge.short" | "env.bridge.why" | "env.bridge.daemon" | "env.bridge.extension" | "env.bridge.extensionLink" | "env.bridge.profile" | "env.bridge.stale" | "env.bridge.unknown" | "env.fix.title" | "env.fix.why" | "env.fix.whyPath" | "env.fix.whyShell" | "env.fix.step" | "env.fix.stepPath" | "env.fix.stepShell" | "env.fix.permission" | "env.fix.network" | "env.fix.details" | "env.retry" | "env.copyCommand" | "env.copied" | "env.step.opencli" | "env.step.codingPlugin" | "env.step.bridge" | "env.step.warm" | "env.warm.done" | "env.warm.short" | "rightbar.label" | "rightbar.expand" | "rightbar.collapse" | "rightbar.refresh" | "rightbar.refreshing" | "rightbar.updatedAt" | "rightbar.noProject" | "coding.notARepo.title" | "error.unknown" | "board.title" | "panel.conversation" | "panels.label", string>;
1188
+ en: Record<"time.now" | "time.minutes" | "time.hours" | "time.days" | "blocker.retry" | "blocker.copy" | "blocker.unknown.title" | "blocker.login.go" | "blocker.login.titleGeneric" | "blocker.login.title" | "blocker.login.manual" | "blocker.login.hint" | "blocker.forbidden.open" | "blocker.forbidden.titleGeneric" | "blocker.forbidden.title" | "blocker.forbidden.hint" | "blocker.timeout.hint" | "blocker.exec.hint" | "blocker.fix.install" | "blocker.fix.update" | "blocker.market.open" | "env.unit.missingPlugin" | "env.unit.hint" | "env.unit.missingCommands" | "env.unit.missingCommandsHint" | "env.unit.unchecked" | "env.unit.uncheckedHint" | "brand.name" | "toggle.open" | "toggle.collapse" | "project.label" | "workspace.section" | "project.none" | "project.empty" | "project.add" | "session.new" | "session.new.label" | "session.empty" | "session.noProject" | "session.pinned" | "session.actions" | "status.idle" | "status.running" | "status.waitingApproval" | "status.planReview" | "status.waitingAnswer" | "status.completed" | "status.subagentsRunning.one" | "status.subagentsRunning.other" | "panels.title" | "panels.reset" | "panels.enabled" | "panels.disabled" | "panels.choose" | "panels.failed" | "panels.hintEffect" | "panels.dragHint" | "panels.unknownStep" | "panels.labelWithHint" | "panels.dep.missingPlugin" | "panels.dep.missingCommands" | "panels.dep.unchecked" | "panels.tab.modules" | "panels.tab.market" | "panels.browseMarket" | "panels.noneInstalled" | "panels.noneInstalledHint" | "panels.market.installed" | "panels.market.outdated" | "panels.market.hasNew" | "panels.market.missing" | "panels.market.unchecked" | "panels.market.checking" | "panels.market.sectionInstalled" | "panels.market.sectionPending" | "panels.market.sectionShared" | "panels.market.sharedUsedBy" | "panels.market.listSeparator" | "panels.market.sharedMissing" | "panels.market.sharedOutdated" | "panels.market.sharedUnsatisfied" | "panels.market.sharedOk" | "panels.market.versionArrow" | "panels.market.lead" | "panels.market.install" | "panels.market.update" | "panels.market.uninstall" | "panels.market.uninstallLabel" | "panels.market.installing" | "panels.market.updating" | "panels.market.uninstalling" | "panels.market.confirmUninstallTitle" | "panels.market.confirmUninstallDetail" | "panels.market.confirmUninstallAck" | "panels.market.confirmYes" | "panels.market.confirmNo" | "panels.market.failed" | "panels.market.needEnv" | "panels.market.noSource" | "panels.market.badSource" | "panels.market.empty" | "panels.market.installedSection" | "panels.market.moduleOutdated" | "panels.market.moduleRestartHint" | "panels.market.restartNeeded" | "panels.market.foot" | "panels.market.recheck" | "panels.market.checkUpdates" | "panels.market.checkedAt" | "panels.market.justNow" | "panels.market.minutesAgo" | "panels.market.hoursAgo" | "panels.market.add.description" | "panels.market.add.specPlaceholder" | "panels.market.add.guideToggle" | "panels.market.add.guideHide" | "panels.market.add.guideIdTitle" | "panels.market.add.guideIdExample" | "panels.market.add.guideIdHint" | "panels.market.add.guideGitTitle" | "panels.market.add.guideGitExample" | "panels.market.add.guideGitHint" | "panels.market.add.guidePathTitle" | "panels.market.add.guidePathExample" | "panels.market.add.guidePathHint" | "panels.market.add.guideExampleLabel" | "panels.market.add.guideFill" | "panels.market.add.guideSafety" | "panels.market.add.registryLegend" | "panels.market.add.registryOfficial" | "panels.market.add.registryMirror" | "panels.market.add.registryWithHost" | "panels.market.add.registryToggle" | "panels.market.add.installVersion" | "panels.market.add.registryDefault" | "panels.market.add.registryCustom" | "panels.market.add.registryCustomPlaceholder" | "panels.market.add.registryCustomHint" | "panels.market.add.registryCustomInvalid" | "panels.market.add.run" | "panels.market.add.edit" | "panels.market.add.changeRegistry" | "panels.market.add.installingTitle" | "panels.market.add.installedTitle" | "panels.market.add.failedTitle" | "panels.market.add.cancelledTitle" | "panels.market.add.failureNetworkHost" | "panels.market.add.problemInvalid" | "panels.market.add.problemInstalled" | "panels.market.add.problemNotFound" | "panels.market.add.problemNotPackage" | "panels.market.add.problemNotBundle" | "panels.market.add.problemNetwork" | "panels.market.add.problemUnknown" | "panels.market.add.failureNetwork" | "panels.market.add.failureNotFound" | "panels.market.add.failureNoMatchingVersion" | "panels.market.add.failureDiskFull" | "panels.market.add.failurePermission" | "panels.market.add.failureBuildBlocked" | "panels.market.add.failureIntegrity" | "panels.market.add.failureTimeout" | "panels.market.add.failurePnpmMissing" | "panels.market.add.failureGeneric" | "panels.market.add.approveTitle" | "panels.market.add.approveCaution" | "panels.market.add.approveRun" | "panels.market.add.restart" | "panels.market.add.tookEffect" | "panels.market.add.details" | "panels.market.add.open" | "panels.market.add.title" | "panels.market.add.intro" | "panels.market.add.specLabel" | "panels.market.add.specHint" | "panels.market.add.exampleTitle" | "panels.market.add.exampleFill" | "panels.market.add.registryLabel" | "panels.market.add.registryProfile" | "panels.market.add.registryPnpm" | "panels.market.add.check" | "panels.market.add.checking" | "panels.market.add.change" | "panels.market.add.previewTitle" | "panels.market.add.fieldName" | "panels.market.add.fieldVersion" | "panels.market.add.fieldDescription" | "panels.market.add.fieldSource" | "panels.market.add.install" | "panels.market.add.installing" | "panels.market.add.cancel" | "panels.market.add.close" | "panels.market.add.retry" | "panels.market.add.changeSource" | "panels.market.add.approveBuilds" | "panels.market.add.approveHint" | "panels.market.add.doneApplied" | "panels.market.add.doneRestart" | "panels.market.add.cancelled" | "panels.market.add.failed" | "panels.market.add.removed" | "panels.market.add.supplyPending" | "panels.market.add.supplyFailed" | "panels.market.add.notModule" | "panels.market.add.removedRestart" | "panels.market.add.remove" | "panels.market.add.problem.invalidSpec" | "panels.market.add.problem.alreadyInstalled" | "panels.market.add.problem.notFound" | "panels.market.add.problem.notAPackage" | "panels.market.add.problem.notABundle" | "panels.market.add.problem.network" | "panels.market.add.problem.unknown" | "panels.market.add.reason.invalidSpec" | "panels.market.add.reason.incompatible" | "panels.market.add.reason.notBundle" | "panels.market.add.reason.notRemovable" | "panels.market.add.reason.bundleInUse" | "panels.market.add.reason.stopProfile" | "panels.market.add.reason.staleApproval" | "panels.market.add.reason.operationError" | "panels.market.add.reason.buildBlocked" | "panels.market.add.reason.pnpmMissing" | "panels.market.add.reason.noMatchingVersion" | "panels.market.add.reason.diskFull" | "panels.market.add.reason.permission" | "panels.market.add.reason.integrity" | "panels.market.add.reason.timeout" | "panels.market.add.reason.network" | "panels.market.add.reason.notFound" | "panels.market.add.reason.unknown" | "blocker.fix.running" | "blocker.fix.failed" | "blocker.retry.running" | "panels.reading" | "panels.empty" | "panels.emptyHint" | "env.title" | "env.checking" | "env.installing" | "env.failed" | "env.elapsed" | "env.stepFailed.install" | "env.stepFailed.path" | "env.stepFailed.shell" | "env.bridge.ok" | "env.bridge.short" | "env.bridge.why" | "env.bridge.daemon" | "env.bridge.extension" | "env.bridge.extensionLink" | "env.bridge.profile" | "env.bridge.stale" | "env.bridge.unknown" | "env.fix.title" | "env.fix.why" | "env.fix.whyPath" | "env.fix.whyShell" | "env.fix.step" | "env.fix.stepPath" | "env.fix.stepShell" | "env.fix.permission" | "env.fix.network" | "env.fix.details" | "env.retry" | "env.copyCommand" | "env.copied" | "env.step.opencli" | "env.step.codingPlugin" | "env.step.bridge" | "env.step.warm" | "env.warm.done" | "env.warm.short" | "rightbar.label" | "rightbar.expand" | "rightbar.collapse" | "rightbar.column.label" | "rightbar.column.workbench" | "rightbar.column.dsh" | "rightbar.refresh" | "rightbar.refreshing" | "rightbar.updatedAt" | "rightbar.noProject" | "coding.notARepo.title" | "error.unknown" | "board.title" | "panel.conversation" | "panels.label", string>;
1151
1189
  };
1152
1190
  mergeMessages(base: apiModule.Dictionaries, contributions: readonly apiModule.MessagesContribution[]): apiModule.Dictionaries;
1153
1191
  zh: {
@@ -1231,7 +1269,7 @@ export declare const kit: {
1231
1269
  readonly "panels.market.empty": "\u6682\u65E0\u53EF\u7528\u6A21\u5757";
1232
1270
  readonly "panels.market.installedSection": "\u5DF2\u88C5";
1233
1271
  readonly "panels.market.moduleOutdated": "\u6709\u65B0\u7248";
1234
- readonly "panels.market.moduleRestartHint": "\u5B89\u88C5\u5B8C\u6210\u540E\u53EF\u80FD\u9700\u8981\u91CD\u542F\u624D\u751F\u6548";
1272
+ readonly "panels.market.moduleRestartHint": "\u88C5\u597D\u4E86\u4F46\u8FD8\u6CA1\u751F\u6548 \u2014\u2014 \u91CD\u542F\u4E00\u6B21 dsh \u5C31\u4F1A\u51FA\u6765";
1235
1273
  readonly "panels.market.restartNeeded": "\u65B0\u7248\u88C5\u597D\u4E86\uFF0C\u91CD\u542F\u4E00\u6B21\u624D\u751F\u6548\u3002";
1236
1274
  readonly "panels.market.foot": "\u88C5\u597D\u540E\u5230\u90A3\u4E2A\u9879\u76EE\u7684\u9762\u677F\u9875\u52FE\u9009\u5B83\uFF0C\u6A21\u5757\u624D\u4F1A\u51FA\u73B0\u3002";
1237
1275
  readonly "panels.market.recheck": "\u91CD\u65B0\u68C0\u67E5\u66F4\u65B0";
@@ -1427,13 +1465,16 @@ export declare const kit: {
1427
1465
  readonly "rightbar.label": "\u6570\u636E\u9762\u677F";
1428
1466
  readonly "rightbar.expand": "\u5C55\u5F00\u6570\u636E\u9762\u677F";
1429
1467
  readonly "rightbar.collapse": "\u6536\u8D77\u6570\u636E\u9762\u677F";
1468
+ readonly "rightbar.column.label": "\u53F3\u4FA7\u680F";
1469
+ readonly "rightbar.column.workbench": "\u5DE5\u4F5C\u53F0\u9762\u677F";
1470
+ readonly "rightbar.column.dsh": "dsh \u9762\u677F";
1430
1471
  readonly "rightbar.refresh": "\u5237\u65B0";
1431
1472
  readonly "rightbar.refreshing": "\u5237\u65B0\u4E2D\u2026";
1432
1473
  readonly "rightbar.updatedAt": "\u66F4\u65B0\u4E8E {time}";
1433
1474
  readonly "rightbar.noProject": "\u5F53\u524D\u4F1A\u8BDD\u6CA1\u6709\u6240\u5C5E\u9879\u76EE";
1434
1475
  readonly "coding.notARepo.title": "\u8FD9\u4E2A\u9879\u76EE\u4E0D\u662F Coding \u4ED3\u5E93";
1435
1476
  readonly "error.unknown": "\u51FA\u9519\u4E86";
1436
- readonly "board.title": "\u770B\u677F";
1477
+ readonly "board.title": "\u5DE5\u4F5C\u53F0\u9762\u677F";
1437
1478
  readonly "panel.conversation": "\u5BF9\u8BDD";
1438
1479
  readonly "panels.label": "\u5168\u5C40\u9762\u677F";
1439
1480
  };
@@ -1444,6 +1485,7 @@ export declare const kit: {
1444
1485
  Fragment: import("react").ExoticComponent<import("react").FragmentProps>;
1445
1486
  useState: typeof import("react").useState;
1446
1487
  useEffect: typeof import("react").useEffect;
1488
+ useLayoutEffect: typeof import("react").useLayoutEffect;
1447
1489
  useMemo: typeof import("react").useMemo;
1448
1490
  useCallback: typeof import("react").useCallback;
1449
1491
  useRef: typeof import("react").useRef;
@@ -1494,7 +1536,12 @@ export declare const kit: {
1494
1536
  probeKeyOf(error: apiModule.ApiError | undefined): string | null;
1495
1537
  apiGet<T>(route: string, query?: apiModule.Query, options?: apiModule.ApiGetOptions): Promise<apiModule.ApiResponse<T>>;
1496
1538
  apiPost<T>(route: string, body: Record<string, unknown>): Promise<apiModule.ApiResponse<T>>;
1539
+ ActivityBlock({ head, children }: apiModule.ActivityBlockProps): JSX.Element;
1540
+ ActivityLine({ dot, text, at, actions }: apiModule.ActivityLineProps): JSX.Element;
1541
+ ActivityAction({ label, hint, icon, href, onClick, failed }: apiModule.ActivityActionProps): JSX.Element;
1497
1542
  ApprovalDetail(props: apiModule.ApprovalDetailProps): JSX.Element | null;
1543
+ ApprovalPlan({ rows, hint, warn, children }: apiModule.ApprovalPlanProps): JSX.Element;
1544
+ Card({ t, title, refreshing, onRefresh, meta, head, children }: apiModule.CardProps): JSX.Element;
1498
1545
  CardHead({ t, title, meta, refreshing, onRefresh, gear, gearOpen, onToggleGear, platformHref, platform, platformTitle, }: apiModule.CardHeadProps): JSX.Element;
1499
1546
  ChoiceGroup({ label, name, value, options, disabled, onChange }: apiModule.ChoiceGroupProps): JSX.Element;
1500
1547
  LongTaskRow(props: apiModule.LongTaskRowProps): JSX.Element;
@@ -1512,6 +1559,7 @@ export declare const kit: {
1512
1559
  readonly onPick: () => void;
1513
1560
  } | undefined;
1514
1561
  }): JSX.Element;
1562
+ Note({ tone, as, children }: apiModule.NoteProps): JSX.Element;
1515
1563
  SkeletonRows({ rows }: {
1516
1564
  rows?: number;
1517
1565
  }): JSX.Element;
@@ -1521,11 +1569,17 @@ export declare const kit: {
1521
1569
  icon?: apiModule.ReactNode;
1522
1570
  compact?: boolean;
1523
1571
  }): JSX.Element;
1572
+ Rows({ children }: apiModule.RowsProps): JSX.Element;
1573
+ Row({ label, value }: apiModule.RowProps): JSX.Element;
1524
1574
  SaveBar({ busy, disabled, labels, onCancel, onSave }: apiModule.SaveBarProps): JSX.Element;
1575
+ SettingsSection({ label, title, action, children }: apiModule.SettingsSectionProps): JSX.Element;
1576
+ Stack({ children }: apiModule.StackProps): JSX.Element;
1577
+ StateBlock({ title, dot, hint, actions, resolving, children }: apiModule.StateBlockProps): JSX.Element;
1525
1578
  TextField({ invalid, className, ...rest }: apiModule.TextFieldProps): JSX.Element;
1526
1579
  IconConversation({ size }: apiModule.IconProps): JSX.Element;
1527
1580
  IconBrandMark({ size }: apiModule.IconProps): JSX.Element;
1528
1581
  IconModules({ size }: apiModule.IconProps): JSX.Element;
1582
+ IconPanelScreen({ size }: apiModule.IconProps): JSX.Element;
1529
1583
  PLUGIN_ID: "@dsh-workbench/core";
1530
1584
  API_PREFIX: "/workbench/api";
1531
1585
  PREFS_PREFIX: "/workbench/api/prefs";
@@ -1551,6 +1605,8 @@ export declare const kit: {
1551
1605
  DEFAULT_WORKSPACE_TITLE: "default-workspace";
1552
1606
  STORAGE_KEY_PROJECT: "dsh-workbench.project";
1553
1607
  STORAGE_KEY_RIGHTBAR: "dsh-workbench.rightbar.expanded";
1608
+ STORAGE_KEY_RIGHTBAR_COLUMN: "dsh-workbench.rightbar.column";
1609
+ RIGHTBAR_FULLSCREEN_WIDTH: 768;
1554
1610
  LOCALE_NS: "workbench";
1555
1611
  LOCALES: readonly ["zh", "en"];
1556
1612
  readText(key: string): string | null;
@@ -1640,7 +1696,7 @@ export declare const kit: {
1640
1696
  readonly "panels.market.empty": "\u6682\u65E0\u53EF\u7528\u6A21\u5757";
1641
1697
  readonly "panels.market.installedSection": "\u5DF2\u88C5";
1642
1698
  readonly "panels.market.moduleOutdated": "\u6709\u65B0\u7248";
1643
- readonly "panels.market.moduleRestartHint": "\u5B89\u88C5\u5B8C\u6210\u540E\u53EF\u80FD\u9700\u8981\u91CD\u542F\u624D\u751F\u6548";
1699
+ readonly "panels.market.moduleRestartHint": "\u88C5\u597D\u4E86\u4F46\u8FD8\u6CA1\u751F\u6548 \u2014\u2014 \u91CD\u542F\u4E00\u6B21 dsh \u5C31\u4F1A\u51FA\u6765";
1644
1700
  readonly "panels.market.restartNeeded": "\u65B0\u7248\u88C5\u597D\u4E86\uFF0C\u91CD\u542F\u4E00\u6B21\u624D\u751F\u6548\u3002";
1645
1701
  readonly "panels.market.foot": "\u88C5\u597D\u540E\u5230\u90A3\u4E2A\u9879\u76EE\u7684\u9762\u677F\u9875\u52FE\u9009\u5B83\uFF0C\u6A21\u5757\u624D\u4F1A\u51FA\u73B0\u3002";
1646
1702
  readonly "panels.market.recheck": "\u91CD\u65B0\u68C0\u67E5\u66F4\u65B0";
@@ -1836,17 +1892,20 @@ export declare const kit: {
1836
1892
  readonly "rightbar.label": "\u6570\u636E\u9762\u677F";
1837
1893
  readonly "rightbar.expand": "\u5C55\u5F00\u6570\u636E\u9762\u677F";
1838
1894
  readonly "rightbar.collapse": "\u6536\u8D77\u6570\u636E\u9762\u677F";
1895
+ readonly "rightbar.column.label": "\u53F3\u4FA7\u680F";
1896
+ readonly "rightbar.column.workbench": "\u5DE5\u4F5C\u53F0\u9762\u677F";
1897
+ readonly "rightbar.column.dsh": "dsh \u9762\u677F";
1839
1898
  readonly "rightbar.refresh": "\u5237\u65B0";
1840
1899
  readonly "rightbar.refreshing": "\u5237\u65B0\u4E2D\u2026";
1841
1900
  readonly "rightbar.updatedAt": "\u66F4\u65B0\u4E8E {time}";
1842
1901
  readonly "rightbar.noProject": "\u5F53\u524D\u4F1A\u8BDD\u6CA1\u6709\u6240\u5C5E\u9879\u76EE";
1843
1902
  readonly "coding.notARepo.title": "\u8FD9\u4E2A\u9879\u76EE\u4E0D\u662F Coding \u4ED3\u5E93";
1844
1903
  readonly "error.unknown": "\u51FA\u9519\u4E86";
1845
- readonly "board.title": "\u770B\u677F";
1904
+ readonly "board.title": "\u5DE5\u4F5C\u53F0\u9762\u677F";
1846
1905
  readonly "panel.conversation": "\u5BF9\u8BDD";
1847
1906
  readonly "panels.label": "\u5168\u5C40\u9762\u677F";
1848
1907
  };
1849
- en: Record<"time.now" | "time.minutes" | "time.hours" | "time.days" | "blocker.retry" | "blocker.copy" | "blocker.unknown.title" | "blocker.login.go" | "blocker.login.titleGeneric" | "blocker.login.title" | "blocker.login.manual" | "blocker.login.hint" | "blocker.forbidden.open" | "blocker.forbidden.titleGeneric" | "blocker.forbidden.title" | "blocker.forbidden.hint" | "blocker.timeout.hint" | "blocker.exec.hint" | "blocker.fix.install" | "blocker.fix.update" | "blocker.market.open" | "env.unit.missingPlugin" | "env.unit.hint" | "env.unit.missingCommands" | "env.unit.missingCommandsHint" | "env.unit.unchecked" | "env.unit.uncheckedHint" | "brand.name" | "toggle.open" | "toggle.collapse" | "project.label" | "workspace.section" | "project.none" | "project.empty" | "project.add" | "session.new" | "session.new.label" | "session.empty" | "session.noProject" | "session.pinned" | "session.actions" | "status.idle" | "status.running" | "status.waitingApproval" | "status.planReview" | "status.waitingAnswer" | "status.completed" | "status.subagentsRunning.one" | "status.subagentsRunning.other" | "panels.title" | "panels.reset" | "panels.enabled" | "panels.disabled" | "panels.choose" | "panels.failed" | "panels.hintEffect" | "panels.dragHint" | "panels.unknownStep" | "panels.labelWithHint" | "panels.dep.missingPlugin" | "panels.dep.missingCommands" | "panels.dep.unchecked" | "panels.tab.modules" | "panels.tab.market" | "panels.browseMarket" | "panels.noneInstalled" | "panels.noneInstalledHint" | "panels.market.installed" | "panels.market.outdated" | "panels.market.hasNew" | "panels.market.missing" | "panels.market.unchecked" | "panels.market.checking" | "panels.market.sectionInstalled" | "panels.market.sectionPending" | "panels.market.sectionShared" | "panels.market.sharedUsedBy" | "panels.market.listSeparator" | "panels.market.sharedMissing" | "panels.market.sharedOutdated" | "panels.market.sharedUnsatisfied" | "panels.market.sharedOk" | "panels.market.versionArrow" | "panels.market.lead" | "panels.market.install" | "panels.market.update" | "panels.market.uninstall" | "panels.market.uninstallLabel" | "panels.market.installing" | "panels.market.updating" | "panels.market.uninstalling" | "panels.market.confirmUninstallTitle" | "panels.market.confirmUninstallDetail" | "panels.market.confirmUninstallAck" | "panels.market.confirmYes" | "panels.market.confirmNo" | "panels.market.failed" | "panels.market.needEnv" | "panels.market.noSource" | "panels.market.badSource" | "panels.market.empty" | "panels.market.installedSection" | "panels.market.moduleOutdated" | "panels.market.moduleRestartHint" | "panels.market.restartNeeded" | "panels.market.foot" | "panels.market.recheck" | "panels.market.checkUpdates" | "panels.market.checkedAt" | "panels.market.justNow" | "panels.market.minutesAgo" | "panels.market.hoursAgo" | "panels.market.add.description" | "panels.market.add.specPlaceholder" | "panels.market.add.guideToggle" | "panels.market.add.guideHide" | "panels.market.add.guideIdTitle" | "panels.market.add.guideIdExample" | "panels.market.add.guideIdHint" | "panels.market.add.guideGitTitle" | "panels.market.add.guideGitExample" | "panels.market.add.guideGitHint" | "panels.market.add.guidePathTitle" | "panels.market.add.guidePathExample" | "panels.market.add.guidePathHint" | "panels.market.add.guideExampleLabel" | "panels.market.add.guideFill" | "panels.market.add.guideSafety" | "panels.market.add.registryLegend" | "panels.market.add.registryOfficial" | "panels.market.add.registryMirror" | "panels.market.add.registryWithHost" | "panels.market.add.registryToggle" | "panels.market.add.installVersion" | "panels.market.add.registryDefault" | "panels.market.add.registryCustom" | "panels.market.add.registryCustomPlaceholder" | "panels.market.add.registryCustomHint" | "panels.market.add.registryCustomInvalid" | "panels.market.add.run" | "panels.market.add.edit" | "panels.market.add.changeRegistry" | "panels.market.add.installingTitle" | "panels.market.add.installedTitle" | "panels.market.add.failedTitle" | "panels.market.add.cancelledTitle" | "panels.market.add.failureNetworkHost" | "panels.market.add.problemInvalid" | "panels.market.add.problemInstalled" | "panels.market.add.problemNotFound" | "panels.market.add.problemNotPackage" | "panels.market.add.problemNotBundle" | "panels.market.add.problemNetwork" | "panels.market.add.problemUnknown" | "panels.market.add.failureNetwork" | "panels.market.add.failureNotFound" | "panels.market.add.failureNoMatchingVersion" | "panels.market.add.failureDiskFull" | "panels.market.add.failurePermission" | "panels.market.add.failureBuildBlocked" | "panels.market.add.failureIntegrity" | "panels.market.add.failureTimeout" | "panels.market.add.failurePnpmMissing" | "panels.market.add.failureGeneric" | "panels.market.add.approveTitle" | "panels.market.add.approveCaution" | "panels.market.add.approveRun" | "panels.market.add.restart" | "panels.market.add.tookEffect" | "panels.market.add.details" | "panels.market.add.open" | "panels.market.add.title" | "panels.market.add.intro" | "panels.market.add.specLabel" | "panels.market.add.specHint" | "panels.market.add.exampleTitle" | "panels.market.add.exampleFill" | "panels.market.add.registryLabel" | "panels.market.add.registryProfile" | "panels.market.add.registryPnpm" | "panels.market.add.check" | "panels.market.add.checking" | "panels.market.add.change" | "panels.market.add.previewTitle" | "panels.market.add.fieldName" | "panels.market.add.fieldVersion" | "panels.market.add.fieldDescription" | "panels.market.add.fieldSource" | "panels.market.add.install" | "panels.market.add.installing" | "panels.market.add.cancel" | "panels.market.add.close" | "panels.market.add.retry" | "panels.market.add.changeSource" | "panels.market.add.approveBuilds" | "panels.market.add.approveHint" | "panels.market.add.doneApplied" | "panels.market.add.doneRestart" | "panels.market.add.cancelled" | "panels.market.add.failed" | "panels.market.add.removed" | "panels.market.add.supplyPending" | "panels.market.add.supplyFailed" | "panels.market.add.notModule" | "panels.market.add.removedRestart" | "panels.market.add.remove" | "panels.market.add.problem.invalidSpec" | "panels.market.add.problem.alreadyInstalled" | "panels.market.add.problem.notFound" | "panels.market.add.problem.notAPackage" | "panels.market.add.problem.notABundle" | "panels.market.add.problem.network" | "panels.market.add.problem.unknown" | "panels.market.add.reason.invalidSpec" | "panels.market.add.reason.incompatible" | "panels.market.add.reason.notBundle" | "panels.market.add.reason.notRemovable" | "panels.market.add.reason.bundleInUse" | "panels.market.add.reason.stopProfile" | "panels.market.add.reason.staleApproval" | "panels.market.add.reason.operationError" | "panels.market.add.reason.buildBlocked" | "panels.market.add.reason.pnpmMissing" | "panels.market.add.reason.noMatchingVersion" | "panels.market.add.reason.diskFull" | "panels.market.add.reason.permission" | "panels.market.add.reason.integrity" | "panels.market.add.reason.timeout" | "panels.market.add.reason.network" | "panels.market.add.reason.notFound" | "panels.market.add.reason.unknown" | "blocker.fix.running" | "blocker.fix.failed" | "blocker.retry.running" | "panels.reading" | "panels.empty" | "panels.emptyHint" | "env.title" | "env.checking" | "env.installing" | "env.failed" | "env.elapsed" | "env.stepFailed.install" | "env.stepFailed.path" | "env.stepFailed.shell" | "env.bridge.ok" | "env.bridge.short" | "env.bridge.why" | "env.bridge.daemon" | "env.bridge.extension" | "env.bridge.extensionLink" | "env.bridge.profile" | "env.bridge.stale" | "env.bridge.unknown" | "env.fix.title" | "env.fix.why" | "env.fix.whyPath" | "env.fix.whyShell" | "env.fix.step" | "env.fix.stepPath" | "env.fix.stepShell" | "env.fix.permission" | "env.fix.network" | "env.fix.details" | "env.retry" | "env.copyCommand" | "env.copied" | "env.step.opencli" | "env.step.codingPlugin" | "env.step.bridge" | "env.step.warm" | "env.warm.done" | "env.warm.short" | "rightbar.label" | "rightbar.expand" | "rightbar.collapse" | "rightbar.refresh" | "rightbar.refreshing" | "rightbar.updatedAt" | "rightbar.noProject" | "coding.notARepo.title" | "error.unknown" | "board.title" | "panel.conversation" | "panels.label", string>;
1908
+ en: Record<"time.now" | "time.minutes" | "time.hours" | "time.days" | "blocker.retry" | "blocker.copy" | "blocker.unknown.title" | "blocker.login.go" | "blocker.login.titleGeneric" | "blocker.login.title" | "blocker.login.manual" | "blocker.login.hint" | "blocker.forbidden.open" | "blocker.forbidden.titleGeneric" | "blocker.forbidden.title" | "blocker.forbidden.hint" | "blocker.timeout.hint" | "blocker.exec.hint" | "blocker.fix.install" | "blocker.fix.update" | "blocker.market.open" | "env.unit.missingPlugin" | "env.unit.hint" | "env.unit.missingCommands" | "env.unit.missingCommandsHint" | "env.unit.unchecked" | "env.unit.uncheckedHint" | "brand.name" | "toggle.open" | "toggle.collapse" | "project.label" | "workspace.section" | "project.none" | "project.empty" | "project.add" | "session.new" | "session.new.label" | "session.empty" | "session.noProject" | "session.pinned" | "session.actions" | "status.idle" | "status.running" | "status.waitingApproval" | "status.planReview" | "status.waitingAnswer" | "status.completed" | "status.subagentsRunning.one" | "status.subagentsRunning.other" | "panels.title" | "panels.reset" | "panels.enabled" | "panels.disabled" | "panels.choose" | "panels.failed" | "panels.hintEffect" | "panels.dragHint" | "panels.unknownStep" | "panels.labelWithHint" | "panels.dep.missingPlugin" | "panels.dep.missingCommands" | "panels.dep.unchecked" | "panels.tab.modules" | "panels.tab.market" | "panels.browseMarket" | "panels.noneInstalled" | "panels.noneInstalledHint" | "panels.market.installed" | "panels.market.outdated" | "panels.market.hasNew" | "panels.market.missing" | "panels.market.unchecked" | "panels.market.checking" | "panels.market.sectionInstalled" | "panels.market.sectionPending" | "panels.market.sectionShared" | "panels.market.sharedUsedBy" | "panels.market.listSeparator" | "panels.market.sharedMissing" | "panels.market.sharedOutdated" | "panels.market.sharedUnsatisfied" | "panels.market.sharedOk" | "panels.market.versionArrow" | "panels.market.lead" | "panels.market.install" | "panels.market.update" | "panels.market.uninstall" | "panels.market.uninstallLabel" | "panels.market.installing" | "panels.market.updating" | "panels.market.uninstalling" | "panels.market.confirmUninstallTitle" | "panels.market.confirmUninstallDetail" | "panels.market.confirmUninstallAck" | "panels.market.confirmYes" | "panels.market.confirmNo" | "panels.market.failed" | "panels.market.needEnv" | "panels.market.noSource" | "panels.market.badSource" | "panels.market.empty" | "panels.market.installedSection" | "panels.market.moduleOutdated" | "panels.market.moduleRestartHint" | "panels.market.restartNeeded" | "panels.market.foot" | "panels.market.recheck" | "panels.market.checkUpdates" | "panels.market.checkedAt" | "panels.market.justNow" | "panels.market.minutesAgo" | "panels.market.hoursAgo" | "panels.market.add.description" | "panels.market.add.specPlaceholder" | "panels.market.add.guideToggle" | "panels.market.add.guideHide" | "panels.market.add.guideIdTitle" | "panels.market.add.guideIdExample" | "panels.market.add.guideIdHint" | "panels.market.add.guideGitTitle" | "panels.market.add.guideGitExample" | "panels.market.add.guideGitHint" | "panels.market.add.guidePathTitle" | "panels.market.add.guidePathExample" | "panels.market.add.guidePathHint" | "panels.market.add.guideExampleLabel" | "panels.market.add.guideFill" | "panels.market.add.guideSafety" | "panels.market.add.registryLegend" | "panels.market.add.registryOfficial" | "panels.market.add.registryMirror" | "panels.market.add.registryWithHost" | "panels.market.add.registryToggle" | "panels.market.add.installVersion" | "panels.market.add.registryDefault" | "panels.market.add.registryCustom" | "panels.market.add.registryCustomPlaceholder" | "panels.market.add.registryCustomHint" | "panels.market.add.registryCustomInvalid" | "panels.market.add.run" | "panels.market.add.edit" | "panels.market.add.changeRegistry" | "panels.market.add.installingTitle" | "panels.market.add.installedTitle" | "panels.market.add.failedTitle" | "panels.market.add.cancelledTitle" | "panels.market.add.failureNetworkHost" | "panels.market.add.problemInvalid" | "panels.market.add.problemInstalled" | "panels.market.add.problemNotFound" | "panels.market.add.problemNotPackage" | "panels.market.add.problemNotBundle" | "panels.market.add.problemNetwork" | "panels.market.add.problemUnknown" | "panels.market.add.failureNetwork" | "panels.market.add.failureNotFound" | "panels.market.add.failureNoMatchingVersion" | "panels.market.add.failureDiskFull" | "panels.market.add.failurePermission" | "panels.market.add.failureBuildBlocked" | "panels.market.add.failureIntegrity" | "panels.market.add.failureTimeout" | "panels.market.add.failurePnpmMissing" | "panels.market.add.failureGeneric" | "panels.market.add.approveTitle" | "panels.market.add.approveCaution" | "panels.market.add.approveRun" | "panels.market.add.restart" | "panels.market.add.tookEffect" | "panels.market.add.details" | "panels.market.add.open" | "panels.market.add.title" | "panels.market.add.intro" | "panels.market.add.specLabel" | "panels.market.add.specHint" | "panels.market.add.exampleTitle" | "panels.market.add.exampleFill" | "panels.market.add.registryLabel" | "panels.market.add.registryProfile" | "panels.market.add.registryPnpm" | "panels.market.add.check" | "panels.market.add.checking" | "panels.market.add.change" | "panels.market.add.previewTitle" | "panels.market.add.fieldName" | "panels.market.add.fieldVersion" | "panels.market.add.fieldDescription" | "panels.market.add.fieldSource" | "panels.market.add.install" | "panels.market.add.installing" | "panels.market.add.cancel" | "panels.market.add.close" | "panels.market.add.retry" | "panels.market.add.changeSource" | "panels.market.add.approveBuilds" | "panels.market.add.approveHint" | "panels.market.add.doneApplied" | "panels.market.add.doneRestart" | "panels.market.add.cancelled" | "panels.market.add.failed" | "panels.market.add.removed" | "panels.market.add.supplyPending" | "panels.market.add.supplyFailed" | "panels.market.add.notModule" | "panels.market.add.removedRestart" | "panels.market.add.remove" | "panels.market.add.problem.invalidSpec" | "panels.market.add.problem.alreadyInstalled" | "panels.market.add.problem.notFound" | "panels.market.add.problem.notAPackage" | "panels.market.add.problem.notABundle" | "panels.market.add.problem.network" | "panels.market.add.problem.unknown" | "panels.market.add.reason.invalidSpec" | "panels.market.add.reason.incompatible" | "panels.market.add.reason.notBundle" | "panels.market.add.reason.notRemovable" | "panels.market.add.reason.bundleInUse" | "panels.market.add.reason.stopProfile" | "panels.market.add.reason.staleApproval" | "panels.market.add.reason.operationError" | "panels.market.add.reason.buildBlocked" | "panels.market.add.reason.pnpmMissing" | "panels.market.add.reason.noMatchingVersion" | "panels.market.add.reason.diskFull" | "panels.market.add.reason.permission" | "panels.market.add.reason.integrity" | "panels.market.add.reason.timeout" | "panels.market.add.reason.network" | "panels.market.add.reason.notFound" | "panels.market.add.reason.unknown" | "blocker.fix.running" | "blocker.fix.failed" | "blocker.retry.running" | "panels.reading" | "panels.empty" | "panels.emptyHint" | "env.title" | "env.checking" | "env.installing" | "env.failed" | "env.elapsed" | "env.stepFailed.install" | "env.stepFailed.path" | "env.stepFailed.shell" | "env.bridge.ok" | "env.bridge.short" | "env.bridge.why" | "env.bridge.daemon" | "env.bridge.extension" | "env.bridge.extensionLink" | "env.bridge.profile" | "env.bridge.stale" | "env.bridge.unknown" | "env.fix.title" | "env.fix.why" | "env.fix.whyPath" | "env.fix.whyShell" | "env.fix.step" | "env.fix.stepPath" | "env.fix.stepShell" | "env.fix.permission" | "env.fix.network" | "env.fix.details" | "env.retry" | "env.copyCommand" | "env.copied" | "env.step.opencli" | "env.step.codingPlugin" | "env.step.bridge" | "env.step.warm" | "env.warm.done" | "env.warm.short" | "rightbar.label" | "rightbar.expand" | "rightbar.collapse" | "rightbar.column.label" | "rightbar.column.workbench" | "rightbar.column.dsh" | "rightbar.refresh" | "rightbar.refreshing" | "rightbar.updatedAt" | "rightbar.noProject" | "coding.notARepo.title" | "error.unknown" | "board.title" | "panel.conversation" | "panels.label", string>;
1850
1909
  };
1851
1910
  mergeMessages(base: apiModule.Dictionaries, contributions: readonly apiModule.MessagesContribution[]): apiModule.Dictionaries;
1852
1911
  zh: {
@@ -1930,7 +1989,7 @@ export declare const kit: {
1930
1989
  readonly "panels.market.empty": "\u6682\u65E0\u53EF\u7528\u6A21\u5757";
1931
1990
  readonly "panels.market.installedSection": "\u5DF2\u88C5";
1932
1991
  readonly "panels.market.moduleOutdated": "\u6709\u65B0\u7248";
1933
- readonly "panels.market.moduleRestartHint": "\u5B89\u88C5\u5B8C\u6210\u540E\u53EF\u80FD\u9700\u8981\u91CD\u542F\u624D\u751F\u6548";
1992
+ readonly "panels.market.moduleRestartHint": "\u88C5\u597D\u4E86\u4F46\u8FD8\u6CA1\u751F\u6548 \u2014\u2014 \u91CD\u542F\u4E00\u6B21 dsh \u5C31\u4F1A\u51FA\u6765";
1934
1993
  readonly "panels.market.restartNeeded": "\u65B0\u7248\u88C5\u597D\u4E86\uFF0C\u91CD\u542F\u4E00\u6B21\u624D\u751F\u6548\u3002";
1935
1994
  readonly "panels.market.foot": "\u88C5\u597D\u540E\u5230\u90A3\u4E2A\u9879\u76EE\u7684\u9762\u677F\u9875\u52FE\u9009\u5B83\uFF0C\u6A21\u5757\u624D\u4F1A\u51FA\u73B0\u3002";
1936
1995
  readonly "panels.market.recheck": "\u91CD\u65B0\u68C0\u67E5\u66F4\u65B0";
@@ -2126,13 +2185,16 @@ export declare const kit: {
2126
2185
  readonly "rightbar.label": "\u6570\u636E\u9762\u677F";
2127
2186
  readonly "rightbar.expand": "\u5C55\u5F00\u6570\u636E\u9762\u677F";
2128
2187
  readonly "rightbar.collapse": "\u6536\u8D77\u6570\u636E\u9762\u677F";
2188
+ readonly "rightbar.column.label": "\u53F3\u4FA7\u680F";
2189
+ readonly "rightbar.column.workbench": "\u5DE5\u4F5C\u53F0\u9762\u677F";
2190
+ readonly "rightbar.column.dsh": "dsh \u9762\u677F";
2129
2191
  readonly "rightbar.refresh": "\u5237\u65B0";
2130
2192
  readonly "rightbar.refreshing": "\u5237\u65B0\u4E2D\u2026";
2131
2193
  readonly "rightbar.updatedAt": "\u66F4\u65B0\u4E8E {time}";
2132
2194
  readonly "rightbar.noProject": "\u5F53\u524D\u4F1A\u8BDD\u6CA1\u6709\u6240\u5C5E\u9879\u76EE";
2133
2195
  readonly "coding.notARepo.title": "\u8FD9\u4E2A\u9879\u76EE\u4E0D\u662F Coding \u4ED3\u5E93";
2134
2196
  readonly "error.unknown": "\u51FA\u9519\u4E86";
2135
- readonly "board.title": "\u770B\u677F";
2197
+ readonly "board.title": "\u5DE5\u4F5C\u53F0\u9762\u677F";
2136
2198
  readonly "panel.conversation": "\u5BF9\u8BDD";
2137
2199
  readonly "panels.label": "\u5168\u5C40\u9762\u677F";
2138
2200
  };
@@ -2143,6 +2205,7 @@ export declare const kit: {
2143
2205
  Fragment: import("react").ExoticComponent<import("react").FragmentProps>;
2144
2206
  useState: typeof import("react").useState;
2145
2207
  useEffect: typeof import("react").useEffect;
2208
+ useLayoutEffect: typeof import("react").useLayoutEffect;
2146
2209
  useMemo: typeof import("react").useMemo;
2147
2210
  useCallback: typeof import("react").useCallback;
2148
2211
  useRef: typeof import("react").useRef;
@@ -0,0 +1,4 @@
1
+ export interface GateDeadline {
2
+ disarm(): void;
3
+ }
4
+ export declare function createGateDeadline(giveUpMs: number, expire: () => void): GateDeadline;
@@ -0,0 +1,10 @@
1
+ import type { SnapshotSelectorHook, Translate } from '@dsh-workbench/shared';
2
+ import { type RightbarColumn, type RightbarState } from './store';
3
+ import type { DshColumnSource } from './dsh-column-source';
4
+ export interface ColumnSwitchProps {
5
+ useRightbar: SnapshotSelectorHook<RightbarState>;
6
+ selectColumn: (column: RightbarColumn) => void;
7
+ dshColumn: DshColumnSource;
8
+ t: Translate;
9
+ }
10
+ export declare function ColumnSwitch({ useRightbar, selectColumn, dshColumn, t }: ColumnSwitchProps): JSX.Element;
@@ -0,0 +1,7 @@
1
+ import type { Translate } from '@dsh-workbench/shared';
2
+ export declare function MarketChecking({ t }: {
3
+ readonly t: Translate;
4
+ }): JSX.Element;
5
+ export declare function MarketEmpty({ t }: {
6
+ readonly t: Translate;
7
+ }): JSX.Element;
@@ -14,6 +14,7 @@ export interface MarketViewProps {
14
14
  readonly updates?: ModuleUpdateMap | undefined;
15
15
  readonly installed?: readonly InstalledWorkbenchModule[] | undefined;
16
16
  readonly installedRead?: boolean | undefined;
17
+ readonly settling?: ReadonlySet<string> | undefined;
17
18
  readonly mock?: MarketMock | undefined;
18
19
  }
19
- export declare function MarketView({ t, manifests, capabilities, freshness, onChanged, updates, installed, installedRead, mock, }: MarketViewProps): JSX.Element;
20
+ export declare function MarketView({ t, manifests, capabilities, freshness, onChanged, updates, installed, installedRead, settling, mock, }: MarketViewProps): JSX.Element;
@@ -4,6 +4,8 @@ import type { PanelStep } from '@dsh-workbench/shared';
4
4
  import type { RightbarState } from './store';
5
5
  export interface RightbarProps extends RightbarActions {
6
6
  readonly t: Translate;
7
+ readonly width: number;
8
+ readonly viewportWidth: number;
7
9
  readonly canShow: boolean;
8
10
  readonly useSessions: SnapshotSelectorHook<SessionsSnapshot>;
9
11
  readonly useWorkspaces: SnapshotSelectorHook<WorkspaceSnapshot>;
@@ -21,4 +23,4 @@ export interface RightbarActions {
21
23
  openMarket: () => void;
22
24
  units: ClientUnitRegistry;
23
25
  }
24
- export declare function Rightbar(props: RightbarProps): JSX.Element | null;
26
+ export declare function Rightbar(props: RightbarProps): JSX.Element;
@@ -0,0 +1,11 @@
1
+ import type { Translate } from '@dsh-workbench/shared';
2
+ import { type SharedRow } from './market-rows';
3
+ import { type Pending } from './market-view-text';
4
+ import type { MarketRowAction } from './market-rows';
5
+ export declare function SharedSection({ t, rows, pending, failureOf, act, }: {
6
+ readonly t: Translate;
7
+ readonly rows: readonly SharedRow[];
8
+ readonly pending: Pending | null;
9
+ readonly failureOf: (id: string) => string | null;
10
+ readonly act: (id: string, action: MarketRowAction) => Promise<void>;
11
+ }): JSX.Element | null;
@@ -0,0 +1,6 @@
1
+ export interface DshColumnSource {
2
+ getSnapshot(): boolean;
3
+ subscribe(listener: () => void): () => void;
4
+ }
5
+ export declare const DSH_COLUMN_POLL_MS = 400;
6
+ export declare function createDshColumnSource(read: () => boolean, intervalMs: number): DshColumnSource;
@@ -0,0 +1,4 @@
1
+ import type { Translate } from '@dsh-workbench/shared';
2
+ import type { BundleChange } from '../../../shared/api/bundle-install';
3
+ export declare function changeOf(value: unknown): BundleChange | undefined;
4
+ export declare function changeFailure(change: BundleChange | undefined, t: Translate): string | undefined;
@@ -36,8 +36,10 @@ export interface InstalledWorkbenchModule {
36
36
  readonly installed: string;
37
37
  readonly latest?: string | undefined;
38
38
  }
39
- export declare function installedRows(modules: readonly InstalledWorkbenchModule[], manifests: readonly UnitManifest[], listed: ReadonlySet<string>): MarketRow[];
39
+ export declare function mergeTitles(known: ReadonlyMap<string, string>, manifests: readonly UnitManifest[]): ReadonlyMap<string, string>;
40
+ export declare function installedRows(modules: readonly InstalledWorkbenchModule[], manifests: readonly UnitManifest[], listed: ReadonlySet<string>, known?: ReadonlyMap<string, string> | undefined): MarketRow[];
40
41
  export declare function marketActions(row: MarketRow): MarketRowAction[];
42
+ export declare function liveManifests(manifests: readonly UnitManifest[], capabilities: CapabilityMap | null, installed: ReadonlySet<string> | null): readonly UnitManifest[];
41
43
  export declare function marketHasUpdates(rows: readonly MarketRow[], shared?: readonly SharedRow[]): boolean;
42
44
  export interface MarketSection {
43
45
  readonly id: 'installed' | 'not-installed';
@@ -0,0 +1,2 @@
1
+ export declare const MODULE_SETTLE_MS = 15000;
2
+ export declare function holdBack(installed: readonly string[], roster: ReadonlySet<string>, active: ReadonlySet<string>, previous: ReadonlySet<string> | null): readonly string[];