@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.
- package/CHANGELOG.md +41 -0
- package/changelog/v1.json +12 -0
- package/package.json +1 -1
- package/packages/database/src/models/__tests__/userMemories.test.ts +62 -5
- package/packages/database/src/models/agentCronJob.ts +9 -9
- package/packages/database/src/models/userMemory/__tests__/identity.test.ts +5 -5
- package/packages/database/src/models/userMemory/experience.ts +91 -1
- package/packages/database/src/models/userMemory/identity.ts +93 -2
- package/packages/database/src/models/userMemory/model.ts +27 -8
- package/packages/types/src/userMemory/experience.ts +25 -0
- package/packages/types/src/userMemory/identity.ts +27 -0
- package/packages/types/src/userMemory/index.ts +1 -0
- package/packages/types/src/userMemory/shared.ts +30 -0
- package/src/app/[variants]/(main)/group/profile/features/Header/index.tsx +3 -4
- package/src/app/[variants]/(main)/home/features/InputArea/SkillInstallBanner.tsx +7 -8
- package/src/app/[variants]/(main)/memory/(home)/features/Persona/PersonaDetail.tsx +58 -0
- package/src/app/[variants]/(main)/memory/(home)/features/Persona/PersonaHeader.tsx +22 -0
- package/src/app/[variants]/(main)/memory/(home)/features/Persona/PersonaSummary.tsx +43 -0
- package/src/app/[variants]/(main)/memory/(home)/features/Persona/index.tsx +53 -0
- package/src/app/[variants]/(main)/memory/(home)/features/RoleTagCloud/index.tsx +2 -2
- package/src/app/[variants]/(main)/memory/(home)/index.tsx +15 -3
- package/src/app/[variants]/(main)/memory/experiences/features/List/GridView/ExperienceCard.tsx +3 -3
- package/src/app/[variants]/(main)/memory/experiences/features/List/GridView/index.tsx +3 -3
- package/src/app/[variants]/(main)/memory/experiences/features/List/TimelineView/ExperienceCard.tsx +3 -3
- package/src/app/[variants]/(main)/memory/experiences/features/List/TimelineView/index.tsx +3 -3
- package/src/app/[variants]/(main)/memory/features/SourceLink.tsx +2 -11
- package/src/app/[variants]/(main)/memory/features/TimeLineView/TimeLineCard.tsx +2 -9
- package/src/app/[variants]/(main)/memory/identities/features/IdentityRightPanel.tsx +1 -1
- package/src/app/[variants]/(main)/memory/identities/features/List/GridView/IdentityCard.tsx +5 -4
- package/src/app/[variants]/(main)/memory/identities/features/List/GridView/index.tsx +3 -3
- package/src/app/[variants]/(main)/memory/identities/features/List/TimelineView/IdentityCard.tsx +6 -6
- package/src/app/[variants]/(main)/memory/identities/features/List/TimelineView/index.tsx +6 -4
- package/src/app/[variants]/(main)/settings/profile/index.tsx +8 -8
- package/src/app/[variants]/(main)/settings/provider/features/ProviderConfig/index.tsx +0 -1
- package/src/app/[variants]/(main)/settings/skill/features/Actions.tsx +0 -1
- package/src/app/[variants]/(main)/settings/skill/features/KlavisSkillItem.tsx +9 -10
- package/src/app/[variants]/(main)/settings/skill/features/LobehubSkillItem.tsx +9 -10
- package/src/app/[variants]/(main)/settings/skill/features/McpSkillItem.tsx +4 -5
- package/src/app/[variants]/(main)/settings/skill/features/SkillList.tsx +4 -5
- package/src/app/[variants]/share/t/[id]/SharedMessageList.tsx +1 -4
- package/src/app/[variants]/share/t/[id]/_layout/index.tsx +47 -121
- package/src/app/[variants]/share/t/[id]/_layout/style.ts +59 -0
- package/src/app/[variants]/share/t/[id]/features/Portal/index.tsx +4 -5
- package/src/app/[variants]/share/t/[id]/index.tsx +30 -37
- package/src/components/404/index.tsx +15 -9
- package/src/components/DragUpload/index.tsx +15 -16
- package/src/features/EditorCanvas/DocumentIdMode.tsx +1 -2
- package/src/features/IntegrationDetailModal/index.tsx +11 -12
- package/src/features/ResourceManager/index.tsx +13 -6
- package/src/features/ShareModal/ShareImage/Preview.tsx +19 -28
- package/src/features/ShareModal/ShareImage/style.ts +4 -2
- package/src/features/ShareModal/index.tsx +5 -1
- package/src/features/ShareModal/style.ts +1 -0
- package/src/features/ShareModal/useContainerStyles.ts +1 -1
- package/src/features/SharePopover/index.tsx +16 -9
- package/src/features/SharePopover/style.ts +2 -2
- package/src/features/SkillStore/CommunityList/Item.tsx +2 -2
- package/src/features/SkillStore/LobeHubList/Item.tsx +2 -2
- package/src/features/SkillStore/LobeHubList/index.tsx +2 -3
- package/src/features/SkillStore/style.ts +4 -4
- package/src/layout/GlobalProvider/ServerVersionOutdatedAlert.tsx +28 -20
- package/src/server/routers/lambda/userMemories.ts +61 -5
- package/src/server/routers/lambda/userMemory.ts +5 -1
- package/src/services/chat/index.ts +2 -2
- package/src/services/userMemory/index.ts +25 -1
- package/src/store/chat/slices/aiChat/actions/streamingExecutor.ts +0 -1
- package/src/store/userMemory/initialState.ts +22 -52
- package/src/store/userMemory/slices/context/action.ts +1 -1
- package/src/store/userMemory/slices/context/index.ts +1 -0
- package/src/store/userMemory/slices/context/initialState.ts +22 -0
- package/src/store/userMemory/slices/experience/action.ts +10 -22
- package/src/store/userMemory/slices/experience/index.ts +1 -0
- package/src/store/userMemory/slices/experience/initialState.ts +22 -0
- package/src/store/userMemory/slices/home/action.ts +17 -0
- package/src/store/userMemory/slices/identity/action.ts +36 -24
- package/src/store/userMemory/slices/identity/initialState.ts +7 -4
- package/src/store/userMemory/slices/preference/action.ts +1 -1
- package/src/store/userMemory/slices/preference/index.ts +1 -0
- package/src/store/userMemory/slices/preference/initialState.ts +22 -0
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
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
|
-
|
|
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<
|
|
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({
|
|
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({
|
|
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({
|
|
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
|
-
|
|
106
|
-
|
|
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:
|
|
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 {
|
|
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:
|
|
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?:
|
|
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
|
};
|
|
@@ -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
|
+
};
|