feat: brainstorm sessions, PDF document Q&A, embedding fixes, and UI improvements
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 7s

- Add brainstorm feature with collaborative canvas, AI idea generation, live cursors, playback, and export
- Add PDF upload/extraction/ingestion pipeline with pgvector document search (RAG)
- Add document Q&A overlay with streaming chat and PDF preview
- Add note attachments UI with status polling, grid layout, and auto-scroll
- Add task extraction AI tool and agent executor improvements
- Fix NoteEmbedding missing updatedAt column, re-index 66 notes with 1536-dim embeddings
- Fix brainstorm 'Create Note' button: add success toast and redirect to created note
- Fix memory echo notification infinite polling
- Fix chat route to always include document_search tool
- Add brainstorm i18n keys across all 14 locales
- Add socket server for real-time brainstorm collaboration
- Add hierarchical notebook selector and organize notebook dialog improvements
- Add sidebar brainstorm section with session management
- Update prisma schema with brainstorm tables, attachments, and document chunks
This commit is contained in:
Antigravity
2026-05-14 17:43:21 +00:00
parent 195e845f0a
commit 1fcea6ed7d
228 changed files with 57656 additions and 1059 deletions

View File

@@ -18,6 +18,7 @@ import {
Pencil,
Activity,
Presentation,
ListChecks,
} from 'lucide-react'
import { toast } from 'sonner'
import { useLanguage } from '@/lib/i18n'
@@ -51,6 +52,7 @@ const typeConfig: Record<string, { icon: typeof Globe }> = {
custom: { icon: Settings },
'slide-generator': { icon: Presentation },
'excalidraw-generator': { icon: Pencil },
'task-extractor': { icon: ListChecks },
}
const frequencyKeys: Record<string, string> = {

View File

@@ -29,13 +29,14 @@ import {
Loader2,
BookOpen,
LifeBuoy,
ListChecks,
} from 'lucide-react'
import { HierarchicalNotebookSelector } from '@/components/hierarchical-notebook-selector'
import { toast } from 'sonner'
import { useLanguage } from '@/lib/i18n'
import { Tooltip, TooltipTrigger, TooltipContent } from '@/components/ui/tooltip'
type AgentType = 'scraper' | 'researcher' | 'monitor' | 'custom' | 'slide-generator' | 'excalidraw-generator'
type AgentType = 'scraper' | 'researcher' | 'monitor' | 'custom' | 'slide-generator' | 'excalidraw-generator' | 'task-extractor'
function FieldHelp({ tooltip }: { tooltip: string }) {
return (
@@ -59,6 +60,7 @@ const typeIcons: Record<string, typeof Globe> = {
custom: Settings,
'slide-generator': Presentation,
'excalidraw-generator': Pencil,
'task-extractor': ListChecks,
}
const TOOL_PRESETS: Record<string, string[]> = {
@@ -68,6 +70,7 @@ const TOOL_PRESETS: Record<string, string[]> = {
custom: ['memory_search'],
'slide-generator': ['generate_pptx'],
'excalidraw-generator': ['generate_excalidraw'],
'task-extractor': ['note_search', 'note_read', 'task_extract', 'note_create'],
}
interface AgentDetailViewProps {
@@ -386,6 +389,7 @@ export function AgentDetailView({
{ value: 'custom' as AgentType, labelKey: 'agents.types.custom', descKey: 'agents.typeDescriptions.custom', icon: Settings },
{ value: 'slide-generator' as AgentType, labelKey: 'agents.types.slideGenerator', descKey: 'agents.typeDescriptions.slideGenerator', icon: Presentation },
{ value: 'excalidraw-generator' as AgentType, labelKey: 'agents.types.excalidrawGenerator', descKey: 'agents.typeDescriptions.excalidrawGenerator', icon: Pencil },
{ value: 'task-extractor' as AgentType, labelKey: 'agents.types.taskExtractor', descKey: 'agents.typeDescriptions.taskExtractor', icon: ListChecks },
].map(at => {
const TypeIcon = at.icon
return (

View File

@@ -10,6 +10,7 @@ import {
Loader2,
Presentation,
Pencil,
ListChecks,
} from 'lucide-react'
import { toast } from 'sonner'
import { useLanguage } from '@/lib/i18n'
@@ -42,6 +43,7 @@ const templateConfig = [
{ id: 'chercheur', type: 'researcher', roleKey: 'agents.defaultRoles.researcher', urls: [], frequency: 'manual' },
{ id: 'slideGenerator', type: 'slide-generator', roleKey: 'agents.defaultRoles.slideGenerator', urls: [], frequency: 'manual' },
{ id: 'excalidrawGenerator', type: 'excalidraw-generator', roleKey: 'agents.defaultRoles.excalidrawGenerator', urls: [], frequency: 'manual' },
{ id: 'taskExtractor', type: 'task-extractor', roleKey: 'agents.defaultRoles.taskExtractor', urls: [], frequency: 'manual' },
] as const
const typeIcons: Record<string, typeof Globe> = {
@@ -51,6 +53,7 @@ const typeIcons: Record<string, typeof Globe> = {
custom: Settings,
'slide-generator': Presentation,
'excalidraw-generator': Pencil,
'task-extractor': ListChecks,
}
export function AgentTemplates({ onInstalled, existingAgentNames }: AgentTemplatesProps) {
@@ -87,7 +90,9 @@ export function AgentTemplates({ onInstalled, existingAgentNames }: AgentTemplat
? ['note_search', 'note_read', 'generate_pptx']
: tpl.type === 'excalidraw-generator'
? ['note_search', 'note_read', 'generate_excalidraw']
: [],
: tpl.type === 'task-extractor'
? ['note_search', 'note_read', 'task_extract', 'note_create']
: [],
})
toast.success(t('agents.toasts.installSuccess', { name: resolvedName }))
onInstalled()