Conversation
…to conversation context
…ate_memory functionality
… team memory management
…and seed memory with first name
…ogic in MemoryInjectionMiddleware
…ry seed and improve button styles in MemoryContent and TeamMemoryManager components
… TeamMemoryManager components, enhancing user experience with alerts and improved layout
…mMemoryManager components, and enhance FloatingToolbar
…lay in message info dropdown
…e generation handling
feat: track and display per-message LLM token usage & UI/UX changes
…sibility feat: improve Obsidian connector visibility and desktop sync flow
…ne, improded error handling ux - Introduced a `ProcessingMode` enum to differentiate between basic and premium processing modes. - Updated `EtlRequest` to include a `processing_mode` field, defaulting to basic. - Enhanced ETL pipeline services to utilize the selected processing mode for Azure Document Intelligence and LlamaCloud parsing. - Modified various routes and services to handle processing mode, affecting document upload and indexing tasks. - Improved error handling and logging to include processing mode details. - Added tests to validate processing mode functionality and its impact on ETL operations.
Move the duplicated TYPE_ICONS record from citation.tsx and citation-list.tsx into a new type-icons.ts module so the mapping lives in one place and both components import from the same source. Resolves #1190
Replace ReactDOMServer.renderToString with a tiny createRoot + flushSync helper so react-dom/server is no longer pulled into the client bundle on every chat page load. react-dom is already in the bundle (React itself uses it), so this adds zero new runtime weight. Fixes #1189.
Wrap the opts object and derived context in useMemo so ZeroReactProvider receives stable references across parent re-renders. Before this change opts was rebuilt on every render of ZeroProvider, which can cause the Rocicorp Zero client to churn its internal state / reconnect if it compares props by reference. Fixes #1097.
The cleanup for the announcement-toast effect only cleared the outer 1500ms timer, leaving the per-announcement stagger timers (i * 800ms) untracked. If the root layout unmounts during the stagger window, those timers fire after cleanup and attempt to toast against a dead tree. Track the inner timer ids in an array and clear them alongside the outer timer in the effect cleanup. Fixes #1094.
refactor: extract duplicate TYPE_ICONS constant into shared module
fix(web): drop react-dom/server from inline-mention-editor bundle
fix(web): memoize Zero provider opts to prevent reconnect churn
…ger-timers fix(web): clear announcement stagger timers on unmount
- Enhanced Azure Document Intelligence parser to raise an error for empty or whitespace-only content. - Updated LLMRouterService to log premium model strings more clearly. - Added automatic encoding detection for file reading in document processors. - Improved error handling for empty markdown content extraction in file processors. - Refactored DocumentUploadTab component for better accessibility and user interaction.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
- Changed assertions in `test_llamacloud_basic_uses_cost_effective_tier` to check for `parse_page_with_llm` instead of `cost_effective` tier. - Updated `test_llamacloud_premium_uses_agentic_plus_tier` to verify `parse_page_with_agent` instead of `agentic_plus` tier. - Ensured that `tier` is no longer included in the call arguments.
There was a problem hiding this comment.
Review by RecurseML
🔍 Review performed on 7c61668..e7fba02
✨ No bugs found, your code is sparkling clean
✅ Files analyzed, no issues (50)
• .cursor/skills/alert-manager/SKILL.md
• .cursor/skills/alert-manager/references/alert-configuration-templates.md
• .cursor/skills/alert-manager/references/alert-threshold-guide.md
• .cursor/skills/backlink-analyzer/SKILL.md
• .cursor/skills/backlink-analyzer/references/analysis-templates.md
• .cursor/skills/backlink-analyzer/references/link-quality-rubric.md
• .cursor/skills/backlink-analyzer/references/outreach-templates.md
• .cursor/skills/competitor-analysis/SKILL.md
• .cursor/skills/competitor-analysis/references/analysis-templates.md
• .cursor/skills/competitor-analysis/references/battlecard-template.md
• .cursor/skills/competitor-analysis/references/example-report.md
• .cursor/skills/competitor-analysis/references/positioning-frameworks.md
• .cursor/skills/content-gap-analysis/SKILL.md
• .cursor/skills/content-gap-analysis/references/analysis-templates.md
• .cursor/skills/content-gap-analysis/references/example-report.md
• .cursor/skills/content-gap-analysis/references/gap-analysis-frameworks.md
• .cursor/skills/content-quality-auditor/SKILL.md
• .cursor/skills/content-quality-auditor/references/item-reference.md
• .cursor/skills/content-refresher/SKILL.md
• .cursor/skills/content-refresher/references/content-decay-signals.md
• .cursor/skills/content-refresher/references/refresh-example.md
• .cursor/skills/content-refresher/references/refresh-templates.md
• .cursor/skills/domain-authority-auditor/SKILL.md
• .cursor/skills/domain-authority-auditor/references/example-report.md
• .cursor/skills/entity-optimizer/SKILL.md
• .cursor/skills/entity-optimizer/references/entity-signal-checklist.md
• .cursor/skills/entity-optimizer/references/entity-type-reference.md
• .cursor/skills/entity-optimizer/references/example-audit-report.md
• .cursor/skills/entity-optimizer/references/knowledge-graph-guide.md
• .cursor/skills/entity-optimizer/references/knowledge-panel-wikidata-guide.md
• .cursor/skills/geo-content-optimizer/SKILL.md
• .cursor/skills/geo-content-optimizer/references/ai-citation-patterns.md
• .cursor/skills/geo-content-optimizer/references/geo-optimization-techniques.md
• .cursor/skills/geo-content-optimizer/references/quotable-content-examples.md
• .cursor/skills/internal-linking-optimizer/SKILL.md
• .cursor/skills/internal-linking-optimizer/references/link-architecture-patterns.md
• .cursor/skills/internal-linking-optimizer/references/linking-example.md
• .cursor/skills/internal-linking-optimizer/references/linking-templates.md
• .cursor/skills/keyword-research/SKILL.md
• .cursor/skills/keyword-research/references/example-report.md
• .cursor/skills/keyword-research/references/keyword-intent-taxonomy.md
• .cursor/skills/keyword-research/references/keyword-prioritization-framework.md
• .cursor/skills/keyword-research/references/topic-cluster-templates.md
• .cursor/skills/memory-management/SKILL.md
• .cursor/skills/memory-management/references/examples.md
• .cursor/skills/memory-management/references/glossary-template.md
• .cursor/skills/memory-management/references/hot-cache-template.md
• .cursor/skills/memory-management/references/promotion-demotion-rules.md
• .cursor/skills/memory-management/references/update-triggers-integration.md
• .cursor/skills/meta-tags-optimizer/SKILL.md
⏭️ Files skipped (248)
| Locations |
|---|
.cursor/skills/meta-tags-optimizer/references/ctr-and-social-reference.md |
.cursor/skills/meta-tags-optimizer/references/meta-tag-code-templates.md |
.cursor/skills/meta-tags-optimizer/references/meta-tag-formulas.md |
.cursor/skills/on-page-seo-auditor/SKILL.md |
.cursor/skills/on-page-seo-auditor/references/audit-example.md |
.cursor/skills/on-page-seo-auditor/references/audit-templates.md |
.cursor/skills/on-page-seo-auditor/references/scoring-rubric.md |
.cursor/skills/performance-reporter/SKILL.md |
.cursor/skills/performance-reporter/references/kpi-definitions.md |
.cursor/skills/performance-reporter/references/report-output-templates.md |
.cursor/skills/performance-reporter/references/report-templates.md |
.cursor/skills/rank-tracker/SKILL.md |
.cursor/skills/rank-tracker/references/ranking-analysis-templates.md |
.cursor/skills/rank-tracker/references/tracking-setup-guide.md |
.cursor/skills/schema-markup-generator/SKILL.md |
.cursor/skills/schema-markup-generator/references/schema-decision-tree.md |
.cursor/skills/schema-markup-generator/references/schema-templates.md |
.cursor/skills/schema-markup-generator/references/validation-guide.md |
.cursor/skills/seo-content-writer/SKILL.md |
.cursor/skills/seo-content-writer/references/content-structure-templates.md |
.cursor/skills/seo-content-writer/references/seo-writing-checklist.md |
.cursor/skills/seo-content-writer/references/title-formulas.md |
.cursor/skills/serp-analysis/SKILL.md |
.cursor/skills/serp-analysis/references/analysis-templates.md |
.cursor/skills/serp-analysis/references/example-report.md |
.cursor/skills/serp-analysis/references/serp-feature-taxonomy.md |
.cursor/skills/technical-seo-checker/SKILL.md |
.cursor/skills/technical-seo-checker/references/http-status-codes.md |
.cursor/skills/technical-seo-checker/references/robots-txt-reference.md |
.cursor/skills/technical-seo-checker/references/technical-audit-example.md |
.cursor/skills/technical-seo-checker/references/technical-audit-templates.md |
.cursor/skills/ugc-brief/.skillfish.json |
.cursor/skills/ugc-brief/SKILL.md |
.gitignore |
VERSION |
docker/.env.example |
skills-lock.json |
surfsense_backend/.env.example |
surfsense_backend/alembic/versions/121_add_memory_md_columns.py |
surfsense_backend/alembic/versions/122_migrate_and_drop_old_memory_tables.py |
surfsense_backend/alembic/versions/123_add_enable_vision_llm_to_connectors.py |
surfsense_backend/alembic/versions/124_add_ai_file_sort_enabled.py |
surfsense_backend/alembic/versions/125_add_token_usage_table.py |
surfsense_backend/alembic/versions/126_add_premium_token_quota.py |
surfsense_backend/app/agents/new_chat/__init__.py |
surfsense_backend/app/agents/new_chat/chat_deepagent.py |
surfsense_backend/app/agents/new_chat/llm_config.py |
surfsense_backend/app/agents/new_chat/memory_extraction.py |
surfsense_backend/app/agents/new_chat/middleware/__init__.py |
surfsense_backend/app/agents/new_chat/middleware/dedup_tool_calls.py |
surfsense_backend/app/agents/new_chat/middleware/filesystem.py |
surfsense_backend/app/agents/new_chat/middleware/knowledge_search.py |
surfsense_backend/app/agents/new_chat/middleware/memory_injection.py |
surfsense_backend/app/agents/new_chat/sandbox.py |
surfsense_backend/app/agents/new_chat/system_prompt.py |
surfsense_backend/app/agents/new_chat/tools/__init__.py |
surfsense_backend/app/agents/new_chat/tools/confluence/create_page.py |
surfsense_backend/app/agents/new_chat/tools/confluence/delete_page.py |
surfsense_backend/app/agents/new_chat/tools/confluence/update_page.py |
surfsense_backend/app/agents/new_chat/tools/dropbox/create_file.py |
surfsense_backend/app/agents/new_chat/tools/dropbox/trash_file.py |
surfsense_backend/app/agents/new_chat/tools/gmail/create_draft.py |
surfsense_backend/app/agents/new_chat/tools/gmail/send_email.py |
surfsense_backend/app/agents/new_chat/tools/gmail/trash_email.py |
surfsense_backend/app/agents/new_chat/tools/gmail/update_draft.py |
surfsense_backend/app/agents/new_chat/tools/google_calendar/create_event.py |
surfsense_backend/app/agents/new_chat/tools/google_calendar/delete_event.py |
surfsense_backend/app/agents/new_chat/tools/google_calendar/update_event.py |
surfsense_backend/app/agents/new_chat/tools/google_drive/create_file.py |
surfsense_backend/app/agents/new_chat/tools/google_drive/trash_file.py |
surfsense_backend/app/agents/new_chat/tools/hitl.py |
surfsense_backend/app/agents/new_chat/tools/jira/create_issue.py |
surfsense_backend/app/agents/new_chat/tools/jira/delete_issue.py |
surfsense_backend/app/agents/new_chat/tools/jira/update_issue.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/mcp_tool.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/onedrive/create_file.py |
surfsense_backend/app/agents/new_chat/tools/onedrive/trash_file.py |
surfsense_backend/app/agents/new_chat/tools/registry.py |
surfsense_backend/app/agents/new_chat/tools/shared_memory.py |
surfsense_backend/app/agents/new_chat/tools/update_memory.py |
surfsense_backend/app/agents/new_chat/tools/user_memory.py |
surfsense_backend/app/agents/podcaster/nodes.py |
surfsense_backend/app/agents/video_presentation/nodes.py |
surfsense_backend/app/app.py |
surfsense_backend/app/celery_app.py |
surfsense_backend/app/config/__init__.py |
surfsense_backend/app/config/global_llm_config.example.yaml |
surfsense_backend/app/connectors/dropbox/content_extractor.py |
surfsense_backend/app/connectors/google_drive/content_extractor.py |
surfsense_backend/app/connectors/onedrive/content_extractor.py |
surfsense_backend/app/db.py |
surfsense_backend/app/etl_pipeline/etl_document.py |
surfsense_backend/app/etl_pipeline/etl_pipeline_service.py |
surfsense_backend/app/etl_pipeline/file_classifier.py |
surfsense_backend/app/etl_pipeline/parsers/azure_doc_intelligence.py |
surfsense_backend/app/etl_pipeline/parsers/llamacloud.py |
surfsense_backend/app/etl_pipeline/parsers/vision_llm.py |
surfsense_backend/app/exceptions.py |
surfsense_backend/app/indexing_pipeline/indexing_pipeline_service.py |
surfsense_backend/app/rate_limiter.py |
surfsense_backend/app/routes/__init__.py |
surfsense_backend/app/routes/anonymous_chat_routes.py |
surfsense_backend/app/routes/documents_routes.py |
surfsense_backend/app/routes/editor_routes.py |
surfsense_backend/app/routes/export_routes.py |
surfsense_backend/app/routes/memory_routes.py |
surfsense_backend/app/routes/new_chat_routes.py |
surfsense_backend/app/routes/new_llm_config_routes.py |
surfsense_backend/app/routes/sandbox_routes.py |
surfsense_backend/app/routes/search_source_connectors_routes.py |
surfsense_backend/app/routes/search_spaces_routes.py |
surfsense_backend/app/routes/stripe_routes.py |
surfsense_backend/app/schemas/new_chat.py |
surfsense_backend/app/schemas/new_llm_config.py |
surfsense_backend/app/schemas/search_source_connector.py |
surfsense_backend/app/schemas/search_space.py |
surfsense_backend/app/schemas/stripe.py |
surfsense_backend/app/services/ai_file_sort_service.py |
surfsense_backend/app/services/export_service.py |
surfsense_backend/app/services/folder_service.py |
surfsense_backend/app/services/llm_router_service.py |
surfsense_backend/app/services/llm_service.py |
surfsense_backend/app/services/model_list_service.py |
surfsense_backend/app/services/openrouter_integration_service.py |
surfsense_backend/app/services/task_dispatcher.py |
surfsense_backend/app/services/token_quota_service.py |
surfsense_backend/app/services/token_tracking_service.py |
surfsense_backend/app/services/turnstile_service.py |
surfsense_backend/app/tasks/celery_tasks/document_tasks.py |
surfsense_backend/app/tasks/celery_tasks/stripe_reconciliation_task.py |
surfsense_backend/app/tasks/chat/stream_new_chat.py |
surfsense_backend/app/tasks/connector_indexers/dropbox_indexer.py |
surfsense_backend/app/tasks/connector_indexers/google_drive_indexer.py |
surfsense_backend/app/tasks/connector_indexers/local_folder_indexer.py |
surfsense_backend/app/tasks/connector_indexers/onedrive_indexer.py |
surfsense_backend/app/tasks/document_processors/_direct_converters.py |
surfsense_backend/app/tasks/document_processors/file_processors.py |
surfsense_backend/app/utils/content_utils.py |
surfsense_backend/app/utils/file_extensions.py |
surfsense_backend/pyproject.toml |
surfsense_backend/scripts/create_sandbox_snapshot.py |
surfsense_backend/tests/integration/document_upload/conftest.py |
surfsense_backend/tests/unit/agents/new_chat/tools/test_update_memory_scope.py |
surfsense_backend/tests/unit/connector_indexers/test_dropbox_parallel.py |
surfsense_backend/tests/unit/connector_indexers/test_google_drive_parallel.py |
surfsense_backend/tests/unit/connector_indexers/test_onedrive_parallel.py |
surfsense_backend/tests/unit/etl_pipeline/test_etl_pipeline_service.py |
surfsense_backend/tests/unit/middleware/test_knowledge_search.py |
surfsense_backend/tests/unit/services/test_ai_file_sort_service.py |
surfsense_backend/tests/unit/services/test_ai_sort_task_dedupe.py |
surfsense_backend/tests/unit/services/test_folder_hierarchy.py |
surfsense_backend/tests/unit/test_error_contract.py |
surfsense_backend/tests/unit/utils/test_file_extensions.py |
surfsense_backend/uv.lock |
surfsense_browser_extension/package.json |
surfsense_desktop/.env.example |
surfsense_desktop/.gitignore |
surfsense_desktop/package.json |
surfsense_web/.env.example |
surfsense_web/app/(home)/blog/[slug]/page.tsx |
surfsense_web/app/(home)/blog/blog-magazine.tsx |
surfsense_web/app/(home)/blog/page.tsx |
surfsense_web/app/(home)/changelog/page.tsx |
surfsense_web/app/(home)/contact/page.tsx |
surfsense_web/app/(home)/free/[model_slug]/layout.tsx |
surfsense_web/app/(home)/free/[model_slug]/page.tsx |
surfsense_web/app/(home)/free/page.tsx |
surfsense_web/app/(home)/layout.tsx |
surfsense_web/app/(home)/login/LocalLoginForm.tsx |
surfsense_web/app/(home)/page.tsx |
surfsense_web/app/(home)/pricing/page.tsx |
surfsense_web/app/(home)/privacy/page.tsx |
surfsense_web/app/(home)/terms/page.tsx |
surfsense_web/app/dashboard/[search_space_id]/buy-more/page.tsx |
surfsense_web/app/dashboard/[search_space_id]/buy-pages/page.tsx |
surfsense_web/app/dashboard/[search_space_id]/buy-tokens/page.tsx |
surfsense_web/app/dashboard/[search_space_id]/new-chat/[[...chat_id]]/page.tsx |
surfsense_web/app/dashboard/[search_space_id]/purchase-cancel/page.tsx |
surfsense_web/app/dashboard/[search_space_id]/purchase-success/page.tsx |
surfsense_web/app/dashboard/[search_space_id]/user-settings/components/ApiKeyContent.tsx |
surfsense_web/app/dashboard/[search_space_id]/user-settings/components/MemoryContent.tsx |
surfsense_web/app/dashboard/[search_space_id]/user-settings/components/ProfileContent.tsx |
surfsense_web/app/dashboard/[search_space_id]/user-settings/components/PurchaseHistoryContent.tsx |
surfsense_web/app/dashboard/error.tsx |
surfsense_web/app/docs/[[...slug]]/page.tsx |
surfsense_web/app/error.tsx |
surfsense_web/app/global-error.tsx |
surfsense_web/app/layout.tsx |
surfsense_web/app/not-found.tsx |
surfsense_web/app/robots.ts |
surfsense_web/app/sitemap.ts |
surfsense_web/atoms/folder-sync/folder-sync.atoms.ts |
surfsense_web/atoms/new-llm-config/new-llm-config-query.atoms.ts |
surfsense_web/atoms/settings/settings-dialog.atoms.ts |
surfsense_web/components/Logo.tsx |
surfsense_web/components/announcements/AnnouncementCard.tsx |
surfsense_web/components/announcements/AnnouncementToastProvider.tsx |
surfsense_web/components/assistant-ui/assistant-message.tsx |
surfsense_web/components/assistant-ui/connector-popup.tsx |
surfsense_web/components/assistant-ui/connector-popup/components/vision-llm-config.tsx |
surfsense_web/components/assistant-ui/connector-popup/connector-configs/views/connector-edit-view.tsx |
surfsense_web/components/assistant-ui/connector-popup/connector-configs/views/indexing-configuration-view.tsx |
surfsense_web/components/assistant-ui/connector-popup/constants/connector-constants.ts |
surfsense_web/components/assistant-ui/connector-popup/hooks/use-connector-dialog.ts |
surfsense_web/components/assistant-ui/connector-popup/tabs/active-connectors-tab.tsx |
surfsense_web/components/assistant-ui/document-upload-popup.tsx |
surfsense_web/components/assistant-ui/inline-citation.tsx |
surfsense_web/components/assistant-ui/inline-mention-editor.tsx |
surfsense_web/components/assistant-ui/markdown-text.tsx |
surfsense_web/components/assistant-ui/thread.tsx |
surfsense_web/components/assistant-ui/token-usage-context.tsx |
surfsense_web/components/assistant-ui/tool-fallback.tsx |
surfsense_web/components/chat-comments/comment-item/comment-item.tsx |
surfsense_web/components/contact/contact-form.tsx |
surfsense_web/components/container.tsx |
surfsense_web/components/documents/DocumentNode.tsx |
surfsense_web/components/documents/DocumentTypeIcon.tsx |
surfsense_web/components/documents/DocumentsFilters.tsx |
surfsense_web/components/documents/FolderNode.tsx |
surfsense_web/components/documents/FolderTreeView.tsx |
surfsense_web/components/editor/plate-editor.tsx |
surfsense_web/components/editor/presets.ts |
surfsense_web/components/editor/utils/escape-mdx.ts |
surfsense_web/components/free-chat/anonymous-chat.tsx |
surfsense_web/components/free-chat/free-chat-page.tsx |
surfsense_web/components/free-chat/free-composer.tsx |
surfsense_web/components/free-chat/free-model-selector.tsx |
surfsense_web/components/free-chat/free-right-panel.tsx |
surfsense_web/components/free-chat/free-thread.tsx |
surfsense_web/components/free-chat/quota-bar.tsx |
surfsense_web/components/free-chat/quota-warning-banner.tsx |
surfsense_web/components/homepage/auth-redirect.tsx |
surfsense_web/components/homepage/footer-new.tsx |
surfsense_web/components/homepage/github-stars-badge.tsx |
surfsense_web/components/homepage/hero-section.tsx |
surfsense_web/components/homepage/integrations.tsx |
surfsense_web/components/homepage/navbar.tsx |
surfsense_web/components/icons/providers/github.svg |
surfsense_web/components/icons/providers/index.ts |
surfsense_web/components/layout/providers/FreeLayoutDataProvider.tsx |
surfsense_web/components/layout/providers/LayoutDataProvider.tsx |
surfsense_web/components/layout/ui/header/Header.tsx |
Summary
New Features
execute_codetool with sandbox creation, snapshot scripts, file sync, and path traversal protectiontoken_usagetable, accumulator/callback system, and per-message usage display in the chat UI.md, team & user memory scopingrequest_approvalutility + MCP Tool Trust routes across all integrations (Gmail, Drive, Jira, Linear, Notion, OneDrive, Confluence, Dropbox)Bug Fixes
display_name.split()IndexError on whitespace-only namesreact-dom/serverfrom inline-mention-editor bundleRefactors & Performance
TYPE_ICONSmodule; moved pure utils out of UI componentsnext/imagesizes with dynamicmaxWidth"use client"directivesChore
.env.exampleand.gitignoreaddedMotivation and Context
FIX #
Screenshots
API Changes
Change Type
Testing Performed
Checklist
High-level PR Summary
This is a major release (0.0.16) that introduces several significant features including token usage tracking with per-message display and quota management, a persistent memory rework with background extraction and markdown-based storage supporting team and user scoping, OpenRouter integration for global LLM configuration, vision LLM support with opt-in model selection and size guards, code sandbox integration with Daytona for script execution and file synchronization, knowledge base export as ZIP with folder structure preservation, HITL (human-in-the-loop) approval system for tool trust across all integrations (Gmail, Drive, Jira, Linear, Notion, OneDrive, Confluence, Dropbox), a no-login experience enabling guest access with premium token support, AI-powered file sorting within knowledge bases, and comprehensive model selector improvements. The release also includes bug fixes for Zero provider reconnect, KB search behavior, Azure parser issues, mobile upload hydration errors, and adds 20 comprehensive SEO/GEO cursor skills covering keyword research, content optimization, domain authority auditing, and performance monitoring. Multiple refactors improve interrupt handling, optimize image sizes, migrate to TanStack Query, and streamline UI components across Composer, settings, and sidebar areas.
⏱️ Estimated Review Time: 3+ hours
💡 Review Order Suggestion
VERSIONsurfsense_backend/alembic/versions/125_add_token_usage_table.pysurfsense_backend/alembic/versions/126_add_premium_token_quota.pysurfsense_backend/app/services/token_tracking_service.pysurfsense_backend/app/services/token_quota_service.pysurfsense_backend/app/rate_limiter.pysurfsense_backend/app/exceptions.pysurfsense_web/components/assistant-ui/token-usage-context.tsxsurfsense_backend/alembic/versions/121_add_memory_md_columns.pysurfsense_backend/alembic/versions/122_migrate_and_drop_old_memory_tables.pysurfsense_backend/app/agents/new_chat/memory_extraction.pysurfsense_backend/app/agents/new_chat/middleware/memory_injection.pysurfsense_backend/app/agents/new_chat/tools/update_memory.pysurfsense_backend/app/routes/memory_routes.pysurfsense_web/components/editor/plate-editor.tsxsurfsense_web/app/dashboard/[search_space_id]/user-settings/components/MemoryContent.tsxsurfsense_backend/alembic/versions/123_add_enable_vision_llm_to_connectors.pysurfsense_backend/app/etl_pipeline/parsers/vision_llm.pysurfsense_web/components/assistant-ui/connector-popup/components/vision-llm-config.tsxsurfsense_backend/alembic/versions/124_add_ai_file_sort_enabled.pysurfsense_backend/app/services/ai_file_sort_service.pysurfsense_backend/app/agents/new_chat/tools/hitl.pysurfsense_backend/app/agents/new_chat/tools/gmail/send_email.pysurfsense_backend/app/agents/new_chat/tools/gmail/create_draft.pysurfsense_backend/app/agents/new_chat/tools/gmail/update_draft.pysurfsense_backend/app/agents/new_chat/tools/gmail/trash_email.pysurfsense_backend/app/agents/new_chat/tools/google_drive/create_file.pysurfsense_backend/app/agents/new_chat/tools/google_drive/trash_file.pysurfsense_backend/app/agents/new_chat/tools/jira/create_issue.pysurfsense_backend/app/agents/new_chat/tools/jira/update_issue.pysurfsense_backend/app/agents/new_chat/tools/jira/delete_issue.pysurfsense_backend/app/routes/export_routes.pysurfsense_backend/app/services/export_service.pysurfsense_backend/app/config/global_llm_config.example.yamlsurfsense_backend/app/services/openrouter_integration_service.pysurfsense_backend/app/routes/new_llm_config_routes.pysurfsense_backend/app/services/model_list_service.pysurfsense_backend/app/services/turnstile_service.pysurfsense_backend/app/routes/anonymous_chat_routes.pysurfsense_web/components/free-chat/anonymous-chat.tsxsurfsense_web/components/free-chat/free-chat-page.tsxsurfsense_web/components/free-chat/quota-bar.tsxsurfsense_web/app/(home)/free/[model_slug]/page.tsxsurfsense_backend/app/agents/new_chat/sandbox.pysurfsense_backend/scripts/create_sandbox_snapshot.py.cursor/skills/memory-management/SKILL.md.cursor/skills/keyword-research/SKILL.md.cursor/skills/rank-tracker/SKILL.md.cursor/skills/alert-manager/SKILL.md.cursor/skills/competitor-analysis/SKILL.md.cursor/skills/content-gap-analysis/SKILL.md.cursor/skills/seo-content-writer/SKILL.md.cursor/skills/content-quality-auditor/SKILL.mdsurfsense_backend/app/etl_pipeline/parsers/azure_doc_intelligence.pysurfsense_backend/app/etl_pipeline/parsers/llamacloud.pysurfsense_backend/app/agents/new_chat/middleware/knowledge_search.pysurfsense_web/components/assistant-ui/connector-popup/connector-configs/views/indexing-configuration-view.tsxsurfsense_web/components/documents/FolderTreeView.tsxsurfsense_web/components/documents/DocumentsFilters.tsxsurfsense_backend/app/services/llm_router_service.pysurfsense_backend/app/agents/new_chat/llm_config.pysurfsense_web/components/homepage/navbar.tsxsurfsense_web/components/homepage/footer-new.tsxsurfsense_web/components/layout/ui/header/Header.tsx