Commit Graph

128 Commits

Author SHA1 Message Date
Leopoldadmin 044b948cf3 Add onRangeSelect handler for multi-selection support 2026-07-20 22:55:09 +00:00
Leopoldadmin cfb52d3c69 Multi-selection: Shift+Click range, Ctrl/Cmd+Click toggle, rubber-band drag, mobile long-press 2026-07-20 22:55:09 +00:00
Leopoldadmin b0c3941b7c i18n: add DMS drag-and-drop keys (en) 2026-07-20 22:33:53 +00:00
Leopoldadmin 3163d77a30 i18n: add DMS drag-and-drop keys (de) 2026-07-20 22:33:52 +00:00
Leopoldadmin 864751a848 DMS: handleDropFiles + handleDropFolder callbacks 2026-07-20 22:33:52 +00:00
Leopoldadmin f08933a97c DMS: SourceTree drop targets + draggable folders 2026-07-20 22:33:51 +00:00
Leopoldadmin d5a836c0c7 DMS: drag-and-drop for files + styling fixes 2026-07-20 22:33:51 +00:00
Agent Zero e94e64ba6b DMS redesign: 3-column explorer layout with toolbar, source tree, file details panel
- Add backend endpoints: GET /dms/files, GET /dms/folders/{id}/files
- New SourceTree component: sources (Meine Dateien, Geteilte Ordner, Externe Speicher)
- New FileExplorer component: 5 view modes (list, table, icons-sm/md/lg)
- New FileDetails component: right panel with file metadata and actions
- Rewrite Dms.tsx: PluginToolbar + 3-column ResizablePanel layout
- Update DmsFile type: size_bytes + uploaded_by (backward compat aliases)
- Add 60+ i18n keys for de/en
2026-07-20 17:31:04 +02:00
Agent Zero c846a2e158 fix: setLoadingMails(false) must always run — was stuck on "Wird geladen..." after folder switch 2026-07-20 14:21:04 +02:00
Agent Zero 9ecd0e12c8 fix: async race condition in loadMails — responses from old folder were overwriting current folder
- When user switches folders quickly, multiple fetchMails requests are in flight
- Responses arrive out of order, last response wins regardless of which folder it was for
- Now loadMails checks selectedFolderIdRef before applying results
- Only updates mails state if the response is for the currently selected folder
2026-07-20 14:15:08 +02:00
Agent Zero 9946c6c4bd fix: frontend race condition — folder sync callback was reloading wrong folder
- When user switches folders quickly, syncFolder(A) callback fires after user already selected B
- loadMails() was called with stale selectedFolderId, loading wrong mails
- Add useRef to track current folder ID, only reload if still on same folder
- Also fix backend: message_id dedup now only within same folder (not cross-folder)
2026-07-20 14:07:26 +02:00
Agent Zero 61ab481349 fix: incremental IMAP sync - only fetch new UIDs since last known, like real mail clients
- imap_sync_folder now searches only UID > max_known_uid instead of ALL
- First sync gets last 50, subsequent syncs only get new mails
- UI loads cached mails immediately from DB, sync runs in background
- Folder counts updated after sync
2026-07-20 12:12:53 +02:00
Agent Zero 3313047577 feat: live IMAP sync on folder select + 60s auto-sync interval
- New imap_sync_folder function: syncs single folder quickly for live use
- New POST /mail/folders/{folder_id}/sync route
- Frontend: syncFolder API + called on every folder selection
- Auto-sync interval reduced from 300s to 60s
- Sent mail IMAP APPEND already uploads full body via msg.as_bytes()
2026-07-20 12:01:16 +02:00
Agent Zero 2a33b5706a fix: remove redundant reply/forward action bar from MailDetail 2026-07-20 10:55:03 +02:00
Agent Zero 9da04057b9 feat: mail list font size, remove Termin toolbar, rename Flagge to Markierung with symbol picker
- Mail list: title and subject font text-xs -> text-sm
- Remove Termin (create-event) toolbar button
- Rename Flagge -> Markierung with select dropdown (star, flag, bookmark, important, question)
- Backend: add flag_type column to Mail model + migration 0006
- Backend: flag_type in MailFlagsUpdate schema, update_flags route, mail_to_response
- Frontend: flag_type in Mail interface, FlagUpdatePayload, MailList symbol display
2026-07-20 10:39:16 +02:00
Agent Zero 5fa3f0540b fix: AI assistant rename pencil button directly triggers rename instead of context menu 2026-07-20 10:23:15 +02:00
Agent Zero 823974ff4b fix: remove unwanted toolbar bar above mail columns 2026-07-20 10:15:55 +02:00
Agent Zero 158f6b36d0 fix: match SessionList vertical spacing (py-1.5) in mail folder tree 2026-07-20 10:03:48 +02:00
Agent Zero 9063093a5a feat: compact mail folder tree + right-click Ordner leeren
- MailFolderTree: compact styling matching AI assistant SessionList (py-1, text-sm, depth*12+8 padding, no space-y)
- Added right-click context menu on folders with "Ordner leeren" entry
- Backend: POST /mail/folders/{folder_id}/empty soft-deletes all mails in folder
- Frontend API: emptyFolder() function added to mail.ts
- Mail.tsx: onFolderEmptied callback reloads mails and folders
2026-07-20 09:25:43 +02:00
Agent Zero 35fcd2a9d4 fix: ContactFolderTree nur Ordner-Baum ohne Kontakte, Kontakte in mittlerer Liste 2026-07-20 07:36:35 +02:00
Agent Zero 3129f407f5 UI: ContactFolderTree als echter Baum - keine Trennung Firmen/Privat, ein Baum mit allen Kontakten, Personen-Symbol statt Ordner-Symbol 2026-07-20 03:12:15 +02:00
Agent Zero c09aeb653d fix: draggable nur auf Folder-Icon, Rechtsklick funktioniert wieder 2026-07-20 02:37:46 +02:00
Agent Zero f287a0a4d1 fix: Context-Menu Konflikt mit draggable Ordner behoben 2026-07-20 02:29:40 +02:00
Agent Zero c3974c2ef9 fix: Neuer Chat Button erstellt Session, Ordner drag&drop im KI-Baum 2026-07-20 02:20:43 +02:00
Agent Zero 29202325a6 feat: Kontakt-Ordner mit Drag&Drop Baum (wie KI-Chat Sidebar)
- Backend: ContactFolder model (hierarchisch, parent_id, sort_order)
- Migration 0022: contact_folders Tabelle + folder_id FK auf contacts
- CRUD Routes: /api/v1/contact-folders (list, create, update, delete, reorder)
- Move Contact API: /api/v1/contact-folders/contacts/{id}/move
- folder_id Filter in contacts list API
- Frontend: ContactFolderTree mit Baum-Struktur, Drag&Drop, Kontext-Menü
- Kontakt-Personen-Icon statt Ordner-Symbol
- ContactList Items draggable (List/Table/Cards View)
- React Query Hooks für Folder CRUD + Move Contact
- Alle 266 Frontend-Tests passing
2026-07-20 01:33:44 +02:00
Agent Zero 4bc11efc25 UI: Suchfeld 10% niedriger, Kontakt-Baum mit Firmen/Privatpersonen Trennung, Toolbar vereinfacht (Sort+View Toggle) 2026-07-20 00:25:58 +02:00
Agent Zero beb4d7a9ff UI: Einstellungen+AuditLog aus Sidebar entfernt, AuditLog ins User-Menü, Suchfeld höher, Benachrichtigungs-Icon größer 2026-07-20 00:10:22 +02:00
Agent Zero 1d3b7a497b Fix: Suchfeld Höhe reduziert, Roboter-Symbol aus TopBar entfernt (nicht Sidebar!), Sidebar-Eintrag wiederhergestellt, Lösch-Buttons funktionsfähig mit State, Badge-Zahl dynamisch 2026-07-19 23:50:37 +02:00
Agent Zero d1a40c18e6 UI: schmaleres Suchfeld, KI-Symbol aus Sidebar entfernt, Lösch-Button bei Benachrichtigungen, KI Sidebar per Drag verstellbar (handleSide=left) 2026-07-19 23:16:22 +02:00
Agent Zero 3177daf47f Frontend: unified 3-column contacts page (folder tree | list/table/cards | detail), all Rentman fields, ContactPerson CRUD, removed old Contact/Company pages 2026-07-19 21:30:26 +02:00
Agent Zero 6f1655785e fix: resolve all 12 TypeScript errors (tsc --noEmit clean)
- mail.ts: add explicit types to decodeMimeHeader callback params
- SessionList.tsx: use React.MouseEvent instead of nativeEvent
- ComposeModal.tsx: construct name from first_name + last_name
- MailDetail.tsx: destructure onReply/onForward from props
- RichTextEditor.tsx: use SetContentOptions object instead of boolean
- MailSearchBar.tsx: add optional value prop to interface
- EmptyState.tsx: add optional children prop
- Badge.tsx: add secondary variant to BadgeVariant, variantClasses, dotColors
- ConfirmDialog.tsx: add optional children prop
- hooks.ts: extend SearchResult type to include mail/file/event
2026-07-19 17:41:39 +02:00
Agent Zero 27a8ad8b30 fix: resolve all 65 pre-existing frontend test failures (318/318 passing)
- Remove duplicate vi.mock(@/api/hooks) in SettingsRoles.test.tsx that overrode forceUpdate logic
- SettingsRoles mock: use vi.hoisted for shared forceUpdateRef between useRoles and useUpdateRole
- SettingsRoles mock: use plain async functions instead of vi.fn().mockImplementation for mutations
2026-07-19 14:41:38 +02:00
Agent Zero 5d9ddbebd2 fix: remove tenant switcher from TopBar, fix aiProactive API double-prefix
- Remove tenant switcher dropdown from TopBar (cleanup unused vars/imports)
- Fix aiProactive.ts: remove /api/v1 prefix from apiClient calls (baseURL already includes it)
- This fixes 404 errors on /api/v1/api/v1/ai-proactive/suggestions
2026-07-19 00:28:11 +02:00
Agent Zero ef6d011e16 ui: adjust toolbar heights and icon sizes, remove duplicate AI icon
- TopBar: h-16 → h-[58px] (10% lower), icons w-5 → w-4
- PluginToolbar: min-h-[36px] → min-h-[43px] (20% higher), icons w-3.5 → w-4
- Remove duplicate AI computer icon from TopBar (AISidebar collapsed icon remains)
- Clean up unused imports (toggleAISidebar, aiSidebarCollapsed)
2026-07-19 00:09:17 +02:00
Agent Zero 7e53b747c7 feat: add Proaktiv and KI Chat tabs to AI sidebar 2026-07-18 17:48:09 +02:00
Agent Zero 8cebb4f4e9 feat: unified_search + ai_proactive plugins with Ollama Cloud DeepSeek V4
- unified_search: Hybride Suche (PostgreSQL FTS + pgvector + RRF Fusion)
  - 5 Search Providers (Contact, Company, Mail, File, Event)
  - KI Query Understanding (Fuzzy, Facetten via LiteLLM)
  - DMS Text-Extraction (PDF, DOCX, XLSX, PPTX)
  - Embedding Pipeline (ollama/nomic-embed-text, 768 Dim)
  - Background Jobs für Indexierung
  - Plugin-basierte Provider Registry

- ai_proactive: Proaktiver KI-Agent
  - Context-Tracking (Frontend → Backend → Event Bus)
  - Proactive Engine mit LLM Suggestion-Generierung
  - SSE Real-time Push an Frontend
  - 6 AI Tools für Tool Registry
  - Rate-Limiting + User Settings
  - Deep Analysis Background Jobs

- Frontend Integration:
  - useAIContext Hook, SuggestionSidebar, SuggestionBadge
  - ProactiveAISettings Page, Search API Client
  - Globale Suche auf neue API umgestellt

- Tests: test_unified_search.py + test_ai_proactive.py (alle bestanden)
- Config: Ollama Cloud DeepSeek V4 als Default, konfigurierbar
- Dependencies: PyMuPDF, python-docx, python-pptx, pgvector
- Bugfixes: notification type_key length, migration IF NOT EXISTS
2026-07-18 11:21:51 +02:00
Agent Zero 4c9295de21 feat: AI sidebar mobile full-width overlay with back button
- Mobile: expanded sidebar is fixed inset-0 full-screen overlay with back button
- Mobile: collapsed icon strip hidden (no space on mobile)
- Desktop: unchanged resizable panel + collapsed icon strip
2026-07-18 01:51:01 +02:00
Agent Zero 88be33879c feat: AI sidebar full height with collapsed icon strip and drag resize
- AISidebar: full height, right of TopBar and Toolbar (all pages except AI Assistant)
- AISidebar: collapsed mode shows narrow 48px icon strip with KI button
- AISidebar: expanded mode uses ResizablePanel with drag-to-resize (240-600px)
- AppShell: moved AISidebar outside inner content container to full-height flex
- uiStore: renamed aiSidebarOpen→aiSidebarCollapsed (default: true=collapsed)
- TopBar: AI button highlights when sidebar is expanded
2026-07-18 00:53:00 +02:00
Agent Zero d029892d27 fix: tighter folder tree, smaller mail list font, smooth resize via DOM ref
- MailFolderTree: reduce padding/gap ~25% (py-2→py-1, gap-2→gap-1.5)
- MailList: text-sm→text-xs for from and subject lines
- ResizablePanel: use DOM ref for width during drag instead of React state
  - No re-renders during drag, only single setWidth on mouseup
  - panelRef on outer div, contentRef on inner div
  - pointer-events:none on content during drag
  - contain:strict on content area
2026-07-17 23:49:19 +02:00
Agent Zero db433e81f1 feat: mail UI improvements - folder mapping, display name, resize perf, list header
- Add configurable folder mapping (sent/drafts/spam/trash) per account
- Migration 0005_folder_mapping.sql with 4 new columns on mail_accounts
- Backend: send_mail uses account.sent_folder_imap_name if set
- Backend: _build_folder_hierarchy respects folder_mapping for is_standard
- Frontend: MailSettings shows folder mapping editor per account
- Frontend: MailSettings allows editing display_name for existing accounts
- Frontend: MailFolderTree shows display_name || email, removes MailIcon
- Frontend: ResizablePanel isDragging state with contain:strict + pointer-events:none
- Frontend: MailList merges select-all and sort controls into one line
2026-07-17 23:17:52 +02:00
Agent Zero 60081c5262 fix: add onDelete to TreeItem destructured props 2026-07-17 22:30:47 +02:00
Agent Zero 4f23c60fd4 feat: hover rename/delete icons in treeview, resizable tree and sidebar panels 2026-07-17 22:24:26 +02:00
Agent Zero 165350eda0 fix: user messages with primary-50 background and border for visual distinction 2026-07-17 21:05:47 +02:00
Agent Zero b137acb359 fix: custom markdown CSS styles for AI chat responses (tables, code, lists, headings) 2026-07-17 19:36:21 +02:00
Agent Zero 495d9c63ff fix: proper drag&drop with dataTransfer, context menu (rename/delete/new), bold active session 2026-07-17 17:59:18 +02:00
Agent Zero 5814b1691c fix: drag&drop events on folder headers with stopPropagation, separate root drop zone 2026-07-17 17:39:09 +02:00
Agent Zero ede37aced8 feat: remove header and buttons, move actions to toolbar, drag&drop to any folder level 2026-07-17 17:22:26 +02:00
Agent Zero f2d624720f feat: drag&drop treeview, flat chat UI, activity indicator, fixed toolbar registration 2026-07-17 17:09:26 +02:00
Agent Zero 70b8a66fd4 feat: attachment context for LLM, markdown rendering, mobile layout with back arrow 2026-07-17 13:45:21 +02:00
Agent Zero 202d80c750 feat: treeview with folders, toolbar, file attachments in chat 2026-07-17 09:21:40 +02:00