@stablebaseline/sdk 0.4.1 → 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.
@@ -375,7 +375,7 @@ export interface paths {
375
375
  put?: never;
376
376
  /**
377
377
  * listDocuments
378
- * @description List documents in a project, workspace, or folder. Supports query search and date filtering.
378
+ * @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.
379
379
  */
380
380
  post: operations["listDocuments"];
381
381
  delete?: never;
@@ -435,7 +435,7 @@ export interface paths {
435
435
  put?: never;
436
436
  /**
437
437
  * getDocument
438
- * @description Read a document's content with line numbers. Returns numbered lines for use with editDocument. Diagrams/images appear as OMITTED markers with metadata (type, diagramId, nlDescription) — use getDiagramInDocument(diagramId) for full DSL code, or dedicated diagram/image tools to manage them.
438
+ * @description Read a document's content with line numbers. Returns numbered lines for use with editDocument. Diagrams/images appear as OMITTED markers with metadata (type, diagramId, nlDescription) — use getDiagramInDocument(diagramId) for full DSL code, or dedicated diagram/image tools to manage them. Pass includeDiagramDsl:true to inline each diagram's DSL and versionTimestamp directly into its DIAGRAM_OMITTED marker (saves a getDiagramInDocument call when you intend to read or edit diagrams).
439
439
  */
440
440
  post: operations["getDocument"];
441
441
  delete?: never;
@@ -475,7 +475,7 @@ export interface paths {
475
475
  put?: never;
476
476
  /**
477
477
  * editDocument
478
- * @description Edit a document with line-based patches. Call getDocument first for line numbers and versionTimestamp. Call getCdmdLanguageGuide if unfamiliar with CDMD syntax. Do not edit DIAGRAM/IMAGE markers manually — use dedicated diagram/image tools. To @-mention a person in your patch, insert `<!-- REFERENCE: {"type":"user","id":"<user_uuid>","label":"Name"} -->`; look up the user_id via listAssignablePrincipals. Mentioned users are notified automatically.
478
+ * @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.
479
479
  */
480
480
  post: operations["editDocument"];
481
481
  delete?: never;
@@ -495,7 +495,7 @@ export interface paths {
495
495
  put?: never;
496
496
  /**
497
497
  * findAndReplaceTextInDocument
498
- * @description Find and replace text in a document. Searches for all occurrences and replaces them. Case-sensitive by default. Diagrams/images are automatically protected — only document text is affected. Note: when the `replace` value contains a `<!-- REFERENCE: {...} -->` marker (e.g. inserting a user mention), it round-trips losslessly through the editor and triggers notifications if it adds a new user mention.
498
+ * @description Find and replace EXACT substrings in a document (NOT regex: wildcards and patterns are matched literally). Replaces EVERY occurrence and returns the replacement count; best for renames and repeated phrases. For a single targeted change at a known location, prefer editDocument (line patches with optimistic locking). Case-sensitive by default. Diagrams/images are automatically protected — only document text is affected. Note: when the `replace` value contains a `<!-- REFERENCE: {...} -->` marker (e.g. inserting a user mention), it round-trips losslessly through the editor and triggers notifications if it adds a new user mention.
499
499
  */
500
500
  post: operations["findAndReplaceTextInDocument"];
501
501
  delete?: never;
@@ -555,7 +555,7 @@ export interface paths {
555
555
  put?: never;
556
556
  /**
557
557
  * updateDiagramInDocument
558
- * @description Update a diagram's code, description, or properties. Call getDiagramTypeGuide for DSL syntax. Requires documentVersionTimestamp from getDocument. IMPORTANT: To change what the diagram visually shows, you MUST provide diagramCode with the full updated DSL source. The prompt and nlDescription fields are metadata only and do NOT change the rendered diagram. After updating, re-render with getDiagramImage to confirm it now looks right (iterate if not), and keep prompt/nlDescription in step with what the diagram now shows.
558
+ * @description Update a diagram's code, description, or properties. Call getDiagramTypeGuide for DSL syntax. Provide a version lock: EITHER documentVersionTimestamp (from getDocument — locks the whole document) OR diagramVersionTimestamp (from getDiagramInDocument, or getDocument with includeDiagramDsl:true — locks just THIS diagram, so two agents can edit two different diagrams in the same document concurrently without a conflict). At least one is required; diagramVersionTimestamp is preferred for concurrency. IMPORTANT: To change what the diagram visually shows, you MUST provide diagramCode with the full updated DSL source. The prompt and nlDescription fields are metadata only and do NOT change the rendered diagram. After updating, re-render with getDiagramImage to confirm it now looks right (iterate if not), and keep prompt/nlDescription in step with what the diagram now shows.
559
559
  */
560
560
  post: operations["updateDiagramInDocument"];
561
561
  delete?: never;
@@ -635,7 +635,7 @@ export interface paths {
635
635
  put?: never;
636
636
  /**
637
637
  * designWhiteboard
638
- * @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.
638
+ * @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.
639
639
  */
640
640
  post: operations["designWhiteboard"];
641
641
  delete?: never;
@@ -644,6 +644,46 @@ export interface paths {
644
644
  patch?: never;
645
645
  trace?: never;
646
646
  };
647
+ "/tools/designComponent": {
648
+ parameters: {
649
+ query?: never;
650
+ header?: never;
651
+ path?: never;
652
+ cookie?: never;
653
+ };
654
+ get?: never;
655
+ put?: never;
656
+ /**
657
+ * designComponent
658
+ * @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.
659
+ */
660
+ post: operations["designComponent"];
661
+ delete?: never;
662
+ options?: never;
663
+ head?: never;
664
+ patch?: never;
665
+ trace?: never;
666
+ };
667
+ "/tools/editWhiteboardImageRegion": {
668
+ parameters: {
669
+ query?: never;
670
+ header?: never;
671
+ path?: never;
672
+ cookie?: never;
673
+ };
674
+ get?: never;
675
+ put?: never;
676
+ /**
677
+ * editWhiteboardImageRegion
678
+ * @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.
679
+ */
680
+ post: operations["editWhiteboardImageRegion"];
681
+ delete?: never;
682
+ options?: never;
683
+ head?: never;
684
+ patch?: never;
685
+ trace?: never;
686
+ };
647
687
  "/tools/createWhiteboard": {
648
688
  parameters: {
649
689
  query?: never;
@@ -1215,7 +1255,7 @@ export interface paths {
1215
1255
  put?: never;
1216
1256
  /**
1217
1257
  * listImprovements
1218
- * @description List improvements in a project. Supports filtering by status, type, priority, and query.
1258
+ * @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.
1219
1259
  */
1220
1260
  post: operations["listImprovements"];
1221
1261
  delete?: never;
@@ -1495,7 +1535,11 @@ export interface paths {
1495
1535
  put?: never;
1496
1536
  /**
1497
1537
  * searchImprovements
1498
- * @description Search improvements using hybrid text + semantic search. Returns ranked results.
1538
+ * @description Locate any artefact (document / whiteboard / diagram / plan / task / improvement / compliance) by name or friendly id — AND ranked semantic search over improvements.
1539
+ *
1540
+ * • 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.
1541
+ *
1542
+ * • IMPROVEMENT SEMANTIC MODE (omit `types`): hybrid full-text + vector search over improvements only. Returns ranked { improvements }.
1499
1543
  */
1500
1544
  post: operations["searchImprovements"];
1501
1545
  delete?: never;
@@ -1515,7 +1559,7 @@ export interface paths {
1515
1559
  put?: never;
1516
1560
  /**
1517
1561
  * listPlans
1518
- * @description List plans in a project. Supports filtering by status, priority, and query.
1562
+ * @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.
1519
1563
  */
1520
1564
  post: operations["listPlans"];
1521
1565
  delete?: never;
@@ -1815,7 +1859,7 @@ export interface paths {
1815
1859
  put?: never;
1816
1860
  /**
1817
1861
  * listTasks
1818
- * @description List tasks in a plan. Supports filtering by status, priority, phaseId, and query.
1862
+ * @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.
1819
1863
  */
1820
1864
  post: operations["listTasks"];
1821
1865
  delete?: never;
@@ -2075,7 +2119,9 @@ export interface paths {
2075
2119
  put?: never;
2076
2120
  /**
2077
2121
  * kg_search
2078
- * @description Unified Knowledge Graph retrieval. PICK THE MODE THAT FITS THE QUERY:
2122
+ * @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.
2123
+ *
2124
+ * PICK THE MODE THAT FITS THE QUERY:
2079
2125
  *
2080
2126
  * • 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.
2081
2127
  *
@@ -3621,6 +3667,66 @@ export interface paths {
3621
3667
  patch?: never;
3622
3668
  trace?: never;
3623
3669
  };
3670
+ "/tools/createBrandKit": {
3671
+ parameters: {
3672
+ query?: never;
3673
+ header?: never;
3674
+ path?: never;
3675
+ cookie?: never;
3676
+ };
3677
+ get?: never;
3678
+ put?: never;
3679
+ /**
3680
+ * createBrandKit
3681
+ * @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.
3682
+ */
3683
+ post: operations["createBrandKit"];
3684
+ delete?: never;
3685
+ options?: never;
3686
+ head?: never;
3687
+ patch?: never;
3688
+ trace?: never;
3689
+ };
3690
+ "/tools/listBrandKits": {
3691
+ parameters: {
3692
+ query?: never;
3693
+ header?: never;
3694
+ path?: never;
3695
+ cookie?: never;
3696
+ };
3697
+ get?: never;
3698
+ put?: never;
3699
+ /**
3700
+ * listBrandKits
3701
+ * @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.
3702
+ */
3703
+ post: operations["listBrandKits"];
3704
+ delete?: never;
3705
+ options?: never;
3706
+ head?: never;
3707
+ patch?: never;
3708
+ trace?: never;
3709
+ };
3710
+ "/tools/setDefaultBrandKit": {
3711
+ parameters: {
3712
+ query?: never;
3713
+ header?: never;
3714
+ path?: never;
3715
+ cookie?: never;
3716
+ };
3717
+ get?: never;
3718
+ put?: never;
3719
+ /**
3720
+ * setDefaultBrandKit
3721
+ * @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.
3722
+ */
3723
+ post: operations["setDefaultBrandKit"];
3724
+ delete?: never;
3725
+ options?: never;
3726
+ head?: never;
3727
+ patch?: never;
3728
+ trace?: never;
3729
+ };
3624
3730
  "/tools/updateOrgFeatureFlags": {
3625
3731
  parameters: {
3626
3732
  query?: never;
@@ -5309,7 +5415,16 @@ export interface operations {
5309
5415
  projectId?: string;
5310
5416
  workspaceId?: string;
5311
5417
  folderId?: string;
5418
+ /** @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. */
5312
5419
  query?: string;
5420
+ /** @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. */
5421
+ isRegex?: boolean;
5422
+ /** @description Case-sensitive matching. Default false. */
5423
+ caseSensitive?: boolean;
5424
+ /** @description Lines of surrounding context to include with each match (grep -C). 0-5, default 0. */
5425
+ contextLines?: number;
5426
+ /** @description Cap on matching lines returned per document. 1-20, default 5. */
5427
+ maxMatchesPerDocument?: number;
5313
5428
  limit?: number;
5314
5429
  offset?: number;
5315
5430
  /** @description ISO 8601 date filter (from). */
@@ -5318,7 +5433,7 @@ export interface operations {
5318
5433
  toDate?: string;
5319
5434
  /** @description Date field to filter. Default: updated_at. */
5320
5435
  dateField?: string;
5321
- /** @description Field projection. Valid fields: id, title, friendlyId, friendlyIdNumber, projectId, folderId, createdAt, updatedAt, href. */
5436
+ /** @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.) */
5322
5437
  fields?: string[];
5323
5438
  };
5324
5439
  };
@@ -5599,6 +5714,8 @@ export interface operations {
5599
5714
  offset?: number;
5600
5715
  /** @description Max lines to return. Default: 200. */
5601
5716
  limit?: number;
5717
+ /** @description If true, inline each diagram's full DSL (as diagramCode) and its versionTimestamp into the DIAGRAM_OMITTED markers, so you can inspect and then edit a diagram (updateDiagramInDocument with diagramVersionTimestamp) without a second read. Default false. Note: large DSL inflates the response. */
5718
+ includeDiagramDsl?: boolean;
5602
5719
  /** @description Field projection. Valid fields: id, title, friendlyId, friendlyIdNumber, projectId, folderId, createdAt, updatedAt, versionTimestamp. */
5603
5720
  fields?: string[];
5604
5721
  /** @description Content field projection. Valid fields: offset, limit, totalLines, nextOffset, metadata, text. */
@@ -5780,19 +5897,30 @@ export interface operations {
5780
5897
  folderId?: string;
5781
5898
  /** @description Sort position within the parent folder. Use to reposition a single document. For batch sibling reorder, use reorderDocuments. */
5782
5899
  position?: number;
5783
- /** @description Version timestamp from getDocument() for optimistic locking. */
5784
- versionTimestamp: number;
5900
+ /** @description Version timestamp from getDocument() for optimistic locking. Required unless dryRun:true. */
5901
+ versionTimestamp?: number;
5902
+ /** @description If true, apply the patches and RETURN the resulting document text without saving — no version bump, no lock required. Use to preview/verify a patch before committing. Default false. */
5903
+ dryRun?: boolean;
5785
5904
  /** @description Version history summary. */
5786
5905
  changeSummary?: string;
5787
- /** @description Line-based patches. Can be empty if only updating title, folderId, or position. */
5788
- patches?: {
5906
+ /** @description Patches to apply. Use EITHER anchor patches OR line patches, not both in the same call. May be empty if only updating title, folderId, or position. */
5907
+ patches?: ({
5908
+ /** @description Exact existing text to replace. Must match the document byte-for-byte and be unique (or use before/after to disambiguate). */
5909
+ oldText: string;
5910
+ /** @description Replacement text. Empty string to delete the matched text. */
5911
+ newText: string;
5912
+ /** @description Optional. Text that appears immediately before oldText, used to disambiguate when oldText occurs more than once. */
5913
+ before?: string;
5914
+ /** @description Optional. Text that appears immediately after oldText, used to disambiguate. */
5915
+ after?: string;
5916
+ } | {
5789
5917
  /** @description 1-based start line. */
5790
5918
  startLine: number;
5791
5919
  /** @description 1-based end line (inclusive). */
5792
5920
  endLine: number;
5793
5921
  /** @description Replacement text. Empty string to delete lines. */
5794
5922
  replacement: string;
5795
- }[];
5923
+ })[];
5796
5924
  };
5797
5925
  };
5798
5926
  };
@@ -6193,8 +6321,10 @@ export interface operations {
6193
6321
  [key: string]: string;
6194
6322
  };
6195
6323
  };
6196
- /** @description Version timestamp from getDocument() for optimistic locking. */
6197
- documentVersionTimestamp: number;
6324
+ /** @description Document-level optimistic lock: versionTimestamp from getDocument(). Locks the whole document. Provide this OR diagramVersionTimestamp (at least one is required). */
6325
+ documentVersionTimestamp?: number;
6326
+ /** @description Diagram-level optimistic lock: versionTimestamp of THIS diagram (from getDiagramInDocument, or getDocument with includeDiagramDsl:true). Pass this instead of documentVersionTimestamp to lock only this diagram, so concurrent edits to OTHER diagrams in the same document don't conflict. Preferred for multi-agent concurrency. The response returns the new diagram.diagramVersionTimestamp for chaining further edits. */
6327
+ diagramVersionTimestamp?: number;
6198
6328
  };
6199
6329
  };
6200
6330
  };
@@ -6531,6 +6661,209 @@ export interface operations {
6531
6661
  projectId?: string;
6532
6662
  /** @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. */
6533
6663
  confirm?: boolean;
6664
+ /**
6665
+ * @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.
6666
+ * @enum {string}
6667
+ */
6668
+ designProfile?: "standard" | "branded-executive" | "illustrated" | "image" | "agentic" | "agentic-deck";
6669
+ /** @description Optional brand kit id (from listBrandKits) to theme a branded-executive deck. If omitted, the org's built-in default is used. */
6670
+ brandKitId?: string;
6671
+ };
6672
+ };
6673
+ };
6674
+ responses: {
6675
+ /** @description Tool result (shape varies per tool — refer to the tool's docs for the exact return value). */
6676
+ 200: {
6677
+ headers: {
6678
+ [name: string]: unknown;
6679
+ };
6680
+ content: {
6681
+ "application/json": {
6682
+ [key: string]: unknown;
6683
+ };
6684
+ };
6685
+ };
6686
+ /** @description Validation error. */
6687
+ 400: {
6688
+ headers: {
6689
+ [name: string]: unknown;
6690
+ };
6691
+ content: {
6692
+ "application/json": components["schemas"]["ErrorResponse"];
6693
+ };
6694
+ };
6695
+ /** @description Missing or invalid credentials. */
6696
+ 401: {
6697
+ headers: {
6698
+ [name: string]: unknown;
6699
+ };
6700
+ content: {
6701
+ "application/json": components["schemas"]["ErrorResponse"];
6702
+ };
6703
+ };
6704
+ /** @description Authenticated but lacking the required permission or feature flag. */
6705
+ 403: {
6706
+ headers: {
6707
+ [name: string]: unknown;
6708
+ };
6709
+ content: {
6710
+ "application/json": components["schemas"]["ErrorResponse"];
6711
+ };
6712
+ };
6713
+ /** @description Resource not found. */
6714
+ 404: {
6715
+ headers: {
6716
+ [name: string]: unknown;
6717
+ };
6718
+ content: {
6719
+ "application/json": components["schemas"]["ErrorResponse"];
6720
+ };
6721
+ };
6722
+ /** @description Body did not match the tool's input schema. */
6723
+ 422: {
6724
+ headers: {
6725
+ [name: string]: unknown;
6726
+ };
6727
+ content: {
6728
+ "application/json": components["schemas"]["ErrorResponse"];
6729
+ };
6730
+ };
6731
+ /** @description Server error. */
6732
+ 500: {
6733
+ headers: {
6734
+ [name: string]: unknown;
6735
+ };
6736
+ content: {
6737
+ "application/json": components["schemas"]["ErrorResponse"];
6738
+ };
6739
+ };
6740
+ };
6741
+ };
6742
+ designComponent: {
6743
+ parameters: {
6744
+ query?: never;
6745
+ header?: never;
6746
+ path?: never;
6747
+ cookie?: never;
6748
+ };
6749
+ requestBody?: {
6750
+ content: {
6751
+ "application/json": {
6752
+ /** @description The component key, lowercase dotted, e.g. 'kpi.delta'. This is how decks reference it; reused if it already exists. */
6753
+ key: string;
6754
+ /** @description A short human title, e.g. 'KPI with delta arrow'. */
6755
+ title: string;
6756
+ /** @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). */
6757
+ description: string;
6758
+ /** @description Project to create the small preview board in (where the render iterations are shown). */
6759
+ projectId: string;
6760
+ /** @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. */
6761
+ sampleSlots: {
6762
+ [key: string]: unknown;
6763
+ };
6764
+ /** @description Optional width in grid columns (2-12, default 4). */
6765
+ boxCols?: number;
6766
+ /** @description Optional height in grid rows (2-12, default 5). */
6767
+ boxRows?: number;
6768
+ /** @description Optional catalogue category (e.g. 'data', 'narrative', 'comparison'). */
6769
+ category?: string;
6770
+ /** @description Optional search tags. */
6771
+ tags?: string[];
6772
+ /** @description Optional URL of a reference image the component should match; the critic compares the render to it. */
6773
+ referenceImageUrl?: string;
6774
+ /** @description Redesign even if a component with this key already exists (default false = reuse). */
6775
+ force?: boolean;
6776
+ };
6777
+ };
6778
+ };
6779
+ responses: {
6780
+ /** @description Tool result (shape varies per tool — refer to the tool's docs for the exact return value). */
6781
+ 200: {
6782
+ headers: {
6783
+ [name: string]: unknown;
6784
+ };
6785
+ content: {
6786
+ "application/json": {
6787
+ [key: string]: unknown;
6788
+ };
6789
+ };
6790
+ };
6791
+ /** @description Validation error. */
6792
+ 400: {
6793
+ headers: {
6794
+ [name: string]: unknown;
6795
+ };
6796
+ content: {
6797
+ "application/json": components["schemas"]["ErrorResponse"];
6798
+ };
6799
+ };
6800
+ /** @description Missing or invalid credentials. */
6801
+ 401: {
6802
+ headers: {
6803
+ [name: string]: unknown;
6804
+ };
6805
+ content: {
6806
+ "application/json": components["schemas"]["ErrorResponse"];
6807
+ };
6808
+ };
6809
+ /** @description Authenticated but lacking the required permission or feature flag. */
6810
+ 403: {
6811
+ headers: {
6812
+ [name: string]: unknown;
6813
+ };
6814
+ content: {
6815
+ "application/json": components["schemas"]["ErrorResponse"];
6816
+ };
6817
+ };
6818
+ /** @description Resource not found. */
6819
+ 404: {
6820
+ headers: {
6821
+ [name: string]: unknown;
6822
+ };
6823
+ content: {
6824
+ "application/json": components["schemas"]["ErrorResponse"];
6825
+ };
6826
+ };
6827
+ /** @description Body did not match the tool's input schema. */
6828
+ 422: {
6829
+ headers: {
6830
+ [name: string]: unknown;
6831
+ };
6832
+ content: {
6833
+ "application/json": components["schemas"]["ErrorResponse"];
6834
+ };
6835
+ };
6836
+ /** @description Server error. */
6837
+ 500: {
6838
+ headers: {
6839
+ [name: string]: unknown;
6840
+ };
6841
+ content: {
6842
+ "application/json": components["schemas"]["ErrorResponse"];
6843
+ };
6844
+ };
6845
+ };
6846
+ };
6847
+ editWhiteboardImageRegion: {
6848
+ parameters: {
6849
+ query?: never;
6850
+ header?: never;
6851
+ path?: never;
6852
+ cookie?: never;
6853
+ };
6854
+ requestBody?: {
6855
+ content: {
6856
+ "application/json": {
6857
+ /** @description The whiteboard document that holds the image element. */
6858
+ documentId: string;
6859
+ /** @description The id of the image element on the board to edit (from getWhiteboard includeElements=true). */
6860
+ elementId: string;
6861
+ /** @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. */
6862
+ maskBase64: string;
6863
+ /** @description What to put in the masked area, in plain language (e.g. 'replace the car with a red bicycle'). */
6864
+ prompt: string;
6865
+ /** @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. */
6866
+ strength?: number;
6534
6867
  };
6535
6868
  };
6536
6869
  };
@@ -6967,10 +7300,10 @@ export interface operations {
6967
7300
  /** @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). */
6968
7301
  shapes: ({
6969
7302
  /**
6970
- * @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.
7303
+ * @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.
6971
7304
  * @enum {string}
6972
7305
  */
6973
- type: "rectangle" | "ellipse" | "diamond" | "sticky" | "text" | "arrow" | "line" | "freedraw" | "doodle" | "frame" | "image" | "stencil";
7306
+ type: "rectangle" | "ellipse" | "diamond" | "sticky" | "text" | "arrow" | "line" | "freedraw" | "doodle" | "frame" | "image" | "stencil" | "chart" | "table";
6974
7307
  /** @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. */
6975
7308
  stencil?: string;
6976
7309
  /** @description For type:'stencil' — exact stencil key from listWhiteboardStencils (takes precedence over `stencil`). */
@@ -6997,16 +7330,53 @@ export interface operations {
6997
7330
  height?: number;
6998
7331
  /** @description For type:'stencil' — uniform scale factor for the whole stencil (alternative to width/height). */
6999
7332
  scale?: number;
7000
- /** @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). */
7333
+ /** @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. */
7001
7334
  text?: string;
7002
7335
  /** @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. */
7003
7336
  fitText?: boolean;
7337
+ /** @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. */
7338
+ fontSize?: number;
7339
+ /** @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. */
7340
+ fontFamily?: string;
7341
+ /** @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. */
7342
+ strokeColor?: string;
7343
+ /**
7344
+ * @description Horizontal alignment of the text within its box — the equivalent of the toolbar's align buttons. Bound labels default to 'center'.
7345
+ * @enum {string}
7346
+ */
7347
+ textAlign?: "left" | "center" | "right";
7348
+ /**
7349
+ * @description Vertical alignment of a bound label inside its shape (toolbar parity). Defaults to 'middle' (centred).
7350
+ * @enum {string}
7351
+ */
7352
+ verticalAlign?: "top" | "middle" | "bottom";
7004
7353
  /** @description Fill colour: a name ('blue'/'green'/'yellow'/'pink'/'violet'/'orange'/'teal'/…) or a hex value. */
7005
7354
  backgroundColor?: string;
7006
7355
  /** @description For arrows/lines: { id } of the source shape (auto-clips to the edge + auto-routes around shapes in between). */
7007
7356
  start?: Record<string, never>;
7008
7357
  /** @description For arrows/lines: { id } of the target shape. */
7009
7358
  end?: Record<string, never>;
7359
+ /** @description For type:'chart' — the chart's title, drawn at the top of the chart. */
7360
+ title?: string;
7361
+ /**
7362
+ * @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.
7363
+ * @enum {string}
7364
+ */
7365
+ chartType?: "column" | "bar" | "line" | "area" | "pie" | "donut" | "scatter" | "sparkline" | "combo" | "stackedColumn" | "groupedColumn" | "radar" | "gauge";
7366
+ /** @description For type:'chart' — x-axis category labels, e.g. ['Jan','Feb','Mar','Apr']. */
7367
+ categories?: string[];
7368
+ /** @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. */
7369
+ series?: {
7370
+ [key: string]: unknown;
7371
+ }[];
7372
+ /** @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' }. */
7373
+ options?: {
7374
+ [key: string]: unknown;
7375
+ };
7376
+ /** @description For type:'table' — column headers: string[] (e.g. ['Task','Owner','Status']) or [{ header:string, width?:number, align?:'left'|'center'|'right' }]. */
7377
+ columns?: (string | Record<string, never>)[];
7378
+ /** @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']]. */
7379
+ rows?: (string | number)[][];
7010
7380
  } & {
7011
7381
  [key: string]: unknown;
7012
7382
  })[];
@@ -9248,8 +9618,12 @@ export interface operations {
9248
9618
  scanRunId?: string;
9249
9619
  /** @description Filter by framework (e.g. soc2, iso27001). */
9250
9620
  frameworkKey?: string;
9251
- /** @description Search title, friendly_id, problem_statement. */
9621
+ /** @description Grep across title, friendlyId and problem_statement. Substring by default; a regular expression when isRegex:true; case-insensitive unless caseSensitive:true. */
9252
9622
  query?: string;
9623
+ /** @description Treat query as a regular expression (grep -E), e.g. "ACME-\d+". Default false (literal substring). */
9624
+ isRegex?: boolean;
9625
+ /** @description Case-sensitive matching. Default false. */
9626
+ caseSensitive?: boolean;
9253
9627
  /** @description Sort field. Default: position. */
9254
9628
  sortField?: string;
9255
9629
  /** @description Sort ascending. Default: true. */
@@ -10610,14 +10984,18 @@ export interface operations {
10610
10984
  requestBody?: {
10611
10985
  content: {
10612
10986
  "application/json": {
10613
- /** @description Search query. */
10987
+ /** @description Search query — a name fragment or a friendly id. */
10614
10988
  query: string;
10989
+ /** @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. */
10990
+ types?: ("document" | "whiteboard" | "improvement" | "task" | "plan" | "compliance")[];
10615
10991
  /** @description Limit to a project. */
10616
10992
  projectId?: string;
10617
10993
  /** @description Limit to a workspace. */
10618
10994
  workspaceId?: string;
10619
- /** @description Max results (default 20, max 50). */
10995
+ /** @description Max results (default 20 semantic / 30 cross-artefact, max 50). */
10620
10996
  limit?: number;
10997
+ /** @description Pagination offset (cross-artefact mode). */
10998
+ offset?: number;
10621
10999
  };
10622
11000
  };
10623
11001
  };
@@ -10704,8 +11082,12 @@ export interface operations {
10704
11082
  status?: string;
10705
11083
  /** @description Filter: low, medium, high, critical. */
10706
11084
  priority?: string;
10707
- /** @description Search title, friendly_id, description. */
11085
+ /** @description Grep across title, friendlyId and description. Substring by default; a regular expression when isRegex:true; case-insensitive unless caseSensitive:true. */
10708
11086
  query?: string;
11087
+ /** @description Treat query as a regular expression (grep -E), e.g. "ACME-\d+". Default false (literal substring). */
11088
+ isRegex?: boolean;
11089
+ /** @description Case-sensitive matching. Default false. */
11090
+ caseSensitive?: boolean;
10709
11091
  /** @description Sort field. Default: created_at. */
10710
11092
  sortField?: string;
10711
11093
  /** @description Sort ascending. Default: false. */
@@ -12086,8 +12468,12 @@ export interface operations {
12086
12468
  priority?: string;
12087
12469
  /** @description Filter by phase. */
12088
12470
  phaseId?: string;
12089
- /** @description Search title and friendly_id. */
12471
+ /** @description Grep across title, friendlyId and description. Substring by default; a regular expression when isRegex:true; case-insensitive unless caseSensitive:true. */
12090
12472
  query?: string;
12473
+ /** @description Treat query as a regular expression (grep -E), e.g. "ACME-\d+". Default false (literal substring). */
12474
+ isRegex?: boolean;
12475
+ /** @description Case-sensitive matching. Default false. */
12476
+ caseSensitive?: boolean;
12091
12477
  /** @description Sort field. Default: position. */
12092
12478
  sortField?: string;
12093
12479
  /** @description Sort ascending. Default: true. */
@@ -19783,6 +20169,277 @@ export interface operations {
19783
20169
  };
19784
20170
  };
19785
20171
  };
20172
+ createBrandKit: {
20173
+ parameters: {
20174
+ query?: never;
20175
+ header?: never;
20176
+ path?: never;
20177
+ cookie?: never;
20178
+ };
20179
+ requestBody?: {
20180
+ content: {
20181
+ "application/json": {
20182
+ /** @description Org that owns the kit. */
20183
+ organizationId: string;
20184
+ /** @description Display name (e.g. the brand/company name). */
20185
+ name: string;
20186
+ /** @description Image URL of the logo to extract palette/fonts from (PNG/JPG/SVG). Omit if passing officeUrl or tokens. */
20187
+ logoUrl?: string;
20188
+ /** @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. */
20189
+ officeUrl?: string;
20190
+ /** @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. */
20191
+ tokens?: {
20192
+ [key: string]: unknown;
20193
+ };
20194
+ /** @description Optional extra guidance for the extractor (e.g. 'use the teal, not the grey'). */
20195
+ guidance?: string;
20196
+ /**
20197
+ * @description Optionally set the new kit as default at this scope.
20198
+ * @enum {string}
20199
+ */
20200
+ setDefaultScope?: "organization" | "workspace" | "project";
20201
+ /** @description Workspace/project id when setDefaultScope is workspace/project. */
20202
+ setDefaultScopeId?: string;
20203
+ };
20204
+ };
20205
+ };
20206
+ responses: {
20207
+ /** @description Tool result (shape varies per tool — refer to the tool's docs for the exact return value). */
20208
+ 200: {
20209
+ headers: {
20210
+ [name: string]: unknown;
20211
+ };
20212
+ content: {
20213
+ "application/json": {
20214
+ [key: string]: unknown;
20215
+ };
20216
+ };
20217
+ };
20218
+ /** @description Validation error. */
20219
+ 400: {
20220
+ headers: {
20221
+ [name: string]: unknown;
20222
+ };
20223
+ content: {
20224
+ "application/json": components["schemas"]["ErrorResponse"];
20225
+ };
20226
+ };
20227
+ /** @description Missing or invalid credentials. */
20228
+ 401: {
20229
+ headers: {
20230
+ [name: string]: unknown;
20231
+ };
20232
+ content: {
20233
+ "application/json": components["schemas"]["ErrorResponse"];
20234
+ };
20235
+ };
20236
+ /** @description Authenticated but lacking the required permission or feature flag. */
20237
+ 403: {
20238
+ headers: {
20239
+ [name: string]: unknown;
20240
+ };
20241
+ content: {
20242
+ "application/json": components["schemas"]["ErrorResponse"];
20243
+ };
20244
+ };
20245
+ /** @description Resource not found. */
20246
+ 404: {
20247
+ headers: {
20248
+ [name: string]: unknown;
20249
+ };
20250
+ content: {
20251
+ "application/json": components["schemas"]["ErrorResponse"];
20252
+ };
20253
+ };
20254
+ /** @description Body did not match the tool's input schema. */
20255
+ 422: {
20256
+ headers: {
20257
+ [name: string]: unknown;
20258
+ };
20259
+ content: {
20260
+ "application/json": components["schemas"]["ErrorResponse"];
20261
+ };
20262
+ };
20263
+ /** @description Server error. */
20264
+ 500: {
20265
+ headers: {
20266
+ [name: string]: unknown;
20267
+ };
20268
+ content: {
20269
+ "application/json": components["schemas"]["ErrorResponse"];
20270
+ };
20271
+ };
20272
+ };
20273
+ };
20274
+ listBrandKits: {
20275
+ parameters: {
20276
+ query?: never;
20277
+ header?: never;
20278
+ path?: never;
20279
+ cookie?: never;
20280
+ };
20281
+ requestBody?: {
20282
+ content: {
20283
+ "application/json": {
20284
+ organizationId: string;
20285
+ };
20286
+ };
20287
+ };
20288
+ responses: {
20289
+ /** @description Tool result (shape varies per tool — refer to the tool's docs for the exact return value). */
20290
+ 200: {
20291
+ headers: {
20292
+ [name: string]: unknown;
20293
+ };
20294
+ content: {
20295
+ "application/json": {
20296
+ [key: string]: unknown;
20297
+ };
20298
+ };
20299
+ };
20300
+ /** @description Validation error. */
20301
+ 400: {
20302
+ headers: {
20303
+ [name: string]: unknown;
20304
+ };
20305
+ content: {
20306
+ "application/json": components["schemas"]["ErrorResponse"];
20307
+ };
20308
+ };
20309
+ /** @description Missing or invalid credentials. */
20310
+ 401: {
20311
+ headers: {
20312
+ [name: string]: unknown;
20313
+ };
20314
+ content: {
20315
+ "application/json": components["schemas"]["ErrorResponse"];
20316
+ };
20317
+ };
20318
+ /** @description Authenticated but lacking the required permission or feature flag. */
20319
+ 403: {
20320
+ headers: {
20321
+ [name: string]: unknown;
20322
+ };
20323
+ content: {
20324
+ "application/json": components["schemas"]["ErrorResponse"];
20325
+ };
20326
+ };
20327
+ /** @description Resource not found. */
20328
+ 404: {
20329
+ headers: {
20330
+ [name: string]: unknown;
20331
+ };
20332
+ content: {
20333
+ "application/json": components["schemas"]["ErrorResponse"];
20334
+ };
20335
+ };
20336
+ /** @description Body did not match the tool's input schema. */
20337
+ 422: {
20338
+ headers: {
20339
+ [name: string]: unknown;
20340
+ };
20341
+ content: {
20342
+ "application/json": components["schemas"]["ErrorResponse"];
20343
+ };
20344
+ };
20345
+ /** @description Server error. */
20346
+ 500: {
20347
+ headers: {
20348
+ [name: string]: unknown;
20349
+ };
20350
+ content: {
20351
+ "application/json": components["schemas"]["ErrorResponse"];
20352
+ };
20353
+ };
20354
+ };
20355
+ };
20356
+ setDefaultBrandKit: {
20357
+ parameters: {
20358
+ query?: never;
20359
+ header?: never;
20360
+ path?: never;
20361
+ cookie?: never;
20362
+ };
20363
+ requestBody?: {
20364
+ content: {
20365
+ "application/json": {
20366
+ /** @enum {string} */
20367
+ scope: "organization" | "workspace" | "project";
20368
+ /** @description The org/workspace/project id for the chosen scope. */
20369
+ scopeId: string;
20370
+ /** @description Brand kit to make default, or null to clear. */
20371
+ brandKitId?: string | null;
20372
+ };
20373
+ };
20374
+ };
20375
+ responses: {
20376
+ /** @description Tool result (shape varies per tool — refer to the tool's docs for the exact return value). */
20377
+ 200: {
20378
+ headers: {
20379
+ [name: string]: unknown;
20380
+ };
20381
+ content: {
20382
+ "application/json": {
20383
+ [key: string]: unknown;
20384
+ };
20385
+ };
20386
+ };
20387
+ /** @description Validation error. */
20388
+ 400: {
20389
+ headers: {
20390
+ [name: string]: unknown;
20391
+ };
20392
+ content: {
20393
+ "application/json": components["schemas"]["ErrorResponse"];
20394
+ };
20395
+ };
20396
+ /** @description Missing or invalid credentials. */
20397
+ 401: {
20398
+ headers: {
20399
+ [name: string]: unknown;
20400
+ };
20401
+ content: {
20402
+ "application/json": components["schemas"]["ErrorResponse"];
20403
+ };
20404
+ };
20405
+ /** @description Authenticated but lacking the required permission or feature flag. */
20406
+ 403: {
20407
+ headers: {
20408
+ [name: string]: unknown;
20409
+ };
20410
+ content: {
20411
+ "application/json": components["schemas"]["ErrorResponse"];
20412
+ };
20413
+ };
20414
+ /** @description Resource not found. */
20415
+ 404: {
20416
+ headers: {
20417
+ [name: string]: unknown;
20418
+ };
20419
+ content: {
20420
+ "application/json": components["schemas"]["ErrorResponse"];
20421
+ };
20422
+ };
20423
+ /** @description Body did not match the tool's input schema. */
20424
+ 422: {
20425
+ headers: {
20426
+ [name: string]: unknown;
20427
+ };
20428
+ content: {
20429
+ "application/json": components["schemas"]["ErrorResponse"];
20430
+ };
20431
+ };
20432
+ /** @description Server error. */
20433
+ 500: {
20434
+ headers: {
20435
+ [name: string]: unknown;
20436
+ };
20437
+ content: {
20438
+ "application/json": components["schemas"]["ErrorResponse"];
20439
+ };
20440
+ };
20441
+ };
20442
+ };
19786
20443
  updateOrgFeatureFlags: {
19787
20444
  parameters: {
19788
20445
  query?: never;
@@ -19895,11 +20552,16 @@ export interface operations {
19895
20552
  /** @description Defaults to 'default' */
19896
20553
  view_name?: string;
19897
20554
  is_default?: boolean;
19898
- visible_columns?: Record<string, never> | unknown[] | null;
19899
- column_widths?: Record<string, never> | unknown[] | null;
19900
- column_order?: Record<string, never> | unknown[] | null;
19901
- sort_config?: Record<string, never> | unknown[] | null;
19902
- filter_config?: Record<string, never> | unknown[] | null;
20555
+ /** @description Visible column ids (string[]) when an array. */
20556
+ visible_columns?: Record<string, never> | string[] | null;
20557
+ /** @description Column widths — a { colId: px } map, or a number[] when an array. */
20558
+ column_widths?: Record<string, never> | number[] | null;
20559
+ /** @description Ordered column ids (string[]) when an array. */
20560
+ column_order?: Record<string, never> | string[] | null;
20561
+ /** @description Sort rules — array of { id, desc } when an array. */
20562
+ sort_config?: Record<string, never> | Record<string, never>[] | null;
20563
+ /** @description Filter state — usually a { pageSize, tab, filters } object. */
20564
+ filter_config?: Record<string, never> | Record<string, never>[] | null;
19903
20565
  }[];
19904
20566
  };
19905
20567
  };