openmcp-sdk 0.0.5 → 0.0.7

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.
@@ -10,7 +10,7 @@
10
10
  <link rel="stylesheet" href="/animation.css">
11
11
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
12
12
  <title>OpenMCP 客户端</title>
13
- <script type="module" crossorigin src="/assets/index-3W5tQSKs.js"></script>
13
+ <script type="module" crossorigin src="/assets/index-Cv4IO6Jg.js"></script>
14
14
  <link rel="stylesheet" crossorigin href="/assets/style-DX4gh5fe.css">
15
15
  </head>
16
16
  <body>
@@ -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,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
+ {"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;AAMzD,eAAO,IAAI,aAAa,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,IAAW,CAAC;AAE3D,wBAAsB,uBAAuB,CACzC,IAAI,EAAE,GAAG,EACT,OAAO,EAAE,cAAc,iBA0G1B;AAID,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,cAAc,GAAG,eAAe,CAYvF;AA0CD,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,EAAE,iBAyBlE"}
@@ -17,7 +17,6 @@ var __asyncValues = (this && this.__asyncValues) || function (o) {
17
17
  import { OpenAI } from "openai";
18
18
  import { ocrDB } from "../hook/db.js";
19
19
  import { ocrWorkerStorage } from "../mcp/ocr.service.js";
20
- import { axiosFetch } from "../hook/axios-fetch.js";
21
20
  import Table from 'cli-table3';
22
21
  export let currentStream = null;
23
22
  export function streamingChatCompletion(data, webview) {
@@ -33,30 +32,25 @@ export function streamingChatCompletion(data, webview) {
33
32
  border: ['grey']
34
33
  }
35
34
  });
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
35
  const client = new OpenAI({
40
36
  baseURL,
41
37
  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
- })
52
38
  });
53
39
  const seriableTools = (tools.length === 0) ? undefined : tools;
54
40
  const seriableParallelToolCalls = (tools.length === 0) ?
55
41
  undefined : model.startsWith('gemini') ? undefined : parallelToolCalls;
56
42
  yield postProcessMessages(messages);
57
- // 使用表格渲染请求参数
58
- console.log('seriableTools', seriableTools);
59
- console.log('seriableParallelToolCalls', seriableParallelToolCalls);
43
+ // // 使用表格渲染请求参数
44
+ // requestTable.push(
45
+ // ['Model', model],
46
+ // ['Base URL', baseURL || 'Default'],
47
+ // ['Temperature', temperature],
48
+ // ['Tools Count', tools.length],
49
+ // ['Parallel Tool Calls', parallelToolCalls],
50
+ // ['Proxy Server', proxyServer || 'No Proxy']
51
+ // );
52
+ // console.log('\nOpenAI Request Parameters:');
53
+ // console.log(requestTable.toString());
60
54
  const stream = yield client.chat.completions.create({
61
55
  model,
62
56
  messages,
@@ -1 +1 @@
1
- {"version":3,"file":"connect.service.d.ts","sourceRoot":"","sources":["../../src/mcp/connect.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAK7C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGpD,eAAO,MAAM,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAa,CAAC;AACnE,wBAAgB,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAE1E;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAmBvG;AA8MD,wBAAsB,cAAc,CACnC,MAAM,EAAE,UAAU,EAClB,OAAO,CAAC,EAAE,cAAc,GACtB,OAAO,CAAC,eAAe,CAAC,CAiF1B"}
1
+ {"version":3,"file":"connect.service.d.ts","sourceRoot":"","sources":["../../src/mcp/connect.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAK7C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGpD,eAAO,MAAM,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAa,CAAC;AACnE,wBAAgB,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAE1E;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAmBvG;AA8MD,wBAAsB,cAAc,CACnC,MAAM,EAAE,UAAU,EAClB,OAAO,CAAC,EAAE,cAAc,GACtB,OAAO,CAAC,eAAe,CAAC,CA+E1B"}
package/task-loop.d.ts CHANGED
@@ -8,9 +8,9 @@ export interface TaskLoopOptions {
8
8
  maxEpochs?: number;
9
9
  maxJsonParseRetry?: number;
10
10
  adapter?: any;
11
+ verbose?: 0 | 1 | 2 | 3;
11
12
  }
12
13
 
13
-
14
14
  export interface SchemaProperty {
15
15
  title: string;
16
16
  type: string;
package/task-loop.js CHANGED
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const vue = require("vue");
4
4
  const elementPlus = require("./tools.js");
5
+ const chalk = require("chalk").default;
5
6
  var MessageState = /* @__PURE__ */ ((MessageState2) => {
6
7
  MessageState2["ServerError"] = "server internal error";
7
8
  MessageState2["ReceiveChunkError"] = "receive chunk error";
@@ -7827,9 +7828,16 @@ class McpClientAdapter {
7827
7828
  this.clients.push(client);
7828
7829
  const ok = await client.connect();
7829
7830
  if (ok) {
7830
- console.log(`${client.name} connected successfully ✅`);
7831
+ console.log(
7832
+ chalk.gray(`[${(/* @__PURE__ */ new Date()).toLocaleString()}]`),
7833
+ chalk.green(`🚀 [${client.name}] ${client.version} connected`)
7834
+ );
7831
7835
  } else {
7832
- console.log(`${client.name} connected failed ❌`);
7836
+ console.log(
7837
+ chalk.gray(`[${(/* @__PURE__ */ new Date()).toLocaleString()}]`),
7838
+ chalk.red(`× fail to connect `),
7839
+ chalk.red(JSON.stringify(client.connectionResult.logString, null, 2))
7840
+ );
7833
7841
  }
7834
7842
  allOk &&= ok;
7835
7843
  }
@@ -8055,7 +8063,6 @@ function deserializeToolCallResponse(toolArgs) {
8055
8063
  }
8056
8064
  function handleToolResponse(toolResponse) {
8057
8065
  if (typeof toolResponse === "string") {
8058
- redLog("error happen" + JSON.stringify(toolResponse));
8059
8066
  return {
8060
8067
  content: [{
8061
8068
  type: "error",
@@ -8120,7 +8127,12 @@ function getSystemPrompt(name) {
8120
8127
  }
8121
8128
  }
8122
8129
  class TaskLoop {
8123
- constructor(taskOptions = { maxEpochs: 20, maxJsonParseRetry: 3, adapter: void 0 }) {
8130
+ constructor(taskOptions = {
8131
+ maxEpochs: 20,
8132
+ maxJsonParseRetry: 3,
8133
+ adapter: void 0,
8134
+ verbose: 0
8135
+ }) {
8124
8136
  this.taskOptions = taskOptions;
8125
8137
  this.streamingContent = vue.ref("");
8126
8138
  this.streamingToolCalls = vue.ref([]);
@@ -8207,10 +8219,10 @@ class TaskLoop {
8207
8219
  this.handleChunkDeltaContent(chunk);
8208
8220
  this.handleChunkDeltaToolCalls(chunk, toolcallIndexAdapter);
8209
8221
  this.handleChunkUsage(chunk);
8210
- this.onChunk(chunk);
8222
+ this.consumeChunks(chunk);
8211
8223
  }, { once: false });
8212
8224
  const doneHandler = this.bridge.addCommandListener("llm/chat/completions/done", (data) => {
8213
- this.onDone();
8225
+ this.consumeDones();
8214
8226
  chunkHandler();
8215
8227
  errorHandler();
8216
8228
  resolve({
@@ -8218,7 +8230,7 @@ class TaskLoop {
8218
8230
  });
8219
8231
  }, { once: true });
8220
8232
  const errorHandler = this.bridge.addCommandListener("llm/chat/completions/error", (data) => {
8221
- this.onError({
8233
+ this.consumeErrors({
8222
8234
  state: MessageState.ReceiveChunkError,
8223
8235
  msg: data.msg || "请求模型服务时发生错误"
8224
8236
  });
@@ -8324,6 +8336,92 @@ class TaskLoop {
8324
8336
  registerOnToolCalled(handler) {
8325
8337
  this.onToolCalled = handler;
8326
8338
  }
8339
+ consumeErrors(error2) {
8340
+ const { verbose = 0 } = this.taskOptions;
8341
+ if (verbose > 0) {
8342
+ console.log(
8343
+ chalk.gray(`[${(/* @__PURE__ */ new Date()).toLocaleString()}]`),
8344
+ chalk.red("error happen in task loop "),
8345
+ chalk.red(error2.msg)
8346
+ );
8347
+ }
8348
+ return this.onError(error2);
8349
+ }
8350
+ consumeChunks(chunk) {
8351
+ const { verbose = 0 } = this.taskOptions;
8352
+ if (verbose > 1) {
8353
+ console.log(
8354
+ chalk.gray(`[${(/* @__PURE__ */ new Date()).toLocaleString()}]`),
8355
+ chalk.blue("receive chunk")
8356
+ );
8357
+ } else if (verbose > 2) {
8358
+ const delta = chunk.choices[0]?.delta;
8359
+ if (delta) {
8360
+ console.log(
8361
+ chalk.gray(`[${(/* @__PURE__ */ new Date()).toLocaleString()}]`),
8362
+ chalk.blue("receive chunk"),
8363
+ chalk.bold(JSON.stringify(delta, null, 2))
8364
+ );
8365
+ } else {
8366
+ console.log(
8367
+ chalk.gray(`[${(/* @__PURE__ */ new Date()).toLocaleString()}]`),
8368
+ chalk.blue("receive chunk"),
8369
+ chalk.blue("delta is empty")
8370
+ );
8371
+ }
8372
+ }
8373
+ return this.onChunk(chunk);
8374
+ }
8375
+ consumeToolCalls(toolCall) {
8376
+ const { verbose = 0 } = this.taskOptions;
8377
+ if (verbose > 0) {
8378
+ console.log(
8379
+ chalk.gray(`[${(/* @__PURE__ */ new Date()).toLocaleString()}]`),
8380
+ chalk.blueBright("🔧 calling tool"),
8381
+ chalk.blueBright(toolCall.function.name)
8382
+ );
8383
+ }
8384
+ return this.onToolCall(toolCall);
8385
+ }
8386
+ consumeToolCalleds(result) {
8387
+ const { verbose = 0 } = this.taskOptions;
8388
+ if (verbose > 0) {
8389
+ if (result.state === "success") {
8390
+ console.log(
8391
+ chalk.gray(`[${(/* @__PURE__ */ new Date()).toLocaleString()}]`),
8392
+ chalk.green("✓ call tools okey dockey"),
8393
+ chalk.green(result.state)
8394
+ );
8395
+ } else {
8396
+ console.log(
8397
+ chalk.gray(`[${(/* @__PURE__ */ new Date()).toLocaleString()}]`),
8398
+ chalk.red("× fail to call tools"),
8399
+ chalk.red(result.content.map((item) => item.text).join(", "))
8400
+ );
8401
+ }
8402
+ }
8403
+ return this.onToolCalled(result);
8404
+ }
8405
+ consumeEpochs() {
8406
+ const { verbose = 0 } = this.taskOptions;
8407
+ if (verbose > 0) {
8408
+ console.log(
8409
+ chalk.gray(`[${(/* @__PURE__ */ new Date()).toLocaleString()}]`),
8410
+ chalk.blue("task loop enters a new epoch")
8411
+ );
8412
+ }
8413
+ return this.onEpoch();
8414
+ }
8415
+ consumeDones() {
8416
+ const { verbose = 0 } = this.taskOptions;
8417
+ if (verbose > 0) {
8418
+ console.log(
8419
+ chalk.gray(`[${(/* @__PURE__ */ new Date()).toLocaleString()}]`),
8420
+ chalk.green("task loop finish a epoch")
8421
+ );
8422
+ }
8423
+ return this.onDone();
8424
+ }
8327
8425
  setMaxEpochs(maxEpochs) {
8328
8426
  this.taskOptions.maxEpochs = maxEpochs;
8329
8427
  }
@@ -8389,15 +8487,18 @@ class TaskLoop {
8389
8487
  }
8390
8488
  });
8391
8489
  let jsonParseErrorRetryCount = 0;
8392
- const maxEpochs = this.taskOptions.maxEpochs || 20;
8490
+ const {
8491
+ maxEpochs = 20,
8492
+ verbose = 0
8493
+ } = this.taskOptions || {};
8393
8494
  for (let i = 0; i < maxEpochs; ++i) {
8394
- this.onEpoch();
8495
+ this.consumeEpochs();
8395
8496
  this.streamingContent.value = "";
8396
8497
  this.streamingToolCalls.value = [];
8397
8498
  this.completionUsage = void 0;
8398
8499
  const chatData = this.makeChatData(tabStorage);
8399
8500
  if (!chatData) {
8400
- this.onDone();
8501
+ this.consumeDones();
8401
8502
  break;
8402
8503
  }
8403
8504
  this.currentChatId = chatData.id;
@@ -8415,11 +8516,17 @@ class TaskLoop {
8415
8516
  serverName: this.getLlmConfig().id || "unknown"
8416
8517
  }
8417
8518
  });
8418
- pinkLog("调用工具数量:" + this.streamingToolCalls.value.length);
8519
+ if (verbose > 0) {
8520
+ console.log(
8521
+ chalk.gray(`[${(/* @__PURE__ */ new Date()).toLocaleString()}]`),
8522
+ chalk.yellow("🤖 llm wants to call these tools"),
8523
+ chalk.yellow(this.streamingToolCalls.value.map((tool) => tool.function.name || "").join(", "))
8524
+ );
8525
+ }
8419
8526
  for (let toolCall of this.streamingToolCalls.value || []) {
8420
- toolCall = this.onToolCall(toolCall);
8527
+ toolCall = this.consumeToolCalls(toolCall);
8421
8528
  let toolCallResult = await handleToolCalls(toolCall);
8422
- toolCallResult = this.onToolCalled(toolCallResult);
8529
+ toolCallResult = this.consumeToolCalleds(toolCallResult);
8423
8530
  if (toolCallResult.state === MessageState.ParseJsonError) {
8424
8531
  tabStorage.messages.pop();
8425
8532
  jsonParseErrorRetryCount++;
package/tools.mjs ADDED
@@ -0,0 +1,10 @@
1
+ const ElMessage = {
2
+ error: console.error,
3
+ warning: console.warn,
4
+ info: console.info,
5
+ success: console.log
6
+ }
7
+
8
+ export {
9
+ ElMessage
10
+ };