Skip to content

feat: release 0.0.16#1234

Merged
MODSetter merged 180 commits intomainfrom
dev
Apr 16, 2026
Merged

feat: release 0.0.16#1234
MODSetter merged 180 commits intomainfrom
dev

Conversation

@MODSetter
Copy link
Copy Markdown
Owner

@MODSetter MODSetter commented Apr 16, 2026

Summary

New Features

  • OpenRouter Integration — global LLM config support with OpenRouter as a provider
  • Code Sandbox (Daytona)execute_code tool with sandbox creation, snapshot scripts, file sync, and path traversal protection
  • Token Usage Tracking — new token_usage table, accumulator/callback system, and per-message usage display in the chat UI
  • Persistent Memory Rework — background extraction, markdown-based storage, PlateEditor input, export as .md, team & user memory scoping
  • KB Export & Folder Upload — export knowledge bases as ZIP, folder-level context menu export, preserve folder structure on upload
  • HITL Approval System — unified request_approval utility + MCP Tool Trust routes across all integrations (Gmail, Drive, Jira, Linear, Notion, OneDrive, Confluence, Dropbox)
  • Vision LLM — opt-in vision model for uploads/connectors with 5MB guard and graceful fallback
  • No-Login Experience — guest access flow with premium token support
  • AI File Sorting — intelligent document sorting within knowledge bases
  • Obsidian Connector — improved visibility and desktop sync flow
  • Processing Modes — configurable processing mode for document uploads and ETL pipeline
  • Model Selector Rework — new Agent Model Manager, GitHub Models icon, richer model info dropdown

Bug Fixes

  • Fix Zero provider reconnect churn (memoized opts)
  • Fix KB search skipping on system-after-user messages
  • Fix Azure Document Intelligence parser (prebuilt-layout model)
  • Fix button-in-button hydration error on mobile upload
  • Fix display_name.split() IndexError on whitespace-only names
  • Clear announcement toast stagger timers on unmount
  • Drop react-dom/server from inline-mention-editor bundle
  • Sanitize folder names in ZIP export paths (security)

Refactors & Performance

  • Unified interrupt handling across all tool integrations
  • Extracted shared TYPE_ICONS module; moved pure utils out of UI components
  • Optimized next/image sizes with dynamic maxWidth
  • Migrated GitHub stars fetch to TanStack Query
  • Removed unnecessary "use client" directives
  • Simplified Composer, settings layout, and sidebar components

Chore

  • Version bump to 0.0.16
  • LlamaCloud v2 implementation fix
  • Desktop .env.example and .gitignore added
  • Multiple linting passes

Motivation and Context

FIX #

Screenshots

API Changes

  • This PR includes API changes

Change Type

  • Bug fix
  • New feature
  • Performance improvement
  • Refactoring
  • Documentation
  • Dependency/Build system
  • Breaking change
  • Other (specify):

Testing Performed

  • Tested locally
  • Manual/QA verification

Checklist

  • Follows project coding standards and conventions
  • Documentation updated as needed
  • Dependencies updated as needed
  • No lint/build errors or new warnings
  • All relevant tests are passing

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
Order File Path
1 VERSION
2 surfsense_backend/alembic/versions/125_add_token_usage_table.py
3 surfsense_backend/alembic/versions/126_add_premium_token_quota.py
4 surfsense_backend/app/services/token_tracking_service.py
5 surfsense_backend/app/services/token_quota_service.py
6 surfsense_backend/app/rate_limiter.py
7 surfsense_backend/app/exceptions.py
8 surfsense_web/components/assistant-ui/token-usage-context.tsx
9 surfsense_backend/alembic/versions/121_add_memory_md_columns.py
10 surfsense_backend/alembic/versions/122_migrate_and_drop_old_memory_tables.py
11 surfsense_backend/app/agents/new_chat/memory_extraction.py
12 surfsense_backend/app/agents/new_chat/middleware/memory_injection.py
13 surfsense_backend/app/agents/new_chat/tools/update_memory.py
14 surfsense_backend/app/routes/memory_routes.py
15 surfsense_web/components/editor/plate-editor.tsx
16 surfsense_web/app/dashboard/[search_space_id]/user-settings/components/MemoryContent.tsx
17 surfsense_backend/alembic/versions/123_add_enable_vision_llm_to_connectors.py
18 surfsense_backend/app/etl_pipeline/parsers/vision_llm.py
19 surfsense_web/components/assistant-ui/connector-popup/components/vision-llm-config.tsx
20 surfsense_backend/alembic/versions/124_add_ai_file_sort_enabled.py
21 surfsense_backend/app/services/ai_file_sort_service.py
22 surfsense_backend/app/agents/new_chat/tools/hitl.py
23 surfsense_backend/app/agents/new_chat/tools/gmail/send_email.py
24 surfsense_backend/app/agents/new_chat/tools/gmail/create_draft.py
25 surfsense_backend/app/agents/new_chat/tools/gmail/update_draft.py
26 surfsense_backend/app/agents/new_chat/tools/gmail/trash_email.py
27 surfsense_backend/app/agents/new_chat/tools/google_drive/create_file.py
28 surfsense_backend/app/agents/new_chat/tools/google_drive/trash_file.py
29 surfsense_backend/app/agents/new_chat/tools/jira/create_issue.py
30 surfsense_backend/app/agents/new_chat/tools/jira/update_issue.py
31 surfsense_backend/app/agents/new_chat/tools/jira/delete_issue.py
32 surfsense_backend/app/routes/export_routes.py
33 surfsense_backend/app/services/export_service.py
34 surfsense_backend/app/config/global_llm_config.example.yaml
35 surfsense_backend/app/services/openrouter_integration_service.py
36 surfsense_backend/app/routes/new_llm_config_routes.py
37 surfsense_backend/app/services/model_list_service.py
38 surfsense_backend/app/services/turnstile_service.py
39 surfsense_backend/app/routes/anonymous_chat_routes.py
40 surfsense_web/components/free-chat/anonymous-chat.tsx
41 surfsense_web/components/free-chat/free-chat-page.tsx
42 surfsense_web/components/free-chat/quota-bar.tsx
43 surfsense_web/app/(home)/free/[model_slug]/page.tsx
44 surfsense_backend/app/agents/new_chat/sandbox.py
45 surfsense_backend/scripts/create_sandbox_snapshot.py
46 .cursor/skills/memory-management/SKILL.md
47 .cursor/skills/keyword-research/SKILL.md
48 .cursor/skills/rank-tracker/SKILL.md
49 .cursor/skills/alert-manager/SKILL.md
50 .cursor/skills/competitor-analysis/SKILL.md
51 .cursor/skills/content-gap-analysis/SKILL.md
52 .cursor/skills/seo-content-writer/SKILL.md
53 .cursor/skills/content-quality-auditor/SKILL.md
54 surfsense_backend/app/etl_pipeline/parsers/azure_doc_intelligence.py
55 surfsense_backend/app/etl_pipeline/parsers/llamacloud.py
56 surfsense_backend/app/agents/new_chat/middleware/knowledge_search.py
57 surfsense_web/components/assistant-ui/connector-popup/connector-configs/views/indexing-configuration-view.tsx
58 surfsense_web/components/documents/FolderTreeView.tsx
59 surfsense_web/components/documents/DocumentsFilters.tsx
60 surfsense_backend/app/services/llm_router_service.py
61 surfsense_backend/app/agents/new_chat/llm_config.py
62 surfsense_web/components/homepage/navbar.tsx
63 surfsense_web/components/homepage/footer-new.tsx
64 surfsense_web/components/layout/ui/header/Header.tsx

Need help? Join our Discord

Analyze latest changes

AnishSarkar22 and others added 30 commits April 8, 2026 23:21
…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
AnishSarkar22 and others added 25 commits April 14, 2026 15:35
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.
@vercel
Copy link
Copy Markdown

vercel bot commented Apr 16, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
surf-sense-frontend Ready Ready Preview, Comment Apr 16, 2026 8:34am

Request Review

- 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.
Copy link
Copy Markdown

@recurseml recurseml bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

@MODSetter MODSetter merged commit 99995c6 into main Apr 16, 2026
5 of 9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants