@lobehub/lobehub 2.0.0-next.374 → 2.0.0-next.376
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.
- package/.github/workflows/claude-migration-support.yml +1 -1
- package/.github/workflows/revalidate-docs.yml +25 -0
- package/CHANGELOG.md +66 -0
- package/apps/desktop/src/main/controllers/LocalFileCtr.ts +7 -1
- package/apps/desktop/src/main/controllers/ShellCommandCtr.ts +23 -10
- package/apps/desktop/src/main/controllers/__tests__/LocalFileCtr.test.ts +261 -0
- package/apps/desktop/src/main/controllers/__tests__/ShellCommandCtr.test.ts +36 -0
- package/apps/desktop/src/main/core/infrastructure/BackendProxyProtocolManager.ts +2 -1
- package/changelog/v1.json +21 -0
- package/docs/development/database-schema.dbml +89 -0
- package/docs/self-hosting/advanced/auth/nextauth-to-betterauth.mdx +6 -0
- package/docs/self-hosting/advanced/auth/nextauth-to-betterauth.zh-CN.mdx +5 -0
- package/docs/usage/features/auth.mdx +54 -33
- package/docs/usage/features/auth.zh-CN.mdx +56 -33
- package/locales/en-US/chat.json +13 -13
- package/locales/en-US/common.json +24 -0
- package/locales/en-US/setting.json +19 -0
- package/locales/zh-CN/authError.json +2 -0
- package/locales/zh-CN/chat.json +14 -14
- package/locales/zh-CN/common.json +24 -0
- package/locales/zh-CN/setting.json +19 -0
- package/package.json +2 -1
- package/packages/builtin-tool-group-agent-builder/src/ExecutionRuntime/index.ts +31 -9
- package/packages/builtin-tool-group-agent-builder/src/client/Inspector/InviteAgent/index.tsx +28 -12
- package/packages/builtin-tool-group-agent-builder/src/client/Inspector/RemoveAgent/index.tsx +28 -12
- package/packages/builtin-tool-group-agent-builder/src/types.ts +8 -0
- package/packages/builtin-tool-local-system/src/client/Render/EditLocalFile/index.tsx +1 -11
- package/packages/builtin-tool-local-system/src/client/Render/ListFiles/index.tsx +6 -11
- package/packages/context-engine/src/engine/tools/ToolsEngine.ts +16 -10
- package/packages/context-engine/src/engine/tools/__tests__/ToolsEngine.test.ts +142 -0
- package/packages/context-engine/src/engine/tools/types.ts +6 -0
- package/packages/database/migrations/0074_add_fk_indexes_for_cascade_delete.sql +56 -0
- package/packages/database/migrations/meta/0074_snapshot.json +10901 -0
- package/packages/database/migrations/meta/_journal.json +7 -0
- package/packages/database/src/models/message.ts +84 -81
- package/packages/database/src/repositories/search/index.ts +330 -570
- package/packages/database/src/schemas/agent.ts +4 -0
- package/packages/database/src/schemas/chatGroup.ts +2 -0
- package/packages/database/src/schemas/file.ts +4 -0
- package/packages/database/src/schemas/generation.ts +1 -0
- package/packages/database/src/schemas/message.ts +16 -0
- package/packages/database/src/schemas/nextauth.ts +15 -8
- package/packages/database/src/schemas/oidc.ts +104 -68
- package/packages/database/src/schemas/rag.ts +4 -0
- package/packages/database/src/schemas/ragEvals.ts +97 -73
- package/packages/database/src/schemas/relations.ts +7 -0
- package/packages/database/src/schemas/session.ts +1 -0
- package/packages/database/src/schemas/topic.ts +8 -1
- package/packages/desktop-bridge/src/index.ts +17 -0
- package/scripts/_shared/checkDeprecatedAuth.js +26 -0
- package/src/app/(backend)/trpc/async/[trpc]/route.ts +2 -0
- package/src/app/(backend)/trpc/lambda/[trpc]/route.ts +2 -5
- package/src/app/(backend)/trpc/mobile/[trpc]/route.ts +2 -5
- package/src/app/(backend)/trpc/tools/[trpc]/route.ts +2 -0
- package/src/app/[variants]/(auth)/signup/[[...signup]]/useSignUp.tsx +7 -4
- package/src/app/[variants]/(main)/agent/features/Conversation/AgentWelcome/index.tsx +3 -23
- package/src/app/[variants]/(main)/group/features/Conversation/AgentWelcome/index.tsx +3 -23
- package/src/app/[variants]/(main)/resource/(home)/index.tsx +4 -1
- package/src/app/[variants]/(main)/resource/library/_layout/Header/LibraryHead.tsx +3 -0
- package/src/app/[variants]/(main)/resource/library/_layout/Header/index.tsx +2 -1
- package/src/app/[variants]/(main)/settings/storage/features/Advanced.tsx +19 -12
- package/src/app/[variants]/(main)/settings/storage/index.tsx +19 -1
- package/src/business/client/features/AccountDeletion/index.tsx +3 -0
- package/src/business/server/lambda-routers/accountDeletion.ts +3 -0
- package/src/components/DragUpload/index.tsx +1 -1
- package/src/config/routes/index.ts +9 -1
- package/src/features/CommandMenu/ContextCommands.tsx +10 -2
- package/src/features/CommandMenu/MainMenu.tsx +29 -22
- package/src/features/CommandMenu/SearchResults.tsx +19 -0
- package/src/features/CommandMenu/components/CommandInput.tsx +1 -0
- package/src/features/CommandMenu/index.tsx +25 -3
- package/src/features/CommandMenu/styles.ts +1 -0
- package/src/features/CommandMenu/useCommandMenu.ts +8 -2
- package/src/features/CommandMenu/utils/contextCommands.ts +17 -2
- package/src/features/CommandMenu/utils/queryParser.ts +1 -0
- package/src/features/Conversation/ChatItem/ChatItem.tsx +4 -7
- package/src/features/Conversation/ChatItem/style.ts +0 -3
- package/src/features/Conversation/ChatItem/type.ts +4 -1
- package/src/features/Conversation/Messages/Assistant/index.tsx +6 -2
- package/src/features/Conversation/Messages/AssistantGroup/index.tsx +8 -3
- package/src/features/Conversation/Messages/Supervisor/index.tsx +6 -2
- package/src/features/Conversation/Messages/Task/index.tsx +6 -2
- package/src/features/Conversation/Messages/components/useNewScreen.test.ts +331 -0
- package/src/features/Conversation/Messages/components/useNewScreen.ts +80 -5
- package/src/features/Electron/connection/Connection.tsx +20 -15
- package/src/features/FileViewer/index.tsx +28 -5
- package/src/features/ModelSwitchPanel/components/List/ListItemRenderer.tsx +10 -9
- package/src/features/ModelSwitchPanel/components/List/MultipleProvidersModelItem.tsx +1 -0
- package/src/features/ModelSwitchPanel/components/Toolbar.tsx +1 -1
- package/src/features/ResourceManager/components/Editor/index.tsx +7 -4
- package/src/features/ResourceManager/components/Explorer/Header/index.tsx +1 -1
- package/src/features/ResourceManager/components/Explorer/ItemDropdown/useFileItemDropdown.tsx +12 -1
- package/src/features/ResourceManager/components/Explorer/ListView/ListItem/index.tsx +23 -43
- package/src/features/ResourceManager/components/Explorer/MasonryView/MasonryFileItem/ImageFileItem.tsx +1 -0
- package/src/features/ResourceManager/components/Explorer/MasonryView/MasonryFileItem/index.tsx +24 -44
- package/src/features/ResourceManager/components/Explorer/hooks/useFileItemClick.ts +78 -0
- package/src/features/ResourceManager/components/Header/AddButton.tsx +0 -5
- package/src/features/ResourceManager/index.tsx +38 -24
- package/src/libs/better-auth/define-config.ts +17 -0
- package/src/libs/better-auth/plugins/email-whitelist.ts +4 -1
- package/src/libs/redis/manager.ts +5 -9
- package/src/libs/trpc/utils/responseMeta.test.ts +82 -0
- package/src/libs/trpc/utils/responseMeta.ts +41 -0
- package/src/locales/default/authError.ts +3 -0
- package/src/locales/default/chat.ts +13 -13
- package/src/locales/default/common.ts +82 -4
- package/src/locales/default/setting.ts +23 -1
- package/src/server/modules/AgentRuntime/redis.ts +3 -0
- package/src/server/routers/lambda/index.ts +2 -0
- package/src/server/routers/lambda/search.ts +3 -2
- package/src/services/chat/chat.test.ts +125 -45
- package/src/services/chat/index.ts +10 -14
- package/src/services/chat/mecha/agentConfigResolver.ts +8 -0
- package/src/store/chat/slices/aiChat/actions/__tests__/streamingExecutor.test.ts +29 -0
- package/src/store/chat/slices/aiChat/actions/streamingExecutor.ts +27 -19
- package/src/utils/errorResponse.ts +2 -1
- package/src/app/[variants]/(main)/agent/features/Conversation/AgentWelcome/AddButton.tsx +0 -37
- package/src/app/[variants]/(main)/group/features/Conversation/AgentWelcome/AddButton.tsx +0 -32
|
@@ -518,6 +518,13 @@
|
|
|
518
518
|
"when": 1769272397744,
|
|
519
519
|
"tag": "0073_add_message_group_metadata",
|
|
520
520
|
"breakpoints": true
|
|
521
|
+
},
|
|
522
|
+
{
|
|
523
|
+
"idx": 74,
|
|
524
|
+
"version": "7",
|
|
525
|
+
"when": 1769341100106,
|
|
526
|
+
"tag": "0074_add_fk_indexes_for_cascade_delete",
|
|
527
|
+
"breakpoints": true
|
|
521
528
|
}
|
|
522
529
|
],
|
|
523
530
|
"version": "6"
|
|
@@ -600,20 +600,71 @@ export class MessageModel {
|
|
|
600
600
|
|
|
601
601
|
if (result.length === 0) return [];
|
|
602
602
|
|
|
603
|
-
// 2.
|
|
604
|
-
const
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
603
|
+
// 2. Run parallel queries for better performance
|
|
604
|
+
const taskMessageIds = result.filter((m) => m.role === 'task').map((m) => m.id as string);
|
|
605
|
+
|
|
606
|
+
const [rawRelatedFileList, chunksList, messageQueriesList, threadData] = await Promise.all([
|
|
607
|
+
// 2a. Get related files
|
|
608
|
+
this.db
|
|
609
|
+
.select({
|
|
610
|
+
fileType: files.fileType,
|
|
611
|
+
id: messagesFiles.fileId,
|
|
612
|
+
messageId: messagesFiles.messageId,
|
|
613
|
+
name: files.name,
|
|
614
|
+
size: files.size,
|
|
615
|
+
url: files.url,
|
|
616
|
+
})
|
|
617
|
+
.from(messagesFiles)
|
|
618
|
+
.leftJoin(files, eq(files.id, messagesFiles.fileId))
|
|
619
|
+
.where(inArray(messagesFiles.messageId, messageIds)),
|
|
616
620
|
|
|
621
|
+
// 2b. Get related file chunks
|
|
622
|
+
this.db
|
|
623
|
+
.select({
|
|
624
|
+
fileId: files.id,
|
|
625
|
+
fileType: files.fileType,
|
|
626
|
+
fileUrl: files.url,
|
|
627
|
+
filename: files.name,
|
|
628
|
+
id: chunks.id,
|
|
629
|
+
messageId: messageQueryChunks.messageId,
|
|
630
|
+
similarity: messageQueryChunks.similarity,
|
|
631
|
+
text: chunks.text,
|
|
632
|
+
})
|
|
633
|
+
.from(messageQueryChunks)
|
|
634
|
+
.leftJoin(chunks, eq(chunks.id, messageQueryChunks.chunkId))
|
|
635
|
+
.leftJoin(fileChunks, eq(fileChunks.chunkId, chunks.id))
|
|
636
|
+
.innerJoin(files, eq(fileChunks.fileId, files.id))
|
|
637
|
+
.where(inArray(messageQueryChunks.messageId, messageIds)),
|
|
638
|
+
|
|
639
|
+
// 2c. Get related message queries (RAG)
|
|
640
|
+
this.db
|
|
641
|
+
.select({
|
|
642
|
+
id: messageQueries.id,
|
|
643
|
+
messageId: messageQueries.messageId,
|
|
644
|
+
rewriteQuery: messageQueries.rewriteQuery,
|
|
645
|
+
userQuery: messageQueries.userQuery,
|
|
646
|
+
})
|
|
647
|
+
.from(messageQueries)
|
|
648
|
+
.where(inArray(messageQueries.messageId, messageIds)),
|
|
649
|
+
|
|
650
|
+
// 2d. Get thread info for task messages
|
|
651
|
+
taskMessageIds.length > 0
|
|
652
|
+
? this.db
|
|
653
|
+
.select({
|
|
654
|
+
metadata: threads.metadata,
|
|
655
|
+
sourceMessageId: threads.sourceMessageId,
|
|
656
|
+
status: threads.status,
|
|
657
|
+
threadId: threads.id,
|
|
658
|
+
title: threads.title,
|
|
659
|
+
})
|
|
660
|
+
.from(threads)
|
|
661
|
+
.where(
|
|
662
|
+
and(eq(threads.userId, this.userId), inArray(threads.sourceMessageId, taskMessageIds)),
|
|
663
|
+
)
|
|
664
|
+
: Promise.resolve([]),
|
|
665
|
+
]);
|
|
666
|
+
|
|
667
|
+
// 3. Process file results
|
|
617
668
|
const relatedFileList = await Promise.all(
|
|
618
669
|
rawRelatedFileList.map(async (file) => ({
|
|
619
670
|
...file,
|
|
@@ -650,74 +701,26 @@ export class MessageModel {
|
|
|
650
701
|
(i) => !(i.fileType || '').startsWith('image') && !(i.fileType || '').startsWith('video'),
|
|
651
702
|
);
|
|
652
703
|
|
|
653
|
-
//
|
|
654
|
-
const
|
|
655
|
-
.
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
.select({
|
|
674
|
-
id: messageQueries.id,
|
|
675
|
-
messageId: messageQueries.messageId,
|
|
676
|
-
rewriteQuery: messageQueries.rewriteQuery,
|
|
677
|
-
userQuery: messageQueries.userQuery,
|
|
678
|
-
})
|
|
679
|
-
.from(messageQueries)
|
|
680
|
-
.where(inArray(messageQueries.messageId, messageIds));
|
|
681
|
-
|
|
682
|
-
// 5. Get thread info for task messages
|
|
683
|
-
const taskMessageIds = result.filter((m) => m.role === 'task').map((m) => m.id as string);
|
|
684
|
-
|
|
685
|
-
let threadMap = new Map<string, TaskDetail>();
|
|
686
|
-
|
|
687
|
-
if (taskMessageIds.length > 0) {
|
|
688
|
-
const threadData = await this.db
|
|
689
|
-
.select({
|
|
690
|
-
metadata: threads.metadata,
|
|
691
|
-
sourceMessageId: threads.sourceMessageId,
|
|
692
|
-
status: threads.status,
|
|
693
|
-
threadId: threads.id,
|
|
694
|
-
title: threads.title,
|
|
695
|
-
})
|
|
696
|
-
.from(threads)
|
|
697
|
-
.where(
|
|
698
|
-
and(eq(threads.userId, this.userId), inArray(threads.sourceMessageId, taskMessageIds)),
|
|
699
|
-
);
|
|
700
|
-
|
|
701
|
-
threadMap = new Map(
|
|
702
|
-
threadData.map((t) => {
|
|
703
|
-
const metadata = t.metadata as Record<string, unknown> | null;
|
|
704
|
-
return [
|
|
705
|
-
t.sourceMessageId!,
|
|
706
|
-
{
|
|
707
|
-
clientMode: metadata?.clientMode as boolean | undefined,
|
|
708
|
-
duration: metadata?.duration as number | undefined,
|
|
709
|
-
status: t.status as ThreadStatus,
|
|
710
|
-
threadId: t.threadId,
|
|
711
|
-
title: t.title ?? undefined,
|
|
712
|
-
totalCost: metadata?.totalCost as number | undefined,
|
|
713
|
-
totalMessages: metadata?.totalMessages as number | undefined,
|
|
714
|
-
totalTokens: metadata?.totalTokens as number | undefined,
|
|
715
|
-
totalToolCalls: metadata?.totalToolCalls as number | undefined,
|
|
716
|
-
},
|
|
717
|
-
];
|
|
718
|
-
}),
|
|
719
|
-
);
|
|
720
|
-
}
|
|
704
|
+
// 4. Build thread map
|
|
705
|
+
const threadMap = new Map(
|
|
706
|
+
threadData.map((t) => {
|
|
707
|
+
const metadata = t.metadata as Record<string, unknown> | null;
|
|
708
|
+
return [
|
|
709
|
+
t.sourceMessageId!,
|
|
710
|
+
{
|
|
711
|
+
clientMode: metadata?.clientMode as boolean | undefined,
|
|
712
|
+
duration: metadata?.duration as number | undefined,
|
|
713
|
+
status: t.status as ThreadStatus,
|
|
714
|
+
threadId: t.threadId,
|
|
715
|
+
title: t.title ?? undefined,
|
|
716
|
+
totalCost: metadata?.totalCost as number | undefined,
|
|
717
|
+
totalMessages: metadata?.totalMessages as number | undefined,
|
|
718
|
+
totalTokens: metadata?.totalTokens as number | undefined,
|
|
719
|
+
totalToolCalls: metadata?.totalToolCalls as number | undefined,
|
|
720
|
+
},
|
|
721
|
+
];
|
|
722
|
+
}),
|
|
723
|
+
);
|
|
721
724
|
|
|
722
725
|
// 6. Transform messages to UIChatMessage format
|
|
723
726
|
return result.map(
|