@pstdio/workbench 0.5.0 → 0.6.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 (33) hide show
  1. package/README.md +66 -72
  2. package/dist/composition-resolver-types-CWykPyEK.js +241 -0
  3. package/dist/composition-resolver-types-CWykPyEK.js.map +1 -0
  4. package/dist/extensions.d.ts +344 -28
  5. package/dist/extensions.js +1362 -883
  6. package/dist/extensions.js.map +1 -1
  7. package/dist/file-renderer-view-zpunbE4I.js +432 -0
  8. package/dist/file-renderer-view-zpunbE4I.js.map +1 -0
  9. package/dist/file-section-navigation-CfYqVObc.js +30 -0
  10. package/dist/file-section-navigation-CfYqVObc.js.map +1 -0
  11. package/dist/index.d.ts +268 -15
  12. package/dist/index.js +2334 -2082
  13. package/dist/index.js.map +1 -1
  14. package/dist/layout-types-DMoZz38-.js.map +1 -1
  15. package/dist/react.d.ts +141 -13
  16. package/dist/react.js +1969 -1994
  17. package/dist/react.js.map +1 -1
  18. package/dist/storage.js +132 -155
  19. package/dist/storage.js.map +1 -1
  20. package/dist/testing.d.ts +141 -13
  21. package/dist/webview-runtime.js +1 -1
  22. package/dist/webview-runtime.js.map +1 -1
  23. package/dist/workbench-built-ins-BtgeB274.js +1171 -0
  24. package/dist/workbench-built-ins-BtgeB274.js.map +1 -0
  25. package/dist/workbench-menu-paths-Bb0ICxeG.js +20 -0
  26. package/dist/workbench-menu-paths-Bb0ICxeG.js.map +1 -0
  27. package/package.json +3 -3
  28. package/dist/context-key-service-B2K9LAec.js +0 -1034
  29. package/dist/context-key-service-B2K9LAec.js.map +0 -1
  30. package/dist/file-renderer-view-DrrhYnb_.js +0 -171
  31. package/dist/file-renderer-view-DrrhYnb_.js.map +0 -1
  32. package/dist/workbench-menu-paths-B_QJzcNU.js +0 -12
  33. package/dist/workbench-menu-paths-B_QJzcNU.js.map +0 -1
@@ -1,4 +1,5 @@
1
1
  import { CommandExecuteRequest } from '@pstdio/sdk/api';
2
+ import { CommandExecuteResponse } from '@pstdio/sdk/api';
2
3
  import { ComponentType } from 'react';
3
4
  import { ExtensionCommandPaletteContribution } from '@pstdio/sdk/api';
4
5
  import { ExtensionMenuContribution } from '@pstdio/sdk/api';
@@ -224,6 +225,72 @@ declare interface CommandRegistryStoreState {
224
225
  commands: Record<string, RegisteredCommand>;
225
226
  }
226
227
 
228
+ declare interface CompositionDiagnostic {
229
+ code: "extension_resource_kind_missing" | "extension_resource_slot_missing" | "extension_resource_slot_closed" | "extension_panel_missing" | "extension_panel_placement_unresolvable" | "extension_mode_resource_unsupported" | "extension_placement_required_invalid" | "extension_resource_primary_invalid";
230
+ message: string;
231
+ panelId?: string;
232
+ slot?: string;
233
+ }
234
+
235
+ declare interface CompositionModeDefinition {
236
+ id: string;
237
+ extensionId?: string;
238
+ resources?: Record<string, CompositionModeRecipe>;
239
+ modePanels?: Record<string, CompositionPlacementPolicy>;
240
+ }
241
+
242
+ declare interface CompositionModeRecipe {
243
+ slots?: Record<string, CompositionPlacementPolicy>;
244
+ panels?: Record<string, CompositionPlacementPolicy>;
245
+ }
246
+
247
+ declare interface CompositionPanelDefinition {
248
+ id: string;
249
+ extensionId: string;
250
+ title: string;
251
+ icon?: string;
252
+ show?: CompositionPanelPlacement | readonly CompositionPanelPlacement[];
253
+ }
254
+
255
+ declare interface CompositionPanelPlacement extends CompositionPlacementPolicy {
256
+ resourceKind?: string;
257
+ }
258
+
259
+ declare interface CompositionPlacementPolicy {
260
+ region: DockedCompositionRegion;
261
+ allowedRegions?: readonly DockedCompositionRegion[];
262
+ required?: boolean;
263
+ defaultOpen?: boolean;
264
+ pinned?: boolean;
265
+ }
266
+
267
+ declare interface CompositionReconcileContext {
268
+ layout: LayoutModel;
269
+ notifications: NotificationRegistry;
270
+ }
271
+
272
+ export declare const compositionRequiredNotificationId: (modeId: string) => string;
273
+
274
+ declare interface CompositionResourceKindDefinition {
275
+ id: string;
276
+ extensionId: string;
277
+ surface: "primary" | "secondary" | "attached";
278
+ slots: Record<string, CompositionSlotDefinition>;
279
+ }
280
+
281
+ declare interface CompositionResourcePanelEdge {
282
+ id: string;
283
+ extensionId: string;
284
+ resourceKind: string;
285
+ panel: string;
286
+ slot: string;
287
+ }
288
+
289
+ declare interface CompositionSlotDefinition {
290
+ cardinality: "one" | "many";
291
+ external: boolean;
292
+ }
293
+
227
294
  declare interface ContextKeyScope extends Disposable_2 {
228
295
  ownerId: string;
229
296
  set(key: string, value: ContextKeyValue): void;
@@ -366,6 +433,8 @@ declare interface CreateTerminalSessionCapabilityInput {
366
433
  hostEvents: HostEventPublisher;
367
434
  }
368
435
 
436
+ export declare const createWorkbenchCompositionRegistry: () => WorkbenchCompositionRegistry;
437
+
369
438
  export declare const createWorkbenchWebviewHostCapabilities: (input: CreateWorkbenchWebviewHostCapabilitiesInput) => {
370
439
  "terminal.session"?: HostCapability | undefined;
371
440
  "commands.execute": (params: unknown) => Promise<unknown>;
@@ -445,7 +514,7 @@ declare interface DataTableRendererContribution {
445
514
  emptyDescription?: string;
446
515
  executeQuery(context: DataTableRendererQueryContext): Promise<DataTableRendererQueryResult> | DataTableRendererQueryResult;
447
516
  subscribe?: (listener: () => void) => Disposable_2 | (() => void);
448
- onRowClick?: (row: DataTableRendererRow) => void;
517
+ onRowActivate?: (row: DataTableRendererRow) => Promise<void> | void;
449
518
  }
450
519
 
451
520
  declare type DataTableRendererImplementation = (input: WorkbenchPanelRenderInput & {
@@ -513,10 +582,27 @@ declare interface DataTableRendererThemeColor {
513
582
 
514
583
  declare type DataTableViewRecord = WorkbenchExtensionMetadata["panels"][number];
515
584
 
585
+ declare interface DeclaredPanelPlacement {
586
+ for?: string;
587
+ region: DockedCompositionRegion;
588
+ allowedRegions?: readonly DockedCompositionRegion[];
589
+ required?: boolean;
590
+ defaultOpen?: boolean;
591
+ pinned?: boolean;
592
+ }
593
+
516
594
  declare interface Disposable_2 {
517
595
  dispose(): void;
518
596
  }
519
597
 
598
+ declare type DockedCompositionRegion = (typeof dockedCompositionRegions)[number];
599
+
600
+ declare type DockedCompositionRegion_2 = (typeof dockedCompositionRegions_2)[number];
601
+
602
+ declare const dockedCompositionRegions: readonly ["sidenav", "main", "secondary", "side"];
603
+
604
+ declare const dockedCompositionRegions_2: readonly ["sidenav", "main", "secondary", "side"];
605
+
520
606
  export declare const emptyWorkbenchExtensionMetadata: WorkbenchExtensionMetadata;
521
607
 
522
608
  declare interface EnumOption {
@@ -538,10 +624,19 @@ declare interface EnumOptionsSource {
538
624
  getSnapshot: () => EnumOption[];
539
625
  }
540
626
 
541
- declare type ExtensionPanelPlacement = NonNullable<WorkbenchExtensionMetadata["panels"][number]["placement"]>;
627
+ declare type ExtensionPanelRecord = WorkbenchExtensionMetadata["panels"][number];
628
+
629
+ declare type ExtensionResourcePanels = WorkbenchExtensionMetadata["resourcePanels"];
542
630
 
543
631
  declare type ExtensionTreeRendererRecord = NonNullable<WorkbenchExtensionMetadata["treeRenderers"]>[number];
544
632
 
633
+ declare interface ExtensionTreeResource {
634
+ type: string;
635
+ id: string;
636
+ label?: string;
637
+ metadata?: Record<string, unknown>;
638
+ }
639
+
545
640
  declare type ExtensionTreeViewRecord = WorkbenchExtensionMetadata["panels"][number] | NonNullable<WorkbenchExtensionMetadata["panels"][number]["panelMenus"]>[number];
546
641
 
547
642
  export declare interface ExtensionWebviewFileCapabilities {
@@ -590,6 +685,8 @@ declare interface FileRendererContent {
590
685
  content?: string;
591
686
  dataUrl?: string;
592
687
  placeholder?: string;
688
+ /** Ordered backing-store revision when one is available. */
689
+ revision?: string;
593
690
  }
594
691
 
595
692
  declare interface FileRendererContribution {
@@ -599,35 +696,55 @@ declare interface FileRendererContribution {
599
696
  /** Resolve the file's content (and identity) for the bound resource. */
600
697
  load(resource: ResourceRef | undefined): Promise<FileRendererContent> | FileRendererContent;
601
698
  /** Persist edited text. Absent ⇒ read-only. Never called for images. */
602
- save?(resource: ResourceRef | undefined, content: string): Promise<void> | void;
699
+ save?(resource: ResourceRef | undefined, content: string, origin?: FileRendererRefreshOrigin): Promise<FileRendererSaveResult | undefined> | FileRendererSaveResult | void;
603
700
  }
604
701
 
605
702
  declare type FileRendererImplementation = (input: WorkbenchPanelRenderInput & {
606
703
  fileRendererId: string;
607
704
  }) => unknown;
608
705
 
609
- declare interface FileRendererRefreshEvent {
706
+ declare interface FileRendererRefreshEnvelope {
707
+ resourceUri?: string;
708
+ origin?: FileRendererRefreshOrigin;
709
+ revision?: string;
710
+ }
711
+
712
+ export declare const fileRendererRefreshEnvelopeFromCommand: (body: CommandExecuteRequest, response: CommandExecuteResponse) => FileRendererRefreshEnvelope | undefined;
713
+
714
+ declare interface FileRendererRefreshEvent extends FileRendererRefreshEnvelope {
610
715
  fileRendererId: string;
611
716
  }
612
717
 
613
718
  declare type FileRendererRefreshListener = (event: FileRendererRefreshEvent) => void;
614
719
 
720
+ declare interface FileRendererRefreshOrigin {
721
+ rendererId: string;
722
+ instanceId: string;
723
+ operationId: string;
724
+ }
725
+
615
726
  declare interface FileRendererRegistry {
616
727
  fileRendererStore: WorkbenchStore<FileRendererStoreState>;
617
728
  registerFileRenderer(contribution: FileRendererContribution, metadata?: ContributionMetadata): Disposable_2;
618
729
  setFileRendererImplementation(impl: FileRendererImplementation): void;
619
730
  getFileRenderer(id: string): RegisteredFileRendererContribution | undefined;
620
731
  listFileRenderers(): RegisteredFileRendererContribution[];
621
- refreshFileRenderer(id: string): void;
732
+ refreshFileRenderer(id: string, event?: FileRendererRefreshEnvelope): void;
622
733
  onDidRefreshFileRenderer(listener: FileRendererRefreshListener): Disposable_2;
623
734
  }
624
735
 
736
+ declare interface FileRendererSaveResult {
737
+ revision?: string;
738
+ }
739
+
625
740
  declare interface FileRendererStoreState {
626
741
  renderers: Record<string, RegisteredFileRendererContribution>;
627
742
  }
628
743
 
629
744
  declare interface HistoryController {
630
745
  store: WorkbenchStore<HistoryStoreState>;
746
+ /** Snapshot the history for a compound navigation; the returned function restores it. */
747
+ createCheckpoint(): () => void;
631
748
  goBack(): HistoryEntry | undefined;
632
749
  goForward(): HistoryEntry | undefined;
633
750
  goPrevious(): HistoryEntry | undefined;
@@ -661,6 +778,8 @@ declare interface KanbanRendererContribution<TRow extends KanbanRendererRow = Ka
661
778
  id: string;
662
779
  title: string;
663
780
  resourceKind?: string;
781
+ /** Host-owned scope for persisted display settings. */
782
+ storageScope?: string;
664
783
  /**
665
784
  * Declarative attribute schema. The renderer dispatches filter / group /
666
785
  * sort / display / inline-edit behavior on each descriptor's `type.kind`.
@@ -688,8 +807,8 @@ declare interface KanbanRendererContribution<TRow extends KanbanRendererRow = Ka
688
807
  */
689
808
  executeQuery(state: KanbanRendererQueryState): Promise<TRow[]> | TRow[];
690
809
  subscribe?: (listener: () => void) => Disposable_2 | (() => void);
691
- /** Row interactions surfaced by the renderer (mirrored from <KanbanRenderer>). */
692
- onRowClick?: (row: TRow) => void;
810
+ /** Row activation surfaced by the renderer (mirrored from <KanbanRenderer>). */
811
+ onRowActivate?: (row: TRow) => Promise<void> | void;
693
812
  /** Per-row right-click context menu actions (mirrored from <KanbanRenderer>). */
694
813
  getRowContextMenuActions?: (row: TRow) => ResourceContextAction[];
695
814
  /**
@@ -783,7 +902,7 @@ declare interface KanbanRendererRow {
783
902
  title: string;
784
903
  /**
785
904
  * Optional navigation handle. When set, the renderer's default click handler
786
- * routes through the contribution's onRowClick (which typically opens the
905
+ * routes through the contribution's onRowActivate (which typically opens the
787
906
  * resource via the workbench).
788
907
  */
789
908
  resource?: unknown;
@@ -890,6 +1009,16 @@ declare interface LayoutModel {
890
1009
  carryRegionState?: readonly WorkbenchRegion[];
891
1010
  }): void;
892
1011
  getPersistenceScope(): LayoutScope | undefined;
1012
+ /** True when the current persistence scope already stores a layout. A new scope returns false. */
1013
+ /** Whether anything is stored for the active scope right now. */
1014
+ hasPersistedLayout(): boolean;
1015
+ /**
1016
+ * Whether the active scope was entered with a layout the user already had. Unlike
1017
+ * `hasPersistedLayout`, writes made while entering a mode do not change the answer.
1018
+ */
1019
+ enteredWithPersistedLayout(): boolean;
1020
+ /** Moves owned panel menus beside their owner's current region and removes orphan menus. */
1021
+ reconcilePanelMenus(): void;
893
1022
  onWillChangePersistenceScope(listener: (scope: LayoutScope | undefined) => void): {
894
1023
  dispose(): void;
895
1024
  };
@@ -900,6 +1029,13 @@ declare interface LayoutModel {
900
1029
 
901
1030
  declare type LayoutScope = string;
902
1031
 
1032
+ export declare const listCompositionAddablePanels: (input: {
1033
+ registry: WorkbenchCompositionRegistry;
1034
+ modeId: string;
1035
+ layout: ReturnType<LayoutModel["getLayout"]>;
1036
+ resourceKind?: string;
1037
+ }) => readonly ResolvedCompositionAddablePanel[];
1038
+
903
1039
  declare type Localizer = (value: unknown, fallback?: string) => string;
904
1040
 
905
1041
  declare const MANUAL_ORDERING = "manual";
@@ -1004,6 +1140,7 @@ declare interface OpenWidgetInput {
1004
1140
  resource?: ResourceRef;
1005
1141
  title?: string;
1006
1142
  region?: WorkbenchRegion;
1143
+ role?: WorkbenchWidgetRole;
1007
1144
  ownerId?: string;
1008
1145
  source?: ContributionSource;
1009
1146
  pinned?: boolean;
@@ -1021,7 +1158,9 @@ declare interface OpenWorkbenchPanelInput {
1021
1158
  resource?: ResourceRef;
1022
1159
  title?: string;
1023
1160
  region?: WorkbenchRegion;
1161
+ role?: WorkbenchWidgetRole;
1024
1162
  pinned?: boolean;
1163
+ closable?: boolean;
1025
1164
  mountStrategy?: WorkbenchPanelMountStrategy;
1026
1165
  hiddenByDefault?: boolean;
1027
1166
  tab?: WorkbenchPanelTab;
@@ -1076,9 +1215,16 @@ declare interface PreferenceScopeRef {
1076
1215
 
1077
1216
  declare type PreferenceValue = boolean | number | string | string[] | number[] | boolean[] | Record<string, unknown>;
1078
1217
 
1218
+ export declare const reconcileCompositionLayout: (ctx: CompositionReconcileContext, input: {
1219
+ registry: WorkbenchCompositionRegistry;
1220
+ modeId: string;
1221
+ resourceKind?: string;
1222
+ seeding?: boolean;
1223
+ }) => ResolvedComposition | undefined;
1224
+
1079
1225
  export declare const refreshOpenWorkbenchExtensionWebviews: (workbench: WorkbenchModuleContext, metadata: WorkbenchExtensionMetadata) => void;
1080
1226
 
1081
- export declare const refreshWorkbenchExtensionContributions: (workbench: WorkbenchModuleContext, metadata: WorkbenchExtensionMetadata, commandId: string) => void;
1227
+ export declare const refreshWorkbenchExtensionRenderer: (workbench: WorkbenchModuleContext, target: RendererRefreshTarget, envelope?: FileRendererRefreshEnvelope) => void;
1082
1228
 
1083
1229
  declare interface RegisteredCommand extends RegisteredContributionMetadata {
1084
1230
  command: Command;
@@ -1141,7 +1287,6 @@ declare type RegisteredWidgetContribution = Omit<WidgetContribution, "priority"
1141
1287
  ownedPanelMenuIds?: readonly string[];
1142
1288
  singleton: boolean;
1143
1289
  reuse: WidgetReusePolicy;
1144
- role: WorkbenchWidgetRole;
1145
1290
  } & RegisteredContributionMetadata;
1146
1291
 
1147
1292
  declare interface RegisteredWorkbenchNotification extends RegisteredContributionMetadata {
@@ -1182,9 +1327,9 @@ export declare interface RegisterWorkbenchExtensionContributionsInput {
1182
1327
  workbench: WorkbenchModuleContext;
1183
1328
  }
1184
1329
 
1185
- export declare const registerWorkbenchExtensionControlsRenderers: (context: WorkbenchExtensionCommandContext, records: WorkbenchExtensionControlsRendererRecord[], panels: ControlsViewRecord[], adapter?: WorkbenchExtensionControlsAdapter) => Disposable_2;
1330
+ export declare const registerWorkbenchExtensionControlsRenderers: (context: WorkbenchExtensionCommandContext, records: WorkbenchExtensionControlsRendererRecord[], panels: ControlsViewRecord[], adapter?: WorkbenchExtensionControlsAdapter, resourcePanels?: WorkbenchExtensionMetadata["resourcePanels"]) => Disposable_2;
1186
1331
 
1187
- export declare const registerWorkbenchExtensionDataTableRenderers: (context: WorkbenchExtensionCommandContext, records: WorkbenchExtensionDataTableRendererRecord[], panels: DataTableViewRecord[]) => Disposable_2;
1332
+ export declare const registerWorkbenchExtensionDataTableRenderers: (context: WorkbenchExtensionCommandContext, records: WorkbenchExtensionDataTableRendererRecord[], panels: DataTableViewRecord[], resourcePanels?: WorkbenchExtensionMetadata["resourcePanels"]) => Disposable_2;
1188
1333
 
1189
1334
  export declare const registerWorkbenchExtensionFileRenderers: (input: RegisterWorkbenchExtensionFileRenderersInput) => {
1190
1335
  dispose(): void;
@@ -1197,7 +1342,7 @@ export declare interface RegisterWorkbenchExtensionFileRenderersInput {
1197
1342
  workbench: WorkbenchModuleContext;
1198
1343
  }
1199
1344
 
1200
- export declare const registerWorkbenchExtensionKanbanRenderers: (context: WorkbenchExtensionCommandContext, records: readonly WorkbenchExtensionKanbanRendererRecord[], adapter?: WorkbenchExtensionKanbanRendererAdapter) => {
1345
+ export declare const registerWorkbenchExtensionKanbanRenderers: (context: WorkbenchExtensionCommandContext, records: readonly WorkbenchExtensionKanbanRendererRecord[], adapter?: WorkbenchExtensionKanbanRendererAdapter, panels?: WorkbenchExtensionMetadata["panels"], resourcePanels?: WorkbenchExtensionMetadata["resourcePanels"]) => {
1201
1346
  dispose(): void;
1202
1347
  };
1203
1348
 
@@ -1208,6 +1353,14 @@ export declare interface RegisterWorkbenchExtensionPanelInput {
1208
1353
  workbench: WorkbenchModuleContext;
1209
1354
  }
1210
1355
 
1356
+ export declare const registerWorkbenchExtensionRendererRefreshEvents: (input: RegisterWorkbenchExtensionRendererRefreshEventsInput) => Disposable_2;
1357
+
1358
+ export declare interface RegisterWorkbenchExtensionRendererRefreshEventsInput {
1359
+ metadata: WorkbenchExtensionMetadata;
1360
+ subscribe: (listener: (event: WorkbenchExtensionRefreshEvent) => void) => Disposable_2;
1361
+ workbench: WorkbenchModuleContext;
1362
+ }
1363
+
1211
1364
  export declare const registerWorkbenchExtensionTreeRenderers: (input: RegisterWorkbenchExtensionTreeRenderersInput) => {
1212
1365
  dispose(): void;
1213
1366
  };
@@ -1218,6 +1371,13 @@ export declare interface RegisterWorkbenchExtensionTreeRenderersInput {
1218
1371
  getHostTreeHeaderNodes?: HostTreeDefaultNodesResolver;
1219
1372
  metadata: WorkbenchExtensionMetadata;
1220
1373
  projectId: string;
1374
+ /**
1375
+ * Host canonicalization for node resources. A host that gives extension
1376
+ * resources its own URIs (layout scopes, history, and hierarchy key on the
1377
+ * URI) must convert tree node resources the same way, or the same resource
1378
+ * gets a second identity when opened from a tree.
1379
+ */
1380
+ resolveNodeResource?: (resource: ExtensionTreeResource) => ResourceRef;
1221
1381
  workbench: WorkbenchModuleContext;
1222
1382
  }
1223
1383
 
@@ -1231,6 +1391,47 @@ export declare const renderBridgeWebviewFrame: (input: {
1231
1391
  webview: BridgeWebviewConfig;
1232
1392
  }) => JSX.Element;
1233
1393
 
1394
+ declare interface RendererRefreshTarget {
1395
+ id: string;
1396
+ kind: WorkbenchExtensionRendererKind;
1397
+ }
1398
+
1399
+ declare interface ResolvedComposition {
1400
+ placements: readonly ResolvedCompositionPlacement[];
1401
+ regionOrder: Partial<Record<DockedCompositionRegion, readonly string[]>>;
1402
+ activePanelIds: Partial<Record<DockedCompositionRegion, string>>;
1403
+ addablePanels: readonly ResolvedCompositionAddablePanel_2[];
1404
+ diagnostics: readonly CompositionDiagnostic[];
1405
+ requiredFallback?: {
1406
+ panelId: string;
1407
+ };
1408
+ }
1409
+
1410
+ declare interface ResolvedCompositionAddablePanel {
1411
+ panelId: string;
1412
+ region: DockedCompositionRegion_2;
1413
+ allowedRegions: readonly DockedCompositionRegion_2[];
1414
+ pinned?: boolean;
1415
+ }
1416
+
1417
+ declare interface ResolvedCompositionAddablePanel_2 {
1418
+ panelId: string;
1419
+ region: DockedCompositionRegion;
1420
+ allowedRegions: readonly DockedCompositionRegion[];
1421
+ pinned?: boolean;
1422
+ }
1423
+
1424
+ declare interface ResolvedCompositionPlacement {
1425
+ panelId: string;
1426
+ region: DockedCompositionRegion;
1427
+ slot?: string;
1428
+ required: boolean;
1429
+ defaultOpen: boolean;
1430
+ pinned?: boolean;
1431
+ allowedRegions: readonly DockedCompositionRegion[];
1432
+ origin: "persisted" | "required" | "default";
1433
+ }
1434
+
1234
1435
  declare type ResolvedResourceHierarchyProvider = Required<ResourceHierarchyProvider>;
1235
1436
 
1236
1437
  declare type ResolvedResourcePresenter = Required<ResourcePresenter>;
@@ -1255,6 +1456,14 @@ declare interface ResourceContextAction {
1255
1456
  separatorBefore?: boolean;
1256
1457
  }
1257
1458
 
1459
+ declare interface ResourceHierarchyCycle {
1460
+ code: typeof resourceHierarchyCycleCode;
1461
+ path: ResourceRef[];
1462
+ repeatedUri: string;
1463
+ }
1464
+
1465
+ declare const resourceHierarchyCycleCode = "resource_hierarchy_cycle";
1466
+
1258
1467
  declare interface ResourceHierarchyProvider {
1259
1468
  id: string;
1260
1469
  priority?: number;
@@ -1327,6 +1536,7 @@ declare interface ResourceRegistry {
1327
1536
  registerHierarchyProvider(provider: ResourceHierarchyProvider): Disposable_2;
1328
1537
  listHierarchyProviders(): ResolvedResourceHierarchyProvider[];
1329
1538
  walkHierarchy(resource: ResourceRef | undefined): ResourceRef[];
1539
+ onDidDetectHierarchyCycle(listener: (cycle: ResourceHierarchyCycle) => void): Disposable_2;
1330
1540
  isOpeningResource(): boolean;
1331
1541
  openResource(resource: ResourceRef, input?: OpenResourceInput): Promise<WorkbenchPanelInstance>;
1332
1542
  onDidOpenResource(listener: (resource: ResourceRef) => void): Disposable_2;
@@ -1418,10 +1628,6 @@ declare interface SettingsSectionContribution {
1418
1628
  actions?: SettingsAction[];
1419
1629
  }
1420
1630
 
1421
- export declare const shouldRefreshWorkbenchExtensionDataTableRenderers: (metadata: WorkbenchExtensionMetadata, commandId: string) => boolean;
1422
-
1423
- export declare const shouldRefreshWorkbenchExtensionTrees: (metadata: WorkbenchExtensionMetadata, commandId: string) => boolean;
1424
-
1425
1631
  declare type SortDirection = "asc" | "desc";
1426
1632
 
1427
1633
  /**
@@ -1449,9 +1655,16 @@ declare interface ThemeRegistry {
1449
1655
  listThemes(): readonly ThemePreferenceOption[];
1450
1656
  }
1451
1657
 
1452
- export declare const toWorkbenchExtensionPlacementMetadata: (input: WorkbenchExtensionPlacementInput) => {
1453
- priority: number;
1454
- };
1658
+ export declare const toPanelPlacements: (show: DeclaredPanelPlacement | readonly DeclaredPanelPlacement[] | undefined) => any[];
1659
+
1660
+ export declare const toWorkbenchCompositionPanelContribution: (input: {
1661
+ panel: ExtensionPanelRecord;
1662
+ rendererId: string;
1663
+ declarationIndex: number;
1664
+ menuDeclarationOffset: number;
1665
+ resourcePanels?: ExtensionResourcePanels;
1666
+ config?: WorkbenchPanelContribution["config"];
1667
+ }) => WorkbenchPanelContribution;
1455
1668
 
1456
1669
  declare interface TreeAction {
1457
1670
  id: string;
@@ -1608,7 +1821,6 @@ declare interface WidgetContribution {
1608
1821
  priority?: number;
1609
1822
  rendererId: string;
1610
1823
  openCommandId?: string;
1611
- role?: WorkbenchWidgetRole;
1612
1824
  eligibleLocations?: WorkbenchLocationEligibility;
1613
1825
  panelMenuOwner?: WorkbenchPanelMenuOwner;
1614
1826
  tab?: WorkbenchWidgetTab;
@@ -1708,6 +1920,35 @@ declare interface WorkbenchCommandParamsRequest {
1708
1920
  context?: WorkbenchCommandExecutionContext;
1709
1921
  }
1710
1922
 
1923
+ declare interface WorkbenchComposition {
1924
+ resourceKinds: readonly CompositionResourceKindDefinition[];
1925
+ panels: readonly CompositionPanelDefinition[];
1926
+ resourcePanels: readonly CompositionResourcePanelEdge[];
1927
+ }
1928
+
1929
+ declare interface WorkbenchCompositionAddablePanel extends WorkbenchModeAddablePanel {
1930
+ contribution: RegisteredWidgetContribution;
1931
+ }
1932
+
1933
+ declare interface WorkbenchCompositionController {
1934
+ panelsFor(region: WorkbenchPanelRegion): WorkbenchCompositionRegionPanels;
1935
+ }
1936
+
1937
+ declare interface WorkbenchCompositionRegionPanels {
1938
+ open: readonly WorkbenchWidgetPlacement[];
1939
+ addable: readonly WorkbenchCompositionAddablePanel[];
1940
+ closable: readonly string[];
1941
+ }
1942
+
1943
+ export declare interface WorkbenchCompositionRegistry {
1944
+ registerResourceKind(definition: CompositionResourceKindDefinition): Disposable_2;
1945
+ registerPanelCapability(definition: CompositionPanelDefinition): Disposable_2;
1946
+ registerResourcePanel(edge: CompositionResourcePanelEdge): Disposable_2;
1947
+ registerModeComposition(definition: CompositionModeDefinition): Disposable_2;
1948
+ getComposition(): WorkbenchComposition;
1949
+ getModeComposition(modeId: string): CompositionModeDefinition | undefined;
1950
+ }
1951
+
1711
1952
  declare interface WorkbenchCore extends WorkbenchCoreContributionContext {
1712
1953
  host: WorkbenchHost;
1713
1954
  registerModule(module: WorkbenchModuleContribution): Disposable_2;
@@ -1719,6 +1960,7 @@ declare interface WorkbenchCoreContributionContext {
1719
1960
  commandPalette: WorkbenchCommandPaletteController;
1720
1961
  commandPaletteResources: CommandPaletteResourceRegistry;
1721
1962
  commands: CommandRegistry;
1963
+ composition: WorkbenchCompositionController;
1722
1964
  context: ContextKeyService;
1723
1965
  focus: WorkbenchFocusController;
1724
1966
  history: HistoryController;
@@ -1727,6 +1969,7 @@ declare interface WorkbenchCoreContributionContext {
1727
1969
  layout: WorkbenchLayoutModel;
1728
1970
  modes: WorkbenchModeRegistry;
1729
1971
  navigation: NavigationRegistry;
1972
+ navigator: WorkbenchNavigator;
1730
1973
  notifications: NotificationRegistry;
1731
1974
  panels: WorkbenchPanelsController;
1732
1975
  preferences: PreferenceRegistry;
@@ -1801,6 +2044,8 @@ export declare interface WorkbenchExtensionKanbanRendererAdapter {
1801
2044
  row: KanbanRendererRow_2;
1802
2045
  resource: ResourceRef | undefined;
1803
2046
  }) => void;
2047
+ /** Translate extension navigation resource targets into host resources. */
2048
+ resolveNavigationResource?: (record: WorkbenchExtensionKanbanRendererRecord, resource: NonNullable<CommandExecuteRequest["resource"]>) => ResourceRef;
1804
2049
  /** Called after a successful renderer-owned create form submission. */
1805
2050
  onAfterCreate?: (input: {
1806
2051
  record: WorkbenchExtensionKanbanRendererRecord;
@@ -1834,11 +2079,12 @@ export declare type WorkbenchExtensionMenuWhenBuilder = (contribution: Extension
1834
2079
 
1835
2080
  export { WorkbenchExtensionMetadata }
1836
2081
 
1837
- declare interface WorkbenchExtensionPlacementInput {
1838
- placement?: ExtensionPanelPlacement;
1839
- declarationIndex?: number;
2082
+ declare interface WorkbenchExtensionRefreshEvent extends FileRendererRefreshEnvelope {
2083
+ id: string;
1840
2084
  }
1841
2085
 
2086
+ export declare type WorkbenchExtensionRendererKind = "tree" | "file" | "controls" | "dataTable" | "kanban";
2087
+
1842
2088
  export declare type WorkbenchExtensionRoute = WorkbenchExtensionMetadata["routes"][number];
1843
2089
 
1844
2090
  export declare interface WorkbenchExtensionRouteResourceInput {
@@ -1902,7 +2148,7 @@ declare interface WorkbenchLayoutStoreState {
1902
2148
  placeholders: Partial<Record<WorkbenchRegion, RegisteredPlaceholderContribution>>;
1903
2149
  }
1904
2150
 
1905
- declare type WorkbenchLocationContribution = Omit<WidgetContribution, "role"> & WorkbenchPanelMenusContribution;
2151
+ declare type WorkbenchLocationContribution = WidgetContribution & WorkbenchPanelMenusContribution;
1906
2152
 
1907
2153
  declare interface WorkbenchLocationEligibility {
1908
2154
  modeIds?: string[];
@@ -1924,15 +2170,31 @@ declare type WorkbenchModeActivationContext = WorkbenchCoreContributionContext;
1924
2170
 
1925
2171
  declare type WorkbenchModeActivationResult = Disposable_2 | readonly Disposable_2[] | undefined;
1926
2172
 
2173
+ declare interface WorkbenchModeAddablePanel {
2174
+ panelId: string;
2175
+ region: WorkbenchPanelRegion;
2176
+ allowedRegions?: readonly WorkbenchRegion[];
2177
+ pinned?: boolean;
2178
+ }
2179
+
2180
+ declare interface WorkbenchModeAddablePanelContext {
2181
+ layout: WorkbenchLayout;
2182
+ resource?: ResourceRef;
2183
+ }
2184
+
1927
2185
  declare type WorkbenchModeChangeListener = () => void;
1928
2186
 
1929
2187
  declare interface WorkbenchModeContribution {
1930
2188
  id: string;
1931
2189
  label?: string;
1932
2190
  panels?: readonly WorkbenchPanelRegion[];
2191
+ resourceKinds?: readonly string[];
2192
+ defaultResource?: ResourceRef | (() => Promise<ResourceRef | undefined> | ResourceRef | undefined);
2193
+ listAddablePanels?(context: WorkbenchModeAddablePanelContext): readonly WorkbenchModeAddablePanel[];
1933
2194
  activate(ctx: WorkbenchModeActivationContext): WorkbenchModeActivationResult;
1934
2195
  seed?(ctx: WorkbenchModeActivationContext): void;
1935
2196
  enter?(ctx: WorkbenchModeActivationContext): WorkbenchModeActivationResult;
2197
+ reconcile?(ctx: WorkbenchModeActivationContext): void;
1936
2198
  }
1937
2199
 
1938
2200
  declare interface WorkbenchModeRegistry {
@@ -1968,6 +2230,14 @@ declare interface WorkbenchModuleContribution {
1968
2230
 
1969
2231
  declare type WorkbenchModuleContributionContext = WorkbenchModuleContext;
1970
2232
 
2233
+ declare interface WorkbenchNavigationCommit {
2234
+ modeId: string | undefined;
2235
+ resource: ResourceRef | undefined;
2236
+ replaceActive: boolean;
2237
+ }
2238
+
2239
+ declare type WorkbenchNavigationDiagnosticCode = "navigation_mode_missing" | "navigation_resource_missing" | "navigation_resource_incompatible" | "navigation_default_missing" | "navigation_target_stale";
2240
+
1971
2241
  declare interface WorkbenchNavigationEntry {
1972
2242
  entryId: string;
1973
2243
  recordedAt: number;
@@ -1982,6 +2252,53 @@ declare interface WorkbenchNavigationEntry {
1982
2252
  closedSubPanel?: WorkbenchClosedSubPanel;
1983
2253
  }
1984
2254
 
2255
+ declare type WorkbenchNavigationResult = {
2256
+ ok: true;
2257
+ modeId: string | undefined;
2258
+ resource: ResourceRef | undefined;
2259
+ } | {
2260
+ ok: false;
2261
+ code: WorkbenchNavigationDiagnosticCode;
2262
+ message: string;
2263
+ };
2264
+
2265
+ declare interface WorkbenchNavigationTarget {
2266
+ modeId?: string;
2267
+ resource?: ResourceRef;
2268
+ replaceActive?: boolean;
2269
+ }
2270
+
2271
+ declare interface WorkbenchNavigator {
2272
+ configure(hooks: WorkbenchNavigatorHostHooks): void;
2273
+ getSelectedResource(): ResourceRef | undefined;
2274
+ open(target: WorkbenchNavigationTarget): Promise<WorkbenchNavigationResult>;
2275
+ commitContext(input: WorkbenchNavigatorCommitInput): WorkbenchNavigationResult;
2276
+ getLastResource(projectId: string | undefined, modeId: string): ResourceRef | undefined;
2277
+ forgetResource(uri: string): void;
2278
+ onDidCommit(listener: (commit: WorkbenchNavigationCommit) => void): {
2279
+ dispose(): void;
2280
+ };
2281
+ }
2282
+
2283
+ declare interface WorkbenchNavigatorCommitInput {
2284
+ modeId?: string | null;
2285
+ resource?: ResourceRef | null;
2286
+ replaceActive?: boolean;
2287
+ present?: boolean;
2288
+ }
2289
+
2290
+ declare interface WorkbenchNavigatorHostHooks {
2291
+ getProjectId?(): string | undefined;
2292
+ getSelectedResource?(): ResourceRef | undefined;
2293
+ interpretSelection?(resource: ResourceRef): ResourceRef | undefined;
2294
+ applySelection?(resource: ResourceRef | undefined): void;
2295
+ applyScope?(commit: WorkbenchNavigationCommit): void;
2296
+ applyBreadcrumb?(resource: ResourceRef | undefined): void;
2297
+ presentResource?(resource: ResourceRef, input: {
2298
+ replaceActive: boolean;
2299
+ }): Promise<unknown> | unknown;
2300
+ }
2301
+
1985
2302
  declare interface WorkbenchNotification {
1986
2303
  id?: string;
1987
2304
  level: WorkbenchNotificationLevel;
@@ -2023,7 +2340,6 @@ declare interface WorkbenchPanelContribution {
2023
2340
  region: WorkbenchRegion;
2024
2341
  fallbackRegion?: WorkbenchRegion;
2025
2342
  rendererId: string;
2026
- closable: boolean;
2027
2343
  singleton?: boolean;
2028
2344
  reuse?: WorkbenchPanelReusePolicy;
2029
2345
  mountStrategy?: WorkbenchPanelMountStrategy;
@@ -2079,7 +2395,7 @@ declare interface WorkbenchPanelInstance_2 {
2079
2395
  tab?: WorkbenchPanelTab_2;
2080
2396
  }
2081
2397
 
2082
- declare type WorkbenchPanelMenuContribution = Omit<WidgetContribution, "region" | "fallbackRegion" | "role"> & {
2398
+ declare type WorkbenchPanelMenuContribution = Omit<WidgetContribution, "region" | "fallbackRegion"> & {
2083
2399
  region: WorkbenchPanelMenuRegion;
2084
2400
  fallbackRegion?: WorkbenchPanelMenuRegion;
2085
2401
  };
@@ -2285,7 +2601,7 @@ declare type WorkbenchStoreSelector<TState, TValue> = (state: TState) => TValue;
2285
2601
 
2286
2602
  declare type WorkbenchStoreSelectorListener<TValue> = (value: TValue, previousValue: TValue) => void;
2287
2603
 
2288
- declare type WorkbenchSubPanelContribution = Omit<WidgetContribution, "region" | "fallbackRegion" | "role"> & {
2604
+ declare type WorkbenchSubPanelContribution = Omit<WidgetContribution, "region" | "fallbackRegion"> & {
2289
2605
  region: WorkbenchPanelRegion;
2290
2606
  fallbackRegion?: WorkbenchPanelRegion;
2291
2607
  } & WorkbenchPanelMenusContribution;