Conversation
… for markdown editing
…r, refactor list handling and update dependencies
…ox for slash commands in the editor
… usability and consistency
…Mdx support for improved markdown parsing
… PlateEditor and FixedToolbarButtons
…leFloatingToolbar for cleaner code
… and Subscript options to InsertToolbarButton for cleaner toolbar functionality
…ton based on read-only state, and adjust dropdown menu styles for better usability
… tooltip usage across toolbar buttons
…improved styling for dark mode and better layout management
…out and accessibility, including enhanced styling and conditional rendering
… logic for existing records using a pure-Python BlockNote JSON to Markdown converter
…s with blocknote_document data, ensuring lazy population for others
…atches to reduce memory usage and improve performance
… device detection
…t and error handling
…ed list counter, improving state management
Add a ref-based guard to handleUploadClick that prevents the native file picker from being triggered a second time when the browser re-dispatches a click event after the dialog closes. This matches the existing pattern used in document-upload-popup.tsx for the Upload Documents dialog.
- Added startTime and endTime properties to announcements for time-bound visibility. - Introduced audience targeting to control who sees announcements (all, users, web_visitors). - Updated related components and hooks to support new announcement features. - Removed unused state tracking for dismissed announcements to streamline functionality.
- Adjusted padding in the hero section for improved spacing. - Enhanced text content for clarity and engagement, including updates to the description and call-to-action. - Commented out the ContactSalesButton for future consideration.
feat: introduce platejs and remove blocknote editor
…the-loop-for-linear-sensitive [Feat] Add human in the loop for linear sensitive actions
fix: improve report artifact & enhance revision handling
Simplified Announcements and made minor updates to homepage
Added PostHog metrics
fix: run alembic migrations unconditionally on startup & add update docs
…apabilities with real-time web query support
… scenarios for user requests
…ogic from the application
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
There was a problem hiding this comment.
Review by RecurseML
🔍 Review performed on b915ae6..4c8a70c
✨ No bugs found, your code is sparkling clean
✅ Files analyzed, no issues (49)
• .vscode/launch.json
• README.md
• scripts/docker/entrypoint-allinone.sh
• surfsense_backend/app/agents/new_chat/chat_deepagent.py
• surfsense_backend/app/agents/new_chat/system_prompt.py
• surfsense_backend/app/agents/new_chat/tools/knowledge_base.py
• surfsense_backend/app/agents/new_chat/tools/linear/__init__.py
• surfsense_backend/app/agents/new_chat/tools/linear/create_issue.py
• surfsense_backend/app/agents/new_chat/tools/linear/delete_issue.py
• surfsense_backend/app/agents/new_chat/tools/linear/update_issue.py
• surfsense_backend/app/agents/new_chat/tools/link_preview.py
• surfsense_backend/app/agents/new_chat/tools/notion/create_page.py
• surfsense_backend/app/agents/new_chat/tools/notion/delete_page.py
• surfsense_backend/app/agents/new_chat/tools/notion/update_page.py
• surfsense_backend/app/agents/new_chat/tools/registry.py
• surfsense_backend/app/agents/new_chat/tools/report.py
• surfsense_backend/app/celery_app.py
• surfsense_backend/app/connectors/linear_connector.py
• surfsense_backend/app/connectors/notion_history.py
• surfsense_backend/app/connectors/webcrawler_connector.py
• surfsense_backend/app/db.py
• surfsense_backend/app/routes/__init__.py
• surfsense_backend/app/routes/editor_routes.py
• surfsense_backend/app/routes/model_list_routes.py
• surfsense_backend/app/routes/notes_routes.py
• surfsense_backend/app/routes/reports_routes.py
• surfsense_backend/app/schemas/__init__.py
• surfsense_backend/app/schemas/reports.py
• surfsense_backend/app/services/linear/__init__.py
• surfsense_backend/app/services/linear/kb_sync_service.py
• surfsense_backend/app/services/linear/tool_metadata_service.py
• surfsense_backend/app/services/llm_service.py
• surfsense_backend/app/services/model_list_service.py
• surfsense_backend/app/services/notion/__init__.py
• surfsense_backend/app/services/notion/kb_sync_service.py
• surfsense_backend/app/tasks/celery_tasks/blocknote_migration_tasks.py
• surfsense_backend/app/tasks/celery_tasks/document_reindex_tasks.py
• surfsense_backend/app/tasks/chat/stream_new_chat.py
• surfsense_backend/app/tasks/connector_indexers/notion_indexer.py
• surfsense_backend/app/tasks/document_processors/circleback_processor.py
• surfsense_backend/app/tasks/document_processors/extension_processor.py
• surfsense_backend/app/tasks/document_processors/file_processors.py
• surfsense_backend/app/tasks/document_processors/markdown_processor.py
• surfsense_backend/app/tasks/document_processors/youtube_processor.py
• surfsense_backend/app/utils/blocknote_converter.py
• surfsense_backend/app/utils/blocknote_to_markdown.py
• surfsense_backend/app/utils/notion_utils.py
• surfsense_backend/pyproject.toml
• surfsense_web/.vscode/launch.json
⏭️ Files skipped (123)
| Locations |
|---|
surfsense_backend/app/config/model_list_fallback.json |
surfsense_backend/uv.lock |
surfsense_web/app/(home)/announcements/page.tsx |
surfsense_web/app/api/convert-to-blocknote/route.ts |
surfsense_web/app/api/convert-to-markdown/route.ts |
surfsense_web/app/dashboard/[search_space_id]/documents/(manage)/components/RowActions.tsx |
surfsense_web/app/dashboard/[search_space_id]/editor/[documentId]/page.tsx |
surfsense_web/app/dashboard/[search_space_id]/new-chat/[[...chat_id]]/page.tsx |
surfsense_web/app/globals.css |
surfsense_web/atoms/new-llm-config/new-llm-config-query.atoms.ts |
surfsense_web/components.json |
surfsense_web/components/BlockNoteEditor.tsx |
surfsense_web/components/DynamicBlockNoteEditor.tsx |
surfsense_web/components/announcements/AnnouncementToastProvider.tsx |
surfsense_web/components/assistant-ui/connector-popup.tsx |
surfsense_web/components/assistant-ui/connector-popup/connect-forms/components/baidu-search-api-connect-form.tsx |
surfsense_web/components/assistant-ui/connector-popup/connect-forms/components/circleback-connect-form.tsx |
surfsense_web/components/assistant-ui/connector-popup/connect-forms/components/elasticsearch-connect-form.tsx |
surfsense_web/components/assistant-ui/connector-popup/connect-forms/components/linkup-api-connect-form.tsx |
surfsense_web/components/assistant-ui/connector-popup/connect-forms/components/luma-connect-form.tsx |
surfsense_web/components/assistant-ui/connector-popup/connect-forms/components/searxng-connect-form.tsx |
surfsense_web/components/assistant-ui/connector-popup/connect-forms/components/tavily-api-connect-form.tsx |
surfsense_web/components/assistant-ui/connector-popup/connector-configs/views/connector-connect-view.tsx |
surfsense_web/components/assistant-ui/connector-popup/hooks/use-connector-dialog.ts |
surfsense_web/components/assistant-ui/inline-citation.tsx |
surfsense_web/components/assistant-ui/markdown-text.tsx |
surfsense_web/components/assistant-ui/thread.tsx |
surfsense_web/components/editor/editor-save-context.tsx |
surfsense_web/components/editor/plate-editor.tsx |
surfsense_web/components/editor/plugins/autoformat-kit.tsx |
surfsense_web/components/editor/plugins/basic-blocks-kit.tsx |
surfsense_web/components/editor/plugins/basic-marks-kit.tsx |
surfsense_web/components/editor/plugins/basic-nodes-kit.tsx |
surfsense_web/components/editor/plugins/callout-kit.tsx |
surfsense_web/components/editor/plugins/code-block-kit.tsx |
surfsense_web/components/editor/plugins/dnd-kit.tsx |
surfsense_web/components/editor/plugins/fixed-toolbar-kit.tsx |
surfsense_web/components/editor/plugins/floating-toolbar-kit.tsx |
surfsense_web/components/editor/plugins/indent-kit.tsx |
surfsense_web/components/editor/plugins/link-kit.tsx |
surfsense_web/components/editor/plugins/list-kit.tsx |
surfsense_web/components/editor/plugins/math-kit.tsx |
surfsense_web/components/editor/plugins/selection-kit.tsx |
surfsense_web/components/editor/plugins/slash-command-kit.tsx |
surfsense_web/components/editor/plugins/table-kit.tsx |
surfsense_web/components/editor/plugins/toggle-kit.tsx |
surfsense_web/components/editor/presets.ts |
surfsense_web/components/editor/transforms.ts |
surfsense_web/components/editor/utils/escape-mdx.ts |
surfsense_web/components/homepage/hero-section.tsx |
surfsense_web/components/homepage/navbar.tsx |
surfsense_web/components/layout/hooks/useSidebarState.ts |
surfsense_web/components/layout/ui/sidebar/SidebarCollapseButton.tsx |
surfsense_web/components/markdown-viewer.tsx |
surfsense_web/components/new-chat/chat-share-button.tsx |
surfsense_web/components/providers/PostHogIdentify.tsx |
surfsense_web/components/report-panel/report-panel.tsx |
surfsense_web/components/shared/llm-config-form.tsx |
surfsense_web/components/tool-ui/index.ts |
surfsense_web/components/tool-ui/linear/create-linear-issue.tsx |
surfsense_web/components/tool-ui/linear/delete-linear-issue.tsx |
surfsense_web/components/tool-ui/linear/index.ts |
surfsense_web/components/tool-ui/linear/update-linear-issue.tsx |
surfsense_web/components/tool-ui/notion/create-notion-page.tsx |
surfsense_web/components/tool-ui/notion/delete-notion-page.tsx |
surfsense_web/components/tool-ui/notion/index.ts |
surfsense_web/components/tool-ui/notion/update-notion-page.tsx |
surfsense_web/components/ui/block-draggable.tsx |
surfsense_web/components/ui/block-list.tsx |
surfsense_web/components/ui/block-selection.tsx |
surfsense_web/components/ui/blockquote-node.tsx |
surfsense_web/components/ui/callout-node.tsx |
surfsense_web/components/ui/checkbox.tsx |
surfsense_web/components/ui/code-block-node.tsx |
surfsense_web/components/ui/code-node.tsx |
surfsense_web/components/ui/dropdown-menu.tsx |
surfsense_web/components/ui/editor.tsx |
surfsense_web/components/ui/equation-node.tsx |
surfsense_web/components/ui/fixed-toolbar-buttons.tsx |
surfsense_web/components/ui/fixed-toolbar.tsx |
surfsense_web/components/ui/floating-toolbar-buttons.tsx |
surfsense_web/components/ui/floating-toolbar.tsx |
surfsense_web/components/ui/heading-node.tsx |
surfsense_web/components/ui/highlight-node.tsx |
surfsense_web/components/ui/hr-node.tsx |
surfsense_web/components/ui/inline-combobox.tsx |
surfsense_web/components/ui/insert-toolbar-button.tsx |
surfsense_web/components/ui/link-node.tsx |
surfsense_web/components/ui/link-toolbar-button.tsx |
surfsense_web/components/ui/link-toolbar.tsx |
surfsense_web/components/ui/mark-toolbar-button.tsx |
surfsense_web/components/ui/mode-toolbar-button.tsx |
surfsense_web/components/ui/paragraph-node.tsx |
surfsense_web/components/ui/resize-handle.tsx |
surfsense_web/components/ui/separator.tsx |
surfsense_web/components/ui/sidebar.tsx |
surfsense_web/components/ui/slash-node.tsx |
surfsense_web/components/ui/table-icons.tsx |
surfsense_web/components/ui/table-node.tsx |
surfsense_web/components/ui/toggle-node.tsx |
surfsense_web/components/ui/toolbar.tsx |
surfsense_web/components/ui/tooltip.tsx |
surfsense_web/components/ui/turn-into-toolbar-button.tsx |
surfsense_web/content/docs/docker-installation.mdx |
surfsense_web/contracts/enums/llm-models.ts |
surfsense_web/contracts/enums/llm-providers.ts |
surfsense_web/contracts/types/announcement.types.ts |
surfsense_web/contracts/types/new-llm-config.types.ts |
surfsense_web/hooks/use-announcements.ts |
surfsense_web/hooks/use-debounce.ts |
surfsense_web/hooks/use-mounted.ts |
surfsense_web/hooks/use-platform-shortcut.ts |
surfsense_web/instrumentation-client.ts |
surfsense_web/lib/announcements/announcements-data.ts |
surfsense_web/lib/announcements/announcements-storage.ts |
surfsense_web/lib/announcements/announcements-utils.ts |
surfsense_web/lib/apis/new-llm-config-api.service.ts |
surfsense_web/lib/apis/notes-api.service.ts |
surfsense_web/lib/query-client/cache-keys.ts |
surfsense_web/next.config.ts |
surfsense_web/package-lock.json |
surfsense_web/package.json |
surfsense_web/pnpm-lock.yaml |
…ction handling in chat routes
Description
Motivation and Context
FIX #
Screenshots
API Changes
Change Type
Testing Performed
Checklist
High-level PR Summary
This PR replaces the BlockNote editor with a new Plate.js-based editor that stores content as markdown (
source_markdown) instead of JSON, adds Linear integration with create/update/delete issue capabilities and knowledge base sync, implements Notion KB sync after page updates, enhances report generation with internal KB search strategies, section-level revision, and length constraints, improves the LLM model selector with a dynamic catalogue from OpenRouter, introduces live connector citations for web search results, fixes web scraping to work across all event loops, adds automatic Docker migrations and Watchtower update docs, and includes various UI/UX improvements such as improved PostHog tracking, announcement system refinements, and bug fixes for double file dialogs and chat streaming depth tracking.⏱️ Estimated Review Time: 3+ hours
💡 Review Order Suggestion
surfsense_backend/alembic/versions/101_add_source_markdown_to_documents.pysurfsense_backend/app/db.pysurfsense_backend/app/utils/blocknote_to_markdown.pysurfsense_backend/app/utils/blocknote_converter.pysurfsense_web/components/editor/plate-editor.tsxsurfsense_web/components/editor/presets.tssurfsense_web/components/editor/plugins/basic-nodes-kit.tsxsurfsense_web/components/editor/plugins/fixed-toolbar-kit.tsxsurfsense_web/components/ui/editor.tsxsurfsense_web/app/dashboard/[search_space_id]/editor/[documentId]/page.tsxsurfsense_backend/app/routes/editor_routes.pysurfsense_backend/app/routes/notes_routes.pysurfsense_backend/app/tasks/celery_tasks/document_reindex_tasks.pysurfsense_backend/app/tasks/document_processors/file_processors.pysurfsense_backend/app/tasks/document_processors/extension_processor.pysurfsense_backend/app/tasks/document_processors/youtube_processor.pysurfsense_backend/app/tasks/document_processors/markdown_processor.pysurfsense_backend/app/tasks/document_processors/circleback_processor.pysurfsense_backend/app/agents/new_chat/tools/linear/__init__.pysurfsense_backend/app/connectors/linear_connector.pysurfsense_backend/app/services/linear/__init__.pysurfsense_backend/app/services/linear/tool_metadata_service.pysurfsense_backend/app/services/linear/kb_sync_service.pysurfsense_backend/app/agents/new_chat/tools/linear/create_issue.pysurfsense_backend/app/agents/new_chat/tools/linear/update_issue.pysurfsense_backend/app/agents/new_chat/tools/linear/delete_issue.pysurfsense_web/components/tool-ui/linear/create-linear-issue.tsxsurfsense_web/components/tool-ui/linear/update-linear-issue.tsxsurfsense_web/components/tool-ui/linear/delete-linear-issue.tsxsurfsense_backend/app/services/notion/kb_sync_service.pysurfsense_backend/app/connectors/notion_history.pysurfsense_backend/app/agents/new_chat/tools/notion/update_page.pysurfsense_backend/app/agents/new_chat/tools/notion/create_page.pysurfsense_backend/app/agents/new_chat/tools/notion/delete_page.pysurfsense_web/components/tool-ui/notion/update-notion-page.tsxsurfsense_backend/app/agents/new_chat/tools/report.pysurfsense_backend/app/agents/new_chat/system_prompt.pysurfsense_backend/app/routes/reports_routes.pysurfsense_backend/app/schemas/reports.pysurfsense_web/components/report-panel/report-panel.tsxsurfsense_backend/app/tasks/chat/stream_new_chat.pysurfsense_backend/app/agents/new_chat/tools/knowledge_base.pysurfsense_web/components/assistant-ui/inline-citation.tsxsurfsense_web/components/assistant-ui/markdown-text.tsxsurfsense_backend/app/routes/model_list_routes.pysurfsense_backend/app/services/model_list_service.pysurfsense_backend/app/config/model_list_fallback.jsonsurfsense_web/atoms/new-llm-config/new-llm-config-query.atoms.tssurfsense_web/components/shared/llm-config-form.tsxsurfsense_backend/app/connectors/webcrawler_connector.pysurfsense_backend/app/agents/new_chat/tools/link_preview.pyREADME.mdscripts/docker/entrypoint-allinone.shsurfsense_web/content/docs/docker-installation.mdxsurfsense_web/instrumentation-client.tssurfsense_web/app/globals.csssurfsense_web/components/homepage/hero-section.tsxsurfsense_web/components/announcements/AnnouncementToastProvider.tsxsurfsense_web/app/(home)/announcements/page.tsxsurfsense_web/lib/announcements/announcements-data.tssurfsense_web/lib/announcements/announcements-utils.tssurfsense_web/hooks/use-announcements.tssurfsense_web/components/assistant-ui/thread.tsxsurfsense_backend/pyproject.toml.vscode/launch.json