@lobehub/lobehub 2.0.0-next.361 → 2.0.0-next.362

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 (32) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/Dockerfile +2 -1
  3. package/changelog/v1.json +9 -0
  4. package/locales/en-US/chat.json +3 -1
  5. package/locales/zh-CN/chat.json +2 -0
  6. package/package.json +1 -1
  7. package/packages/context-engine/src/base/BaseEveryUserContentProvider.ts +204 -0
  8. package/packages/context-engine/src/base/BaseLastUserContentProvider.ts +1 -8
  9. package/packages/context-engine/src/base/__tests__/BaseEveryUserContentProvider.test.ts +354 -0
  10. package/packages/context-engine/src/base/constants.ts +20 -0
  11. package/packages/context-engine/src/engine/messages/MessagesEngine.ts +27 -23
  12. package/packages/context-engine/src/engine/messages/__tests__/MessagesEngine.test.ts +364 -0
  13. package/packages/context-engine/src/providers/PageEditorContextInjector.ts +17 -13
  14. package/packages/context-engine/src/providers/PageSelectionsInjector.ts +65 -0
  15. package/packages/context-engine/src/providers/__tests__/PageSelectionsInjector.test.ts +333 -0
  16. package/packages/context-engine/src/providers/index.ts +3 -1
  17. package/packages/prompts/src/agents/index.ts +1 -0
  18. package/packages/prompts/src/agents/pageSelectionContext.ts +28 -0
  19. package/packages/types/src/aiChat.ts +4 -0
  20. package/packages/types/src/message/common/index.ts +1 -0
  21. package/packages/types/src/message/common/metadata.ts +8 -0
  22. package/packages/types/src/message/common/pageSelection.ts +36 -0
  23. package/packages/types/src/message/ui/params.ts +16 -0
  24. package/scripts/prebuild.mts +1 -0
  25. package/src/features/ChatInput/Desktop/ContextContainer/ContextList.tsx +1 -1
  26. package/src/features/Conversation/ChatInput/index.tsx +9 -1
  27. package/src/features/Conversation/Messages/User/components/MessageContent.tsx +7 -1
  28. package/src/features/Conversation/Messages/User/components/PageSelections.tsx +62 -0
  29. package/src/features/PageEditor/EditorCanvas/useAskCopilotItem.tsx +5 -1
  30. package/src/locales/default/chat.ts +3 -2
  31. package/src/server/routers/lambda/aiChat.ts +7 -0
  32. package/src/store/chat/slices/aiChat/actions/conversationLifecycle.ts +5 -19
@@ -234,8 +234,9 @@ export default {
234
234
  'operation.sendMessage': 'Sending message',
235
235
  'owner': 'Group owner',
236
236
  'pageCopilot.title': 'Page Agent',
237
- 'pageCopilot.welcome':
238
- '**Clearer, sharper writing**\n\nDraft, rewrite, or polish—tell me your intent and I’ll refine the rest.',
237
+ 'pageCopilot.welcome': `**Clearer, sharper writing**\n\nDraft, rewrite, or polish—tell me your intent and I'll refine the rest.`,
238
+ 'pageSelection.lines': 'Lines {{start}}-{{end}}',
239
+ 'pageSelection.reference': 'Selected Text',
239
240
  'pin': 'Pin',
240
241
  'pinOff': 'Unpin',
241
242
  'prompts.summaryExpert':
@@ -123,11 +123,18 @@ export const aiChatRouter = router({
123
123
 
124
124
  // create user message
125
125
  log('creating user message with content length: %d', input.newUserMessage.content.length);
126
+
127
+ // Build user message metadata with pageSelections if present
128
+ const userMessageMetadata = input.newUserMessage.pageSelections?.length
129
+ ? { pageSelections: input.newUserMessage.pageSelections }
130
+ : undefined;
131
+
126
132
  const userMessageItem = await ctx.messageModel.create({
127
133
  agentId: input.agentId,
128
134
  content: input.newUserMessage.content,
129
135
  files: input.newUserMessage.files,
130
136
  groupId: input.groupId,
137
+ metadata: userMessageMetadata,
131
138
  parentId: input.newUserMessage.parentId,
132
139
  role: 'user',
133
140
  sessionId,
@@ -77,11 +77,11 @@ export const conversationLifecycle: StateCreator<
77
77
  sendMessage: async ({
78
78
  message,
79
79
  files,
80
- contexts,
81
80
  onlyAddUserMessage,
82
81
  context,
83
82
  messages: inputMessages,
84
83
  parentId: inputParentId,
84
+ pageSelections,
85
85
  }) => {
86
86
  const { internal_execAgentRuntime, mainInputEditor } = get();
87
87
 
@@ -186,6 +186,8 @@ export const conversationLifecycle: StateCreator<
186
186
  threadId: operationContext.threadId ?? undefined,
187
187
  imageList: tempImages.length > 0 ? tempImages : undefined,
188
188
  videoList: tempVideos.length > 0 ? tempVideos : undefined,
189
+ // Pass pageSelections metadata for immediate display
190
+ metadata: pageSelections?.length ? { pageSelections } : undefined,
189
191
  },
190
192
  { operationId, tempMessageId: tempId },
191
193
  );
@@ -222,7 +224,7 @@ export const conversationLifecycle: StateCreator<
222
224
  const topicId = operationContext.topicId;
223
225
  data = await aiChatService.sendMessageInServer(
224
226
  {
225
- newUserMessage: { content: message, files: fileIdList, parentId },
227
+ newUserMessage: { content: message, files: fileIdList, pageSelections, parentId },
226
228
  // if there is topicId,then add topicId to message
227
229
  topicId: topicId ?? undefined,
228
230
  threadId: operationContext.threadId ?? undefined,
@@ -372,26 +374,10 @@ export const conversationLifecycle: StateCreator<
372
374
  messageMapKey(execContext),
373
375
  )(get());
374
376
 
375
- const contextMessages =
376
- contexts?.map((item, index) => {
377
- const now = Date.now();
378
- const title = item.title ? `${item.title}\n` : '';
379
- return {
380
- content: `Context ${index + 1}:\n${title}${item.content}`,
381
- createdAt: now,
382
- id: `ctx_${tempId}_${index}`,
383
- role: 'system' as const,
384
- updatedAt: now,
385
- };
386
- }) ?? [];
387
-
388
- const runtimeMessages =
389
- contextMessages.length > 0 ? [...displayMessages, ...contextMessages] : displayMessages;
390
-
391
377
  try {
392
378
  await internal_execAgentRuntime({
393
379
  context: execContext,
394
- messages: runtimeMessages,
380
+ messages: displayMessages,
395
381
  parentMessageId: data.assistantMessageId,
396
382
  parentMessageType: 'assistant',
397
383
  parentOperationId: operationId, // Pass as parent operation