@shin1ohno/sage 0.1.0 → 0.2.0
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/README.md +79 -114
- package/dist/config/storage/storage-factory.d.ts +5 -1
- package/dist/config/storage/storage-factory.d.ts.map +1 -1
- package/dist/config/storage/storage-factory.js +12 -19
- package/dist/config/storage/storage-factory.js.map +1 -1
- package/dist/core/sage-core.d.ts +10 -5
- package/dist/core/sage-core.d.ts.map +1 -1
- package/dist/core/sage-core.js +28 -51
- package/dist/core/sage-core.js.map +1 -1
- package/dist/index.js +335 -0
- package/dist/index.js.map +1 -1
- package/dist/integrations/apple-reminders.d.ts +46 -0
- package/dist/integrations/apple-reminders.d.ts.map +1 -1
- package/dist/integrations/apple-reminders.js +169 -0
- package/dist/integrations/apple-reminders.js.map +1 -1
- package/dist/integrations/notion-mcp.d.ts +136 -1
- package/dist/integrations/notion-mcp.d.ts.map +1 -1
- package/dist/integrations/notion-mcp.js +449 -1
- package/dist/integrations/notion-mcp.js.map +1 -1
- package/dist/integrations/task-synchronizer.d.ts +124 -0
- package/dist/integrations/task-synchronizer.d.ts.map +1 -0
- package/dist/integrations/task-synchronizer.js +363 -0
- package/dist/integrations/task-synchronizer.js.map +1 -0
- package/dist/integrations/todo-list-manager.d.ts +185 -0
- package/dist/integrations/todo-list-manager.d.ts.map +1 -0
- package/dist/integrations/todo-list-manager.js +581 -0
- package/dist/integrations/todo-list-manager.js.map +1 -0
- package/dist/platform/adapter-factory.d.ts.map +1 -1
- package/dist/platform/adapter-factory.js +4 -8
- package/dist/platform/adapter-factory.js.map +1 -1
- package/dist/platform/adapters/mcp-adapter.js +1 -1
- package/dist/platform/adapters/mcp-adapter.js.map +1 -1
- package/dist/platform/adapters/remote-mcp-adapter.d.ts +34 -0
- package/dist/platform/adapters/remote-mcp-adapter.d.ts.map +1 -0
- package/dist/platform/adapters/remote-mcp-adapter.js +54 -0
- package/dist/platform/adapters/remote-mcp-adapter.js.map +1 -0
- package/dist/platform/detector.d.ts +5 -16
- package/dist/platform/detector.d.ts.map +1 -1
- package/dist/platform/detector.js +52 -108
- package/dist/platform/detector.js.map +1 -1
- package/dist/platform/index.d.ts +0 -2
- package/dist/platform/index.d.ts.map +1 -1
- package/dist/platform/index.js +0 -2
- package/dist/platform/index.js.map +1 -1
- package/dist/platform/types.d.ts +20 -62
- package/dist/platform/types.d.ts.map +1 -1
- package/dist/platform/types.js +6 -11
- package/dist/platform/types.js.map +1 -1
- package/dist/remote/cloud-config.d.ts +139 -0
- package/dist/remote/cloud-config.d.ts.map +1 -0
- package/dist/remote/cloud-config.js +229 -0
- package/dist/remote/cloud-config.js.map +1 -0
- package/dist/remote/hybrid-integration.d.ts +109 -0
- package/dist/remote/hybrid-integration.d.ts.map +1 -0
- package/dist/remote/hybrid-integration.js +230 -0
- package/dist/remote/hybrid-integration.js.map +1 -0
- package/dist/remote/remote-mcp-server.d.ts +244 -0
- package/dist/remote/remote-mcp-server.d.ts.map +1 -0
- package/dist/remote/remote-mcp-server.js +507 -0
- package/dist/remote/remote-mcp-server.js.map +1 -0
- package/dist/utils/priority.d.ts.map +1 -1
- package/dist/utils/priority.js +18 -5
- package/dist/utils/priority.js.map +1 -1
- package/dist/utils/stakeholders.d.ts +4 -0
- package/dist/utils/stakeholders.d.ts.map +1 -1
- package/dist/utils/stakeholders.js +45 -4
- package/dist/utils/stakeholders.js.map +1 -1
- package/dist/utils/task-splitter.d.ts.map +1 -1
- package/dist/utils/task-splitter.js +62 -11
- package/dist/utils/task-splitter.js.map +1 -1
- package/manifest.json +74 -0
- package/package.json +2 -1
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hybrid Integration System
|
|
3
|
+
* Coordinates Remote MCP and Native integrations across platforms
|
|
4
|
+
* Requirement: 12.5
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Integration Capability class
|
|
8
|
+
* Represents a capability with priority
|
|
9
|
+
*/
|
|
10
|
+
export class IntegrationCapability {
|
|
11
|
+
type;
|
|
12
|
+
service;
|
|
13
|
+
priority;
|
|
14
|
+
constructor(type, service, priority) {
|
|
15
|
+
this.type = type;
|
|
16
|
+
this.service = service;
|
|
17
|
+
this.priority = priority;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Check if this capability is preferred over another
|
|
21
|
+
*/
|
|
22
|
+
isPreferredOver(other) {
|
|
23
|
+
return this.priority > other.priority;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Hybrid Integration Manager
|
|
28
|
+
* Coordinates between native and remote integrations
|
|
29
|
+
*/
|
|
30
|
+
export class HybridIntegrationManager {
|
|
31
|
+
capabilityMap;
|
|
32
|
+
constructor() {
|
|
33
|
+
this.capabilityMap = this.initializeCapabilityMap();
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Initialize capability map for all platforms
|
|
37
|
+
*/
|
|
38
|
+
initializeCapabilityMap() {
|
|
39
|
+
const map = new Map();
|
|
40
|
+
// macOS: Native AppleScript for Reminders/Calendar, MCP for Notion
|
|
41
|
+
map.set('macos', {
|
|
42
|
+
reminders: 'native',
|
|
43
|
+
calendar: 'native',
|
|
44
|
+
notion: 'mcp',
|
|
45
|
+
});
|
|
46
|
+
// iOS: Native integration for Reminders/Calendar, Remote for Notion
|
|
47
|
+
map.set('ios', {
|
|
48
|
+
reminders: 'native',
|
|
49
|
+
calendar: 'native',
|
|
50
|
+
notion: 'remote',
|
|
51
|
+
});
|
|
52
|
+
// iPadOS: Same as iOS
|
|
53
|
+
map.set('ipados', {
|
|
54
|
+
reminders: 'native',
|
|
55
|
+
calendar: 'native',
|
|
56
|
+
notion: 'remote',
|
|
57
|
+
});
|
|
58
|
+
// Web: All remote
|
|
59
|
+
map.set('web', {
|
|
60
|
+
reminders: 'remote',
|
|
61
|
+
calendar: 'remote',
|
|
62
|
+
notion: 'remote',
|
|
63
|
+
});
|
|
64
|
+
// Unknown: All unavailable
|
|
65
|
+
map.set('unknown', {
|
|
66
|
+
reminders: 'unavailable',
|
|
67
|
+
calendar: 'unavailable',
|
|
68
|
+
notion: 'unavailable',
|
|
69
|
+
});
|
|
70
|
+
return map;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Detect available capabilities for a platform
|
|
74
|
+
*/
|
|
75
|
+
detectCapabilities(platform) {
|
|
76
|
+
return (this.capabilityMap.get(platform) || {
|
|
77
|
+
reminders: 'unavailable',
|
|
78
|
+
calendar: 'unavailable',
|
|
79
|
+
notion: 'unavailable',
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Select the best integration strategy for a service on a platform
|
|
84
|
+
*/
|
|
85
|
+
selectStrategy(service, platform) {
|
|
86
|
+
const capabilities = this.detectCapabilities(platform);
|
|
87
|
+
const primaryType = capabilities[service];
|
|
88
|
+
// Define fallback based on primary type
|
|
89
|
+
let fallback;
|
|
90
|
+
if (primaryType === 'native') {
|
|
91
|
+
fallback = 'remote';
|
|
92
|
+
}
|
|
93
|
+
else if (primaryType === 'mcp') {
|
|
94
|
+
fallback = 'remote';
|
|
95
|
+
}
|
|
96
|
+
return {
|
|
97
|
+
primary: primaryType,
|
|
98
|
+
fallback: fallback !== primaryType ? fallback : undefined,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Execute a task using the hybrid integration system
|
|
103
|
+
*/
|
|
104
|
+
async executeTask(request) {
|
|
105
|
+
const attempted = [];
|
|
106
|
+
const { type, platform, payload } = request;
|
|
107
|
+
// Determine service type from task type
|
|
108
|
+
const service = this.getServiceFromTaskType(type);
|
|
109
|
+
const strategy = this.selectStrategy(service, platform);
|
|
110
|
+
// Try primary integration
|
|
111
|
+
attempted.push(strategy.primary);
|
|
112
|
+
try {
|
|
113
|
+
if (strategy.primary === 'native') {
|
|
114
|
+
const result = await this.executeNative(type, payload);
|
|
115
|
+
return { success: true, attempted, result };
|
|
116
|
+
}
|
|
117
|
+
else if (strategy.primary === 'remote') {
|
|
118
|
+
const result = await this.executeRemote(type, payload);
|
|
119
|
+
return { success: true, attempted, result };
|
|
120
|
+
}
|
|
121
|
+
else if (strategy.primary === 'mcp') {
|
|
122
|
+
const result = await this.executeMCP(type, payload);
|
|
123
|
+
return { success: true, attempted, result };
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
// Try fallback if available
|
|
128
|
+
if (strategy.fallback) {
|
|
129
|
+
attempted.push(strategy.fallback);
|
|
130
|
+
try {
|
|
131
|
+
if (strategy.fallback === 'remote') {
|
|
132
|
+
const result = await this.executeRemote(type, payload);
|
|
133
|
+
return { success: true, attempted, result };
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
catch (fallbackError) {
|
|
137
|
+
return {
|
|
138
|
+
success: false,
|
|
139
|
+
attempted,
|
|
140
|
+
error: `All integrations failed. Last error: ${fallbackError.message}`,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return {
|
|
145
|
+
success: false,
|
|
146
|
+
attempted,
|
|
147
|
+
error: error.message,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
return {
|
|
151
|
+
success: false,
|
|
152
|
+
attempted,
|
|
153
|
+
error: 'Unknown integration type',
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Plan coordination between multiple platforms
|
|
158
|
+
*/
|
|
159
|
+
planCoordination(platforms) {
|
|
160
|
+
// Determine sync strategy based on platform mix
|
|
161
|
+
const hasRemoteOnly = platforms.some((p) => p === 'web');
|
|
162
|
+
const hasNative = platforms.some((p) => ['macos', 'ios', 'ipados'].includes(p));
|
|
163
|
+
let syncStrategy;
|
|
164
|
+
if (hasRemoteOnly && hasNative) {
|
|
165
|
+
syncStrategy = 'eventual';
|
|
166
|
+
}
|
|
167
|
+
else if (hasNative) {
|
|
168
|
+
syncStrategy = 'real-time';
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
syncStrategy = 'manual';
|
|
172
|
+
}
|
|
173
|
+
return {
|
|
174
|
+
platforms,
|
|
175
|
+
syncStrategy,
|
|
176
|
+
conflictResolution: 'last-write-wins',
|
|
177
|
+
syncInterval: syncStrategy === 'eventual' ? 60000 : undefined,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Get service type from task type
|
|
182
|
+
*/
|
|
183
|
+
getServiceFromTaskType(taskType) {
|
|
184
|
+
if (taskType.includes('reminder')) {
|
|
185
|
+
return 'reminders';
|
|
186
|
+
}
|
|
187
|
+
else if (taskType.includes('calendar') || taskType.includes('event')) {
|
|
188
|
+
return 'calendar';
|
|
189
|
+
}
|
|
190
|
+
else if (taskType.includes('notion') || taskType.includes('page')) {
|
|
191
|
+
return 'notion';
|
|
192
|
+
}
|
|
193
|
+
return 'reminders'; // Default
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Execute task using native integration
|
|
197
|
+
*/
|
|
198
|
+
async executeNative(_type, payload) {
|
|
199
|
+
// This would call the appropriate native service
|
|
200
|
+
// In production, this connects to AppleRemindersService, CalendarService, etc.
|
|
201
|
+
return {
|
|
202
|
+
method: 'native',
|
|
203
|
+
payload,
|
|
204
|
+
timestamp: new Date().toISOString(),
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Execute task using remote MCP server
|
|
209
|
+
*/
|
|
210
|
+
async executeRemote(_type, payload) {
|
|
211
|
+
// This would call the Remote MCP server
|
|
212
|
+
return {
|
|
213
|
+
method: 'remote',
|
|
214
|
+
payload,
|
|
215
|
+
timestamp: new Date().toISOString(),
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Execute task using MCP client
|
|
220
|
+
*/
|
|
221
|
+
async executeMCP(_type, payload) {
|
|
222
|
+
// This would call the MCP client (e.g., Notion MCP)
|
|
223
|
+
return {
|
|
224
|
+
method: 'mcp',
|
|
225
|
+
payload,
|
|
226
|
+
timestamp: new Date().toISOString(),
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=hybrid-integration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hybrid-integration.js","sourceRoot":"","sources":["../../src/remote/hybrid-integration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remote MCP Server
|
|
3
|
+
* HTTP/WebSocket based MCP server for remote access
|
|
4
|
+
* Requirements: 13.1-13.5
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* SSL configuration
|
|
8
|
+
*/
|
|
9
|
+
export interface SSLConfig {
|
|
10
|
+
cert: string;
|
|
11
|
+
key: string;
|
|
12
|
+
ca?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Remote MCP Server configuration
|
|
16
|
+
*/
|
|
17
|
+
export interface RemoteMCPServerConfig {
|
|
18
|
+
port?: number;
|
|
19
|
+
host?: string;
|
|
20
|
+
ssl?: SSLConfig;
|
|
21
|
+
auth?: {
|
|
22
|
+
enabled: boolean;
|
|
23
|
+
jwtSecret?: string;
|
|
24
|
+
apiKeys?: string[];
|
|
25
|
+
ipWhitelist?: string[];
|
|
26
|
+
tokenExpiry?: number;
|
|
27
|
+
};
|
|
28
|
+
cors?: {
|
|
29
|
+
allowedOrigins?: string[];
|
|
30
|
+
allowedMethods?: string[];
|
|
31
|
+
allowedHeaders?: string[];
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Session information
|
|
36
|
+
*/
|
|
37
|
+
export interface Session {
|
|
38
|
+
id: string;
|
|
39
|
+
userId: string;
|
|
40
|
+
createdAt: Date;
|
|
41
|
+
lastAccessedAt: Date;
|
|
42
|
+
data: Record<string, unknown>;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Session manager configuration
|
|
46
|
+
*/
|
|
47
|
+
export interface SessionManagerConfig {
|
|
48
|
+
sessionTimeout: number;
|
|
49
|
+
maxSessions: number;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Health check response
|
|
53
|
+
*/
|
|
54
|
+
export interface HealthCheckResponse {
|
|
55
|
+
status: 'ok' | 'error';
|
|
56
|
+
uptime: number;
|
|
57
|
+
version: string;
|
|
58
|
+
timestamp: string;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* JSON-RPC request
|
|
62
|
+
*/
|
|
63
|
+
export interface JSONRPCRequest {
|
|
64
|
+
jsonrpc: string;
|
|
65
|
+
id: number | string;
|
|
66
|
+
method: string;
|
|
67
|
+
params?: Record<string, unknown>;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* JSON-RPC response
|
|
71
|
+
*/
|
|
72
|
+
export interface JSONRPCResponse {
|
|
73
|
+
jsonrpc: string;
|
|
74
|
+
id: number | string | null;
|
|
75
|
+
result?: unknown;
|
|
76
|
+
error?: {
|
|
77
|
+
code: number;
|
|
78
|
+
message: string;
|
|
79
|
+
data?: unknown;
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* MCP Over HTTP Handler configuration
|
|
84
|
+
*/
|
|
85
|
+
export interface MCPOverHTTPHandlerConfig {
|
|
86
|
+
allowedOrigins?: string[];
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Session Manager
|
|
90
|
+
* Handles session creation, validation, and cleanup
|
|
91
|
+
*/
|
|
92
|
+
export declare class SessionManager {
|
|
93
|
+
private sessions;
|
|
94
|
+
private config;
|
|
95
|
+
constructor(config: SessionManagerConfig);
|
|
96
|
+
/**
|
|
97
|
+
* Create a new session
|
|
98
|
+
*/
|
|
99
|
+
createSession(userId: string): Session;
|
|
100
|
+
/**
|
|
101
|
+
* Check if a session is valid
|
|
102
|
+
*/
|
|
103
|
+
isValidSession(sessionId: string): boolean;
|
|
104
|
+
/**
|
|
105
|
+
* Terminate a session
|
|
106
|
+
*/
|
|
107
|
+
terminateSession(sessionId: string): void;
|
|
108
|
+
/**
|
|
109
|
+
* Get a session by ID
|
|
110
|
+
*/
|
|
111
|
+
getSession(sessionId: string): Session | undefined;
|
|
112
|
+
/**
|
|
113
|
+
* Clean up expired sessions
|
|
114
|
+
*/
|
|
115
|
+
cleanExpiredSessions(): void;
|
|
116
|
+
/**
|
|
117
|
+
* Get active session count
|
|
118
|
+
*/
|
|
119
|
+
getActiveSessionCount(): number;
|
|
120
|
+
/**
|
|
121
|
+
* Remove oldest session
|
|
122
|
+
*/
|
|
123
|
+
private removeOldestSession;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Authentication Configuration
|
|
127
|
+
* Handles JWT, API keys, and IP whitelist authentication
|
|
128
|
+
*/
|
|
129
|
+
export declare class AuthConfig {
|
|
130
|
+
private config;
|
|
131
|
+
private tokens;
|
|
132
|
+
constructor(config: NonNullable<RemoteMCPServerConfig['auth']>);
|
|
133
|
+
/**
|
|
134
|
+
* Generate a token for a user
|
|
135
|
+
*/
|
|
136
|
+
generateToken(userId: string): string;
|
|
137
|
+
/**
|
|
138
|
+
* Validate a token
|
|
139
|
+
*/
|
|
140
|
+
validateToken(token: string): boolean;
|
|
141
|
+
/**
|
|
142
|
+
* Validate an API key
|
|
143
|
+
*/
|
|
144
|
+
validateApiKey(apiKey: string): boolean;
|
|
145
|
+
/**
|
|
146
|
+
* Check if an IP is allowed
|
|
147
|
+
*/
|
|
148
|
+
isIPAllowed(ip: string): boolean;
|
|
149
|
+
/**
|
|
150
|
+
* Match IP against pattern (exact or CIDR)
|
|
151
|
+
*/
|
|
152
|
+
private matchIP;
|
|
153
|
+
/**
|
|
154
|
+
* Extract token from Authorization header
|
|
155
|
+
*/
|
|
156
|
+
extractToken(authHeader: string | undefined): string | null;
|
|
157
|
+
/**
|
|
158
|
+
* Check if authentication is enabled
|
|
159
|
+
*/
|
|
160
|
+
isEnabled(): boolean;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* MCP Over HTTP Handler
|
|
164
|
+
* Handles JSON-RPC over HTTP protocol
|
|
165
|
+
*/
|
|
166
|
+
export declare class MCPOverHTTPHandler {
|
|
167
|
+
private config;
|
|
168
|
+
constructor(config?: MCPOverHTTPHandlerConfig);
|
|
169
|
+
/**
|
|
170
|
+
* Parse a JSON-RPC request
|
|
171
|
+
*/
|
|
172
|
+
parseRequest(body: string): JSONRPCRequest;
|
|
173
|
+
/**
|
|
174
|
+
* Build a success response
|
|
175
|
+
*/
|
|
176
|
+
buildResponse(id: number | string | null, result: unknown): JSONRPCResponse;
|
|
177
|
+
/**
|
|
178
|
+
* Build an error response
|
|
179
|
+
*/
|
|
180
|
+
buildErrorResponse(id: number | string | null, code: number, message: string, data?: unknown): JSONRPCResponse;
|
|
181
|
+
/**
|
|
182
|
+
* Get CORS headers for a request
|
|
183
|
+
*/
|
|
184
|
+
getCORSHeaders(origin?: string): Record<string, string>;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Remote MCP Server
|
|
188
|
+
* HTTP/HTTPS server that exposes MCP protocol over HTTP
|
|
189
|
+
*/
|
|
190
|
+
export declare class RemoteMCPServer {
|
|
191
|
+
private config;
|
|
192
|
+
private server;
|
|
193
|
+
private running;
|
|
194
|
+
private startTime;
|
|
195
|
+
private _sessionManager;
|
|
196
|
+
private auth;
|
|
197
|
+
private httpHandler;
|
|
198
|
+
constructor(config: RemoteMCPServerConfig);
|
|
199
|
+
/**
|
|
200
|
+
* Start the server
|
|
201
|
+
*/
|
|
202
|
+
start(): Promise<void>;
|
|
203
|
+
/**
|
|
204
|
+
* Stop the server
|
|
205
|
+
*/
|
|
206
|
+
stop(): Promise<void>;
|
|
207
|
+
/**
|
|
208
|
+
* Check if server is running
|
|
209
|
+
*/
|
|
210
|
+
isRunning(): boolean;
|
|
211
|
+
/**
|
|
212
|
+
* Get configured port
|
|
213
|
+
*/
|
|
214
|
+
getPort(): number;
|
|
215
|
+
/**
|
|
216
|
+
* Check if HTTPS is enabled
|
|
217
|
+
*/
|
|
218
|
+
isHTTPS(): boolean;
|
|
219
|
+
/**
|
|
220
|
+
* Health check
|
|
221
|
+
*/
|
|
222
|
+
healthCheck(): Promise<HealthCheckResponse>;
|
|
223
|
+
/**
|
|
224
|
+
* Get session manager for external access
|
|
225
|
+
*/
|
|
226
|
+
getSessionManager(): SessionManager;
|
|
227
|
+
/**
|
|
228
|
+
* Get active session count
|
|
229
|
+
*/
|
|
230
|
+
getActiveSessionCount(): number;
|
|
231
|
+
/**
|
|
232
|
+
* Handle incoming HTTP request
|
|
233
|
+
*/
|
|
234
|
+
private handleRequest;
|
|
235
|
+
/**
|
|
236
|
+
* Handle health check request
|
|
237
|
+
*/
|
|
238
|
+
private handleHealthCheck;
|
|
239
|
+
/**
|
|
240
|
+
* Handle MCP request
|
|
241
|
+
*/
|
|
242
|
+
private handleMCPRequest;
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=remote-mcp-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-mcp-server.d.ts","sourceRoot":"","sources":["../../src/remote/remote-mcp-server.ts"],"names":[],"mappings":"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"}
|