@creator-notes/cnotes 0.44.0 → 0.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -15,6 +15,16 @@
15
15
  * fine for a "thinking aid" but not authoritative.
16
16
  */
17
17
  const ROW_TOLERANCE = 80;
18
+ /**
19
+ * Last-resort footprint for a node that has no entry in the canvas payload's
20
+ * `allNodes` occupancy view at all — a shape the current server never sends
21
+ * (`allNodes` covers all five node kinds and always carries width/height), so
22
+ * this fires only if that view ever goes partial.
23
+ *
24
+ * It is NOT the number the center rule normally uses: see `sectionFor` below
25
+ * for which footprints are in play and where they disagree with Convex.
26
+ */
27
+ const UNMEASURED_NODE_FOOTPRINT = { width: 400, height: 150 };
18
28
  /** Shorten free text to a stable one-line ref for edge endpoints. */
19
29
  function shortLabel(s, max = 32) {
20
30
  const flat = s.replace(/\s+/g, " ").trim();
@@ -56,9 +66,49 @@ export async function readCanvasMarkdown(api, workspaceId, canvasId) {
56
66
  }
57
67
  }
58
68
  // --- Sections -----------------------------------------------------------
59
- // Frames carry bounds; everything else carries only a point. Containment is
60
- // resolved point-in-rect against the SMALLEST enclosing frame, so a nested
61
- // frame wins over its parent.
69
+ // Containment is CENTER-in-rect against the SMALLEST enclosing frame, so a
70
+ // nested frame wins over its parent.
71
+ //
72
+ // The center rule is not a detail: it is the rule the canvas itself uses
73
+ // (useSectionDrag on the client, getSectionNoteIdsGeometric on the server).
74
+ // Testing the top-left corner instead — which this did until the section read
75
+ // was added — disagrees with the canvas for any card straddling a frame edge,
76
+ // in both directions: a card whose corner is inside but whose body hangs out
77
+ // reads as contained, and a card overlapping the top edge reads as loose. Frames
78
+ // are drawn tight around their contents, so edge cards are the common case,
79
+ // not the exotic one.
80
+ //
81
+ // `allNodes` carries the server's resolved width/height per node id — the
82
+ // occupancy view the layout solver avoids — which is what makes a center
83
+ // computable here at all. Those are the PAINTED footprints: a stored dim when
84
+ // there is one, otherwise the per-kind default for notes/stickies and a live
85
+ // measurement for richtext, lists and portals (NODE_KIND_DEFAULT_DIMS /
86
+ // measureRichtextBox et al in app/api/canvas/[canvasId]/route.ts).
87
+ //
88
+ // KNOWN DIVERGENCE, read this before "fixing" either side. Convex's
89
+ // makeCenterInsideTest — the authority for section sketches and for what
90
+ // travels when a frame moves — has only ONE fallback for a row with no stored
91
+ // width/height: UNMEASURED_NODE_FOOTPRINT, 400x150. So for a node whose dims
92
+ // were never persisted the two compute different centers:
93
+ // - note: 280x130 here vs 400x150 there → centers 60px/10px apart
94
+ // - richtext: measured 560–1680 wide here vs 400 there → up to ~640px apart
95
+ // Near a frame edge that flips membership, so `canvas read` can group a card
96
+ // that a section sketch or a frame move treats as loose. This side is the one
97
+ // that matches what the user SEES, which is why it stays; the divergence
98
+ // closes for real when dims are persisted rather than assumed — that is what
99
+ // convex/migrations/backfillRichtextNodeDims.ts is for (still pending in
100
+ // prod). Do not "align" the two by copying 400x150 down here: that would make
101
+ // the read disagree with the painted canvas as well.
102
+ const allNodes = data.allNodes || [];
103
+ const dimsByNodeId = new Map();
104
+ for (const n of allNodes) {
105
+ const id = n.id;
106
+ const width = num(n.width);
107
+ const height = num(n.height);
108
+ if (typeof id === "string" && width !== undefined && height !== undefined) {
109
+ dimsByNodeId.set(id, { width, height });
110
+ }
111
+ }
62
112
  const sections = sectionNodes
63
113
  .map((s) => ({
64
114
  displayId: String(s.displayId || ""),
@@ -76,13 +126,18 @@ export async function readCanvasMarkdown(api, workspaceId, canvasId) {
76
126
  .sort((a, b) => Math.abs(a.bounds.y - b.bounds.y) > ROW_TOLERANCE
77
127
  ? a.bounds.y - b.bounds.y
78
128
  : a.bounds.x - b.bounds.x);
79
- const sectionFor = (pos) => {
80
- const x = pos.positionX ?? 0;
81
- const y = pos.positionY ?? 0;
129
+ const sectionFor = (pos, nodeId) => {
130
+ // Dims come from the payload's occupancy view; the constant is only for a
131
+ // node absent from it entirely. See the KNOWN DIVERGENCE note above for
132
+ // which footprints these are and where they part company with Convex.
133
+ const dims = (typeof nodeId === "string" ? dimsByNodeId.get(nodeId) : undefined) ??
134
+ UNMEASURED_NODE_FOOTPRINT;
135
+ const cx = (pos.positionX ?? 0) + dims.width / 2;
136
+ const cy = (pos.positionY ?? 0) + dims.height / 2;
82
137
  let best;
83
138
  for (const s of sections) {
84
139
  const { x: sx, y: sy, width, height } = s.bounds;
85
- const inside = x >= sx && x <= sx + width && y >= sy && y <= sy + height;
140
+ const inside = cx >= sx && cx <= sx + width && cy >= sy && cy <= sy + height;
86
141
  if (!inside)
87
142
  continue;
88
143
  if (!best || width * height < best.bounds.width * best.bounds.height) {
@@ -91,8 +146,16 @@ export async function readCanvasMarkdown(api, workspaceId, canvasId) {
91
146
  }
92
147
  return best?.displayId;
93
148
  };
94
- const withSection = (el) => {
95
- const section = sectionFor(el.pos);
149
+ // Which frame each node landed in, keyed by node id. Edges reference nodes by
150
+ // id, so this is what lets an edge report the frames it spans without
151
+ // re-deriving containment from the refs (which are lossy for unlabeled
152
+ // stickies).
153
+ const sectionByNodeId = new Map();
154
+ const withSection = (el, nodeId) => {
155
+ const section = sectionFor(el.pos, nodeId);
156
+ if (section && typeof nodeId === "string") {
157
+ sectionByNodeId.set(nodeId, section);
158
+ }
96
159
  return section ? { ...el, section } : el;
97
160
  };
98
161
  // --- Elements -----------------------------------------------------------
@@ -112,7 +175,7 @@ export async function readCanvasMarkdown(api, workspaceId, canvasId) {
112
175
  title: note?.title || "(untitled)",
113
176
  type: note?.type || "Note",
114
177
  markdown: markdownByDisplayId.get(displayId) ?? "",
115
- }));
178
+ }, n.id));
116
179
  }
117
180
  for (const t of textNodes) {
118
181
  elements.push(withSection({
@@ -123,7 +186,7 @@ export async function readCanvasMarkdown(api, workspaceId, canvasId) {
123
186
  },
124
187
  text: String(t.text || ""),
125
188
  headingSize: t.headingSize,
126
- }));
189
+ }, t.id));
127
190
  }
128
191
  for (const r of richtextNodes) {
129
192
  elements.push(withSection({
@@ -133,7 +196,7 @@ export async function readCanvasMarkdown(api, workspaceId, canvasId) {
133
196
  positionY: r.positionY,
134
197
  },
135
198
  markdown: typeof r.content === "string" ? r.content : "",
136
- }));
199
+ }, r.id));
137
200
  }
138
201
  for (const l of listNodes) {
139
202
  const items = l.items || [];
@@ -152,7 +215,7 @@ export async function readCanvasMarkdown(api, workspaceId, canvasId) {
152
215
  type: note?.type,
153
216
  };
154
217
  }),
155
- }));
218
+ }, l.id));
156
219
  }
157
220
  elements.sort((a, b) => {
158
221
  const ay = a.pos.positionY ?? 0;
@@ -168,7 +231,9 @@ export async function readCanvasMarkdown(api, workspaceId, canvasId) {
168
231
  positionX: c.positionX,
169
232
  positionY: c.positionY,
170
233
  };
171
- const section = sectionFor(pos);
234
+ const section = sectionFor(pos, c.id);
235
+ if (section && typeof c.id === "string")
236
+ sectionByNodeId.set(c.id, section);
172
237
  return {
173
238
  canvasId: String(linked.id ?? c.linkedCanvasId ?? ""),
174
239
  title: String(linked.name || "(untitled canvas)"),
@@ -229,9 +294,24 @@ export async function readCanvasMarkdown(api, workspaceId, canvasId) {
229
294
  return serverRef;
230
295
  return id;
231
296
  };
297
+ // A section node can itself be an edge endpoint; treat a frame as sitting in
298
+ // itself so an edge drawn to the frame counts as touching it.
299
+ for (const s of sectionNodes) {
300
+ if (typeof s.id === "string" && s.displayId) {
301
+ sectionByNodeId.set(s.id, String(s.displayId));
302
+ }
303
+ }
232
304
  const edges = rawEdges.map((e) => ({
233
305
  from: refFor(e.sourceNodeId, e.sourceRef),
234
306
  to: refFor(e.targetNodeId, e.targetRef),
307
+ ...(typeof e.sourceNodeId === "string" &&
308
+ sectionByNodeId.has(e.sourceNodeId)
309
+ ? { fromSection: sectionByNodeId.get(e.sourceNodeId) }
310
+ : {}),
311
+ ...(typeof e.targetNodeId === "string" &&
312
+ sectionByNodeId.has(e.targetNodeId)
313
+ ? { toSection: sectionByNodeId.get(e.targetNodeId) }
314
+ : {}),
235
315
  ...(typeof e.label === "string" && e.label ? { label: e.label } : {}),
236
316
  ...(typeof e.lineStyle === "string" && e.lineStyle
237
317
  ? { lineStyle: e.lineStyle }
@@ -247,6 +327,187 @@ export async function readCanvasMarkdown(api, workspaceId, canvasId) {
247
327
  portals,
248
328
  };
249
329
  }
330
+ /** Is `inner` wholly within `outer`? Used to find frames nested in a frame. */
331
+ function rectInside(inner, outer) {
332
+ return (inner.x >= outer.x &&
333
+ inner.y >= outer.y &&
334
+ inner.x + inner.width <= outer.x + outer.width &&
335
+ inner.y + inner.height <= outer.y + outer.height);
336
+ }
337
+ /**
338
+ * Read ONE section frame: resolve a SECTION-<n> handle to its canvas, then
339
+ * return just what that frame contains.
340
+ *
341
+ * Two hops by design. The first resolves the address (which canvas holds this
342
+ * frame — the caller doesn't have to know); the second reads the canvas through
343
+ * the same path `canvas read` uses, and the frame is applied as a filter. The
344
+ * canvas fetch is not smaller for being filtered, but what comes BACK is, and
345
+ * for an agent that is the cost that matters: a section read is the frame's
346
+ * content, not a whole canvas to scroll past. Filtering here rather than
347
+ * server-side also keeps ONE implementation of how a canvas turns into
348
+ * elements — a second one would drift, and drift about what a frame contains is
349
+ * exactly what makes the answer untrustworthy.
350
+ *
351
+ * Cost ceiling worth knowing: the second hop bulk-fetches the markdown of EVERY
352
+ * note on the canvas (one call, never N+1) and then discards the ones outside
353
+ * the frame. Reading a small frame on a large canvas therefore costs the canvas,
354
+ * not the frame. Acceptable while it buys one shaping implementation; if a
355
+ * canvas ever grows big enough for that to hurt, the fix is to resolve
356
+ * membership first and fetch only those bodies, not to fork the shaping.
357
+ *
358
+ * A frame nested inside the target travels WITH it: its cards would otherwise
359
+ * vanish from the answer entirely, since `sectionFor` tags each element with the
360
+ * SMALLEST frame containing it. `getSectionMemberNodes` in Convex makes the same
361
+ * call for a frame move, so "read a frame" and "move a frame" cover the same
362
+ * cards.
363
+ */
364
+ export async function readCanvasSection(api, workspaceId, sectionHandle) {
365
+ // "SECTION-7" is the display handle; anything else is treated as a raw id.
366
+ const isDisplayId = /^section-/i.test(sectionHandle.trim());
367
+ const located = await api.get("/api/canvas/section", {
368
+ workspaceId,
369
+ ...(isDisplayId
370
+ ? { sectionDisplayId: sectionHandle.trim().toUpperCase() }
371
+ : { sectionNodeId: sectionHandle.trim() }),
372
+ });
373
+ const full = await readCanvasMarkdown(api, workspaceId, located.canvas.id);
374
+ const displayId = located.section.displayId;
375
+ // Prefer the frame as the canvas read saw it: same bounds, but it also
376
+ // carries colorHex in the shape the renderer expects.
377
+ const section = full.sections.find((s) => s.displayId === displayId) ?? {
378
+ displayId,
379
+ name: located.section.name,
380
+ bounds: located.section.bounds,
381
+ ...(located.section.colorHex
382
+ ? { colorHex: located.section.colorHex }
383
+ : {}),
384
+ };
385
+ // A frame wholly inside this one belongs to this read. Rect-containment, not
386
+ // center-containment: every point of an enclosed frame is inside this one, so
387
+ // anything the inner frame claims is inside this frame too. A frame that
388
+ // merely OVERLAPS is left alone — its cards may well sit outside.
389
+ const nestedSections = full.sections.filter((s) => s.displayId !== displayId && rectInside(s.bounds, section.bounds));
390
+ const own = new Set([displayId, ...nestedSections.map((s) => s.displayId)]);
391
+ const inFrame = (id) => !!id && own.has(id);
392
+ return {
393
+ canvas: located.canvas,
394
+ section,
395
+ nestedSections,
396
+ elements: full.elements.filter((e) => inFrame(e.section)),
397
+ edges: full.edges.filter((e) => inFrame(e.fromSection) || inFrame(e.toSection)),
398
+ portals: full.portals.filter((p) => inFrame(p.section)),
399
+ };
400
+ }
401
+ /**
402
+ * One element as markdown, appended to `lines`. Shared by the whole-canvas and
403
+ * single-section renderers so a card reads identically either way — two copies
404
+ * would drift, and a card that reads differently depending on which command
405
+ * printed it is a card an agent can't quote.
406
+ */
407
+ function renderElement(lines, r) {
408
+ if (r.kind === "note") {
409
+ lines.push(`### ${r.displayId}: ${r.title}`, `*${r.type}*`, "");
410
+ if (r.markdown)
411
+ lines.push(r.markdown.trim(), "");
412
+ }
413
+ else if (r.kind === "text") {
414
+ lines.push(`**${r.text}**`, "");
415
+ }
416
+ else if (r.kind === "richtext") {
417
+ if (r.markdown)
418
+ lines.push(r.markdown.trim(), "");
419
+ }
420
+ else if (r.kind === "list") {
421
+ lines.push(`### List: ${r.title}`, "");
422
+ for (const it of r.items) {
423
+ if (it.displayId) {
424
+ lines.push(`- [${it.displayId}: ${it.title ?? ""}](relationship:references)`);
425
+ }
426
+ }
427
+ lines.push("");
428
+ }
429
+ }
430
+ function renderPortal(lines, p) {
431
+ lines.push(`- Portal → **${p.title}** (\`${p.canvasId}\`)`);
432
+ }
433
+ /**
434
+ * The `->` / `<->` / `--` glyph for an edge. `arrowEnd` defaults to true and is
435
+ * only carried when explicitly false, so a both-ends-bare edge reads as a plain
436
+ * line rather than a false arrow.
437
+ */
438
+ function arrowGlyph(e) {
439
+ if (e.arrowEnd === false)
440
+ return e.arrowStart ? "<-" : "--";
441
+ return e.arrowStart ? "<->" : "->";
442
+ }
443
+ /**
444
+ * Render one section frame as a markdown document.
445
+ *
446
+ * Leads with the frame's own identity and the canvas it belongs to, so an agent
447
+ * that was handed only "SECTION-6GC" still knows where it is looking. Nested
448
+ * frames get their own heading rather than being flattened in, so the structure
449
+ * the canvas shows survives. Edges name the frame on the far end when they leave
450
+ * it — a section's argument usually points somewhere, and hiding that would make
451
+ * the frame read as more self-contained than it is.
452
+ */
453
+ export function renderCanvasSectionMarkdown(result) {
454
+ const { section, canvas, nestedSections } = result;
455
+ const canvasRef = canvas.displayId ? ` (${canvas.displayId})` : "";
456
+ const lines = [
457
+ `# ${section.displayId}: ${section.name}`,
458
+ `*Section of canvas: ${canvas.name}${canvasRef}*`,
459
+ "",
460
+ ];
461
+ const ownElements = result.elements.filter((e) => e.section === section.displayId);
462
+ const ownPortals = result.portals.filter((p) => p.section === section.displayId);
463
+ if (ownElements.length === 0 &&
464
+ ownPortals.length === 0 &&
465
+ nestedSections.length === 0) {
466
+ lines.push("*(empty frame)*", "");
467
+ }
468
+ for (const r of ownElements)
469
+ renderElement(lines, r);
470
+ for (const p of ownPortals)
471
+ renderPortal(lines, p);
472
+ if (ownPortals.length)
473
+ lines.push("");
474
+ for (const nested of nestedSections) {
475
+ const inNested = result.elements.filter((e) => e.section === nested.displayId);
476
+ const portalsHere = result.portals.filter((p) => p.section === nested.displayId);
477
+ lines.push("---", "", `## ${nested.displayId}: ${nested.name} (nested)`, "");
478
+ if (inNested.length === 0 && portalsHere.length === 0) {
479
+ lines.push("*(empty frame)*", "");
480
+ }
481
+ for (const el of inNested)
482
+ renderElement(lines, el);
483
+ for (const p of portalsHere)
484
+ renderPortal(lines, p);
485
+ if (portalsHere.length)
486
+ lines.push("");
487
+ }
488
+ if (result.edges.length) {
489
+ // Anything in this frame or a frame nested inside it counts as "in here";
490
+ // only a genuinely outside endpoint gets called out.
491
+ const inFrame = new Set([
492
+ section.displayId,
493
+ ...nestedSections.map((s) => s.displayId),
494
+ ]);
495
+ lines.push(`## Edges (${result.edges.length})`, "");
496
+ for (const e of result.edges) {
497
+ const label = e.label ? ` — *${e.label}*` : "";
498
+ // Mark the endpoint that lives outside this frame, so a reader can tell
499
+ // an internal link from one that leaves the section.
500
+ const outward = !inFrame.has(e.fromSection ?? "")
501
+ ? ` (from ${e.fromSection ?? "outside"})`
502
+ : !inFrame.has(e.toSection ?? "")
503
+ ? ` (to ${e.toSection ?? "outside"})`
504
+ : "";
505
+ lines.push(`- ${e.from} ${arrowGlyph(e)} ${e.to}${label}${outward}`);
506
+ }
507
+ lines.push("");
508
+ }
509
+ return lines.join("\n");
510
+ }
250
511
  /**
251
512
  * Render a CanvasReadResult as a single concatenated markdown document.
252
513
  * Used by the CLI's text output mode; the MCP tool returns the structured
@@ -260,34 +521,11 @@ export function renderCanvasMarkdown(result) {
260
521
  const canvas = result.canvas;
261
522
  const canvasName = canvas?.title || canvas?.name || "(unnamed)";
262
523
  const lines = [`# Canvas: ${canvasName}`, ""];
263
- const renderElement = (r) => {
264
- if (r.kind === "note") {
265
- lines.push(`### ${r.displayId}: ${r.title}`, `*${r.type}*`, "");
266
- if (r.markdown)
267
- lines.push(r.markdown.trim(), "");
268
- }
269
- else if (r.kind === "text") {
270
- lines.push(`**${r.text}**`, "");
271
- }
272
- else if (r.kind === "richtext") {
273
- if (r.markdown)
274
- lines.push(r.markdown.trim(), "");
275
- }
276
- else if (r.kind === "list") {
277
- lines.push(`### List: ${r.title}`, "");
278
- for (const it of r.items) {
279
- if (it.displayId) {
280
- lines.push(`- [${it.displayId}: ${it.title ?? ""}](relationship:references)`);
281
- }
282
- }
283
- lines.push("");
284
- }
285
- };
286
524
  // Unframed elements first — they're the canvas's preamble (title sticky,
287
525
  // "how to read this" richtext) and read as a lede.
288
526
  const unframed = result.elements.filter((e) => !e.section);
289
527
  for (const el of unframed)
290
- renderElement(el);
528
+ renderElement(lines, el);
291
529
  for (const section of result.sections) {
292
530
  const inSection = result.elements.filter((e) => e.section === section.displayId);
293
531
  const portalsHere = result.portals.filter((p) => p.section === section.displayId);
@@ -300,10 +538,9 @@ export function renderCanvasMarkdown(result) {
300
538
  lines.push("*(empty frame)*", "");
301
539
  }
302
540
  for (const el of inSection)
303
- renderElement(el);
304
- for (const p of portalsHere) {
305
- lines.push(`- Portal → **${p.title}** (\`${p.canvasId}\`)`);
306
- }
541
+ renderElement(lines, el);
542
+ for (const p of portalsHere)
543
+ renderPortal(lines, p);
307
544
  if (portalsHere.length)
308
545
  lines.push("");
309
546
  }
@@ -311,16 +548,7 @@ export function renderCanvasMarkdown(result) {
311
548
  lines.push(`## Edges (${result.edges.length})`, "");
312
549
  for (const e of result.edges) {
313
550
  const label = e.label ? ` — *${e.label}*` : "";
314
- // arrowEnd defaults to true and is only carried when explicitly false, so
315
- // a both-ends-bare edge reads as a plain line rather than a false arrow.
316
- const arrow = e.arrowEnd === false
317
- ? e.arrowStart
318
- ? "<-"
319
- : "--"
320
- : e.arrowStart
321
- ? "<->"
322
- : "->";
323
- lines.push(`- ${e.from} ${arrow} ${e.to}${label}`);
551
+ lines.push(`- ${e.from} ${arrowGlyph(e)} ${e.to}${label}`);
324
552
  }
325
553
  lines.push("");
326
554
  }
@@ -1 +1 @@
1
- {"version":3,"file":"canvas-read.js","sourceRoot":"","sources":["../../src/lib/canvas-read.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"canvas-read.js","sourceRoot":"","sources":["../../src/lib/canvas-read.ts"],"names":[],"mappings":"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"}
@@ -27,7 +27,7 @@ import { ApiClient } from "./lib/api-client.js";
27
27
  import { ApiError, CliError, NotFoundError } from "./lib/errors.js";
28
28
  import { parseStart as parseFocusStart } from "./lib/focus-time.js";
29
29
  import { resolveNoteId } from "./lib/resolve-note.js";
30
- import { readCanvasMarkdown } from "./lib/canvas-read.js";
30
+ import { readCanvasMarkdown, readCanvasSection } from "./lib/canvas-read.js";
31
31
  import { buildSchema } from "./lib/build-schema.js";
32
32
  import { assertMcpLocalFileReadable, getMcpLocalFileRoots, } from "./lib/mcp-local-file.js";
33
33
  import { attachRubricsToResults, loadRubricMap, rubricsForTypes, } from "./lib/rubrics.js";
@@ -332,6 +332,9 @@ server.tool("cnotes_canvas_get", "Get canvas details including nodes, edges, and
332
332
  server.tool("cnotes_canvas_read", "Read every note on a canvas as one concatenated markdown document, in display order (top-to-bottom, then left-to-right). Use this to think across a canvas in a single round-trip — preferred over canvas_get + N notes_get calls.", {
333
333
  canvasId: z.string().describe("Canvas ID"),
334
334
  }, async ({ canvasId }) => withErrorHandling(async () => readCanvasMarkdown(api, workspaceId, canvasId)));
335
+ server.tool("cnotes_canvas_read_section", "Read ONE section frame of a canvas: every note, sticky, list and portal whose center sits inside it, any frame nested within it, plus the edges it touches (an edge leaving the frame reports where it goes). Takes the SECTION-<n> handle on its own — the canvas is resolved for you. Use this when the user refers to a group of cards by its frame (\"look at SECTION-6GC\", \"what's in the risks section\") instead of reading the whole canvas and filtering.", {
336
+ section: z.string().describe("Section handle — SECTION-<n> display ID, or a raw section node ID"),
337
+ }, async ({ section }) => withErrorHandling(async () => readCanvasSection(api, workspaceId, section)));
335
338
  server.tool("cnotes_canvas_create", "Create a new canvas. Goal and target audience are required — every canvas must declare its purpose and who it serves.", {
336
339
  name: z.string().describe("Canvas name"),
337
340
  goal: z.string().describe("Canvas goal — the purpose, desired outcome, and what it should communicate (markdown). Required."),
@@ -449,7 +452,7 @@ server.tool("cnotes_canvas_bulk_add", "Add one or more items to a canvas. Use th
449
452
  x: z.number().describe("X position"),
450
453
  y: z.number().describe("Y position"),
451
454
  size: z.enum(["small", "medium", "large"]).optional().describe("Node size"),
452
- colorHex: z.string().optional().describe("Background tint hex. Default is NO background — omit unless the tint encodes a role used consistently on this canvas."),
455
+ colorHex: z.string().optional().describe("Background tint. Default is NO background. Pass a ROLE hex: #3B82F6 evidence · #22C55E commitment · #EC4899 insight · #F59E0B warning · #EF4444 danger · #8B5CF6 people. Any other hex snaps to the nearest of these at render. Reuse one role per meaning; omit unless the tint means something."),
453
456
  }),
454
457
  z.object({
455
458
  type: z.literal("list"),
@@ -472,7 +475,7 @@ server.tool("cnotes_canvas_bulk_add", "Add one or more items to a canvas. Use th
472
475
  y: z.number().describe("Y position (frame top-left)"),
473
476
  width: z.number().min(1).optional().describe("Frame width in px"),
474
477
  height: z.number().min(1).optional().describe("Frame height in px"),
475
- colorHex: z.string().optional().describe("Frame tint color hex"),
478
+ colorHex: z.string().optional().describe("Frame tint. Role hexes: #3B82F6 evidence · #22C55E commitment · #EC4899 insight · #F59E0B warning · #EF4444 danger · #8B5CF6 people; anything else snaps to the nearest of these at render. Omit unless the tint means something."),
476
479
  }),
477
480
  z.object({
478
481
  type: z.literal("edge"),
@@ -512,7 +515,7 @@ server.tool("cnotes_canvas_bulk_add", "Add one or more items to a canvas. Use th
512
515
  items: allItems,
513
516
  });
514
517
  }));
515
- server.tool("cnotes_canvas_place", "Place items on a canvas using a DECLARATIVE LAYOUT (no x/y math). The server measures every item, packs them with no overlaps, and inserts them in a single batch. PREFER THIS over cnotes_canvas_bulk_add whenever you can express the layout as stacks/grids/anchors — which is almost always. The agent should describe STRUCTURE (rows, columns, what's near what), not pixel coordinates.\n\nELEMENT CHOICE: default content to typed NOTES (the only versioned, searchable tier agents can read back); richtext = the Text element, card-sized framing only (a heading is just content '# Title', untinted), section = a named region frame, list = member notes behind a one-line frame, edges connect notes only.\n\nThe call is best-effort, NOT atomic: per-item failures are reported in the response (HTTP 207) but the items that succeeded stay on the canvas. Always inspect `items[].error` and `edges[].error` in the response.\n\nThe `doc` argument is a layout document:\n { root: <LayoutNode>, edges?: [{from, to, label?}], origin?: {x, y} }\n\n<LayoutNode> is one of:\n • { kind: 'stack', axis: 'vertical'|'horizontal', gap?: 'tight'|'medium'|'spacious'|<px>, align?: 'start'|'center'|'end', items: [<LayoutNode>...] }\n • { kind: 'grid', columns: <n>, gap?: ..., items: [<LayoutNode>...] }\n • { kind: 'anchor', to: '<displayId or canvas node id>', direction: 'right'|'left'|'above'|'below', gap?: ..., child: <LayoutNode> }\n • { kind: 'item', type: 'note'|'richtext'|'list'|'canvas'|'section', key?: '<name>', ...item-specific fields }\n\nLeaf item shapes (no x/y!):\n note: { kind:'item', type:'note', noteId:'NOTE-3', key?:'a' }\n richtext: { kind:'item', type:'richtext', content:'# Markdown OK', size?:'small'|'medium'|'large', colorHex?:'<hex>' } // the Text element: card-sized framing only; a heading is just content '# Title' with no colorHex; plain markdown, NO [NOTE-X](relationship:...) mention syntax (corrupts the card); knowledge worth keeping = a note\n list: { kind:'item', type:'list', description:'One-line frame — first paragraph becomes the title', noteIds?:['NOTE-1','NOTE-2'], viewMode?:'list'|'grid' } // description is REQUIRED and is a frame, never the content: N distinct things = N notes in noteIds\n canvas: { kind:'item', type:'canvas', linkedCanvasId:'<id>' }\n\nEdges reference endpoints by, in priority order: `@<key>` (any item with a `key` placed in the same call), the original noteId/displayId of a note placed in this call (e.g. 'NOTE-7'), or the displayId / convex id of a node already on the canvas.\n\nExample (a SWOT-like quadrant):\n {\n root: {\n kind:'stack', axis:'vertical', gap:'spacious',\n items:[\n { kind:'stack', axis:'horizontal', gap:'spacious', items:[\n { kind:'grid', columns:2, items:[\n { kind:'item', type:'note', noteId:'STR-1' },\n { kind:'item', type:'note', noteId:'STR-2' },\n ]},\n { kind:'grid', columns:2, items:[\n { kind:'item', type:'note', noteId:'WEAK-1' },\n ]},\n ]},\n { kind:'stack', axis:'horizontal', gap:'spacious', items:[ /* opportunities + threats */ ]},\n ],\n },\n }", {
518
+ server.tool("cnotes_canvas_place", "Place items on a canvas using a DECLARATIVE LAYOUT (no x/y math). The server measures every item, packs them with no overlaps, and inserts them in a single batch. PREFER THIS over cnotes_canvas_bulk_add whenever you can express the layout as stacks/grids/anchors — which is almost always. The agent should describe STRUCTURE (rows, columns, what's near what), not pixel coordinates.\n\nELEMENT CHOICE: default content to typed NOTES (the only versioned, searchable tier agents can read back); richtext = the Text element, card-sized framing only (a heading is just content '# Title', untinted), section = a named region frame, list = member notes behind a one-line frame, edges connect notes only.\n\nThe call is best-effort, NOT atomic: per-item failures are reported in the response (HTTP 207) but the items that succeeded stay on the canvas. Always inspect `items[].error` and `edges[].error` in the response.\n\nThe `doc` argument is a layout document:\n { root: <LayoutNode>, edges?: [{from, to, label?}], origin?: {x, y} }\n\n<LayoutNode> is one of:\n • { kind: 'stack', axis: 'vertical'|'horizontal', gap?: 'tight'|'medium'|'spacious'|<px>, align?: 'start'|'center'|'end', items: [<LayoutNode>...] }\n • { kind: 'grid', columns: <n>, gap?: ..., items: [<LayoutNode>...] }\n • { kind: 'anchor', to: '<displayId or canvas node id>', direction: 'right'|'left'|'above'|'below', gap?: ..., child: <LayoutNode> }\n • { kind: 'item', type: 'note'|'richtext'|'list'|'canvas'|'section', key?: '<name>', ...item-specific fields }\n\nLeaf item shapes (no x/y!):\n note: { kind:'item', type:'note', noteId:'NOTE-3', key?:'a' }\n richtext: { kind:'item', type:'richtext', content:'# Markdown OK', size?:'small'|'medium'|'large', colorHex?:'<role hex>' } // the Text element: card-sized framing only; a heading is just content '# Title' with no colorHex; colorHex is a ROLE tint (#3B82F6 evidence · #22C55E commitment · #EC4899 insight · #F59E0B warning · #EF4444 danger · #8B5CF6 people — anything else snaps to the nearest), default untinted; plain markdown, NO [NOTE-X](relationship:...) mention syntax (corrupts the card); knowledge worth keeping = a note\n list: { kind:'item', type:'list', description:'One-line frame — first paragraph becomes the title', noteIds?:['NOTE-1','NOTE-2'], viewMode?:'list'|'grid' } // description is REQUIRED and is a frame, never the content: N distinct things = N notes in noteIds\n canvas: { kind:'item', type:'canvas', linkedCanvasId:'<id>' }\n\nEdges reference endpoints by, in priority order: `@<key>` (any item with a `key` placed in the same call), the original noteId/displayId of a note placed in this call (e.g. 'NOTE-7'), or the displayId / convex id of a node already on the canvas.\n\nExample (a SWOT-like quadrant):\n {\n root: {\n kind:'stack', axis:'vertical', gap:'spacious',\n items:[\n { kind:'stack', axis:'horizontal', gap:'spacious', items:[\n { kind:'grid', columns:2, items:[\n { kind:'item', type:'note', noteId:'STR-1' },\n { kind:'item', type:'note', noteId:'STR-2' },\n ]},\n { kind:'grid', columns:2, items:[\n { kind:'item', type:'note', noteId:'WEAK-1' },\n ]},\n ]},\n { kind:'stack', axis:'horizontal', gap:'spacious', items:[ /* opportunities + threats */ ]},\n ],\n },\n }", {
516
519
  canvasId: z.string().describe("Canvas ID"),
517
520
  doc: z
518
521
  .object({
@@ -675,7 +678,7 @@ server.tool("cnotes_canvas_update_section", "Resize, rename, move, or recolor an
675
678
  colorHex: z
676
679
  .string()
677
680
  .optional()
678
- .describe("New frame tint hex, or '' to reset to the default"),
681
+ .describe("New frame tint — a role hex (#3B82F6 evidence · #22C55E commitment · #EC4899 insight · #F59E0B warning · #EF4444 danger · #8B5CF6 people; anything else snaps to the nearest), or '' to reset to the default"),
679
682
  }, async ({ canvasId, sectionId, name, x, y, width, height, colorHex }) => withErrorHandling(() => {
680
683
  const body = {
681
684
  action: "updateSectionNode",