From 60ac9fbc815dd0458832b009e8f47e5aae967980 Mon Sep 17 00:00:00 2001 From: fofolee Date: Thu, 20 Feb 2025 20:38:51 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0quickcommand.markdownParse?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=EF=BC=8C=E5=8F=AF=E8=A7=86=E5=8C=96=E7=BC=96?= =?UTF-8?q?=E6=8E=92=E6=94=AF=E6=8C=81=E8=A7=A3=E6=9E=90markdown?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 18 --------------- package.json | 1 - plugin/lib/quickcommand.js | 6 +++++ plugin/package-lock.json | 18 +++++++++++++++ plugin/package.json | 1 + plugin/preload.js | 1 + src/components/ai/AIAssistantSideBar.vue | 15 ------------ src/components/ai/AIChatHistory.vue | 3 +-- src/js/composer/commands/dataCommands.js | 23 +++++++++++++++++-- .../monaco/types/quickcommand.api.d.ts | 12 ++++++++++ 10 files changed, 60 insertions(+), 38 deletions(-) diff --git a/package-lock.json b/package-lock.json index 94198f7..97401d1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,6 @@ "core-js": "^3.6.5", "croner": "^4.3.9", "dompurify": "^3.2.4", - "marked": "^15.0.7", "monaco-editor": "^0.33.0", "monaco-editor-webpack-plugin": "^7.0.1", "picture-compressor": "^1.1.0", @@ -7024,18 +7023,6 @@ "sourcemap-codec": "^1.4.8" } }, - "node_modules/marked": { - "version": "15.0.7", - "resolved": "https://registry.npmmirror.com/marked/-/marked-15.0.7.tgz", - "integrity": "sha512-dgLIeKGLx5FwziAnsk4ONoGwHwGPJzselimvlVskE9XLN4Orv9u2VA3GWw/lYUqjfA0rUT/6fqKwfZJapP9BEg==", - "license": "MIT", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 18" - } - }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -16309,11 +16296,6 @@ "sourcemap-codec": "^1.4.8" } }, - "marked": { - "version": "15.0.7", - "resolved": "https://registry.npmmirror.com/marked/-/marked-15.0.7.tgz", - "integrity": "sha512-dgLIeKGLx5FwziAnsk4ONoGwHwGPJzselimvlVskE9XLN4Orv9u2VA3GWw/lYUqjfA0rUT/6fqKwfZJapP9BEg==" - }, "math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", diff --git a/package.json b/package.json index c5437be..1c9cb74 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,6 @@ "core-js": "^3.6.5", "croner": "^4.3.9", "dompurify": "^3.2.4", - "marked": "^15.0.7", "monaco-editor": "^0.33.0", "monaco-editor-webpack-plugin": "^7.0.1", "picture-compressor": "^1.1.0", diff --git a/plugin/lib/quickcommand.js b/plugin/lib/quickcommand.js index 66384b3..2cb45ad 100644 --- a/plugin/lib/quickcommand.js +++ b/plugin/lib/quickcommand.js @@ -5,6 +5,7 @@ const kill = require("tree-kill"); const iconv = require("iconv-lite"); const path = require("path"); const axios = require("axios"); +const marked = require("marked"); const { chat, getModels } = require("./ai"); window.getModelsFromAiApi = getModels; @@ -84,6 +85,11 @@ const quickcommand = { return new DOMParser().parseFromString(html, "text/html"); }, + // markdown 解析 + markdownParse: function (markdown) { + return marked.parse(markdown); + }, + // 下载文件 downloadFile: function (url, file) { return new Promise((reslove, reject) => { diff --git a/plugin/package-lock.json b/plugin/package-lock.json index 6a50566..5647d68 100644 --- a/plugin/package-lock.json +++ b/plugin/package-lock.json @@ -10,6 +10,7 @@ "crypto-js": "^4.2.0", "exif-reader": "^2.0.1", "iconv-lite": "^0.6.3", + "marked": "^15.0.7", "node-forge": "^1.3.1", "png2icons": "^2.0.1", "ses": "^1.10.0", @@ -141,6 +142,18 @@ "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", "license": "MIT" }, + "node_modules/marked": { + "version": "15.0.7", + "resolved": "https://registry.npmmirror.com/marked/-/marked-15.0.7.tgz", + "integrity": "sha512-dgLIeKGLx5FwziAnsk4ONoGwHwGPJzselimvlVskE9XLN4Orv9u2VA3GWw/lYUqjfA0rUT/6fqKwfZJapP9BEg==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -324,6 +337,11 @@ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" }, + "marked": { + "version": "15.0.7", + "resolved": "https://registry.npmmirror.com/marked/-/marked-15.0.7.tgz", + "integrity": "sha512-dgLIeKGLx5FwziAnsk4ONoGwHwGPJzselimvlVskE9XLN4Orv9u2VA3GWw/lYUqjfA0rUT/6fqKwfZJapP9BEg==" + }, "mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", diff --git a/plugin/package.json b/plugin/package.json index d1ef758..e1f3af2 100644 --- a/plugin/package.json +++ b/plugin/package.json @@ -5,6 +5,7 @@ "crypto-js": "^4.2.0", "exif-reader": "^2.0.1", "iconv-lite": "^0.6.3", + "marked": "^15.0.7", "node-forge": "^1.3.1", "png2icons": "^2.0.1", "ses": "^1.10.0", diff --git a/plugin/preload.js b/plugin/preload.js index f8b63c5..1dbf2ba 100644 --- a/plugin/preload.js +++ b/plugin/preload.js @@ -11,6 +11,7 @@ const http = require("http"); const https = require("https"); const url = require("url"); const crypto = require("crypto"); + require("ses"); const md5 = (input) => { return crypto.createHash("md5").update(input, "utf8").digest("hex"); diff --git a/src/components/ai/AIAssistantSideBar.vue b/src/components/ai/AIAssistantSideBar.vue index 2067a71..70a6512 100644 --- a/src/components/ai/AIAssistantSideBar.vue +++ b/src/components/ai/AIAssistantSideBar.vue @@ -83,8 +83,6 @@ import { defineComponent } from "vue"; import AISelector from "components/ai/AISelector.vue"; import AIChatHistory from "components/ai/AIChatHistory.vue"; -import { marked } from "marked"; -import DOMPurify from "dompurify"; const quickcommandApi = require(`!raw-loader!plugins/monaco/types/quickcommand.api.d.ts`) @@ -229,19 +227,6 @@ export default defineComponent({ this.autoUpdateCode = !this.autoUpdateCode; localStorage.setItem("ai_auto_update", this.autoUpdateCode); }, - getTrimContent(content) { - const markedContent = marked(content.trim()); - // 解决think标签被错误地包裹在

标签中 - const processedContent = markedContent - .replace("

", "

") - .replace("

", "

") - // 去除空的think标签 - .replace("\n\n", ""); - const purifiedContent = DOMPurify.sanitize(processedContent, { - ADD_TAGS: ["think"], - }); - return purifiedContent; - }, getRolePrompt(language) { const languageMap = { quickcommand: "NodeJS", diff --git a/src/components/ai/AIChatHistory.vue b/src/components/ai/AIChatHistory.vue index ebe0bc9..d7d7fbc 100644 --- a/src/components/ai/AIChatHistory.vue +++ b/src/components/ai/AIChatHistory.vue @@ -36,7 +36,6 @@