@vib3code/sdk 2.0.1 → 2.0.3-canary.0a63e71
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/CHANGELOG.md +36 -0
- package/DOCS/AGENT_HARNESS_ARCHITECTURE.md +245 -0
- package/DOCS/ANDROID_DEPLOYMENT.md +59 -0
- package/DOCS/ARCHITECTURE.md +1 -0
- package/DOCS/CI_TESTING.md +2 -0
- package/DOCS/CLI_ONBOARDING.md +3 -1
- package/DOCS/CONTROL_REFERENCE.md +2 -0
- package/DOCS/CROSS_SITE_DESIGN_PATTERNS.md +119 -0
- package/DOCS/ENV_SETUP.md +2 -0
- package/DOCS/EPIC_SCROLL_EVENTS.md +775 -0
- package/DOCS/EXPANSION_DESIGN.md +979 -0
- package/DOCS/EXPANSION_DESIGN_ULTRA.md +389 -0
- package/DOCS/EXPORT_FORMATS.md +2 -0
- package/DOCS/GPU_DISPOSAL_GUIDE.md +2 -0
- package/DOCS/HANDOFF_LANDING_PAGE.md +156 -0
- package/DOCS/HANDOFF_SDK_DEVELOPMENT.md +495 -0
- package/DOCS/LICENSING_TIERS.md +2 -0
- package/DOCS/MASTER_PLAN_2026-01-31.md +4 -2
- package/DOCS/MULTIVIZ_CHOREOGRAPHY_PATTERNS.md +939 -0
- package/DOCS/OBS_SETUP_GUIDE.md +2 -0
- package/DOCS/OPTIMIZATION_PLAN_MATH.md +119 -0
- package/DOCS/PRODUCT_STRATEGY.md +65 -0
- package/DOCS/PROJECT_SETUP.md +2 -0
- package/DOCS/README.md +105 -0
- package/DOCS/REFERENCE_SCROLL_ANALYSIS.md +99 -0
- package/DOCS/RENDERER_LIFECYCLE.md +2 -0
- package/DOCS/REPO_MANIFEST.md +2 -0
- package/DOCS/ROADMAP.md +113 -0
- package/DOCS/SCROLL_TIMELINE_v3.md +271 -0
- package/DOCS/SITE_REFACTOR_PLAN.md +102 -0
- package/DOCS/STATUS.md +26 -0
- package/DOCS/SYSTEM_INVENTORY.md +37 -32
- package/DOCS/TELEMETRY_EXPORTS.md +2 -0
- package/DOCS/VISUAL_ANALYSIS_CLICKERSS.md +87 -0
- package/DOCS/VISUAL_ANALYSIS_FACETAD.md +135 -0
- package/DOCS/VISUAL_ANALYSIS_SIMONE.md +97 -0
- package/DOCS/VISUAL_ANALYSIS_TABLESIDE.md +88 -0
- package/DOCS/WEBGPU_STATUS.md +121 -38
- package/DOCS/XR_BENCHMARKS.md +2 -0
- package/DOCS/archive/BLUEPRINT_EXECUTION_PLAN_2026-01-07.md +1 -0
- package/DOCS/archive/DEV_TRACK_ANALYSIS.md +1 -0
- package/DOCS/archive/DEV_TRACK_PLAN_2026-01-07.md +1 -0
- package/DOCS/archive/SESSION_014_PLAN.md +1 -0
- package/DOCS/archive/SESSION_LOG_2026-01-07.md +1 -0
- package/DOCS/archive/STRATEGIC_BLUEPRINT_2026-01-07.md +1 -0
- package/DOCS/archive/SYSTEM_AUDIT_2026-01-30.md +1 -0
- package/DOCS/archive/WEBGPU_STATUS_2026-02-15_STALE.md +1 -0
- package/DOCS/{DEV_TRACK_SESSION_2026-01-31.md → dev-tracks/DEV_TRACK_SESSION_2026-01-31.md} +3 -1
- package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-02-06.md +233 -0
- package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-02-13.md +129 -0
- package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-02-15.md +144 -0
- package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-02-16.md +110 -0
- package/DOCS/dev-tracks/PERF_UPGRADE_2026-02-16.md +310 -0
- package/DOCS/dev-tracks/README.md +12 -0
- package/README.md +26 -13
- package/cpp/CMakeLists.txt +236 -0
- package/cpp/bindings/embind.cpp +269 -0
- package/cpp/build.sh +129 -0
- package/cpp/geometry/Crystal.cpp +103 -0
- package/cpp/geometry/Fractal.cpp +136 -0
- package/cpp/geometry/GeometryGenerator.cpp +262 -0
- package/cpp/geometry/KleinBottle.cpp +71 -0
- package/cpp/geometry/Sphere.cpp +134 -0
- package/cpp/geometry/Tesseract.cpp +94 -0
- package/cpp/geometry/Tetrahedron.cpp +83 -0
- package/cpp/geometry/Torus.cpp +65 -0
- package/cpp/geometry/WarpFunctions.cpp +238 -0
- package/cpp/geometry/Wave.cpp +85 -0
- package/cpp/include/vib3_ffi.h +238 -0
- package/cpp/math/Mat4x4.cpp +409 -0
- package/cpp/math/Mat4x4.hpp +209 -0
- package/cpp/math/Projection.cpp +142 -0
- package/cpp/math/Projection.hpp +148 -0
- package/cpp/math/Rotor4D.cpp +322 -0
- package/cpp/math/Rotor4D.hpp +204 -0
- package/cpp/math/Vec4.cpp +303 -0
- package/cpp/math/Vec4.hpp +225 -0
- package/cpp/src/vib3_ffi.cpp +607 -0
- package/cpp/tests/Geometry_test.cpp +213 -0
- package/cpp/tests/Mat4x4_test.cpp +494 -0
- package/cpp/tests/Projection_test.cpp +298 -0
- package/cpp/tests/Rotor4D_test.cpp +423 -0
- package/cpp/tests/Vec4_test.cpp +489 -0
- package/docs/webgpu-live.html +1 -1
- package/package.json +41 -30
- package/src/agent/index.js +1 -3
- package/src/agent/mcp/MCPServer.js +1220 -144
- package/src/agent/mcp/index.js +1 -1
- package/src/agent/mcp/stdio-server.js +264 -0
- package/src/agent/mcp/tools.js +498 -31
- package/src/cli/index.js +431 -47
- package/src/core/CanvasManager.js +97 -204
- package/src/core/ErrorReporter.js +1 -1
- package/src/core/Parameters.js +1 -1
- package/src/core/VIB3Engine.js +93 -4
- package/src/core/VitalitySystem.js +53 -0
- package/src/core/index.js +18 -0
- package/src/core/renderers/FacetedRendererAdapter.js +10 -9
- package/src/core/renderers/HolographicRendererAdapter.js +13 -9
- package/src/core/renderers/QuantumRendererAdapter.js +11 -7
- package/src/creative/AestheticMapper.js +628 -0
- package/src/creative/ChoreographyPlayer.js +481 -0
- package/src/creative/index.js +11 -0
- package/src/experimental/GameLoop.js +72 -0
- package/src/experimental/LatticePhysics.js +100 -0
- package/src/experimental/LiveDirector.js +143 -0
- package/src/experimental/PlayerController4D.js +154 -0
- package/src/experimental/VIB3Actor.js +138 -0
- package/src/experimental/VIB3Compositor.js +117 -0
- package/src/experimental/VIB3Link.js +122 -0
- package/src/experimental/VIB3Orchestrator.js +146 -0
- package/src/experimental/VIB3Universe.js +109 -0
- package/src/experimental/demos/CrystalLabyrinth.js +202 -0
- package/src/export/TradingCardManager.js +3 -4
- package/src/export/index.js +11 -1
- package/src/faceted/FacetedSystem.js +260 -394
- package/src/games/glyph-war/GlyphWarVisualizer.js +641 -0
- package/src/geometry/generators/Crystal.js +2 -2
- package/src/geometry/warp/HypersphereCore.js +53 -24
- package/src/holograms/HolographicVisualizer.js +84 -98
- package/src/holograms/RealHolographicSystem.js +194 -43
- package/src/math/Mat4x4.js +308 -105
- package/src/math/Rotor4D.js +124 -40
- package/src/math/Vec4.js +200 -103
- package/src/math/index.js +7 -7
- package/src/polychora/PolychoraSystem.js +77 -0
- package/src/quantum/QuantumEngine.js +103 -66
- package/src/quantum/QuantumVisualizer.js +31 -22
- package/src/reactivity/index.js +3 -5
- package/src/render/LayerPresetManager.js +372 -0
- package/src/render/LayerReactivityBridge.js +344 -0
- package/src/render/LayerRelationshipGraph.js +610 -0
- package/src/render/MultiCanvasBridge.js +148 -25
- package/src/render/ShaderLoader.js +38 -0
- package/src/render/ShaderProgram.js +4 -4
- package/src/render/UnifiedRenderBridge.js +4 -1
- package/src/render/backends/WebGPUBackend.js +8 -4
- package/src/render/index.js +27 -2
- package/src/scene/Node4D.js +74 -24
- package/src/scene/index.js +4 -4
- package/src/shaders/common/geometry24.glsl +65 -0
- package/src/shaders/common/geometry24.wgsl +54 -0
- package/src/shaders/common/rotation4d.glsl +4 -4
- package/src/shaders/common/rotation4d.wgsl +2 -2
- package/src/shaders/common/uniforms.wgsl +15 -8
- package/src/shaders/faceted/faceted.frag.glsl +220 -80
- package/src/shaders/faceted/faceted.frag.wgsl +144 -90
- package/src/shaders/holographic/holographic.frag.glsl +28 -9
- package/src/shaders/holographic/holographic.frag.wgsl +112 -41
- package/src/shaders/quantum/quantum.frag.glsl +1 -0
- package/src/shaders/quantum/quantum.frag.wgsl +6 -4
- package/src/testing/ParallelTestFramework.js +2 -2
- package/src/ui/adaptive/renderers/webgpu/WebGPURenderer.ts +2 -2
- package/src/viewer/GalleryUI.js +17 -0
- package/src/viewer/ViewerPortal.js +2 -2
- package/src/viewer/index.js +1 -1
- package/tools/headless-renderer.js +258 -0
- package/tools/shader-sync-verify.js +14 -8
- package/tools/site-analysis/all-reports.json +32 -0
- package/tools/site-analysis/combined-analysis.md +50 -0
- package/tools/site-analyzer.mjs +779 -0
- package/tools/visual-catalog/capture.js +276 -0
- package/tools/visual-catalog/composite.js +138 -0
- package/types/adaptive-sdk.d.ts +204 -5
- package/types/agent/cli.d.ts +78 -0
- package/types/agent/index.d.ts +18 -0
- package/types/agent/mcp.d.ts +87 -0
- package/types/agent/telemetry.d.ts +190 -0
- package/types/core/VIB3Engine.d.ts +26 -0
- package/types/core/index.d.ts +261 -0
- package/types/creative/AestheticMapper.d.ts +72 -0
- package/types/creative/ChoreographyPlayer.d.ts +96 -0
- package/types/creative/index.d.ts +17 -0
- package/types/export/index.d.ts +243 -0
- package/types/geometry/index.d.ts +164 -0
- package/types/math/index.d.ts +214 -0
- package/types/render/LayerPresetManager.d.ts +78 -0
- package/types/render/LayerReactivityBridge.d.ts +85 -0
- package/types/render/LayerRelationshipGraph.d.ts +174 -0
- package/types/render/index.d.ts +3 -0
- package/types/scene/index.d.ts +204 -0
- package/types/systems/index.d.ts +244 -0
- package/types/variations/index.d.ts +62 -0
- package/types/viewer/index.d.ts +225 -0
- package/DOCS/BLUEPRINT_EXECUTION_PLAN_2026-01-07.md +0 -34
- package/DOCS/DEV_TRACK_ANALYSIS.md +0 -77
- package/DOCS/DEV_TRACK_PLAN_2026-01-07.md +0 -42
- package/DOCS/SESSION_014_PLAN.md +0 -195
- package/DOCS/SESSION_LOG_2026-01-07.md +0 -56
- package/DOCS/STRATEGIC_BLUEPRINT_2026-01-07.md +0 -72
- package/DOCS/SYSTEM_AUDIT_2026-01-30.md +0 -738
- /package/src/viewer/{ReactivityManager.js → ViewerInputHandler.js} +0 -0
package/src/agent/mcp/index.js
CHANGED
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* VIB3+ MCP Server — JSON-RPC 2.0 over stdio
|
|
4
|
+
*
|
|
5
|
+
* Implements the Model Context Protocol so any MCP client (Claude Desktop,
|
|
6
|
+
* Cursor, custom agents) can control VIB3+ programmatically.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* node src/agent/mcp/stdio-server.js
|
|
10
|
+
*
|
|
11
|
+
* Or via package.json bin:
|
|
12
|
+
* vib3-mcp
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { createInterface } from 'readline';
|
|
16
|
+
import { MCPServer } from './MCPServer.js';
|
|
17
|
+
import { getToolList } from './tools.js';
|
|
18
|
+
|
|
19
|
+
const SERVER_INFO = {
|
|
20
|
+
name: 'vib3-mcp',
|
|
21
|
+
version: '2.0.3',
|
|
22
|
+
description: 'VIB3+ 4D Visualization MCP Server — 3 systems, 24 geometries, 6D rotation'
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
// ── JSON-RPC helpers ──
|
|
26
|
+
|
|
27
|
+
function jsonrpc(id, result) {
|
|
28
|
+
return JSON.stringify({ jsonrpc: '2.0', id, result });
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function jsonrpcError(id, code, message, data) {
|
|
32
|
+
const err = { jsonrpc: '2.0', id, error: { code, message } };
|
|
33
|
+
if (data !== undefined) err.error.data = data;
|
|
34
|
+
return JSON.stringify(err);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function jsonrpcNotification(method, params) {
|
|
38
|
+
return JSON.stringify({ jsonrpc: '2.0', method, params });
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// ── MCP Protocol implementation ──
|
|
42
|
+
|
|
43
|
+
class VIB3StdioMCP {
|
|
44
|
+
constructor() {
|
|
45
|
+
this.server = new MCPServer();
|
|
46
|
+
this.initialized = false;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
async handleMessage(raw) {
|
|
50
|
+
let msg;
|
|
51
|
+
try {
|
|
52
|
+
msg = JSON.parse(raw);
|
|
53
|
+
} catch {
|
|
54
|
+
return jsonrpcError(null, -32700, 'Parse error');
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (msg.jsonrpc !== '2.0') {
|
|
58
|
+
return jsonrpcError(msg.id ?? null, -32600, 'Invalid Request: missing jsonrpc 2.0');
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const { id, method, params } = msg;
|
|
62
|
+
|
|
63
|
+
switch (method) {
|
|
64
|
+
case 'initialize':
|
|
65
|
+
return this.handleInitialize(id, params);
|
|
66
|
+
case 'initialized':
|
|
67
|
+
return null; // Notification, no response
|
|
68
|
+
case 'tools/list':
|
|
69
|
+
return this.handleToolsList(id);
|
|
70
|
+
case 'tools/call':
|
|
71
|
+
return await this.handleToolsCall(id, params);
|
|
72
|
+
case 'resources/list':
|
|
73
|
+
return this.handleResourcesList(id);
|
|
74
|
+
case 'resources/read':
|
|
75
|
+
return await this.handleResourcesRead(id, params);
|
|
76
|
+
case 'ping':
|
|
77
|
+
return jsonrpc(id, {});
|
|
78
|
+
default:
|
|
79
|
+
return jsonrpcError(id, -32601, `Method not found: ${method}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
handleInitialize(id, params) {
|
|
84
|
+
this.initialized = true;
|
|
85
|
+
|
|
86
|
+
return jsonrpc(id, {
|
|
87
|
+
protocolVersion: '2024-11-05',
|
|
88
|
+
capabilities: {
|
|
89
|
+
tools: {},
|
|
90
|
+
resources: { subscribe: false, listChanged: false }
|
|
91
|
+
},
|
|
92
|
+
serverInfo: SERVER_INFO
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
handleToolsList(id) {
|
|
97
|
+
const tools = getToolList().map(t => ({
|
|
98
|
+
name: t.name,
|
|
99
|
+
description: t.description,
|
|
100
|
+
inputSchema: t.inputSchema
|
|
101
|
+
}));
|
|
102
|
+
|
|
103
|
+
return jsonrpc(id, { tools });
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
async handleToolsCall(id, params) {
|
|
107
|
+
if (!params?.name) {
|
|
108
|
+
return jsonrpcError(id, -32602, 'Invalid params: missing tool name');
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const { name, arguments: args = {} } = params;
|
|
112
|
+
|
|
113
|
+
try {
|
|
114
|
+
const result = await this.server.handleToolCall(name, args);
|
|
115
|
+
|
|
116
|
+
return jsonrpc(id, {
|
|
117
|
+
content: [
|
|
118
|
+
{
|
|
119
|
+
type: 'text',
|
|
120
|
+
text: JSON.stringify(result, null, 2)
|
|
121
|
+
}
|
|
122
|
+
],
|
|
123
|
+
isError: !result.success
|
|
124
|
+
});
|
|
125
|
+
} catch (error) {
|
|
126
|
+
return jsonrpc(id, {
|
|
127
|
+
content: [
|
|
128
|
+
{
|
|
129
|
+
type: 'text',
|
|
130
|
+
text: JSON.stringify({
|
|
131
|
+
success: false,
|
|
132
|
+
error: error.message
|
|
133
|
+
})
|
|
134
|
+
}
|
|
135
|
+
],
|
|
136
|
+
isError: true
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
handleResourcesList(id) {
|
|
142
|
+
return jsonrpc(id, {
|
|
143
|
+
resources: [
|
|
144
|
+
{
|
|
145
|
+
uri: 'vib3://docs/claude-md',
|
|
146
|
+
name: 'CLAUDE.md',
|
|
147
|
+
description: 'Full VIB3+ SDK technical reference for AI agents',
|
|
148
|
+
mimeType: 'text/markdown'
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
uri: 'vib3://docs/geometry-summary',
|
|
152
|
+
name: '24 Geometry + 6D Rotation Summary',
|
|
153
|
+
description: 'Complete geometry encoding and rotation plane reference',
|
|
154
|
+
mimeType: 'text/markdown'
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
uri: 'vib3://docs/control-reference',
|
|
158
|
+
name: 'Control Reference',
|
|
159
|
+
description: 'Parameter ranges, keyboard shortcuts, API reference',
|
|
160
|
+
mimeType: 'text/markdown'
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
uri: 'vib3://state/current',
|
|
164
|
+
name: 'Current Engine State',
|
|
165
|
+
description: 'Live engine state (system, geometry, parameters, rotation)',
|
|
166
|
+
mimeType: 'application/json'
|
|
167
|
+
}
|
|
168
|
+
]
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
async handleResourcesRead(id, params) {
|
|
173
|
+
if (!params?.uri) {
|
|
174
|
+
return jsonrpcError(id, -32602, 'Invalid params: missing uri');
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
const { uri } = params;
|
|
178
|
+
|
|
179
|
+
try {
|
|
180
|
+
let content;
|
|
181
|
+
let mimeType = 'text/markdown';
|
|
182
|
+
|
|
183
|
+
switch (uri) {
|
|
184
|
+
case 'vib3://docs/claude-md':
|
|
185
|
+
content = await this._readFile('CLAUDE.md');
|
|
186
|
+
break;
|
|
187
|
+
case 'vib3://docs/geometry-summary':
|
|
188
|
+
content = await this._readFile('24-GEOMETRY-6D-ROTATION-SUMMARY.md');
|
|
189
|
+
break;
|
|
190
|
+
case 'vib3://docs/control-reference':
|
|
191
|
+
content = await this._readFile('DOCS/CONTROL_REFERENCE.md');
|
|
192
|
+
break;
|
|
193
|
+
case 'vib3://state/current':
|
|
194
|
+
content = JSON.stringify(this.server.getState(), null, 2);
|
|
195
|
+
mimeType = 'application/json';
|
|
196
|
+
break;
|
|
197
|
+
default:
|
|
198
|
+
return jsonrpcError(id, -32602, `Unknown resource: ${uri}`);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
return jsonrpc(id, {
|
|
202
|
+
contents: [{ uri, mimeType, text: content }]
|
|
203
|
+
});
|
|
204
|
+
} catch (error) {
|
|
205
|
+
return jsonrpcError(id, -32603, `Resource read failed: ${error.message}`);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
async _readFile(relativePath) {
|
|
210
|
+
const { readFile } = await import('fs/promises');
|
|
211
|
+
const { resolve, dirname } = await import('path');
|
|
212
|
+
const { fileURLToPath } = await import('url');
|
|
213
|
+
|
|
214
|
+
// Resolve relative to project root (3 levels up from src/agent/mcp/)
|
|
215
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
216
|
+
const projectRoot = resolve(__dirname, '..', '..', '..');
|
|
217
|
+
const filePath = resolve(projectRoot, relativePath);
|
|
218
|
+
|
|
219
|
+
return readFile(filePath, 'utf-8');
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// ── Main: stdio transport ──
|
|
224
|
+
|
|
225
|
+
async function main() {
|
|
226
|
+
const mcp = new VIB3StdioMCP();
|
|
227
|
+
|
|
228
|
+
const rl = createInterface({
|
|
229
|
+
input: process.stdin,
|
|
230
|
+
terminal: false
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
// Log to stderr so stdout stays clean for JSON-RPC
|
|
234
|
+
const log = (msg) => process.stderr.write(`[vib3-mcp] ${msg}\n`);
|
|
235
|
+
|
|
236
|
+
log(`VIB3+ MCP Server v${SERVER_INFO.version} starting on stdio`);
|
|
237
|
+
|
|
238
|
+
rl.on('line', async (line) => {
|
|
239
|
+
const trimmed = line.trim();
|
|
240
|
+
if (!trimmed) return;
|
|
241
|
+
|
|
242
|
+
try {
|
|
243
|
+
const response = await mcp.handleMessage(trimmed);
|
|
244
|
+
if (response !== null) {
|
|
245
|
+
process.stdout.write(response + '\n');
|
|
246
|
+
}
|
|
247
|
+
} catch (error) {
|
|
248
|
+
log(`Error: ${error.message}`);
|
|
249
|
+
process.stdout.write(
|
|
250
|
+
jsonrpcError(null, -32603, `Internal error: ${error.message}`) + '\n'
|
|
251
|
+
);
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
rl.on('close', () => {
|
|
256
|
+
log('stdin closed, shutting down');
|
|
257
|
+
process.exit(0);
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
main().catch((err) => {
|
|
262
|
+
process.stderr.write(`[vib3-mcp] Fatal: ${err.message}\n`);
|
|
263
|
+
process.exit(1);
|
|
264
|
+
});
|