synabun 2026.3.307 → 2026.3.310
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/CLAUDE.md +150 -0
- package/hooks/claude-code/post-plan.mjs +1 -1
- package/hooks/claude-code/session-start.mjs +2 -0
- package/mcp-server/dist/config.d.ts +13 -0
- package/mcp-server/dist/config.d.ts.map +1 -0
- package/mcp-server/dist/config.js +59 -0
- package/mcp-server/dist/config.js.map +1 -0
- package/mcp-server/dist/http.d.ts +13 -0
- package/mcp-server/dist/http.d.ts.map +1 -0
- package/mcp-server/dist/http.js +86 -0
- package/mcp-server/dist/http.js.map +1 -0
- package/mcp-server/dist/index.d.ts +10 -0
- package/mcp-server/dist/index.d.ts.map +1 -0
- package/mcp-server/dist/index.js +189 -0
- package/mcp-server/dist/index.js.map +1 -0
- package/mcp-server/dist/preload-http.d.ts +3 -0
- package/mcp-server/dist/preload-http.d.ts.map +1 -0
- package/mcp-server/dist/preload-http.js +26 -0
- package/mcp-server/dist/preload-http.js.map +1 -0
- package/mcp-server/dist/preload.d.ts +3 -0
- package/mcp-server/dist/preload.d.ts.map +1 -0
- package/mcp-server/dist/preload.js +30 -0
- package/mcp-server/dist/preload.js.map +1 -0
- package/mcp-server/dist/scripts/migrate-qdrant-to-sqlite.d.ts +19 -0
- package/mcp-server/dist/scripts/migrate-qdrant-to-sqlite.d.ts.map +1 -0
- package/mcp-server/dist/scripts/migrate-qdrant-to-sqlite.js +403 -0
- package/mcp-server/dist/scripts/migrate-qdrant-to-sqlite.js.map +1 -0
- package/mcp-server/dist/services/categories.d.ts +61 -0
- package/mcp-server/dist/services/categories.d.ts.map +1 -0
- package/mcp-server/dist/services/categories.js +356 -0
- package/mcp-server/dist/services/categories.js.map +1 -0
- package/mcp-server/dist/services/discord.d.ts +112 -0
- package/mcp-server/dist/services/discord.d.ts.map +1 -0
- package/mcp-server/dist/services/discord.js +477 -0
- package/mcp-server/dist/services/discord.js.map +1 -0
- package/mcp-server/dist/services/file-checksums.d.ts +14 -0
- package/mcp-server/dist/services/file-checksums.d.ts.map +1 -0
- package/mcp-server/dist/services/file-checksums.js +34 -0
- package/mcp-server/dist/services/file-checksums.js.map +1 -0
- package/mcp-server/dist/services/local-embeddings.d.ts +23 -0
- package/mcp-server/dist/services/local-embeddings.d.ts.map +1 -0
- package/mcp-server/dist/services/local-embeddings.js +71 -0
- package/mcp-server/dist/services/local-embeddings.js.map +1 -0
- package/mcp-server/dist/services/neural-interface.d.ts +92 -0
- package/mcp-server/dist/services/neural-interface.d.ts.map +1 -0
- package/mcp-server/dist/services/neural-interface.js +238 -0
- package/mcp-server/dist/services/neural-interface.js.map +1 -0
- package/mcp-server/dist/services/sqlite.d.ts +85 -0
- package/mcp-server/dist/services/sqlite.d.ts.map +1 -0
- package/mcp-server/dist/services/sqlite.js +660 -0
- package/mcp-server/dist/services/sqlite.js.map +1 -0
- package/mcp-server/dist/tools/browser-advanced.d.ts +54 -0
- package/mcp-server/dist/tools/browser-advanced.d.ts.map +1 -0
- package/mcp-server/dist/tools/browser-advanced.js +97 -0
- package/mcp-server/dist/tools/browser-advanced.js.map +1 -0
- package/mcp-server/dist/tools/browser-interact.d.ts +138 -0
- package/mcp-server/dist/tools/browser-interact.d.ts.map +1 -0
- package/mcp-server/dist/tools/browser-interact.js +216 -0
- package/mcp-server/dist/tools/browser-interact.js.map +1 -0
- package/mcp-server/dist/tools/browser-navigate.d.ts +52 -0
- package/mcp-server/dist/tools/browser-navigate.d.ts.map +1 -0
- package/mcp-server/dist/tools/browser-navigate.js +61 -0
- package/mcp-server/dist/tools/browser-navigate.js.map +1 -0
- package/mcp-server/dist/tools/browser-observe.d.ts +298 -0
- package/mcp-server/dist/tools/browser-observe.d.ts.map +1 -0
- package/mcp-server/dist/tools/browser-observe.js +1154 -0
- package/mcp-server/dist/tools/browser-observe.js.map +1 -0
- package/mcp-server/dist/tools/browser.d.ts +7 -0
- package/mcp-server/dist/tools/browser.d.ts.map +1 -0
- package/mcp-server/dist/tools/browser.js +55 -0
- package/mcp-server/dist/tools/browser.js.map +1 -0
- package/mcp-server/dist/tools/card-tools.d.ts +82 -0
- package/mcp-server/dist/tools/card-tools.d.ts.map +1 -0
- package/mcp-server/dist/tools/card-tools.js +137 -0
- package/mcp-server/dist/tools/card-tools.js.map +1 -0
- package/mcp-server/dist/tools/card.d.ts +8 -0
- package/mcp-server/dist/tools/card.d.ts.map +1 -0
- package/mcp-server/dist/tools/card.js +14 -0
- package/mcp-server/dist/tools/card.js.map +1 -0
- package/mcp-server/dist/tools/category.d.ts +32 -0
- package/mcp-server/dist/tools/category.d.ts.map +1 -0
- package/mcp-server/dist/tools/category.js +290 -0
- package/mcp-server/dist/tools/category.js.map +1 -0
- package/mcp-server/dist/tools/discord-channel.d.ts +44 -0
- package/mcp-server/dist/tools/discord-channel.d.ts.map +1 -0
- package/mcp-server/dist/tools/discord-channel.js +236 -0
- package/mcp-server/dist/tools/discord-channel.js.map +1 -0
- package/mcp-server/dist/tools/discord-guild.d.ts +20 -0
- package/mcp-server/dist/tools/discord-guild.d.ts.map +1 -0
- package/mcp-server/dist/tools/discord-guild.js +138 -0
- package/mcp-server/dist/tools/discord-guild.js.map +1 -0
- package/mcp-server/dist/tools/discord-member.d.ts +26 -0
- package/mcp-server/dist/tools/discord-member.d.ts.map +1 -0
- package/mcp-server/dist/tools/discord-member.js +122 -0
- package/mcp-server/dist/tools/discord-member.js.map +1 -0
- package/mcp-server/dist/tools/discord-message.d.ts +36 -0
- package/mcp-server/dist/tools/discord-message.d.ts.map +1 -0
- package/mcp-server/dist/tools/discord-message.js +184 -0
- package/mcp-server/dist/tools/discord-message.js.map +1 -0
- package/mcp-server/dist/tools/discord-onboarding.d.ts +32 -0
- package/mcp-server/dist/tools/discord-onboarding.d.ts.map +1 -0
- package/mcp-server/dist/tools/discord-onboarding.js +179 -0
- package/mcp-server/dist/tools/discord-onboarding.js.map +1 -0
- package/mcp-server/dist/tools/discord-role.d.ts +34 -0
- package/mcp-server/dist/tools/discord-role.d.ts.map +1 -0
- package/mcp-server/dist/tools/discord-role.js +178 -0
- package/mcp-server/dist/tools/discord-role.js.map +1 -0
- package/mcp-server/dist/tools/discord-thread.d.ts +28 -0
- package/mcp-server/dist/tools/discord-thread.d.ts.map +1 -0
- package/mcp-server/dist/tools/discord-thread.js +88 -0
- package/mcp-server/dist/tools/discord-thread.js.map +1 -0
- package/mcp-server/dist/tools/discord-webhook.d.ts +32 -0
- package/mcp-server/dist/tools/discord-webhook.d.ts.map +1 -0
- package/mcp-server/dist/tools/discord-webhook.js +154 -0
- package/mcp-server/dist/tools/discord-webhook.js.map +1 -0
- package/mcp-server/dist/tools/discord.d.ts +7 -0
- package/mcp-server/dist/tools/discord.d.ts.map +1 -0
- package/mcp-server/dist/tools/discord.js +31 -0
- package/mcp-server/dist/tools/discord.js.map +1 -0
- package/mcp-server/dist/tools/forget.d.ts +14 -0
- package/mcp-server/dist/tools/forget.d.ts.map +1 -0
- package/mcp-server/dist/tools/forget.js +26 -0
- package/mcp-server/dist/tools/forget.js.map +1 -0
- package/mcp-server/dist/tools/git-tools.d.ts +24 -0
- package/mcp-server/dist/tools/git-tools.d.ts.map +1 -0
- package/mcp-server/dist/tools/git-tools.js +107 -0
- package/mcp-server/dist/tools/git-tools.js.map +1 -0
- package/mcp-server/dist/tools/git.d.ts +7 -0
- package/mcp-server/dist/tools/git.d.ts.map +1 -0
- package/mcp-server/dist/tools/git.js +9 -0
- package/mcp-server/dist/tools/git.js.map +1 -0
- package/mcp-server/dist/tools/image-tools.d.ts +24 -0
- package/mcp-server/dist/tools/image-tools.d.ts.map +1 -0
- package/mcp-server/dist/tools/image-tools.js +80 -0
- package/mcp-server/dist/tools/image-tools.js.map +1 -0
- package/mcp-server/dist/tools/image.d.ts +10 -0
- package/mcp-server/dist/tools/image.d.ts.map +1 -0
- package/mcp-server/dist/tools/image.js +12 -0
- package/mcp-server/dist/tools/image.js.map +1 -0
- package/mcp-server/dist/tools/leonardo-browser-tools.d.ts +77 -0
- package/mcp-server/dist/tools/leonardo-browser-tools.d.ts.map +1 -0
- package/mcp-server/dist/tools/leonardo-browser-tools.js +223 -0
- package/mcp-server/dist/tools/leonardo-browser-tools.js.map +1 -0
- package/mcp-server/dist/tools/leonardo.d.ts +13 -0
- package/mcp-server/dist/tools/leonardo.d.ts.map +1 -0
- package/mcp-server/dist/tools/leonardo.js +19 -0
- package/mcp-server/dist/tools/leonardo.js.map +1 -0
- package/mcp-server/dist/tools/loop.d.ts +30 -0
- package/mcp-server/dist/tools/loop.d.ts.map +1 -0
- package/mcp-server/dist/tools/loop.js +302 -0
- package/mcp-server/dist/tools/loop.js.map +1 -0
- package/mcp-server/dist/tools/memories.d.ts +26 -0
- package/mcp-server/dist/tools/memories.d.ts.map +1 -0
- package/mcp-server/dist/tools/memories.js +96 -0
- package/mcp-server/dist/tools/memories.js.map +1 -0
- package/mcp-server/dist/tools/recall.d.ts +41 -0
- package/mcp-server/dist/tools/recall.d.ts.map +1 -0
- package/mcp-server/dist/tools/recall.js +275 -0
- package/mcp-server/dist/tools/recall.js.map +1 -0
- package/mcp-server/dist/tools/reflect.d.ts +44 -0
- package/mcp-server/dist/tools/reflect.d.ts.map +1 -0
- package/mcp-server/dist/tools/reflect.js +118 -0
- package/mcp-server/dist/tools/reflect.js.map +1 -0
- package/mcp-server/dist/tools/remember.d.ts +38 -0
- package/mcp-server/dist/tools/remember.d.ts.map +1 -0
- package/mcp-server/dist/tools/remember.js +88 -0
- package/mcp-server/dist/tools/remember.js.map +1 -0
- package/mcp-server/dist/tools/response.d.ts +23 -0
- package/mcp-server/dist/tools/response.d.ts.map +1 -0
- package/mcp-server/dist/tools/response.js +24 -0
- package/mcp-server/dist/tools/response.js.map +1 -0
- package/mcp-server/dist/tools/restore.d.ts +14 -0
- package/mcp-server/dist/tools/restore.d.ts.map +1 -0
- package/mcp-server/dist/tools/restore.js +23 -0
- package/mcp-server/dist/tools/restore.js.map +1 -0
- package/mcp-server/dist/tools/sync.d.ts +18 -0
- package/mcp-server/dist/tools/sync.d.ts.map +1 -0
- package/mcp-server/dist/tools/sync.js +93 -0
- package/mcp-server/dist/tools/sync.js.map +1 -0
- package/mcp-server/dist/tools/tictactoe-tools.d.ts +18 -0
- package/mcp-server/dist/tools/tictactoe-tools.d.ts.map +1 -0
- package/mcp-server/dist/tools/tictactoe-tools.js +78 -0
- package/mcp-server/dist/tools/tictactoe-tools.js.map +1 -0
- package/mcp-server/dist/tools/tictactoe.d.ts +7 -0
- package/mcp-server/dist/tools/tictactoe.d.ts.map +1 -0
- package/mcp-server/dist/tools/tictactoe.js +9 -0
- package/mcp-server/dist/tools/tictactoe.js.map +1 -0
- package/mcp-server/dist/tools/utils.d.ts +10 -0
- package/mcp-server/dist/tools/utils.d.ts.map +1 -0
- package/mcp-server/dist/tools/utils.js +30 -0
- package/mcp-server/dist/tools/utils.js.map +1 -0
- package/mcp-server/dist/tools/whiteboard-tools.d.ts +194 -0
- package/mcp-server/dist/tools/whiteboard-tools.d.ts.map +1 -0
- package/mcp-server/dist/tools/whiteboard-tools.js +198 -0
- package/mcp-server/dist/tools/whiteboard-tools.js.map +1 -0
- package/mcp-server/dist/tools/whiteboard.d.ts +8 -0
- package/mcp-server/dist/tools/whiteboard.d.ts.map +1 -0
- package/mcp-server/dist/tools/whiteboard.js +14 -0
- package/mcp-server/dist/tools/whiteboard.js.map +1 -0
- package/mcp-server/dist/tui.d.ts +3 -0
- package/mcp-server/dist/tui.d.ts.map +1 -0
- package/mcp-server/dist/tui.js +807 -0
- package/mcp-server/dist/tui.js.map +1 -0
- package/mcp-server/dist/types.d.ts +77 -0
- package/mcp-server/dist/types.d.ts.map +1 -0
- package/mcp-server/dist/types.js +2 -0
- package/mcp-server/dist/types.js.map +1 -0
- package/neural-interface/public/shared/styles.css +2 -2
- package/neural-interface/public/shared/ui-settings.js +2 -2
- package/neural-interface/server.js +82 -8
- package/neural-interface/templates/CLAUDE-template.md +9 -1
- package/package.json +4 -2
- package/preuninstall.js +28 -0
- package/setup.js +86 -1
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import * as ni from '../services/neural-interface.js';
|
|
3
|
+
import { text, image } from './response.js';
|
|
4
|
+
// ═══════════════════════════════════════════
|
|
5
|
+
// whiteboard_read
|
|
6
|
+
// ═══════════════════════════════════════════
|
|
7
|
+
export const whiteboardReadSchema = {};
|
|
8
|
+
export const whiteboardReadDescription = 'Read the current whiteboard state. Returns element descriptions with IDs, positions, and properties, plus the usable viewport dimensions (width x height in pixels, excluding navbar and terminal). ALWAYS call this before placing elements — the viewport tells you the exact canvas boundaries. All elements must fit within these dimensions.';
|
|
9
|
+
function describeElement(el) {
|
|
10
|
+
const pos = `at (${Math.round(el.x)}, ${Math.round(el.y)})`;
|
|
11
|
+
switch (el.type) {
|
|
12
|
+
case 'text': {
|
|
13
|
+
const style = [
|
|
14
|
+
el.bold && 'bold',
|
|
15
|
+
el.italic && 'italic',
|
|
16
|
+
el.fontSize && `${el.fontSize}px`,
|
|
17
|
+
el.color && `color:${el.color}`,
|
|
18
|
+
].filter(Boolean).join(', ');
|
|
19
|
+
const content = el.content || '(empty)';
|
|
20
|
+
const preview = content.length > 80 ? content.slice(0, 80) + '...' : content;
|
|
21
|
+
return `[${el.id}] TEXT ${pos}: "${preview}"${style ? ` (${style})` : ''}`;
|
|
22
|
+
}
|
|
23
|
+
case 'shape': {
|
|
24
|
+
const dims = `${Math.round(el.width || 160)}x${Math.round(el.height || 100)}`;
|
|
25
|
+
return `[${el.id}] SHAPE:${el.shape || 'rect'} ${pos} ${dims}${el.color ? ` color:${el.color}` : ''}`;
|
|
26
|
+
}
|
|
27
|
+
case 'arrow': {
|
|
28
|
+
const pts = (el.points || []).map(p => `(${Math.round(p[0])},${Math.round(p[1])})`).join(' → ');
|
|
29
|
+
const anchors = [];
|
|
30
|
+
if (el.startAnchor)
|
|
31
|
+
anchors.push(`from:${el.startAnchor}`);
|
|
32
|
+
if (el.endAnchor)
|
|
33
|
+
anchors.push(`to:${el.endAnchor}`);
|
|
34
|
+
return `[${el.id}] ARROW: ${pts}${anchors.length ? ` anchored ${anchors.join(', ')}` : ''}`;
|
|
35
|
+
}
|
|
36
|
+
case 'pen': {
|
|
37
|
+
const ptCount = el.points?.length || 0;
|
|
38
|
+
return `[${el.id}] PEN ${pos} (${ptCount} points, stroke:${el.strokeWidth || 3})${el.color ? ` color:${el.color}` : ''}`;
|
|
39
|
+
}
|
|
40
|
+
case 'list': {
|
|
41
|
+
const items = el.items || [];
|
|
42
|
+
const preview = items.slice(0, 5).map((it, i) => ` ${i + 1}. ${it}`).join('\n');
|
|
43
|
+
const more = items.length > 5 ? `\n ... +${items.length - 5} more` : '';
|
|
44
|
+
return `[${el.id}] LIST ${pos} (${items.length} item${items.length !== 1 ? 's' : ''}):\n${preview}${more}`;
|
|
45
|
+
}
|
|
46
|
+
case 'image': {
|
|
47
|
+
const dims = `${Math.round(el.width || 0)}x${Math.round(el.height || 0)}`;
|
|
48
|
+
return `[${el.id}] IMAGE ${pos} ${dims}`;
|
|
49
|
+
}
|
|
50
|
+
case 'section': {
|
|
51
|
+
const dims = `${Math.round(el.width || 0)}x${Math.round(el.height || 0)}`;
|
|
52
|
+
const sType = el.sectionType || 'unknown';
|
|
53
|
+
const label = el.label || sType;
|
|
54
|
+
return `[${el.id}] SECTION:${sType} ${pos} ${dims} "${label}"`;
|
|
55
|
+
}
|
|
56
|
+
default:
|
|
57
|
+
return `[${el.id}] ${el.type.toUpperCase()} ${pos}`;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
export async function handleWhiteboardRead() {
|
|
61
|
+
const result = await ni.getWhiteboard();
|
|
62
|
+
if (result.error) {
|
|
63
|
+
return text(`Failed to read whiteboard: ${result.error}`);
|
|
64
|
+
}
|
|
65
|
+
const elements = (result.elements || []);
|
|
66
|
+
const viewport = result.viewport;
|
|
67
|
+
if (elements.length === 0) {
|
|
68
|
+
let emptyText = 'Whiteboard is empty. No elements present.';
|
|
69
|
+
if (viewport)
|
|
70
|
+
emptyText += `\nUsable viewport: ${viewport.width}x${viewport.height} (origin offset: x=${viewport.xOffset || 0}, y=${viewport.yOffset || 0})\n⚠️ Design compact layouts centered in the viewport. Do NOT fill the entire width — use ~70-80% of viewport width, centered. All sections must fit vertically within the viewport height. Scale section heights proportionally to fit.`;
|
|
71
|
+
return text(emptyText);
|
|
72
|
+
}
|
|
73
|
+
let msg = `Whiteboard: ${elements.length} element(s)`;
|
|
74
|
+
if (viewport)
|
|
75
|
+
msg += ` | Usable viewport: ${viewport.width}x${viewport.height} (origin: x=${viewport.xOffset || 0}, y=${viewport.yOffset || 0})`;
|
|
76
|
+
msg += '\n\n';
|
|
77
|
+
msg += elements.map(describeElement).join('\n');
|
|
78
|
+
// Spatial bounds summary
|
|
79
|
+
const positioned = elements.filter(e => e.x != null && e.y != null);
|
|
80
|
+
if (positioned.length > 0) {
|
|
81
|
+
const xs = positioned.map(e => e.x);
|
|
82
|
+
const ys = positioned.map(e => e.y);
|
|
83
|
+
msg += `\n\nBounds: x=[${Math.round(Math.min(...xs))}, ${Math.round(Math.max(...xs))}], y=[${Math.round(Math.min(...ys))}, ${Math.round(Math.max(...ys))}]`;
|
|
84
|
+
}
|
|
85
|
+
return text(msg);
|
|
86
|
+
}
|
|
87
|
+
// ═══════════════════════════════════════════
|
|
88
|
+
// whiteboard_add
|
|
89
|
+
// ═══════════════════════════════════════════
|
|
90
|
+
export const whiteboardAddSchema = {
|
|
91
|
+
coordMode: z.enum(['px', 'pct']).optional().describe('Coordinate mode. "px" (default) = absolute pixels. "pct" = percentage of viewport (0-100). x:50 y:50 = exact center.'),
|
|
92
|
+
layout: z.enum(['row', 'column', 'grid', 'center']).optional().describe('Auto-layout (overrides x/y). "row" = horizontal centered. "column" = vertical centered. "grid" = auto columns. "center" = stacked center.'),
|
|
93
|
+
elements: z.array(z.object({
|
|
94
|
+
type: z.enum(['text', 'list', 'shape', 'arrow', 'pen', 'image', 'section']).describe('Element type'),
|
|
95
|
+
x: z.number().optional().describe('X position (pixels from left). Required for text, list, shape.'),
|
|
96
|
+
y: z.number().optional().describe('Y position (pixels from top). Required for text, list, shape.'),
|
|
97
|
+
width: z.number().optional().describe('Width in pixels (shapes). Default: 160'),
|
|
98
|
+
height: z.number().optional().describe('Height in pixels (shapes). Default: 100'),
|
|
99
|
+
content: z.string().optional().describe('Text content (for text elements). Use \\n for line breaks.'),
|
|
100
|
+
items: z.array(z.string()).optional().describe('List items array (for list elements). Each string is one bullet point.'),
|
|
101
|
+
ordered: z.boolean().optional().describe('Use numbered list instead of bullets (list elements). Default: false'),
|
|
102
|
+
fontSize: z.number().optional().describe('Font size in px (text: default 22, list: default 18)'),
|
|
103
|
+
color: z.string().optional().describe('Color as CSS value. Default: rgba(255,255,255,0.85). Options: #ef4444 (red), #f97316 (orange), #eab308 (yellow), #22c55e (green), #3b82f6 (blue), #a855f7 (purple), #ec4899 (pink), #06b6d4 (cyan)'),
|
|
104
|
+
bold: z.boolean().optional().describe('Bold text (text elements)'),
|
|
105
|
+
italic: z.boolean().optional().describe('Italic text (text elements)'),
|
|
106
|
+
shape: z.enum(['rect', 'pill', 'circle', 'drawn-circle']).optional().describe('Shape subtype (for shape elements). Default: rect'),
|
|
107
|
+
points: z.array(z.array(z.number()).length(2)).optional().describe('Array of [x,y] waypoints (for arrow and pen elements). Arrows need 2+ points.'),
|
|
108
|
+
startAnchor: z.string().optional().describe('Element ID to anchor arrow start to'),
|
|
109
|
+
endAnchor: z.string().optional().describe('Element ID to anchor arrow end to'),
|
|
110
|
+
strokeWidth: z.number().optional().describe('Stroke width for pen elements (default 3)'),
|
|
111
|
+
rotation: z.number().optional().describe('Rotation in degrees'),
|
|
112
|
+
url: z.string().optional().describe('URL path for image elements (e.g., "/games/TicTacToe/Cross.svg"). Server resolves to base64 dataUrl.'),
|
|
113
|
+
sectionType: z.enum(['navbar', 'hero', 'sidebar', 'content', 'footer', 'card', 'form', 'image-placeholder', 'button', 'text-block', 'grid', 'modal']).optional().describe('Section type for wireframe elements (type=section). Determines default size, color, and semantic meaning.'),
|
|
114
|
+
label: z.string().optional().describe('Display label for section elements. Defaults to section type name.'),
|
|
115
|
+
})).describe('Array of elements to add to the whiteboard'),
|
|
116
|
+
};
|
|
117
|
+
export const whiteboardAddDescription = 'Add elements to the whiteboard. ALWAYS call whiteboard_read first to get the usable viewport size.\n\n⚠️ LAYOUT RULES (MANDATORY):\n1. COMPACT DESIGN — Do NOT fill the entire viewport. Use ~70-80% of viewport width, centered horizontally. This creates a clean, contained wireframe.\n2. VERTICAL FIT — ALL elements MUST fit within the viewport height. Scale section heights proportionally if the total exceeds the available space. Leave ~20px padding from top and bottom edges.\n3. NO OVERFLOW — No element should extend beyond viewport edges. The viewport already excludes the navbar, toolbar, and terminal. Coordinates are auto-offset to the usable area.\n4. PROPORTIONAL SCALING — Section default sizes are for manual use. When building full-page wireframes via MCP, calculate heights as fractions of viewport height (e.g. navbar=6%, hero=30%, content=40%, footer=10%).\n\nCoordinate modes (coordMode): "px" (default) = absolute pixels. "pct" = percentage of usable viewport (0-100), e.g. x:10 y:5 = near top-left of usable area. Coordinates are automatically offset past the navbar and toolbar.\n\nAuto-layout (layout): overrides individual x/y. "row" = horizontal row centered vertically. "column" = vertical stack centered horizontally. "grid" = auto-grid (2-4 columns based on count). "center" = stacked in center. Layouts auto-fit within viewport.\n\nSupports: text (\\n for line breaks), list (items array), shape (rect/pill/circle/drawn-circle), arrow (points + optional anchoring), pen, image (server URL), section (wireframe blocks). Returns assigned IDs. Good defaults: text fontSize 22, list fontSize 18, shapes 160x100.\n\nWireframe sections (type "section"): Semantic website layout blocks. Set sectionType (navbar/hero/sidebar/content/footer/card/form/image-placeholder/button/text-block/grid/modal) and optional label. When using "pct" coordMode, set widths as % of viewport (e.g. 70 for 70%) and heights as % too. Center horizontally with x: 15 for a 70%-width element.';
|
|
118
|
+
export async function handleWhiteboardAdd(args) {
|
|
119
|
+
const result = await ni.addWhiteboardElements(args.elements, args.coordMode, args.layout);
|
|
120
|
+
if (result.error) {
|
|
121
|
+
return text(`Failed to add elements: ${result.error}`);
|
|
122
|
+
}
|
|
123
|
+
const added = result.added;
|
|
124
|
+
const summary = added.map(a => ` ${a.id} (${a.type}, z:${a.zIndex})`).join('\n');
|
|
125
|
+
return text(`Added ${added.length} element(s):\n${summary}`);
|
|
126
|
+
}
|
|
127
|
+
// ═══════════════════════════════════════════
|
|
128
|
+
// whiteboard_update
|
|
129
|
+
// ═══════════════════════════════════════════
|
|
130
|
+
export const whiteboardUpdateSchema = {
|
|
131
|
+
coordMode: z.enum(['px', 'pct']).optional().describe('Coordinate mode for position/size values. "pct" = percentage of viewport.'),
|
|
132
|
+
id: z.string().describe('The element ID to update (from whiteboard_read results)'),
|
|
133
|
+
updates: z.object({
|
|
134
|
+
x: z.number().optional().describe('New X position'),
|
|
135
|
+
y: z.number().optional().describe('New Y position'),
|
|
136
|
+
width: z.number().optional().describe('New width'),
|
|
137
|
+
height: z.number().optional().describe('New height'),
|
|
138
|
+
content: z.string().optional().describe('New text content (text elements). Use \\n for line breaks.'),
|
|
139
|
+
items: z.array(z.string()).optional().describe('New list items array (list elements)'),
|
|
140
|
+
ordered: z.boolean().optional().describe('Switch between bullet/numbered list (list elements)'),
|
|
141
|
+
fontSize: z.number().optional().describe('New font size'),
|
|
142
|
+
color: z.string().optional().describe('New color'),
|
|
143
|
+
bold: z.boolean().optional().describe('Bold text'),
|
|
144
|
+
italic: z.boolean().optional().describe('Italic text'),
|
|
145
|
+
shape: z.enum(['rect', 'pill', 'circle', 'drawn-circle']).optional().describe('Change shape type'),
|
|
146
|
+
points: z.array(z.array(z.number()).length(2)).optional().describe('New points array'),
|
|
147
|
+
startAnchor: z.string().nullable().optional().describe('New start anchor ID (null to detach)'),
|
|
148
|
+
endAnchor: z.string().nullable().optional().describe('New end anchor ID (null to detach)'),
|
|
149
|
+
rotation: z.number().optional().describe('New rotation in degrees'),
|
|
150
|
+
strokeWidth: z.number().optional().describe('New stroke width'),
|
|
151
|
+
sectionType: z.enum(['navbar', 'hero', 'sidebar', 'content', 'footer', 'card', 'form', 'image-placeholder', 'button', 'text-block', 'grid', 'modal']).optional().describe('Change section type'),
|
|
152
|
+
label: z.string().optional().describe('Change section label'),
|
|
153
|
+
}).describe('Fields to update. Only specified fields are changed; others remain untouched.'),
|
|
154
|
+
};
|
|
155
|
+
export const whiteboardUpdateDescription = 'Update properties of an existing whiteboard element. Use whiteboard_read first to get element IDs. Only the specified fields are changed; others remain untouched. Set coordMode to "pct" to use percentage-based positioning. Changes appear in real-time.';
|
|
156
|
+
export async function handleWhiteboardUpdate(args) {
|
|
157
|
+
const result = await ni.updateWhiteboardElement(args.id, args.updates, args.coordMode);
|
|
158
|
+
if (result.error) {
|
|
159
|
+
return text(`Failed to update element: ${result.error}`);
|
|
160
|
+
}
|
|
161
|
+
const el = result.element;
|
|
162
|
+
return text(`Updated: ${describeElement(el)}`);
|
|
163
|
+
}
|
|
164
|
+
// ═══════════════════════════════════════════
|
|
165
|
+
// whiteboard_remove
|
|
166
|
+
// ═══════════════════════════════════════════
|
|
167
|
+
export const whiteboardRemoveSchema = {
|
|
168
|
+
id: z.string().optional().describe('Element ID to remove. Omit to clear the entire whiteboard.'),
|
|
169
|
+
};
|
|
170
|
+
export const whiteboardRemoveDescription = 'Remove a specific element from the whiteboard by ID, or clear the entire whiteboard if no ID is provided. Use whiteboard_read first to see element IDs. Arrows anchored to a removed element will be detached.';
|
|
171
|
+
export async function handleWhiteboardRemove(args) {
|
|
172
|
+
if (!args.id) {
|
|
173
|
+
const result = await ni.clearWhiteboard();
|
|
174
|
+
if (result.error) {
|
|
175
|
+
return text(`Failed to clear whiteboard: ${result.error}`);
|
|
176
|
+
}
|
|
177
|
+
return text('Whiteboard cleared.');
|
|
178
|
+
}
|
|
179
|
+
const result = await ni.removeWhiteboardElement(args.id);
|
|
180
|
+
if (result.error) {
|
|
181
|
+
return text(`Failed to remove element: ${result.error}`);
|
|
182
|
+
}
|
|
183
|
+
const removed = result.removed;
|
|
184
|
+
return text(`Removed ${removed.type} element ${removed.id}`);
|
|
185
|
+
}
|
|
186
|
+
// ═══════════════════════════════════════════
|
|
187
|
+
// whiteboard_screenshot
|
|
188
|
+
// ═══════════════════════════════════════════
|
|
189
|
+
export const whiteboardScreenshotSchema = {};
|
|
190
|
+
export const whiteboardScreenshotDescription = 'Take a visual screenshot of the whiteboard. Returns a JPEG image showing all current elements. Requires the Neural Interface to be open in a browser with Focus mode active. After receiving the screenshot, spawn a Haiku Task agent to interpret the visual contents if needed.';
|
|
191
|
+
export async function handleWhiteboardScreenshot() {
|
|
192
|
+
const result = await ni.whiteboardScreenshot();
|
|
193
|
+
if (result.error) {
|
|
194
|
+
return text(`Screenshot failed: ${result.error}`);
|
|
195
|
+
}
|
|
196
|
+
return image(result.data, 'image/jpeg');
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=whiteboard-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whiteboard-tools.js","sourceRoot":"","sources":["../../src/tools/whiteboard-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
/**
|
|
3
|
+
* Register all 5 whiteboard MCP tools on the given server instance.
|
|
4
|
+
* These tools let Claude read, create, modify, remove, and screenshot
|
|
5
|
+
* the whiteboard in the Neural Interface Focus mode.
|
|
6
|
+
*/
|
|
7
|
+
export declare function registerWhiteboardTools(server: McpServer): void;
|
|
8
|
+
//# sourceMappingURL=whiteboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whiteboard.d.ts","sourceRoot":"","sources":["../../src/tools/whiteboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUzE;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,QAMxD"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { whiteboardReadSchema, whiteboardReadDescription, handleWhiteboardRead, whiteboardAddSchema, whiteboardAddDescription, handleWhiteboardAdd, whiteboardUpdateSchema, whiteboardUpdateDescription, handleWhiteboardUpdate, whiteboardRemoveSchema, whiteboardRemoveDescription, handleWhiteboardRemove, whiteboardScreenshotSchema, whiteboardScreenshotDescription, handleWhiteboardScreenshot, } from './whiteboard-tools.js';
|
|
2
|
+
/**
|
|
3
|
+
* Register all 5 whiteboard MCP tools on the given server instance.
|
|
4
|
+
* These tools let Claude read, create, modify, remove, and screenshot
|
|
5
|
+
* the whiteboard in the Neural Interface Focus mode.
|
|
6
|
+
*/
|
|
7
|
+
export function registerWhiteboardTools(server) {
|
|
8
|
+
server.tool('whiteboard_read', whiteboardReadDescription, whiteboardReadSchema, handleWhiteboardRead);
|
|
9
|
+
server.tool('whiteboard_add', whiteboardAddDescription, whiteboardAddSchema, handleWhiteboardAdd);
|
|
10
|
+
server.tool('whiteboard_update', whiteboardUpdateDescription, whiteboardUpdateSchema, handleWhiteboardUpdate);
|
|
11
|
+
server.tool('whiteboard_remove', whiteboardRemoveDescription, whiteboardRemoveSchema, handleWhiteboardRemove);
|
|
12
|
+
server.tool('whiteboard_screenshot', whiteboardScreenshotDescription, whiteboardScreenshotSchema, handleWhiteboardScreenshot);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=whiteboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whiteboard.js","sourceRoot":"","sources":["../../src/tools/whiteboard.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EAAE,yBAAyB,EAAE,oBAAoB,EACrE,mBAAmB,EAAE,wBAAwB,EAAE,mBAAmB,EAClE,sBAAsB,EAAE,2BAA2B,EAAE,sBAAsB,EAC3E,sBAAsB,EAAE,2BAA2B,EAAE,sBAAsB,EAC3E,0BAA0B,EAAE,+BAA+B,EAAE,0BAA0B,GACxF,MAAM,uBAAuB,CAAC;AAE/B;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,oBAAoB,CAAC,CAAC;IACtG,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,mBAAmB,CAAC,CAAC;IAClG,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,sBAAsB,CAAC,CAAC;IAC9G,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,sBAAsB,CAAC,CAAC;IAC9G,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,+BAA+B,EAAE,0BAA0B,EAAE,0BAA0B,CAAC,CAAC;AAChI,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":""}
|