diff --git a/.prettierignore b/.prettierignore index ac31d561c..9faa284d3 100644 --- a/.prettierignore +++ b/.prettierignore @@ -22,3 +22,4 @@ src/renderer/src/components/ui/* .vscode electron.vite.config.ts *.md +scripts/* diff --git a/electron.vite.config.ts b/electron.vite.config.ts index a9db3996d..f86a75b4f 100644 --- a/electron.vite.config.ts +++ b/electron.vite.config.ts @@ -60,6 +60,7 @@ export default defineConfig({ }, css: { postcss: { + // @ts-ignore plugins: [tailwind(), autoprefixer()] } }, diff --git a/package.json b/package.json index 2b277dae9..02ea16b07 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "author": "ThinkInAIXYZ", "type": "module", "engines": { - "node": ">=20.12.2", + "node": ">=20.19.0", "pnpm": ">=10.11.0" }, "packageManager": "pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad", @@ -29,7 +29,7 @@ "dev:inspect": "electron-vite dev --watch --inspect=9229", "dev:linux": "electron-vite dev --watch --noSandbox", "build": "pnpm run typecheck && electron-vite build", - "postinstall": "node scripts/postinstall.js && electron-builder install-app-deps", + "postinstall": "electron-builder install-app-deps && simple-git-hooks", "build:unpack": "pnpm run build && electron-builder --dir", "build:win": "pnpm run build && electron-builder --win", "build:win:x64": "pnpm run build && electron-builder --win --x64", @@ -104,7 +104,7 @@ "@lingual/i18n-check": "^0.8.4", "@radix-icons/vue": "^1.0.0", "@tailwindcss/typography": "^0.5.16", - "@tailwindcss/vite": "^4.0.4", + "@tailwindcss/vite": "^4.1.11", "@tiptap/core": "^2.11.7", "@tiptap/extension-code-block": "^2.11.9", "@tiptap/extension-document": "^2.11.7", @@ -120,7 +120,7 @@ "@types/better-sqlite3": "^7.6.0", "@types/node": "^22.14.1", "@types/xlsx": "^0.0.35", - "@vitejs/plugin-vue": "^5.2.3", + "@vitejs/plugin-vue": "^6.0.1", "@vitest/ui": "^3.2.3", "@vue/test-utils": "^2.4.6", "@vueuse/core": "^12.7.0", @@ -132,13 +132,16 @@ "electron-builder": "26.0.12", "electron-vite": "^4.0.0", "jsdom": "^26.1.0", + "lint-staged": "^16.1.2", "lucide-vue-next": "^0.511.0", "mermaid": "^11.6.0", "minimatch": "^10.0.1", "monaco-editor": "^0.52.2", + "picocolors": "^1.1.1", "pinia": "^3.0.2", "prettier": "^3.5.3", "radix-vue": "^1.9.14", + "simple-git-hooks": "^2.13.0", "tailwind-merge": "^3.3.0", "tailwind-scrollbar-hide": "^2.0.0", "tailwindcss": "3.4.17", @@ -147,7 +150,7 @@ "typescript": "^5.8.3", "vite": "npm:rolldown-vite@latest", "vite-plugin-monaco-editor-esm": "^2.0.2", - "vite-plugin-vue-devtools": "^7.7.6", + "vite-plugin-vue-devtools": "^8.0.0", "vite-svg-loader": "^5.1.0", "vitest": "^3.2.3", "vue": "^3.5.14", @@ -161,6 +164,18 @@ "yaml": "^2.8.0", "zod-to-json-schema": "^3.24.5" }, + "simple-git-hooks": { + "pre-commit": "pnpm lint-staged && pnpm typecheck", + "commit-msg": "node scripts/verify-commit.js" + }, + "lint-staged": { + "*.js": [ + "prettier --write" + ], + "*.ts": [ + "prettier --parser=typescript --write" + ] + }, "pnpm": { "overrides": { "vite": "npm:rolldown-vite@latest" @@ -169,7 +184,8 @@ "@tailwindcss/oxide", "electron", "electron-winstaller", - "lzo" + "lzo", + "simple-git-hooks" ], "ignoredBuiltDependencies": [ "better-sqlite3-multiple-ciphers", diff --git a/scripts/postinstall.js b/scripts/postinstall.js deleted file mode 100755 index abe370e78..000000000 --- a/scripts/postinstall.js +++ /dev/null @@ -1 +0,0 @@ -console.log('postinstall') diff --git a/scripts/verify-commit.js b/scripts/verify-commit.js new file mode 100644 index 000000000..d37370df0 --- /dev/null +++ b/scripts/verify-commit.js @@ -0,0 +1,28 @@ +// @ts-check +import pico from 'picocolors' +import { readFileSync } from 'node:fs' +import path from 'node:path' + +const msgPath = path.resolve('.git/COMMIT_EDITMSG') +const msg = readFileSync(msgPath, 'utf-8').trim() + +const commitRE = + /^(revert: )?(feat|fix|docs|dx|style|refactor|perf|test|workflow|build|ci|chore|types|wip|release)(\(.+\))?: .{1,50}/ + +if (!commitRE.test(msg)) { + console.log() + console.error( + ` ${pico.white(pico.bgRed(' ERROR '))} ${pico.red( + `invalid commit message format.`, + )}\n\n` + + pico.red( + ` Proper commit message format is required for automated changelog generation. Examples:\n\n`, + ) + + ` ${pico.green(`feat(compiler): add 'comments' option`)}\n` + + ` ${pico.green( + `fix(v-model): handle events on blur (close #28)`, + )}\n\n` + + pico.red(` See .github/commit-convention.md for more details.\n`), + ) + process.exit(1) +} diff --git a/src/main/presenter/llmProviderPresenter/providers/openAICompatibleProvider.ts b/src/main/presenter/llmProviderPresenter/providers/openAICompatibleProvider.ts index ca147edf3..7f7dfda8a 100644 --- a/src/main/presenter/llmProviderPresenter/providers/openAICompatibleProvider.ts +++ b/src/main/presenter/llmProviderPresenter/providers/openAICompatibleProvider.ts @@ -31,7 +31,18 @@ import sharp from 'sharp' import { proxyConfig } from '../../proxyConfig' import { ProxyAgent } from 'undici' -const OPENAI_REASONING_MODELS = ['o3-mini', 'o3-preview', 'o1-mini', 'o1-pro', 'o1-preview', 'o1'] +const OPENAI_REASONING_MODELS = [ + 'o4-mini', + 'o1-pro', + 'o3', + 'o3-pro', + 'o3-mini', + 'o3-preview', + 'o1-mini', + 'o1-pro', + 'o1-preview', + 'o1' +] const OPENAI_IMAGE_GENERATION_MODELS = [ 'gpt-4o-all', 'gpt-4o-image', diff --git a/src/main/presenter/llmProviderPresenter/providers/openAIResponsesProvider.ts b/src/main/presenter/llmProviderPresenter/providers/openAIResponsesProvider.ts index 7fe51cc19..78a4fa6c0 100644 --- a/src/main/presenter/llmProviderPresenter/providers/openAIResponsesProvider.ts +++ b/src/main/presenter/llmProviderPresenter/providers/openAIResponsesProvider.ts @@ -21,7 +21,18 @@ import sharp from 'sharp' import { proxyConfig } from '../../proxyConfig' import { ProxyAgent } from 'undici' -const OPENAI_REASONING_MODELS = ['o3-mini', 'o3-preview', 'o1-mini', 'o1-pro', 'o1-preview', 'o1'] +const OPENAI_REASONING_MODELS = [ + 'o4-mini', + 'o1-pro', + 'o3', + 'o3-pro', + 'o3-mini', + 'o3-preview', + 'o1-mini', + 'o1-pro', + 'o1-preview', + 'o1' +] const OPENAI_IMAGE_GENERATION_MODELS = [ 'gpt-4o-all', 'gpt-4o-image', diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/appleServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/appleServer.ts index 136c928d9..8372ec032 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/appleServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/appleServer.ts @@ -1,7 +1,7 @@ // https://github.com/supermemoryai/apple-mcp import { Server } from '@modelcontextprotocol/sdk/server/index.js' import { ListToolsRequestSchema, CallToolRequestSchema } from '@modelcontextprotocol/sdk/types.js' -import { Transport } from '@modelcontextprotocol/sdk/shared/transport' +import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js' import { zodToJsonSchema } from 'zod-to-json-schema' import { z } from 'zod' import { runAppleScript } from 'run-applescript' @@ -273,7 +273,7 @@ class NotesUtils { -- 如果文件夹不存在,创建它 set targetFolder to make new folder with properties {name:"${folderName.replace(/"/g, '\\"')}"} end try - + -- 在指定文件夹中创建笔记 set newNote to make new note at targetFolder with properties {name:"${title.replace(/"/g, '\\"')}", body:"${body.replace(/"/g, '\\"')}"} return "success" @@ -500,11 +500,11 @@ class RemindersUtils { on error set targetList to make new list with properties {name:"${listName.replace(/"/g, '\\"')}"} end try - + set reminderProps to {name:"${name.replace(/"/g, '\\"')}"} ${notes ? `set reminderProps to reminderProps & {body:"${notes.replace(/"/g, '\\"')}"}` : ''} ${dueDate ? `set reminderProps to reminderProps & {due date:date "${dueDate}"}` : ''} - + set newReminder to make new reminder at targetList with properties reminderProps return "success" end tell diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/artifactsServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/artifactsServer.ts index 9a895e705..69fd5b6db 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/artifactsServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/artifactsServer.ts @@ -2,7 +2,7 @@ import { Server } from '@modelcontextprotocol/sdk/server/index.js' import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js' import { z } from 'zod' import { zodToJsonSchema } from 'zod-to-json-schema' -import { Transport } from '@modelcontextprotocol/sdk/shared/transport' +import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js' // Artifacts 相关的常量定义 const ARTIFACTS_INFO = ` diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/autoPromptingServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/autoPromptingServer.ts index 8fd9bc023..59e4b6b27 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/autoPromptingServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/autoPromptingServer.ts @@ -1,6 +1,6 @@ import { Server } from '@modelcontextprotocol/sdk/server/index.js' import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js' -import { Transport } from '@modelcontextprotocol/sdk/shared/transport' +import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js' import { z } from 'zod' import { zodToJsonSchema } from 'zod-to-json-schema' import { presenter } from '@/presenter' diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/bochaSearchServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/bochaSearchServer.ts index f3feb4b6f..b42408a0b 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/bochaSearchServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/bochaSearchServer.ts @@ -2,7 +2,7 @@ import { Server } from '@modelcontextprotocol/sdk/server/index.js' import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js' import { z } from 'zod' import { zodToJsonSchema } from 'zod-to-json-schema' -import { Transport } from '@modelcontextprotocol/sdk/shared/transport' +import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js' import axios from 'axios' // Schema definitions diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/braveSearchServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/braveSearchServer.ts index 9a0182640..7f5a1c8ad 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/braveSearchServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/braveSearchServer.ts @@ -2,7 +2,7 @@ import { Server } from '@modelcontextprotocol/sdk/server/index.js' import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js' import { z } from 'zod' import { zodToJsonSchema } from 'zod-to-json-schema' -import { Transport } from '@modelcontextprotocol/sdk/shared/transport' +import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js' import axios from 'axios' // Schema definitions diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/builtinKnowledgeServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/builtinKnowledgeServer.ts index c24f27ae0..487cfd9d6 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/builtinKnowledgeServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/builtinKnowledgeServer.ts @@ -2,7 +2,7 @@ import { Server } from '@modelcontextprotocol/sdk/server/index.js' import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js' import { z } from 'zod' import { zodToJsonSchema } from 'zod-to-json-schema' -import { Transport } from '@modelcontextprotocol/sdk/shared/transport' +import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js' import { BuiltinKnowledgeConfig, MCPTextContent, QueryResult } from '@shared/presenter' import { presenter } from '@/presenter' diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/conversationSearchServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/conversationSearchServer.ts index a6ac45522..36580bfe7 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/conversationSearchServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/conversationSearchServer.ts @@ -3,7 +3,7 @@ import { Server } from '@modelcontextprotocol/sdk/server/index.js' import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js' import { z } from 'zod' import { zodToJsonSchema } from 'zod-to-json-schema' -import { Transport } from '@modelcontextprotocol/sdk/shared/transport' +import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js' import { presenter } from '@/presenter' // 导入全局的 presenter 对象 import { eventBus } from '@/eventbus' // 引入 eventBus import { TAB_EVENTS } from '@/events' diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/customPromptsServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/customPromptsServer.ts index 6a4f5175d..fc9194399 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/customPromptsServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/customPromptsServer.ts @@ -3,7 +3,7 @@ import { ListPromptsRequestSchema, GetPromptRequestSchema } from '@modelcontextprotocol/sdk/types.js' -import { Transport } from '@modelcontextprotocol/sdk/shared/transport' +import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js' import { presenter } from '@/presenter' import { eventBus } from '@/eventbus' import { CONFIG_EVENTS } from '@/events' diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/deepResearchServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/deepResearchServer.ts index 1fb953475..318e8fbbd 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/deepResearchServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/deepResearchServer.ts @@ -6,7 +6,7 @@ import { Server } from '@modelcontextprotocol/sdk/server/index.js' import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js' import { z } from 'zod' import { zodToJsonSchema } from 'zod-to-json-schema' -import { Transport } from '@modelcontextprotocol/sdk/shared/transport' +import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js' import axios from 'axios' import { presenter } from '@/presenter' import { nanoid } from 'nanoid' diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/difyKnowledgeServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/difyKnowledgeServer.ts index 256f2ba25..2e44ab9e6 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/difyKnowledgeServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/difyKnowledgeServer.ts @@ -2,7 +2,7 @@ import { Server } from '@modelcontextprotocol/sdk/server/index.js' import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js' import { z } from 'zod' import { zodToJsonSchema } from 'zod-to-json-schema' -import { Transport } from '@modelcontextprotocol/sdk/shared/transport' +import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js' import axios from 'axios' // Schema definitions diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/fastGptKnowledgeServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/fastGptKnowledgeServer.ts index 2482c23dd..7038ddc11 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/fastGptKnowledgeServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/fastGptKnowledgeServer.ts @@ -2,7 +2,7 @@ import { Server } from '@modelcontextprotocol/sdk/server/index.js' import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js' import { z } from 'zod' import { zodToJsonSchema } from 'zod-to-json-schema' -import { Transport } from '@modelcontextprotocol/sdk/shared/transport' +import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js' import axios from 'axios' // Schema definitions diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/filesystem.ts b/src/main/presenter/mcpPresenter/inMemoryServers/filesystem.ts index 6e0ada967..44fc37e95 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/filesystem.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/filesystem.ts @@ -7,7 +7,7 @@ import { z } from 'zod' import { zodToJsonSchema } from 'zod-to-json-schema' import { createTwoFilesPatch } from 'diff' import { minimatch } from 'minimatch' -import { Transport } from '@modelcontextprotocol/sdk/shared/transport' +import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js' import { glob } from 'glob' // Schema definitions diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/imageServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/imageServer.ts index 48563a3af..5922fea1b 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/imageServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/imageServer.ts @@ -4,7 +4,7 @@ import fs from 'fs/promises' import path from 'path' import { z } from 'zod' import { zodToJsonSchema } from 'zod-to-json-schema' -import { Transport } from '@modelcontextprotocol/sdk/shared/transport' +import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js' import { presenter } from '@/presenter' import { ChatMessage, ChatMessageContent } from '@shared/presenter' // import { GenerateCompletionOptions } from '@/presenter/llmProviderPresenter' // Assuming this path and type exist - using any for now diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/meetingServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/meetingServer.ts index e0c036080..b5b0f2a10 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/meetingServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/meetingServer.ts @@ -4,7 +4,7 @@ import { Server } from '@modelcontextprotocol/sdk/server/index.js' import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js' import { z } from 'zod' import { zodToJsonSchema } from 'zod-to-json-schema' -import { Transport } from '@modelcontextprotocol/sdk/shared/transport' +import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js' import { presenter } from '@/presenter' import { eventBus } from '@/eventbus' import { TAB_EVENTS, MEETING_EVENTS, CONVERSATION_EVENTS } from '@/events' diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/powerpackServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/powerpackServer.ts index da93a5455..ff9e37346 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/powerpackServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/powerpackServer.ts @@ -2,7 +2,7 @@ import { Server } from '@modelcontextprotocol/sdk/server/index.js' import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js' import { z } from 'zod' import { zodToJsonSchema } from 'zod-to-json-schema' -import { Transport } from '@modelcontextprotocol/sdk/shared/transport' +import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js' import { ContentEnricher } from '@/presenter/threadPresenter/contentEnricher' import { app } from 'electron' import path from 'path' diff --git a/src/main/presenter/mcpPresenter/inMemoryServers/ragflowKnowledgeServer.ts b/src/main/presenter/mcpPresenter/inMemoryServers/ragflowKnowledgeServer.ts index b133d4ab3..9a7550c64 100644 --- a/src/main/presenter/mcpPresenter/inMemoryServers/ragflowKnowledgeServer.ts +++ b/src/main/presenter/mcpPresenter/inMemoryServers/ragflowKnowledgeServer.ts @@ -2,7 +2,7 @@ import { Server } from '@modelcontextprotocol/sdk/server/index.js' import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js' import { z } from 'zod' import { zodToJsonSchema } from 'zod-to-json-schema' -import { Transport } from '@modelcontextprotocol/sdk/shared/transport' +import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js' import axios from 'axios' // Schema definitions diff --git a/tsconfig.node.json b/tsconfig.node.json index 88c6f25a2..dc6f521a1 100644 --- a/tsconfig.node.json +++ b/tsconfig.node.json @@ -10,6 +10,7 @@ "composite": true, "resolveJsonModule": false, "types": ["electron-vite/node"], + "moduleResolution": "bundler", "baseUrl": ".", "paths": { "@/*": [