@stablebaseline/sdk 0.3.0 → 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/dist/index.d.cts +473 -10
- package/dist/index.d.ts +473 -10
- package/openapi.json +536 -12
- package/package.json +4 -4
- package/src/types.generated.ts +473 -10
package/openapi.json
CHANGED
|
@@ -146,7 +146,7 @@
|
|
|
146
146
|
"description": "Search available tools by keyword or category. Returns matching tool names and descriptions.",
|
|
147
147
|
"operationId": "searchTools",
|
|
148
148
|
"tags": [
|
|
149
|
-
"
|
|
149
|
+
"navigation"
|
|
150
150
|
],
|
|
151
151
|
"requestBody": {
|
|
152
152
|
"required": false,
|
|
@@ -487,7 +487,7 @@
|
|
|
487
487
|
"/tools/listArchitectureIcons": {
|
|
488
488
|
"post": {
|
|
489
489
|
"summary": "listArchitectureIcons",
|
|
490
|
-
"description": "
|
|
490
|
+
"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).",
|
|
491
491
|
"operationId": "listArchitectureIcons",
|
|
492
492
|
"tags": [
|
|
493
493
|
"diagrams"
|
|
@@ -600,6 +600,112 @@
|
|
|
600
600
|
}
|
|
601
601
|
}
|
|
602
602
|
},
|
|
603
|
+
"/tools/searchInfographicTemplates": {
|
|
604
|
+
"post": {
|
|
605
|
+
"summary": "searchInfographicTemplates",
|
|
606
|
+
"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.",
|
|
607
|
+
"operationId": "searchInfographicTemplates",
|
|
608
|
+
"tags": [
|
|
609
|
+
"uncategorized"
|
|
610
|
+
],
|
|
611
|
+
"requestBody": {
|
|
612
|
+
"required": false,
|
|
613
|
+
"content": {
|
|
614
|
+
"application/json": {
|
|
615
|
+
"schema": {
|
|
616
|
+
"type": "object",
|
|
617
|
+
"properties": {
|
|
618
|
+
"query": {
|
|
619
|
+
"type": "string",
|
|
620
|
+
"description": "What the infographic should show (intent/topic), e.g. 'compare pros and cons', 'launch roadmap timeline', 'market share pie'."
|
|
621
|
+
},
|
|
622
|
+
"limit": {
|
|
623
|
+
"type": "number",
|
|
624
|
+
"description": "Max templates to return (default 12)."
|
|
625
|
+
}
|
|
626
|
+
},
|
|
627
|
+
"required": [
|
|
628
|
+
"query"
|
|
629
|
+
]
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
},
|
|
634
|
+
"responses": {
|
|
635
|
+
"200": {
|
|
636
|
+
"description": "Tool result (shape varies per tool — refer to the tool's docs for the exact return value).",
|
|
637
|
+
"content": {
|
|
638
|
+
"application/json": {
|
|
639
|
+
"schema": {
|
|
640
|
+
"type": "object",
|
|
641
|
+
"additionalProperties": true
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
},
|
|
646
|
+
"400": {
|
|
647
|
+
"description": "Validation error.",
|
|
648
|
+
"content": {
|
|
649
|
+
"application/json": {
|
|
650
|
+
"schema": {
|
|
651
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
},
|
|
656
|
+
"401": {
|
|
657
|
+
"description": "Missing or invalid credentials.",
|
|
658
|
+
"content": {
|
|
659
|
+
"application/json": {
|
|
660
|
+
"schema": {
|
|
661
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
},
|
|
666
|
+
"403": {
|
|
667
|
+
"description": "Authenticated but lacking the required permission or feature flag.",
|
|
668
|
+
"content": {
|
|
669
|
+
"application/json": {
|
|
670
|
+
"schema": {
|
|
671
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
672
|
+
}
|
|
673
|
+
}
|
|
674
|
+
}
|
|
675
|
+
},
|
|
676
|
+
"404": {
|
|
677
|
+
"description": "Resource not found.",
|
|
678
|
+
"content": {
|
|
679
|
+
"application/json": {
|
|
680
|
+
"schema": {
|
|
681
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
},
|
|
686
|
+
"422": {
|
|
687
|
+
"description": "Body did not match the tool's input schema.",
|
|
688
|
+
"content": {
|
|
689
|
+
"application/json": {
|
|
690
|
+
"schema": {
|
|
691
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
692
|
+
}
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
},
|
|
696
|
+
"500": {
|
|
697
|
+
"description": "Server error.",
|
|
698
|
+
"content": {
|
|
699
|
+
"application/json": {
|
|
700
|
+
"schema": {
|
|
701
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
702
|
+
}
|
|
703
|
+
}
|
|
704
|
+
}
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
}
|
|
708
|
+
},
|
|
603
709
|
"/tools/getCdmdLanguageGuide": {
|
|
604
710
|
"post": {
|
|
605
711
|
"summary": "getCdmdLanguageGuide",
|
|
@@ -3107,7 +3213,7 @@
|
|
|
3107
3213
|
},
|
|
3108
3214
|
"diagramCode": {
|
|
3109
3215
|
"type": "string",
|
|
3110
|
-
"description": "Diagram DSL code. Call getDiagramTypeGuide for syntax."
|
|
3216
|
+
"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."
|
|
3111
3217
|
},
|
|
3112
3218
|
"prompt": {
|
|
3113
3219
|
"type": "string",
|
|
@@ -3712,6 +3818,124 @@
|
|
|
3712
3818
|
}
|
|
3713
3819
|
}
|
|
3714
3820
|
},
|
|
3821
|
+
"/tools/designWhiteboard": {
|
|
3822
|
+
"post": {
|
|
3823
|
+
"summary": "designWhiteboard",
|
|
3824
|
+
"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.",
|
|
3825
|
+
"operationId": "designWhiteboard",
|
|
3826
|
+
"tags": [
|
|
3827
|
+
"whiteboards"
|
|
3828
|
+
],
|
|
3829
|
+
"requestBody": {
|
|
3830
|
+
"required": false,
|
|
3831
|
+
"content": {
|
|
3832
|
+
"application/json": {
|
|
3833
|
+
"schema": {
|
|
3834
|
+
"type": "object",
|
|
3835
|
+
"properties": {
|
|
3836
|
+
"goal": {
|
|
3837
|
+
"type": "string",
|
|
3838
|
+
"description": "The board to build, in plain language."
|
|
3839
|
+
},
|
|
3840
|
+
"title": {
|
|
3841
|
+
"type": "string",
|
|
3842
|
+
"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."
|
|
3843
|
+
},
|
|
3844
|
+
"documentId": {
|
|
3845
|
+
"type": "string",
|
|
3846
|
+
"description": "Optional. An existing whiteboard to design into. If omitted, a new whiteboard is created in projectId."
|
|
3847
|
+
},
|
|
3848
|
+
"projectId": {
|
|
3849
|
+
"type": "string",
|
|
3850
|
+
"description": "The project to create the whiteboard in, when no documentId is given."
|
|
3851
|
+
},
|
|
3852
|
+
"confirm": {
|
|
3853
|
+
"type": "boolean",
|
|
3854
|
+
"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."
|
|
3855
|
+
}
|
|
3856
|
+
},
|
|
3857
|
+
"required": [
|
|
3858
|
+
"goal"
|
|
3859
|
+
]
|
|
3860
|
+
}
|
|
3861
|
+
}
|
|
3862
|
+
}
|
|
3863
|
+
},
|
|
3864
|
+
"responses": {
|
|
3865
|
+
"200": {
|
|
3866
|
+
"description": "Tool result (shape varies per tool — refer to the tool's docs for the exact return value).",
|
|
3867
|
+
"content": {
|
|
3868
|
+
"application/json": {
|
|
3869
|
+
"schema": {
|
|
3870
|
+
"type": "object",
|
|
3871
|
+
"additionalProperties": true
|
|
3872
|
+
}
|
|
3873
|
+
}
|
|
3874
|
+
}
|
|
3875
|
+
},
|
|
3876
|
+
"400": {
|
|
3877
|
+
"description": "Validation error.",
|
|
3878
|
+
"content": {
|
|
3879
|
+
"application/json": {
|
|
3880
|
+
"schema": {
|
|
3881
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3882
|
+
}
|
|
3883
|
+
}
|
|
3884
|
+
}
|
|
3885
|
+
},
|
|
3886
|
+
"401": {
|
|
3887
|
+
"description": "Missing or invalid credentials.",
|
|
3888
|
+
"content": {
|
|
3889
|
+
"application/json": {
|
|
3890
|
+
"schema": {
|
|
3891
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3892
|
+
}
|
|
3893
|
+
}
|
|
3894
|
+
}
|
|
3895
|
+
},
|
|
3896
|
+
"403": {
|
|
3897
|
+
"description": "Authenticated but lacking the required permission or feature flag.",
|
|
3898
|
+
"content": {
|
|
3899
|
+
"application/json": {
|
|
3900
|
+
"schema": {
|
|
3901
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3902
|
+
}
|
|
3903
|
+
}
|
|
3904
|
+
}
|
|
3905
|
+
},
|
|
3906
|
+
"404": {
|
|
3907
|
+
"description": "Resource not found.",
|
|
3908
|
+
"content": {
|
|
3909
|
+
"application/json": {
|
|
3910
|
+
"schema": {
|
|
3911
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3912
|
+
}
|
|
3913
|
+
}
|
|
3914
|
+
}
|
|
3915
|
+
},
|
|
3916
|
+
"422": {
|
|
3917
|
+
"description": "Body did not match the tool's input schema.",
|
|
3918
|
+
"content": {
|
|
3919
|
+
"application/json": {
|
|
3920
|
+
"schema": {
|
|
3921
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3922
|
+
}
|
|
3923
|
+
}
|
|
3924
|
+
}
|
|
3925
|
+
},
|
|
3926
|
+
"500": {
|
|
3927
|
+
"description": "Server error.",
|
|
3928
|
+
"content": {
|
|
3929
|
+
"application/json": {
|
|
3930
|
+
"schema": {
|
|
3931
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3932
|
+
}
|
|
3933
|
+
}
|
|
3934
|
+
}
|
|
3935
|
+
}
|
|
3936
|
+
}
|
|
3937
|
+
}
|
|
3938
|
+
},
|
|
3715
3939
|
"/tools/createWhiteboard": {
|
|
3716
3940
|
"post": {
|
|
3717
3941
|
"summary": "createWhiteboard",
|
|
@@ -3732,7 +3956,7 @@
|
|
|
3732
3956
|
},
|
|
3733
3957
|
"title": {
|
|
3734
3958
|
"type": "string",
|
|
3735
|
-
"description": "
|
|
3959
|
+
"description": "REQUIRED. A clear, descriptive board name (e.g. 'Q3 GTM plan'). Programmatic boards must be titled — blank/'Untitled' titles are rejected."
|
|
3736
3960
|
},
|
|
3737
3961
|
"folderId": {
|
|
3738
3962
|
"type": "string",
|
|
@@ -3740,7 +3964,8 @@
|
|
|
3740
3964
|
}
|
|
3741
3965
|
},
|
|
3742
3966
|
"required": [
|
|
3743
|
-
"projectId"
|
|
3967
|
+
"projectId",
|
|
3968
|
+
"title"
|
|
3744
3969
|
]
|
|
3745
3970
|
}
|
|
3746
3971
|
}
|
|
@@ -4030,7 +4255,7 @@
|
|
|
4030
4255
|
"/tools/updateWhiteboardScene": {
|
|
4031
4256
|
"post": {
|
|
4032
4257
|
"summary": "updateWhiteboardScene",
|
|
4033
|
-
"description": "Edit elements on a whiteboard's canvas WITHOUT dropping the rest of the scene. A board may hold many diagrams/elements, so prefer surgical edits: mode='patch' (DEFAULT) shallow-merges each incoming object into the existing element with the same `id` (send just {id, backgroundColor:'blue'} to recolour one box, or {id, x, y} to move one) and appends any elements whose id is new/absent — everything else is left untouched. `deleteIds` removes specific elements by id. mode='append' only adds. mode='replace' overwrites the ENTIRE scene
|
|
4258
|
+
"description": "Edit elements on a whiteboard's canvas WITHOUT dropping the rest of the scene. A board may hold many diagrams/elements, so prefer surgical edits: mode='patch' (DEFAULT) shallow-merges each incoming object into the existing element with the same `id` (send just {id, backgroundColor:'blue'} to recolour one box, or {id, x, y} to move one) and appends any elements whose id is new/absent — everything else is left untouched. `deleteIds` removes specific elements by id. mode='append' only adds. mode='replace' overwrites the ENTIRE scene — to rebuild or edit only PART of a board, still use 'patch', because replace DELETES every element you don't resend (of ANY type). As a safeguard, a replace that would drop ANY existing element not in your payload is REJECTED unless you pass confirmReplace:true (or include those ids); diagrams/images/frames are flagged specially since they're inserted separately and costliest to lose. To author NEW shapes/connectors from a high-level spec, prefer addWhiteboardElements — and prefer library stencils / sticky notes / architecture icons over plain rectangles wherever a standard form fits (sticky notes, kanban/scrum, flowcharts, UML/ER, BPMN, org charts, wireframes). Optional appState/files are merged in. PROCESS: for a non-trivial edit call getWhiteboardGuide FIRST; after editing, ALWAYS call getWhiteboardImage to confirm the board still looks right (layout, labels, overlaps), and patch again if it doesn't.",
|
|
4034
4259
|
"operationId": "updateWhiteboardScene",
|
|
4035
4260
|
"tags": [
|
|
4036
4261
|
"whiteboards"
|
|
@@ -4059,7 +4284,7 @@
|
|
|
4059
4284
|
"append",
|
|
4060
4285
|
"replace"
|
|
4061
4286
|
],
|
|
4062
|
-
"description": "patch (DEFAULT —
|
|
4287
|
+
"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."
|
|
4063
4288
|
},
|
|
4064
4289
|
"deleteIds": {
|
|
4065
4290
|
"type": "array",
|
|
@@ -4079,6 +4304,10 @@
|
|
|
4079
4304
|
"versionTimestamp": {
|
|
4080
4305
|
"type": "number",
|
|
4081
4306
|
"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."
|
|
4307
|
+
},
|
|
4308
|
+
"confirmReplace": {
|
|
4309
|
+
"type": "boolean",
|
|
4310
|
+
"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."
|
|
4082
4311
|
}
|
|
4083
4312
|
},
|
|
4084
4313
|
"required": [
|
|
@@ -4166,7 +4395,7 @@
|
|
|
4166
4395
|
"/tools/addWhiteboardElements": {
|
|
4167
4396
|
"post": {
|
|
4168
4397
|
"summary": "addWhiteboardElements",
|
|
4169
|
-
"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.",
|
|
4398
|
+
"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.",
|
|
4170
4399
|
"operationId": "addWhiteboardElements",
|
|
4171
4400
|
"tags": [
|
|
4172
4401
|
"whiteboards"
|
|
@@ -4197,6 +4426,8 @@
|
|
|
4197
4426
|
"text",
|
|
4198
4427
|
"arrow",
|
|
4199
4428
|
"line",
|
|
4429
|
+
"freedraw",
|
|
4430
|
+
"doodle",
|
|
4200
4431
|
"frame",
|
|
4201
4432
|
"image",
|
|
4202
4433
|
"stencil"
|
|
@@ -4223,6 +4454,10 @@
|
|
|
4223
4454
|
"type": "string",
|
|
4224
4455
|
"description": "For type:'image' — any other public image URL (use iconPath for curated architecture icons)."
|
|
4225
4456
|
},
|
|
4457
|
+
"doodle": {
|
|
4458
|
+
"type": "string",
|
|
4459
|
+
"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)."
|
|
4460
|
+
},
|
|
4226
4461
|
"id": {
|
|
4227
4462
|
"type": "string",
|
|
4228
4463
|
"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."
|
|
@@ -4255,6 +4490,10 @@
|
|
|
4255
4490
|
"type": "string",
|
|
4256
4491
|
"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)."
|
|
4257
4492
|
},
|
|
4493
|
+
"fitText": {
|
|
4494
|
+
"type": "boolean",
|
|
4495
|
+
"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."
|
|
4496
|
+
},
|
|
4258
4497
|
"backgroundColor": {
|
|
4259
4498
|
"type": "string",
|
|
4260
4499
|
"description": "Fill colour: a name ('blue'/'green'/'yellow'/'pink'/'violet'/'orange'/'teal'/…) or a hex value."
|
|
@@ -4365,7 +4604,7 @@
|
|
|
4365
4604
|
"description": "Copy-paste existing whiteboard elements — the MCP equivalent of selecting a group and pressing Ctrl/Cmd+D. Clones the given elements (plus their group peers + bound text/labels) with FRESH ids, offsets the copy by dx/dy, and by default groups it into ONE new unit so it moves together. Use it to build something once (a labelled stencil frame, a kanban card, a UML class) then stamp out consistent repeats fast — then retext/recolour each copy by its new id (via the returned idMap) with updateWhiteboardScene. Pass `groupId` to copy a whole group as a unit (e.g. a placed stencil's groupId from its placement result) and/or `ids` for specific elements. Internal references (group membership, bound text containerId, arrow start/end bindings) are remapped within the copied set; a binding to an element you did NOT copy is dropped. Returns { duplicated, idMap (old id → new id), groupId (the copy's new unit group), elementCount }. Render with getWhiteboardImage afterwards to verify.",
|
|
4366
4605
|
"operationId": "duplicateWhiteboardElements",
|
|
4367
4606
|
"tags": [
|
|
4368
|
-
"
|
|
4607
|
+
"whiteboards"
|
|
4369
4608
|
],
|
|
4370
4609
|
"requestBody": {
|
|
4371
4610
|
"required": false,
|
|
@@ -4663,7 +4902,7 @@
|
|
|
4663
4902
|
},
|
|
4664
4903
|
"source": {
|
|
4665
4904
|
"type": "string",
|
|
4666
|
-
"description": "The diagram DSL / code."
|
|
4905
|
+
"description": "The diagram DSL / code. For type 'infographic', provide a plain-English description instead (the system designs the AntV infographic spec)."
|
|
4667
4906
|
},
|
|
4668
4907
|
"caption": {
|
|
4669
4908
|
"type": "string",
|
|
@@ -4779,6 +5018,291 @@
|
|
|
4779
5018
|
}
|
|
4780
5019
|
}
|
|
4781
5020
|
},
|
|
5021
|
+
"/tools/traceImage": {
|
|
5022
|
+
"post": {
|
|
5023
|
+
"summary": "traceImage",
|
|
5024
|
+
"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.",
|
|
5025
|
+
"operationId": "traceImage",
|
|
5026
|
+
"tags": [
|
|
5027
|
+
"whiteboards"
|
|
5028
|
+
],
|
|
5029
|
+
"requestBody": {
|
|
5030
|
+
"required": false,
|
|
5031
|
+
"content": {
|
|
5032
|
+
"application/json": {
|
|
5033
|
+
"schema": {
|
|
5034
|
+
"type": "object",
|
|
5035
|
+
"properties": {
|
|
5036
|
+
"documentId": {
|
|
5037
|
+
"type": "string",
|
|
5038
|
+
"description": "The whiteboard's documentId."
|
|
5039
|
+
},
|
|
5040
|
+
"imageUrl": {
|
|
5041
|
+
"type": "string",
|
|
5042
|
+
"description": "URL to fetch the image from (http/https; private and metadata hosts are blocked)."
|
|
5043
|
+
},
|
|
5044
|
+
"imageBase64": {
|
|
5045
|
+
"type": "string",
|
|
5046
|
+
"description": "Base64-encoded image bytes (a data: URL prefix is allowed). Use instead of imageUrl."
|
|
5047
|
+
},
|
|
5048
|
+
"mimeType": {
|
|
5049
|
+
"type": "string",
|
|
5050
|
+
"description": "Optional image MIME type hint (e.g. 'image/png'); auto-detected otherwise."
|
|
5051
|
+
},
|
|
5052
|
+
"style": {
|
|
5053
|
+
"type": "string",
|
|
5054
|
+
"enum": [
|
|
5055
|
+
"sketch",
|
|
5056
|
+
"color",
|
|
5057
|
+
"poster"
|
|
5058
|
+
],
|
|
5059
|
+
"description": "Vectorisation style. 'sketch' = clean line art (default), 'color' = more colors, 'poster' = posterised."
|
|
5060
|
+
},
|
|
5061
|
+
"maxColors": {
|
|
5062
|
+
"type": "number",
|
|
5063
|
+
"description": "Palette size 2-16 (defaults by style: sketch 3, color 8, poster 12)."
|
|
5064
|
+
},
|
|
5065
|
+
"maxStrokes": {
|
|
5066
|
+
"type": "number",
|
|
5067
|
+
"description": "Cap on the number of strokes, 20-1200 (default 600). Lower = simpler and faster."
|
|
5068
|
+
},
|
|
5069
|
+
"width": {
|
|
5070
|
+
"type": "number",
|
|
5071
|
+
"description": "Target display width in px (default 520); the drawing scales to fit, aspect preserved."
|
|
5072
|
+
},
|
|
5073
|
+
"x": {
|
|
5074
|
+
"type": "number",
|
|
5075
|
+
"description": "Top-left x on the canvas. Omit to auto-place to the right of existing content."
|
|
5076
|
+
},
|
|
5077
|
+
"y": {
|
|
5078
|
+
"type": "number",
|
|
5079
|
+
"description": "Top-left y on the canvas. Omit to auto-place."
|
|
5080
|
+
}
|
|
5081
|
+
},
|
|
5082
|
+
"required": [
|
|
5083
|
+
"documentId"
|
|
5084
|
+
]
|
|
5085
|
+
}
|
|
5086
|
+
}
|
|
5087
|
+
}
|
|
5088
|
+
},
|
|
5089
|
+
"responses": {
|
|
5090
|
+
"200": {
|
|
5091
|
+
"description": "Tool result (shape varies per tool — refer to the tool's docs for the exact return value).",
|
|
5092
|
+
"content": {
|
|
5093
|
+
"application/json": {
|
|
5094
|
+
"schema": {
|
|
5095
|
+
"type": "object",
|
|
5096
|
+
"additionalProperties": true
|
|
5097
|
+
}
|
|
5098
|
+
}
|
|
5099
|
+
}
|
|
5100
|
+
},
|
|
5101
|
+
"400": {
|
|
5102
|
+
"description": "Validation error.",
|
|
5103
|
+
"content": {
|
|
5104
|
+
"application/json": {
|
|
5105
|
+
"schema": {
|
|
5106
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
5107
|
+
}
|
|
5108
|
+
}
|
|
5109
|
+
}
|
|
5110
|
+
},
|
|
5111
|
+
"401": {
|
|
5112
|
+
"description": "Missing or invalid credentials.",
|
|
5113
|
+
"content": {
|
|
5114
|
+
"application/json": {
|
|
5115
|
+
"schema": {
|
|
5116
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
5117
|
+
}
|
|
5118
|
+
}
|
|
5119
|
+
}
|
|
5120
|
+
},
|
|
5121
|
+
"403": {
|
|
5122
|
+
"description": "Authenticated but lacking the required permission or feature flag.",
|
|
5123
|
+
"content": {
|
|
5124
|
+
"application/json": {
|
|
5125
|
+
"schema": {
|
|
5126
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
5127
|
+
}
|
|
5128
|
+
}
|
|
5129
|
+
}
|
|
5130
|
+
},
|
|
5131
|
+
"404": {
|
|
5132
|
+
"description": "Resource not found.",
|
|
5133
|
+
"content": {
|
|
5134
|
+
"application/json": {
|
|
5135
|
+
"schema": {
|
|
5136
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
5137
|
+
}
|
|
5138
|
+
}
|
|
5139
|
+
}
|
|
5140
|
+
},
|
|
5141
|
+
"422": {
|
|
5142
|
+
"description": "Body did not match the tool's input schema.",
|
|
5143
|
+
"content": {
|
|
5144
|
+
"application/json": {
|
|
5145
|
+
"schema": {
|
|
5146
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
5147
|
+
}
|
|
5148
|
+
}
|
|
5149
|
+
}
|
|
5150
|
+
},
|
|
5151
|
+
"500": {
|
|
5152
|
+
"description": "Server error.",
|
|
5153
|
+
"content": {
|
|
5154
|
+
"application/json": {
|
|
5155
|
+
"schema": {
|
|
5156
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
5157
|
+
}
|
|
5158
|
+
}
|
|
5159
|
+
}
|
|
5160
|
+
}
|
|
5161
|
+
}
|
|
5162
|
+
}
|
|
5163
|
+
},
|
|
5164
|
+
"/tools/dataToTable": {
|
|
5165
|
+
"post": {
|
|
5166
|
+
"summary": "dataToTable",
|
|
5167
|
+
"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.",
|
|
5168
|
+
"operationId": "dataToTable",
|
|
5169
|
+
"tags": [
|
|
5170
|
+
"whiteboards"
|
|
5171
|
+
],
|
|
5172
|
+
"requestBody": {
|
|
5173
|
+
"required": false,
|
|
5174
|
+
"content": {
|
|
5175
|
+
"application/json": {
|
|
5176
|
+
"schema": {
|
|
5177
|
+
"type": "object",
|
|
5178
|
+
"properties": {
|
|
5179
|
+
"documentId": {
|
|
5180
|
+
"type": "string",
|
|
5181
|
+
"description": "The whiteboard's documentId."
|
|
5182
|
+
},
|
|
5183
|
+
"rows": {
|
|
5184
|
+
"type": "array",
|
|
5185
|
+
"items": {
|
|
5186
|
+
"type": "array",
|
|
5187
|
+
"items": {
|
|
5188
|
+
"type": "string"
|
|
5189
|
+
}
|
|
5190
|
+
},
|
|
5191
|
+
"description": "Rows as arrays of cell strings. If headers is omitted, the first row is treated as the header row."
|
|
5192
|
+
},
|
|
5193
|
+
"data": {
|
|
5194
|
+
"type": "array",
|
|
5195
|
+
"items": {
|
|
5196
|
+
"type": "object"
|
|
5197
|
+
},
|
|
5198
|
+
"description": "Alternative to rows: an array of objects; columns come from headers, or the first object's keys."
|
|
5199
|
+
},
|
|
5200
|
+
"headers": {
|
|
5201
|
+
"type": "array",
|
|
5202
|
+
"items": {
|
|
5203
|
+
"type": "string"
|
|
5204
|
+
},
|
|
5205
|
+
"description": "Optional column headers (rendered as a styled header row). For data, also selects and orders the columns."
|
|
5206
|
+
},
|
|
5207
|
+
"cellWidth": {
|
|
5208
|
+
"type": "number",
|
|
5209
|
+
"description": "Cell width in px, 60-400 (default 160)."
|
|
5210
|
+
},
|
|
5211
|
+
"cellHeight": {
|
|
5212
|
+
"type": "number",
|
|
5213
|
+
"description": "Cell height in px, 28-200 (default 40)."
|
|
5214
|
+
},
|
|
5215
|
+
"x": {
|
|
5216
|
+
"type": "number",
|
|
5217
|
+
"description": "Top-left x on the canvas. Omit to auto-place below existing content."
|
|
5218
|
+
},
|
|
5219
|
+
"y": {
|
|
5220
|
+
"type": "number",
|
|
5221
|
+
"description": "Top-left y on the canvas. Omit to auto-place."
|
|
5222
|
+
}
|
|
5223
|
+
},
|
|
5224
|
+
"required": [
|
|
5225
|
+
"documentId"
|
|
5226
|
+
]
|
|
5227
|
+
}
|
|
5228
|
+
}
|
|
5229
|
+
}
|
|
5230
|
+
},
|
|
5231
|
+
"responses": {
|
|
5232
|
+
"200": {
|
|
5233
|
+
"description": "Tool result (shape varies per tool — refer to the tool's docs for the exact return value).",
|
|
5234
|
+
"content": {
|
|
5235
|
+
"application/json": {
|
|
5236
|
+
"schema": {
|
|
5237
|
+
"type": "object",
|
|
5238
|
+
"additionalProperties": true
|
|
5239
|
+
}
|
|
5240
|
+
}
|
|
5241
|
+
}
|
|
5242
|
+
},
|
|
5243
|
+
"400": {
|
|
5244
|
+
"description": "Validation error.",
|
|
5245
|
+
"content": {
|
|
5246
|
+
"application/json": {
|
|
5247
|
+
"schema": {
|
|
5248
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
5249
|
+
}
|
|
5250
|
+
}
|
|
5251
|
+
}
|
|
5252
|
+
},
|
|
5253
|
+
"401": {
|
|
5254
|
+
"description": "Missing or invalid credentials.",
|
|
5255
|
+
"content": {
|
|
5256
|
+
"application/json": {
|
|
5257
|
+
"schema": {
|
|
5258
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
5259
|
+
}
|
|
5260
|
+
}
|
|
5261
|
+
}
|
|
5262
|
+
},
|
|
5263
|
+
"403": {
|
|
5264
|
+
"description": "Authenticated but lacking the required permission or feature flag.",
|
|
5265
|
+
"content": {
|
|
5266
|
+
"application/json": {
|
|
5267
|
+
"schema": {
|
|
5268
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
5269
|
+
}
|
|
5270
|
+
}
|
|
5271
|
+
}
|
|
5272
|
+
},
|
|
5273
|
+
"404": {
|
|
5274
|
+
"description": "Resource not found.",
|
|
5275
|
+
"content": {
|
|
5276
|
+
"application/json": {
|
|
5277
|
+
"schema": {
|
|
5278
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
5279
|
+
}
|
|
5280
|
+
}
|
|
5281
|
+
}
|
|
5282
|
+
},
|
|
5283
|
+
"422": {
|
|
5284
|
+
"description": "Body did not match the tool's input schema.",
|
|
5285
|
+
"content": {
|
|
5286
|
+
"application/json": {
|
|
5287
|
+
"schema": {
|
|
5288
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
5289
|
+
}
|
|
5290
|
+
}
|
|
5291
|
+
}
|
|
5292
|
+
},
|
|
5293
|
+
"500": {
|
|
5294
|
+
"description": "Server error.",
|
|
5295
|
+
"content": {
|
|
5296
|
+
"application/json": {
|
|
5297
|
+
"schema": {
|
|
5298
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
5299
|
+
}
|
|
5300
|
+
}
|
|
5301
|
+
}
|
|
5302
|
+
}
|
|
5303
|
+
}
|
|
5304
|
+
}
|
|
5305
|
+
},
|
|
4782
5306
|
"/tools/listWhiteboardStencils": {
|
|
4783
5307
|
"post": {
|
|
4784
5308
|
"summary": "listWhiteboardStencils",
|
|
@@ -5133,7 +5657,7 @@
|
|
|
5133
5657
|
},
|
|
5134
5658
|
"source": {
|
|
5135
5659
|
"type": "string",
|
|
5136
|
-
"description": "The diagram DSL / code to render."
|
|
5660
|
+
"description": "The diagram DSL / code to render. For type 'infographic', provide a plain-English description instead (the system designs the AntV infographic spec)."
|
|
5137
5661
|
},
|
|
5138
5662
|
"format": {
|
|
5139
5663
|
"type": "string",
|
|
@@ -5371,7 +5895,7 @@
|
|
|
5371
5895
|
"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.",
|
|
5372
5896
|
"operationId": "rebuildPlatformCatalogEmbeddings",
|
|
5373
5897
|
"tags": [
|
|
5374
|
-
"
|
|
5898
|
+
"settings"
|
|
5375
5899
|
],
|
|
5376
5900
|
"requestBody": {
|
|
5377
5901
|
"required": false,
|