github MODSetter/SurfSense v2.1.0

3 hours ago

What's Changed

  • feat(web,local): add wordmark, Windows overlay scrollbars, and marketing site polish by @AnishSarkar22 in #1935
  • fix(local): delete an artifact's files when it is deleted as a document by @Cedric921 in #1934
  • fix(indexing): keep a table's last row when it ends the document by @MohammadHijjawi97 in #1936
  • fix(export): number nested BlockNote lists on their own by @MohammadHijjawi97 in #1937
  • feat(local): connect to Anthropic directly with just an API key by @Cedric921 in #1933
  • docs(architecture): delete Known gaps that v2.0.3 closed by @MODSetter in #2014
  • docs(documents): record that deleting an artifact document removes its files by @MODSetter in #2015
  • fix(local): don't offer Retry for model_cannot_run / context_too_long chat errors by @biggdawg320 in #2016
  • docs(local): propose sending images to vision models in chat by @vintcessun in #2031
  • [Docs|Plugins] Plan the plugin lifecycle by @CREDO23 in #2043
  • [Docs|Plugins] Release plugins with the app by @CREDO23 in #2048
  • fix(license): answer 503 before Keygen when SMTP config is invalid by @mehul2409 in #2047
  • feat(local): read one document with its body by @ybai08 in #2045
  • fix(local): open the issue dialog from About's Report an issue by @MannXo in #2026
  • fix(local): withdraw a host's egress grant when its last connection is deleted by @8rulerstar in #2027
  • fix(release): refuse to publish a prerelease desktop version by @MannXo in #2025
  • fix(local): read a stored license issued ahead of the clock as clock_untrusted by @ybai08 in #2019
  • fix(local-catalog): log why a broken manifest falls back to empty by @GhostCoder6969 in #2017
  • fix(models): explain searched build fit failures by @fukalous in #2042
  • fix(studio): trust the server format catalog by @fukalous in #2038
  • fix(local): stop a cancelled podcast or office job at the next boundary by @vintcessun in #2030
  • feat(local): pass a JSON schema from run_model, starting with the quiz by @vintcessun in #2032
  • fix(studio): translate unavailable reasons as sentences by @fukalous in #2036
  • fix(local): discard a chat turn that ends with no answer text by @Cedric921 in #2037
  • fix(chat): send no citation rules when retrieval finds nothing by @MONISMALIK1 in #2028
  • fix(local): read the size in a Featherless-shaped listing row's id by @jamalkamaladdin in #2029
  • fix(sunset): gate the web redirect on DEPLOYMENT_MODE by @MannXo in #2023
  • fix(sunset): pause hosted recurring user work by @sb123sb123 in #2020
  • ci(web): run the surfsense_web unit tests on pull requests by @MannXo in #2024
  • fix(sunset): include sunset_url in the 410 export-only body by @MannXo in #2022
  • test(sunset): cover hosted account purge guards by @fukalous in #2040
  • fix(local): inspect llama.cpp model size at selection by @fukalous in #2034
  • test(local): run the frontend tests in UTC by @ybai08 in #2050
  • fix(local): lint formatMessage values that are not written as a literal by @ybai08 in #2054
  • fix(ui): connect tooltip descriptions to screen readers with role and aria-describedby by @AdamMagued in #2018
  • fix(local): link license settings to the trial and pricing pages by @ybai08 in #2052
  • fix(local): keep a model the manifest cannot call out of the pickers and the selection by @ybai08 in #2059
  • fix(local): give a loopback connection's unknown model the compact prompt by @Cedric921 in #2051
  • fix(local): refuse a curated install that will not fit before any bytes move by @ybai08 in #2056
  • fix(local): record an install file by file, so a cut-off one is never called installed by @ybai08 in #2058
  • fix(local): say once on the chat model screen that the runtime is down by @ybai08 in #2057
  • feat(local): render the thinking trace as markdown by @ybai08 in #2049
  • test(local): cover a chat reply the client hangs up on by @Cedric921 in #2041
  • fix(local): cap a chat question at its share of the window by @ybai08 in #2053
  • feat(local): send images to vision chat models, keep upload filenames, drop sources into the panel by @AnishSarkar22 in #2060
  • [Plugins|Manifest] Validate manifest.json by @CREDO23 in #2069
  • [Plugins|Manifest] Accept the stamped version, explain name rules by @CREDO23 in #2070
  • [Plugins|SDK] Add the plugin SDK by @CREDO23 in #2073
  • [Plugins|CLI] Design the author commands by @CREDO23 in #2075
  • [Plugins|SDK] Test the SDK against the real app by @CREDO23 in #2076
  • [Plugins|CLI] Add the author commands by @CREDO23 in #2079
  • [Local|Sources] Reload Sources on document events by @CREDO23 in #2081
  • feat(local): voice podcasts with server audio models by @AnishSarkar22 in #2083
  • [Plugins|Runtime] Run a plugin in its own process by @CREDO23 in #2082
  • [Plugins|Runtime] Stop a run the plugin does not end by @CREDO23 in #2084
  • refactor(local): name the curated fit refusal in llama.cpp's check by @Cedric921 in #2071
  • feat(local): constrain the flashcards reply with a JSON schema by @vintcessun in #2074
  • feat(local): ground a large Studio selection on every document, by prompt where it has one by @vintcessun in #2078
  • fix(chat): preserve pre-stream error details by @fukalous in #2035
  • fix(chat): shield disconnect cleanup by @fukalous in #2062
  • fix(local-models): refuse gated repo installs by @fukalous in #2063
  • fix(local-models): skip unchanged preset writes by @fukalous in #2064
  • fix(desktop): report sidecar crashes by @fukalous in #2065
  • fix(local-models): explain unpaired projectors by @fukalous in #2066
  • fix(local-models): reconcile copied gguf files by @fukalous in #2067
  • fix(local): ask before fetching an image URL from a host the endpoint names by @Cedric921 in #2072
  • docs(proposals): preview source files in the desktop app by @AnishSarkar22 in #2088
  • ci(coderabbit): review pull requests against dev automatically by @MODSetter in #2091
  • feat(local): show live CPU, RAM and GPU usage above Studio by @MODSetter in #2092
  • fix(desktop): recommend the Vulkan loader in the Linux deb by @Cedric921 in #2090
  • fix(local): send a curated chat model's publisher temperature by @Cedric921 in #2085
  • fix(license): let support correct a trial's address by @Cedric921 in #2086
  • fix(license): suspend only the license a fully refunded charge paid for by @Cedric921 in #2087
  • fix(license): refuse trial emails on the disposable-email-domains list by @MODSetter in #2095
  • fix(local): parse images offline, cut OCR errors and speed up Docling by @MODSetter in #2096
  • docs(proposals): GPU for the document parser by @MODSetter in #2097
  • fix(export): give each exported document its own path by @MohammadHijjawi97 in #2093
  • docs(proposals): run the desktop stack in Docker, with CPU and CUDA images by @AnishSarkar22 in #2098
  • docs(proposals): order the Docker work as fourteen runnable steps by @AnishSarkar22 in #2099
  • fix(mcp): bump anyio, cryptography and pyjwt for security advisories by @MODSetter in #2115
  • fix(sandbox): bump fast-uri, js-yaml and undici in the remotion lockfile by @MODSetter in #2116
  • fix(whatsapp-bridge): bump sharp, protobufjs, qs and body-parser by @MODSetter in #2117
  • fix(local): patch pdfjs-dist, undici, urllib3 and other dependency advisories by @MODSetter in #2118
  • fix(web): patch next, pdfjs-dist and vulnerable transitive dependencies by @MODSetter in #2119
  • fix(backend): patch dependency advisories with lock bumps and floor raises by @MODSetter in #2120
  • fix(backend): lift the starlette and pyarrow caps, move transformers to 5 by @MODSetter in #2121
  • feat(local-backend): read CORS origins from SURFSENSE_LOCAL_CORS_ORIGINS by @qwist1233-cpu in #2122
  • fix(plugins): stop failing runs queued in the worker's first second by @AnishSarkar22 in #2129
  • feat(desktop): preview PDF sources in-app by @kaaloo in #2128
  • feat(local): move resource usage into Settings › Resources by @AnishSarkar22 in #2130
  • [Docs|Agent] Settle how opencode runs inside SurfSense by @CREDO23 in #2133
  • [Agent|opencode] Let the agent answer a chat thread by @CREDO23 in #2135
  • docs(sunset): say in both runbooks that the flag needs DEPLOYMENT_MODE=cloud by @ybai08 in #2125
  • perf(local): reload the Studio list on workspace events instead of polling every 1.5s by @ybai08 in #2126
  • fix(local): say whether the chosen image model's server is running by @Cedric921 in #2127
  • feat(local): fall back to VITE_API_BASE for the API base by @MannXo in #2134
  • docs(license): say Keygen ignores the case of metadata keys by @MODSetter in #2139
  • docs(local): record that the workspace stream leaks a listener per retry by @MODSetter in #2140
  • fix(workspaces): clean up abort listener on retry timer and return early when aborted by @DYNOSuprovo in #2142
  • fix(web): state the 18 October 2026 deletion date on /sunset by @ybai08 in #2138
  • feat(local): show how far the model has read a long prompt by @ybai08 in #2144
  • feat(local): choose the embedding model in onboarding by @AnishSarkar22 in #2136
  • [Agent|Engine] Give the agent only to models that can call tools by @CREDO23 in #2150
  • feat(local): use a ChatGPT Plus or Pro plan as a chat model by @AnishSarkar22 in #2151
  • [Agent|Engine] Let the developer switch try models newer than the catalog by @CREDO23 in #2153
  • [Agent|Tools] Give the agent SurfSense's search and Studio by @CREDO23 in #2152
  • fix(local): keep a rename or note edit made while a document ingests by @Cedric921 in #2148
  • feat(local): write notes and rename sources from the sources panel by @Cedric921 in #2132
  • fix(local): stop Chromium's spellchecker from downloading dictionaries by @ybai08 in #2145
  • feat(local): add a switch to turn thinking off for chat answers by @ybai08 in #2143
  • feat(local): source preview in the sidebar, grouped settings, Report issue tab, composer add menu by @AnishSarkar22 in #2160
  • [Agent|Release] Keep opencode off until a model passes the agent test by @CREDO23 in #2163
  • [Web|Lint] Format the files Biome flags on dev by @CREDO23 in #2165
  • [CI|Node] Build the website and the installers on Node 24 by @CREDO23 in #2162
  • [Local|Release] Set the desktop version to 2.1.0 by @CREDO23 in #2164
  • [CI|Release] Run the artifact actions on Node 24 by @CREDO23 in #2166
  • [Local|Release] Release desktop 2.1.0 by @CREDO23 in #2167

New Contributors

Full Changelog: v2.0.3...v2.1.0

Don't miss a new SurfSense release

NewReleases is sending notifications on new releases.