@stablebaseline/sdk 0.4.2 → 0.4.3

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.
package/dist/index.d.ts CHANGED
@@ -374,7 +374,7 @@ interface paths {
374
374
  put?: never;
375
375
  /**
376
376
  * listDocuments
377
- * @description List documents in a project, workspace, or folder. Supports query search and date filtering.
377
+ * @description List AND grep documents in a project, workspace, or folder. `query` does a full-content search across each document's body (not just the title) and returns the matching lines — like grep across your docs. Each returned document includes `contentMatches: [{line, text, context?}]` and `matchCount`; the `text` is anchor-ready (paste it straight into editDocument's oldText). Use isRegex:true for regular-expression search (e.g. "TODO\(.*\)", "ACME-\d+"), caseSensitive for exact case, and contextLines for surrounding lines (grep -C). versionTimestamp is returned per document so you can edit straight from the results without a getDocument round-trip. Also supports date filtering.
378
378
  */
379
379
  post: operations["listDocuments"];
380
380
  delete?: never;
@@ -474,7 +474,7 @@ interface paths {
474
474
  put?: never;
475
475
  /**
476
476
  * editDocument
477
- * @description Edit a document: the PREFERRED tool for small targeted changes. Two patch dialects — do NOT mix them in one call. (1) ANCHOR patches {oldText, newText, before?, after?} — RECOMMENDED: replace an exact snippet of existing text with new text. oldText must match the document byte-for-byte AND be unique; if it occurs more than once, add `before`/`after` (short nearby surrounding text) to disambiguate. A no-match returns nearby context; an ambiguous match returns the occurrence count. Anchors do NOT drift, so you don't need fresh line numbers and they survive concurrent edits. Use newText:"" to delete. (2) LINE patches {startLine, endLine, replacement} — 1-based and INCLUSIVE: call getDocument first for line numbers; replace line 5 with {startLine:5,endLine:5}; INSERT before line N (deleting nothing) with {startLine:N,endLine:N-1}; append to an L-line document with {startLine:L+1,endLine:L}. Line numbers are ABSOLUTE and GO STALE after ANY edit — re-call getDocument before further line patches; out-of-range patches are rejected with the current line count. versionTimestamp from getDocument is required for optimistic locking, EXCEPT when dryRun:true. Set dryRun:true to apply the patches and get the resulting text back WITHOUT saving (verify before committing — kills retry loops). Do not edit or delete DIAGRAM/IMAGE marker lines (rejected with guidance) — use dedicated diagram/image tools. To @-mention a person, insert `<!-- REFERENCE: {"type":"user","id":"<user_uuid>","label":"Name"} -->`; look up the user_id via listAssignablePrincipals. Mentioned users are notified automatically.
477
+ * @description Edit a document: the PREFERRED tool for small targeted changes. Two patch dialects — do NOT mix them in one call. (1) ANCHOR patches {oldText, newText, before?, after?} — RECOMMENDED: replace an exact snippet of existing text with new text. oldText must match the document byte-for-byte AND be unique; if it occurs more than once, either expand oldText until it is unique, or add `before`/`after` (the EXACT text immediately before/after the match) to disambiguate. A no-match returns nearby context; an ambiguous match returns the occurrence count. Anchors do NOT drift, so you don't need fresh line numbers and they survive concurrent edits. Use newText:"" to delete. (2) LINE patches {startLine, endLine, replacement} — 1-based and INCLUSIVE: call getDocument first for line numbers; replace line 5 with {startLine:5,endLine:5}; INSERT before line N (deleting nothing) with {startLine:N,endLine:N-1}; append to an L-line document with {startLine:L+1,endLine:L}. Line numbers are ABSOLUTE and GO STALE after ANY edit — re-call getDocument before further line patches; out-of-range patches are rejected with the current line count. versionTimestamp from getDocument is required for optimistic locking, EXCEPT when dryRun:true. Set dryRun:true to apply the patches and get the resulting text back WITHOUT saving (verify before committing — kills retry loops). Do not edit or delete DIAGRAM/IMAGE marker lines (rejected with guidance) — use dedicated diagram/image tools. To @-mention a person, insert `<!-- REFERENCE: {"type":"user","id":"<user_uuid>","label":"Name"} -->`; look up the user_id via listAssignablePrincipals. Mentioned users are notified automatically.
478
478
  */
479
479
  post: operations["editDocument"];
480
480
  delete?: never;
@@ -634,7 +634,7 @@ interface paths {
634
634
  put?: never;
635
635
  /**
636
636
  * designWhiteboard
637
- * @description Design a complete, visually polished whiteboard from a natural-language goal using the PREMIUM multi-agent pipeline (the same one the in-app assistant uses): it browses the stencil/icon library, composes the board, renders it, critiques the rendered image, and refines — far better than hand-placing shapes. COST + APPROVAL: this costs 50 credits per board and requires the user's explicit approval. Call it FIRST without `confirm` to get the exact cost + the workspace credit balance; show that to the user and only call again with `confirm: true` once they agree. If they decline (or lack credits), build the board directly with the standard whiteboard tools (addWhiteboardElements / insertWhiteboardDiagram / listWhiteboardStencils) at no extra charge. It runs in the BACKGROUND and returns immediately with a sessionId; the board fills in over 1-3 minutes. The 50 credits are refunded automatically if the design fails on our side.
637
+ * @description Design a complete, visually polished whiteboard from a natural-language goal using the PREMIUM multi-agent pipeline (the same one the in-app assistant uses): it browses the stencil/icon library, composes the board, renders it, critiques the rendered image, and refines — far better than hand-placing shapes. COST + APPROVAL: this costs 50 credits per board and requires the user's explicit approval. Call it FIRST without `confirm` to get the exact cost + the workspace credit balance; show that to the user and only call again with `confirm: true` once they agree. If they decline (or lack credits), build the board directly with the standard whiteboard tools (addWhiteboardElements / insertWhiteboardDiagram / listWhiteboardStencils) at no extra charge. It runs in the BACKGROUND and returns immediately with a sessionId; the board fills in over 1-3 minutes. The 50 credits are refunded automatically if the design fails on our side. Optional `designProfile: 'branded-executive'` instead builds an ON-BRAND, fully-editable McKinsey-style SLIDE DECK themed by the org's brand kit (palette/fonts) — use it when the user wants polished branded business slides; it builds in-process and the board is ready on return. Optional `designProfile: 'illustrated'` instead builds an editable-illustration board: pick it for illustrated, image-based, picture-style, richly-drawn or educational explainer boards (e.g. illustrate photosynthesis, an illustrated diagram of the water cycle, a textbook-style visual). It generates a rich text-free vector illustration and overlays real, editable text labels with leader lines on top. It is gated per organisation; if it is not enabled the call returns a clear message, so fall back to the standard design. Optional `designProfile: 'image'` instead builds a single, polished, on-brand IMAGE board with all the text baked into the picture (no editable shapes): pick 'image' when the user wants a single finished image, poster or infographic they will refine by AI mask edits rather than by moving editable shapes. It is also gated per organisation; if it is not enabled the call returns a clear message.
638
638
  */
639
639
  post: operations["designWhiteboard"];
640
640
  delete?: never;
@@ -643,6 +643,46 @@ interface paths {
643
643
  patch?: never;
644
644
  trace?: never;
645
645
  };
646
+ "/tools/designComponent": {
647
+ parameters: {
648
+ query?: never;
649
+ header?: never;
650
+ path?: never;
651
+ cookie?: never;
652
+ };
653
+ get?: never;
654
+ put?: never;
655
+ /**
656
+ * designComponent
657
+ * @description Design ONE reusable, on-brand SLIDE COMPONENT and add it to the org's component library so every future branded deck (designWhiteboard designProfile:'branded-executive') can use it. This is the self-improving design loop: an agent AUTHORS the component as a declarative template (a gradient/shadow/curve SVG skin + a native editable PPTX shape + reflowing bound-text slots), RENDERS it, a vision critic COMPARES the render to your brief and lists gaps, and it FIXES + re-renders until polished — then validates and stores it. Use it to grow the deck component catalogue beyond the built-ins (e.g. a 'kpi.delta' stat with an up/down arrow, a 'quote.card', a 'logo.strip'). Browse-first: if a component with this `key` already exists it is reused (pass force:true to redesign). Provide example `sampleSlots` so it can lay out real content, and a `projectId` for the small preview board it builds. Returns the stored component, the per-round critique trail, and the preview board id. It uses a few AI calls + renders (no flat credit charge); the new component is then free to reuse forever.
658
+ */
659
+ post: operations["designComponent"];
660
+ delete?: never;
661
+ options?: never;
662
+ head?: never;
663
+ patch?: never;
664
+ trace?: never;
665
+ };
666
+ "/tools/editWhiteboardImageRegion": {
667
+ parameters: {
668
+ query?: never;
669
+ header?: never;
670
+ path?: never;
671
+ cookie?: never;
672
+ };
673
+ get?: never;
674
+ put?: never;
675
+ /**
676
+ * editWhiteboardImageRegion
677
+ * @description Mask-edit (inpaint) one region of an image element on a whiteboard. Given the target image element id and a paint MASK (a PNG where WHITE marks the area to regenerate and BLACK is kept), it regenerates only the masked region using the prompt and replaces the image IN PLACE (same position + size). This is mainly used by the in-app image-board mask editor for boards designed with designProfile:'image'. It costs a small flat credit charge (refunded automatically if the edit fails on our side). It is gated per organisation behind the same 'whiteboard_design_image' feature as the image design profile; if that is not enabled the call returns a clear message.
678
+ */
679
+ post: operations["editWhiteboardImageRegion"];
680
+ delete?: never;
681
+ options?: never;
682
+ head?: never;
683
+ patch?: never;
684
+ trace?: never;
685
+ };
646
686
  "/tools/createWhiteboard": {
647
687
  parameters: {
648
688
  query?: never;
@@ -1214,7 +1254,7 @@ interface paths {
1214
1254
  put?: never;
1215
1255
  /**
1216
1256
  * listImprovements
1217
- * @description List improvements in a project. Supports filtering by status, type, priority, and query.
1257
+ * @description List AND grep improvements in a project. `query` searches the title, friendlyId and problem statement, not just the title (substring by default; set isRegex:true for a regular expression, caseSensitive:true for exact case). Supports filtering by status, type, priority. For ranked semantic + text search use searchImprovements.
1218
1258
  */
1219
1259
  post: operations["listImprovements"];
1220
1260
  delete?: never;
@@ -1494,7 +1534,11 @@ interface paths {
1494
1534
  put?: never;
1495
1535
  /**
1496
1536
  * searchImprovements
1497
- * @description Search improvements using hybrid text + semantic search. Returns ranked results.
1537
+ * @description Locate any artefact (document / whiteboard / diagram / plan / task / improvement / compliance) by name or friendly id — AND ranked semantic search over improvements.
1538
+ *
1539
+ * • CROSS-ARTEFACT FINDER MODE (pass `types`): matches title + friendly id (e.g. "DOC-123", "WBD-9", "PLN-4", "TAS-7", "IMP-2") + description across every artefact type. Returns a typed navigable list ({ artefacts: [{ result_type, id, friendly_id, title, snippet, document_id, project_id, href }] }). This is the tool to use to find an artefact by its name or id — NOT kg_search (which retrieves knowledge from inside content). Pass types:["document","whiteboard","plan","task","improvement","compliance"] (or a subset) to search those types; an empty or all-inclusive list searches everything.
1540
+ *
1541
+ * • IMPROVEMENT SEMANTIC MODE (omit `types`): hybrid full-text + vector search over improvements only. Returns ranked { improvements }.
1498
1542
  */
1499
1543
  post: operations["searchImprovements"];
1500
1544
  delete?: never;
@@ -1514,7 +1558,7 @@ interface paths {
1514
1558
  put?: never;
1515
1559
  /**
1516
1560
  * listPlans
1517
- * @description List plans in a project. Supports filtering by status, priority, and query.
1561
+ * @description List AND grep plans in a project. `query` searches the title, friendlyId and description, not just the title (substring by default; set isRegex:true for a regular expression, caseSensitive:true for exact case). Supports filtering by status and priority.
1518
1562
  */
1519
1563
  post: operations["listPlans"];
1520
1564
  delete?: never;
@@ -1814,7 +1858,7 @@ interface paths {
1814
1858
  put?: never;
1815
1859
  /**
1816
1860
  * listTasks
1817
- * @description List tasks in a plan. Supports filtering by status, priority, phaseId, and query.
1861
+ * @description List AND grep tasks in a plan. `query` searches the title, friendlyId and description, not just the title (substring by default; set isRegex:true for a regular expression, caseSensitive:true for exact case). Supports filtering by status, priority and phaseId.
1818
1862
  */
1819
1863
  post: operations["listTasks"];
1820
1864
  delete?: never;
@@ -2074,7 +2118,9 @@ interface paths {
2074
2118
  put?: never;
2075
2119
  /**
2076
2120
  * kg_search
2077
- * @description Unified Knowledge Graph retrieval. PICK THE MODE THAT FITS THE QUERY:
2121
+ * @description Unified Knowledge Graph KNOWLEDGE retrieval — facts, themes and relationships from INSIDE document CONTENT. This is NOT an artefact finder: do NOT use it to locate a document / whiteboard / diagram / plan / task / improvement by its TITLE or friendly id (e.g. "DOC-123", "find the GTM plan"). For locating an artefact by name or id use listDocuments / listWhiteboards / listPlans / listTasks / searchImprovements (they match title + friendly id). Use kg_search only to ANSWER A QUESTION from the knowledge contained in the artefacts.
2122
+ *
2123
+ * PICK THE MODE THAT FITS THE QUERY:
2078
2124
  *
2079
2125
  * • mode='local' (default) — for SPECIFIC factual questions ("what does §15 say about deposits?", "who is the Chief Counsel?"). FTS+vector RRF over individual document chunks. Returns precise excerpts with citations.
2080
2126
  *
@@ -3620,6 +3666,66 @@ interface paths {
3620
3666
  patch?: never;
3621
3667
  trace?: never;
3622
3668
  };
3669
+ "/tools/createBrandKit": {
3670
+ parameters: {
3671
+ query?: never;
3672
+ header?: never;
3673
+ path?: never;
3674
+ cookie?: never;
3675
+ };
3676
+ get?: never;
3677
+ put?: never;
3678
+ /**
3679
+ * createBrandKit
3680
+ * @description Create a per-org BRAND KIT (palette/fonts/logo) that themes branded-executive slides and document exports. Build it from one of: a `logoUrl` (AUTO-EXTRACT palette/fonts via the vision model), an `officeUrl` (an existing .pptx/.docx — extracts theme colours, fonts, logo, watermark + embedded font files), or explicit `tokens`. Auth: can_admin_org. Tiered: free 0, pro 1, enterprise unlimited. Optionally set it as the default at a scope in one call.
3681
+ */
3682
+ post: operations["createBrandKit"];
3683
+ delete?: never;
3684
+ options?: never;
3685
+ head?: never;
3686
+ patch?: never;
3687
+ trace?: never;
3688
+ };
3689
+ "/tools/listBrandKits": {
3690
+ parameters: {
3691
+ query?: never;
3692
+ header?: never;
3693
+ path?: never;
3694
+ cookie?: never;
3695
+ };
3696
+ get?: never;
3697
+ put?: never;
3698
+ /**
3699
+ * listBrandKits
3700
+ * @description List an organisation's BRAND KITS (palette/fonts/logo), newest first. Use a returned `id` as brandKitId for a design call or setDefaultBrandKit. Auth: can_admin_org.
3701
+ */
3702
+ post: operations["listBrandKits"];
3703
+ delete?: never;
3704
+ options?: never;
3705
+ head?: never;
3706
+ patch?: never;
3707
+ trace?: never;
3708
+ };
3709
+ "/tools/setDefaultBrandKit": {
3710
+ parameters: {
3711
+ query?: never;
3712
+ header?: never;
3713
+ path?: never;
3714
+ cookie?: never;
3715
+ };
3716
+ get?: never;
3717
+ put?: never;
3718
+ /**
3719
+ * setDefaultBrandKit
3720
+ * @description Set or clear the default BRAND KIT at a scope: organization, workspace, or project. Defaults cascade most-specific-first (a per-board/document override beats project beats workspace beats organization). Pass brandKitId:null to clear. Auth: org owner/admin.
3721
+ */
3722
+ post: operations["setDefaultBrandKit"];
3723
+ delete?: never;
3724
+ options?: never;
3725
+ head?: never;
3726
+ patch?: never;
3727
+ trace?: never;
3728
+ };
3623
3729
  "/tools/updateOrgFeatureFlags": {
3624
3730
  parameters: {
3625
3731
  query?: never;
@@ -5308,7 +5414,16 @@ interface operations {
5308
5414
  projectId?: string;
5309
5415
  workspaceId?: string;
5310
5416
  folderId?: string;
5417
+ /** @description Search text. Matched against title, friendlyId AND full document content. Returns the matching lines per document (grep). Case-insensitive unless caseSensitive:true; treated as a regex if isRegex:true. */
5311
5418
  query?: string;
5419
+ /** @description Treat `query` as a JavaScript regular expression (grep -E). Default false (literal substring). Regex search requires a project/workspace/folder scope and scans a bounded window of documents. */
5420
+ isRegex?: boolean;
5421
+ /** @description Case-sensitive matching. Default false. */
5422
+ caseSensitive?: boolean;
5423
+ /** @description Lines of surrounding context to include with each match (grep -C). 0-5, default 0. */
5424
+ contextLines?: number;
5425
+ /** @description Cap on matching lines returned per document. 1-20, default 5. */
5426
+ maxMatchesPerDocument?: number;
5312
5427
  limit?: number;
5313
5428
  offset?: number;
5314
5429
  /** @description ISO 8601 date filter (from). */
@@ -5317,7 +5432,7 @@ interface operations {
5317
5432
  toDate?: string;
5318
5433
  /** @description Date field to filter. Default: updated_at. */
5319
5434
  dateField?: string;
5320
- /** @description Field projection. Valid fields: id, title, friendlyId, friendlyIdNumber, projectId, folderId, createdAt, updatedAt, href. */
5435
+ /** @description Field projection for the document metadata. Valid fields: id, title, friendlyId, friendlyIdNumber, projectId, folderId, createdAt, updatedAt, href. (contentMatches/matchCount are always included when query is set.) */
5321
5436
  fields?: string[];
5322
5437
  };
5323
5438
  };
@@ -6545,6 +6660,209 @@ interface operations {
6545
6660
  projectId?: string;
6546
6661
  /** @description Set true ONLY after the user has approved the 50-credit cost. Leave unset/false on the first call to receive the cost quote + balance. */
6547
6662
  confirm?: boolean;
6663
+ /**
6664
+ * @description Optional. 'standard' (default) = the general multi-agent design. 'agentic' = an AI-chat-style agentic slide composer that drives the whiteboard tools and self-corrects from renders, composing ONE polished slide. 'agentic-deck' = the same agentic composer run over a planned storyline, building a multi-slide deck (each slide on its own frame, tiled left to right). 'branded-executive' = an on-brand, McKinsey-style editable SLIDE DECK themed by the org's brand kit (pair with brandKitId, or omit for the org default). 'illustrated' = an editable-illustration board: a rich text-free vector illustration with real editable text labels and leader lines placed on top. 'image' = a single polished, on-brand IMAGE board with all the text baked into the picture (no editable shapes), which the user then refines with AI mask edits. 'illustrated' and 'image' are each gated per organisation; if not enabled the call returns a clear message.
6665
+ * @enum {string}
6666
+ */
6667
+ designProfile?: "standard" | "branded-executive" | "illustrated" | "image" | "agentic" | "agentic-deck";
6668
+ /** @description Optional brand kit id (from listBrandKits) to theme a branded-executive deck. If omitted, the org's built-in default is used. */
6669
+ brandKitId?: string;
6670
+ };
6671
+ };
6672
+ };
6673
+ responses: {
6674
+ /** @description Tool result (shape varies per tool — refer to the tool's docs for the exact return value). */
6675
+ 200: {
6676
+ headers: {
6677
+ [name: string]: unknown;
6678
+ };
6679
+ content: {
6680
+ "application/json": {
6681
+ [key: string]: unknown;
6682
+ };
6683
+ };
6684
+ };
6685
+ /** @description Validation error. */
6686
+ 400: {
6687
+ headers: {
6688
+ [name: string]: unknown;
6689
+ };
6690
+ content: {
6691
+ "application/json": components["schemas"]["ErrorResponse"];
6692
+ };
6693
+ };
6694
+ /** @description Missing or invalid credentials. */
6695
+ 401: {
6696
+ headers: {
6697
+ [name: string]: unknown;
6698
+ };
6699
+ content: {
6700
+ "application/json": components["schemas"]["ErrorResponse"];
6701
+ };
6702
+ };
6703
+ /** @description Authenticated but lacking the required permission or feature flag. */
6704
+ 403: {
6705
+ headers: {
6706
+ [name: string]: unknown;
6707
+ };
6708
+ content: {
6709
+ "application/json": components["schemas"]["ErrorResponse"];
6710
+ };
6711
+ };
6712
+ /** @description Resource not found. */
6713
+ 404: {
6714
+ headers: {
6715
+ [name: string]: unknown;
6716
+ };
6717
+ content: {
6718
+ "application/json": components["schemas"]["ErrorResponse"];
6719
+ };
6720
+ };
6721
+ /** @description Body did not match the tool's input schema. */
6722
+ 422: {
6723
+ headers: {
6724
+ [name: string]: unknown;
6725
+ };
6726
+ content: {
6727
+ "application/json": components["schemas"]["ErrorResponse"];
6728
+ };
6729
+ };
6730
+ /** @description Server error. */
6731
+ 500: {
6732
+ headers: {
6733
+ [name: string]: unknown;
6734
+ };
6735
+ content: {
6736
+ "application/json": components["schemas"]["ErrorResponse"];
6737
+ };
6738
+ };
6739
+ };
6740
+ };
6741
+ designComponent: {
6742
+ parameters: {
6743
+ query?: never;
6744
+ header?: never;
6745
+ path?: never;
6746
+ cookie?: never;
6747
+ };
6748
+ requestBody?: {
6749
+ content: {
6750
+ "application/json": {
6751
+ /** @description The component key, lowercase dotted, e.g. 'kpi.delta'. This is how decks reference it; reused if it already exists. */
6752
+ key: string;
6753
+ /** @description A short human title, e.g. 'KPI with delta arrow'. */
6754
+ title: string;
6755
+ /** @description What the component IS, WHEN to use it, and what it should LOOK like (the richer the better — this drives both the designer and the critic). */
6756
+ description: string;
6757
+ /** @description Project to create the small preview board in (where the render iterations are shown). */
6758
+ projectId: string;
6759
+ /** @description Example slot content to render with, e.g. { value: '47%', label: 'Revenue growth', delta: '+12 pts' }. The slot keys become the component's editable fields. */
6760
+ sampleSlots: {
6761
+ [key: string]: unknown;
6762
+ };
6763
+ /** @description Optional width in grid columns (2-12, default 4). */
6764
+ boxCols?: number;
6765
+ /** @description Optional height in grid rows (2-12, default 5). */
6766
+ boxRows?: number;
6767
+ /** @description Optional catalogue category (e.g. 'data', 'narrative', 'comparison'). */
6768
+ category?: string;
6769
+ /** @description Optional search tags. */
6770
+ tags?: string[];
6771
+ /** @description Optional URL of a reference image the component should match; the critic compares the render to it. */
6772
+ referenceImageUrl?: string;
6773
+ /** @description Redesign even if a component with this key already exists (default false = reuse). */
6774
+ force?: boolean;
6775
+ };
6776
+ };
6777
+ };
6778
+ responses: {
6779
+ /** @description Tool result (shape varies per tool — refer to the tool's docs for the exact return value). */
6780
+ 200: {
6781
+ headers: {
6782
+ [name: string]: unknown;
6783
+ };
6784
+ content: {
6785
+ "application/json": {
6786
+ [key: string]: unknown;
6787
+ };
6788
+ };
6789
+ };
6790
+ /** @description Validation error. */
6791
+ 400: {
6792
+ headers: {
6793
+ [name: string]: unknown;
6794
+ };
6795
+ content: {
6796
+ "application/json": components["schemas"]["ErrorResponse"];
6797
+ };
6798
+ };
6799
+ /** @description Missing or invalid credentials. */
6800
+ 401: {
6801
+ headers: {
6802
+ [name: string]: unknown;
6803
+ };
6804
+ content: {
6805
+ "application/json": components["schemas"]["ErrorResponse"];
6806
+ };
6807
+ };
6808
+ /** @description Authenticated but lacking the required permission or feature flag. */
6809
+ 403: {
6810
+ headers: {
6811
+ [name: string]: unknown;
6812
+ };
6813
+ content: {
6814
+ "application/json": components["schemas"]["ErrorResponse"];
6815
+ };
6816
+ };
6817
+ /** @description Resource not found. */
6818
+ 404: {
6819
+ headers: {
6820
+ [name: string]: unknown;
6821
+ };
6822
+ content: {
6823
+ "application/json": components["schemas"]["ErrorResponse"];
6824
+ };
6825
+ };
6826
+ /** @description Body did not match the tool's input schema. */
6827
+ 422: {
6828
+ headers: {
6829
+ [name: string]: unknown;
6830
+ };
6831
+ content: {
6832
+ "application/json": components["schemas"]["ErrorResponse"];
6833
+ };
6834
+ };
6835
+ /** @description Server error. */
6836
+ 500: {
6837
+ headers: {
6838
+ [name: string]: unknown;
6839
+ };
6840
+ content: {
6841
+ "application/json": components["schemas"]["ErrorResponse"];
6842
+ };
6843
+ };
6844
+ };
6845
+ };
6846
+ editWhiteboardImageRegion: {
6847
+ parameters: {
6848
+ query?: never;
6849
+ header?: never;
6850
+ path?: never;
6851
+ cookie?: never;
6852
+ };
6853
+ requestBody?: {
6854
+ content: {
6855
+ "application/json": {
6856
+ /** @description The whiteboard document that holds the image element. */
6857
+ documentId: string;
6858
+ /** @description The id of the image element on the board to edit (from getWhiteboard includeElements=true). */
6859
+ elementId: string;
6860
+ /** @description A PNG mask (base64, with or without a data: prefix) the same shape as the image. WHITE pixels are regenerated; BLACK pixels are preserved. */
6861
+ maskBase64: string;
6862
+ /** @description What to put in the masked area, in plain language (e.g. 'replace the car with a red bicycle'). */
6863
+ prompt: string;
6864
+ /** @description Optional 0..1 — how far the regenerated area may diverge from the original. Ignored by FLUX Fill (which balances via the prompt); leave unset unless using a non-Fill inpaint model. */
6865
+ strength?: number;
6548
6866
  };
6549
6867
  };
6550
6868
  };
@@ -6981,10 +7299,10 @@ interface operations {
6981
7299
  /** @description Non-empty array of shape specs to append. Prefer stencils / sticky notes / architecture icons over raw rectangles wherever a standard form fits (see the `type` enum below and the tool description). */
6982
7300
  shapes: ({
6983
7301
  /**
6984
- * @description Element kind. 'sticky' = a first-class sticky/post-it note (solid fill + auto-fitting bound label; set text + backgroundColor) — use this for sticky notes, NOT a stencil. 'stencil' = a hand-drawn library graphic from listWhiteboardStencils, of kind 'symbol' (one atomic labelled node — flowchart box, BPMN task, org node: set `id` + `text` + width/height, text auto-fits, connect arrows via start/end {id}) or 'template' (a multi-element layout — Alerts, Forms, Tables, Charts: place whole, then customise its returned children by id; do NOT set a single `text`). Set `stencil` (fuzzy name, one call) or `stencilKey` (exact). 'image' with `iconPath` = a software-architecture icon from listArchitectureIcons. Reserve rectangle/ellipse/diamond for when no standard form fits.
7302
+ * @description Element kind. 'sticky' = a first-class sticky/post-it note (solid fill + auto-fitting bound label; set text + backgroundColor) — use this for sticky notes, NOT a stencil. 'stencil' = a hand-drawn library graphic from listWhiteboardStencils, of kind 'symbol' (one atomic labelled node — flowchart box, BPMN task, org node: set `id` + `text` + width/height, text auto-fits, connect arrows via start/end {id}) or 'template' (a multi-element layout — Alerts, Forms, Tables, Charts: place whole, then customise its returned children by id; do NOT set a single `text`). Set `stencil` (fuzzy name, one call) or `stencilKey` (exact). 'image' with `iconPath` = a software-architecture icon from listArchitectureIcons. 'chart' = a NATIVE, fully-editable data chart (column/bar/line/area/pie/donut/scatter/sparkline/combo/stackedColumn/groupedColumn/radar/gauge) built from real Excalidraw shapes — bars/lines/wedges plus axes, gridlines and a legend — for ANY data, metric, KPI, trend, comparison or breakdown: set chartType + series (+ categories + options). ALWAYS prefer a 'chart' over hand-drawing bars/lines or a wireframe 'chart' stencil. 'table' = a NATIVE, fully-editable GRID (real rectangles + bound, word-wrapped cells, auto-sized columns + rows, a header band, optional zebra striping / per-column colours) for ANY tabular data, list or matrix — set columns + rows (+ options). ALWAYS prefer a 'table' over hand-drawing a grid of boxes. Reserve rectangle/ellipse/diamond for when no standard form fits.
6985
7303
  * @enum {string}
6986
7304
  */
6987
- type: "rectangle" | "ellipse" | "diamond" | "sticky" | "text" | "arrow" | "line" | "freedraw" | "doodle" | "frame" | "image" | "stencil";
7305
+ type: "rectangle" | "ellipse" | "diamond" | "sticky" | "text" | "arrow" | "line" | "freedraw" | "doodle" | "frame" | "image" | "stencil" | "chart" | "table";
6988
7306
  /** @description For type:'stencil' — fuzzy-match a library stencil by name in ONE call, no prior listWhiteboardStencils needed (e.g. 'decision', 'actor', 'phone frame', 'kanban column'). NOTE: there is no sticky-note stencil — use type:'sticky' for sticky/post-it notes. */
6989
7307
  stencil?: string;
6990
7308
  /** @description For type:'stencil' — exact stencil key from listWhiteboardStencils (takes precedence over `stencil`). */
@@ -7011,16 +7329,53 @@ interface operations {
7011
7329
  height?: number;
7012
7330
  /** @description For type:'stencil' — uniform scale factor for the whole stencil (alternative to width/height). */
7013
7331
  scale?: number;
7014
- /** @description Label/caption. On a shape it's a centered auto-wrapped bound label (prefer over a separate type:'text'); on a type:'sticky' it's the note text; on a type:'stencil' of kind 'symbol' it fills + re-fits its single label (IGNORED for 'template' stencils — customise their children by id instead). */
7332
+ /** @description Label/caption. To label a shape, set `text` on the SHAPE itself — it becomes a BOUND label that the server word-wraps with real font metrics, auto-fits, and positions (centred by default) INSIDE the shape. Never drop a separate type:'text' element on top of a shape, and never hand-compute a label's x/y/width — the server does the geometry (like the editor does when you type into a shape). On a type:'sticky' it's the note text; on a type:'stencil' of kind 'symbol' it fills + re-fits its single label (IGNORED for 'template' stencils — customise their children by id instead). Use a standalone type:'text' only for free-floating text that belongs to no shape. */
7015
7333
  text?: string;
7016
7334
  /** @description Auto-shrink the bound label's font size so the text always fits inside the shape — no overflow (default true). Set false to keep your exact fontSize even if it spills. */
7017
7335
  fitText?: boolean;
7336
+ /** @description Text size in px. Establish HIERARCHY: titles ~28-40, section headings ~22-28, body/labels ~16-20. Applies to a standalone text, a shape's bound label, a sticky, or an icon caption. Bound labels still auto-shrink to fit unless fitText:false. */
7337
+ fontSize?: number;
7338
+ /** @description Font style: 'hand-drawn' (sketchy Excalidraw look, the default), 'sans' (clean/professional — use for business, dashboards, formal diagrams), or 'code' (monospace). Pass this to control the look instead of leaving everything hand-drawn. */
7339
+ fontFamily?: string;
7340
+ /** @description TEXT colour (for text/labels) or line/border colour (for shapes, arrows, lines, doodles): a name ('blue'/'green'/'red'/'orange'/'violet'/'teal'/…) or a hex value. Use a brand or theme colour for titles/emphasis; default is near-black. */
7341
+ strokeColor?: string;
7342
+ /**
7343
+ * @description Horizontal alignment of the text within its box — the equivalent of the toolbar's align buttons. Bound labels default to 'center'.
7344
+ * @enum {string}
7345
+ */
7346
+ textAlign?: "left" | "center" | "right";
7347
+ /**
7348
+ * @description Vertical alignment of a bound label inside its shape (toolbar parity). Defaults to 'middle' (centred).
7349
+ * @enum {string}
7350
+ */
7351
+ verticalAlign?: "top" | "middle" | "bottom";
7018
7352
  /** @description Fill colour: a name ('blue'/'green'/'yellow'/'pink'/'violet'/'orange'/'teal'/…) or a hex value. */
7019
7353
  backgroundColor?: string;
7020
7354
  /** @description For arrows/lines: { id } of the source shape (auto-clips to the edge + auto-routes around shapes in between). */
7021
7355
  start?: Record<string, never>;
7022
7356
  /** @description For arrows/lines: { id } of the target shape. */
7023
7357
  end?: Record<string, never>;
7358
+ /** @description For type:'chart' — the chart's title, drawn at the top of the chart. */
7359
+ title?: string;
7360
+ /**
7361
+ * @description For type:'chart' — the chart family. column=vertical bars (default), bar=horizontal bars, line/area=trends, pie/donut=parts-of-whole, scatter=points, sparkline=tiny inline trend (no axes/legend), combo=bars+line (dual axis via a series with axis:'right'), stackedColumn/groupedColumn=multi-series, radar, gauge.
7362
+ * @enum {string}
7363
+ */
7364
+ chartType?: "column" | "bar" | "line" | "area" | "pie" | "donut" | "scatter" | "sparkline" | "combo" | "stackedColumn" | "groupedColumn" | "radar" | "gauge";
7365
+ /** @description For type:'chart' — x-axis category labels, e.g. ['Jan','Feb','Mar','Apr']. */
7366
+ categories?: string[];
7367
+ /** @description For type:'chart' — one or more data series. Each: { name:string, data:number[], type?:'bar'|'line'|'area' (per-series, for combo), color?:string (hex), axis?:'left'|'right' (dual axis), markers?:boolean (line point markers) }. For pie/donut use ONE series whose data maps to categories. */
7368
+ series?: {
7369
+ [key: string]: unknown;
7370
+ }[];
7371
+ /** @description For type:'chart' — { legend?:boolean|'top'|'bottom'|'right', gridlines?:boolean|'x'|'y'|'both'|'none', dataLabels?:boolean, yAxis?:boolean, xAxis?:boolean, yMin?:number, yMax?:number, smooth?:boolean, valueFormat?:'%'|'$'|'k', palette?:string[] (hex), donutHole?:number }. For type:'table' — { headerFill?:string (hex), headerTextColor?:string, zebra?:boolean, rowFill?:string, altRowFill?:string, columnColors?:string[] (per-column hex), fontSize?:number, headerFontSize?:number, borderColor?:string, align?:'left'|'center'|'right' }. */
7372
+ options?: {
7373
+ [key: string]: unknown;
7374
+ };
7375
+ /** @description For type:'table' — column headers: string[] (e.g. ['Task','Owner','Status']) or [{ header:string, width?:number, align?:'left'|'center'|'right' }]. */
7376
+ columns?: (string | Record<string, never>)[];
7377
+ /** @description For type:'table' — data rows; each row is an array of cell values (string|number) aligned to columns, e.g. [['T-1','Sam','Done'],['T-2','Lee','WIP']]. */
7378
+ rows?: (string | number)[][];
7024
7379
  } & {
7025
7380
  [key: string]: unknown;
7026
7381
  })[];
@@ -9262,8 +9617,12 @@ interface operations {
9262
9617
  scanRunId?: string;
9263
9618
  /** @description Filter by framework (e.g. soc2, iso27001). */
9264
9619
  frameworkKey?: string;
9265
- /** @description Search title, friendly_id, problem_statement. */
9620
+ /** @description Grep across title, friendlyId and problem_statement. Substring by default; a regular expression when isRegex:true; case-insensitive unless caseSensitive:true. */
9266
9621
  query?: string;
9622
+ /** @description Treat query as a regular expression (grep -E), e.g. "ACME-\d+". Default false (literal substring). */
9623
+ isRegex?: boolean;
9624
+ /** @description Case-sensitive matching. Default false. */
9625
+ caseSensitive?: boolean;
9267
9626
  /** @description Sort field. Default: position. */
9268
9627
  sortField?: string;
9269
9628
  /** @description Sort ascending. Default: true. */
@@ -10624,14 +10983,18 @@ interface operations {
10624
10983
  requestBody?: {
10625
10984
  content: {
10626
10985
  "application/json": {
10627
- /** @description Search query. */
10986
+ /** @description Search query — a name fragment or a friendly id. */
10628
10987
  query: string;
10988
+ /** @description Switches on the cross-artefact finder. Artefact types to search (subset of document, whiteboard, improvement, task, plan, compliance). Empty / all = every type. Omit entirely for the improvements-only semantic search. */
10989
+ types?: ("document" | "whiteboard" | "improvement" | "task" | "plan" | "compliance")[];
10629
10990
  /** @description Limit to a project. */
10630
10991
  projectId?: string;
10631
10992
  /** @description Limit to a workspace. */
10632
10993
  workspaceId?: string;
10633
- /** @description Max results (default 20, max 50). */
10994
+ /** @description Max results (default 20 semantic / 30 cross-artefact, max 50). */
10634
10995
  limit?: number;
10996
+ /** @description Pagination offset (cross-artefact mode). */
10997
+ offset?: number;
10635
10998
  };
10636
10999
  };
10637
11000
  };
@@ -10718,8 +11081,12 @@ interface operations {
10718
11081
  status?: string;
10719
11082
  /** @description Filter: low, medium, high, critical. */
10720
11083
  priority?: string;
10721
- /** @description Search title, friendly_id, description. */
11084
+ /** @description Grep across title, friendlyId and description. Substring by default; a regular expression when isRegex:true; case-insensitive unless caseSensitive:true. */
10722
11085
  query?: string;
11086
+ /** @description Treat query as a regular expression (grep -E), e.g. "ACME-\d+". Default false (literal substring). */
11087
+ isRegex?: boolean;
11088
+ /** @description Case-sensitive matching. Default false. */
11089
+ caseSensitive?: boolean;
10723
11090
  /** @description Sort field. Default: created_at. */
10724
11091
  sortField?: string;
10725
11092
  /** @description Sort ascending. Default: false. */
@@ -12100,8 +12467,12 @@ interface operations {
12100
12467
  priority?: string;
12101
12468
  /** @description Filter by phase. */
12102
12469
  phaseId?: string;
12103
- /** @description Search title and friendly_id. */
12470
+ /** @description Grep across title, friendlyId and description. Substring by default; a regular expression when isRegex:true; case-insensitive unless caseSensitive:true. */
12104
12471
  query?: string;
12472
+ /** @description Treat query as a regular expression (grep -E), e.g. "ACME-\d+". Default false (literal substring). */
12473
+ isRegex?: boolean;
12474
+ /** @description Case-sensitive matching. Default false. */
12475
+ caseSensitive?: boolean;
12105
12476
  /** @description Sort field. Default: position. */
12106
12477
  sortField?: string;
12107
12478
  /** @description Sort ascending. Default: true. */
@@ -19797,6 +20168,277 @@ interface operations {
19797
20168
  };
19798
20169
  };
19799
20170
  };
20171
+ createBrandKit: {
20172
+ parameters: {
20173
+ query?: never;
20174
+ header?: never;
20175
+ path?: never;
20176
+ cookie?: never;
20177
+ };
20178
+ requestBody?: {
20179
+ content: {
20180
+ "application/json": {
20181
+ /** @description Org that owns the kit. */
20182
+ organizationId: string;
20183
+ /** @description Display name (e.g. the brand/company name). */
20184
+ name: string;
20185
+ /** @description Image URL of the logo to extract palette/fonts from (PNG/JPG/SVG). Omit if passing officeUrl or tokens. */
20186
+ logoUrl?: string;
20187
+ /** @description URL of an existing .pptx or .docx to extract the brand from (theme colours + fonts + logo + watermark + embedded fonts). Max 25MB. Omit if passing logoUrl or tokens. */
20188
+ officeUrl?: string;
20189
+ /** @description Explicit DTCG brand tokens { color:{brand:{primary,primaryText,ink,bg,surface,muted,border,positive,warning,negative}}, font:{heading,body} }. Omit to extract from logoUrl/officeUrl. */
20190
+ tokens?: {
20191
+ [key: string]: unknown;
20192
+ };
20193
+ /** @description Optional extra guidance for the extractor (e.g. 'use the teal, not the grey'). */
20194
+ guidance?: string;
20195
+ /**
20196
+ * @description Optionally set the new kit as default at this scope.
20197
+ * @enum {string}
20198
+ */
20199
+ setDefaultScope?: "organization" | "workspace" | "project";
20200
+ /** @description Workspace/project id when setDefaultScope is workspace/project. */
20201
+ setDefaultScopeId?: string;
20202
+ };
20203
+ };
20204
+ };
20205
+ responses: {
20206
+ /** @description Tool result (shape varies per tool — refer to the tool's docs for the exact return value). */
20207
+ 200: {
20208
+ headers: {
20209
+ [name: string]: unknown;
20210
+ };
20211
+ content: {
20212
+ "application/json": {
20213
+ [key: string]: unknown;
20214
+ };
20215
+ };
20216
+ };
20217
+ /** @description Validation error. */
20218
+ 400: {
20219
+ headers: {
20220
+ [name: string]: unknown;
20221
+ };
20222
+ content: {
20223
+ "application/json": components["schemas"]["ErrorResponse"];
20224
+ };
20225
+ };
20226
+ /** @description Missing or invalid credentials. */
20227
+ 401: {
20228
+ headers: {
20229
+ [name: string]: unknown;
20230
+ };
20231
+ content: {
20232
+ "application/json": components["schemas"]["ErrorResponse"];
20233
+ };
20234
+ };
20235
+ /** @description Authenticated but lacking the required permission or feature flag. */
20236
+ 403: {
20237
+ headers: {
20238
+ [name: string]: unknown;
20239
+ };
20240
+ content: {
20241
+ "application/json": components["schemas"]["ErrorResponse"];
20242
+ };
20243
+ };
20244
+ /** @description Resource not found. */
20245
+ 404: {
20246
+ headers: {
20247
+ [name: string]: unknown;
20248
+ };
20249
+ content: {
20250
+ "application/json": components["schemas"]["ErrorResponse"];
20251
+ };
20252
+ };
20253
+ /** @description Body did not match the tool's input schema. */
20254
+ 422: {
20255
+ headers: {
20256
+ [name: string]: unknown;
20257
+ };
20258
+ content: {
20259
+ "application/json": components["schemas"]["ErrorResponse"];
20260
+ };
20261
+ };
20262
+ /** @description Server error. */
20263
+ 500: {
20264
+ headers: {
20265
+ [name: string]: unknown;
20266
+ };
20267
+ content: {
20268
+ "application/json": components["schemas"]["ErrorResponse"];
20269
+ };
20270
+ };
20271
+ };
20272
+ };
20273
+ listBrandKits: {
20274
+ parameters: {
20275
+ query?: never;
20276
+ header?: never;
20277
+ path?: never;
20278
+ cookie?: never;
20279
+ };
20280
+ requestBody?: {
20281
+ content: {
20282
+ "application/json": {
20283
+ organizationId: string;
20284
+ };
20285
+ };
20286
+ };
20287
+ responses: {
20288
+ /** @description Tool result (shape varies per tool — refer to the tool's docs for the exact return value). */
20289
+ 200: {
20290
+ headers: {
20291
+ [name: string]: unknown;
20292
+ };
20293
+ content: {
20294
+ "application/json": {
20295
+ [key: string]: unknown;
20296
+ };
20297
+ };
20298
+ };
20299
+ /** @description Validation error. */
20300
+ 400: {
20301
+ headers: {
20302
+ [name: string]: unknown;
20303
+ };
20304
+ content: {
20305
+ "application/json": components["schemas"]["ErrorResponse"];
20306
+ };
20307
+ };
20308
+ /** @description Missing or invalid credentials. */
20309
+ 401: {
20310
+ headers: {
20311
+ [name: string]: unknown;
20312
+ };
20313
+ content: {
20314
+ "application/json": components["schemas"]["ErrorResponse"];
20315
+ };
20316
+ };
20317
+ /** @description Authenticated but lacking the required permission or feature flag. */
20318
+ 403: {
20319
+ headers: {
20320
+ [name: string]: unknown;
20321
+ };
20322
+ content: {
20323
+ "application/json": components["schemas"]["ErrorResponse"];
20324
+ };
20325
+ };
20326
+ /** @description Resource not found. */
20327
+ 404: {
20328
+ headers: {
20329
+ [name: string]: unknown;
20330
+ };
20331
+ content: {
20332
+ "application/json": components["schemas"]["ErrorResponse"];
20333
+ };
20334
+ };
20335
+ /** @description Body did not match the tool's input schema. */
20336
+ 422: {
20337
+ headers: {
20338
+ [name: string]: unknown;
20339
+ };
20340
+ content: {
20341
+ "application/json": components["schemas"]["ErrorResponse"];
20342
+ };
20343
+ };
20344
+ /** @description Server error. */
20345
+ 500: {
20346
+ headers: {
20347
+ [name: string]: unknown;
20348
+ };
20349
+ content: {
20350
+ "application/json": components["schemas"]["ErrorResponse"];
20351
+ };
20352
+ };
20353
+ };
20354
+ };
20355
+ setDefaultBrandKit: {
20356
+ parameters: {
20357
+ query?: never;
20358
+ header?: never;
20359
+ path?: never;
20360
+ cookie?: never;
20361
+ };
20362
+ requestBody?: {
20363
+ content: {
20364
+ "application/json": {
20365
+ /** @enum {string} */
20366
+ scope: "organization" | "workspace" | "project";
20367
+ /** @description The org/workspace/project id for the chosen scope. */
20368
+ scopeId: string;
20369
+ /** @description Brand kit to make default, or null to clear. */
20370
+ brandKitId?: string | null;
20371
+ };
20372
+ };
20373
+ };
20374
+ responses: {
20375
+ /** @description Tool result (shape varies per tool — refer to the tool's docs for the exact return value). */
20376
+ 200: {
20377
+ headers: {
20378
+ [name: string]: unknown;
20379
+ };
20380
+ content: {
20381
+ "application/json": {
20382
+ [key: string]: unknown;
20383
+ };
20384
+ };
20385
+ };
20386
+ /** @description Validation error. */
20387
+ 400: {
20388
+ headers: {
20389
+ [name: string]: unknown;
20390
+ };
20391
+ content: {
20392
+ "application/json": components["schemas"]["ErrorResponse"];
20393
+ };
20394
+ };
20395
+ /** @description Missing or invalid credentials. */
20396
+ 401: {
20397
+ headers: {
20398
+ [name: string]: unknown;
20399
+ };
20400
+ content: {
20401
+ "application/json": components["schemas"]["ErrorResponse"];
20402
+ };
20403
+ };
20404
+ /** @description Authenticated but lacking the required permission or feature flag. */
20405
+ 403: {
20406
+ headers: {
20407
+ [name: string]: unknown;
20408
+ };
20409
+ content: {
20410
+ "application/json": components["schemas"]["ErrorResponse"];
20411
+ };
20412
+ };
20413
+ /** @description Resource not found. */
20414
+ 404: {
20415
+ headers: {
20416
+ [name: string]: unknown;
20417
+ };
20418
+ content: {
20419
+ "application/json": components["schemas"]["ErrorResponse"];
20420
+ };
20421
+ };
20422
+ /** @description Body did not match the tool's input schema. */
20423
+ 422: {
20424
+ headers: {
20425
+ [name: string]: unknown;
20426
+ };
20427
+ content: {
20428
+ "application/json": components["schemas"]["ErrorResponse"];
20429
+ };
20430
+ };
20431
+ /** @description Server error. */
20432
+ 500: {
20433
+ headers: {
20434
+ [name: string]: unknown;
20435
+ };
20436
+ content: {
20437
+ "application/json": components["schemas"]["ErrorResponse"];
20438
+ };
20439
+ };
20440
+ };
20441
+ };
19800
20442
  updateOrgFeatureFlags: {
19801
20443
  parameters: {
19802
20444
  query?: never;
@@ -19909,11 +20551,16 @@ interface operations {
19909
20551
  /** @description Defaults to 'default' */
19910
20552
  view_name?: string;
19911
20553
  is_default?: boolean;
19912
- visible_columns?: Record<string, never> | unknown[] | null;
19913
- column_widths?: Record<string, never> | unknown[] | null;
19914
- column_order?: Record<string, never> | unknown[] | null;
19915
- sort_config?: Record<string, never> | unknown[] | null;
19916
- filter_config?: Record<string, never> | unknown[] | null;
20554
+ /** @description Visible column ids (string[]) when an array. */
20555
+ visible_columns?: Record<string, never> | string[] | null;
20556
+ /** @description Column widths — a { colId: px } map, or a number[] when an array. */
20557
+ column_widths?: Record<string, never> | number[] | null;
20558
+ /** @description Ordered column ids (string[]) when an array. */
20559
+ column_order?: Record<string, never> | string[] | null;
20560
+ /** @description Sort rules — array of { id, desc } when an array. */
20561
+ sort_config?: Record<string, never> | Record<string, never>[] | null;
20562
+ /** @description Filter state — usually a { pageSize, tab, filters } object. */
20563
+ filter_config?: Record<string, never> | Record<string, never>[] | null;
19917
20564
  }[];
19918
20565
  };
19919
20566
  };