@dsh-workbench/core 0.1.6 → 0.1.8

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.
@@ -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;
@@ -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: {
@@ -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;
@@ -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: {
@@ -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;
@@ -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: {
@@ -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,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;
@@ -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,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,9 @@
1
+ export interface RightbarPresentation {
2
+ readonly track: boolean;
3
+ readonly fullscreen: boolean;
4
+ }
5
+ export declare function rightbarPresentation(input: {
6
+ shown: boolean;
7
+ viewportWidth: number;
8
+ canShow: boolean;
9
+ }): RightbarPresentation;
@@ -1,7 +1,9 @@
1
1
  import type { PanelStep } from '@dsh-workbench/shared';
2
2
  export type { PanelStep } from '@dsh-workbench/shared';
3
+ export type RightbarColumn = 'workbench' | 'dsh';
3
4
  export interface RightbarState {
4
5
  readonly expanded: boolean;
6
+ readonly column: RightbarColumn;
5
7
  readonly trail: readonly PanelStep[];
6
8
  }
7
9
  export interface RightbarStore {
@@ -9,6 +11,7 @@ export interface RightbarStore {
9
11
  subscribe(listener: () => void): () => void;
10
12
  setExpanded(expanded: boolean): void;
11
13
  toggleExpanded(): void;
14
+ setColumn(column: RightbarColumn): void;
12
15
  open(step: PanelStep): void;
13
16
  goTo(index: number): void;
14
17
  back(): void;
@@ -20,4 +23,10 @@ export interface RightbarPersistence {
20
23
  writeText(key: string, value: string | null): void;
21
24
  }
22
25
  export declare const RIGHTBAR_DEFAULT_EXPANDED = true;
26
+ export declare const RIGHTBAR_DEFAULT_COLUMN: RightbarColumn;
27
+ export interface RightbarColumnPressed {
28
+ readonly workbench: boolean;
29
+ readonly dsh: boolean;
30
+ }
31
+ export declare function pressedColumns(state: RightbarState, dshExpanded: boolean): RightbarColumnPressed;
23
32
  export declare function createRightbarStore(persistence?: RightbarPersistence): RightbarStore;
package/docs/HANDOFF.md CHANGED
@@ -33,6 +33,13 @@ npx @dsh-workbench/core
33
33
  而带 scope 的包,pnpm / npx 只会去 `.npmrc` 里**给这个 scope 指的那个源**找它 ——
34
34
  不设这一行,症状是 `404 Not Found - GET https://registry.npmjs.org/@pagoda%2fdsh-workbench`。
35
35
 
36
+ > ⚠️ **0.1.6 的已知缺陷**:`setup` 可能死在
37
+ > `…/@dsh-workbench/core/scripts/seed-profile.sh: Permission denied`(发出去的包里随包脚本丢了
38
+ > 可执行位,`pnpm publish` 只给 `bin` 字段点名那条 755)。应急:给那份副本补上 x 位,
39
+ > 再重跑同一条 `npx` 命令 ——
40
+ > `chmod +x ~/.npm/_npx/*/node_modules/@dsh-workbench/core/{scripts/seed-profile.sh,bin/opencli-isolated}`。
41
+ > 0.1.7 起启动器已不吃 x 位,重装那个版本即可根治。
42
+
36
43
  ### 设置从哪来:**两边都要的在 `dsh web` 里配**(单向、实时)
37
44
 
38
45
  工作台启动时会用 `--patch` 把 `profiles/web/cordis.patch.yml` 叠在自己的差异层之上
@@ -150,12 +157,18 @@ pnpm release:dry # 门禁 + 发布计划 + 打包清单校验,不联网、
150
157
  pnpm release # 真发(发前会再跑一次门禁)
151
158
  ```
152
159
 
153
- 提版本号之后再发:`npm version patch`。脚本把三个坑写成了**硬失败**:
160
+ 提版本号之后再发:`npm version patch`。脚本把几个坑写成了**硬失败**:
154
161
 
155
162
  - **`dist/` 在 `.gitignore` 里**:npm 打包的兜底就是 `.gitignore`,不在 `files` 里显式列出
156
163
  就会漏掉构建产物 —— 症状不是报错,而是"别人装上后宿主侧起不来";
157
164
  - 版本号在源上已被占(pnpm 到最后一步才报,白等一轮门禁);
158
- - `private: true` 没摘。
165
+ - `private: true` 没摘;
166
+ - **随包脚本的可执行位**:`pnpm publish` 只给 `package.json#bin` 点名的那**一个**文件 755,
167
+ 其余在 tarball 里一律 644(`npm pack` 会保留,而 git 里的 x 位不进 tarball)——
168
+ 所以随包脚本一律不吃 x 位:启动器里 `bash` 呼 `seed-profile.sh`、opencli 那条稳定路径写成
169
+ 自己拥有的转发脚本,`selfcheck` 有一条判据钉着。这类错**本机复现不出来**,只在别人机器上炸
170
+ (0.1.6 就是这么坏在 `seed-profile.sh: Permission denied` 上的,见
171
+ [`.scratch/dsh-ui-alignment/spec.md`](../../../.scratch/dsh-ui-alignment/spec.md) §18.41)。
159
172
 
160
173
  ## 七、版本与兼容(实话)
161
174
 
@@ -115,3 +115,4 @@ WORKBENCH_PORT=3091 pnpm run dev # 换端口(监听与实例同一个端口
115
115
  | 改了源码没变化 | 忘了 `pnpm run build`,或没重启进程(宿主缓存已加载的包) |
116
116
  | 体检那屏「检测浏览器通道 · 没连上」,可面板照样能用 | 本机全局 opencli 与隔离运行时版本不一致 ⇒ daemon 被顶成对方那版(`Stale daemon detected: daemon vX != CLI vY`)。下一条浏览器命令会自动把它重启回来,体检也会复检后改回「已连接」([ADR-0024](../../../docs/adr/0024-warm-the-sites-before-the-panel.md) §3.2.1)。**要彻底不抖**:让两边同版本 —— 把 `OPENCLI_PIN`(`src/shared/config/constants.ts`)对齐到 `opencli --version`,再 `npm i --prefix ~/.dsh/workbench/opencli/toolchain @jackwener/opencli@<那个版本> --cache ~/.dsh/workbench/opencli/npm-cache` |
117
117
  | Settings 页报 `overridden by a home patch` | 想在 Settings 里改的行被 `$DSH_HOME/cordis.patch.yml` 或 `--patch` 覆盖了 |
118
+ | **别人机器上** `npx @dsh-workbench/core setup` 报 `scripts/seed-profile.sh: Permission denied`(或体检永远说"隔离运行时没装好") | 发出去的包里**随包脚本丢了 x 位**:`pnpm publish` 只给 `package.json#bin` 点名那条文件 755,其余一律 644(`npm pack` 会保留,而 `git` 里的 x 位不进 tarball —— 所以**本机永远复现不出来**)。0.1.6 的已知缺陷:应急 `chmod +x <包目录>/{scripts/seed-profile.sh,bin/opencli-isolated}`,正规解是升到 0.1.7(启动器与 `selfcheck` 已改成不吃 x 位) |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dsh-workbench/core",
3
- "version": "0.1.6",
3
+ "version": "0.1.8",
4
4
  "description": "个人工作台:Agent 工作台外壳(左栏 + 常驻对话 + 自研右侧数据面板)。",
5
5
  "type": "module",
6
6
  "icon": "./icon.svg",
@@ -78,7 +78,7 @@
78
78
  "access": "public"
79
79
  },
80
80
  "dependencies": {
81
- "@dsh-workbench/shared": "0.1.6"
81
+ "@dsh-workbench/shared": "0.1.8"
82
82
  },
83
83
  "scripts": {
84
84
  "build": "node scripts/build.mjs && node scripts/build-types.mjs",
@@ -1,9 +0,0 @@
1
- import type { Translate } from '@dsh-workbench/shared';
2
- export interface ExpandButtonProps {
3
- useRightbar: <R>(selector: (state: {
4
- expanded: boolean;
5
- }) => R) => R;
6
- toggleRightbar: () => void;
7
- t: Translate;
8
- }
9
- export declare function ExpandButton({ useRightbar, toggleRightbar, t }: ExpandButtonProps): JSX.Element | null;