@lobehub/lobehub 2.0.0-next.342 → 2.0.0-next.343

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 (79) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/changelog/v1.json +12 -0
  3. package/package.json +1 -1
  4. package/packages/database/src/models/__tests__/userMemories.test.ts +62 -5
  5. package/packages/database/src/models/agentCronJob.ts +9 -9
  6. package/packages/database/src/models/userMemory/__tests__/identity.test.ts +5 -5
  7. package/packages/database/src/models/userMemory/experience.ts +91 -1
  8. package/packages/database/src/models/userMemory/identity.ts +93 -2
  9. package/packages/database/src/models/userMemory/model.ts +27 -8
  10. package/packages/types/src/userMemory/experience.ts +25 -0
  11. package/packages/types/src/userMemory/identity.ts +27 -0
  12. package/packages/types/src/userMemory/index.ts +1 -0
  13. package/packages/types/src/userMemory/shared.ts +30 -0
  14. package/src/app/[variants]/(main)/group/profile/features/Header/index.tsx +3 -4
  15. package/src/app/[variants]/(main)/home/features/InputArea/SkillInstallBanner.tsx +7 -8
  16. package/src/app/[variants]/(main)/memory/(home)/features/Persona/PersonaDetail.tsx +58 -0
  17. package/src/app/[variants]/(main)/memory/(home)/features/Persona/PersonaHeader.tsx +22 -0
  18. package/src/app/[variants]/(main)/memory/(home)/features/Persona/PersonaSummary.tsx +43 -0
  19. package/src/app/[variants]/(main)/memory/(home)/features/Persona/index.tsx +53 -0
  20. package/src/app/[variants]/(main)/memory/(home)/features/RoleTagCloud/index.tsx +2 -2
  21. package/src/app/[variants]/(main)/memory/(home)/index.tsx +15 -3
  22. package/src/app/[variants]/(main)/memory/experiences/features/List/GridView/ExperienceCard.tsx +3 -3
  23. package/src/app/[variants]/(main)/memory/experiences/features/List/GridView/index.tsx +3 -3
  24. package/src/app/[variants]/(main)/memory/experiences/features/List/TimelineView/ExperienceCard.tsx +3 -3
  25. package/src/app/[variants]/(main)/memory/experiences/features/List/TimelineView/index.tsx +3 -3
  26. package/src/app/[variants]/(main)/memory/features/SourceLink.tsx +2 -11
  27. package/src/app/[variants]/(main)/memory/features/TimeLineView/TimeLineCard.tsx +2 -9
  28. package/src/app/[variants]/(main)/memory/identities/features/IdentityRightPanel.tsx +1 -1
  29. package/src/app/[variants]/(main)/memory/identities/features/List/GridView/IdentityCard.tsx +5 -4
  30. package/src/app/[variants]/(main)/memory/identities/features/List/GridView/index.tsx +3 -3
  31. package/src/app/[variants]/(main)/memory/identities/features/List/TimelineView/IdentityCard.tsx +6 -6
  32. package/src/app/[variants]/(main)/memory/identities/features/List/TimelineView/index.tsx +6 -4
  33. package/src/app/[variants]/(main)/settings/profile/index.tsx +8 -8
  34. package/src/app/[variants]/(main)/settings/provider/features/ProviderConfig/index.tsx +0 -1
  35. package/src/app/[variants]/(main)/settings/skill/features/Actions.tsx +0 -1
  36. package/src/app/[variants]/(main)/settings/skill/features/KlavisSkillItem.tsx +9 -10
  37. package/src/app/[variants]/(main)/settings/skill/features/LobehubSkillItem.tsx +9 -10
  38. package/src/app/[variants]/(main)/settings/skill/features/McpSkillItem.tsx +4 -5
  39. package/src/app/[variants]/(main)/settings/skill/features/SkillList.tsx +4 -5
  40. package/src/app/[variants]/share/t/[id]/SharedMessageList.tsx +1 -4
  41. package/src/app/[variants]/share/t/[id]/_layout/index.tsx +47 -121
  42. package/src/app/[variants]/share/t/[id]/_layout/style.ts +59 -0
  43. package/src/app/[variants]/share/t/[id]/features/Portal/index.tsx +4 -5
  44. package/src/app/[variants]/share/t/[id]/index.tsx +30 -37
  45. package/src/components/404/index.tsx +15 -9
  46. package/src/components/DragUpload/index.tsx +15 -16
  47. package/src/features/EditorCanvas/DocumentIdMode.tsx +1 -2
  48. package/src/features/IntegrationDetailModal/index.tsx +11 -12
  49. package/src/features/ResourceManager/index.tsx +13 -6
  50. package/src/features/ShareModal/ShareImage/Preview.tsx +19 -28
  51. package/src/features/ShareModal/ShareImage/style.ts +4 -2
  52. package/src/features/ShareModal/index.tsx +5 -1
  53. package/src/features/ShareModal/style.ts +1 -0
  54. package/src/features/ShareModal/useContainerStyles.ts +1 -1
  55. package/src/features/SharePopover/index.tsx +16 -9
  56. package/src/features/SharePopover/style.ts +2 -2
  57. package/src/features/SkillStore/CommunityList/Item.tsx +2 -2
  58. package/src/features/SkillStore/LobeHubList/Item.tsx +2 -2
  59. package/src/features/SkillStore/LobeHubList/index.tsx +2 -3
  60. package/src/features/SkillStore/style.ts +4 -4
  61. package/src/layout/GlobalProvider/ServerVersionOutdatedAlert.tsx +28 -20
  62. package/src/server/routers/lambda/userMemories.ts +61 -5
  63. package/src/server/routers/lambda/userMemory.ts +5 -1
  64. package/src/services/chat/index.ts +2 -2
  65. package/src/services/userMemory/index.ts +25 -1
  66. package/src/store/chat/slices/aiChat/actions/streamingExecutor.ts +0 -1
  67. package/src/store/userMemory/initialState.ts +22 -52
  68. package/src/store/userMemory/slices/context/action.ts +1 -1
  69. package/src/store/userMemory/slices/context/index.ts +1 -0
  70. package/src/store/userMemory/slices/context/initialState.ts +22 -0
  71. package/src/store/userMemory/slices/experience/action.ts +10 -22
  72. package/src/store/userMemory/slices/experience/index.ts +1 -0
  73. package/src/store/userMemory/slices/experience/initialState.ts +22 -0
  74. package/src/store/userMemory/slices/home/action.ts +17 -0
  75. package/src/store/userMemory/slices/identity/action.ts +36 -24
  76. package/src/store/userMemory/slices/identity/initialState.ts +7 -4
  77. package/src/store/userMemory/slices/preference/action.ts +1 -1
  78. package/src/store/userMemory/slices/preference/index.ts +1 -0
  79. package/src/store/userMemory/slices/preference/initialState.ts +22 -0
@@ -1,7 +1,6 @@
1
1
  import {
2
- LayersEnum,
2
+ type IdentityListResult,
3
3
  type NewUserMemoryIdentity,
4
- type TypesEnum,
5
4
  type UpdateUserMemoryIdentity,
6
5
  } from '@lobechat/types';
7
6
  import { uniqBy } from 'es-toolkit/compat';
@@ -21,7 +20,9 @@ export interface IdentityQueryParams {
21
20
  page?: number;
22
21
  pageSize?: number;
23
22
  q?: string;
24
- types?: TypesEnum[];
23
+ relationships?: string[];
24
+ sort?: 'capturedAt' | 'type';
25
+ types?: string[];
25
26
  }
26
27
 
27
28
  export interface IdentityAction {
@@ -30,7 +31,7 @@ export interface IdentityAction {
30
31
  loadMoreIdentities: () => void;
31
32
  resetIdentitiesList: (params?: Omit<IdentityQueryParams, 'page' | 'pageSize'>) => void;
32
33
  updateIdentity: (id: string, data: UpdateUserMemoryIdentity) => Promise<boolean>;
33
- useFetchIdentities: (params: IdentityQueryParams) => SWRResponse<any>;
34
+ useFetchIdentities: (params: IdentityQueryParams) => SWRResponse<IdentityListResult>;
34
35
  }
35
36
 
36
37
  export const createIdentitySlice: StateCreator<
@@ -42,14 +43,24 @@ export const createIdentitySlice: StateCreator<
42
43
  createIdentity: async (data) => {
43
44
  const result = await memoryCRUDService.createIdentity(data);
44
45
  // Reset list to refresh
45
- get().resetIdentitiesList({ q: get().identitiesQuery, types: get().identitiesTypes });
46
+ get().resetIdentitiesList({
47
+ q: get().identitiesQuery,
48
+ relationships: get().identitiesRelationships,
49
+ sort: get().identitiesSort,
50
+ types: get().identitiesTypes,
51
+ });
46
52
  return result;
47
53
  },
48
54
 
49
55
  deleteIdentity: async (id) => {
50
56
  await memoryCRUDService.deleteIdentity(id);
51
57
  // Reset list to refresh
52
- get().resetIdentitiesList({ q: get().identitiesQuery, types: get().identitiesTypes });
58
+ get().resetIdentitiesList({
59
+ q: get().identitiesQuery,
60
+ relationships: get().identitiesRelationships,
61
+ sort: get().identitiesSort,
62
+ types: get().identitiesTypes,
63
+ });
53
64
  },
54
65
 
55
66
  loadMoreIdentities: () => {
@@ -71,7 +82,9 @@ export const createIdentitySlice: StateCreator<
71
82
  draft.identities = [];
72
83
  draft.identitiesPage = 1;
73
84
  draft.identitiesQuery = params?.q;
85
+ draft.identitiesRelationships = params?.relationships;
74
86
  draft.identitiesSearchLoading = true;
87
+ draft.identitiesSort = params?.sort;
75
88
  draft.identitiesTypes = params?.types;
76
89
  }),
77
90
  false,
@@ -82,7 +95,12 @@ export const createIdentitySlice: StateCreator<
82
95
  updateIdentity: async (id, data) => {
83
96
  const result = await memoryCRUDService.updateIdentity(id, data);
84
97
  // Reset list to refresh
85
- get().resetIdentitiesList({ q: get().identitiesQuery, types: get().identitiesTypes });
98
+ get().resetIdentitiesList({
99
+ q: get().identitiesQuery,
100
+ relationships: get().identitiesRelationships,
101
+ sort: get().identitiesSort,
102
+ types: get().identitiesTypes,
103
+ });
86
104
  return result;
87
105
  },
88
106
 
@@ -92,6 +110,8 @@ export const createIdentitySlice: StateCreator<
92
110
  params.page,
93
111
  params.pageSize,
94
112
  params.q,
113
+ params.relationships?.join(','),
114
+ params.sort,
95
115
  params.types?.join(','),
96
116
  ];
97
117
  const swrKey = swrKeyParts
@@ -102,42 +122,34 @@ export const createIdentitySlice: StateCreator<
102
122
  return useSWR(
103
123
  swrKey,
104
124
  async () => {
105
- return await userMemoryService.queryMemories({
106
- layer: LayersEnum.Identity,
125
+ // Use the new dedicated queryIdentities API
126
+ return userMemoryService.queryIdentities({
107
127
  page: params.page,
108
128
  pageSize: params.pageSize,
109
129
  q: params.q,
130
+ relationships: params.relationships,
131
+ sort: params.sort,
110
132
  types: params.types,
111
133
  });
112
134
  },
113
135
  {
114
- onSuccess(data: any) {
136
+ onSuccess(data: IdentityListResult) {
115
137
  set(
116
138
  produce((draft) => {
117
139
  draft.identitiesSearchLoading = false;
140
+ draft.identitiesTotal = data.total;
118
141
 
119
- // 设置基础信息
120
142
  if (!draft.identitiesInit) {
121
143
  draft.identitiesInit = true;
122
- draft.identitiesTotal = data.total;
123
144
  }
124
145
 
125
- // 转换数据结构
126
- const transformedItems = data.items.map((item: any) => ({
127
- ...item.memory,
128
- ...item.identity,
129
- }));
130
-
131
- // 累积数据逻辑
146
+ // Backend now returns flat structure directly, no transformation needed
132
147
  if (page === 1) {
133
- // 第一页,直接设置
134
- draft.identities = uniqBy(transformedItems, 'id');
148
+ draft.identities = uniqBy(data.items, 'id');
135
149
  } else {
136
- // 后续页面,累积数据
137
- draft.identities = uniqBy([...draft.identities, ...transformedItems], 'id');
150
+ draft.identities = uniqBy([...draft.identities, ...data.items], 'id');
138
151
  }
139
152
 
140
- // 更新 hasMore
141
153
  draft.identitiesHasMore = data.items.length >= (params.pageSize || 20);
142
154
  }),
143
155
  false,
@@ -1,5 +1,4 @@
1
- import { type DisplayIdentityMemory } from '@/database/repositories/userMemory';
2
- import type { TypesEnum } from '@/types/userMemory';
1
+ import type { IdentityListItem, IdentityListSort } from '@lobechat/types';
3
2
 
4
3
  import type { IdentityForInjection } from '../../types';
5
4
 
@@ -10,14 +9,16 @@ export interface IdentitySliceState {
10
9
  globalIdentitiesFetchedAt?: number;
11
10
  /** Whether global identities have been initialized */
12
11
  globalIdentitiesInit: boolean;
13
- identities: DisplayIdentityMemory[];
12
+ identities: IdentityListItem[];
14
13
  identitiesHasMore: boolean;
15
14
  identitiesInit: boolean;
16
15
  identitiesPage: number;
17
16
  identitiesQuery?: string;
17
+ identitiesRelationships?: string[];
18
18
  identitiesSearchLoading?: boolean;
19
+ identitiesSort?: IdentityListSort;
19
20
  identitiesTotal: number;
20
- identitiesTypes?: TypesEnum[];
21
+ identitiesTypes?: string[];
21
22
  }
22
23
 
23
24
  export const identityInitialState: IdentitySliceState = {
@@ -29,6 +30,8 @@ export const identityInitialState: IdentitySliceState = {
29
30
  identitiesInit: false,
30
31
  identitiesPage: 1,
31
32
  identitiesQuery: undefined,
33
+ identitiesRelationships: undefined,
34
+ identitiesSort: undefined,
32
35
  identitiesTotal: 0,
33
36
  identitiesTypes: undefined,
34
37
  };
@@ -16,7 +16,7 @@ export interface PreferenceQueryParams {
16
16
  page?: number;
17
17
  pageSize?: number;
18
18
  q?: string;
19
- sort?: 'scorePriority';
19
+ sort?: 'capturedAt' | 'scorePriority';
20
20
  }
21
21
 
22
22
  export interface PreferenceAction {
@@ -1 +1,2 @@
1
1
  export { createPreferenceSlice, type PreferenceAction } from './action';
2
+ export { preferenceInitialState, type PreferenceSliceState } from './initialState';
@@ -0,0 +1,22 @@
1
+ import { type DisplayPreferenceMemory } from '@/database/repositories/userMemory';
2
+
3
+ export interface PreferenceSliceState {
4
+ preferences: DisplayPreferenceMemory[];
5
+ preferencesHasMore: boolean;
6
+ preferencesInit: boolean;
7
+ preferencesPage: number;
8
+ preferencesQuery?: string;
9
+ preferencesSearchLoading?: boolean;
10
+ preferencesSort?: 'capturedAt' | 'scorePriority';
11
+ preferencesTotal: number;
12
+ }
13
+
14
+ export const preferenceInitialState: PreferenceSliceState = {
15
+ preferences: [],
16
+ preferencesHasMore: true,
17
+ preferencesInit: false,
18
+ preferencesPage: 1,
19
+ preferencesQuery: undefined,
20
+ preferencesSort: undefined,
21
+ preferencesTotal: 0,
22
+ };