Commit graph

253 commits

Author SHA1 Message Date
DESKTOP-RTLN3BA\$punk
bdacea8b6e feat(crawler): captcha solving + per-attempt billing (Phase 3d)
Wire captchatools as the StealthyFetcher-tier page_action to detect, harvest
(egressing from the crawl's own proxy IP), inject, and submit reCAPTCHA v2/v3
and hCaptcha tokens. Opt-in and off by default (zero attempts, zero cost).

Licensing split:
- Apache-2 app/utils/captcha/ holds the generic, vendor-agnostic config
  (CaptchaConfig + captcha_enabled() = flag AND key present).
- Proprietary app/proprietary/web_crawler/captcha.py holds the bypass logic
  (detect/harvest/inject) plus a process-wide solver latch that halts solving
  on unrecoverable errors (no balance / bad key).

Crawler: CrawlOutcome gains captcha_attempts/captcha_solved, surfaced via a
per-call captcha_state dict threaded crawl_url -> _crawl_with_stealthy(_sync)
and stamped onto every stealth terminal outcome. The stealth tier captures the
proxy once and reuses it for both the fetch and the solver (IP-coherence).

Billing: WebCrawlCreditService gains captcha_billing_enabled,
captcha_solves_to_micros, charge_captcha, and a generic check_balance, sharing
a single _apply_debit path. The indexer accumulates attempts (even on failed
crawls), runs a combined crawl+captcha pre-flight, and posts a per-attempt
owner charge as usage_type="web_crawl_captcha". The captcha worst-case is only
reserved when solving is actually enabled, so a solving-off deployment is never
blocked for captcha that can never run. Both chat scrape tools fold attempts
into the current turn before the success/fail branch.

Fully config-driven prices; no migration. New unit tests cover the config,
factory (detection/latch/timeout/cap), credit service, indexer wiring, and the
chat fold.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-29 22:58:21 -07:00
DESKTOP-RTLN3BA\$punk
17bdb06825 feat(03c): bill credits per successful web crawl
Add a config-driven crawl meter (1 USD / 1000 successes by default, retunable
via WEB_CRAWL_MICROS_PER_SUCCESS) mirroring EtlCreditService:

- WebCrawlCreditService (gate -> pre-check -> post-charge) on the unified wallet
- webcrawler indexer: pre-flight credit block + post-charge of the workspace
  owner per success, with a web_crawl TokenUsage audit row
- chat scrape_webpage (main + research): fold each successful scrape into the
  active turn's token accumulator so it settles with the chat turn
- WEB_CRAWL_CREDIT_BILLING_ENABLED / WEB_CRAWL_MICROS_PER_SUCCESS config + env
- unit tests (service) + integration tests (indexer wiring)
- scripts/e2e_phase3_crawl_billing.py: manual functional e2e (3a/3b/3c)

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-29 21:40:53 -07:00
DESKTOP-RTLN3BA\$punk
5c36cd3071 feat(03a): implement Scrapling-only web crawler and remove Firecrawl integration
- Standardized the web crawler to use Scrapling exclusively, removing Firecrawl entirely.
- Updated the crawler's location to `app/proprietary/web_crawler/connector.py` under a non-Apache-2 license boundary.
- Refactored the `WebCrawlerConnector` to eliminate the Firecrawl API key dependency, simplifying the interface for crawling URLs.
- Adjusted related components to accommodate the new structure and ensure successful crawl outcomes are properly handled.
- Updated documentation to reflect these changes and the new implementation status.
2026-06-29 20:37:56 -07:00
CREDO23
7fb0707933 refactor(backend): rename search_space -> workspace across app bulk (Phase 2 Wave D)
Scoped codemod over surfsense_backend/app (excluding routes/, Wave E): renames
search_space_id -> workspace_id, search_space -> workspace, SearchSpace -> Workspace
across services, utils, tasks, agents, gateway, event_bus, notifications, podcasts,
automations, observability params, and prompt .md files. Also flips the camelCase
payload key searchSpaceId -> workspaceId (no backend reader; hard cutover).

Preserved carve-outs (verbatim): Celery task names "delete_search_space_background"
and "ai_sort_search_space" (wire names), and the OTel/metric key "search_space.id"
(dashboards depend on it). Enum values 'SEARCH_SPACE' and SearchSourceConnector
untouched.
2026-06-26 18:30:47 +02:00
CREDO23
5a71769dba fix(chunks): set position on remaining chunk insert paths
document_converters, the github size-fallback chunker, revert_service
restores, and the kb-persistence middleware now write explicit positions
(the middleware read path also orders by position).
2026-06-12 18:53:08 +02:00
CREDO23
0fb1d3d37b feat(etl-cache): route all file-based sources through the parse cache
Every file ingestion path (Dropbox, Google Drive / Composio Drive, OneDrive,
local folder, Obsidian, and the legacy upload handlers) now parses via the
extract_with_cache facade instead of calling EtlPipelineService.extract
directly, so identical bytes are deduplicated globally regardless of source.
vision_llm is passed through, keeping the existing cacheability gate intact.
2026-06-12 14:47:25 +02:00
DESKTOP-RTLN3BA\$punk
a7407502d3 feat(refactor): refactor payment system to implement unified credit wallet.
- Updated environment variables and - configurations for credit purchases via Stripe, replacing legacy page pack system.
- Introduced auto-reload feature for credit top-ups and modified database models to track credit transactions.
- Updated notification system to handle insufficient credits and auto-reload failures.
- Adjusted API routes and schemas to reflect changes in credit management.
2026-06-10 16:49:03 -07:00
CREDO23
ba687813c1 fix(elasticsearch): commit failed status immediately 2026-06-10 00:10:52 +02:00
CREDO23
c26181d086 fix(airtable): commit failed status immediately 2026-06-10 00:10:52 +02:00
CREDO23
e3afe9d7c7 fix(luma): commit failed status immediately 2026-06-10 00:10:52 +02:00
CREDO23
8191118eb4 fix(bookstack): commit failed status immediately 2026-06-10 00:10:52 +02:00
CREDO23
45438249b6 fix(clickup): commit failed status immediately 2026-06-10 00:10:52 +02:00
CREDO23
f5dd8f3985 fix(github): commit failed status immediately 2026-06-10 00:10:52 +02:00
CREDO23
f085ac59e5 fix(teams): commit failed status immediately 2026-06-10 00:10:52 +02:00
CREDO23
791b0afe16 fix(discord): commit failed status immediately 2026-06-10 00:10:52 +02:00
CREDO23
be8a3bcd00 fix(slack): commit failed status immediately 2026-06-10 00:10:52 +02:00
CREDO23
c47949791b fix(confluence): fail skipped placeholders so they don't stay pending 2026-06-10 00:10:42 +02:00
CREDO23
d70d01f331 fix(linear): fail skipped placeholders so they don't stay pending 2026-06-10 00:10:42 +02:00
CREDO23
1b0912aaa3 fix(calendar): fail skipped placeholders so they don't stay pending 2026-06-10 00:10:42 +02:00
CREDO23
b2c2fc9c2e fix(gmail): fail skipped placeholders so they don't stay pending 2026-06-10 00:10:42 +02:00
CREDO23
90b32a8880 fix(notion): fail skipped placeholders so they don't stay pending 2026-06-10 00:10:42 +02:00
CREDO23
33300e4faa fix(dropbox): sanitize ETL reason and retry stuck pending/processing files 2026-06-10 00:10:25 +02:00
CREDO23
464e7d4554 fix(onedrive): sanitize ETL reason and retry stuck pending/processing files 2026-06-10 00:10:25 +02:00
CREDO23
c0c5f3414e fix(google-drive): sanitize ETL reason and retry stuck pending/processing files 2026-06-10 00:10:25 +02:00
CREDO23
e45e8389dc fix(dropbox): mark documents failed on ETL failure 2026-06-09 23:39:25 +02:00
CREDO23
82aaaa5a9f fix(onedrive): mark documents failed on ETL failure 2026-06-09 23:39:25 +02:00
CREDO23
6fd95f82b4 fix(google-drive): mark placeholders failed on ETL failure 2026-06-09 23:39:25 +02:00
CREDO23
cb10882dc8 feat(indexers): add mark_connector_documents_failed helper 2026-06-09 23:39:25 +02:00
DESKTOP-RTLN3BA\$punk
ce952d2ad1 chore: linting 2026-06-09 00:42:26 -07:00
Anish Sarkar
e4d7b01b09 refactor(backend): Update references from document summary LLM to agent LLM across multiple files 2026-06-04 01:50:44 +05:30
Anish Sarkar
f3866b9e7e feat(backend): Use deterministic content in connector ingestion 2026-06-04 00:51:38 +05:30
CREDO23
b6710ae9af refactor(jira): remove dead legacy indexing and write tools (mcp-only now) 2026-06-02 16:38:00 +02:00
CREDO23
1791241c0c perf(indexers): offload sync embed_text to thread across background workers
Connector kb_sync_services (gmail, onedrive, google_calendar, jira),
streaming indexers (discord, luma, teams) and the file-processor save
path all called embed_text inside async coroutines, blocking the
background worker's event loop for the duration of the embed. Wrap each
call site in asyncio.to_thread so concurrent indexing tasks stop
serialising on the embed.
2026-05-20 10:09:38 +02:00
DESKTOP-RTLN3BA\$punk
cea8618aed fix: fixed composio issues 2026-05-02 21:16:03 -07:00
Anish Sarkar
9b1b9a90c0 Merge remote-tracking branch 'upstream/dev' into feat/obsidian-plugin 2026-04-24 21:34:55 +05:30
CREDO23
9977f9b641 remove dead indexing tasks and fix silent schedule breakage for live connectors 2026-04-22 21:43:51 +02:00
Anish Sarkar
99623a85d5 refactor: remove legacy Obsidian connector support 2026-04-22 00:10:24 +05:30
CREDO23
e02fbbef6c remove MCP-mode skip from Notion indexer 2026-04-21 20:33:57 +02:00
CREDO23
5a8ec704fe feat(notion-mcp): add MCP gating in agent, indexer, and health check 2026-04-20 21:02:21 +02:00
DESKTOP-RTLN3BA\$punk
656e061f84 feat: add processing mode support for document uploads and ETL pipeline, improded error handling ux
Some checks are pending
Build and Push Docker Images / tag_release (push) Waiting to run
Build and Push Docker Images / build (./surfsense_backend, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-24.04-arm, linux/arm64, arm64) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_backend, ./surfsense_backend/Dockerfile, backend, surfsense-backend, ubuntu-latest, linux/amd64, amd64) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_web, ./surfsense_web/Dockerfile, web, surfsense-web, ubuntu-24.04-arm, linux/arm64, arm64) (push) Blocked by required conditions
Build and Push Docker Images / build (./surfsense_web, ./surfsense_web/Dockerfile, web, surfsense-web, ubuntu-latest, linux/amd64, amd64) (push) Blocked by required conditions
Build and Push Docker Images / create_manifest (backend, surfsense-backend) (push) Blocked by required conditions
Build and Push Docker Images / create_manifest (web, surfsense-web) (push) Blocked by required conditions
- 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.
2026-04-14 21:26:00 -07:00
DESKTOP-RTLN3BA\$punk
4bee367d4a feat: added ai file sorting 2026-04-14 01:43:30 -07:00
CREDO23
a95bf58c8f Make Vision LLM opt-in for uploads and connectors 2026-04-10 16:45:51 +02:00
CREDO23
0aefcbd504 Remove vision LLM from desktop folder watcher 2026-04-09 22:06:06 +02:00
CREDO23
afd3c2cde2 Pass vision LLM through local folder indexer call chain 2026-04-09 14:50:24 +02:00
Anish Sarkar
56c5809170 chore: ran linting 2026-04-08 18:23:03 +05:30
Anish Sarkar
37c52ce7ea feat: implement indexing progress management in local folder indexing process and enhance related test coverage 2026-04-08 18:01:55 +05:30
Anish Sarkar
a8b83dcf3f feat: add folder_id support in ConnectorDocument and indexing pipeline for improved document organization 2026-04-08 17:48:50 +05:30
Anish Sarkar
f3aa514240 feat: integrate subtree ID retrieval in local folder cleanup process and enhance UI component styling for folder selection 2026-04-08 17:25:18 +05:30
Anish Sarkar
cab0d1bdfe feat: enhance folder synchronization by integrating subtree ID retrieval and optimizing empty folder cleanup process 2026-04-08 17:10:22 +05:30
Anish Sarkar
ae98f64760 feat: enhance folder indexing with metadata management and improve folder structure handling in UI components 2026-04-08 16:48:40 +05:30