@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.
- package/LICENSE +1 -1
- package/README.md +1 -1
- package/dist/cjs/src/background/location/LocationContext.js +159 -0
- package/dist/cjs/src/background/location/LocationContext.js.map +1 -0
- package/dist/cjs/src/background/navigation/ContentResolver.js +37 -0
- package/dist/cjs/src/background/navigation/ContentResolver.js.map +1 -0
- package/dist/cjs/src/background/navigation/NavigationGraph.js +125 -11
- package/dist/cjs/src/background/navigation/NavigationGraph.js.map +1 -1
- package/dist/cjs/src/background/registry/ToolRegistry.js +98 -0
- package/dist/cjs/src/background/registry/ToolRegistry.js.map +1 -1
- package/dist/cjs/src/browser.js.map +1 -1
- package/dist/cjs/src/decorators/Component.js +30 -19
- package/dist/cjs/src/decorators/Component.js.map +1 -1
- package/dist/cjs/src/decorators/LocationScope.js +65 -0
- package/dist/cjs/src/decorators/LocationScope.js.map +1 -0
- package/dist/cjs/src/decorators/Tool.js +14 -1
- package/dist/cjs/src/decorators/Tool.js.map +1 -1
- package/dist/cjs/src/decorators/ToolProvider.js +11 -0
- package/dist/cjs/src/decorators/ToolProvider.js.map +1 -1
- package/dist/cjs/src/decorators/index.js +20 -2
- package/dist/cjs/src/decorators/index.js.map +1 -1
- package/dist/cjs/src/index.js +14 -3
- package/dist/cjs/src/index.js.map +1 -1
- package/dist/cjs/src/mcp/index.js +16 -0
- package/dist/cjs/src/mcp/index.js.map +1 -0
- package/dist/cjs/src/mcp/server.js +281 -0
- package/dist/cjs/src/mcp/server.js.map +1 -0
- package/dist/cjs/src/mcp/transport.js +131 -0
- package/dist/cjs/src/mcp/transport.js.map +1 -0
- package/dist/cjs/src/mcp/types.js +23 -0
- package/dist/cjs/src/mcp/types.js.map +1 -0
- package/dist/cjs/src/mcp-cli.js +55 -0
- package/dist/cjs/src/mcp-cli.js.map +1 -0
- package/dist/cjs/src/mcp-server.js +17 -0
- package/dist/cjs/src/mcp-server.js.map +1 -0
- package/dist/cjs/src/react/useNavigationHandler.js +53 -12
- package/dist/cjs/src/react/useNavigationHandler.js.map +1 -1
- package/dist/cjs/src/react/usePersistedState.js +1 -1
- package/dist/cjs/src/react/usePersistedState.js.map +1 -1
- package/dist/cjs/src/state/StateSync.js +130 -0
- package/dist/cjs/src/state/StateSync.js.map +1 -0
- package/dist/cjs/src/storage/LocalStorageAdapter.js +1 -1
- package/dist/cjs/src/storage/LocalStorageAdapter.js.map +1 -1
- package/dist/cjs/src/storage/StateManager.js +2 -2
- package/dist/cjs/src/tools/SystemTools.js +1 -1
- package/dist/cjs/src/tools/SystemTools.js.map +1 -1
- package/dist/cjs/src/types/StateManagers.js +2 -2
- package/dist/cjs/src/types/StateManagers.js.map +1 -1
- package/dist/cjs/src/ui/react/chat/ChatBubble.js +3 -3
- package/dist/cjs/src/ui/react/chat/ChatBubble.js.map +1 -1
- package/dist/esm/src/background/location/LocationContext.d.ts +118 -0
- package/dist/esm/src/background/location/LocationContext.d.ts.map +1 -0
- package/dist/esm/src/background/location/LocationContext.js +155 -0
- package/dist/esm/src/background/location/LocationContext.js.map +1 -0
- package/dist/esm/src/background/navigation/ContentResolver.d.ts +139 -0
- package/dist/esm/src/background/navigation/ContentResolver.d.ts.map +1 -0
- package/dist/esm/src/background/navigation/ContentResolver.js +36 -0
- package/dist/esm/src/background/navigation/ContentResolver.js.map +1 -0
- package/dist/esm/src/background/navigation/INavigationGraph.d.ts +1 -0
- package/dist/esm/src/background/navigation/INavigationGraph.d.ts.map +1 -1
- package/dist/esm/src/background/navigation/NavigationGraph.d.ts +24 -0
- package/dist/esm/src/background/navigation/NavigationGraph.d.ts.map +1 -1
- package/dist/esm/src/background/navigation/NavigationGraph.js +125 -11
- package/dist/esm/src/background/navigation/NavigationGraph.js.map +1 -1
- package/dist/esm/src/background/registry/ToolRegistry.d.ts +48 -0
- package/dist/esm/src/background/registry/ToolRegistry.d.ts.map +1 -1
- package/dist/esm/src/background/registry/ToolRegistry.js +98 -0
- package/dist/esm/src/background/registry/ToolRegistry.js.map +1 -1
- package/dist/esm/src/browser.d.ts +1 -0
- package/dist/esm/src/browser.d.ts.map +1 -1
- package/dist/esm/src/browser.js.map +1 -1
- package/dist/esm/src/decorators/Component.d.ts.map +1 -1
- package/dist/esm/src/decorators/Component.js +30 -19
- package/dist/esm/src/decorators/Component.js.map +1 -1
- package/dist/esm/src/decorators/LocationScope.d.ts +49 -0
- package/dist/esm/src/decorators/LocationScope.d.ts.map +1 -0
- package/dist/esm/src/decorators/LocationScope.js +60 -0
- package/dist/esm/src/decorators/LocationScope.js.map +1 -0
- package/dist/esm/src/decorators/Tool.d.ts +3 -1
- package/dist/esm/src/decorators/Tool.d.ts.map +1 -1
- package/dist/esm/src/decorators/Tool.js +14 -1
- package/dist/esm/src/decorators/Tool.js.map +1 -1
- package/dist/esm/src/decorators/ToolProvider.d.ts +11 -0
- package/dist/esm/src/decorators/ToolProvider.d.ts.map +1 -1
- package/dist/esm/src/decorators/ToolProvider.js +10 -0
- package/dist/esm/src/decorators/ToolProvider.js.map +1 -1
- package/dist/esm/src/decorators/index.d.ts +19 -1
- package/dist/esm/src/decorators/index.d.ts.map +1 -1
- package/dist/esm/src/decorators/index.js +19 -1
- package/dist/esm/src/decorators/index.js.map +1 -1
- package/dist/esm/src/index.d.ts +5 -2
- package/dist/esm/src/index.d.ts.map +1 -1
- package/dist/esm/src/index.js +6 -2
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/src/mcp/index.d.ts +10 -0
- package/dist/esm/src/mcp/index.d.ts.map +1 -0
- package/dist/esm/src/mcp/index.js +9 -0
- package/dist/esm/src/mcp/index.js.map +1 -0
- package/dist/esm/src/mcp/server.d.ts +84 -0
- package/dist/esm/src/mcp/server.d.ts.map +1 -0
- package/dist/esm/src/mcp/server.js +276 -0
- package/dist/esm/src/mcp/server.js.map +1 -0
- package/dist/esm/src/mcp/transport.d.ts +53 -0
- package/dist/esm/src/mcp/transport.d.ts.map +1 -0
- package/dist/esm/src/mcp/transport.js +126 -0
- package/dist/esm/src/mcp/transport.js.map +1 -0
- package/dist/esm/src/mcp/types.d.ts +175 -0
- package/dist/esm/src/mcp/types.d.ts.map +1 -0
- package/dist/esm/src/mcp/types.js +20 -0
- package/dist/esm/src/mcp/types.js.map +1 -0
- package/dist/esm/src/mcp-cli.d.ts +25 -0
- package/dist/esm/src/mcp-cli.d.ts.map +1 -0
- package/dist/esm/src/mcp-cli.js +53 -0
- package/dist/esm/src/mcp-cli.js.map +1 -0
- package/dist/esm/src/mcp-server.d.ts +10 -0
- package/dist/esm/src/mcp-server.d.ts.map +1 -0
- package/dist/esm/src/mcp-server.js +10 -0
- package/dist/esm/src/mcp-server.js.map +1 -0
- package/dist/esm/src/react/useNavigationHandler.d.ts +29 -11
- package/dist/esm/src/react/useNavigationHandler.d.ts.map +1 -1
- package/dist/esm/src/react/useNavigationHandler.js +53 -12
- package/dist/esm/src/react/useNavigationHandler.js.map +1 -1
- package/dist/esm/src/react/usePersistedState.js +1 -1
- package/dist/esm/src/react/usePersistedState.js.map +1 -1
- package/dist/esm/src/state/StateSync.d.ts +57 -0
- package/dist/esm/src/state/StateSync.d.ts.map +1 -0
- package/dist/esm/src/state/StateSync.js +123 -0
- package/dist/esm/src/state/StateSync.js.map +1 -0
- package/dist/esm/src/storage/LocalStorageAdapter.d.ts.map +1 -1
- package/dist/esm/src/storage/LocalStorageAdapter.js +1 -1
- package/dist/esm/src/storage/LocalStorageAdapter.js.map +1 -1
- package/dist/esm/src/storage/StateManager.d.ts +2 -2
- package/dist/esm/src/storage/StateManager.js +2 -2
- package/dist/esm/src/tools/SystemTools.js +1 -1
- package/dist/esm/src/tools/SystemTools.js.map +1 -1
- package/dist/esm/src/types/StateManagers.d.ts +2 -2
- package/dist/esm/src/types/StateManagers.d.ts.map +1 -1
- package/dist/esm/src/types/StateManagers.js +2 -2
- package/dist/esm/src/types/StateManagers.js.map +1 -1
- package/dist/esm/src/ui/react/chat/ChatBubble.d.ts +4 -0
- package/dist/esm/src/ui/react/chat/ChatBubble.d.ts.map +1 -1
- package/dist/esm/src/ui/react/chat/ChatBubble.js +3 -3
- package/dist/esm/src/ui/react/chat/ChatBubble.js.map +1 -1
- package/package.json +9 -17
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stdio Transport for MCP
|
|
3
|
+
*
|
|
4
|
+
* Implements MCP transport over stdin/stdout for integration with
|
|
5
|
+
* Claude Desktop, Cursor, and other MCP clients.
|
|
6
|
+
*/
|
|
7
|
+
import { createInterface } from 'readline';
|
|
8
|
+
/**
|
|
9
|
+
* Stdio transport implementation
|
|
10
|
+
*
|
|
11
|
+
* Reads JSON-RPC messages from stdin (one per line)
|
|
12
|
+
* Writes JSON-RPC responses to stdout (one per line)
|
|
13
|
+
*/
|
|
14
|
+
export class StdioTransport {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.messageQueue = [];
|
|
17
|
+
this.waitingResolvers = [];
|
|
18
|
+
this.closed = false;
|
|
19
|
+
this.setupReadline();
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Setup readline interface for stdin
|
|
23
|
+
*/
|
|
24
|
+
setupReadline() {
|
|
25
|
+
this.readline = createInterface({
|
|
26
|
+
input: process.stdin,
|
|
27
|
+
output: process.stdout,
|
|
28
|
+
terminal: false
|
|
29
|
+
});
|
|
30
|
+
this.readline.on('line', (line) => {
|
|
31
|
+
try {
|
|
32
|
+
const message = JSON.parse(line);
|
|
33
|
+
// If someone is waiting for a message, give it to them immediately
|
|
34
|
+
if (this.waitingResolvers.length > 0) {
|
|
35
|
+
const resolve = this.waitingResolvers.shift();
|
|
36
|
+
resolve(message);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
// Otherwise queue it
|
|
40
|
+
this.messageQueue.push(message);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
console.error('[Stdio Transport] Failed to parse message:', error);
|
|
45
|
+
console.error('[Stdio Transport] Line:', line);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
this.readline.on('close', () => {
|
|
49
|
+
this.closed = true;
|
|
50
|
+
// Reject all waiting resolvers
|
|
51
|
+
for (const resolve of this.waitingResolvers) {
|
|
52
|
+
resolve({
|
|
53
|
+
jsonrpc: '2.0',
|
|
54
|
+
method: '__transport_closed__'
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
this.waitingResolvers = [];
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Send message to client (write to stdout)
|
|
62
|
+
*/
|
|
63
|
+
async send(message) {
|
|
64
|
+
if (this.closed) {
|
|
65
|
+
throw new Error('Transport is closed');
|
|
66
|
+
}
|
|
67
|
+
const json = JSON.stringify(message);
|
|
68
|
+
process.stdout.write(json + '\n');
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Receive message from client (read from stdin)
|
|
72
|
+
*/
|
|
73
|
+
async receive() {
|
|
74
|
+
if (this.closed) {
|
|
75
|
+
throw new Error('Transport is closed');
|
|
76
|
+
}
|
|
77
|
+
// If we have queued messages, return the first one
|
|
78
|
+
if (this.messageQueue.length > 0) {
|
|
79
|
+
return this.messageQueue.shift();
|
|
80
|
+
}
|
|
81
|
+
// Otherwise wait for the next message
|
|
82
|
+
return new Promise((resolve) => {
|
|
83
|
+
this.waitingResolvers.push(resolve);
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Close transport
|
|
88
|
+
*/
|
|
89
|
+
async close() {
|
|
90
|
+
if (this.closed)
|
|
91
|
+
return;
|
|
92
|
+
this.closed = true;
|
|
93
|
+
if (this.readline) {
|
|
94
|
+
this.readline.close();
|
|
95
|
+
this.readline = undefined;
|
|
96
|
+
}
|
|
97
|
+
// Reject all waiting resolvers
|
|
98
|
+
for (const resolve of this.waitingResolvers) {
|
|
99
|
+
resolve({
|
|
100
|
+
jsonrpc: '2.0',
|
|
101
|
+
method: '__transport_closed__'
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
this.waitingResolvers = [];
|
|
105
|
+
this.messageQueue = [];
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Create stdio transport
|
|
110
|
+
*
|
|
111
|
+
* @returns Stdio transport instance
|
|
112
|
+
*
|
|
113
|
+
* @example
|
|
114
|
+
* ```typescript
|
|
115
|
+
* import { createSupernalMCPServer, createStdioTransport } from '@supernal/interface';
|
|
116
|
+
*
|
|
117
|
+
* const server = createSupernalMCPServer();
|
|
118
|
+
* const transport = createStdioTransport();
|
|
119
|
+
*
|
|
120
|
+
* await server.start(transport);
|
|
121
|
+
* ```
|
|
122
|
+
*/
|
|
123
|
+
export function createStdioTransport() {
|
|
124
|
+
return new StdioTransport();
|
|
125
|
+
}
|
|
126
|
+
//# 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,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Protocol Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for Model Context Protocol (MCP) integration.
|
|
5
|
+
* Based on @ai-sdk/mcp specification.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* MCP tool parameter schema
|
|
9
|
+
*/
|
|
10
|
+
export interface MCPToolParameter {
|
|
11
|
+
type: string;
|
|
12
|
+
description?: string;
|
|
13
|
+
required?: boolean;
|
|
14
|
+
properties?: Record<string, MCPToolParameter>;
|
|
15
|
+
items?: MCPToolParameter;
|
|
16
|
+
enum?: string[];
|
|
17
|
+
default?: any;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* MCP tool definition
|
|
21
|
+
*/
|
|
22
|
+
export interface MCPTool {
|
|
23
|
+
/** Unique tool identifier (container.toolName format) */
|
|
24
|
+
name: string;
|
|
25
|
+
/** Human-readable description */
|
|
26
|
+
description: string;
|
|
27
|
+
/** JSON Schema for tool parameters */
|
|
28
|
+
inputSchema: {
|
|
29
|
+
type: 'object';
|
|
30
|
+
properties: Record<string, MCPToolParameter>;
|
|
31
|
+
required?: string[];
|
|
32
|
+
};
|
|
33
|
+
/** Optional annotations for additional metadata */
|
|
34
|
+
annotations?: {
|
|
35
|
+
container?: string;
|
|
36
|
+
category?: string;
|
|
37
|
+
elementId?: string;
|
|
38
|
+
componentName?: string;
|
|
39
|
+
[key: string]: any;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* MCP tools/list response
|
|
44
|
+
*/
|
|
45
|
+
export interface MCPToolsListResponse {
|
|
46
|
+
tools: MCPTool[];
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* MCP tools/call request
|
|
50
|
+
*/
|
|
51
|
+
export interface MCPToolCallRequest {
|
|
52
|
+
name: string;
|
|
53
|
+
arguments: Record<string, any>;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* MCP content types
|
|
57
|
+
*/
|
|
58
|
+
export type MCPContentType = 'text' | 'image' | 'resource';
|
|
59
|
+
/**
|
|
60
|
+
* MCP text content
|
|
61
|
+
*/
|
|
62
|
+
export interface MCPTextContent {
|
|
63
|
+
type: 'text';
|
|
64
|
+
text: string;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* MCP image content
|
|
68
|
+
*/
|
|
69
|
+
export interface MCPImageContent {
|
|
70
|
+
type: 'image';
|
|
71
|
+
data: string;
|
|
72
|
+
mimeType: string;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* MCP resource content
|
|
76
|
+
*/
|
|
77
|
+
export interface MCPResourceContent {
|
|
78
|
+
type: 'resource';
|
|
79
|
+
resource: {
|
|
80
|
+
uri: string;
|
|
81
|
+
mimeType?: string;
|
|
82
|
+
text?: string;
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Union of all MCP content types
|
|
87
|
+
*/
|
|
88
|
+
export type MCPContent = MCPTextContent | MCPImageContent | MCPResourceContent;
|
|
89
|
+
/**
|
|
90
|
+
* MCP tools/call response
|
|
91
|
+
*/
|
|
92
|
+
export interface MCPToolCallResponse {
|
|
93
|
+
content: MCPContent[];
|
|
94
|
+
isError?: boolean;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* MCP server configuration
|
|
98
|
+
*/
|
|
99
|
+
export interface MCPServerConfig {
|
|
100
|
+
/** Server name */
|
|
101
|
+
name: string;
|
|
102
|
+
/** Server version */
|
|
103
|
+
version: string;
|
|
104
|
+
/** Optional description */
|
|
105
|
+
description?: string;
|
|
106
|
+
/** Optional capabilities */
|
|
107
|
+
capabilities?: {
|
|
108
|
+
tools?: {};
|
|
109
|
+
resources?: {};
|
|
110
|
+
prompts?: {};
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* MCP error codes
|
|
115
|
+
*/
|
|
116
|
+
export declare enum MCPErrorCode {
|
|
117
|
+
PARSE_ERROR = -32700,
|
|
118
|
+
INVALID_REQUEST = -32600,
|
|
119
|
+
METHOD_NOT_FOUND = -32601,
|
|
120
|
+
INVALID_PARAMS = -32602,
|
|
121
|
+
INTERNAL_ERROR = -32603,
|
|
122
|
+
TOOL_NOT_FOUND = -1,
|
|
123
|
+
TOOL_EXECUTION_FAILED = -2
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* MCP error
|
|
127
|
+
*/
|
|
128
|
+
export interface MCPError {
|
|
129
|
+
code: MCPErrorCode;
|
|
130
|
+
message: string;
|
|
131
|
+
data?: any;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* MCP request
|
|
135
|
+
*/
|
|
136
|
+
export interface MCPRequest {
|
|
137
|
+
jsonrpc: '2.0';
|
|
138
|
+
id?: string | number;
|
|
139
|
+
method: string;
|
|
140
|
+
params?: any;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* MCP response
|
|
144
|
+
*/
|
|
145
|
+
export interface MCPResponse {
|
|
146
|
+
jsonrpc: '2.0';
|
|
147
|
+
id?: string | number;
|
|
148
|
+
result?: any;
|
|
149
|
+
error?: MCPError;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* MCP transport interface
|
|
153
|
+
*/
|
|
154
|
+
export interface MCPTransport {
|
|
155
|
+
/** Send message to client */
|
|
156
|
+
send(message: MCPResponse): Promise<void>;
|
|
157
|
+
/** Receive message from client */
|
|
158
|
+
receive(): Promise<MCPRequest>;
|
|
159
|
+
/** Close transport */
|
|
160
|
+
close(): Promise<void>;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* MCP server interface
|
|
164
|
+
*/
|
|
165
|
+
export interface MCPServer {
|
|
166
|
+
/** Server configuration */
|
|
167
|
+
config: MCPServerConfig;
|
|
168
|
+
/** Start server (transport provided externally) */
|
|
169
|
+
start(transport: MCPTransport): Promise<void>;
|
|
170
|
+
/** Stop server */
|
|
171
|
+
stop(): Promise<void>;
|
|
172
|
+
/** Handle incoming request */
|
|
173
|
+
handle(request: MCPRequest): Promise<MCPResponse | null>;
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/mcp/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Protocol Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for Model Context Protocol (MCP) integration.
|
|
5
|
+
* Based on @ai-sdk/mcp specification.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* MCP error codes
|
|
9
|
+
*/
|
|
10
|
+
export var MCPErrorCode;
|
|
11
|
+
(function (MCPErrorCode) {
|
|
12
|
+
MCPErrorCode[MCPErrorCode["PARSE_ERROR"] = -32700] = "PARSE_ERROR";
|
|
13
|
+
MCPErrorCode[MCPErrorCode["INVALID_REQUEST"] = -32600] = "INVALID_REQUEST";
|
|
14
|
+
MCPErrorCode[MCPErrorCode["METHOD_NOT_FOUND"] = -32601] = "METHOD_NOT_FOUND";
|
|
15
|
+
MCPErrorCode[MCPErrorCode["INVALID_PARAMS"] = -32602] = "INVALID_PARAMS";
|
|
16
|
+
MCPErrorCode[MCPErrorCode["INTERNAL_ERROR"] = -32603] = "INTERNAL_ERROR";
|
|
17
|
+
MCPErrorCode[MCPErrorCode["TOOL_NOT_FOUND"] = -1] = "TOOL_NOT_FOUND";
|
|
18
|
+
MCPErrorCode[MCPErrorCode["TOOL_EXECUTION_FAILED"] = -2] = "TOOL_EXECUTION_FAILED";
|
|
19
|
+
})(MCPErrorCode || (MCPErrorCode = {}));
|
|
20
|
+
//# 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,MAAM,CAAN,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,KAAZ,YAAY,QAQvB"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Supernal MCP CLI Entry Point
|
|
3
|
+
*
|
|
4
|
+
* Starts the Supernal MCP server with stdio transport for use with
|
|
5
|
+
* Claude Desktop, Cursor, and other MCP clients.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* ```bash
|
|
9
|
+
* npx @supernal/interface-mcp
|
|
10
|
+
* ```
|
|
11
|
+
*
|
|
12
|
+
* Or in Claude Desktop config:
|
|
13
|
+
* ```json
|
|
14
|
+
* {
|
|
15
|
+
* "mcpServers": {
|
|
16
|
+
* "supernal": {
|
|
17
|
+
* "command": "npx",
|
|
18
|
+
* "args": ["@supernal/interface-mcp"]
|
|
19
|
+
* }
|
|
20
|
+
* }
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=mcp-cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-cli.d.ts","sourceRoot":"","sources":["../../../src/mcp-cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Supernal MCP CLI Entry Point
|
|
3
|
+
*
|
|
4
|
+
* Starts the Supernal MCP server with stdio transport for use with
|
|
5
|
+
* Claude Desktop, Cursor, and other MCP clients.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* ```bash
|
|
9
|
+
* npx @supernal/interface-mcp
|
|
10
|
+
* ```
|
|
11
|
+
*
|
|
12
|
+
* Or in Claude Desktop config:
|
|
13
|
+
* ```json
|
|
14
|
+
* {
|
|
15
|
+
* "mcpServers": {
|
|
16
|
+
* "supernal": {
|
|
17
|
+
* "command": "npx",
|
|
18
|
+
* "args": ["@supernal/interface-mcp"]
|
|
19
|
+
* }
|
|
20
|
+
* }
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
import { createSupernalMCPServer, createStdioTransport } from './mcp/index.js';
|
|
25
|
+
async function main() {
|
|
26
|
+
const server = createSupernalMCPServer({
|
|
27
|
+
name: 'supernal-interface',
|
|
28
|
+
version: '1.0.0',
|
|
29
|
+
description: 'MCP server for Supernal Interface tools'
|
|
30
|
+
});
|
|
31
|
+
const transport = createStdioTransport();
|
|
32
|
+
console.error('[Supernal MCP] Starting server...');
|
|
33
|
+
try {
|
|
34
|
+
await server.start(transport);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
console.error('[Supernal MCP] Server error:', error);
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// Handle shutdown gracefully
|
|
42
|
+
const handleShutdown = () => {
|
|
43
|
+
console.error('[Supernal MCP] Shutting down...');
|
|
44
|
+
process.exit(0);
|
|
45
|
+
};
|
|
46
|
+
process.on('SIGINT', handleShutdown);
|
|
47
|
+
process.on('SIGTERM', handleShutdown);
|
|
48
|
+
// Start server
|
|
49
|
+
main().catch((error) => {
|
|
50
|
+
console.error('[Supernal MCP] Fatal error:', error);
|
|
51
|
+
process.exit(1);
|
|
52
|
+
});
|
|
53
|
+
//# 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,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAEtE,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,uBAAuB,CAAC;QACrC,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,yCAAyC;KACvD,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,oBAAoB,EAAE,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,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server Entry Point (Node.js only)
|
|
3
|
+
*
|
|
4
|
+
* This file should ONLY be used in Node.js environments (MCP servers).
|
|
5
|
+
* DO NOT import this in browser code.
|
|
6
|
+
*
|
|
7
|
+
* For browser usage, import from '@supernal/interface' (without /mcp)
|
|
8
|
+
*/
|
|
9
|
+
export { createSupernalMCPServer, createStdioTransport, SupernalMCPServer, StdioTransport, type MCPServer, type MCPServerConfig, type MCPTransport, type MCPRequest, type MCPResponse, type MCPTool, type MCPToolsListResponse, type MCPToolCallRequest, type MCPToolCallResponse } from './mcp';
|
|
10
|
+
//# sourceMappingURL=mcp-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../../src/mcp-server.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EACd,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACzB,MAAM,OAAO,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server Entry Point (Node.js only)
|
|
3
|
+
*
|
|
4
|
+
* This file should ONLY be used in Node.js environments (MCP servers).
|
|
5
|
+
* DO NOT import this in browser code.
|
|
6
|
+
*
|
|
7
|
+
* For browser usage, import from '@supernal/interface' (without /mcp)
|
|
8
|
+
*/
|
|
9
|
+
export { createSupernalMCPServer, createStdioTransport, SupernalMCPServer, StdioTransport } from './mcp/index.js';
|
|
10
|
+
//# 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,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EAUf,MAAM,OAAO,CAAC"}
|
|
@@ -2,20 +2,28 @@
|
|
|
2
2
|
* useNavigationHandler - React Hook for Automatic Navigation Setup
|
|
3
3
|
*
|
|
4
4
|
* Single-line hook that sets up navigation for any page.
|
|
5
|
-
*
|
|
5
|
+
* Now also tracks location in LocationContext for location-aware tools.
|
|
6
6
|
*
|
|
7
|
-
* This
|
|
7
|
+
* This hook:
|
|
8
|
+
* 1. Tracks current page/route in LocationContext
|
|
9
|
+
* 2. Sets up navigation handler in NavigationGraph
|
|
10
|
+
* 3. Updates location when route changes
|
|
8
11
|
*/
|
|
9
12
|
/**
|
|
10
13
|
* Set up automatic navigation handler for the current page
|
|
11
14
|
*
|
|
12
15
|
* This hook:
|
|
13
|
-
* 1.
|
|
14
|
-
* 2.
|
|
15
|
-
* 3.
|
|
16
|
-
* 4.
|
|
17
|
-
*
|
|
18
|
-
*
|
|
16
|
+
* 1. Tracks current page/route in LocationContext for location-aware tools
|
|
17
|
+
* 2. Gets routes from NavigationGraph (populated by container definitions)
|
|
18
|
+
* 3. Creates a handler that resolves page names → routes
|
|
19
|
+
* 4. Registers the handler with NavigationGraph
|
|
20
|
+
* 5. Supports dynamic routes (e.g., "blog/post-slug")
|
|
21
|
+
*
|
|
22
|
+
* @param router - Next.js router or any router with `push`, `pathname`, `route`
|
|
23
|
+
* @param options - Optional configuration
|
|
24
|
+
* @param options.components - Currently mounted component IDs
|
|
25
|
+
* @param options.elements - Currently visible element IDs
|
|
26
|
+
* @param options.metadata - Additional location metadata
|
|
19
27
|
*
|
|
20
28
|
* @example
|
|
21
29
|
* ```typescript
|
|
@@ -24,7 +32,8 @@
|
|
|
24
32
|
*
|
|
25
33
|
* export default function MyPage() {
|
|
26
34
|
* const router = useRouter();
|
|
27
|
-
*
|
|
35
|
+
* // Track location automatically
|
|
36
|
+
* useNavigationHandler(router);
|
|
28
37
|
*
|
|
29
38
|
* return <div>...</div>;
|
|
30
39
|
* }
|
|
@@ -32,11 +41,20 @@
|
|
|
32
41
|
*
|
|
33
42
|
* @example
|
|
34
43
|
* ```typescript
|
|
35
|
-
* //
|
|
36
|
-
* useNavigationHandler(
|
|
44
|
+
* // With component tracking
|
|
45
|
+
* useNavigationHandler(router, {
|
|
46
|
+
* components: ['blog-header', 'blog-editor'],
|
|
47
|
+
* metadata: { userRole: 'editor' }
|
|
48
|
+
* });
|
|
37
49
|
* ```
|
|
38
50
|
*/
|
|
39
51
|
export declare function useNavigationHandler(router?: {
|
|
40
52
|
push: (route: string) => any;
|
|
53
|
+
pathname?: string;
|
|
54
|
+
route?: string;
|
|
55
|
+
}, options?: {
|
|
56
|
+
components?: string[];
|
|
57
|
+
elements?: string[];
|
|
58
|
+
metadata?: Record<string, any>;
|
|
41
59
|
}): void;
|
|
42
60
|
//# sourceMappingURL=useNavigationHandler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useNavigationHandler.d.ts","sourceRoot":"","sources":["../../../../src/react/useNavigationHandler.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"useNavigationHandler.d.ts","sourceRoot":"","sources":["../../../../src/react/useNavigationHandler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,CAAC,EAAE;IACP,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,GAAG,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,EACD,OAAO,CAAC,EAAE;IACR,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC,GACA,IAAI,CAkFN"}
|
|
@@ -2,22 +2,31 @@
|
|
|
2
2
|
* useNavigationHandler - React Hook for Automatic Navigation Setup
|
|
3
3
|
*
|
|
4
4
|
* Single-line hook that sets up navigation for any page.
|
|
5
|
-
*
|
|
5
|
+
* Now also tracks location in LocationContext for location-aware tools.
|
|
6
6
|
*
|
|
7
|
-
* This
|
|
7
|
+
* This hook:
|
|
8
|
+
* 1. Tracks current page/route in LocationContext
|
|
9
|
+
* 2. Sets up navigation handler in NavigationGraph
|
|
10
|
+
* 3. Updates location when route changes
|
|
8
11
|
*/
|
|
9
12
|
import { useEffect } from 'react';
|
|
10
13
|
import { NavigationGraph } from '../background/navigation/NavigationGraph.js';
|
|
14
|
+
import { LocationContext } from '../background/location/LocationContext.js';
|
|
11
15
|
/**
|
|
12
16
|
* Set up automatic navigation handler for the current page
|
|
13
17
|
*
|
|
14
18
|
* This hook:
|
|
15
|
-
* 1.
|
|
16
|
-
* 2.
|
|
17
|
-
* 3.
|
|
18
|
-
* 4.
|
|
19
|
+
* 1. Tracks current page/route in LocationContext for location-aware tools
|
|
20
|
+
* 2. Gets routes from NavigationGraph (populated by container definitions)
|
|
21
|
+
* 3. Creates a handler that resolves page names → routes
|
|
22
|
+
* 4. Registers the handler with NavigationGraph
|
|
23
|
+
* 5. Supports dynamic routes (e.g., "blog/post-slug")
|
|
19
24
|
*
|
|
20
|
-
* @param router - Next.js router or any router with
|
|
25
|
+
* @param router - Next.js router or any router with `push`, `pathname`, `route`
|
|
26
|
+
* @param options - Optional configuration
|
|
27
|
+
* @param options.components - Currently mounted component IDs
|
|
28
|
+
* @param options.elements - Currently visible element IDs
|
|
29
|
+
* @param options.metadata - Additional location metadata
|
|
21
30
|
*
|
|
22
31
|
* @example
|
|
23
32
|
* ```typescript
|
|
@@ -26,7 +35,8 @@ import { NavigationGraph } from '../background/navigation/NavigationGraph.js';
|
|
|
26
35
|
*
|
|
27
36
|
* export default function MyPage() {
|
|
28
37
|
* const router = useRouter();
|
|
29
|
-
*
|
|
38
|
+
* // Track location automatically
|
|
39
|
+
* useNavigationHandler(router);
|
|
30
40
|
*
|
|
31
41
|
* return <div>...</div>;
|
|
32
42
|
* }
|
|
@@ -34,13 +44,28 @@ import { NavigationGraph } from '../background/navigation/NavigationGraph.js';
|
|
|
34
44
|
*
|
|
35
45
|
* @example
|
|
36
46
|
* ```typescript
|
|
37
|
-
* //
|
|
38
|
-
* useNavigationHandler(
|
|
47
|
+
* // With component tracking
|
|
48
|
+
* useNavigationHandler(router, {
|
|
49
|
+
* components: ['blog-header', 'blog-editor'],
|
|
50
|
+
* metadata: { userRole: 'editor' }
|
|
51
|
+
* });
|
|
39
52
|
* ```
|
|
40
53
|
*/
|
|
41
|
-
export function useNavigationHandler(router) {
|
|
54
|
+
export function useNavigationHandler(router, options) {
|
|
42
55
|
useEffect(() => {
|
|
43
56
|
const graph = NavigationGraph.getInstance();
|
|
57
|
+
// Update LocationContext with current page/route
|
|
58
|
+
if (router) {
|
|
59
|
+
const page = router.pathname || '/';
|
|
60
|
+
const route = router.route || router.pathname || '/';
|
|
61
|
+
LocationContext.setCurrent({
|
|
62
|
+
page,
|
|
63
|
+
route,
|
|
64
|
+
components: options?.components,
|
|
65
|
+
elements: options?.elements,
|
|
66
|
+
metadata: options?.metadata
|
|
67
|
+
});
|
|
68
|
+
}
|
|
44
69
|
const handler = (pageNameOrRoute) => {
|
|
45
70
|
const pageName = typeof pageNameOrRoute === 'string' ? pageNameOrRoute : pageNameOrRoute?.name || pageNameOrRoute?.path;
|
|
46
71
|
if (!pageName)
|
|
@@ -61,6 +86,14 @@ export function useNavigationHandler(router) {
|
|
|
61
86
|
else if (typeof window !== 'undefined') {
|
|
62
87
|
window.location.href = routePath;
|
|
63
88
|
}
|
|
89
|
+
// Update location after navigation
|
|
90
|
+
LocationContext.setCurrent({
|
|
91
|
+
page: routePath,
|
|
92
|
+
route: routePath,
|
|
93
|
+
components: options?.components,
|
|
94
|
+
elements: options?.elements,
|
|
95
|
+
metadata: options?.metadata
|
|
96
|
+
});
|
|
64
97
|
}
|
|
65
98
|
return;
|
|
66
99
|
}
|
|
@@ -74,12 +107,20 @@ export function useNavigationHandler(router) {
|
|
|
74
107
|
else if (typeof window !== 'undefined') {
|
|
75
108
|
window.location.href = routePath;
|
|
76
109
|
}
|
|
110
|
+
// Update location after navigation
|
|
111
|
+
LocationContext.setCurrent({
|
|
112
|
+
page: routePath,
|
|
113
|
+
route: routePath,
|
|
114
|
+
components: options?.components,
|
|
115
|
+
elements: options?.elements,
|
|
116
|
+
metadata: options?.metadata
|
|
117
|
+
});
|
|
77
118
|
};
|
|
78
119
|
graph.setNavigationHandler(handler);
|
|
79
120
|
return () => {
|
|
80
121
|
// Clean up handler on unmount
|
|
81
122
|
graph.setNavigationHandler(() => { });
|
|
82
123
|
};
|
|
83
|
-
}, [router]);
|
|
124
|
+
}, [router, options?.components, options?.elements, options?.metadata]);
|
|
84
125
|
}
|
|
85
126
|
//# sourceMappingURL=useNavigationHandler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useNavigationHandler.js","sourceRoot":"","sources":["../../../../src/react/useNavigationHandler.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"useNavigationHandler.js","sourceRoot":"","sources":["../../../../src/react/useNavigationHandler.ts"],"names":[],"mappings":"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"}
|