@creator-notes/cnotes 0.45.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.
- package/dist/commands/canvas.d.ts.map +1 -1
- package/dist/commands/canvas.js +32 -1
- package/dist/commands/canvas.js.map +1 -1
- package/dist/lib/canvas-read.d.ts +59 -0
- package/dist/lib/canvas-read.d.ts.map +1 -1
- package/dist/lib/canvas-read.js +280 -52
- package/dist/lib/canvas-read.js.map +1 -1
- package/dist/mcp-server.js +4 -1
- package/dist/mcp-server.js.map +1 -1
- package/package.json +1 -1
- package/skills/cnotes/SKILL.md +9 -0
package/dist/lib/canvas-read.js
CHANGED
|
@@ -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
|
-
//
|
|
60
|
-
//
|
|
61
|
-
//
|
|
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
|
-
|
|
81
|
-
|
|
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 =
|
|
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
|
-
|
|
95
|
-
|
|
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
|
|
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
|
-
|
|
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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"}
|
package/dist/mcp-server.js
CHANGED
|
@@ -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."),
|