Skip to main content
Glama

Update a document (deprecated)

update_diagram
Destructive

Deprecated: use update_document instead; this name is removed on 2027-04-30. It takes the same input as update_document.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYesThe document id.
revYesThe tab revision now, to pass as rev on the next update_document.
urlYesLink that opens the document in the livediagram editor.
lintYesThe diagram lint summary line of the tab as written.
textYesWhat the changeset did, one line per element, and how to revert it.
notesNoWhat the graph or Mermaid could not keep of what it asked (a nested subgraph folded).
tabIdYesThe tab that was edited.
documentIdYesThe document id again, under the name the other tools take it by.
changesetIdYesThe changeset written; null when nothing changed.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed13 schema fields changed
    • addedInput schema / additionalProperties
      Added value: +{}
    • removedInput schema / properties / dashboard
      Removed value: -{
      -  "description": "Replace mode on a Dashboard tab: its tabs, metrics, charts and notes rebuilt whole (the tab keeps its id and name). Only a Dashboard tab takes one.",
      -  "properties": {
      -    "charts": {
      -      "description": "Charts, two to a row; a Gantt takes a row of its own.",
      -      "items": {
      -        "properties": {
      -          "groupBy": {
      -            "description": "workload only: assignee (default), type, priority, status, or a field by name.",
      -            "type": "string"
      -          },
      -          "types": {
      -            "description": "Only these card types, by name.",
      -            "items": {
      -              "type": "string"
      -            },
      -            "type": "array"
      -          },
      -          "view": {
      -            "description": "gantt, calendar (by due date), start-calendar, workload (cards by a field), priority-matrix (priority by status), search.",
      -            "enum": [
      -              "gantt",
      -              "calendar",
      -              "start-calendar",
      -              "workload",
      -              "priority-matrix",
      -              "search"
      -            ],
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "view"
      -        ],
      -        "type": "object"
      -      },
      -      "type": "array"
      -    },
      -    "metrics": {
      -      "description": "Metric tiles, four to a row: count (cards), progress (percent done), people, types, priorities, due (overdue and due soon), unassigned, points (estimates), top-voted, stale.",
      -      "items": {
      -        "enum": [
      -          "count",
      -          "progress",
      -          "people",
      -          "types",
      -          "priorities",
      -          "due",
      -          "unassigned",
      -          "points",
      -          "top-voted",
      -          "stale"
      -        ],
      -        "type": "string"
      -      },
      -      "type": "array"
      -    },
      -    "notes": {
      -      "description": "Notes, three to a row.",
      -      "items": {
      -        "properties": {
      -          "text": {
      -            "description": "Its text; a line each.",
      -            "type": "string"
      -          },
      -          "title": {
      -            "description": "The note’s heading.",
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "title",
      -          "text"
      -        ],
      -        "type": "object"
      -      },
      -      "type": "array"
      -    },
      -    "tabs": {
      -      "anyOf": [
      -        {
      -          "items": {
      -            "type": "string"
      -          },
      -          "type": "array"
      -        },
      -        {
      -          "const": "every",
      -          "type": "string"
      -        }
      -      ],
      -      "description": "The Board and Sheet tabs it shows, by name (in create_document, other tabs of the same call), or \"every\"; two to a row."
      -    }
      -  },
      -  "type": "object"
      -}
    • removedInput schema / properties / documentId
      Removed value: -{
      -  "description": "The document to edit (from find_documents / read_document).",
      -  "type": "string"
      -}
    • removedInput schema / properties / edits
      Removed value: -{
      -  "description": "ops mode, instead of \"ops\": edit operations, one a line, applied all or nothing. The language the lint fixes are written in. Operations: add <kind> [id=<id>] key=value… [placement]; set <sel> key=value… [all]; rm <sel> [all] [keep-arrows]; move <sel> <placement>|by=dx,dy; connect <a> -> <b> [label=…] [line=straight|angled|curved]; rewire <arrow> from=<x> to=<y>; insert <kind> key=value… between <a> <b> (puts a node on the a→b arrow and makes room); wrap <sel…> in frame|lane [label=…] [tidy]; unwrap <frame>; order <sel> front|back; layout <sel> [style=flow|tree|mindmap] [direction=down|right]. Selectors: a ref or id, \"Label text\", type:sticky, shape:diamond, in:<frame>, a->b, from:<x>, to:<x>, downstream:<x>. Placement: right-of:<x> left-of:<x> above:<x> below:<x> [gap:<n>], after:<x>, inside:<frame>, align:<x>, at:x,y; inside:<frame> right-of:<x> places beside x in that frame. A box placed beside one inside a frame or lane joins it (the container grows); to stay outside, place it against the frame itself (below:<frame>), with align:<x> to line it up with a member (below:<frame> align:<x>). Keys: label= note= shape= fill=theme|red|orange|yellow|green|blue|violet (a sticky: classic|lemon|peach|rose|lilac|sky|mint|teal|slate) text=sm|md|lg border=solid|dashed|dotted line=…, or any stored field by name. Values with spaces are quoted: label=\"Sign in\". Coordinates are relative to the content origin, as the layout view prints them.",
      -  "maxLength": 40000,
      -  "type": "string"
      -}
    • removedInput schema / properties / elements
      Removed value: -{
      -  "description": "Replace mode: the full new element list. An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, desk, sofa, room, meeting-table, plant, bookshelf, water-cooler, coffee-machine, rug, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, final-state, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"stackDirection\" (row, column, grid), \"stackAlign\" (start, center, end), \"mindLook\" (person), \"sequenceAnim\" (play), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme, its border’s width and style included, so it outranks a \"strokeStyle\" given with it; ghost and outline are dashed, dotted and dash-dot as named: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\" (an ER line’s ends: one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (the start’s, when it differs: a one at one table, a many at the other). A Mermaid erDiagram draws these ends itself. A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. A sticky with \"esKind\" (domain-event, command, actor, policy, read-model, external-system, aggregate, hotspot) is an event-storming note of that kind (its paper, size and lane on a storm board): add one to a board with the edit `add sticky label=\"Courier\" esKind=actor`. type \"image\": a picture from the user's gallery: \"imageId\" is an id from list_images (one not in the gallery is refused); without it the element is a placeholder the user fills in the editor. \"objectFit\" contain (default, the whole picture) or cover (fills the box, cropping); \"alt\" describes it. A box in the picture's own proportions (its width and height from list_images, scaled) shows it uncropped. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. \"chartValues\": true prints each mark's number on the chart (a pie's as percentages when its values add up to 100; a column chart also names each column under it, so \"chartLegend\": false can drop the key). \"chartAxis\": true draws the value axis, round tick values and gridlines (not on a pie). A \"lineSeries\" entry with \"axis\": \"right\" is drawn against a scale of its own, labelled on the right, so a series in the thousands and one in the tens both read. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre); \"hub\" 3 to 8 satellites round its \"label\" (\"hubSpokes\" false hides the lines), \"onion\" 2 to 6 rings from the core out, \"chevrons\" 2 to 8 stages left to right. They draw their own rows in the colour ramp; do not draw them from separate shapes. shape \"pointer-note\": a note (\"label\") with a leader to a tip; \"pointerTip\" { x, y } is relative to its top-left, or \"attachedTo\" + \"attachAt\" pins the tip to that point of a node. shape \"diagram-key\": a legend of the tab's arrow line styles and tag colours; its rows fill in by themselves, \"keyMeanings\" maps a row id (\"line:dashed\", \"tag:<tag>\") to what it means. shape \"stack\": a container that lines up the elements whose centre is inside it; \"stackDirection\", \"stackColumns\" (2 to 6, grid), \"stackGap\" and \"stackPadding\" (0 to 64), \"stackAlign\"; place children anywhere inside and the editor lays them out. An org chart is quickest as a graph with style \"tree\" and a \"role\" on each node (see the graph tool). shape \"sequence\": a UML sequence diagram in one element; \"sequenceParticipants\" is [{ \"id\", \"label\", \"actor\"? }] (2 to 12, left to right), \"sequenceMessages\" [{ \"from\", \"to\", \"label\", \"kind\": call | async | reply }] (up to 60, top to bottom, from === to a self-call), \"sequenceNumbered\" true numbers them. It lays itself out; prefer it over loose shapes and arrows for a sequence diagram you will edit.",
      -  "items": {
      -    "additionalProperties": {},
      -    "propertyNames": {
      -      "type": "string"
      -    },
      -    "type": "object"
      -  },
      -  "type": "array"
      -}
    • removedInput schema / properties / graph
      Removed value: -{
      -  "description": "A node/edge graph the server turns into laid-out boxes + arrows — the easiest way to author. Provide one of graph, mermaid, elements or template.",
      -  "properties": {
      -    "direction": {
      -      "description": "Flow direction: \"down\" (top to bottom) or \"right\" (left to right). Default: auto.",
      -      "enum": [
      -        "down",
      -        "right"
      -      ],
      -      "type": "string"
      -    },
      -    "edges": {
      -      "description": "Directed connections between ids, at most 1000. An edge to an unknown id is dropped.",
      -      "items": {
      -        "properties": {
      -          "ends": {
      -            "description": "Which ends carry an arrowhead. Default: \"to\", except in a tree, whose lines show belonging and carry none.",
      -            "enum": [
      -              "to",
      -              "none",
      -              "both",
      -              "from"
      -            ],
      -            "type": "string"
      -          },
      -          "from": {
      -            "description": "Source node or group id.",
      -            "type": "string"
      -          },
      -          "label": {
      -            "description": "Optional text on the arrow, at most 40 characters.",
      -            "type": "string"
      -          },
      -          "line": {
      -            "description": "The stroke: solid (default), dashed (an event, a reply, an optional path) or thick.",
      -            "enum": [
      -              "solid",
      -              "dashed",
      -              "thick"
      -            ],
      -            "type": "string"
      -          },
      -          "to": {
      -            "description": "Target node or group id.",
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "from",
      -          "to"
      -        ],
      -        "type": "object"
      -      },
      -      "maxItems": 1000,
      -      "type": "array"
      -    },
      -    "groups": {
      -      "description": "Named clusters (e.g. \"Frontend\", \"Backend\"): each is drawn as a frame around its members and laid out as one block.",
      -      "items": {
      -        "properties": {
      -          "id": {
      -            "description": "Unique id, never also a node's (an edge may point at a group).",
      -            "type": "string"
      -          },
      -          "label": {
      -            "description": "The group's heading, drawn on its frame.",
      -            "type": "string"
      -          },
      -          "members": {
      -            "description": "The node ids inside this group (or set \"group\" on each node).",
      -            "items": {
      -              "type": "string"
      -            },
      -            "type": "array"
      -          }
      -        },
      -        "required": [
      -          "id"
      -        ],
      -        "type": "object"
      -      },
      -      "type": "array"
      -    },
      -    "key": {
      -      "anyOf": [
      -        {
      -          "type": "boolean"
      -        },
      -        {
      -          "additionalProperties": {
      -            "maxLength": 40,
      -            "type": "string"
      -          },
      -          "propertyNames": {
      -            "type": "string"
      -          },
      -          "type": "object"
      -        }
      -      ],
      -      "description": "A key beside the diagram: one miniature per shape kind it uses with what that shape means. true names them by default (a flowchart’s Start or end, Step, Decision...; else Component, Data store, Hub or bus, External system...); an object names them yourself by shape ({\"hexagon\": \"Event bus\", \"cylinder\": \"Database\"}), the rest by default."
      -    },
      -    "lines": {
      -      "description": "Arrow routing. Default: angled (elbows) for flow, tree and lanes; curved for mindmap and cycle.",
      -      "enum": [
      -        "straight",
      -        "angled",
      -        "curved"
      -      ],
      -      "type": "string"
      -    },
      -    "nodes": {
      -      "description": "The nodes (boxes), at most 500. Each needs a unique id. A larger diagram is better split into several.",
      -      "items": {
      -        "properties": {
      -          "esKind": {
      -            "description": "style \"storm\" only: the workshop note this node is (default domain-event). Its label is the note’s text, kept whole.",
      -            "enum": [
      -              "domain-event",
      -              "command",
      -              "actor",
      -              "policy",
      -              "read-model",
      -              "external-system",
      -              "aggregate",
      -              "hotspot"
      -            ],
      -            "type": "string"
      -          },
      -          "group": {
      -            "description": "Id of the group this node sits in; the same as listing it in that group's members.",
      -            "type": "string"
      -          },
      -          "icon": {
      -            "description": "An icon on the box: an id from search_icons (\"database\", \"aws-lambda\").",
      -            "type": "string"
      -          },
      -          "id": {
      -            "description": "Unique id the edges reference.",
      -            "type": "string"
      -          },
      -          "label": {
      -            "description": "The heading in the box, at most 40 characters. A longer label is shortened at a word boundary and its full text is kept in the node's note. The box is sized to fit the label.",
      -            "type": "string"
      -          },
      -          "note": {
      -            "description": "Detail behind the heading: longer explanation, context or a description. Stored as the element's note, which the editor shows on the element.",
      -            "type": "string"
      -          },
      -          "role": {
      -            "description": "A person's role: the node draws as the org-chart template's person card, the label (their name) in bold over the role, with a person icon unless \"icon\" names another.",
      -            "type": "string"
      -          },
      -          "shape": {
      -            "description": "Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, desk, sofa, room, meeting-table, plant, bookshelf, water-cooler, coffee-machine, rug, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, final-state, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. A \"circle\" with no label is a small solid dot, a state machine's start; \"final-state\" is its end, a bullseye.",
      -            "type": "string"
      -          },
      -          "tone": {
      -            "description": "How the box stands out: strong (filled in the accent), soft (tinted), muted (outlined and dashed: an exception or an optional step) or plain. Unset in a flowchart, a stadium the flow starts from is strong, one it ends on soft, and a diamond soft.",
      -            "enum": [
      -              "strong",
      -              "soft",
      -              "muted",
      -              "plain"
      -            ],
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "id"
      -        ],
      -        "type": "object"
      -      },
      -      "maxItems": 500,
      -      "minItems": 1,
      -      "type": "array"
      -    },
      -    "style": {
      -      "description": "Layout: \"flow\" (layered, the default; the layout for processes and systems: a decision’s side exit sits level beside it and a loop back runs round the outside), \"tree\" (a tidy hierarchy, the layout for org charts), \"mindmap\" (radial around the first node), \"lanes\" (a swimlane diagram: each group a lane, the flow left to right across them) or \"cycle\" (a ring in node order, clockwise from the top; a node with no edge sits at its centre) or \"storm\" (an event-storming board: each node a workshop note of its esKind, one column per domain event in the order the edges imply, each kind on its own lane, no arrows; a new tab becomes an event-storming board) or \"sequence\" (a sequence diagram: the nodes the participants, a node shaped actor a stick figure; the edges the messages in order, a dashed edge a reply; Mermaid sequenceDiagram text says more: activations, notes, alt/loop fragments). With groups the layout is flow unless it is lanes.",
      -      "enum": [
      -        "flow",
      -        "tree",
      -        "mindmap",
      -        "lanes",
      -        "cycle",
      -        "storm",
      -        "sequence"
      -      ],
      -      "type": "string"
      -    },
      -    "subtitle": {
      -      "description": "A muted caption under the title: what the diagram shows and how to read it.",
      -      "maxLength": 300,
      -      "type": "string"
      -    },
      -    "title": {
      -      "description": "A heading above the diagram, left aligned, as every template has.",
      -      "maxLength": 120,
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "nodes",
      -    "edges"
      -  ],
      -  "type": "object"
      -}
    • removedInput schema / properties / layout
      Removed value: -{
      -  "description": "How to position elements. \"preserve\" keeps the exact x/y you give — use it for a deliberate shape (a cycle as a ring, a tree, a grid). \"auto\" arranges a clean directed graph for you. Omit to auto-detect: a real arrangement is kept; nodes left piled at one point get laid out. Supporting text is always kept in place either way.",
      -  "enum": [
      -    "auto",
      -    "preserve"
      -  ],
      -  "type": "string"
      -}
    • removedInput schema / properties / mermaid
      Removed value: -{
      -  "description": "The diagram as Mermaid text: a flowchart (graph / flowchart, with subgraphs), a state diagram (stateDiagram), an ER diagram (erDiagram: crow's-foot ends from the cardinality tokens, an entity alias in brackets is its title, BOOK_AUTHOR[Book author]) or a sequence diagram (sequenceDiagram: participant / actor, ->> calls, -) async, -->> replies, +/- activations, Note over, alt/else, loop, opt, par, autonumber, title). Parsed into the same graph as the \"graph\" input: subgraphs become groups, the direction is kept, and the same label limit applies; a sequence diagram is drawn with lifelines, activation bars, notes and fragments. Front matter (---, title: Text, ---) titles any of them. Provide one of graph, mermaid, elements or template.",
      -  "type": "string"
      -}
    • removedInput schema / properties / mode
      Removed value: -{
      -  "description": "\"replace\" the whole tab, or change it in place: \"ops\" (an ops list, or \"edits\" text); \"edits\" names the same mode by its text form.",
      -  "enum": [
      -    "replace",
      -    "ops",
      -    "edits"
      -  ],
      -  "type": "string"
      -}
    • removedInput schema / properties / ops
      Removed value: -{
      -  "description": "ops mode: ordered add / update / remove against existing elements, by id or ref.",
      -  "items": {
      -    "properties": {
      -      "element": {
      -        "additionalProperties": {},
      -        "description": "add: the full new element, with a unique id. update: only the fields to change, merged over the existing element. Not used by remove. Same format as \"elements\".",
      -        "propertyNames": {
      -          "type": "string"
      -        },
      -        "type": "object"
      -      },
      -      "elementId": {
      -        "description": "update / remove: the existing element to change, by its id or the ref read_document prints.",
      -        "type": "string"
      -      },
      -      "op": {
      -        "description": "\"add\" a new element, \"update\" fields of an existing one, or \"remove\" one.",
      -        "enum": [
      -          "add",
      -          "update",
      -          "remove"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op"
      -    ],
      -    "type": "object"
      -  },
      -  "type": "array"
      -}
    • removedInput schema / properties / rev
      Removed value: -{
      -  "description": "ops mode: the tab revision read_document returned. An element a person changed since is then a conflict, never silently overwritten; read again and redo the edit.",
      -  "maximum": 9007199254740991,
      -  "minimum": 0,
      -  "type": "integer"
      -}
    • removedInput schema / properties / tabId
      Removed value: -{
      -  "description": "Which tab to edit; defaults to the first.",
      -  "type": "string"
      -}
    • removedInput schema / required
      Removed value: -[
      -  "documentId",
      -  "mode"
      -]
  2. Changed1 schema field changed
    • changedInput schema / properties / elements / description
      Previous value: -"Replace mode: the full new element list. An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, desk, sofa, room, meeting-table, plant, bookshelf, water-cooler, coffee-machine, rug, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, final-state, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"stackDirection\" (row, column, grid), \"stackAlign\" (start, center, end), \"mindLook\" (person), \"sequenceAnim\" (play), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme, its border’s width and style included, so it outranks a \"strokeStyle\" given with it; ghost and outline are dashed, dotted and dash-dot as named: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\" (an ER line’s ends: one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (the start’s, when it differs: a one at one table, a many at the other). A Mermaid erDiagram draws these ends itself. A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. A sticky with \"esKind\" (domain-event, command, actor, policy, read-model, external-system, aggregate, hotspot) is an event-storming note of that kind (its paper, size and lane on a storm board): add one to a board with the edit `add sticky label=\"Courier\" esKind=actor`. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. \"chartValues\": true prints each mark's number on the chart (a pie's as percentages when its values add up to 100; a column chart also names each column under it, so \"chartLegend\": false can drop the key). \"chartAxis\": true draws the value axis, round tick values and gridlines (not on a pie). A \"lineSeries\" entry with \"axis\": \"right\" is drawn against a scale of its own, labelled on the right, so a series in the thousands and one in the tens both read. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre); \"hub\" 3 to 8 satellites round its \"label\" (\"hubSpokes\" false hides the lines), \"onion\" 2 to 6 rings from the core out, \"chevrons\" 2 to 8 stages left to right. They draw their own rows in the colour ramp; do not draw them from separate shapes. shape \"pointer-note\": a note (\"label\") with a leader to a tip; \"pointerTip\" { x, y } is relative to its top-left, or \"attachedTo\" + \"attachAt\" pins the tip to that point of a node. shape \"diagram-key\": a legend of the tab's arrow line styles and tag colours; its rows fill in by themselves, \"keyMeanings\" maps a row id (\"line:dashed\", \"tag:<tag>\") to what it means. shape \"stack\": a container that lines up the elements whose centre is inside it; \"stackDirection\", \"stackColumns\" (2 to 6, grid), \"stackGap\" and \"stackPadding\" (0 to 64), \"stackAlign\"; place children anywhere inside and the editor lays them out. An org chart is quickest as a graph with style \"tree\" and a \"role\" on each node (see the graph tool). shape \"sequence\": a UML sequence diagram in one element; \"sequenceParticipants\" is [{ \"id\", \"label\", \"actor\"? }] (2 to 12, left to right), \"sequenceMessages\" [{ \"from\", \"to\", \"label\", \"kind\": call | async | reply }] (up to 60, top to bottom, from === to a self-call), \"sequenceNumbered\" true numbers them. It lays itself out; prefer it over loose shapes and arrows for a sequence diagram you will edit."New value: +"Replace mode: the full new element list. An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, desk, sofa, room, meeting-table, plant, bookshelf, water-cooler, coffee-machine, rug, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, final-state, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"stackDirection\" (row, column, grid), \"stackAlign\" (start, center, end), \"mindLook\" (person), \"sequenceAnim\" (play), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme, its border’s width and style included, so it outranks a \"strokeStyle\" given with it; ghost and outline are dashed, dotted and dash-dot as named: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\" (an ER line’s ends: one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (the start’s, when it differs: a one at one table, a many at the other). A Mermaid erDiagram draws these ends itself. A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. A sticky with \"esKind\" (domain-event, command, actor, policy, read-model, external-system, aggregate, hotspot) is an event-storming note of that kind (its paper, size and lane on a storm board): add one to a board with the edit `add sticky label=\"Courier\" esKind=actor`. type \"image\": a picture from the user's gallery: \"imageId\" is an id from list_images (one not in the gallery is refused); without it the element is a placeholder the user fills in the editor. \"objectFit\" contain (default, the whole picture) or cover (fills the box, cropping); \"alt\" describes it. A box in the picture's own proportions (its width and height from list_images, scaled) shows it uncropped. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. \"chartValues\": true prints each mark's number on the chart (a pie's as percentages when its values add up to 100; a column chart also names each column under it, so \"chartLegend\": false can drop the key). \"chartAxis\": true draws the value axis, round tick values and gridlines (not on a pie). A \"lineSeries\" entry with \"axis\": \"right\" is drawn against a scale of its own, labelled on the right, so a series in the thousands and one in the tens both read. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre); \"hub\" 3 to 8 satellites round its \"label\" (\"hubSpokes\" false hides the lines), \"onion\" 2 to 6 rings from the core out, \"chevrons\" 2 to 8 stages left to right. They draw their own rows in the colour ramp; do not draw them from separate shapes. shape \"pointer-note\": a note (\"label\") with a leader to a tip; \"pointerTip\" { x, y } is relative to its top-left, or \"attachedTo\" + \"attachAt\" pins the tip to that point of a node. shape \"diagram-key\": a legend of the tab's arrow line styles and tag colours; its rows fill in by themselves, \"keyMeanings\" maps a row id (\"line:dashed\", \"tag:<tag>\") to what it means. shape \"stack\": a container that lines up the elements whose centre is inside it; \"stackDirection\", \"stackColumns\" (2 to 6, grid), \"stackGap\" and \"stackPadding\" (0 to 64), \"stackAlign\"; place children anywhere inside and the editor lays them out. An org chart is quickest as a graph with style \"tree\" and a \"role\" on each node (see the graph tool). shape \"sequence\": a UML sequence diagram in one element; \"sequenceParticipants\" is [{ \"id\", \"label\", \"actor\"? }] (2 to 12, left to right), \"sequenceMessages\" [{ \"from\", \"to\", \"label\", \"kind\": call | async | reply }] (up to 60, top to bottom, from === to a self-call), \"sequenceNumbered\" true numbers them. It lays itself out; prefer it over loose shapes and arrows for a sequence diagram you will edit."
  3. Changed3 schema fields changed
    • changedInput schema / properties / elements / description
      Previous value: -"Replace mode: the full new element list. An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, desk, sofa, room, meeting-table, plant, bookshelf, water-cooler, coffee-machine, rug, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"stackDirection\" (row, column, grid), \"stackAlign\" (start, center, end), \"mindLook\" (person), \"sequenceAnim\" (play), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme, its border’s width and style included, so it outranks a \"strokeStyle\" given with it; ghost and outline are dashed, dotted and dash-dot as named: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\" (an ER line’s ends: one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (the start’s, when it differs: a one at one table, a many at the other). A Mermaid erDiagram draws these ends itself. A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. \"chartValues\": true prints each mark's number on the chart (a pie's as percentages when its values add up to 100; a column chart also names each column under it, so \"chartLegend\": false can drop the key). A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre); \"hub\" 3 to 8 satellites round its \"label\" (\"hubSpokes\" false hides the lines), \"onion\" 2 to 6 rings from the core out, \"chevrons\" 2 to 8 stages left to right. They draw their own rows in the colour ramp; do not draw them from separate shapes. shape \"pointer-note\": a note (\"label\") with a leader to a tip; \"pointerTip\" { x, y } is relative to its top-left, or \"attachedTo\" + \"attachAt\" pins the tip to that point of a node. shape \"diagram-key\": a legend of the tab's arrow line styles and tag colours; its rows fill in by themselves, \"keyMeanings\" maps a row id (\"line:dashed\", \"tag:<tag>\") to what it means. shape \"stack\": a container that lines up the elements whose centre is inside it; \"stackDirection\", \"stackColumns\" (2 to 6, grid), \"stackGap\" and \"stackPadding\" (0 to 64), \"stackAlign\"; place children anywhere inside and the editor lays them out. An org chart is quickest as a graph with style \"tree\" and a \"role\" on each node (see the graph tool). shape \"sequence\": a UML sequence diagram in one element; \"sequenceParticipants\" is [{ \"id\", \"label\", \"actor\"? }] (2 to 12, left to right), \"sequenceMessages\" [{ \"from\", \"to\", \"label\", \"kind\": call | async | reply }] (up to 60, top to bottom, from === to a self-call), \"sequenceNumbered\" true numbers them. It lays itself out; prefer it over loose shapes and arrows for a sequence diagram you will edit."New value: +"Replace mode: the full new element list. An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, desk, sofa, room, meeting-table, plant, bookshelf, water-cooler, coffee-machine, rug, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, final-state, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"stackDirection\" (row, column, grid), \"stackAlign\" (start, center, end), \"mindLook\" (person), \"sequenceAnim\" (play), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme, its border’s width and style included, so it outranks a \"strokeStyle\" given with it; ghost and outline are dashed, dotted and dash-dot as named: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\" (an ER line’s ends: one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (the start’s, when it differs: a one at one table, a many at the other). A Mermaid erDiagram draws these ends itself. A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. A sticky with \"esKind\" (domain-event, command, actor, policy, read-model, external-system, aggregate, hotspot) is an event-storming note of that kind (its paper, size and lane on a storm board): add one to a board with the edit `add sticky label=\"Courier\" esKind=actor`. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. \"chartValues\": true prints each mark's number on the chart (a pie's as percentages when its values add up to 100; a column chart also names each column under it, so \"chartLegend\": false can drop the key). \"chartAxis\": true draws the value axis, round tick values and gridlines (not on a pie). A \"lineSeries\" entry with \"axis\": \"right\" is drawn against a scale of its own, labelled on the right, so a series in the thousands and one in the tens both read. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre); \"hub\" 3 to 8 satellites round its \"label\" (\"hubSpokes\" false hides the lines), \"onion\" 2 to 6 rings from the core out, \"chevrons\" 2 to 8 stages left to right. They draw their own rows in the colour ramp; do not draw them from separate shapes. shape \"pointer-note\": a note (\"label\") with a leader to a tip; \"pointerTip\" { x, y } is relative to its top-left, or \"attachedTo\" + \"attachAt\" pins the tip to that point of a node. shape \"diagram-key\": a legend of the tab's arrow line styles and tag colours; its rows fill in by themselves, \"keyMeanings\" maps a row id (\"line:dashed\", \"tag:<tag>\") to what it means. shape \"stack\": a container that lines up the elements whose centre is inside it; \"stackDirection\", \"stackColumns\" (2 to 6, grid), \"stackGap\" and \"stackPadding\" (0 to 64), \"stackAlign\"; place children anywhere inside and the editor lays them out. An org chart is quickest as a graph with style \"tree\" and a \"role\" on each node (see the graph tool). shape \"sequence\": a UML sequence diagram in one element; \"sequenceParticipants\" is [{ \"id\", \"label\", \"actor\"? }] (2 to 12, left to right), \"sequenceMessages\" [{ \"from\", \"to\", \"label\", \"kind\": call | async | reply }] (up to 60, top to bottom, from === to a self-call), \"sequenceNumbered\" true numbers them. It lays itself out; prefer it over loose shapes and arrows for a sequence diagram you will edit."
    • changedInput schema / properties / graph / properties / groups / items / properties / id / description
      Previous value: -"Unique id (an edge may point at a group)."New value: +"Unique id, never also a node's (an edge may point at a group)."
    • changedInput schema / properties / graph / properties / nodes / items / properties / shape / description
      Previous value: -"Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, desk, sofa, room, meeting-table, plant, bookshelf, water-cooler, coffee-machine, rug, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. A \"circle\" with no label is a small solid dot, a state machine's start or end."New value: +"Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, desk, sofa, room, meeting-table, plant, bookshelf, water-cooler, coffee-machine, rug, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, final-state, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. A \"circle\" with no label is a small solid dot, a state machine's start; \"final-state\" is its end, a bullseye."
  4. Changed7 schema fields changed
    • changedInput schema / properties / edits / description
      Previous value: -"ops mode, instead of \"ops\": edit operations, one a line, applied all or nothing. The language the lint fixes are written in. Operations: add <kind> [id=<id>] key=value… [placement]; set <sel> key=value… [all]; rm <sel> [all] [keep-arrows]; move <sel> <placement>|by=dx,dy; connect <a> -> <b> [label=…] [line=straight|angled|curved]; rewire <arrow> from=<x> to=<y>; insert <kind> key=value… between <a> <b> (puts a node on the a→b arrow and makes room); wrap <sel…> in frame|lane [label=…] [tidy]; unwrap <frame>; order <sel> front|back; layout <sel> [style=flow|tree|mindmap] [direction=down|right]. Selectors: a ref or id, \"Label text\", type:sticky, shape:diamond, in:<frame>, a->b, from:<x>, to:<x>, downstream:<x>. Placement: right-of:<x> left-of:<x> above:<x> below:<x> [gap:<n>], after:<x>, inside:<frame>, align:<x>, at:x,y. Keys: label= note= shape= fill=theme|red|orange|yellow|green|blue|violet (a sticky: classic|lemon|peach|rose|lilac|sky|mint|teal|slate) text=sm|md|lg border=solid|dashed|dotted line=…, or any stored field by name. Values with spaces are quoted: label=\"Sign in\". Coordinates are relative to the content origin, as the layout view prints them."New value: +"ops mode, instead of \"ops\": edit operations, one a line, applied all or nothing. The language the lint fixes are written in. Operations: add <kind> [id=<id>] key=value… [placement]; set <sel> key=value… [all]; rm <sel> [all] [keep-arrows]; move <sel> <placement>|by=dx,dy; connect <a> -> <b> [label=…] [line=straight|angled|curved]; rewire <arrow> from=<x> to=<y>; insert <kind> key=value… between <a> <b> (puts a node on the a→b arrow and makes room); wrap <sel…> in frame|lane [label=…] [tidy]; unwrap <frame>; order <sel> front|back; layout <sel> [style=flow|tree|mindmap] [direction=down|right]. Selectors: a ref or id, \"Label text\", type:sticky, shape:diamond, in:<frame>, a->b, from:<x>, to:<x>, downstream:<x>. Placement: right-of:<x> left-of:<x> above:<x> below:<x> [gap:<n>], after:<x>, inside:<frame>, align:<x>, at:x,y; inside:<frame> right-of:<x> places beside x in that frame. A box placed beside one inside a frame or lane joins it (the container grows); to stay outside, place it against the frame itself (below:<frame>), with align:<x> to line it up with a member (below:<frame> align:<x>). Keys: label= note= shape= fill=theme|red|orange|yellow|green|blue|violet (a sticky: classic|lemon|peach|rose|lilac|sky|mint|teal|slate) text=sm|md|lg border=solid|dashed|dotted line=…, or any stored field by name. Values with spaces are quoted: label=\"Sign in\". Coordinates are relative to the content origin, as the layout view prints them."
    • changedInput schema / properties / elements / description
      Previous value: -"Replace mode: the full new element list. An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, desk, sofa, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"stackDirection\" (row, column, grid), \"stackAlign\" (start, center, end), \"mindLook\" (person), \"sequenceAnim\" (play), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme, its border’s width and style included, so it outranks a \"strokeStyle\" given with it; ghost and outline are dashed, dotted and dash-dot as named: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\". A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre); \"hub\" 3 to 8 satellites round its \"label\" (\"hubSpokes\" false hides the lines), \"onion\" 2 to 6 rings from the core out, \"chevrons\" 2 to 8 stages left to right. They draw their own rows in the colour ramp; do not draw them from separate shapes. shape \"pointer-note\": a note (\"label\") with a leader to a tip; \"pointerTip\" { x, y } is relative to its top-left, or \"attachedTo\" + \"attachAt\" pins the tip to that point of a node. shape \"diagram-key\": a legend of the tab's arrow line styles and tag colours; its rows fill in by themselves, \"keyMeanings\" maps a row id (\"line:dashed\", \"tag:<tag>\") to what it means. shape \"stack\": a container that lines up the elements whose centre is inside it; \"stackDirection\", \"stackColumns\" (2 to 6, grid), \"stackGap\" and \"stackPadding\" (0 to 64), \"stackAlign\"; place children anywhere inside and the editor lays them out. An org chart is mind nodes with \"mindLook\" person: \"label\" the name, \"pageSubtitle\" the role, \"mindParentId\" the manager, \"mindFlow\" downward on the root. shape \"sequence\": a UML sequence diagram in one element; \"sequenceParticipants\" is [{ \"id\", \"label\", \"actor\"? }] (2 to 12, left to right), \"sequenceMessages\" [{ \"from\", \"to\", \"label\", \"kind\": call | async | reply }] (up to 60, top to bottom, from === to a self-call), \"sequenceNumbered\" true numbers them. It lays itself out; prefer it over loose shapes and arrows for a sequence diagram you will edit."New value: +"Replace mode: the full new element list. An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, desk, sofa, room, meeting-table, plant, bookshelf, water-cooler, coffee-machine, rug, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow, one, zero-or-one, many, zero-or-many, one-or-many), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"stackDirection\" (row, column, grid), \"stackAlign\" (start, center, end), \"mindLook\" (person), \"sequenceAnim\" (play), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme, its border’s width and style included, so it outranks a \"strokeStyle\" given with it; ghost and outline are dashed, dotted and dash-dot as named: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\" (an ER line’s ends: one, zero-or-one, many, zero-or-many, one-or-many), \"arrowheadStartShape\" (the start’s, when it differs: a one at one table, a many at the other). A Mermaid erDiagram draws these ends itself. A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. \"chartValues\": true prints each mark's number on the chart (a pie's as percentages when its values add up to 100; a column chart also names each column under it, so \"chartLegend\": false can drop the key). A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre); \"hub\" 3 to 8 satellites round its \"label\" (\"hubSpokes\" false hides the lines), \"onion\" 2 to 6 rings from the core out, \"chevrons\" 2 to 8 stages left to right. They draw their own rows in the colour ramp; do not draw them from separate shapes. shape \"pointer-note\": a note (\"label\") with a leader to a tip; \"pointerTip\" { x, y } is relative to its top-left, or \"attachedTo\" + \"attachAt\" pins the tip to that point of a node. shape \"diagram-key\": a legend of the tab's arrow line styles and tag colours; its rows fill in by themselves, \"keyMeanings\" maps a row id (\"line:dashed\", \"tag:<tag>\") to what it means. shape \"stack\": a container that lines up the elements whose centre is inside it; \"stackDirection\", \"stackColumns\" (2 to 6, grid), \"stackGap\" and \"stackPadding\" (0 to 64), \"stackAlign\"; place children anywhere inside and the editor lays them out. An org chart is quickest as a graph with style \"tree\" and a \"role\" on each node (see the graph tool). shape \"sequence\": a UML sequence diagram in one element; \"sequenceParticipants\" is [{ \"id\", \"label\", \"actor\"? }] (2 to 12, left to right), \"sequenceMessages\" [{ \"from\", \"to\", \"label\", \"kind\": call | async | reply }] (up to 60, top to bottom, from === to a self-call), \"sequenceNumbered\" true numbers them. It lays itself out; prefer it over loose shapes and arrows for a sequence diagram you will edit."
    • addedInput schema / properties / graph / properties / edges / items / properties / ends
      Added value: +{
      +  "description": "Which ends carry an arrowhead. Default: \"to\", except in a tree, whose lines show belonging and carry none.",
      +  "enum": [
      +    "to",
      +    "none",
      +    "both",
      +    "from"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / graph / properties / nodes / items / properties / role
      Added value: +{
      +  "description": "A person's role: the node draws as the org-chart template's person card, the label (their name) in bold over the role, with a person icon unless \"icon\" names another.",
      +  "type": "string"
      +}
    • changedInput schema / properties / graph / properties / nodes / items / properties / shape / description
      Previous value: -"Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, desk, sofa, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end."New value: +"Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, desk, sofa, room, meeting-table, plant, bookshelf, water-cooler, coffee-machine, rug, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. A \"circle\" with no label is a small solid dot, a state machine's start or end."
    • changedInput schema / properties / mermaid / description
      Previous value: -"The diagram as Mermaid text: a flowchart (graph / flowchart, with subgraphs), a state diagram (stateDiagram), an ER diagram (erDiagram) or a sequence diagram (sequenceDiagram: participant / actor, ->> calls, -) async, -->> replies, +/- activations, Note over, alt/else, loop, opt, par, autonumber, title). Parsed into the same graph as the \"graph\" input: subgraphs become groups, the direction is kept, and the same label limit applies; a sequence diagram is drawn with lifelines, activation bars, notes and fragments. Front matter (---, title: Text, ---) titles any of them. Provide one of graph, mermaid, elements or template."New value: +"The diagram as Mermaid text: a flowchart (graph / flowchart, with subgraphs), a state diagram (stateDiagram), an ER diagram (erDiagram: crow's-foot ends from the cardinality tokens, an entity alias in brackets is its title, BOOK_AUTHOR[Book author]) or a sequence diagram (sequenceDiagram: participant / actor, ->> calls, -) async, -->> replies, +/- activations, Note over, alt/else, loop, opt, par, autonumber, title). Parsed into the same graph as the \"graph\" input: subgraphs become groups, the direction is kept, and the same label limit applies; a sequence diagram is drawn with lifelines, activation bars, notes and fragments. Front matter (---, title: Text, ---) titles any of them. Provide one of graph, mermaid, elements or template."
    • addedOutput schema / properties / notes
      Added value: +{
      +  "description": "What the graph or Mermaid could not keep of what it asked (a nested subgraph folded).",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  5. Changed2 schema fields changed
    • changedInput schema / properties / elements / description
      Previous value: -"Replace mode: the full new element list. An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"stackDirection\" (row, column, grid), \"stackAlign\" (start, center, end), \"mindLook\" (person), \"sequenceAnim\" (play), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme, its border’s width and style included, so it outranks a \"strokeStyle\" given with it; ghost and outline are dashed, dotted and dash-dot as named: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\". A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre); \"hub\" 3 to 8 satellites round its \"label\" (\"hubSpokes\" false hides the lines), \"onion\" 2 to 6 rings from the core out, \"chevrons\" 2 to 8 stages left to right. They draw their own rows in the colour ramp; do not draw them from separate shapes. shape \"pointer-note\": a note (\"label\") with a leader to a tip; \"pointerTip\" { x, y } is relative to its top-left, or \"attachedTo\" + \"attachAt\" pins the tip to that point of a node. shape \"diagram-key\": a legend of the tab's arrow line styles and tag colours; its rows fill in by themselves, \"keyMeanings\" maps a row id (\"line:dashed\", \"tag:<tag>\") to what it means. shape \"stack\": a container that lines up the elements whose centre is inside it; \"stackDirection\", \"stackColumns\" (2 to 6, grid), \"stackGap\" and \"stackPadding\" (0 to 64), \"stackAlign\"; place children anywhere inside and the editor lays them out. An org chart is mind nodes with \"mindLook\" person: \"label\" the name, \"pageSubtitle\" the role, \"mindParentId\" the manager, \"mindFlow\" downward on the root. shape \"sequence\": a UML sequence diagram in one element; \"sequenceParticipants\" is [{ \"id\", \"label\", \"actor\"? }] (2 to 12, left to right), \"sequenceMessages\" [{ \"from\", \"to\", \"label\", \"kind\": call | async | reply }] (up to 60, top to bottom, from === to a self-call), \"sequenceNumbered\" true numbers them. It lays itself out; prefer it over loose shapes and arrows for a sequence diagram you will edit."New value: +"Replace mode: the full new element list. An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, desk, sofa, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"stackDirection\" (row, column, grid), \"stackAlign\" (start, center, end), \"mindLook\" (person), \"sequenceAnim\" (play), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme, its border’s width and style included, so it outranks a \"strokeStyle\" given with it; ghost and outline are dashed, dotted and dash-dot as named: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\". A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre); \"hub\" 3 to 8 satellites round its \"label\" (\"hubSpokes\" false hides the lines), \"onion\" 2 to 6 rings from the core out, \"chevrons\" 2 to 8 stages left to right. They draw their own rows in the colour ramp; do not draw them from separate shapes. shape \"pointer-note\": a note (\"label\") with a leader to a tip; \"pointerTip\" { x, y } is relative to its top-left, or \"attachedTo\" + \"attachAt\" pins the tip to that point of a node. shape \"diagram-key\": a legend of the tab's arrow line styles and tag colours; its rows fill in by themselves, \"keyMeanings\" maps a row id (\"line:dashed\", \"tag:<tag>\") to what it means. shape \"stack\": a container that lines up the elements whose centre is inside it; \"stackDirection\", \"stackColumns\" (2 to 6, grid), \"stackGap\" and \"stackPadding\" (0 to 64), \"stackAlign\"; place children anywhere inside and the editor lays them out. An org chart is mind nodes with \"mindLook\" person: \"label\" the name, \"pageSubtitle\" the role, \"mindParentId\" the manager, \"mindFlow\" downward on the root. shape \"sequence\": a UML sequence diagram in one element; \"sequenceParticipants\" is [{ \"id\", \"label\", \"actor\"? }] (2 to 12, left to right), \"sequenceMessages\" [{ \"from\", \"to\", \"label\", \"kind\": call | async | reply }] (up to 60, top to bottom, from === to a self-call), \"sequenceNumbered\" true numbers them. It lays itself out; prefer it over loose shapes and arrows for a sequence diagram you will edit."
    • changedInput schema / properties / graph / properties / nodes / items / properties / shape / description
      Previous value: -"Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end."New value: +"Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, fence, desk, sofa, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end."
  6. Changed2 schema fields changed
    • changedInput schema / properties / elements / description
      Previous value: -"Replace mode: the full new element list. An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, boundary, layer-stack, pyramid, cycle, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme, its border’s width and style included, so it outranks a \"strokeStyle\" given with it; ghost and outline are dashed, dotted and dash-dot as named: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\". A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre). They draw their own rows in the colour ramp; do not draw them from separate shapes."New value: +"Replace mode: the full new element list. An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"stackDirection\" (row, column, grid), \"stackAlign\" (start, center, end), \"mindLook\" (person), \"sequenceAnim\" (play), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme, its border’s width and style included, so it outranks a \"strokeStyle\" given with it; ghost and outline are dashed, dotted and dash-dot as named: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\". A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre); \"hub\" 3 to 8 satellites round its \"label\" (\"hubSpokes\" false hides the lines), \"onion\" 2 to 6 rings from the core out, \"chevrons\" 2 to 8 stages left to right. They draw their own rows in the colour ramp; do not draw them from separate shapes. shape \"pointer-note\": a note (\"label\") with a leader to a tip; \"pointerTip\" { x, y } is relative to its top-left, or \"attachedTo\" + \"attachAt\" pins the tip to that point of a node. shape \"diagram-key\": a legend of the tab's arrow line styles and tag colours; its rows fill in by themselves, \"keyMeanings\" maps a row id (\"line:dashed\", \"tag:<tag>\") to what it means. shape \"stack\": a container that lines up the elements whose centre is inside it; \"stackDirection\", \"stackColumns\" (2 to 6, grid), \"stackGap\" and \"stackPadding\" (0 to 64), \"stackAlign\"; place children anywhere inside and the editor lays them out. An org chart is mind nodes with \"mindLook\" person: \"label\" the name, \"pageSubtitle\" the role, \"mindParentId\" the manager, \"mindFlow\" downward on the root. shape \"sequence\": a UML sequence diagram in one element; \"sequenceParticipants\" is [{ \"id\", \"label\", \"actor\"? }] (2 to 12, left to right), \"sequenceMessages\" [{ \"from\", \"to\", \"label\", \"kind\": call | async | reply }] (up to 60, top to bottom, from === to a self-call), \"sequenceNumbered\" true numbers them. It lays itself out; prefer it over loose shapes and arrows for a sequence diagram you will edit."
    • changedInput schema / properties / graph / properties / nodes / items / properties / shape / description
      Previous value: -"Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, boundary, layer-stack, pyramid, cycle, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end."New value: +"Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, pointer-note, diagram-key, stack, sequence, boundary, layer-stack, pyramid, cycle, hub, onion, chevrons, stat-row, process, site-header, mode-button, portal, tab-window, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end."
  7. Changed3 schema fields changed
    • changedInput schema / properties / elements / description
      Previous value: -"Replace mode: the full new element list. An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, boundary, layer-stack, pyramid, cycle, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\". A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre). They draw their own rows in the colour ramp; do not draw them from separate shapes."New value: +"Replace mode: the full new element list. An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, boundary, layer-stack, pyramid, cycle, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme, its border’s width and style included, so it outranks a \"strokeStyle\" given with it; ghost and outline are dashed, dotted and dash-dot as named: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\". A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre). They draw their own rows in the colour ramp; do not draw them from separate shapes."
    • changedInput schema / properties / mode / description
      Previous value: -"\"replace\" the whole tab, or apply granular \"ops\" (or \"edits\")."New value: +"\"replace\" the whole tab, or change it in place: \"ops\" (an ops list, or \"edits\" text); \"edits\" names the same mode by its text form."
    • changedInput schema / properties / mode / enum
      Previous value: -[
      -  "replace",
      -  "ops"
      -]New value: +[
      +  "replace",
      +  "ops",
      +  "edits"
      +]
  8. Changed2 schema fields changed
    • changedInput schema / properties / elements / description
      Previous value: -"Replace mode: the full new element list. An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\". A field a type does not have, or a value off its list, is refused naming what it takes. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title."New value: +"Replace mode: the full new element list. An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, boundary, layer-stack, pyramid, cycle, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node; it is centred in its box, so a left-aligned heading or caption sets \"textAlignX\": \"left\". type \"freehand\" is a HAND-DRAWN stroke: give \"points\" as canvas coordinates, [[x, y], ...] in drawing order (the box is taken from them), with \"closed\" true to close and fill the shape, and \"penColour\" (ink, grey, blue, red, orange, yellow, green, teal, violet, pink). A hand-drawn board starts from the \"whiteboard\" template, a tab in Draw mode: underline a heading, ring a word or draw a doodle with a few strokes, a point every 10 to 20 px along a curve; an arrow between boxes stays a pinned \"arrow\", which a \"sketch\" finish draws by hand and which stays attached. Any box may carry \"rotation\" in degrees, a small tilt (-4 to 4) reading as placed by hand. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full), \"accentEdge\" (left, top, bottom), \"cardMedia\" (badge, tile, initial), \"chipLook\" (solid, ink, outline, tinted, quiet), \"attachAt\" (top-left, top, top-right, right, bottom-right, bottom, bottom-left, left), \"boundaryStyle\" (tab, inset, c4), \"pyramidVariant\" (pyramid, inverted, funnel), \"iconWeight\" (thin, regular, bold), \"font\" (inter, poppins, nunito, oswald, space-grotesk, lora, abril-fatface, roboto-slab, roboto-mono, caveat, permanent-marker); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on text, wordmark type: \"letterSpacing\" (em between letters, -0.2 to 1), \"fontWeight\" (400, 500, 700), \"textCase\" (upper, lower), \"textArc\" (bends one line along a circle, -360 to 360 degrees, positive bowing up: a badge’s top line 180, its bottom -180); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\". A field a type does not have, or a value off its list, is refused naming what it takes. Facilitation kinds and what they hold: \"session-button\" a \"session\" ({\"tool\": \"timer\" with \"minutes\", \"stopwatch\", \"vote\" with \"dots\", or \"poll\" with \"question\" and \"options\"}), drawn as what pressing it does unless it has a label; \"agenda\" its \"agendaItems\" ([{\"label\", \"minutes\"}]); \"checklist\" its \"checklistItems\" ([{\"text\", \"done\"}]); a stat row its \"stats\" ([{\"value\", \"caption\"}]); a callout its \"pageTitle\" over its \"label\" (the body); a banner its \"pageTitle\" and \"pageSubtitle\"; \"sticker\" a \"stickerId\" (an emoji- id from search_icons). The entries of a \"qa-board\", \"idea-box\" and \"temperature\" are the people’s, never an edit’s: starter questions or ideas go on stickies beside them. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title. shape \"card\": a node with a title, meta line and body; \"pageTitle\" is the title, \"pageSubtitle\" the meta (a product or runtime), \"label\" the body, \"cardMedia\" + \"iconId\" the glyph (a badge disc, a tile or an initial), \"cardHeader\" true for a coloured header band, \"tags\" up to 6 short facts. Use cards for service and component nodes. \"callout\" is accepted and stored as a card. \"accentEdge\" on a square, stadium or card draws a coloured strip on that side. shape \"badge\": a small label pill (up to 24 chars); shape \"step\": a numbered disc (\"label\" the number, up to 3 chars). Both take \"chipLook\"; with \"attachedTo\" (a node id) and \"attachAt\" they sit on that point of the node and move, copy and delete with it; no x / y needed. shape \"boundary\": a titled container (\"label\" the title, \"pageSubtitle\" a meta line such as a CIDR, \"iconId\" in its tab); elements whose centre is inside it belong to it; nest them for edge, region, VPC and subnet, \"boundaryStyle\" inset for a nested one, c4 for a C4 diagram. shape \"layer-stack\" / \"pyramid\" / \"cycle\": \"conceptRows\" is [{ \"label\", \"note\"? }]: a stack 2 to 8 (note = a side note), a pyramid 2 to 6 (first row the apex; \"pyramidVariant\" funnel makes it a funnel and its note the row's value), a cycle 3 to 8 clockwise from the top (its \"label\" is the centre). They draw their own rows in the colour ramp; do not draw them from separate shapes."
    • changedInput schema / properties / graph / properties / nodes / items / properties / shape / description
      Previous value: -"Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end."New value: +"Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, card, badge, step, boundary, layer-stack, pyramid, cycle, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end."
  9. Changed15 schema fields changed
    • addedInput schema / properties / dashboard
      Added value: +{
      +  "description": "Replace mode on a Dashboard tab: its tabs, metrics, charts and notes rebuilt whole (the tab keeps its id and name). Only a Dashboard tab takes one.",
      +  "properties": {
      +    "charts": {
      +      "description": "Charts, two to a row; a Gantt takes a row of its own.",
      +      "items": {
      +        "properties": {
      +          "groupBy": {
      +            "description": "workload only: assignee (default), type, priority, status, or a field by name.",
      +            "type": "string"
      +          },
      +          "types": {
      +            "description": "Only these card types, by name.",
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "view": {
      +            "description": "gantt, calendar (by due date), start-calendar, workload (cards by a field), priority-matrix (priority by status), search.",
      +            "enum": [
      +              "gantt",
      +              "calendar",
      +              "start-calendar",
      +              "workload",
      +              "priority-matrix",
      +              "search"
      +            ],
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "view"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "metrics": {
      +      "description": "Metric tiles, four to a row: count (cards), progress (percent done), people, types, priorities, due (overdue and due soon), unassigned, points (estimates), top-voted, stale.",
      +      "items": {
      +        "enum": [
      +          "count",
      +          "progress",
      +          "people",
      +          "types",
      +          "priorities",
      +          "due",
      +          "unassigned",
      +          "points",
      +          "top-voted",
      +          "stale"
      +        ],
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "notes": {
      +      "description": "Notes, three to a row.",
      +      "items": {
      +        "properties": {
      +          "text": {
      +            "description": "Its text; a line each.",
      +            "type": "string"
      +          },
      +          "title": {
      +            "description": "The note’s heading.",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "title",
      +          "text"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "tabs": {
      +      "anyOf": [
      +        {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "const": "every",
      +          "type": "string"
      +        }
      +      ],
      +      "description": "The Board and Sheet tabs it shows, by name (in create_document, other tabs of the same call), or \"every\"; two to a row."
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / edits
      Added value: +{
      +  "description": "ops mode, instead of \"ops\": edit operations, one a line, applied all or nothing. The language the lint fixes are written in. Operations: add <kind> [id=<id>] key=value… [placement]; set <sel> key=value… [all]; rm <sel> [all] [keep-arrows]; move <sel> <placement>|by=dx,dy; connect <a> -> <b> [label=…] [line=straight|angled|curved]; rewire <arrow> from=<x> to=<y>; insert <kind> key=value… between <a> <b> (puts a node on the a→b arrow and makes room); wrap <sel…> in frame|lane [label=…] [tidy]; unwrap <frame>; order <sel> front|back; layout <sel> [style=flow|tree|mindmap] [direction=down|right]. Selectors: a ref or id, \"Label text\", type:sticky, shape:diamond, in:<frame>, a->b, from:<x>, to:<x>, downstream:<x>. Placement: right-of:<x> left-of:<x> above:<x> below:<x> [gap:<n>], after:<x>, inside:<frame>, align:<x>, at:x,y. Keys: label= note= shape= fill=theme|red|orange|yellow|green|blue|violet (a sticky: classic|lemon|peach|rose|lilac|sky|mint|teal|slate) text=sm|md|lg border=solid|dashed|dotted line=…, or any stored field by name. Values with spaces are quoted: label=\"Sign in\". Coordinates are relative to the content origin, as the layout view prints them.",
      +  "maxLength": 40000,
      +  "type": "string"
      +}
    • changedInput schema / properties / elements / description
      Previous value: -"Replace mode: the full new element list. An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title."New value: +"Replace mode: the full new element list. An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Style fields: \"textSize\" (sm, md, lg, scale), \"textAlignX\" (left, center, right), \"textAlignY\" (top, middle, bottom), \"iconPosition\" (left, right, above, below), \"arrowStyle\" (straight, angled, curved), \"arrowEnds\" (to, from, both, none), \"arrowheadShape\" (triangle, triangle-hollow, line, circle, circle-hollow, diamond, diamond-hollow), \"strokeStyle\" (solid, dashed, dotted, long-dash, dash-dot, dash-dot-dot), \"borderRadius\" (none, sm, md, lg, full); \"textBold\", \"textItalic\" (true/false); \"colorPreset\" (a shape’s look from the theme: theme, soft, tinted, solid, bold, ghost, paper, muted, slate, inked, hairline, outline, dotted, dash-dot, frame, info, success, warning, danger, highlight); \"iconId\" (an id from search_icons) with \"iconPosition\"; \"note\" (detail shown on the element); on an arrow \"label\", \"strokeStyle\", \"arrowEnds\", \"arrowheadShape\". A field a type does not have, or a value off its list, is refused naming what it takes. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title."
    • addedInput schema / properties / graph / properties / edges / items / properties / line
      Added value: +{
      +  "description": "The stroke: solid (default), dashed (an event, a reply, an optional path) or thick.",
      +  "enum": [
      +    "solid",
      +    "dashed",
      +    "thick"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / graph / properties / key
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "additionalProperties": {
      +        "maxLength": 40,
      +        "type": "string"
      +      },
      +      "propertyNames": {
      +        "type": "string"
      +      },
      +      "type": "object"
      +    }
      +  ],
      +  "description": "A key beside the diagram: one miniature per shape kind it uses with what that shape means. true names them by default (a flowchart’s Start or end, Step, Decision...; else Component, Data store, Hub or bus, External system...); an object names them yourself by shape ({\"hexagon\": \"Event bus\", \"cylinder\": \"Database\"}), the rest by default."
      +}
    • changedInput schema / properties / graph / properties / lines / description
      Previous value: -"Arrow routing. Default: straight for flow, angled for tree, curved for mindmap."New value: +"Arrow routing. Default: angled (elbows) for flow, tree and lanes; curved for mindmap and cycle."
    • addedInput schema / properties / graph / properties / nodes / items / properties / esKind
      Added value: +{
      +  "description": "style \"storm\" only: the workshop note this node is (default domain-event). Its label is the note’s text, kept whole.",
      +  "enum": [
      +    "domain-event",
      +    "command",
      +    "actor",
      +    "policy",
      +    "read-model",
      +    "external-system",
      +    "aggregate",
      +    "hotspot"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / graph / properties / nodes / items / properties / icon
      Added value: +{
      +  "description": "An icon on the box: an id from search_icons (\"database\", \"aws-lambda\").",
      +  "type": "string"
      +}
    • addedInput schema / properties / graph / properties / nodes / items / properties / tone
      Added value: +{
      +  "description": "How the box stands out: strong (filled in the accent), soft (tinted), muted (outlined and dashed: an exception or an optional step) or plain. Unset in a flowchart, a stadium the flow starts from is strong, one it ends on soft, and a diamond soft.",
      +  "enum": [
      +    "strong",
      +    "soft",
      +    "muted",
      +    "plain"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / graph / properties / style / description
      Previous value: -"Layout: \"flow\" (layered, the default; the layout for processes and systems), \"tree\" (a tidy hierarchy, the layout for org charts), \"mindmap\" (radial around the first node). With groups the layout is flow."New value: +"Layout: \"flow\" (layered, the default; the layout for processes and systems: a decision’s side exit sits level beside it and a loop back runs round the outside), \"tree\" (a tidy hierarchy, the layout for org charts), \"mindmap\" (radial around the first node), \"lanes\" (a swimlane diagram: each group a lane, the flow left to right across them) or \"cycle\" (a ring in node order, clockwise from the top; a node with no edge sits at its centre) or \"storm\" (an event-storming board: each node a workshop note of its esKind, one column per domain event in the order the edges imply, each kind on its own lane, no arrows; a new tab becomes an event-storming board) or \"sequence\" (a sequence diagram: the nodes the participants, a node shaped actor a stick figure; the edges the messages in order, a dashed edge a reply; Mermaid sequenceDiagram text says more: activations, notes, alt/loop fragments). With groups the layout is flow unless it is lanes."
    • changedInput schema / properties / graph / properties / style / enum
      Previous value: -[
      -  "flow",
      -  "tree",
      -  "mindmap"
      -]New value: +[
      +  "flow",
      +  "tree",
      +  "mindmap",
      +  "lanes",
      +  "cycle",
      +  "storm",
      +  "sequence"
      +]
    • addedInput schema / properties / graph / properties / subtitle
      Added value: +{
      +  "description": "A muted caption under the title: what the diagram shows and how to read it.",
      +  "maxLength": 300,
      +  "type": "string"
      +}
    • addedInput schema / properties / graph / properties / title
      Added value: +{
      +  "description": "A heading above the diagram, left aligned, as every template has.",
      +  "maxLength": 120,
      +  "type": "string"
      +}
    • changedInput schema / properties / mermaid / description
      Previous value: -"The diagram as Mermaid text: a flowchart (graph / flowchart, with subgraphs), a state diagram (stateDiagram) or an ER diagram (erDiagram). Parsed into the same graph as the \"graph\" input: subgraphs become groups, the direction is kept, and the same label limit applies. Provide one of graph, mermaid, elements or template."New value: +"The diagram as Mermaid text: a flowchart (graph / flowchart, with subgraphs), a state diagram (stateDiagram), an ER diagram (erDiagram) or a sequence diagram (sequenceDiagram: participant / actor, ->> calls, -) async, -->> replies, +/- activations, Note over, alt/else, loop, opt, par, autonumber, title). Parsed into the same graph as the \"graph\" input: subgraphs become groups, the direction is kept, and the same label limit applies; a sequence diagram is drawn with lifelines, activation bars, notes and fragments. Front matter (---, title: Text, ---) titles any of them. Provide one of graph, mermaid, elements or template."
    • changedInput schema / properties / mode / description
      Previous value: -"\"replace\" the whole tab, or apply granular \"ops\"."New value: +"\"replace\" the whole tab, or apply granular \"ops\" (or \"edits\")."
  10. Changed2 schema fields changed
    • changedInput schema / properties / elements / description
      Previous value: -"Replace mode: the full new element list. An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty."New value: +"Replace mode: the full new element list. An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Any element may carry \"finish\" (\"flexible\", \"professional\" or \"sketch\") to be drawn differently from its tab. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty. shape \"sankey\": a Sankey diagram, bands as wide as the amount they carry, laid out in columns by itself. \"sankeyFlows\" is [{ \"from\", \"to\", \"value\" }] with node NAMES (the nodes are the names; up to 200 flows, names up to 60 chars, values above zero; a flow back to an earlier node is hidden, as is one into itself). Options: \"sankeyLinkColor\" (gradient, source, target, neutral; default gradient), \"sankeyAlign\" (justify: end nodes in the last column, the default; left: each at its own step), \"sankeyValueLabel\" (value, percent, none), \"sankeyUnit\" (e.g. \"£\", \"kWh\"; up to 8 chars), \"sankeyNodes\" [{ \"name\", \"color\", \"leftover\": false }] to colour a node or switch off its own leftover, \"sankeyLeftover\" (show, the default: a middle node that sends on less than it receives draws the difference to a \"Leftover\" end node; hide: it does not), \"sankeyLeftoverName\" (that node's name; do not write leftover flows yourself). Make it wide (about 2:1); it draws no title."
    • changedInput schema / properties / graph / properties / nodes / items / properties / shape / description
      Previous value: -"Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end."New value: +"Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, sankey, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end."
  11. Changed1 schema field changed
    • changedInput schema / properties / elements / description
      Previous value: -"Replace mode: the full new element list. An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty."New value: +"Replace mode: the full new element list. An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. \"chartVariant\" picks the chart type: on \"bar-chart\" \"horizontal\" draws a Bar chart (absent: upright columns); on \"line-chart\" \"area\" fills each series down to zero and \"scatter\" draws points only, at x = each category read as a number; on \"pie-chart\" \"doughnut\" opens the middle. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty."
  12. Changed4 schema fields changed
    • changedInput schema / properties / graph / properties / edges / description
      Previous value: -"Directed connections between ids. An edge to an unknown id is dropped."New value: +"Directed connections between ids, at most 1000. An edge to an unknown id is dropped."
    • addedInput schema / properties / graph / properties / edges / maxItems
      Added value: +1000
    • changedInput schema / properties / graph / properties / nodes / description
      Previous value: -"The nodes (boxes). Each needs a unique id."New value: +"The nodes (boxes), at most 500. Each needs a unique id. A larger diagram is better split into several."
    • addedInput schema / properties / graph / properties / nodes / maxItems
      Added value: +500
  13. Changed2 schema fields changed
    • changedInput schema / properties / elements / description
      Previous value: -"Replace mode: the full new element list. An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, focus-button, icon, sticker, plan-board, plan-card, plan-view. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty."New value: +"Replace mode: the full new element list. An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty."
    • changedInput schema / properties / graph / properties / nodes / items / properties / shape / description
      Previous value: -"Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, focus-button, icon, sticker, plan-board, plan-card, plan-view); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end."New value: +"Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, focus-button, icon, sticker, plan-board, plan-card, plan-view, plan-sheet); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end."
  14. Changed2 schema fields changed
    • addedOutput schema / properties / documentId
      Added value: +{
      +  "description": "The document id again, under the name the other tools take it by.",
      +  "type": "string"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "id",
      -  "tabId",
      -  "url",
      -  "changesetId",
      -  "rev",
      -  "text",
      -  "lint"
      -]New value: +[
      +  "id",
      +  "documentId",
      +  "tabId",
      +  "url",
      +  "changesetId",
      +  "rev",
      +  "text",
      +  "lint"
      +]
  15. Changed2 schema fields changed
    • changedInput schema / properties / elements / description
      Previous value: -"Replace mode: the full new element list. An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, focus-button, icon, sticker. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty."New value: +"Replace mode: the full new element list. An array of element objects. This is the COMPLETE format, documented inline here: the tool definition is the full reference for it. Each element: { \"id\": a unique string, \"type\", \"x\", \"y\", \"width\", \"height\", and optional \"label\" }. type \"shape\" is a NODE (a labelled box) and also needs \"shape\", one of square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, focus-button, icon, sticker, plan-board, plan-card, plan-view. The default box is \"square\" (there is NO \"rectangle\"); use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end. type \"text\" is BARE text with no box; use it only for a title, caption, or legend, never for a node. type \"arrow\" needs \"from\" and \"to\" endpoints, each either { \"kind\": \"pinned\", \"elementId\", \"anchor\" } (anchors: n, nne, ne, ene, e, ese, se, sse, s, ssw, sw, wsw, w, wnw, nw, nnw; preferred, so arrows track their shapes) or { \"kind\": \"free\", \"x\", \"y\" }; an arrow may carry a \"label\". The theme owns fill, stroke, and text colour on every element except a sticky. Content-carrying kinds: type \"sticky\": a note whose \"label\" is its text; the theme never recolours it, so its own \"fillColor\" + \"textColor\" are kept (palette pairs, fill/text: classic #fde68a/#451a03, lemon #fef08a/#422006, peach #fed7aa/#431407, rose #fecdd3/#4c0519, lilac #e9d5ff/#3b0764, sky #bae6fd/#082f49, mint #bbf7d0/#052e16, teal #99f6e4/#042f2e, slate #e2e8f0/#0f172a, paper #ffffff/#0f172a, charcoal #334155/#f1f5f9, ink #0f172a/#e2e8f0); unset it is the classic amber note. type \"table\": \"cells\" is rows of strings (ragged rows are padded), \"headerRow\" / \"headerColumn\" style the first row / column, \"zebra\" tints alternate rows. shape \"code-block\": \"code\" (up to 4000 chars), \"codeLanguage\" (plain, ts, js, python, json, bash, sql, html, css, yaml), \"codeTheme\" (midnight, graphite, ocean, forest, plum, contrast, paper, parchment; default midnight, dark), \"codeWrap\"; the block draws itself and shows no label. shape \"entity\": \"label\" is the title, \"entityFields\" is [{ \"name\", \"type\"? }] rows (up to 40; keys go in the type, e.g. \"uuid PK\"); the box grows to fit its rows. shape \"lane\": a swimlane whose \"label\" is the title in its left strip; elements fully inside its box belong to it, lanes are placed one under another, and they paint behind everything. shape \"bar-chart\" / \"pie-chart\": \"pieSlices\" is [{ \"label\", \"value\" }]; categories show in the legend. shape \"line-chart\": \"lineCategories\" is the x labels, \"lineSeries\" is [{ \"name\", \"values\" }] with one value per category. A chart draws no title (a caption is a separate \"text\" element) and draws sample data when its data is empty."
    • changedInput schema / properties / graph / properties / nodes / items / properties / shape / description
      Previous value: -"Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, focus-button, icon, sticker); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end."New value: +"Shape kind (square, circle, diamond, cylinder, parallelogram, hexagon, document, page, mind-node, lane, entity, banner, callout, stat-row, process, site-header, mode-button, portal, session-button, reveal, picker, reaction-pad, comment-pin, action-card, done-check, chair, estimate, temperature, idea-box, qa-board, agenda, decision, roll-call, quiz, stadium, actor, cloud, triangle, trapezoid, star, speech-bubble, frame, browser, monitor, laptop, phone, tablet, foldable, smartwatch, progress-bar, progress-ring, timeline-rail, rating, pie-chart, bar-chart, line-chart, code-block, checklist, legend, focus-button, icon, sticker, plan-board, plan-card, plan-view); default \"square\". Use \"diamond\" for a decision, \"cylinder\" for a datastore, \"stadium\" for start/end."
  16. Changed2 schema fields changed
    • changedOutput schema / properties / lint / description
      Previous value: -"The diagram lint report; null while the lint is unavailable."New value: +"The diagram lint summary line of the tab as written."
    • changedOutput schema / properties / lint / type
      Previous value: -"null"New value: +"string"
  17. Changed2 schema fields changed
    • changedInput schema / properties / ops / description
      Previous value: -"ops mode: ordered add / update / remove against existing element ids."New value: +"ops mode: ordered add / update / remove against existing elements, by id or ref."
    • changedInput schema / properties / ops / items / properties / elementId / description
      Previous value: -"update / remove: the id of the existing element to change."New value: +"update / remove: the existing element to change, by its id or the ref read_document prints."
  18. Changed6 schema fields changed
    • addedInput schema / properties / rev
      Added value: +{
      +  "description": "ops mode: the tab revision read_document returned. An element a person changed since is then a conflict, never silently overwritten; read again and redo the edit.",
      +  "maximum": 9007199254740991,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / changesetId
      Added value: +{
      +  "description": "The changeset written; null when nothing changed.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / lint
      Added value: +{
      +  "description": "The diagram lint report; null while the lint is unavailable.",
      +  "type": "null"
      +}
    • addedOutput schema / properties / rev
      Added value: +{
      +  "description": "The tab revision now, to pass as rev on the next update_document.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / text
      Added value: +{
      +  "description": "What the changeset did, one line per element, and how to revert it.",
      +  "type": "string"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "id",
      -  "tabId",
      -  "url"
      -]New value: +[
      +  "id",
      +  "tabId",
      +  "url",
      +  "changesetId",
      +  "rev",
      +  "text",
      +  "lint"
      +]
  19. Changed5 schema fields changed
    • removedInput schema / properties / diagramId
      Removed value: -{
      -  "description": "The diagram to edit (from find_diagrams / read_diagram).",
      -  "type": "string"
      -}
    • addedInput schema / properties / documentId
      Added value: +{
      +  "description": "The document to edit (from find_documents / read_document).",
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "diagramId",
      -  "mode"
      -]New value: +[
      +  "documentId",
      +  "mode"
      +]
    • changedOutput schema / properties / id / description
      Previous value: -"The diagram id."New value: +"The document id."
    • changedOutput schema / properties / url / description
      Previous value: -"Link that opens the diagram in the livediagram editor."New value: +"Link that opens the document in the livediagram editor."
  20. First observed

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false, and openWorldHint=false, so the safety profile is covered without description help. The description adds the lifecycle behavior (deprecated, removal date) but says nothing about what mutation occurs, what is overwritten, or required permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, three clauses, with the deprecation warning front-loaded ahead of the replacement and the sunset date. No filler and nothing is buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a deprecated alias with an output schema, the description covers the essentials: it is deprecated, what to use instead, when it disappears, and that inputs mirror update_document. It does not describe the operation's effect, but that detail lives in update_document and the annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema declares no properties and only free-form additionalProperties, so the description's note that it "takes the same input as update_document" is the only signal about expected arguments and is genuinely useful. With zero parameters the baseline is 4, and the pointer to update_document's contract adds modest value on top.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The title states the action and resource ("Update a document") and the description pins it down as an alias whose input matches update_document, which also differentiates it from siblings like update_document, rename_document, and share_document. The description itself never restates the verb, relying on the title, and the name/schema mismatch (diagram vs document) adds a little ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says not to use this tool ("use update_document instead") and gives a concrete sunset date of 2027-04-30, so an agent knows both the preferred alternative and the migration deadline. This is the strongest form of routing guidance available for a deprecated alias.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources