@dsh-workbench/core 0.1.0

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 (169) hide show
  1. package/README.md +55 -0
  2. package/bin/dsh-workbench +200 -0
  3. package/bin/opencli-isolated +61 -0
  4. package/client.js +5334 -0
  5. package/cordis.patch.yml +42 -0
  6. package/dist/client/client.body.js +5323 -0
  7. package/dist/client/index.js +5324 -0
  8. package/dist/host/index.js +5420 -0
  9. package/dist/types/app/client.d.ts +1476 -0
  10. package/dist/types/app/host.d.ts +4 -0
  11. package/dist/types/app/layouts/__tests__/panel-hint.test.d.ts +1 -0
  12. package/dist/types/app/layouts/__tests__/project-selection.test.d.ts +1 -0
  13. package/dist/types/app/layouts/env-gate/__tests__/force-plan.test.d.ts +1 -0
  14. package/dist/types/app/layouts/env-gate/__tests__/gate-hidden.test.d.ts +1 -0
  15. package/dist/types/app/layouts/env-gate/__tests__/gate-mocks.test.d.ts +1 -0
  16. package/dist/types/app/layouts/env-gate/boot-gate.d.ts +16 -0
  17. package/dist/types/app/layouts/env-gate/gate-dom.d.ts +4 -0
  18. package/dist/types/app/layouts/env-gate/gate-mock.d.ts +18 -0
  19. package/dist/types/app/layouts/env-gate/gate-text.d.ts +13 -0
  20. package/dist/types/app/layouts/market/panel.d.ts +4 -0
  21. package/dist/types/app/layouts/panel-hint.d.ts +9 -0
  22. package/dist/types/app/layouts/project-selection.d.ts +3 -0
  23. package/dist/types/app/layouts/rightbar/BoardEmpty.d.ts +6 -0
  24. package/dist/types/app/layouts/rightbar/BoardMockStrip.d.ts +5 -0
  25. package/dist/types/app/layouts/rightbar/Breadcrumbs.d.ts +11 -0
  26. package/dist/types/app/layouts/rightbar/ExpandButton.d.ts +9 -0
  27. package/dist/types/app/layouts/rightbar/MarketFreshLines.d.ts +5 -0
  28. package/dist/types/app/layouts/rightbar/MarketView.d.ts +14 -0
  29. package/dist/types/app/layouts/rightbar/ModulesPage.d.ts +15 -0
  30. package/dist/types/app/layouts/rightbar/PanelModules.d.ts +14 -0
  31. package/dist/types/app/layouts/rightbar/Rightbar.d.ts +24 -0
  32. package/dist/types/app/layouts/rightbar/__tests__/board-mock.test.d.ts +1 -0
  33. package/dist/types/app/layouts/rightbar/__tests__/board-plan.test.d.ts +1 -0
  34. package/dist/types/app/layouts/rightbar/__tests__/board-selection.test.d.ts +1 -0
  35. package/dist/types/app/layouts/rightbar/__tests__/breadcrumbs.test.d.ts +1 -0
  36. package/dist/types/app/layouts/rightbar/__tests__/market-freshness.test.d.ts +1 -0
  37. package/dist/types/app/layouts/rightbar/__tests__/market-mock.test.d.ts +1 -0
  38. package/dist/types/app/layouts/rightbar/__tests__/market-rows-libs.test.d.ts +1 -0
  39. package/dist/types/app/layouts/rightbar/__tests__/market-rows.test.d.ts +1 -0
  40. package/dist/types/app/layouts/rightbar/__tests__/market-shared.test.d.ts +1 -0
  41. package/dist/types/app/layouts/rightbar/__tests__/panel-mock.test.d.ts +1 -0
  42. package/dist/types/app/layouts/rightbar/__tests__/suite-world.test.d.ts +1 -0
  43. package/dist/types/app/layouts/rightbar/__tests__/use-panels.test.d.ts +1 -0
  44. package/dist/types/app/layouts/rightbar/board-mock.d.ts +22 -0
  45. package/dist/types/app/layouts/rightbar/board-plan.d.ts +25 -0
  46. package/dist/types/app/layouts/rightbar/board-selection.d.ts +15 -0
  47. package/dist/types/app/layouts/rightbar/market-freshness.d.ts +13 -0
  48. package/dist/types/app/layouts/rightbar/market-mock.d.ts +29 -0
  49. package/dist/types/app/layouts/rightbar/market-rows.d.ts +45 -0
  50. package/dist/types/app/layouts/rightbar/panel-mock.d.ts +26 -0
  51. package/dist/types/app/layouts/rightbar/registry.d.ts +11 -0
  52. package/dist/types/app/layouts/rightbar/registry.test.d.ts +1 -0
  53. package/dist/types/app/layouts/rightbar/store.d.ts +23 -0
  54. package/dist/types/app/layouts/rightbar/store.test.d.ts +1 -0
  55. package/dist/types/app/layouts/rightbar/suite-world.d.ts +14 -0
  56. package/dist/types/app/layouts/rightbar/use-panels.d.ts +15 -0
  57. package/dist/types/app/layouts/sidebar/PanelNav.d.ts +13 -0
  58. package/dist/types/app/layouts/sidebar/ProjectSwitcher.d.ts +10 -0
  59. package/dist/types/app/layouts/sidebar/SessionList.d.ts +13 -0
  60. package/dist/types/app/layouts/sidebar/Sidebar.d.ts +25 -0
  61. package/dist/types/app/layouts/sidebar/WorkspaceSection.d.ts +7 -0
  62. package/dist/types/app/layouts/sidebar/__tests__/session-pick.test.d.ts +1 -0
  63. package/dist/types/app/layouts/sidebar/session-pick.d.ts +20 -0
  64. package/dist/types/app/units/host.d.ts +4 -0
  65. package/dist/types/app/units/index.d.ts +4 -0
  66. package/dist/types/app/units/registry.d.ts +12 -0
  67. package/dist/types/modules/panels/__tests__/config.test.d.ts +1 -0
  68. package/dist/types/modules/panels/__tests__/face.test.d.ts +1 -0
  69. package/dist/types/modules/panels/__tests__/market-dependency.test.d.ts +1 -0
  70. package/dist/types/modules/panels/__tests__/market-tools.test.d.ts +1 -0
  71. package/dist/types/modules/panels/__tests__/market.test.d.ts +1 -0
  72. package/dist/types/modules/panels/__tests__/prefs.test.d.ts +1 -0
  73. package/dist/types/modules/panels/__tests__/routes.test.d.ts +1 -0
  74. package/dist/types/modules/panels/__tests__/service.test.d.ts +1 -0
  75. package/dist/types/modules/panels/__tests__/tools.test.d.ts +1 -0
  76. package/dist/types/modules/panels/index.d.ts +2 -0
  77. package/dist/types/modules/panels/model/config.d.ts +18 -0
  78. package/dist/types/modules/panels/model/handoff.d.ts +8 -0
  79. package/dist/types/modules/panels/model/handoff.test.d.ts +1 -0
  80. package/dist/types/modules/panels/model/market-dependency.d.ts +41 -0
  81. package/dist/types/modules/panels/model/market-dispatch.d.ts +14 -0
  82. package/dist/types/modules/panels/model/market-tools.d.ts +3 -0
  83. package/dist/types/modules/panels/model/market.d.ts +49 -0
  84. package/dist/types/modules/panels/model/prefs.d.ts +13 -0
  85. package/dist/types/modules/panels/model/routes.d.ts +4 -0
  86. package/dist/types/modules/panels/model/routes.test.d.ts +1 -0
  87. package/dist/types/modules/panels/model/service.d.ts +25 -0
  88. package/dist/types/modules/panels/model/tools.d.ts +4 -0
  89. package/dist/types/modules/panels/unit.d.ts +4 -0
  90. package/dist/types/modules/sessions/index.d.ts +1 -0
  91. package/dist/types/modules/sessions/model/session-node.d.ts +25 -0
  92. package/dist/types/modules/sessions/model/session-node.test.d.ts +1 -0
  93. package/dist/types/shared/__tests__/i18n-keys.test.d.ts +1 -0
  94. package/dist/types/shared/api/__tests__/context-ref.test.d.ts +1 -0
  95. package/dist/types/shared/api/context-chips.d.ts +10 -0
  96. package/dist/types/shared/api/host/__tests__/capability-force.test.d.ts +1 -0
  97. package/dist/types/shared/api/host/__tests__/cli-error.test.d.ts +1 -0
  98. package/dist/types/shared/api/host/__tests__/context-inject.test.d.ts +1 -0
  99. package/dist/types/shared/api/host/__tests__/data-root.test.d.ts +1 -0
  100. package/dist/types/shared/api/host/__tests__/events.test.d.ts +1 -0
  101. package/dist/types/shared/api/host/__tests__/fact-writes.test.d.ts +1 -0
  102. package/dist/types/shared/api/host/__tests__/facts.test.d.ts +1 -0
  103. package/dist/types/shared/api/host/__tests__/long-task.test.d.ts +1 -0
  104. package/dist/types/shared/api/host/__tests__/plugin-source.test.d.ts +1 -0
  105. package/dist/types/shared/api/host/__tests__/preflight-fixtures.d.ts +19 -0
  106. package/dist/types/shared/api/host/__tests__/preflight-warm.test.d.ts +1 -0
  107. package/dist/types/shared/api/host/__tests__/preflight.test.d.ts +1 -0
  108. package/dist/types/shared/api/host/__tests__/probe-cache.test.d.ts +1 -0
  109. package/dist/types/shared/api/host/__tests__/probe-libs.test.d.ts +1 -0
  110. package/dist/types/shared/api/host/__tests__/probe-units-cache.test.d.ts +1 -0
  111. package/dist/types/shared/api/host/__tests__/probe-units-npm-source.test.d.ts +1 -0
  112. package/dist/types/shared/api/host/__tests__/probe-units-release.test.d.ts +1 -0
  113. package/dist/types/shared/api/host/__tests__/probe-units.test.d.ts +1 -0
  114. package/dist/types/shared/api/host/__tests__/probe-verdict.test.d.ts +1 -0
  115. package/dist/types/shared/api/host/__tests__/provision-dependency.test.d.ts +1 -0
  116. package/dist/types/shared/api/host/__tests__/release.test.d.ts +1 -0
  117. package/dist/types/shared/api/host/__tests__/tool-approval.test.d.ts +1 -0
  118. package/dist/types/shared/api/host/__tests__/tool-kit.test.d.ts +1 -0
  119. package/dist/types/shared/api/host/__tests__/tool-scope.test.d.ts +1 -0
  120. package/dist/types/shared/api/host/__tests__/tool-surface.test.d.ts +1 -0
  121. package/dist/types/shared/api/host/__tests__/unit-face.test.d.ts +1 -0
  122. package/dist/types/shared/api/host/__tests__/unit-readiness.test.d.ts +1 -0
  123. package/dist/types/shared/api/host/__tests__/unit-registry.test.d.ts +1 -0
  124. package/dist/types/shared/api/host/__tests__/value-handoff.test.d.ts +1 -0
  125. package/dist/types/shared/api/host/__tests__/version-range.test.d.ts +1 -0
  126. package/dist/types/shared/api/host/__tests__/workspace-store.test.d.ts +1 -0
  127. package/dist/types/shared/api/host/__tests__/write-result.test.d.ts +1 -0
  128. package/dist/types/shared/api/host/context-inject.d.ts +24 -0
  129. package/dist/types/shared/api/host/events.d.ts +9 -0
  130. package/dist/types/shared/api/host/git.test.d.ts +1 -0
  131. package/dist/types/shared/api/host/http.test.d.ts +1 -0
  132. package/dist/types/shared/api/host/mount-units.d.ts +52 -0
  133. package/dist/types/shared/api/host/opencli.test.d.ts +1 -0
  134. package/dist/types/shared/api/host/preflight.d.ts +58 -0
  135. package/dist/types/shared/api/host/probe-cache.d.ts +6 -0
  136. package/dist/types/shared/api/host/probe-libs.d.ts +11 -0
  137. package/dist/types/shared/api/host/probe-units.d.ts +17 -0
  138. package/dist/types/shared/api/host/probe-verdict.d.ts +7 -0
  139. package/dist/types/shared/api/host/release.d.ts +18 -0
  140. package/dist/types/shared/api/host/shell.test.d.ts +1 -0
  141. package/dist/types/shared/api/host/tool-scope.d.ts +32 -0
  142. package/dist/types/shared/api/host/unit-readiness.d.ts +7 -0
  143. package/dist/types/shared/api/host/unit-registry.d.ts +9 -0
  144. package/dist/types/shared/api/host/version-range.d.ts +2 -0
  145. package/dist/types/shared/components/BlockerState.d.ts +11 -0
  146. package/dist/types/shared/hooks/__tests__/mock-mode.test.d.ts +1 -0
  147. package/dist/types/shared/hooks/__tests__/use-api-resource.test.d.ts +1 -0
  148. package/dist/types/shared/hooks/__tests__/use-capabilities.test.d.ts +1 -0
  149. package/dist/types/shared/hooks/__tests__/use-visible-busy.test.d.ts +1 -0
  150. package/dist/types/shared/hooks/fact-transports.d.ts +2 -0
  151. package/dist/types/shared/hooks/mock-mode.d.ts +1 -0
  152. package/dist/types/shared/hooks/use-api-resource.d.ts +18 -0
  153. package/dist/types/shared/hooks/use-blocker-actions.d.ts +11 -0
  154. package/dist/types/shared/hooks/use-capabilities.d.ts +25 -0
  155. package/dist/types/shared/hooks/use-capability-gate.d.ts +20 -0
  156. package/dist/types/shared/hooks/use-card-summary.d.ts +8 -0
  157. package/dist/types/shared/hooks/use-facts.d.ts +2 -0
  158. package/dist/types/shared/hooks/use-fixture-pick.d.ts +20 -0
  159. package/dist/types/shared/hooks/use-host-write.d.ts +17 -0
  160. package/dist/types/shared/hooks/use-long-task.d.ts +14 -0
  161. package/dist/types/shared/hooks/use-unit-board.d.ts +32 -0
  162. package/dist/types/shared/hooks/use-visible-busy.d.ts +8 -0
  163. package/docs/HANDOFF.md +207 -0
  164. package/docs/OPERATIONS.md +109 -0
  165. package/icon.svg +29 -0
  166. package/package.json +97 -0
  167. package/profile/isolation.patch.yml +35 -0
  168. package/profile/sandbox.patch.yml +26 -0
  169. package/scripts/seed-profile.sh +199 -0
@@ -0,0 +1,1476 @@
1
+ import type { DshClientContext } from '@dsh-workbench/shared';
2
+ import * as apiModule from '@dsh-workbench/shared';
3
+ import * as chipsModule from '../shared/api/context-chips';
4
+ import * as apiResourceModule from '../shared/hooks/use-api-resource';
5
+ import * as cardSummaryModule from '../shared/hooks/use-card-summary';
6
+ import * as fixturePickModule from '../shared/hooks/use-fixture-pick';
7
+ import * as hostWriteModule from '../shared/hooks/use-host-write';
8
+ import * as longTaskModule from '../shared/hooks/use-long-task';
9
+ import * as capabilityGateModule from '../shared/hooks/use-capability-gate';
10
+ import * as unitBoardModule from '../shared/hooks/use-unit-board';
11
+ import * as visibleBusyModule from '../shared/hooks/use-visible-busy';
12
+ import * as blockerStateModule from '../shared/components/BlockerState';
13
+ export declare const kit: {
14
+ hooks: {
15
+ heldPhase(phase: visibleBusyModule.HeldPhase, refreshing: boolean): visibleBusyModule.HeldPhase;
16
+ busyView(active: boolean, visible: boolean): visibleBusyModule.BusyView;
17
+ useVisibleBusy(active: boolean, floorMs: number): visibleBusyModule.BusyView;
18
+ useUnitBoard<TFeed extends unitBoardModule.CardFeed>(options: unitBoardModule.UnitBoardOptions<TFeed>): unitBoardModule.UnitBoard<TFeed>;
19
+ useCapabilityGate(unit: string, refreshToken: number, options?: {
20
+ readonly mode?: apiModule.GateMode | undefined;
21
+ readonly fixture?: apiModule.CapabilityPayload | undefined;
22
+ }): capabilityGateModule.CapabilityGate;
23
+ useCapabilityMap(refreshToken: number): capabilityGateModule.CapabilityMapView;
24
+ mockModeOn(search: string): boolean;
25
+ useLongTask<T extends {
26
+ readonly id: string;
27
+ readonly status: apiModule.LongTaskStatus;
28
+ }>(options: {
29
+ readonly unit: string;
30
+ readonly workspace: string | null;
31
+ readonly mocked?: boolean | undefined;
32
+ readonly enabled?: boolean | undefined;
33
+ readonly pollMs?: number | undefined;
34
+ }): longTaskModule.LongTaskFeed<T>;
35
+ useHostWrite<T>(options: hostWriteModule.HostWriteOptions): hostWriteModule.HostWrite<T>;
36
+ useFactRevision(fact: string): number;
37
+ useFactInvalidate(): (fact?: string) => void;
38
+ useFixturePick<T extends fixturePickModule.PickableFixture>(options: fixturePickModule.FixturePickOptions<T>): fixturePickModule.FixturePick<T>;
39
+ useCardSummary(onSummary: (summary: cardSummaryModule.CardSummary) => void, summary: {
40
+ readonly refreshing: boolean;
41
+ readonly at: number | null | undefined;
42
+ }): void;
43
+ resourceIdentity(route: string, query: apiModule.Query, override?: string | undefined): string;
44
+ readKeyOf(identity: string, refreshToken: number, factRev: number): string;
45
+ requestResource<T>(route: string, query: apiModule.Query, key: string): {
46
+ task: Promise<apiModule.ApiResponse<T>>;
47
+ release: () => void;
48
+ };
49
+ useApiResource<T>(route: string, query: apiModule.Query, refreshToken: number, options?: {
50
+ enabled?: boolean;
51
+ key?: string;
52
+ fact?: string;
53
+ }): apiResourceModule.ResourceState<T>;
54
+ };
55
+ components: {
56
+ blockerOfError(error: apiModule.ApiError | undefined, t: apiModule.Translate, context?: {
57
+ path?: string | null;
58
+ platform?: string;
59
+ }): apiModule.ModuleBlocker;
60
+ blockerOfCapability(capability: apiModule.CapabilityPayload, t: apiModule.Translate): apiModule.ModuleBlocker | undefined;
61
+ encodeRef(ref: apiModule.ContextRef): string;
62
+ decodeRef(text: string): apiModule.ContextRef | undefined;
63
+ markerBody(encoded: string): string;
64
+ buildMarker(ref: apiModule.ContextRef): string;
65
+ parseMarkers(text: string): apiModule.ContextRef[];
66
+ CONTEXT_MARKER_NAME: "\u5DE5\u4F5C\u53F0";
67
+ unitFactScope(unit: string): string;
68
+ isFactScope(name: string): boolean;
69
+ scopePrefixOf(name: string): string;
70
+ createFactChannel(options: {
71
+ readonly transport: apiModule.FactTransport;
72
+ }): apiModule.FactChannel;
73
+ parseFactFrame(data: unknown): apiModule.FactFrame | null;
74
+ factOfRoute(route: string): string;
75
+ FACT_SCOPE_SUFFIX: "*";
76
+ writeRoute(channel: apiModule.WriteChannel, resource: string): string;
77
+ writeOutcomeOf<T>(response: apiModule.ApiResponse<T> | null, networkText: string): apiModule.WriteOutcome<T>;
78
+ runsRouteOf(unit: string): string;
79
+ longTaskPollMs(live: boolean, override?: number | undefined): number;
80
+ longTaskRunsOf<T>(state: {
81
+ readonly phase?: string | undefined;
82
+ readonly value?: apiModule.LongTasksPayload | undefined;
83
+ }): readonly T[];
84
+ longTaskDot(status: apiModule.LongTaskStatus): "ongoing" | "done" | "error" | "idle";
85
+ LONG_TASK_POLL_MS: 1500;
86
+ LONG_TASK_IDLE_MS: 10000;
87
+ gateOf(capability: apiModule.CapabilityPayload | null, mode: apiModule.GateMode): apiModule.UnitGate;
88
+ splitBlocker(candidates: readonly (apiModule.ModuleBlocker | undefined)[]): apiModule.UnitBlockers;
89
+ probeKeyOf(error: apiModule.ApiError | undefined): string | null;
90
+ apiGet<T>(route: string, query?: apiModule.Query, options?: apiModule.ApiGetOptions): Promise<apiModule.ApiResponse<T>>;
91
+ apiPost<T>(route: string, body: Record<string, unknown>): Promise<apiModule.ApiResponse<T>>;
92
+ ApprovalDetail(props: apiModule.ApprovalDetailProps): JSX.Element | null;
93
+ CardHead({ t, title, meta, refreshing, onRefresh, gear, gearOpen, onToggleGear, platformHref, platform, platformTitle, }: apiModule.CardHeadProps): JSX.Element;
94
+ ChoiceGroup({ label, name, value, options, disabled, onChange }: apiModule.ChoiceGroupProps): JSX.Element;
95
+ LongTaskRow(props: apiModule.LongTaskRowProps): JSX.Element;
96
+ MockStrip({ mocks, index, onPick, note, real, }: {
97
+ readonly mocks: readonly {
98
+ readonly id: string;
99
+ readonly label: string;
100
+ }[];
101
+ readonly index: number;
102
+ readonly onPick: (next: number) => void;
103
+ readonly note?: string;
104
+ readonly real?: {
105
+ readonly label: string;
106
+ readonly active: boolean;
107
+ readonly onPick: () => void;
108
+ } | undefined;
109
+ }): JSX.Element;
110
+ SkeletonRows({ rows }: {
111
+ rows?: number;
112
+ }): JSX.Element;
113
+ CenteredState({ icon, title, hint, detail, action, compact }: apiModule.CenteredStateProps): JSX.Element;
114
+ EmptyState({ text, icon, compact }: {
115
+ text: string;
116
+ icon?: apiModule.ReactNode;
117
+ compact?: boolean;
118
+ }): JSX.Element;
119
+ SaveBar({ busy, disabled, labels, onCancel, onSave }: apiModule.SaveBarProps): JSX.Element;
120
+ StateDot({ state, size }: {
121
+ state: apiModule.DotState;
122
+ size: number;
123
+ }): JSX.Element;
124
+ IconPanelLeft({ size }: apiModule.IconProps): JSX.Element;
125
+ IconFolder({ size }: apiModule.IconProps): JSX.Element;
126
+ IconFolderOpen({ size }: apiModule.IconProps): JSX.Element;
127
+ IconChevronDown({ size }: apiModule.IconProps): JSX.Element;
128
+ IconPlus({ size }: apiModule.IconProps): JSX.Element;
129
+ IconEllipsis({ size }: apiModule.IconProps): JSX.Element;
130
+ IconSettings({ size }: apiModule.IconProps): JSX.Element;
131
+ IconPin({ size }: apiModule.IconProps): JSX.Element;
132
+ IconCheck({ size }: apiModule.IconProps): JSX.Element;
133
+ IconNewChat({ size }: apiModule.IconProps): JSX.Element;
134
+ IconRefresh({ size }: apiModule.IconProps): JSX.Element;
135
+ IconRightUp({ size }: apiModule.IconProps): JSX.Element;
136
+ IconConversation({ size }: apiModule.IconProps): JSX.Element;
137
+ IconBrandMark({ size }: apiModule.IconProps): JSX.Element;
138
+ IconModules({ size }: apiModule.IconProps): JSX.Element;
139
+ PLUGIN_ID: "@dsh-workbench/core";
140
+ API_PREFIX: "/workbench/api";
141
+ PREFS_PREFIX: "/workbench/api/prefs";
142
+ EVENTS_PATH: "/workbench/events";
143
+ ACTIONS_PREFIX: "/workbench/api/actions";
144
+ PROVISION_PREFIX: "/workbench/api/provision";
145
+ OPENCLI_PIN: "1.8.8";
146
+ CODING_ISSUES_SERVICE: "workbenchCodingIssues";
147
+ PANELS_SERVICE: "workbenchPanels";
148
+ UNITS_SERVICE: "workbenchUnits";
149
+ PANEL_LIST_LIMIT: 50;
150
+ OPENCLI_TIMEOUT_MS: 120000;
151
+ OPENCLI_MAX_CONCURRENT: 4;
152
+ WARM_TIMEOUT_MS: 20000;
153
+ INSTALL_TIMEOUT_MS: 300000;
154
+ VERSION_CHECK_TIMEOUT_MS: 10000;
155
+ VERSION_CHECK_TTL_MS: 600000;
156
+ PROBE_TTL_MS: 30000;
157
+ MIN_BUSY_MS: 500;
158
+ HANDOFF_TTL_MS: 15000;
159
+ GIT_TIMEOUT_MS: 10000;
160
+ PANEL_POLL_MS: 2000;
161
+ DEFAULT_WORKSPACE_TITLE: "default-workspace";
162
+ STORAGE_KEY_PROJECT: "dsh-workbench.project";
163
+ STORAGE_KEY_RIGHTBAR: "dsh-workbench.rightbar.expanded";
164
+ LOCALE_NS: "workbench";
165
+ LOCALES: readonly ["zh", "en"];
166
+ readText(key: string): string | null;
167
+ writeText(key: string, value: string | null): void;
168
+ readFlag(key: string, fallback: boolean): boolean;
169
+ writeFlag(key: string, value: boolean): void;
170
+ en: Record<keyof apiModule.WorkbenchMessages, string>;
171
+ dictionaries: {
172
+ zh: {
173
+ readonly "brand.name": "\u5DE5\u4F5C\u53F0";
174
+ readonly "toggle.open": "\u6253\u5F00\u4FA7\u8FB9\u680F";
175
+ readonly "toggle.collapse": "\u6536\u8D77\u4FA7\u8FB9\u680F";
176
+ readonly "project.label": "\u5207\u6362\u9879\u76EE";
177
+ readonly "workspace.section": "\u5DE5\u4F5C\u533A";
178
+ readonly "project.none": "\u672A\u9009\u62E9\u9879\u76EE";
179
+ readonly "project.empty": "\u8FD8\u6CA1\u6709\u9879\u76EE\u3002\u7528\u4E0B\u9762\u7684\u300C\u6DFB\u52A0\u9879\u76EE\u300D\u9009\u4E00\u4E2A\u76EE\u5F55\u3002";
180
+ readonly "project.add": "\u6DFB\u52A0\u9879\u76EE\u2026";
181
+ readonly "session.new": "\u65B0\u4F1A\u8BDD";
182
+ readonly "session.new.label": "\u5728\u5F53\u524D\u9879\u76EE\u65B0\u5EFA\u4F1A\u8BDD";
183
+ readonly "session.empty": "\u8FD9\u4E2A\u9879\u76EE\u8FD8\u6CA1\u6709\u4F1A\u8BDD\u3002";
184
+ readonly "session.noProject": "\u5148\u6DFB\u52A0\u4E00\u4E2A\u9879\u76EE\u3002";
185
+ readonly "session.pinned": "\u5DF2\u7F6E\u9876";
186
+ readonly "session.actions": "{name} \u7684\u64CD\u4F5C";
187
+ readonly "status.idle": "\u7A7A\u95F2";
188
+ readonly "status.running": "\u8FD0\u884C\u4E2D";
189
+ readonly "status.waitingApproval": "\u7B49\u5F85\u6388\u6743";
190
+ readonly "status.planReview": "\u7B49\u5F85\u8BA1\u5212\u786E\u8BA4";
191
+ readonly "status.waitingAnswer": "\u7B49\u5F85\u56DE\u7B54";
192
+ readonly "status.completed": "\u5DF2\u5B8C\u6210";
193
+ readonly "status.subagentsRunning.one": "{n} \u4E2A\u5B50\u4EE3\u7406\u8FD0\u884C\u4E2D";
194
+ readonly "status.subagentsRunning.other": "{n} \u4E2A\u5B50\u4EE3\u7406\u8FD0\u884C\u4E2D";
195
+ readonly "time.now": "\u521A\u521A";
196
+ readonly "time.minutes": "{n} \u5206\u949F\u524D";
197
+ readonly "time.hours": "{n} \u5C0F\u65F6\u524D";
198
+ readonly "time.days": "{n} \u5929\u524D";
199
+ readonly "panels.title": "\u9762\u677F\u6A21\u5757";
200
+ readonly "panels.reset": "\u6062\u590D\u9ED8\u8BA4";
201
+ readonly "panels.enabled": "\u8FD9\u4E2A\u9879\u76EE\u5DF2\u542F\u7528";
202
+ readonly "panels.disabled": "\u8FD9\u4E2A\u9879\u76EE\u672A\u542F\u7528";
203
+ readonly "panels.choose": "\u9009\u62E9\u6A21\u5757";
204
+ readonly "panels.failed": "\u6539\u914D\u7F6E\u5931\u8D25\u4E86\uFF0C\u518D\u8BD5\u4E00\u6B21\u3002";
205
+ readonly "panels.hintEffect": "\u505C\u7528 = agent \u62FF\u4E0D\u5230\u76F8\u5173\u6570\u636E";
206
+ readonly "panels.dragHint": "\u62D6\u52A8\u8C03\u6574\u987A\u5E8F";
207
+ readonly "panels.unknownStep": "\u8FD9\u4E00\u5C42\u6CA1\u6709\u5957\u4EF6\u63D0\u4F9B";
208
+ readonly "panels.labelWithHint": "{label}\uFF08{hint}\uFF09";
209
+ readonly "panels.dep.missingPlugin": "\u26A0 \u8FD8\u6CA1\u88C5\u597D";
210
+ readonly "panels.dep.missingCommands": "\u26A0 \u9700\u8981\u66F4\u65B0";
211
+ readonly "panels.dep.unchecked": "\u26A0 \u68C0\u6D4B\u4E0D\u4E86";
212
+ readonly "panels.tab.modules": "\u9762\u677F\u914D\u7F6E";
213
+ readonly "panels.tab.market": "\u5DE5\u4F5C\u53F0\u6A21\u5757\u5E02\u573A";
214
+ readonly "panels.browseMarket": "\u6D4F\u89C8\u6A21\u5757\u5E02\u573A";
215
+ readonly "panels.noneInstalled": "\u8FD9\u4E9B\u6A21\u5757\u8981\u7684\u63D2\u4EF6\u90FD\u8FD8\u6CA1\u88C5";
216
+ readonly "panels.noneInstalledHint": "\u88C5\u597D\u4E4B\u540E\u5B83\u4EEC\u4F1A\u56DE\u5230\u8FD9\u91CC\uFF0C\u518D\u7531\u4F60\u51B3\u5B9A\u653E\u54EA\u51E0\u4E2A\u4E0A\u677F\u3002";
217
+ readonly "panels.market.installed": "\u5DF2\u88C5";
218
+ readonly "panels.market.outdated": "\u8981\u66F4\u65B0";
219
+ readonly "panels.market.hasNew": "\u6709\u65B0\u7248\u672C";
220
+ readonly "panels.market.missing": "\u672A\u88C5";
221
+ readonly "panels.market.unchecked": "\u72B6\u6001\u672A\u77E5";
222
+ readonly "panels.market.checking": "\u68C0\u6D4B\u4E2D";
223
+ readonly "panels.market.sectionInstalled": "\u5DF2\u5B89\u88C5";
224
+ readonly "panels.market.sectionPending": "\u672A\u5B89\u88C5";
225
+ readonly "panels.market.sectionShared": "\u5171\u7528\u4F9D\u8D56";
226
+ readonly "panels.market.sharedUsedBy": "\u4F9B {modules} \u4F7F\u7528";
227
+ readonly "panels.market.listSeparator": "\u3001";
228
+ readonly "panels.market.sharedMissing": "\u672A\u88C5";
229
+ readonly "panels.market.sharedOutdated": "\u6709\u65B0\u7248";
230
+ readonly "panels.market.sharedUnsatisfied": "\u7248\u672C\u4E0D\u5BF9";
231
+ readonly "panels.market.sharedOk": "\u5DF2\u88C5";
232
+ readonly "panels.market.versionArrow": "{from} \u2192 {to}";
233
+ readonly "panels.market.lead": "\u88C5\u5728\u8FD9\u53F0\u673A\u5668\u4E0A\uFF0C\u6240\u6709\u9879\u76EE\u5171\u7528\u3002";
234
+ readonly "panels.market.install": "\u5B89\u88C5";
235
+ readonly "panels.market.update": "\u66F4\u65B0";
236
+ readonly "panels.market.uninstall": "\u5378\u8F7D";
237
+ readonly "panels.market.installing": "\u6B63\u5728\u5B89\u88C5\u2026";
238
+ readonly "panels.market.updating": "\u6B63\u5728\u66F4\u65B0\u2026";
239
+ readonly "panels.market.uninstalling": "\u6B63\u5728\u5378\u8F7D\u2026";
240
+ readonly "panels.market.confirmUninstall": "\u8981\u5378\u8F7D\u5417\uFF1F";
241
+ readonly "panels.market.confirmUninstallDetail": "\u5378\u8F7D\u540E\u8FD9\u53F0\u673A\u5668\u4E0A\u5C31\u6CA1\u6709\u5B83\u4E86\uFF0C\u6240\u6709\u9879\u76EE\u7684\u9762\u677F\u4E5F\u4F1A\u628A\u5B83\u4E00\u8D77\u62FF\u6389\uFF08\u7ED1\u5B9A\u4E0E\u8BBE\u7F6E\u4E0D\u4F1A\u4E22\uFF09\u3002";
242
+ readonly "panels.market.confirmYes": "\u786E\u5B9A\u5378\u8F7D";
243
+ readonly "panels.market.confirmNo": "\u53D6\u6D88";
244
+ readonly "panels.market.failed": "\u6CA1\u6210\u529F\uFF1A{reason}";
245
+ readonly "panels.market.needEnv": "\u5148\u5728\u542F\u52A8\u5DE5\u4F5C\u53F0\u7684\u7EC8\u7AEF\u91CC\u8BBE {env}";
246
+ readonly "panels.market.noSource": "\u8FD9\u4E2A\u6A21\u5757\u6CA1\u58F0\u660E\u600E\u4E48\u88C5\uFF0C\u53EA\u80FD\u81EA\u5DF1\u52A8\u624B";
247
+ readonly "panels.market.badSource": "\u5B89\u88C5\u65B9\u5F0F\u6CA1\u5199\u5168\uFF0C\u53EA\u80FD\u81EA\u5DF1\u52A8\u624B";
248
+ readonly "panels.market.empty": "\u6682\u65E0\u53EF\u7528\u6A21\u5757";
249
+ 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";
250
+ readonly "panels.market.recheck": "\u91CD\u65B0\u68C0\u67E5\u66F4\u65B0";
251
+ readonly "panels.market.checkUpdates": "\u68C0\u67E5\u66F4\u65B0";
252
+ readonly "panels.market.checkedAt": "\u6700\u8FD1\u68C0\u67E5\uFF1A{time}";
253
+ readonly "panels.market.justNow": "\u521A\u521A";
254
+ readonly "panels.market.minutesAgo": "{n} \u5206\u949F\u524D";
255
+ readonly "panels.market.hoursAgo": "{n} \u5C0F\u65F6\u524D";
256
+ readonly "blocker.fix.install": "\u5E2E\u6211\u5B89\u88C5";
257
+ readonly "blocker.fix.update": "\u5E2E\u6211\u5347\u7EA7";
258
+ readonly "blocker.fix.running": "\u6B63\u5728\u6267\u884C\u2026";
259
+ readonly "blocker.fix.failed": "\u6267\u884C\u5931\u8D25\uFF1A";
260
+ readonly "blocker.retry": "\u91CD\u8BD5";
261
+ readonly "blocker.retry.running": "\u91CD\u8BD5\u4E2D\u2026";
262
+ readonly "blocker.copy": "\u590D\u5236\u547D\u4EE4";
263
+ readonly "blocker.market.open": "\u53BB\u6A21\u5757\u5E02\u573A";
264
+ readonly "blocker.login.title": "\u9700\u8981\u767B\u5F55 {platform}";
265
+ readonly "blocker.login.titleGeneric": "\u9700\u8981\u767B\u5F55";
266
+ readonly "blocker.login.hint": "\u5DE5\u4F5C\u53F0\u7528\u4F60\u7684\u6D4F\u89C8\u5668\u767B\u5F55\u6001\uFF1B\u767B\u5F55\u4E00\u6B21\u5C31\u884C\uFF0C\u4E4B\u540E\u4E0D\u7528\u518D\u767B\u3002";
267
+ readonly "blocker.login.go": "\u53BB\u767B\u5F55";
268
+ readonly "blocker.login.manual": "\u5728\u7EC8\u7AEF\u6267\u884C `opencli coding team-current`\uFF0C\u6309\u63D0\u793A\u5B8C\u6210\u767B\u5F55\u540E\u91CD\u8BD5\u3002";
269
+ readonly "blocker.forbidden.title": "\u6CA1\u6709\u6743\u9650\u8BBF\u95EE {platform}";
270
+ readonly "blocker.forbidden.titleGeneric": "\u6CA1\u6709\u6743\u9650";
271
+ readonly "blocker.forbidden.hint": "\u8D26\u53F7\u5DF2\u767B\u5F55\uFF0C\u4F46\u6CA1\u6709\u8FD9\u4E2A\u9879\u76EE/\u4ED3\u5E93\u7684\u6743\u9650\uFF1B\u7533\u8BF7\u4E4B\u540E\u518D\u8BD5\u3002";
272
+ readonly "blocker.forbidden.open": "\u6253\u5F00\u6743\u9650\u9875";
273
+ readonly "blocker.timeout.hint": "\u65E0\u5934\u6D4F\u89C8\u5668\u53EF\u80FD\u6CA1\u8D77\u6765\uFF0C\u91CD\u8BD5\u4E00\u6B21\u901A\u5E38\u5C31\u597D\u3002";
274
+ readonly "blocker.exec.hint": "\u786E\u8BA4 opencli \u5DF2\u5B89\u88C5\u4E14\u5728 PATH \u91CC\uFF08which opencli\uFF09\u3002";
275
+ readonly "blocker.unknown.title": "\u51FA\u4E86\u70B9\u95EE\u9898";
276
+ readonly "panels.reading": "\u6B63\u5728\u8BFB\u53D6\u9762\u677F\u914D\u7F6E\u2026";
277
+ readonly "panels.empty": "\u9762\u677F\u91CC\u8FD8\u6CA1\u6709\u6A21\u5757";
278
+ readonly "panels.emptyHint": "\u4E5F\u53EF\u4EE5\u76F4\u63A5\u8DDF agent \u8BF4\uFF1A\u300C\u628A\u67D0\u4E2A\u6A21\u5757\u52A0\u5230\u9762\u677F\u300D\u3002";
279
+ readonly "env.title": "\u51C6\u5907\u5DE5\u4F5C\u53F0";
280
+ readonly "env.checking": "\u6B63\u5728\u68C0\u6D4B\u8FD0\u884C\u73AF\u5883\u2026";
281
+ readonly "env.installing": "\u6B63\u5728\u5B89\u88C5\u7F3A\u5931\u7684\u4F9D\u8D56\u2026";
282
+ readonly "env.failed": "\u8FD8\u5DEE\u4E00\u6B65\u5C31\u80FD\u7528\u4E86";
283
+ readonly "env.elapsed": "\u5DF2\u7B49\u5F85 {seconds} \u79D2";
284
+ readonly "env.stepFailed.install": "\u88C5\u4E0D\u4E0A";
285
+ readonly "env.stepFailed.path": "\u88C5\u4E86\u4F46\u8FD8\u627E\u4E0D\u5230";
286
+ readonly "env.stepFailed.shell": "\u6267\u884C\u901A\u9053\u4E0D\u53EF\u7528";
287
+ readonly "env.bridge.ok": "\u5DF2\u8FDE\u63A5";
288
+ readonly "env.bridge.short": "\u6CA1\u8FDE\u4E0A";
289
+ readonly "env.bridge.why": "\u9762\u677F\u7684\u6570\u636E\u8981\u8D70\u4F60\u6D4F\u89C8\u5668\u91CC\u7684\u767B\u5F55\u6001\uFF1A\u8FD9\u4E2A\u901A\u9053\u6CA1\u8FDE\u4E0A\uFF0C\u6A21\u5757\u5C31\u53D6\u4E0D\u5230\u6570\u636E\uFF08\u4E0D\u62E6\u8DEF\uFF0C\u4F46\u5148\u4FEE\u597D\u5B83\uFF09\u3002";
290
+ readonly "env.bridge.daemon": "\u540E\u53F0\u670D\u52A1\u6CA1\u8D77\u6765\uFF1A\u6B63\u5E38\u5B83\u4F1A\u81EA\u5DF1\u8D77\uFF0C\u5148\u5728\u7EC8\u7AEF\u8DD1\u4E0B\u9762\u8FD9\u6761\u547D\u4EE4\u3002";
291
+ readonly "env.bridge.extension": "\u6D4F\u89C8\u5668\u6269\u5C55\u6CA1\u8FDE\u4E0A\uFF1A\u5728 Chrome \u5E94\u7528\u5546\u5E97\u88C5\u4E00\u6B21\u5C31\u597D\uFF08\u88C5\u5B8C\u56DE\u6765\u70B9\u300C\u91CD\u8BD5\u300D\uFF09\u3002\u5DF2\u7ECF\u88C5\u8FC7\u7684\u8BDD\uFF0C\u5148\u8DD1\u4E0B\u9762\u8FD9\u6761\u547D\u4EE4\u3002";
292
+ readonly "env.bridge.extensionLink": "\u53BB Chrome \u5E94\u7528\u5546\u5E97\u88C5\u6269\u5C55";
293
+ readonly "env.bridge.profile": "\u8FDE\u4E0A\u4E86\u591A\u4E2A\u6D4F\u89C8\u5668 profile\uFF0C\u4F46\u6CA1\u9009\u9ED8\u8BA4\u7684\u90A3\u4E2A\uFF1A\u5148\u770B\u6709\u54EA\u4E9B\uFF08\u4E0B\u9762\u8FD9\u6761\u547D\u4EE4\uFF09\uFF0C\u518D\u9009\u4E00\u4E2A\u3002";
294
+ readonly "env.bridge.stale": "\u9ED8\u8BA4\u7684\u6D4F\u89C8\u5668 profile \u5DF2\u7ECF\u5931\u6548\uFF08\u5B83\u8BB0\u7684\u662F\u4E0A\u4E00\u6B21\u7684\u6269\u5C55\u5B9E\u4F8B\uFF09\uFF1A\u91CD\u65B0\u9009\u4E00\u4E2A\u3002";
295
+ readonly "env.bridge.unknown": "\u6CA1\u8BA4\u51FA\u662F\u54EA\u79CD\u95EE\u9898\uFF1A\u4E0B\u9762\u539F\u59CB\u8F93\u51FA\u91CC\u6709 opencli \u81EA\u5DF1\u7ED9\u7684\u6B65\u9AA4\u3002";
296
+ readonly "env.fix.title": "\u600E\u4E48\u89E3\u51B3";
297
+ readonly "env.fix.why": "\u5DE5\u4F5C\u53F0\u7528\u5B83\u81EA\u5DF1\u90A3\u4EFD opencli\uFF08\u4E0E\u4F60\u5728\u7EC8\u7AEF\u91CC\u90A3\u5957\u5206\u5F00\u88C5\uFF0C\u4E92\u4E0D\u5F71\u54CD\uFF09\uFF0C\u8FD9\u53F0\u673A\u5668\u4E0A\u8FD8\u6CA1\u88C5\u597D\u5B83\u3002";
298
+ readonly "env.fix.whyPath": "opencli \u88C5\u4E0A\u4E86\uFF0C\u4F46\u5F53\u524D\u73AF\u5883\u8FD8\u627E\u4E0D\u5230\u5B83 \u2014\u2014 \u901A\u5E38\u662F PATH \u6216\u7EC8\u7AEF\u4F1A\u8BDD\u7684\u95EE\u9898\u3002";
299
+ readonly "env.fix.whyShell": "\u5DE5\u4F5C\u53F0\u62FF\u4E0D\u5230\u6267\u884C\u547D\u4EE4\u7684\u901A\u9053\uFF0C\u6240\u4EE5\u53D6\u4E0D\u4E86\u6570\u636E \u2014\u2014 \u8FD9\u4E00\u6B65\u7528\u6237\u81EA\u5DF1\u88C5\u4E0D\u4E86\u3002";
300
+ readonly "env.fix.step": "\u5728\u7EC8\u7AEF\u91CC\u8FD0\u884C\u4E0B\u9762\u8FD9\u6761\u547D\u4EE4\uFF0C\u88C5\u597D\u4E4B\u540E\u70B9\u300C\u91CD\u8BD5\u300D\uFF1A";
301
+ readonly "env.fix.stepPath": "\u65B0\u5F00\u4E00\u4E2A\u7EC8\u7AEF\u7A97\u53E3\uFF08\u6216\u786E\u8BA4 npm \u7684\u5168\u5C40 bin \u76EE\u5F55\u5728 PATH \u91CC\uFF09\uFF0C\u7136\u540E\u70B9\u300C\u91CD\u8BD5\u300D\u3002";
302
+ readonly "env.fix.stepShell": "\u91CD\u542F\u4E00\u6B21\u5DE5\u4F5C\u53F0\uFF08\u6216 dsh\uFF09\uFF1B\u5982\u679C\u53CD\u590D\u51FA\u73B0\uFF0C\u8BF4\u660E\u6267\u884C\u901A\u9053\u6CA1\u914D\u597D\u3002";
303
+ readonly "env.fix.permission": "\u6743\u9650\u4E0D\u591F\uFF1A\u5728\u547D\u4EE4\u524D\u52A0 sudo \u91CD\u8DD1\uFF0C\u6216\u5148\u628A npm \u7684\u5168\u5C40\u76EE\u5F55\u914D\u5230\u4F60\u7684\u7528\u6237\u76EE\u5F55\u3002";
304
+ readonly "env.fix.network": "\u7F51\u7EDC\u4E0D\u901A\uFF1A\u68C0\u67E5\u7F51\u7EDC\u6216\u4EE3\u7406\u8BBE\u7F6E\u540E\u91CD\u8BD5\u3002";
305
+ readonly "env.fix.details": "\u8BE6\u7EC6\u8F93\u51FA\uFF08\u6392\u969C\u7528\uFF09";
306
+ readonly "env.retry": "\u91CD\u8BD5";
307
+ readonly "env.copyCommand": "\u590D\u5236\u547D\u4EE4";
308
+ readonly "env.copied": "\u5DF2\u590D\u5236";
309
+ readonly "env.step.opencli": "\u68C0\u6D4B\u5DE5\u4F5C\u53F0\u7684 opencli";
310
+ readonly "env.step.codingPlugin": "\u68C0\u6D4B coding \u63D2\u4EF6";
311
+ readonly "env.step.bridge": "\u68C0\u6D4B\u6D4F\u89C8\u5668\u901A\u9053";
312
+ readonly "env.step.warm": "\u9884\u70ED\u7AD9\u70B9\u767B\u5F55\u6001";
313
+ readonly "env.warm.done": "\u5DF2\u9884\u70ED {n} \u4E2A\u7AD9\u70B9";
314
+ readonly "env.warm.short": "\u8FD9\u6B21\u6CA1\u70ED\u4E0A \u2014\u2014 \u4E0D\u5F71\u54CD\u7528\uFF0C\u9762\u677F\u7B2C\u4E00\u6B21\u8BFB\u53D6\u4F1A\u81EA\u5DF1\u8865";
315
+ readonly "env.unit.missingPlugin": "\u8FD9\u4E2A\u6A21\u5757\u8FD8\u6CA1\u88C5\u597D";
316
+ readonly "env.unit.missingCommandsHint": "\u66F4\u65B0\u4E4B\u540E\u5C31\u80FD\u7528\u4E86\u3002";
317
+ readonly "env.unit.unchecked": "\u68C0\u6D4B\u4E0D\u4E86\uFF1A\u62FF\u4E0D\u5230\u6267\u884C\u901A\u9053";
318
+ readonly "env.unit.uncheckedHint": "\u4E0D\u662F\u8FD9\u4E2A\u6A21\u5757\u7684\u95EE\u9898\uFF0C\u662F\u6267\u884C\u901A\u9053\u4E0D\u53EF\u7528 \u2014\u2014 \u91CD\u542F\u4E00\u6B21\u5DE5\u4F5C\u53F0\u518D\u8BD5\u3002";
319
+ readonly "env.unit.missingCommands": "\u8FD9\u4E2A\u6A21\u5757\u7684\u7248\u672C\u65E7\u4E86";
320
+ readonly "env.unit.hint": "\u88C5\u597D\u4E4B\u540E\u70B9\u91CD\u8BD5\uFF1B\u4E0D\u5F71\u54CD\u5176\u5B83\u6A21\u5757\u3002";
321
+ readonly "rightbar.label": "\u6570\u636E\u9762\u677F";
322
+ readonly "rightbar.expand": "\u5C55\u5F00\u6570\u636E\u9762\u677F";
323
+ readonly "rightbar.collapse": "\u6536\u8D77\u6570\u636E\u9762\u677F";
324
+ readonly "rightbar.refresh": "\u5237\u65B0";
325
+ readonly "rightbar.refreshing": "\u5237\u65B0\u4E2D\u2026";
326
+ readonly "rightbar.updatedAt": "\u66F4\u65B0\u4E8E {time}";
327
+ readonly "rightbar.noProject": "\u5F53\u524D\u4F1A\u8BDD\u6CA1\u6709\u6240\u5C5E\u9879\u76EE";
328
+ readonly "coding.notARepo.title": "\u8FD9\u4E2A\u9879\u76EE\u4E0D\u662F Coding \u4ED3\u5E93";
329
+ readonly "error.unknown": "\u51FA\u9519\u4E86";
330
+ readonly "board.title": "\u770B\u677F";
331
+ readonly "panel.conversation": "\u5BF9\u8BDD";
332
+ readonly "panels.label": "\u5168\u5C40\u9762\u677F";
333
+ };
334
+ 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.installing" | "panels.market.updating" | "panels.market.uninstalling" | "panels.market.confirmUninstall" | "panels.market.confirmUninstallDetail" | "panels.market.confirmYes" | "panels.market.confirmNo" | "panels.market.failed" | "panels.market.needEnv" | "panels.market.noSource" | "panels.market.badSource" | "panels.market.empty" | "panels.market.foot" | "panels.market.recheck" | "panels.market.checkUpdates" | "panels.market.checkedAt" | "panels.market.justNow" | "panels.market.minutesAgo" | "panels.market.hoursAgo" | "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>;
335
+ };
336
+ mergeMessages(base: apiModule.Dictionaries, contributions: readonly apiModule.MessagesContribution[]): apiModule.Dictionaries;
337
+ zh: {
338
+ readonly "brand.name": "\u5DE5\u4F5C\u53F0";
339
+ readonly "toggle.open": "\u6253\u5F00\u4FA7\u8FB9\u680F";
340
+ readonly "toggle.collapse": "\u6536\u8D77\u4FA7\u8FB9\u680F";
341
+ readonly "project.label": "\u5207\u6362\u9879\u76EE";
342
+ readonly "workspace.section": "\u5DE5\u4F5C\u533A";
343
+ readonly "project.none": "\u672A\u9009\u62E9\u9879\u76EE";
344
+ readonly "project.empty": "\u8FD8\u6CA1\u6709\u9879\u76EE\u3002\u7528\u4E0B\u9762\u7684\u300C\u6DFB\u52A0\u9879\u76EE\u300D\u9009\u4E00\u4E2A\u76EE\u5F55\u3002";
345
+ readonly "project.add": "\u6DFB\u52A0\u9879\u76EE\u2026";
346
+ readonly "session.new": "\u65B0\u4F1A\u8BDD";
347
+ readonly "session.new.label": "\u5728\u5F53\u524D\u9879\u76EE\u65B0\u5EFA\u4F1A\u8BDD";
348
+ readonly "session.empty": "\u8FD9\u4E2A\u9879\u76EE\u8FD8\u6CA1\u6709\u4F1A\u8BDD\u3002";
349
+ readonly "session.noProject": "\u5148\u6DFB\u52A0\u4E00\u4E2A\u9879\u76EE\u3002";
350
+ readonly "session.pinned": "\u5DF2\u7F6E\u9876";
351
+ readonly "session.actions": "{name} \u7684\u64CD\u4F5C";
352
+ readonly "status.idle": "\u7A7A\u95F2";
353
+ readonly "status.running": "\u8FD0\u884C\u4E2D";
354
+ readonly "status.waitingApproval": "\u7B49\u5F85\u6388\u6743";
355
+ readonly "status.planReview": "\u7B49\u5F85\u8BA1\u5212\u786E\u8BA4";
356
+ readonly "status.waitingAnswer": "\u7B49\u5F85\u56DE\u7B54";
357
+ readonly "status.completed": "\u5DF2\u5B8C\u6210";
358
+ readonly "status.subagentsRunning.one": "{n} \u4E2A\u5B50\u4EE3\u7406\u8FD0\u884C\u4E2D";
359
+ readonly "status.subagentsRunning.other": "{n} \u4E2A\u5B50\u4EE3\u7406\u8FD0\u884C\u4E2D";
360
+ readonly "time.now": "\u521A\u521A";
361
+ readonly "time.minutes": "{n} \u5206\u949F\u524D";
362
+ readonly "time.hours": "{n} \u5C0F\u65F6\u524D";
363
+ readonly "time.days": "{n} \u5929\u524D";
364
+ readonly "panels.title": "\u9762\u677F\u6A21\u5757";
365
+ readonly "panels.reset": "\u6062\u590D\u9ED8\u8BA4";
366
+ readonly "panels.enabled": "\u8FD9\u4E2A\u9879\u76EE\u5DF2\u542F\u7528";
367
+ readonly "panels.disabled": "\u8FD9\u4E2A\u9879\u76EE\u672A\u542F\u7528";
368
+ readonly "panels.choose": "\u9009\u62E9\u6A21\u5757";
369
+ readonly "panels.failed": "\u6539\u914D\u7F6E\u5931\u8D25\u4E86\uFF0C\u518D\u8BD5\u4E00\u6B21\u3002";
370
+ readonly "panels.hintEffect": "\u505C\u7528 = agent \u62FF\u4E0D\u5230\u76F8\u5173\u6570\u636E";
371
+ readonly "panels.dragHint": "\u62D6\u52A8\u8C03\u6574\u987A\u5E8F";
372
+ readonly "panels.unknownStep": "\u8FD9\u4E00\u5C42\u6CA1\u6709\u5957\u4EF6\u63D0\u4F9B";
373
+ readonly "panels.labelWithHint": "{label}\uFF08{hint}\uFF09";
374
+ readonly "panels.dep.missingPlugin": "\u26A0 \u8FD8\u6CA1\u88C5\u597D";
375
+ readonly "panels.dep.missingCommands": "\u26A0 \u9700\u8981\u66F4\u65B0";
376
+ readonly "panels.dep.unchecked": "\u26A0 \u68C0\u6D4B\u4E0D\u4E86";
377
+ readonly "panels.tab.modules": "\u9762\u677F\u914D\u7F6E";
378
+ readonly "panels.tab.market": "\u5DE5\u4F5C\u53F0\u6A21\u5757\u5E02\u573A";
379
+ readonly "panels.browseMarket": "\u6D4F\u89C8\u6A21\u5757\u5E02\u573A";
380
+ readonly "panels.noneInstalled": "\u8FD9\u4E9B\u6A21\u5757\u8981\u7684\u63D2\u4EF6\u90FD\u8FD8\u6CA1\u88C5";
381
+ readonly "panels.noneInstalledHint": "\u88C5\u597D\u4E4B\u540E\u5B83\u4EEC\u4F1A\u56DE\u5230\u8FD9\u91CC\uFF0C\u518D\u7531\u4F60\u51B3\u5B9A\u653E\u54EA\u51E0\u4E2A\u4E0A\u677F\u3002";
382
+ readonly "panels.market.installed": "\u5DF2\u88C5";
383
+ readonly "panels.market.outdated": "\u8981\u66F4\u65B0";
384
+ readonly "panels.market.hasNew": "\u6709\u65B0\u7248\u672C";
385
+ readonly "panels.market.missing": "\u672A\u88C5";
386
+ readonly "panels.market.unchecked": "\u72B6\u6001\u672A\u77E5";
387
+ readonly "panels.market.checking": "\u68C0\u6D4B\u4E2D";
388
+ readonly "panels.market.sectionInstalled": "\u5DF2\u5B89\u88C5";
389
+ readonly "panels.market.sectionPending": "\u672A\u5B89\u88C5";
390
+ readonly "panels.market.sectionShared": "\u5171\u7528\u4F9D\u8D56";
391
+ readonly "panels.market.sharedUsedBy": "\u4F9B {modules} \u4F7F\u7528";
392
+ readonly "panels.market.listSeparator": "\u3001";
393
+ readonly "panels.market.sharedMissing": "\u672A\u88C5";
394
+ readonly "panels.market.sharedOutdated": "\u6709\u65B0\u7248";
395
+ readonly "panels.market.sharedUnsatisfied": "\u7248\u672C\u4E0D\u5BF9";
396
+ readonly "panels.market.sharedOk": "\u5DF2\u88C5";
397
+ readonly "panels.market.versionArrow": "{from} \u2192 {to}";
398
+ readonly "panels.market.lead": "\u88C5\u5728\u8FD9\u53F0\u673A\u5668\u4E0A\uFF0C\u6240\u6709\u9879\u76EE\u5171\u7528\u3002";
399
+ readonly "panels.market.install": "\u5B89\u88C5";
400
+ readonly "panels.market.update": "\u66F4\u65B0";
401
+ readonly "panels.market.uninstall": "\u5378\u8F7D";
402
+ readonly "panels.market.installing": "\u6B63\u5728\u5B89\u88C5\u2026";
403
+ readonly "panels.market.updating": "\u6B63\u5728\u66F4\u65B0\u2026";
404
+ readonly "panels.market.uninstalling": "\u6B63\u5728\u5378\u8F7D\u2026";
405
+ readonly "panels.market.confirmUninstall": "\u8981\u5378\u8F7D\u5417\uFF1F";
406
+ readonly "panels.market.confirmUninstallDetail": "\u5378\u8F7D\u540E\u8FD9\u53F0\u673A\u5668\u4E0A\u5C31\u6CA1\u6709\u5B83\u4E86\uFF0C\u6240\u6709\u9879\u76EE\u7684\u9762\u677F\u4E5F\u4F1A\u628A\u5B83\u4E00\u8D77\u62FF\u6389\uFF08\u7ED1\u5B9A\u4E0E\u8BBE\u7F6E\u4E0D\u4F1A\u4E22\uFF09\u3002";
407
+ readonly "panels.market.confirmYes": "\u786E\u5B9A\u5378\u8F7D";
408
+ readonly "panels.market.confirmNo": "\u53D6\u6D88";
409
+ readonly "panels.market.failed": "\u6CA1\u6210\u529F\uFF1A{reason}";
410
+ readonly "panels.market.needEnv": "\u5148\u5728\u542F\u52A8\u5DE5\u4F5C\u53F0\u7684\u7EC8\u7AEF\u91CC\u8BBE {env}";
411
+ readonly "panels.market.noSource": "\u8FD9\u4E2A\u6A21\u5757\u6CA1\u58F0\u660E\u600E\u4E48\u88C5\uFF0C\u53EA\u80FD\u81EA\u5DF1\u52A8\u624B";
412
+ readonly "panels.market.badSource": "\u5B89\u88C5\u65B9\u5F0F\u6CA1\u5199\u5168\uFF0C\u53EA\u80FD\u81EA\u5DF1\u52A8\u624B";
413
+ readonly "panels.market.empty": "\u6682\u65E0\u53EF\u7528\u6A21\u5757";
414
+ 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";
415
+ readonly "panels.market.recheck": "\u91CD\u65B0\u68C0\u67E5\u66F4\u65B0";
416
+ readonly "panels.market.checkUpdates": "\u68C0\u67E5\u66F4\u65B0";
417
+ readonly "panels.market.checkedAt": "\u6700\u8FD1\u68C0\u67E5\uFF1A{time}";
418
+ readonly "panels.market.justNow": "\u521A\u521A";
419
+ readonly "panels.market.minutesAgo": "{n} \u5206\u949F\u524D";
420
+ readonly "panels.market.hoursAgo": "{n} \u5C0F\u65F6\u524D";
421
+ readonly "blocker.fix.install": "\u5E2E\u6211\u5B89\u88C5";
422
+ readonly "blocker.fix.update": "\u5E2E\u6211\u5347\u7EA7";
423
+ readonly "blocker.fix.running": "\u6B63\u5728\u6267\u884C\u2026";
424
+ readonly "blocker.fix.failed": "\u6267\u884C\u5931\u8D25\uFF1A";
425
+ readonly "blocker.retry": "\u91CD\u8BD5";
426
+ readonly "blocker.retry.running": "\u91CD\u8BD5\u4E2D\u2026";
427
+ readonly "blocker.copy": "\u590D\u5236\u547D\u4EE4";
428
+ readonly "blocker.market.open": "\u53BB\u6A21\u5757\u5E02\u573A";
429
+ readonly "blocker.login.title": "\u9700\u8981\u767B\u5F55 {platform}";
430
+ readonly "blocker.login.titleGeneric": "\u9700\u8981\u767B\u5F55";
431
+ readonly "blocker.login.hint": "\u5DE5\u4F5C\u53F0\u7528\u4F60\u7684\u6D4F\u89C8\u5668\u767B\u5F55\u6001\uFF1B\u767B\u5F55\u4E00\u6B21\u5C31\u884C\uFF0C\u4E4B\u540E\u4E0D\u7528\u518D\u767B\u3002";
432
+ readonly "blocker.login.go": "\u53BB\u767B\u5F55";
433
+ readonly "blocker.login.manual": "\u5728\u7EC8\u7AEF\u6267\u884C `opencli coding team-current`\uFF0C\u6309\u63D0\u793A\u5B8C\u6210\u767B\u5F55\u540E\u91CD\u8BD5\u3002";
434
+ readonly "blocker.forbidden.title": "\u6CA1\u6709\u6743\u9650\u8BBF\u95EE {platform}";
435
+ readonly "blocker.forbidden.titleGeneric": "\u6CA1\u6709\u6743\u9650";
436
+ readonly "blocker.forbidden.hint": "\u8D26\u53F7\u5DF2\u767B\u5F55\uFF0C\u4F46\u6CA1\u6709\u8FD9\u4E2A\u9879\u76EE/\u4ED3\u5E93\u7684\u6743\u9650\uFF1B\u7533\u8BF7\u4E4B\u540E\u518D\u8BD5\u3002";
437
+ readonly "blocker.forbidden.open": "\u6253\u5F00\u6743\u9650\u9875";
438
+ readonly "blocker.timeout.hint": "\u65E0\u5934\u6D4F\u89C8\u5668\u53EF\u80FD\u6CA1\u8D77\u6765\uFF0C\u91CD\u8BD5\u4E00\u6B21\u901A\u5E38\u5C31\u597D\u3002";
439
+ readonly "blocker.exec.hint": "\u786E\u8BA4 opencli \u5DF2\u5B89\u88C5\u4E14\u5728 PATH \u91CC\uFF08which opencli\uFF09\u3002";
440
+ readonly "blocker.unknown.title": "\u51FA\u4E86\u70B9\u95EE\u9898";
441
+ readonly "panels.reading": "\u6B63\u5728\u8BFB\u53D6\u9762\u677F\u914D\u7F6E\u2026";
442
+ readonly "panels.empty": "\u9762\u677F\u91CC\u8FD8\u6CA1\u6709\u6A21\u5757";
443
+ readonly "panels.emptyHint": "\u4E5F\u53EF\u4EE5\u76F4\u63A5\u8DDF agent \u8BF4\uFF1A\u300C\u628A\u67D0\u4E2A\u6A21\u5757\u52A0\u5230\u9762\u677F\u300D\u3002";
444
+ readonly "env.title": "\u51C6\u5907\u5DE5\u4F5C\u53F0";
445
+ readonly "env.checking": "\u6B63\u5728\u68C0\u6D4B\u8FD0\u884C\u73AF\u5883\u2026";
446
+ readonly "env.installing": "\u6B63\u5728\u5B89\u88C5\u7F3A\u5931\u7684\u4F9D\u8D56\u2026";
447
+ readonly "env.failed": "\u8FD8\u5DEE\u4E00\u6B65\u5C31\u80FD\u7528\u4E86";
448
+ readonly "env.elapsed": "\u5DF2\u7B49\u5F85 {seconds} \u79D2";
449
+ readonly "env.stepFailed.install": "\u88C5\u4E0D\u4E0A";
450
+ readonly "env.stepFailed.path": "\u88C5\u4E86\u4F46\u8FD8\u627E\u4E0D\u5230";
451
+ readonly "env.stepFailed.shell": "\u6267\u884C\u901A\u9053\u4E0D\u53EF\u7528";
452
+ readonly "env.bridge.ok": "\u5DF2\u8FDE\u63A5";
453
+ readonly "env.bridge.short": "\u6CA1\u8FDE\u4E0A";
454
+ readonly "env.bridge.why": "\u9762\u677F\u7684\u6570\u636E\u8981\u8D70\u4F60\u6D4F\u89C8\u5668\u91CC\u7684\u767B\u5F55\u6001\uFF1A\u8FD9\u4E2A\u901A\u9053\u6CA1\u8FDE\u4E0A\uFF0C\u6A21\u5757\u5C31\u53D6\u4E0D\u5230\u6570\u636E\uFF08\u4E0D\u62E6\u8DEF\uFF0C\u4F46\u5148\u4FEE\u597D\u5B83\uFF09\u3002";
455
+ readonly "env.bridge.daemon": "\u540E\u53F0\u670D\u52A1\u6CA1\u8D77\u6765\uFF1A\u6B63\u5E38\u5B83\u4F1A\u81EA\u5DF1\u8D77\uFF0C\u5148\u5728\u7EC8\u7AEF\u8DD1\u4E0B\u9762\u8FD9\u6761\u547D\u4EE4\u3002";
456
+ readonly "env.bridge.extension": "\u6D4F\u89C8\u5668\u6269\u5C55\u6CA1\u8FDE\u4E0A\uFF1A\u5728 Chrome \u5E94\u7528\u5546\u5E97\u88C5\u4E00\u6B21\u5C31\u597D\uFF08\u88C5\u5B8C\u56DE\u6765\u70B9\u300C\u91CD\u8BD5\u300D\uFF09\u3002\u5DF2\u7ECF\u88C5\u8FC7\u7684\u8BDD\uFF0C\u5148\u8DD1\u4E0B\u9762\u8FD9\u6761\u547D\u4EE4\u3002";
457
+ readonly "env.bridge.extensionLink": "\u53BB Chrome \u5E94\u7528\u5546\u5E97\u88C5\u6269\u5C55";
458
+ readonly "env.bridge.profile": "\u8FDE\u4E0A\u4E86\u591A\u4E2A\u6D4F\u89C8\u5668 profile\uFF0C\u4F46\u6CA1\u9009\u9ED8\u8BA4\u7684\u90A3\u4E2A\uFF1A\u5148\u770B\u6709\u54EA\u4E9B\uFF08\u4E0B\u9762\u8FD9\u6761\u547D\u4EE4\uFF09\uFF0C\u518D\u9009\u4E00\u4E2A\u3002";
459
+ readonly "env.bridge.stale": "\u9ED8\u8BA4\u7684\u6D4F\u89C8\u5668 profile \u5DF2\u7ECF\u5931\u6548\uFF08\u5B83\u8BB0\u7684\u662F\u4E0A\u4E00\u6B21\u7684\u6269\u5C55\u5B9E\u4F8B\uFF09\uFF1A\u91CD\u65B0\u9009\u4E00\u4E2A\u3002";
460
+ readonly "env.bridge.unknown": "\u6CA1\u8BA4\u51FA\u662F\u54EA\u79CD\u95EE\u9898\uFF1A\u4E0B\u9762\u539F\u59CB\u8F93\u51FA\u91CC\u6709 opencli \u81EA\u5DF1\u7ED9\u7684\u6B65\u9AA4\u3002";
461
+ readonly "env.fix.title": "\u600E\u4E48\u89E3\u51B3";
462
+ readonly "env.fix.why": "\u5DE5\u4F5C\u53F0\u7528\u5B83\u81EA\u5DF1\u90A3\u4EFD opencli\uFF08\u4E0E\u4F60\u5728\u7EC8\u7AEF\u91CC\u90A3\u5957\u5206\u5F00\u88C5\uFF0C\u4E92\u4E0D\u5F71\u54CD\uFF09\uFF0C\u8FD9\u53F0\u673A\u5668\u4E0A\u8FD8\u6CA1\u88C5\u597D\u5B83\u3002";
463
+ readonly "env.fix.whyPath": "opencli \u88C5\u4E0A\u4E86\uFF0C\u4F46\u5F53\u524D\u73AF\u5883\u8FD8\u627E\u4E0D\u5230\u5B83 \u2014\u2014 \u901A\u5E38\u662F PATH \u6216\u7EC8\u7AEF\u4F1A\u8BDD\u7684\u95EE\u9898\u3002";
464
+ readonly "env.fix.whyShell": "\u5DE5\u4F5C\u53F0\u62FF\u4E0D\u5230\u6267\u884C\u547D\u4EE4\u7684\u901A\u9053\uFF0C\u6240\u4EE5\u53D6\u4E0D\u4E86\u6570\u636E \u2014\u2014 \u8FD9\u4E00\u6B65\u7528\u6237\u81EA\u5DF1\u88C5\u4E0D\u4E86\u3002";
465
+ readonly "env.fix.step": "\u5728\u7EC8\u7AEF\u91CC\u8FD0\u884C\u4E0B\u9762\u8FD9\u6761\u547D\u4EE4\uFF0C\u88C5\u597D\u4E4B\u540E\u70B9\u300C\u91CD\u8BD5\u300D\uFF1A";
466
+ readonly "env.fix.stepPath": "\u65B0\u5F00\u4E00\u4E2A\u7EC8\u7AEF\u7A97\u53E3\uFF08\u6216\u786E\u8BA4 npm \u7684\u5168\u5C40 bin \u76EE\u5F55\u5728 PATH \u91CC\uFF09\uFF0C\u7136\u540E\u70B9\u300C\u91CD\u8BD5\u300D\u3002";
467
+ readonly "env.fix.stepShell": "\u91CD\u542F\u4E00\u6B21\u5DE5\u4F5C\u53F0\uFF08\u6216 dsh\uFF09\uFF1B\u5982\u679C\u53CD\u590D\u51FA\u73B0\uFF0C\u8BF4\u660E\u6267\u884C\u901A\u9053\u6CA1\u914D\u597D\u3002";
468
+ readonly "env.fix.permission": "\u6743\u9650\u4E0D\u591F\uFF1A\u5728\u547D\u4EE4\u524D\u52A0 sudo \u91CD\u8DD1\uFF0C\u6216\u5148\u628A npm \u7684\u5168\u5C40\u76EE\u5F55\u914D\u5230\u4F60\u7684\u7528\u6237\u76EE\u5F55\u3002";
469
+ readonly "env.fix.network": "\u7F51\u7EDC\u4E0D\u901A\uFF1A\u68C0\u67E5\u7F51\u7EDC\u6216\u4EE3\u7406\u8BBE\u7F6E\u540E\u91CD\u8BD5\u3002";
470
+ readonly "env.fix.details": "\u8BE6\u7EC6\u8F93\u51FA\uFF08\u6392\u969C\u7528\uFF09";
471
+ readonly "env.retry": "\u91CD\u8BD5";
472
+ readonly "env.copyCommand": "\u590D\u5236\u547D\u4EE4";
473
+ readonly "env.copied": "\u5DF2\u590D\u5236";
474
+ readonly "env.step.opencli": "\u68C0\u6D4B\u5DE5\u4F5C\u53F0\u7684 opencli";
475
+ readonly "env.step.codingPlugin": "\u68C0\u6D4B coding \u63D2\u4EF6";
476
+ readonly "env.step.bridge": "\u68C0\u6D4B\u6D4F\u89C8\u5668\u901A\u9053";
477
+ readonly "env.step.warm": "\u9884\u70ED\u7AD9\u70B9\u767B\u5F55\u6001";
478
+ readonly "env.warm.done": "\u5DF2\u9884\u70ED {n} \u4E2A\u7AD9\u70B9";
479
+ readonly "env.warm.short": "\u8FD9\u6B21\u6CA1\u70ED\u4E0A \u2014\u2014 \u4E0D\u5F71\u54CD\u7528\uFF0C\u9762\u677F\u7B2C\u4E00\u6B21\u8BFB\u53D6\u4F1A\u81EA\u5DF1\u8865";
480
+ readonly "env.unit.missingPlugin": "\u8FD9\u4E2A\u6A21\u5757\u8FD8\u6CA1\u88C5\u597D";
481
+ readonly "env.unit.missingCommandsHint": "\u66F4\u65B0\u4E4B\u540E\u5C31\u80FD\u7528\u4E86\u3002";
482
+ readonly "env.unit.unchecked": "\u68C0\u6D4B\u4E0D\u4E86\uFF1A\u62FF\u4E0D\u5230\u6267\u884C\u901A\u9053";
483
+ readonly "env.unit.uncheckedHint": "\u4E0D\u662F\u8FD9\u4E2A\u6A21\u5757\u7684\u95EE\u9898\uFF0C\u662F\u6267\u884C\u901A\u9053\u4E0D\u53EF\u7528 \u2014\u2014 \u91CD\u542F\u4E00\u6B21\u5DE5\u4F5C\u53F0\u518D\u8BD5\u3002";
484
+ readonly "env.unit.missingCommands": "\u8FD9\u4E2A\u6A21\u5757\u7684\u7248\u672C\u65E7\u4E86";
485
+ readonly "env.unit.hint": "\u88C5\u597D\u4E4B\u540E\u70B9\u91CD\u8BD5\uFF1B\u4E0D\u5F71\u54CD\u5176\u5B83\u6A21\u5757\u3002";
486
+ readonly "rightbar.label": "\u6570\u636E\u9762\u677F";
487
+ readonly "rightbar.expand": "\u5C55\u5F00\u6570\u636E\u9762\u677F";
488
+ readonly "rightbar.collapse": "\u6536\u8D77\u6570\u636E\u9762\u677F";
489
+ readonly "rightbar.refresh": "\u5237\u65B0";
490
+ readonly "rightbar.refreshing": "\u5237\u65B0\u4E2D\u2026";
491
+ readonly "rightbar.updatedAt": "\u66F4\u65B0\u4E8E {time}";
492
+ readonly "rightbar.noProject": "\u5F53\u524D\u4F1A\u8BDD\u6CA1\u6709\u6240\u5C5E\u9879\u76EE";
493
+ readonly "coding.notARepo.title": "\u8FD9\u4E2A\u9879\u76EE\u4E0D\u662F Coding \u4ED3\u5E93";
494
+ readonly "error.unknown": "\u51FA\u9519\u4E86";
495
+ readonly "board.title": "\u770B\u677F";
496
+ readonly "panel.conversation": "\u5BF9\u8BDD";
497
+ readonly "panels.label": "\u5168\u5C40\u9762\u677F";
498
+ };
499
+ blockerPending(busy: boolean, running: string | null): boolean;
500
+ blockerActionLabel(action: apiModule.BlockerActionShape, state: apiModule.BlockerLabelState, t: apiModule.BlockerLabelTranslate): string;
501
+ holdBusy(since: number | null, now: number, floorMs: number): apiModule.BusyHold;
502
+ h: typeof import("react").createElement;
503
+ Fragment: import("react").ExoticComponent<import("react").FragmentProps>;
504
+ useState: typeof import("react").useState;
505
+ useEffect: typeof import("react").useEffect;
506
+ useMemo: typeof import("react").useMemo;
507
+ useCallback: typeof import("react").useCallback;
508
+ useRef: typeof import("react").useRef;
509
+ useSyncExternalStore: typeof import("react").useSyncExternalStore;
510
+ quoteShellArg(value: unknown): string;
511
+ tailLines(text: string | null | undefined, lines?: number): string;
512
+ parseJsonLoose(text: string | null | undefined): unknown;
513
+ excerpt(text: string | null | undefined, limit?: number): string;
514
+ cx(...parts: Array<string | false | null | undefined>): string;
515
+ relativeTime(epochMs: number, t: apiModule.TimeTranslate): string;
516
+ shortenPath(path: unknown): string;
517
+ parseLocalTimestamp(text: string | null | undefined): number;
518
+ LINK_BUTTON_STYLE: {
519
+ readonly display: "inline-flex";
520
+ readonly alignItems: "center";
521
+ readonly gap: "var(--wb-gap-xs)";
522
+ readonly textDecoration: "none";
523
+ };
524
+ BlockerState({ blocker, t, onRetry, busy, flush, onOpenMarket, }: blockerStateModule.BlockerStateProps): JSX.Element;
525
+ };
526
+ api: {
527
+ installContextChips(ctx: DshClientContext, deps: chipsModule.ContextChipsDeps): void;
528
+ addContextChip(ref: apiModule.ContextRef, label: string): chipsModule.ChipResult;
529
+ serializeChipRef(encoded: string): string;
530
+ CONTEXT_SOURCE: "workbench";
531
+ blockerOfError(error: apiModule.ApiError | undefined, t: apiModule.Translate, context?: {
532
+ path?: string | null;
533
+ platform?: string;
534
+ }): apiModule.ModuleBlocker;
535
+ blockerOfCapability(capability: apiModule.CapabilityPayload, t: apiModule.Translate): apiModule.ModuleBlocker | undefined;
536
+ encodeRef(ref: apiModule.ContextRef): string;
537
+ decodeRef(text: string): apiModule.ContextRef | undefined;
538
+ markerBody(encoded: string): string;
539
+ buildMarker(ref: apiModule.ContextRef): string;
540
+ parseMarkers(text: string): apiModule.ContextRef[];
541
+ CONTEXT_MARKER_NAME: "\u5DE5\u4F5C\u53F0";
542
+ unitFactScope(unit: string): string;
543
+ isFactScope(name: string): boolean;
544
+ scopePrefixOf(name: string): string;
545
+ createFactChannel(options: {
546
+ readonly transport: apiModule.FactTransport;
547
+ }): apiModule.FactChannel;
548
+ parseFactFrame(data: unknown): apiModule.FactFrame | null;
549
+ factOfRoute(route: string): string;
550
+ FACT_SCOPE_SUFFIX: "*";
551
+ writeRoute(channel: apiModule.WriteChannel, resource: string): string;
552
+ writeOutcomeOf<T>(response: apiModule.ApiResponse<T> | null, networkText: string): apiModule.WriteOutcome<T>;
553
+ runsRouteOf(unit: string): string;
554
+ longTaskPollMs(live: boolean, override?: number | undefined): number;
555
+ longTaskRunsOf<T>(state: {
556
+ readonly phase?: string | undefined;
557
+ readonly value?: apiModule.LongTasksPayload | undefined;
558
+ }): readonly T[];
559
+ longTaskDot(status: apiModule.LongTaskStatus): "ongoing" | "done" | "error" | "idle";
560
+ LONG_TASK_POLL_MS: 1500;
561
+ LONG_TASK_IDLE_MS: 10000;
562
+ gateOf(capability: apiModule.CapabilityPayload | null, mode: apiModule.GateMode): apiModule.UnitGate;
563
+ splitBlocker(candidates: readonly (apiModule.ModuleBlocker | undefined)[]): apiModule.UnitBlockers;
564
+ probeKeyOf(error: apiModule.ApiError | undefined): string | null;
565
+ apiGet<T>(route: string, query?: apiModule.Query, options?: apiModule.ApiGetOptions): Promise<apiModule.ApiResponse<T>>;
566
+ apiPost<T>(route: string, body: Record<string, unknown>): Promise<apiModule.ApiResponse<T>>;
567
+ ApprovalDetail(props: apiModule.ApprovalDetailProps): JSX.Element | null;
568
+ CardHead({ t, title, meta, refreshing, onRefresh, gear, gearOpen, onToggleGear, platformHref, platform, platformTitle, }: apiModule.CardHeadProps): JSX.Element;
569
+ ChoiceGroup({ label, name, value, options, disabled, onChange }: apiModule.ChoiceGroupProps): JSX.Element;
570
+ LongTaskRow(props: apiModule.LongTaskRowProps): JSX.Element;
571
+ MockStrip({ mocks, index, onPick, note, real, }: {
572
+ readonly mocks: readonly {
573
+ readonly id: string;
574
+ readonly label: string;
575
+ }[];
576
+ readonly index: number;
577
+ readonly onPick: (next: number) => void;
578
+ readonly note?: string;
579
+ readonly real?: {
580
+ readonly label: string;
581
+ readonly active: boolean;
582
+ readonly onPick: () => void;
583
+ } | undefined;
584
+ }): JSX.Element;
585
+ SkeletonRows({ rows }: {
586
+ rows?: number;
587
+ }): JSX.Element;
588
+ CenteredState({ icon, title, hint, detail, action, compact }: apiModule.CenteredStateProps): JSX.Element;
589
+ EmptyState({ text, icon, compact }: {
590
+ text: string;
591
+ icon?: apiModule.ReactNode;
592
+ compact?: boolean;
593
+ }): JSX.Element;
594
+ SaveBar({ busy, disabled, labels, onCancel, onSave }: apiModule.SaveBarProps): JSX.Element;
595
+ StateDot({ state, size }: {
596
+ state: apiModule.DotState;
597
+ size: number;
598
+ }): JSX.Element;
599
+ IconPanelLeft({ size }: apiModule.IconProps): JSX.Element;
600
+ IconFolder({ size }: apiModule.IconProps): JSX.Element;
601
+ IconFolderOpen({ size }: apiModule.IconProps): JSX.Element;
602
+ IconChevronDown({ size }: apiModule.IconProps): JSX.Element;
603
+ IconPlus({ size }: apiModule.IconProps): JSX.Element;
604
+ IconEllipsis({ size }: apiModule.IconProps): JSX.Element;
605
+ IconSettings({ size }: apiModule.IconProps): JSX.Element;
606
+ IconPin({ size }: apiModule.IconProps): JSX.Element;
607
+ IconCheck({ size }: apiModule.IconProps): JSX.Element;
608
+ IconNewChat({ size }: apiModule.IconProps): JSX.Element;
609
+ IconRefresh({ size }: apiModule.IconProps): JSX.Element;
610
+ IconRightUp({ size }: apiModule.IconProps): JSX.Element;
611
+ IconConversation({ size }: apiModule.IconProps): JSX.Element;
612
+ IconBrandMark({ size }: apiModule.IconProps): JSX.Element;
613
+ IconModules({ size }: apiModule.IconProps): JSX.Element;
614
+ PLUGIN_ID: "@dsh-workbench/core";
615
+ API_PREFIX: "/workbench/api";
616
+ PREFS_PREFIX: "/workbench/api/prefs";
617
+ EVENTS_PATH: "/workbench/events";
618
+ ACTIONS_PREFIX: "/workbench/api/actions";
619
+ PROVISION_PREFIX: "/workbench/api/provision";
620
+ OPENCLI_PIN: "1.8.8";
621
+ CODING_ISSUES_SERVICE: "workbenchCodingIssues";
622
+ PANELS_SERVICE: "workbenchPanels";
623
+ UNITS_SERVICE: "workbenchUnits";
624
+ PANEL_LIST_LIMIT: 50;
625
+ OPENCLI_TIMEOUT_MS: 120000;
626
+ OPENCLI_MAX_CONCURRENT: 4;
627
+ WARM_TIMEOUT_MS: 20000;
628
+ INSTALL_TIMEOUT_MS: 300000;
629
+ VERSION_CHECK_TIMEOUT_MS: 10000;
630
+ VERSION_CHECK_TTL_MS: 600000;
631
+ PROBE_TTL_MS: 30000;
632
+ MIN_BUSY_MS: 500;
633
+ HANDOFF_TTL_MS: 15000;
634
+ GIT_TIMEOUT_MS: 10000;
635
+ PANEL_POLL_MS: 2000;
636
+ DEFAULT_WORKSPACE_TITLE: "default-workspace";
637
+ STORAGE_KEY_PROJECT: "dsh-workbench.project";
638
+ STORAGE_KEY_RIGHTBAR: "dsh-workbench.rightbar.expanded";
639
+ LOCALE_NS: "workbench";
640
+ LOCALES: readonly ["zh", "en"];
641
+ readText(key: string): string | null;
642
+ writeText(key: string, value: string | null): void;
643
+ readFlag(key: string, fallback: boolean): boolean;
644
+ writeFlag(key: string, value: boolean): void;
645
+ en: Record<keyof apiModule.WorkbenchMessages, string>;
646
+ dictionaries: {
647
+ zh: {
648
+ readonly "brand.name": "\u5DE5\u4F5C\u53F0";
649
+ readonly "toggle.open": "\u6253\u5F00\u4FA7\u8FB9\u680F";
650
+ readonly "toggle.collapse": "\u6536\u8D77\u4FA7\u8FB9\u680F";
651
+ readonly "project.label": "\u5207\u6362\u9879\u76EE";
652
+ readonly "workspace.section": "\u5DE5\u4F5C\u533A";
653
+ readonly "project.none": "\u672A\u9009\u62E9\u9879\u76EE";
654
+ readonly "project.empty": "\u8FD8\u6CA1\u6709\u9879\u76EE\u3002\u7528\u4E0B\u9762\u7684\u300C\u6DFB\u52A0\u9879\u76EE\u300D\u9009\u4E00\u4E2A\u76EE\u5F55\u3002";
655
+ readonly "project.add": "\u6DFB\u52A0\u9879\u76EE\u2026";
656
+ readonly "session.new": "\u65B0\u4F1A\u8BDD";
657
+ readonly "session.new.label": "\u5728\u5F53\u524D\u9879\u76EE\u65B0\u5EFA\u4F1A\u8BDD";
658
+ readonly "session.empty": "\u8FD9\u4E2A\u9879\u76EE\u8FD8\u6CA1\u6709\u4F1A\u8BDD\u3002";
659
+ readonly "session.noProject": "\u5148\u6DFB\u52A0\u4E00\u4E2A\u9879\u76EE\u3002";
660
+ readonly "session.pinned": "\u5DF2\u7F6E\u9876";
661
+ readonly "session.actions": "{name} \u7684\u64CD\u4F5C";
662
+ readonly "status.idle": "\u7A7A\u95F2";
663
+ readonly "status.running": "\u8FD0\u884C\u4E2D";
664
+ readonly "status.waitingApproval": "\u7B49\u5F85\u6388\u6743";
665
+ readonly "status.planReview": "\u7B49\u5F85\u8BA1\u5212\u786E\u8BA4";
666
+ readonly "status.waitingAnswer": "\u7B49\u5F85\u56DE\u7B54";
667
+ readonly "status.completed": "\u5DF2\u5B8C\u6210";
668
+ readonly "status.subagentsRunning.one": "{n} \u4E2A\u5B50\u4EE3\u7406\u8FD0\u884C\u4E2D";
669
+ readonly "status.subagentsRunning.other": "{n} \u4E2A\u5B50\u4EE3\u7406\u8FD0\u884C\u4E2D";
670
+ readonly "time.now": "\u521A\u521A";
671
+ readonly "time.minutes": "{n} \u5206\u949F\u524D";
672
+ readonly "time.hours": "{n} \u5C0F\u65F6\u524D";
673
+ readonly "time.days": "{n} \u5929\u524D";
674
+ readonly "panels.title": "\u9762\u677F\u6A21\u5757";
675
+ readonly "panels.reset": "\u6062\u590D\u9ED8\u8BA4";
676
+ readonly "panels.enabled": "\u8FD9\u4E2A\u9879\u76EE\u5DF2\u542F\u7528";
677
+ readonly "panels.disabled": "\u8FD9\u4E2A\u9879\u76EE\u672A\u542F\u7528";
678
+ readonly "panels.choose": "\u9009\u62E9\u6A21\u5757";
679
+ readonly "panels.failed": "\u6539\u914D\u7F6E\u5931\u8D25\u4E86\uFF0C\u518D\u8BD5\u4E00\u6B21\u3002";
680
+ readonly "panels.hintEffect": "\u505C\u7528 = agent \u62FF\u4E0D\u5230\u76F8\u5173\u6570\u636E";
681
+ readonly "panels.dragHint": "\u62D6\u52A8\u8C03\u6574\u987A\u5E8F";
682
+ readonly "panels.unknownStep": "\u8FD9\u4E00\u5C42\u6CA1\u6709\u5957\u4EF6\u63D0\u4F9B";
683
+ readonly "panels.labelWithHint": "{label}\uFF08{hint}\uFF09";
684
+ readonly "panels.dep.missingPlugin": "\u26A0 \u8FD8\u6CA1\u88C5\u597D";
685
+ readonly "panels.dep.missingCommands": "\u26A0 \u9700\u8981\u66F4\u65B0";
686
+ readonly "panels.dep.unchecked": "\u26A0 \u68C0\u6D4B\u4E0D\u4E86";
687
+ readonly "panels.tab.modules": "\u9762\u677F\u914D\u7F6E";
688
+ readonly "panels.tab.market": "\u5DE5\u4F5C\u53F0\u6A21\u5757\u5E02\u573A";
689
+ readonly "panels.browseMarket": "\u6D4F\u89C8\u6A21\u5757\u5E02\u573A";
690
+ readonly "panels.noneInstalled": "\u8FD9\u4E9B\u6A21\u5757\u8981\u7684\u63D2\u4EF6\u90FD\u8FD8\u6CA1\u88C5";
691
+ readonly "panels.noneInstalledHint": "\u88C5\u597D\u4E4B\u540E\u5B83\u4EEC\u4F1A\u56DE\u5230\u8FD9\u91CC\uFF0C\u518D\u7531\u4F60\u51B3\u5B9A\u653E\u54EA\u51E0\u4E2A\u4E0A\u677F\u3002";
692
+ readonly "panels.market.installed": "\u5DF2\u88C5";
693
+ readonly "panels.market.outdated": "\u8981\u66F4\u65B0";
694
+ readonly "panels.market.hasNew": "\u6709\u65B0\u7248\u672C";
695
+ readonly "panels.market.missing": "\u672A\u88C5";
696
+ readonly "panels.market.unchecked": "\u72B6\u6001\u672A\u77E5";
697
+ readonly "panels.market.checking": "\u68C0\u6D4B\u4E2D";
698
+ readonly "panels.market.sectionInstalled": "\u5DF2\u5B89\u88C5";
699
+ readonly "panels.market.sectionPending": "\u672A\u5B89\u88C5";
700
+ readonly "panels.market.sectionShared": "\u5171\u7528\u4F9D\u8D56";
701
+ readonly "panels.market.sharedUsedBy": "\u4F9B {modules} \u4F7F\u7528";
702
+ readonly "panels.market.listSeparator": "\u3001";
703
+ readonly "panels.market.sharedMissing": "\u672A\u88C5";
704
+ readonly "panels.market.sharedOutdated": "\u6709\u65B0\u7248";
705
+ readonly "panels.market.sharedUnsatisfied": "\u7248\u672C\u4E0D\u5BF9";
706
+ readonly "panels.market.sharedOk": "\u5DF2\u88C5";
707
+ readonly "panels.market.versionArrow": "{from} \u2192 {to}";
708
+ readonly "panels.market.lead": "\u88C5\u5728\u8FD9\u53F0\u673A\u5668\u4E0A\uFF0C\u6240\u6709\u9879\u76EE\u5171\u7528\u3002";
709
+ readonly "panels.market.install": "\u5B89\u88C5";
710
+ readonly "panels.market.update": "\u66F4\u65B0";
711
+ readonly "panels.market.uninstall": "\u5378\u8F7D";
712
+ readonly "panels.market.installing": "\u6B63\u5728\u5B89\u88C5\u2026";
713
+ readonly "panels.market.updating": "\u6B63\u5728\u66F4\u65B0\u2026";
714
+ readonly "panels.market.uninstalling": "\u6B63\u5728\u5378\u8F7D\u2026";
715
+ readonly "panels.market.confirmUninstall": "\u8981\u5378\u8F7D\u5417\uFF1F";
716
+ readonly "panels.market.confirmUninstallDetail": "\u5378\u8F7D\u540E\u8FD9\u53F0\u673A\u5668\u4E0A\u5C31\u6CA1\u6709\u5B83\u4E86\uFF0C\u6240\u6709\u9879\u76EE\u7684\u9762\u677F\u4E5F\u4F1A\u628A\u5B83\u4E00\u8D77\u62FF\u6389\uFF08\u7ED1\u5B9A\u4E0E\u8BBE\u7F6E\u4E0D\u4F1A\u4E22\uFF09\u3002";
717
+ readonly "panels.market.confirmYes": "\u786E\u5B9A\u5378\u8F7D";
718
+ readonly "panels.market.confirmNo": "\u53D6\u6D88";
719
+ readonly "panels.market.failed": "\u6CA1\u6210\u529F\uFF1A{reason}";
720
+ readonly "panels.market.needEnv": "\u5148\u5728\u542F\u52A8\u5DE5\u4F5C\u53F0\u7684\u7EC8\u7AEF\u91CC\u8BBE {env}";
721
+ readonly "panels.market.noSource": "\u8FD9\u4E2A\u6A21\u5757\u6CA1\u58F0\u660E\u600E\u4E48\u88C5\uFF0C\u53EA\u80FD\u81EA\u5DF1\u52A8\u624B";
722
+ readonly "panels.market.badSource": "\u5B89\u88C5\u65B9\u5F0F\u6CA1\u5199\u5168\uFF0C\u53EA\u80FD\u81EA\u5DF1\u52A8\u624B";
723
+ readonly "panels.market.empty": "\u6682\u65E0\u53EF\u7528\u6A21\u5757";
724
+ 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";
725
+ readonly "panels.market.recheck": "\u91CD\u65B0\u68C0\u67E5\u66F4\u65B0";
726
+ readonly "panels.market.checkUpdates": "\u68C0\u67E5\u66F4\u65B0";
727
+ readonly "panels.market.checkedAt": "\u6700\u8FD1\u68C0\u67E5\uFF1A{time}";
728
+ readonly "panels.market.justNow": "\u521A\u521A";
729
+ readonly "panels.market.minutesAgo": "{n} \u5206\u949F\u524D";
730
+ readonly "panels.market.hoursAgo": "{n} \u5C0F\u65F6\u524D";
731
+ readonly "blocker.fix.install": "\u5E2E\u6211\u5B89\u88C5";
732
+ readonly "blocker.fix.update": "\u5E2E\u6211\u5347\u7EA7";
733
+ readonly "blocker.fix.running": "\u6B63\u5728\u6267\u884C\u2026";
734
+ readonly "blocker.fix.failed": "\u6267\u884C\u5931\u8D25\uFF1A";
735
+ readonly "blocker.retry": "\u91CD\u8BD5";
736
+ readonly "blocker.retry.running": "\u91CD\u8BD5\u4E2D\u2026";
737
+ readonly "blocker.copy": "\u590D\u5236\u547D\u4EE4";
738
+ readonly "blocker.market.open": "\u53BB\u6A21\u5757\u5E02\u573A";
739
+ readonly "blocker.login.title": "\u9700\u8981\u767B\u5F55 {platform}";
740
+ readonly "blocker.login.titleGeneric": "\u9700\u8981\u767B\u5F55";
741
+ readonly "blocker.login.hint": "\u5DE5\u4F5C\u53F0\u7528\u4F60\u7684\u6D4F\u89C8\u5668\u767B\u5F55\u6001\uFF1B\u767B\u5F55\u4E00\u6B21\u5C31\u884C\uFF0C\u4E4B\u540E\u4E0D\u7528\u518D\u767B\u3002";
742
+ readonly "blocker.login.go": "\u53BB\u767B\u5F55";
743
+ readonly "blocker.login.manual": "\u5728\u7EC8\u7AEF\u6267\u884C `opencli coding team-current`\uFF0C\u6309\u63D0\u793A\u5B8C\u6210\u767B\u5F55\u540E\u91CD\u8BD5\u3002";
744
+ readonly "blocker.forbidden.title": "\u6CA1\u6709\u6743\u9650\u8BBF\u95EE {platform}";
745
+ readonly "blocker.forbidden.titleGeneric": "\u6CA1\u6709\u6743\u9650";
746
+ readonly "blocker.forbidden.hint": "\u8D26\u53F7\u5DF2\u767B\u5F55\uFF0C\u4F46\u6CA1\u6709\u8FD9\u4E2A\u9879\u76EE/\u4ED3\u5E93\u7684\u6743\u9650\uFF1B\u7533\u8BF7\u4E4B\u540E\u518D\u8BD5\u3002";
747
+ readonly "blocker.forbidden.open": "\u6253\u5F00\u6743\u9650\u9875";
748
+ readonly "blocker.timeout.hint": "\u65E0\u5934\u6D4F\u89C8\u5668\u53EF\u80FD\u6CA1\u8D77\u6765\uFF0C\u91CD\u8BD5\u4E00\u6B21\u901A\u5E38\u5C31\u597D\u3002";
749
+ readonly "blocker.exec.hint": "\u786E\u8BA4 opencli \u5DF2\u5B89\u88C5\u4E14\u5728 PATH \u91CC\uFF08which opencli\uFF09\u3002";
750
+ readonly "blocker.unknown.title": "\u51FA\u4E86\u70B9\u95EE\u9898";
751
+ readonly "panels.reading": "\u6B63\u5728\u8BFB\u53D6\u9762\u677F\u914D\u7F6E\u2026";
752
+ readonly "panels.empty": "\u9762\u677F\u91CC\u8FD8\u6CA1\u6709\u6A21\u5757";
753
+ readonly "panels.emptyHint": "\u4E5F\u53EF\u4EE5\u76F4\u63A5\u8DDF agent \u8BF4\uFF1A\u300C\u628A\u67D0\u4E2A\u6A21\u5757\u52A0\u5230\u9762\u677F\u300D\u3002";
754
+ readonly "env.title": "\u51C6\u5907\u5DE5\u4F5C\u53F0";
755
+ readonly "env.checking": "\u6B63\u5728\u68C0\u6D4B\u8FD0\u884C\u73AF\u5883\u2026";
756
+ readonly "env.installing": "\u6B63\u5728\u5B89\u88C5\u7F3A\u5931\u7684\u4F9D\u8D56\u2026";
757
+ readonly "env.failed": "\u8FD8\u5DEE\u4E00\u6B65\u5C31\u80FD\u7528\u4E86";
758
+ readonly "env.elapsed": "\u5DF2\u7B49\u5F85 {seconds} \u79D2";
759
+ readonly "env.stepFailed.install": "\u88C5\u4E0D\u4E0A";
760
+ readonly "env.stepFailed.path": "\u88C5\u4E86\u4F46\u8FD8\u627E\u4E0D\u5230";
761
+ readonly "env.stepFailed.shell": "\u6267\u884C\u901A\u9053\u4E0D\u53EF\u7528";
762
+ readonly "env.bridge.ok": "\u5DF2\u8FDE\u63A5";
763
+ readonly "env.bridge.short": "\u6CA1\u8FDE\u4E0A";
764
+ readonly "env.bridge.why": "\u9762\u677F\u7684\u6570\u636E\u8981\u8D70\u4F60\u6D4F\u89C8\u5668\u91CC\u7684\u767B\u5F55\u6001\uFF1A\u8FD9\u4E2A\u901A\u9053\u6CA1\u8FDE\u4E0A\uFF0C\u6A21\u5757\u5C31\u53D6\u4E0D\u5230\u6570\u636E\uFF08\u4E0D\u62E6\u8DEF\uFF0C\u4F46\u5148\u4FEE\u597D\u5B83\uFF09\u3002";
765
+ readonly "env.bridge.daemon": "\u540E\u53F0\u670D\u52A1\u6CA1\u8D77\u6765\uFF1A\u6B63\u5E38\u5B83\u4F1A\u81EA\u5DF1\u8D77\uFF0C\u5148\u5728\u7EC8\u7AEF\u8DD1\u4E0B\u9762\u8FD9\u6761\u547D\u4EE4\u3002";
766
+ readonly "env.bridge.extension": "\u6D4F\u89C8\u5668\u6269\u5C55\u6CA1\u8FDE\u4E0A\uFF1A\u5728 Chrome \u5E94\u7528\u5546\u5E97\u88C5\u4E00\u6B21\u5C31\u597D\uFF08\u88C5\u5B8C\u56DE\u6765\u70B9\u300C\u91CD\u8BD5\u300D\uFF09\u3002\u5DF2\u7ECF\u88C5\u8FC7\u7684\u8BDD\uFF0C\u5148\u8DD1\u4E0B\u9762\u8FD9\u6761\u547D\u4EE4\u3002";
767
+ readonly "env.bridge.extensionLink": "\u53BB Chrome \u5E94\u7528\u5546\u5E97\u88C5\u6269\u5C55";
768
+ readonly "env.bridge.profile": "\u8FDE\u4E0A\u4E86\u591A\u4E2A\u6D4F\u89C8\u5668 profile\uFF0C\u4F46\u6CA1\u9009\u9ED8\u8BA4\u7684\u90A3\u4E2A\uFF1A\u5148\u770B\u6709\u54EA\u4E9B\uFF08\u4E0B\u9762\u8FD9\u6761\u547D\u4EE4\uFF09\uFF0C\u518D\u9009\u4E00\u4E2A\u3002";
769
+ readonly "env.bridge.stale": "\u9ED8\u8BA4\u7684\u6D4F\u89C8\u5668 profile \u5DF2\u7ECF\u5931\u6548\uFF08\u5B83\u8BB0\u7684\u662F\u4E0A\u4E00\u6B21\u7684\u6269\u5C55\u5B9E\u4F8B\uFF09\uFF1A\u91CD\u65B0\u9009\u4E00\u4E2A\u3002";
770
+ readonly "env.bridge.unknown": "\u6CA1\u8BA4\u51FA\u662F\u54EA\u79CD\u95EE\u9898\uFF1A\u4E0B\u9762\u539F\u59CB\u8F93\u51FA\u91CC\u6709 opencli \u81EA\u5DF1\u7ED9\u7684\u6B65\u9AA4\u3002";
771
+ readonly "env.fix.title": "\u600E\u4E48\u89E3\u51B3";
772
+ readonly "env.fix.why": "\u5DE5\u4F5C\u53F0\u7528\u5B83\u81EA\u5DF1\u90A3\u4EFD opencli\uFF08\u4E0E\u4F60\u5728\u7EC8\u7AEF\u91CC\u90A3\u5957\u5206\u5F00\u88C5\uFF0C\u4E92\u4E0D\u5F71\u54CD\uFF09\uFF0C\u8FD9\u53F0\u673A\u5668\u4E0A\u8FD8\u6CA1\u88C5\u597D\u5B83\u3002";
773
+ readonly "env.fix.whyPath": "opencli \u88C5\u4E0A\u4E86\uFF0C\u4F46\u5F53\u524D\u73AF\u5883\u8FD8\u627E\u4E0D\u5230\u5B83 \u2014\u2014 \u901A\u5E38\u662F PATH \u6216\u7EC8\u7AEF\u4F1A\u8BDD\u7684\u95EE\u9898\u3002";
774
+ readonly "env.fix.whyShell": "\u5DE5\u4F5C\u53F0\u62FF\u4E0D\u5230\u6267\u884C\u547D\u4EE4\u7684\u901A\u9053\uFF0C\u6240\u4EE5\u53D6\u4E0D\u4E86\u6570\u636E \u2014\u2014 \u8FD9\u4E00\u6B65\u7528\u6237\u81EA\u5DF1\u88C5\u4E0D\u4E86\u3002";
775
+ readonly "env.fix.step": "\u5728\u7EC8\u7AEF\u91CC\u8FD0\u884C\u4E0B\u9762\u8FD9\u6761\u547D\u4EE4\uFF0C\u88C5\u597D\u4E4B\u540E\u70B9\u300C\u91CD\u8BD5\u300D\uFF1A";
776
+ readonly "env.fix.stepPath": "\u65B0\u5F00\u4E00\u4E2A\u7EC8\u7AEF\u7A97\u53E3\uFF08\u6216\u786E\u8BA4 npm \u7684\u5168\u5C40 bin \u76EE\u5F55\u5728 PATH \u91CC\uFF09\uFF0C\u7136\u540E\u70B9\u300C\u91CD\u8BD5\u300D\u3002";
777
+ readonly "env.fix.stepShell": "\u91CD\u542F\u4E00\u6B21\u5DE5\u4F5C\u53F0\uFF08\u6216 dsh\uFF09\uFF1B\u5982\u679C\u53CD\u590D\u51FA\u73B0\uFF0C\u8BF4\u660E\u6267\u884C\u901A\u9053\u6CA1\u914D\u597D\u3002";
778
+ readonly "env.fix.permission": "\u6743\u9650\u4E0D\u591F\uFF1A\u5728\u547D\u4EE4\u524D\u52A0 sudo \u91CD\u8DD1\uFF0C\u6216\u5148\u628A npm \u7684\u5168\u5C40\u76EE\u5F55\u914D\u5230\u4F60\u7684\u7528\u6237\u76EE\u5F55\u3002";
779
+ readonly "env.fix.network": "\u7F51\u7EDC\u4E0D\u901A\uFF1A\u68C0\u67E5\u7F51\u7EDC\u6216\u4EE3\u7406\u8BBE\u7F6E\u540E\u91CD\u8BD5\u3002";
780
+ readonly "env.fix.details": "\u8BE6\u7EC6\u8F93\u51FA\uFF08\u6392\u969C\u7528\uFF09";
781
+ readonly "env.retry": "\u91CD\u8BD5";
782
+ readonly "env.copyCommand": "\u590D\u5236\u547D\u4EE4";
783
+ readonly "env.copied": "\u5DF2\u590D\u5236";
784
+ readonly "env.step.opencli": "\u68C0\u6D4B\u5DE5\u4F5C\u53F0\u7684 opencli";
785
+ readonly "env.step.codingPlugin": "\u68C0\u6D4B coding \u63D2\u4EF6";
786
+ readonly "env.step.bridge": "\u68C0\u6D4B\u6D4F\u89C8\u5668\u901A\u9053";
787
+ readonly "env.step.warm": "\u9884\u70ED\u7AD9\u70B9\u767B\u5F55\u6001";
788
+ readonly "env.warm.done": "\u5DF2\u9884\u70ED {n} \u4E2A\u7AD9\u70B9";
789
+ readonly "env.warm.short": "\u8FD9\u6B21\u6CA1\u70ED\u4E0A \u2014\u2014 \u4E0D\u5F71\u54CD\u7528\uFF0C\u9762\u677F\u7B2C\u4E00\u6B21\u8BFB\u53D6\u4F1A\u81EA\u5DF1\u8865";
790
+ readonly "env.unit.missingPlugin": "\u8FD9\u4E2A\u6A21\u5757\u8FD8\u6CA1\u88C5\u597D";
791
+ readonly "env.unit.missingCommandsHint": "\u66F4\u65B0\u4E4B\u540E\u5C31\u80FD\u7528\u4E86\u3002";
792
+ readonly "env.unit.unchecked": "\u68C0\u6D4B\u4E0D\u4E86\uFF1A\u62FF\u4E0D\u5230\u6267\u884C\u901A\u9053";
793
+ readonly "env.unit.uncheckedHint": "\u4E0D\u662F\u8FD9\u4E2A\u6A21\u5757\u7684\u95EE\u9898\uFF0C\u662F\u6267\u884C\u901A\u9053\u4E0D\u53EF\u7528 \u2014\u2014 \u91CD\u542F\u4E00\u6B21\u5DE5\u4F5C\u53F0\u518D\u8BD5\u3002";
794
+ readonly "env.unit.missingCommands": "\u8FD9\u4E2A\u6A21\u5757\u7684\u7248\u672C\u65E7\u4E86";
795
+ readonly "env.unit.hint": "\u88C5\u597D\u4E4B\u540E\u70B9\u91CD\u8BD5\uFF1B\u4E0D\u5F71\u54CD\u5176\u5B83\u6A21\u5757\u3002";
796
+ readonly "rightbar.label": "\u6570\u636E\u9762\u677F";
797
+ readonly "rightbar.expand": "\u5C55\u5F00\u6570\u636E\u9762\u677F";
798
+ readonly "rightbar.collapse": "\u6536\u8D77\u6570\u636E\u9762\u677F";
799
+ readonly "rightbar.refresh": "\u5237\u65B0";
800
+ readonly "rightbar.refreshing": "\u5237\u65B0\u4E2D\u2026";
801
+ readonly "rightbar.updatedAt": "\u66F4\u65B0\u4E8E {time}";
802
+ readonly "rightbar.noProject": "\u5F53\u524D\u4F1A\u8BDD\u6CA1\u6709\u6240\u5C5E\u9879\u76EE";
803
+ readonly "coding.notARepo.title": "\u8FD9\u4E2A\u9879\u76EE\u4E0D\u662F Coding \u4ED3\u5E93";
804
+ readonly "error.unknown": "\u51FA\u9519\u4E86";
805
+ readonly "board.title": "\u770B\u677F";
806
+ readonly "panel.conversation": "\u5BF9\u8BDD";
807
+ readonly "panels.label": "\u5168\u5C40\u9762\u677F";
808
+ };
809
+ 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.installing" | "panels.market.updating" | "panels.market.uninstalling" | "panels.market.confirmUninstall" | "panels.market.confirmUninstallDetail" | "panels.market.confirmYes" | "panels.market.confirmNo" | "panels.market.failed" | "panels.market.needEnv" | "panels.market.noSource" | "panels.market.badSource" | "panels.market.empty" | "panels.market.foot" | "panels.market.recheck" | "panels.market.checkUpdates" | "panels.market.checkedAt" | "panels.market.justNow" | "panels.market.minutesAgo" | "panels.market.hoursAgo" | "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>;
810
+ };
811
+ mergeMessages(base: apiModule.Dictionaries, contributions: readonly apiModule.MessagesContribution[]): apiModule.Dictionaries;
812
+ zh: {
813
+ readonly "brand.name": "\u5DE5\u4F5C\u53F0";
814
+ readonly "toggle.open": "\u6253\u5F00\u4FA7\u8FB9\u680F";
815
+ readonly "toggle.collapse": "\u6536\u8D77\u4FA7\u8FB9\u680F";
816
+ readonly "project.label": "\u5207\u6362\u9879\u76EE";
817
+ readonly "workspace.section": "\u5DE5\u4F5C\u533A";
818
+ readonly "project.none": "\u672A\u9009\u62E9\u9879\u76EE";
819
+ readonly "project.empty": "\u8FD8\u6CA1\u6709\u9879\u76EE\u3002\u7528\u4E0B\u9762\u7684\u300C\u6DFB\u52A0\u9879\u76EE\u300D\u9009\u4E00\u4E2A\u76EE\u5F55\u3002";
820
+ readonly "project.add": "\u6DFB\u52A0\u9879\u76EE\u2026";
821
+ readonly "session.new": "\u65B0\u4F1A\u8BDD";
822
+ readonly "session.new.label": "\u5728\u5F53\u524D\u9879\u76EE\u65B0\u5EFA\u4F1A\u8BDD";
823
+ readonly "session.empty": "\u8FD9\u4E2A\u9879\u76EE\u8FD8\u6CA1\u6709\u4F1A\u8BDD\u3002";
824
+ readonly "session.noProject": "\u5148\u6DFB\u52A0\u4E00\u4E2A\u9879\u76EE\u3002";
825
+ readonly "session.pinned": "\u5DF2\u7F6E\u9876";
826
+ readonly "session.actions": "{name} \u7684\u64CD\u4F5C";
827
+ readonly "status.idle": "\u7A7A\u95F2";
828
+ readonly "status.running": "\u8FD0\u884C\u4E2D";
829
+ readonly "status.waitingApproval": "\u7B49\u5F85\u6388\u6743";
830
+ readonly "status.planReview": "\u7B49\u5F85\u8BA1\u5212\u786E\u8BA4";
831
+ readonly "status.waitingAnswer": "\u7B49\u5F85\u56DE\u7B54";
832
+ readonly "status.completed": "\u5DF2\u5B8C\u6210";
833
+ readonly "status.subagentsRunning.one": "{n} \u4E2A\u5B50\u4EE3\u7406\u8FD0\u884C\u4E2D";
834
+ readonly "status.subagentsRunning.other": "{n} \u4E2A\u5B50\u4EE3\u7406\u8FD0\u884C\u4E2D";
835
+ readonly "time.now": "\u521A\u521A";
836
+ readonly "time.minutes": "{n} \u5206\u949F\u524D";
837
+ readonly "time.hours": "{n} \u5C0F\u65F6\u524D";
838
+ readonly "time.days": "{n} \u5929\u524D";
839
+ readonly "panels.title": "\u9762\u677F\u6A21\u5757";
840
+ readonly "panels.reset": "\u6062\u590D\u9ED8\u8BA4";
841
+ readonly "panels.enabled": "\u8FD9\u4E2A\u9879\u76EE\u5DF2\u542F\u7528";
842
+ readonly "panels.disabled": "\u8FD9\u4E2A\u9879\u76EE\u672A\u542F\u7528";
843
+ readonly "panels.choose": "\u9009\u62E9\u6A21\u5757";
844
+ readonly "panels.failed": "\u6539\u914D\u7F6E\u5931\u8D25\u4E86\uFF0C\u518D\u8BD5\u4E00\u6B21\u3002";
845
+ readonly "panels.hintEffect": "\u505C\u7528 = agent \u62FF\u4E0D\u5230\u76F8\u5173\u6570\u636E";
846
+ readonly "panels.dragHint": "\u62D6\u52A8\u8C03\u6574\u987A\u5E8F";
847
+ readonly "panels.unknownStep": "\u8FD9\u4E00\u5C42\u6CA1\u6709\u5957\u4EF6\u63D0\u4F9B";
848
+ readonly "panels.labelWithHint": "{label}\uFF08{hint}\uFF09";
849
+ readonly "panels.dep.missingPlugin": "\u26A0 \u8FD8\u6CA1\u88C5\u597D";
850
+ readonly "panels.dep.missingCommands": "\u26A0 \u9700\u8981\u66F4\u65B0";
851
+ readonly "panels.dep.unchecked": "\u26A0 \u68C0\u6D4B\u4E0D\u4E86";
852
+ readonly "panels.tab.modules": "\u9762\u677F\u914D\u7F6E";
853
+ readonly "panels.tab.market": "\u5DE5\u4F5C\u53F0\u6A21\u5757\u5E02\u573A";
854
+ readonly "panels.browseMarket": "\u6D4F\u89C8\u6A21\u5757\u5E02\u573A";
855
+ readonly "panels.noneInstalled": "\u8FD9\u4E9B\u6A21\u5757\u8981\u7684\u63D2\u4EF6\u90FD\u8FD8\u6CA1\u88C5";
856
+ readonly "panels.noneInstalledHint": "\u88C5\u597D\u4E4B\u540E\u5B83\u4EEC\u4F1A\u56DE\u5230\u8FD9\u91CC\uFF0C\u518D\u7531\u4F60\u51B3\u5B9A\u653E\u54EA\u51E0\u4E2A\u4E0A\u677F\u3002";
857
+ readonly "panels.market.installed": "\u5DF2\u88C5";
858
+ readonly "panels.market.outdated": "\u8981\u66F4\u65B0";
859
+ readonly "panels.market.hasNew": "\u6709\u65B0\u7248\u672C";
860
+ readonly "panels.market.missing": "\u672A\u88C5";
861
+ readonly "panels.market.unchecked": "\u72B6\u6001\u672A\u77E5";
862
+ readonly "panels.market.checking": "\u68C0\u6D4B\u4E2D";
863
+ readonly "panels.market.sectionInstalled": "\u5DF2\u5B89\u88C5";
864
+ readonly "panels.market.sectionPending": "\u672A\u5B89\u88C5";
865
+ readonly "panels.market.sectionShared": "\u5171\u7528\u4F9D\u8D56";
866
+ readonly "panels.market.sharedUsedBy": "\u4F9B {modules} \u4F7F\u7528";
867
+ readonly "panels.market.listSeparator": "\u3001";
868
+ readonly "panels.market.sharedMissing": "\u672A\u88C5";
869
+ readonly "panels.market.sharedOutdated": "\u6709\u65B0\u7248";
870
+ readonly "panels.market.sharedUnsatisfied": "\u7248\u672C\u4E0D\u5BF9";
871
+ readonly "panels.market.sharedOk": "\u5DF2\u88C5";
872
+ readonly "panels.market.versionArrow": "{from} \u2192 {to}";
873
+ readonly "panels.market.lead": "\u88C5\u5728\u8FD9\u53F0\u673A\u5668\u4E0A\uFF0C\u6240\u6709\u9879\u76EE\u5171\u7528\u3002";
874
+ readonly "panels.market.install": "\u5B89\u88C5";
875
+ readonly "panels.market.update": "\u66F4\u65B0";
876
+ readonly "panels.market.uninstall": "\u5378\u8F7D";
877
+ readonly "panels.market.installing": "\u6B63\u5728\u5B89\u88C5\u2026";
878
+ readonly "panels.market.updating": "\u6B63\u5728\u66F4\u65B0\u2026";
879
+ readonly "panels.market.uninstalling": "\u6B63\u5728\u5378\u8F7D\u2026";
880
+ readonly "panels.market.confirmUninstall": "\u8981\u5378\u8F7D\u5417\uFF1F";
881
+ readonly "panels.market.confirmUninstallDetail": "\u5378\u8F7D\u540E\u8FD9\u53F0\u673A\u5668\u4E0A\u5C31\u6CA1\u6709\u5B83\u4E86\uFF0C\u6240\u6709\u9879\u76EE\u7684\u9762\u677F\u4E5F\u4F1A\u628A\u5B83\u4E00\u8D77\u62FF\u6389\uFF08\u7ED1\u5B9A\u4E0E\u8BBE\u7F6E\u4E0D\u4F1A\u4E22\uFF09\u3002";
882
+ readonly "panels.market.confirmYes": "\u786E\u5B9A\u5378\u8F7D";
883
+ readonly "panels.market.confirmNo": "\u53D6\u6D88";
884
+ readonly "panels.market.failed": "\u6CA1\u6210\u529F\uFF1A{reason}";
885
+ readonly "panels.market.needEnv": "\u5148\u5728\u542F\u52A8\u5DE5\u4F5C\u53F0\u7684\u7EC8\u7AEF\u91CC\u8BBE {env}";
886
+ readonly "panels.market.noSource": "\u8FD9\u4E2A\u6A21\u5757\u6CA1\u58F0\u660E\u600E\u4E48\u88C5\uFF0C\u53EA\u80FD\u81EA\u5DF1\u52A8\u624B";
887
+ readonly "panels.market.badSource": "\u5B89\u88C5\u65B9\u5F0F\u6CA1\u5199\u5168\uFF0C\u53EA\u80FD\u81EA\u5DF1\u52A8\u624B";
888
+ readonly "panels.market.empty": "\u6682\u65E0\u53EF\u7528\u6A21\u5757";
889
+ 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";
890
+ readonly "panels.market.recheck": "\u91CD\u65B0\u68C0\u67E5\u66F4\u65B0";
891
+ readonly "panels.market.checkUpdates": "\u68C0\u67E5\u66F4\u65B0";
892
+ readonly "panels.market.checkedAt": "\u6700\u8FD1\u68C0\u67E5\uFF1A{time}";
893
+ readonly "panels.market.justNow": "\u521A\u521A";
894
+ readonly "panels.market.minutesAgo": "{n} \u5206\u949F\u524D";
895
+ readonly "panels.market.hoursAgo": "{n} \u5C0F\u65F6\u524D";
896
+ readonly "blocker.fix.install": "\u5E2E\u6211\u5B89\u88C5";
897
+ readonly "blocker.fix.update": "\u5E2E\u6211\u5347\u7EA7";
898
+ readonly "blocker.fix.running": "\u6B63\u5728\u6267\u884C\u2026";
899
+ readonly "blocker.fix.failed": "\u6267\u884C\u5931\u8D25\uFF1A";
900
+ readonly "blocker.retry": "\u91CD\u8BD5";
901
+ readonly "blocker.retry.running": "\u91CD\u8BD5\u4E2D\u2026";
902
+ readonly "blocker.copy": "\u590D\u5236\u547D\u4EE4";
903
+ readonly "blocker.market.open": "\u53BB\u6A21\u5757\u5E02\u573A";
904
+ readonly "blocker.login.title": "\u9700\u8981\u767B\u5F55 {platform}";
905
+ readonly "blocker.login.titleGeneric": "\u9700\u8981\u767B\u5F55";
906
+ readonly "blocker.login.hint": "\u5DE5\u4F5C\u53F0\u7528\u4F60\u7684\u6D4F\u89C8\u5668\u767B\u5F55\u6001\uFF1B\u767B\u5F55\u4E00\u6B21\u5C31\u884C\uFF0C\u4E4B\u540E\u4E0D\u7528\u518D\u767B\u3002";
907
+ readonly "blocker.login.go": "\u53BB\u767B\u5F55";
908
+ readonly "blocker.login.manual": "\u5728\u7EC8\u7AEF\u6267\u884C `opencli coding team-current`\uFF0C\u6309\u63D0\u793A\u5B8C\u6210\u767B\u5F55\u540E\u91CD\u8BD5\u3002";
909
+ readonly "blocker.forbidden.title": "\u6CA1\u6709\u6743\u9650\u8BBF\u95EE {platform}";
910
+ readonly "blocker.forbidden.titleGeneric": "\u6CA1\u6709\u6743\u9650";
911
+ readonly "blocker.forbidden.hint": "\u8D26\u53F7\u5DF2\u767B\u5F55\uFF0C\u4F46\u6CA1\u6709\u8FD9\u4E2A\u9879\u76EE/\u4ED3\u5E93\u7684\u6743\u9650\uFF1B\u7533\u8BF7\u4E4B\u540E\u518D\u8BD5\u3002";
912
+ readonly "blocker.forbidden.open": "\u6253\u5F00\u6743\u9650\u9875";
913
+ readonly "blocker.timeout.hint": "\u65E0\u5934\u6D4F\u89C8\u5668\u53EF\u80FD\u6CA1\u8D77\u6765\uFF0C\u91CD\u8BD5\u4E00\u6B21\u901A\u5E38\u5C31\u597D\u3002";
914
+ readonly "blocker.exec.hint": "\u786E\u8BA4 opencli \u5DF2\u5B89\u88C5\u4E14\u5728 PATH \u91CC\uFF08which opencli\uFF09\u3002";
915
+ readonly "blocker.unknown.title": "\u51FA\u4E86\u70B9\u95EE\u9898";
916
+ readonly "panels.reading": "\u6B63\u5728\u8BFB\u53D6\u9762\u677F\u914D\u7F6E\u2026";
917
+ readonly "panels.empty": "\u9762\u677F\u91CC\u8FD8\u6CA1\u6709\u6A21\u5757";
918
+ readonly "panels.emptyHint": "\u4E5F\u53EF\u4EE5\u76F4\u63A5\u8DDF agent \u8BF4\uFF1A\u300C\u628A\u67D0\u4E2A\u6A21\u5757\u52A0\u5230\u9762\u677F\u300D\u3002";
919
+ readonly "env.title": "\u51C6\u5907\u5DE5\u4F5C\u53F0";
920
+ readonly "env.checking": "\u6B63\u5728\u68C0\u6D4B\u8FD0\u884C\u73AF\u5883\u2026";
921
+ readonly "env.installing": "\u6B63\u5728\u5B89\u88C5\u7F3A\u5931\u7684\u4F9D\u8D56\u2026";
922
+ readonly "env.failed": "\u8FD8\u5DEE\u4E00\u6B65\u5C31\u80FD\u7528\u4E86";
923
+ readonly "env.elapsed": "\u5DF2\u7B49\u5F85 {seconds} \u79D2";
924
+ readonly "env.stepFailed.install": "\u88C5\u4E0D\u4E0A";
925
+ readonly "env.stepFailed.path": "\u88C5\u4E86\u4F46\u8FD8\u627E\u4E0D\u5230";
926
+ readonly "env.stepFailed.shell": "\u6267\u884C\u901A\u9053\u4E0D\u53EF\u7528";
927
+ readonly "env.bridge.ok": "\u5DF2\u8FDE\u63A5";
928
+ readonly "env.bridge.short": "\u6CA1\u8FDE\u4E0A";
929
+ readonly "env.bridge.why": "\u9762\u677F\u7684\u6570\u636E\u8981\u8D70\u4F60\u6D4F\u89C8\u5668\u91CC\u7684\u767B\u5F55\u6001\uFF1A\u8FD9\u4E2A\u901A\u9053\u6CA1\u8FDE\u4E0A\uFF0C\u6A21\u5757\u5C31\u53D6\u4E0D\u5230\u6570\u636E\uFF08\u4E0D\u62E6\u8DEF\uFF0C\u4F46\u5148\u4FEE\u597D\u5B83\uFF09\u3002";
930
+ readonly "env.bridge.daemon": "\u540E\u53F0\u670D\u52A1\u6CA1\u8D77\u6765\uFF1A\u6B63\u5E38\u5B83\u4F1A\u81EA\u5DF1\u8D77\uFF0C\u5148\u5728\u7EC8\u7AEF\u8DD1\u4E0B\u9762\u8FD9\u6761\u547D\u4EE4\u3002";
931
+ readonly "env.bridge.extension": "\u6D4F\u89C8\u5668\u6269\u5C55\u6CA1\u8FDE\u4E0A\uFF1A\u5728 Chrome \u5E94\u7528\u5546\u5E97\u88C5\u4E00\u6B21\u5C31\u597D\uFF08\u88C5\u5B8C\u56DE\u6765\u70B9\u300C\u91CD\u8BD5\u300D\uFF09\u3002\u5DF2\u7ECF\u88C5\u8FC7\u7684\u8BDD\uFF0C\u5148\u8DD1\u4E0B\u9762\u8FD9\u6761\u547D\u4EE4\u3002";
932
+ readonly "env.bridge.extensionLink": "\u53BB Chrome \u5E94\u7528\u5546\u5E97\u88C5\u6269\u5C55";
933
+ readonly "env.bridge.profile": "\u8FDE\u4E0A\u4E86\u591A\u4E2A\u6D4F\u89C8\u5668 profile\uFF0C\u4F46\u6CA1\u9009\u9ED8\u8BA4\u7684\u90A3\u4E2A\uFF1A\u5148\u770B\u6709\u54EA\u4E9B\uFF08\u4E0B\u9762\u8FD9\u6761\u547D\u4EE4\uFF09\uFF0C\u518D\u9009\u4E00\u4E2A\u3002";
934
+ readonly "env.bridge.stale": "\u9ED8\u8BA4\u7684\u6D4F\u89C8\u5668 profile \u5DF2\u7ECF\u5931\u6548\uFF08\u5B83\u8BB0\u7684\u662F\u4E0A\u4E00\u6B21\u7684\u6269\u5C55\u5B9E\u4F8B\uFF09\uFF1A\u91CD\u65B0\u9009\u4E00\u4E2A\u3002";
935
+ readonly "env.bridge.unknown": "\u6CA1\u8BA4\u51FA\u662F\u54EA\u79CD\u95EE\u9898\uFF1A\u4E0B\u9762\u539F\u59CB\u8F93\u51FA\u91CC\u6709 opencli \u81EA\u5DF1\u7ED9\u7684\u6B65\u9AA4\u3002";
936
+ readonly "env.fix.title": "\u600E\u4E48\u89E3\u51B3";
937
+ readonly "env.fix.why": "\u5DE5\u4F5C\u53F0\u7528\u5B83\u81EA\u5DF1\u90A3\u4EFD opencli\uFF08\u4E0E\u4F60\u5728\u7EC8\u7AEF\u91CC\u90A3\u5957\u5206\u5F00\u88C5\uFF0C\u4E92\u4E0D\u5F71\u54CD\uFF09\uFF0C\u8FD9\u53F0\u673A\u5668\u4E0A\u8FD8\u6CA1\u88C5\u597D\u5B83\u3002";
938
+ readonly "env.fix.whyPath": "opencli \u88C5\u4E0A\u4E86\uFF0C\u4F46\u5F53\u524D\u73AF\u5883\u8FD8\u627E\u4E0D\u5230\u5B83 \u2014\u2014 \u901A\u5E38\u662F PATH \u6216\u7EC8\u7AEF\u4F1A\u8BDD\u7684\u95EE\u9898\u3002";
939
+ readonly "env.fix.whyShell": "\u5DE5\u4F5C\u53F0\u62FF\u4E0D\u5230\u6267\u884C\u547D\u4EE4\u7684\u901A\u9053\uFF0C\u6240\u4EE5\u53D6\u4E0D\u4E86\u6570\u636E \u2014\u2014 \u8FD9\u4E00\u6B65\u7528\u6237\u81EA\u5DF1\u88C5\u4E0D\u4E86\u3002";
940
+ readonly "env.fix.step": "\u5728\u7EC8\u7AEF\u91CC\u8FD0\u884C\u4E0B\u9762\u8FD9\u6761\u547D\u4EE4\uFF0C\u88C5\u597D\u4E4B\u540E\u70B9\u300C\u91CD\u8BD5\u300D\uFF1A";
941
+ readonly "env.fix.stepPath": "\u65B0\u5F00\u4E00\u4E2A\u7EC8\u7AEF\u7A97\u53E3\uFF08\u6216\u786E\u8BA4 npm \u7684\u5168\u5C40 bin \u76EE\u5F55\u5728 PATH \u91CC\uFF09\uFF0C\u7136\u540E\u70B9\u300C\u91CD\u8BD5\u300D\u3002";
942
+ readonly "env.fix.stepShell": "\u91CD\u542F\u4E00\u6B21\u5DE5\u4F5C\u53F0\uFF08\u6216 dsh\uFF09\uFF1B\u5982\u679C\u53CD\u590D\u51FA\u73B0\uFF0C\u8BF4\u660E\u6267\u884C\u901A\u9053\u6CA1\u914D\u597D\u3002";
943
+ readonly "env.fix.permission": "\u6743\u9650\u4E0D\u591F\uFF1A\u5728\u547D\u4EE4\u524D\u52A0 sudo \u91CD\u8DD1\uFF0C\u6216\u5148\u628A npm \u7684\u5168\u5C40\u76EE\u5F55\u914D\u5230\u4F60\u7684\u7528\u6237\u76EE\u5F55\u3002";
944
+ readonly "env.fix.network": "\u7F51\u7EDC\u4E0D\u901A\uFF1A\u68C0\u67E5\u7F51\u7EDC\u6216\u4EE3\u7406\u8BBE\u7F6E\u540E\u91CD\u8BD5\u3002";
945
+ readonly "env.fix.details": "\u8BE6\u7EC6\u8F93\u51FA\uFF08\u6392\u969C\u7528\uFF09";
946
+ readonly "env.retry": "\u91CD\u8BD5";
947
+ readonly "env.copyCommand": "\u590D\u5236\u547D\u4EE4";
948
+ readonly "env.copied": "\u5DF2\u590D\u5236";
949
+ readonly "env.step.opencli": "\u68C0\u6D4B\u5DE5\u4F5C\u53F0\u7684 opencli";
950
+ readonly "env.step.codingPlugin": "\u68C0\u6D4B coding \u63D2\u4EF6";
951
+ readonly "env.step.bridge": "\u68C0\u6D4B\u6D4F\u89C8\u5668\u901A\u9053";
952
+ readonly "env.step.warm": "\u9884\u70ED\u7AD9\u70B9\u767B\u5F55\u6001";
953
+ readonly "env.warm.done": "\u5DF2\u9884\u70ED {n} \u4E2A\u7AD9\u70B9";
954
+ readonly "env.warm.short": "\u8FD9\u6B21\u6CA1\u70ED\u4E0A \u2014\u2014 \u4E0D\u5F71\u54CD\u7528\uFF0C\u9762\u677F\u7B2C\u4E00\u6B21\u8BFB\u53D6\u4F1A\u81EA\u5DF1\u8865";
955
+ readonly "env.unit.missingPlugin": "\u8FD9\u4E2A\u6A21\u5757\u8FD8\u6CA1\u88C5\u597D";
956
+ readonly "env.unit.missingCommandsHint": "\u66F4\u65B0\u4E4B\u540E\u5C31\u80FD\u7528\u4E86\u3002";
957
+ readonly "env.unit.unchecked": "\u68C0\u6D4B\u4E0D\u4E86\uFF1A\u62FF\u4E0D\u5230\u6267\u884C\u901A\u9053";
958
+ readonly "env.unit.uncheckedHint": "\u4E0D\u662F\u8FD9\u4E2A\u6A21\u5757\u7684\u95EE\u9898\uFF0C\u662F\u6267\u884C\u901A\u9053\u4E0D\u53EF\u7528 \u2014\u2014 \u91CD\u542F\u4E00\u6B21\u5DE5\u4F5C\u53F0\u518D\u8BD5\u3002";
959
+ readonly "env.unit.missingCommands": "\u8FD9\u4E2A\u6A21\u5757\u7684\u7248\u672C\u65E7\u4E86";
960
+ readonly "env.unit.hint": "\u88C5\u597D\u4E4B\u540E\u70B9\u91CD\u8BD5\uFF1B\u4E0D\u5F71\u54CD\u5176\u5B83\u6A21\u5757\u3002";
961
+ readonly "rightbar.label": "\u6570\u636E\u9762\u677F";
962
+ readonly "rightbar.expand": "\u5C55\u5F00\u6570\u636E\u9762\u677F";
963
+ readonly "rightbar.collapse": "\u6536\u8D77\u6570\u636E\u9762\u677F";
964
+ readonly "rightbar.refresh": "\u5237\u65B0";
965
+ readonly "rightbar.refreshing": "\u5237\u65B0\u4E2D\u2026";
966
+ readonly "rightbar.updatedAt": "\u66F4\u65B0\u4E8E {time}";
967
+ readonly "rightbar.noProject": "\u5F53\u524D\u4F1A\u8BDD\u6CA1\u6709\u6240\u5C5E\u9879\u76EE";
968
+ readonly "coding.notARepo.title": "\u8FD9\u4E2A\u9879\u76EE\u4E0D\u662F Coding \u4ED3\u5E93";
969
+ readonly "error.unknown": "\u51FA\u9519\u4E86";
970
+ readonly "board.title": "\u770B\u677F";
971
+ readonly "panel.conversation": "\u5BF9\u8BDD";
972
+ readonly "panels.label": "\u5168\u5C40\u9762\u677F";
973
+ };
974
+ blockerPending(busy: boolean, running: string | null): boolean;
975
+ blockerActionLabel(action: apiModule.BlockerActionShape, state: apiModule.BlockerLabelState, t: apiModule.BlockerLabelTranslate): string;
976
+ holdBusy(since: number | null, now: number, floorMs: number): apiModule.BusyHold;
977
+ h: typeof import("react").createElement;
978
+ Fragment: import("react").ExoticComponent<import("react").FragmentProps>;
979
+ useState: typeof import("react").useState;
980
+ useEffect: typeof import("react").useEffect;
981
+ useMemo: typeof import("react").useMemo;
982
+ useCallback: typeof import("react").useCallback;
983
+ useRef: typeof import("react").useRef;
984
+ useSyncExternalStore: typeof import("react").useSyncExternalStore;
985
+ quoteShellArg(value: unknown): string;
986
+ tailLines(text: string | null | undefined, lines?: number): string;
987
+ parseJsonLoose(text: string | null | undefined): unknown;
988
+ excerpt(text: string | null | undefined, limit?: number): string;
989
+ cx(...parts: Array<string | false | null | undefined>): string;
990
+ relativeTime(epochMs: number, t: apiModule.TimeTranslate): string;
991
+ shortenPath(path: unknown): string;
992
+ parseLocalTimestamp(text: string | null | undefined): number;
993
+ LINK_BUTTON_STYLE: {
994
+ readonly display: "inline-flex";
995
+ readonly alignItems: "center";
996
+ readonly gap: "var(--wb-gap-xs)";
997
+ readonly textDecoration: "none";
998
+ };
999
+ };
1000
+ lib: {
1001
+ blockerOfError(error: apiModule.ApiError | undefined, t: apiModule.Translate, context?: {
1002
+ path?: string | null;
1003
+ platform?: string;
1004
+ }): apiModule.ModuleBlocker;
1005
+ blockerOfCapability(capability: apiModule.CapabilityPayload, t: apiModule.Translate): apiModule.ModuleBlocker | undefined;
1006
+ encodeRef(ref: apiModule.ContextRef): string;
1007
+ decodeRef(text: string): apiModule.ContextRef | undefined;
1008
+ markerBody(encoded: string): string;
1009
+ buildMarker(ref: apiModule.ContextRef): string;
1010
+ parseMarkers(text: string): apiModule.ContextRef[];
1011
+ CONTEXT_MARKER_NAME: "\u5DE5\u4F5C\u53F0";
1012
+ unitFactScope(unit: string): string;
1013
+ isFactScope(name: string): boolean;
1014
+ scopePrefixOf(name: string): string;
1015
+ createFactChannel(options: {
1016
+ readonly transport: apiModule.FactTransport;
1017
+ }): apiModule.FactChannel;
1018
+ parseFactFrame(data: unknown): apiModule.FactFrame | null;
1019
+ factOfRoute(route: string): string;
1020
+ FACT_SCOPE_SUFFIX: "*";
1021
+ writeRoute(channel: apiModule.WriteChannel, resource: string): string;
1022
+ writeOutcomeOf<T>(response: apiModule.ApiResponse<T> | null, networkText: string): apiModule.WriteOutcome<T>;
1023
+ runsRouteOf(unit: string): string;
1024
+ longTaskPollMs(live: boolean, override?: number | undefined): number;
1025
+ longTaskRunsOf<T>(state: {
1026
+ readonly phase?: string | undefined;
1027
+ readonly value?: apiModule.LongTasksPayload | undefined;
1028
+ }): readonly T[];
1029
+ longTaskDot(status: apiModule.LongTaskStatus): "ongoing" | "done" | "error" | "idle";
1030
+ LONG_TASK_POLL_MS: 1500;
1031
+ LONG_TASK_IDLE_MS: 10000;
1032
+ gateOf(capability: apiModule.CapabilityPayload | null, mode: apiModule.GateMode): apiModule.UnitGate;
1033
+ splitBlocker(candidates: readonly (apiModule.ModuleBlocker | undefined)[]): apiModule.UnitBlockers;
1034
+ probeKeyOf(error: apiModule.ApiError | undefined): string | null;
1035
+ apiGet<T>(route: string, query?: apiModule.Query, options?: apiModule.ApiGetOptions): Promise<apiModule.ApiResponse<T>>;
1036
+ apiPost<T>(route: string, body: Record<string, unknown>): Promise<apiModule.ApiResponse<T>>;
1037
+ ApprovalDetail(props: apiModule.ApprovalDetailProps): JSX.Element | null;
1038
+ CardHead({ t, title, meta, refreshing, onRefresh, gear, gearOpen, onToggleGear, platformHref, platform, platformTitle, }: apiModule.CardHeadProps): JSX.Element;
1039
+ ChoiceGroup({ label, name, value, options, disabled, onChange }: apiModule.ChoiceGroupProps): JSX.Element;
1040
+ LongTaskRow(props: apiModule.LongTaskRowProps): JSX.Element;
1041
+ MockStrip({ mocks, index, onPick, note, real, }: {
1042
+ readonly mocks: readonly {
1043
+ readonly id: string;
1044
+ readonly label: string;
1045
+ }[];
1046
+ readonly index: number;
1047
+ readonly onPick: (next: number) => void;
1048
+ readonly note?: string;
1049
+ readonly real?: {
1050
+ readonly label: string;
1051
+ readonly active: boolean;
1052
+ readonly onPick: () => void;
1053
+ } | undefined;
1054
+ }): JSX.Element;
1055
+ SkeletonRows({ rows }: {
1056
+ rows?: number;
1057
+ }): JSX.Element;
1058
+ CenteredState({ icon, title, hint, detail, action, compact }: apiModule.CenteredStateProps): JSX.Element;
1059
+ EmptyState({ text, icon, compact }: {
1060
+ text: string;
1061
+ icon?: apiModule.ReactNode;
1062
+ compact?: boolean;
1063
+ }): JSX.Element;
1064
+ SaveBar({ busy, disabled, labels, onCancel, onSave }: apiModule.SaveBarProps): JSX.Element;
1065
+ StateDot({ state, size }: {
1066
+ state: apiModule.DotState;
1067
+ size: number;
1068
+ }): JSX.Element;
1069
+ IconPanelLeft({ size }: apiModule.IconProps): JSX.Element;
1070
+ IconFolder({ size }: apiModule.IconProps): JSX.Element;
1071
+ IconFolderOpen({ size }: apiModule.IconProps): JSX.Element;
1072
+ IconChevronDown({ size }: apiModule.IconProps): JSX.Element;
1073
+ IconPlus({ size }: apiModule.IconProps): JSX.Element;
1074
+ IconEllipsis({ size }: apiModule.IconProps): JSX.Element;
1075
+ IconSettings({ size }: apiModule.IconProps): JSX.Element;
1076
+ IconPin({ size }: apiModule.IconProps): JSX.Element;
1077
+ IconCheck({ size }: apiModule.IconProps): JSX.Element;
1078
+ IconNewChat({ size }: apiModule.IconProps): JSX.Element;
1079
+ IconRefresh({ size }: apiModule.IconProps): JSX.Element;
1080
+ IconRightUp({ size }: apiModule.IconProps): JSX.Element;
1081
+ IconConversation({ size }: apiModule.IconProps): JSX.Element;
1082
+ IconBrandMark({ size }: apiModule.IconProps): JSX.Element;
1083
+ IconModules({ size }: apiModule.IconProps): JSX.Element;
1084
+ PLUGIN_ID: "@dsh-workbench/core";
1085
+ API_PREFIX: "/workbench/api";
1086
+ PREFS_PREFIX: "/workbench/api/prefs";
1087
+ EVENTS_PATH: "/workbench/events";
1088
+ ACTIONS_PREFIX: "/workbench/api/actions";
1089
+ PROVISION_PREFIX: "/workbench/api/provision";
1090
+ OPENCLI_PIN: "1.8.8";
1091
+ CODING_ISSUES_SERVICE: "workbenchCodingIssues";
1092
+ PANELS_SERVICE: "workbenchPanels";
1093
+ UNITS_SERVICE: "workbenchUnits";
1094
+ PANEL_LIST_LIMIT: 50;
1095
+ OPENCLI_TIMEOUT_MS: 120000;
1096
+ OPENCLI_MAX_CONCURRENT: 4;
1097
+ WARM_TIMEOUT_MS: 20000;
1098
+ INSTALL_TIMEOUT_MS: 300000;
1099
+ VERSION_CHECK_TIMEOUT_MS: 10000;
1100
+ VERSION_CHECK_TTL_MS: 600000;
1101
+ PROBE_TTL_MS: 30000;
1102
+ MIN_BUSY_MS: 500;
1103
+ HANDOFF_TTL_MS: 15000;
1104
+ GIT_TIMEOUT_MS: 10000;
1105
+ PANEL_POLL_MS: 2000;
1106
+ DEFAULT_WORKSPACE_TITLE: "default-workspace";
1107
+ STORAGE_KEY_PROJECT: "dsh-workbench.project";
1108
+ STORAGE_KEY_RIGHTBAR: "dsh-workbench.rightbar.expanded";
1109
+ LOCALE_NS: "workbench";
1110
+ LOCALES: readonly ["zh", "en"];
1111
+ readText(key: string): string | null;
1112
+ writeText(key: string, value: string | null): void;
1113
+ readFlag(key: string, fallback: boolean): boolean;
1114
+ writeFlag(key: string, value: boolean): void;
1115
+ en: Record<keyof apiModule.WorkbenchMessages, string>;
1116
+ dictionaries: {
1117
+ zh: {
1118
+ readonly "brand.name": "\u5DE5\u4F5C\u53F0";
1119
+ readonly "toggle.open": "\u6253\u5F00\u4FA7\u8FB9\u680F";
1120
+ readonly "toggle.collapse": "\u6536\u8D77\u4FA7\u8FB9\u680F";
1121
+ readonly "project.label": "\u5207\u6362\u9879\u76EE";
1122
+ readonly "workspace.section": "\u5DE5\u4F5C\u533A";
1123
+ readonly "project.none": "\u672A\u9009\u62E9\u9879\u76EE";
1124
+ readonly "project.empty": "\u8FD8\u6CA1\u6709\u9879\u76EE\u3002\u7528\u4E0B\u9762\u7684\u300C\u6DFB\u52A0\u9879\u76EE\u300D\u9009\u4E00\u4E2A\u76EE\u5F55\u3002";
1125
+ readonly "project.add": "\u6DFB\u52A0\u9879\u76EE\u2026";
1126
+ readonly "session.new": "\u65B0\u4F1A\u8BDD";
1127
+ readonly "session.new.label": "\u5728\u5F53\u524D\u9879\u76EE\u65B0\u5EFA\u4F1A\u8BDD";
1128
+ readonly "session.empty": "\u8FD9\u4E2A\u9879\u76EE\u8FD8\u6CA1\u6709\u4F1A\u8BDD\u3002";
1129
+ readonly "session.noProject": "\u5148\u6DFB\u52A0\u4E00\u4E2A\u9879\u76EE\u3002";
1130
+ readonly "session.pinned": "\u5DF2\u7F6E\u9876";
1131
+ readonly "session.actions": "{name} \u7684\u64CD\u4F5C";
1132
+ readonly "status.idle": "\u7A7A\u95F2";
1133
+ readonly "status.running": "\u8FD0\u884C\u4E2D";
1134
+ readonly "status.waitingApproval": "\u7B49\u5F85\u6388\u6743";
1135
+ readonly "status.planReview": "\u7B49\u5F85\u8BA1\u5212\u786E\u8BA4";
1136
+ readonly "status.waitingAnswer": "\u7B49\u5F85\u56DE\u7B54";
1137
+ readonly "status.completed": "\u5DF2\u5B8C\u6210";
1138
+ readonly "status.subagentsRunning.one": "{n} \u4E2A\u5B50\u4EE3\u7406\u8FD0\u884C\u4E2D";
1139
+ readonly "status.subagentsRunning.other": "{n} \u4E2A\u5B50\u4EE3\u7406\u8FD0\u884C\u4E2D";
1140
+ readonly "time.now": "\u521A\u521A";
1141
+ readonly "time.minutes": "{n} \u5206\u949F\u524D";
1142
+ readonly "time.hours": "{n} \u5C0F\u65F6\u524D";
1143
+ readonly "time.days": "{n} \u5929\u524D";
1144
+ readonly "panels.title": "\u9762\u677F\u6A21\u5757";
1145
+ readonly "panels.reset": "\u6062\u590D\u9ED8\u8BA4";
1146
+ readonly "panels.enabled": "\u8FD9\u4E2A\u9879\u76EE\u5DF2\u542F\u7528";
1147
+ readonly "panels.disabled": "\u8FD9\u4E2A\u9879\u76EE\u672A\u542F\u7528";
1148
+ readonly "panels.choose": "\u9009\u62E9\u6A21\u5757";
1149
+ readonly "panels.failed": "\u6539\u914D\u7F6E\u5931\u8D25\u4E86\uFF0C\u518D\u8BD5\u4E00\u6B21\u3002";
1150
+ readonly "panels.hintEffect": "\u505C\u7528 = agent \u62FF\u4E0D\u5230\u76F8\u5173\u6570\u636E";
1151
+ readonly "panels.dragHint": "\u62D6\u52A8\u8C03\u6574\u987A\u5E8F";
1152
+ readonly "panels.unknownStep": "\u8FD9\u4E00\u5C42\u6CA1\u6709\u5957\u4EF6\u63D0\u4F9B";
1153
+ readonly "panels.labelWithHint": "{label}\uFF08{hint}\uFF09";
1154
+ readonly "panels.dep.missingPlugin": "\u26A0 \u8FD8\u6CA1\u88C5\u597D";
1155
+ readonly "panels.dep.missingCommands": "\u26A0 \u9700\u8981\u66F4\u65B0";
1156
+ readonly "panels.dep.unchecked": "\u26A0 \u68C0\u6D4B\u4E0D\u4E86";
1157
+ readonly "panels.tab.modules": "\u9762\u677F\u914D\u7F6E";
1158
+ readonly "panels.tab.market": "\u5DE5\u4F5C\u53F0\u6A21\u5757\u5E02\u573A";
1159
+ readonly "panels.browseMarket": "\u6D4F\u89C8\u6A21\u5757\u5E02\u573A";
1160
+ readonly "panels.noneInstalled": "\u8FD9\u4E9B\u6A21\u5757\u8981\u7684\u63D2\u4EF6\u90FD\u8FD8\u6CA1\u88C5";
1161
+ readonly "panels.noneInstalledHint": "\u88C5\u597D\u4E4B\u540E\u5B83\u4EEC\u4F1A\u56DE\u5230\u8FD9\u91CC\uFF0C\u518D\u7531\u4F60\u51B3\u5B9A\u653E\u54EA\u51E0\u4E2A\u4E0A\u677F\u3002";
1162
+ readonly "panels.market.installed": "\u5DF2\u88C5";
1163
+ readonly "panels.market.outdated": "\u8981\u66F4\u65B0";
1164
+ readonly "panels.market.hasNew": "\u6709\u65B0\u7248\u672C";
1165
+ readonly "panels.market.missing": "\u672A\u88C5";
1166
+ readonly "panels.market.unchecked": "\u72B6\u6001\u672A\u77E5";
1167
+ readonly "panels.market.checking": "\u68C0\u6D4B\u4E2D";
1168
+ readonly "panels.market.sectionInstalled": "\u5DF2\u5B89\u88C5";
1169
+ readonly "panels.market.sectionPending": "\u672A\u5B89\u88C5";
1170
+ readonly "panels.market.sectionShared": "\u5171\u7528\u4F9D\u8D56";
1171
+ readonly "panels.market.sharedUsedBy": "\u4F9B {modules} \u4F7F\u7528";
1172
+ readonly "panels.market.listSeparator": "\u3001";
1173
+ readonly "panels.market.sharedMissing": "\u672A\u88C5";
1174
+ readonly "panels.market.sharedOutdated": "\u6709\u65B0\u7248";
1175
+ readonly "panels.market.sharedUnsatisfied": "\u7248\u672C\u4E0D\u5BF9";
1176
+ readonly "panels.market.sharedOk": "\u5DF2\u88C5";
1177
+ readonly "panels.market.versionArrow": "{from} \u2192 {to}";
1178
+ readonly "panels.market.lead": "\u88C5\u5728\u8FD9\u53F0\u673A\u5668\u4E0A\uFF0C\u6240\u6709\u9879\u76EE\u5171\u7528\u3002";
1179
+ readonly "panels.market.install": "\u5B89\u88C5";
1180
+ readonly "panels.market.update": "\u66F4\u65B0";
1181
+ readonly "panels.market.uninstall": "\u5378\u8F7D";
1182
+ readonly "panels.market.installing": "\u6B63\u5728\u5B89\u88C5\u2026";
1183
+ readonly "panels.market.updating": "\u6B63\u5728\u66F4\u65B0\u2026";
1184
+ readonly "panels.market.uninstalling": "\u6B63\u5728\u5378\u8F7D\u2026";
1185
+ readonly "panels.market.confirmUninstall": "\u8981\u5378\u8F7D\u5417\uFF1F";
1186
+ readonly "panels.market.confirmUninstallDetail": "\u5378\u8F7D\u540E\u8FD9\u53F0\u673A\u5668\u4E0A\u5C31\u6CA1\u6709\u5B83\u4E86\uFF0C\u6240\u6709\u9879\u76EE\u7684\u9762\u677F\u4E5F\u4F1A\u628A\u5B83\u4E00\u8D77\u62FF\u6389\uFF08\u7ED1\u5B9A\u4E0E\u8BBE\u7F6E\u4E0D\u4F1A\u4E22\uFF09\u3002";
1187
+ readonly "panels.market.confirmYes": "\u786E\u5B9A\u5378\u8F7D";
1188
+ readonly "panels.market.confirmNo": "\u53D6\u6D88";
1189
+ readonly "panels.market.failed": "\u6CA1\u6210\u529F\uFF1A{reason}";
1190
+ readonly "panels.market.needEnv": "\u5148\u5728\u542F\u52A8\u5DE5\u4F5C\u53F0\u7684\u7EC8\u7AEF\u91CC\u8BBE {env}";
1191
+ readonly "panels.market.noSource": "\u8FD9\u4E2A\u6A21\u5757\u6CA1\u58F0\u660E\u600E\u4E48\u88C5\uFF0C\u53EA\u80FD\u81EA\u5DF1\u52A8\u624B";
1192
+ readonly "panels.market.badSource": "\u5B89\u88C5\u65B9\u5F0F\u6CA1\u5199\u5168\uFF0C\u53EA\u80FD\u81EA\u5DF1\u52A8\u624B";
1193
+ readonly "panels.market.empty": "\u6682\u65E0\u53EF\u7528\u6A21\u5757";
1194
+ 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";
1195
+ readonly "panels.market.recheck": "\u91CD\u65B0\u68C0\u67E5\u66F4\u65B0";
1196
+ readonly "panels.market.checkUpdates": "\u68C0\u67E5\u66F4\u65B0";
1197
+ readonly "panels.market.checkedAt": "\u6700\u8FD1\u68C0\u67E5\uFF1A{time}";
1198
+ readonly "panels.market.justNow": "\u521A\u521A";
1199
+ readonly "panels.market.minutesAgo": "{n} \u5206\u949F\u524D";
1200
+ readonly "panels.market.hoursAgo": "{n} \u5C0F\u65F6\u524D";
1201
+ readonly "blocker.fix.install": "\u5E2E\u6211\u5B89\u88C5";
1202
+ readonly "blocker.fix.update": "\u5E2E\u6211\u5347\u7EA7";
1203
+ readonly "blocker.fix.running": "\u6B63\u5728\u6267\u884C\u2026";
1204
+ readonly "blocker.fix.failed": "\u6267\u884C\u5931\u8D25\uFF1A";
1205
+ readonly "blocker.retry": "\u91CD\u8BD5";
1206
+ readonly "blocker.retry.running": "\u91CD\u8BD5\u4E2D\u2026";
1207
+ readonly "blocker.copy": "\u590D\u5236\u547D\u4EE4";
1208
+ readonly "blocker.market.open": "\u53BB\u6A21\u5757\u5E02\u573A";
1209
+ readonly "blocker.login.title": "\u9700\u8981\u767B\u5F55 {platform}";
1210
+ readonly "blocker.login.titleGeneric": "\u9700\u8981\u767B\u5F55";
1211
+ readonly "blocker.login.hint": "\u5DE5\u4F5C\u53F0\u7528\u4F60\u7684\u6D4F\u89C8\u5668\u767B\u5F55\u6001\uFF1B\u767B\u5F55\u4E00\u6B21\u5C31\u884C\uFF0C\u4E4B\u540E\u4E0D\u7528\u518D\u767B\u3002";
1212
+ readonly "blocker.login.go": "\u53BB\u767B\u5F55";
1213
+ readonly "blocker.login.manual": "\u5728\u7EC8\u7AEF\u6267\u884C `opencli coding team-current`\uFF0C\u6309\u63D0\u793A\u5B8C\u6210\u767B\u5F55\u540E\u91CD\u8BD5\u3002";
1214
+ readonly "blocker.forbidden.title": "\u6CA1\u6709\u6743\u9650\u8BBF\u95EE {platform}";
1215
+ readonly "blocker.forbidden.titleGeneric": "\u6CA1\u6709\u6743\u9650";
1216
+ readonly "blocker.forbidden.hint": "\u8D26\u53F7\u5DF2\u767B\u5F55\uFF0C\u4F46\u6CA1\u6709\u8FD9\u4E2A\u9879\u76EE/\u4ED3\u5E93\u7684\u6743\u9650\uFF1B\u7533\u8BF7\u4E4B\u540E\u518D\u8BD5\u3002";
1217
+ readonly "blocker.forbidden.open": "\u6253\u5F00\u6743\u9650\u9875";
1218
+ readonly "blocker.timeout.hint": "\u65E0\u5934\u6D4F\u89C8\u5668\u53EF\u80FD\u6CA1\u8D77\u6765\uFF0C\u91CD\u8BD5\u4E00\u6B21\u901A\u5E38\u5C31\u597D\u3002";
1219
+ readonly "blocker.exec.hint": "\u786E\u8BA4 opencli \u5DF2\u5B89\u88C5\u4E14\u5728 PATH \u91CC\uFF08which opencli\uFF09\u3002";
1220
+ readonly "blocker.unknown.title": "\u51FA\u4E86\u70B9\u95EE\u9898";
1221
+ readonly "panels.reading": "\u6B63\u5728\u8BFB\u53D6\u9762\u677F\u914D\u7F6E\u2026";
1222
+ readonly "panels.empty": "\u9762\u677F\u91CC\u8FD8\u6CA1\u6709\u6A21\u5757";
1223
+ readonly "panels.emptyHint": "\u4E5F\u53EF\u4EE5\u76F4\u63A5\u8DDF agent \u8BF4\uFF1A\u300C\u628A\u67D0\u4E2A\u6A21\u5757\u52A0\u5230\u9762\u677F\u300D\u3002";
1224
+ readonly "env.title": "\u51C6\u5907\u5DE5\u4F5C\u53F0";
1225
+ readonly "env.checking": "\u6B63\u5728\u68C0\u6D4B\u8FD0\u884C\u73AF\u5883\u2026";
1226
+ readonly "env.installing": "\u6B63\u5728\u5B89\u88C5\u7F3A\u5931\u7684\u4F9D\u8D56\u2026";
1227
+ readonly "env.failed": "\u8FD8\u5DEE\u4E00\u6B65\u5C31\u80FD\u7528\u4E86";
1228
+ readonly "env.elapsed": "\u5DF2\u7B49\u5F85 {seconds} \u79D2";
1229
+ readonly "env.stepFailed.install": "\u88C5\u4E0D\u4E0A";
1230
+ readonly "env.stepFailed.path": "\u88C5\u4E86\u4F46\u8FD8\u627E\u4E0D\u5230";
1231
+ readonly "env.stepFailed.shell": "\u6267\u884C\u901A\u9053\u4E0D\u53EF\u7528";
1232
+ readonly "env.bridge.ok": "\u5DF2\u8FDE\u63A5";
1233
+ readonly "env.bridge.short": "\u6CA1\u8FDE\u4E0A";
1234
+ readonly "env.bridge.why": "\u9762\u677F\u7684\u6570\u636E\u8981\u8D70\u4F60\u6D4F\u89C8\u5668\u91CC\u7684\u767B\u5F55\u6001\uFF1A\u8FD9\u4E2A\u901A\u9053\u6CA1\u8FDE\u4E0A\uFF0C\u6A21\u5757\u5C31\u53D6\u4E0D\u5230\u6570\u636E\uFF08\u4E0D\u62E6\u8DEF\uFF0C\u4F46\u5148\u4FEE\u597D\u5B83\uFF09\u3002";
1235
+ readonly "env.bridge.daemon": "\u540E\u53F0\u670D\u52A1\u6CA1\u8D77\u6765\uFF1A\u6B63\u5E38\u5B83\u4F1A\u81EA\u5DF1\u8D77\uFF0C\u5148\u5728\u7EC8\u7AEF\u8DD1\u4E0B\u9762\u8FD9\u6761\u547D\u4EE4\u3002";
1236
+ readonly "env.bridge.extension": "\u6D4F\u89C8\u5668\u6269\u5C55\u6CA1\u8FDE\u4E0A\uFF1A\u5728 Chrome \u5E94\u7528\u5546\u5E97\u88C5\u4E00\u6B21\u5C31\u597D\uFF08\u88C5\u5B8C\u56DE\u6765\u70B9\u300C\u91CD\u8BD5\u300D\uFF09\u3002\u5DF2\u7ECF\u88C5\u8FC7\u7684\u8BDD\uFF0C\u5148\u8DD1\u4E0B\u9762\u8FD9\u6761\u547D\u4EE4\u3002";
1237
+ readonly "env.bridge.extensionLink": "\u53BB Chrome \u5E94\u7528\u5546\u5E97\u88C5\u6269\u5C55";
1238
+ readonly "env.bridge.profile": "\u8FDE\u4E0A\u4E86\u591A\u4E2A\u6D4F\u89C8\u5668 profile\uFF0C\u4F46\u6CA1\u9009\u9ED8\u8BA4\u7684\u90A3\u4E2A\uFF1A\u5148\u770B\u6709\u54EA\u4E9B\uFF08\u4E0B\u9762\u8FD9\u6761\u547D\u4EE4\uFF09\uFF0C\u518D\u9009\u4E00\u4E2A\u3002";
1239
+ readonly "env.bridge.stale": "\u9ED8\u8BA4\u7684\u6D4F\u89C8\u5668 profile \u5DF2\u7ECF\u5931\u6548\uFF08\u5B83\u8BB0\u7684\u662F\u4E0A\u4E00\u6B21\u7684\u6269\u5C55\u5B9E\u4F8B\uFF09\uFF1A\u91CD\u65B0\u9009\u4E00\u4E2A\u3002";
1240
+ readonly "env.bridge.unknown": "\u6CA1\u8BA4\u51FA\u662F\u54EA\u79CD\u95EE\u9898\uFF1A\u4E0B\u9762\u539F\u59CB\u8F93\u51FA\u91CC\u6709 opencli \u81EA\u5DF1\u7ED9\u7684\u6B65\u9AA4\u3002";
1241
+ readonly "env.fix.title": "\u600E\u4E48\u89E3\u51B3";
1242
+ readonly "env.fix.why": "\u5DE5\u4F5C\u53F0\u7528\u5B83\u81EA\u5DF1\u90A3\u4EFD opencli\uFF08\u4E0E\u4F60\u5728\u7EC8\u7AEF\u91CC\u90A3\u5957\u5206\u5F00\u88C5\uFF0C\u4E92\u4E0D\u5F71\u54CD\uFF09\uFF0C\u8FD9\u53F0\u673A\u5668\u4E0A\u8FD8\u6CA1\u88C5\u597D\u5B83\u3002";
1243
+ readonly "env.fix.whyPath": "opencli \u88C5\u4E0A\u4E86\uFF0C\u4F46\u5F53\u524D\u73AF\u5883\u8FD8\u627E\u4E0D\u5230\u5B83 \u2014\u2014 \u901A\u5E38\u662F PATH \u6216\u7EC8\u7AEF\u4F1A\u8BDD\u7684\u95EE\u9898\u3002";
1244
+ readonly "env.fix.whyShell": "\u5DE5\u4F5C\u53F0\u62FF\u4E0D\u5230\u6267\u884C\u547D\u4EE4\u7684\u901A\u9053\uFF0C\u6240\u4EE5\u53D6\u4E0D\u4E86\u6570\u636E \u2014\u2014 \u8FD9\u4E00\u6B65\u7528\u6237\u81EA\u5DF1\u88C5\u4E0D\u4E86\u3002";
1245
+ readonly "env.fix.step": "\u5728\u7EC8\u7AEF\u91CC\u8FD0\u884C\u4E0B\u9762\u8FD9\u6761\u547D\u4EE4\uFF0C\u88C5\u597D\u4E4B\u540E\u70B9\u300C\u91CD\u8BD5\u300D\uFF1A";
1246
+ readonly "env.fix.stepPath": "\u65B0\u5F00\u4E00\u4E2A\u7EC8\u7AEF\u7A97\u53E3\uFF08\u6216\u786E\u8BA4 npm \u7684\u5168\u5C40 bin \u76EE\u5F55\u5728 PATH \u91CC\uFF09\uFF0C\u7136\u540E\u70B9\u300C\u91CD\u8BD5\u300D\u3002";
1247
+ readonly "env.fix.stepShell": "\u91CD\u542F\u4E00\u6B21\u5DE5\u4F5C\u53F0\uFF08\u6216 dsh\uFF09\uFF1B\u5982\u679C\u53CD\u590D\u51FA\u73B0\uFF0C\u8BF4\u660E\u6267\u884C\u901A\u9053\u6CA1\u914D\u597D\u3002";
1248
+ readonly "env.fix.permission": "\u6743\u9650\u4E0D\u591F\uFF1A\u5728\u547D\u4EE4\u524D\u52A0 sudo \u91CD\u8DD1\uFF0C\u6216\u5148\u628A npm \u7684\u5168\u5C40\u76EE\u5F55\u914D\u5230\u4F60\u7684\u7528\u6237\u76EE\u5F55\u3002";
1249
+ readonly "env.fix.network": "\u7F51\u7EDC\u4E0D\u901A\uFF1A\u68C0\u67E5\u7F51\u7EDC\u6216\u4EE3\u7406\u8BBE\u7F6E\u540E\u91CD\u8BD5\u3002";
1250
+ readonly "env.fix.details": "\u8BE6\u7EC6\u8F93\u51FA\uFF08\u6392\u969C\u7528\uFF09";
1251
+ readonly "env.retry": "\u91CD\u8BD5";
1252
+ readonly "env.copyCommand": "\u590D\u5236\u547D\u4EE4";
1253
+ readonly "env.copied": "\u5DF2\u590D\u5236";
1254
+ readonly "env.step.opencli": "\u68C0\u6D4B\u5DE5\u4F5C\u53F0\u7684 opencli";
1255
+ readonly "env.step.codingPlugin": "\u68C0\u6D4B coding \u63D2\u4EF6";
1256
+ readonly "env.step.bridge": "\u68C0\u6D4B\u6D4F\u89C8\u5668\u901A\u9053";
1257
+ readonly "env.step.warm": "\u9884\u70ED\u7AD9\u70B9\u767B\u5F55\u6001";
1258
+ readonly "env.warm.done": "\u5DF2\u9884\u70ED {n} \u4E2A\u7AD9\u70B9";
1259
+ readonly "env.warm.short": "\u8FD9\u6B21\u6CA1\u70ED\u4E0A \u2014\u2014 \u4E0D\u5F71\u54CD\u7528\uFF0C\u9762\u677F\u7B2C\u4E00\u6B21\u8BFB\u53D6\u4F1A\u81EA\u5DF1\u8865";
1260
+ readonly "env.unit.missingPlugin": "\u8FD9\u4E2A\u6A21\u5757\u8FD8\u6CA1\u88C5\u597D";
1261
+ readonly "env.unit.missingCommandsHint": "\u66F4\u65B0\u4E4B\u540E\u5C31\u80FD\u7528\u4E86\u3002";
1262
+ readonly "env.unit.unchecked": "\u68C0\u6D4B\u4E0D\u4E86\uFF1A\u62FF\u4E0D\u5230\u6267\u884C\u901A\u9053";
1263
+ readonly "env.unit.uncheckedHint": "\u4E0D\u662F\u8FD9\u4E2A\u6A21\u5757\u7684\u95EE\u9898\uFF0C\u662F\u6267\u884C\u901A\u9053\u4E0D\u53EF\u7528 \u2014\u2014 \u91CD\u542F\u4E00\u6B21\u5DE5\u4F5C\u53F0\u518D\u8BD5\u3002";
1264
+ readonly "env.unit.missingCommands": "\u8FD9\u4E2A\u6A21\u5757\u7684\u7248\u672C\u65E7\u4E86";
1265
+ readonly "env.unit.hint": "\u88C5\u597D\u4E4B\u540E\u70B9\u91CD\u8BD5\uFF1B\u4E0D\u5F71\u54CD\u5176\u5B83\u6A21\u5757\u3002";
1266
+ readonly "rightbar.label": "\u6570\u636E\u9762\u677F";
1267
+ readonly "rightbar.expand": "\u5C55\u5F00\u6570\u636E\u9762\u677F";
1268
+ readonly "rightbar.collapse": "\u6536\u8D77\u6570\u636E\u9762\u677F";
1269
+ readonly "rightbar.refresh": "\u5237\u65B0";
1270
+ readonly "rightbar.refreshing": "\u5237\u65B0\u4E2D\u2026";
1271
+ readonly "rightbar.updatedAt": "\u66F4\u65B0\u4E8E {time}";
1272
+ readonly "rightbar.noProject": "\u5F53\u524D\u4F1A\u8BDD\u6CA1\u6709\u6240\u5C5E\u9879\u76EE";
1273
+ readonly "coding.notARepo.title": "\u8FD9\u4E2A\u9879\u76EE\u4E0D\u662F Coding \u4ED3\u5E93";
1274
+ readonly "error.unknown": "\u51FA\u9519\u4E86";
1275
+ readonly "board.title": "\u770B\u677F";
1276
+ readonly "panel.conversation": "\u5BF9\u8BDD";
1277
+ readonly "panels.label": "\u5168\u5C40\u9762\u677F";
1278
+ };
1279
+ 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.installing" | "panels.market.updating" | "panels.market.uninstalling" | "panels.market.confirmUninstall" | "panels.market.confirmUninstallDetail" | "panels.market.confirmYes" | "panels.market.confirmNo" | "panels.market.failed" | "panels.market.needEnv" | "panels.market.noSource" | "panels.market.badSource" | "panels.market.empty" | "panels.market.foot" | "panels.market.recheck" | "panels.market.checkUpdates" | "panels.market.checkedAt" | "panels.market.justNow" | "panels.market.minutesAgo" | "panels.market.hoursAgo" | "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>;
1280
+ };
1281
+ mergeMessages(base: apiModule.Dictionaries, contributions: readonly apiModule.MessagesContribution[]): apiModule.Dictionaries;
1282
+ zh: {
1283
+ readonly "brand.name": "\u5DE5\u4F5C\u53F0";
1284
+ readonly "toggle.open": "\u6253\u5F00\u4FA7\u8FB9\u680F";
1285
+ readonly "toggle.collapse": "\u6536\u8D77\u4FA7\u8FB9\u680F";
1286
+ readonly "project.label": "\u5207\u6362\u9879\u76EE";
1287
+ readonly "workspace.section": "\u5DE5\u4F5C\u533A";
1288
+ readonly "project.none": "\u672A\u9009\u62E9\u9879\u76EE";
1289
+ readonly "project.empty": "\u8FD8\u6CA1\u6709\u9879\u76EE\u3002\u7528\u4E0B\u9762\u7684\u300C\u6DFB\u52A0\u9879\u76EE\u300D\u9009\u4E00\u4E2A\u76EE\u5F55\u3002";
1290
+ readonly "project.add": "\u6DFB\u52A0\u9879\u76EE\u2026";
1291
+ readonly "session.new": "\u65B0\u4F1A\u8BDD";
1292
+ readonly "session.new.label": "\u5728\u5F53\u524D\u9879\u76EE\u65B0\u5EFA\u4F1A\u8BDD";
1293
+ readonly "session.empty": "\u8FD9\u4E2A\u9879\u76EE\u8FD8\u6CA1\u6709\u4F1A\u8BDD\u3002";
1294
+ readonly "session.noProject": "\u5148\u6DFB\u52A0\u4E00\u4E2A\u9879\u76EE\u3002";
1295
+ readonly "session.pinned": "\u5DF2\u7F6E\u9876";
1296
+ readonly "session.actions": "{name} \u7684\u64CD\u4F5C";
1297
+ readonly "status.idle": "\u7A7A\u95F2";
1298
+ readonly "status.running": "\u8FD0\u884C\u4E2D";
1299
+ readonly "status.waitingApproval": "\u7B49\u5F85\u6388\u6743";
1300
+ readonly "status.planReview": "\u7B49\u5F85\u8BA1\u5212\u786E\u8BA4";
1301
+ readonly "status.waitingAnswer": "\u7B49\u5F85\u56DE\u7B54";
1302
+ readonly "status.completed": "\u5DF2\u5B8C\u6210";
1303
+ readonly "status.subagentsRunning.one": "{n} \u4E2A\u5B50\u4EE3\u7406\u8FD0\u884C\u4E2D";
1304
+ readonly "status.subagentsRunning.other": "{n} \u4E2A\u5B50\u4EE3\u7406\u8FD0\u884C\u4E2D";
1305
+ readonly "time.now": "\u521A\u521A";
1306
+ readonly "time.minutes": "{n} \u5206\u949F\u524D";
1307
+ readonly "time.hours": "{n} \u5C0F\u65F6\u524D";
1308
+ readonly "time.days": "{n} \u5929\u524D";
1309
+ readonly "panels.title": "\u9762\u677F\u6A21\u5757";
1310
+ readonly "panels.reset": "\u6062\u590D\u9ED8\u8BA4";
1311
+ readonly "panels.enabled": "\u8FD9\u4E2A\u9879\u76EE\u5DF2\u542F\u7528";
1312
+ readonly "panels.disabled": "\u8FD9\u4E2A\u9879\u76EE\u672A\u542F\u7528";
1313
+ readonly "panels.choose": "\u9009\u62E9\u6A21\u5757";
1314
+ readonly "panels.failed": "\u6539\u914D\u7F6E\u5931\u8D25\u4E86\uFF0C\u518D\u8BD5\u4E00\u6B21\u3002";
1315
+ readonly "panels.hintEffect": "\u505C\u7528 = agent \u62FF\u4E0D\u5230\u76F8\u5173\u6570\u636E";
1316
+ readonly "panels.dragHint": "\u62D6\u52A8\u8C03\u6574\u987A\u5E8F";
1317
+ readonly "panels.unknownStep": "\u8FD9\u4E00\u5C42\u6CA1\u6709\u5957\u4EF6\u63D0\u4F9B";
1318
+ readonly "panels.labelWithHint": "{label}\uFF08{hint}\uFF09";
1319
+ readonly "panels.dep.missingPlugin": "\u26A0 \u8FD8\u6CA1\u88C5\u597D";
1320
+ readonly "panels.dep.missingCommands": "\u26A0 \u9700\u8981\u66F4\u65B0";
1321
+ readonly "panels.dep.unchecked": "\u26A0 \u68C0\u6D4B\u4E0D\u4E86";
1322
+ readonly "panels.tab.modules": "\u9762\u677F\u914D\u7F6E";
1323
+ readonly "panels.tab.market": "\u5DE5\u4F5C\u53F0\u6A21\u5757\u5E02\u573A";
1324
+ readonly "panels.browseMarket": "\u6D4F\u89C8\u6A21\u5757\u5E02\u573A";
1325
+ readonly "panels.noneInstalled": "\u8FD9\u4E9B\u6A21\u5757\u8981\u7684\u63D2\u4EF6\u90FD\u8FD8\u6CA1\u88C5";
1326
+ readonly "panels.noneInstalledHint": "\u88C5\u597D\u4E4B\u540E\u5B83\u4EEC\u4F1A\u56DE\u5230\u8FD9\u91CC\uFF0C\u518D\u7531\u4F60\u51B3\u5B9A\u653E\u54EA\u51E0\u4E2A\u4E0A\u677F\u3002";
1327
+ readonly "panels.market.installed": "\u5DF2\u88C5";
1328
+ readonly "panels.market.outdated": "\u8981\u66F4\u65B0";
1329
+ readonly "panels.market.hasNew": "\u6709\u65B0\u7248\u672C";
1330
+ readonly "panels.market.missing": "\u672A\u88C5";
1331
+ readonly "panels.market.unchecked": "\u72B6\u6001\u672A\u77E5";
1332
+ readonly "panels.market.checking": "\u68C0\u6D4B\u4E2D";
1333
+ readonly "panels.market.sectionInstalled": "\u5DF2\u5B89\u88C5";
1334
+ readonly "panels.market.sectionPending": "\u672A\u5B89\u88C5";
1335
+ readonly "panels.market.sectionShared": "\u5171\u7528\u4F9D\u8D56";
1336
+ readonly "panels.market.sharedUsedBy": "\u4F9B {modules} \u4F7F\u7528";
1337
+ readonly "panels.market.listSeparator": "\u3001";
1338
+ readonly "panels.market.sharedMissing": "\u672A\u88C5";
1339
+ readonly "panels.market.sharedOutdated": "\u6709\u65B0\u7248";
1340
+ readonly "panels.market.sharedUnsatisfied": "\u7248\u672C\u4E0D\u5BF9";
1341
+ readonly "panels.market.sharedOk": "\u5DF2\u88C5";
1342
+ readonly "panels.market.versionArrow": "{from} \u2192 {to}";
1343
+ readonly "panels.market.lead": "\u88C5\u5728\u8FD9\u53F0\u673A\u5668\u4E0A\uFF0C\u6240\u6709\u9879\u76EE\u5171\u7528\u3002";
1344
+ readonly "panels.market.install": "\u5B89\u88C5";
1345
+ readonly "panels.market.update": "\u66F4\u65B0";
1346
+ readonly "panels.market.uninstall": "\u5378\u8F7D";
1347
+ readonly "panels.market.installing": "\u6B63\u5728\u5B89\u88C5\u2026";
1348
+ readonly "panels.market.updating": "\u6B63\u5728\u66F4\u65B0\u2026";
1349
+ readonly "panels.market.uninstalling": "\u6B63\u5728\u5378\u8F7D\u2026";
1350
+ readonly "panels.market.confirmUninstall": "\u8981\u5378\u8F7D\u5417\uFF1F";
1351
+ readonly "panels.market.confirmUninstallDetail": "\u5378\u8F7D\u540E\u8FD9\u53F0\u673A\u5668\u4E0A\u5C31\u6CA1\u6709\u5B83\u4E86\uFF0C\u6240\u6709\u9879\u76EE\u7684\u9762\u677F\u4E5F\u4F1A\u628A\u5B83\u4E00\u8D77\u62FF\u6389\uFF08\u7ED1\u5B9A\u4E0E\u8BBE\u7F6E\u4E0D\u4F1A\u4E22\uFF09\u3002";
1352
+ readonly "panels.market.confirmYes": "\u786E\u5B9A\u5378\u8F7D";
1353
+ readonly "panels.market.confirmNo": "\u53D6\u6D88";
1354
+ readonly "panels.market.failed": "\u6CA1\u6210\u529F\uFF1A{reason}";
1355
+ readonly "panels.market.needEnv": "\u5148\u5728\u542F\u52A8\u5DE5\u4F5C\u53F0\u7684\u7EC8\u7AEF\u91CC\u8BBE {env}";
1356
+ readonly "panels.market.noSource": "\u8FD9\u4E2A\u6A21\u5757\u6CA1\u58F0\u660E\u600E\u4E48\u88C5\uFF0C\u53EA\u80FD\u81EA\u5DF1\u52A8\u624B";
1357
+ readonly "panels.market.badSource": "\u5B89\u88C5\u65B9\u5F0F\u6CA1\u5199\u5168\uFF0C\u53EA\u80FD\u81EA\u5DF1\u52A8\u624B";
1358
+ readonly "panels.market.empty": "\u6682\u65E0\u53EF\u7528\u6A21\u5757";
1359
+ 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";
1360
+ readonly "panels.market.recheck": "\u91CD\u65B0\u68C0\u67E5\u66F4\u65B0";
1361
+ readonly "panels.market.checkUpdates": "\u68C0\u67E5\u66F4\u65B0";
1362
+ readonly "panels.market.checkedAt": "\u6700\u8FD1\u68C0\u67E5\uFF1A{time}";
1363
+ readonly "panels.market.justNow": "\u521A\u521A";
1364
+ readonly "panels.market.minutesAgo": "{n} \u5206\u949F\u524D";
1365
+ readonly "panels.market.hoursAgo": "{n} \u5C0F\u65F6\u524D";
1366
+ readonly "blocker.fix.install": "\u5E2E\u6211\u5B89\u88C5";
1367
+ readonly "blocker.fix.update": "\u5E2E\u6211\u5347\u7EA7";
1368
+ readonly "blocker.fix.running": "\u6B63\u5728\u6267\u884C\u2026";
1369
+ readonly "blocker.fix.failed": "\u6267\u884C\u5931\u8D25\uFF1A";
1370
+ readonly "blocker.retry": "\u91CD\u8BD5";
1371
+ readonly "blocker.retry.running": "\u91CD\u8BD5\u4E2D\u2026";
1372
+ readonly "blocker.copy": "\u590D\u5236\u547D\u4EE4";
1373
+ readonly "blocker.market.open": "\u53BB\u6A21\u5757\u5E02\u573A";
1374
+ readonly "blocker.login.title": "\u9700\u8981\u767B\u5F55 {platform}";
1375
+ readonly "blocker.login.titleGeneric": "\u9700\u8981\u767B\u5F55";
1376
+ readonly "blocker.login.hint": "\u5DE5\u4F5C\u53F0\u7528\u4F60\u7684\u6D4F\u89C8\u5668\u767B\u5F55\u6001\uFF1B\u767B\u5F55\u4E00\u6B21\u5C31\u884C\uFF0C\u4E4B\u540E\u4E0D\u7528\u518D\u767B\u3002";
1377
+ readonly "blocker.login.go": "\u53BB\u767B\u5F55";
1378
+ readonly "blocker.login.manual": "\u5728\u7EC8\u7AEF\u6267\u884C `opencli coding team-current`\uFF0C\u6309\u63D0\u793A\u5B8C\u6210\u767B\u5F55\u540E\u91CD\u8BD5\u3002";
1379
+ readonly "blocker.forbidden.title": "\u6CA1\u6709\u6743\u9650\u8BBF\u95EE {platform}";
1380
+ readonly "blocker.forbidden.titleGeneric": "\u6CA1\u6709\u6743\u9650";
1381
+ readonly "blocker.forbidden.hint": "\u8D26\u53F7\u5DF2\u767B\u5F55\uFF0C\u4F46\u6CA1\u6709\u8FD9\u4E2A\u9879\u76EE/\u4ED3\u5E93\u7684\u6743\u9650\uFF1B\u7533\u8BF7\u4E4B\u540E\u518D\u8BD5\u3002";
1382
+ readonly "blocker.forbidden.open": "\u6253\u5F00\u6743\u9650\u9875";
1383
+ readonly "blocker.timeout.hint": "\u65E0\u5934\u6D4F\u89C8\u5668\u53EF\u80FD\u6CA1\u8D77\u6765\uFF0C\u91CD\u8BD5\u4E00\u6B21\u901A\u5E38\u5C31\u597D\u3002";
1384
+ readonly "blocker.exec.hint": "\u786E\u8BA4 opencli \u5DF2\u5B89\u88C5\u4E14\u5728 PATH \u91CC\uFF08which opencli\uFF09\u3002";
1385
+ readonly "blocker.unknown.title": "\u51FA\u4E86\u70B9\u95EE\u9898";
1386
+ readonly "panels.reading": "\u6B63\u5728\u8BFB\u53D6\u9762\u677F\u914D\u7F6E\u2026";
1387
+ readonly "panels.empty": "\u9762\u677F\u91CC\u8FD8\u6CA1\u6709\u6A21\u5757";
1388
+ readonly "panels.emptyHint": "\u4E5F\u53EF\u4EE5\u76F4\u63A5\u8DDF agent \u8BF4\uFF1A\u300C\u628A\u67D0\u4E2A\u6A21\u5757\u52A0\u5230\u9762\u677F\u300D\u3002";
1389
+ readonly "env.title": "\u51C6\u5907\u5DE5\u4F5C\u53F0";
1390
+ readonly "env.checking": "\u6B63\u5728\u68C0\u6D4B\u8FD0\u884C\u73AF\u5883\u2026";
1391
+ readonly "env.installing": "\u6B63\u5728\u5B89\u88C5\u7F3A\u5931\u7684\u4F9D\u8D56\u2026";
1392
+ readonly "env.failed": "\u8FD8\u5DEE\u4E00\u6B65\u5C31\u80FD\u7528\u4E86";
1393
+ readonly "env.elapsed": "\u5DF2\u7B49\u5F85 {seconds} \u79D2";
1394
+ readonly "env.stepFailed.install": "\u88C5\u4E0D\u4E0A";
1395
+ readonly "env.stepFailed.path": "\u88C5\u4E86\u4F46\u8FD8\u627E\u4E0D\u5230";
1396
+ readonly "env.stepFailed.shell": "\u6267\u884C\u901A\u9053\u4E0D\u53EF\u7528";
1397
+ readonly "env.bridge.ok": "\u5DF2\u8FDE\u63A5";
1398
+ readonly "env.bridge.short": "\u6CA1\u8FDE\u4E0A";
1399
+ readonly "env.bridge.why": "\u9762\u677F\u7684\u6570\u636E\u8981\u8D70\u4F60\u6D4F\u89C8\u5668\u91CC\u7684\u767B\u5F55\u6001\uFF1A\u8FD9\u4E2A\u901A\u9053\u6CA1\u8FDE\u4E0A\uFF0C\u6A21\u5757\u5C31\u53D6\u4E0D\u5230\u6570\u636E\uFF08\u4E0D\u62E6\u8DEF\uFF0C\u4F46\u5148\u4FEE\u597D\u5B83\uFF09\u3002";
1400
+ readonly "env.bridge.daemon": "\u540E\u53F0\u670D\u52A1\u6CA1\u8D77\u6765\uFF1A\u6B63\u5E38\u5B83\u4F1A\u81EA\u5DF1\u8D77\uFF0C\u5148\u5728\u7EC8\u7AEF\u8DD1\u4E0B\u9762\u8FD9\u6761\u547D\u4EE4\u3002";
1401
+ readonly "env.bridge.extension": "\u6D4F\u89C8\u5668\u6269\u5C55\u6CA1\u8FDE\u4E0A\uFF1A\u5728 Chrome \u5E94\u7528\u5546\u5E97\u88C5\u4E00\u6B21\u5C31\u597D\uFF08\u88C5\u5B8C\u56DE\u6765\u70B9\u300C\u91CD\u8BD5\u300D\uFF09\u3002\u5DF2\u7ECF\u88C5\u8FC7\u7684\u8BDD\uFF0C\u5148\u8DD1\u4E0B\u9762\u8FD9\u6761\u547D\u4EE4\u3002";
1402
+ readonly "env.bridge.extensionLink": "\u53BB Chrome \u5E94\u7528\u5546\u5E97\u88C5\u6269\u5C55";
1403
+ readonly "env.bridge.profile": "\u8FDE\u4E0A\u4E86\u591A\u4E2A\u6D4F\u89C8\u5668 profile\uFF0C\u4F46\u6CA1\u9009\u9ED8\u8BA4\u7684\u90A3\u4E2A\uFF1A\u5148\u770B\u6709\u54EA\u4E9B\uFF08\u4E0B\u9762\u8FD9\u6761\u547D\u4EE4\uFF09\uFF0C\u518D\u9009\u4E00\u4E2A\u3002";
1404
+ readonly "env.bridge.stale": "\u9ED8\u8BA4\u7684\u6D4F\u89C8\u5668 profile \u5DF2\u7ECF\u5931\u6548\uFF08\u5B83\u8BB0\u7684\u662F\u4E0A\u4E00\u6B21\u7684\u6269\u5C55\u5B9E\u4F8B\uFF09\uFF1A\u91CD\u65B0\u9009\u4E00\u4E2A\u3002";
1405
+ readonly "env.bridge.unknown": "\u6CA1\u8BA4\u51FA\u662F\u54EA\u79CD\u95EE\u9898\uFF1A\u4E0B\u9762\u539F\u59CB\u8F93\u51FA\u91CC\u6709 opencli \u81EA\u5DF1\u7ED9\u7684\u6B65\u9AA4\u3002";
1406
+ readonly "env.fix.title": "\u600E\u4E48\u89E3\u51B3";
1407
+ readonly "env.fix.why": "\u5DE5\u4F5C\u53F0\u7528\u5B83\u81EA\u5DF1\u90A3\u4EFD opencli\uFF08\u4E0E\u4F60\u5728\u7EC8\u7AEF\u91CC\u90A3\u5957\u5206\u5F00\u88C5\uFF0C\u4E92\u4E0D\u5F71\u54CD\uFF09\uFF0C\u8FD9\u53F0\u673A\u5668\u4E0A\u8FD8\u6CA1\u88C5\u597D\u5B83\u3002";
1408
+ readonly "env.fix.whyPath": "opencli \u88C5\u4E0A\u4E86\uFF0C\u4F46\u5F53\u524D\u73AF\u5883\u8FD8\u627E\u4E0D\u5230\u5B83 \u2014\u2014 \u901A\u5E38\u662F PATH \u6216\u7EC8\u7AEF\u4F1A\u8BDD\u7684\u95EE\u9898\u3002";
1409
+ readonly "env.fix.whyShell": "\u5DE5\u4F5C\u53F0\u62FF\u4E0D\u5230\u6267\u884C\u547D\u4EE4\u7684\u901A\u9053\uFF0C\u6240\u4EE5\u53D6\u4E0D\u4E86\u6570\u636E \u2014\u2014 \u8FD9\u4E00\u6B65\u7528\u6237\u81EA\u5DF1\u88C5\u4E0D\u4E86\u3002";
1410
+ readonly "env.fix.step": "\u5728\u7EC8\u7AEF\u91CC\u8FD0\u884C\u4E0B\u9762\u8FD9\u6761\u547D\u4EE4\uFF0C\u88C5\u597D\u4E4B\u540E\u70B9\u300C\u91CD\u8BD5\u300D\uFF1A";
1411
+ readonly "env.fix.stepPath": "\u65B0\u5F00\u4E00\u4E2A\u7EC8\u7AEF\u7A97\u53E3\uFF08\u6216\u786E\u8BA4 npm \u7684\u5168\u5C40 bin \u76EE\u5F55\u5728 PATH \u91CC\uFF09\uFF0C\u7136\u540E\u70B9\u300C\u91CD\u8BD5\u300D\u3002";
1412
+ readonly "env.fix.stepShell": "\u91CD\u542F\u4E00\u6B21\u5DE5\u4F5C\u53F0\uFF08\u6216 dsh\uFF09\uFF1B\u5982\u679C\u53CD\u590D\u51FA\u73B0\uFF0C\u8BF4\u660E\u6267\u884C\u901A\u9053\u6CA1\u914D\u597D\u3002";
1413
+ readonly "env.fix.permission": "\u6743\u9650\u4E0D\u591F\uFF1A\u5728\u547D\u4EE4\u524D\u52A0 sudo \u91CD\u8DD1\uFF0C\u6216\u5148\u628A npm \u7684\u5168\u5C40\u76EE\u5F55\u914D\u5230\u4F60\u7684\u7528\u6237\u76EE\u5F55\u3002";
1414
+ readonly "env.fix.network": "\u7F51\u7EDC\u4E0D\u901A\uFF1A\u68C0\u67E5\u7F51\u7EDC\u6216\u4EE3\u7406\u8BBE\u7F6E\u540E\u91CD\u8BD5\u3002";
1415
+ readonly "env.fix.details": "\u8BE6\u7EC6\u8F93\u51FA\uFF08\u6392\u969C\u7528\uFF09";
1416
+ readonly "env.retry": "\u91CD\u8BD5";
1417
+ readonly "env.copyCommand": "\u590D\u5236\u547D\u4EE4";
1418
+ readonly "env.copied": "\u5DF2\u590D\u5236";
1419
+ readonly "env.step.opencli": "\u68C0\u6D4B\u5DE5\u4F5C\u53F0\u7684 opencli";
1420
+ readonly "env.step.codingPlugin": "\u68C0\u6D4B coding \u63D2\u4EF6";
1421
+ readonly "env.step.bridge": "\u68C0\u6D4B\u6D4F\u89C8\u5668\u901A\u9053";
1422
+ readonly "env.step.warm": "\u9884\u70ED\u7AD9\u70B9\u767B\u5F55\u6001";
1423
+ readonly "env.warm.done": "\u5DF2\u9884\u70ED {n} \u4E2A\u7AD9\u70B9";
1424
+ readonly "env.warm.short": "\u8FD9\u6B21\u6CA1\u70ED\u4E0A \u2014\u2014 \u4E0D\u5F71\u54CD\u7528\uFF0C\u9762\u677F\u7B2C\u4E00\u6B21\u8BFB\u53D6\u4F1A\u81EA\u5DF1\u8865";
1425
+ readonly "env.unit.missingPlugin": "\u8FD9\u4E2A\u6A21\u5757\u8FD8\u6CA1\u88C5\u597D";
1426
+ readonly "env.unit.missingCommandsHint": "\u66F4\u65B0\u4E4B\u540E\u5C31\u80FD\u7528\u4E86\u3002";
1427
+ readonly "env.unit.unchecked": "\u68C0\u6D4B\u4E0D\u4E86\uFF1A\u62FF\u4E0D\u5230\u6267\u884C\u901A\u9053";
1428
+ readonly "env.unit.uncheckedHint": "\u4E0D\u662F\u8FD9\u4E2A\u6A21\u5757\u7684\u95EE\u9898\uFF0C\u662F\u6267\u884C\u901A\u9053\u4E0D\u53EF\u7528 \u2014\u2014 \u91CD\u542F\u4E00\u6B21\u5DE5\u4F5C\u53F0\u518D\u8BD5\u3002";
1429
+ readonly "env.unit.missingCommands": "\u8FD9\u4E2A\u6A21\u5757\u7684\u7248\u672C\u65E7\u4E86";
1430
+ readonly "env.unit.hint": "\u88C5\u597D\u4E4B\u540E\u70B9\u91CD\u8BD5\uFF1B\u4E0D\u5F71\u54CD\u5176\u5B83\u6A21\u5757\u3002";
1431
+ readonly "rightbar.label": "\u6570\u636E\u9762\u677F";
1432
+ readonly "rightbar.expand": "\u5C55\u5F00\u6570\u636E\u9762\u677F";
1433
+ readonly "rightbar.collapse": "\u6536\u8D77\u6570\u636E\u9762\u677F";
1434
+ readonly "rightbar.refresh": "\u5237\u65B0";
1435
+ readonly "rightbar.refreshing": "\u5237\u65B0\u4E2D\u2026";
1436
+ readonly "rightbar.updatedAt": "\u66F4\u65B0\u4E8E {time}";
1437
+ readonly "rightbar.noProject": "\u5F53\u524D\u4F1A\u8BDD\u6CA1\u6709\u6240\u5C5E\u9879\u76EE";
1438
+ readonly "coding.notARepo.title": "\u8FD9\u4E2A\u9879\u76EE\u4E0D\u662F Coding \u4ED3\u5E93";
1439
+ readonly "error.unknown": "\u51FA\u9519\u4E86";
1440
+ readonly "board.title": "\u770B\u677F";
1441
+ readonly "panel.conversation": "\u5BF9\u8BDD";
1442
+ readonly "panels.label": "\u5168\u5C40\u9762\u677F";
1443
+ };
1444
+ blockerPending(busy: boolean, running: string | null): boolean;
1445
+ blockerActionLabel(action: apiModule.BlockerActionShape, state: apiModule.BlockerLabelState, t: apiModule.BlockerLabelTranslate): string;
1446
+ holdBusy(since: number | null, now: number, floorMs: number): apiModule.BusyHold;
1447
+ h: typeof import("react").createElement;
1448
+ Fragment: import("react").ExoticComponent<import("react").FragmentProps>;
1449
+ useState: typeof import("react").useState;
1450
+ useEffect: typeof import("react").useEffect;
1451
+ useMemo: typeof import("react").useMemo;
1452
+ useCallback: typeof import("react").useCallback;
1453
+ useRef: typeof import("react").useRef;
1454
+ useSyncExternalStore: typeof import("react").useSyncExternalStore;
1455
+ quoteShellArg(value: unknown): string;
1456
+ tailLines(text: string | null | undefined, lines?: number): string;
1457
+ parseJsonLoose(text: string | null | undefined): unknown;
1458
+ excerpt(text: string | null | undefined, limit?: number): string;
1459
+ cx(...parts: Array<string | false | null | undefined>): string;
1460
+ relativeTime(epochMs: number, t: apiModule.TimeTranslate): string;
1461
+ shortenPath(path: unknown): string;
1462
+ parseLocalTimestamp(text: string | null | undefined): number;
1463
+ LINK_BUTTON_STYLE: {
1464
+ readonly display: "inline-flex";
1465
+ readonly alignItems: "center";
1466
+ readonly gap: "var(--wb-gap-xs)";
1467
+ readonly textDecoration: "none";
1468
+ };
1469
+ };
1470
+ };
1471
+ export declare const inject: string[];
1472
+ export declare function apply(ctx: DshClientContext): void;
1473
+ export type Kit = typeof kit;
1474
+ export type { ResourceState } from '../shared/hooks/use-api-resource';
1475
+ export type { CardSummary } from '../shared/hooks/use-card-summary';
1476
+ export type { CardFeed, UnitBoard } from '../shared/hooks/use-unit-board';