openmcp-sdk 0.0.3 → 0.0.5
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/main.js +59 -0
- package/package.json +5 -2
- package/renderer/CascadiaCode.woff2 +0 -0
- package/renderer/animation.css +121 -0
- package/renderer/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/renderer/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/renderer/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/renderer/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/renderer/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/renderer/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/renderer/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/renderer/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/renderer/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/renderer/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/renderer/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/renderer/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/renderer/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/renderer/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/renderer/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/renderer/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/renderer/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/renderer/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/renderer/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/renderer/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/renderer/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/renderer/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/renderer/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/renderer/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/renderer/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/renderer/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/renderer/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/renderer/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/renderer/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/renderer/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/renderer/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/renderer/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/renderer/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/renderer/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/renderer/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/renderer/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/renderer/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/renderer/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/renderer/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/renderer/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/renderer/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/renderer/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/renderer/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/renderer/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/renderer/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/renderer/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/renderer/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/renderer/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/renderer/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/renderer/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/renderer/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/renderer/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/renderer/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/renderer/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/renderer/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/renderer/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/renderer/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/renderer/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/renderer/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/renderer/assets/index-3W5tQSKs.js +447 -0
- package/renderer/assets/style-DX4gh5fe.css +1 -0
- package/renderer/default-dark.css +772 -0
- package/renderer/default-light.css +777 -0
- package/renderer/favicon.png +0 -0
- package/renderer/iconfont.css +219 -0
- package/renderer/iconfont.woff2 +0 -0
- package/renderer/images/deepseek.com.ico +0 -0
- package/renderer/images/grok.com.png +0 -0
- package/renderer/images/gstatic.com.svg +22 -0
- package/renderer/images/kimichat.cn.png +0 -0
- package/renderer/images/mistral.ai.ico +0 -0
- package/renderer/images/ollama.png +0 -0
- package/renderer/images/openai.com.ico +0 -0
- package/renderer/images/openmcp-qq-qrcode.jpg +0 -0
- package/renderer/images/openmcp.png +0 -0
- package/renderer/images/openmcp.svg +22 -0
- package/renderer/images/perplexity.ai.ico +0 -0
- package/renderer/index.html +19 -0
- package/renderer/mcp.css +230 -0
- package/renderer/sf-mono-regular.woff2 +0 -0
- package/renderer/vscode.css +149 -0
- package/service/common/index.d.ts +1 -2
- package/service/common/index.d.ts.map +1 -1
- package/service/common/index.dto.d.ts +7 -3
- package/service/common/index.dto.d.ts.map +1 -1
- package/service/common/index.dto.js +1 -2
- package/service/common/index.js +4 -8
- package/service/common/router.d.ts +7 -7
- package/service/common/router.d.ts.map +1 -1
- package/service/common/router.js +18 -22
- package/service/hook/adapter.d.ts +10 -17
- package/service/hook/adapter.d.ts.map +1 -1
- package/service/hook/adapter.js +31 -51
- package/service/hook/axios-fetch.d.ts +7 -0
- package/service/hook/axios-fetch.d.ts.map +1 -0
- package/service/hook/axios-fetch.js +162 -0
- package/service/hook/db.d.ts.map +1 -1
- package/service/hook/db.js +11 -50
- package/service/hook/llm.d.ts.map +1 -1
- package/service/hook/llm.js +49 -4
- package/service/hook/setting.js +6 -11
- package/service/hook/types.js +1 -2
- package/service/hook/util.d.ts +2 -0
- package/service/hook/util.d.ts.map +1 -0
- package/service/hook/util.js +1 -0
- package/service/index.d.ts +4 -4
- package/service/index.d.ts.map +1 -1
- package/service/index.js +4 -14
- package/service/llm/llm.controller.d.ts +9 -4
- package/service/llm/llm.controller.d.ts.map +1 -1
- package/service/llm/llm.controller.js +27 -20
- package/service/llm/llm.dto.d.ts +15 -0
- package/service/llm/llm.dto.d.ts.map +1 -1
- package/service/llm/llm.dto.js +1 -2
- package/service/llm/llm.service.d.ts +3 -3
- package/service/llm/llm.service.d.ts.map +1 -1
- package/service/llm/llm.service.js +48 -28
- package/service/main.d.ts +7 -0
- package/service/main.d.ts.map +1 -0
- package/service/main.js +107 -0
- package/service/mcp/auth.service.d.ts +23 -0
- package/service/mcp/auth.service.d.ts.map +1 -0
- package/service/mcp/auth.service.js +158 -0
- package/service/mcp/client.controller.d.ts +146 -40
- package/service/mcp/client.controller.d.ts.map +1 -1
- package/service/mcp/client.controller.js +34 -31
- package/service/mcp/client.dto.d.ts +4 -3
- package/service/mcp/client.dto.d.ts.map +1 -1
- package/service/mcp/client.dto.js +1 -2
- package/service/mcp/client.service.d.ts +140 -32
- package/service/mcp/client.service.d.ts.map +1 -1
- package/service/mcp/client.service.js +55 -22
- package/service/mcp/connect.controller.d.ts +5 -5
- package/service/mcp/connect.controller.d.ts.map +1 -1
- package/service/mcp/connect.controller.js +28 -15
- package/service/mcp/connect.service.d.ts +7 -5
- package/service/mcp/connect.service.d.ts.map +1 -1
- package/service/mcp/connect.service.js +235 -27
- package/service/mcp/ocr.controller.d.ts +3 -4
- package/service/mcp/ocr.controller.d.ts.map +1 -1
- package/service/mcp/ocr.controller.js +11 -15
- package/service/mcp/ocr.dto.js +1 -2
- package/service/mcp/ocr.service.d.ts +2 -2
- package/service/mcp/ocr.service.d.ts.map +1 -1
- package/service/mcp/ocr.service.js +21 -64
- package/service/panel/panel.controller.d.ts +9 -9
- package/service/panel/panel.controller.d.ts.map +1 -1
- package/service/panel/panel.controller.js +28 -26
- package/service/panel/panel.dto.js +1 -2
- package/service/panel/panel.service.d.ts +3 -3
- package/service/panel/panel.service.d.ts.map +1 -1
- package/service/panel/panel.service.js +7 -44
- package/service/server.d.ts +7 -0
- package/service/server.d.ts.map +1 -0
- package/service/server.js +131 -0
- package/service/setting/setting.controller.d.ts +7 -7
- package/service/setting/setting.controller.d.ts.map +1 -1
- package/service/setting/setting.controller.js +15 -21
- package/service/setting/setting.dto.js +1 -2
- package/service/setting/setting.service.d.ts +1 -1
- package/service/setting/setting.service.d.ts.map +1 -1
- package/service/setting/setting.service.js +14 -49
- package/task-loop.d.ts +87 -3
- package/task-loop.js +8480 -205
- package/tools.js +8 -1
- package/task-loop.js.map +0 -1
package/service/hook/llm.js
CHANGED
@@ -1,7 +1,4 @@
|
|
1
|
-
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.llms = void 0;
|
4
|
-
exports.llms = [
|
1
|
+
export const llms = [
|
5
2
|
{
|
6
3
|
id: 'deepseek',
|
7
4
|
name: 'DeepSeek',
|
@@ -26,6 +23,54 @@ exports.llms = [
|
|
26
23
|
userToken: '',
|
27
24
|
userModel: 'gpt-4-turbo'
|
28
25
|
},
|
26
|
+
{
|
27
|
+
id: 'qwen',
|
28
|
+
name: '通义千问 Qwen',
|
29
|
+
baseUrl: 'https://dashscope.aliyuncs.com/compatible-mode/v1',
|
30
|
+
models: ['qwen-max', 'qwen-plus', 'qwen-turbo', 'qwen-long', 'qwen-omni-turbo', 'qwen-omni-turbo-realtime'],
|
31
|
+
provider: 'Alibaba',
|
32
|
+
isOpenAICompatible: true,
|
33
|
+
description: '阿里巴巴通义千问',
|
34
|
+
website: 'https://help.aliyun.com/zh/model-studio/models#cfc131abafghw',
|
35
|
+
userToken: '',
|
36
|
+
userModel: 'qwen-plus'
|
37
|
+
},
|
38
|
+
{
|
39
|
+
id: 'doubao',
|
40
|
+
name: '豆包 Seed',
|
41
|
+
baseUrl: 'https://ark.cn-beijing.volces.com/api/v3',
|
42
|
+
models: ['doubao-1.5-pro-32k', 'doubao-1.5-pro-256k', 'doubao-1.5-lite', 'deepseek-v3'],
|
43
|
+
provider: 'bytedance',
|
44
|
+
isOpenAICompatible: true,
|
45
|
+
description: '字节跳动豆包 Seed',
|
46
|
+
website: 'https://help.aliyun.com/zh/model-studio/models#cfc131abafghw',
|
47
|
+
userToken: '',
|
48
|
+
userModel: 'doubao-1.5-pro-32k'
|
49
|
+
},
|
50
|
+
{
|
51
|
+
id: 'gemini',
|
52
|
+
name: 'Gemini',
|
53
|
+
baseUrl: 'https://generativelanguage.googleapis.com/v1beta/openai/',
|
54
|
+
models: ['gemini-2.0-flash', 'gemini-2.5-flash-preview-05-20', 'gemini-2.5-pro-preview-05-06'],
|
55
|
+
provider: 'google',
|
56
|
+
isOpenAICompatible: true,
|
57
|
+
description: 'Google Gemini',
|
58
|
+
website: 'https://ai.google.dev/gemini-api/docs/models?hl=zh-cn%2F%2Fgemini-2.5-pro-preview-05-06#gemini-2.5-pro-preview-05-06',
|
59
|
+
userToken: '',
|
60
|
+
userModel: 'gemini-2.0-flash'
|
61
|
+
},
|
62
|
+
{
|
63
|
+
id: 'grok',
|
64
|
+
name: 'Grok',
|
65
|
+
baseUrl: 'https://api.x.ai/v1',
|
66
|
+
models: ['grok-3', 'grok-3-fast', 'grok-3-mini', 'grok-3-mini-fast'],
|
67
|
+
provider: 'xai',
|
68
|
+
isOpenAICompatible: true,
|
69
|
+
description: 'xAI Grok',
|
70
|
+
website: 'https://docs.x.ai/docs/models',
|
71
|
+
userToken: '',
|
72
|
+
userModel: 'grok-3-mini'
|
73
|
+
},
|
29
74
|
{
|
30
75
|
id: 'mistral',
|
31
76
|
name: 'Mistral',
|
package/service/hook/setting.js
CHANGED
@@ -1,13 +1,8 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
exports.setRunningCWD = setRunningCWD;
|
6
|
-
exports.VSCODE_WORKSPACE = '';
|
7
|
-
exports.RUNNING_CWD = '';
|
8
|
-
function setVscodeWorkspace(workspace) {
|
9
|
-
exports.VSCODE_WORKSPACE = workspace;
|
1
|
+
export let VSCODE_WORKSPACE = '';
|
2
|
+
export let RUNNING_CWD = '';
|
3
|
+
export function setVscodeWorkspace(workspace) {
|
4
|
+
VSCODE_WORKSPACE = workspace;
|
10
5
|
}
|
11
|
-
function setRunningCWD(path) {
|
12
|
-
|
6
|
+
export function setRunningCWD(path) {
|
7
|
+
RUNNING_CWD = path;
|
13
8
|
}
|
package/service/hook/types.js
CHANGED
@@ -1,2 +1 @@
|
|
1
|
-
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
1
|
+
export {};
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/hook/util.ts"],"names":[],"mappings":""}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
package/service/index.d.ts
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
export { routeMessage } from './common/router';
|
2
|
-
export { VSCodeWebViewLike, TaskLoopAdapter } from './hook/adapter';
|
3
|
-
export { setVscodeWorkspace, setRunningCWD } from './hook/setting';
|
4
|
-
export {
|
1
|
+
export { routeMessage } from './common/router.js';
|
2
|
+
export { VSCodeWebViewLike, TaskLoopAdapter } from './hook/adapter.js';
|
3
|
+
export { setVscodeWorkspace, setRunningCWD } from './hook/setting.js';
|
4
|
+
export { clientMap } from './mcp/connect.service.js';
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
package/service/index.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC"}
|
package/service/index.js
CHANGED
@@ -1,14 +1,4 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
Object.defineProperty(exports, "routeMessage", { enumerable: true, get: function () { return router_1.routeMessage; } });
|
6
|
-
var adapter_1 = require("./hook/adapter");
|
7
|
-
Object.defineProperty(exports, "VSCodeWebViewLike", { enumerable: true, get: function () { return adapter_1.VSCodeWebViewLike; } });
|
8
|
-
Object.defineProperty(exports, "TaskLoopAdapter", { enumerable: true, get: function () { return adapter_1.TaskLoopAdapter; } });
|
9
|
-
var setting_1 = require("./hook/setting");
|
10
|
-
Object.defineProperty(exports, "setVscodeWorkspace", { enumerable: true, get: function () { return setting_1.setVscodeWorkspace; } });
|
11
|
-
Object.defineProperty(exports, "setRunningCWD", { enumerable: true, get: function () { return setting_1.setRunningCWD; } });
|
12
|
-
// TODO: 更加规范
|
13
|
-
var connect_service_1 = require("./mcp/connect.service");
|
14
|
-
Object.defineProperty(exports, "client", { enumerable: true, get: function () { return connect_service_1.client; } });
|
1
|
+
export { routeMessage } from './common/router.js';
|
2
|
+
export { VSCodeWebViewLike, TaskLoopAdapter } from './hook/adapter.js';
|
3
|
+
export { setVscodeWorkspace, setRunningCWD } from './hook/setting.js';
|
4
|
+
export { clientMap } from './mcp/connect.service.js';
|
@@ -1,10 +1,15 @@
|
|
1
|
-
import {
|
2
|
-
import { PostMessageble } from "../hook/adapter";
|
1
|
+
import { RequestData } from "../common/index.dto.js";
|
2
|
+
import { PostMessageble } from "../hook/adapter.js";
|
3
|
+
import { OpenAI } from "openai";
|
3
4
|
export declare class LlmController {
|
4
|
-
chatCompletion(
|
5
|
+
chatCompletion(data: RequestData, webview: PostMessageble): Promise<{
|
5
6
|
code: number;
|
6
7
|
msg: string;
|
7
8
|
}>;
|
8
|
-
abortChatCompletion(
|
9
|
+
abortChatCompletion(data: RequestData, webview: PostMessageble): Promise<import("../common/index.dto.js").RestfulResponse>;
|
10
|
+
getModels(data: RequestData, webview: PostMessageble): Promise<{
|
11
|
+
code: number;
|
12
|
+
msg: OpenAI.Models.Model[];
|
13
|
+
}>;
|
9
14
|
}
|
10
15
|
//# sourceMappingURL=llm.controller.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"llm.controller.d.ts","sourceRoot":"","sources":["../../src/llm/llm.controller.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"llm.controller.d.ts","sourceRoot":"","sources":["../../src/llm/llm.controller.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGpD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,qBAAa,aAAa;IAGhB,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc;;;;IAuBzD,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc;IAM9D,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc;;;;CAmB7D"}
|
@@ -1,4 +1,3 @@
|
|
1
|
-
"use strict";
|
2
1
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
3
2
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
4
3
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
@@ -14,22 +13,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
14
13
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
15
14
|
});
|
16
15
|
};
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
chatCompletion(client, data, webview) {
|
16
|
+
import { Controller } from "../common/index.js";
|
17
|
+
import { abortMessageService, streamingChatCompletion } from "./llm.service.js";
|
18
|
+
import { OpenAI } from "openai";
|
19
|
+
export class LlmController {
|
20
|
+
chatCompletion(data, webview) {
|
23
21
|
return __awaiter(this, void 0, void 0, function* () {
|
24
|
-
let { tools = [] } = data;
|
25
|
-
if (tools.length > 0 && !client) {
|
26
|
-
return {
|
27
|
-
code: 501,
|
28
|
-
msg: 'mcp client 尚未连接'
|
29
|
-
};
|
30
|
-
}
|
31
22
|
try {
|
32
|
-
yield
|
23
|
+
yield streamingChatCompletion(data, webview);
|
33
24
|
}
|
34
25
|
catch (error) {
|
35
26
|
console.log('error' + error);
|
@@ -46,16 +37,32 @@ class LlmController {
|
|
46
37
|
};
|
47
38
|
});
|
48
39
|
}
|
49
|
-
abortChatCompletion(
|
40
|
+
abortChatCompletion(data, webview) {
|
50
41
|
return __awaiter(this, void 0, void 0, function* () {
|
51
|
-
return
|
42
|
+
return abortMessageService(data, webview);
|
43
|
+
});
|
44
|
+
}
|
45
|
+
getModels(data, webview) {
|
46
|
+
return __awaiter(this, void 0, void 0, function* () {
|
47
|
+
const { baseURL, apiKey, proxyServer } = data;
|
48
|
+
const client = new OpenAI({
|
49
|
+
apiKey,
|
50
|
+
baseURL,
|
51
|
+
});
|
52
|
+
const models = yield client.models.list();
|
53
|
+
return {
|
54
|
+
code: 200,
|
55
|
+
msg: models.data
|
56
|
+
};
|
52
57
|
});
|
53
58
|
}
|
54
59
|
}
|
55
|
-
exports.LlmController = LlmController;
|
56
60
|
__decorate([
|
57
|
-
|
61
|
+
Controller('llm/chat/completions')
|
58
62
|
], LlmController.prototype, "chatCompletion", null);
|
59
63
|
__decorate([
|
60
|
-
|
64
|
+
Controller('llm/chat/completions/abort')
|
61
65
|
], LlmController.prototype, "abortChatCompletion", null);
|
66
|
+
__decorate([
|
67
|
+
Controller('llm/models')
|
68
|
+
], LlmController.prototype, "getModels", null);
|
package/service/llm/llm.dto.d.ts
CHANGED
@@ -5,4 +5,19 @@ export type MyMessageType = OpenAI.Chat.ChatCompletionMessageParam & {
|
|
5
5
|
export type MyToolMessageType = OpenAI.Chat.ChatCompletionToolMessageParam & {
|
6
6
|
extraInfo?: any;
|
7
7
|
};
|
8
|
+
export interface OpenMcpChatOption {
|
9
|
+
baseURL: string;
|
10
|
+
apiKey: string;
|
11
|
+
model: string;
|
12
|
+
messages: any[];
|
13
|
+
temperature?: number;
|
14
|
+
tools?: any[];
|
15
|
+
parallelToolCalls?: boolean;
|
16
|
+
}
|
17
|
+
export interface MyStream<T> extends AsyncIterable<T> {
|
18
|
+
[Symbol.asyncIterator](): AsyncIterator<T>;
|
19
|
+
controller: {
|
20
|
+
abort(): void;
|
21
|
+
};
|
22
|
+
}
|
8
23
|
//# sourceMappingURL=llm.dto.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"llm.dto.d.ts","sourceRoot":"","sources":["../../src/llm/llm.dto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,0BAA0B,GAAG;IACpE,SAAS,CAAC,EAAE,GAAG,CAAC;CAChB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,8BAA8B,GAAG;IAC5E,SAAS,CAAC,EAAE,GAAG,CAAC;CAChB,CAAA"}
|
1
|
+
{"version":3,"file":"llm.dto.d.ts","sourceRoot":"","sources":["../../src/llm/llm.dto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,0BAA0B,GAAG;IACpE,SAAS,CAAC,EAAE,GAAG,CAAC;CAChB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,8BAA8B,GAAG;IAC5E,SAAS,CAAC,EAAE,GAAG,CAAC;CAChB,CAAA;AAED,MAAM,WAAW,iBAAiB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,GAAG,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;IACd,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,QAAQ,CAAC,CAAC,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACjD,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;IAC3C,UAAU,EAAE;QACR,KAAK,IAAI,IAAI,CAAC;KACjB,CAAC;CACL"}
|
package/service/llm/llm.dto.js
CHANGED
@@ -1,2 +1 @@
|
|
1
|
-
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
1
|
+
export {};
|
@@ -1,6 +1,6 @@
|
|
1
|
-
import { PostMessageble } from "../hook/adapter";
|
2
|
-
import { MyMessageType } from "./llm.dto";
|
3
|
-
import { RestfulResponse } from "../common/index.dto";
|
1
|
+
import { PostMessageble } from "../hook/adapter.js";
|
2
|
+
import { MyMessageType } from "./llm.dto.js";
|
3
|
+
import { RestfulResponse } from "../common/index.dto.js";
|
4
4
|
export declare let currentStream: AsyncIterable<any> | null;
|
5
5
|
export declare function streamingChatCompletion(data: any, webview: PostMessageble): Promise<void>;
|
6
6
|
export declare function abortMessageService(data: any, webview: PostMessageble): RestfulResponse;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"llm.service.d.ts","sourceRoot":"","sources":["../../src/llm/llm.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,
|
1
|
+
{"version":3,"file":"llm.service.d.ts","sourceRoot":"","sources":["../../src/llm/llm.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAqB,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAOzD,eAAO,IAAI,aAAa,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,IAAW,CAAC;AAE3D,wBAAsB,uBAAuB,CACzC,IAAI,EAAE,GAAG,EACT,OAAO,EAAE,cAAc,iBAwH1B;AAID,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,cAAc,GAAG,eAAe,CAYvF;AA0CD,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,EAAE,iBAyBlE"}
|
@@ -1,4 +1,3 @@
|
|
1
|
-
"use strict";
|
2
1
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
2
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
3
|
return new (P || (P = Promise))(function (resolve, reject) {
|
@@ -15,45 +14,66 @@ var __asyncValues = (this && this.__asyncValues) || function (o) {
|
|
15
14
|
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
|
16
15
|
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
|
17
16
|
};
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
const ocr_service_1 = require("../mcp/ocr.service");
|
26
|
-
exports.currentStream = null;
|
27
|
-
function streamingChatCompletion(data, webview) {
|
17
|
+
import { OpenAI } from "openai";
|
18
|
+
import { ocrDB } from "../hook/db.js";
|
19
|
+
import { ocrWorkerStorage } from "../mcp/ocr.service.js";
|
20
|
+
import { axiosFetch } from "../hook/axios-fetch.js";
|
21
|
+
import Table from 'cli-table3';
|
22
|
+
export let currentStream = null;
|
23
|
+
export function streamingChatCompletion(data, webview) {
|
28
24
|
return __awaiter(this, void 0, void 0, function* () {
|
29
25
|
var _a, e_1, _b, _c;
|
30
|
-
|
31
|
-
|
26
|
+
const { baseURL, apiKey, model, messages, temperature, tools = [], parallelToolCalls = true, proxyServer = '' } = data;
|
27
|
+
// 创建请求参数表格
|
28
|
+
const requestTable = new Table({
|
29
|
+
head: ['Parameter', 'Value'],
|
30
|
+
colWidths: [20, 40],
|
31
|
+
style: {
|
32
|
+
head: ['cyan'],
|
33
|
+
border: ['grey']
|
34
|
+
}
|
35
|
+
});
|
36
|
+
requestTable.push(['Model', model], ['Base URL', baseURL || 'Default'], ['Temperature', temperature], ['Tools Count', tools.length], ['Parallel Tool Calls', parallelToolCalls], ['Proxy Server', proxyServer || 'No Proxy']);
|
37
|
+
console.log('\nOpenAI Request Parameters:');
|
38
|
+
console.log(requestTable.toString());
|
39
|
+
const client = new OpenAI({
|
32
40
|
baseURL,
|
33
|
-
apiKey
|
41
|
+
apiKey,
|
42
|
+
fetch: (input, init) => __awaiter(this, void 0, void 0, function* () {
|
43
|
+
if (model.startsWith('gemini') && init) {
|
44
|
+
// 该死的 google
|
45
|
+
init.headers = {
|
46
|
+
'Content-Type': 'application/json',
|
47
|
+
'Authorization': `Bearer ${apiKey}`
|
48
|
+
};
|
49
|
+
}
|
50
|
+
return yield axiosFetch(input, init, { proxyServer });
|
51
|
+
})
|
34
52
|
});
|
35
|
-
|
36
|
-
|
37
|
-
|
53
|
+
const seriableTools = (tools.length === 0) ? undefined : tools;
|
54
|
+
const seriableParallelToolCalls = (tools.length === 0) ?
|
55
|
+
undefined : model.startsWith('gemini') ? undefined : parallelToolCalls;
|
38
56
|
yield postProcessMessages(messages);
|
57
|
+
// 使用表格渲染请求参数
|
58
|
+
console.log('seriableTools', seriableTools);
|
59
|
+
console.log('seriableParallelToolCalls', seriableParallelToolCalls);
|
39
60
|
const stream = yield client.chat.completions.create({
|
40
61
|
model,
|
41
62
|
messages,
|
42
63
|
temperature,
|
43
|
-
tools,
|
44
|
-
|
45
|
-
web_search_options: {},
|
64
|
+
tools: seriableTools,
|
65
|
+
parallel_tool_calls: seriableParallelToolCalls,
|
46
66
|
stream: true
|
47
67
|
});
|
48
68
|
// 存储当前的流式传输对象
|
49
|
-
|
69
|
+
currentStream = stream;
|
50
70
|
try {
|
51
71
|
// 流式传输结果
|
52
72
|
for (var _d = true, stream_1 = __asyncValues(stream), stream_1_1; stream_1_1 = yield stream_1.next(), _a = stream_1_1.done, !_a; _d = true) {
|
53
73
|
_c = stream_1_1.value;
|
54
74
|
_d = false;
|
55
75
|
const chunk = _c;
|
56
|
-
if (!
|
76
|
+
if (!currentStream) {
|
57
77
|
// 如果流被中止,则停止循环
|
58
78
|
// TODO: 为每一个标签页设置不同的 currentStream 管理器
|
59
79
|
stream.controller.abort();
|
@@ -105,10 +125,10 @@ function streamingChatCompletion(data, webview) {
|
|
105
125
|
});
|
106
126
|
}
|
107
127
|
// 处理中止消息的函数
|
108
|
-
function abortMessageService(data, webview) {
|
109
|
-
if (
|
128
|
+
export function abortMessageService(data, webview) {
|
129
|
+
if (currentStream) {
|
110
130
|
// 标记流已中止
|
111
|
-
|
131
|
+
currentStream = null;
|
112
132
|
}
|
113
133
|
return {
|
114
134
|
code: 200,
|
@@ -132,13 +152,13 @@ function postProcessToolMessages(message) {
|
|
132
152
|
// 2. 图片的 OCR 仍然在进行中
|
133
153
|
// 3. 图片已被删除
|
134
154
|
// rawContent.data 就是 filename
|
135
|
-
const result = yield
|
155
|
+
const result = yield ocrDB.findById(rawContent.data);
|
136
156
|
if (result) {
|
137
157
|
rawContent.text = result.text || '';
|
138
158
|
}
|
139
159
|
else if (rawContent._meta) {
|
140
160
|
const workerId = rawContent._meta.workerId;
|
141
|
-
const worker =
|
161
|
+
const worker = ocrWorkerStorage.get(workerId);
|
142
162
|
if (worker) {
|
143
163
|
const text = yield worker.fut;
|
144
164
|
rawContent.text = text;
|
@@ -153,7 +173,7 @@ function postProcessToolMessages(message) {
|
|
153
173
|
message.content = JSON.stringify(message.content);
|
154
174
|
});
|
155
175
|
}
|
156
|
-
function postProcessMessages(messages) {
|
176
|
+
export function postProcessMessages(messages) {
|
157
177
|
return __awaiter(this, void 0, void 0, function* () {
|
158
178
|
for (const message of messages) {
|
159
179
|
// 去除 extraInfo 属性
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAcD,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC"}
|
package/service/main.js
ADDED
@@ -0,0 +1,107 @@
|
|
1
|
+
import { WebSocketServer } from 'ws';
|
2
|
+
import { pino } from 'pino';
|
3
|
+
import { fileURLToPath } from 'url';
|
4
|
+
import { dirname } from 'path';
|
5
|
+
import { routeMessage } from './common/router.js';
|
6
|
+
import { VSCodeWebViewLike } from './hook/adapter.js';
|
7
|
+
import path from 'node:path';
|
8
|
+
import * as fs from 'node:fs';
|
9
|
+
import { setRunningCWD } from './hook/setting.js';
|
10
|
+
const logger = pino({
|
11
|
+
transport: {
|
12
|
+
target: 'pino-pretty', // 启用 pino-pretty
|
13
|
+
options: {
|
14
|
+
colorize: true, // 开启颜色
|
15
|
+
levelFirst: true, // 先打印日志级别
|
16
|
+
translateTime: 'SYS:yyyy-mm-dd HH:MM:ss', // 格式化时间
|
17
|
+
ignore: 'pid,hostname', // 忽略部分字段
|
18
|
+
}
|
19
|
+
}
|
20
|
+
});
|
21
|
+
function refreshConnectionOption(envPath) {
|
22
|
+
const serverPath = path.join(__dirname, '..', '..', 'servers');
|
23
|
+
const defaultOption = {
|
24
|
+
connectionType: 'STDIO',
|
25
|
+
commandString: 'mcp run main.py',
|
26
|
+
cwd: serverPath
|
27
|
+
};
|
28
|
+
fs.writeFileSync(envPath, JSON.stringify(defaultOption, null, 4));
|
29
|
+
return { items: [defaultOption] };
|
30
|
+
}
|
31
|
+
function acquireConnectionOption() {
|
32
|
+
const envPath = path.join(__dirname, '..', '.env');
|
33
|
+
if (!fs.existsSync(envPath)) {
|
34
|
+
return refreshConnectionOption(envPath);
|
35
|
+
}
|
36
|
+
try {
|
37
|
+
const option = JSON.parse(fs.readFileSync(envPath, 'utf-8'));
|
38
|
+
if (!option.items) {
|
39
|
+
return refreshConnectionOption(envPath);
|
40
|
+
}
|
41
|
+
if (option.items && option.items.length === 0) {
|
42
|
+
return refreshConnectionOption(envPath);
|
43
|
+
}
|
44
|
+
// 按照前端的规范,整理成 commandString 样式
|
45
|
+
option.items = option.items.map((item) => {
|
46
|
+
var _a;
|
47
|
+
if (item.connectionType === 'STDIO') {
|
48
|
+
item.commandString = (_a = [item.command, ...item.args]) === null || _a === void 0 ? void 0 : _a.join(' ');
|
49
|
+
}
|
50
|
+
else {
|
51
|
+
item.url = item.url;
|
52
|
+
}
|
53
|
+
return item;
|
54
|
+
});
|
55
|
+
return option;
|
56
|
+
}
|
57
|
+
catch (error) {
|
58
|
+
logger.error('读取 .env 配置文件');
|
59
|
+
return refreshConnectionOption(envPath);
|
60
|
+
}
|
61
|
+
}
|
62
|
+
function updateConnectionOption(data) {
|
63
|
+
const envPath = path.join(__dirname, '..', '.env');
|
64
|
+
const connection = { items: data };
|
65
|
+
fs.writeFileSync(envPath, JSON.stringify(connection, null, 4));
|
66
|
+
}
|
67
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
68
|
+
const devHome = path.join(__dirname, '..', '..');
|
69
|
+
setRunningCWD(devHome);
|
70
|
+
const wss = new WebSocketServer({ port: 8282 });
|
71
|
+
console.log('listen on ws://localhost:8282');
|
72
|
+
wss.on('connection', (ws) => {
|
73
|
+
// 仿造 webview 进行统一接口访问
|
74
|
+
const webview = new VSCodeWebViewLike(ws);
|
75
|
+
// 先发送成功建立的消息
|
76
|
+
webview.postMessage({
|
77
|
+
command: 'hello',
|
78
|
+
data: {
|
79
|
+
version: '0.0.1',
|
80
|
+
name: '消息桥连接完成'
|
81
|
+
}
|
82
|
+
});
|
83
|
+
const option = acquireConnectionOption();
|
84
|
+
// 注册消息接受的管线
|
85
|
+
webview.onDidReceiveMessage(message => {
|
86
|
+
logger.info(`command: [${message.command || 'No Command'}]`);
|
87
|
+
const { command, data } = message;
|
88
|
+
switch (command) {
|
89
|
+
case 'web/launch-signature':
|
90
|
+
const launchResult = {
|
91
|
+
code: 200,
|
92
|
+
msg: option.items
|
93
|
+
};
|
94
|
+
webview.postMessage({
|
95
|
+
command: 'web/launch-signature',
|
96
|
+
data: launchResult
|
97
|
+
});
|
98
|
+
break;
|
99
|
+
case 'web/update-connection-signature':
|
100
|
+
updateConnectionOption(data);
|
101
|
+
break;
|
102
|
+
default:
|
103
|
+
routeMessage(command, data, webview);
|
104
|
+
break;
|
105
|
+
}
|
106
|
+
});
|
107
|
+
});
|
@@ -0,0 +1,23 @@
|
|
1
|
+
import { OAuthClientProvider } from '@modelcontextprotocol/sdk/client/auth.js';
|
2
|
+
export declare class OAuthClient {
|
3
|
+
port: number;
|
4
|
+
callbackUrl: string;
|
5
|
+
constructor();
|
6
|
+
/**
|
7
|
+
* @description 开启本地服务器上,并监听OAuth回调请求,并解析授权码或错误信息
|
8
|
+
* @returns {Promise<string>} 返回授权码
|
9
|
+
* @throws {Error} 如果没有收到授权码或发生错误
|
10
|
+
*/
|
11
|
+
waitForOAuthCallback(): Promise<string>;
|
12
|
+
/**
|
13
|
+
* @description 获取Oauth认证provider
|
14
|
+
* @return {Promise<OAuthClientProvider>} 返回一个OAuthClientProvider实例
|
15
|
+
*/
|
16
|
+
getOAuthProvider(): Promise<OAuthClientProvider>;
|
17
|
+
/**
|
18
|
+
* @description 打开浏览器
|
19
|
+
* @param url 授权URL
|
20
|
+
*/
|
21
|
+
openBrowser(url: string): Promise<void>;
|
22
|
+
}
|
23
|
+
//# sourceMappingURL=auth.service.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"auth.service.d.ts","sourceRoot":"","sources":["../../src/mcp/auth.service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAmE/E,qBAAa,WAAW;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;;IAUpB;;;;OAIG;IAEU,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IA0DpD;;;OAGG;IACU,gBAAgB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAwB7D;;;OAGG;IAEU,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAIrD"}
|