@lobehub/lobehub 2.0.0-next.255 → 2.0.0-next.257

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.
Files changed (144) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/changelog/v1.json +18 -0
  3. package/locales/en-US/plugin.json +1 -0
  4. package/locales/zh-CN/plugin.json +1 -0
  5. package/package.json +1 -1
  6. package/packages/builtin-tool-notebook/src/client/Placeholder/CreateDocument.tsx +6 -6
  7. package/packages/builtin-tool-notebook/src/client/Render/CreateDocument/DocumentCard.tsx +23 -10
  8. package/packages/builtin-tool-notebook/src/client/Streaming/CreateDocument/index.tsx +1 -1
  9. package/packages/database/src/models/__tests__/agent.test.ts +91 -4
  10. package/packages/database/src/models/agent.ts +15 -7
  11. package/packages/editor-runtime/src/EditorRuntime.ts +1 -1
  12. package/packages/editor-runtime/src/__tests__/EditorRuntime.real.test.ts +65 -4
  13. package/packages/editor-runtime/src/__tests__/__snapshots__/EditorRuntime.real.test.ts.snap +108 -17
  14. package/packages/editor-runtime/src/__tests__/fixtures/remove-then-add.json +636 -0
  15. package/packages/editor-runtime/src/__tests__/fixtures/remove.json +1 -0
  16. package/packages/types/src/agent/agentConfig.ts +8 -8
  17. package/src/app/[variants]/(main)/chat/features/Portal/_layout/Mobile.tsx +2 -1
  18. package/src/app/[variants]/(main)/group/features/Portal/_layout/Mobile.tsx +2 -1
  19. package/src/app/[variants]/(main)/home/_layout/hooks/useCreateMenuItems.tsx +2 -2
  20. package/src/app/[variants]/(main)/page/{features/PageTitle → PageTitle}/index.tsx +0 -1
  21. package/src/app/[variants]/(main)/page/[id]/index.tsx +43 -1
  22. package/src/app/[variants]/(main)/page/_layout/Body/AllPagesDrawer/Content.tsx +15 -15
  23. package/src/app/[variants]/(main)/page/_layout/Body/List/Item/Editing.tsx +3 -3
  24. package/src/app/[variants]/(main)/page/_layout/Body/List/Item/index.tsx +7 -12
  25. package/src/app/[variants]/(main)/page/_layout/Body/List/Item/useDropdownMenu.tsx +5 -5
  26. package/src/app/[variants]/(main)/page/_layout/Body/List/index.tsx +7 -7
  27. package/src/app/[variants]/(main)/page/_layout/Body/index.tsx +15 -9
  28. package/src/app/[variants]/(main)/page/_layout/Body/useDropdownMenu.tsx +3 -3
  29. package/src/app/[variants]/(main)/page/_layout/DataSync.tsx +15 -0
  30. package/src/app/[variants]/(main)/page/_layout/Header/AddButton.tsx +2 -2
  31. package/src/app/[variants]/(main)/page/_layout/index.tsx +2 -0
  32. package/src/app/[variants]/(main)/page/index.tsx +3 -7
  33. package/src/components/Editor/AutoSaveHint.tsx +1 -1
  34. package/src/features/Conversation/Messages/User/Actions/index.tsx +5 -1
  35. package/src/features/EditorCanvas/AutoSaveHint.tsx +37 -0
  36. package/src/features/{PageEditor → EditorCanvas}/DiffAllToolbar.tsx +57 -16
  37. package/src/features/EditorCanvas/DocumentIdMode.tsx +111 -0
  38. package/src/features/EditorCanvas/EditorCanvas.tsx +148 -0
  39. package/src/features/EditorCanvas/EditorDataMode.tsx +64 -0
  40. package/src/features/EditorCanvas/ErrorBoundary.tsx +66 -0
  41. package/src/features/EditorCanvas/InlineToolbar.tsx +245 -0
  42. package/src/features/EditorCanvas/InternalEditor.tsx +134 -0
  43. package/src/features/{PageEditor/EditorCanvas → EditorCanvas}/actions.ts +10 -8
  44. package/src/features/EditorCanvas/index.ts +9 -0
  45. package/src/features/PageEditor/Copilot/index.tsx +16 -1
  46. package/src/features/PageEditor/EditorCanvas/index.tsx +14 -111
  47. package/src/features/PageEditor/EditorCanvas/useAskCopilotItem.tsx +95 -0
  48. package/src/features/PageEditor/EditorCanvas/useSlashItems.tsx +1 -1
  49. package/src/features/PageEditor/Header/Breadcrumb.tsx +2 -2
  50. package/src/features/PageEditor/Header/index.tsx +15 -18
  51. package/src/features/PageEditor/Header/useMenu.tsx +12 -9
  52. package/src/features/PageEditor/PageEditor.tsx +45 -21
  53. package/src/features/PageEditor/PageEditorProvider.tsx +13 -1
  54. package/src/features/PageEditor/PageTitle/index.tsx +2 -2
  55. package/src/features/PageEditor/StoreUpdater.tsx +35 -308
  56. package/src/features/PageEditor/{Body/Title.tsx → TitleSection.tsx} +16 -16
  57. package/src/features/PageEditor/store/action.ts +96 -188
  58. package/src/features/PageEditor/store/initialState.ts +16 -21
  59. package/src/features/PageEditor/store/selectors.ts +3 -4
  60. package/src/features/PageExplorer/PageExplorerPlaceholder.tsx +22 -14
  61. package/src/features/PageExplorer/index.tsx +34 -67
  62. package/src/features/Portal/Artifacts/index.ts +0 -2
  63. package/src/features/Portal/Document/AutoSaveHint.tsx +7 -6
  64. package/src/features/Portal/Document/Body.tsx +1 -3
  65. package/src/features/Portal/Document/EditorCanvas.tsx +7 -50
  66. package/src/features/Portal/Document/Header.tsx +13 -10
  67. package/src/features/Portal/Document/TodoList.tsx +6 -4
  68. package/src/features/Portal/Document/Wrapper.tsx +3 -11
  69. package/src/features/Portal/Document/index.ts +0 -2
  70. package/src/features/Portal/FilePreview/index.ts +0 -2
  71. package/src/features/Portal/GroupThread/index.ts +0 -3
  72. package/src/features/Portal/MessageDetail/index.ts +0 -2
  73. package/src/features/Portal/Notebook/index.ts +0 -2
  74. package/src/features/Portal/Plugins/index.ts +0 -2
  75. package/src/features/Portal/Thread/index.ts +0 -3
  76. package/src/features/Portal/components/Header.tsx +18 -6
  77. package/src/features/Portal/router.tsx +34 -97
  78. package/src/features/Portal/type.ts +0 -2
  79. package/src/features/RightPanel/index.tsx +11 -2
  80. package/src/locales/default/plugin.ts +1 -0
  81. package/src/store/chat/slices/portal/action.test.ts +218 -15
  82. package/src/store/chat/slices/portal/action.ts +194 -41
  83. package/src/store/chat/slices/portal/initialState.ts +40 -1
  84. package/src/store/chat/slices/portal/selectors/thread.ts +44 -3
  85. package/src/store/chat/slices/portal/selectors.test.ts +119 -17
  86. package/src/store/chat/slices/portal/selectors.ts +117 -36
  87. package/src/store/document/index.ts +17 -5
  88. package/src/store/document/slices/document/action.ts +209 -0
  89. package/src/store/document/slices/document/index.ts +6 -0
  90. package/src/store/document/slices/editor/action.test.ts +340 -0
  91. package/src/store/document/slices/editor/action.ts +133 -149
  92. package/src/store/document/slices/editor/index.ts +9 -2
  93. package/src/store/document/slices/editor/initialState.ts +66 -29
  94. package/src/store/document/slices/editor/reducer.test.ts +217 -0
  95. package/src/store/document/slices/editor/reducer.ts +67 -0
  96. package/src/store/document/slices/editor/selectors.test.ts +395 -0
  97. package/src/store/document/slices/editor/selectors.ts +107 -5
  98. package/src/store/document/store.ts +12 -13
  99. package/src/store/file/slices/document/action.ts +19 -188
  100. package/src/store/file/slices/document/initialState.ts +0 -30
  101. package/src/store/file/slices/document/selectors.ts +25 -59
  102. package/src/store/global/initialState.ts +2 -0
  103. package/src/store/global/selectors/systemStatus.ts +2 -0
  104. package/src/store/notebook/index.ts +5 -4
  105. package/src/store/page/index.ts +2 -0
  106. package/src/store/page/initialState.ts +92 -0
  107. package/src/store/page/selectors.ts +5 -0
  108. package/src/store/page/slices/crud/action.ts +477 -0
  109. package/src/store/page/slices/crud/index.ts +2 -0
  110. package/src/store/page/slices/crud/initialState.ts +7 -0
  111. package/src/store/page/slices/internal/action.ts +32 -0
  112. package/src/store/page/slices/internal/index.ts +2 -0
  113. package/src/store/page/slices/internal/reducer.ts +105 -0
  114. package/src/store/page/slices/list/action.ts +206 -0
  115. package/src/store/page/slices/list/index.ts +3 -0
  116. package/src/store/page/slices/list/initialState.ts +29 -0
  117. package/src/store/page/slices/list/selectors.ts +90 -0
  118. package/src/store/page/slices/selection/action.ts +67 -0
  119. package/src/store/page/slices/selection/index.ts +2 -0
  120. package/src/store/page/slices/selection/initialState.ts +11 -0
  121. package/src/store/page/store.ts +29 -0
  122. package/src/store/tool/slices/lobehubSkillStore/selectors.ts +10 -20
  123. package/src/utils/identifier.ts +8 -2
  124. package/src/features/PageEditor/Body/index.tsx +0 -68
  125. package/src/features/PageEditor/EditorCanvas/InlineToolbar.tsx +0 -316
  126. package/src/features/PageEditor/Header/AutoSaveHint.tsx +0 -27
  127. package/src/features/Portal/Artifacts/useEnable.ts +0 -4
  128. package/src/features/Portal/Document/DocumentEditorProvider.tsx +0 -34
  129. package/src/features/Portal/Document/StoreUpdater.tsx +0 -80
  130. package/src/features/Portal/Document/Title.tsx +0 -54
  131. package/src/features/Portal/Document/store/action.ts +0 -114
  132. package/src/features/Portal/Document/store/index.ts +0 -21
  133. package/src/features/Portal/Document/store/initialState.ts +0 -24
  134. package/src/features/Portal/Document/useEnable.ts +0 -8
  135. package/src/features/Portal/FilePreview/useEnable.ts +0 -6
  136. package/src/features/Portal/GroupThread/hook.ts +0 -9
  137. package/src/features/Portal/MessageDetail/useEnable.ts +0 -4
  138. package/src/features/Portal/Notebook/useEnable.ts +0 -6
  139. package/src/features/Portal/Plugins/useEnable.ts +0 -6
  140. package/src/features/Portal/Thread/hook.ts +0 -8
  141. package/src/store/document/slices/notebook/action.ts +0 -119
  142. package/src/store/document/slices/notebook/index.ts +0 -3
  143. package/src/store/document/slices/notebook/initialState.ts +0 -12
  144. package/src/store/document/slices/notebook/selectors.ts +0 -26
@@ -1,9 +0,0 @@
1
- import { useAgentGroupStore } from '@/store/agentGroup';
2
- import { useChatStore } from '@/store/chat';
3
-
4
- export const useEnable = () => useAgentGroupStore((s) => !!s.activeThreadAgentId);
5
-
6
- export const onClose = () => {
7
- useAgentGroupStore.setState({ activeThreadAgentId: '' });
8
- useChatStore.getState().togglePortal(false);
9
- };
@@ -1,4 +0,0 @@
1
- import { useChatStore } from '@/store/chat';
2
- import { chatPortalSelectors } from '@/store/chat/selectors';
3
-
4
- export const useEnable = () => useChatStore(chatPortalSelectors.showMessageDetail);
@@ -1,6 +0,0 @@
1
- import { useChatStore } from '@/store/chat';
2
- import { chatPortalSelectors } from '@/store/chat/selectors';
3
-
4
- export const useEnable = () => {
5
- return useChatStore(chatPortalSelectors.showNotebook);
6
- };
@@ -1,6 +0,0 @@
1
- import { useChatStore } from '@/store/chat';
2
- import { chatPortalSelectors } from '@/store/chat/selectors';
3
-
4
- export const useEnable = () => {
5
- return useChatStore(chatPortalSelectors.showPluginUI);
6
- };
@@ -1,8 +0,0 @@
1
- import { useChatStore } from '@/store/chat';
2
- import { portalThreadSelectors } from '@/store/chat/selectors';
3
-
4
- export const useEnable = () => useChatStore(portalThreadSelectors.showThread);
5
-
6
- export const onClose = () => {
7
- useChatStore.setState({ portalThreadId: undefined });
8
- };
@@ -1,119 +0,0 @@
1
- import { type DocumentType } from '@lobechat/builtin-tool-notebook';
2
- import { type DocumentItem } from '@lobechat/database/schemas';
3
- import { type NotebookDocument } from '@lobechat/types';
4
- import isEqual from 'fast-deep-equal';
5
- import { type SWRResponse, mutate } from 'swr';
6
- import { type StateCreator } from 'zustand/vanilla';
7
-
8
- import { useClientDataSWR } from '@/libs/swr';
9
- import { notebookService } from '@/services/notebook';
10
- import { useChatStore } from '@/store/chat';
11
- import { setNamespace } from '@/utils/storeDebug';
12
-
13
- import type { DocumentStore } from '../../store';
14
-
15
- const n = setNamespace('document/notebook');
16
-
17
- const SWR_USE_FETCH_NOTEBOOK_DOCUMENTS = 'SWR_USE_FETCH_NOTEBOOK_DOCUMENTS';
18
-
19
- type ExtendedDocumentType = DocumentType | 'agent/plan';
20
-
21
- interface CreateDocumentParams {
22
- content: string;
23
- description: string;
24
- title: string;
25
- topicId: string;
26
- type?: ExtendedDocumentType;
27
- }
28
-
29
- interface UpdateDocumentParams {
30
- content?: string;
31
- description?: string;
32
- id: string;
33
- title?: string;
34
- }
35
-
36
- export interface NotebookAction {
37
- createDocument: (params: CreateDocumentParams) => Promise<DocumentItem>;
38
- deleteDocument: (id: string, topicId: string) => Promise<void>;
39
- refreshDocuments: (topicId: string) => Promise<void>;
40
- updateDocument: (
41
- params: UpdateDocumentParams,
42
- topicId: string,
43
- ) => Promise<DocumentItem | undefined>;
44
- useFetchDocuments: (topicId: string | undefined) => SWRResponse<NotebookDocument[]>;
45
- }
46
-
47
- export const createNotebookSlice: StateCreator<
48
- DocumentStore,
49
- [['zustand/devtools', never]],
50
- [],
51
- NotebookAction
52
- > = (set, get) => ({
53
- createDocument: async (params) => {
54
- const document = await notebookService.createDocument(params);
55
-
56
- // Refresh the documents list
57
- await mutate([SWR_USE_FETCH_NOTEBOOK_DOCUMENTS, params.topicId]);
58
-
59
- return document;
60
- },
61
-
62
- deleteDocument: async (id, topicId) => {
63
- // If the deleted document is currently open, close it
64
- const portalDocumentId = useChatStore.getState().portalDocumentId;
65
- if (portalDocumentId === id) {
66
- useChatStore.getState().closeDocument();
67
- }
68
-
69
- // Call API to delete
70
- await notebookService.deleteDocument(id);
71
-
72
- // Refresh the documents list
73
- await mutate([SWR_USE_FETCH_NOTEBOOK_DOCUMENTS, topicId]);
74
- },
75
-
76
- refreshDocuments: async (topicId) => {
77
- await mutate([SWR_USE_FETCH_NOTEBOOK_DOCUMENTS, topicId]);
78
- },
79
-
80
- updateDocument: async (params, topicId) => {
81
- const document = await notebookService.updateDocument(params);
82
-
83
- // Refresh the documents list
84
- await mutate([SWR_USE_FETCH_NOTEBOOK_DOCUMENTS, topicId]);
85
-
86
- return document;
87
- },
88
-
89
- useFetchDocuments: (topicId) => {
90
- return useClientDataSWR<NotebookDocument[]>(
91
- topicId ? [SWR_USE_FETCH_NOTEBOOK_DOCUMENTS, topicId] : null,
92
- async () => {
93
- if (!topicId) return [];
94
-
95
- const result = await notebookService.listDocuments({ topicId });
96
-
97
- return result.data;
98
- },
99
- {
100
- onSuccess: (documents) => {
101
- if (!topicId) return;
102
-
103
- const currentDocuments = get().notebookMap[topicId];
104
-
105
- // Skip update if data is the same
106
- if (currentDocuments && isEqual(documents, currentDocuments)) return;
107
-
108
- set(
109
- {
110
- notebookMap: { ...get().notebookMap, [topicId]: documents },
111
- },
112
- false,
113
- n('useFetchDocuments(onSuccess)', { topicId }),
114
- );
115
- },
116
- },
117
- );
118
- },
119
- });
@@ -1,3 +0,0 @@
1
- export { createNotebookSlice, type NotebookAction } from './action';
2
- export { initialNotebookState, type NotebookState } from './initialState';
3
- export { notebookSelectors } from './selectors';
@@ -1,12 +0,0 @@
1
- import { type NotebookDocument } from '@lobechat/types';
2
-
3
- export interface NotebookState {
4
- /**
5
- * Map of topicId -> notebook documents list
6
- */
7
- notebookMap: Record<string, NotebookDocument[]>;
8
- }
9
-
10
- export const initialNotebookState: NotebookState = {
11
- notebookMap: {},
12
- };
@@ -1,26 +0,0 @@
1
- import type { DocumentStore } from '../../store';
2
-
3
- const getDocumentById =
4
- (topicId: string | undefined, documentId: string | undefined) => (s: DocumentStore) => {
5
- if (!topicId || !documentId) return null;
6
- const docs = s.notebookMap[topicId];
7
- if (!docs) return null;
8
- return docs.find((d) => d.id === documentId) || null;
9
- };
10
-
11
- const getDocumentsByTopicId = (topicId: string | undefined) => (s: DocumentStore) => {
12
- if (!topicId) return [];
13
- return s.notebookMap[topicId] || [];
14
- };
15
-
16
- const hasDocuments = (topicId: string | undefined) => (s: DocumentStore) => {
17
- if (!topicId) return false;
18
- const docs = s.notebookMap[topicId];
19
- return docs && docs.length > 0;
20
- };
21
-
22
- export const notebookSelectors = {
23
- getDocumentById,
24
- getDocumentsByTopicId,
25
- hasDocuments,
26
- };