@supernal/interface 1.0.2 → 1.0.4

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.
Files changed (144) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/dist/cjs/src/background/location/LocationContext.js +159 -0
  4. package/dist/cjs/src/background/location/LocationContext.js.map +1 -0
  5. package/dist/cjs/src/background/navigation/ContentResolver.js +37 -0
  6. package/dist/cjs/src/background/navigation/ContentResolver.js.map +1 -0
  7. package/dist/cjs/src/background/navigation/NavigationGraph.js +125 -11
  8. package/dist/cjs/src/background/navigation/NavigationGraph.js.map +1 -1
  9. package/dist/cjs/src/background/registry/ToolRegistry.js +98 -0
  10. package/dist/cjs/src/background/registry/ToolRegistry.js.map +1 -1
  11. package/dist/cjs/src/browser.js.map +1 -1
  12. package/dist/cjs/src/decorators/Component.js +30 -19
  13. package/dist/cjs/src/decorators/Component.js.map +1 -1
  14. package/dist/cjs/src/decorators/LocationScope.js +65 -0
  15. package/dist/cjs/src/decorators/LocationScope.js.map +1 -0
  16. package/dist/cjs/src/decorators/Tool.js +14 -1
  17. package/dist/cjs/src/decorators/Tool.js.map +1 -1
  18. package/dist/cjs/src/decorators/ToolProvider.js +11 -0
  19. package/dist/cjs/src/decorators/ToolProvider.js.map +1 -1
  20. package/dist/cjs/src/decorators/index.js +20 -2
  21. package/dist/cjs/src/decorators/index.js.map +1 -1
  22. package/dist/cjs/src/index.js +14 -3
  23. package/dist/cjs/src/index.js.map +1 -1
  24. package/dist/cjs/src/mcp/index.js +16 -0
  25. package/dist/cjs/src/mcp/index.js.map +1 -0
  26. package/dist/cjs/src/mcp/server.js +281 -0
  27. package/dist/cjs/src/mcp/server.js.map +1 -0
  28. package/dist/cjs/src/mcp/transport.js +131 -0
  29. package/dist/cjs/src/mcp/transport.js.map +1 -0
  30. package/dist/cjs/src/mcp/types.js +23 -0
  31. package/dist/cjs/src/mcp/types.js.map +1 -0
  32. package/dist/cjs/src/mcp-cli.js +55 -0
  33. package/dist/cjs/src/mcp-cli.js.map +1 -0
  34. package/dist/cjs/src/mcp-server.js +17 -0
  35. package/dist/cjs/src/mcp-server.js.map +1 -0
  36. package/dist/cjs/src/react/useNavigationHandler.js +53 -12
  37. package/dist/cjs/src/react/useNavigationHandler.js.map +1 -1
  38. package/dist/cjs/src/react/usePersistedState.js +1 -1
  39. package/dist/cjs/src/react/usePersistedState.js.map +1 -1
  40. package/dist/cjs/src/state/StateSync.js +130 -0
  41. package/dist/cjs/src/state/StateSync.js.map +1 -0
  42. package/dist/cjs/src/storage/LocalStorageAdapter.js +1 -1
  43. package/dist/cjs/src/storage/LocalStorageAdapter.js.map +1 -1
  44. package/dist/cjs/src/storage/StateManager.js +2 -2
  45. package/dist/cjs/src/tools/SystemTools.js +1 -1
  46. package/dist/cjs/src/tools/SystemTools.js.map +1 -1
  47. package/dist/cjs/src/types/StateManagers.js +2 -2
  48. package/dist/cjs/src/types/StateManagers.js.map +1 -1
  49. package/dist/cjs/src/ui/react/chat/ChatBubble.js +3 -3
  50. package/dist/cjs/src/ui/react/chat/ChatBubble.js.map +1 -1
  51. package/dist/esm/src/background/location/LocationContext.d.ts +118 -0
  52. package/dist/esm/src/background/location/LocationContext.d.ts.map +1 -0
  53. package/dist/esm/src/background/location/LocationContext.js +155 -0
  54. package/dist/esm/src/background/location/LocationContext.js.map +1 -0
  55. package/dist/esm/src/background/navigation/ContentResolver.d.ts +139 -0
  56. package/dist/esm/src/background/navigation/ContentResolver.d.ts.map +1 -0
  57. package/dist/esm/src/background/navigation/ContentResolver.js +36 -0
  58. package/dist/esm/src/background/navigation/ContentResolver.js.map +1 -0
  59. package/dist/esm/src/background/navigation/INavigationGraph.d.ts +1 -0
  60. package/dist/esm/src/background/navigation/INavigationGraph.d.ts.map +1 -1
  61. package/dist/esm/src/background/navigation/NavigationGraph.d.ts +24 -0
  62. package/dist/esm/src/background/navigation/NavigationGraph.d.ts.map +1 -1
  63. package/dist/esm/src/background/navigation/NavigationGraph.js +125 -11
  64. package/dist/esm/src/background/navigation/NavigationGraph.js.map +1 -1
  65. package/dist/esm/src/background/registry/ToolRegistry.d.ts +48 -0
  66. package/dist/esm/src/background/registry/ToolRegistry.d.ts.map +1 -1
  67. package/dist/esm/src/background/registry/ToolRegistry.js +98 -0
  68. package/dist/esm/src/background/registry/ToolRegistry.js.map +1 -1
  69. package/dist/esm/src/browser.d.ts +1 -0
  70. package/dist/esm/src/browser.d.ts.map +1 -1
  71. package/dist/esm/src/browser.js.map +1 -1
  72. package/dist/esm/src/decorators/Component.d.ts.map +1 -1
  73. package/dist/esm/src/decorators/Component.js +30 -19
  74. package/dist/esm/src/decorators/Component.js.map +1 -1
  75. package/dist/esm/src/decorators/LocationScope.d.ts +49 -0
  76. package/dist/esm/src/decorators/LocationScope.d.ts.map +1 -0
  77. package/dist/esm/src/decorators/LocationScope.js +60 -0
  78. package/dist/esm/src/decorators/LocationScope.js.map +1 -0
  79. package/dist/esm/src/decorators/Tool.d.ts +3 -1
  80. package/dist/esm/src/decorators/Tool.d.ts.map +1 -1
  81. package/dist/esm/src/decorators/Tool.js +14 -1
  82. package/dist/esm/src/decorators/Tool.js.map +1 -1
  83. package/dist/esm/src/decorators/ToolProvider.d.ts +11 -0
  84. package/dist/esm/src/decorators/ToolProvider.d.ts.map +1 -1
  85. package/dist/esm/src/decorators/ToolProvider.js +10 -0
  86. package/dist/esm/src/decorators/ToolProvider.js.map +1 -1
  87. package/dist/esm/src/decorators/index.d.ts +19 -1
  88. package/dist/esm/src/decorators/index.d.ts.map +1 -1
  89. package/dist/esm/src/decorators/index.js +19 -1
  90. package/dist/esm/src/decorators/index.js.map +1 -1
  91. package/dist/esm/src/index.d.ts +5 -2
  92. package/dist/esm/src/index.d.ts.map +1 -1
  93. package/dist/esm/src/index.js +6 -2
  94. package/dist/esm/src/index.js.map +1 -1
  95. package/dist/esm/src/mcp/index.d.ts +10 -0
  96. package/dist/esm/src/mcp/index.d.ts.map +1 -0
  97. package/dist/esm/src/mcp/index.js +9 -0
  98. package/dist/esm/src/mcp/index.js.map +1 -0
  99. package/dist/esm/src/mcp/server.d.ts +84 -0
  100. package/dist/esm/src/mcp/server.d.ts.map +1 -0
  101. package/dist/esm/src/mcp/server.js +276 -0
  102. package/dist/esm/src/mcp/server.js.map +1 -0
  103. package/dist/esm/src/mcp/transport.d.ts +53 -0
  104. package/dist/esm/src/mcp/transport.d.ts.map +1 -0
  105. package/dist/esm/src/mcp/transport.js +126 -0
  106. package/dist/esm/src/mcp/transport.js.map +1 -0
  107. package/dist/esm/src/mcp/types.d.ts +175 -0
  108. package/dist/esm/src/mcp/types.d.ts.map +1 -0
  109. package/dist/esm/src/mcp/types.js +20 -0
  110. package/dist/esm/src/mcp/types.js.map +1 -0
  111. package/dist/esm/src/mcp-cli.d.ts +25 -0
  112. package/dist/esm/src/mcp-cli.d.ts.map +1 -0
  113. package/dist/esm/src/mcp-cli.js +53 -0
  114. package/dist/esm/src/mcp-cli.js.map +1 -0
  115. package/dist/esm/src/mcp-server.d.ts +10 -0
  116. package/dist/esm/src/mcp-server.d.ts.map +1 -0
  117. package/dist/esm/src/mcp-server.js +10 -0
  118. package/dist/esm/src/mcp-server.js.map +1 -0
  119. package/dist/esm/src/react/useNavigationHandler.d.ts +29 -11
  120. package/dist/esm/src/react/useNavigationHandler.d.ts.map +1 -1
  121. package/dist/esm/src/react/useNavigationHandler.js +53 -12
  122. package/dist/esm/src/react/useNavigationHandler.js.map +1 -1
  123. package/dist/esm/src/react/usePersistedState.js +1 -1
  124. package/dist/esm/src/react/usePersistedState.js.map +1 -1
  125. package/dist/esm/src/state/StateSync.d.ts +57 -0
  126. package/dist/esm/src/state/StateSync.d.ts.map +1 -0
  127. package/dist/esm/src/state/StateSync.js +123 -0
  128. package/dist/esm/src/state/StateSync.js.map +1 -0
  129. package/dist/esm/src/storage/LocalStorageAdapter.d.ts.map +1 -1
  130. package/dist/esm/src/storage/LocalStorageAdapter.js +1 -1
  131. package/dist/esm/src/storage/LocalStorageAdapter.js.map +1 -1
  132. package/dist/esm/src/storage/StateManager.d.ts +2 -2
  133. package/dist/esm/src/storage/StateManager.js +2 -2
  134. package/dist/esm/src/tools/SystemTools.js +1 -1
  135. package/dist/esm/src/tools/SystemTools.js.map +1 -1
  136. package/dist/esm/src/types/StateManagers.d.ts +2 -2
  137. package/dist/esm/src/types/StateManagers.d.ts.map +1 -1
  138. package/dist/esm/src/types/StateManagers.js +2 -2
  139. package/dist/esm/src/types/StateManagers.js.map +1 -1
  140. package/dist/esm/src/ui/react/chat/ChatBubble.d.ts +4 -0
  141. package/dist/esm/src/ui/react/chat/ChatBubble.d.ts.map +1 -1
  142. package/dist/esm/src/ui/react/chat/ChatBubble.js +3 -3
  143. package/dist/esm/src/ui/react/chat/ChatBubble.js.map +1 -1
  144. package/package.json +9 -17
@@ -0,0 +1,281 @@
1
+ "use strict";
2
+ /**
3
+ * Supernal MCP Server
4
+ *
5
+ * MCP (Model Context Protocol) server that exposes Supernal Interface tools
6
+ * to external AI agents like Claude Desktop, Cursor, and custom MCP clients.
7
+ *
8
+ * Usage:
9
+ * ```typescript
10
+ * import { createSupernalMCPServer } from '@supernal/interface';
11
+ *
12
+ * const server = createSupernalMCPServer({
13
+ * name: 'my-app-tools',
14
+ * version: '1.0.0'
15
+ * });
16
+ *
17
+ * await server.start();
18
+ * ```
19
+ */
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.SupernalMCPServer = void 0;
22
+ exports.createSupernalMCPServer = createSupernalMCPServer;
23
+ const ToolRegistry_1 = require("../background/registry/ToolRegistry");
24
+ const ToolExecutor_1 = require("../ai/ToolExecutor");
25
+ const types_1 = require("./types");
26
+ /**
27
+ * Default server configuration
28
+ */
29
+ const DEFAULT_CONFIG = {
30
+ name: 'supernal-interface',
31
+ version: '1.0.0',
32
+ description: 'MCP server for Supernal Interface tools',
33
+ capabilities: {
34
+ tools: {},
35
+ resources: {},
36
+ prompts: {}
37
+ }
38
+ };
39
+ /**
40
+ * Supernal MCP Server implementation
41
+ */
42
+ class SupernalMCPServer {
43
+ constructor(config = {}) {
44
+ this.running = false;
45
+ this.config = { ...DEFAULT_CONFIG, ...config };
46
+ this.executor = new ToolExecutor_1.ToolExecutor();
47
+ }
48
+ /**
49
+ * Start the MCP server with given transport
50
+ */
51
+ async start(transport) {
52
+ if (this.running) {
53
+ throw new Error('Server is already running');
54
+ }
55
+ this.transport = transport;
56
+ this.running = true;
57
+ console.error(`[MCP Server] Starting: ${this.config.name} v${this.config.version}`);
58
+ // Message processing loop
59
+ while (this.running) {
60
+ try {
61
+ const request = await this.transport.receive();
62
+ const response = await this.handle(request);
63
+ // Only send response if not null (notifications return null)
64
+ if (response !== null) {
65
+ await this.transport.send(response);
66
+ }
67
+ }
68
+ catch (error) {
69
+ if (!this.running)
70
+ break; // Transport closed
71
+ console.error('[MCP Server] Error processing message:', error);
72
+ // Send error response
73
+ if (this.transport) {
74
+ await this.transport.send({
75
+ jsonrpc: '2.0',
76
+ error: {
77
+ code: types_1.MCPErrorCode.INTERNAL_ERROR,
78
+ message: error instanceof Error ? error.message : 'Internal server error',
79
+ data: error
80
+ }
81
+ });
82
+ }
83
+ }
84
+ }
85
+ }
86
+ /**
87
+ * Stop the MCP server
88
+ */
89
+ async stop() {
90
+ this.running = false;
91
+ if (this.transport) {
92
+ await this.transport.close();
93
+ this.transport = undefined;
94
+ }
95
+ console.error('[MCP Server] Stopped');
96
+ }
97
+ /**
98
+ * Handle incoming MCP request
99
+ */
100
+ async handle(request) {
101
+ const { method, params, id } = request;
102
+ try {
103
+ // Handle notifications (no response needed)
104
+ if (method.startsWith('notifications/')) {
105
+ console.error(`[MCP Server] Received notification: ${method}`);
106
+ return null; // No response for notifications
107
+ }
108
+ switch (method) {
109
+ case 'tools/list':
110
+ return this.handleToolsList(id);
111
+ case 'tools/call':
112
+ return await this.handleToolCall(id, params);
113
+ case 'initialize':
114
+ return this.handleInitialize(id);
115
+ default:
116
+ return this.errorResponse(id, types_1.MCPErrorCode.METHOD_NOT_FOUND, `Method not found: ${method}`);
117
+ }
118
+ }
119
+ catch (error) {
120
+ return this.errorResponse(id, types_1.MCPErrorCode.INTERNAL_ERROR, error instanceof Error ? error.message : 'Internal error', error);
121
+ }
122
+ }
123
+ /**
124
+ * Handle tools/list request
125
+ *
126
+ * Returns location-filtered tools based on LocationContext.getCurrent()
127
+ * Uses @LocationScope decorators to determine tool availability
128
+ */
129
+ handleToolsList(id) {
130
+ const toolsByContainer = ToolRegistry_1.ToolRegistry.getToolsGroupedByContainerForLocation();
131
+ const mcpTools = [];
132
+ for (const [container, containerTools] of Object.entries(toolsByContainer)) {
133
+ for (const tool of containerTools) {
134
+ mcpTools.push(this.convertToMCPTool(container, tool));
135
+ }
136
+ }
137
+ const response = {
138
+ tools: mcpTools
139
+ };
140
+ return {
141
+ jsonrpc: '2.0',
142
+ id,
143
+ result: response
144
+ };
145
+ }
146
+ /**
147
+ * Handle tools/call request
148
+ */
149
+ async handleToolCall(id, params) {
150
+ const { name, arguments: args } = params;
151
+ if (!name) {
152
+ return this.errorResponse(id, types_1.MCPErrorCode.INVALID_PARAMS, 'Missing tool name');
153
+ }
154
+ // Parse tool name (format: container.toolName)
155
+ const [container, toolName] = name.split('.');
156
+ if (!container || !toolName) {
157
+ return this.errorResponse(id, types_1.MCPErrorCode.INVALID_PARAMS, `Invalid tool name format: ${name}. Expected: container.toolName`);
158
+ }
159
+ // Find tool by containerId and tool name
160
+ // The tool may be registered with its class name, but exposed with containerId
161
+ // Handle undefined containerId (treat as matching the container name used in MCP)
162
+ const tool = Array.from(ToolRegistry_1.ToolRegistry.getAllTools().values()).find(t => {
163
+ const toolContainer = t.containerId || 'global'; // undefined becomes 'global'
164
+ return toolContainer === container && t.name === toolName;
165
+ });
166
+ if (!tool) {
167
+ return this.errorResponse(id, types_1.MCPErrorCode.TOOL_NOT_FOUND, `Tool not found: ${name}`);
168
+ }
169
+ // Execute tool
170
+ try {
171
+ // Convert args object to array format expected by ToolExecutor
172
+ const argsArray = Object.values(args || {});
173
+ const result = await this.executor.execute(tool, argsArray);
174
+ if (!result.success) {
175
+ return this.errorResponse(id, types_1.MCPErrorCode.TOOL_EXECUTION_FAILED, result.message || 'Tool execution failed', { error: result.error, timing: result.timing });
176
+ }
177
+ // Format success response
178
+ const response = {
179
+ content: [
180
+ {
181
+ type: 'text',
182
+ text: JSON.stringify({
183
+ success: true,
184
+ result: result.data,
185
+ timing: result.timing,
186
+ message: result.message
187
+ }, null, 2)
188
+ }
189
+ ]
190
+ };
191
+ return {
192
+ jsonrpc: '2.0',
193
+ id,
194
+ result: response
195
+ };
196
+ }
197
+ catch (error) {
198
+ return this.errorResponse(id, types_1.MCPErrorCode.TOOL_EXECUTION_FAILED, error instanceof Error ? error.message : 'Tool execution failed', error);
199
+ }
200
+ }
201
+ /**
202
+ * Handle initialize request
203
+ */
204
+ handleInitialize(id) {
205
+ return {
206
+ jsonrpc: '2.0',
207
+ id,
208
+ result: {
209
+ protocolVersion: '2024-11-05',
210
+ serverInfo: {
211
+ name: this.config.name,
212
+ version: this.config.version
213
+ },
214
+ capabilities: this.config.capabilities
215
+ }
216
+ };
217
+ }
218
+ /**
219
+ * Convert Supernal tool to MCP tool format
220
+ */
221
+ convertToMCPTool(container, tool) {
222
+ // tool.inputSchema is already a full schema object {type, properties, required}
223
+ // Use it directly, or create a default if missing
224
+ const inputSchema = tool.inputSchema || {
225
+ type: 'object',
226
+ properties: {},
227
+ required: []
228
+ };
229
+ return {
230
+ name: `${container}.${tool.name}`,
231
+ description: tool.description || `Tool: ${tool.name}`,
232
+ inputSchema,
233
+ annotations: {
234
+ container,
235
+ category: tool.category,
236
+ elementId: tool.elementId,
237
+ componentName: tool.componentName,
238
+ toolType: tool.toolType,
239
+ aiEnabled: tool.aiEnabled
240
+ }
241
+ };
242
+ }
243
+ /**
244
+ * Create error response
245
+ */
246
+ errorResponse(id, code, message, data) {
247
+ const error = {
248
+ code,
249
+ message,
250
+ data
251
+ };
252
+ return {
253
+ jsonrpc: '2.0',
254
+ id,
255
+ error
256
+ };
257
+ }
258
+ }
259
+ exports.SupernalMCPServer = SupernalMCPServer;
260
+ /**
261
+ * Create and configure a Supernal MCP server
262
+ *
263
+ * @param config - Server configuration
264
+ * @returns Configured MCP server instance
265
+ *
266
+ * @example
267
+ * ```typescript
268
+ * const server = createSupernalMCPServer({
269
+ * name: 'my-app-tools',
270
+ * version: '1.0.0'
271
+ * });
272
+ *
273
+ * // Start with stdio transport
274
+ * const transport = new StdioTransport();
275
+ * await server.start(transport);
276
+ * ```
277
+ */
278
+ function createSupernalMCPServer(config) {
279
+ return new SupernalMCPServer(config);
280
+ }
281
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ /**
3
+ * Stdio Transport for MCP
4
+ *
5
+ * Implements MCP transport over stdin/stdout for integration with
6
+ * Claude Desktop, Cursor, and other MCP clients.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.StdioTransport = void 0;
10
+ exports.createStdioTransport = createStdioTransport;
11
+ const readline_1 = require("readline");
12
+ /**
13
+ * Stdio transport implementation
14
+ *
15
+ * Reads JSON-RPC messages from stdin (one per line)
16
+ * Writes JSON-RPC responses to stdout (one per line)
17
+ */
18
+ class StdioTransport {
19
+ constructor() {
20
+ this.messageQueue = [];
21
+ this.waitingResolvers = [];
22
+ this.closed = false;
23
+ this.setupReadline();
24
+ }
25
+ /**
26
+ * Setup readline interface for stdin
27
+ */
28
+ setupReadline() {
29
+ this.readline = (0, readline_1.createInterface)({
30
+ input: process.stdin,
31
+ output: process.stdout,
32
+ terminal: false
33
+ });
34
+ this.readline.on('line', (line) => {
35
+ try {
36
+ const message = JSON.parse(line);
37
+ // If someone is waiting for a message, give it to them immediately
38
+ if (this.waitingResolvers.length > 0) {
39
+ const resolve = this.waitingResolvers.shift();
40
+ resolve(message);
41
+ }
42
+ else {
43
+ // Otherwise queue it
44
+ this.messageQueue.push(message);
45
+ }
46
+ }
47
+ catch (error) {
48
+ console.error('[Stdio Transport] Failed to parse message:', error);
49
+ console.error('[Stdio Transport] Line:', line);
50
+ }
51
+ });
52
+ this.readline.on('close', () => {
53
+ this.closed = true;
54
+ // Reject all waiting resolvers
55
+ for (const resolve of this.waitingResolvers) {
56
+ resolve({
57
+ jsonrpc: '2.0',
58
+ method: '__transport_closed__'
59
+ });
60
+ }
61
+ this.waitingResolvers = [];
62
+ });
63
+ }
64
+ /**
65
+ * Send message to client (write to stdout)
66
+ */
67
+ async send(message) {
68
+ if (this.closed) {
69
+ throw new Error('Transport is closed');
70
+ }
71
+ const json = JSON.stringify(message);
72
+ process.stdout.write(json + '\n');
73
+ }
74
+ /**
75
+ * Receive message from client (read from stdin)
76
+ */
77
+ async receive() {
78
+ if (this.closed) {
79
+ throw new Error('Transport is closed');
80
+ }
81
+ // If we have queued messages, return the first one
82
+ if (this.messageQueue.length > 0) {
83
+ return this.messageQueue.shift();
84
+ }
85
+ // Otherwise wait for the next message
86
+ return new Promise((resolve) => {
87
+ this.waitingResolvers.push(resolve);
88
+ });
89
+ }
90
+ /**
91
+ * Close transport
92
+ */
93
+ async close() {
94
+ if (this.closed)
95
+ return;
96
+ this.closed = true;
97
+ if (this.readline) {
98
+ this.readline.close();
99
+ this.readline = undefined;
100
+ }
101
+ // Reject all waiting resolvers
102
+ for (const resolve of this.waitingResolvers) {
103
+ resolve({
104
+ jsonrpc: '2.0',
105
+ method: '__transport_closed__'
106
+ });
107
+ }
108
+ this.waitingResolvers = [];
109
+ this.messageQueue = [];
110
+ }
111
+ }
112
+ exports.StdioTransport = StdioTransport;
113
+ /**
114
+ * Create stdio transport
115
+ *
116
+ * @returns Stdio transport instance
117
+ *
118
+ * @example
119
+ * ```typescript
120
+ * import { createSupernalMCPServer, createStdioTransport } from '@supernal/interface';
121
+ *
122
+ * const server = createSupernalMCPServer();
123
+ * const transport = createStdioTransport();
124
+ *
125
+ * await server.start(transport);
126
+ * ```
127
+ */
128
+ function createStdioTransport() {
129
+ return new StdioTransport();
130
+ }
131
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../../src/mcp/transport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ /**
3
+ * MCP Protocol Types
4
+ *
5
+ * Type definitions for Model Context Protocol (MCP) integration.
6
+ * Based on @ai-sdk/mcp specification.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.MCPErrorCode = void 0;
10
+ /**
11
+ * MCP error codes
12
+ */
13
+ var MCPErrorCode;
14
+ (function (MCPErrorCode) {
15
+ MCPErrorCode[MCPErrorCode["PARSE_ERROR"] = -32700] = "PARSE_ERROR";
16
+ MCPErrorCode[MCPErrorCode["INVALID_REQUEST"] = -32600] = "INVALID_REQUEST";
17
+ MCPErrorCode[MCPErrorCode["METHOD_NOT_FOUND"] = -32601] = "METHOD_NOT_FOUND";
18
+ MCPErrorCode[MCPErrorCode["INVALID_PARAMS"] = -32602] = "INVALID_PARAMS";
19
+ MCPErrorCode[MCPErrorCode["INTERNAL_ERROR"] = -32603] = "INTERNAL_ERROR";
20
+ MCPErrorCode[MCPErrorCode["TOOL_NOT_FOUND"] = -1] = "TOOL_NOT_FOUND";
21
+ MCPErrorCode[MCPErrorCode["TOOL_EXECUTION_FAILED"] = -2] = "TOOL_EXECUTION_FAILED";
22
+ })(MCPErrorCode || (exports.MCPErrorCode = MCPErrorCode = {}));
23
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/mcp/types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AA6HH;;GAEG;AACH,IAAY,YAQX;AARD,WAAY,YAAY;IACtB,kEAAoB,CAAA;IACpB,0EAAwB,CAAA;IACxB,4EAAyB,CAAA;IACzB,wEAAuB,CAAA;IACvB,wEAAuB,CAAA;IACvB,oEAAmB,CAAA;IACnB,kFAA0B,CAAA;AAC5B,CAAC,EARW,YAAY,4BAAZ,YAAY,QAQvB"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ /**
3
+ * Supernal MCP CLI Entry Point
4
+ *
5
+ * Starts the Supernal MCP server with stdio transport for use with
6
+ * Claude Desktop, Cursor, and other MCP clients.
7
+ *
8
+ * Usage:
9
+ * ```bash
10
+ * npx @supernal/interface-mcp
11
+ * ```
12
+ *
13
+ * Or in Claude Desktop config:
14
+ * ```json
15
+ * {
16
+ * "mcpServers": {
17
+ * "supernal": {
18
+ * "command": "npx",
19
+ * "args": ["@supernal/interface-mcp"]
20
+ * }
21
+ * }
22
+ * }
23
+ * ```
24
+ */
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ const mcp_1 = require("./mcp");
27
+ async function main() {
28
+ const server = (0, mcp_1.createSupernalMCPServer)({
29
+ name: 'supernal-interface',
30
+ version: '1.0.0',
31
+ description: 'MCP server for Supernal Interface tools'
32
+ });
33
+ const transport = (0, mcp_1.createStdioTransport)();
34
+ console.error('[Supernal MCP] Starting server...');
35
+ try {
36
+ await server.start(transport);
37
+ }
38
+ catch (error) {
39
+ console.error('[Supernal MCP] Server error:', error);
40
+ process.exit(1);
41
+ }
42
+ }
43
+ // Handle shutdown gracefully
44
+ const handleShutdown = () => {
45
+ console.error('[Supernal MCP] Shutting down...');
46
+ process.exit(0);
47
+ };
48
+ process.on('SIGINT', handleShutdown);
49
+ process.on('SIGTERM', handleShutdown);
50
+ // Start server
51
+ main().catch((error) => {
52
+ console.error('[Supernal MCP] Fatal error:', error);
53
+ process.exit(1);
54
+ });
55
+ //# sourceMappingURL=mcp-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-cli.js","sourceRoot":"","sources":["../../../src/mcp-cli.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;;AAEH,+BAAsE;AAEtE,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,IAAA,6BAAuB,EAAC;QACrC,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,yCAAyC;KACvD,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAA,0BAAoB,GAAE,CAAC;IAEzC,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAEnD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,6BAA6B;AAC7B,MAAM,cAAc,GAAG,GAAG,EAAE;IAC1B,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;AAEF,OAAO,CAAC,EAAE,CAAC,QAAe,EAAE,cAAc,CAAC,CAAC;AAC5C,OAAO,CAAC,EAAE,CAAC,SAAgB,EAAE,cAAc,CAAC,CAAC;AAE7C,eAAe;AACf,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;IACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ /**
3
+ * MCP Server Entry Point (Node.js only)
4
+ *
5
+ * This file should ONLY be used in Node.js environments (MCP servers).
6
+ * DO NOT import this in browser code.
7
+ *
8
+ * For browser usage, import from '@supernal/interface' (without /mcp)
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.StdioTransport = exports.SupernalMCPServer = exports.createStdioTransport = exports.createSupernalMCPServer = void 0;
12
+ var mcp_1 = require("./mcp");
13
+ Object.defineProperty(exports, "createSupernalMCPServer", { enumerable: true, get: function () { return mcp_1.createSupernalMCPServer; } });
14
+ Object.defineProperty(exports, "createStdioTransport", { enumerable: true, get: function () { return mcp_1.createStdioTransport; } });
15
+ Object.defineProperty(exports, "SupernalMCPServer", { enumerable: true, get: function () { return mcp_1.SupernalMCPServer; } });
16
+ Object.defineProperty(exports, "StdioTransport", { enumerable: true, get: function () { return mcp_1.StdioTransport; } });
17
+ //# sourceMappingURL=mcp-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../../src/mcp-server.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAEH,6BAce;AAbb,8GAAA,uBAAuB,OAAA;AACvB,2GAAA,oBAAoB,OAAA;AACpB,wGAAA,iBAAiB,OAAA;AACjB,qGAAA,cAAc,OAAA"}
@@ -3,24 +3,33 @@
3
3
  * useNavigationHandler - React Hook for Automatic Navigation Setup
4
4
  *
5
5
  * Single-line hook that sets up navigation for any page.
6
- * Uses NavigationGraph to automatically resolve routes from container definitions.
6
+ * Now also tracks location in LocationContext for location-aware tools.
7
7
  *
8
- * This eliminates the need for manual route maps in every page component.
8
+ * This hook:
9
+ * 1. Tracks current page/route in LocationContext
10
+ * 2. Sets up navigation handler in NavigationGraph
11
+ * 3. Updates location when route changes
9
12
  */
10
13
  Object.defineProperty(exports, "__esModule", { value: true });
11
14
  exports.useNavigationHandler = useNavigationHandler;
12
15
  const react_1 = require("react");
13
16
  const NavigationGraph_1 = require("../background/navigation/NavigationGraph");
17
+ const LocationContext_1 = require("../background/location/LocationContext");
14
18
  /**
15
19
  * Set up automatic navigation handler for the current page
16
20
  *
17
21
  * This hook:
18
- * 1. Gets routes from NavigationGraph (populated by container definitions)
19
- * 2. Creates a handler that resolves page names → routes
20
- * 3. Registers the handler with NavigationGraph
21
- * 4. Supports dynamic routes (e.g., "blog/post-slug")
22
+ * 1. Tracks current page/route in LocationContext for location-aware tools
23
+ * 2. Gets routes from NavigationGraph (populated by container definitions)
24
+ * 3. Creates a handler that resolves page names → routes
25
+ * 4. Registers the handler with NavigationGraph
26
+ * 5. Supports dynamic routes (e.g., "blog/post-slug")
22
27
  *
23
- * @param router - Next.js router or any router with a `push` method
28
+ * @param router - Next.js router or any router with `push`, `pathname`, `route`
29
+ * @param options - Optional configuration
30
+ * @param options.components - Currently mounted component IDs
31
+ * @param options.elements - Currently visible element IDs
32
+ * @param options.metadata - Additional location metadata
24
33
  *
25
34
  * @example
26
35
  * ```typescript
@@ -29,7 +38,8 @@ const NavigationGraph_1 = require("../background/navigation/NavigationGraph");
29
38
  *
30
39
  * export default function MyPage() {
31
40
  * const router = useRouter();
32
- * useNavigationHandler(router); // ONE LINE!
41
+ * // Track location automatically
42
+ * useNavigationHandler(router);
33
43
  *
34
44
  * return <div>...</div>;
35
45
  * }
@@ -37,13 +47,28 @@ const NavigationGraph_1 = require("../background/navigation/NavigationGraph");
37
47
  *
38
48
  * @example
39
49
  * ```typescript
40
- * // Without a router (uses window.location as fallback)
41
- * useNavigationHandler();
50
+ * // With component tracking
51
+ * useNavigationHandler(router, {
52
+ * components: ['blog-header', 'blog-editor'],
53
+ * metadata: { userRole: 'editor' }
54
+ * });
42
55
  * ```
43
56
  */
44
- function useNavigationHandler(router) {
57
+ function useNavigationHandler(router, options) {
45
58
  (0, react_1.useEffect)(() => {
46
59
  const graph = NavigationGraph_1.NavigationGraph.getInstance();
60
+ // Update LocationContext with current page/route
61
+ if (router) {
62
+ const page = router.pathname || '/';
63
+ const route = router.route || router.pathname || '/';
64
+ LocationContext_1.LocationContext.setCurrent({
65
+ page,
66
+ route,
67
+ components: options?.components,
68
+ elements: options?.elements,
69
+ metadata: options?.metadata
70
+ });
71
+ }
47
72
  const handler = (pageNameOrRoute) => {
48
73
  const pageName = typeof pageNameOrRoute === 'string' ? pageNameOrRoute : pageNameOrRoute?.name || pageNameOrRoute?.path;
49
74
  if (!pageName)
@@ -64,6 +89,14 @@ function useNavigationHandler(router) {
64
89
  else if (typeof window !== 'undefined') {
65
90
  window.location.href = routePath;
66
91
  }
92
+ // Update location after navigation
93
+ LocationContext_1.LocationContext.setCurrent({
94
+ page: routePath,
95
+ route: routePath,
96
+ components: options?.components,
97
+ elements: options?.elements,
98
+ metadata: options?.metadata
99
+ });
67
100
  }
68
101
  return;
69
102
  }
@@ -77,12 +110,20 @@ function useNavigationHandler(router) {
77
110
  else if (typeof window !== 'undefined') {
78
111
  window.location.href = routePath;
79
112
  }
113
+ // Update location after navigation
114
+ LocationContext_1.LocationContext.setCurrent({
115
+ page: routePath,
116
+ route: routePath,
117
+ components: options?.components,
118
+ elements: options?.elements,
119
+ metadata: options?.metadata
120
+ });
80
121
  };
81
122
  graph.setNavigationHandler(handler);
82
123
  return () => {
83
124
  // Clean up handler on unmount
84
125
  graph.setNavigationHandler(() => { });
85
126
  };
86
- }, [router]);
127
+ }, [router, options?.components, options?.elements, options?.metadata]);
87
128
  }
88
129
  //# sourceMappingURL=useNavigationHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useNavigationHandler.js","sourceRoot":"","sources":["../../../../src/react/useNavigationHandler.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAmCH,oDAoDC;AArFD,iCAAkC;AAClC,8EAA2E;AAE3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,SAAgB,oBAAoB,CAClC,MAAyC;IAEzC,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,iCAAe,CAAC,WAAW,EAAE,CAAC;QAE5C,MAAM,OAAO,GAAG,CAAC,eAA6B,EAAE,EAAE;YAChD,MAAM,QAAQ,GAAG,OAAO,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,EAAE,IAAI,IAAI,eAAe,EAAE,IAAI,CAAC;YACxH,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAEtB,OAAO,CAAC,GAAG,CAAC,8BAA8B,QAAQ,EAAE,CAAC,CAAC;YAEtD,uCAAuC;YACvC,IAAI,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAE3C,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,8CAA8C,QAAQ,EAAE,CAAC,CAAC;gBAEvE,sEAAsE;gBACtE,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC3B,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC;oBACvE,OAAO,CAAC,GAAG,CAAC,8CAA8C,SAAS,EAAE,CAAC,CAAC;oBAEvE,gEAAgE;oBAChE,IAAI,MAAM,EAAE,IAAI,EAAE,CAAC;wBACjB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACzB,CAAC;yBAAM,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;wBACzC,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,SAAS,CAAC;oBACnC,CAAC;gBACH,CAAC;gBACD,OAAO;YACT,CAAC;YAED,8BAA8B;YAC9B,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,+BAA+B,QAAQ,MAAM,SAAS,EAAE,CAAC,CAAC;YAEtE,gEAAgE;YAChE,IAAI,MAAM,EAAE,IAAI,EAAE,CAAC;gBACjB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACzB,CAAC;iBAAM,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;gBACzC,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,SAAS,CAAC;YACnC,CAAC;QACH,CAAC,CAAC;QAEF,KAAK,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAEpC,OAAO,GAAG,EAAE;YACV,8BAA8B;YAC9B,KAAK,CAAC,oBAAoB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"useNavigationHandler.js","sourceRoot":"","sources":["../../../../src/react/useNavigationHandler.ts"],"names":[],"mappings":"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"}