@synthaer/resonance 0.1.1 → 0.1.2
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/dist/cli.js +53 -11
- package/dist/cli.js.map +1 -1
- package/dist/cloud/client.d.ts +62 -0
- package/dist/cloud/client.d.ts.map +1 -0
- package/dist/cloud/client.js +186 -0
- package/dist/cloud/client.js.map +1 -0
- package/dist/cloud/proxy.d.ts +13 -0
- package/dist/cloud/proxy.d.ts.map +1 -0
- package/dist/cloud/proxy.js +26 -0
- package/dist/cloud/proxy.js.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts +3 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +135 -97
- package/dist/server.js.map +1 -1
- package/dist/tools/cloud-gate.d.ts +69 -5
- package/dist/tools/cloud-gate.d.ts.map +1 -1
- package/dist/tools/cloud-gate.js +71 -11
- package/dist/tools/cloud-gate.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -8,30 +8,72 @@
|
|
|
8
8
|
import { resolveMode, resolveDataDir, ensureDataDir } from './config.js';
|
|
9
9
|
import { initLocalDb } from './db/local.js';
|
|
10
10
|
import { LocalEmbeddingProvider } from './embeddings/local.js';
|
|
11
|
+
import { ResonanceCloudClient } from './cloud/client.js';
|
|
11
12
|
import { startServer } from './server.js';
|
|
12
13
|
import { join } from 'node:path';
|
|
13
|
-
const VERSION = '0.1.
|
|
14
|
+
const VERSION = '0.1.1';
|
|
15
|
+
function resolveCloudUrl() {
|
|
16
|
+
return process.env['SYNTHAER_CLOUD_URL'] || 'https://mcp.synthaer.ai';
|
|
17
|
+
}
|
|
14
18
|
async function main() {
|
|
15
19
|
const mode = resolveMode();
|
|
16
20
|
const dataDir = resolveDataDir();
|
|
17
21
|
// Banner goes to stderr so it doesn't interfere with stdio MCP transport
|
|
18
22
|
process.stderr.write(`\n`);
|
|
19
23
|
process.stderr.write(` Resonance v${VERSION}\n`);
|
|
20
|
-
|
|
24
|
+
switch (mode) {
|
|
25
|
+
case 'local':
|
|
26
|
+
process.stderr.write(` Mode: local\n`);
|
|
27
|
+
break;
|
|
28
|
+
case 'hybrid': {
|
|
29
|
+
const cloudUrl = resolveCloudUrl();
|
|
30
|
+
process.stderr.write(` Mode: hybrid (local + cloud)\n`);
|
|
31
|
+
process.stderr.write(` Cloud: ${cloudUrl.replace('https://', '')}\n`);
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
case 'cloud': {
|
|
35
|
+
const cloudUrl = resolveCloudUrl();
|
|
36
|
+
process.stderr.write(` Mode: cloud\n`);
|
|
37
|
+
process.stderr.write(` Cloud: ${cloudUrl.replace('https://', '')}\n`);
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
21
41
|
process.stderr.write(` Data: ${dataDir}\n`);
|
|
22
42
|
process.stderr.write(`\n`);
|
|
23
|
-
// Ensure data directories exist
|
|
43
|
+
// Ensure data directories exist (needed even in cloud mode for model cache)
|
|
24
44
|
await ensureDataDir(dataDir);
|
|
25
|
-
// Initialize
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
45
|
+
// Initialize cloud client if credentials are present
|
|
46
|
+
let cloudClient = null;
|
|
47
|
+
if (mode === 'hybrid' || mode === 'cloud') {
|
|
48
|
+
const apiKey = process.env['SYNTHAER_API_KEY'];
|
|
49
|
+
const token = process.env['SYNTHAER_TOKEN'];
|
|
50
|
+
if (!apiKey && !token) {
|
|
51
|
+
process.stderr.write('[resonance] Warning: hybrid/cloud mode requires SYNTHAER_API_KEY or SYNTHAER_TOKEN.\n' +
|
|
52
|
+
'[resonance] Falling back to local mode for non-cloud tools.\n');
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
cloudClient = new ResonanceCloudClient({
|
|
56
|
+
apiKey: apiKey || undefined,
|
|
57
|
+
token: token || undefined,
|
|
58
|
+
baseUrl: resolveCloudUrl(),
|
|
59
|
+
});
|
|
60
|
+
process.stderr.write('[resonance] Cloud client initialized.\n');
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// Initialize local database (not needed in pure cloud mode)
|
|
64
|
+
let db = null;
|
|
65
|
+
let embedder = null;
|
|
66
|
+
if (mode !== 'cloud') {
|
|
67
|
+
process.stderr.write('[resonance] Initializing database...\n');
|
|
68
|
+
db = await initLocalDb(dataDir);
|
|
69
|
+
process.stderr.write('[resonance] Database ready.\n');
|
|
70
|
+
// Create the embedding provider (lazy — model loads on first use)
|
|
71
|
+
const modelsDir = join(dataDir, 'models');
|
|
72
|
+
embedder = new LocalEmbeddingProvider(modelsDir);
|
|
73
|
+
}
|
|
32
74
|
// Start the MCP server on stdio
|
|
33
75
|
process.stderr.write(`[resonance] Starting MCP server (${mode} mode, stdio transport)...\n`);
|
|
34
|
-
await startServer({ db, embedder, mode, dataDir });
|
|
76
|
+
await startServer({ db, embedder, mode, dataDir, cloudClient });
|
|
35
77
|
}
|
|
36
78
|
main().catch((error) => {
|
|
37
79
|
process.stderr.write(`[resonance] Fatal error: ${error instanceof Error ? error.message : String(error)}\n`);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IAEjC,yEAAyE;IACzE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,OAAO,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP client that proxies MCP tool calls to the Synthaer cloud server
|
|
3
|
+
* at mcp.synthaer.ai using Streamable HTTP transport.
|
|
4
|
+
*/
|
|
5
|
+
export interface ResonanceCloudClientConfig {
|
|
6
|
+
apiKey?: string;
|
|
7
|
+
token?: string;
|
|
8
|
+
baseUrl?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class ResonanceCloudClient {
|
|
11
|
+
private baseUrl;
|
|
12
|
+
private apiKey;
|
|
13
|
+
private oauthToken;
|
|
14
|
+
private sessionId;
|
|
15
|
+
private requestId;
|
|
16
|
+
private initialized;
|
|
17
|
+
constructor(config: ResonanceCloudClientConfig);
|
|
18
|
+
/**
|
|
19
|
+
* The authorization token to use for requests.
|
|
20
|
+
* Prefers API key, falls back to OAuth token.
|
|
21
|
+
*/
|
|
22
|
+
private get authToken();
|
|
23
|
+
/**
|
|
24
|
+
* Send a JSON-RPC request to the cloud MCP endpoint and parse the SSE response.
|
|
25
|
+
*/
|
|
26
|
+
private sendRequest;
|
|
27
|
+
/**
|
|
28
|
+
* Parse an SSE response body and extract the JSON-RPC result.
|
|
29
|
+
*/
|
|
30
|
+
private parseSSE;
|
|
31
|
+
/**
|
|
32
|
+
* Initialize the MCP session with the cloud server.
|
|
33
|
+
* Called automatically on first tool call if not already initialized.
|
|
34
|
+
*/
|
|
35
|
+
initialize(): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Call a tool on the cloud MCP server.
|
|
38
|
+
* Initializes the session on first call.
|
|
39
|
+
*/
|
|
40
|
+
callTool(name: string, args: Record<string, unknown>): Promise<unknown>;
|
|
41
|
+
/**
|
|
42
|
+
* Check if the cloud server is reachable and authenticated.
|
|
43
|
+
*/
|
|
44
|
+
healthCheck(): Promise<{
|
|
45
|
+
ok: boolean;
|
|
46
|
+
url: string;
|
|
47
|
+
error?: string;
|
|
48
|
+
}>;
|
|
49
|
+
/**
|
|
50
|
+
* Get the base URL of the cloud server.
|
|
51
|
+
*/
|
|
52
|
+
getBaseUrl(): string;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Error thrown when cloud authentication fails.
|
|
56
|
+
* Callers can check `instanceof CloudAuthError` to distinguish
|
|
57
|
+
* auth failures from other errors.
|
|
58
|
+
*/
|
|
59
|
+
export declare class CloudAuthError extends Error {
|
|
60
|
+
constructor(message: string);
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/cloud/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAgBH,MAAM,WAAW,0BAA0B;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,EAAE,0BAA0B;IAM9C;;;OAGG;IACH,OAAO,KAAK,SAAS,GAMpB;IAED;;OAEG;YACW,WAAW;IAkEzB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAgBhB;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAuCjC;;;OAGG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAW7E;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAa1E;;OAEG;IACH,UAAU,IAAI,MAAM;CAGrB;AAED;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,KAAK;gBAC3B,OAAO,EAAE,MAAM;CAI5B"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP client that proxies MCP tool calls to the Synthaer cloud server
|
|
3
|
+
* at mcp.synthaer.ai using Streamable HTTP transport.
|
|
4
|
+
*/
|
|
5
|
+
export class ResonanceCloudClient {
|
|
6
|
+
baseUrl;
|
|
7
|
+
apiKey;
|
|
8
|
+
oauthToken;
|
|
9
|
+
sessionId = null;
|
|
10
|
+
requestId = 0;
|
|
11
|
+
initialized = false;
|
|
12
|
+
constructor(config) {
|
|
13
|
+
this.baseUrl = config.baseUrl || 'https://mcp.synthaer.ai';
|
|
14
|
+
this.apiKey = config.apiKey || null;
|
|
15
|
+
this.oauthToken = config.token || null;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* The authorization token to use for requests.
|
|
19
|
+
* Prefers API key, falls back to OAuth token.
|
|
20
|
+
*/
|
|
21
|
+
get authToken() {
|
|
22
|
+
const token = this.apiKey || this.oauthToken;
|
|
23
|
+
if (!token) {
|
|
24
|
+
throw new Error('No authentication token available. Set SYNTHAER_API_KEY or SYNTHAER_TOKEN.');
|
|
25
|
+
}
|
|
26
|
+
return token;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Send a JSON-RPC request to the cloud MCP endpoint and parse the SSE response.
|
|
30
|
+
*/
|
|
31
|
+
async sendRequest(method, params) {
|
|
32
|
+
const id = ++this.requestId;
|
|
33
|
+
const body = {
|
|
34
|
+
jsonrpc: '2.0',
|
|
35
|
+
id,
|
|
36
|
+
method,
|
|
37
|
+
...(params !== undefined ? { params } : {}),
|
|
38
|
+
};
|
|
39
|
+
const headers = {
|
|
40
|
+
'Content-Type': 'application/json',
|
|
41
|
+
'Accept': 'application/json, text/event-stream',
|
|
42
|
+
'Authorization': `Bearer ${this.authToken}`,
|
|
43
|
+
};
|
|
44
|
+
if (this.sessionId) {
|
|
45
|
+
headers['Mcp-Session-Id'] = this.sessionId;
|
|
46
|
+
}
|
|
47
|
+
const url = `${this.baseUrl}/mcp`;
|
|
48
|
+
let response;
|
|
49
|
+
try {
|
|
50
|
+
response = await fetch(url, {
|
|
51
|
+
method: 'POST',
|
|
52
|
+
headers,
|
|
53
|
+
body: JSON.stringify(body),
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
throw new Error(`Failed to connect to Resonance cloud at ${url}: ${err instanceof Error ? err.message : String(err)}`);
|
|
58
|
+
}
|
|
59
|
+
// Capture session ID from response headers
|
|
60
|
+
const newSessionId = response.headers.get('Mcp-Session-Id');
|
|
61
|
+
if (newSessionId) {
|
|
62
|
+
this.sessionId = newSessionId;
|
|
63
|
+
}
|
|
64
|
+
// Handle 401 — token expired
|
|
65
|
+
if (response.status === 401) {
|
|
66
|
+
throw new CloudAuthError('Authentication failed. Token may be expired or invalid.');
|
|
67
|
+
}
|
|
68
|
+
if (!response.ok) {
|
|
69
|
+
const text = await response.text().catch(() => '');
|
|
70
|
+
throw new Error(`Cloud server returned ${response.status}: ${text}`);
|
|
71
|
+
}
|
|
72
|
+
// Parse response — may be SSE or plain JSON
|
|
73
|
+
const contentType = response.headers.get('Content-Type') || '';
|
|
74
|
+
const responseText = await response.text();
|
|
75
|
+
if (contentType.includes('text/event-stream')) {
|
|
76
|
+
return this.parseSSE(responseText, id);
|
|
77
|
+
}
|
|
78
|
+
// Plain JSON response
|
|
79
|
+
const jsonResponse = JSON.parse(responseText);
|
|
80
|
+
if (jsonResponse.error) {
|
|
81
|
+
throw new Error(`Cloud RPC error: ${jsonResponse.error.message}`);
|
|
82
|
+
}
|
|
83
|
+
return jsonResponse.result;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Parse an SSE response body and extract the JSON-RPC result.
|
|
87
|
+
*/
|
|
88
|
+
parseSSE(text, expectedId) {
|
|
89
|
+
const lines = text.split('\n');
|
|
90
|
+
for (const line of lines) {
|
|
91
|
+
if (line.startsWith('data: ')) {
|
|
92
|
+
const data = JSON.parse(line.slice(6));
|
|
93
|
+
if (data.id === expectedId || data.id === undefined) {
|
|
94
|
+
if (data.error) {
|
|
95
|
+
throw new Error(`Cloud RPC error: ${data.error.message}`);
|
|
96
|
+
}
|
|
97
|
+
return data.result;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
throw new Error('No matching JSON-RPC response found in SSE stream');
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Initialize the MCP session with the cloud server.
|
|
105
|
+
* Called automatically on first tool call if not already initialized.
|
|
106
|
+
*/
|
|
107
|
+
async initialize() {
|
|
108
|
+
if (this.initialized)
|
|
109
|
+
return;
|
|
110
|
+
await this.sendRequest('initialize', {
|
|
111
|
+
protocolVersion: '2025-03-26',
|
|
112
|
+
capabilities: {},
|
|
113
|
+
clientInfo: {
|
|
114
|
+
name: 'resonance-local',
|
|
115
|
+
version: '0.1.1',
|
|
116
|
+
},
|
|
117
|
+
});
|
|
118
|
+
// Send initialized notification
|
|
119
|
+
const notifBody = {
|
|
120
|
+
jsonrpc: '2.0',
|
|
121
|
+
method: 'notifications/initialized',
|
|
122
|
+
};
|
|
123
|
+
const headers = {
|
|
124
|
+
'Content-Type': 'application/json',
|
|
125
|
+
'Accept': 'application/json, text/event-stream',
|
|
126
|
+
'Authorization': `Bearer ${this.authToken}`,
|
|
127
|
+
};
|
|
128
|
+
if (this.sessionId) {
|
|
129
|
+
headers['Mcp-Session-Id'] = this.sessionId;
|
|
130
|
+
}
|
|
131
|
+
await fetch(`${this.baseUrl}/mcp`, {
|
|
132
|
+
method: 'POST',
|
|
133
|
+
headers,
|
|
134
|
+
body: JSON.stringify(notifBody),
|
|
135
|
+
}).catch(() => {
|
|
136
|
+
// Notifications are fire-and-forget
|
|
137
|
+
});
|
|
138
|
+
this.initialized = true;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Call a tool on the cloud MCP server.
|
|
142
|
+
* Initializes the session on first call.
|
|
143
|
+
*/
|
|
144
|
+
async callTool(name, args) {
|
|
145
|
+
await this.initialize();
|
|
146
|
+
const result = await this.sendRequest('tools/call', {
|
|
147
|
+
name,
|
|
148
|
+
arguments: args,
|
|
149
|
+
});
|
|
150
|
+
return result;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Check if the cloud server is reachable and authenticated.
|
|
154
|
+
*/
|
|
155
|
+
async healthCheck() {
|
|
156
|
+
try {
|
|
157
|
+
await this.initialize();
|
|
158
|
+
return { ok: true, url: this.baseUrl };
|
|
159
|
+
}
|
|
160
|
+
catch (err) {
|
|
161
|
+
return {
|
|
162
|
+
ok: false,
|
|
163
|
+
url: this.baseUrl,
|
|
164
|
+
error: err instanceof Error ? err.message : String(err),
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Get the base URL of the cloud server.
|
|
170
|
+
*/
|
|
171
|
+
getBaseUrl() {
|
|
172
|
+
return this.baseUrl;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Error thrown when cloud authentication fails.
|
|
177
|
+
* Callers can check `instanceof CloudAuthError` to distinguish
|
|
178
|
+
* auth failures from other errors.
|
|
179
|
+
*/
|
|
180
|
+
export class CloudAuthError extends Error {
|
|
181
|
+
constructor(message) {
|
|
182
|
+
super(message);
|
|
183
|
+
this.name = 'CloudAuthError';
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/cloud/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloud tool proxy — routes tool calls to the Synthaer cloud MCP server.
|
|
3
|
+
*/
|
|
4
|
+
import type { ResonanceCloudClient } from './client.js';
|
|
5
|
+
export type CloudProxyFn = (name: string, args: Record<string, unknown>) => Promise<Record<string, unknown>>;
|
|
6
|
+
/**
|
|
7
|
+
* Create a proxy function that forwards tool calls to the cloud server.
|
|
8
|
+
*
|
|
9
|
+
* The returned function calls `client.callTool()` and normalizes the
|
|
10
|
+
* response into the `{ content: [...] }` format expected by the MCP server.
|
|
11
|
+
*/
|
|
12
|
+
export declare function createCloudProxy(client: ResonanceCloudClient): CloudProxyFn;
|
|
13
|
+
//# sourceMappingURL=proxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/cloud/proxy.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAE7G;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,oBAAoB,GAAG,YAAY,CAmB3E"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloud tool proxy — routes tool calls to the Synthaer cloud MCP server.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Create a proxy function that forwards tool calls to the cloud server.
|
|
6
|
+
*
|
|
7
|
+
* The returned function calls `client.callTool()` and normalizes the
|
|
8
|
+
* response into the `{ content: [...] }` format expected by the MCP server.
|
|
9
|
+
*/
|
|
10
|
+
export function createCloudProxy(client) {
|
|
11
|
+
return async function proxyTool(name, args) {
|
|
12
|
+
const result = await client.callTool(name, args);
|
|
13
|
+
// The cloud server returns MCP-formatted results directly.
|
|
14
|
+
// If it's already in `{ content: [...] }` format, return as-is.
|
|
15
|
+
if (result !== null &&
|
|
16
|
+
typeof result === 'object' &&
|
|
17
|
+
'content' in result) {
|
|
18
|
+
return result;
|
|
19
|
+
}
|
|
20
|
+
// Otherwise wrap the raw result in MCP content format.
|
|
21
|
+
return {
|
|
22
|
+
content: [{ type: 'text', text: JSON.stringify(result) }],
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=proxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/cloud/proxy.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAA4B;IAC3D,OAAO,KAAK,UAAU,SAAS,CAAC,IAAY,EAAE,IAA6B;QACzE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAEjD,2DAA2D;QAC3D,gEAAgE;QAChE,IACE,MAAM,KAAK,IAAI;YACf,OAAO,MAAM,KAAK,QAAQ;YAC1B,SAAS,IAAK,MAAkC,EAChD,CAAC;YACD,OAAO,MAAiC,CAAC;QAC3C,CAAC;QAED,uDAAuD;QACvD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;SAC1D,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -10,6 +10,10 @@ export { LocalEmbeddingProvider } from './embeddings/local.js';
|
|
|
10
10
|
export type { EmbeddingProvider } from './embeddings/local.js';
|
|
11
11
|
export { startServer } from './server.js';
|
|
12
12
|
export type { ResonanceServerOptions } from './server.js';
|
|
13
|
+
export { ResonanceCloudClient, CloudAuthError } from './cloud/client.js';
|
|
14
|
+
export type { ResonanceCloudClientConfig } from './cloud/client.js';
|
|
15
|
+
export { createCloudProxy } from './cloud/proxy.js';
|
|
16
|
+
export type { CloudProxyFn } from './cloud/proxy.js';
|
|
13
17
|
export { handleStoreKnowledge, handleRecallKnowledge, handleSemanticSearch, handleEndorseKnowledge, handleChallengeKnowledge, } from './tools/knowledge.js';
|
|
14
18
|
export type { StoreKnowledgeInput, RecallKnowledgeInput, SearchKnowledgeInput, EndorseInput, ChallengeInput, } from './tools/knowledge.js';
|
|
15
19
|
export { handleStoreExperience, handleRecallExperiences, } from './tools/experiences.js';
|
|
@@ -18,5 +22,5 @@ export { handleSessionResume, handleMemoryCheckpoint, } from './tools/sessions.j
|
|
|
18
22
|
export type { SessionResumeInput, MemoryCheckpointInput, } from './tools/sessions.js';
|
|
19
23
|
export { handleGetTrust, handleUpdateTrust, } from './tools/trust.js';
|
|
20
24
|
export type { GetTrustInput, UpdateTrustInput, } from './tools/trust.js';
|
|
21
|
-
export { isCloudOnlyTool, cloudRequiredError, } from './tools/cloud-gate.js';
|
|
25
|
+
export { isCloudOnlyTool, cloudRequiredError, handleCloudOnlyTool, } from './tools/cloud-gate.js';
|
|
22
26
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACzE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAEjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAE1D,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,EACZ,cAAc,GACf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,cAAc,EACd,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,aAAa,EACb,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,eAAe,EACf,kBAAkB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACzE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAEjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACzE,YAAY,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,EACZ,cAAc,GACf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,cAAc,EACd,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,aAAa,EACb,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -7,9 +7,11 @@ export { resolveMode, resolveDataDir, ensureDataDir } from './config.js';
|
|
|
7
7
|
export { initLocalDb, createVectorIndexes, getDb, closeDb } from './db/local.js';
|
|
8
8
|
export { LocalEmbeddingProvider } from './embeddings/local.js';
|
|
9
9
|
export { startServer } from './server.js';
|
|
10
|
+
export { ResonanceCloudClient, CloudAuthError } from './cloud/client.js';
|
|
11
|
+
export { createCloudProxy } from './cloud/proxy.js';
|
|
10
12
|
export { handleStoreKnowledge, handleRecallKnowledge, handleSemanticSearch, handleEndorseKnowledge, handleChallengeKnowledge, } from './tools/knowledge.js';
|
|
11
13
|
export { handleStoreExperience, handleRecallExperiences, } from './tools/experiences.js';
|
|
12
14
|
export { handleSessionResume, handleMemoryCheckpoint, } from './tools/sessions.js';
|
|
13
15
|
export { handleGetTrust, handleUpdateTrust, } from './tools/trust.js';
|
|
14
|
-
export { isCloudOnlyTool, cloudRequiredError, } from './tools/cloud-gate.js';
|
|
16
|
+
export { isCloudOnlyTool, cloudRequiredError, handleCloudOnlyTool, } from './tools/cloud-gate.js';
|
|
15
17
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGzE,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAEjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAG/D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAS9B,OAAO,EACL,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAMhC,OAAO,EACL,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAM7B,OAAO,EACL,cAAc,EACd,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAM1B,OAAO,EACL,eAAe,EACf,kBAAkB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGzE,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAEjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAG/D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAS9B,OAAO,EACL,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAMhC,OAAO,EACL,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAM7B,OAAO,EACL,cAAc,EACd,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAM1B,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC"}
|
package/dist/server.d.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import type { PGlite } from '@electric-sql/pglite';
|
|
2
2
|
import type { EmbeddingProvider } from './embeddings/local.js';
|
|
3
3
|
import type { ResonanceMode } from './config.js';
|
|
4
|
+
import type { ResonanceCloudClient } from './cloud/client.js';
|
|
4
5
|
export interface ResonanceServerOptions {
|
|
5
|
-
db: PGlite;
|
|
6
|
+
db: PGlite | null;
|
|
6
7
|
embedder: EmbeddingProvider | null;
|
|
7
8
|
mode: ResonanceMode;
|
|
8
9
|
dataDir: string;
|
|
10
|
+
cloudClient?: ResonanceCloudClient | null;
|
|
9
11
|
}
|
|
10
12
|
export declare function startServer(options: ResonanceServerOptions): Promise<void>;
|
|
11
13
|
//# sourceMappingURL=server.d.ts.map
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AA4M9D,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACnC,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;CAC3C;AAgKD,wBAAsB,WAAW,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6DhF"}
|
package/dist/server.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
2
2
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
3
3
|
import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
4
|
+
import { createCloudProxy } from './cloud/proxy.js';
|
|
4
5
|
import { handleStoreKnowledge, handleRecallKnowledge, handleSemanticSearch, handleEndorseKnowledge, handleChallengeKnowledge, } from './tools/knowledge.js';
|
|
5
6
|
import { handleStoreExperience, handleRecallExperiences, } from './tools/experiences.js';
|
|
6
7
|
import { handleSessionResume, handleMemoryCheckpoint, } from './tools/sessions.js';
|
|
7
8
|
import { handleGetTrust, handleUpdateTrust, } from './tools/trust.js';
|
|
8
|
-
import { isCloudOnlyTool,
|
|
9
|
-
const VERSION = '0.1.
|
|
9
|
+
import { isCloudOnlyTool, handleCloudOnlyTool, CLOUD_ONLY_TOOL_DEFINITIONS, } from './tools/cloud-gate.js';
|
|
10
|
+
const VERSION = '0.1.1';
|
|
10
11
|
const DIKW_STAGES = ['nascent', 'emerging', 'established', 'canonical'];
|
|
11
12
|
const LOCAL_TOOLS = [
|
|
12
13
|
{
|
|
@@ -176,8 +177,118 @@ function errorResult(message) {
|
|
|
176
177
|
isError: true,
|
|
177
178
|
};
|
|
178
179
|
}
|
|
180
|
+
/**
|
|
181
|
+
* Handle a local tool call against the PGlite database.
|
|
182
|
+
*/
|
|
183
|
+
async function handleLocalTool(name, params, db, embedder, mode, dataDir, cloudClient) {
|
|
184
|
+
switch (name) {
|
|
185
|
+
case 'store_knowledge':
|
|
186
|
+
return textResult(await handleStoreKnowledge(db, embedder, {
|
|
187
|
+
content: params['content'],
|
|
188
|
+
kind: params['kind'],
|
|
189
|
+
tags: params['tags'],
|
|
190
|
+
context: params['context'],
|
|
191
|
+
project: params['project'],
|
|
192
|
+
sourceAgent: params['sourceAgent'],
|
|
193
|
+
dikwStage: params['dikwStage'],
|
|
194
|
+
importance: params['importance'],
|
|
195
|
+
}));
|
|
196
|
+
case 'recall_knowledge':
|
|
197
|
+
return textResult(await handleRecallKnowledge(db, {
|
|
198
|
+
id: params['id'],
|
|
199
|
+
}));
|
|
200
|
+
case 'semantic_search':
|
|
201
|
+
return textResult(await handleSemanticSearch(db, embedder, {
|
|
202
|
+
query: params['query'],
|
|
203
|
+
limit: params['limit'],
|
|
204
|
+
project: params['project'],
|
|
205
|
+
tags: params['tags'],
|
|
206
|
+
minStrength: params['minStrength'],
|
|
207
|
+
}));
|
|
208
|
+
case 'endorse_knowledge':
|
|
209
|
+
return textResult(await handleEndorseKnowledge(db, {
|
|
210
|
+
id: params['id'],
|
|
211
|
+
agent: params['agent'],
|
|
212
|
+
}));
|
|
213
|
+
case 'challenge_knowledge':
|
|
214
|
+
return textResult(await handleChallengeKnowledge(db, {
|
|
215
|
+
id: params['id'],
|
|
216
|
+
reason: params['reason'],
|
|
217
|
+
agent: params['agent'],
|
|
218
|
+
}));
|
|
219
|
+
case 'store_experience':
|
|
220
|
+
return textResult(await handleStoreExperience(db, embedder, {
|
|
221
|
+
content: params['content'],
|
|
222
|
+
kind: params['kind'],
|
|
223
|
+
agentId: params['agentId'],
|
|
224
|
+
sessionId: params['sessionId'],
|
|
225
|
+
project: params['project'],
|
|
226
|
+
tags: params['tags'],
|
|
227
|
+
relatedKnowledgeIds: params['relatedKnowledgeIds'],
|
|
228
|
+
}));
|
|
229
|
+
case 'recall_experiences':
|
|
230
|
+
return textResult(await handleRecallExperiences(db, embedder, {
|
|
231
|
+
query: params['query'],
|
|
232
|
+
limit: params['limit'],
|
|
233
|
+
project: params['project'],
|
|
234
|
+
agentId: params['agentId'],
|
|
235
|
+
}));
|
|
236
|
+
case 'session_resume':
|
|
237
|
+
return textResult(await handleSessionResume(db, {
|
|
238
|
+
agentId: params['agentId'],
|
|
239
|
+
projectId: params['projectId'],
|
|
240
|
+
}));
|
|
241
|
+
case 'memory_checkpoint':
|
|
242
|
+
return textResult(await handleMemoryCheckpoint(db, {
|
|
243
|
+
sessionId: params['sessionId'],
|
|
244
|
+
}));
|
|
245
|
+
case 'get_trust':
|
|
246
|
+
return textResult(await handleGetTrust(db, {
|
|
247
|
+
id: params['id'],
|
|
248
|
+
}));
|
|
249
|
+
case 'update_trust':
|
|
250
|
+
return textResult(await handleUpdateTrust(db, {
|
|
251
|
+
id: params['id'],
|
|
252
|
+
adjustment: params['adjustment'],
|
|
253
|
+
reason: params['reason'],
|
|
254
|
+
}));
|
|
255
|
+
case 'health': {
|
|
256
|
+
const knowledgeCount = await db.query(`SELECT COUNT(*) as count FROM knowledge`);
|
|
257
|
+
const experienceCount = await db.query(`SELECT COUNT(*) as count FROM experiences`);
|
|
258
|
+
const sessionCount = await db.query(`SELECT COUNT(*) as count FROM sessions`);
|
|
259
|
+
const healthPayload = {
|
|
260
|
+
status: 'ok',
|
|
261
|
+
mode,
|
|
262
|
+
version: VERSION,
|
|
263
|
+
dataDir,
|
|
264
|
+
embeddingModel: embedder?.ready ? 'all-MiniLM-L6-v2' : 'not loaded',
|
|
265
|
+
embeddingDimensions: embedder?.dimensions ?? 384,
|
|
266
|
+
counts: {
|
|
267
|
+
knowledge: Number(knowledgeCount.rows[0]?.count ?? 0),
|
|
268
|
+
experiences: Number(experienceCount.rows[0]?.count ?? 0),
|
|
269
|
+
sessions: Number(sessionCount.rows[0]?.count ?? 0),
|
|
270
|
+
},
|
|
271
|
+
};
|
|
272
|
+
// Include cloud status in hybrid mode
|
|
273
|
+
if (mode === 'hybrid' && cloudClient) {
|
|
274
|
+
const cloudHealth = await cloudClient.healthCheck();
|
|
275
|
+
healthPayload['cloud'] = cloudHealth;
|
|
276
|
+
}
|
|
277
|
+
const allTools = [...LOCAL_TOOLS, ...CLOUD_ONLY_TOOL_DEFINITIONS];
|
|
278
|
+
healthPayload['tools'] = allTools.length;
|
|
279
|
+
return textResult(healthPayload);
|
|
280
|
+
}
|
|
281
|
+
default:
|
|
282
|
+
return errorResult(`Unknown tool: ${name}`);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
179
285
|
export async function startServer(options) {
|
|
180
|
-
const { db, embedder, mode, dataDir } = options;
|
|
286
|
+
const { db, embedder, mode, dataDir, cloudClient } = options;
|
|
287
|
+
// Build cloud proxy if a cloud client is available
|
|
288
|
+
let cloudProxy = null;
|
|
289
|
+
if (cloudClient) {
|
|
290
|
+
cloudProxy = createCloudProxy(cloudClient);
|
|
291
|
+
}
|
|
181
292
|
const server = new Server({ name: 'Resonance', version: VERSION }, { capabilities: { tools: {} } });
|
|
182
293
|
// Register all tools (local + cloud-gated)
|
|
183
294
|
const allTools = [...LOCAL_TOOLS, ...CLOUD_ONLY_TOOL_DEFINITIONS];
|
|
@@ -188,103 +299,30 @@ export async function startServer(options) {
|
|
|
188
299
|
const { name, arguments: args } = request.params;
|
|
189
300
|
const params = (args ?? {});
|
|
190
301
|
try {
|
|
191
|
-
// Cloud-
|
|
192
|
-
if (isCloudOnlyTool(name)
|
|
193
|
-
|
|
302
|
+
// Cloud-only tools: proxy or error
|
|
303
|
+
if (isCloudOnlyTool(name)) {
|
|
304
|
+
if (mode === 'local') {
|
|
305
|
+
return handleCloudOnlyTool(name, params, null);
|
|
306
|
+
}
|
|
307
|
+
// hybrid or cloud mode — proxy to cloud
|
|
308
|
+
return handleCloudOnlyTool(name, params, cloudProxy);
|
|
194
309
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
sourceAgent: params['sourceAgent'],
|
|
204
|
-
dikwStage: params['dikwStage'],
|
|
205
|
-
importance: params['importance'],
|
|
206
|
-
}));
|
|
207
|
-
case 'recall_knowledge':
|
|
208
|
-
return textResult(await handleRecallKnowledge(db, {
|
|
209
|
-
id: params['id'],
|
|
210
|
-
}));
|
|
211
|
-
case 'semantic_search':
|
|
212
|
-
return textResult(await handleSemanticSearch(db, embedder, {
|
|
213
|
-
query: params['query'],
|
|
214
|
-
limit: params['limit'],
|
|
215
|
-
project: params['project'],
|
|
216
|
-
tags: params['tags'],
|
|
217
|
-
minStrength: params['minStrength'],
|
|
218
|
-
}));
|
|
219
|
-
case 'endorse_knowledge':
|
|
220
|
-
return textResult(await handleEndorseKnowledge(db, {
|
|
221
|
-
id: params['id'],
|
|
222
|
-
agent: params['agent'],
|
|
223
|
-
}));
|
|
224
|
-
case 'challenge_knowledge':
|
|
225
|
-
return textResult(await handleChallengeKnowledge(db, {
|
|
226
|
-
id: params['id'],
|
|
227
|
-
reason: params['reason'],
|
|
228
|
-
agent: params['agent'],
|
|
229
|
-
}));
|
|
230
|
-
case 'store_experience':
|
|
231
|
-
return textResult(await handleStoreExperience(db, embedder, {
|
|
232
|
-
content: params['content'],
|
|
233
|
-
kind: params['kind'],
|
|
234
|
-
agentId: params['agentId'],
|
|
235
|
-
sessionId: params['sessionId'],
|
|
236
|
-
project: params['project'],
|
|
237
|
-
tags: params['tags'],
|
|
238
|
-
relatedKnowledgeIds: params['relatedKnowledgeIds'],
|
|
239
|
-
}));
|
|
240
|
-
case 'recall_experiences':
|
|
241
|
-
return textResult(await handleRecallExperiences(db, embedder, {
|
|
242
|
-
query: params['query'],
|
|
243
|
-
limit: params['limit'],
|
|
244
|
-
project: params['project'],
|
|
245
|
-
agentId: params['agentId'],
|
|
246
|
-
}));
|
|
247
|
-
case 'session_resume':
|
|
248
|
-
return textResult(await handleSessionResume(db, {
|
|
249
|
-
agentId: params['agentId'],
|
|
250
|
-
projectId: params['projectId'],
|
|
251
|
-
}));
|
|
252
|
-
case 'memory_checkpoint':
|
|
253
|
-
return textResult(await handleMemoryCheckpoint(db, {
|
|
254
|
-
sessionId: params['sessionId'],
|
|
255
|
-
}));
|
|
256
|
-
case 'get_trust':
|
|
257
|
-
return textResult(await handleGetTrust(db, {
|
|
258
|
-
id: params['id'],
|
|
259
|
-
}));
|
|
260
|
-
case 'update_trust':
|
|
261
|
-
return textResult(await handleUpdateTrust(db, {
|
|
262
|
-
id: params['id'],
|
|
263
|
-
adjustment: params['adjustment'],
|
|
264
|
-
reason: params['reason'],
|
|
265
|
-
}));
|
|
266
|
-
case 'health': {
|
|
267
|
-
const knowledgeCount = await db.query(`SELECT COUNT(*) as count FROM knowledge`);
|
|
268
|
-
const experienceCount = await db.query(`SELECT COUNT(*) as count FROM experiences`);
|
|
269
|
-
const sessionCount = await db.query(`SELECT COUNT(*) as count FROM sessions`);
|
|
270
|
-
return textResult({
|
|
271
|
-
status: 'ok',
|
|
272
|
-
mode,
|
|
273
|
-
version: VERSION,
|
|
274
|
-
dataDir,
|
|
275
|
-
embeddingModel: embedder?.ready ? 'all-MiniLM-L6-v2' : 'not loaded',
|
|
276
|
-
embeddingDimensions: embedder?.dimensions ?? 384,
|
|
277
|
-
counts: {
|
|
278
|
-
knowledge: Number(knowledgeCount.rows[0]?.count ?? 0),
|
|
279
|
-
experiences: Number(experienceCount.rows[0]?.count ?? 0),
|
|
280
|
-
sessions: Number(sessionCount.rows[0]?.count ?? 0),
|
|
281
|
-
},
|
|
282
|
-
tools: allTools.length,
|
|
283
|
-
});
|
|
310
|
+
// Cloud mode: ALL tools proxy to cloud (no local database)
|
|
311
|
+
if (mode === 'cloud') {
|
|
312
|
+
if (!cloudProxy) {
|
|
313
|
+
return errorResult('Cloud mode requires SYNTHAER_API_KEY or SYNTHAER_TOKEN');
|
|
314
|
+
}
|
|
315
|
+
const result = await cloudProxy(name, params);
|
|
316
|
+
if (result['content'] && Array.isArray(result['content'])) {
|
|
317
|
+
return result;
|
|
284
318
|
}
|
|
285
|
-
|
|
286
|
-
|
|
319
|
+
return textResult(result);
|
|
320
|
+
}
|
|
321
|
+
// Local and hybrid mode: execute against local PGlite
|
|
322
|
+
if (!db) {
|
|
323
|
+
return errorResult('Local database not available');
|
|
287
324
|
}
|
|
325
|
+
return await handleLocalTool(name, params, db, embedder, mode, dataDir, cloudClient ?? null);
|
|
288
326
|
}
|
|
289
327
|
catch (error) {
|
|
290
328
|
const message = error instanceof Error ? error.message : String(error);
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Cloud-gated tools return a structured error
|
|
3
|
-
*
|
|
2
|
+
* Cloud-gated tools. In local mode they return a structured error.
|
|
3
|
+
* In hybrid/cloud mode they proxy to the Synthaer cloud MCP server.
|
|
4
4
|
*/
|
|
5
|
+
import type { CloudProxyFn } from '../cloud/proxy.js';
|
|
5
6
|
declare const CLOUD_ONLY_TOOLS: readonly ["ratify_knowledge", "verify_ratification", "get_ratification_stats", "publish_cross_project_event", "subscribe_cross_project_events", "get_cross_project_impact", "publish_topology", "get_topology", "process_unembedded_knowledge", "get_embedding_stats"];
|
|
6
7
|
export type CloudOnlyTool = (typeof CLOUD_ONLY_TOOLS)[number];
|
|
7
8
|
export declare function isCloudOnlyTool(name: string): boolean;
|
|
@@ -12,13 +13,24 @@ export declare function cloudRequiredError(toolName: string): {
|
|
|
12
13
|
}>;
|
|
13
14
|
isError: true;
|
|
14
15
|
};
|
|
16
|
+
/**
|
|
17
|
+
* Handle a cloud-only tool call. If a proxy is available, forward the call
|
|
18
|
+
* to the cloud. Otherwise, return the "requires_cloud" error.
|
|
19
|
+
*/
|
|
20
|
+
export declare function handleCloudOnlyTool(toolName: string, args: Record<string, unknown>, proxy: CloudProxyFn | null): Promise<{
|
|
21
|
+
content: Array<{
|
|
22
|
+
type: 'text';
|
|
23
|
+
text: string;
|
|
24
|
+
}>;
|
|
25
|
+
isError?: true;
|
|
26
|
+
}>;
|
|
15
27
|
/**
|
|
16
28
|
* Tool definitions for cloud-only tools.
|
|
17
29
|
* These are registered so agents can discover them and get guidance on upgrade.
|
|
18
30
|
*/
|
|
19
31
|
export declare const CLOUD_ONLY_TOOL_DEFINITIONS: readonly [{
|
|
20
32
|
readonly name: "ratify_knowledge";
|
|
21
|
-
readonly description: "Ratify local knowledge items to the Synthaer cloud. Requires cloud account.";
|
|
33
|
+
readonly description: "Ratify local knowledge items to the Synthaer cloud with CA signature. Requires cloud account.";
|
|
22
34
|
readonly inputSchema: {
|
|
23
35
|
readonly type: "object";
|
|
24
36
|
readonly properties: {
|
|
@@ -27,16 +39,18 @@ export declare const CLOUD_ONLY_TOOL_DEFINITIONS: readonly [{
|
|
|
27
39
|
readonly items: {
|
|
28
40
|
readonly type: "string";
|
|
29
41
|
};
|
|
42
|
+
readonly description: "Knowledge item IDs to ratify";
|
|
30
43
|
};
|
|
31
44
|
readonly project: {
|
|
32
45
|
readonly type: "string";
|
|
46
|
+
readonly description: "Project identifier";
|
|
33
47
|
};
|
|
34
48
|
};
|
|
35
49
|
readonly required: readonly ["ids"];
|
|
36
50
|
};
|
|
37
51
|
}, {
|
|
38
52
|
readonly name: "verify_ratification";
|
|
39
|
-
readonly description: "Verify the ratification status of knowledge items. Requires cloud account.";
|
|
53
|
+
readonly description: "Verify the ratification status of knowledge items on the cloud. Requires cloud account.";
|
|
40
54
|
readonly inputSchema: {
|
|
41
55
|
readonly type: "object";
|
|
42
56
|
readonly properties: {
|
|
@@ -45,28 +59,78 @@ export declare const CLOUD_ONLY_TOOL_DEFINITIONS: readonly [{
|
|
|
45
59
|
readonly items: {
|
|
46
60
|
readonly type: "string";
|
|
47
61
|
};
|
|
62
|
+
readonly description: "Knowledge item IDs to verify";
|
|
48
63
|
};
|
|
49
64
|
};
|
|
50
65
|
readonly required: readonly ["ids"];
|
|
51
66
|
};
|
|
52
67
|
}, {
|
|
53
68
|
readonly name: "publish_cross_project_event";
|
|
54
|
-
readonly description: "Publish a cross-project event. Requires cloud account.";
|
|
69
|
+
readonly description: "Publish a cross-project event to the Synthaer cloud. Requires cloud account.";
|
|
55
70
|
readonly inputSchema: {
|
|
56
71
|
readonly type: "object";
|
|
57
72
|
readonly properties: {
|
|
58
73
|
readonly event: {
|
|
59
74
|
readonly type: "string";
|
|
75
|
+
readonly description: "Event type identifier";
|
|
60
76
|
};
|
|
61
77
|
readonly project: {
|
|
62
78
|
readonly type: "string";
|
|
79
|
+
readonly description: "Source project identifier";
|
|
63
80
|
};
|
|
64
81
|
readonly data: {
|
|
65
82
|
readonly type: "object";
|
|
83
|
+
readonly description: "Event payload data";
|
|
66
84
|
};
|
|
67
85
|
};
|
|
68
86
|
readonly required: readonly ["event", "project"];
|
|
69
87
|
};
|
|
88
|
+
}, {
|
|
89
|
+
readonly name: "subscribe_cross_project_events";
|
|
90
|
+
readonly description: "Subscribe to cross-project events from the Synthaer cloud. Requires cloud account.";
|
|
91
|
+
readonly inputSchema: {
|
|
92
|
+
readonly type: "object";
|
|
93
|
+
readonly properties: {
|
|
94
|
+
readonly projects: {
|
|
95
|
+
readonly type: "array";
|
|
96
|
+
readonly items: {
|
|
97
|
+
readonly type: "string";
|
|
98
|
+
};
|
|
99
|
+
readonly description: "Project identifiers to subscribe to";
|
|
100
|
+
};
|
|
101
|
+
readonly eventTypes: {
|
|
102
|
+
readonly type: "array";
|
|
103
|
+
readonly items: {
|
|
104
|
+
readonly type: "string";
|
|
105
|
+
};
|
|
106
|
+
readonly description: "Event types to subscribe to";
|
|
107
|
+
};
|
|
108
|
+
readonly since: {
|
|
109
|
+
readonly type: "string";
|
|
110
|
+
readonly description: "ISO timestamp to fetch events since";
|
|
111
|
+
};
|
|
112
|
+
};
|
|
113
|
+
};
|
|
114
|
+
}, {
|
|
115
|
+
readonly name: "get_cross_project_impact";
|
|
116
|
+
readonly description: "Check impact of changes across projects. Requires cloud account.";
|
|
117
|
+
readonly inputSchema: {
|
|
118
|
+
readonly type: "object";
|
|
119
|
+
readonly properties: {
|
|
120
|
+
readonly project: {
|
|
121
|
+
readonly type: "string";
|
|
122
|
+
readonly description: "Project to check impact for";
|
|
123
|
+
};
|
|
124
|
+
readonly knowledgeIds: {
|
|
125
|
+
readonly type: "array";
|
|
126
|
+
readonly items: {
|
|
127
|
+
readonly type: "string";
|
|
128
|
+
};
|
|
129
|
+
readonly description: "Knowledge item IDs to check";
|
|
130
|
+
};
|
|
131
|
+
};
|
|
132
|
+
readonly required: readonly ["project"];
|
|
133
|
+
};
|
|
70
134
|
}];
|
|
71
135
|
export {};
|
|
72
136
|
//# sourceMappingURL=cloud-gate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-gate.d.ts","sourceRoot":"","sources":["../../src/tools/cloud-gate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,QAAA,MAAM,gBAAgB,wQAWZ,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9D,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG;IACpD,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,EAAE,IAAI,CAAC;CACf,CAiBA;AAED;;;GAGG;AACH,eAAO,MAAM,2BAA2B
|
|
1
|
+
{"version":3,"file":"cloud-gate.d.ts","sourceRoot":"","sources":["../../src/tools/cloud-gate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,QAAA,MAAM,gBAAgB,wQAWZ,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9D,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG;IACpD,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,EAAE,IAAI,CAAC;CACf,CAiBA;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,EAAE,YAAY,GAAG,IAAI,GACzB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC,CAmC7E;AAED;;;GAGG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6D9B,CAAC"}
|
package/dist/tools/cloud-gate.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Cloud-gated tools return a structured error
|
|
3
|
-
*
|
|
2
|
+
* Cloud-gated tools. In local mode they return a structured error.
|
|
3
|
+
* In hybrid/cloud mode they proxy to the Synthaer cloud MCP server.
|
|
4
4
|
*/
|
|
5
5
|
const CLOUD_ONLY_TOOLS = [
|
|
6
6
|
'ratify_knowledge',
|
|
@@ -34,6 +34,42 @@ export function cloudRequiredError(toolName) {
|
|
|
34
34
|
isError: true,
|
|
35
35
|
};
|
|
36
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Handle a cloud-only tool call. If a proxy is available, forward the call
|
|
39
|
+
* to the cloud. Otherwise, return the "requires_cloud" error.
|
|
40
|
+
*/
|
|
41
|
+
export async function handleCloudOnlyTool(toolName, args, proxy) {
|
|
42
|
+
if (!proxy) {
|
|
43
|
+
return cloudRequiredError(toolName);
|
|
44
|
+
}
|
|
45
|
+
try {
|
|
46
|
+
const result = await proxy(toolName, args);
|
|
47
|
+
// If the proxy already returned MCP-formatted content, pass through
|
|
48
|
+
if (result['content'] &&
|
|
49
|
+
Array.isArray(result['content'])) {
|
|
50
|
+
return result;
|
|
51
|
+
}
|
|
52
|
+
// Wrap raw result
|
|
53
|
+
return {
|
|
54
|
+
content: [{ type: 'text', text: JSON.stringify(result) }],
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
return {
|
|
59
|
+
content: [
|
|
60
|
+
{
|
|
61
|
+
type: 'text',
|
|
62
|
+
text: JSON.stringify({
|
|
63
|
+
error: 'cloud_proxy_error',
|
|
64
|
+
tool: toolName,
|
|
65
|
+
message: err instanceof Error ? err.message : String(err),
|
|
66
|
+
}),
|
|
67
|
+
},
|
|
68
|
+
],
|
|
69
|
+
isError: true,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
}
|
|
37
73
|
/**
|
|
38
74
|
* Tool definitions for cloud-only tools.
|
|
39
75
|
* These are registered so agents can discover them and get guidance on upgrade.
|
|
@@ -41,39 +77,63 @@ export function cloudRequiredError(toolName) {
|
|
|
41
77
|
export const CLOUD_ONLY_TOOL_DEFINITIONS = [
|
|
42
78
|
{
|
|
43
79
|
name: 'ratify_knowledge',
|
|
44
|
-
description: 'Ratify local knowledge items to the Synthaer cloud. Requires cloud account.',
|
|
80
|
+
description: 'Ratify local knowledge items to the Synthaer cloud with CA signature. Requires cloud account.',
|
|
45
81
|
inputSchema: {
|
|
46
82
|
type: 'object',
|
|
47
83
|
properties: {
|
|
48
|
-
ids: { type: 'array', items: { type: 'string' } },
|
|
49
|
-
project: { type: 'string' },
|
|
84
|
+
ids: { type: 'array', items: { type: 'string' }, description: 'Knowledge item IDs to ratify' },
|
|
85
|
+
project: { type: 'string', description: 'Project identifier' },
|
|
50
86
|
},
|
|
51
87
|
required: ['ids'],
|
|
52
88
|
},
|
|
53
89
|
},
|
|
54
90
|
{
|
|
55
91
|
name: 'verify_ratification',
|
|
56
|
-
description: 'Verify the ratification status of knowledge items. Requires cloud account.',
|
|
92
|
+
description: 'Verify the ratification status of knowledge items on the cloud. Requires cloud account.',
|
|
57
93
|
inputSchema: {
|
|
58
94
|
type: 'object',
|
|
59
95
|
properties: {
|
|
60
|
-
ids: { type: 'array', items: { type: 'string' } },
|
|
96
|
+
ids: { type: 'array', items: { type: 'string' }, description: 'Knowledge item IDs to verify' },
|
|
61
97
|
},
|
|
62
98
|
required: ['ids'],
|
|
63
99
|
},
|
|
64
100
|
},
|
|
65
101
|
{
|
|
66
102
|
name: 'publish_cross_project_event',
|
|
67
|
-
description: 'Publish a cross-project event. Requires cloud account.',
|
|
103
|
+
description: 'Publish a cross-project event to the Synthaer cloud. Requires cloud account.',
|
|
68
104
|
inputSchema: {
|
|
69
105
|
type: 'object',
|
|
70
106
|
properties: {
|
|
71
|
-
event: { type: 'string' },
|
|
72
|
-
project: { type: 'string' },
|
|
73
|
-
data: { type: 'object' },
|
|
107
|
+
event: { type: 'string', description: 'Event type identifier' },
|
|
108
|
+
project: { type: 'string', description: 'Source project identifier' },
|
|
109
|
+
data: { type: 'object', description: 'Event payload data' },
|
|
74
110
|
},
|
|
75
111
|
required: ['event', 'project'],
|
|
76
112
|
},
|
|
77
113
|
},
|
|
114
|
+
{
|
|
115
|
+
name: 'subscribe_cross_project_events',
|
|
116
|
+
description: 'Subscribe to cross-project events from the Synthaer cloud. Requires cloud account.',
|
|
117
|
+
inputSchema: {
|
|
118
|
+
type: 'object',
|
|
119
|
+
properties: {
|
|
120
|
+
projects: { type: 'array', items: { type: 'string' }, description: 'Project identifiers to subscribe to' },
|
|
121
|
+
eventTypes: { type: 'array', items: { type: 'string' }, description: 'Event types to subscribe to' },
|
|
122
|
+
since: { type: 'string', description: 'ISO timestamp to fetch events since' },
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
name: 'get_cross_project_impact',
|
|
128
|
+
description: 'Check impact of changes across projects. Requires cloud account.',
|
|
129
|
+
inputSchema: {
|
|
130
|
+
type: 'object',
|
|
131
|
+
properties: {
|
|
132
|
+
project: { type: 'string', description: 'Project to check impact for' },
|
|
133
|
+
knowledgeIds: { type: 'array', items: { type: 'string' }, description: 'Knowledge item IDs to check' },
|
|
134
|
+
},
|
|
135
|
+
required: ['project'],
|
|
136
|
+
},
|
|
137
|
+
},
|
|
78
138
|
];
|
|
79
139
|
//# sourceMappingURL=cloud-gate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-gate.js","sourceRoot":"","sources":["../../src/tools/cloud-gate.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"cloud-gate.js","sourceRoot":"","sources":["../../src/tools/cloud-gate.ts"],"names":[],"mappings":"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"}
|