diff --git a/.npmrc b/.npmrc index 654bcc0a10..d29ef04d06 100644 --- a/.npmrc +++ b/.npmrc @@ -1,4 +1,4 @@ electron_mirror=https://npmmirror.com/mirrors/electron/ -shamefully-hoist=true +#shamefully-hoist=true strict-peer-dependencies=false -auto-install-peers=true \ No newline at end of file +auto-install-peers=true diff --git a/electron.vite.config.ts b/electron.vite.config.ts index 705c093132..d056ec8d22 100644 --- a/electron.vite.config.ts +++ b/electron.vite.config.ts @@ -90,6 +90,7 @@ export default defineConfig({ } }, optimizeDeps: { + include: ['react', 'react-dom', 'react/jsx-runtime', 'react/jsx-dev-runtime'], exclude: ['pyodide'], esbuildOptions: { target: 'esnext' // for dev diff --git a/package.json b/package.json index 4622fb2ade..6377ee4506 100644 --- a/package.json +++ b/package.json @@ -97,6 +97,7 @@ "@agentic/tavily": "^7.3.3", "@ai-sdk/amazon-bedrock": "^3.0.61", "@ai-sdk/anthropic": "^2.0.49", + "@ai-sdk/azure": "2.0.91", "@ai-sdk/cerebras": "^1.0.31", "@ai-sdk/gateway": "^2.0.15", "@ai-sdk/google": "2.0.49", @@ -105,7 +106,11 @@ "@ai-sdk/mistral": "^2.0.24", "@ai-sdk/openai": "2.0.85", "@ai-sdk/perplexity": "^2.0.20", + "@ai-sdk/provider": "^2.0.1", + "@ai-sdk/provider-utils": "3.0.20", "@ai-sdk/test-server": "^0.0.1", + "@ai-sdk/xai": "^2.0.43", + "@ant-design/cssinjs": "^1.21.1", "@ant-design/v5-patch-for-react-19": "^1.0.3", "@anthropic-ai/sdk": "^0.41.0", "@anthropic-ai/vertex-sdk": "0.11.4", @@ -125,9 +130,19 @@ "@cherrystudio/embedjs-loader-web": "^0.1.31", "@cherrystudio/embedjs-loader-xml": "^0.1.31", "@cherrystudio/embedjs-ollama": "^0.1.31", + "@opentelemetry/context-async-hooks": "2.2.0", "@cherrystudio/embedjs-openai": "^0.1.31", + "@cherrystudio/embedjs-interfaces": "^0.1.33", + "@cherrystudio/embedjs-utils": "^0.1.33", + "md5": "2.3.0", + "adm-zip": "0.5.16", + "form-data": "4.0.5", "@cherrystudio/extension-table-plus": "workspace:^", + "@ant-design/icons": "6.1.0", "@cherrystudio/openai": "6.15.0", + "@codemirror/lang-json": "^6.0.1", + "@codemirror/lint": "^6.8.5", + "@codemirror/view": "^6.38.1", "@dnd-kit/core": "^6.3.1", "@dnd-kit/modifiers": "^9.0.0", "@dnd-kit/sortable": "^10.0.0", @@ -140,6 +155,7 @@ "@emotion/is-prop-valid": "^1.3.1", "@eslint-react/eslint-plugin": "^1.36.1", "@eslint/js": "^9.22.0", + "@floating-ui/dom": "^1.6.14", "@google/genai": "1.0.1", "@hello-pangea/dnd": "^18.0.1", "@kangfenmao/keyv-storage": "^0.1.0", @@ -171,10 +187,13 @@ "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.3.0", "@testing-library/user-event": "^14.6.1", + "@tiptap/core": "^3.2.0", + "@tiptap/extension-code-block": "^3.2.0", "@tiptap/extension-collaboration": "^3.2.0", "@tiptap/extension-drag-handle": "3.2.0", "@tiptap/extension-drag-handle-react": "^3.2.0", "@tiptap/extension-image": "^3.2.0", + "@tiptap/extension-link": "^3.2.0", "@tiptap/extension-list": "^3.2.0", "@tiptap/extension-mathematics": "^3.2.0", "@tiptap/extension-mention": "^3.2.0", @@ -196,11 +215,13 @@ "@types/dotenv": "^8.2.3", "@types/express": "^5", "@types/fs-extra": "^11", + "@types/hast": "^3.0.4", "@types/he": "^1", "@types/html-to-text": "^9", "@types/js-yaml": "^4.0.9", "@types/lodash": "^4.17.5", "@types/markdown-it": "^14", + "@types/mdast": "^4.0.4", "@types/md5": "^2.3.5", "@types/mime-types": "^3", "@types/node": "^22.17.1", @@ -214,6 +235,7 @@ "@types/swagger-ui-express": "^4.1.8", "@types/tinycolor2": "^1", "@types/turndown": "^5.0.5", + "@types/unist": "^3.0.3", "@types/uuid": "^10.0.0", "@types/word-extractor": "^1", "@typescript/native-preview": "latest", @@ -242,6 +264,8 @@ "cli-progress": "^3.12.0", "clsx": "^2.1.1", "code-inspector-plugin": "^0.20.14", + "codemirror-lang-mermaid": "^0.5.0", + "builder-util-runtime": "9.3.1", "color": "^5.0.0", "concurrently": "^9.2.1", "country-flag-emoji-polyfill": "0.1.8", @@ -251,6 +275,7 @@ "diff": "^8.0.2", "docx": "^9.0.2", "dompurify": "^3.2.6", + "dotenv": "^16.4.7", "dotenv-cli": "^7.4.2", "drizzle-kit": "^0.31.4", "drizzle-orm": "^0.44.5", @@ -275,7 +300,7 @@ "fast-diff": "^1.3.0", "fast-xml-parser": "^5.2.0", "fetch-socks": "1.3.2", - "framer-motion": "^12.23.12", + "framer-motion": "^12.23.26", "franc-min": "^6.2.0", "fs-extra": "^11.2.0", "google-auth-library": "^9.15.1", @@ -291,6 +316,10 @@ "isbinaryfile": "5.0.4", "jaison": "^2.0.2", "jest-styled-components": "^7.2.0", + "js-base64": "^3.7.7", + "json-schema": "^0.4.0", + "katex": "^0.16.19", + "ky": "^1.7.3", "linguist-languages": "^8.1.0", "lint-staged": "^15.5.0", "lodash": "^4.17.21", @@ -301,15 +330,18 @@ "mermaid": "^11.10.1", "mime": "^4.0.4", "mime-types": "^3.0.1", - "motion": "^12.10.5", + "motion": "^12.23.26", + "nanoid": "^5.0.9", "notion-helper": "^1.3.22", "npx-scope-finder": "^1.2.0", "ollama-ai-provider-v2": "1.5.5", "oxlint": "^1.22.0", "oxlint-tsgolint": "^0.2.0", "p-queue": "^8.1.0", + "pako": "^2.1.0", "pdf-lib": "^1.17.1", "pdf-parse": "^1.1.1", + "prosemirror-model": "^1.24.4", "proxy-agent": "^6.5.0", "react": "^19.2.0", "react-dom": "^19.2.0", @@ -321,6 +353,9 @@ "react-markdown": "^10.1.0", "react-player": "^3.3.1", "react-redux": "^9.1.2", + "rc-input": "^1.8.0", + "rc-select": "14.16.8", + "rc-virtual-list": "^3.19.2", "react-router": "6", "react-router-dom": "6", "react-spinners": "^0.14.1", @@ -337,6 +372,8 @@ "remark-gfm": "^4.0.1", "remark-github-blockquote-alert": "^2.0.0", "remark-math": "^6.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", "remove-markdown": "^0.6.2", "rollup-plugin-visualizer": "^5.12.0", "shiki": "^3.12.0", @@ -348,6 +385,10 @@ "tailwind-merge": "^3.3.1", "tailwindcss": "^4.1.13", "tar": "^7.4.3", + "semver": "7.7.3", + "chalk": "5.6.2", + "cors": "2.8.5", + "@langchain/textsplitters": "1.0.1", "tiny-pinyin": "^1.3.2", "tokenx": "^1.1.0", "tsx": "^4.20.3", @@ -356,6 +397,7 @@ "typescript": "~5.8.2", "undici": "6.21.2", "unified": "^11.0.5", + "unist-util-visit": "^5.0.0", "uuid": "^13.0.0", "vite": "npm:rolldown-vite@7.3.0", "vitest": "^3.2.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 366ff85f60..29d31d9b1e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -172,6 +172,9 @@ importers: '@ai-sdk/anthropic': specifier: ^2.0.49 version: 2.0.57(zod@4.3.4) + '@ai-sdk/azure': + specifier: 2.0.91 + version: 2.0.91(zod@4.3.4) '@ai-sdk/cerebras': specifier: ^1.0.31 version: 1.0.34(zod@4.3.4) @@ -196,9 +199,24 @@ importers: '@ai-sdk/perplexity': specifier: ^2.0.20 version: 2.0.23(zod@4.3.4) + '@ai-sdk/provider': + specifier: ^2.0.1 + version: 2.0.1 + '@ai-sdk/provider-utils': + specifier: 3.0.20 + version: 3.0.20(zod@4.3.4) '@ai-sdk/test-server': specifier: ^0.0.1 version: 0.0.1(@types/node@22.19.3)(typescript@5.8.3) + '@ai-sdk/xai': + specifier: ^2.0.43 + version: 2.0.43(zod@4.3.4) + '@ant-design/cssinjs': + specifier: ^1.21.1 + version: 1.24.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@ant-design/icons': + specifier: 6.1.0 + version: 6.1.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) '@ant-design/v5-patch-for-react-19': specifier: ^1.0.3 version: 1.0.3(antd@5.27.0(patch_hash=cdc383bd0d9b9fe0df2ce7b1f1d4ead200012b7f9517d9257b4ea0a5b324e243)(moment@2.30.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -226,6 +244,9 @@ importers: '@cherrystudio/embedjs': specifier: ^0.1.31 version: 0.1.33(@langchain/core@1.0.2(patch_hash=8dc787a82cebafe8b23c8826f25f29aca64fc8b43a0a1878e0010782e4da96ed)(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(openai@6.15.0(ws@8.18.3)(zod@4.3.4)))(@langchain/ollama@0.1.6(@langchain/core@1.0.2(patch_hash=8dc787a82cebafe8b23c8826f25f29aca64fc8b43a0a1878e0010782e4da96ed)(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(openai@6.15.0(ws@8.18.3)(zod@4.3.4))))(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(axios@1.13.2)(cheerio@1.1.2)(handlebars@4.7.8)(openai@6.15.0(ws@8.18.3)(zod@4.3.4))(ws@8.18.3) + '@cherrystudio/embedjs-interfaces': + specifier: ^0.1.33 + version: 0.1.33(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(openai@6.15.0(ws@8.18.3)(zod@4.3.4)) '@cherrystudio/embedjs-libsql': specifier: ^0.1.31 version: 0.1.33(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(openai@6.15.0(ws@8.18.3)(zod@4.3.4)) @@ -259,12 +280,24 @@ importers: '@cherrystudio/embedjs-openai': specifier: ^0.1.31 version: 0.1.33(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(openai@6.15.0(ws@8.18.3)(zod@4.3.4))(ws@8.18.3) + '@cherrystudio/embedjs-utils': + specifier: ^0.1.33 + version: 0.1.33(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(openai@6.15.0(ws@8.18.3)(zod@4.3.4)) '@cherrystudio/extension-table-plus': specifier: workspace:^ version: link:packages/extension-table-plus '@cherrystudio/openai': specifier: 6.15.0 version: 6.15.0(ws@8.18.3)(zod@4.3.4) + '@codemirror/lang-json': + specifier: ^6.0.1 + version: 6.0.2 + '@codemirror/lint': + specifier: 6.8.5 + version: 6.8.5 + '@codemirror/view': + specifier: 6.38.1 + version: 6.38.1 '@dnd-kit/core': specifier: ^6.3.1 version: 6.3.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -301,6 +334,9 @@ importers: '@eslint/js': specifier: ^9.22.0 version: 9.39.2 + '@floating-ui/dom': + specifier: ^1.6.14 + version: 1.7.4 '@google/genai': specifier: 1.0.1 version: 1.0.1(patch_hash=5cf01cdc644f9e1a03dea633c111140f865a17927cdefb48a6dc2d9004f2dcf8)(@modelcontextprotocol/sdk@1.25.1(@cfworker/json-schema@4.1.1)(hono@4.11.3)(zod@4.3.4))(encoding@0.1.13) @@ -312,13 +348,16 @@ importers: version: 0.1.0 '@langchain/community': specifier: ^1.0.0 - version: 1.1.1(b8960301de9277df01d5543678b7dfa2) + version: 1.1.1(a8664fc25ef3048ffc7f9eb268b97cf5) '@langchain/core': specifier: 1.0.2 version: 1.0.2(patch_hash=8dc787a82cebafe8b23c8826f25f29aca64fc8b43a0a1878e0010782e4da96ed)(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(openai@6.15.0(ws@8.18.3)(zod@4.3.4)) '@langchain/openai': specifier: 1.0.0 version: 1.0.0(patch_hash=d6ed38e7008b7a6b45ee16826e31b0198ffb0cb581852fd8de532ddeca633334)(@langchain/core@1.0.2(patch_hash=8dc787a82cebafe8b23c8826f25f29aca64fc8b43a0a1878e0010782e4da96ed)(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(openai@6.15.0(ws@8.18.3)(zod@4.3.4)))(ws@8.18.3) + '@langchain/textsplitters': + specifier: 1.0.1 + version: 1.0.1(@langchain/core@1.0.2(patch_hash=8dc787a82cebafe8b23c8826f25f29aca64fc8b43a0a1878e0010782e4da96ed)(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(openai@6.15.0(ws@8.18.3)(zod@4.3.4))) '@mistralai/mistralai': specifier: ^1.7.5 version: 1.11.0 @@ -337,6 +376,9 @@ importers: '@opentelemetry/api': specifier: ^1.9.0 version: 1.9.0 + '@opentelemetry/context-async-hooks': + specifier: 2.2.0 + version: 2.2.0(@opentelemetry/api@1.9.0) '@opentelemetry/core': specifier: 2.0.0 version: 2.0.0(@opentelemetry/api@1.9.0) @@ -394,6 +436,12 @@ importers: '@testing-library/user-event': specifier: ^14.6.1 version: 14.6.1(@testing-library/dom@10.4.1) + '@tiptap/core': + specifier: ^3.2.0 + version: 3.14.0(@tiptap/pm@3.14.0) + '@tiptap/extension-code-block': + specifier: ^3.2.0 + version: 3.14.0(@tiptap/core@3.14.0(@tiptap/pm@3.14.0))(@tiptap/pm@3.14.0) '@tiptap/extension-collaboration': specifier: ^3.2.0 version: 3.14.0(@tiptap/core@3.14.0(@tiptap/pm@3.14.0))(@tiptap/pm@3.14.0)(@tiptap/y-tiptap@3.0.1(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.4)(y-protocols@1.0.7(yjs@13.6.29))(yjs@13.6.29))(yjs@13.6.29) @@ -406,6 +454,9 @@ importers: '@tiptap/extension-image': specifier: ^3.2.0 version: 3.14.0(@tiptap/core@3.14.0(@tiptap/pm@3.14.0)) + '@tiptap/extension-link': + specifier: ^3.2.0 + version: 3.14.0(@tiptap/core@3.14.0(@tiptap/pm@3.14.0))(@tiptap/pm@3.14.0) '@tiptap/extension-list': specifier: ^3.2.0 version: 3.14.0(@tiptap/core@3.14.0(@tiptap/pm@3.14.0))(@tiptap/pm@3.14.0) @@ -469,6 +520,9 @@ importers: '@types/fs-extra': specifier: ^11 version: 11.0.4 + '@types/hast': + specifier: ^3.0.4 + version: 3.0.4 '@types/he': specifier: ^1 version: 1.2.3 @@ -487,6 +541,9 @@ importers: '@types/md5': specifier: ^2.3.5 version: 2.3.6 + '@types/mdast': + specifier: ^4.0.4 + version: 4.0.4 '@types/mime-types': specifier: ^3 version: 3.0.1 @@ -523,6 +580,9 @@ importers: '@types/turndown': specifier: ^5.0.5 version: 5.0.6 + '@types/unist': + specifier: ^3.0.3 + version: 3.0.3 '@types/uuid': specifier: ^10.0.0 version: 10.0.0 @@ -565,6 +625,9 @@ importers: '@xyflow/react': specifier: ^12.4.4 version: 12.10.0(@types/react@19.2.7)(immer@11.1.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + adm-zip: + specifier: 0.5.16 + version: 0.5.16 ai: specifier: ^5.0.98 version: 5.0.117(zod@4.3.4) @@ -583,6 +646,12 @@ importers: browser-image-compression: specifier: ^2.0.2 version: 2.0.2 + builder-util-runtime: + specifier: 9.3.1 + version: 9.3.1 + chalk: + specifier: 5.6.2 + version: 5.6.2 chardet: specifier: ^2.1.0 version: 2.1.1 @@ -607,12 +676,18 @@ importers: code-inspector-plugin: specifier: ^0.20.14 version: 0.20.17 + codemirror-lang-mermaid: + specifier: ^0.5.0 + version: 0.5.0 color: specifier: ^5.0.0 version: 5.0.3 concurrently: specifier: ^9.2.1 version: 9.2.1 + cors: + specifier: 2.8.5 + version: 2.8.5 country-flag-emoji-polyfill: specifier: 0.1.8 version: 0.1.8 @@ -634,6 +709,9 @@ importers: dompurify: specifier: ^3.2.6 version: 3.3.1 + dotenv: + specifier: ^16.4.7 + version: 16.6.1 dotenv-cli: specifier: ^7.4.2 version: 7.4.4 @@ -706,8 +784,11 @@ importers: fetch-socks: specifier: 1.3.2 version: 1.3.2 + form-data: + specifier: 4.0.5 + version: 4.0.5 framer-motion: - specifier: ^12.23.12 + specifier: ^12.23.26 version: 12.23.26(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) franc-min: specifier: ^6.2.0 @@ -754,6 +835,18 @@ importers: jest-styled-components: specifier: ^7.2.0 version: 7.2.0(styled-components@6.1.19(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) + js-base64: + specifier: ^3.7.7 + version: 3.7.8 + json-schema: + specifier: ^0.4.0 + version: 0.4.0 + katex: + specifier: ^0.16.19 + version: 0.16.27 + ky: + specifier: ^1.7.3 + version: 1.14.2 linguist-languages: specifier: ^8.1.0 version: 8.2.0 @@ -775,6 +868,9 @@ importers: markdown-it: specifier: ^14.1.0 version: 14.1.0 + md5: + specifier: 2.3.0 + version: 2.3.0 mermaid: specifier: ^11.10.1 version: 11.12.2 @@ -785,8 +881,11 @@ importers: specifier: ^3.0.1 version: 3.0.2 motion: - specifier: ^12.10.5 + specifier: ^12.23.26 version: 12.23.26(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + nanoid: + specifier: ^5.0.9 + version: 5.1.6 notion-helper: specifier: ^1.3.22 version: 1.3.29 @@ -805,15 +904,30 @@ importers: p-queue: specifier: ^8.1.0 version: 8.1.1 + pako: + specifier: ^2.1.0 + version: 2.1.0 pdf-lib: specifier: ^1.17.1 version: 1.17.1 pdf-parse: specifier: ^1.1.1 version: 1.1.4 + prosemirror-model: + specifier: ^1.24.4 + version: 1.25.4 proxy-agent: specifier: ^6.5.0 version: 6.5.0 + rc-input: + specifier: ^1.8.0 + version: 1.8.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + rc-select: + specifier: 14.16.8 + version: 14.16.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + rc-virtual-list: + specifier: ^3.19.2 + version: 3.19.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) react: specifier: ^19.2.0 version: 19.2.3 @@ -892,12 +1006,21 @@ importers: remark-math: specifier: ^6.0.0 version: 6.0.0 + remark-parse: + specifier: ^11.0.0 + version: 11.0.0 + remark-stringify: + specifier: ^11.0.0 + version: 11.0.0 remove-markdown: specifier: ^0.6.2 version: 0.6.2 rollup-plugin-visualizer: specifier: ^5.12.0 version: 5.14.0 + semver: + specifier: 7.7.3 + version: 7.7.3 shiki: specifier: ^3.12.0 version: 3.20.0 @@ -949,6 +1072,9 @@ importers: unified: specifier: ^11.0.5 version: 11.0.5 + unist-util-visit: + specifier: ^5.0.0 + version: 5.0.0 uuid: specifier: ^13.0.0 version: 13.0.0 @@ -1276,6 +1402,9 @@ packages: '@ant-design/colors@7.2.1': resolution: {integrity: sha512-lCHDcEzieu4GA3n8ELeZ5VQ8pKQAWcGGLRTQ50aQM2iqPpq2evTxER84jfdPvsPAtEcZ7m44NI45edFMo8oOYQ==} + '@ant-design/colors@8.0.0': + resolution: {integrity: sha512-6YzkKCw30EI/E9kHOIXsQDHmMvTllT8STzjMb4K2qzit33RW2pqCJP0sk+hidBntXxE+Vz4n1+RvCTfBw6OErw==} + '@ant-design/cssinjs-utils@1.1.3': resolution: {integrity: sha512-nOoQMLW1l+xR1Co8NFVYiP8pZp3VjIIzqV6D6ShYF2ljtdwWJn5WSsH+7kvCktXL/yhEtWURKOfH5Xz/gzlwsg==} peerDependencies: @@ -1292,6 +1421,10 @@ packages: resolution: {integrity: sha512-y2217gk4NqL35giHl72o6Zzqji9O7vHh9YmhUVkPtAOpoTCH4uWxo/pr4VE8t0+ChEPs0qo4eJRC5Q1eXWo3vA==} engines: {node: '>=8.x'} + '@ant-design/fast-color@3.0.0': + resolution: {integrity: sha512-eqvpP7xEDm2S7dUzl5srEQCBTXZMmY3ekf97zI+M2DHOYyKdJGH0qua0JACHTqbkRnD/KHFQP9J1uMJ/XWVzzA==} + engines: {node: '>=8.x'} + '@ant-design/icons-svg@4.4.2': resolution: {integrity: sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==} @@ -1302,6 +1435,13 @@ packages: react: '>=16.0.0' react-dom: '>=16.0.0' + '@ant-design/icons@6.1.0': + resolution: {integrity: sha512-KrWMu1fIg3w/1F2zfn+JlfNDU8dDqILfA5Tg85iqs1lf8ooyGlbkA+TkwfOKKgqpUmAiRY1PTFpuOU2DAIgSUg==} + engines: {node: '>=8'} + peerDependencies: + react: '>=16.0.0' + react-dom: '>=16.0.0' + '@ant-design/react-slick@1.1.2': resolution: {integrity: sha512-EzlvzE6xQUBrZuuhSAFTdsr4P2bBBHGZwKFemEfq8gIGyIQCxalYfZW/T2ORbtQx5rU69o+WycP3exY/7T1hGA==} peerDependencies: @@ -3811,6 +3951,12 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' + '@rc-component/util@1.7.0': + resolution: {integrity: sha512-tIvIGj4Vl6fsZFvWSkYw9sAfiCKUXMyhVz6kpKyZbwyZyRPqv2vxYZROdaO1VB4gqTNvUZFXh6i3APUiterw5g==} + peerDependencies: + react: '>=18.0.0' + react-dom: '>=18.0.0' + '@reduxjs/toolkit@2.11.2': resolution: {integrity: sha512-Kd6kAHTA6/nUpp8mySPqj3en3dm0tdMIgbttnQ1xFMVpufoj+ADi8pXLBsd4xzTRHQa7t/Jv8W5UnCuW4kuWMQ==} peerDependencies: @@ -5471,6 +5617,10 @@ packages: resolution: {integrity: sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==} engines: {node: '>=0.3.0'} + adm-zip@0.5.16: + resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==} + engines: {node: '>=12.0'} + agent-base@7.1.4: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} @@ -5792,6 +5942,10 @@ packages: buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + builder-util-runtime@9.3.1: + resolution: {integrity: sha512-2/egrNDDnRaxVwK3A+cJq6UOlqOdedGA7JPqCeJjN2Zjk1/QB/6QUi3b714ScIGS7HafFXTyzJEOr5b44I3kvQ==} + engines: {node: '>=12.0.0'} + builder-util-runtime@9.5.0: resolution: {integrity: sha512-7qmRMH8X/IzDM+1TysKNFo5cNWBbfacdLX4EqkuE5aiRTECAlYiKHSqEc6cc3c4Lrmpgk0utbxOPkj0iYaWAWQ==} engines: {node: '>=12.0.0'} @@ -6661,10 +6815,6 @@ packages: resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} engines: {node: '>=12'} - dotenv@17.2.3: - resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==} - engines: {node: '>=12'} - drizzle-kit@0.31.8: resolution: {integrity: sha512-O9EC/miwdnRDY10qRxM8P3Pg8hXe3LyU4ZipReKOgTwn4OqANmftj8XJz1UPUAS6NMHf0E2htjsbQujUTkncCg==} hasBin: true @@ -7955,6 +8105,9 @@ packages: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} + is-mobile@5.0.0: + resolution: {integrity: sha512-Tz/yndySvLAEXh+Uk8liFCxOwVH6YutuR74utvOcu7I9Di+DwM0mtdPVZNaVvvBUM2OXxne/NhOs1zAO7riusQ==} + is-natural-number@4.0.1: resolution: {integrity: sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==} @@ -9471,6 +9624,9 @@ packages: pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + pako@2.1.0: + resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -12128,6 +12284,10 @@ snapshots: dependencies: '@ant-design/fast-color': 2.0.6 + '@ant-design/colors@8.0.0': + dependencies: + '@ant-design/fast-color': 3.0.0 + '@ant-design/cssinjs-utils@1.1.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': dependencies: '@ant-design/cssinjs': 1.24.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -12152,6 +12312,8 @@ snapshots: dependencies: '@babel/runtime': 7.28.4 + '@ant-design/fast-color@3.0.0': {} + '@ant-design/icons-svg@4.4.2': {} '@ant-design/icons@5.6.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': @@ -12164,6 +12326,15 @@ snapshots: react: 19.2.3 react-dom: 19.2.3(react@19.2.3) + '@ant-design/icons@6.1.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + '@ant-design/colors': 8.0.0 + '@ant-design/icons-svg': 4.4.2 + '@rc-component/util': 1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + clsx: 2.1.1 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + '@ant-design/react-slick@1.1.2(react@19.2.3)': dependencies: '@babel/runtime': 7.28.4 @@ -13041,13 +13212,13 @@ snapshots: transitivePeerDependencies: - encoding - '@browserbasehq/stagehand@1.14.0(@playwright/test@1.57.0)(deepmerge@4.3.1)(dotenv@17.2.3)(encoding@0.1.13)(openai@6.15.0(ws@8.18.3)(zod@4.3.4))(zod@4.3.4)': + '@browserbasehq/stagehand@1.14.0(@playwright/test@1.57.0)(deepmerge@4.3.1)(dotenv@16.6.1)(encoding@0.1.13)(openai@6.15.0(ws@8.18.3)(zod@4.3.4))(zod@4.3.4)': dependencies: '@anthropic-ai/sdk': 0.27.3(encoding@0.1.13) '@browserbasehq/sdk': 2.6.0(encoding@0.1.13) '@playwright/test': 1.57.0 deepmerge: 4.3.1 - dotenv: 17.2.3 + dotenv: 16.6.1 openai: 6.15.0(ws@8.18.3)(zod@4.3.4) ws: 8.18.3 zod: 4.3.4 @@ -13729,7 +13900,7 @@ snapshots: node-gyp: 11.5.0 ora: 5.4.1 read-binary-file-arch: 1.0.6 - semver: 7.7.2 + semver: 7.7.3 tar: 6.2.1 yargs: 17.7.2 transitivePeerDependencies: @@ -14340,9 +14511,9 @@ snapshots: - openai - ws - '@langchain/community@1.1.1(b8960301de9277df01d5543678b7dfa2)': + '@langchain/community@1.1.1(a8664fc25ef3048ffc7f9eb268b97cf5)': dependencies: - '@browserbasehq/stagehand': 1.14.0(@playwright/test@1.57.0)(deepmerge@4.3.1)(dotenv@17.2.3)(encoding@0.1.13)(openai@6.15.0(ws@8.18.3)(zod@4.3.4))(zod@4.3.4) + '@browserbasehq/stagehand': 1.14.0(@playwright/test@1.57.0)(deepmerge@4.3.1)(dotenv@16.6.1)(encoding@0.1.13)(openai@6.15.0(ws@8.18.3)(zod@4.3.4))(zod@4.3.4) '@ibm-cloud/watsonx-ai': 1.7.5 '@langchain/classic': 1.0.7(@langchain/core@1.0.2(patch_hash=8dc787a82cebafe8b23c8826f25f29aca64fc8b43a0a1878e0010782e4da96ed)(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(openai@6.15.0(ws@8.18.3)(zod@4.3.4)))(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(cheerio@1.1.2)(openai@6.15.0(ws@8.18.3)(zod@4.3.4))(ws@8.18.3) '@langchain/core': 1.0.2(patch_hash=8dc787a82cebafe8b23c8826f25f29aca64fc8b43a0a1878e0010782e4da96ed)(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(openai@6.15.0(ws@8.18.3)(zod@4.3.4)) @@ -14760,7 +14931,7 @@ snapshots: '@npmcli/fs@4.0.0': dependencies: - semver: 7.7.2 + semver: 7.7.3 '@open-draft/deferred-promise@2.2.0': {} @@ -15294,6 +15465,13 @@ snapshots: react: 19.2.3 react-dom: 19.2.3(react@19.2.3) + '@rc-component/util@1.7.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + dependencies: + is-mobile: 5.0.0 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + react-is: 18.3.1 + '@reduxjs/toolkit@2.11.2(react-redux@9.2.0(@types/react@19.2.7)(react@19.2.3)(redux@5.0.1))(react@19.2.3)': dependencies: '@standard-schema/spec': 1.1.0 @@ -16443,7 +16621,7 @@ snapshots: '@types/dotenv@8.2.3': dependencies: - dotenv: 17.2.3 + dotenv: 16.6.1 '@types/estree-jsx@1.0.5': dependencies: @@ -17359,6 +17537,8 @@ snapshots: adm-zip@0.4.16: {} + adm-zip@0.5.16: {} + agent-base@7.1.4: {} agentkeepalive@4.6.0: @@ -17758,6 +17938,13 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 + builder-util-runtime@9.3.1: + dependencies: + debug: 4.4.3 + sax: 1.4.3 + transitivePeerDependencies: + - supports-color + builder-util-runtime@9.5.0: dependencies: debug: 4.4.3 @@ -18028,7 +18215,7 @@ snapshots: code-inspector-core@0.20.17: dependencies: '@vue/compiler-dom': 3.5.26 - chalk: 4.1.1 + chalk: 4.1.2 dotenv: 16.6.1 launch-ide: 1.0.8 portfinder: 1.0.38 @@ -18719,8 +18906,6 @@ snapshots: dotenv@16.6.1: {} - dotenv@17.2.3: {} - drizzle-kit@0.31.8: dependencies: '@drizzle-team/brocli': 0.10.2 @@ -20257,6 +20442,8 @@ snapshots: is-interactive@1.0.0: {} + is-mobile@5.0.0: {} + is-natural-number@4.0.1: {} is-node-process@1.2.0: {} @@ -20569,7 +20756,7 @@ snapshots: launch-ide@1.0.8: dependencies: - chalk: 4.1.1 + chalk: 4.1.2 dotenv: 16.6.1 layerr@3.0.0: {} @@ -21744,7 +21931,7 @@ snapshots: node-api-version@0.2.1: dependencies: - semver: 7.7.2 + semver: 7.7.3 node-domexception@1.0.0: {} @@ -21772,7 +21959,7 @@ snapshots: make-fetch-happen: 14.0.3 nopt: 8.1.0 proc-log: 5.0.0 - semver: 7.7.2 + semver: 7.7.3 tar: 7.5.2 tinyglobby: 0.2.15 which: 5.0.0 @@ -22085,6 +22272,8 @@ snapshots: pako@1.0.11: {} + pako@2.1.0: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 diff --git a/src/main/services/AppUpdater.ts b/src/main/services/AppUpdater.ts index 57dc3fb2a8..cbc603043b 100644 --- a/src/main/services/AppUpdater.ts +++ b/src/main/services/AppUpdater.ts @@ -4,10 +4,10 @@ import { getIpCountry } from '@main/utils/ipService' import { generateUserAgent } from '@main/utils/systemInfo' import { FeedUrl, UpdateConfigUrl, UpdateMirror, UpgradeChannel } from '@shared/config/constant' import { IpcChannel } from '@shared/IpcChannel' -import type { UpdateInfo } from 'builder-util-runtime' -import { CancellationToken } from 'builder-util-runtime' import { app, net } from 'electron' +import type { UpdateInfo } from 'electron-updater' import type { AppUpdater as _AppUpdater, Logger, NsisUpdater, UpdateCheckResult } from 'electron-updater' +import { CancellationToken } from 'electron-updater' import { autoUpdater } from 'electron-updater' import path from 'path' import semver from 'semver' diff --git a/src/main/services/MCPService.ts b/src/main/services/MCPService.ts index 7d36e6d7e3..09e8302e3f 100644 --- a/src/main/services/MCPService.ts +++ b/src/main/services/MCPService.ts @@ -629,7 +629,7 @@ class McpService { // Set up logging message notification handler client.setNotificationHandler(LoggingMessageNotificationSchema, async (notification) => { logger.debug(`Message from server ${server.name}:`, notification.params) - const msg = notification.params?.message + const msg = notification.params?.data as string if (msg) { this.emitServerLog(server, { timestamp: Date.now(), diff --git a/src/main/services/__tests__/AppUpdater.test.ts b/src/main/services/__tests__/AppUpdater.test.ts index f7de00475a..dae728a506 100644 --- a/src/main/services/__tests__/AppUpdater.test.ts +++ b/src/main/services/__tests__/AppUpdater.test.ts @@ -81,7 +81,10 @@ vi.mock('electron-updater', () => ({ }, Logger: vi.fn(), NsisUpdater: vi.fn(), - AppUpdater: vi.fn() + AppUpdater: vi.fn(), + CancellationToken: vi.fn(() => ({ + cancel: vi.fn() + })) })) // Import after mocks diff --git a/src/main/services/mcp/oauth/provider.ts b/src/main/services/mcp/oauth/provider.ts index 29fdfc0c50..29868743dc 100644 --- a/src/main/services/mcp/oauth/provider.ts +++ b/src/main/services/mcp/oauth/provider.ts @@ -8,7 +8,7 @@ import type { OAuthClientInformationFull, OAuthTokens } from '@modelcontextprotocol/sdk/shared/auth' -import open from 'open' +import { shell } from 'electron' import { sanitizeUrl } from 'strict-url-sanitise' import { JsonFileStorage } from './storage' @@ -67,7 +67,7 @@ export class McpOAuthClientProvider implements OAuthClientProvider { async redirectToAuthorization(authorizationUrl: URL): Promise { try { // Open the browser to the authorization URL - await open(sanitizeUrl(authorizationUrl.toString())) + await shell.openExternal(sanitizeUrl(authorizationUrl.toString())) logger.debug('Browser opened automatically.') } catch (error) { logger.error('Could not open browser automatically.') diff --git a/src/main/utils/__tests__/file.test.ts b/src/main/utils/__tests__/file.test.ts index f6f6d2c40e..45414ef972 100644 --- a/src/main/utils/__tests__/file.test.ts +++ b/src/main/utils/__tests__/file.test.ts @@ -258,13 +258,18 @@ describe('file', () => { describe('readTextFileWithAutoEncoding', () => { const mockFilePath = '/path/to/mock/file.txt' + const toNonSharedBuffer = (input: Buffer) => { + const arrayBuffer = new ArrayBuffer(input.byteLength) + new Uint8Array(arrayBuffer).set(input) + return Buffer.from(arrayBuffer) + } it('should read file with auto encoding', async () => { const content = '这是一段GB18030编码的测试内容' const buffer = iconv.encode(content, 'GB18030') // 模拟文件读取和编码检测 - vi.spyOn(fsPromises, 'readFile').mockResolvedValue(buffer) + vi.spyOn(fsPromises, 'readFile').mockResolvedValue(toNonSharedBuffer(buffer)) vi.spyOn(chardet, 'detectFile').mockResolvedValue('GB18030') const result = await readTextFileWithAutoEncoding(mockFilePath) @@ -276,7 +281,7 @@ describe('file', () => { const buffer = iconv.encode(content, 'UTF-8') // 模拟文件读取 - vi.spyOn(fsPromises, 'readFile').mockResolvedValue(buffer) + vi.spyOn(fsPromises, 'readFile').mockResolvedValue(toNonSharedBuffer(buffer)) vi.spyOn(chardet, 'detectFile').mockResolvedValue('GB18030') const result = await readTextFileWithAutoEncoding(mockFilePath) diff --git a/src/renderer/src/aiCore/legacy/middleware/feat/ImageGenerationMiddleware.ts b/src/renderer/src/aiCore/legacy/middleware/feat/ImageGenerationMiddleware.ts index 0df303e41e..38b1d5f22a 100644 --- a/src/renderer/src/aiCore/legacy/middleware/feat/ImageGenerationMiddleware.ts +++ b/src/renderer/src/aiCore/legacy/middleware/feat/ImageGenerationMiddleware.ts @@ -50,7 +50,9 @@ export const ImageGenerationMiddleware: CompletionsMiddleware = if (!block.file) return null const binaryData: Uint8Array = await FileManager.readBinaryImage(block.file) const mimeType = `${block.file.type}/${block.file.ext.slice(1)}` - return await toFile(new Blob([binaryData]), block.file.origin_name || 'image.png', { type: mimeType }) + return await toFile(new Blob([new Uint8Array(binaryData)]), block.file.origin_name || 'image.png', { + type: mimeType + }) }) ) imageFiles = imageFiles.concat(userImages.filter(Boolean) as Blob[]) diff --git a/src/renderer/src/components/ImageViewer.tsx b/src/renderer/src/components/ImageViewer.tsx index 21bcee025f..12992d2499 100644 --- a/src/renderer/src/components/ImageViewer.tsx +++ b/src/renderer/src/components/ImageViewer.tsx @@ -42,7 +42,7 @@ const ImageViewer: React.FC = ({ src, style, ...props }) => { if (!match) throw new Error('Invalid base64 image format') const mimeType = match[1] const byteArray = Base64.toUint8Array(match[2]) - blob = new Blob([byteArray], { type: mimeType }) + blob = new Blob([new Uint8Array(byteArray)], { type: mimeType }) } else if (src.startsWith('file://')) { // 处理本地文件路径 const bytes = await window.api.fs.read(src) diff --git a/src/renderer/src/components/Popups/UpdateDialogPopup.tsx b/src/renderer/src/components/Popups/UpdateDialogPopup.tsx index 593c882bf5..9b2bad83df 100644 --- a/src/renderer/src/components/Popups/UpdateDialogPopup.tsx +++ b/src/renderer/src/components/Popups/UpdateDialogPopup.tsx @@ -3,7 +3,8 @@ import { TopView } from '@renderer/components/TopView' import { handleSaveData, useAppDispatch } from '@renderer/store' import { setUpdateState } from '@renderer/store/runtime' import { Button, Modal } from 'antd' -import type { ReleaseNoteInfo, UpdateInfo } from 'builder-util-runtime' +import type { ReleaseNoteInfo } from 'builder-util-runtime' +import type { UpdateInfo } from 'electron-updater' import { useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' import Markdown from 'react-markdown' diff --git a/src/renderer/src/components/RichEditor/extensions/code-block-shiki/code-block-shiki.ts b/src/renderer/src/components/RichEditor/extensions/code-block-shiki/code-block-shiki.ts index 292377929a..98aebb4ca3 100644 --- a/src/renderer/src/components/RichEditor/extensions/code-block-shiki/code-block-shiki.ts +++ b/src/renderer/src/components/RichEditor/extensions/code-block-shiki/code-block-shiki.ts @@ -13,6 +13,8 @@ export const CodeBlockShiki = CodeBlock.extend({ addOptions() { return { ...this.parent?.(), + enableTabIndentation: false, + tabSize: 2, languageClassPrefix: 'language-', exitOnTripleEnter: true, exitOnArrowDown: true, diff --git a/src/renderer/src/components/RichEditor/extensions/enhanced-image.ts b/src/renderer/src/components/RichEditor/extensions/enhanced-image.ts index a40f5bdbb4..b72e13df8f 100644 --- a/src/renderer/src/components/RichEditor/extensions/enhanced-image.ts +++ b/src/renderer/src/components/RichEditor/extensions/enhanced-image.ts @@ -15,10 +15,15 @@ declare module '@tiptap/core' { // Enhanced Image extension that emits events for image upload export const EnhancedImage = Image.extend({ addOptions() { + const parentOptions = this.parent?.() ?? { resize: false, HTMLAttributes: {} } + return { - ...this.parent?.(), + ...parentOptions, + resize: parentOptions.resize ?? false, + inline: false, allowBase64: true, HTMLAttributes: { + ...parentOptions.HTMLAttributes, class: 'rich-editor-image' } } diff --git a/src/renderer/src/components/__tests__/__snapshots__/InputEmbeddingDimension.test.tsx.snap b/src/renderer/src/components/__tests__/__snapshots__/InputEmbeddingDimension.test.tsx.snap index f056130030..694f031577 100644 --- a/src/renderer/src/components/__tests__/__snapshots__/InputEmbeddingDimension.test.tsx.snap +++ b/src/renderer/src/components/__tests__/__snapshots__/InputEmbeddingDimension.test.tsx.snap @@ -8,7 +8,7 @@ exports[`InputEmbeddingDimension > basic rendering > should match snapshot with @@ -43,7 +43,7 @@ exports[`InputEmbeddingDimension > basic rendering > should match snapshot with diff --git a/src/renderer/src/components/__tests__/__snapshots__/Spinner.test.tsx.snap b/src/renderer/src/components/__tests__/__snapshots__/Spinner.test.tsx.snap index c05a945d24..00ecf953ec 100644 --- a/src/renderer/src/components/__tests__/__snapshots__/Spinner.test.tsx.snap +++ b/src/renderer/src/components/__tests__/__snapshots__/Spinner.test.tsx.snap @@ -24,6 +24,7 @@ exports[`Spinner > should match snapshot 1`] = ` stroke-linecap="round" stroke-linejoin="round" stroke-width="2" + style="color: unset;" viewBox="0 0 24 24" width="16" xmlns="http://www.w3.org/2000/svg" diff --git a/src/renderer/src/pages/home/Messages/MessageImage.tsx b/src/renderer/src/pages/home/Messages/MessageImage.tsx index 444189c158..715561b80c 100644 --- a/src/renderer/src/pages/home/Messages/MessageImage.tsx +++ b/src/renderer/src/pages/home/Messages/MessageImage.tsx @@ -50,7 +50,7 @@ const MessageImage: FC = ({ block }) => { const mimeType = parts[0].replace('data:', '') const base64Data = parts[1] const byteCharacters = atob(base64Data) - const byteArrays: Uint8Array[] = [] + const byteArrays: BlobPart[] = [] for (let offset = 0; offset < byteCharacters.length; offset += 512) { const slice = byteCharacters.slice(offset, offset + 512) diff --git a/src/renderer/src/store/runtime.ts b/src/renderer/src/store/runtime.ts index 66fd161dcd..90b2630388 100644 --- a/src/renderer/src/store/runtime.ts +++ b/src/renderer/src/store/runtime.ts @@ -18,7 +18,7 @@ import type { PayloadAction } from '@reduxjs/toolkit' import { createSlice } from '@reduxjs/toolkit' import { AppLogo, UserAvatar } from '@renderer/config/env' import type { MinAppType, Topic, WebSearchStatus } from '@renderer/types' -import type { UpdateInfo } from 'builder-util-runtime' +import type { UpdateInfo } from 'electron-updater' export interface ChatState { isMultiSelectMode: boolean