@stablebaseline/sdk 0.3.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@stablebaseline/sdk",
3
- "version": "0.3.1",
4
- "description": "TypeScript SDK for the Stable Baseline REST API. End-to-end agent-managed company brain — docs, diagrams, plans, and a self-learning Knowledge Graph. 180 tools across 18 categories.",
3
+ "version": "0.4.0",
4
+ "description": "TypeScript SDK for the Stable Baseline REST API. End-to-end agent-managed company brain — docs, diagrams, plans, and a self-learning Knowledge Graph. 184 tools across 19 categories.",
5
5
  "homepage": "https://stablebaseline.io",
6
6
  "repository": {
7
7
  "type": "git",
@@ -75,7 +75,7 @@ export interface paths {
75
75
  put?: never;
76
76
  /**
77
77
  * listArchitectureIcons
78
- * @description List curated software-architecture icons (AWS, Azure, GCP, Docker, Kubernetes, databases, message queues, etc.). Each result has an `iconPath` (e.g. 'dev/docker.svg'). TWO ways to use it: (1) on a WHITEBOARD, drop it via addWhiteboardElements({ type:'image', iconPath:'dev/docker.svg', x, y, width:96, height:96, text:'Docker' }); (2) in a D2 systems-architecture diagram, use the iconPath as-is in D2 code (e.g. icon: dev/docker.svg).
78
+ * @description SOFTWARE & CLOUD architecture icons ONLY (AWS, Azure, GCP, Docker, Kubernetes, databases, message queues, dev tools, etc.). This catalog has NO general/nature/science/people/business icons — so for any NON-technical topic (e.g. photosynthesis, biology, history, marketing), do NOT use this tool; instead put a relevant emoji directly in the element's label (e.g. ☀️ Sunlight, 💧 Water, 🌿 Leaf). It returns nothing for off-domain queries by design — never force an unrelated tech logo onto a non-tech concept. Each result has an `iconPath` (e.g. 'dev/docker.svg'). TWO ways to use it: (1) on a WHITEBOARD, drop it via addWhiteboardElements({ type:'image', iconPath:'dev/docker.svg', x, y, width:96, height:96, text:'Docker' }); (2) in a D2 systems-architecture diagram, use the iconPath as-is in D2 code (e.g. icon: dev/docker.svg).
79
79
  */
80
80
  post: operations["listArchitectureIcons"];
81
81
  delete?: never;
@@ -84,6 +84,26 @@ export interface paths {
84
84
  patch?: never;
85
85
  trace?: never;
86
86
  };
87
+ "/tools/searchInfographicTemplates": {
88
+ parameters: {
89
+ query?: never;
90
+ header?: never;
91
+ path?: never;
92
+ cookie?: never;
93
+ };
94
+ get?: never;
95
+ put?: never;
96
+ /**
97
+ * searchInfographicTemplates
98
+ * @description Semantic search over the 276 AntV Infographic templates — call this FIRST when building an `infographic` diagram so you pick the right structure for the content. Describe the intent (e.g. 'compare two options', 'show a process timeline', 'pyramid of priorities', 'org hierarchy', 'flow between systems', 'parts of a whole'); results are vector-ranked. Each result has `key` (use as line 1 `infographic <key>`), `name`, `family` (list|sequence|compare|relation|chart|hierarchy|quadrant), and `description`. The result's `usage` explains the family→data-field mapping for writing the DSL.
99
+ */
100
+ post: operations["searchInfographicTemplates"];
101
+ delete?: never;
102
+ options?: never;
103
+ head?: never;
104
+ patch?: never;
105
+ trace?: never;
106
+ };
87
107
  "/tools/getCdmdLanguageGuide": {
88
108
  parameters: {
89
109
  query?: never;
@@ -604,6 +624,26 @@ export interface paths {
604
624
  patch?: never;
605
625
  trace?: never;
606
626
  };
627
+ "/tools/designWhiteboard": {
628
+ parameters: {
629
+ query?: never;
630
+ header?: never;
631
+ path?: never;
632
+ cookie?: never;
633
+ };
634
+ get?: never;
635
+ put?: never;
636
+ /**
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.
639
+ */
640
+ post: operations["designWhiteboard"];
641
+ delete?: never;
642
+ options?: never;
643
+ head?: never;
644
+ patch?: never;
645
+ trace?: never;
646
+ };
607
647
  "/tools/createWhiteboard": {
608
648
  parameters: {
609
649
  query?: never;
@@ -695,7 +735,7 @@ export interface paths {
695
735
  put?: never;
696
736
  /**
697
737
  * addWhiteboardElements
698
- * @description Author shapes onto a whiteboard from high-level specs (you do NOT need the full Excalidraw element schema). Appends to the canvas. PREFER THE RICHEST FORM THAT FITS, not plain rectangles: for a sticky/post-it note use { type:'sticky', text, backgroundColor } (a first-class note with an auto-fitting bound label — there is NO sticky-note stencil; OMIT x/y and it is auto-placed in clear space below existing content, so it doesn't land on top of the current drawing); for kanban/scrum/story boards, flowcharts, UML/ER, BPMN, org charts, wireframes/mockups, charts or people use a LIBRARY STENCIL in ONE call — { type:'stencil', stencil:'<name e.g. decision>', x, y } fuzzy-matches by name with no prior listWhiteboardStencils call (pass width/height to SCALE the whole stencil and text to fill its single label); for cloud/software-architecture use ICONS — { type:'image', iconPath:'dev/docker.svg', x, y } (paths from listArchitectureIcons); reserve raw rectangles/ellipses for when no standard form fits. Expressive enough to reproduce real Excalidraw templates (sticky-note brainstorm grids, sketchy mind maps, flowcharts). Each spec: { type: 'rectangle'|'ellipse'|'diamond'|'sticky'|'text'|'arrow'|'line'|'frame'|'image'|'stencil', id?, x, y, width, height, text? (STRONGLY PREFER setting a shape's label via its own `text` — it becomes a centered, auto-WRAPPED bound label fitted to the shape; do NOT drop a separate type:'text' element on top of a shape as its label. Standalone type:'text' is for free-floating titles/notes and now also wraps to its width; Yes/No label on an arrow — emojis are fine, e.g. 'Risks ⚠️'), fontSize?, fontFamily? (1=hand-drawn default, 2=normal, 3=code), textAlign?, backgroundColor? (name 'blue'/'green'/'yellow'/'pink'/'violet'/'orange'/'teal'/… or hex), strokeColor?, fillStyle? ('solid'|'hachure'|'cross-hatch'), strokeStyle? ('solid'|'dashed'|'dotted' — use 'dashed' for grid/category borders), strokeWidth? (1 thin/2 bold/4 extra), roughness? (0 clean, 1 default, 2 very sketchy/hand-drawn — use 2 for organic mind maps), roundness? (number type or null for sharp), opacity?, name? (frame title), frameId? (put a shape inside a frame), start?:{id}, end?:{id} (connect arrows/lines to shapes by id — connectors AUTO-CLIP to the shape edges, never overrun to the centre, AUTO-ROUTE around any shapes in between so a decision's No/loop-back branch never cuts straight through the boxes between source and target, and bound text auto-wraps + centres), routing? ('straight' default | 'elbow' for clean right-angle flowchart/org-chart connectors | 'curved'), startArrowhead?/endArrowhead? (arrowheads are SOLID filled triangles by default — just OMIT them. Pass null for a plain mind-map spoke with no head. Do NOT pass 'arrow': that is Excalidraw's open 'V' and is auto-upgraded to a solid triangle anyway), points? ([[0,0],[dx,dy]] relative, only for manual geometry — almost never needed; binding by id is better), props? (escape hatch: any other Excalidraw field) }. ARCHITECTURE ICONS: to place a software-architecture icon (AWS/Azure/GCP/Docker/Kubernetes/databases/etc.), first call listArchitectureIcons to find one, then add a spec { type:'image', iconPath:'<relative_url e.g. dev/docker.svg>', x, y, width:96, height:96, text?:'<caption shown below>' } — the icon is stored as a URL reference (never base64). Use imageUrl instead of iconPath for any other public image. Combine icons with labelled boxes + elbow arrows for clean architecture diagrams. LIBRARY STENCILS: for hand-drawn, on-brand elements (scrum/kanban columns, flowchart symbols, UML/ER, BPMN, org-chart nodes, wireframe widgets, stick figures), FIRST call listWhiteboardStencils to find one, then add { type:'stencil', stencilKey:'<key from listWhiteboardStencils>', x, y } (or { type:'stencil', stencil:'<name e.g. decision>', pack?:'<pack>', x, y } to fuzzy-match by name). A stencil is a mini-whiteboard (a collection of elements) of kind 'symbol' or 'template' (listWhiteboardStencils returns the kind + its embedded `labels`). For a SYMBOL (one atomic labelled node — flowchart box, BPMN task, org node), pass id + text + width/height: the label auto-fits its single slot and arrows bind to it via start/end {id}. For a TEMPLATE (a multi-component layout — Alerts, Forms, Tables, Charts), place it WHOLE (no single text); the result returns its `children` (id + text + colour + position) so you retext, recolour, or DELETE specific parts by id via updateWhiteboardScene (cluster children by y to act on a whole row/variant). STRONGLY prefer stencils over plain rectangles for wireframes/mockups, kanban/scrum boards, UML/BPMN, org charts; for dense flowcharts, plain shapes with bound text + elbow arrows are equally reliable. (For a plain sticky/post-it note use type:'sticky', NOT a stencil — there is no sticky-note stencil.) FRAMES: a frame is a NON-DESTRUCTIVE, ANY-SIZE container. To enclose shapes that ALREADY exist, add ONE type:'frame' sized to cover them (Excalidraw auto-captures elements inside a frame's bounds) or set those shapes' frameId — never recreate or delete-and-redraw content just to frame it. If a frame doesn't fully cover its content, just RESIZE the frame (patch its width/height). Deleting a frame (deleteIds:[frameId]) leaves all its contents intact on the canvas — it only removes the frame border + title. PRESENTATION/SLIDES: when the user wants a presentation or slide deck, create type:'frame' slides sized width:1280,height:720 (16:9), laid out LEFT-TO-RIGHT at the same y (x: 0, then 1440, 2880, 4320, …), each with a `name` (the slide title). Put every slide's shapes/text/images INSIDE its frame by setting their frameId to that frame's id (give the frame an id and reference it). Slides play in order (left-to-right, then top-to-bottom) in the board's Present mode and export to PPTX, so one frame = one slide. FLOWCHART recipe: rectangles (roundness null for sharp process boxes), diamonds for decisions, arrows with routing:'elbow' and Yes/No as the arrow's text. Use type 'sticky' for sticky/post-it notes (a solid-fill note with an auto-fitting bound label — set text + backgroundColor); type 'line' with no arrowheads + roughness:2 for sketchy mind-map spokes. Give shapes ids and reference them from connectors. Connectors may also bind to shapes ALREADY on the board by their id (get them via getWhiteboard includeElements:true) — you do NOT need to resend existing shapes; the server reads the live scene to bind the arrow and route it around the other boxes. Great for brainstorms, mind maps, flowcharts, org charts, SWOT, retros. PROCESS: for any non-trivial board call getWhiteboardGuide FIRST to plan it; then after adding, ALWAYS call getWhiteboardImage to SEE the result and check layout, labels, spacing, overlaps and how shapes connect — if anything looks off, fix it with updateWhiteboardScene (patch by id) and render again, iterating until it looks right. RESULT: returns `added` (count), `placement` (bounding box {x,y,width,height} of what you just added) and `autoPlaced` (true when you omitted x/y so it was placed in clear space below existing content) — use placement/autoPlaced to tell the user WHERE the new elements landed, never invent a location.
738
+ * @description Author shapes onto a whiteboard from high-level specs (you do NOT need the full Excalidraw element schema). Appends to the canvas. PLACEMENT ON AN EXISTING BOARD (critical): NEVER guess x/y onto a board that already has content — guessed coordinates land ON TOP of existing shapes and create an unreadable pile. Either (a) OMIT x/y entirely and the server auto-places the new elements together in clear space BELOW the current content, or (b) FIRST call getWhiteboard({ includeElements:true }) to see where existing shapes already are and choose a genuinely EMPTY region. Pass explicit x/y only for a deliberate layout in space you have confirmed is empty. PREFER THE RICHEST FORM THAT FITS, not plain rectangles: for a sticky/post-it note use { type:'sticky', text, backgroundColor } (a first-class note with an auto-fitting bound label — there is NO sticky-note stencil; OMIT x/y and it is auto-placed in clear space below existing content, so it doesn't land on top of the current drawing); for kanban/scrum/story boards, flowcharts, UML/ER, BPMN, org charts, wireframes/mockups, charts or people use a LIBRARY STENCIL in ONE call — { type:'stencil', stencil:'<name e.g. decision>', x, y } fuzzy-matches by name with no prior listWhiteboardStencils call (pass width/height to SCALE the whole stencil and text to fill its single label); for cloud/software-architecture use ICONS — { type:'image', iconPath:'dev/docker.svg', x, y } (paths from listArchitectureIcons); reserve raw rectangles/ellipses for when no standard form fits. Expressive enough to reproduce real Excalidraw templates (sticky-note brainstorm grids, sketchy mind maps, flowcharts). Each spec: { type: 'rectangle'|'ellipse'|'diamond'|'sticky'|'text'|'arrow'|'line'|'freedraw'|'frame'|'image'|'stencil', id?, x, y, width, height, text? (STRONGLY PREFER setting a shape's label via its own `text` — it becomes a centered, auto-WRAPPED bound label fitted to the shape; do NOT drop a separate type:'text' element on top of a shape as its label. Standalone type:'text' is for free-floating titles/notes and now also wraps to its width; Yes/No label on an arrow — emojis are fine, e.g. 'Risks ⚠️'), fontSize?, fontFamily? (1=hand-drawn default, 2=normal, 3=code), textAlign?, backgroundColor? (name 'blue'/'green'/'yellow'/'pink'/'violet'/'orange'/'teal'/… or hex), strokeColor?, fillStyle? ('solid'|'hachure'|'cross-hatch'), strokeStyle? ('solid'|'dashed'|'dotted' — use 'dashed' for grid/category borders), strokeWidth? (1 thin/2 bold/4 extra), roughness? (0 clean, 1 default, 2 very sketchy/hand-drawn — use 2 for organic mind maps), roundness? (number type or null for sharp), opacity?, name? (frame title), frameId? (put a shape inside a frame), start?:{id}, end?:{id} (connect arrows/lines to shapes by id — connectors AUTO-CLIP to the shape edges, never overrun to the centre, AUTO-ROUTE around any shapes in between so a decision's No/loop-back branch never cuts straight through the boxes between source and target, and bound text auto-wraps + centres), routing? ('straight' default | 'elbow' for clean right-angle flowchart/org-chart connectors | 'curved'), startArrowhead?/endArrowhead? (arrowheads are SOLID filled triangles by default — just OMIT them. Pass null for a plain mind-map spoke with no head. Do NOT pass 'arrow': that is Excalidraw's open 'V' and is auto-upgraded to a solid triangle anyway), points? ([[0,0],[dx,dy]] relative, only for manual geometry — almost never needed; binding by id is better), props? (escape hatch: any other Excalidraw field) }. ARCHITECTURE ICONS: to place a software-architecture icon (AWS/Azure/GCP/Docker/Kubernetes/databases/etc.), first call listArchitectureIcons to find one, then add a spec { type:'image', iconPath:'<relative_url e.g. dev/docker.svg>', x, y, width:96, height:96, text?:'<caption shown below>' } — the icon is stored as a URL reference (never base64). Use imageUrl instead of iconPath for any other public image. Combine icons with labelled boxes + elbow arrows for clean architecture diagrams. LIBRARY STENCILS: for hand-drawn, on-brand elements (scrum/kanban columns, flowchart symbols, UML/ER, BPMN, org-chart nodes, wireframe widgets, stick figures), FIRST call listWhiteboardStencils to find one, then add { type:'stencil', stencilKey:'<key from listWhiteboardStencils>', x, y } (or { type:'stencil', stencil:'<name e.g. decision>', pack?:'<pack>', x, y } to fuzzy-match by name). A stencil is a mini-whiteboard (a collection of elements) of kind 'symbol' or 'template' (listWhiteboardStencils returns the kind + its embedded `labels`). For a SYMBOL (one atomic labelled node — flowchart box, BPMN task, org node), pass id + text + width/height: the label auto-fits its single slot and arrows bind to it via start/end {id}. For a TEMPLATE (a multi-component layout — Alerts, Forms, Tables, Charts), place it WHOLE (no single text); the result returns its `children` (id + text + colour + position) so you retext, recolour, or DELETE specific parts by id via updateWhiteboardScene (cluster children by y to act on a whole row/variant). STRONGLY prefer stencils over plain rectangles for wireframes/mockups, kanban/scrum boards, UML/BPMN, org charts; for dense flowcharts, plain shapes with bound text + elbow arrows are equally reliable. (For a plain sticky/post-it note use type:'sticky', NOT a stencil — there is no sticky-note stencil.) FRAMES: a frame is a NON-DESTRUCTIVE, ANY-SIZE container. To enclose shapes that ALREADY exist, add ONE type:'frame' sized to cover them (Excalidraw auto-captures elements inside a frame's bounds) or set those shapes' frameId — never recreate or delete-and-redraw content just to frame it. If a frame doesn't fully cover its content, just RESIZE the frame (patch its width/height). Deleting a frame (deleteIds:[frameId]) leaves all its contents intact on the canvas — it only removes the frame border + title. PRESENTATION/SLIDES: when the user wants a presentation or slide deck, create type:'frame' slides sized width:1280,height:720 (16:9), laid out LEFT-TO-RIGHT at the same y (x: 0, then 1440, 2880, 4320, …), each with a `name` (the slide title). Put every slide's shapes/text/images INSIDE its frame by setting their frameId to that frame's id (give the frame an id and reference it). Slides play in order (left-to-right, then top-to-bottom) in the board's Present mode and export to PPTX, so one frame = one slide. FLOWCHART recipe: rectangles (roundness null for sharp process boxes), diamonds for decisions, arrows with routing:'elbow' and Yes/No as the arrow's text. Use type 'sticky' for sticky/post-it notes (a solid-fill note with an auto-fitting bound label — set text + backgroundColor); type 'line' with no arrowheads + roughness:2 for sketchy mind-map spokes. FREEHAND DOODLES: to actually draw/doodle/sketch freehand, use { type:'freedraw', points } where points is a RELATIVE [[x,y],…] path of the stroke (e.g. a squiggle, circling or annotating something, a hand-drawn star/heart/smiley/arrow, an organic blob) — it renders as one smooth freehand stroke. x/y is the origin; omit x/y to auto-place. Chain several freedraw specs for a multi-stroke doodle. NOTE: freehand is always SOLID (Excalidraw ignores strokeStyle on freedraw) — colour, strokeWidth and opacity DO apply; a freedraw with strokeStyle:'dashed' or 'dotted' is automatically rendered as a smooth dashed/dotted line so the dashes actually show. Give shapes ids and reference them from connectors. Connectors may also bind to shapes ALREADY on the board by their id (get them via getWhiteboard includeElements:true) — you do NOT need to resend existing shapes; the server reads the live scene to bind the arrow and route it around the other boxes. Great for brainstorms, mind maps, flowcharts, org charts, SWOT, retros. PROCESS: for any non-trivial board call getWhiteboardGuide FIRST to plan it; then after adding, ALWAYS call getWhiteboardImage to SEE the result and check layout, labels, spacing, overlaps and how shapes connect — if anything looks off, fix it with updateWhiteboardScene (patch by id) and render again, iterating until it looks right. RESULT: returns `added` (count), `placement` (bounding box {x,y,width,height} of what you just added) and `autoPlaced` (true when you omitted x/y so it was placed in clear space below existing content) — use placement/autoPlaced to tell the user WHERE the new elements landed, never invent a location.
699
739
  */
700
740
  post: operations["addWhiteboardElements"];
701
741
  delete?: never;
@@ -764,6 +804,46 @@ export interface paths {
764
804
  patch?: never;
765
805
  trace?: never;
766
806
  };
807
+ "/tools/traceImage": {
808
+ parameters: {
809
+ query?: never;
810
+ header?: never;
811
+ path?: never;
812
+ cookie?: never;
813
+ };
814
+ get?: never;
815
+ put?: never;
816
+ /**
817
+ * traceImage
818
+ * @description Turn a raster image into hand-drawn freedraw strokes on a whiteboard, deterministically. Pass an image (imageUrl OR imageBase64) plus a style; the server fetches and vectorises it server-side and draws the strokes, so you do NOT emit any coordinates yourself (LLMs are poor at that and it wastes tokens). Use this for requests like 'sketch this image onto the board', portraits, or turning a logo into line art. style: 'sketch' (~3 colors, clean line art; default), 'color' (~8 colors), 'poster' (~12 colors). Returns a compact summary (stroke count), never the raw coordinates. Auto-places to the right of existing content unless x/y are given.
819
+ */
820
+ post: operations["traceImage"];
821
+ delete?: never;
822
+ options?: never;
823
+ head?: never;
824
+ patch?: never;
825
+ trace?: never;
826
+ };
827
+ "/tools/dataToTable": {
828
+ parameters: {
829
+ query?: never;
830
+ header?: never;
831
+ path?: never;
832
+ cookie?: never;
833
+ };
834
+ get?: never;
835
+ put?: never;
836
+ /**
837
+ * dataToTable
838
+ * @description Render tabular data as an aligned grid of labelled cells on a whiteboard, deterministically. Pass rows (an array of arrays) OR data (an array of objects), with optional headers; the server lays out evenly-spaced cells so you do NOT place each cell by hand. Use this to turn data, CSV, or JSON into a readable table on the board. Returns a compact summary. Auto-places below existing content unless x/y are given.
839
+ */
840
+ post: operations["dataToTable"];
841
+ delete?: never;
842
+ options?: never;
843
+ head?: never;
844
+ patch?: never;
845
+ trace?: never;
846
+ };
767
847
  "/tools/listWhiteboardStencils": {
768
848
  parameters: {
769
849
  query?: never;
@@ -3994,6 +4074,91 @@ export interface operations {
3994
4074
  };
3995
4075
  };
3996
4076
  };
4077
+ searchInfographicTemplates: {
4078
+ parameters: {
4079
+ query?: never;
4080
+ header?: never;
4081
+ path?: never;
4082
+ cookie?: never;
4083
+ };
4084
+ requestBody?: {
4085
+ content: {
4086
+ "application/json": {
4087
+ /** @description What the infographic should show (intent/topic), e.g. 'compare pros and cons', 'launch roadmap timeline', 'market share pie'. */
4088
+ query: string;
4089
+ /** @description Max templates to return (default 12). */
4090
+ limit?: number;
4091
+ };
4092
+ };
4093
+ };
4094
+ responses: {
4095
+ /** @description Tool result (shape varies per tool — refer to the tool's docs for the exact return value). */
4096
+ 200: {
4097
+ headers: {
4098
+ [name: string]: unknown;
4099
+ };
4100
+ content: {
4101
+ "application/json": {
4102
+ [key: string]: unknown;
4103
+ };
4104
+ };
4105
+ };
4106
+ /** @description Validation error. */
4107
+ 400: {
4108
+ headers: {
4109
+ [name: string]: unknown;
4110
+ };
4111
+ content: {
4112
+ "application/json": components["schemas"]["ErrorResponse"];
4113
+ };
4114
+ };
4115
+ /** @description Missing or invalid credentials. */
4116
+ 401: {
4117
+ headers: {
4118
+ [name: string]: unknown;
4119
+ };
4120
+ content: {
4121
+ "application/json": components["schemas"]["ErrorResponse"];
4122
+ };
4123
+ };
4124
+ /** @description Authenticated but lacking the required permission or feature flag. */
4125
+ 403: {
4126
+ headers: {
4127
+ [name: string]: unknown;
4128
+ };
4129
+ content: {
4130
+ "application/json": components["schemas"]["ErrorResponse"];
4131
+ };
4132
+ };
4133
+ /** @description Resource not found. */
4134
+ 404: {
4135
+ headers: {
4136
+ [name: string]: unknown;
4137
+ };
4138
+ content: {
4139
+ "application/json": components["schemas"]["ErrorResponse"];
4140
+ };
4141
+ };
4142
+ /** @description Body did not match the tool's input schema. */
4143
+ 422: {
4144
+ headers: {
4145
+ [name: string]: unknown;
4146
+ };
4147
+ content: {
4148
+ "application/json": components["schemas"]["ErrorResponse"];
4149
+ };
4150
+ };
4151
+ /** @description Server error. */
4152
+ 500: {
4153
+ headers: {
4154
+ [name: string]: unknown;
4155
+ };
4156
+ content: {
4157
+ "application/json": components["schemas"]["ErrorResponse"];
4158
+ };
4159
+ };
4160
+ };
4161
+ };
3997
4162
  getCdmdLanguageGuide: {
3998
4163
  parameters: {
3999
4164
  query?: never;
@@ -5889,7 +6054,7 @@ export interface operations {
5889
6054
  documentVersionTimestamp: number;
5890
6055
  /** @description Diagram type (e.g. mermaid, plantuml, bpmn, d2). Call listDiagramTypes for all types. */
5891
6056
  type: string;
5892
- /** @description Diagram DSL code. Call getDiagramTypeGuide for syntax. */
6057
+ /** @description Diagram DSL code. Call getDiagramTypeGuide for syntax. EXCEPTION — for type 'infographic', put a plain-English DESCRIPTION of the infographic here (NOT code); the system designs the AntV spec and renders it. */
5893
6058
  diagramCode: string;
5894
6059
  /** @description Short description of what the diagram shows (1-2 sentences). */
5895
6060
  prompt: string;
@@ -6346,6 +6511,97 @@ export interface operations {
6346
6511
  };
6347
6512
  };
6348
6513
  };
6514
+ designWhiteboard: {
6515
+ parameters: {
6516
+ query?: never;
6517
+ header?: never;
6518
+ path?: never;
6519
+ cookie?: never;
6520
+ };
6521
+ requestBody?: {
6522
+ content: {
6523
+ "application/json": {
6524
+ /** @description The board to build, in plain language. */
6525
+ goal: string;
6526
+ /** @description Optional board title. If omitted, a clear title is derived from the goal (the board is never left 'Untitled'). When designing into an existing 'Untitled' board, the derived/explicit title replaces the placeholder. */
6527
+ title?: string;
6528
+ /** @description Optional. An existing whiteboard to design into. If omitted, a new whiteboard is created in projectId. */
6529
+ documentId?: string;
6530
+ /** @description The project to create the whiteboard in, when no documentId is given. */
6531
+ projectId?: string;
6532
+ /** @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
+ confirm?: boolean;
6534
+ };
6535
+ };
6536
+ };
6537
+ responses: {
6538
+ /** @description Tool result (shape varies per tool — refer to the tool's docs for the exact return value). */
6539
+ 200: {
6540
+ headers: {
6541
+ [name: string]: unknown;
6542
+ };
6543
+ content: {
6544
+ "application/json": {
6545
+ [key: string]: unknown;
6546
+ };
6547
+ };
6548
+ };
6549
+ /** @description Validation error. */
6550
+ 400: {
6551
+ headers: {
6552
+ [name: string]: unknown;
6553
+ };
6554
+ content: {
6555
+ "application/json": components["schemas"]["ErrorResponse"];
6556
+ };
6557
+ };
6558
+ /** @description Missing or invalid credentials. */
6559
+ 401: {
6560
+ headers: {
6561
+ [name: string]: unknown;
6562
+ };
6563
+ content: {
6564
+ "application/json": components["schemas"]["ErrorResponse"];
6565
+ };
6566
+ };
6567
+ /** @description Authenticated but lacking the required permission or feature flag. */
6568
+ 403: {
6569
+ headers: {
6570
+ [name: string]: unknown;
6571
+ };
6572
+ content: {
6573
+ "application/json": components["schemas"]["ErrorResponse"];
6574
+ };
6575
+ };
6576
+ /** @description Resource not found. */
6577
+ 404: {
6578
+ headers: {
6579
+ [name: string]: unknown;
6580
+ };
6581
+ content: {
6582
+ "application/json": components["schemas"]["ErrorResponse"];
6583
+ };
6584
+ };
6585
+ /** @description Body did not match the tool's input schema. */
6586
+ 422: {
6587
+ headers: {
6588
+ [name: string]: unknown;
6589
+ };
6590
+ content: {
6591
+ "application/json": components["schemas"]["ErrorResponse"];
6592
+ };
6593
+ };
6594
+ /** @description Server error. */
6595
+ 500: {
6596
+ headers: {
6597
+ [name: string]: unknown;
6598
+ };
6599
+ content: {
6600
+ "application/json": components["schemas"]["ErrorResponse"];
6601
+ };
6602
+ };
6603
+ };
6604
+ };
6349
6605
  createWhiteboard: {
6350
6606
  parameters: {
6351
6607
  query?: never;
@@ -6357,8 +6613,8 @@ export interface operations {
6357
6613
  content: {
6358
6614
  "application/json": {
6359
6615
  projectId: string;
6360
- /** @description Whiteboard title. Defaults to 'Untitled whiteboard'. */
6361
- title?: string;
6616
+ /** @description REQUIRED. A clear, descriptive board name (e.g. 'Q3 GTM plan'). Programmatic boards must be titled — blank/'Untitled' titles are rejected. */
6617
+ title: string;
6362
6618
  /** @description Optional folder to file the whiteboard under. */
6363
6619
  folderId?: string;
6364
6620
  };
@@ -6714,7 +6970,7 @@ export interface operations {
6714
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.
6715
6971
  * @enum {string}
6716
6972
  */
6717
- type: "rectangle" | "ellipse" | "diamond" | "sticky" | "text" | "arrow" | "line" | "frame" | "image" | "stencil";
6973
+ type: "rectangle" | "ellipse" | "diamond" | "sticky" | "text" | "arrow" | "line" | "freedraw" | "doodle" | "frame" | "image" | "stencil";
6718
6974
  /** @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. */
6719
6975
  stencil?: string;
6720
6976
  /** @description For type:'stencil' — exact stencil key from listWhiteboardStencils (takes precedence over `stencil`). */
@@ -6725,6 +6981,8 @@ export interface operations {
6725
6981
  iconPath?: string;
6726
6982
  /** @description For type:'image' — any other public image URL (use iconPath for curated architecture icons). */
6727
6983
  imageUrl?: string;
6984
+ /** @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). */
6985
+ doodle?: string;
6728
6986
  /** @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. */
6729
6987
  id?: string;
6730
6988
  /** @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). */
@@ -6741,6 +6999,8 @@ export interface operations {
6741
6999
  scale?: number;
6742
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). */
6743
7001
  text?: string;
7002
+ /** @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
+ fitText?: boolean;
6744
7004
  /** @description Fill colour: a name ('blue'/'green'/'yellow'/'pink'/'violet'/'orange'/'teal'/…) or a hex value. */
6745
7005
  backgroundColor?: string;
6746
7006
  /** @description For arrows/lines: { id } of the source shape (auto-clips to the edge + auto-routes around shapes in between). */
@@ -7036,7 +7296,7 @@ export interface operations {
7036
7296
  documentId: string;
7037
7297
  /** @description Diagram language, e.g. 'bpmn', 'mermaid', 'd2', 'plantuml', 'graphviz'. See listDiagramTypes. */
7038
7298
  diagramType: string;
7039
- /** @description The diagram DSL / code. */
7299
+ /** @description The diagram DSL / code. For type 'infographic', provide a plain-English description instead (the system designs the AntV infographic spec). */
7040
7300
  source: string;
7041
7301
  /** @description Optional caption shown beneath the diagram. */
7042
7302
  caption?: string;
@@ -7124,6 +7384,207 @@ export interface operations {
7124
7384
  };
7125
7385
  };
7126
7386
  };
7387
+ traceImage: {
7388
+ parameters: {
7389
+ query?: never;
7390
+ header?: never;
7391
+ path?: never;
7392
+ cookie?: never;
7393
+ };
7394
+ requestBody?: {
7395
+ content: {
7396
+ "application/json": {
7397
+ /** @description The whiteboard's documentId. */
7398
+ documentId: string;
7399
+ /** @description URL to fetch the image from (http/https; private and metadata hosts are blocked). */
7400
+ imageUrl?: string;
7401
+ /** @description Base64-encoded image bytes (a data: URL prefix is allowed). Use instead of imageUrl. */
7402
+ imageBase64?: string;
7403
+ /** @description Optional image MIME type hint (e.g. 'image/png'); auto-detected otherwise. */
7404
+ mimeType?: string;
7405
+ /**
7406
+ * @description Vectorisation style. 'sketch' = clean line art (default), 'color' = more colors, 'poster' = posterised.
7407
+ * @enum {string}
7408
+ */
7409
+ style?: "sketch" | "color" | "poster";
7410
+ /** @description Palette size 2-16 (defaults by style: sketch 3, color 8, poster 12). */
7411
+ maxColors?: number;
7412
+ /** @description Cap on the number of strokes, 20-1200 (default 600). Lower = simpler and faster. */
7413
+ maxStrokes?: number;
7414
+ /** @description Target display width in px (default 520); the drawing scales to fit, aspect preserved. */
7415
+ width?: number;
7416
+ /** @description Top-left x on the canvas. Omit to auto-place to the right of existing content. */
7417
+ x?: number;
7418
+ /** @description Top-left y on the canvas. Omit to auto-place. */
7419
+ y?: number;
7420
+ };
7421
+ };
7422
+ };
7423
+ responses: {
7424
+ /** @description Tool result (shape varies per tool — refer to the tool's docs for the exact return value). */
7425
+ 200: {
7426
+ headers: {
7427
+ [name: string]: unknown;
7428
+ };
7429
+ content: {
7430
+ "application/json": {
7431
+ [key: string]: unknown;
7432
+ };
7433
+ };
7434
+ };
7435
+ /** @description Validation error. */
7436
+ 400: {
7437
+ headers: {
7438
+ [name: string]: unknown;
7439
+ };
7440
+ content: {
7441
+ "application/json": components["schemas"]["ErrorResponse"];
7442
+ };
7443
+ };
7444
+ /** @description Missing or invalid credentials. */
7445
+ 401: {
7446
+ headers: {
7447
+ [name: string]: unknown;
7448
+ };
7449
+ content: {
7450
+ "application/json": components["schemas"]["ErrorResponse"];
7451
+ };
7452
+ };
7453
+ /** @description Authenticated but lacking the required permission or feature flag. */
7454
+ 403: {
7455
+ headers: {
7456
+ [name: string]: unknown;
7457
+ };
7458
+ content: {
7459
+ "application/json": components["schemas"]["ErrorResponse"];
7460
+ };
7461
+ };
7462
+ /** @description Resource not found. */
7463
+ 404: {
7464
+ headers: {
7465
+ [name: string]: unknown;
7466
+ };
7467
+ content: {
7468
+ "application/json": components["schemas"]["ErrorResponse"];
7469
+ };
7470
+ };
7471
+ /** @description Body did not match the tool's input schema. */
7472
+ 422: {
7473
+ headers: {
7474
+ [name: string]: unknown;
7475
+ };
7476
+ content: {
7477
+ "application/json": components["schemas"]["ErrorResponse"];
7478
+ };
7479
+ };
7480
+ /** @description Server error. */
7481
+ 500: {
7482
+ headers: {
7483
+ [name: string]: unknown;
7484
+ };
7485
+ content: {
7486
+ "application/json": components["schemas"]["ErrorResponse"];
7487
+ };
7488
+ };
7489
+ };
7490
+ };
7491
+ dataToTable: {
7492
+ parameters: {
7493
+ query?: never;
7494
+ header?: never;
7495
+ path?: never;
7496
+ cookie?: never;
7497
+ };
7498
+ requestBody?: {
7499
+ content: {
7500
+ "application/json": {
7501
+ /** @description The whiteboard's documentId. */
7502
+ documentId: string;
7503
+ /** @description Rows as arrays of cell strings. If headers is omitted, the first row is treated as the header row. */
7504
+ rows?: string[][];
7505
+ /** @description Alternative to rows: an array of objects; columns come from headers, or the first object's keys. */
7506
+ data?: Record<string, never>[];
7507
+ /** @description Optional column headers (rendered as a styled header row). For data, also selects and orders the columns. */
7508
+ headers?: string[];
7509
+ /** @description Cell width in px, 60-400 (default 160). */
7510
+ cellWidth?: number;
7511
+ /** @description Cell height in px, 28-200 (default 40). */
7512
+ cellHeight?: number;
7513
+ /** @description Top-left x on the canvas. Omit to auto-place below existing content. */
7514
+ x?: number;
7515
+ /** @description Top-left y on the canvas. Omit to auto-place. */
7516
+ y?: number;
7517
+ };
7518
+ };
7519
+ };
7520
+ responses: {
7521
+ /** @description Tool result (shape varies per tool — refer to the tool's docs for the exact return value). */
7522
+ 200: {
7523
+ headers: {
7524
+ [name: string]: unknown;
7525
+ };
7526
+ content: {
7527
+ "application/json": {
7528
+ [key: string]: unknown;
7529
+ };
7530
+ };
7531
+ };
7532
+ /** @description Validation error. */
7533
+ 400: {
7534
+ headers: {
7535
+ [name: string]: unknown;
7536
+ };
7537
+ content: {
7538
+ "application/json": components["schemas"]["ErrorResponse"];
7539
+ };
7540
+ };
7541
+ /** @description Missing or invalid credentials. */
7542
+ 401: {
7543
+ headers: {
7544
+ [name: string]: unknown;
7545
+ };
7546
+ content: {
7547
+ "application/json": components["schemas"]["ErrorResponse"];
7548
+ };
7549
+ };
7550
+ /** @description Authenticated but lacking the required permission or feature flag. */
7551
+ 403: {
7552
+ headers: {
7553
+ [name: string]: unknown;
7554
+ };
7555
+ content: {
7556
+ "application/json": components["schemas"]["ErrorResponse"];
7557
+ };
7558
+ };
7559
+ /** @description Resource not found. */
7560
+ 404: {
7561
+ headers: {
7562
+ [name: string]: unknown;
7563
+ };
7564
+ content: {
7565
+ "application/json": components["schemas"]["ErrorResponse"];
7566
+ };
7567
+ };
7568
+ /** @description Body did not match the tool's input schema. */
7569
+ 422: {
7570
+ headers: {
7571
+ [name: string]: unknown;
7572
+ };
7573
+ content: {
7574
+ "application/json": components["schemas"]["ErrorResponse"];
7575
+ };
7576
+ };
7577
+ /** @description Server error. */
7578
+ 500: {
7579
+ headers: {
7580
+ [name: string]: unknown;
7581
+ };
7582
+ content: {
7583
+ "application/json": components["schemas"]["ErrorResponse"];
7584
+ };
7585
+ };
7586
+ };
7587
+ };
7127
7588
  listWhiteboardStencils: {
7128
7589
  parameters: {
7129
7590
  query?: never;
@@ -7399,7 +7860,7 @@ export interface operations {
7399
7860
  "application/json": {
7400
7861
  /** @description Diagram language, e.g. 'mermaid', 'd2', 'plantuml', 'graphviz', 'bpmn', 'vegalite'. See listDiagramTypes. */
7401
7862
  diagramType: string;
7402
- /** @description The diagram DSL / code to render. */
7863
+ /** @description The diagram DSL / code to render. For type 'infographic', provide a plain-English description instead (the system designs the AntV infographic spec). */
7403
7864
  source: string;
7404
7865
  /**
7405
7866
  * @description png (default) or jpeg = raster; svg = vector.