@pstdio/workbench 0.7.1 → 0.8.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.
@@ -1,20 +1,35 @@
1
1
  import { CommandExecuteRequest } from '@pstdio/sdk/api';
2
2
  import { CommandExecuteResponse } from '@pstdio/sdk/api';
3
3
  import { ComponentType } from 'react';
4
+ import { ExtensionActivityItemRecord } from 'pstdio-api-contracts';
4
5
  import { ExtensionCommandPaletteContribution } from '@pstdio/sdk/api';
5
- import { ExtensionMenuContribution } from '@pstdio/sdk/api';
6
+ import { ExtensionKeybindingRecord } from 'pstdio-api-contracts';
7
+ import { ExtensionMenuContribution } from 'pstdio-api-contracts';
8
+ import { ExtensionMenuContribution as ExtensionMenuContribution_2 } from '@pstdio/sdk/api';
9
+ import { ExtensionModeRecord } from 'pstdio-api-contracts';
10
+ import { ExtensionResourceKindRecord } from 'pstdio-api-contracts';
11
+ import { ExtensionResourcePanelRecord } from 'pstdio-api-contracts';
12
+ import { ExtensionSettingDefinitionRecord } from 'pstdio-api-contracts';
13
+ import { ExtensionSettingsSectionRecord } from 'pstdio-api-contracts';
14
+ import { ExtensionTreeItemContribution } from 'pstdio-api-contracts';
6
15
  import { HostCapability } from 'pstdio-extensions/bridge/contract';
7
16
  import { HostCapabilityRegistry } from 'pstdio-extensions/bridge/contract';
8
17
  import { HostEventPublisher } from 'pstdio-extensions/bridge/host';
9
18
  import { JSX } from 'react/jsx-runtime';
10
19
  import { Localizable } from '@pstdio/sdk/extensions';
20
+ import { NavigationTarget as NavigationTarget_2 } from '@pstdio/sdk/extensions';
11
21
  import { ReactNode } from 'react';
12
22
  import { ThemePreference as ThemePreference_2 } from 'pstdio-extensions/bridge/contract';
13
23
  import { WorkbenchExtensionCommandPaletteResourceRecord } from '@pstdio/sdk/api';
14
- import { WorkbenchExtensionControlsRendererRecord } from '@pstdio/sdk/api';
24
+ import { WorkbenchExtensionCommandPaletteResourceRecord as WorkbenchExtensionCommandPaletteResourceRecord_2 } from 'pstdio-api-contracts';
25
+ import { WorkbenchExtensionControlsRendererRecord } from 'pstdio-api-contracts';
15
26
  import { WorkbenchExtensionDataTableRendererRecord } from 'pstdio-api-contracts';
16
- import { WorkbenchExtensionKanbanRendererRecord } from '@pstdio/sdk/api';
27
+ import { WorkbenchExtensionFileRendererRecord } from 'pstdio-api-contracts';
28
+ import { WorkbenchExtensionKanbanRendererRecord } from 'pstdio-api-contracts';
17
29
  import { WorkbenchExtensionMetadata } from '@pstdio/sdk/api';
30
+ import { WorkbenchExtensionPanelRecord } from 'pstdio-api-contracts';
31
+ import { WorkbenchExtensionSettingsPanelRecord } from 'pstdio-api-contracts';
32
+ import { WorkbenchExtensionTreeRendererRecord } from 'pstdio-api-contracts';
18
33
 
19
34
  declare interface AttributeDescriptor {
20
35
  id: string;
@@ -97,24 +112,22 @@ export declare interface BridgeWebviewRenderContext {
97
112
  }
98
113
 
99
114
  export declare const buildWorkbenchExtensionCommandPaletteRegistrations: (input: {
100
- metadata: WorkbenchExtensionMetadata;
115
+ metadata: CommandContributionMetadata;
101
116
  createCommandId?: (contribution: ExtensionCommandPaletteContribution) => string;
102
117
  resolveString?: WorkbenchExtensionStringResolver;
103
118
  }) => WorkbenchExtensionCommandPaletteRegistration[];
104
119
 
105
120
  export declare const buildWorkbenchExtensionMenuRegistrations: (input: {
106
- metadata: WorkbenchExtensionMetadata;
121
+ metadata: CommandContributionMetadata;
107
122
  menuSlotsById: ReadonlyMap<string, WorkbenchExtensionMenuSlotConfig>;
108
123
  menuTargetsById?: ReadonlyMap<string, WorkbenchExtensionMenuSlotConfig>;
109
- createCommandId?: (contribution: ExtensionMenuContribution) => string;
124
+ createCommandId?: (contribution: ExtensionMenuContribution_2) => string;
110
125
  createWhenExpression?: WorkbenchExtensionMenuWhenBuilder;
111
126
  resolveString?: WorkbenchExtensionStringResolver;
112
- }) => WorkbenchExtensionMenuRegistration[];
113
-
114
- export declare const buildWorkbenchExtensionRouteEntries: (input: {
115
- metadata: WorkbenchExtensionMetadata | undefined;
116
- createResource: (resourceInput: WorkbenchExtensionRouteResourceInput) => ResourceRef;
117
- }) => any;
127
+ }) => {
128
+ registrations: WorkbenchExtensionMenuRegistration[];
129
+ unresolved: UnresolvedWorkbenchExtensionMenuContribution[];
130
+ };
118
131
 
119
132
  /**
120
133
  * A data-driven list of items, each opening a contributor-supplied editor. The
@@ -141,6 +154,8 @@ declare interface Command {
141
154
  params?: CommandParamSchema;
142
155
  }
143
156
 
157
+ declare type CommandContributionMetadata = Pick<WorkbenchExtensionMetadata, "commands" | "commandPaletteContributions" | "menuContributions">;
158
+
144
159
  declare interface CommandHandler<TArgs = unknown, TResult = unknown> {
145
160
  prepareArgs?(args: TArgs, context?: WorkbenchCommandExecutionContext, onArgsChange?: (args: TArgs) => void): TArgs | Promise<TArgs>;
146
161
  execute(args: TArgs, context?: WorkbenchCommandExecutionContext): TResult | Promise<TResult>;
@@ -202,6 +217,7 @@ declare interface CommandParamDescriptor {
202
217
  accept?: string;
203
218
  multiple?: boolean;
204
219
  metadata?: Record<string, unknown>;
220
+ resolvedFrom?: "resource";
205
221
  }
206
222
 
207
223
  declare interface CommandParamOption {
@@ -236,6 +252,8 @@ declare interface CompositionDiagnostic {
236
252
  slot?: string;
237
253
  }
238
254
 
255
+ declare type CompositionLayout = Pick<LayoutModel, "getLayout" | "openWidget" | "reconcilePanelMenus" | "setRegionActiveWidget" | "updateWidgetPlacement">;
256
+
239
257
  declare interface CompositionModeDefinition {
240
258
  id: string;
241
259
  extensionId?: string;
@@ -269,7 +287,7 @@ declare interface CompositionPlacementPolicy {
269
287
  }
270
288
 
271
289
  declare interface CompositionReconcileContext {
272
- layout: LayoutModel;
290
+ layout: CompositionLayout;
273
291
  notifications: NotificationRegistry;
274
292
  }
275
293
 
@@ -405,7 +423,7 @@ declare interface ControlsUpdateValueInput {
405
423
  resource?: ResourceRef;
406
424
  }
407
425
 
408
- declare type ControlsViewRecord = WorkbenchExtensionMetadata["panels"][number];
426
+ declare type ControlsViewRecord = InternalWorkbenchExtensionMetadata["panels"][number];
409
427
 
410
428
  export declare type CreateBridgeWebviewHostCapabilities = (context: BridgeWebviewRenderContext) => HostCapabilityRegistry;
411
429
 
@@ -584,7 +602,7 @@ declare interface DataTableRendererThemeColor {
584
602
  };
585
603
  }
586
604
 
587
- declare type DataTableViewRecord = WorkbenchExtensionMetadata["panels"][number];
605
+ declare type DataTableViewRecord = InternalWorkbenchExtensionMetadata["panels"][number];
588
606
 
589
607
  declare interface DeclaredPanelPlacement {
590
608
  for?: string;
@@ -628,11 +646,15 @@ declare interface EnumOptionsSource {
628
646
  getSnapshot: () => EnumOption[];
629
647
  }
630
648
 
631
- declare type ExtensionPanelRecord = WorkbenchExtensionMetadata["panels"][number];
649
+ declare interface ExtensionNavigationSourcePlacement {
650
+ instanceId: string;
651
+ }
652
+
653
+ declare type ExtensionPanelRecord = InternalWorkbenchExtensionMetadata["panels"][number];
632
654
 
633
- declare type ExtensionResourcePanels = WorkbenchExtensionMetadata["resourcePanels"];
655
+ declare type ExtensionResourcePanels = InternalWorkbenchExtensionMetadata["resourcePanels"];
634
656
 
635
- declare type ExtensionTreeRendererRecord = NonNullable<WorkbenchExtensionMetadata["treeRenderers"]>[number];
657
+ declare type ExtensionTreeRendererRecord = NonNullable<InternalWorkbenchExtensionMetadata["treeRenderers"]>[number];
636
658
 
637
659
  declare interface ExtensionTreeResource {
638
660
  type: string;
@@ -641,7 +663,7 @@ declare interface ExtensionTreeResource {
641
663
  metadata?: Record<string, unknown>;
642
664
  }
643
665
 
644
- declare type ExtensionTreeViewRecord = WorkbenchExtensionMetadata["panels"][number] | NonNullable<WorkbenchExtensionMetadata["panels"][number]["panelMenus"]>[number];
666
+ declare type ExtensionTreeViewRecord = InternalWorkbenchExtensionMetadata["panels"][number] | NonNullable<InternalWorkbenchExtensionMetadata["panels"][number]["panelMenus"]>[number];
645
667
 
646
668
  export declare interface ExtensionWebviewFileCapabilities {
647
669
  delete(params: unknown): Promise<unknown> | unknown;
@@ -770,6 +792,7 @@ declare interface HistoryController {
770
792
  restore(): HistoryEntry | undefined;
771
793
  flush(): void;
772
794
  clear(): void;
795
+ migrateState(transform: (state: HistoryStoreState) => HistoryStoreState): void;
773
796
  }
774
797
 
775
798
  declare type HistoryEntry = WorkbenchNavigationEntry;
@@ -789,6 +812,53 @@ declare interface HostTreeDefaultNodesInput {
789
812
 
790
813
  declare type HostTreeDefaultNodesResolver = (input: HostTreeDefaultNodesInput) => Promise<TreeNode[]> | TreeNode[];
791
814
 
815
+ declare interface InternalWorkbenchExtensionMetadata {
816
+ extensions: WorkbenchExtensionMetadata["extensions"];
817
+ commands: WorkbenchExtensionMetadata["commands"];
818
+ menuContributions: ExtensionMenuContribution[];
819
+ commandPaletteContributions: WorkbenchExtensionMetadata["commandPaletteContributions"];
820
+ modes: ExtensionModeRecord[];
821
+ panels: WorkbenchExtensionPanelRecord[];
822
+ resourceKinds: ExtensionResourceKindRecord[];
823
+ resourcePanels: ExtensionResourcePanelRecord[];
824
+ resourceHierarchyProviders: Array<{
825
+ id: string;
826
+ extensionId: string;
827
+ resourceKind: string;
828
+ }>;
829
+ routes: [];
830
+ treeItems: ExtensionTreeItemContribution[];
831
+ activityItems: ExtensionActivityItemRecord[];
832
+ settingsSections: ExtensionSettingsSectionRecord[];
833
+ settingsPanels: WorkbenchExtensionSettingsPanelRecord[];
834
+ kanbanRenderers: WorkbenchExtensionKanbanRendererRecord[];
835
+ dataTableRenderers: WorkbenchExtensionDataTableRendererRecord[];
836
+ commandPaletteResources: WorkbenchExtensionCommandPaletteResourceRecord_2[];
837
+ treeRenderers: WorkbenchExtensionTreeRendererRecord[];
838
+ fileRenderers: WorkbenchExtensionFileRendererRecord[];
839
+ controlsRenderers: WorkbenchExtensionControlsRendererRecord[];
840
+ keybindings: ExtensionKeybindingRecord[];
841
+ settingsDefinitions: ExtensionSettingDefinitionRecord[];
842
+ statuses: WorkbenchExtensionMetadata["statuses"];
843
+ statusBarItems: Array<{
844
+ id: string;
845
+ extensionId: string;
846
+ viewId: string;
847
+ slot: "leading" | "trailing";
848
+ order?: number;
849
+ when?: {
850
+ mode?: string | string[];
851
+ source?: string[];
852
+ viewId?: string | string[];
853
+ resourceType?: string[];
854
+ metadata?: Record<string, unknown>;
855
+ };
856
+ }>;
857
+ diagnostics: WorkbenchExtensionMetadata["diagnostics"];
858
+ }
859
+
860
+ export declare const isExtensionNavigationTarget: (value: unknown) => value is NavigationTarget_2;
861
+
792
862
  declare interface KanbanRendererContribution<TRow extends KanbanRendererRow = KanbanRendererRow> {
793
863
  id: string;
794
864
  title: string;
@@ -1122,7 +1192,12 @@ declare interface NavigationTargetCompound {
1122
1192
  targets: readonly NavigationTargetItem[];
1123
1193
  }
1124
1194
 
1125
- declare type NavigationTargetItem = NavigationTargetResource | NavigationTargetPanel | NavigationTargetCommand;
1195
+ declare interface NavigationTargetHref {
1196
+ kind: "href";
1197
+ href: string;
1198
+ }
1199
+
1200
+ declare type NavigationTargetItem = NavigationTargetResource | NavigationTargetView | NavigationTargetPanel | NavigationTargetCommand | NavigationTargetHref;
1126
1201
 
1127
1202
  declare interface NavigationTargetPanel {
1128
1203
  kind: "panel";
@@ -1136,6 +1211,12 @@ declare interface NavigationTargetResource {
1136
1211
  input?: OpenResourceInput;
1137
1212
  }
1138
1213
 
1214
+ declare interface NavigationTargetView {
1215
+ kind: "view";
1216
+ viewId: string;
1217
+ input?: OpenWorkbenchViewInput;
1218
+ }
1219
+
1139
1220
  declare const NO_GROUPING = "none";
1140
1221
 
1141
1222
  declare interface NotificationRegistry {
@@ -1152,7 +1233,8 @@ declare interface OpenResourceInput {
1152
1233
  }
1153
1234
 
1154
1235
  declare interface OpenWidgetInput {
1155
- resource?: ResourceRef;
1236
+ viewId?: string | null;
1237
+ resource?: ResourceRef | null;
1156
1238
  title?: string;
1157
1239
  region?: WorkbenchRegion;
1158
1240
  role?: WorkbenchWidgetRole;
@@ -1170,7 +1252,10 @@ declare interface OpenWidgetInput {
1170
1252
  }
1171
1253
 
1172
1254
  declare interface OpenWorkbenchPanelInput {
1173
- resource?: ResourceRef;
1255
+ /** Set by the view registry. Low-level layout callers should leave this undefined. */
1256
+ viewId?: string | null;
1257
+ /** `null` explicitly clears an existing singleton placement's resource binding. */
1258
+ resource?: ResourceRef | null;
1174
1259
  title?: string;
1175
1260
  region?: WorkbenchRegion;
1176
1261
  role?: WorkbenchWidgetRole;
@@ -1182,6 +1267,8 @@ declare interface OpenWorkbenchPanelInput {
1182
1267
  strategy?: WorkbenchPanelOpenStrategy;
1183
1268
  }
1184
1269
 
1270
+ declare type OpenWorkbenchViewInput = Omit<OpenWorkbenchPanelInput, "viewId">;
1271
+
1185
1272
  export declare const panelMenuDeclarationOffsets: <T extends {
1186
1273
  panelMenus?: readonly unknown[];
1187
1274
  }>(panels: readonly T[]) => number[];
@@ -1315,36 +1402,47 @@ declare interface RegisteredWorkbenchNotification extends RegisteredContribution
1315
1402
  metadata?: Record<string, unknown>;
1316
1403
  }
1317
1404
 
1405
+ declare type RegisteredWorkbenchStatusSet = WorkbenchStatusSetContribution & RegisteredContributionMetadata;
1406
+
1407
+ declare type RegisteredWorkbenchView = WorkbenchViewContribution & RegisteredContributionMetadata;
1408
+
1318
1409
  export declare const registerWorkbenchExtensionCommandPaletteResources: (context: WorkbenchExtensionCommandContext, records: readonly WorkbenchExtensionCommandPaletteResourceRecord[]) => {
1319
1410
  dispose(): void;
1320
1411
  };
1321
1412
 
1322
- export declare const registerWorkbenchExtensionContributions: (input: RegisterWorkbenchExtensionContributionsInput) => {
1413
+ export declare const registerWorkbenchExtensionContributions: (sourceInput: RegisterWorkbenchExtensionContributionsInput) => {
1323
1414
  dispose(): void;
1324
1415
  };
1325
1416
 
1326
1417
  export declare interface RegisterWorkbenchExtensionContributionsInput {
1418
+ createKeybindingWhenExpression?: (when: ExtensionKeybindingRecord["when"]) => string | undefined;
1327
1419
  createMenuWhenExpression?: WorkbenchExtensionMenuWhenBuilder;
1328
1420
  createWebviewHostCapabilities?: CreateBridgeWebviewHostCapabilities;
1329
1421
  createWebviewHostCapabilityOverrides?: CreateBridgeWebviewHostCapabilities;
1330
1422
  createWebviewProps?: CreateBridgeWebviewProps;
1331
1423
  createWebviewTheme?: CreateBridgeWebviewTheme;
1332
1424
  executeCommand(commandId: string, body: CommandExecuteRequest): Promise<unknown> | unknown;
1425
+ kanbanAdapter?: WorkbenchExtensionKanbanRendererAdapter;
1333
1426
  menuSlotsById?: ReadonlyMap<string, WorkbenchExtensionMenuSlotConfig>;
1334
1427
  menuTargetsById?: ReadonlyMap<string, WorkbenchExtensionMenuSlotConfig>;
1428
+ menuRegistrations?: readonly WorkbenchExtensionHostMenuRegistration[];
1335
1429
  metadata: WorkbenchExtensionMetadata;
1336
1430
  openHref?: (href: string) => unknown;
1431
+ prepareCommandArgs?(commandId: string, args: unknown, context?: WorkbenchCommandExecutionContext, onArgsChange?: (args: unknown) => void): Promise<unknown> | unknown;
1432
+ prepareResource?: (resource: ResourceRef) => void;
1337
1433
  projectId: string;
1338
- routeResourceKind?: string;
1434
+ resolveViewInput?: WorkbenchExtensionViewInputResolver;
1435
+ resolveTreeNodeResource?: RegisterWorkbenchExtensionTreeRenderersInput["resolveNodeResource"];
1339
1436
  settingsSectionId?: string;
1340
1437
  settingsSectionTitle?: string;
1438
+ subscribeRefreshEvents?: (listener: (event: WorkbenchExtensionRefreshEvent) => void) => Disposable_2;
1341
1439
  webviewFiles?: ExtensionWebviewFileCapabilities;
1342
1440
  workbench: WorkbenchModuleContext;
1343
1441
  }
1344
1442
 
1345
- export declare const registerWorkbenchExtensionControlsRenderers: (context: WorkbenchExtensionCommandContext, records: WorkbenchExtensionControlsRendererRecord[], panels: ControlsViewRecord[], adapter?: WorkbenchExtensionControlsAdapter, resourcePanels?: WorkbenchExtensionMetadata["resourcePanels"]) => Disposable_2;
1443
+ export declare const registerWorkbenchExtensionControlsRenderers: (context: WorkbenchExtensionCommandContext, records: WorkbenchExtensionControlsRendererRecord[], panels: ControlsViewRecord[], adapter?: WorkbenchExtensionControlsAdapter, resourcePanels?: InternalWorkbenchExtensionMetadata["resourcePanels"]) => Disposable_2;
1346
1444
 
1347
- export declare const registerWorkbenchExtensionDataTableRenderers: (context: WorkbenchExtensionCommandContext, records: WorkbenchExtensionDataTableRendererRecord[], panels: DataTableViewRecord[], resourcePanels?: WorkbenchExtensionMetadata["resourcePanels"]) => Disposable_2;
1445
+ export declare const registerWorkbenchExtensionDataTableRenderers: (context: WorkbenchExtensionCommandContext, records: WorkbenchExtensionDataTableRendererRecord[], panels: DataTableViewRecord[], resourcePanels?: InternalWorkbenchExtensionMetadata["resourcePanels"], resolveViewInput?: WorkbenchExtensionViewInputResolver) => Disposable_2;
1348
1446
 
1349
1447
  export declare const registerWorkbenchExtensionFileRenderers: (input: RegisterWorkbenchExtensionFileRenderersInput) => {
1350
1448
  dispose(): void;
@@ -1352,12 +1450,13 @@ export declare const registerWorkbenchExtensionFileRenderers: (input: RegisterWo
1352
1450
 
1353
1451
  export declare interface RegisterWorkbenchExtensionFileRenderersInput {
1354
1452
  executeCommand(commandId: string, body: CommandExecuteRequest): Promise<unknown> | unknown;
1355
- metadata: WorkbenchExtensionMetadata;
1453
+ metadata: InternalWorkbenchExtensionMetadata;
1356
1454
  projectId: string;
1455
+ resolveViewInput?: WorkbenchExtensionViewInputResolver;
1357
1456
  workbench: WorkbenchModuleContext;
1358
1457
  }
1359
1458
 
1360
- export declare const registerWorkbenchExtensionKanbanRenderers: (context: WorkbenchExtensionCommandContext, records: readonly WorkbenchExtensionKanbanRendererRecord[], adapter?: WorkbenchExtensionKanbanRendererAdapter, panels?: WorkbenchExtensionMetadata["panels"], resourcePanels?: WorkbenchExtensionMetadata["resourcePanels"]) => {
1459
+ export declare const registerWorkbenchExtensionKanbanRenderers: (context: WorkbenchExtensionCommandContext, records: readonly WorkbenchExtensionKanbanRendererRecord[], adapter?: WorkbenchExtensionKanbanRendererAdapter, panels?: InternalWorkbenchExtensionMetadata["panels"], resourcePanels?: InternalWorkbenchExtensionMetadata["resourcePanels"]) => {
1361
1460
  dispose(): void;
1362
1461
  };
1363
1462
 
@@ -1365,6 +1464,9 @@ export declare const registerWorkbenchExtensionPanel: (input: RegisterWorkbenchE
1365
1464
 
1366
1465
  export declare interface RegisterWorkbenchExtensionPanelInput {
1367
1466
  contribution: WorkbenchPanelContribution;
1467
+ path?: string;
1468
+ aliases?: readonly string[];
1469
+ resolveInput?: WorkbenchViewContribution["resolveInput"];
1368
1470
  workbench: WorkbenchModuleContext;
1369
1471
  }
1370
1472
 
@@ -1384,7 +1486,7 @@ export declare interface RegisterWorkbenchExtensionTreeRenderersInput {
1384
1486
  executeCommand(commandId: string, body: CommandExecuteRequest): Promise<unknown> | unknown;
1385
1487
  getHostTreeFooterNodes?: HostTreeDefaultNodesResolver;
1386
1488
  getHostTreeHeaderNodes?: HostTreeDefaultNodesResolver;
1387
- metadata: WorkbenchExtensionMetadata;
1489
+ metadata: InternalWorkbenchExtensionMetadata;
1388
1490
  projectId: string;
1389
1491
  /**
1390
1492
  * Host canonicalization for node resources. A host that gives extension
@@ -1393,6 +1495,7 @@ export declare interface RegisterWorkbenchExtensionTreeRenderersInput {
1393
1495
  * gets a second identity when opened from a tree.
1394
1496
  */
1395
1497
  resolveNodeResource?: (resource: ExtensionTreeResource) => ResourceRef;
1498
+ resolveViewInput?: WorkbenchExtensionViewInputResolver;
1396
1499
  workbench: WorkbenchModuleContext;
1397
1500
  }
1398
1501
 
@@ -1475,7 +1578,7 @@ declare interface ResourceContextAction {
1475
1578
 
1476
1579
  declare interface ResourceHierarchyCycle {
1477
1580
  code: typeof resourceHierarchyCycleCode;
1478
- path: ResourceRef[];
1581
+ path: WorkbenchHierarchyNode[];
1479
1582
  repeatedUri: string;
1480
1583
  }
1481
1584
 
@@ -1485,7 +1588,7 @@ declare interface ResourceHierarchyProvider {
1485
1588
  id: string;
1486
1589
  priority?: number;
1487
1590
  canResolve(resource: ResourceRef): boolean;
1488
- getParent(resource: ResourceRef): ResourceRef | undefined;
1591
+ getParent(resource: ResourceRef): WorkbenchHierarchyNode | undefined;
1489
1592
  }
1490
1593
 
1491
1594
  declare interface ResourceKindContribution {
@@ -1553,7 +1656,7 @@ declare interface ResourceRegistry {
1553
1656
  listResources(query: string): readonly ResourceBrowseEntry[];
1554
1657
  registerHierarchyProvider(provider: ResourceHierarchyProvider): Disposable_2;
1555
1658
  listHierarchyProviders(): ResolvedResourceHierarchyProvider[];
1556
- walkHierarchy(resource: ResourceRef | undefined): ResourceRef[];
1659
+ walkHierarchy(resource: ResourceRef | undefined): WorkbenchHierarchyNode[];
1557
1660
  onDidDetectHierarchyCycle(listener: (cycle: ResourceHierarchyCycle) => void): Disposable_2;
1558
1661
  isOpeningResource(): boolean;
1559
1662
  openResource(resource: ResourceRef, input?: OpenResourceInput): Promise<WorkbenchPanelInstance>;
@@ -1684,6 +1787,34 @@ export declare const toWorkbenchCompositionPanelContribution: (input: {
1684
1787
  config?: WorkbenchPanelContribution["config"];
1685
1788
  }) => WorkbenchPanelContribution;
1686
1789
 
1790
+ export declare const toWorkbenchNavigationTarget: (target: NavigationTarget_2, input?: ToWorkbenchNavigationTargetInput) => NavigationTarget;
1791
+
1792
+ export declare interface ToWorkbenchNavigationTargetInput {
1793
+ commandIdOf?(command: Extract<NavigationTarget_2, {
1794
+ kind: "command";
1795
+ }>["target"]["command"]): string | undefined;
1796
+ commandTargetOf?(target: Extract<NavigationTarget_2, {
1797
+ kind: "command";
1798
+ }>): NavigationTargetCommand;
1799
+ extensionId?: string;
1800
+ resourceOf?(resource: Parameters<typeof toWorkbenchResource>[0], target: Extract<NavigationTarget_2, {
1801
+ kind: "resource";
1802
+ }>): ResourceRef;
1803
+ sourcePlacement?: ExtensionNavigationSourcePlacement;
1804
+ }
1805
+
1806
+ export declare const toWorkbenchNavigationTargetResult: (value: unknown, input?: ToWorkbenchNavigationTargetInput) => NavigationTarget | undefined;
1807
+
1808
+ declare const toWorkbenchResource: (resource: NonNullable<CommandExecuteRequest["resource"]>) => ResourceRef;
1809
+
1810
+ export declare const toWorkbenchWhenExpression: (when: WorkbenchExtensionMetadata["navigationItems"][number]["when"] | WorkbenchExtensionMetadata["statusBarItems"][number]["when"]) => {
1811
+ mode: string | string[] | undefined;
1812
+ source: any;
1813
+ viewId: string | string[] | undefined;
1814
+ resourceType: any;
1815
+ metadata: any;
1816
+ } | undefined;
1817
+
1687
1818
  declare interface TreeAction {
1688
1819
  id: string;
1689
1820
  label?: string;
@@ -1828,6 +1959,11 @@ declare interface TreeViewSection {
1828
1959
  canReorder?: boolean;
1829
1960
  }
1830
1961
 
1962
+ declare interface UnresolvedWorkbenchExtensionMenuContribution {
1963
+ contribution: ExtensionMenuContribution_2;
1964
+ targetId: string;
1965
+ }
1966
+
1831
1967
  /**
1832
1968
  * Core-owned contracts for kanban renderer contributions. @pstdio/ui's
1833
1969
  * KanbanRenderer props are structurally identical; the React layer bridges the
@@ -1986,6 +2122,7 @@ export declare interface WorkbenchCompositionRegistry {
1986
2122
 
1987
2123
  declare interface WorkbenchCore extends WorkbenchCoreContributionContext {
1988
2124
  host: WorkbenchHost;
2125
+ layout: WorkbenchLayoutModel;
1989
2126
  registerModule(module: WorkbenchModuleContribution): Disposable_2;
1990
2127
  unregisterModule(moduleId: string): void;
1991
2128
  }
@@ -2001,7 +2138,7 @@ declare interface WorkbenchCoreContributionContext {
2001
2138
  history: HistoryController;
2002
2139
  keybindings: KeybindingRegistry;
2003
2140
  lastResource: WorkbenchLastResourceController;
2004
- layout: WorkbenchLayoutModel;
2141
+ layout: WorkbenchModuleLayoutModel;
2005
2142
  modes: WorkbenchModeRegistry;
2006
2143
  navigation: NavigationRegistry;
2007
2144
  navigator: WorkbenchNavigator;
@@ -2010,7 +2147,10 @@ declare interface WorkbenchCoreContributionContext {
2010
2147
  preferences: PreferenceRegistry;
2011
2148
  renderers: WorkbenchRenderers;
2012
2149
  resources: ResourceRegistry;
2150
+ views: WorkbenchViewRegistry;
2013
2151
  settings: SettingsRegistry;
2152
+ statusBar: WorkbenchStatusBarRegistry;
2153
+ statuses: WorkbenchStatusRegistry;
2014
2154
  shell: WorkbenchShellController;
2015
2155
  sidePanel: WorkbenchSidePanelController;
2016
2156
  terminal: WorkbenchTerminalController;
@@ -2024,6 +2164,7 @@ declare interface WorkbenchCoreContributionContext {
2024
2164
 
2025
2165
  export declare interface WorkbenchExtensionCommandContext {
2026
2166
  executeCommand(commandId: string, body: CommandExecuteRequest): Promise<unknown> | unknown;
2167
+ prepareCommandArgs?(commandId: string, args: unknown, context?: WorkbenchCommandExecutionContext, onArgsChange?: (args: unknown) => void): Promise<unknown> | unknown;
2027
2168
  projectId: string;
2028
2169
  workbench: WorkbenchModuleContext;
2029
2170
  }
@@ -2038,9 +2179,19 @@ export declare interface WorkbenchExtensionCommandPaletteRegistration {
2038
2179
  export declare interface WorkbenchExtensionControlsAdapter {
2039
2180
  /** Supply a fallback resource when the widget placement carries none. */
2040
2181
  resolveResource?: (record: WorkbenchExtensionControlsRendererRecord) => ResourceRef | undefined;
2182
+ resolveViewInput?: WorkbenchExtensionViewInputResolver;
2183
+ }
2184
+
2185
+ export declare interface WorkbenchExtensionHostMenuRegistration extends Omit<WorkbenchExtensionMenuRegistration, "menuItem" | "menuPath"> {
2186
+ menuItems: Array<{
2187
+ menuItem: MenuItem;
2188
+ menuPath: MenuPath;
2189
+ }>;
2041
2190
  }
2042
2191
 
2043
2192
  export declare interface WorkbenchExtensionKanbanRendererAdapter {
2193
+ /** Add host navigation state changes that must run before a panel view opens. */
2194
+ resolveViewInput?: WorkbenchExtensionViewInputResolver;
2044
2195
  /** Override label resolution. Defaults to workbench's `text(value, fallback)`. */
2045
2196
  resolveLabel?: Localizer;
2046
2197
  /** Post-process an attribute descriptor (after localization). Defaults to identity. */
@@ -2098,7 +2249,7 @@ export declare interface WorkbenchExtensionKanbanRendererAdapter {
2098
2249
 
2099
2250
  export declare interface WorkbenchExtensionMenuRegistration {
2100
2251
  command: Command;
2101
- contribution: ExtensionMenuContribution;
2252
+ contribution: ExtensionMenuContribution_2;
2102
2253
  menuItem: MenuItem;
2103
2254
  menuPath: MenuPath;
2104
2255
  targetCommandId: string;
@@ -2110,7 +2261,7 @@ export declare interface WorkbenchExtensionMenuSlotConfig {
2110
2261
  overflowLabel?: string;
2111
2262
  }
2112
2263
 
2113
- export declare type WorkbenchExtensionMenuWhenBuilder = (contribution: ExtensionMenuContribution) => string | undefined;
2264
+ export declare type WorkbenchExtensionMenuWhenBuilder = (contribution: ExtensionMenuContribution_2) => string | undefined;
2114
2265
 
2115
2266
  export { WorkbenchExtensionMetadata }
2116
2267
 
@@ -2120,13 +2271,15 @@ declare interface WorkbenchExtensionRefreshEvent extends FileRendererRefreshEnve
2120
2271
 
2121
2272
  export declare type WorkbenchExtensionRendererKind = "tree" | "file" | "controls" | "dataTable" | "kanban";
2122
2273
 
2123
- export declare type WorkbenchExtensionRoute = WorkbenchExtensionMetadata["routes"][number];
2274
+ declare type WorkbenchExtensionStringResolver = (value: Localizable<string> | undefined, extensionId: string) => string;
2124
2275
 
2125
- export declare interface WorkbenchExtensionRouteResourceInput {
2126
- route: WorkbenchExtensionRoute;
2276
+ declare interface WorkbenchExtensionViewDescriptor {
2277
+ id: string;
2278
+ title: string;
2279
+ icon?: string;
2127
2280
  }
2128
2281
 
2129
- declare type WorkbenchExtensionStringResolver = (value: Localizable<string> | undefined, extensionId: string) => string;
2282
+ declare type WorkbenchExtensionViewInputResolver = (view: WorkbenchExtensionViewDescriptor) => WorkbenchViewContribution["resolveInput"];
2130
2283
 
2131
2284
  declare interface WorkbenchFileIconThemeStoreState {
2132
2285
  themes: readonly FileIconThemePreferenceOption[];
@@ -2152,6 +2305,8 @@ declare interface WorkbenchFocusState {
2152
2305
  activeRegion: WorkbenchFocusRegionId | undefined;
2153
2306
  }
2154
2307
 
2308
+ declare type WorkbenchHierarchyNode = ResourceRef | WorkbenchViewHierarchyNode;
2309
+
2155
2310
  declare interface WorkbenchHost {
2156
2311
  getSnapshot(): WorkbenchSnapshot;
2157
2312
  restoreSnapshot(snapshot: WorkbenchSnapshot): void;
@@ -2190,11 +2345,16 @@ declare interface WorkbenchLocationEligibility {
2190
2345
  resourceKinds?: string[];
2191
2346
  resourceIds?: string[];
2192
2347
  canOpen?(resource: ResourceRef): boolean;
2348
+ canOpenLocation?(location: {
2349
+ resource?: ResourceRef;
2350
+ viewId?: string;
2351
+ }): boolean;
2193
2352
  }
2194
2353
 
2195
2354
  declare interface WorkbenchLocationRef {
2196
2355
  key: string;
2197
2356
  modeId?: string;
2357
+ viewId?: string;
2198
2358
  resource?: ResourceRef;
2199
2359
  contributionId?: string;
2200
2360
  instanceKey?: string;
@@ -2265,6 +2425,8 @@ declare interface WorkbenchModuleContribution {
2265
2425
 
2266
2426
  declare type WorkbenchModuleContributionContext = WorkbenchModuleContext;
2267
2427
 
2428
+ declare type WorkbenchModuleLayoutModel = Omit<WorkbenchLayoutModel, "registerWidget">;
2429
+
2268
2430
  declare interface WorkbenchNavigationCommit {
2269
2431
  modeId: string | undefined;
2270
2432
  resource: ResourceRef | undefined;
@@ -2278,9 +2440,10 @@ declare interface WorkbenchNavigationEntry {
2278
2440
  recordedAt: number;
2279
2441
  location: WorkbenchLocationRef;
2280
2442
  selectedSubPanels: Partial<Record<WorkbenchPanelRegion, WorkbenchSubPanelRef>>;
2281
- kind: "resource" | "widget" | "mode";
2443
+ kind: "resource" | "view" | "widget" | "mode";
2282
2444
  modeId?: string;
2283
2445
  resource?: ResourceRef;
2446
+ viewId?: string;
2284
2447
  widgetId?: string;
2285
2448
  contributionId?: string;
2286
2449
  title?: string;
@@ -2399,6 +2562,7 @@ declare interface WorkbenchPanelContribution {
2399
2562
  declare interface WorkbenchPanelInstance {
2400
2563
  instanceId: string;
2401
2564
  panelId: string;
2565
+ viewId?: string;
2402
2566
  ownerId?: string;
2403
2567
  source?: ContributionSource;
2404
2568
  resource?: ResourceRef;
@@ -2416,6 +2580,7 @@ declare interface WorkbenchPanelInstance {
2416
2580
  declare interface WorkbenchPanelInstance_2 {
2417
2581
  instanceId: string;
2418
2582
  panelId: string;
2583
+ viewId?: string;
2419
2584
  ownerId?: string;
2420
2585
  source?: ContributionSource_2;
2421
2586
  resource?: ResourceRef_2;
@@ -2620,6 +2785,52 @@ declare interface WorkbenchSnapshot {
2620
2785
  layout: WorkbenchLayout;
2621
2786
  }
2622
2787
 
2788
+ declare interface WorkbenchStatusBarItem {
2789
+ id: string;
2790
+ viewId: string;
2791
+ slot: WorkbenchStatusBarSlot;
2792
+ order?: number;
2793
+ isVisible?(): boolean;
2794
+ }
2795
+
2796
+ declare interface WorkbenchStatusBarRegistry {
2797
+ store: WorkbenchStore<WorkbenchStatusBarRegistryState>;
2798
+ registerItem(item: WorkbenchStatusBarItem): Disposable_2;
2799
+ getItem(id: string): WorkbenchStatusBarItem | undefined;
2800
+ listItems(): WorkbenchStatusBarItem[];
2801
+ listVisibleItems(slot?: WorkbenchStatusBarSlot): WorkbenchStatusBarItem[];
2802
+ }
2803
+
2804
+ declare interface WorkbenchStatusBarRegistryState {
2805
+ items: Record<string, WorkbenchStatusBarItem>;
2806
+ }
2807
+
2808
+ declare type WorkbenchStatusBarSlot = "leading" | "trailing";
2809
+
2810
+ declare interface WorkbenchStatusRegistry {
2811
+ store: WorkbenchStore<WorkbenchStatusRegistryState>;
2812
+ registerStatusSet(contribution: WorkbenchStatusSetContribution, metadata?: ContributionMetadata): Disposable_2;
2813
+ getStatusSet(id: string): RegisteredWorkbenchStatusSet | undefined;
2814
+ listStatusSets(): RegisteredWorkbenchStatusSet[];
2815
+ getStatuses(id: string): readonly WorkflowStatus[] | undefined;
2816
+ load(id: string): Promise<readonly WorkflowStatus[]>;
2817
+ query(id: string): Promise<readonly WorkflowStatus[]>;
2818
+ save(id: string, statuses: readonly WorkflowStatus[]): Promise<readonly WorkflowStatus[]>;
2819
+ }
2820
+
2821
+ declare interface WorkbenchStatusRegistryState {
2822
+ statusSets: Record<string, RegisteredWorkbenchStatusSet>;
2823
+ values: Record<string, readonly WorkflowStatus[]>;
2824
+ }
2825
+
2826
+ declare interface WorkbenchStatusSetContribution {
2827
+ id: string;
2828
+ title: string;
2829
+ actions?: readonly WorkflowStatusAction[];
2830
+ query(): Promise<readonly WorkflowStatus[]> | readonly WorkflowStatus[];
2831
+ save?(statuses: readonly WorkflowStatus[]): Promise<readonly WorkflowStatus[]> | readonly WorkflowStatus[];
2832
+ }
2833
+
2623
2834
  declare interface WorkbenchStore<TState> {
2624
2835
  getState(): TState;
2625
2836
  getInitialState(): TState;
@@ -2664,6 +2875,7 @@ declare interface WorkbenchTerminalController {
2664
2875
  setSessionOpener(opener: WorkbenchTerminalSessionOpener | null): void;
2665
2876
  /** Opens a session; the live adapter stays host-side and only the id is returned. */
2666
2877
  open(input: {
2878
+ bindingId?: string;
2667
2879
  request: WorkbenchTerminalSessionRequest;
2668
2880
  title?: string;
2669
2881
  }): Promise<{
@@ -2682,6 +2894,7 @@ declare interface WorkbenchTerminalController {
2682
2894
  sessionId: string;
2683
2895
  signal?: string;
2684
2896
  }): Promise<void>;
2897
+ killBinding(bindingId: string): Promise<void>;
2685
2898
  subscribe(sessionId: string, sink: WorkbenchTerminalSessionSink): () => void;
2686
2899
  getSession(sessionId: string): WorkbenchTerminalSessionModel | undefined;
2687
2900
  listSessions(): WorkbenchTerminalSessionModel[];
@@ -2743,9 +2956,58 @@ declare interface WorkbenchThemeStoreState {
2743
2956
  themes: readonly ThemePreferenceOption[];
2744
2957
  }
2745
2958
 
2959
+ declare interface WorkbenchViewContribution {
2960
+ id: string;
2961
+ panelId: string;
2962
+ title?: string;
2963
+ icon?: string;
2964
+ path?: string;
2965
+ pathAliases?: readonly string[];
2966
+ aliases?: readonly string[];
2967
+ resource?: ResourceRef;
2968
+ canResolve?(): boolean;
2969
+ resolveInput?(input: OpenWorkbenchViewInput): OpenWorkbenchPanelInput;
2970
+ }
2971
+
2972
+ declare interface WorkbenchViewHierarchyNode {
2973
+ type: "view";
2974
+ viewId: string;
2975
+ label?: string;
2976
+ icon?: string;
2977
+ }
2978
+
2979
+ declare interface WorkbenchViewOpenEvent {
2980
+ viewId: string;
2981
+ input: OpenWorkbenchViewInput;
2982
+ instance: WorkbenchPanelInstance;
2983
+ }
2984
+
2985
+ declare interface WorkbenchViewRegistry {
2986
+ store: WorkbenchStore<WorkbenchViewRegistryStoreState>;
2987
+ registerView(view: WorkbenchViewContribution, metadata?: ContributionMetadata): Disposable_2;
2988
+ getView(viewId: string): RegisteredWorkbenchView | undefined;
2989
+ listViews(): RegisteredWorkbenchView[];
2990
+ resolveViewId(viewId: string): string | undefined;
2991
+ resolvePath(path: string): {
2992
+ kind: "view";
2993
+ viewId: string;
2994
+ } | undefined;
2995
+ canResolveView(viewId: string): boolean;
2996
+ isOpeningView(): boolean;
2997
+ openView(viewId: string, input?: OpenWorkbenchViewInput): Promise<WorkbenchPanelInstance>;
2998
+ onDidOpenView(listener: (event: WorkbenchViewOpenEvent) => void): Disposable_2;
2999
+ }
3000
+
3001
+ declare interface WorkbenchViewRegistryStoreState {
3002
+ views: Record<string, RegisteredWorkbenchView>;
3003
+ aliases: Record<string, string>;
3004
+ paths: Record<string, string>;
3005
+ }
3006
+
2746
3007
  declare interface WorkbenchWidgetPlacement {
2747
3008
  widgetId: string;
2748
3009
  contributionId: string;
3010
+ viewId?: string;
2749
3011
  ownerId?: string;
2750
3012
  source?: ContributionSource;
2751
3013
  resource?: ResourceRef;
@@ -2775,4 +3037,27 @@ declare interface WorkbenchWidgetTab_2 {
2775
3037
  customMenuRendererId?: string;
2776
3038
  }
2777
3039
 
3040
+ declare interface WorkflowStatus {
3041
+ id: string;
3042
+ label: string;
3043
+ color: string;
3044
+ icon?: string | null;
3045
+ sortOrder: number;
3046
+ isDefault?: boolean;
3047
+ board?: WorkflowStatusBoardRules;
3048
+ }
3049
+
3050
+ declare interface WorkflowStatusAction {
3051
+ id: string;
3052
+ label: string;
3053
+ icon?: string;
3054
+ }
3055
+
3056
+ declare interface WorkflowStatusBoardRules {
3057
+ canCreate?: boolean;
3058
+ canDragIn?: boolean;
3059
+ canDragOut?: boolean;
3060
+ actions?: readonly string[];
3061
+ }
3062
+
2778
3063
  export { }