Skip to content

[Local|Release] Release desktop 2.1.0 - #2167

Merged
CREDO23 merged 317 commits into
mainfrom
dev
Oct 4, 2026
Merged

CREDO23 merged 317 commits into
mainfrom
dev

Conversation

@CREDO23

@CREDO23 CREDO23 commented Oct 4, 2026

Copy link
Copy Markdown
Collaborator

Summary

Brings main up to dev for desktop 2.1.0. The v2.1.0 tag goes on this PR's merge commit.

The Desktop Release dry run 37102724459 passed on Mac, Windows and Linux at 0847e12, the head of dev. No installer carries opencode, no job warns about Node 20, and the Mac build was notarized once the Apple Developer agreement that took effect on 1 Oct was accepted.

Once this deploys, the site's download grid asks GitHub for v2.1.0 and shows the releases link until that release is published.

Follows #1932

MODSetter and others added 30 commits September 29, 2026 13:25
fix(models): explain searched build fit failures
fix(studio): trust the server format catalog
fix(local): stop a cancelled podcast or office job at the next boundary
feat(local): pass a JSON schema from run_model, starting with the quiz
…tions

fix(studio): translate unavailable reasons as sentences
fix(local): discard a chat turn that ends with no answer text
fix(chat): send no citation rules when retrieval finds nothing
fix(local): read the size in a Featherless-shaped listing row's id
…oyment-mode

fix(sunset): gate the web redirect on DEPLOYMENT_MODE
fix(sunset): pause hosted recurring user work
ci(web): run the surfsense_web unit tests on pull requests
…-410

Co-authored-by: Cursor <cursoragent@cursor.com>

# Conflicts:
#	docs/architecture/sunset.md
fix(sunset): include sunset_url in the 410 export-only body
…rge-guards

Co-authored-by: Cursor <cursoragent@cursor.com>

# Conflicts:
#	docs/architecture/sunset.md
…inspect

Co-authored-by: Cursor <cursoragent@cursor.com>

# Conflicts:
#	docs/architecture/local-models/selection.md
test(sunset): cover hosted account purge guards
fix(local): inspect llama.cpp model size at selection
A thinking model writes its trace in markdown, and the box showed it as
literal ##, ** and fences under an answer that renders properly. The trace
now goes through Streamdown with the shared code and math plugins, the same
link safety as the answer, and the answer's harden limits: http, https and
mailto links only, no images, no data images. Streamdown's own prop is a
rehype plugin list, so the limits are its default raw and sanitize passes
plus its harden pass re-run with those options, the way the assistant-ui
primitive builds them for the answer. Default mode, since the trace streams.

The box keeps its fold, fade, follow-the-newest-line scrolling, region role,
name and tabIndex; whitespace-pre-wrap goes, markdown handles it. The scroll
tests find the viewport by its role now that the text sits inside elements.
The chat doc's gap line is cut down to the thinking switch (#1950).

Fixes #1949
license-settings.test.tsx expects "Sep 10, 2027" for an expiry of
2027-09-10T00:00:00Z, but the component formats the instant in the
machine's local zone, so west of UTC it reads "Sep 9, 2027" and the suite
fails on a laptop while passing in CI. Pin the zone vitest runs in rather
than every assertion that spells out a day.
…lient-disconnect

# Conflicts:
#	docs/architecture/chat.md
#	surfsense_local/backend/tests/integration/chat/conftest.py
#	surfsense_local/backend/tests/integration/chat/test_chat.py
…ompt

The tier fallback keyed on the provider name, so a small model served by
LM Studio or Ollama on localhost arrived as openai_compatible and got
capable prompts. Fingerprint now carries loopback, set by
SelectedModel.fingerprint from its connection's host through
host_destination(); the connection loads joined, so the tier stays
computed on read with no lazy query and nothing stored.

Fixes #1987
Store each upload and cloud import alone in documents/<id>/ under its own name, made safe with pathvalidate and capped at 120 bytes, instead of original.<ext>. The name the file manager and the opened file's window show is now the one the user gave it. No name is stored in a row: the folder's one file is the original.

Stop writing extracted.md. Nothing ever read it back; the parsed text lives in documents.content, which search, chat, Studio and any future reindex use.

Folders written before this keep original.<ext> and their extracted.md and are never rewritten or reindexed. The lookup in the backend and in Electron skips extracted.md, so a legacy folder whose original was deleted reads as missing, and an upload named extracted.md is stored as "extracted (1).md".
The expired notice told the user to renew "from your account", and the
portal has no accounts (ADR 0024). The empty state named no place a
license comes from at all.

Settings › License now links out through ExternalLink: with no license
stored, to the trial form on /downloads and to /pricing; in the expired
notice, to /pricing, with the body saying a renewal comes as a new file
to add here. The file_expired reason, mirrored in the backend, points at
the resend form instead of an account. Nothing is gated: the links are
an offer, never a wall.

Fixes #1961
budget.py priced the question at 1,024 tokens and said MessageText
enforced it, but MessageText had no maximum, so a pasted page walked
past its share and llama.cpp cut the reply off wherever the window ran
out, with no error.

MessageText now refuses more than QUESTION_CHARS, 4,096 characters:
QUESTION_TOKENS at the four-characters-a-token estimate history.py
already prices turns with, which moves to budget.py as CHARS_PER_TOKEN
so there is one ratio. The refusal is a 422 at the wire, before any
model is resolved or retrieval runs. One global cap rather than one per
window, because it runs before the model is known and the budget prices
the question at the same 1,024 for every window.

The composer stops at the same cap through maxLength and, once there,
says so in a status line, so nobody finds out on send.

Fixes #1943
enforce-placeholders reads values only from an object literal, so the
three calls in model-ready.tsx that handed it a variable, one through a
spread, were never checked: dropping `source` from the first passed lint.

Two no-restricted-syntax selectors beside the formatjs rules now refuse a
formatMessage whose second argument is not an object literal, and a
spread inside that literal, so the shape cannot come back. The three
calls write their values out; ModelReady renders the same sentences and
en.json is unchanged.

Fixes #1966
…es move

POST /llm/installs accepted a curated build whose exact fit was TOO_BIG
here: the only thing in the way was the screen's disabled Download, and
onboarding, a stale catalog, a second window or a warm job id reached
the route past it. The job then downloaded gigabytes, wrote a record,
and left a model that fails when chosen.

The plan learns its entry's committed shape when resolve_install()
builds it, where the manifest is in scope, and LlamaCppEngine.check()
prices a curated build through the same price() its row uses. Only
TOO_BIG refuses, with the sentence the searched path gives; a build
that spills installs with no confirmation, as the screen's rule says.
The searched path is unchanged.

Fixes #1976
ModelCard's "The local runtime is unavailable." and BuildAction's refusal
were wired to a runtimeAvailable that every call site hard-coded true, so
with llama-server down the screen looked normal: Download ran, the job
sat in "Preparing" for thirty seconds, and Use then failed with nothing
naming the runtime.

useLocalRuntime() reads the healthy flag GET /llm/providers already
reports for llamacpp, under the models query key, asked again every 15 s
and on window focus. DownloadChatModels shows one notice above the rows
while it is false; unknown is not down. Download stays offered, as the
runtime doc's failure list specifies: an install still downloads and
ends with an honest message. The never-false prop goes from BuildAction,
ModelCard and the five call sites, with the per-card message; the image
and audio pages read no server state, which stays their own gap.

Fixes #1980
… called installed

download_build() wrote one record after every file of a build had landed,
so a connection that dropped between the weights and the projector left
the weights under their final name and nothing written down. The curated
row then matched the file by name, read installed with Vision, and the
model loaded as text only; nothing offered Download for the projector.

The record is now written as each file lands, and InstalledBuild carries
the files still to come as `pending`. llama.cpp's rows and sd.cpp's both
treat an unfinished record as not installed, so the row keeps offering
Download, and a retry fetches only what is missing through the resume
_holds() already gives. Old records read as before: `pending` defaults
to empty.

Fixes #1973
…and the selection

The remote catalog already marked a model unusable, with the manifest's
reason, when its provider is unreachable or it is served only on
/responses or through another protocol. GET /llm/connections/{id}/models
and choose_model() ignored both, so the same model was offered, saved,
and failed at the first real request.

The rule now lives once, as RemoteLookup.unusable_reason(): the remote
catalog's rows and the connection listing both call it. A listed model
it names stays in the listing with selectable_for empty and its
unusable_reason, so every picker and the catalog agree, and choosing it
is refused with that reason unless the user confirms a manual selection,
the same deliberate override an unlisted model takes. A custom
connection names no provider and is never told; a model no entry
describes stays unknown, not unusable.

Fixes #1951
MODSetter and others added 23 commits October 2, 2026 14:21
feat(local): write notes and rename sources from the sources panel
fix(local): stop Chromium's spellchecker from downloading dictionaries
feat(local): add a switch to turn thinking off for chat answers
…nd thinking

The "+" opens a dropdown with Attach images, Upload sources and a Thinking switch, replacing the image-only button and the separate Thinking button beside the model name. Each row's description shows as a tooltip, and is also in the row as screen-reader text; held rows stay hoverable so their reason can be read.

Upload sources reuses the sources panel's upload. Adds the shadcn. Switch and swaps the brain icon for ThoughtBubble.
The sidebar, error toasts and the macOS Help menu still open the issue report dialog.
…s main action

- Split the Settings sidebar into Settings, Models, System and App groups, and let it scroll now that the groups are taller than the dialog
- Translate the Models and System headings into all nine languages
- Make Start a free trial the filled button when there is no license; Add license becomes an outline button and See pricing the only link
- Use one block skeleton in Resources, as Network and Embedding do
- Opening a source preview now swaps out the left sidebar and widens it to the detail width, as an inspected artifact does the right panel
- The right panel no longer closes while a source is previewed
- The preview header shows one Open file button, as citations do; the eye and Show in folder buttons are removed (Show in folder stays on each source row)
- Update documents.md and overview.md to match
- Add Settings › Report issue in the App group, below About, with the
  full report form inline and Copy system info under it
- Share one form between the tab and the dialog; error toasts, the
  crash notice and the macOS Help menu keep opening the dialog, since
  they fire where Settings isn't open
- Remove the sidebar's Report issue row and About's Troubleshooting block
- Update about.md and issue-reports.md
- On the dashboard, Help › Report Issue… opens Settings on the Report
  issue tab; on loading, onboarding and the startup error screen it
  still opens the popup, since no Settings dialog exists there
- Error toasts and the sidecar crash notice keep opening the popup
- Note in each component who opens the popup and who opens the tab
- Tighten the Settings sidebar's row and group spacing so every tab
  fits without scrolling
- Shorten the Report issue label in Spanish, French and Russian
- Update issue-reports.md
- On the text generation step, models downloaded from Hugging Face now
  lead the "On this computer" list; the curated list below keeps its
  order, starred model first
- Their details line says "From Hugging Face", so an unreviewed model
  isn't mistaken for a recommendation
- Downloaded curated models say "Downloaded" instead of "On this
  computer", which repeated the section heading
- Update selection.md
… menu without a workspace

- The source preview column can shrink, down to the sidebar's width, so
  on a narrow window it narrows instead of pushing the open right panel
  out of view
- Help › Report Issue… claims Settings only while a workspace is active;
  on the "No workspaces" screen, where Settings isn't rendered, it opens
  the popup instead of doing nothing
feat(local): source preview in the sidebar, grouped settings, Report issue tab, composer add menu
[Agent|Release] Keep opencode off until a model passes the agent test
[Web|Lint] Format the files Biome flags on dev
[CI|Node] Build the website and the installers on Node 24
[Local|Release] Set the desktop version to 2.1.0
…node-24

[CI|Release] Run the artifact actions on Node 24
@vercel

vercel Bot commented Oct 4, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated
surf-sense-frontend Ready Ready Preview Oct 4, 2026 11:24am UTC

Request Review

@coderabbitai

coderabbitai Bot commented Oct 4, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 917 files, which is 617 over the limit of 300.

To get a review, reduce the PR to 300 files or fewer by splitting it into smaller PRs or changing its base branch.

Usage-priced reviews support at most 300 files.

⚙️ Run configuration
  • Configuration used: Repository: MODSetter/SurfSense/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: a86f84bf-9b37-49d0-ae8e-f52fd10e0138
📥 Commits

Reviewing files that changed from the base of the PR and between 666bbb0 and 0847e12.

⛔ Files ignored due to path filters (42)
  • docker/sandbox/remotion/package-lock.json is excluded by !**/package-lock.json
  • plans/community-local/seo/data/b2b/clickstream-top-terms.json.gz is excluded by !**/*.gz
  • plans/community-local/seo/data/b2b/competitors-b2b-heads.json.gz is excluded by !**/*.gz
  • plans/community-local/seo/data/b2b/overview-editing-office.json.gz is excluded by !**/*.gz
  • plans/community-local/seo/data/b2b/overview-finance-legal-consulting.json.gz is excluded by !**/*.gz
  • plans/community-local/seo/data/b2b/overview-jobs-a.json.gz is excluded by !**/*.gz
  • plans/community-local/seo/data/b2b/overview-jobs-b.json.gz is excluded by !**/*.gz
  • plans/community-local/seo/data/b2b/overview-operations-hr-health.json.gz is excluded by !**/*.gz
  • plans/community-local/seo/data/b2b/overview-sales-marketing.json.gz is excluded by !**/*.gz
  • plans/community-local/seo/data/b2b/overview-templates.json.gz is excluded by !**/*.gz
  • plans/community-local/seo/data/b2b/overview-vendor-jobs.json.gz is excluded by !**/*.gz
  • plans/community-local/seo/data/b2b/ranked-bluej.json.gz is excluded by !**/*.gz
  • plans/community-local/seo/data/b2b/ranked-conveyor.json.gz is excluded by !**/*.gz
  • plans/community-local/seo/data/b2b/ranked-datarails.json.gz is excluded by !**/*.gz
  • plans/community-local/seo/data/b2b/ranked-evenup.json.gz is excluded by !**/*.gz
  • plans/community-local/seo/data/b2b/ranked-fieldguide.json.gz is excluded by !**/*.gz
  • plans/community-local/seo/data/b2b/ranked-gamma.json.gz is excluded by !**/*.gz
  • plans/community-local/seo/data/b2b/ranked-genspark.json.gz is excluded by !**/*.gz
  • plans/community-local/seo/data/b2b/ranked-govdash.json.gz is excluded by !**/*.gz
  • plans/community-local/seo/data/b2b/ranked-inventive.json.gz is excluded by !**/*.gz
  • plans/community-local/seo/data/b2b/ranked-magicschool.json.gz is excluded by !**/*.gz
  • plans/community-local/seo/data/b2b/ranked-manus.json.gz is excluded by !**/*.gz
  • plans/community-local/seo/data/b2b/ranked-rogo.json.gz is excluded by !**/*.gz
  • plans/community-local/seo/data/b2b/ranked-skywork.json.gz is excluded by !**/*.gz
  • plans/community-local/seo/data/b2b/ranked-spellbook.json.gz is excluded by !**/*.gz
  • plans/community-local/seo/data/b2b/ranked-vanta.json.gz is excluded by !**/*.gz
  • plans/community-local/seo/data/b2b/suggestions-ai-agent-for.json.gz is excluded by !**/*.gz
  • plans/community-local/seo/data/b2b/suggestions-ai-for.json.gz is excluded by !**/*.gz
  • plugins/core/cli/uv.lock is excluded by !**/*.lock
  • plugins/core/manifest/uv.lock is excluded by !**/*.lock
  • plugins/core/sdk/uv.lock is excluded by !**/*.lock
  • surfsense_backend/scripts/whatsapp-bridge/package-lock.json is excluded by !**/package-lock.json
  • surfsense_backend/uv.lock is excluded by !**/*.lock
  • surfsense_local/backend/uv.lock is excluded by !**/*.lock
  • surfsense_local/electron/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
  • surfsense_local/frontend/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
  • surfsense_mcp/uv.lock is excluded by !**/*.lock
  • surfsense_web/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
  • surfsense_web/public/homepage/banner.png is excluded by !**/*.png
  • surfsense_web/public/homepage/desktop.png is excluded by !**/*.png
  • surfsense_web/public/homepage/offline-studio.png is excluded by !**/*.png
  • surfsense_web/public/logo-wordmark.svg is excluded by !**/*.svg
📒 Files selected for processing (917)
  • .agents/skills/frontend-workflow/color/PALETTE.css
  • .agents/skills/translate/glossary.md
  • .coderabbit.yaml
  • .github/workflows/build-audiocpp.yml
  • .github/workflows/build-sdcpp.yml
  • .github/workflows/desktop-tests.yml
  • .github/workflows/docker-tests.yml
  • .github/workflows/plugins-pull-request-checks.yml
  • .github/workflows/release-local.yml
  • .vscode/settings.json
  • AGENTS.md
  • README.ar.md
  • README.de.md
  • README.es.md
  • README.fr.md
  • README.hi.md
  • README.ja.md
  • README.ko.md
  • README.md
  • README.pt-BR.md
  • README.ru.md
  • README.zh-CN.md
  • SurfSense.code-workspace
  • docker/.env.example
  • docs/ROADMAP.md
  • docs/adr/0004-desktop-app-is-its-own-tree.md
  • docs/adr/0007-bundled-embeddings.md
  • docs/adr/0009-freshness-by-invalidation.md
  • docs/adr/0012-vulkan-only-gpu-backend.md
  • docs/adr/0015-openai-compatible-connections.md
  • docs/adr/0020-two-update-channels.md
  • docs/adr/0023-sunset-behind-flags.md
  • docs/adr/0034-vision-is-the-runtimes-answer-stored-nowhere.md
  • docs/adr/0035-docker-compose-runs-the-desktop-stack.md
  • docs/adr/0036-the-index-records-its-embedder.md
  • docs/adr/0037-embedding-is-a-type-not-a-slot.md
  • docs/adr/0038-chatgpt-plans-sign-in-through-openai-not-codex.md
  • docs/adr/README.md
  • docs/architecture/about.md
  • docs/architecture/agent.md
  • docs/architecture/chat.md
  • docs/architecture/chatgpt-subscription.md
  • docs/architecture/connections.md
  • docs/architecture/data-model.md
  • docs/architecture/documents.md
  • docs/architecture/egress.md
  • docs/architecture/embedding.md
  • docs/architecture/import.md
  • docs/architecture/issue-reports.md
  • docs/architecture/license/app.md
  • docs/architecture/license/portal.md
  • docs/architecture/local-models/catalog.md
  • docs/architecture/local-models/fit.md
  • docs/architecture/local-models/runtime.md
  • docs/architecture/local-models/selection.md
  • docs/architecture/localization.md
  • docs/architecture/overview.md
  • docs/architecture/packaging.md
  • docs/architecture/resource-usage.md
  • docs/architecture/search.md
  • docs/architecture/studio.md
  • docs/architecture/sunset.md
  • docs/architecture/updates.md
  • docs/proposals/agent/01-which-engine.md
  • docs/proposals/agent/02-tools.md
  • docs/proposals/agent/03-opencode.md
  • docs/proposals/agent/05-sources-folder.md
  • docs/proposals/agent/README.md
  • docs/proposals/docker/README.md
  • docs/proposals/docker/gpu.md
  • docs/proposals/embedding-model-change.md
  • docs/proposals/embedding-model-choice.md
  • docs/proposals/model-catalog.md
  • docs/proposals/parser-gpu.md
  • docs/proposals/plugins/01-protocol.md
  • docs/proposals/plugins/02-extending.md
  • docs/proposals/plugins/03-lifecycle.md
  • docs/proposals/plugins/04-versioning.md
  • docs/proposals/plugins/README.md
  • docs/proposals/plugins/app/01-api.md
  • docs/proposals/plugins/app/02-screen.md
  • docs/proposals/plugins/catalog/01-manifest-and-ci.md
  • docs/proposals/plugins/catalog/02-install-and-publish.md
  • docs/proposals/plugins/cli/01-author-commands.md
  • docs/proposals/plugins/install/01-install-update-uninstall.md
  • docs/proposals/plugins/python/01-interpreter.md
  • docs/proposals/plugins/release/01-packaging.md
  • docs/proposals/plugins/release/02-pull-request-checks.md
  • docs/proposals/plugins/release/03-publishing.md
  • docs/proposals/plugins/release/04-plugin-directory-site.md
  • docs/proposals/plugins/runtime/01-process.md
  • docs/proposals/plugins/sdk/01-library-and-harness.md
  • docs/proposals/plugins/sdk/01-library.md
  • docs/proposals/retrieval.md
  • docs/proposals/source-preview.md
  • plans/community-local/purge-runbook.md
  • plans/community-local/seo/06-repo-readme.md
  • plans/community-local/seo/08-b2b-artifact-jobs.md
  • plans/community-local/seo/data/README.md
  • plans/community-local/seo/data/b2b/clickstream-privacy-heads.json
  • plans/community-local/seo/data/b2b/clickstream-vendor-jobs.json
  • plans/community-local/seo/data/b2b/rollup.py
  • plans/community-local/seo/data/b2b/use-cases.json
  • plans/community-local/seo/drafts/README.md
  • plans/community-local/sunset-runbook.md
  • plugins/.gitignore
  • plugins/README.md
  • plugins/core/build-targets.json
  • plugins/core/cli/pyproject.toml
  • plugins/core/cli/surfsense_plugin_cli/__init__.py
  • plugins/core/cli/surfsense_plugin_cli/__main__.py
  • plugins/core/cli/surfsense_plugin_cli/build_targets.py
  • plugins/core/cli/surfsense_plugin_cli/dependencies/__init__.py
  • plugins/core/cli/surfsense_plugin_cli/dependencies/add.py
  • plugins/core/cli/surfsense_plugin_cli/dependencies/listed.py
  • plugins/core/cli/surfsense_plugin_cli/dependencies/pin_dependencies.py
  • plugins/core/cli/surfsense_plugin_cli/dependencies/remove.py
  • plugins/core/cli/surfsense_plugin_cli/dependencies/rewrite_and_pin.py
  • plugins/core/cli/surfsense_plugin_cli/invoke/__init__.py
  • plugins/core/cli/surfsense_plugin_cli/invoke/app/__init__.py
  • plugins/core/cli/surfsense_plugin_cli/invoke/app/app_api.py
  • plugins/core/cli/surfsense_plugin_cli/invoke/app/choose_workspace.py
  • plugins/core/cli/surfsense_plugin_cli/invoke/app/find_app.py
  • plugins/core/cli/surfsense_plugin_cli/invoke/command.py
  • plugins/core/cli/surfsense_plugin_cli/invoke/plugin/__init__.py
  • plugins/core/cli/surfsense_plugin_cli/invoke/plugin/dependencies.py
  • plugins/core/cli/surfsense_plugin_cli/invoke/plugin/plugin_environment.py
  • plugins/core/cli/surfsense_plugin_cli/invoke/plugin/run_plugin.py
  • plugins/core/cli/surfsense_plugin_cli/invoke/plugin/secrets.py
  • plugins/core/cli/surfsense_plugin_cli/invoke/request/__init__.py
  • plugins/core/cli/surfsense_plugin_cli/invoke/request/declared_action.py
  • plugins/core/cli/surfsense_plugin_cli/invoke/request/inputs.py
  • plugins/core/cli/surfsense_plugin_cli/main.py
  • plugins/core/cli/surfsense_plugin_cli/new/__init__.py
  • plugins/core/cli/surfsense_plugin_cli/new/command.py
  • plugins/core/cli/surfsense_plugin_cli/new/template.py
  • plugins/core/cli/surfsense_plugin_cli/packaging/__init__.py
  • plugins/core/cli/surfsense_plugin_cli/packaging/install_requirements.py
  • plugins/core/cli/surfsense_plugin_cli/plugin_folder.py
  • plugins/core/cli/surfsense_plugin_cli/repository.py
  • plugins/core/cli/surfsense_plugin_cli/reserved_ids.py
  • plugins/core/cli/tests/conftest.py
  • plugins/core/cli/tests/invoke/test_choosing_the_workspace.py
  • plugins/core/cli/tests/invoke/test_data_folder.py
  • plugins/core/cli/tests/invoke/test_dependencies.py
  • plugins/core/cli/tests/invoke/test_feedback.py
  • plugins/core/cli/tests/invoke/test_finding_the_app.py
  • plugins/core/cli/tests/invoke/test_inputs.py
  • plugins/core/cli/tests/invoke/test_running.py
  • plugins/core/cli/tests/invoke/test_secrets.py
  • plugins/core/cli/tests/test_build_targets.py
  • plugins/core/cli/tests/test_dependencies.py
  • plugins/core/cli/tests/test_example.py
  • plugins/core/cli/tests/test_new.py
  • plugins/core/manifest/pyproject.toml
  • plugins/core/manifest/surfsense_plugin_manifest/__init__.py
  • plugins/core/manifest/surfsense_plugin_manifest/errors/__init__.py
  • plugins/core/manifest/surfsense_plugin_manifest/errors/from_validation_errors.py
  • plugins/core/manifest/surfsense_plugin_manifest/errors/manifest_error.py
  • plugins/core/manifest/surfsense_plugin_manifest/load_manifest.py
  • plugins/core/manifest/surfsense_plugin_manifest/manifest.py
  • plugins/core/manifest/surfsense_plugin_manifest/read_manifest_json.py
  • plugins/core/manifest/surfsense_plugin_manifest/rules/__init__.py
  • plugins/core/manifest/surfsense_plugin_manifest/rules/display_text.py
  • plugins/core/manifest/surfsense_plugin_manifest/rules/duplicate_names.py
  • plugins/core/manifest/surfsense_plugin_manifest/rules/hosts.py
  • plugins/core/manifest/surfsense_plugin_manifest/rules/identifiers.py
  • plugins/core/manifest/surfsense_plugin_manifest/rules/run_timeout.py
  • plugins/core/manifest/tests/test_load_manifest.py
  • plugins/core/policy/reserved-plugin-ids.txt
  • plugins/core/sdk/pyproject.toml
  • plugins/core/sdk/surfsense_plugin_sdk/__init__.py
  • plugins/core/sdk/surfsense_plugin_sdk/action.py
  • plugins/core/sdk/surfsense_plugin_sdk/app/__init__.py
  • plugins/core/sdk/surfsense_plugin_sdk/app/client.py
  • plugins/core/sdk/surfsense_plugin_sdk/app/context.py
  • plugins/core/sdk/surfsense_plugin_sdk/app/document.py
  • plugins/core/sdk/surfsense_plugin_sdk/data.py
  • plugins/core/sdk/surfsense_plugin_sdk/http/__init__.py
  • plugins/core/sdk/surfsense_plugin_sdk/http/declared_hosts.py
  • plugins/core/sdk/surfsense_plugin_sdk/http/headers.py
  • plugins/core/sdk/surfsense_plugin_sdk/http/redirects.py
  • plugins/core/sdk/surfsense_plugin_sdk/http/response.py
  • plugins/core/sdk/surfsense_plugin_sdk/http/sending.py
  • plugins/core/sdk/surfsense_plugin_sdk/py.typed
  • plugins/core/sdk/surfsense_plugin_sdk/run/__init__.py
  • plugins/core/sdk/surfsense_plugin_sdk/run/__main__.py
  • plugins/core/sdk/surfsense_plugin_sdk/run/call_action.py
  • plugins/core/sdk/surfsense_plugin_sdk/run/current_run.py
  • plugins/core/sdk/surfsense_plugin_sdk/run/load_plugin.py
  • plugins/core/sdk/surfsense_plugin_sdk/run/plugin_manifest.py
  • plugins/core/sdk/surfsense_plugin_sdk/secret.py
  • plugins/core/sdk/tests/conftest.py
  • plugins/core/sdk/tests/contract/conftest.py
  • plugins/core/sdk/tests/contract/test_document.py
  • plugins/core/sdk/tests/contract/test_every_verb_is_covered.py
  • plugins/core/sdk/tests/unit/test_data.py
  • plugins/core/sdk/tests/unit/test_document.py
  • plugins/core/sdk/tests/unit/test_http.py
  • plugins/core/sdk/tests/unit/test_public_surface.py
  • plugins/core/sdk/tests/unit/test_run_command.py
  • plugins/core/sdk/tests/unit/test_secret.py
  • plugins/example/example/__init__.py
  • plugins/example/example/count_words.py
  • plugins/example/example/notes_added.py
  • plugins/example/main.py
  • plugins/example/manifest.json
  • plugins/example/requirements.in
  • plugins/example/requirements.txt
  • scripts/check_translations.mjs
  • surfsense_backend/.env.example
  • surfsense_backend/app/automations/triggers/builtin/schedule/selector.py
  • surfsense_backend/app/indexing_pipeline/document_chunker.py
  • surfsense_backend/app/license/email/address.py
  • surfsense_backend/app/license/keygen.py
  • surfsense_backend/app/license/models.py
  • surfsense_backend/app/license/purchase.py
  • surfsense_backend/app/license/records.py
  • surfsense_backend/app/license/release.py
  • surfsense_backend/app/license/router.py
  • surfsense_backend/app/services/export_service.py
  • surfsense_backend/app/sunset.py
  • surfsense_backend/app/tasks/celery_tasks/knowledge_store/drift_monitor_task.py
  • surfsense_backend/app/tasks/celery_tasks/knowledge_store/index_tasks.py
  • surfsense_backend/app/tasks/celery_tasks/schedule_checker_task.py
  • surfsense_backend/app/utils/blocknote_to_markdown.py
  • surfsense_backend/pyproject.toml
  • surfsense_backend/scripts/correct_license_email.py
  • surfsense_backend/tests/unit/indexing_pipeline/test_document_chunker.py
  • surfsense_backend/tests/unit/license/test_issue.py
  • surfsense_backend/tests/unit/license/test_mail_guard.py
  • surfsense_backend/tests/unit/license/test_refund_suspension.py
  • surfsense_backend/tests/unit/license/test_trial_correction_lookup.py
  • surfsense_backend/tests/unit/license/test_trial_disposable.py
  • surfsense_backend/tests/unit/scripts/test_purge_hosted_accounts.py
  • surfsense_backend/tests/unit/services/test_export_document_paths.py
  • surfsense_backend/tests/unit/test_sunset_scheduled_tasks.py
  • surfsense_backend/tests/unit/test_sunset_write_block.py
  • surfsense_backend/tests/unit/utils/test_blocknote_to_markdown.py
  • surfsense_local/VERSION
  • surfsense_local/backend/alembic/versions/0001_initial_schema.py
  • surfsense_local/backend/alembic/versions/0019_selection_settings.py
  • surfsense_local/backend/alembic/versions/0020_plugin_runs.py
  • surfsense_local/backend/alembic/versions/0021_agent_threads.py
  • surfsense_local/backend/alembic/versions/0022_embedding_indexes.py
  • surfsense_local/backend/alembic/versions/0023_connection_sign_in.py
  • surfsense_local/backend/api/config.py
  • surfsense_local/backend/api/main.py
  • surfsense_local/backend/api/notify.py
  • surfsense_local/backend/bundling/api.spec
  • surfsense_local/backend/main.py
  • surfsense_local/backend/modules/agent/__init__.py
  • surfsense_local/backend/modules/agent/agent_threads/__init__.py
  • surfsense_local/backend/modules/agent/agent_threads/citations.py
  • surfsense_local/backend/modules/agent/agent_threads/forget_sessions.py
  • surfsense_local/backend/modules/agent/agent_threads/open_session.py
  • surfsense_local/backend/modules/agent/agent_threads/replies.py
  • surfsense_local/backend/modules/agent/agent_threads/router.py
  • surfsense_local/backend/modules/agent/agent_threads/steps.py
  • surfsense_local/backend/modules/agent/agent_threads/thread_messages.py
  • surfsense_local/backend/modules/agent/agent_threads/turn.py
  • surfsense_local/backend/modules/agent/agent_threads/turn_frames.py
  • surfsense_local/backend/modules/agent/dependencies.py
  • surfsense_local/backend/modules/agent/engine_choice.py
  • surfsense_local/backend/modules/agent/launch_key.py
  • surfsense_local/backend/modules/agent/model_endpoint/__init__.py
  • surfsense_local/backend/modules/agent/model_endpoint/error_replies.py
  • surfsense_local/backend/modules/agent/model_endpoint/model_address.py
  • surfsense_local/backend/modules/agent/model_endpoint/relay.py
  • surfsense_local/backend/modules/agent/model_endpoint/request_shaping.py
  • surfsense_local/backend/modules/agent/model_endpoint/router.py
  • surfsense_local/backend/modules/agent/model_window.py
  • surfsense_local/backend/modules/agent/opencode_client/__init__.py
  • surfsense_local/backend/modules/agent/opencode_client/client.py
  • surfsense_local/backend/modules/agent/opencode_client/events.py
  • surfsense_local/backend/modules/agent/opencode_client/payloads.py
  • surfsense_local/backend/modules/agent/opencode_config.py
  • surfsense_local/backend/modules/agent/opencode_runtime.py
  • surfsense_local/backend/modules/agent/prompts/agent.md
  • surfsense_local/backend/modules/agent/sources_folder.py
  • surfsense_local/backend/modules/agent/tool_endpoint/__init__.py
  • surfsense_local/backend/modules/agent/tool_endpoint/allowed_callers.py
  • surfsense_local/backend/modules/agent/tool_endpoint/create_artifact.py
  • surfsense_local/backend/modules/agent/tool_endpoint/messages.py
  • surfsense_local/backend/modules/agent/tool_endpoint/offered_tools.py
  • surfsense_local/backend/modules/agent/tool_endpoint/passage_label.py
  • surfsense_local/backend/modules/agent/tool_endpoint/protocol_version.py
  • surfsense_local/backend/modules/agent/tool_endpoint/registration.py
  • surfsense_local/backend/modules/agent/tool_endpoint/replies.py
  • surfsense_local/backend/modules/agent/tool_endpoint/router.py
  • surfsense_local/backend/modules/agent/tool_endpoint/search_sources.py
  • surfsense_local/backend/modules/agent/tool_endpoint/tool.py
  • surfsense_local/backend/modules/artifacts/formats.py
  • surfsense_local/backend/modules/artifacts/podcast/brief.py
  • surfsense_local/backend/modules/artifacts/podcast/router.py
  • surfsense_local/backend/modules/artifacts/podcast/service.py
  • surfsense_local/backend/modules/artifacts/router.py
  • surfsense_local/backend/modules/artifacts/service.py
  • surfsense_local/backend/modules/chat/budget.py
  • surfsense_local/backend/modules/chat/errors.py
  • surfsense_local/backend/modules/chat/history.py
  • surfsense_local/backend/modules/chat/images/__init__.py
  • surfsense_local/backend/modules/chat/images/intake.py
  • surfsense_local/backend/modules/chat/images/sources.py
  • surfsense_local/backend/modules/chat/images/store.py
  • surfsense_local/backend/modules/chat/models.py
  • surfsense_local/backend/modules/chat/prompt.py
  • surfsense_local/backend/modules/chat/router.py
  • surfsense_local/backend/modules/chat/schemas.py
  • surfsense_local/backend/modules/documents/models.py
  • surfsense_local/backend/modules/documents/original_file.py
  • surfsense_local/backend/modules/documents/router.py
  • surfsense_local/backend/modules/documents/schemas.py
  • surfsense_local/backend/modules/documents/storage.py
  • surfsense_local/backend/modules/egress/service.py
  • surfsense_local/backend/modules/embedding/__init__.py
  • surfsense_local/backend/modules/embedding/active.py
  • surfsense_local/backend/modules/embedding/bundled.py
  • surfsense_local/backend/modules/embedding/choose.py
  • surfsense_local/backend/modules/embedding/dependencies.py
  • surfsense_local/backend/modules/embedding/encoder.py
  • surfsense_local/backend/modules/embedding/huggingface/__init__.py
  • surfsense_local/backend/modules/embedding/huggingface/hub.py
  • surfsense_local/backend/modules/embedding/huggingface/pick.py
  • surfsense_local/backend/modules/embedding/huggingface/resolve.py
  • surfsense_local/backend/modules/embedding/huggingface/router.py
  • surfsense_local/backend/modules/embedding/huggingface/search.py
  • surfsense_local/backend/modules/embedding/huggingface/spec_from_repo.py
  • surfsense_local/backend/modules/embedding/lock.py
  • surfsense_local/backend/modules/embedding/models.py
  • surfsense_local/backend/modules/embedding/pooling.py
  • surfsense_local/backend/modules/embedding/router.py
  • surfsense_local/backend/modules/embedding/schemas.py
  • surfsense_local/backend/modules/embedding/search_check.py
  • surfsense_local/backend/modules/embedding/spec.py
  • surfsense_local/backend/modules/embedding/vector_table.py
  • surfsense_local/backend/modules/embedding/verify.py
  • surfsense_local/backend/modules/events/broker.py
  • surfsense_local/backend/modules/events/dependencies.py
  • surfsense_local/backend/modules/events/router.py
  • surfsense_local/backend/modules/events/schemas.py
  • surfsense_local/backend/modules/license/router.py
  • surfsense_local/backend/modules/license/service.py
  • surfsense_local/backend/modules/license/verify.py
  • surfsense_local/backend/modules/llm/catalog/local/build.py
  • surfsense_local/backend/modules/llm/catalog/local/classifier.py
  • surfsense_local/backend/modules/llm/catalog/local/dependencies.py
  • surfsense_local/backend/modules/llm/catalog/local/engines/llamacpp/engine.py
  • surfsense_local/backend/modules/llm/catalog/local/engines/llamacpp/manifest_fields.py
  • surfsense_local/backend/modules/llm/catalog/local/engines/llamacpp/models_folder/preset.py
  • surfsense_local/backend/modules/llm/catalog/local/engines/llamacpp/models_folder/scan.py
  • surfsense_local/backend/modules/llm/catalog/local/engines/llamacpp/rows/catalog.py
  • surfsense_local/backend/modules/llm/catalog/local/engines/llamacpp/sampling.py
  • surfsense_local/backend/modules/llm/catalog/local/engines/llamacpp/search/repo_row.py
  • surfsense_local/backend/modules/llm/catalog/local/engines/llamacpp/support.py
  • surfsense_local/backend/modules/llm/catalog/local/engines/onnxruntime/__init__.py
  • surfsense_local/backend/modules/llm/catalog/local/engines/onnxruntime/engine.py
  • surfsense_local/backend/modules/llm/catalog/local/engines/onnxruntime/manifest_fields.py
  • surfsense_local/backend/modules/llm/catalog/local/engines/onnxruntime/rows.py
  • surfsense_local/backend/modules/llm/catalog/local/engines/onnxruntime/spec.py
  • surfsense_local/backend/modules/llm/catalog/local/engines/registry.py
  • surfsense_local/backend/modules/llm/catalog/local/engines/sdcpp/rows/catalog.py
  • surfsense_local/backend/modules/llm/catalog/local/install/download.py
  • surfsense_local/backend/modules/llm/catalog/local/install/plan.py
  • surfsense_local/backend/modules/llm/catalog/local/install/tickets.py
  • surfsense_local/backend/modules/llm/catalog/local/install_jobs/steps.py
  • surfsense_local/backend/modules/llm/catalog/local/installs.py
  • surfsense_local/backend/modules/llm/catalog/local/manifest/models.json
  • surfsense_local/backend/modules/llm/catalog/local/manifest/schema.py
  • surfsense_local/backend/modules/llm/catalog/local/router.py
  • surfsense_local/backend/modules/llm/catalog/local/rows.py
  • surfsense_local/backend/modules/llm/catalog/local/schemas.py
  • surfsense_local/backend/modules/llm/catalog/local/service.py
  • surfsense_local/backend/modules/llm/catalog/remote/catalog.py
  • surfsense_local/backend/modules/llm/catalog/remote/manifest/lookup.py
  • surfsense_local/backend/modules/llm/catalog/remote/manifest/models.json
  • surfsense_local/backend/modules/llm/catalog/remote/reads_images.py
  • surfsense_local/backend/modules/llm/catalog/remote/schemas.py
  • surfsense_local/backend/modules/llm/catalog/remote/support.py
  • surfsense_local/backend/modules/llm/connections/key_headers.py
  • surfsense_local/backend/modules/llm/connections/listing.py
  • surfsense_local/backend/modules/llm/connections/router.py
  • surfsense_local/backend/modules/llm/connections/serves.py
  • surfsense_local/backend/modules/llm/connections/service.py
  • surfsense_local/backend/modules/llm/image_server_state.py
  • surfsense_local/backend/modules/llm/local_image_state.py
  • surfsense_local/backend/modules/llm/model_type.py
  • surfsense_local/backend/modules/llm/models.py
  • surfsense_local/backend/modules/llm/profile/fingerprint.py
  • surfsense_local/backend/modules/llm/profile/types.py
  • surfsense_local/backend/modules/llm/providers/__init__.py
  • surfsense_local/backend/modules/llm/providers/audiocpp/joined_wav.py
  • surfsense_local/backend/modules/llm/providers/audiocpp/speech.py
  • surfsense_local/backend/modules/llm/providers/llamacpp/capabilities.py
  • surfsense_local/backend/modules/llm/providers/llamacpp/messages.py
  • surfsense_local/backend/modules/llm/providers/llamacpp/preset.py
  • surfsense_local/backend/modules/llm/providers/llamacpp/prompt_progress.py
  • surfsense_local/backend/modules/llm/providers/llamacpp/provider.py
  • surfsense_local/backend/modules/llm/providers/openai_compatible/chat.py
  • surfsense_local/backend/modules/llm/providers/openai_compatible/image.py
  • surfsense_local/backend/modules/llm/providers/openai_compatible/joined_replies.py
  • surfsense_local/backend/modules/llm/providers/openai_compatible/speech.py
  • surfsense_local/backend/modules/llm/providers/openai_compatible/voice_list.py
  • surfsense_local/backend/modules/llm/providers/openai_responses/__init__.py
  • surfsense_local/backend/modules/llm/providers/openai_responses/chat.py
  • surfsense_local/backend/modules/llm/providers/openai_responses/errors.py
  • surfsense_local/backend/modules/llm/providers/openai_responses/events.py
  • surfsense_local/backend/modules/llm/providers/openai_responses/input_items.py
  • surfsense_local/backend/modules/llm/providers/openai_responses/refusal.py
  • surfsense_local/backend/modules/llm/providers/protocols.py
  • surfsense_local/backend/modules/llm/providers/sdcpp/serving.py
  • surfsense_local/backend/modules/llm/providers/stream_deadline.py
  • surfsense_local/backend/modules/llm/providers/types.py
  • surfsense_local/backend/modules/llm/reads_images.py
  • surfsense_local/backend/modules/llm/resolution.py
  • surfsense_local/backend/modules/llm/router.py
  • surfsense_local/backend/modules/llm/schemas.py
  • surfsense_local/backend/modules/llm/selectable.py
  • surfsense_local/backend/modules/llm/selection.py
  • surfsense_local/backend/modules/llm/subscriptions/__init__.py
  • surfsense_local/backend/modules/llm/subscriptions/chatgpt/__init__.py
  • surfsense_local/backend/modules/llm/subscriptions/chatgpt/account.py
  • surfsense_local/backend/modules/llm/subscriptions/chatgpt/endpoints.py
  • surfsense_local/backend/modules/llm/subscriptions/chatgpt/flows.py
  • surfsense_local/backend/modules/llm/subscriptions/chatgpt/host_id.py
  • surfsense_local/backend/modules/llm/subscriptions/chatgpt/id_token.py
  • surfsense_local/backend/modules/llm/subscriptions/chatgpt/loopback.py
  • surfsense_local/backend/modules/llm/subscriptions/chatgpt/pkce.py
  • surfsense_local/backend/modules/llm/subscriptions/chatgpt/plan_models.py
  • surfsense_local/backend/modules/llm/subscriptions/chatgpt/router.py
  • surfsense_local/backend/modules/llm/subscriptions/chatgpt/schemas.py
  • surfsense_local/backend/modules/llm/subscriptions/chatgpt/token_endpoint.py
  • surfsense_local/backend/modules/llm/subscriptions/chatgpt/token_set.py
  • surfsense_local/backend/modules/llm/subscriptions/chatgpt/tokens.py
  • surfsense_local/backend/modules/llm/voices/__init__.py
  • surfsense_local/backend/modules/llm/voices/roster.py
  • surfsense_local/backend/modules/llm/voices/router.py
  • surfsense_local/backend/modules/llm/voices/saved.py
  • surfsense_local/backend/modules/migration/router.py
  • surfsense_local/backend/modules/migration/service.py
  • surfsense_local/backend/modules/plugins/__init__.py
  • surfsense_local/backend/modules/plugins/cancel_run.py
  • surfsense_local/backend/modules/plugins/interrupted_runs.py
  • surfsense_local/backend/modules/plugins/models.py
  • surfsense_local/backend/modules/plugins/plugin_interpreter.py
  • surfsense_local/backend/modules/plugins/runner/__init__.py
  • surfsense_local/backend/modules/plugins/runner/declared_timeout.py
  • surfsense_local/backend/modules/plugins/runner/job.py
  • surfsense_local/backend/modules/plugins/runner/log_tail.py
  • surfsense_local/backend/modules/plugins/runner/plugin_environment.py
  • surfsense_local/backend/modules/plugins/runner/plugin_process.py
  • surfsense_local/backend/modules/plugins/runner/stop_process_tree.py
  • surfsense_local/backend/modules/plugins/stop_workspace_runs.py
  • surfsense_local/backend/modules/plugins/tasks.py
  • surfsense_local/backend/modules/resource_usage/__init__.py
  • surfsense_local/backend/modules/resource_usage/app_tree.py
  • surfsense_local/backend/modules/resource_usage/dependencies.py
  • surfsense_local/backend/modules/resource_usage/engines.py
  • surfsense_local/backend/modules/resource_usage/gpu/__init__.py
  • surfsense_local/backend/modules/resource_usage/gpu/carve_out.py
  • surfsense_local/backend/modules/resource_usage/gpu/darwin/__init__.py
  • surfsense_local/backend/modules/resource_usage/gpu/darwin/ioreg.py
  • surfsense_local/backend/modules/resource_usage/gpu/darwin/reader.py
  • surfsense_local/backend/modules/resource_usage/gpu/linux/__init__.py
  • surfsense_local/backend/modules/resource_usage/gpu/linux/amdgpu.py
  • surfsense_local/backend/modules/resource_usage/gpu/linux/nvml.py
  • surfsense_local/backend/modules/resource_usage/gpu/linux/reader.py
  • surfsense_local/backend/modules/resource_usage/gpu/reading.py
  • surfsense_local/backend/modules/resource_usage/gpu/windows/__init__.py
  • surfsense_local/backend/modules/resource_usage/gpu/windows/adapters.py
  • surfsense_local/backend/modules/resource_usage/gpu/windows/counters.py
  • surfsense_local/backend/modules/resource_usage/gpu/windows/pdh.py
  • surfsense_local/backend/modules/resource_usage/gpu/windows/reader.py
  • surfsense_local/backend/modules/resource_usage/parent_map.py
  • surfsense_local/backend/modules/resource_usage/router.py
  • surfsense_local/backend/modules/resource_usage/sampler.py
  • surfsense_local/backend/modules/resource_usage/schemas.py
  • surfsense_local/backend/modules/resource_usage/snapshot.py
  • surfsense_local/backend/modules/workspaces/router.py
  • surfsense_local/backend/pyproject.toml
  • surfsense_local/backend/scripts/fetch_embedding_model.py
  • surfsense_local/backend/scripts/local_manifest/entries.py
  • surfsense_local/backend/scripts/local_manifest/onnxruntime/__init__.py
  • surfsense_local/backend/scripts/local_manifest/onnxruntime/assemble.py
  • surfsense_local/backend/scripts/local_manifest/onnxruntime/entry.py
  • surfsense_local/backend/scripts/local_manifest/onnxruntime/refresh.py
  • surfsense_local/backend/scripts/refresh_local_manifest.py
  • surfsense_local/backend/scripts/remote_manifest/endpoints.py
  • surfsense_local/backend/scripts/retrieval_eval/embedder.py
  • surfsense_local/backend/scripts/retrieval_eval/fingerprint.py
  • surfsense_local/backend/scripts/retrieval_eval/run.py
  • surfsense_local/backend/scripts/run_retrieval_eval.py
  • surfsense_local/backend/shared/cancellation.py
  • surfsense_local/backend/shared/config.py
  • surfsense_local/backend/shared/db.py
  • surfsense_local/backend/shared/migrations.py
  • surfsense_local/backend/shared/queue.py
  • surfsense_local/backend/shared/search.py
  • surfsense_local/backend/shared/secrets.py
  • surfsense_local/backend/tests/conftest.py
  • surfsense_local/backend/tests/fixtures/models_dev_sample.json
  • surfsense_local/backend/tests/integration/agent/conftest.py
  • surfsense_local/backend/tests/integration/agent/opencode_harness.py
  • surfsense_local/backend/tests/integration/agent/test_agent_threads.py
  • surfsense_local/backend/tests/integration/agent/test_engine_choice.py
  • surfsense_local/backend/tests/integration/agent/test_model_endpoint.py
  • surfsense_local/backend/tests/integration/agent/test_opencode_client.py
  • surfsense_local/backend/tests/integration/agent/test_opencode_runtime.py
  • surfsense_local/backend/tests/integration/agent/test_routes_without_opencode.py
  • surfsense_local/backend/tests/integration/agent/test_sources_folder.py
  • surfsense_local/backend/tests/integration/agent/test_tool_endpoint.py
  • surfsense_local/backend/tests/integration/artifacts/test_artifact_files.py
  • surfsense_local/backend/tests/integration/artifacts/test_flashcard_state_routes.py
  • surfsense_local/backend/tests/integration/artifacts/test_quiz_state_routes.py
  • surfsense_local/backend/tests/integration/artifacts/test_routes.py
  • surfsense_local/backend/tests/integration/chat/conftest.py
  • surfsense_local/backend/tests/integration/chat/test_chat.py
  • surfsense_local/backend/tests/integration/chat/test_images.py
  • surfsense_local/backend/tests/integration/chat/test_source_images.py
  • surfsense_local/backend/tests/integration/chunks/test_search_index.py
  • surfsense_local/backend/tests/integration/conftest.py
  • surfsense_local/backend/tests/integration/documents/test_original_lookup.py
  • surfsense_local/backend/tests/integration/documents/test_routes.py
  • surfsense_local/backend/tests/integration/documents/test_upload.py
  • surfsense_local/backend/tests/integration/embedding/test_encoder.py
  • surfsense_local/backend/tests/integration/embedding/test_lock.py
  • surfsense_local/backend/tests/integration/embedding/test_not_chosen.py
  • surfsense_local/backend/tests/integration/events/test_events.py
  • surfsense_local/backend/tests/integration/license/test_license.py
  • surfsense_local/backend/tests/integration/llm/chatgpt/conftest.py
  • surfsense_local/backend/tests/integration/llm/chatgpt/fake_openai.py
  • surfsense_local/backend/tests/integration/llm/chatgpt/test_sign_in_routes.py
  • surfsense_local/backend/tests/integration/llm/chatgpt/test_token_refresh.py
  • surfsense_local/backend/tests/integration/llm/conftest.py
  • surfsense_local/backend/tests/integration/llm/test_catalog_routes.py
  • surfsense_local/backend/tests/integration/llm/test_connections.py
  • surfsense_local/backend/tests/integration/llm/test_egress.py
  • surfsense_local/backend/tests/integration/llm/test_embedding_catalog_routes.py
  • surfsense_local/backend/tests/integration/llm/test_embedding_choice_routes.py
  • surfsense_local/backend/tests/integration/llm/test_embedding_huggingface_routes.py
  • surfsense_local/backend/tests/integration/llm/test_local_image_state.py
  • surfsense_local/backend/tests/integration/llm/test_reads_images.py
  • surfsense_local/backend/tests/integration/llm/test_routes.py
  • surfsense_local/backend/tests/integration/llm/test_voices.py
  • surfsense_local/backend/tests/integration/migration/test_import.py
  • surfsense_local/backend/tests/integration/plugins/conftest.py
  • surfsense_local/backend/tests/integration/plugins/test_plugins_worker.py
  • surfsense_local/backend/tests/integration/plugins/test_run_plugin.py
  • surfsense_local/backend/tests/integration/plugins/test_run_the_example.py
  • surfsense_local/backend/tests/integration/plugins/test_stop_a_run.py
  • surfsense_local/backend/tests/integration/resource_usage/__init__.py
  • surfsense_local/backend/tests/integration/resource_usage/test_routes.py
  • surfsense_local/backend/tests/integration/test_migration_0022.py
  • surfsense_local/backend/tests/integration/test_migration_0023.py
  • surfsense_local/backend/tests/integration/test_migrations.py
  • surfsense_local/backend/tests/integration/worker/conftest.py
  • surfsense_local/backend/tests/integration/worker/test_consumer.py
  • surfsense_local/backend/tests/integration/worker/test_edits_during_ingest.py
  • surfsense_local/backend/tests/integration/worker/test_ingest.py
  • surfsense_local/backend/tests/integration/worker/test_interrupted_documents.py
  • surfsense_local/backend/tests/integration/worker/test_parsing.py
  • surfsense_local/backend/tests/integration/worker/test_studio.py
  • surfsense_local/backend/tests/integration/worker/test_studio_grounding.py
  • surfsense_local/backend/tests/packaging/test_frozen_boot.py
  • surfsense_local/backend/tests/unit/agent/test_opencode_config.py
  • surfsense_local/backend/tests/unit/chat/test_budget.py
  • surfsense_local/backend/tests/unit/chat/test_errors.py
  • surfsense_local/backend/tests/unit/chat/test_history.py
  • surfsense_local/backend/tests/unit/chat/test_image_intake.py
  • surfsense_local/backend/tests/unit/chat/test_prompt.py
  • surfsense_local/backend/tests/unit/documents/test_original_file.py
  • surfsense_local/backend/tests/unit/embedding/huggingface/test_pick.py
  • surfsense_local/backend/tests/unit/embedding/huggingface/test_spec_from_repo.py
  • surfsense_local/backend/tests/unit/embedding/test_pooling.py
  • surfsense_local/backend/tests/unit/embedding/test_search_check.py
  • surfsense_local/backend/tests/unit/llm/catalog/local/engines/llamacpp/models_folder/test_preset.py
  • surfsense_local/backend/tests/unit/llm/catalog/local/engines/llamacpp/rows/test_catalog.py
  • surfsense_local/backend/tests/unit/llm/catalog/local/engines/llamacpp/test_search.py
  • surfsense_local/backend/tests/unit/llm/catalog/local/engines/llamacpp/test_support.py
  • surfsense_local/backend/tests/unit/llm/catalog/local/engines/sdcpp/rows/test_catalog.py
  • surfsense_local/backend/tests/unit/llm/catalog/local/test_classifier.py
  • surfsense_local/backend/tests/unit/llm/catalog/local/test_dependencies.py
  • surfsense_local/backend/tests/unit/llm/catalog/local/test_install_steps.py
  • surfsense_local/backend/tests/unit/llm/catalog/local/test_llamacpp_sampling.py
  • surfsense_local/backend/tests/unit/llm/catalog/local/test_manifest.py
  • surfsense_local/backend/tests/unit/llm/catalog/local/test_onnxruntime_spec.py
  • surfsense_local/backend/tests/unit/llm/catalog/local/test_service.py
  • surfsense_local/backend/tests/unit/llm/catalog/remote/test_catalog.py
  • surfsense_local/backend/tests/unit/llm/catalog/remote/test_classifier.py
  • surfsense_local/backend/tests/unit/llm/catalog/remote/test_lookup.py
  • surfsense_local/backend/tests/unit/llm/catalog/remote/test_reads_images.py
  • surfsense_local/backend/tests/unit/llm/catalog/remote/test_support.py
  • surfsense_local/backend/tests/unit/llm/profile/test_classify.py
  • surfsense_local/backend/tests/unit/llm/profile/test_fingerprint.py
  • surfsense_local/backend/tests/unit/llm/providers/audiocpp/test_speech.py
  • surfsense_local/backend/tests/unit/llm/providers/llamacpp/fake_router.py
  • surfsense_local/backend/tests/unit/llm/providers/llamacpp/test_capabilities.py
  • surfsense_local/backend/tests/unit/llm/providers/llamacpp/test_provider.py
  • surfsense_local/backend/tests/unit/llm/providers/llamacpp/test_publisher_sampling.py
  • surfsense_local/backend/tests/unit/llm/providers/openai_compatible/__init__.py
  • surfsense_local/backend/tests/unit/llm/providers/openai_compatible/test_speech.py
  • surfsense_local/backend/tests/unit/llm/providers/openai_compatible/test_voice_list.py
  • surfsense_local/backend/tests/unit/llm/providers/test_image_parts.py
  • surfsense_local/backend/tests/unit/llm/providers/test_openai_responses.py
  • surfsense_local/backend/tests/unit/llm/providers/test_prompt_progress.py
  • surfsense_local/backend/tests/unit/llm/providers/test_stream_deadline.py
  • surfsense_local/backend/tests/unit/llm/test_key_headers.py
  • surfsense_local/backend/tests/unit/llm/test_openai_compatible.py
  • surfsense_local/backend/tests/unit/llm/test_selectable.py
  • surfsense_local/backend/tests/unit/llm/test_system_role.py
  • surfsense_local/backend/tests/unit/resource_usage/__init__.py
  • surfsense_local/backend/tests/unit/resource_usage/test_app_tree.py
  • surfsense_local/backend/tests/unit/resource_usage/test_darwin_ioreg.py
  • surfsense_local/backend/tests/unit/resource_usage/test_linux_amdgpu.py
  • surfsense_local/backend/tests/unit/resource_usage/test_parent_map.py
  • surfsense_local/backend/tests/unit/resource_usage/test_snapshot.py
  • surfsense_local/backend/tests/unit/resource_usage/test_windows_counters.py
  • surfsense_local/backend/tests/unit/scripts/test_local_manifest.py
  • surfsense_local/backend/tests/unit/scripts/test_local_manifest_onnxruntime.py
  • surfsense_local/backend/tests/unit/scripts/test_remote_manifest.py
  • surfsense_local/backend/tests/unit/shared/test_config.py
  • surfsense_local/backend/tests/unit/shared/test_cors.py
  • surfsense_local/backend/tests/unit/worker/test_consumer.py
  • surfsense_local/backend/tests/unit/worker/test_studio_content.py
  • surfsense_local/backend/tests/unit/worker/test_studio_generate.py
  • surfsense_local/backend/tests/unit/worker/test_studio_office.py
  • surfsense_local/backend/worker.py
  • surfsense_local/backend/worker/consumer.py
  • surfsense_local/backend/worker/ingestion/chunking.py
  • surfsense_local/backend/worker/ingestion/embedding.py
  • surfsense_local/backend/worker/ingestion/image_page.py
  • surfsense_local/backend/worker/ingestion/indexing.py
  • surfsense_local/backend/worker/ingestion/parsing.py
  • surfsense_local/backend/worker/ingestion/pipeline.py
  • surfsense_local/backend/worker/interrupted_documents.py
  • surfsense_local/backend/worker/jobs.py
  • surfsense_local/backend/worker/studio/content/flashcards/pipeline.py
  • surfsense_local/backend/worker/studio/content/flashcards/schema.py
  • surfsense_local/backend/worker/studio/content/quiz/pipeline.py
  • surfsense_local/backend/worker/studio/content/quiz/schema.py
  • surfsense_local/backend/worker/studio/job.py
  • surfsense_local/backend/worker/studio/office/pipeline.py
  • surfsense_local/backend/worker/studio/shared/gather.py
  • surfsense_local/backend/worker/studio/shared/generate.py
  • surfsense_local/backend/worker/studio/shared/persist.py
  • surfsense_local/backend/worker/wait_for_schema.py
  • surfsense_local/electron/.gitignore
  • surfsense_local/electron/electron-builder.yml
  • surfsense_local/electron/package.json
  • surfsense_local/electron/scripts/deb-control.test.mjs
  • surfsense_local/electron/scripts/opencode/enabled.mjs
  • surfsense_local/electron/scripts/opencode/enabled.test.mjs
  • surfsense_local/electron/scripts/opencode/pins.mjs
  • surfsense_local/electron/scripts/opencode/pins.test.mjs
  • surfsense_local/electron/scripts/opencode/stage.mjs
  • surfsense_local/electron/src/main/api-url/announce-api-url.test.ts
  • surfsense_local/electron/src/main/api-url/announce-api-url.ts
  • surfsense_local/electron/src/main/document-files.test.ts
  • surfsense_local/electron/src/main/document-files.ts
  • surfsense_local/electron/src/main/external-url.test.ts
  • surfsense_local/electron/src/main/external-url.ts
  • surfsense_local/electron/src/main/index.ts
  • surfsense_local/electron/src/main/sidecars/opencode-home.ts
  • surfsense_local/electron/src/main/sidecars/opencode-leftovers.test.ts
  • surfsense_local/electron/src/main/sidecars/opencode-leftovers.ts
  • surfsense_local/electron/src/main/sidecars/opencode.test.ts
  • surfsense_local/electron/src/main/sidecars/opencode.ts
  • surfsense_local/electron/src/main/sidecars/python.test.ts
  • surfsense_local/electron/src/main/sidecars/python.ts
  • surfsense_local/electron/src/main/sidecars/supervisor.test.ts
  • surfsense_local/electron/src/main/sidecars/supervisor.ts
  • surfsense_local/electron/src/main/sidecars/types.ts
  • surfsense_local/electron/src/main/spellcheck.test.ts
  • surfsense_local/electron/src/main/spellcheck.ts
  • surfsense_local/electron/src/preload/index.ts
  • surfsense_local/frontend/eslint.config.js
  • surfsense_local/frontend/package.json
  • surfsense_local/frontend/pnpm-workspace.yaml
  • surfsense_local/frontend/src/app/file-drop-guard.test.ts
  • surfsense_local/frontend/src/app/file-drop-guard.ts
  • surfsense_local/frontend/src/components/ui/icons.tsx
  • surfsense_local/frontend/src/components/ui/switch.tsx
  • surfsense_local/frontend/src/components/ui/tooltip.test.tsx
  • surfsense_local/frontend/src/components/ui/tooltip.tsx
  • surfsense_local/frontend/src/features/about/about-settings.test.tsx
  • surfsense_local/frontend/src/features/about/about-settings.tsx
  • surfsense_local/frontend/src/features/agent/agent-steps.tsx
  • surfsense_local/frontend/src/features/agent/agent-thread.test.tsx
  • surfsense_local/frontend/src/features/agent/api.ts
  • surfsense_local/frontend/src/features/agent/approval-dialog.tsx
  • surfsense_local/frontend/src/features/agent/step-label.tsx
  • surfsense_local/frontend/src/features/chat/api.ts
  • surfsense_local/frontend/src/features/chat/attached-image.tsx
  • surfsense_local/frontend/src/features/chat/chat-composer.test.tsx
  • surfsense_local/frontend/src/features/chat/chat-composer.tsx
  • surfsense_local/frontend/src/features/chat/chat-error-notice.tsx
  • surfsense_local/frontend/src/features/chat/chat-error-text.test.ts
  • surfsense_local/frontend/src/features/chat/chat-error-text.ts
  • surfsense_local/frontend/src/features/chat/chat-images.test.tsx
  • surfsense_local/frontend/src/features/chat/chats-dialog.test.tsx
  • surfsense_local/frontend/src/features/chat/composer-add-menu.tsx
  • surfsense_local/frontend/src/features/chat/image-attachments.ts
  • surfsense_local/frontend/src/features/chat/menu-item-hint.tsx
  • surfsense_local/frontend/src/features/chat/message.tsx
  • surfsense_local/frontend/src/features/chat/model-issue-notice.tsx
  • surfsense_local/frontend/src/features/chat/model-picker.test.tsx
  • surfsense_local/frontend/src/features/chat/question-limit.ts
  • surfsense_local/frontend/src/features/chat/reply-thinking.test.tsx
  • surfsense_local/frontend/src/features/chat/reply-thinking.tsx
  • surfsense_local/frontend/src/features/chat/sse.ts
  • surfsense_local/frontend/src/features/chat/thinking-menu-item.tsx
  • surfsense_local/frontend/src/features/chat/thinking-preference.ts
  • surfsense_local/frontend/src/features/chat/thread-panel.tsx
  • surfsense_local/frontend/src/features/chat/use-chat-runtime.ts
  • surfsense_local/frontend/src/features/dashboard/chrome-prefs.test.ts
  • surfsense_local/frontend/src/features/dashboard/chrome-prefs.ts
  • surfsense_local/frontend/src/features/dashboard/dashboard-page.test.tsx
  • surfsense_local/frontend/src/features/dashboard/dashboard-page.tsx
  • surfsense_local/frontend/src/features/dashboard/left-sidebar.test.tsx
  • surfsense_local/frontend/src/features/dashboard/left-sidebar.tsx
  • surfsense_local/frontend/src/features/embedding/api.ts
  • surfsense_local/frontend/src/features/embedding/embedding-settings.tsx
  • surfsense_local/frontend/src/features/embedding/huggingface-search.ts
  • surfsense_local/frontend/src/features/embedding/use-embedding-index.ts
  • surfsense_local/frontend/src/features/feedback/error-toast.ts
  • surfsense_local/frontend/src/features/feedback/help-menu-report.ts
  • surfsense_local/frontend/src/features/feedback/issue-report-dialog.test.tsx
  • surfsense_local/frontend/src/features/feedback/issue-report-dialog.tsx
  • surfsense_local/frontend/src/features/feedback/issue-report-form.tsx
  • surfsense_local/frontend/src/features/feedback/issue-report-state.ts
  • surfsense_local/frontend/src/features/feedback/report-issue-settings.test.tsx
  • surfsense_local/frontend/src/features/feedback/report-issue-settings.tsx
  • surfsense_local/frontend/src/features/feedback/sidecar-crash-reporter.test.tsx
  • surfsense_local/frontend/src/features/feedback/sidecar-crash-reporter.tsx
  • surfsense_local/frontend/src/features/file-viewers/pdf-viewer.tsx
  • surfsense_local/frontend/src/features/file-viewers/registry.test.ts
  • surfsense_local/frontend/src/features/file-viewers/registry.tsx
  • surfsense_local/frontend/src/features/license/license-error-text.ts
  • surfsense_local/frontend/src/features/license/license-links.ts
  • surfsense_local/frontend/src/features/license/license-settings.test.tsx
  • surfsense_local/frontend/src/features/license/license-settings.tsx
  • surfsense_local/frontend/src/features/license/trial-button.tsx
  • surfsense_local/frontend/src/features/models/add-model/add-model-options.tsx
  • surfsense_local/frontend/src/features/models/add-model/server-card.tsx
  • surfsense_local/frontend/src/features/models/local/audio/download-audio-models.tsx
  • surfsense_local/frontend/src/features/models/local/chat/api.ts
  • surfsense_local/frontend/src/features/models/local/chat/build-action.tsx
  • surfsense_local/frontend/src/features/models/local/chat/download-chat-models.test.tsx
  • surfsense_local/frontend/src/features/models/local/chat/download-chat-models.tsx
  • surfsense_local/frontend/src/features/models/local/chat/model-card.tsx
  • surfsense_local/frontend/src/features/models/local/chat/model-search.tsx
  • surfsense_local/frontend/src/features/models/local/chat/search-source.ts
  • surfsense_local/frontend/src/features/models/local/chat/use-local-runtime.ts
  • surfsense_local/frontend/src/features/models/local/image/api.ts
  • surfsense_local/frontend/src/features/models/local/image/download-image-models.tsx
  • surfsense_local/frontend/src/features/models/local/image/use-local-image-state.ts
  • surfsense_local/frontend/src/features/models/local/installs/use-install.ts
  • surfsense_local/frontend/src/features/models/remote/connections/api.ts
  • surfsense_local/frontend/src/features/models/remote/connections/chatgpt/api.ts
  • surfsense_local/frontend/src/features/models/remote/connections/chatgpt/chatgpt-sign-in.test.tsx
  • surfsense_local/frontend/src/features/models/remote/connections/chatgpt/chatgpt-sign-in.tsx
  • surfsense_local/frontend/src/features/models/remote/connections/chatgpt/use-sign-in.ts
  • surfsense_local/frontend/src/features/models/remote/connections/connection-dialog.tsx
  • surfsense_local/frontend/src/features/models/remote/connections/connection-form.test.tsx
  • surfsense_local/frontend/src/features/models/remote/connections/connection-form.tsx
  • surfsense_local/frontend/src/features/models/remote/connections/use-connections.ts
  • surfsense_local/frontend/src/features/models/remote/models/api.ts
  • surfsense_local/frontend/src/features/models/remote/models/server-model-picker.test.tsx
  • surfsense_local/frontend/src/features/models/remote/models/server-model-picker.tsx
  • surfsense_local/frontend/src/features/models/remote/models/server-models.tsx
  • surfsense_local/frontend/src/features/models/remote/models/try-model-dialog.tsx
  • surfsense_local/frontend/src/features/models/remote/servers-can-serve.ts
  • surfsense_local/frontend/src/features/models/remote/voices/api.ts
  • surfsense_local/frontend/src/features/models/remote/voices/server-voices.test.tsx
  • surfsense_local/frontend/src/features/models/remote/voices/server-voices.tsx
  • surfsense_local/frontend/src/features/models/remote/voices/use-server-voices.ts
  • surfsense_local/frontend/src/features/models/selection/api.ts
  • surfsense_local/frontend/src/features/models/your-models/local-models-group.tsx
  • surfsense_local/frontend/src/features/models/your-models/model-row.tsx
  • surfsense_local/frontend/src/features/models/your-models/use-chat-models.ts
  • surfsense_local/frontend/src/features/models/your-models/use-image-models.ts
  • surfsense_local/frontend/src/features/models/your-models/your-model-row.ts
  • surfsense_local/frontend/src/features/onboarding/api.ts
  • surfsense_local/frontend/src/features/onboarding/model-step/kinds/slot.ts
  • surfsense_local/frontend/src/features/onboarding/model-step/kinds/step-deletes.ts
  • surfsense_local/frontend/src/features/onboarding/model-step/kinds/step-kind.ts
  • surfsense_local/frontend/src/features/onboarding/model-step/kinds/step-models-table.ts
  • surfsense_local/frontend/src/features/onboarding/model-step/kinds/step-models.ts
  • surfsense_local/frontend/src/features/onboarding/model-step/kinds/use-embedding-step.ts
  • surfsense_local/frontend/src/features/onboarding/model-step/kinds/use-slot-models.ts
  • surfsense_local/frontend/src/features/onboarding/model-step/kinds/use-slot-step.ts
  • surfsense_local/frontend/src/features/onboarding/model-step/local/hugging-face-search.tsx
  • surfsense_local/frontend/src/features/onboarding/model-step/local/local-choices.test.ts
  • surfsense_local/frontend/src/features/onboarding/model-step/local/local-choices.ts
  • surfsense_local/frontend/src/features/onboarding/model-step/local/local-model-list.test.tsx
  • surfsense_local/frontend/src/features/onboarding/model-step/local/local-model-list.tsx
  • surfsense_local/frontend/src/features/onboarding/model-step/model-ready.tsx
  • surfsense_local/frontend/src/features/onboarding/model-step/model-step.tsx
  • surfsense_local/frontend/src/features/onboarding/model-step/server/server-option.tsx
  • surfsense_local/frontend/src/features/onboarding/model-step/server/server-path.tsx
  • surfsense_local/frontend/src/features/onboarding/model-step/step-copy.ts
  • surfsense_local/frontend/src/features/onboarding/onboarding-page.test.tsx
  • surfsense_local/frontend/src/features/onboarding/onboarding-page.tsx
  • surfsense_local/frontend/src/features/onboarding/use-finish-onboarding.ts
  • surfsense_local/frontend/src/features/resources/api.ts
  • surfsense_local/frontend/src/features/resources/engine-breakdown.tsx
  • surfsense_local/frontend/src/features/resources/format-usage.ts
  • surfsense_local/frontend/src/features/resources/graphics-cards.tsx
  • surfsense_local/frontend/src/features/resources/live-resource-usage.test.tsx
  • surfsense_local/frontend/src/features/resources/live-resource-usage.tsx
  • surfsense_local/frontend/src/features/resources/resource-settings.tsx
  • surfsense_local/frontend/src/features/resources/resource-usage-panel.test.tsx
  • surfsense_local/frontend/src/features/resources/resource-usage-panel.tsx
  • surfsense_local/frontend/src/features/resources/usage-meter.tsx
  • surfsense_local/frontend/src/features/resources/usage-rows.ts
  • surfsense_local/frontend/src/features/resources/usage-section.tsx
  • surfsense_local/frontend/src/features/resources/use-resource-usage.ts
  • surfsense_local/frontend/src/features/settings/models/audio-models-settings.test.tsx
  • surfsense_local/frontend/src/features/settings/models/chat-models-settings.test.tsx
  • surfsense_local/frontend/src/features/settings/models/image-models-settings.test.tsx
  • surfsense_local/frontend/src/features/settings/models/model-slot-settings.tsx
  • surfsense_local/frontend/src/features/settings/models/video-models-settings.test.tsx
  • surfsense_local/frontend/src/features/settings/settings-dialog.test.tsx
  • surfsense_local/frontend/src/features/settings/settings-dialog.tsx
  • surfsense_local/frontend/src/features/settings/settings-section.tsx
  • surfsense_local/frontend/src/features/source-preview/source-preview-panel.tsx
  • surfsense_local/frontend/src/features/sources/api.ts
  • surfsense_local/frontend/src/features/sources/note-editor-dialog.tsx
  • surfsense_local/frontend/src/features/sources/rename-source-dialog.tsx
  • surfsense_local/frontend/src/features/sources/source-notes.test.tsx
  • surfsense_local/frontend/src/features/sources/source-title.ts
  • surfsense_local/frontend/src/features/sources/source-upload.test.tsx
  • surfsense_local/frontend/src/features/sources/sources-panel.tsx
  • surfsense_local/frontend/src/features/sources/sources-stay-fresh.test.tsx
  • surfsense_local/frontend/src/features/sources/use-file-drop.ts
  • surfsense_local/frontend/src/features/sources/use-sources.ts
  • surfsense_local/frontend/src/features/studio/api.ts
  • surfsense_local/frontend/src/features/studio/artifact-panel.test.tsx
  • surfsense_local/frontend/src/features/studio/artifact-panel.tsx
  • surfsense_local/frontend/src/features/studio/podcast-brief-form.test.tsx
  • surfsense_local/frontend/src/features/studio/podcast-brief-form.tsx
  • surfsense_local/frontend/src/features/studio/studio-panel.test.tsx
  • surfsense_local/frontend/src/features/studio/studio-panel.tsx
  • surfsense_local/frontend/src/features/studio/use-podcast-brief.ts
  • surfsense_local/frontend/src/features/studio/use-studio.test.ts
  • surfsense_local/frontend/src/features/studio/use-studio.ts
  • surfsense_local/frontend/src/features/studio/viewers/pdf-viewer.tsx
  • surfsense_local/frontend/src/features/workspaces/api.ts
  • surfsense_local/frontend/src/features/workspaces/read-sse.ts
  • surfsense_local/frontend/src/features/workspaces/use-workspace-changes.ts
  • surfsense_local/frontend/src/features/workspaces/workspace-changes.test.ts
  • surfsense_local/frontend/src/features/workspaces/workspace-changes.ts
  • surfsense_local/frontend/src/index.css
  • surfsense_local/frontend/src/lib/api.test.ts
  • surfsense_local/frontend/src/lib/api.ts
  • surfsense_local/frontend/src/main.tsx
  • surfsense_local/frontend/src/vite-env.d.ts
  • surfsense_local/frontend/translations/de.json
  • surfsense_local/frontend/translations/en.json
  • surfsense_local/frontend/translations/es.json
  • surfsense_local/frontend/translations/fr.json
  • surfsense_local/frontend/translations/hi.json
  • surfsense_local/frontend/translations/ja.json
  • surfsense_local/frontend/translations/ko.json
  • surfsense_local/frontend/translations/pt-BR.json
  • surfsense_local/frontend/translations/ru.json
  • surfsense_local/frontend/translations/zh-CN.json
  • surfsense_local/frontend/vite.config.ts
  • surfsense_local/scripts/bump-version.sh
  • surfsense_web/Dockerfile
  • surfsense_web/app/(home)/downloads/page.tsx
  • surfsense_web/app/(home)/home.css
  • surfsense_web/app/(home)/layout.tsx
  • surfsense_web/app/(home)/license/license-forms.tsx
  • surfsense_web/app/(home)/page.tsx
  • surfsense_web/app/(home)/plugins/page.tsx
  • surfsense_web/app/(home)/private-ai-for-business/page.tsx
  • surfsense_web/app/(home)/sunset/page.tsx
  • surfsense_web/app/docs/layout.tsx
  • surfsense_web/app/layout.tsx
  • surfsense_web/components/assistant-ui/composer-add-menu-drawer.tsx
  • surfsense_web/components/assistant-ui/thread.tsx
  • surfsense_web/components/homepage/home/home-features-tabs.tsx
  • surfsense_web/components/homepage/home/home-sections.tsx
  • surfsense_web/components/homepage/home/home-smooth-scroll.tsx
  • surfsense_web/components/homepage/icons/amazon-logo.tsx
  • surfsense_web/components/homepage/icons/discord-logo.tsx
  • surfsense_web/components/homepage/icons/github-logo.tsx
  • surfsense_web/components/homepage/icons/google-maps-logo.tsx
  • surfsense_web/components/homepage/icons/google-search-logo.tsx
  • surfsense_web/components/homepage/icons/indeed-logo.tsx
  • surfsense_web/components/homepage/icons/instagram-logo.tsx
  • surfsense_web/components/homepage/icons/linkedin-logo.tsx
  • surfsense_web/components/homepage/icons/reddit-logo.tsx
  • surfsense_web/components/homepage/icons/tiktok-logo.tsx
  • surfsense_web/components/homepage/icons/walmart-logo.tsx
  • surfsense_web/components/homepage/icons/web-crawl-logo.tsx
  • surfsense_web/components/homepage/icons/x-logo.tsx
  • surfsense_web/components/homepage/icons/youtube-logo.tsx
  • surfsense_web/components/homepage/top-announcement-bar.tsx
  • surfsense_web/components/json-view.tsx
  • surfsense_web/components/pricing/pricing-sections.tsx
  • surfsense_web/components/settings/git-remote-settings.tsx
  • surfsense_web/components/shared/pdf-viewer.tsx
  • surfsense_web/components/site/site-footer.tsx
  • surfsense_web/components/site/site-nav.tsx
  • surfsense_web/components/site/site-sans-font.ts
  • surfsense_web/components/site/site-socials.tsx
  • surfsense_web/components/site/site-stars.tsx
  • surfsense_web/lib/app-release.ts
  • surfsense_web/lib/documents/git-synced-folders.ts
  • surfsense_web/lib/sunset.ts
  • surfsense_web/package.json
  • surfsense_web/pnpm-workspace.yaml
  • surfsense_web/proxy.ts
  • surfsense_web/public/homepage/comments-audio.webp
  • surfsense_web/tests/unit/sunset-redirect.test.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

@CREDO23
CREDO23 merged commit 7fb479c into main Oct 4, 2026
39 of 45 checks passed

This branch was successfully deployed

1 active deployment
Preview — 0847e12f Deployed Oct 3, 2026 by vercel[bot]
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.