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.
Files changed (170) hide show
  1. package/main.js +59 -0
  2. package/package.json +5 -2
  3. package/renderer/CascadiaCode.woff2 +0 -0
  4. package/renderer/animation.css +121 -0
  5. package/renderer/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  6. package/renderer/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  7. package/renderer/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  8. package/renderer/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  9. package/renderer/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  10. package/renderer/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  11. package/renderer/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  12. package/renderer/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  13. package/renderer/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  14. package/renderer/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  15. package/renderer/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  16. package/renderer/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  17. package/renderer/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  18. package/renderer/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  19. package/renderer/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  20. package/renderer/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  21. package/renderer/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  22. package/renderer/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  23. package/renderer/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  24. package/renderer/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  25. package/renderer/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  26. package/renderer/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  27. package/renderer/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  28. package/renderer/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  29. package/renderer/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  30. package/renderer/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  31. package/renderer/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  32. package/renderer/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  33. package/renderer/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  34. package/renderer/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  35. package/renderer/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  36. package/renderer/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  37. package/renderer/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  38. package/renderer/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  39. package/renderer/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  40. package/renderer/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  41. package/renderer/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  42. package/renderer/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  43. package/renderer/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  44. package/renderer/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  45. package/renderer/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  46. package/renderer/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  47. package/renderer/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  48. package/renderer/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  49. package/renderer/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  50. package/renderer/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  51. package/renderer/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  52. package/renderer/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  53. package/renderer/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  54. package/renderer/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  55. package/renderer/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  56. package/renderer/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  57. package/renderer/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  58. package/renderer/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  59. package/renderer/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  60. package/renderer/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  61. package/renderer/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  62. package/renderer/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  63. package/renderer/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  64. package/renderer/assets/index-3W5tQSKs.js +447 -0
  65. package/renderer/assets/style-DX4gh5fe.css +1 -0
  66. package/renderer/default-dark.css +772 -0
  67. package/renderer/default-light.css +777 -0
  68. package/renderer/favicon.png +0 -0
  69. package/renderer/iconfont.css +219 -0
  70. package/renderer/iconfont.woff2 +0 -0
  71. package/renderer/images/deepseek.com.ico +0 -0
  72. package/renderer/images/grok.com.png +0 -0
  73. package/renderer/images/gstatic.com.svg +22 -0
  74. package/renderer/images/kimichat.cn.png +0 -0
  75. package/renderer/images/mistral.ai.ico +0 -0
  76. package/renderer/images/ollama.png +0 -0
  77. package/renderer/images/openai.com.ico +0 -0
  78. package/renderer/images/openmcp-qq-qrcode.jpg +0 -0
  79. package/renderer/images/openmcp.png +0 -0
  80. package/renderer/images/openmcp.svg +22 -0
  81. package/renderer/images/perplexity.ai.ico +0 -0
  82. package/renderer/index.html +19 -0
  83. package/renderer/mcp.css +230 -0
  84. package/renderer/sf-mono-regular.woff2 +0 -0
  85. package/renderer/vscode.css +149 -0
  86. package/service/common/index.d.ts +1 -2
  87. package/service/common/index.d.ts.map +1 -1
  88. package/service/common/index.dto.d.ts +7 -3
  89. package/service/common/index.dto.d.ts.map +1 -1
  90. package/service/common/index.dto.js +1 -2
  91. package/service/common/index.js +4 -8
  92. package/service/common/router.d.ts +7 -7
  93. package/service/common/router.d.ts.map +1 -1
  94. package/service/common/router.js +18 -22
  95. package/service/hook/adapter.d.ts +10 -17
  96. package/service/hook/adapter.d.ts.map +1 -1
  97. package/service/hook/adapter.js +31 -51
  98. package/service/hook/axios-fetch.d.ts +7 -0
  99. package/service/hook/axios-fetch.d.ts.map +1 -0
  100. package/service/hook/axios-fetch.js +162 -0
  101. package/service/hook/db.d.ts.map +1 -1
  102. package/service/hook/db.js +11 -50
  103. package/service/hook/llm.d.ts.map +1 -1
  104. package/service/hook/llm.js +49 -4
  105. package/service/hook/setting.js +6 -11
  106. package/service/hook/types.js +1 -2
  107. package/service/hook/util.d.ts +2 -0
  108. package/service/hook/util.d.ts.map +1 -0
  109. package/service/hook/util.js +1 -0
  110. package/service/index.d.ts +4 -4
  111. package/service/index.d.ts.map +1 -1
  112. package/service/index.js +4 -14
  113. package/service/llm/llm.controller.d.ts +9 -4
  114. package/service/llm/llm.controller.d.ts.map +1 -1
  115. package/service/llm/llm.controller.js +27 -20
  116. package/service/llm/llm.dto.d.ts +15 -0
  117. package/service/llm/llm.dto.d.ts.map +1 -1
  118. package/service/llm/llm.dto.js +1 -2
  119. package/service/llm/llm.service.d.ts +3 -3
  120. package/service/llm/llm.service.d.ts.map +1 -1
  121. package/service/llm/llm.service.js +48 -28
  122. package/service/main.d.ts +7 -0
  123. package/service/main.d.ts.map +1 -0
  124. package/service/main.js +107 -0
  125. package/service/mcp/auth.service.d.ts +23 -0
  126. package/service/mcp/auth.service.d.ts.map +1 -0
  127. package/service/mcp/auth.service.js +158 -0
  128. package/service/mcp/client.controller.d.ts +146 -40
  129. package/service/mcp/client.controller.d.ts.map +1 -1
  130. package/service/mcp/client.controller.js +34 -31
  131. package/service/mcp/client.dto.d.ts +4 -3
  132. package/service/mcp/client.dto.d.ts.map +1 -1
  133. package/service/mcp/client.dto.js +1 -2
  134. package/service/mcp/client.service.d.ts +140 -32
  135. package/service/mcp/client.service.d.ts.map +1 -1
  136. package/service/mcp/client.service.js +55 -22
  137. package/service/mcp/connect.controller.d.ts +5 -5
  138. package/service/mcp/connect.controller.d.ts.map +1 -1
  139. package/service/mcp/connect.controller.js +28 -15
  140. package/service/mcp/connect.service.d.ts +7 -5
  141. package/service/mcp/connect.service.d.ts.map +1 -1
  142. package/service/mcp/connect.service.js +235 -27
  143. package/service/mcp/ocr.controller.d.ts +3 -4
  144. package/service/mcp/ocr.controller.d.ts.map +1 -1
  145. package/service/mcp/ocr.controller.js +11 -15
  146. package/service/mcp/ocr.dto.js +1 -2
  147. package/service/mcp/ocr.service.d.ts +2 -2
  148. package/service/mcp/ocr.service.d.ts.map +1 -1
  149. package/service/mcp/ocr.service.js +21 -64
  150. package/service/panel/panel.controller.d.ts +9 -9
  151. package/service/panel/panel.controller.d.ts.map +1 -1
  152. package/service/panel/panel.controller.js +28 -26
  153. package/service/panel/panel.dto.js +1 -2
  154. package/service/panel/panel.service.d.ts +3 -3
  155. package/service/panel/panel.service.d.ts.map +1 -1
  156. package/service/panel/panel.service.js +7 -44
  157. package/service/server.d.ts +7 -0
  158. package/service/server.d.ts.map +1 -0
  159. package/service/server.js +131 -0
  160. package/service/setting/setting.controller.d.ts +7 -7
  161. package/service/setting/setting.controller.d.ts.map +1 -1
  162. package/service/setting/setting.controller.js +15 -21
  163. package/service/setting/setting.dto.js +1 -2
  164. package/service/setting/setting.service.d.ts +1 -1
  165. package/service/setting/setting.service.d.ts.map +1 -1
  166. package/service/setting/setting.service.js +14 -49
  167. package/task-loop.d.ts +87 -3
  168. package/task-loop.js +8480 -205
  169. package/tools.js +8 -1
  170. package/task-loop.js.map +0 -1
@@ -1,7 +1,4 @@
1
- "use strict";
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',
@@ -1,13 +1,8 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RUNNING_CWD = exports.VSCODE_WORKSPACE = void 0;
4
- exports.setVscodeWorkspace = setVscodeWorkspace;
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
- exports.RUNNING_CWD = path;
6
+ export function setRunningCWD(path) {
7
+ RUNNING_CWD = path;
13
8
  }
@@ -1,2 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ export {};
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/hook/util.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ export {};
@@ -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 { client } from './mcp/connect.service';
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
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEnE,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC"}
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
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.client = exports.setRunningCWD = exports.setVscodeWorkspace = exports.TaskLoopAdapter = exports.VSCodeWebViewLike = exports.routeMessage = void 0;
4
- var router_1 = require("./common/router");
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 { RequestClientType } from "../common";
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(client: RequestClientType, data: any, webview: PostMessageble): Promise<{
5
+ chatCompletion(data: RequestData, webview: PostMessageble): Promise<{
5
6
  code: number;
6
7
  msg: string;
7
8
  }>;
8
- abortChatCompletion(client: RequestClientType, data: any, webview: PostMessageble): Promise<import("../common/index.dto").RestfulResponse>;
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":"AAAA,OAAO,EAAc,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGjD,qBAAa,aAAa;IAGhB,cAAc,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,cAAc;;;;IAgC5E,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,cAAc;CAI1F"}
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
- Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.LlmController = void 0;
19
- const common_1 = require("../common");
20
- const llm_service_1 = require("./llm.service");
21
- class LlmController {
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 (0, llm_service_1.streamingChatCompletion)(data, webview);
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(client, data, webview) {
40
+ abortChatCompletion(data, webview) {
50
41
  return __awaiter(this, void 0, void 0, function* () {
51
- return (0, llm_service_1.abortMessageService)(data, webview);
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
- (0, common_1.Controller)('llm/chat/completions')
61
+ Controller('llm/chat/completions')
58
62
  ], LlmController.prototype, "chatCompletion", null);
59
63
  __decorate([
60
- (0, common_1.Controller)('llm/chat/completions/abort')
64
+ Controller('llm/chat/completions/abort')
61
65
  ], LlmController.prototype, "abortChatCompletion", null);
66
+ __decorate([
67
+ Controller('llm/models')
68
+ ], LlmController.prototype, "getModels", null);
@@ -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"}
@@ -1,2 +1 @@
1
- "use strict";
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,iBAAiB,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAqB,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAKtD,eAAO,IAAI,aAAa,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,IAAW,CAAC;AAE3D,wBAAsB,uBAAuB,CACzC,IAAI,EAAE,GAAG,EACT,OAAO,EAAE,cAAc,iBA0E1B;AAID,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,cAAc,GAAG,eAAe,CAYvF;AA0CD,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,EAAE,iBAyBlE"}
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
- Object.defineProperty(exports, "__esModule", { value: true });
19
- exports.currentStream = void 0;
20
- exports.streamingChatCompletion = streamingChatCompletion;
21
- exports.abortMessageService = abortMessageService;
22
- exports.postProcessMessages = postProcessMessages;
23
- const openai_1 = require("openai");
24
- const db_1 = require("../hook/db");
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
- let { baseURL, apiKey, model, messages, temperature, tools = [] } = data;
31
- const client = new openai_1.OpenAI({
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
- if (tools.length === 0) {
36
- tools = undefined;
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
- tool_choice: 'auto',
45
- web_search_options: {},
64
+ tools: seriableTools,
65
+ parallel_tool_calls: seriableParallelToolCalls,
46
66
  stream: true
47
67
  });
48
68
  // 存储当前的流式传输对象
49
- exports.currentStream = stream;
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 (!exports.currentStream) {
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 (exports.currentStream) {
128
+ export function abortMessageService(data, webview) {
129
+ if (currentStream) {
110
130
  // 标记流已中止
111
- exports.currentStream = null;
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 db_1.ocrDB.findById(rawContent.data);
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 = ocr_service_1.ocrWorkerStorage.get(workerId);
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,7 @@
1
+ export interface VSCodeMessage {
2
+ command: string;
3
+ data?: unknown;
4
+ callbackId?: string;
5
+ }
6
+ export type MessageHandler = (message: VSCodeMessage) => void;
7
+ //# sourceMappingURL=main.d.ts.map
@@ -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"}
@@ -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"}