Commit graph

7206 commits

Author SHA1 Message Date
Anish Sarkar
1b1e612e20 test(native-connector): cover reddit fetch resilience 2026-07-04 17:28:13 +05:30
Anish Sarkar
4d950ddcb5 test(native-connector): add reddit post fixture 2026-07-04 17:28:08 +05:30
Anish Sarkar
672f79d620 test(native-connector): add reddit listing fixture 2026-07-04 17:28:02 +05:30
Anish Sarkar
83f52b17b1 test(native-connector): add reddit comment fixture 2026-07-04 17:27:56 +05:30
Anish Sarkar
f14bf1f06d test(native-connector): add reddit scraper test package 2026-07-04 17:27:53 +05:30
Anish Sarkar
975fdad0ef test(native-connector): add live reddit scraper e2e check 2026-07-04 17:27:47 +05:30
Anish Sarkar
3956045221 feat(native-connector): classify reddit scrape urls 2026-07-04 17:27:44 +05:30
Anish Sarkar
eaa8239e36 feat(native-connector): add reddit scraper orchestrator 2026-07-04 17:27:38 +05:30
Anish Sarkar
dd43ab8505 feat(native-connector): add reddit scraper schemas 2026-07-04 17:27:33 +05:30
Anish Sarkar
0745f433ab feat(native-connector): add reddit json parsers 2026-07-04 17:27:22 +05:30
Anish Sarkar
7151465e12 feat(native-connector): add anonymous reddit fetch layer 2026-07-04 17:27:13 +05:30
Anish Sarkar
1115d647cb feat(native-connector): expose reddit scraper public API 2026-07-04 17:26:58 +05:30
Anish Sarkar
54eab56b25 docs(native-connector): document anonymous reddit scraper design 2026-07-04 17:26:12 +05:30
DESKTOP-RTLN3BA\$punk
7185079bd6 feat(native-connector): added google maps places & reviews scrapers 2026-07-02 21:58:24 -07:00
DESKTOP-RTLN3BA\$punk
cc99bc4cae Update licensing information for SurfSense software
- Added Business Source License 1.1 details to the proprietary LICENSE file.
- Clarified terms of use, including production use restrictions and transition to Apache License after four years.
- Updated README.md to reflect the new licensing structure and its implications for users.

This change ensures clear communication of licensing terms for proprietary components within the SurfSense project.
2026-07-02 03:28:42 -07:00
DESKTOP-RTLN3BA\$punk
0445c646c6 refactor(native-connector): relocate youtube scraper under app/proprietary + parallelize playlists
Move app/scrapers -> app/proprietary/scrapers/youtube to sit alongside the existing proprietary web_crawler/platforms namespace, updating all external imports (routes, tests, e2e script, README). Internal imports were relative so are unchanged.

Also parallelize playlist per-video resolution: page video ids sequentially, then resolve the heavy watch-page fetches concurrently via fan_out (~150 videos ~70s, down from a few minutes). Items stream in completion order; sort by the order field for playlist order.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-02 02:34:04 -07:00
DESKTOP-RTLN3BA\$punk
99378d7b63 feat(native-connector): added youtube scrapers 2026-07-02 01:10:31 -07:00
DESKTOP-RTLN3BA\$punk
f964e59686 docs(plans): finish delivery-path correction in diagrams + overview
Two spots the prior citation pass missed still framed alert delivery as reused from automations. Align them with the committed correction: recurrence/audit reuse automations; alerts ride app/notifications; per-Tracker lock guards concurrency (gate is non-atomic). Also genericize the Maps actor as not-committed-for-MVP.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-30 21:58:12 -07:00
DESKTOP-RTLN3BA\$punk
05bbb64527 docs(plans): principal-engineer citation pass before Phase 4
Verified revamp Phase 4-7 code citations against surfsense_backend and corrected drift:

- automations have NO delivery/notification path and automation_runs.output is never written; CI alerts wire to the separate app/notifications system (NotificationService.create_notification, Zero-synced)

- automation PENDING-gate is non-atomic (no UPDATE...WHERE status=pending); per-Tracker lock is the primary concurrency guard, not belt-and-suspenders

- folder upload uses root_folder_id (not destination_folder); KB folder scoping goes via referenced_document_ids -> SearchScope.document_ids (no folder_id search filter)

- billable predicate is 'SUCCESS and outcome.result' duplicated per caller; to be single-sourced in the 04a executor

Confirmed accurate: schedule selector (FOR UPDATE SKIP LOCKED/next_fire_at/self-heal/catchup=False/croniter), AutomationRun model, format_to_structured_document(exclude_metadata=True), MCP routing gap (constants.py), connector enum, MANUAL trigger placeholder. Added dated verification stamp to revamp/00-overview.md. Also reconciled 03b/03c/umbrella wording.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-30 19:30:21 -07:00
Rohan Verma
78da036c6b
Merge pull request #1564 from CREDO23/revamp-phases4-7
[Docs] Re-architect Phases 4–7 (CI pipeline revamp)
2026-06-30 16:42:22 -07:00
CREDO23
9f107ff52c docs(revamp): add end-to-end pipeline diagrams 2026-07-01 00:16:29 +02:00
CREDO23
93f7c591ae docs(revamp): rename folder to 'revamp phases 4-7' 2026-07-01 00:13:45 +02:00
CREDO23
0b884d1774 docs(revamp): rewrite overview as the 04-07 phase index 2026-07-01 00:11:56 +02:00
CREDO23
4e77b8397e docs(revamp): reshape Orchestration into Phase 7 2026-07-01 00:11:04 +02:00
CREDO23
e5d670c609 docs(revamp): reshape Triggers into Phase 6 2026-07-01 00:10:14 +02:00
CREDO23
5c2428541d docs(revamp): reshape Intelligence into Phase 5b 2026-07-01 00:09:32 +02:00
CREDO23
3b92e40bf6 docs(revamp): reshape Timeline into Phase 5a 2026-07-01 00:08:28 +02:00
CREDO23
129e9039a8 docs(revamp): reshape Access into Phase 4b 2026-07-01 00:07:39 +02:00
CREDO23
d472693aac docs(revamp): reshape Capabilities into Phase 4a 2026-07-01 00:06:46 +02:00
CREDO23
d5df87dafd docs(revamp): rename primitive to Tracker, subagent to intelligence_agent 2026-06-30 23:54:11 +02:00
CREDO23
3aeecc315a docs(revamp): correct CI uploads to land in KB (folder-scoped) 2026-06-30 23:42:52 +02:00
CREDO23
dc6864d8d4 docs(revamp): complete overview (reconciliation, sequence, decisions) 2026-06-30 23:38:44 +02:00
CREDO23
d69be56ddb docs(revamp): add Orchestration domain (CI-expert subagent) 2026-06-30 23:38:02 +02:00
CREDO23
5d93d46f5d docs(revamp): add Triggers domain (recurrence via automations action) 2026-06-30 23:38:02 +02:00
CREDO23
89ad2cd992 docs(revamp): add Timeline domain (3-store delta moat) 2026-06-30 23:38:02 +02:00
CREDO23
a15cd8953a docs(revamp): reuse run-record/idempotency + add CI context folder 2026-06-30 23:37:55 +02:00
CREDO23
04fa89fd4c docs(revamp): add Intelligence domain (Lens + hot loop) 2026-06-30 23:37:10 +02:00
CREDO23
f13a17d3df docs(revamp): make natural language the human surface (intent router) 2026-06-30 23:36:23 +02:00
CREDO23
a5fc8c2b7d docs(revamp): add Access domain (chat/REST/MCP doors) 2026-06-30 23:35:42 +02:00
CREDO23
297a53efa6 docs(revamp): add Capabilities domain (typed verbs) 2026-06-30 23:35:11 +02:00
CREDO23
10801058c5 docs(revamp): add CI pivot overview & domain map 2026-06-30 23:35:05 +02:00
DESKTOP-RTLN3BA\$punk
15fd0b08d6 feat: completed init mvp of phase 3 2026-06-30 03:02:40 -07:00
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
aad366ba13 chore: sync plans (03c@17bdb0682 implemented)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-29 21:41:26 -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
a517eb7d2d chore: sync plans (03a@5c36cd3, 03b@6226012 implemented)
Mark 03a/03b status banners with their commit SHAs in the subplans and umbrella plan.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-29 21:04:17 -07:00
DESKTOP-RTLN3BA\$punk
62260125f7 feat(03b): add BYO custom proxy provider + bounded crawler rotation-retry
Add CustomProxyProvider (single endpoint or rotating pool via Scrapling ProxyRotator), registered as 'custom' alongside anonymous_proxies and selectable via PROXY_PROVIDER. Adds is_pool_backed to the ProxyProvider ABC + a zero-arg package helper. The web crawler does a bounded one-per-tier is_proxy_error rotation-retry gated on is_pool_backed() (single-endpoint providers no-op). Config/.env.example gain CUSTOM_PROXY_URL(S). Zero-arg getter contract unchanged for all consumers. Documents the proprietary boundary test (generic proxy infra stays Apache-2). Tests: provider, registry, crawler rotation (16).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-29 21:03:34 -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
DESKTOP-RTLN3BA\$punk
34ab23f5d8 chore: synced plans 2026-06-29 18:26:29 -07:00
Rohan Verma
96b18af607
Merge pull request #1562 from MODSetter/feat/rename-searchspace-to-workspace
feat: rename searchspace to workspace
2026-06-29 17:58:07 -07:00