@stablebaseline/sdk 0.4.2 → 0.4.4

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;
@@ -475,7 +475,7 @@ export interface paths {
475
475
  put?: never;
476
476
  /**
477
477
  * editDocument
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, 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.
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;
@@ -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,146 @@ 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
+ };
687
+ "/tools/exportDeck": {
688
+ parameters: {
689
+ query?: never;
690
+ header?: never;
691
+ path?: never;
692
+ cookie?: never;
693
+ };
694
+ get?: never;
695
+ put?: never;
696
+ /**
697
+ * exportDeck
698
+ * @description Export an already-generated slide DECK (from the branded HTML-deck pipeline) to an editable PowerPoint (PPTX), PDF, PNG images, or raw HTML. Give it the deckId of a deck whose status is 'ready'; it downloads the deck's stored HTML and renders it in a headless browser via the export worker. 'pptx' = native, fully-editable PowerPoint (real shapes and text, not screenshots); 'pdf' = vector, one page per slide; 'png' = one image per slide (returned as a base64 array); 'html' = the self-contained deck HTML. Returns the file as base64 in `data` (pptx/pdf/html) or per-slide base64 in `slides` (png). The deck must be finished; a deck that is still generating, failed, or archived returns a clear message.
699
+ */
700
+ post: operations["exportDeck"];
701
+ delete?: never;
702
+ options?: never;
703
+ head?: never;
704
+ patch?: never;
705
+ trace?: never;
706
+ };
707
+ "/tools/generateIllustration": {
708
+ parameters: {
709
+ query?: never;
710
+ header?: never;
711
+ path?: never;
712
+ cookie?: never;
713
+ };
714
+ get?: never;
715
+ put?: never;
716
+ /**
717
+ * generateIllustration
718
+ * @description Generate a standalone, on-brand ILLUSTRATION (raw pixels) from a plain-language prompt, the one thing native shapes and diagrams cannot make. Returns a durable image URL you can insert into a whiteboard or document. Colour-conditioned to the organisation's brand (or a specific brandKitId) and rendered in a clean flat-vector editorial style with NO text, letters, or numbers baked in. Costs a small flat credit charge (refunded automatically if generation fails on our side); an identical prompt reuses a cached image at no charge.
719
+ */
720
+ post: operations["generateIllustration"];
721
+ delete?: never;
722
+ options?: never;
723
+ head?: never;
724
+ patch?: never;
725
+ trace?: never;
726
+ };
727
+ "/tools/designDeck": {
728
+ parameters: {
729
+ query?: never;
730
+ header?: never;
731
+ path?: never;
732
+ cookie?: never;
733
+ };
734
+ get?: never;
735
+ put?: never;
736
+ /**
737
+ * designDeck
738
+ * @description Design a complete, branded HTML slide deck from a plain-language goal using the premium agentic deck builder. COST-GATED (50 credits): the first call (confirm unset) returns the cost quote plus the workspace balance so you can ask the user; only a call with confirm:true charges the flat fee and builds the deck. The deck is themed to the organisation's brand (or a brandKitId), composed slide by slide, rendered and self-corrected, then saved as a finished deck you can export with exportDeck (pptx/pdf/png/html). The fee is auto-refunded if the build fails or produces nothing. If the user would rather not spend the credits, build slides another way. Requires a projectId for a new deck, or a deckId to rebuild an existing one.
739
+ */
740
+ post: operations["designDeck"];
741
+ delete?: never;
742
+ options?: never;
743
+ head?: never;
744
+ patch?: never;
745
+ trace?: never;
746
+ };
747
+ "/tools/editDeck": {
748
+ parameters: {
749
+ query?: never;
750
+ header?: never;
751
+ path?: never;
752
+ cookie?: never;
753
+ };
754
+ get?: never;
755
+ put?: never;
756
+ /**
757
+ * editDeck
758
+ * @description Make a targeted change to an existing, finished deck using the agentic deck builder. COST-GATED (10 credits): the first call (confirm unset) returns the cost quote plus balance; only confirm:true charges the fee and applies the edit. Loads the deck's current HTML, makes ONLY the requested change (leaving other slides intact), renders to verify it, and re-saves. The fee is auto-refunded if the edit makes no change or fails.
759
+ */
760
+ post: operations["editDeck"];
761
+ delete?: never;
762
+ options?: never;
763
+ head?: never;
764
+ patch?: never;
765
+ trace?: never;
766
+ };
767
+ "/tools/insertDeckIntoWhiteboard": {
768
+ parameters: {
769
+ query?: never;
770
+ header?: never;
771
+ path?: never;
772
+ cookie?: never;
773
+ };
774
+ get?: never;
775
+ put?: never;
776
+ /**
777
+ * insertDeckIntoWhiteboard
778
+ * @description Render a FINISHED slide DECK's pages into framed images on a WHITEBOARD: one Excalidraw frame per slide, laid out as a horizontal row of pages so the whole deck appears on the board to pan across, annotate around, and edit beside. Give it the deckId of a deck whose status is 'ready'; it renders each slide to a PNG (via the export worker) and drops each image inside its own 1280x720 frame named 'Slide N'. Pass an existing whiteboard documentId to place the slides on it, or a projectId to create a new board (defaults to the deck's own project; the new board is named '<deck title> (deck)'). Returns the documentId, the number of slide frames placed, and the board title. The deck must be finished; a deck that is still generating, failed, or archived returns a clear message.
779
+ */
780
+ post: operations["insertDeckIntoWhiteboard"];
781
+ delete?: never;
782
+ options?: never;
783
+ head?: never;
784
+ patch?: never;
785
+ trace?: never;
786
+ };
647
787
  "/tools/createWhiteboard": {
648
788
  parameters: {
649
789
  query?: never;
@@ -955,7 +1095,7 @@ export interface paths {
955
1095
  put?: never;
956
1096
  /**
957
1097
  * rebuildPlatformCatalogEmbeddings
958
- * @description Internal maintenance (requires write). Syncs gte-small (384-dim) vector embeddings for the MCP tool, whiteboard stencil, and architecture icon catalogs into platform_catalog_embeddings, so searchTools, listWhiteboardStencils, and listArchitectureIcons can do semantic search. Incremental: scans every catalog, diffs by content hash, and re-embeds ONLY changed rows (cheap no-op when nothing changed). This normally runs automatically every hour (the platform-catalog-sync cron), so manual calls are rarely needed use it to force an immediate sync after changing tools/stencils/icons. Embeds up to ~120 changed rows per call; if more changed, call again until allDone is true. Not part of normal authoring flows.
1098
+ * @description Internal maintenance (requires write). Syncs gte-small (384-dim) vector embeddings for every platform catalog (MCP tools, whiteboard stencils, architecture icons, infographic templates, whiteboard design components, and open-design skills) into platform_catalog_embeddings, so the semantic search behind searchTools, listWhiteboardStencils, listArchitectureIcons, and the design-skill / component browsers stays current. Incremental: scans every catalog, diffs by content hash, and re-embeds ONLY changed rows (cheap no-op when nothing changed). This normally runs automatically every hour (the platform-catalog-sync cron), so manual calls are rarely needed; use it to force an immediate sync after changing any catalog. Embeds up to ~120 changed rows per call; if more changed, call again until allDone is true. Not part of normal authoring flows.
959
1099
  */
960
1100
  post: operations["rebuildPlatformCatalogEmbeddings"];
961
1101
  delete?: never;
@@ -1215,7 +1355,7 @@ export interface paths {
1215
1355
  put?: never;
1216
1356
  /**
1217
1357
  * listImprovements
1218
- * @description List improvements in a project. Supports filtering by status, type, priority, and query.
1358
+ * @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
1359
  */
1220
1360
  post: operations["listImprovements"];
1221
1361
  delete?: never;
@@ -1495,7 +1635,11 @@ export interface paths {
1495
1635
  put?: never;
1496
1636
  /**
1497
1637
  * searchImprovements
1498
- * @description Search improvements using hybrid text + semantic search. Returns ranked results.
1638
+ * @description Locate any artefact (document / whiteboard / diagram / plan / task / improvement / compliance) by name or friendly id — AND ranked semantic search over improvements.
1639
+ *
1640
+ * • 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.
1641
+ *
1642
+ * • IMPROVEMENT SEMANTIC MODE (omit `types`): hybrid full-text + vector search over improvements only. Returns ranked { improvements }.
1499
1643
  */
1500
1644
  post: operations["searchImprovements"];
1501
1645
  delete?: never;
@@ -1515,7 +1659,7 @@ export interface paths {
1515
1659
  put?: never;
1516
1660
  /**
1517
1661
  * listPlans
1518
- * @description List plans in a project. Supports filtering by status, priority, and query.
1662
+ * @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
1663
  */
1520
1664
  post: operations["listPlans"];
1521
1665
  delete?: never;
@@ -1815,7 +1959,7 @@ export interface paths {
1815
1959
  put?: never;
1816
1960
  /**
1817
1961
  * listTasks
1818
- * @description List tasks in a plan. Supports filtering by status, priority, phaseId, and query.
1962
+ * @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
1963
  */
1820
1964
  post: operations["listTasks"];
1821
1965
  delete?: never;
@@ -2075,7 +2219,9 @@ export interface paths {
2075
2219
  put?: never;
2076
2220
  /**
2077
2221
  * kg_search
2078
- * @description Unified Knowledge Graph retrieval. PICK THE MODE THAT FITS THE QUERY:
2222
+ * @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.
2223
+ *
2224
+ * PICK THE MODE THAT FITS THE QUERY:
2079
2225
  *
2080
2226
  * • 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
2227
  *
@@ -3621,6 +3767,66 @@ export interface paths {
3621
3767
  patch?: never;
3622
3768
  trace?: never;
3623
3769
  };
3770
+ "/tools/createBrandKit": {
3771
+ parameters: {
3772
+ query?: never;
3773
+ header?: never;
3774
+ path?: never;
3775
+ cookie?: never;
3776
+ };
3777
+ get?: never;
3778
+ put?: never;
3779
+ /**
3780
+ * createBrandKit
3781
+ * @description Create a per-org BRAND KIT so Stable Baseline outputs come out fully on-brand. Upload your branding and it is auto-applied: pass a `logoUrl` (as little as your logo, and the vision model AUTO-EXTRACTS your palette and fonts), or an `officeUrl` (an existing .pptx/.docx, from which it extracts theme colours, fonts, logo, watermark and the embedded font files), or explicit `tokens`. The kit themes branded-executive slides AND document exports (PDF, Word, PowerPoint). Auth: can_admin_org. Tiered: free 0, pro 1, enterprise unlimited. Optionally set it as the default at a scope in one call.
3782
+ */
3783
+ post: operations["createBrandKit"];
3784
+ delete?: never;
3785
+ options?: never;
3786
+ head?: never;
3787
+ patch?: never;
3788
+ trace?: never;
3789
+ };
3790
+ "/tools/listBrandKits": {
3791
+ parameters: {
3792
+ query?: never;
3793
+ header?: never;
3794
+ path?: never;
3795
+ cookie?: never;
3796
+ };
3797
+ get?: never;
3798
+ put?: never;
3799
+ /**
3800
+ * listBrandKits
3801
+ * @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.
3802
+ */
3803
+ post: operations["listBrandKits"];
3804
+ delete?: never;
3805
+ options?: never;
3806
+ head?: never;
3807
+ patch?: never;
3808
+ trace?: never;
3809
+ };
3810
+ "/tools/setDefaultBrandKit": {
3811
+ parameters: {
3812
+ query?: never;
3813
+ header?: never;
3814
+ path?: never;
3815
+ cookie?: never;
3816
+ };
3817
+ get?: never;
3818
+ put?: never;
3819
+ /**
3820
+ * setDefaultBrandKit
3821
+ * @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.
3822
+ */
3823
+ post: operations["setDefaultBrandKit"];
3824
+ delete?: never;
3825
+ options?: never;
3826
+ head?: never;
3827
+ patch?: never;
3828
+ trace?: never;
3829
+ };
3624
3830
  "/tools/updateOrgFeatureFlags": {
3625
3831
  parameters: {
3626
3832
  query?: never;
@@ -5309,7 +5515,16 @@ export interface operations {
5309
5515
  projectId?: string;
5310
5516
  workspaceId?: string;
5311
5517
  folderId?: string;
5518
+ /** @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
5519
  query?: string;
5520
+ /** @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. */
5521
+ isRegex?: boolean;
5522
+ /** @description Case-sensitive matching. Default false. */
5523
+ caseSensitive?: boolean;
5524
+ /** @description Lines of surrounding context to include with each match (grep -C). 0-5, default 0. */
5525
+ contextLines?: number;
5526
+ /** @description Cap on matching lines returned per document. 1-20, default 5. */
5527
+ maxMatchesPerDocument?: number;
5313
5528
  limit?: number;
5314
5529
  offset?: number;
5315
5530
  /** @description ISO 8601 date filter (from). */
@@ -5318,7 +5533,7 @@ export interface operations {
5318
5533
  toDate?: string;
5319
5534
  /** @description Date field to filter. Default: updated_at. */
5320
5535
  dateField?: string;
5321
- /** @description Field projection. Valid fields: id, title, friendlyId, friendlyIdNumber, projectId, folderId, createdAt, updatedAt, href. */
5536
+ /** @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
5537
  fields?: string[];
5323
5538
  };
5324
5539
  };
@@ -6546,6 +6761,13 @@ export interface operations {
6546
6761
  projectId?: string;
6547
6762
  /** @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. */
6548
6763
  confirm?: boolean;
6764
+ /**
6765
+ * @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.
6766
+ * @enum {string}
6767
+ */
6768
+ designProfile?: "standard" | "branded-executive" | "illustrated" | "image" | "agentic" | "agentic-deck";
6769
+ /** @description Optional brand kit id (from listBrandKits) to theme a branded-executive deck. If omitted, the org's built-in default is used. Create one from just a logo (or a .pptx/.docx) via createBrandKit. */
6770
+ brandKitId?: string;
6549
6771
  };
6550
6772
  };
6551
6773
  };
@@ -6617,7 +6839,7 @@ export interface operations {
6617
6839
  };
6618
6840
  };
6619
6841
  };
6620
- createWhiteboard: {
6842
+ designComponent: {
6621
6843
  parameters: {
6622
6844
  query?: never;
6623
6845
  header?: never;
@@ -6627,11 +6849,30 @@ export interface operations {
6627
6849
  requestBody?: {
6628
6850
  content: {
6629
6851
  "application/json": {
6630
- projectId: string;
6631
- /** @description REQUIRED. A clear, descriptive board name (e.g. 'Q3 GTM plan'). Programmatic boards must be titled — blank/'Untitled' titles are rejected. */
6852
+ /** @description The component key, lowercase dotted, e.g. 'kpi.delta'. This is how decks reference it; reused if it already exists. */
6853
+ key: string;
6854
+ /** @description A short human title, e.g. 'KPI with delta arrow'. */
6632
6855
  title: string;
6633
- /** @description Optional folder to file the whiteboard under. */
6634
- folderId?: string;
6856
+ /** @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). */
6857
+ description: string;
6858
+ /** @description Project to create the small preview board in (where the render iterations are shown). */
6859
+ projectId: string;
6860
+ /** @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. */
6861
+ sampleSlots: {
6862
+ [key: string]: unknown;
6863
+ };
6864
+ /** @description Optional width in grid columns (2-12, default 4). */
6865
+ boxCols?: number;
6866
+ /** @description Optional height in grid rows (2-12, default 5). */
6867
+ boxRows?: number;
6868
+ /** @description Optional catalogue category (e.g. 'data', 'narrative', 'comparison'). */
6869
+ category?: string;
6870
+ /** @description Optional search tags. */
6871
+ tags?: string[];
6872
+ /** @description Optional URL of a reference image the component should match; the critic compares the render to it. */
6873
+ referenceImageUrl?: string;
6874
+ /** @description Redesign even if a component with this key already exists (default false = reuse). */
6875
+ force?: boolean;
6635
6876
  };
6636
6877
  };
6637
6878
  };
@@ -6703,7 +6944,7 @@ export interface operations {
6703
6944
  };
6704
6945
  };
6705
6946
  };
6706
- listWhiteboards: {
6947
+ editWhiteboardImageRegion: {
6707
6948
  parameters: {
6708
6949
  query?: never;
6709
6950
  header?: never;
@@ -6713,7 +6954,16 @@ export interface operations {
6713
6954
  requestBody?: {
6714
6955
  content: {
6715
6956
  "application/json": {
6716
- projectId: string;
6957
+ /** @description The whiteboard document that holds the image element. */
6958
+ documentId: string;
6959
+ /** @description The id of the image element on the board to edit (from getWhiteboard includeElements=true). */
6960
+ elementId: string;
6961
+ /** @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. */
6962
+ maskBase64: string;
6963
+ /** @description What to put in the masked area, in plain language (e.g. 'replace the car with a red bicycle'). */
6964
+ prompt: string;
6965
+ /** @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. */
6966
+ strength?: number;
6717
6967
  };
6718
6968
  };
6719
6969
  };
@@ -6785,7 +7035,7 @@ export interface operations {
6785
7035
  };
6786
7036
  };
6787
7037
  };
6788
- getWhiteboard: {
7038
+ exportDeck: {
6789
7039
  parameters: {
6790
7040
  query?: never;
6791
7041
  header?: never;
@@ -6795,9 +7045,15 @@ export interface operations {
6795
7045
  requestBody?: {
6796
7046
  content: {
6797
7047
  "application/json": {
6798
- documentId: string;
6799
- /** @description When true, returns the full Excalidraw scene so it can be modified and written back. */
6800
- includeElements?: boolean;
7048
+ /** @description The id of an existing, finished ('ready') deck to export. */
7049
+ deckId: string;
7050
+ /**
7051
+ * @description Output format. 'pptx' (default) = editable PowerPoint; 'pdf' = vector PDF; 'png' = one base64 image per slide; 'html' = the deck's self-contained HTML.
7052
+ * @enum {string}
7053
+ */
7054
+ format?: "pptx" | "pdf" | "png" | "html";
7055
+ /** @description Optional brand kit id (reserved for future per-export theming; the deck is already branded, so this is usually unnecessary). */
7056
+ brandKitId?: string;
6801
7057
  };
6802
7058
  };
6803
7059
  };
@@ -6869,7 +7125,7 @@ export interface operations {
6869
7125
  };
6870
7126
  };
6871
7127
  };
6872
- updateWhiteboardScene: {
7128
+ generateIllustration: {
6873
7129
  parameters: {
6874
7130
  query?: never;
6875
7131
  header?: never;
@@ -6879,24 +7135,18 @@ export interface operations {
6879
7135
  requestBody?: {
6880
7136
  content: {
6881
7137
  "application/json": {
6882
- documentId: string;
6883
- /** @description Elements to write. For mode 'patch', each may be a partial { id, ...changedFields } merged into the matching element by id; full Excalidraw elements for 'replace'/'append' (or new ids in 'patch'). */
6884
- elements?: Record<string, never>[];
6885
- /**
6886
- * @description How to apply your `elements`. patch (DEFAULT — use this for ANY partial edit): merges each item into the element with the same id and leaves everything else untouched, like find-and-replace by id; new ids are added. append: only adds your items, changes nothing else. replace: OVERWRITES THE WHOLE CANVAS — every existing element you don't resend is DELETED — so use it ONLY to set an entire board at once. To change or rebuild just a SECTION, use patch (+ deleteIds to remove specific ids), NEVER replace. A replace that would drop any existing element is rejected unless confirmReplace:true.
6887
- * @enum {string}
6888
- */
6889
- mode?: "patch" | "append" | "replace";
6890
- /** @description Element ids to remove from the scene. */
6891
- deleteIds?: string[];
6892
- /** @description Optional Excalidraw appState fields to merge (e.g. viewBackgroundColor). */
6893
- appState?: Record<string, never>;
6894
- /** @description Optional Excalidraw BinaryFiles map (for embedded images), merged in. */
6895
- files?: Record<string, never>;
6896
- /** @description Optional optimistic-locking token from getWhiteboard. Only used for mode 'replace': if the board changed since you read it, the replace is rejected so you don't overwrite a collaborator's newer edits — re-read with getWhiteboard and retry. Not needed for patch/append, which automatically merge onto the latest scene. */
6897
- versionTimestamp?: number;
6898
- /** @description Safety acknowledgement for mode 'replace' ONLY. A replace that would DELETE ANY existing element not present in your `elements` is rejected unless this is true. Leave it unset and use mode:'patch' to edit part of a board (it merges by id and keeps the rest); set true only when you truly intend to overwrite the WHOLE scene. */
6899
- confirmReplace?: boolean;
7138
+ /** @description Plain-language description of the illustration to generate (e.g. 'a friendly robot assistant helping a small team'). */
7139
+ prompt: string;
7140
+ /** @description Optional output width in px (rounded to a multiple of 64, 512 to 2048). Default 1024. */
7141
+ width?: number;
7142
+ /** @description Optional output height in px (rounded to a multiple of 64, 512 to 2048). Default 1024. */
7143
+ height?: number;
7144
+ /** @description Optional extra style hint appended to the prompt (e.g. 'isometric', 'soft gradients, pastel'). */
7145
+ style?: string;
7146
+ /** @description Optional brand kit id to colour-condition the illustration. Defaults to the organisation's effective brand. */
7147
+ brandKitId?: string;
7148
+ /** @description Optional document this illustration is for (used only for usage logging and provenance). */
7149
+ documentId?: string;
6900
7150
  };
6901
7151
  };
6902
7152
  };
@@ -6968,7 +7218,7 @@ export interface operations {
6968
7218
  };
6969
7219
  };
6970
7220
  };
6971
- addWhiteboardElements: {
7221
+ designDeck: {
6972
7222
  parameters: {
6973
7223
  query?: never;
6974
7224
  header?: never;
@@ -6978,50 +7228,709 @@ export interface operations {
6978
7228
  requestBody?: {
6979
7229
  content: {
6980
7230
  "application/json": {
6981
- documentId: string;
6982
- /** @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). */
6983
- shapes: ({
6984
- /**
6985
- * @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.
6986
- * @enum {string}
6987
- */
6988
- type: "rectangle" | "ellipse" | "diamond" | "sticky" | "text" | "arrow" | "line" | "freedraw" | "doodle" | "frame" | "image" | "stencil";
6989
- /** @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. */
6990
- stencil?: string;
6991
- /** @description For type:'stencil' exact stencil key from listWhiteboardStencils (takes precedence over `stencil`). */
6992
- stencilKey?: string;
6993
- /** @description For type:'stencil' optional pack to disambiguate a fuzzy `stencil` match (e.g. 'Flowchart', 'BPMN', 'UML & ER', 'Scrum Board'). */
6994
- pack?: string;
6995
- /** @description For type:'image' — a software-architecture icon path from listArchitectureIcons (e.g. 'dev/docker.svg'). */
6996
- iconPath?: string;
6997
- /** @description For type:'image' — any other public image URL (use iconPath for curated architecture icons). */
6998
- imageUrl?: string;
6999
- /** @description For type:'doodle' — a named hand-drawn accent rendered as a freehand stroke (no points needed): 'underline' | 'wave' | 'arrow' | 'check' | 'bolt' | 'scribble' | 'star' | 'sparkle' | 'circle' (a ring to encircle/emphasise) | 'heart'. Size it with x/y + width/height and colour it with strokeColor. Great for sketchy emphasis (underline a title, circle a stat, a star/sparkle accent). */
7000
- doodle?: string;
7001
- /** @description Optional id so connectors (arrows/lines) can reference this shape via start/end. On a type:'stencil' it adds a transparent bindable anchor covering the stencil, so an arrow's start/end {id} connects to the whole stencil as a unit. */
7002
- id?: string;
7003
- /** @description Join an existing group. Pass a placed stencil's `groupId` (returned in the placement result) on a type:'text' or shape spec to FILL that frame as part of the same unit — the text then moves, duplicates and renders together with the frame (e.g. a title in a UML class box's top band, members in its body). */
7004
- groupId?: string;
7005
- /** @description Top-left x on the canvas. OMIT both x and y to auto-place this element in clear empty space below the board's existing content. Strongly preferred when adding a note/shape to a board that already has content: a guessed coordinate usually lands ON TOP of existing shapes (the 'added a sticky but can't see it' bug). Set x/y only for deliberate layout among shapes you add in this same call. */
7006
- x?: number;
7007
- /** @description Top-left y on the canvas. Omit together with x to auto-place (see x). */
7008
- y?: number;
7009
- /** @description Shape width; for type:'stencil' it scales the whole stencil to fit this width. */
7010
- width?: number;
7011
- /** @description Shape height; for type:'stencil' it scales the whole stencil to fit this height. */
7012
- height?: number;
7013
- /** @description For type:'stencil' — uniform scale factor for the whole stencil (alternative to width/height). */
7014
- scale?: number;
7015
- /** @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). */
7016
- text?: string;
7017
- /** @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. */
7018
- fitText?: boolean;
7231
+ /** @description The deck to build, in plain language (topic, audience, and what it should cover). */
7232
+ goal: string;
7233
+ /** @description The project to create the deck in. Required when no deckId is given (a deck must live in a project). */
7234
+ projectId: string;
7235
+ /** @description Optional deck title. If omitted, a clear title is derived from the goal. */
7236
+ title?: string;
7237
+ /** @description Optional. An existing deck to rebuild. If omitted, a new deck is created in projectId. */
7238
+ deckId?: string;
7239
+ /** @description Optional brand kit id (from listBrandKits) to theme the deck. If omitted, the organisation's effective brand is used. Create one from a logo or a .pptx/.docx via createBrandKit. */
7240
+ brandKitId?: string;
7241
+ /** @description Optional target number of slides (the composer adjusts to fit the story). Typical 6 to 12. */
7242
+ slideCount?: number;
7243
+ /** @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 plus balance. */
7244
+ confirm?: boolean;
7245
+ };
7246
+ };
7247
+ };
7248
+ responses: {
7249
+ /** @description Tool result (shape varies per tool refer to the tool's docs for the exact return value). */
7250
+ 200: {
7251
+ headers: {
7252
+ [name: string]: unknown;
7253
+ };
7254
+ content: {
7255
+ "application/json": {
7256
+ [key: string]: unknown;
7257
+ };
7258
+ };
7259
+ };
7260
+ /** @description Validation error. */
7261
+ 400: {
7262
+ headers: {
7263
+ [name: string]: unknown;
7264
+ };
7265
+ content: {
7266
+ "application/json": components["schemas"]["ErrorResponse"];
7267
+ };
7268
+ };
7269
+ /** @description Missing or invalid credentials. */
7270
+ 401: {
7271
+ headers: {
7272
+ [name: string]: unknown;
7273
+ };
7274
+ content: {
7275
+ "application/json": components["schemas"]["ErrorResponse"];
7276
+ };
7277
+ };
7278
+ /** @description Authenticated but lacking the required permission or feature flag. */
7279
+ 403: {
7280
+ headers: {
7281
+ [name: string]: unknown;
7282
+ };
7283
+ content: {
7284
+ "application/json": components["schemas"]["ErrorResponse"];
7285
+ };
7286
+ };
7287
+ /** @description Resource not found. */
7288
+ 404: {
7289
+ headers: {
7290
+ [name: string]: unknown;
7291
+ };
7292
+ content: {
7293
+ "application/json": components["schemas"]["ErrorResponse"];
7294
+ };
7295
+ };
7296
+ /** @description Body did not match the tool's input schema. */
7297
+ 422: {
7298
+ headers: {
7299
+ [name: string]: unknown;
7300
+ };
7301
+ content: {
7302
+ "application/json": components["schemas"]["ErrorResponse"];
7303
+ };
7304
+ };
7305
+ /** @description Server error. */
7306
+ 500: {
7307
+ headers: {
7308
+ [name: string]: unknown;
7309
+ };
7310
+ content: {
7311
+ "application/json": components["schemas"]["ErrorResponse"];
7312
+ };
7313
+ };
7314
+ };
7315
+ };
7316
+ editDeck: {
7317
+ parameters: {
7318
+ query?: never;
7319
+ header?: never;
7320
+ path?: never;
7321
+ cookie?: never;
7322
+ };
7323
+ requestBody?: {
7324
+ content: {
7325
+ "application/json": {
7326
+ /** @description The id of the finished deck to edit. */
7327
+ deckId: string;
7328
+ /** @description The change to make, in plain language (e.g. 'change the title slide subhead to ...', 'make slide 3 a bar chart of these numbers ...'). */
7329
+ instruction: string;
7330
+ /** @description Optional 1-based slide number to focus the edit on. Omit to let the builder find the right slide(s) from the instruction. */
7331
+ slideIndex?: number;
7332
+ /** @description Set true ONLY after the user has approved the 10-credit cost. Leave unset/false on the first call to receive the cost quote plus balance. */
7333
+ confirm?: boolean;
7334
+ };
7335
+ };
7336
+ };
7337
+ responses: {
7338
+ /** @description Tool result (shape varies per tool — refer to the tool's docs for the exact return value). */
7339
+ 200: {
7340
+ headers: {
7341
+ [name: string]: unknown;
7342
+ };
7343
+ content: {
7344
+ "application/json": {
7345
+ [key: string]: unknown;
7346
+ };
7347
+ };
7348
+ };
7349
+ /** @description Validation error. */
7350
+ 400: {
7351
+ headers: {
7352
+ [name: string]: unknown;
7353
+ };
7354
+ content: {
7355
+ "application/json": components["schemas"]["ErrorResponse"];
7356
+ };
7357
+ };
7358
+ /** @description Missing or invalid credentials. */
7359
+ 401: {
7360
+ headers: {
7361
+ [name: string]: unknown;
7362
+ };
7363
+ content: {
7364
+ "application/json": components["schemas"]["ErrorResponse"];
7365
+ };
7366
+ };
7367
+ /** @description Authenticated but lacking the required permission or feature flag. */
7368
+ 403: {
7369
+ headers: {
7370
+ [name: string]: unknown;
7371
+ };
7372
+ content: {
7373
+ "application/json": components["schemas"]["ErrorResponse"];
7374
+ };
7375
+ };
7376
+ /** @description Resource not found. */
7377
+ 404: {
7378
+ headers: {
7379
+ [name: string]: unknown;
7380
+ };
7381
+ content: {
7382
+ "application/json": components["schemas"]["ErrorResponse"];
7383
+ };
7384
+ };
7385
+ /** @description Body did not match the tool's input schema. */
7386
+ 422: {
7387
+ headers: {
7388
+ [name: string]: unknown;
7389
+ };
7390
+ content: {
7391
+ "application/json": components["schemas"]["ErrorResponse"];
7392
+ };
7393
+ };
7394
+ /** @description Server error. */
7395
+ 500: {
7396
+ headers: {
7397
+ [name: string]: unknown;
7398
+ };
7399
+ content: {
7400
+ "application/json": components["schemas"]["ErrorResponse"];
7401
+ };
7402
+ };
7403
+ };
7404
+ };
7405
+ insertDeckIntoWhiteboard: {
7406
+ parameters: {
7407
+ query?: never;
7408
+ header?: never;
7409
+ path?: never;
7410
+ cookie?: never;
7411
+ };
7412
+ requestBody?: {
7413
+ content: {
7414
+ "application/json": {
7415
+ /** @description The id of an existing, finished ('ready') deck whose slides to place on a whiteboard. */
7416
+ deckId: string;
7417
+ /** @description Optional existing whiteboard to place the slides on. When omitted, a new whiteboard is created in projectId. */
7418
+ documentId?: string;
7419
+ /** @description Optional project to create the new whiteboard in when documentId is omitted. Defaults to the deck's own project. */
7420
+ projectId?: string;
7421
+ };
7422
+ };
7423
+ };
7424
+ responses: {
7425
+ /** @description Tool result (shape varies per tool — refer to the tool's docs for the exact return value). */
7426
+ 200: {
7427
+ headers: {
7428
+ [name: string]: unknown;
7429
+ };
7430
+ content: {
7431
+ "application/json": {
7432
+ [key: string]: unknown;
7433
+ };
7434
+ };
7435
+ };
7436
+ /** @description Validation error. */
7437
+ 400: {
7438
+ headers: {
7439
+ [name: string]: unknown;
7440
+ };
7441
+ content: {
7442
+ "application/json": components["schemas"]["ErrorResponse"];
7443
+ };
7444
+ };
7445
+ /** @description Missing or invalid credentials. */
7446
+ 401: {
7447
+ headers: {
7448
+ [name: string]: unknown;
7449
+ };
7450
+ content: {
7451
+ "application/json": components["schemas"]["ErrorResponse"];
7452
+ };
7453
+ };
7454
+ /** @description Authenticated but lacking the required permission or feature flag. */
7455
+ 403: {
7456
+ headers: {
7457
+ [name: string]: unknown;
7458
+ };
7459
+ content: {
7460
+ "application/json": components["schemas"]["ErrorResponse"];
7461
+ };
7462
+ };
7463
+ /** @description Resource not found. */
7464
+ 404: {
7465
+ headers: {
7466
+ [name: string]: unknown;
7467
+ };
7468
+ content: {
7469
+ "application/json": components["schemas"]["ErrorResponse"];
7470
+ };
7471
+ };
7472
+ /** @description Body did not match the tool's input schema. */
7473
+ 422: {
7474
+ headers: {
7475
+ [name: string]: unknown;
7476
+ };
7477
+ content: {
7478
+ "application/json": components["schemas"]["ErrorResponse"];
7479
+ };
7480
+ };
7481
+ /** @description Server error. */
7482
+ 500: {
7483
+ headers: {
7484
+ [name: string]: unknown;
7485
+ };
7486
+ content: {
7487
+ "application/json": components["schemas"]["ErrorResponse"];
7488
+ };
7489
+ };
7490
+ };
7491
+ };
7492
+ createWhiteboard: {
7493
+ parameters: {
7494
+ query?: never;
7495
+ header?: never;
7496
+ path?: never;
7497
+ cookie?: never;
7498
+ };
7499
+ requestBody?: {
7500
+ content: {
7501
+ "application/json": {
7502
+ projectId: string;
7503
+ /** @description REQUIRED. A clear, descriptive board name (e.g. 'Q3 GTM plan'). Programmatic boards must be titled — blank/'Untitled' titles are rejected. */
7504
+ title: string;
7505
+ /** @description Optional folder to file the whiteboard under. */
7506
+ folderId?: string;
7507
+ };
7508
+ };
7509
+ };
7510
+ responses: {
7511
+ /** @description Tool result (shape varies per tool — refer to the tool's docs for the exact return value). */
7512
+ 200: {
7513
+ headers: {
7514
+ [name: string]: unknown;
7515
+ };
7516
+ content: {
7517
+ "application/json": {
7518
+ [key: string]: unknown;
7519
+ };
7520
+ };
7521
+ };
7522
+ /** @description Validation error. */
7523
+ 400: {
7524
+ headers: {
7525
+ [name: string]: unknown;
7526
+ };
7527
+ content: {
7528
+ "application/json": components["schemas"]["ErrorResponse"];
7529
+ };
7530
+ };
7531
+ /** @description Missing or invalid credentials. */
7532
+ 401: {
7533
+ headers: {
7534
+ [name: string]: unknown;
7535
+ };
7536
+ content: {
7537
+ "application/json": components["schemas"]["ErrorResponse"];
7538
+ };
7539
+ };
7540
+ /** @description Authenticated but lacking the required permission or feature flag. */
7541
+ 403: {
7542
+ headers: {
7543
+ [name: string]: unknown;
7544
+ };
7545
+ content: {
7546
+ "application/json": components["schemas"]["ErrorResponse"];
7547
+ };
7548
+ };
7549
+ /** @description Resource not found. */
7550
+ 404: {
7551
+ headers: {
7552
+ [name: string]: unknown;
7553
+ };
7554
+ content: {
7555
+ "application/json": components["schemas"]["ErrorResponse"];
7556
+ };
7557
+ };
7558
+ /** @description Body did not match the tool's input schema. */
7559
+ 422: {
7560
+ headers: {
7561
+ [name: string]: unknown;
7562
+ };
7563
+ content: {
7564
+ "application/json": components["schemas"]["ErrorResponse"];
7565
+ };
7566
+ };
7567
+ /** @description Server error. */
7568
+ 500: {
7569
+ headers: {
7570
+ [name: string]: unknown;
7571
+ };
7572
+ content: {
7573
+ "application/json": components["schemas"]["ErrorResponse"];
7574
+ };
7575
+ };
7576
+ };
7577
+ };
7578
+ listWhiteboards: {
7579
+ parameters: {
7580
+ query?: never;
7581
+ header?: never;
7582
+ path?: never;
7583
+ cookie?: never;
7584
+ };
7585
+ requestBody?: {
7586
+ content: {
7587
+ "application/json": {
7588
+ projectId: string;
7589
+ };
7590
+ };
7591
+ };
7592
+ responses: {
7593
+ /** @description Tool result (shape varies per tool — refer to the tool's docs for the exact return value). */
7594
+ 200: {
7595
+ headers: {
7596
+ [name: string]: unknown;
7597
+ };
7598
+ content: {
7599
+ "application/json": {
7600
+ [key: string]: unknown;
7601
+ };
7602
+ };
7603
+ };
7604
+ /** @description Validation error. */
7605
+ 400: {
7606
+ headers: {
7607
+ [name: string]: unknown;
7608
+ };
7609
+ content: {
7610
+ "application/json": components["schemas"]["ErrorResponse"];
7611
+ };
7612
+ };
7613
+ /** @description Missing or invalid credentials. */
7614
+ 401: {
7615
+ headers: {
7616
+ [name: string]: unknown;
7617
+ };
7618
+ content: {
7619
+ "application/json": components["schemas"]["ErrorResponse"];
7620
+ };
7621
+ };
7622
+ /** @description Authenticated but lacking the required permission or feature flag. */
7623
+ 403: {
7624
+ headers: {
7625
+ [name: string]: unknown;
7626
+ };
7627
+ content: {
7628
+ "application/json": components["schemas"]["ErrorResponse"];
7629
+ };
7630
+ };
7631
+ /** @description Resource not found. */
7632
+ 404: {
7633
+ headers: {
7634
+ [name: string]: unknown;
7635
+ };
7636
+ content: {
7637
+ "application/json": components["schemas"]["ErrorResponse"];
7638
+ };
7639
+ };
7640
+ /** @description Body did not match the tool's input schema. */
7641
+ 422: {
7642
+ headers: {
7643
+ [name: string]: unknown;
7644
+ };
7645
+ content: {
7646
+ "application/json": components["schemas"]["ErrorResponse"];
7647
+ };
7648
+ };
7649
+ /** @description Server error. */
7650
+ 500: {
7651
+ headers: {
7652
+ [name: string]: unknown;
7653
+ };
7654
+ content: {
7655
+ "application/json": components["schemas"]["ErrorResponse"];
7656
+ };
7657
+ };
7658
+ };
7659
+ };
7660
+ getWhiteboard: {
7661
+ parameters: {
7662
+ query?: never;
7663
+ header?: never;
7664
+ path?: never;
7665
+ cookie?: never;
7666
+ };
7667
+ requestBody?: {
7668
+ content: {
7669
+ "application/json": {
7670
+ documentId: string;
7671
+ /** @description When true, returns the full Excalidraw scene so it can be modified and written back. */
7672
+ includeElements?: boolean;
7673
+ };
7674
+ };
7675
+ };
7676
+ responses: {
7677
+ /** @description Tool result (shape varies per tool — refer to the tool's docs for the exact return value). */
7678
+ 200: {
7679
+ headers: {
7680
+ [name: string]: unknown;
7681
+ };
7682
+ content: {
7683
+ "application/json": {
7684
+ [key: string]: unknown;
7685
+ };
7686
+ };
7687
+ };
7688
+ /** @description Validation error. */
7689
+ 400: {
7690
+ headers: {
7691
+ [name: string]: unknown;
7692
+ };
7693
+ content: {
7694
+ "application/json": components["schemas"]["ErrorResponse"];
7695
+ };
7696
+ };
7697
+ /** @description Missing or invalid credentials. */
7698
+ 401: {
7699
+ headers: {
7700
+ [name: string]: unknown;
7701
+ };
7702
+ content: {
7703
+ "application/json": components["schemas"]["ErrorResponse"];
7704
+ };
7705
+ };
7706
+ /** @description Authenticated but lacking the required permission or feature flag. */
7707
+ 403: {
7708
+ headers: {
7709
+ [name: string]: unknown;
7710
+ };
7711
+ content: {
7712
+ "application/json": components["schemas"]["ErrorResponse"];
7713
+ };
7714
+ };
7715
+ /** @description Resource not found. */
7716
+ 404: {
7717
+ headers: {
7718
+ [name: string]: unknown;
7719
+ };
7720
+ content: {
7721
+ "application/json": components["schemas"]["ErrorResponse"];
7722
+ };
7723
+ };
7724
+ /** @description Body did not match the tool's input schema. */
7725
+ 422: {
7726
+ headers: {
7727
+ [name: string]: unknown;
7728
+ };
7729
+ content: {
7730
+ "application/json": components["schemas"]["ErrorResponse"];
7731
+ };
7732
+ };
7733
+ /** @description Server error. */
7734
+ 500: {
7735
+ headers: {
7736
+ [name: string]: unknown;
7737
+ };
7738
+ content: {
7739
+ "application/json": components["schemas"]["ErrorResponse"];
7740
+ };
7741
+ };
7742
+ };
7743
+ };
7744
+ updateWhiteboardScene: {
7745
+ parameters: {
7746
+ query?: never;
7747
+ header?: never;
7748
+ path?: never;
7749
+ cookie?: never;
7750
+ };
7751
+ requestBody?: {
7752
+ content: {
7753
+ "application/json": {
7754
+ documentId: string;
7755
+ /** @description Elements to write. For mode 'patch', each may be a partial { id, ...changedFields } merged into the matching element by id; full Excalidraw elements for 'replace'/'append' (or new ids in 'patch'). */
7756
+ elements?: Record<string, never>[];
7757
+ /**
7758
+ * @description How to apply your `elements`. patch (DEFAULT — use this for ANY partial edit): merges each item into the element with the same id and leaves everything else untouched, like find-and-replace by id; new ids are added. append: only adds your items, changes nothing else. replace: OVERWRITES THE WHOLE CANVAS — every existing element you don't resend is DELETED — so use it ONLY to set an entire board at once. To change or rebuild just a SECTION, use patch (+ deleteIds to remove specific ids), NEVER replace. A replace that would drop any existing element is rejected unless confirmReplace:true.
7759
+ * @enum {string}
7760
+ */
7761
+ mode?: "patch" | "append" | "replace";
7762
+ /** @description Element ids to remove from the scene. */
7763
+ deleteIds?: string[];
7764
+ /** @description Optional Excalidraw appState fields to merge (e.g. viewBackgroundColor). */
7765
+ appState?: Record<string, never>;
7766
+ /** @description Optional Excalidraw BinaryFiles map (for embedded images), merged in. */
7767
+ files?: Record<string, never>;
7768
+ /** @description Optional optimistic-locking token from getWhiteboard. Only used for mode 'replace': if the board changed since you read it, the replace is rejected so you don't overwrite a collaborator's newer edits — re-read with getWhiteboard and retry. Not needed for patch/append, which automatically merge onto the latest scene. */
7769
+ versionTimestamp?: number;
7770
+ /** @description Safety acknowledgement for mode 'replace' ONLY. A replace that would DELETE ANY existing element not present in your `elements` is rejected unless this is true. Leave it unset and use mode:'patch' to edit part of a board (it merges by id and keeps the rest); set true only when you truly intend to overwrite the WHOLE scene. */
7771
+ confirmReplace?: boolean;
7772
+ };
7773
+ };
7774
+ };
7775
+ responses: {
7776
+ /** @description Tool result (shape varies per tool — refer to the tool's docs for the exact return value). */
7777
+ 200: {
7778
+ headers: {
7779
+ [name: string]: unknown;
7780
+ };
7781
+ content: {
7782
+ "application/json": {
7783
+ [key: string]: unknown;
7784
+ };
7785
+ };
7786
+ };
7787
+ /** @description Validation error. */
7788
+ 400: {
7789
+ headers: {
7790
+ [name: string]: unknown;
7791
+ };
7792
+ content: {
7793
+ "application/json": components["schemas"]["ErrorResponse"];
7794
+ };
7795
+ };
7796
+ /** @description Missing or invalid credentials. */
7797
+ 401: {
7798
+ headers: {
7799
+ [name: string]: unknown;
7800
+ };
7801
+ content: {
7802
+ "application/json": components["schemas"]["ErrorResponse"];
7803
+ };
7804
+ };
7805
+ /** @description Authenticated but lacking the required permission or feature flag. */
7806
+ 403: {
7807
+ headers: {
7808
+ [name: string]: unknown;
7809
+ };
7810
+ content: {
7811
+ "application/json": components["schemas"]["ErrorResponse"];
7812
+ };
7813
+ };
7814
+ /** @description Resource not found. */
7815
+ 404: {
7816
+ headers: {
7817
+ [name: string]: unknown;
7818
+ };
7819
+ content: {
7820
+ "application/json": components["schemas"]["ErrorResponse"];
7821
+ };
7822
+ };
7823
+ /** @description Body did not match the tool's input schema. */
7824
+ 422: {
7825
+ headers: {
7826
+ [name: string]: unknown;
7827
+ };
7828
+ content: {
7829
+ "application/json": components["schemas"]["ErrorResponse"];
7830
+ };
7831
+ };
7832
+ /** @description Server error. */
7833
+ 500: {
7834
+ headers: {
7835
+ [name: string]: unknown;
7836
+ };
7837
+ content: {
7838
+ "application/json": components["schemas"]["ErrorResponse"];
7839
+ };
7840
+ };
7841
+ };
7842
+ };
7843
+ addWhiteboardElements: {
7844
+ parameters: {
7845
+ query?: never;
7846
+ header?: never;
7847
+ path?: never;
7848
+ cookie?: never;
7849
+ };
7850
+ requestBody?: {
7851
+ content: {
7852
+ "application/json": {
7853
+ documentId: string;
7854
+ /** @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). */
7855
+ shapes: ({
7856
+ /**
7857
+ * @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.
7858
+ * @enum {string}
7859
+ */
7860
+ type?: "rectangle" | "ellipse" | "diamond" | "sticky" | "text" | "arrow" | "line" | "freedraw" | "doodle" | "frame" | "image" | "stencil" | "chart" | "table";
7861
+ /** @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. */
7862
+ stencil?: string;
7863
+ /** @description For type:'stencil' — exact stencil key from listWhiteboardStencils (takes precedence over `stencil`). */
7864
+ stencilKey?: string;
7865
+ /** @description For type:'stencil' — optional pack to disambiguate a fuzzy `stencil` match (e.g. 'Flowchart', 'BPMN', 'UML & ER', 'Scrum Board'). */
7866
+ pack?: string;
7867
+ /** @description For type:'image' — a software-architecture icon path from listArchitectureIcons (e.g. 'dev/docker.svg'). */
7868
+ iconPath?: string;
7869
+ /** @description For type:'image' — any other public image URL (use iconPath for curated architecture icons). */
7870
+ imageUrl?: string;
7871
+ /** @description For type:'doodle' — a named hand-drawn accent rendered as a freehand stroke (no points needed): 'underline' | 'wave' | 'arrow' | 'check' | 'bolt' | 'scribble' | 'star' | 'sparkle' | 'circle' (a ring to encircle/emphasise) | 'heart'. Size it with x/y + width/height and colour it with strokeColor. Great for sketchy emphasis (underline a title, circle a stat, a star/sparkle accent). */
7872
+ doodle?: string;
7873
+ /** @description Optional id so connectors (arrows/lines) can reference this shape via start/end. On a type:'stencil' it adds a transparent bindable anchor covering the stencil, so an arrow's start/end {id} connects to the whole stencil as a unit. */
7874
+ id?: string;
7875
+ /** @description Join an existing group. Pass a placed stencil's `groupId` (returned in the placement result) on a type:'text' or shape spec to FILL that frame as part of the same unit — the text then moves, duplicates and renders together with the frame (e.g. a title in a UML class box's top band, members in its body). */
7876
+ groupId?: string;
7877
+ /** @description Top-left x on the canvas. OMIT both x and y to auto-place this element in clear empty space below the board's existing content. Strongly preferred when adding a note/shape to a board that already has content: a guessed coordinate usually lands ON TOP of existing shapes (the 'added a sticky but can't see it' bug). Set x/y only for deliberate layout among shapes you add in this same call. */
7878
+ x?: number;
7879
+ /** @description Top-left y on the canvas. Omit together with x to auto-place (see x). */
7880
+ y?: number;
7881
+ /** @description Shape width; for type:'stencil' it scales the whole stencil to fit this width. */
7882
+ width?: number;
7883
+ /** @description Shape height; for type:'stencil' it scales the whole stencil to fit this height. */
7884
+ height?: number;
7885
+ /** @description For type:'stencil' — uniform scale factor for the whole stencil (alternative to width/height). */
7886
+ scale?: number;
7887
+ /** @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. */
7888
+ text?: string;
7889
+ /** @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. */
7890
+ fitText?: boolean;
7891
+ /** @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. */
7892
+ fontSize?: number;
7893
+ /** @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. */
7894
+ fontFamily?: string;
7895
+ /** @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. */
7896
+ strokeColor?: string;
7897
+ /**
7898
+ * @description Horizontal alignment of the text within its box — the equivalent of the toolbar's align buttons. Bound labels default to 'center'.
7899
+ * @enum {string}
7900
+ */
7901
+ textAlign?: "left" | "center" | "right";
7902
+ /**
7903
+ * @description Vertical alignment of a bound label inside its shape (toolbar parity). Defaults to 'middle' (centred).
7904
+ * @enum {string}
7905
+ */
7906
+ verticalAlign?: "top" | "middle" | "bottom";
7019
7907
  /** @description Fill colour: a name ('blue'/'green'/'yellow'/'pink'/'violet'/'orange'/'teal'/…) or a hex value. */
7020
7908
  backgroundColor?: string;
7021
7909
  /** @description For arrows/lines: { id } of the source shape (auto-clips to the edge + auto-routes around shapes in between). */
7022
7910
  start?: Record<string, never>;
7023
7911
  /** @description For arrows/lines: { id } of the target shape. */
7024
7912
  end?: Record<string, never>;
7913
+ /** @description For type:'chart' — the chart's title, drawn at the top of the chart. */
7914
+ title?: string;
7915
+ /**
7916
+ * @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.
7917
+ * @enum {string}
7918
+ */
7919
+ chartType?: "column" | "bar" | "line" | "area" | "pie" | "donut" | "scatter" | "sparkline" | "combo" | "stackedColumn" | "groupedColumn" | "radar" | "gauge";
7920
+ /** @description For type:'chart' — x-axis category labels, e.g. ['Jan','Feb','Mar','Apr']. */
7921
+ categories?: string[];
7922
+ /** @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. */
7923
+ series?: {
7924
+ [key: string]: unknown;
7925
+ }[];
7926
+ /** @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' }. */
7927
+ options?: {
7928
+ [key: string]: unknown;
7929
+ };
7930
+ /** @description For type:'table' — column headers: string[] (e.g. ['Task','Owner','Status']) or [{ header:string, width?:number, align?:'left'|'center'|'right' }]. */
7931
+ columns?: (string | Record<string, never>)[];
7932
+ /** @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']]. */
7933
+ rows?: (string | number)[][];
7025
7934
  } & {
7026
7935
  [key: string]: unknown;
7027
7936
  })[];
@@ -8081,8 +8990,8 @@ export interface operations {
8081
8990
  requestBody?: {
8082
8991
  content: {
8083
8992
  "application/json": {
8084
- /** @description Which catalogs to sync. Defaults to all three (tool, stencil, icon). */
8085
- types?: ("tool" | "stencil" | "icon")[];
8993
+ /** @description Which catalogs to sync. Defaults to all six (tool, stencil, icon, infographic_template, whiteboard_component, skill). */
8994
+ types?: ("tool" | "stencil" | "icon" | "infographic_template" | "whiteboard_component" | "skill")[];
8086
8995
  };
8087
8996
  };
8088
8997
  };
@@ -9263,8 +10172,12 @@ export interface operations {
9263
10172
  scanRunId?: string;
9264
10173
  /** @description Filter by framework (e.g. soc2, iso27001). */
9265
10174
  frameworkKey?: string;
9266
- /** @description Search title, friendly_id, problem_statement. */
10175
+ /** @description Grep across title, friendlyId and problem_statement. Substring by default; a regular expression when isRegex:true; case-insensitive unless caseSensitive:true. */
9267
10176
  query?: string;
10177
+ /** @description Treat query as a regular expression (grep -E), e.g. "ACME-\d+". Default false (literal substring). */
10178
+ isRegex?: boolean;
10179
+ /** @description Case-sensitive matching. Default false. */
10180
+ caseSensitive?: boolean;
9268
10181
  /** @description Sort field. Default: position. */
9269
10182
  sortField?: string;
9270
10183
  /** @description Sort ascending. Default: true. */
@@ -10625,14 +11538,18 @@ export interface operations {
10625
11538
  requestBody?: {
10626
11539
  content: {
10627
11540
  "application/json": {
10628
- /** @description Search query. */
11541
+ /** @description Search query — a name fragment or a friendly id. */
10629
11542
  query: string;
11543
+ /** @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. */
11544
+ types?: ("document" | "whiteboard" | "improvement" | "task" | "plan" | "compliance")[];
10630
11545
  /** @description Limit to a project. */
10631
11546
  projectId?: string;
10632
11547
  /** @description Limit to a workspace. */
10633
11548
  workspaceId?: string;
10634
- /** @description Max results (default 20, max 50). */
11549
+ /** @description Max results (default 20 semantic / 30 cross-artefact, max 50). */
10635
11550
  limit?: number;
11551
+ /** @description Pagination offset (cross-artefact mode). */
11552
+ offset?: number;
10636
11553
  };
10637
11554
  };
10638
11555
  };
@@ -10719,8 +11636,12 @@ export interface operations {
10719
11636
  status?: string;
10720
11637
  /** @description Filter: low, medium, high, critical. */
10721
11638
  priority?: string;
10722
- /** @description Search title, friendly_id, description. */
11639
+ /** @description Grep across title, friendlyId and description. Substring by default; a regular expression when isRegex:true; case-insensitive unless caseSensitive:true. */
10723
11640
  query?: string;
11641
+ /** @description Treat query as a regular expression (grep -E), e.g. "ACME-\d+". Default false (literal substring). */
11642
+ isRegex?: boolean;
11643
+ /** @description Case-sensitive matching. Default false. */
11644
+ caseSensitive?: boolean;
10724
11645
  /** @description Sort field. Default: created_at. */
10725
11646
  sortField?: string;
10726
11647
  /** @description Sort ascending. Default: false. */
@@ -12101,8 +13022,12 @@ export interface operations {
12101
13022
  priority?: string;
12102
13023
  /** @description Filter by phase. */
12103
13024
  phaseId?: string;
12104
- /** @description Search title and friendly_id. */
13025
+ /** @description Grep across title, friendlyId and description. Substring by default; a regular expression when isRegex:true; case-insensitive unless caseSensitive:true. */
12105
13026
  query?: string;
13027
+ /** @description Treat query as a regular expression (grep -E), e.g. "ACME-\d+". Default false (literal substring). */
13028
+ isRegex?: boolean;
13029
+ /** @description Case-sensitive matching. Default false. */
13030
+ caseSensitive?: boolean;
12106
13031
  /** @description Sort field. Default: position. */
12107
13032
  sortField?: string;
12108
13033
  /** @description Sort ascending. Default: true. */
@@ -19798,6 +20723,277 @@ export interface operations {
19798
20723
  };
19799
20724
  };
19800
20725
  };
20726
+ createBrandKit: {
20727
+ parameters: {
20728
+ query?: never;
20729
+ header?: never;
20730
+ path?: never;
20731
+ cookie?: never;
20732
+ };
20733
+ requestBody?: {
20734
+ content: {
20735
+ "application/json": {
20736
+ /** @description Org that owns the kit. */
20737
+ organizationId: string;
20738
+ /** @description Display name (e.g. the brand/company name). */
20739
+ name: string;
20740
+ /** @description Image URL of the logo to extract palette/fonts from (PNG/JPG/SVG). Omit if passing officeUrl or tokens. */
20741
+ logoUrl?: string;
20742
+ /** @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. */
20743
+ officeUrl?: string;
20744
+ /** @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. */
20745
+ tokens?: {
20746
+ [key: string]: unknown;
20747
+ };
20748
+ /** @description Optional extra guidance for the extractor (e.g. 'use the teal, not the grey'). */
20749
+ guidance?: string;
20750
+ /**
20751
+ * @description Optionally set the new kit as default at this scope.
20752
+ * @enum {string}
20753
+ */
20754
+ setDefaultScope?: "organization" | "workspace" | "project";
20755
+ /** @description Workspace/project id when setDefaultScope is workspace/project. */
20756
+ setDefaultScopeId?: string;
20757
+ };
20758
+ };
20759
+ };
20760
+ responses: {
20761
+ /** @description Tool result (shape varies per tool — refer to the tool's docs for the exact return value). */
20762
+ 200: {
20763
+ headers: {
20764
+ [name: string]: unknown;
20765
+ };
20766
+ content: {
20767
+ "application/json": {
20768
+ [key: string]: unknown;
20769
+ };
20770
+ };
20771
+ };
20772
+ /** @description Validation error. */
20773
+ 400: {
20774
+ headers: {
20775
+ [name: string]: unknown;
20776
+ };
20777
+ content: {
20778
+ "application/json": components["schemas"]["ErrorResponse"];
20779
+ };
20780
+ };
20781
+ /** @description Missing or invalid credentials. */
20782
+ 401: {
20783
+ headers: {
20784
+ [name: string]: unknown;
20785
+ };
20786
+ content: {
20787
+ "application/json": components["schemas"]["ErrorResponse"];
20788
+ };
20789
+ };
20790
+ /** @description Authenticated but lacking the required permission or feature flag. */
20791
+ 403: {
20792
+ headers: {
20793
+ [name: string]: unknown;
20794
+ };
20795
+ content: {
20796
+ "application/json": components["schemas"]["ErrorResponse"];
20797
+ };
20798
+ };
20799
+ /** @description Resource not found. */
20800
+ 404: {
20801
+ headers: {
20802
+ [name: string]: unknown;
20803
+ };
20804
+ content: {
20805
+ "application/json": components["schemas"]["ErrorResponse"];
20806
+ };
20807
+ };
20808
+ /** @description Body did not match the tool's input schema. */
20809
+ 422: {
20810
+ headers: {
20811
+ [name: string]: unknown;
20812
+ };
20813
+ content: {
20814
+ "application/json": components["schemas"]["ErrorResponse"];
20815
+ };
20816
+ };
20817
+ /** @description Server error. */
20818
+ 500: {
20819
+ headers: {
20820
+ [name: string]: unknown;
20821
+ };
20822
+ content: {
20823
+ "application/json": components["schemas"]["ErrorResponse"];
20824
+ };
20825
+ };
20826
+ };
20827
+ };
20828
+ listBrandKits: {
20829
+ parameters: {
20830
+ query?: never;
20831
+ header?: never;
20832
+ path?: never;
20833
+ cookie?: never;
20834
+ };
20835
+ requestBody?: {
20836
+ content: {
20837
+ "application/json": {
20838
+ organizationId: string;
20839
+ };
20840
+ };
20841
+ };
20842
+ responses: {
20843
+ /** @description Tool result (shape varies per tool — refer to the tool's docs for the exact return value). */
20844
+ 200: {
20845
+ headers: {
20846
+ [name: string]: unknown;
20847
+ };
20848
+ content: {
20849
+ "application/json": {
20850
+ [key: string]: unknown;
20851
+ };
20852
+ };
20853
+ };
20854
+ /** @description Validation error. */
20855
+ 400: {
20856
+ headers: {
20857
+ [name: string]: unknown;
20858
+ };
20859
+ content: {
20860
+ "application/json": components["schemas"]["ErrorResponse"];
20861
+ };
20862
+ };
20863
+ /** @description Missing or invalid credentials. */
20864
+ 401: {
20865
+ headers: {
20866
+ [name: string]: unknown;
20867
+ };
20868
+ content: {
20869
+ "application/json": components["schemas"]["ErrorResponse"];
20870
+ };
20871
+ };
20872
+ /** @description Authenticated but lacking the required permission or feature flag. */
20873
+ 403: {
20874
+ headers: {
20875
+ [name: string]: unknown;
20876
+ };
20877
+ content: {
20878
+ "application/json": components["schemas"]["ErrorResponse"];
20879
+ };
20880
+ };
20881
+ /** @description Resource not found. */
20882
+ 404: {
20883
+ headers: {
20884
+ [name: string]: unknown;
20885
+ };
20886
+ content: {
20887
+ "application/json": components["schemas"]["ErrorResponse"];
20888
+ };
20889
+ };
20890
+ /** @description Body did not match the tool's input schema. */
20891
+ 422: {
20892
+ headers: {
20893
+ [name: string]: unknown;
20894
+ };
20895
+ content: {
20896
+ "application/json": components["schemas"]["ErrorResponse"];
20897
+ };
20898
+ };
20899
+ /** @description Server error. */
20900
+ 500: {
20901
+ headers: {
20902
+ [name: string]: unknown;
20903
+ };
20904
+ content: {
20905
+ "application/json": components["schemas"]["ErrorResponse"];
20906
+ };
20907
+ };
20908
+ };
20909
+ };
20910
+ setDefaultBrandKit: {
20911
+ parameters: {
20912
+ query?: never;
20913
+ header?: never;
20914
+ path?: never;
20915
+ cookie?: never;
20916
+ };
20917
+ requestBody?: {
20918
+ content: {
20919
+ "application/json": {
20920
+ /** @enum {string} */
20921
+ scope: "organization" | "workspace" | "project";
20922
+ /** @description The org/workspace/project id for the chosen scope. */
20923
+ scopeId: string;
20924
+ /** @description Brand kit to make default, or null to clear. */
20925
+ brandKitId?: string | null;
20926
+ };
20927
+ };
20928
+ };
20929
+ responses: {
20930
+ /** @description Tool result (shape varies per tool — refer to the tool's docs for the exact return value). */
20931
+ 200: {
20932
+ headers: {
20933
+ [name: string]: unknown;
20934
+ };
20935
+ content: {
20936
+ "application/json": {
20937
+ [key: string]: unknown;
20938
+ };
20939
+ };
20940
+ };
20941
+ /** @description Validation error. */
20942
+ 400: {
20943
+ headers: {
20944
+ [name: string]: unknown;
20945
+ };
20946
+ content: {
20947
+ "application/json": components["schemas"]["ErrorResponse"];
20948
+ };
20949
+ };
20950
+ /** @description Missing or invalid credentials. */
20951
+ 401: {
20952
+ headers: {
20953
+ [name: string]: unknown;
20954
+ };
20955
+ content: {
20956
+ "application/json": components["schemas"]["ErrorResponse"];
20957
+ };
20958
+ };
20959
+ /** @description Authenticated but lacking the required permission or feature flag. */
20960
+ 403: {
20961
+ headers: {
20962
+ [name: string]: unknown;
20963
+ };
20964
+ content: {
20965
+ "application/json": components["schemas"]["ErrorResponse"];
20966
+ };
20967
+ };
20968
+ /** @description Resource not found. */
20969
+ 404: {
20970
+ headers: {
20971
+ [name: string]: unknown;
20972
+ };
20973
+ content: {
20974
+ "application/json": components["schemas"]["ErrorResponse"];
20975
+ };
20976
+ };
20977
+ /** @description Body did not match the tool's input schema. */
20978
+ 422: {
20979
+ headers: {
20980
+ [name: string]: unknown;
20981
+ };
20982
+ content: {
20983
+ "application/json": components["schemas"]["ErrorResponse"];
20984
+ };
20985
+ };
20986
+ /** @description Server error. */
20987
+ 500: {
20988
+ headers: {
20989
+ [name: string]: unknown;
20990
+ };
20991
+ content: {
20992
+ "application/json": components["schemas"]["ErrorResponse"];
20993
+ };
20994
+ };
20995
+ };
20996
+ };
19801
20997
  updateOrgFeatureFlags: {
19802
20998
  parameters: {
19803
20999
  query?: never;
@@ -19910,11 +21106,16 @@ export interface operations {
19910
21106
  /** @description Defaults to 'default' */
19911
21107
  view_name?: string;
19912
21108
  is_default?: boolean;
19913
- visible_columns?: Record<string, never> | unknown[] | null;
19914
- column_widths?: Record<string, never> | unknown[] | null;
19915
- column_order?: Record<string, never> | unknown[] | null;
19916
- sort_config?: Record<string, never> | unknown[] | null;
19917
- filter_config?: Record<string, never> | unknown[] | null;
21109
+ /** @description Visible column ids (string[]) when an array. */
21110
+ visible_columns?: Record<string, never> | string[] | null;
21111
+ /** @description Column widths — a { colId: px } map, or a number[] when an array. */
21112
+ column_widths?: Record<string, never> | number[] | null;
21113
+ /** @description Ordered column ids (string[]) when an array. */
21114
+ column_order?: Record<string, never> | string[] | null;
21115
+ /** @description Sort rules — array of { id, desc } when an array. */
21116
+ sort_config?: Record<string, never> | Record<string, never>[] | null;
21117
+ /** @description Filter state — usually a { pageSize, tab, filters } object. */
21118
+ filter_config?: Record<string, never> | Record<string, never>[] | null;
19918
21119
  }[];
19919
21120
  };
19920
21121
  };