@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,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
- * Uses NavigationGraph to automatically resolve routes from container definitions.
5
+ * Now also tracks location in LocationContext for location-aware tools.
6
6
  *
7
- * This eliminates the need for manual route maps in every page component.
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. Gets routes from NavigationGraph (populated by container definitions)
14
- * 2. Creates a handler that resolves page names → routes
15
- * 3. Registers the handler with NavigationGraph
16
- * 4. Supports dynamic routes (e.g., "blog/post-slug")
17
- *
18
- * @param router - Next.js router or any router with a `push` method
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
- * useNavigationHandler(router); // ONE LINE!
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
- * // Without a router (uses window.location as fallback)
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;;;;;;;GAOG;AAKH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,CAAC,EAAE;IAAE,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,GAAG,CAAA;CAAE,GACxC,IAAI,CAkDN"}
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
- * Uses NavigationGraph to automatically resolve routes from container definitions.
5
+ * Now also tracks location in LocationContext for location-aware tools.
6
6
  *
7
- * This eliminates the need for manual route maps in every page component.
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. Gets routes from NavigationGraph (populated by container definitions)
16
- * 2. Creates a handler that resolves page names → routes
17
- * 3. Registers the handler with NavigationGraph
18
- * 4. Supports dynamic routes (e.g., "blog/post-slug")
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 a `push` method
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
- * useNavigationHandler(router); // ONE LINE!
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
- * // Without a router (uses window.location as fallback)
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;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAE3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAyC;IAEzC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,eAAe,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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"}