From 7e4c81f2eaf4ec3a002921e4f5a96e927c3b8598 Mon Sep 17 00:00:00 2001 From: Fang_Zhijian Date: Fri, 28 Mar 2025 18:14:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E6=8C=89=E5=9B=9E?= =?UTF-8?q?=E8=BD=A6=E5=8F=91=E9=80=81=E5=92=8C=E6=A3=80=E6=9F=A5=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- extension.json | 2 +- iframe/index.html | 581 ++++++++++++++++++++++++---------------------- package-lock.json | 16 +- package.json | 4 +- src/index.ts | 70 +++++- 5 files changed, 375 insertions(+), 298 deletions(-) diff --git a/extension.json b/extension.json index b27116f..0c82d17 100644 --- a/extension.json +++ b/extension.json @@ -3,7 +3,7 @@ "uuid": "30c8ce0d81f546fea716ea111c508ab2", "displayName": "EDA Copilot", "description": "嘉立创 EDA 多模态大模型 AI 助手", - "version": "1.1.0", + "version": "1.1.1", "publisher": "Mr_Fang ", "engines": { "eda": "^2.2.37" diff --git a/iframe/index.html b/iframe/index.html index 5f0fc8e..b696b16 100644 --- a/iframe/index.html +++ b/iframe/index.html @@ -1,301 +1,328 @@ - + - - - - EDA Copilot - - - - - - -
-
设置
-
- - + + + + EDA Copilot + + + + + + +
+
设置
+
+ + - - + + - - -
- + - + - + -
- - -
-
- -
-
模型
-
- - -
-
- - -
-
- -
- -
-
新的聊天
-
测试
-
- -
-
-
有什么可以帮你的吗?
-
预设提示词
+ + +
+
+ + +
+
+ +
+
模型
+
+ + +
+
+ + +
+
+ +
+ +
+
新的聊天
+
测试
+
+ +
+
+
有什么可以帮你的吗?
+
预设提示词
+
+
+ +
-
- - -
+ - + - - - + if (FILE_BASE64 !== null) { + parts.push({ inline_data: { mime_type: 'application/pdf', data: FILE_BASE64 } }); + FILE_BASE64 = null; + } + chatHistory.push({ role: 'user', parts: parts }); + } else if (MODEL_GROUP === 'DeepSeek' || (MODEL_GROUP === 'QWen' && MODEL_NAME !== 'qwen-vl-max-latest')) { + chatHistory.push({ role: 'user', content: message }); + } else if (MODEL_GROUP === 'Custom' || (MODEL_GROUP === 'QWen' && MODEL_NAME === 'qwen-vl-max-latest')) { + let contents = []; + image = document.getElementById('paste-image').style.backgroundImage; + image = image.replace('url("', '').replace('")', '').replace('data:image/png;base64,', ''); + if (image) { + showImage = true; + contents.push({ type: 'image_url', image_url: { url: 'data:image/png;base64,' + image } }); + document.getElementById('paste-image').style.backgroundImage = ''; + document.getElementsByClassName('paste-image-group')[0].style.display = 'none'; + } + contents.push({ type: 'text', text: message }); + chatHistory.push({ role: 'user', content: contents }); + } - - + document.addEventListener('paste', function (event) { + const items = (event.clipboardData || window.clipboardData).items; + for (let i = 0; i < items.length; i++) { + if (items[i].type.indexOf('image') !== -1) { + const blob = items[i].getAsFile(); + const reader = new FileReader(); + reader.onload = function (event) { + const pasteImage = document.getElementById('paste-image'); + if (pasteImage) { + pasteImage.parentElement.style.display = 'block'; + pasteImage.style.backgroundImage = `url(${event.target.result})`; + } + }; + reader.readAsDataURL(blob); + } + } + }); + + document.getElementById('paste-image-delete-btn').addEventListener('click', function () { + const pasteImage = document.getElementById('paste-image'); + if (pasteImage) { + pasteImage.parentElement.style.display = 'none'; + pasteImage.style.backgroundImage = ''; + } + }); + + + + diff --git a/package-lock.json b/package-lock.json index e227b8f..d4c808f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,18 +1,18 @@ { - "name": "eext-eda-copilot", - "version": "1.1.0", + "name": "eda-copilot", + "version": "1.1.1", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "eext-eda-copilot", - "version": "1.1.0", + "name": "eda-copilot", + "version": "1.1.1", "license": "GNU GPLv3", "dependencies": { "@google/generative-ai": "^0.21.0" }, "devDependencies": { - "@jlceda/pro-api-types": "^0.1.132", + "@jlceda/pro-api-types": "^0.1.136", "@microsoft/tsdoc": "^0.15.0", "@trivago/prettier-plugin-sort-imports": "^4.3.0", "@types/fs-extra": "^11.0.4", @@ -1000,9 +1000,9 @@ } }, "node_modules/@jlceda/pro-api-types": { - "version": "0.1.132", - "resolved": "https://registry.npmjs.org/@jlceda/pro-api-types/-/pro-api-types-0.1.132.tgz", - "integrity": "sha512-Qb9xVUR8SSRPkedp253XrUkjcW/mS7d+TcOkgPsF6GFL9FJ4gT624WAKXg7rOxxIXstfPD++7fmNpZqWeh30JQ==", + "version": "0.1.137", + "resolved": "https://registry.npmjs.org/@jlceda/pro-api-types/-/pro-api-types-0.1.137.tgz", + "integrity": "sha512-QchyQva2Kj+H4qx4J+3pYNjnarYJ15ghEUG30fpQqC+QXzB3iUg40f47razD/v//xM11vdLp1zurthpRcPG3yg==", "dev": true }, "node_modules/@jridgewell/gen-mapping": { diff --git a/package.json b/package.json index d3ace28..a3818bd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "eda-copilot", - "version": "1.1.0", + "version": "1.1.1", "description": "EDA Copilot", "author": "Mr_Fang ", "license": "GNU GPLv3", @@ -14,7 +14,7 @@ "build": "npm run compile && ts-node ./build/packaged.ts" }, "devDependencies": { - "@jlceda/pro-api-types": "^0.1.132", + "@jlceda/pro-api-types": "^0.1.136", "@microsoft/tsdoc": "^0.15.0", "@trivago/prettier-plugin-sort-imports": "^4.3.0", "@types/fs-extra": "^11.0.4", diff --git a/src/index.ts b/src/index.ts index 8935cff..783c9fa 100644 --- a/src/index.ts +++ b/src/index.ts @@ -16,18 +16,68 @@ import * as extensionConfig from '../extension.json'; export function activate(status?: 'onStartupFinished', arg?: string): void {} export function openAbout(): void { - eda.sys_Dialog.showInformationMessage( - extensionConfig.description + '\n' + - '版本:' + extensionConfig.version + '\n' + - '作者:' + extensionConfig.publisher + '\n' + - '————————————————————\n' + - '本拓展使用 ' + extensionConfig.license + ' 开源许可协议\n' + - '开源:' + extensionConfig.homepage + '\n' + - '反馈:' + extensionConfig.bugs + '\n', - '关于 ' + extensionConfig.displayName - ); + eda.sys_ClientUrl.request('https://api.github.com/repos/klxf/eda-copilot/releases/latest').then(async (res) => { + let updateTip = ''; + if (res.status === 200) { + console.log('检查更新成功'); + const data = JSON.parse(await res.text()); + // 比较版本号 + const latestVersion = data.tag_name; + if (compareVersions(extensionConfig.version, latestVersion.replaceAll('v', '')) < 0) { + updateTip = '(存在新版本' + latestVersion + ')'; + } else { + updateTip = '(已是最新版本)'; + } + } else { + console.log('检查更新失败'); + updateTip = '(检查更新失败)'; + } + + eda.sys_Dialog.showInformationMessage( + extensionConfig.description + + '\n' + + '版本:' + + extensionConfig.version + + updateTip + + '\n' + + '作者:' + + extensionConfig.publisher + + '\n' + + '————————————————————\n' + + '本拓展使用 ' + + extensionConfig.license + + ' 开源许可协议\n' + + '开源:' + + extensionConfig.homepage + + '\n' + + '反馈:' + + extensionConfig.bugs + + '\n', + '关于 ' + extensionConfig.displayName, + ); + }); } export function openIframe(): void { eda.sys_IFrame.openIFrame('/iframe/index.html', 400, 600); } + +function compareVersions(version1: string, version2: string): number { + const v1Parts = version1.split('.'); + const v2Parts = version2.split('.'); + + const maxLength = Math.max(v1Parts.length, v2Parts.length); + + for (let i = 0; i < maxLength; i++) { + const part1 = parseInt(v1Parts[i] || '0', 10); + const part2 = parseInt(v2Parts[i] || '0', 10); + + if (part1 < part2) { + return -1; // 后者版本号更高 + } else if (part1 > part2) { + return 1; // 前者版本号更高 + } + } + + return 0; // 两个版本号相等 +}