@superblocksteam/clark 2.0.0-SNAPSHOT.a1e14d6b7a1bcd87
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.txt +87 -0
- package/dist/clark-chat-settings.d.ts +11 -0
- package/dist/clark-chat-settings.d.ts.map +1 -0
- package/dist/clark-chat-settings.js +12 -0
- package/dist/clark-chat-settings.js.map +1 -0
- package/dist/clark-error-handler.d.ts +17 -0
- package/dist/clark-error-handler.d.ts.map +1 -0
- package/dist/clark-error-handler.js +21 -0
- package/dist/clark-error-handler.js.map +1 -0
- package/dist/clark-language-model.d.ts +67 -0
- package/dist/clark-language-model.d.ts.map +1 -0
- package/dist/clark-language-model.js +862 -0
- package/dist/clark-language-model.js.map +1 -0
- package/dist/clark-provider.d.ts +66 -0
- package/dist/clark-provider.d.ts.map +1 -0
- package/dist/clark-provider.js +72 -0
- package/dist/clark-provider.js.map +1 -0
- package/dist/clark-stream-telemetry.d.ts +72 -0
- package/dist/clark-stream-telemetry.d.ts.map +1 -0
- package/dist/clark-stream-telemetry.js +22 -0
- package/dist/clark-stream-telemetry.js.map +1 -0
- package/dist/content-block-utils.d.ts +55 -0
- package/dist/content-block-utils.d.ts.map +1 -0
- package/dist/content-block-utils.js +122 -0
- package/dist/content-block-utils.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/docs-mcp.d.ts +23 -0
- package/dist/mcp/docs-mcp.d.ts.map +1 -0
- package/dist/mcp/docs-mcp.js +95 -0
- package/dist/mcp/docs-mcp.js.map +1 -0
- package/dist/mcp/extract-mcp-text-content.d.ts +11 -0
- package/dist/mcp/extract-mcp-text-content.d.ts.map +1 -0
- package/dist/mcp/extract-mcp-text-content.js +37 -0
- package/dist/mcp/extract-mcp-text-content.js.map +1 -0
- package/dist/mcp/index.d.ts +5 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +4 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/mcp-client.d.ts +52 -0
- package/dist/mcp/mcp-client.d.ts.map +1 -0
- package/dist/mcp/mcp-client.js +164 -0
- package/dist/mcp/mcp-client.js.map +1 -0
- package/dist/mcp/types.d.ts +55 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +8 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/snowflake-cortex-fetch.d.ts +21 -0
- package/dist/snowflake-cortex-fetch.d.ts.map +1 -0
- package/dist/snowflake-cortex-fetch.js +349 -0
- package/dist/snowflake-cortex-fetch.js.map +1 -0
- package/dist/stall-timeout.d.ts +5 -0
- package/dist/stall-timeout.d.ts.map +1 -0
- package/dist/stall-timeout.js +30 -0
- package/dist/stall-timeout.js.map +1 -0
- package/dist/thinking-options.d.ts +18 -0
- package/dist/thinking-options.d.ts.map +1 -0
- package/dist/thinking-options.js +53 -0
- package/dist/thinking-options.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared docs MCP helper for both Dashboard Clark and Editor Clark.
|
|
3
|
+
*
|
|
4
|
+
* Connects to the Superblocks docs MCP server, discovers tools via the
|
|
5
|
+
* MCP protocol, and returns them as an AI SDK ToolSet. Handles caching
|
|
6
|
+
* to avoid reconnecting on every request.
|
|
7
|
+
*/
|
|
8
|
+
import { jsonSchema } from "ai";
|
|
9
|
+
import { extractMcpTextContent } from "./extract-mcp-text-content.js";
|
|
10
|
+
import { MCPClient } from "./mcp-client.js";
|
|
11
|
+
/** Superblocks docs MCP server URL. */
|
|
12
|
+
export const DOCS_MCP_URL = "https://docs.superblocks.com/mcp";
|
|
13
|
+
/**
|
|
14
|
+
* Module-level cache so the remote HTTP roundtrip (connect → tools/list)
|
|
15
|
+
* only happens once instead of on every request.
|
|
16
|
+
* A pending connect Promise prevents concurrent requests from racing.
|
|
17
|
+
*/
|
|
18
|
+
let docsMcpClientCache = null;
|
|
19
|
+
let connectPromise = null;
|
|
20
|
+
/**
|
|
21
|
+
* Returns the cached docs MCP client instance, creating one if needed.
|
|
22
|
+
* The client is shared so both getDocsMcpTools() and direct adapter
|
|
23
|
+
* usage (Editor Clark) can reuse the same connection.
|
|
24
|
+
*/
|
|
25
|
+
function getDocsMcpClient(logger) {
|
|
26
|
+
if (!docsMcpClientCache) {
|
|
27
|
+
docsMcpClientCache = new MCPClient(DOCS_MCP_URL, logger);
|
|
28
|
+
connectPromise = null;
|
|
29
|
+
}
|
|
30
|
+
return docsMcpClientCache;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Ensures the docs MCP client is connected. Returns the pending
|
|
34
|
+
* connect promise so concurrent callers await the same connection.
|
|
35
|
+
*/
|
|
36
|
+
async function ensureDocsMcpConnected(logger) {
|
|
37
|
+
const client = getDocsMcpClient(logger);
|
|
38
|
+
if (!client.isConnected()) {
|
|
39
|
+
if (!connectPromise) {
|
|
40
|
+
connectPromise = client.connect().then(() => {
|
|
41
|
+
connectPromise = null;
|
|
42
|
+
}, (err) => {
|
|
43
|
+
connectPromise = null;
|
|
44
|
+
throw err;
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
await connectPromise;
|
|
48
|
+
}
|
|
49
|
+
return client;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Returns docs MCP tools as an AI SDK ToolSet when the feature flag is
|
|
53
|
+
* enabled. Tools are dynamically discovered from the MCP server via the
|
|
54
|
+
* MCP protocol (`tools/list` + `tools/call`).
|
|
55
|
+
*
|
|
56
|
+
* Returns an empty ToolSet when disabled or on error.
|
|
57
|
+
*
|
|
58
|
+
* Used by Dashboard Clark. Editor Clark uses MCPClient + McpToolAdapter
|
|
59
|
+
* directly for richer tool registration (categories, permissions, etc.).
|
|
60
|
+
*/
|
|
61
|
+
export async function getDocsMcpTools(enabled, logger) {
|
|
62
|
+
if (!enabled) {
|
|
63
|
+
return {};
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
const client = await ensureDocsMcpConnected(logger);
|
|
67
|
+
const toolSet = {};
|
|
68
|
+
for (const def of client.getToolDefinitions()) {
|
|
69
|
+
toolSet[def.name] = {
|
|
70
|
+
description: def.description ?? def.name,
|
|
71
|
+
inputSchema: jsonSchema(def.inputSchema ?? { type: "object", properties: {} }),
|
|
72
|
+
execute: async (rawInput) => {
|
|
73
|
+
const args = rawInput != null && typeof rawInput === "object"
|
|
74
|
+
? rawInput
|
|
75
|
+
: {};
|
|
76
|
+
const content = await client.callTool(def.name, args);
|
|
77
|
+
const text = extractMcpTextContent(content);
|
|
78
|
+
if (text)
|
|
79
|
+
return { content: text };
|
|
80
|
+
return content != null
|
|
81
|
+
? { content: JSON.stringify(content) }
|
|
82
|
+
: { content: "No results found." };
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
return toolSet;
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
logger.warn(`[Docs MCP] Failed to initialize: ${String(error)}`);
|
|
90
|
+
docsMcpClientCache = null;
|
|
91
|
+
connectPromise = null;
|
|
92
|
+
return {};
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=docs-mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs-mcp.js","sourceRoot":"","sources":["../../src/mcp/docs-mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extracts text content from an MCP tool response.
|
|
3
|
+
*
|
|
4
|
+
* MCP servers return content as arrays of typed parts (e.g. `[{ type: "text", text: "..." }]`),
|
|
5
|
+
* sometimes wrapped in `{ content: [...] }`. This helper normalises both shapes and joins
|
|
6
|
+
* all text parts with double newlines.
|
|
7
|
+
*
|
|
8
|
+
* Returns `undefined` when the input contains no text content.
|
|
9
|
+
*/
|
|
10
|
+
export declare function extractMcpTextContent(output: unknown): string | undefined;
|
|
11
|
+
//# sourceMappingURL=extract-mcp-text-content.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-mcp-text-content.d.ts","sourceRoot":"","sources":["../../src/mcp/extract-mcp-text-content.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CA6BzE"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extracts text content from an MCP tool response.
|
|
3
|
+
*
|
|
4
|
+
* MCP servers return content as arrays of typed parts (e.g. `[{ type: "text", text: "..." }]`),
|
|
5
|
+
* sometimes wrapped in `{ content: [...] }`. This helper normalises both shapes and joins
|
|
6
|
+
* all text parts with double newlines.
|
|
7
|
+
*
|
|
8
|
+
* Returns `undefined` when the input contains no text content.
|
|
9
|
+
*/
|
|
10
|
+
export function extractMcpTextContent(output) {
|
|
11
|
+
const content = Array.isArray(output)
|
|
12
|
+
? output
|
|
13
|
+
: output &&
|
|
14
|
+
typeof output === "object" &&
|
|
15
|
+
"content" in output &&
|
|
16
|
+
Array.isArray(output.content)
|
|
17
|
+
? output.content
|
|
18
|
+
: undefined;
|
|
19
|
+
if (!content) {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
const text = content
|
|
23
|
+
.map((part) => {
|
|
24
|
+
if (!part || typeof part !== "object") {
|
|
25
|
+
return "";
|
|
26
|
+
}
|
|
27
|
+
const typedPart = part;
|
|
28
|
+
if (typedPart.type !== "text" || typeof typedPart.text !== "string") {
|
|
29
|
+
return "";
|
|
30
|
+
}
|
|
31
|
+
return typedPart.text.trim();
|
|
32
|
+
})
|
|
33
|
+
.filter((part) => part.length > 0)
|
|
34
|
+
.join("\n\n");
|
|
35
|
+
return text.length > 0 ? text : undefined;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=extract-mcp-text-content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-mcp-text-content.js","sourceRoot":"","sources":["../../src/mcp/extract-mcp-text-content.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAe;IACnD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QACnC,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,MAAM;YACJ,OAAO,MAAM,KAAK,QAAQ;YAC1B,SAAS,IAAI,MAAM;YACnB,KAAK,CAAC,OAAO,CAAE,MAAgC,CAAC,OAAO,CAAC;YAC1D,CAAC,CAAE,MAAiC,CAAC,OAAO;YAC5C,CAAC,CAAC,SAAS,CAAC;IAEhB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,IAAI,GAAG,OAAO;SACjB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtC,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,SAAS,GAAG,IAA0C,CAAC;QAC7D,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACpE,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;SACjC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEhB,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic MCP client for JSON-RPC over HTTP with SSE support.
|
|
3
|
+
*
|
|
4
|
+
* Handles communication with any MCP server via the Streamable HTTP
|
|
5
|
+
* transport. Used by both Editor Clark and Dashboard Clark for
|
|
6
|
+
* connecting to MCP servers (docs, Playwright, etc.).
|
|
7
|
+
*/
|
|
8
|
+
import type { McpLogger, McpToolDefinition, McpClientInterface } from "./types.js";
|
|
9
|
+
/**
|
|
10
|
+
* MCP client that communicates via JSON-RPC over HTTP with SSE support.
|
|
11
|
+
*
|
|
12
|
+
* Connects to an MCP server, discovers available tools via `tools/list`,
|
|
13
|
+
* and delegates tool execution via `tools/call`.
|
|
14
|
+
*/
|
|
15
|
+
export declare class MCPClient implements McpClientInterface {
|
|
16
|
+
private readonly serverUrl;
|
|
17
|
+
private readonly logger;
|
|
18
|
+
private nextId;
|
|
19
|
+
private connected;
|
|
20
|
+
private tools;
|
|
21
|
+
constructor(serverUrl: string, logger: McpLogger);
|
|
22
|
+
/**
|
|
23
|
+
* Connects to the MCP server and discovers available tools.
|
|
24
|
+
*/
|
|
25
|
+
connect(): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Calls a tool on the MCP server.
|
|
28
|
+
*
|
|
29
|
+
* @returns The MCP content array from the tool response.
|
|
30
|
+
*/
|
|
31
|
+
callTool(toolName: string, args: unknown): Promise<unknown>;
|
|
32
|
+
/**
|
|
33
|
+
* Checks if the client is connected.
|
|
34
|
+
*/
|
|
35
|
+
isConnected(): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Disconnects from the MCP server.
|
|
38
|
+
*/
|
|
39
|
+
disconnect(): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Gets available tool names.
|
|
42
|
+
*/
|
|
43
|
+
getAvailableTools(): string[];
|
|
44
|
+
/**
|
|
45
|
+
* Gets full tool definitions including schemas.
|
|
46
|
+
*/
|
|
47
|
+
getToolDefinitions(): McpToolDefinition[];
|
|
48
|
+
private listTools;
|
|
49
|
+
private sendRequest;
|
|
50
|
+
private parseSSEResponse;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=mcp-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../../src/mcp/mcp-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,SAAS,EAGT,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAKpB;;;;;GAKG;AACH,qBAAa,SAAU,YAAW,kBAAkB;IAMhD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM;IANzB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,KAAK,CAA6C;gBAGvC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,SAAS;IAGpC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB9B;;;;OAIG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IA4BjE;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC;;OAEG;IACH,iBAAiB,IAAI,MAAM,EAAE;IAI7B;;OAEG;IACH,kBAAkB,IAAI,iBAAiB,EAAE;YAI3B,SAAS;YAKT,WAAW;IAyDzB,OAAO,CAAC,gBAAgB;CAmBzB"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic MCP client for JSON-RPC over HTTP with SSE support.
|
|
3
|
+
*
|
|
4
|
+
* Handles communication with any MCP server via the Streamable HTTP
|
|
5
|
+
* transport. Used by both Editor Clark and Dashboard Clark for
|
|
6
|
+
* connecting to MCP servers (docs, Playwright, etc.).
|
|
7
|
+
*/
|
|
8
|
+
/** Timeout for MCP requests (30 seconds). */
|
|
9
|
+
const MCP_TIMEOUT_MS = 30_000;
|
|
10
|
+
/**
|
|
11
|
+
* MCP client that communicates via JSON-RPC over HTTP with SSE support.
|
|
12
|
+
*
|
|
13
|
+
* Connects to an MCP server, discovers available tools via `tools/list`,
|
|
14
|
+
* and delegates tool execution via `tools/call`.
|
|
15
|
+
*/
|
|
16
|
+
export class MCPClient {
|
|
17
|
+
serverUrl;
|
|
18
|
+
logger;
|
|
19
|
+
nextId = 1;
|
|
20
|
+
connected = false;
|
|
21
|
+
tools = new Map();
|
|
22
|
+
constructor(serverUrl, logger) {
|
|
23
|
+
this.serverUrl = serverUrl;
|
|
24
|
+
this.logger = logger;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Connects to the MCP server and discovers available tools.
|
|
28
|
+
*/
|
|
29
|
+
async connect() {
|
|
30
|
+
if (this.connected)
|
|
31
|
+
return;
|
|
32
|
+
try {
|
|
33
|
+
const toolList = await this.listTools();
|
|
34
|
+
this.tools.clear();
|
|
35
|
+
for (const tool of toolList) {
|
|
36
|
+
this.tools.set(tool.name, tool);
|
|
37
|
+
}
|
|
38
|
+
this.connected = true;
|
|
39
|
+
this.logger.info(`[MCP] Connected to ${this.serverUrl} with ${this.tools.size} tool(s)`);
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
this.logger.error(`[MCP] Failed to connect to ${this.serverUrl}: ${String(error)}`);
|
|
43
|
+
throw new Error(`MCP connection failed: ${String(error)}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Calls a tool on the MCP server.
|
|
48
|
+
*
|
|
49
|
+
* @returns The MCP content array from the tool response.
|
|
50
|
+
*/
|
|
51
|
+
async callTool(toolName, args) {
|
|
52
|
+
if (!this.connected) {
|
|
53
|
+
await this.connect();
|
|
54
|
+
}
|
|
55
|
+
const tool = this.tools.get(toolName);
|
|
56
|
+
if (!tool) {
|
|
57
|
+
throw new Error(`Unknown tool: ${toolName}`);
|
|
58
|
+
}
|
|
59
|
+
const result = await this.sendRequest("tools/call", {
|
|
60
|
+
name: toolName,
|
|
61
|
+
arguments: args,
|
|
62
|
+
});
|
|
63
|
+
const response = result;
|
|
64
|
+
if (response?.error) {
|
|
65
|
+
throw new Error(`Tool execution failed: ${response.error.message ?? "unknown error"}`);
|
|
66
|
+
}
|
|
67
|
+
return response?.content;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Checks if the client is connected.
|
|
71
|
+
*/
|
|
72
|
+
isConnected() {
|
|
73
|
+
return this.connected;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Disconnects from the MCP server.
|
|
77
|
+
*/
|
|
78
|
+
async disconnect() {
|
|
79
|
+
if (!this.connected)
|
|
80
|
+
return;
|
|
81
|
+
this.connected = false;
|
|
82
|
+
this.tools.clear();
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Gets available tool names.
|
|
86
|
+
*/
|
|
87
|
+
getAvailableTools() {
|
|
88
|
+
return Array.from(this.tools.keys());
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Gets full tool definitions including schemas.
|
|
92
|
+
*/
|
|
93
|
+
getToolDefinitions() {
|
|
94
|
+
return Array.from(this.tools.values());
|
|
95
|
+
}
|
|
96
|
+
async listTools() {
|
|
97
|
+
const result = await this.sendRequest("tools/list", {});
|
|
98
|
+
return result?.tools ?? [];
|
|
99
|
+
}
|
|
100
|
+
async sendRequest(method, params) {
|
|
101
|
+
const request = {
|
|
102
|
+
jsonrpc: "2.0",
|
|
103
|
+
method,
|
|
104
|
+
params,
|
|
105
|
+
id: this.nextId++,
|
|
106
|
+
};
|
|
107
|
+
try {
|
|
108
|
+
const response = await fetch(this.serverUrl, {
|
|
109
|
+
method: "POST",
|
|
110
|
+
headers: {
|
|
111
|
+
"Content-Type": "application/json",
|
|
112
|
+
Accept: "application/json, text/event-stream",
|
|
113
|
+
},
|
|
114
|
+
body: JSON.stringify(request),
|
|
115
|
+
signal: AbortSignal.timeout(MCP_TIMEOUT_MS),
|
|
116
|
+
});
|
|
117
|
+
if (!response.ok) {
|
|
118
|
+
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
119
|
+
}
|
|
120
|
+
const contentType = response.headers.get("content-type") ?? "";
|
|
121
|
+
if (contentType.includes("text/event-stream")) {
|
|
122
|
+
const text = await response.text();
|
|
123
|
+
return this.parseSSEResponse(text, request.id);
|
|
124
|
+
}
|
|
125
|
+
const data = (await response.json());
|
|
126
|
+
if (data.error)
|
|
127
|
+
throw new Error(data.error.message);
|
|
128
|
+
return data.result;
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
const errorMsg = String(error);
|
|
132
|
+
if (errorMsg.includes("ECONNREFUSED") ||
|
|
133
|
+
errorMsg.includes("ECONNRESET")) {
|
|
134
|
+
this.connected = false;
|
|
135
|
+
throw new Error("MCP server connection lost. The server may have crashed.");
|
|
136
|
+
}
|
|
137
|
+
if (errorMsg.includes("AbortError") || errorMsg.includes("timeout")) {
|
|
138
|
+
throw new Error(`MCP request timed out: method ${method}`);
|
|
139
|
+
}
|
|
140
|
+
throw error;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
parseSSEResponse(text, requestId) {
|
|
144
|
+
for (const line of text.split("\n")) {
|
|
145
|
+
if (line.startsWith("data: ")) {
|
|
146
|
+
try {
|
|
147
|
+
const data = JSON.parse(line.substring(6));
|
|
148
|
+
if (data.id === requestId || data.id === null) {
|
|
149
|
+
if (data.error)
|
|
150
|
+
throw new Error(data.error.message);
|
|
151
|
+
return data.result;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
catch (e) {
|
|
155
|
+
// Re-throw MCP errors; skip only JSON.parse SyntaxErrors
|
|
156
|
+
if (!(e instanceof SyntaxError))
|
|
157
|
+
throw e;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
throw new Error(`No valid JSON-RPC response found in SSE stream for request ${requestId}`);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=mcp-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../../src/mcp/mcp-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared MCP (Model Context Protocol) types.
|
|
3
|
+
*
|
|
4
|
+
* Used by both Editor Clark and Dashboard Clark for connecting
|
|
5
|
+
* to MCP servers (docs, Playwright, etc.).
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Minimal logger interface compatible with both pino (server)
|
|
9
|
+
* and the vite-plugin-file-sync Logger.
|
|
10
|
+
*/
|
|
11
|
+
export interface McpLogger {
|
|
12
|
+
info(...args: unknown[]): void;
|
|
13
|
+
warn(...args: unknown[]): void;
|
|
14
|
+
error(...args: unknown[]): void;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* JSON-RPC request for MCP communication.
|
|
18
|
+
*/
|
|
19
|
+
export interface McpJsonRpcRequest {
|
|
20
|
+
jsonrpc: "2.0";
|
|
21
|
+
method: string;
|
|
22
|
+
params?: Record<string, unknown>;
|
|
23
|
+
id: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* JSON-RPC response from MCP server.
|
|
27
|
+
*/
|
|
28
|
+
export interface McpJsonRpcResponse {
|
|
29
|
+
jsonrpc: "2.0";
|
|
30
|
+
result?: unknown;
|
|
31
|
+
error?: {
|
|
32
|
+
code: number;
|
|
33
|
+
message: string;
|
|
34
|
+
};
|
|
35
|
+
id: number | null;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* MCP tool definition as returned by the MCP server via tools/list.
|
|
39
|
+
*/
|
|
40
|
+
export interface McpToolDefinition {
|
|
41
|
+
name: string;
|
|
42
|
+
description?: string;
|
|
43
|
+
inputSchema?: Record<string, unknown>;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Interface for MCP clients that can be used with the McpToolAdapter.
|
|
47
|
+
*/
|
|
48
|
+
export interface McpClientInterface {
|
|
49
|
+
connect(): Promise<void>;
|
|
50
|
+
disconnect(): Promise<void>;
|
|
51
|
+
isConnected(): boolean;
|
|
52
|
+
getToolDefinitions(): McpToolDefinition[];
|
|
53
|
+
callTool(name: string, args: unknown): Promise<unknown>;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/mcp/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC/B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC/B,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,KAAK,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,KAAK,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,WAAW,IAAI,OAAO,CAAC;IACvB,kBAAkB,IAAI,iBAAiB,EAAE,CAAC;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACzD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/mcp/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
type UpstreamResponseInfo = {
|
|
2
|
+
/** Upstream request identifier from the response headers, when present. */
|
|
3
|
+
requestId: string | undefined;
|
|
4
|
+
status: number;
|
|
5
|
+
url: string;
|
|
6
|
+
};
|
|
7
|
+
type SnowflakeCortexFetchOptions = {
|
|
8
|
+
forwardCacheControl: boolean;
|
|
9
|
+
onPromptCachingRejected?: () => void;
|
|
10
|
+
/**
|
|
11
|
+
* Called once per upstream response with its request identifier — the
|
|
12
|
+
* handle needed to escalate stalled/failed requests to the provider.
|
|
13
|
+
* Fires for every upstream attempt, including the cache_control 400
|
|
14
|
+
* retry, so the last invocation always reflects the live inference.
|
|
15
|
+
*/
|
|
16
|
+
onUpstreamResponse?: (info: UpstreamResponseInfo) => void;
|
|
17
|
+
};
|
|
18
|
+
export declare function createSnowflakeCortexFetch({ forwardCacheControl, onPromptCachingRejected, onUpstreamResponse, }: SnowflakeCortexFetchOptions): typeof fetch;
|
|
19
|
+
export declare const snowflakeCortexFetch: typeof fetch;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=snowflake-cortex-fetch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snowflake-cortex-fetch.d.ts","sourceRoot":"","sources":["../src/snowflake-cortex-fetch.ts"],"names":[],"mappings":"AAUA,KAAK,oBAAoB,GAAG;IAC1B,2EAA2E;IAC3E,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAsBF,KAAK,2BAA2B,GAAG;IACjC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,uBAAuB,CAAC,EAAE,MAAM,IAAI,CAAC;IACrC;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,IAAI,CAAC;CAC3D,CAAC;AAoVF,wBAAgB,0BAA0B,CAAC,EACzC,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,GACnB,EAAE,2BAA2B,GAAG,OAAO,KAAK,CAoE5C;AAED,eAAO,MAAM,oBAAoB,EAAE,OAAO,KAExC,CAAC"}
|