@tachu/extensions 1.0.0-beta.1
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/CHANGELOG.md +77 -0
- package/LICENSE +201 -0
- package/README.md +825 -0
- package/README_ZH.md +815 -0
- package/dist/backends/file.d.ts +18 -0
- package/dist/backends/file.d.ts.map +1 -0
- package/dist/backends/file.js +69 -0
- package/dist/backends/file.js.map +1 -0
- package/dist/backends/index.d.ts +4 -0
- package/dist/backends/index.d.ts.map +1 -0
- package/dist/backends/index.js +4 -0
- package/dist/backends/index.js.map +1 -0
- package/dist/backends/terminal.d.ts +18 -0
- package/dist/backends/terminal.d.ts.map +1 -0
- package/dist/backends/terminal.js +57 -0
- package/dist/backends/terminal.js.map +1 -0
- package/dist/backends/web.d.ts +18 -0
- package/dist/backends/web.d.ts.map +1 -0
- package/dist/backends/web.js +53 -0
- package/dist/backends/web.js.map +1 -0
- package/dist/common/net.d.ts +31 -0
- package/dist/common/net.d.ts.map +1 -0
- package/dist/common/net.js +162 -0
- package/dist/common/net.js.map +1 -0
- package/dist/common/path.d.ts +18 -0
- package/dist/common/path.d.ts.map +1 -0
- package/dist/common/path.js +34 -0
- package/dist/common/path.js.map +1 -0
- package/dist/common/process.d.ts +19 -0
- package/dist/common/process.d.ts.map +1 -0
- package/dist/common/process.js +67 -0
- package/dist/common/process.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.d.ts +3 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +3 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/sse-adapter.d.ts +70 -0
- package/dist/mcp/sse-adapter.d.ts.map +1 -0
- package/dist/mcp/sse-adapter.js +176 -0
- package/dist/mcp/sse-adapter.js.map +1 -0
- package/dist/mcp/stdio-adapter.d.ts +73 -0
- package/dist/mcp/stdio-adapter.d.ts.map +1 -0
- package/dist/mcp/stdio-adapter.js +178 -0
- package/dist/mcp/stdio-adapter.js.map +1 -0
- package/dist/observability/index.d.ts +3 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +3 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/jsonl-emitter.d.ts +58 -0
- package/dist/observability/jsonl-emitter.d.ts.map +1 -0
- package/dist/observability/jsonl-emitter.js +96 -0
- package/dist/observability/jsonl-emitter.js.map +1 -0
- package/dist/observability/otel-emitter.d.ts +52 -0
- package/dist/observability/otel-emitter.d.ts.map +1 -0
- package/dist/observability/otel-emitter.js +143 -0
- package/dist/observability/otel-emitter.js.map +1 -0
- package/dist/providers/anthropic.d.ts +54 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +298 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/index.d.ts +4 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +4 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/mock.d.ts +38 -0
- package/dist/providers/mock.d.ts.map +1 -0
- package/dist/providers/mock.js +79 -0
- package/dist/providers/mock.js.map +1 -0
- package/dist/providers/openai.d.ts +61 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +299 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/rules/index.d.ts +9 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +15 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/no-hallucination.md +11 -0
- package/dist/rules/no-sensitive-output.md +11 -0
- package/dist/rules/prefer-concise-response.md +11 -0
- package/dist/rules/require-tool-verification.md +11 -0
- package/dist/tools/apply-patch/descriptor.md +27 -0
- package/dist/tools/apply-patch/executor.d.ts +19 -0
- package/dist/tools/apply-patch/executor.d.ts.map +1 -0
- package/dist/tools/apply-patch/executor.js +190 -0
- package/dist/tools/apply-patch/executor.js.map +1 -0
- package/dist/tools/fetch-url/descriptor.md +38 -0
- package/dist/tools/fetch-url/executor.d.ts +20 -0
- package/dist/tools/fetch-url/executor.d.ts.map +1 -0
- package/dist/tools/fetch-url/executor.js +34 -0
- package/dist/tools/fetch-url/executor.js.map +1 -0
- package/dist/tools/index.d.ts +12 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +191 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/list-dir/descriptor.md +29 -0
- package/dist/tools/list-dir/executor.d.ts +22 -0
- package/dist/tools/list-dir/executor.d.ts.map +1 -0
- package/dist/tools/list-dir/executor.js +46 -0
- package/dist/tools/list-dir/executor.js.map +1 -0
- package/dist/tools/read-file/descriptor.md +28 -0
- package/dist/tools/read-file/executor.d.ts +15 -0
- package/dist/tools/read-file/executor.d.ts.map +1 -0
- package/dist/tools/read-file/executor.js +22 -0
- package/dist/tools/read-file/executor.js.map +1 -0
- package/dist/tools/run-shell/descriptor.md +39 -0
- package/dist/tools/run-shell/executor.d.ts +20 -0
- package/dist/tools/run-shell/executor.d.ts.map +1 -0
- package/dist/tools/run-shell/executor.js +76 -0
- package/dist/tools/run-shell/executor.js.map +1 -0
- package/dist/tools/search-code/descriptor.md +31 -0
- package/dist/tools/search-code/executor.d.ts +23 -0
- package/dist/tools/search-code/executor.d.ts.map +1 -0
- package/dist/tools/search-code/executor.js +113 -0
- package/dist/tools/search-code/executor.js.map +1 -0
- package/dist/tools/shared.d.ts +21 -0
- package/dist/tools/shared.d.ts.map +1 -0
- package/dist/tools/shared.js +12 -0
- package/dist/tools/shared.js.map +1 -0
- package/dist/tools/write-file/descriptor.md +30 -0
- package/dist/tools/write-file/executor.d.ts +16 -0
- package/dist/tools/write-file/executor.d.ts.map +1 -0
- package/dist/tools/write-file/executor.js +18 -0
- package/dist/tools/write-file/executor.js.map +1 -0
- package/dist/transformers/document-to-text.d.ts +23 -0
- package/dist/transformers/document-to-text.d.ts.map +1 -0
- package/dist/transformers/document-to-text.js +69 -0
- package/dist/transformers/document-to-text.js.map +1 -0
- package/dist/transformers/image-to-text.d.ts +38 -0
- package/dist/transformers/image-to-text.d.ts.map +1 -0
- package/dist/transformers/image-to-text.js +81 -0
- package/dist/transformers/image-to-text.js.map +1 -0
- package/dist/transformers/index.d.ts +3 -0
- package/dist/transformers/index.d.ts.map +1 -0
- package/dist/transformers/index.js +3 -0
- package/dist/transformers/index.js.map +1 -0
- package/dist/vector/index.d.ts +3 -0
- package/dist/vector/index.d.ts.map +1 -0
- package/dist/vector/index.js +3 -0
- package/dist/vector/index.js.map +1 -0
- package/dist/vector/local-fs.d.ts +76 -0
- package/dist/vector/local-fs.d.ts.map +1 -0
- package/dist/vector/local-fs.js +153 -0
- package/dist/vector/local-fs.js.map +1 -0
- package/dist/vector/qdrant.d.ts +65 -0
- package/dist/vector/qdrant.d.ts.map +1 -0
- package/dist/vector/qdrant.js +176 -0
- package/dist/vector/qdrant.js.map +1 -0
- package/package.json +74 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/common/process.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACtC,MAAqD,EACrD,QAAgB,EAC+B,EAAE;IACjD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IACxC,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;IAClC,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,IAAI,EAAE,CAAC;YACT,MAAM;QACR,CAAC;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,QAAQ,GAAG,KAAK,CAAC;QAC9B,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;YACd,SAAS,GAAG,IAAI,CAAC;YACjB,MAAM;QACR,CAAC;QACD,IAAI,KAAK,CAAC,UAAU,GAAG,IAAI,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YACrC,KAAK,IAAI,IAAI,CAAC;YACd,SAAS,GAAG,IAAI,CAAC;YACjB,MAAM;QACR,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC;IAC5B,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC;IAC7B,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;AAC/D,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,GAAW,EAAE,OAAO,GAAG,IAAI,EAAiB,EAAE;IACnF,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IACD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACnE,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,QAAQ;IACV,CAAC;AACH,CAAC,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { OpenAIProviderAdapter, AnthropicProviderAdapter, MockProviderAdapter, } from "./providers";
|
|
2
|
+
export { toolDescriptors, toolExecutors, type ToolExecutor } from "./tools";
|
|
3
|
+
export { TerminalBackend, FileBackend, WebBackend } from "./backends";
|
|
4
|
+
export { LocalFsVectorStore, QdrantVectorStore } from "./vector";
|
|
5
|
+
export { ImageToTextTransformer, DocumentToTextTransformer } from "./transformers";
|
|
6
|
+
export { McpStdioAdapter, McpSseAdapter } from "./mcp";
|
|
7
|
+
export { OtelEmitter, JsonlEmitter } from "./observability";
|
|
8
|
+
export { BUILTIN_RULE_DESCRIPTOR_PATHS } from "./rules";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { OpenAIProviderAdapter, AnthropicProviderAdapter, MockProviderAdapter, } from "./providers";
|
|
2
|
+
export { toolDescriptors, toolExecutors } from "./tools";
|
|
3
|
+
export { TerminalBackend, FileBackend, WebBackend } from "./backends";
|
|
4
|
+
export { LocalFsVectorStore, QdrantVectorStore } from "./vector";
|
|
5
|
+
export { ImageToTextTransformer, DocumentToTextTransformer } from "./transformers";
|
|
6
|
+
export { McpStdioAdapter, McpSseAdapter } from "./mcp";
|
|
7
|
+
export { OtelEmitter, JsonlEmitter } from "./observability";
|
|
8
|
+
export { BUILTIN_RULE_DESCRIPTOR_PATHS } from "./rules";
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,aAAa,EAAqB,MAAM,SAAS,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { McpToolAdapter, ToolDescriptor } from "@tachu/core";
|
|
2
|
+
interface McpSseAdapterOptions {
|
|
3
|
+
url: string;
|
|
4
|
+
headers?: Record<string, string>;
|
|
5
|
+
serverId?: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* MCP SSE 传输适配器。
|
|
9
|
+
*/
|
|
10
|
+
export declare class McpSseAdapter implements McpToolAdapter {
|
|
11
|
+
readonly transport: "sse";
|
|
12
|
+
private readonly options;
|
|
13
|
+
private readonly maxReconnectAttempts;
|
|
14
|
+
private client;
|
|
15
|
+
private transportImpl;
|
|
16
|
+
private reconnecting;
|
|
17
|
+
private closedManually;
|
|
18
|
+
private serverUri;
|
|
19
|
+
private readonly pendingRequests;
|
|
20
|
+
/**
|
|
21
|
+
* 创建 SSE MCP 适配器。
|
|
22
|
+
*
|
|
23
|
+
* @param options 连接配置
|
|
24
|
+
*/
|
|
25
|
+
constructor(options: McpSseAdapterOptions);
|
|
26
|
+
/**
|
|
27
|
+
* 建立 SSE MCP 连接。
|
|
28
|
+
*
|
|
29
|
+
* @param serverUri 服务端地址(可覆盖构造参数)
|
|
30
|
+
*/
|
|
31
|
+
connect(serverUri: string): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* 断开连接。
|
|
34
|
+
*/
|
|
35
|
+
disconnect(): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* 列出远端工具并转换为 ToolDescriptor。
|
|
38
|
+
*
|
|
39
|
+
* @returns 工具描述符列表
|
|
40
|
+
*/
|
|
41
|
+
listTools(): Promise<ToolDescriptor[]>;
|
|
42
|
+
/**
|
|
43
|
+
* 调用远端工具(core 协议方法)。
|
|
44
|
+
*
|
|
45
|
+
* @param name 工具名
|
|
46
|
+
* @param input 入参
|
|
47
|
+
* @returns 工具执行结果
|
|
48
|
+
*/
|
|
49
|
+
executeTool(name: string, input: unknown): Promise<unknown>;
|
|
50
|
+
/**
|
|
51
|
+
* 调用远端工具(支持 AbortSignal)。
|
|
52
|
+
*
|
|
53
|
+
* @param name 工具名
|
|
54
|
+
* @param input 入参
|
|
55
|
+
* @param signal 取消信号
|
|
56
|
+
* @param requestId 请求 ID(可选;用于后续 cancel 显式取消)
|
|
57
|
+
* @returns 执行结果
|
|
58
|
+
*/
|
|
59
|
+
callTool(name: string, input: unknown, signal?: AbortSignal, requestId?: string): Promise<unknown>;
|
|
60
|
+
/**
|
|
61
|
+
* 取消请求(由调用方通过 signal 传播)。
|
|
62
|
+
*
|
|
63
|
+
* @param _requestId 请求 ID
|
|
64
|
+
*/
|
|
65
|
+
cancel(requestId: string): Promise<void>;
|
|
66
|
+
private connectInternal;
|
|
67
|
+
private reconnectWithBackoff;
|
|
68
|
+
}
|
|
69
|
+
export {};
|
|
70
|
+
//# sourceMappingURL=sse-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sse-adapter.d.ts","sourceRoot":"","sources":["../../src/mcp/sse-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElE,UAAU,oBAAoB;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAKD;;GAEG;AACH,qBAAa,aAAc,YAAW,cAAc;IAClD,QAAQ,CAAC,SAAS,EAAG,KAAK,CAAU;IAEpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;IAC/C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAK;IAC1C,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,aAAa,CAAmC;IACxD,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAsC;IAEtE;;;;OAIG;gBACS,OAAO,EAAE,oBAAoB;IAIzC;;;;OAIG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM/C;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAWjC;;;;OAIG;IACG,SAAS,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAuB5C;;;;;;OAMG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAIjE;;;;;;;;OAQG;IACG,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,WAAW,EACpB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,CAAC;IAkCnB;;;;OAIG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAQhC,eAAe;YAoBf,oBAAoB;CAoBnC"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
2
|
+
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
|
|
3
|
+
const createRequestId = () => `mcp-sse-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
|
|
4
|
+
/**
|
|
5
|
+
* MCP SSE 传输适配器。
|
|
6
|
+
*/
|
|
7
|
+
export class McpSseAdapter {
|
|
8
|
+
transport = "sse";
|
|
9
|
+
options;
|
|
10
|
+
maxReconnectAttempts = 3;
|
|
11
|
+
client = null;
|
|
12
|
+
transportImpl = null;
|
|
13
|
+
reconnecting = false;
|
|
14
|
+
closedManually = false;
|
|
15
|
+
serverUri = "";
|
|
16
|
+
pendingRequests = new Map();
|
|
17
|
+
/**
|
|
18
|
+
* 创建 SSE MCP 适配器。
|
|
19
|
+
*
|
|
20
|
+
* @param options 连接配置
|
|
21
|
+
*/
|
|
22
|
+
constructor(options) {
|
|
23
|
+
this.options = options;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* 建立 SSE MCP 连接。
|
|
27
|
+
*
|
|
28
|
+
* @param serverUri 服务端地址(可覆盖构造参数)
|
|
29
|
+
*/
|
|
30
|
+
async connect(serverUri) {
|
|
31
|
+
this.serverUri = serverUri || this.options.url;
|
|
32
|
+
this.closedManually = false;
|
|
33
|
+
await this.connectInternal();
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 断开连接。
|
|
37
|
+
*/
|
|
38
|
+
async disconnect() {
|
|
39
|
+
this.closedManually = true;
|
|
40
|
+
for (const controller of this.pendingRequests.values()) {
|
|
41
|
+
controller.abort(new Error("MCP sse adapter disconnected"));
|
|
42
|
+
}
|
|
43
|
+
this.pendingRequests.clear();
|
|
44
|
+
await this.transportImpl?.close().catch(() => undefined);
|
|
45
|
+
this.transportImpl = null;
|
|
46
|
+
this.client = null;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* 列出远端工具并转换为 ToolDescriptor。
|
|
50
|
+
*
|
|
51
|
+
* @returns 工具描述符列表
|
|
52
|
+
*/
|
|
53
|
+
async listTools() {
|
|
54
|
+
if (!this.client) {
|
|
55
|
+
throw new Error("MCP sse adapter not connected");
|
|
56
|
+
}
|
|
57
|
+
const response = await this.client.listTools();
|
|
58
|
+
return response.tools.map((tool) => ({
|
|
59
|
+
kind: "tool",
|
|
60
|
+
name: tool.name,
|
|
61
|
+
description: tool.description ?? `mcp tool: ${tool.name}`,
|
|
62
|
+
sideEffect: tool.annotations?.readOnlyHint
|
|
63
|
+
? "readonly"
|
|
64
|
+
: tool.annotations?.destructiveHint
|
|
65
|
+
? "irreversible"
|
|
66
|
+
: "write",
|
|
67
|
+
idempotent: tool.annotations?.idempotentHint ?? false,
|
|
68
|
+
requiresApproval: tool.annotations?.destructiveHint ?? false,
|
|
69
|
+
timeout: 30_000,
|
|
70
|
+
inputSchema: tool.inputSchema,
|
|
71
|
+
outputSchema: tool.outputSchema,
|
|
72
|
+
execute: `mcp:${this.options.serverId ?? "sse"}:${tool.name}`,
|
|
73
|
+
}));
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* 调用远端工具(core 协议方法)。
|
|
77
|
+
*
|
|
78
|
+
* @param name 工具名
|
|
79
|
+
* @param input 入参
|
|
80
|
+
* @returns 工具执行结果
|
|
81
|
+
*/
|
|
82
|
+
async executeTool(name, input) {
|
|
83
|
+
return this.callTool(name, input);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* 调用远端工具(支持 AbortSignal)。
|
|
87
|
+
*
|
|
88
|
+
* @param name 工具名
|
|
89
|
+
* @param input 入参
|
|
90
|
+
* @param signal 取消信号
|
|
91
|
+
* @param requestId 请求 ID(可选;用于后续 cancel 显式取消)
|
|
92
|
+
* @returns 执行结果
|
|
93
|
+
*/
|
|
94
|
+
async callTool(name, input, signal, requestId) {
|
|
95
|
+
if (!this.client) {
|
|
96
|
+
throw new Error("MCP sse adapter not connected");
|
|
97
|
+
}
|
|
98
|
+
const mappedRequestId = requestId?.trim() ? requestId : createRequestId();
|
|
99
|
+
if (this.pendingRequests.has(mappedRequestId)) {
|
|
100
|
+
throw new Error(`MCP sse request already in progress: ${mappedRequestId}`);
|
|
101
|
+
}
|
|
102
|
+
const controller = new AbortController();
|
|
103
|
+
const onAbort = () => {
|
|
104
|
+
controller.abort(signal?.reason ?? new Error(`MCP sse request aborted: ${mappedRequestId}`));
|
|
105
|
+
};
|
|
106
|
+
if (signal?.aborted) {
|
|
107
|
+
onAbort();
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
111
|
+
}
|
|
112
|
+
this.pendingRequests.set(mappedRequestId, controller);
|
|
113
|
+
try {
|
|
114
|
+
const result = await this.client.callTool({ name, arguments: (input ?? {}) }, undefined, { signal: controller.signal });
|
|
115
|
+
return result;
|
|
116
|
+
}
|
|
117
|
+
finally {
|
|
118
|
+
signal?.removeEventListener("abort", onAbort);
|
|
119
|
+
this.pendingRequests.delete(mappedRequestId);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* 取消请求(由调用方通过 signal 传播)。
|
|
124
|
+
*
|
|
125
|
+
* @param _requestId 请求 ID
|
|
126
|
+
*/
|
|
127
|
+
async cancel(requestId) {
|
|
128
|
+
const controller = this.pendingRequests.get(requestId);
|
|
129
|
+
if (!controller) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
controller.abort(new Error(`MCP sse request cancelled: ${requestId}`));
|
|
133
|
+
}
|
|
134
|
+
async connectInternal() {
|
|
135
|
+
const target = this.serverUri || this.options.url;
|
|
136
|
+
this.client = new Client({ name: "tachu-mcp-sse", version: "1.0.0" });
|
|
137
|
+
this.transportImpl = new SSEClientTransport(new URL(target), {
|
|
138
|
+
...(this.options.headers
|
|
139
|
+
? {
|
|
140
|
+
requestInit: {
|
|
141
|
+
headers: this.options.headers,
|
|
142
|
+
},
|
|
143
|
+
}
|
|
144
|
+
: {}),
|
|
145
|
+
});
|
|
146
|
+
this.transportImpl.onclose = () => {
|
|
147
|
+
if (!this.closedManually) {
|
|
148
|
+
void this.reconnectWithBackoff();
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
await this.client.connect(this.transportImpl);
|
|
152
|
+
}
|
|
153
|
+
async reconnectWithBackoff() {
|
|
154
|
+
if (this.reconnecting || this.closedManually) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
this.reconnecting = true;
|
|
158
|
+
try {
|
|
159
|
+
for (let attempt = 0; attempt < this.maxReconnectAttempts; attempt += 1) {
|
|
160
|
+
const delay = 200 * 2 ** attempt;
|
|
161
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
162
|
+
try {
|
|
163
|
+
await this.connectInternal();
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
// retry
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
finally {
|
|
172
|
+
this.reconnecting = false;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=sse-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sse-adapter.js","sourceRoot":"","sources":["../../src/mcp/sse-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { McpToolAdapter, ToolDescriptor } from "@tachu/core";
|
|
2
|
+
interface McpStdioAdapterOptions {
|
|
3
|
+
command: string;
|
|
4
|
+
args?: string[];
|
|
5
|
+
env?: Record<string, string>;
|
|
6
|
+
cwd?: string;
|
|
7
|
+
serverId?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* MCP stdio 传输适配器。
|
|
11
|
+
*/
|
|
12
|
+
export declare class McpStdioAdapter implements McpToolAdapter {
|
|
13
|
+
readonly transport: "stdio";
|
|
14
|
+
private readonly options;
|
|
15
|
+
private readonly maxReconnectAttempts;
|
|
16
|
+
private client;
|
|
17
|
+
private transportImpl;
|
|
18
|
+
private reconnecting;
|
|
19
|
+
private closedManually;
|
|
20
|
+
private connected;
|
|
21
|
+
private serverUri;
|
|
22
|
+
private readonly pendingRequests;
|
|
23
|
+
/**
|
|
24
|
+
* 创建 stdio MCP 适配器。
|
|
25
|
+
*
|
|
26
|
+
* @param options stdio 启动参数
|
|
27
|
+
*/
|
|
28
|
+
constructor(options: McpStdioAdapterOptions);
|
|
29
|
+
/**
|
|
30
|
+
* 建立 MCP 连接。
|
|
31
|
+
*
|
|
32
|
+
* @param serverUri 服务端 URI(可留空)
|
|
33
|
+
*/
|
|
34
|
+
connect(serverUri: string): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* 断开连接。
|
|
37
|
+
*/
|
|
38
|
+
disconnect(): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* 列出远端工具并映射为引擎 ToolDescriptor。
|
|
41
|
+
*
|
|
42
|
+
* @returns 工具描述符数组
|
|
43
|
+
*/
|
|
44
|
+
listTools(): Promise<ToolDescriptor[]>;
|
|
45
|
+
/**
|
|
46
|
+
* 调用远端工具(core 协议方法)。
|
|
47
|
+
*
|
|
48
|
+
* @param name 工具名
|
|
49
|
+
* @param input 入参
|
|
50
|
+
* @returns 工具执行结果
|
|
51
|
+
*/
|
|
52
|
+
executeTool(name: string, input: unknown): Promise<unknown>;
|
|
53
|
+
/**
|
|
54
|
+
* 调用远端工具(支持 AbortSignal)。
|
|
55
|
+
*
|
|
56
|
+
* @param name 工具名
|
|
57
|
+
* @param input 入参
|
|
58
|
+
* @param signal 取消信号
|
|
59
|
+
* @param requestId 请求 ID(可选;用于后续 cancel 显式取消)
|
|
60
|
+
* @returns 工具执行结果
|
|
61
|
+
*/
|
|
62
|
+
callTool(name: string, input: unknown, signal?: AbortSignal, requestId?: string): Promise<unknown>;
|
|
63
|
+
/**
|
|
64
|
+
* 按 requestId 取消请求(通过信号机制由调用方透传)。
|
|
65
|
+
*
|
|
66
|
+
* @param _requestId 请求 ID
|
|
67
|
+
*/
|
|
68
|
+
cancel(requestId: string): Promise<void>;
|
|
69
|
+
private connectInternal;
|
|
70
|
+
private reconnectWithBackoff;
|
|
71
|
+
}
|
|
72
|
+
export {};
|
|
73
|
+
//# sourceMappingURL=stdio-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdio-adapter.d.ts","sourceRoot":"","sources":["../../src/mcp/stdio-adapter.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElE,UAAU,sBAAsB;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAKD;;GAEG;AACH,qBAAa,eAAgB,YAAW,cAAc;IACpD,QAAQ,CAAC,SAAS,EAAG,OAAO,CAAU;IAEtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAK;IAC1C,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,aAAa,CAAqC;IAC1D,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAsC;IAEtE;;;;OAIG;gBACS,OAAO,EAAE,sBAAsB;IAI3C;;;;OAIG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM/C;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAYjC;;;;OAIG;IACG,SAAS,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAuB5C;;;;;;OAMG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAIjE;;;;;;;;OAQG;IACG,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,WAAW,EACpB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,CAAC;IAkCnB;;;;OAIG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAQhC,eAAe;YAqBf,oBAAoB;CAoBnC"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
2
|
+
import { StdioClientTransport, } from "@modelcontextprotocol/sdk/client/stdio.js";
|
|
3
|
+
const createRequestId = () => `mcp-stdio-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
|
|
4
|
+
/**
|
|
5
|
+
* MCP stdio 传输适配器。
|
|
6
|
+
*/
|
|
7
|
+
export class McpStdioAdapter {
|
|
8
|
+
transport = "stdio";
|
|
9
|
+
options;
|
|
10
|
+
maxReconnectAttempts = 3;
|
|
11
|
+
client = null;
|
|
12
|
+
transportImpl = null;
|
|
13
|
+
reconnecting = false;
|
|
14
|
+
closedManually = false;
|
|
15
|
+
connected = false;
|
|
16
|
+
serverUri = "";
|
|
17
|
+
pendingRequests = new Map();
|
|
18
|
+
/**
|
|
19
|
+
* 创建 stdio MCP 适配器。
|
|
20
|
+
*
|
|
21
|
+
* @param options stdio 启动参数
|
|
22
|
+
*/
|
|
23
|
+
constructor(options) {
|
|
24
|
+
this.options = options;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* 建立 MCP 连接。
|
|
28
|
+
*
|
|
29
|
+
* @param serverUri 服务端 URI(可留空)
|
|
30
|
+
*/
|
|
31
|
+
async connect(serverUri) {
|
|
32
|
+
this.serverUri = serverUri;
|
|
33
|
+
this.closedManually = false;
|
|
34
|
+
await this.connectInternal();
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* 断开连接。
|
|
38
|
+
*/
|
|
39
|
+
async disconnect() {
|
|
40
|
+
this.closedManually = true;
|
|
41
|
+
this.connected = false;
|
|
42
|
+
for (const controller of this.pendingRequests.values()) {
|
|
43
|
+
controller.abort(new Error("MCP stdio adapter disconnected"));
|
|
44
|
+
}
|
|
45
|
+
this.pendingRequests.clear();
|
|
46
|
+
await this.transportImpl?.close().catch(() => undefined);
|
|
47
|
+
this.transportImpl = null;
|
|
48
|
+
this.client = null;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* 列出远端工具并映射为引擎 ToolDescriptor。
|
|
52
|
+
*
|
|
53
|
+
* @returns 工具描述符数组
|
|
54
|
+
*/
|
|
55
|
+
async listTools() {
|
|
56
|
+
if (!this.client) {
|
|
57
|
+
throw new Error("MCP stdio adapter not connected");
|
|
58
|
+
}
|
|
59
|
+
const response = await this.client.listTools();
|
|
60
|
+
return response.tools.map((tool) => ({
|
|
61
|
+
kind: "tool",
|
|
62
|
+
name: tool.name,
|
|
63
|
+
description: tool.description ?? `mcp tool: ${tool.name}`,
|
|
64
|
+
sideEffect: tool.annotations?.readOnlyHint
|
|
65
|
+
? "readonly"
|
|
66
|
+
: tool.annotations?.destructiveHint
|
|
67
|
+
? "irreversible"
|
|
68
|
+
: "write",
|
|
69
|
+
idempotent: tool.annotations?.idempotentHint ?? false,
|
|
70
|
+
requiresApproval: tool.annotations?.destructiveHint ?? false,
|
|
71
|
+
timeout: 30_000,
|
|
72
|
+
inputSchema: tool.inputSchema,
|
|
73
|
+
outputSchema: tool.outputSchema,
|
|
74
|
+
execute: `mcp:${this.options.serverId ?? "stdio"}:${tool.name}`,
|
|
75
|
+
}));
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* 调用远端工具(core 协议方法)。
|
|
79
|
+
*
|
|
80
|
+
* @param name 工具名
|
|
81
|
+
* @param input 入参
|
|
82
|
+
* @returns 工具执行结果
|
|
83
|
+
*/
|
|
84
|
+
async executeTool(name, input) {
|
|
85
|
+
return this.callTool(name, input);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* 调用远端工具(支持 AbortSignal)。
|
|
89
|
+
*
|
|
90
|
+
* @param name 工具名
|
|
91
|
+
* @param input 入参
|
|
92
|
+
* @param signal 取消信号
|
|
93
|
+
* @param requestId 请求 ID(可选;用于后续 cancel 显式取消)
|
|
94
|
+
* @returns 工具执行结果
|
|
95
|
+
*/
|
|
96
|
+
async callTool(name, input, signal, requestId) {
|
|
97
|
+
if (!this.client) {
|
|
98
|
+
throw new Error("MCP stdio adapter not connected");
|
|
99
|
+
}
|
|
100
|
+
const mappedRequestId = requestId?.trim() ? requestId : createRequestId();
|
|
101
|
+
if (this.pendingRequests.has(mappedRequestId)) {
|
|
102
|
+
throw new Error(`MCP stdio request already in progress: ${mappedRequestId}`);
|
|
103
|
+
}
|
|
104
|
+
const controller = new AbortController();
|
|
105
|
+
const onAbort = () => {
|
|
106
|
+
controller.abort(signal?.reason ?? new Error(`MCP stdio request aborted: ${mappedRequestId}`));
|
|
107
|
+
};
|
|
108
|
+
if (signal?.aborted) {
|
|
109
|
+
onAbort();
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
113
|
+
}
|
|
114
|
+
this.pendingRequests.set(mappedRequestId, controller);
|
|
115
|
+
try {
|
|
116
|
+
const result = await this.client.callTool({ name, arguments: (input ?? {}) }, undefined, { signal: controller.signal });
|
|
117
|
+
return result;
|
|
118
|
+
}
|
|
119
|
+
finally {
|
|
120
|
+
signal?.removeEventListener("abort", onAbort);
|
|
121
|
+
this.pendingRequests.delete(mappedRequestId);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* 按 requestId 取消请求(通过信号机制由调用方透传)。
|
|
126
|
+
*
|
|
127
|
+
* @param _requestId 请求 ID
|
|
128
|
+
*/
|
|
129
|
+
async cancel(requestId) {
|
|
130
|
+
const controller = this.pendingRequests.get(requestId);
|
|
131
|
+
if (!controller) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
controller.abort(new Error(`MCP stdio request cancelled: ${requestId}`));
|
|
135
|
+
}
|
|
136
|
+
async connectInternal() {
|
|
137
|
+
const serverParams = {
|
|
138
|
+
command: this.options.command,
|
|
139
|
+
...(this.options.args ? { args: this.options.args } : {}),
|
|
140
|
+
...(this.options.env ? { env: this.options.env } : {}),
|
|
141
|
+
...(this.options.cwd ? { cwd: this.options.cwd } : {}),
|
|
142
|
+
stderr: "pipe",
|
|
143
|
+
};
|
|
144
|
+
this.client = new Client({ name: "tachu-mcp-stdio", version: "1.0.0" });
|
|
145
|
+
this.transportImpl = new StdioClientTransport(serverParams);
|
|
146
|
+
this.transportImpl.onclose = () => {
|
|
147
|
+
this.connected = false;
|
|
148
|
+
if (!this.closedManually) {
|
|
149
|
+
void this.reconnectWithBackoff();
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
await this.client.connect(this.transportImpl);
|
|
153
|
+
this.connected = true;
|
|
154
|
+
}
|
|
155
|
+
async reconnectWithBackoff() {
|
|
156
|
+
if (this.reconnecting || this.closedManually) {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
this.reconnecting = true;
|
|
160
|
+
try {
|
|
161
|
+
for (let attempt = 0; attempt < this.maxReconnectAttempts; attempt += 1) {
|
|
162
|
+
const delay = 200 * 2 ** attempt;
|
|
163
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
164
|
+
try {
|
|
165
|
+
await this.connectInternal();
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
// retry
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
finally {
|
|
174
|
+
this.reconnecting = false;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=stdio-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdio-adapter.js","sourceRoot":"","sources":["../../src/mcp/stdio-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { EngineEvent, ObservabilityEmitter } from "@tachu/core";
|
|
2
|
+
type EventHandler = (event: EngineEvent) => void;
|
|
3
|
+
interface JsonlEmitterOptions {
|
|
4
|
+
filePath: string;
|
|
5
|
+
rotateSize?: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* JSON Lines 文件事件发射器。
|
|
9
|
+
*/
|
|
10
|
+
export declare class JsonlEmitter implements ObservabilityEmitter {
|
|
11
|
+
private readonly handlers;
|
|
12
|
+
private readonly filePath;
|
|
13
|
+
private readonly rotateSize;
|
|
14
|
+
private masker;
|
|
15
|
+
private writeQueue;
|
|
16
|
+
/**
|
|
17
|
+
* 创建 JSONL 发射器。
|
|
18
|
+
*
|
|
19
|
+
* @param options 文件配置
|
|
20
|
+
*/
|
|
21
|
+
constructor(options: JsonlEmitterOptions);
|
|
22
|
+
/**
|
|
23
|
+
* 订阅事件。
|
|
24
|
+
*
|
|
25
|
+
* @param type 事件类型
|
|
26
|
+
* @param handler 处理器
|
|
27
|
+
* @returns 取消订阅函数
|
|
28
|
+
*/
|
|
29
|
+
on(type: EngineEvent["type"] | "*", handler: EventHandler): () => void;
|
|
30
|
+
/**
|
|
31
|
+
* 取消订阅。
|
|
32
|
+
*
|
|
33
|
+
* @param type 事件类型
|
|
34
|
+
* @param handler 处理器
|
|
35
|
+
*/
|
|
36
|
+
off(type: EngineEvent["type"] | "*", handler: EventHandler): void;
|
|
37
|
+
/**
|
|
38
|
+
* 发射并持久化事件。
|
|
39
|
+
*
|
|
40
|
+
* @param event 引擎事件
|
|
41
|
+
*/
|
|
42
|
+
emit(event: EngineEvent): void;
|
|
43
|
+
/**
|
|
44
|
+
* 设置脱敏函数。
|
|
45
|
+
*
|
|
46
|
+
* @param masker 脱敏函数
|
|
47
|
+
*/
|
|
48
|
+
setMasker(masker: (payload: unknown) => unknown): void;
|
|
49
|
+
/**
|
|
50
|
+
* 等待队列写入完成。
|
|
51
|
+
*/
|
|
52
|
+
dispose(): Promise<void>;
|
|
53
|
+
private emitToSubscribers;
|
|
54
|
+
private append;
|
|
55
|
+
private rotateIfNeeded;
|
|
56
|
+
}
|
|
57
|
+
export {};
|
|
58
|
+
//# sourceMappingURL=jsonl-emitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonl-emitter.d.ts","sourceRoot":"","sources":["../../src/observability/jsonl-emitter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAErE,KAAK,YAAY,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;AAEjD,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,YAAa,YAAW,oBAAoB;IACvD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2D;IACpF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,MAAM,CAAuD;IACrE,OAAO,CAAC,UAAU,CAAqB;IAEvC;;;;OAIG;gBACS,OAAO,EAAE,mBAAmB;IAKxC;;;;;;OAMG;IACH,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,GAAG,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM,IAAI;IAOtE;;;;;OAKG;IACH,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,GAAG,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI;IAQjE;;;;OAIG;IACH,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAS9B;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,GAAG,IAAI;IAItD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,OAAO,CAAC,iBAAiB;YASX,MAAM;YAMN,cAAc;CAQ7B"}
|