@hachej/boring-workspace 0.1.12 → 0.1.14

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 (34) hide show
  1. package/README.md +270 -42
  2. package/dist/CommandPalette-NOEOVkN2.js +5714 -0
  3. package/dist/{FileTree-BVfqs3rR.js → FileTree-Dl-qUAB0.js} +9 -9
  4. package/dist/MarkdownEditor-yc6mFsnI.js +533 -0
  5. package/dist/{WorkspaceLoadingState-CPQBxYFG.js → WorkspaceLoadingState-CSZfENWe.js} +178 -157
  6. package/dist/agent-tool-DEtfQPVB.d.ts +100 -0
  7. package/dist/app-front.d.ts +79 -67
  8. package/dist/app-front.js +253 -241
  9. package/dist/app-server.d.ts +17 -12
  10. package/dist/app-server.js +105 -23
  11. package/dist/{bootstrapServer-BRUqUpVW.d.ts → bootstrapServer-BreQ9QBc.d.ts} +8 -2
  12. package/dist/server.d.ts +13 -35
  13. package/dist/server.js +39 -137
  14. package/dist/shared.d.ts +1 -2
  15. package/dist/testing.d.ts +0 -63
  16. package/dist/testing.js +2248 -2401
  17. package/dist/workspace.css +1616 -977
  18. package/dist/workspace.d.ts +111 -450
  19. package/dist/workspace.js +417 -1635
  20. package/docs/INTERFACES.md +2 -2
  21. package/docs/PLUGIN_STRUCTURE.md +1 -1
  22. package/docs/plans/ASK_USER_QUESTIONS_PLUGIN_SPEC.md +131 -263
  23. package/docs/plans/GENERIC_EXPLORER_PLUGIN_PLAN.md +29 -27
  24. package/docs/plans/MACRO_PLUGIN_GENERIC_HELPERS_AUDIT.md +12 -12
  25. package/docs/plans/PANE_TO_AGENT_CHAT_ACTIONS_SPEC.md +366 -0
  26. package/docs/plans/README.md +2 -0
  27. package/docs/plans/archive/PLUGIN_MODEL.md +14 -14
  28. package/docs/plans/archive/SRC_FOLDER_REORG_PLAN.md +2 -3
  29. package/docs/plans/archive/WORKSPACE_V2_PLAN.md +1 -1
  30. package/package.json +3 -6
  31. package/dist/CommandPalette-Dme9em28.js +0 -5506
  32. package/dist/MarkdownEditor-CcCDF65H.js +0 -502
  33. package/dist/agent-tool-NvxKfist.d.ts +0 -28
  34. package/dist/explorer-DtLUnuah.d.ts +0 -129
@@ -57,8 +57,6 @@ export declare interface AgentToolRegistry {
57
57
  register(tool: AgentTool, pluginId: string): void;
58
58
  }
59
59
 
60
- export declare function appendDataCatalogOutputs<T extends WorkspaceFrontPlugin>(plugin: T, options: CreateDataCatalogOutputsOptions): T;
61
-
62
60
  export declare interface ArtifactPanel {
63
61
  id: string;
64
62
  component: string;
@@ -84,24 +82,6 @@ export declare interface ArtifactSurfacePaneProps {
84
82
  className?: string;
85
83
  }
86
84
 
87
- export declare type Badge = {
88
- /** 1–4 char mono code rendered as a chip. */
89
- code: string;
90
- tooltip?: string;
91
- };
92
-
93
- /**
94
- * DataExplorer shared types — no runtime deps.
95
- *
96
- * Importable from BOTH front and server bundles without dragging in
97
- * platform-specific code.
98
- */
99
- declare type Badge_2 = {
100
- /** 1–4 char mono code rendered as a chip. */
101
- code: string;
102
- tooltip?: string;
103
- };
104
-
105
85
  export declare interface BindingOutput {
106
86
  type: "binding";
107
87
  id: string;
@@ -193,14 +173,44 @@ export declare function buildChatLayout(props?: ChatLayoutProps): LayoutConfig;
193
173
 
194
174
  export declare function buildIdeLayout(props?: IdeLayoutProps): LayoutConfig;
195
175
 
176
+ export declare type CatalogAdapter = {
177
+ search(args: CatalogSearchArgs): Promise<CatalogSearchResult>;
178
+ fetchFacets?(args: CatalogFacetsArgs): Promise<CatalogFacets>;
179
+ };
180
+
181
+ export declare type CatalogBadge = {
182
+ /** 1–4 char mono code rendered as a chip. */
183
+ code: string;
184
+ tooltip?: string;
185
+ };
186
+
196
187
  export declare interface CatalogConfig {
197
188
  id: string;
198
189
  label: string;
199
- adapter: ExplorerAdapter_2;
200
- onSelect: (row: ExplorerRow_2) => void;
190
+ adapter: CatalogAdapter;
191
+ onSelect: (row: CatalogRow) => void;
201
192
  pluginId?: string;
202
193
  }
203
194
 
195
+ export declare type CatalogFacetConfig = {
196
+ key: string;
197
+ label: string;
198
+ order?: string[];
199
+ formatValue?: (value: string) => string;
200
+ };
201
+
202
+ export declare type CatalogFacets = Record<string, CatalogFacetValue[]>;
203
+
204
+ export declare type CatalogFacetsArgs = {
205
+ filters: Record<string, string[]>;
206
+ signal?: AbortSignal;
207
+ };
208
+
209
+ export declare type CatalogFacetValue = {
210
+ value: string;
211
+ count: number;
212
+ };
213
+
204
214
  export declare interface CatalogOutput {
205
215
  type: "catalog";
206
216
  catalog: CatalogConfig;
@@ -230,6 +240,34 @@ export declare interface CatalogRegistryOptions {
230
240
  warnOnDuplicate?: boolean;
231
241
  }
232
242
 
243
+ export declare type CatalogRow = {
244
+ id: string;
245
+ title: string;
246
+ subtitle?: string;
247
+ group?: string;
248
+ leading?: CatalogBadge;
249
+ trailing?: CatalogBadge[];
250
+ meta?: string;
251
+ };
252
+
253
+ export declare type CatalogSearchArgs = {
254
+ query: string;
255
+ filters: Record<string, string[]>;
256
+ group?: {
257
+ key: string;
258
+ value: string;
259
+ };
260
+ limit: number;
261
+ offset: number;
262
+ signal?: AbortSignal;
263
+ };
264
+
265
+ export declare type CatalogSearchResult = {
266
+ items: CatalogRow[];
267
+ total: number;
268
+ hasMore: boolean;
269
+ };
270
+
233
271
  export declare type CausedBy = "user" | "agent" | "restore";
234
272
 
235
273
  export declare function ChatLayout(props: ChatLayoutProps): JSX.Element;
@@ -246,6 +284,7 @@ export declare interface ChatLayoutProps {
246
284
  storageKey?: string;
247
285
  onOpenNav?: () => void;
248
286
  onOpenSurface?: () => void;
287
+ onOpenSidebar?: () => void;
249
288
  className?: string;
250
289
  }
251
290
 
@@ -353,96 +392,6 @@ export declare function createBridge(store: StoreApi): WorkspaceBridge;
353
392
 
354
393
  export declare function createBridgeClient(options: BridgeClientOptions): BridgeClient;
355
394
 
356
- export declare function createDataCatalogCatalog(options: Pick<CreateDataCatalogOutputsOptions, "id" | "label" | "adapter" | "catalogId" | "catalogLabel" | "onSelect">): CatalogConfig;
357
-
358
- export declare function createDataCatalogOpenHandler(options: OpenDataCatalogVisualizationOptions): (row: ExplorerRow) => void;
359
-
360
- export declare function createDataCatalogOutputs(options: CreateDataCatalogOutputsOptions): PluginOutput[];
361
-
362
- export declare interface CreateDataCatalogOutputsOptions {
363
- /**
364
- * Base contribution id. Defaults catalog id to this value and left tab /
365
- * visualization panel ids to derived names.
366
- */
367
- id?: string;
368
- label?: string;
369
- adapter: ExplorerAdapter;
370
- facets?: FacetConfig[];
371
- groupBy?: string;
372
- getDragPayload?: (row: ExplorerRow) => DragPayload | null | undefined;
373
- onSelect?: (row: ExplorerRow, context: DataCatalogSelectContext) => void;
374
- emptyState?: ReactNode;
375
- searchPlaceholder?: string;
376
- pageSize?: number;
377
- debounceMs?: number;
378
- leftTabId?: string;
379
- leftTabTitle?: string;
380
- leftTabIcon?: PanelConfig["icon"];
381
- includeLeftTab?: boolean;
382
- catalogId?: string;
383
- catalogLabel?: string;
384
- includeCatalog?: boolean;
385
- visualizationPanelId?: string;
386
- visualizationTitle?: string;
387
- visualizationIcon?: PanelConfig["icon"];
388
- visualizationComponent?: ComponentType<PaneProps<DataCatalogVisualizationParams>>;
389
- includeVisualizationPanel?: boolean;
390
- surfaceKind?: string;
391
- surfaceResolverId?: string;
392
- includeSurfaceResolver?: boolean;
393
- source?: PanelConfig["source"];
394
- }
395
-
396
- export declare function createDataCatalogPlugin(options: CreateDataCatalogPluginOptions): WorkspaceFrontPlugin;
397
-
398
- export declare interface CreateDataCatalogPluginOptions extends CreateDataCatalogOutputsOptions {
399
- pluginId?: string;
400
- }
401
-
402
- export declare function createDataCatalogSurfaceResolver(options: CreateDataCatalogSurfaceResolverOptions): SurfaceResolverConfig;
403
-
404
- export declare interface CreateDataCatalogSurfaceResolverOptions {
405
- id: string;
406
- catalogId: string;
407
- visualizationPanelId: string;
408
- visualizationTitle: string;
409
- panelIdPrefix?: string;
410
- surfaceKind?: string;
411
- surfaceResolverId?: string;
412
- source?: string;
413
- }
414
-
415
- export declare function createExplorerOutputs(options: CreateExplorerOutputsOptions): PluginOutput[];
416
-
417
- export declare interface CreateExplorerOutputsOptions {
418
- id: string;
419
- label?: string;
420
- mode?: ExplorerMode;
421
- adapter?: ExplorerAdapter;
422
- sectionedAdapter?: SectionedExplorerAdapter;
423
- facets?: FacetConfig[];
424
- groupBy?: string;
425
- onActivate?: (row: ExplorerRow) => void;
426
- getDragPayload?: (row: ExplorerRow) => DragPayload | null | undefined;
427
- emptyState?: ReactNode;
428
- searchPlaceholder?: string;
429
- searchable?: boolean;
430
- query?: string;
431
- pageSize?: number;
432
- debounceMs?: number;
433
- className?: string;
434
- leftTab?: false | ExplorerContributionConfig;
435
- panel?: false | ExplorerContributionConfig;
436
- catalog?: false | ExplorerCatalogConfig;
437
- source?: PanelConfig["source"];
438
- }
439
-
440
- export declare function createExplorerPlugin(options: CreateExplorerPluginOptions): WorkspaceFrontPlugin;
441
-
442
- export declare interface CreateExplorerPluginOptions extends CreateExplorerOutputsOptions {
443
- pluginId?: string;
444
- }
445
-
446
395
  export declare function createShadcnTheme(options?: {
447
396
  dark?: boolean;
448
397
  }): Extension[];
@@ -481,65 +430,6 @@ export declare interface CreateWorkspaceStoreOptions {
481
430
  onLayoutVersionMismatch?: () => void;
482
431
  }
483
432
 
484
- export declare const DATA_CATALOG_DEFAULT_TOOL_NAME = "query_data_catalog";
485
-
486
- export declare const DATA_CATALOG_PLUGIN_ID = "data-catalog";
487
-
488
- export declare const DATA_CATALOG_ROW_SURFACE_KIND = "data-catalog.open-row";
489
-
490
- export declare function dataCatalogPanelInstanceId(rowId: string, prefix?: string): string;
491
-
492
- export declare interface DataCatalogResolvedQuery {
493
- query?: string;
494
- controlled: boolean;
495
- }
496
-
497
- export declare interface DataCatalogSelectContext {
498
- params?: LeftTabParams;
499
- bridge?: WorkspaceBridge;
500
- }
501
-
502
- export declare interface DataCatalogVisualizationParams {
503
- row?: ExplorerRow;
504
- query?: string;
505
- }
506
-
507
- export declare interface DataCatalogVisualizationState extends DataCatalogResolvedQuery {
508
- row?: ExplorerRow;
509
- title: string;
510
- }
511
-
512
- export declare function DataExplorer({ adapter, facets: facetConfigs, groupBy, onActivate, getDragPayload, emptyState, searchPlaceholder, searchable, query, onQueryChange, pageSize, debounceMs, className, }: DataExplorerProps): JSX.Element;
513
-
514
- export declare type DataExplorerProps = {
515
- adapter: ExplorerAdapter;
516
- /** Facets shown in the toolbar popover. Adapter must implement fetchFacets for this to work. */
517
- facets?: FacetConfig[];
518
- /** Single grouping axis (must match a facet key). When set, renders tree mode. */
519
- groupBy?: string;
520
- /** Activated when a row is clicked, double-clicked, or Enter-pressed. */
521
- onActivate?: (row: ExplorerRow) => void;
522
- /** Returning a payload makes rows draggable. */
523
- getDragPayload?: (row: ExplorerRow) => DragPayload | null | undefined;
524
- /** Empty state shown when the top-level result has no rows and no query/filters. */
525
- emptyState?: ReactNode;
526
- searchPlaceholder?: string;
527
- /** Hide the search input. Default true. */
528
- searchable?: boolean;
529
- /**
530
- * Controlled query. When set, the toolbar's search input is hidden and the
531
- * caller is responsible for supplying (and debouncing) the query value.
532
- * Useful when an outer chrome already owns a search box.
533
- */
534
- query?: string;
535
- /** Called when the toolbar search changes. Use with `query` for controlled per-tab search. */
536
- onQueryChange?: (query: string) => void;
537
- /** Page size and debounce — passed through to useExplorerState. */
538
- pageSize?: number;
539
- debounceMs?: number;
540
- className?: string;
541
- };
542
-
543
433
  export declare function defineFrontPlugin(spec: WorkspaceFrontPlugin): WorkspaceFrontPlugin;
544
434
 
545
435
  /**
@@ -573,6 +463,8 @@ export declare interface DispatchContext {
573
463
  isWorkbenchOpen: () => boolean;
574
464
  /** Toggle the workbench pane open. Must be a no-op when already open. */
575
465
  openWorkbench: () => void;
466
+ /** Close the workbench pane when a command opened it only for an ephemeral task. */
467
+ closeWorkbench?: () => void;
576
468
  }
577
469
 
578
470
  export declare function DockviewShell({ layout, persistedLayout, onReady, onLayoutChange, allowedPanels, className, prefixHeaderActions, rightHeaderActions, watermarkComponent, }: DockviewShellProps): JSX.Element;
@@ -615,11 +507,6 @@ export declare interface DockviewShellProps {
615
507
  watermarkComponent?: React.FunctionComponent<unknown>;
616
508
  }
617
509
 
618
- export declare type DragPayload = {
619
- mimeType: string;
620
- value: string;
621
- };
622
-
623
510
  export declare interface DynamicPaneConfig {
624
511
  id: string;
625
512
  component: string;
@@ -680,131 +567,6 @@ export declare const expandToFileSchema: z.ZodObject<{
680
567
  path: string;
681
568
  }>;
682
569
 
683
- export declare const EXPLORER_PLUGIN_ID = "explorer";
684
-
685
- export declare type ExplorerAdapter = {
686
- search(args: SearchArgs): Promise<SearchResult>;
687
- /** Optional. When omitted, the explorer renders flat (no facet popover). */
688
- fetchFacets?(args: FacetsArgs): Promise<Facets>;
689
- };
690
-
691
- declare type ExplorerAdapter_2 = {
692
- search(args: SearchArgs_2): Promise<SearchResult_2>;
693
- /** Optional. When omitted, the explorer renders flat (no facet popover). */
694
- fetchFacets?(args: FacetsArgs_2): Promise<Facets_2>;
695
- };
696
-
697
- export declare interface ExplorerCatalogConfig {
698
- id?: string;
699
- label?: string;
700
- onSelect?: (row: ExplorerRow) => void;
701
- }
702
-
703
- export declare interface ExplorerContributionConfig {
704
- id?: string;
705
- title?: string;
706
- label?: string;
707
- icon?: PanelConfig["icon"];
708
- }
709
-
710
- export declare type ExplorerMode = "flat" | "grouped" | "sectioned";
711
-
712
- export declare type ExplorerRow = {
713
- id: string;
714
- title: string;
715
- /** Optional muted second line (truncates with title). */
716
- subtitle?: string;
717
- /** Group key — must match one of the facet values for `groupBy`. */
718
- group?: string;
719
- /** Leading mono chip (e.g. type code, frequency). */
720
- leading?: Badge;
721
- /** Trailing mono chips for status flags (e.g. [D] derived, [LIVE]). */
722
- trailing?: Badge[];
723
- /** Right-aligned plain text for numeric metadata (e.g. "1.2M", "2.4s"). */
724
- meta?: string;
725
- };
726
-
727
- declare type ExplorerRow_2 = {
728
- id: string;
729
- title: string;
730
- /** Optional muted second line (truncates with title). */
731
- subtitle?: string;
732
- /** Group key — must match one of the facet values for `groupBy`. */
733
- group?: string;
734
- /** Leading mono chip (e.g. type code, frequency). */
735
- leading?: Badge_2;
736
- /** Trailing mono chips for status flags (e.g. [D] derived, [LIVE]). */
737
- trailing?: Badge_2[];
738
- /** Right-aligned plain text for numeric metadata (e.g. "1.2M", "2.4s"). */
739
- meta?: string;
740
- };
741
-
742
- export declare interface ExplorerSection {
743
- id: string;
744
- title: string;
745
- subtitle?: string;
746
- count?: number;
747
- filters?: ExplorerSectionFilter[];
748
- defaultExpanded?: boolean;
749
- }
750
-
751
- export declare interface ExplorerSectionFilter extends FacetConfig {
752
- values?: FacetValue[];
753
- }
754
-
755
- export declare function ExplorerView(props: ExplorerViewProps): JSX.Element;
756
-
757
- export declare type ExplorerViewProps = (Omit<DataExplorerProps, "groupBy"> & {
758
- mode?: "flat";
759
- groupBy?: never;
760
- sectionedAdapter?: never;
761
- }) | (DataExplorerProps & {
762
- mode: "grouped";
763
- groupBy: string;
764
- sectionedAdapter?: never;
765
- }) | (Omit<SectionedExplorerProps, "adapter"> & {
766
- mode: "sectioned";
767
- adapter?: never;
768
- sectionedAdapter: SectionedExplorerAdapter;
769
- facets?: never;
770
- groupBy?: never;
771
- });
772
-
773
- export declare type FacetConfig = {
774
- /** Filter key sent to the adapter (e.g. "frequency"). */
775
- key: string;
776
- /** Display label (e.g. "Frequency"). */
777
- label: string;
778
- /** Explicit display order; unknown values go after in adapter order. */
779
- order?: string[];
780
- /** Display formatter for raw values (e.g. "M" → "Monthly"). */
781
- formatValue?: (value: string) => string;
782
- };
783
-
784
- export declare type Facets = Record<string, FacetValue[]>;
785
-
786
- declare type Facets_2 = Record<string, FacetValue_2[]>;
787
-
788
- export declare type FacetsArgs = {
789
- filters: Record<string, string[]>;
790
- signal?: AbortSignal;
791
- };
792
-
793
- declare type FacetsArgs_2 = {
794
- filters: Record<string, string[]>;
795
- signal?: AbortSignal;
796
- };
797
-
798
- export declare type FacetValue = {
799
- value: string;
800
- count: number;
801
- };
802
-
803
- declare type FacetValue_2 = {
804
- value: string;
805
- count: number;
806
- };
807
-
808
570
  declare const FILESYSTEM_FILE_CHANGED_EVENT = "filesystem:file.changed";
809
571
 
810
572
  declare const FILESYSTEM_FILE_CREATED_EVENT = "filesystem:file.created";
@@ -975,13 +737,6 @@ export declare interface GroupConfig {
975
737
  };
976
738
  }
977
739
 
978
- declare type GroupState = {
979
- items: ExplorerRow[];
980
- total: number;
981
- hasMore: boolean;
982
- loading: boolean;
983
- };
984
-
985
740
  export declare function IdeLayout(props: IdeLayoutProps): JSX.Element;
986
741
 
987
742
  export declare interface IdeLayoutProps {
@@ -1077,15 +832,6 @@ export declare function onFilesystemChanged(handler: (payload: FilesystemEventMe
1077
832
 
1078
833
  export declare type OpenArtifactHandler = (path: string) => void;
1079
834
 
1080
- export declare function openDataCatalogVisualization(row: ExplorerRow, options: OpenDataCatalogVisualizationOptions): void;
1081
-
1082
- export declare interface OpenDataCatalogVisualizationOptions {
1083
- catalogId: string;
1084
- surfaceKind?: string;
1085
- title?: string;
1086
- params?: Record<string, unknown>;
1087
- }
1088
-
1089
835
  export declare const openFileSchema: z.ZodObject<{
1090
836
  path: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>;
1091
837
  mode: z.ZodOptional<z.ZodEnum<["view", "edit", "diff"]>>;
@@ -1150,6 +896,19 @@ export declare type Origin = {
1150
896
  toolCallId?: string;
1151
897
  };
1152
898
 
899
+ export declare function PanelChrome({ title, icon: Icon, essential, children, className, panelApi, }: PanelChromeProps): JSX.Element;
900
+
901
+ declare interface PanelChromeProps {
902
+ title: string;
903
+ icon?: ComponentType<{
904
+ className?: string;
905
+ }>;
906
+ essential?: boolean;
907
+ children: ReactNode;
908
+ className?: string;
909
+ panelApi?: DockviewPanelApi;
910
+ }
911
+
1153
912
  export declare interface PanelConfig<T = any> {
1154
913
  id: string;
1155
914
  title: string;
@@ -1334,8 +1093,6 @@ export declare interface ProviderOutput {
1334
1093
  component: PluginProvider;
1335
1094
  }
1336
1095
 
1337
- export declare function readDataCatalogRow(value: unknown): ExplorerRow | undefined;
1338
-
1339
1096
  declare interface RegisteredPluginMeta {
1340
1097
  id: string;
1341
1098
  label?: string;
@@ -1352,12 +1109,6 @@ declare interface RegistryProviderProps {
1352
1109
  children: ReactNode;
1353
1110
  }
1354
1111
 
1355
- export declare function resolveDataCatalogControlledQuery(params: LeftTabParams | DataCatalogVisualizationParams | undefined): DataCatalogResolvedQuery;
1356
-
1357
- export declare function resolveDataCatalogQuery(params: LeftTabParams | DataCatalogVisualizationParams | undefined): string | undefined;
1358
-
1359
- export declare function resolveDataCatalogVisualizationState(params: DataCatalogVisualizationParams | undefined, fallbackTitle: string): DataCatalogVisualizationState;
1360
-
1361
1112
  export declare function ResponsiveDockviewShell({ layout, className, }: ResponsiveDockviewShellProps): JSX.Element;
1362
1113
 
1363
1114
  export declare interface ResponsiveDockviewShellProps {
@@ -1365,86 +1116,6 @@ export declare interface ResponsiveDockviewShellProps {
1365
1116
  className?: string;
1366
1117
  }
1367
1118
 
1368
- export declare type SearchArgs = {
1369
- query: string;
1370
- filters: Record<string, string[]>;
1371
- /** Scope to a single group's value (only set when paginating inside a group). */
1372
- group?: {
1373
- key: string;
1374
- value: string;
1375
- };
1376
- limit: number;
1377
- offset: number;
1378
- signal?: AbortSignal;
1379
- };
1380
-
1381
- declare type SearchArgs_2 = {
1382
- query: string;
1383
- filters: Record<string, string[]>;
1384
- /** Scope to a single group's value (only set when paginating inside a group). */
1385
- group?: {
1386
- key: string;
1387
- value: string;
1388
- };
1389
- limit: number;
1390
- offset: number;
1391
- signal?: AbortSignal;
1392
- };
1393
-
1394
- export declare type SearchResult = {
1395
- items: ExplorerRow[];
1396
- /** Total count for the current scope (query + filters + optional group). */
1397
- total: number;
1398
- hasMore: boolean;
1399
- };
1400
-
1401
- declare type SearchResult_2 = {
1402
- items: ExplorerRow_2[];
1403
- /** Total count for the current scope (query + filters + optional group). */
1404
- total: number;
1405
- hasMore: boolean;
1406
- };
1407
-
1408
- export declare interface SectionedExplorerAdapter {
1409
- sections(args: SectionedExplorerSectionsArgs): Promise<ExplorerSection[]>;
1410
- searchSection(sectionId: string, args: SectionedExplorerSearchArgs): Promise<SearchResult>;
1411
- fetchSectionFacets?(sectionId: string, args: SectionedExplorerFacetArgs): Promise<Facets>;
1412
- }
1413
-
1414
- export declare interface SectionedExplorerFacetArgs {
1415
- query: string;
1416
- globalFilters: Record<string, string[]>;
1417
- filters: Record<string, string[]>;
1418
- signal?: AbortSignal;
1419
- }
1420
-
1421
- export declare interface SectionedExplorerProps {
1422
- adapter: SectionedExplorerAdapter;
1423
- onActivate?: (row: ExplorerRow) => void;
1424
- getDragPayload?: (row: ExplorerRow) => DragPayload | null | undefined;
1425
- emptyState?: ReactNode;
1426
- searchPlaceholder?: string;
1427
- searchable?: boolean;
1428
- query?: string;
1429
- pageSize?: number;
1430
- className?: string;
1431
- }
1432
-
1433
- export declare interface SectionedExplorerSearchArgs {
1434
- query: string;
1435
- globalFilters: Record<string, string[]>;
1436
- filters: Record<string, string[]>;
1437
- limit: number;
1438
- offset: number;
1439
- signal?: AbortSignal;
1440
- }
1441
-
1442
- export declare interface SectionedExplorerSectionsArgs {
1443
- query: string;
1444
- globalFilters: Record<string, string[]>;
1445
- signal?: AbortSignal;
1446
- }
1447
-
1448
1119
  export declare type SerializedLayout = Parameters<DockviewApi["fromJSON"]>[0];
1449
1120
 
1450
1121
  export declare function SessionBrowser({ sessions, activeId, onSwitch, onCreate, onDelete, onClose, className, }: SessionBrowserProps): JSX.Element;
@@ -1641,6 +1312,8 @@ export declare interface ToolExecContext {
1641
1312
  abortSignal: AbortSignal;
1642
1313
  toolCallId: string;
1643
1314
  onUpdate?: (partial: string) => void;
1315
+ /** Agent chat/session id executing this tool, when known. */
1316
+ sessionId?: string;
1644
1317
  }
1645
1318
 
1646
1319
  export declare interface ToolResult {
@@ -1670,6 +1343,8 @@ export declare interface TopBarProps {
1670
1343
  className?: string;
1671
1344
  }
1672
1345
 
1346
+ export declare const UI_COMMAND_EVENT = "boring-workspace:ui-command";
1347
+
1673
1348
  export declare interface UiCommand {
1674
1349
  v?: number;
1675
1350
  seq?: number;
@@ -1734,12 +1409,6 @@ export declare function useCommandRegistry(): CommandRegistry;
1734
1409
 
1735
1410
  export declare function useCommands(): readonly CommandConfig[];
1736
1411
 
1737
- export declare function useDataCatalogOpenVisualization(options: OpenDataCatalogVisualizationOptions): (row: ExplorerRow) => void;
1738
-
1739
- export declare function useDataCatalogQuery(params: LeftTabParams | DataCatalogVisualizationParams | undefined): DataCatalogResolvedQuery;
1740
-
1741
- export declare function useDataCatalogVisualizationState(params: DataCatalogVisualizationParams | undefined, fallbackTitle: string): DataCatalogVisualizationState;
1742
-
1743
1412
  export declare function useDirtyFiles(): Record<string, {
1744
1413
  panelId: string;
1745
1414
  savedAt: number | null;
@@ -1778,45 +1447,6 @@ export declare interface UseEditorLifecycleReturn {
1778
1447
  */
1779
1448
  export declare function useEvent<K extends keyof WorkspaceEventMap>(name: K, handler: (payload: WorkspaceEventMap[K]) => void): void;
1780
1449
 
1781
- export declare function useExplorerState(options: UseExplorerStateOptions): {
1782
- query: string;
1783
- filters: Record<string, string[]>;
1784
- facets: Facets | null;
1785
- topItems: ExplorerRow[];
1786
- topTotal: number;
1787
- topHasMore: boolean;
1788
- loading: boolean;
1789
- getGroup: (value: string) => GroupState;
1790
- isExpanded: (value: string) => boolean;
1791
- setQuery: (q: string) => void;
1792
- toggleFilter: (key: string, value: string) => void;
1793
- clearFilters: () => void;
1794
- expandGroup: (value: string) => void;
1795
- collapseGroup: (value: string) => void;
1796
- loadMoreTop: () => void;
1797
- loadMoreGroup: (value: string) => void;
1798
- };
1799
-
1800
- export declare type UseExplorerStateOptions = {
1801
- adapter: ExplorerAdapter;
1802
- /** Facets shown in the toolbar popover. Adapter must implement fetchFacets. */
1803
- facets?: FacetConfig[];
1804
- /** Facet key used as the single grouping axis (tree mode). */
1805
- groupBy?: string;
1806
- /** Page size for both top-level and per-group pagination. */
1807
- pageSize?: number;
1808
- /** Debounce window (ms) applied to setQuery. */
1809
- debounceMs?: number;
1810
- /**
1811
- * Controlled query. When set, the hook bypasses internal debounce and
1812
- * `setQuery` becomes a no-op — the caller owns the value (and any debounce
1813
- * the caller wants to apply). Searches re-run when this prop changes.
1814
- */
1815
- query?: string;
1816
- };
1817
-
1818
- export declare type UseExplorerStateReturn = ReturnType<typeof useExplorerState>;
1819
-
1820
1450
  export declare function useHydrationComplete(): boolean;
1821
1451
 
1822
1452
  export declare function useKeyboardShortcuts({ shortcuts, enabled }: UseKeyboardShortcutsOptions): void;
@@ -1864,6 +1494,8 @@ export declare function useThemePreference(): "light" | "dark";
1864
1494
 
1865
1495
  export declare function useViewportBreakpoint(maxWidth?: number): boolean;
1866
1496
 
1497
+ export declare function useWorkspaceAttention(): WorkspaceAttentionContextValue;
1498
+
1867
1499
  export declare function useWorkspaceBridge(): WorkspaceBridgeContextValue;
1868
1500
 
1869
1501
  export declare function useWorkspaceChatPanel(): WorkspaceChatPanelComponent;
@@ -1916,6 +1548,27 @@ export declare interface WorkspaceActions {
1916
1548
  resetLayout: () => void;
1917
1549
  }
1918
1550
 
1551
+ export declare type WorkspaceAttentionBlocker = {
1552
+ id: string;
1553
+ reason: string;
1554
+ surfaceKind?: string;
1555
+ target?: string;
1556
+ label?: string;
1557
+ sessionId?: string;
1558
+ actions?: WorkspaceAttentionBlockerAction[];
1559
+ };
1560
+
1561
+ declare type WorkspaceAttentionBlockerAction = {
1562
+ id: string;
1563
+ label: string;
1564
+ };
1565
+
1566
+ export declare interface WorkspaceAttentionContextValue {
1567
+ blockers: WorkspaceAttentionBlocker[];
1568
+ addBlocker: (blocker: WorkspaceAttentionBlocker) => void;
1569
+ removeBlocker: (id: string) => void;
1570
+ }
1571
+
1919
1572
  export declare interface WorkspaceBridge {
1920
1573
  getOpenPanels(): PanelState[];
1921
1574
  getActiveFile(): string | null;
@@ -1956,6 +1609,14 @@ export declare interface WorkspaceChatPanelProps {
1956
1609
  isWorkbenchOpen?: () => boolean;
1957
1610
  /** Opens the visible workbench surface before dispatching a command. */
1958
1611
  openWorkbench?: () => void;
1612
+ /** Closes the visible workbench surface after an ephemeral command finishes. */
1613
+ closeWorkbench?: () => void;
1614
+ /** Generic workspace blockers that should prevent submitting new chat turns. */
1615
+ composerBlockers?: WorkspaceAttentionBlocker[];
1616
+ /** Called when the user presses Stop in the composer. */
1617
+ onComposerStop?: () => void;
1618
+ /** Called when the chat implementation wants to run an action exposed by a blocker. */
1619
+ onComposerBlockerAction?: (blocker: WorkspaceAttentionBlocker, action: string) => void;
1959
1620
  [key: string]: unknown;
1960
1621
  }
1961
1622