Skip to content

[release] 2.0 local desktop - #1809

Merged
CREDO23 merged 305 commits into
mainfrom
dev
Sep 18, 2026
Merged

CREDO23 merged 305 commits into
mainfrom
dev

Conversation

@CREDO23

@CREDO23 CREDO23 commented Sep 18, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • New air-gapped desktop app.
  • Hosted web winds down; export until 18 October 2026.

AnishSarkar22 and others added 30 commits September 15, 2026 04:07
feat(local): polish local app UI: artifact filtering, settings, and sidebar
…ocumentation

- Revised the license file format to reflect the use of self-hosted Keygen CE.
- Clarified the configuration requirements for Keygen integration.
- Updated portal documentation to specify the handling of license routes and delivery processes.
- Added notes on the implications of self-hosting Keygen, including testing and contract management.
- type filter is a dropdown instead of a row of icon chips
- generated-at times use compact units (15s, 5m, 2h) and refresh every 10s
- podcast duration buttons show their selected state in dark mode
- source picker in the generate dialog scrolls instead of overflowing
- studio catalog and format icons move to catalog.ts, shared by list and panel
SQLite holds naive UTC wall time; Pydantic serialised it without an
offset and the client read it as local time, so a podcast made just now
showed as 2h old. A UtcDateTime type decorator stamps every Mapped
datetime as UTC on read and converts aware values on write, so the
license service drops its manual conversion and chat SSE frames spell
UTC as Z like the REST payloads.
MODSetter and others added 27 commits September 17, 2026 15:23
…al pull

The Download button in the model catalog hits POST /llm/install, which
never called egress.require() — only the unused /providers/{provider}/pull
route did. Chat models installed through the catalog UI left silently,
with no consent popup and no destination logged. Also derive the actual
host from the resolved pull target, since Ollama's hf.co/<repo> fallback
installs go straight to huggingface.co, not registry.ollama.ai.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…n clearly

The main/sources views shared one CSS grid cell so the row's height
included both children's content size — a long source list could grow
past its intended bound and spill out of the dialog instead of
scrolling. Overlay sources with position:absolute instead: main alone
(in normal flow) sets the dialog's height per format, and sources fills
that box exactly via inset-0, so its list scrolls within whatever
height that format's dialog has, however long the list gets.

Also renames the Updates settings heading to "App updates", matching
how it's already referred to in its own description and in
Settings > Network.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…move-speaker destructive

"Check now" now asks for App updates consent via the same egress prompt
the sidebar's automatic check already uses, instead of being disabled
until the automatic-updates switch is turned on elsewhere in the
dialog. Also gives the remove-speaker button in the podcast brief form
a destructive variant so a removal reads as such.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…t, bump list header text size

Select now lives in components/ui so other forms can reuse the OS-native
picker instead of a Radix/Base UI popup; Sources and Artifacts headers
move from text-xs to text-sm to match the rest of the panel.
The list's top/bottom fade blended toward --background, but the dialog
itself renders on --popover; the mismatch showed as a visible seam
around the first row.
Biome's noLabelWithoutControl couldn't verify the label wrapping
Radix's button-based Checkbox, so use useId + Label htmlFor/id
instead of wrapping.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
feat(local): gate egress-sensitive actions and refactor studio source selection
- Added a new page focused on transforming documents into professional deliverables, reflecting user demand for practical applications over academic use.
- Updated keyword research to emphasize business-oriented terms, including "private ai for business" and "secure ai for business," based on user data analysis.
- Revised existing documents to align with findings from production chat data, highlighting the shift in user intent from study to professional tasks.
- Introduced new data files for keyword ideas and overviews to support the updated strategy.
The teal-on-navy icon matched the old connected app. The rounded-square
black variant is what the site already uses, so the two installs no
longer look identical.
The live page still described the hosted open-web product. Point it at the air-gapped app, the Studio still, and the 18 October export deadline.
Keep backend, web, local, and MCP. Desktop wrapper, browser extension,
Obsidian plugin, and evals remain on archive/hosted-2026-09.
Clear the SEO skill dump and shipped-phase plans so they can be rebuilt later. Leave Azure compose (SearxNG, sandbox, zero-cache) and license/export contracts untouched.
Give agents a closest-file-wins ops map and new-code organization rules, and install only the skills that match files already in the tree.
Replace the Docker-first contributing guide with a short index, current Covenant 3.0, private security reports, and issue forms that name the four products.
chore: collapse the repo to the four product trees
@vercel

vercel Bot commented Sep 18, 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 Sep 18, 2026 7:15am UTC

Request Review

@coderabbitai

coderabbitai Bot commented Sep 18, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 1329 files, which is 1029 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: defaults

Review profile: CHILL

Plan: Advanced

Run ID: c5581193-1d8c-4ac3-a49c-33909dcb5687

📥 Commits

Reviewing files that changed from the base of the PR and between be4a191 and 6295c53.

⛔ Files ignored due to path filters (65)
  • .agents/skills/shadcn/assets/shadcn-small.png is excluded by !**/*.png
  • .agents/skills/shadcn/assets/shadcn.png is excluded by !**/*.png
  • package-lock.json is excluded by !**/package-lock.json
  • plans/community-local/seo/data/intl/markets.csv is excluded by !**/*.csv
  • plans/community-local/seo/data/keyword-ideas-artifacts.json.gz is excluded by !**/*.gz
  • plans/community-local/seo/data/keyword-ideas-broad.json.gz is excluded by !**/*.gz
  • plans/community-local/seo/data/keyword-ideas-deliverable.json.gz is excluded by !**/*.gz
  • plans/community-local/seo/data/keyword-overview-artifacts.json.gz is excluded by !**/*.gz
  • plans/community-local/seo/data/keyword-overview-curated.json.gz is excluded by !**/*.gz
  • plans/community-local/seo/data/keyword-suggestions-notebooklm.json.gz is excluded by !**/*.gz
  • plans/community-local/seo/data/master-keywords.csv is excluded by !**/*.csv
  • plans/community-local/seo/data/ranked-anythingllm.json.gz is excluded by !**/*.gz
  • plans/community-local/seo/data/ranked-open-notebook.json.gz is excluded by !**/*.gz
  • plans/community-local/seo/data/ranked-surfsense.json.gz is excluded by !**/*.gz
  • surfsense_browser_extension/assets/brain.png is excluded by !**/*.png
  • surfsense_browser_extension/assets/icon.png is excluded by !**/*.png
  • surfsense_browser_extension/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
  • surfsense_desktop/assets/icon-128.png is excluded by !**/*.png
  • surfsense_desktop/assets/icon.ico is excluded by !**/*.ico
  • surfsense_desktop/assets/icon.png is excluded by !**/*.png
  • surfsense_desktop/assets/iconTemplate.png is excluded by !**/*.png
  • surfsense_desktop/assets/iconTemplate@2x.png is excluded by !**/*.png
  • surfsense_desktop/assets/icons/1024x1024.png is excluded by !**/*.png
  • surfsense_desktop/assets/icons/128x128.png is excluded by !**/*.png
  • surfsense_desktop/assets/icons/16x16.png is excluded by !**/*.png
  • surfsense_desktop/assets/icons/256x256.png is excluded by !**/*.png
  • surfsense_desktop/assets/icons/32x32.png is excluded by !**/*.png
  • surfsense_desktop/assets/icons/48x48.png is excluded by !**/*.png
  • surfsense_desktop/assets/icons/512x512.png is excluded by !**/*.png
  • surfsense_desktop/assets/icons/64x64.png is excluded by !**/*.png
  • surfsense_desktop/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
  • surfsense_evals/uv.lock is excluded by !**/*.lock
  • surfsense_local/backend/uv.lock is excluded by !**/*.lock
  • surfsense_local/electron/build/icon.ico is excluded by !**/*.ico
  • surfsense_local/electron/build/icon.png is excluded by !**/*.png
  • 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_obsidian/package-lock.json is excluded by !**/package-lock.json
  • surfsense_obsidian/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
  • surfsense_web/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
  • surfsense_web/public/contact/world.svg is excluded by !**/*.svg
  • surfsense_web/public/homepage/artifacts.svg is excluded by !**/*.svg
  • surfsense_web/public/homepage/cta-dither-background.png is excluded by !**/*.png
  • surfsense_web/public/homepage/icon.png is excluded by !**/*.png
  • surfsense_web/public/homepage/local-model-toggle.svg is excluded by !**/*.svg
  • surfsense_web/public/homepage/no-cloud-in-the-loop.svg is excluded by !**/*.svg
  • surfsense_web/public/homepage/offline-studio.png is excluded by !**/*.png
  • surfsense_web/public/license/03-license-section.png is excluded by !**/*.png
  • surfsense_web/public/license/04-add-dialog.png is excluded by !**/*.png
  • surfsense_web/public/license/05-active.png is excluded by !**/*.png
  • surfsense_web/public/logos/bosta.png is excluded by !**/*.png
  • surfsense_web/public/logos/bosta.svg is excluded by !**/*.svg
  • surfsense_web/public/logos/devoteam.png is excluded by !**/*.png
  • surfsense_web/public/logos/devoteam.svg is excluded by !**/*.svg
  • surfsense_web/public/logos/leverage-edu.svg is excluded by !**/*.svg
  • surfsense_web/public/logos/leverageedu.png is excluded by !**/*.png
  • surfsense_web/public/logos/opengov.png is excluded by !**/*.png
  • surfsense_web/public/logos/opengov.svg is excluded by !**/*.svg
  • surfsense_web/public/logos/welab.png is excluded by !**/*.png
  • surfsense_web/public/logos/welab.svg is excluded by !**/*.svg
  • surfsense_web/public/logos/zopper.png is excluded by !**/*.png
  • surfsense_web/public/logos/zopper.svg is excluded by !**/*.svg
  • surfsense_web/public/sunset/03-settings.png is excluded by !**/*.png
  • surfsense_web/public/sunset/04-general.png is excluded by !**/*.png
  • surfsense_web/public/sunset/05-upload.png is excluded by !**/*.png
📒 Files selected for processing (1329)
  • .agents/skills/codebase-design/DEEPENING.md
  • .agents/skills/codebase-design/DESIGN-IT-TWICE.md
  • .agents/skills/codebase-design/SKILL.md
  • .agents/skills/codebase-design/agents/openai.yaml
  • .agents/skills/fastapi
  • .agents/skills/humanizer/.claude-plugin/marketplace.json
  • .agents/skills/humanizer/.claude-plugin/plugin.json
  • .agents/skills/humanizer/.github/workflows/validate.yml
  • .agents/skills/humanizer/AGENTS.md
  • .agents/skills/humanizer/LICENSE
  • .agents/skills/humanizer/README.md
  • .agents/skills/humanizer/SKILL.md
  • .agents/skills/humanizer/agents/openai.yaml
  • .agents/skills/humanizer/scripts/validate-package.py
  • .agents/skills/shadcn/SKILL.md
  • .agents/skills/shadcn/agents/openai.yml
  • .agents/skills/shadcn/cli.md
  • .agents/skills/shadcn/customization.md
  • .agents/skills/shadcn/evals/evals.json
  • .agents/skills/shadcn/mcp.md
  • .agents/skills/shadcn/registry.md
  • .agents/skills/shadcn/rules/base-vs-radix.md
  • .agents/skills/shadcn/rules/chat.md
  • .agents/skills/shadcn/rules/composition.md
  • .agents/skills/shadcn/rules/forms.md
  • .agents/skills/shadcn/rules/icons.md
  • .agents/skills/shadcn/rules/styling.md
  • .agents/skills/tdd/SKILL.md
  • .agents/skills/tdd/agents/openai.yaml
  • .agents/skills/tdd/mocking.md
  • .agents/skills/tdd/tests.md
  • .agents/skills/vercel-react-best-practices/AGENTS.md
  • .agents/skills/vercel-react-best-practices/README.md
  • .agents/skills/vercel-react-best-practices/SKILL.md
  • .agents/skills/vercel-react-best-practices/rules/_sections.md
  • .agents/skills/vercel-react-best-practices/rules/_template.md
  • .agents/skills/vercel-react-best-practices/rules/advanced-effect-event-deps.md
  • .agents/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md
  • .agents/skills/vercel-react-best-practices/rules/advanced-init-once.md
  • .agents/skills/vercel-react-best-practices/rules/advanced-use-latest.md
  • .agents/skills/vercel-react-best-practices/rules/async-api-routes.md
  • .agents/skills/vercel-react-best-practices/rules/async-cheap-condition-before-await.md
  • .agents/skills/vercel-react-best-practices/rules/async-defer-await.md
  • .agents/skills/vercel-react-best-practices/rules/async-dependencies.md
  • .agents/skills/vercel-react-best-practices/rules/async-parallel.md
  • .agents/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md
  • .agents/skills/vercel-react-best-practices/rules/bundle-analyzable-paths.md
  • .agents/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md
  • .agents/skills/vercel-react-best-practices/rules/bundle-conditional.md
  • .agents/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md
  • .agents/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md
  • .agents/skills/vercel-react-best-practices/rules/bundle-preload.md
  • .agents/skills/vercel-react-best-practices/rules/client-event-listeners.md
  • .agents/skills/vercel-react-best-practices/rules/client-localstorage-schema.md
  • .agents/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md
  • .agents/skills/vercel-react-best-practices/rules/client-swr-dedup.md
  • .agents/skills/vercel-react-best-practices/rules/js-batch-dom-css.md
  • .agents/skills/vercel-react-best-practices/rules/js-cache-function-results.md
  • .agents/skills/vercel-react-best-practices/rules/js-cache-property-access.md
  • .agents/skills/vercel-react-best-practices/rules/js-cache-storage.md
  • .agents/skills/vercel-react-best-practices/rules/js-combine-iterations.md
  • .agents/skills/vercel-react-best-practices/rules/js-early-exit.md
  • .agents/skills/vercel-react-best-practices/rules/js-flatmap-filter.md
  • .agents/skills/vercel-react-best-practices/rules/js-hoist-regexp.md
  • .agents/skills/vercel-react-best-practices/rules/js-index-maps.md
  • .agents/skills/vercel-react-best-practices/rules/js-length-check-first.md
  • .agents/skills/vercel-react-best-practices/rules/js-min-max-loop.md
  • .agents/skills/vercel-react-best-practices/rules/js-request-idle-callback.md
  • .agents/skills/vercel-react-best-practices/rules/js-set-map-lookups.md
  • .agents/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md
  • .agents/skills/vercel-react-best-practices/rules/rendering-activity.md
  • .agents/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md
  • .agents/skills/vercel-react-best-practices/rules/rendering-conditional-render.md
  • .agents/skills/vercel-react-best-practices/rules/rendering-content-visibility.md
  • .agents/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md
  • .agents/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md
  • .agents/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md
  • .agents/skills/vercel-react-best-practices/rules/rendering-resource-hints.md
  • .agents/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md
  • .agents/skills/vercel-react-best-practices/rules/rendering-svg-precision.md
  • .agents/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md
  • .agents/skills/vercel-react-best-practices/rules/rerender-defer-reads.md
  • .agents/skills/vercel-react-best-practices/rules/rerender-dependencies.md
  • .agents/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md
  • .agents/skills/vercel-react-best-practices/rules/rerender-derived-state.md
  • .agents/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md
  • .agents/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md
  • .agents/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md
  • .agents/skills/vercel-react-best-practices/rules/rerender-memo.md
  • .agents/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md
  • .agents/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md
  • .agents/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md
  • .agents/skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md
  • .agents/skills/vercel-react-best-practices/rules/rerender-transitions.md
  • .agents/skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md
  • .agents/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md
  • .agents/skills/vercel-react-best-practices/rules/server-after-nonblocking.md
  • .agents/skills/vercel-react-best-practices/rules/server-auth-actions.md
  • .agents/skills/vercel-react-best-practices/rules/server-cache-lru.md
  • .agents/skills/vercel-react-best-practices/rules/server-cache-react.md
  • .agents/skills/vercel-react-best-practices/rules/server-dedup-props.md
  • .agents/skills/vercel-react-best-practices/rules/server-hoist-static-io.md
  • .agents/skills/vercel-react-best-practices/rules/server-no-shared-module-state.md
  • .agents/skills/vercel-react-best-practices/rules/server-parallel-fetching.md
  • .agents/skills/vercel-react-best-practices/rules/server-parallel-nested-fetching.md
  • .agents/skills/vercel-react-best-practices/rules/server-serialization.md
  • .claude/skills
  • .cursor/skills/alert-manager/SKILL.md
  • .cursor/skills/alert-manager/references/alert-configuration-templates.md
  • .cursor/skills/alert-manager/references/alert-threshold-guide.md
  • .cursor/skills/animation-vocabulary/SKILL.md
  • .cursor/skills/backlink-analyzer/SKILL.md
  • .cursor/skills/backlink-analyzer/references/analysis-templates.md
  • .cursor/skills/backlink-analyzer/references/link-quality-rubric.md
  • .cursor/skills/backlink-analyzer/references/outreach-templates.md
  • .cursor/skills/color-system/PALETTE.css
  • .cursor/skills/color-system/SKILL.md
  • .cursor/skills/competitor-analysis/SKILL.md
  • .cursor/skills/competitor-analysis/references/analysis-templates.md
  • .cursor/skills/competitor-analysis/references/battlecard-template.md
  • .cursor/skills/competitor-analysis/references/example-report.md
  • .cursor/skills/competitor-analysis/references/positioning-frameworks.md
  • .cursor/skills/content-gap-analysis/SKILL.md
  • .cursor/skills/content-gap-analysis/references/analysis-templates.md
  • .cursor/skills/content-gap-analysis/references/example-report.md
  • .cursor/skills/content-gap-analysis/references/gap-analysis-frameworks.md
  • .cursor/skills/content-quality-auditor/SKILL.md
  • .cursor/skills/content-quality-auditor/references/item-reference.md
  • .cursor/skills/content-refresher/SKILL.md
  • .cursor/skills/content-refresher/references/content-decay-signals.md
  • .cursor/skills/content-refresher/references/refresh-example.md
  • .cursor/skills/content-refresher/references/refresh-templates.md
  • .cursor/skills/domain-authority-auditor/SKILL.md
  • .cursor/skills/domain-authority-auditor/references/example-report.md
  • .cursor/skills/emil-design-eng/SKILL.md
  • .cursor/skills/entity-optimizer/SKILL.md
  • .cursor/skills/entity-optimizer/references/entity-signal-checklist.md
  • .cursor/skills/entity-optimizer/references/entity-type-reference.md
  • .cursor/skills/entity-optimizer/references/example-audit-report.md
  • .cursor/skills/entity-optimizer/references/knowledge-graph-guide.md
  • .cursor/skills/entity-optimizer/references/knowledge-panel-wikidata-guide.md
  • .cursor/skills/frontend-workflow/SKILL.md
  • .cursor/skills/geo-content-optimizer/SKILL.md
  • .cursor/skills/geo-content-optimizer/references/ai-citation-patterns.md
  • .cursor/skills/geo-content-optimizer/references/geo-optimization-techniques.md
  • .cursor/skills/geo-content-optimizer/references/quotable-content-examples.md
  • .cursor/skills/improve-codebase-architecture/INTERFACE-DESIGN.md
  • .cursor/skills/improve-codebase-architecture/LANGUAGE.md
  • .cursor/skills/improve-codebase-architecture/SKILL.md
  • .cursor/skills/internal-linking-optimizer/SKILL.md
  • .cursor/skills/internal-linking-optimizer/references/link-architecture-patterns.md
  • .cursor/skills/internal-linking-optimizer/references/linking-example.md
  • .cursor/skills/internal-linking-optimizer/references/linking-templates.md
  • .cursor/skills/keyword-research/SKILL.md
  • .cursor/skills/keyword-research/references/example-report.md
  • .cursor/skills/keyword-research/references/keyword-intent-taxonomy.md
  • .cursor/skills/keyword-research/references/keyword-prioritization-framework.md
  • .cursor/skills/keyword-research/references/topic-cluster-templates.md
  • .cursor/skills/make-interfaces-feel-better/SKILL.md
  • .cursor/skills/make-interfaces-feel-better/agents/openai.yaml
  • .cursor/skills/make-interfaces-feel-better/animations.md
  • .cursor/skills/make-interfaces-feel-better/icons.md
  • .cursor/skills/make-interfaces-feel-better/performance.md
  • .cursor/skills/make-interfaces-feel-better/surfaces.md
  • .cursor/skills/make-interfaces-feel-better/typography.md
  • .cursor/skills/memory-management/SKILL.md
  • .cursor/skills/memory-management/references/examples.md
  • .cursor/skills/memory-management/references/glossary-template.md
  • .cursor/skills/memory-management/references/hot-cache-template.md
  • .cursor/skills/memory-management/references/promotion-demotion-rules.md
  • .cursor/skills/memory-management/references/update-triggers-integration.md
  • .cursor/skills/meta-tags-optimizer/SKILL.md
  • .cursor/skills/meta-tags-optimizer/references/ctr-and-social-reference.md
  • .cursor/skills/meta-tags-optimizer/references/meta-tag-code-templates.md
  • .cursor/skills/meta-tags-optimizer/references/meta-tag-formulas.md
  • .cursor/skills/migrate-radix-to-base/SKILL.md
  • .cursor/skills/migrate-radix-to-base/class-mapping.md
  • .cursor/skills/migrate-radix-to-base/consumer-props.md
  • .cursor/skills/migrate-radix-to-base/disclosure.md
  • .cursor/skills/migrate-radix-to-base/display-misc.md
  • .cursor/skills/migrate-radix-to-base/form-controls.md
  • .cursor/skills/migrate-radix-to-base/menus.md
  • .cursor/skills/migrate-radix-to-base/overlays.md
  • .cursor/skills/migrate-radix-to-base/universal-patterns.md
  • .cursor/skills/migrate-radix-to-base/wrapper-shapes.md
  • .cursor/skills/on-page-seo-auditor/SKILL.md
  • .cursor/skills/on-page-seo-auditor/references/audit-example.md
  • .cursor/skills/on-page-seo-auditor/references/audit-templates.md
  • .cursor/skills/on-page-seo-auditor/references/scoring-rubric.md
  • .cursor/skills/performance-reporter/SKILL.md
  • .cursor/skills/performance-reporter/references/kpi-definitions.md
  • .cursor/skills/performance-reporter/references/report-output-templates.md
  • .cursor/skills/performance-reporter/references/report-templates.md
  • .cursor/skills/playwright-testing/SKILL.md
  • .cursor/skills/playwright-testing/advanced/authentication-flows.md
  • .cursor/skills/playwright-testing/advanced/authentication.md
  • .cursor/skills/playwright-testing/advanced/clock-mocking.md
  • .cursor/skills/playwright-testing/advanced/mobile-testing.md
  • .cursor/skills/playwright-testing/advanced/multi-context.md
  • .cursor/skills/playwright-testing/advanced/multi-user.md
  • .cursor/skills/playwright-testing/advanced/network-advanced.md
  • .cursor/skills/playwright-testing/advanced/third-party.md
  • .cursor/skills/playwright-testing/architecture/pom-vs-fixtures.md
  • .cursor/skills/playwright-testing/architecture/test-architecture.md
  • .cursor/skills/playwright-testing/architecture/when-to-mock.md
  • .cursor/skills/playwright-testing/browser-apis/browser-apis.md
  • .cursor/skills/playwright-testing/browser-apis/iframes.md
  • .cursor/skills/playwright-testing/browser-apis/service-workers.md
  • .cursor/skills/playwright-testing/browser-apis/websockets.md
  • .cursor/skills/playwright-testing/core/annotations.md
  • .cursor/skills/playwright-testing/core/assertions-waiting.md
  • .cursor/skills/playwright-testing/core/configuration.md
  • .cursor/skills/playwright-testing/core/fixtures-hooks.md
  • .cursor/skills/playwright-testing/core/global-setup.md
  • .cursor/skills/playwright-testing/core/locators.md
  • .cursor/skills/playwright-testing/core/page-object-model.md
  • .cursor/skills/playwright-testing/core/projects-dependencies.md
  • .cursor/skills/playwright-testing/core/test-data.md
  • .cursor/skills/playwright-testing/core/test-suite-structure.md
  • .cursor/skills/playwright-testing/core/test-tags.md
  • .cursor/skills/playwright-testing/debugging/console-errors.md
  • .cursor/skills/playwright-testing/debugging/debugging.md
  • .cursor/skills/playwright-testing/debugging/error-testing.md
  • .cursor/skills/playwright-testing/debugging/flaky-tests.md
  • .cursor/skills/playwright-testing/frameworks/nextjs.md
  • .cursor/skills/playwright-testing/frameworks/react.md
  • .cursor/skills/playwright-testing/infrastructure-ci-cd/ci-cd.md
  • .cursor/skills/playwright-testing/infrastructure-ci-cd/docker.md
  • .cursor/skills/playwright-testing/infrastructure-ci-cd/github-actions.md
  • .cursor/skills/playwright-testing/infrastructure-ci-cd/gitlab.md
  • .cursor/skills/playwright-testing/infrastructure-ci-cd/other-providers.md
  • .cursor/skills/playwright-testing/infrastructure-ci-cd/parallel-sharding.md
  • .cursor/skills/playwright-testing/infrastructure-ci-cd/performance.md
  • .cursor/skills/playwright-testing/infrastructure-ci-cd/reporting.md
  • .cursor/skills/playwright-testing/infrastructure-ci-cd/test-coverage.md
  • .cursor/skills/playwright-testing/testing-patterns/accessibility.md
  • .cursor/skills/playwright-testing/testing-patterns/api-testing.md
  • .cursor/skills/playwright-testing/testing-patterns/browser-extensions.md
  • .cursor/skills/playwright-testing/testing-patterns/canvas-webgl.md
  • .cursor/skills/playwright-testing/testing-patterns/component-testing.md
  • .cursor/skills/playwright-testing/testing-patterns/drag-drop.md
  • .cursor/skills/playwright-testing/testing-patterns/electron.md
  • .cursor/skills/playwright-testing/testing-patterns/file-operations.md
  • .cursor/skills/playwright-testing/testing-patterns/file-upload-download.md
  • .cursor/skills/playwright-testing/testing-patterns/forms-validation.md
  • .cursor/skills/playwright-testing/testing-patterns/graphql-testing.md
  • .cursor/skills/playwright-testing/testing-patterns/i18n.md
  • .cursor/skills/playwright-testing/testing-patterns/performance-testing.md
  • .cursor/skills/playwright-testing/testing-patterns/security-testing.md
  • .cursor/skills/playwright-testing/testing-patterns/visual-regression.md
  • .cursor/skills/python-patterns/SKILL.md
  • .cursor/skills/python-patterns/metadata.json
  • .cursor/skills/rank-tracker/SKILL.md
  • .cursor/skills/rank-tracker/references/ranking-analysis-templates.md
  • .cursor/skills/rank-tracker/references/tracking-setup-guide.md
  • .cursor/skills/schema-markup-generator/SKILL.md
  • .cursor/skills/schema-markup-generator/references/schema-decision-tree.md
  • .cursor/skills/schema-markup-generator/references/schema-templates.md
  • .cursor/skills/schema-markup-generator/references/validation-guide.md
  • .cursor/skills/seo-content-writer/SKILL.md
  • .cursor/skills/seo-content-writer/references/content-structure-templates.md
  • .cursor/skills/seo-content-writer/references/seo-writing-checklist.md
  • .cursor/skills/seo-content-writer/references/title-formulas.md
  • .cursor/skills/serp-analysis/SKILL.md
  • .cursor/skills/serp-analysis/references/analysis-templates.md
  • .cursor/skills/serp-analysis/references/example-report.md
  • .cursor/skills/serp-analysis/references/serp-feature-taxonomy.md
  • .cursor/skills/system-architecture/SKILL.md
  • .cursor/skills/system-architecture/examples.md
  • .cursor/skills/system-architecture/scaling-checklist.md
  • .cursor/skills/tdd/SKILL.md
  • .cursor/skills/tdd/deep-modules.md
  • .cursor/skills/tdd/interface-design.md
  • .cursor/skills/tdd/mocking.md
  • .cursor/skills/tdd/refactoring.md
  • .cursor/skills/tdd/tests.md
  • .cursor/skills/technical-seo-checker/SKILL.md
  • .cursor/skills/technical-seo-checker/references/http-status-codes.md
  • .cursor/skills/technical-seo-checker/references/robots-txt-reference.md
  • .cursor/skills/technical-seo-checker/references/technical-audit-example.md
  • .cursor/skills/technical-seo-checker/references/technical-audit-templates.md
  • .cursor/skills/ugc-brief/.skillfish.json
  • .cursor/skills/ugc-brief/SKILL.md
  • .cursor/skills/vercel-react-best-practices/AGENTS.md
  • .cursor/skills/vercel-react-best-practices/SKILL.md
  • .cursor/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md
  • .github/FUNDING.yml
  • .github/ISSUE_TEMPLATE/README.md
  • .github/ISSUE_TEMPLATE/bug.yml
  • .github/ISSUE_TEMPLATE/bug_report.md
  • .github/ISSUE_TEMPLATE/config.yml
  • .github/ISSUE_TEMPLATE/docs.yml
  • .github/ISSUE_TEMPLATE/documentation.md
  • .github/ISSUE_TEMPLATE/feature.yml
  • .github/ISSUE_TEMPLATE/feature_request.md
  • .github/PULL_REQUEST_TEMPLATE.md
  • .github/workflows/code-quality.yml
  • .github/workflows/desktop-release.yml
  • .github/workflows/docker-build.yml
  • .github/workflows/notary-status.yml
  • .github/workflows/obsidian-plugin-lint.yml
  • .github/workflows/release-local.yml
  • .github/workflows/release-obsidian-plugin.yml
  • .gitignore
  • .pre-commit-config.yaml
  • .recurseml.yaml
  • .rules/avoid_source_deduplication.mdc
  • .rules/consistent_container_image_sources.mdc
  • .rules/no_env_files_in_repo.mdc
  • .rules/ponytail.mdc
  • .rules/require_unique_id_props.mdc
  • AGENTS.md
  • CLAUDE.md
  • CODE_OF_CONDUCT.md
  • CONTRIBUTING.md
  • README.es.md
  • README.hi.md
  • README.md
  • README.pt-BR.md
  • README.zh-CN.md
  • SECURITY.md
  • biome.json
  • docker/.env.example
  • docker/docker-compose.dev.yml
  • docker/docker-compose.proxy.yml
  • docker/docker-compose.watch-e2e.yml
  • docker/docker-compose.yml
  • docker/grafana/Dockerfile
  • docs/adr/0001-git-native-knowledge-base.md
  • docs/adr/0002-knowledge-core-ports-and-adapters.md
  • docs/adr/0003-artifacts-as-documents.md
  • docs/chinese-llm-setup.md
  • manifest.json
  • plans/artifacts/artifacts-overhaul.md
  • plans/artifacts/phase-1-foundation.md
  • plans/artifacts/phase-10-public-access-and-hardening.md
  • plans/artifacts/phase-11-quiz.md
  • plans/artifacts/phase-12-infographics.md
  • plans/artifacts/phase-2-sandbox-pdf.md
  • plans/artifacts/phase-3-docx.md
  • plans/artifacts/phase-4-pptx.md
  • plans/artifacts/phase-5-xlsx.md
  • plans/artifacts/phase-6-html.md
  • plans/artifacts/phase-7-mindmap.md
  • plans/artifacts/phase-8-flashcards.md
  • plans/artifacts/phase-9-legacy-removal.md
  • plans/community-local/00-umbrella-plan.md
  • plans/community-local/00b-diagrams.md
  • plans/community-local/00c-data-model.md
  • plans/community-local/00d-pivot-plan.md
  • plans/community-local/api/03-chat.md
  • plans/community-local/api/04-studio.md
  • plans/community-local/api/05a-model-recommendations.md
  • plans/community-local/api/05b-openai-compatible-connections.md
  • plans/community-local/api/05c-packaging.md
  • plans/community-local/api/05d-llmfit-catalog-expansion.md
  • plans/community-local/contracts/01-license-file.md
  • plans/community-local/contracts/02-scraper-api-auth.md
  • plans/community-local/frontend/01-shell.md
  • plans/community-local/frontend/02-documents.md
  • plans/community-local/frontend/04-studio.md
  • plans/community-local/frontend/05-install-ux.md
  • plans/community-local/portal/01-license-routes.md
  • plans/community-local/portal/02-pages.md
  • plans/community-local/purge-runbook.md
  • plans/community-local/seo/01-keyword-research.md
  • plans/community-local/seo/02-page-briefs.md
  • plans/community-local/seo/03-international.md
  • plans/community-local/seo/04-competitors.md
  • plans/community-local/seo/05-serp-landscape.md
  • plans/community-local/seo/06-repo-readme.md
  • plans/community-local/seo/07-what-users-do.md
  • plans/community-local/seo/data/README.md
  • plans/community-local/seo/data/artifacts-intl-de-de.json
  • plans/community-local/seo/data/artifacts-intl-gb-en.json
  • plans/community-local/seo/data/artifacts-intl-in-en.json
  • plans/community-local/seo/data/artifacts-intl-jp-ja.json
  • plans/community-local/seo/data/artifacts-serp-competitors.json
  • plans/community-local/seo/data/domain-authority.json
  • plans/community-local/seo/data/gap-anythingllm.json
  • plans/community-local/seo/data/gap-open-notebook.json
  • plans/community-local/seo/data/historical-artifact-terms.json
  • plans/community-local/seo/data/historical-head-terms.json
  • plans/community-local/seo/data/intl-pro-es-es.json
  • plans/community-local/seo/data/intl/ae-en.json
  • plans/community-local/seo/data/intl/at-de.json
  • plans/community-local/seo/data/intl/au-en.json
  • plans/community-local/seo/data/intl/br-pt.json
  • plans/community-local/seo/data/intl/ca-en.json
  • plans/community-local/seo/data/intl/ca-fr.json
  • plans/community-local/seo/data/intl/ch-de.json
  • plans/community-local/seo/data/intl/de-de.json
  • plans/community-local/seo/data/intl/es-es.json
  • plans/community-local/seo/data/intl/fr-fr.json
  • plans/community-local/seo/data/intl/gb-en.json
  • plans/community-local/seo/data/intl/id-en.json
  • plans/community-local/seo/data/intl/ie-en.json
  • plans/community-local/seo/data/intl/in-en.json
  • plans/community-local/seo/data/intl/it-it.json
  • plans/community-local/seo/data/intl/jp-ja.json
  • plans/community-local/seo/data/intl/kr-ko.json
  • plans/community-local/seo/data/intl/lists.json
  • plans/community-local/seo/data/intl/mx-es.json
  • plans/community-local/seo/data/intl/nl-nl.json
  • plans/community-local/seo/data/intl/nz-en.json
  • plans/community-local/seo/data/intl/ph-en.json
  • plans/community-local/seo/data/intl/pl-pl.json
  • plans/community-local/seo/data/intl/se-sv.json
  • plans/community-local/seo/data/intl/sg-en.json
  • plans/community-local/seo/data/intl/tw-zh.json
  • plans/community-local/seo/data/intl/us-en.json
  • plans/community-local/seo/data/intl/za-en.json
  • plans/community-local/seo/data/keyword-ideas-questions.json
  • plans/community-local/seo/data/keyword-overview-brand-questions.json
  • plans/community-local/seo/data/keyword-overview-deliverable.json
  • plans/community-local/seo/data/keyword-overview-gap-terms.json
  • plans/community-local/seo/data/keyword-overview-notebooklm-family.json
  • plans/community-local/seo/data/keyword-overview-variants.json
  • plans/community-local/seo/data/keyword-overview-verticals.json
  • plans/community-local/seo/data/keyword-overview-workintercept.json
  • plans/community-local/seo/data/parse.py
  • plans/community-local/seo/data/ranked-jan.json
  • plans/community-local/seo/data/ranked-khoj.json
  • plans/community-local/seo/data/ranked-openwebui.json
  • plans/community-local/seo/data/serp-notebooklm-mcp.json
  • plans/community-local/seo/data/serp-offline-ai.json
  • plans/community-local/seo/data/serp-private-ai.json
  • plans/community-local/seo/data/serp-self-hosted-ai.json
  • plans/community-local/seo/data/serp-study-guide-maker.json
  • plans/community-local/seo/drafts/README.md
  • plans/community-local/sunset-runbook.md
  • plans/community-local/worker/02-ingest.md
  • plans/community-local/worker/04-studio.md
  • plans/git-native-kb/00-umbrella-plan.md
  • plans/git-native-kb/00b-diagrams.md
  • plans/git-native-kb/00c-shared-contract.md
  • plans/git-native-kb/01-git-storage-core.md
  • plans/git-native-kb/02-git-working-tree-backend.md
  • plans/git-native-kb/03-commit-write-path.md
  • plans/git-native-kb/04-derived-index.md
  • plans/git-native-kb/05-migration.md
  • plans/git-native-kb/05a-seed-runbook.md
  • plans/git-native-kb/06-zero-projection.md
  • plans/git-native-kb/07-direct-caller-adapter.md
  • plans/git-native-kb/08-store-facade-and-paths.md
  • plans/git-native-kb/09-git-as-primary-store.md
  • plans/git-native-kb/10-ingest-index-atomicity.md
  • plans/git-native-kb/11-one-write-path-design.md
  • plans/git-native-kb/12-connect-own-remote.md
  • plans/git-native-kb/13-bidirectional-folder-sync.md
  • plans/video-generation/00-umbrella-plan.md
  • plans/video-generation/phase-1-sandbox-harness.md
  • plans/video-generation/phase-2-video-skill.md
  • plans/video-generation/phase-2b-queued-deliverable-jobs.md
  • plans/video-generation/phase-3-narration-bridge.md
  • plans/video-generation/phase-4-verification.md
  • plans/video-generation/phase-5-persistence-and-serving.md
  • plans/video-generation/phase-6-frontend.md
  • plans/video-generation/phase-7-migration-backfill.md
  • plans/video-generation/phase-8-retire-legacy.md
  • scripts/bump-version.sh
  • scripts/check_plan_links.py
  • skills-lock.json
  • surfsense_backend/.env.example
  • surfsense_backend/AGENTS.md
  • surfsense_backend/README.md
  • surfsense_backend/app/app.py
  • surfsense_backend/app/capabilities/amazon/scrape/definition.py
  • surfsense_backend/app/capabilities/google_maps/reviews/definition.py
  • surfsense_backend/app/capabilities/google_maps/scrape/definition.py
  • surfsense_backend/app/capabilities/google_search/scrape/definition.py
  • surfsense_backend/app/capabilities/indeed/scrape/definition.py
  • surfsense_backend/app/capabilities/instagram/details/definition.py
  • surfsense_backend/app/capabilities/instagram/scrape/definition.py
  • surfsense_backend/app/capabilities/reddit/scrape/definition.py
  • surfsense_backend/app/capabilities/tiktok/comments/definition.py
  • surfsense_backend/app/capabilities/tiktok/scrape/definition.py
  • surfsense_backend/app/capabilities/tiktok/trending/definition.py
  • surfsense_backend/app/capabilities/tiktok/user_search/definition.py
  • surfsense_backend/app/capabilities/walmart/reviews/definition.py
  • surfsense_backend/app/capabilities/walmart/scrape/definition.py
  • surfsense_backend/app/capabilities/web/crawl/definition.py
  • surfsense_backend/app/capabilities/youtube/comments/definition.py
  • surfsense_backend/app/capabilities/youtube/scrape/definition.py
  • surfsense_backend/app/config/__init__.py
  • surfsense_backend/app/license/__init__.py
  • surfsense_backend/app/license/admin.py
  • surfsense_backend/app/license/checkout.py
  • surfsense_backend/app/license/email/__init__.py
  • surfsense_backend/app/license/email/address.py
  • surfsense_backend/app/license/email/deliver.py
  • surfsense_backend/app/license/email/message.py
  • surfsense_backend/app/license/issue.py
  • surfsense_backend/app/license/keygen.py
  • surfsense_backend/app/license/models.py
  • surfsense_backend/app/license/purchase.py
  • surfsense_backend/app/license/rate_limit.py
  • surfsense_backend/app/license/records.py
  • surfsense_backend/app/license/release.py
  • surfsense_backend/app/license/router.py
  • surfsense_backend/app/license/schemas.py
  • surfsense_backend/app/mailer/__init__.py
  • surfsense_backend/app/mailer/factory.py
  • surfsense_backend/app/mailer/protocol.py
  • surfsense_backend/app/mailer/smtp.py
  • surfsense_backend/app/payments/__init__.py
  • surfsense_backend/app/payments/auto_reload.py
  • surfsense_backend/app/payments/client.py
  • surfsense_backend/app/payments/credits.py
  • surfsense_backend/app/payments/registry.py
  • surfsense_backend/app/payments/router.py
  • surfsense_backend/app/payments/schemas.py
  • surfsense_backend/app/payments/webhook.py
  • surfsense_backend/app/rate_limiter.py
  • surfsense_backend/app/routes/__init__.py
  • surfsense_backend/app/routes/stripe_routes.py
  • surfsense_backend/app/schemas/__init__.py
  • surfsense_backend/app/sunset.py
  • surfsense_backend/app/tasks/celery_tasks/stripe_reconciliation_task.py
  • surfsense_backend/scripts/correct_license_email.py
  • surfsense_backend/scripts/issue_enterprise_license.py
  • surfsense_backend/scripts/purge_hosted_accounts.py
  • surfsense_backend/tests/integration/document_upload/test_stripe_credit_purchases.py
  • surfsense_backend/tests/integration/mailer/test_smtp_contract.py
  • surfsense_backend/tests/unit/license/test_issue.py
  • surfsense_backend/tests/unit/license/test_message.py
  • surfsense_backend/tests/unit/license/test_release.py
  • surfsense_backend/tests/unit/mailer/test_factory.py
  • surfsense_backend/tests/unit/mailer/test_smtp.py
  • surfsense_backend/tests/unit/test_sunset_flag.py
  • surfsense_backend/tests/unit/test_sunset_write_block.py
  • surfsense_browser_extension/.env.example
  • surfsense_browser_extension/.gitignore
  • surfsense_browser_extension/README.md
  • surfsense_browser_extension/background/index.ts
  • surfsense_browser_extension/background/messages/savedata.ts
  • surfsense_browser_extension/background/messages/savesnapshot.ts
  • surfsense_browser_extension/biome.json
  • surfsense_browser_extension/content.ts
  • surfsense_browser_extension/font.css
  • surfsense_browser_extension/lib/utils.ts
  • surfsense_browser_extension/package.json
  • surfsense_browser_extension/pnpm-workspace.yaml
  • surfsense_browser_extension/popup.tsx
  • surfsense_browser_extension/postcss.config.js
  • surfsense_browser_extension/routes/index.tsx
  • surfsense_browser_extension/routes/pages/ApiKeyForm.tsx
  • surfsense_browser_extension/routes/pages/HomePage.tsx
  • surfsense_browser_extension/routes/pages/Loading.tsx
  • surfsense_browser_extension/routes/ui/button.tsx
  • surfsense_browser_extension/routes/ui/command.tsx
  • surfsense_browser_extension/routes/ui/connection-settings-button.tsx
  • surfsense_browser_extension/routes/ui/dialog.tsx
  • surfsense_browser_extension/routes/ui/label.tsx
  • surfsense_browser_extension/routes/ui/popover.tsx
  • surfsense_browser_extension/routes/ui/toast.tsx
  • surfsense_browser_extension/routes/ui/toaster.tsx
  • surfsense_browser_extension/routes/ui/use-toast.tsx
  • surfsense_browser_extension/tailwind.config.js
  • surfsense_browser_extension/tailwind.css
  • surfsense_browser_extension/tsconfig.json
  • surfsense_browser_extension/utils/backend-url.ts
  • surfsense_browser_extension/utils/commons.ts
  • surfsense_browser_extension/utils/interfaces.ts
  • surfsense_desktop/.env.example
  • surfsense_desktop/.gitignore
  • surfsense_desktop/.npmrc
  • surfsense_desktop/README.md
  • surfsense_desktop/assets/icon.icns
  • surfsense_desktop/build/entitlements.mac.plist
  • surfsense_desktop/electron-builder.yml
  • surfsense_desktop/package.json
  • surfsense_desktop/pnpm-workspace.yaml
  • surfsense_desktop/scripts/build-electron.mjs
  • surfsense_desktop/scripts/electron-dev.mjs
  • surfsense_desktop/scripts/postinstall-rebuild.mjs
  • surfsense_desktop/src/ipc/channels.ts
  • surfsense_desktop/src/ipc/handlers.ts
  • surfsense_desktop/src/main.ts
  • surfsense_desktop/src/modules/active-workspace.ts
  • surfsense_desktop/src/modules/agent-filesystem-tree-watcher.ts
  • surfsense_desktop/src/modules/agent-filesystem.ts
  • surfsense_desktop/src/modules/analytics.ts
  • surfsense_desktop/src/modules/auth-cutover.ts
  • surfsense_desktop/src/modules/auto-launch.ts
  • surfsense_desktop/src/modules/auto-updater.ts
  • surfsense_desktop/src/modules/deep-links.ts
  • surfsense_desktop/src/modules/errors.ts
  • surfsense_desktop/src/modules/folder-watcher.ts
  • surfsense_desktop/src/modules/general-assist.ts
  • surfsense_desktop/src/modules/menu.ts
  • surfsense_desktop/src/modules/migrate-watched-folders.test.ts
  • surfsense_desktop/src/modules/migrate-watched-folders.ts
  • surfsense_desktop/src/modules/oauth-page.ts
  • surfsense_desktop/src/modules/oauth.ts
  • surfsense_desktop/src/modules/permissions.ts
  • surfsense_desktop/src/modules/platform.ts
  • surfsense_desktop/src/modules/quick-ask.ts
  • surfsense_desktop/src/modules/screen-capture/index.ts
  • surfsense_desktop/src/modules/screen-capture/screen-region-picker.ts
  • surfsense_desktop/src/modules/screen-capture/screen-region-preload.ts
  • surfsense_desktop/src/modules/screen-capture/screenshot-assist.ts
  • surfsense_desktop/src/modules/screen-capture/window-picker-preload.ts
  • surfsense_desktop/src/modules/screen-capture/window-picker.ts
  • surfsense_desktop/src/modules/secret-store.ts
  • surfsense_desktop/src/modules/server.ts
  • surfsense_desktop/src/modules/shortcuts.ts
  • surfsense_desktop/src/modules/sunset.ts
  • surfsense_desktop/src/modules/tray.ts
  • surfsense_desktop/src/modules/window.ts
  • surfsense_desktop/src/preload.ts
  • surfsense_desktop/tsconfig.json
  • surfsense_evals/.env.example
  • surfsense_evals/.gitignore
  • surfsense_evals/README.md
  • surfsense_evals/data/.gitignore
  • surfsense_evals/data/multimodal_doc/runs/2026-05-14T00-53-19Z/parser_compare/raw.jsonl
  • surfsense_evals/data/multimodal_doc/runs/2026-05-14T00-53-19Z/parser_compare/raw_post_retry.jsonl
  • surfsense_evals/data/multimodal_doc/runs/2026-05-14T00-53-19Z/parser_compare/raw_retries.jsonl
  • surfsense_evals/data/multimodal_doc/runs/2026-05-14T00-53-19Z/parser_compare/raw_retries_summary.json
  • surfsense_evals/data/multimodal_doc/runs/2026-05-14T00-53-19Z/parser_compare/run_artifact.json
  • surfsense_evals/pyproject.toml
  • surfsense_evals/reports/.gitignore
  • surfsense_evals/scripts/analyze_failure_timing.py
  • surfsense_evals/scripts/analyze_failures.py
  • surfsense_evals/scripts/check_extraction_sizes.py
  • surfsense_evals/scripts/check_uploaded_status.py
  • surfsense_evals/scripts/compute_adjusted_accuracy.py
  • surfsense_evals/scripts/compute_blog_extras.py
  • surfsense_evals/scripts/compute_post_retry_accuracy.py
  • surfsense_evals/scripts/inspect_first30.py
  • surfsense_evals/scripts/patch_manifest_for_parallel_ingest.py
  • surfsense_evals/scripts/peek_crag_run.py
  • surfsense_evals/scripts/peek_disagreements.py
  • surfsense_evals/scripts/retry_failed_questions.py
  • surfsense_evals/scripts/summarise_crag_run.py
  • surfsense_evals/scripts/summarise_parser_compare_run.py
  • surfsense_evals/scripts/test_context_overflow_hypothesis.py
  • surfsense_evals/src/surfsense_evals/__init__.py
  • surfsense_evals/src/surfsense_evals/__main__.py
  • surfsense_evals/src/surfsense_evals/core/__init__.py
  • surfsense_evals/src/surfsense_evals/core/arms/__init__.py
  • surfsense_evals/src/surfsense_evals/core/arms/bare_llm.py
  • surfsense_evals/src/surfsense_evals/core/arms/base.py
  • surfsense_evals/src/surfsense_evals/core/arms/native_pdf.py
  • surfsense_evals/src/surfsense_evals/core/arms/surfsense.py
  • surfsense_evals/src/surfsense_evals/core/auth.py
  • surfsense_evals/src/surfsense_evals/core/cli.py
  • surfsense_evals/src/surfsense_evals/core/clients/__init__.py
  • surfsense_evals/src/surfsense_evals/core/clients/documents.py
  • surfsense_evals/src/surfsense_evals/core/clients/new_chat.py
  • surfsense_evals/src/surfsense_evals/core/clients/search_space.py
  • surfsense_evals/src/surfsense_evals/core/config.py
  • surfsense_evals/src/surfsense_evals/core/ingest_settings.py
  • surfsense_evals/src/surfsense_evals/core/metrics/__init__.py
  • surfsense_evals/src/surfsense_evals/core/metrics/comparison.py
  • surfsense_evals/src/surfsense_evals/core/metrics/mc_accuracy.py
  • surfsense_evals/src/surfsense_evals/core/metrics/retrieval.py
  • surfsense_evals/src/surfsense_evals/core/parse/__init__.py
  • surfsense_evals/src/surfsense_evals/core/parse/answer_letter.py
  • surfsense_evals/src/surfsense_evals/core/parse/citations.py
  • surfsense_evals/src/surfsense_evals/core/parse/freeform_answer.py
  • surfsense_evals/src/surfsense_evals/core/parse/sse.py
  • surfsense_evals/src/surfsense_evals/core/parsers/__init__.py
  • surfsense_evals/src/surfsense_evals/core/parsers/azure_di.py
  • surfsense_evals/src/surfsense_evals/core/parsers/llamacloud.py
  • surfsense_evals/src/surfsense_evals/core/parsers/pdf_pages.py
  • surfsense_evals/src/surfsense_evals/core/pdf/__init__.py
  • surfsense_evals/src/surfsense_evals/core/pdf/render.py
  • surfsense_evals/src/surfsense_evals/core/providers/__init__.py
  • surfsense_evals/src/surfsense_evals/core/providers/openrouter_chat.py
  • surfsense_evals/src/surfsense_evals/core/providers/openrouter_pdf.py
  • surfsense_evals/src/surfsense_evals/core/registry.py
  • surfsense_evals/src/surfsense_evals/core/report/__init__.py
  • surfsense_evals/src/surfsense_evals/core/report/writer.py
  • surfsense_evals/src/surfsense_evals/core/scenarios.py
  • surfsense_evals/src/surfsense_evals/core/vision_llm.py
  • surfsense_evals/src/surfsense_evals/suites/__init__.py
  • surfsense_evals/src/surfsense_evals/suites/_demo/__init__.py
  • surfsense_evals/src/surfsense_evals/suites/_demo/hello/__init__.py
  • surfsense_evals/src/surfsense_evals/suites/medical/__init__.py
  • surfsense_evals/src/surfsense_evals/suites/medical/cure/__init__.py
  • surfsense_evals/src/surfsense_evals/suites/medical/cure/ingest.py
  • surfsense_evals/src/surfsense_evals/suites/medical/cure/runner.py
  • surfsense_evals/src/surfsense_evals/suites/medical/medxpertqa/__init__.py
  • surfsense_evals/src/surfsense_evals/suites/medical/medxpertqa/ingest.py
  • surfsense_evals/src/surfsense_evals/suites/medical/medxpertqa/prompt.py
  • surfsense_evals/src/surfsense_evals/suites/medical/medxpertqa/runner.py
  • surfsense_evals/src/surfsense_evals/suites/medical/mirage/__init__.py
  • surfsense_evals/src/surfsense_evals/suites/medical/mirage/ingest.py
  • surfsense_evals/src/surfsense_evals/suites/medical/mirage/prompt.py
  • surfsense_evals/src/surfsense_evals/suites/medical/mirage/runner.py
  • surfsense_evals/src/surfsense_evals/suites/multimodal_doc/__init__.py
  • surfsense_evals/src/surfsense_evals/suites/multimodal_doc/mmlongbench/__init__.py
  • surfsense_evals/src/surfsense_evals/suites/multimodal_doc/mmlongbench/grader.py
  • surfsense_evals/src/surfsense_evals/suites/multimodal_doc/mmlongbench/ingest.py
  • surfsense_evals/src/surfsense_evals/suites/multimodal_doc/mmlongbench/prompt.py
  • surfsense_evals/src/surfsense_evals/suites/multimodal_doc/mmlongbench/runner.py
  • surfsense_evals/src/surfsense_evals/suites/multimodal_doc/parser_compare/__init__.py
  • surfsense_evals/src/surfsense_evals/suites/multimodal_doc/parser_compare/ingest.py
  • surfsense_evals/src/surfsense_evals/suites/multimodal_doc/parser_compare/prompt.py
  • surfsense_evals/src/surfsense_evals/suites/multimodal_doc/parser_compare/runner.py
  • surfsense_evals/src/surfsense_evals/suites/research/__init__.py
  • surfsense_evals/src/surfsense_evals/suites/research/crag/__init__.py
  • surfsense_evals/src/surfsense_evals/suites/research/crag/dataset.py
  • surfsense_evals/src/surfsense_evals/suites/research/crag/grader.py
  • surfsense_evals/src/surfsense_evals/suites/research/crag/html_extract.py
  • surfsense_evals/src/surfsense_evals/suites/research/crag/ingest.py
  • surfsense_evals/src/surfsense_evals/suites/research/crag/prompt.py
  • surfsense_evals/src/surfsense_evals/suites/research/crag/runner.py
  • surfsense_evals/src/surfsense_evals/suites/research/frames/__init__.py
  • surfsense_evals/src/surfsense_evals/suites/research/frames/dataset.py
  • surfsense_evals/src/surfsense_evals/suites/research/frames/grader.py
  • surfsense_evals/src/surfsense_evals/suites/research/frames/ingest.py
  • surfsense_evals/src/surfsense_evals/suites/research/frames/prompt.py
  • surfsense_evals/src/surfsense_evals/suites/research/frames/runner.py
  • surfsense_evals/src/surfsense_evals/suites/research/frames/wiki_fetch.py
  • surfsense_evals/tests/__init__.py
  • surfsense_evals/tests/conftest.py
  • surfsense_evals/tests/core/__init__.py
  • surfsense_evals/tests/core/test_auth.py
  • surfsense_evals/tests/core/test_clients.py
  • surfsense_evals/tests/core/test_config.py
  • surfsense_evals/tests/core/test_ingest_settings.py
  • surfsense_evals/tests/core/test_metrics.py
  • surfsense_evals/tests/core/test_parse_answer_letter.py
  • surfsense_evals/tests/core/test_parse_citations.py
  • surfsense_evals/tests/core/test_parse_freeform_answer.py
  • surfsense_evals/tests/core/test_parse_sse.py
  • surfsense_evals/tests/core/test_pdf_render.py
  • surfsense_evals/tests/core/test_pdf_render_with_images.py
  • surfsense_evals/tests/core/test_provider_openrouter.py
  • surfsense_evals/tests/core/test_registry.py
  • surfsense_evals/tests/core/test_scenarios.py
  • surfsense_evals/tests/core/test_vision_llm.py
  • surfsense_evals/tests/suites/__init__.py
  • surfsense_evals/tests/suites/test_crag_dataset.py
  • surfsense_evals/tests/suites/test_crag_grader.py
  • surfsense_evals/tests/suites/test_crag_html_extract.py
  • surfsense_evals/tests/suites/test_frames_dataset.py
  • surfsense_evals/tests/suites/test_frames_grader.py
  • surfsense_evals/tests/suites/test_frames_wiki_fetch.py
  • surfsense_evals/tests/suites/test_mmlongbench_grader.py
  • surfsense_evals/tests/test_integration_smoke.py
  • surfsense_local/AGENTS.md
  • surfsense_local/README.md
  • surfsense_local/VERSION
  • surfsense_local/backend/alembic/versions/0007_encrypt_provider_api_keys.py
  • surfsense_local/backend/alembic/versions/0008_egress_destinations.py
  • surfsense_local/backend/alembic/versions/0009_local_image_provider.py
  • surfsense_local/backend/alembic/versions/0010_selected_model_fingerprint.py
  • surfsense_local/backend/alembic/versions/0011_document_cancelled_status.py
  • surfsense_local/backend/api/dependencies.py
  • surfsense_local/backend/api/main.py
  • surfsense_local/backend/bundling/api.spec
  • surfsense_local/backend/bundling/worker.spec
  • surfsense_local/backend/main.py
  • surfsense_local/backend/modules/artifacts/flashcard_progress.py
  • surfsense_local/backend/modules/artifacts/formats.py
  • surfsense_local/backend/modules/artifacts/podcast/__init__.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/quiz_progress.py
  • surfsense_local/backend/modules/artifacts/router.py
  • surfsense_local/backend/modules/artifacts/schemas.py
  • surfsense_local/backend/modules/artifacts/service.py
  • surfsense_local/backend/modules/artifacts/tasks.py
  • surfsense_local/backend/modules/chat/errors.py
  • surfsense_local/backend/modules/chat/prompt.py
  • surfsense_local/backend/modules/chat/prompts/capable.md
  • surfsense_local/backend/modules/chat/prompts/compact.md
  • surfsense_local/backend/modules/chat/prompts/frontier.md
  • 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/router.py
  • surfsense_local/backend/modules/documents/sources.py
  • surfsense_local/backend/modules/documents/tasks.py
  • surfsense_local/backend/modules/egress/__init__.py
  • surfsense_local/backend/modules/egress/models.py
  • surfsense_local/backend/modules/egress/router.py
  • surfsense_local/backend/modules/egress/service.py
  • surfsense_local/backend/modules/events/router.py
  • surfsense_local/backend/modules/license/service.py
  • surfsense_local/backend/modules/license/verify.py
  • surfsense_local/backend/modules/llm/connections/model-capabilities.json
  • surfsense_local/backend/modules/llm/connections/model_capabilities.py
  • surfsense_local/backend/modules/llm/connections/router.py
  • surfsense_local/backend/modules/llm/connections/service.py
  • surfsense_local/backend/modules/llm/models.py
  • surfsense_local/backend/modules/llm/profile/__init__.py
  • surfsense_local/backend/modules/llm/profile/classify.py
  • surfsense_local/backend/modules/llm/profile/fingerprint.py
  • surfsense_local/backend/modules/llm/profile/types.py
  • surfsense_local/backend/modules/llm/prompting/__init__.py
  • surfsense_local/backend/modules/llm/prompting/focus.py
  • surfsense_local/backend/modules/llm/prompting/load.py
  • surfsense_local/backend/modules/llm/providers/kokoro/__init__.py
  • surfsense_local/backend/modules/llm/providers/kokoro/provider.py
  • surfsense_local/backend/modules/llm/providers/ollama/provider.py
  • surfsense_local/backend/modules/llm/providers/openai_compatible/chat.py
  • surfsense_local/backend/modules/llm/providers/protocols.py
  • surfsense_local/backend/modules/llm/providers/sdcpp/__init__.py
  • surfsense_local/backend/modules/llm/providers/sdcpp/provider.py
  • surfsense_local/backend/modules/llm/providers/types.py
  • surfsense_local/backend/modules/llm/recommendations/catalog.py
  • surfsense_local/backend/modules/llm/recommendations/curated-models.json
  • surfsense_local/backend/modules/llm/recommendations/curated_models.py
  • surfsense_local/backend/modules/llm/recommendations/dependencies.py
  • surfsense_local/backend/modules/llm/recommendations/llmfit.py
  • surfsense_local/backend/modules/llm/recommendations/router.py
  • surfsense_local/backend/modules/llm/recommendations/types.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/selection.py
  • surfsense_local/backend/pyproject.toml
  • surfsense_local/backend/scripts/fetch_docling_models.py
  • surfsense_local/backend/scripts/fetch_kokoro_model.py
  • surfsense_local/backend/scripts/fetch_model_capabilities.py
  • surfsense_local/backend/shared/config.py
  • surfsense_local/backend/shared/db.py
  • surfsense_local/backend/shared/queue.py
  • surfsense_local/backend/shared/secrets.py
  • surfsense_local/backend/shared/sqlite.py
  • surfsense_local/backend/tests/conftest.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/documents/test_constraints.py
  • surfsense_local/backend/tests/integration/documents/test_upload.py
  • surfsense_local/backend/tests/integration/license/test_license.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_routes.py
  • surfsense_local/backend/tests/integration/migration/test_import.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_ingest.py
  • surfsense_local/backend/tests/integration/worker/test_studio.py
  • surfsense_local/backend/tests/packaging/test_license_key.py
  • surfsense_local/backend/tests/packaging/test_real_binaries.py
  • surfsense_local/backend/tests/unit/artifacts/test_flashcard_progress.py
  • surfsense_local/backend/tests/unit/artifacts/test_podcast_brief.py
  • surfsense_local/backend/tests/unit/artifacts/test_quiz_progress.py
  • surfsense_local/backend/tests/unit/chat/test_prompt.py
  • surfsense_local/backend/tests/unit/egress/test_service.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/prompting/test_load.py
  • surfsense_local/backend/tests/unit/llm/prompting/test_prompts_ship.py
  • surfsense_local/backend/tests/unit/llm/recommendations/test_catalog.py
  • surfsense_local/backend/tests/unit/llm/recommendations/test_curated_models.py
  • surfsense_local/backend/tests/unit/llm/recommendations/test_llmfit.py
  • surfsense_local/backend/tests/unit/llm/test_kokoro.py
  • surfsense_local/backend/tests/unit/llm/test_model_capabilities.py
  • surfsense_local/backend/tests/unit/llm/test_ollama_num_ctx.py
  • surfsense_local/backend/tests/unit/llm/test_openai_compatible.py
  • surfsense_local/backend/tests/unit/llm/test_sdcpp.py
  • surfsense_local/backend/tests/unit/shared/test_db.py
  • surfsense_local/backend/tests/unit/shared/test_secrets.py
  • surfsense_local/backend/tests/unit/shared/test_sqlite.py
  • surfsense_local/backend/tests/unit/worker/test_consumer.py
  • surfsense_local/backend/tests/unit/worker/test_studio_artifact.py
  • surfsense_local/backend/tests/unit/worker/test_studio_builders.py
  • surfsense_local/backend/tests/unit/worker/test_studio_content.py
  • surfsense_local/backend/tests/unit/worker/test_studio_job_router.py
  • surfsense_local/backend/tests/unit/worker/test_studio_media.py
  • surfsense_local/backend/tests/unit/worker/test_studio_office.py
  • surfsense_local/backend/tests/unit/worker/test_studio_podcast.py
  • surfsense_local/backend/tests/unit/worker/test_studio_web.py
  • surfsense_local/backend/worker.py
  • surfsense_local/backend/worker/consumer.py
  • surfsense_local/backend/worker/ingestion/pipeline.py
  • surfsense_local/backend/worker/jobs.py
  • surfsense_local/backend/worker/studio/__init__.py
  • surfsense_local/backend/worker/studio/artifact.py
  • surfsense_local/backend/worker/studio/builder.py
  • surfsense_local/backend/worker/studio/builders/__init__.py
  • surfsense_local/backend/worker/studio/builders/flashcards.py
  • surfsense_local/backend/worker/studio/builders/html_doc.py
  • surfsense_local/backend/worker/studio/builders/infographic.py
  • surfsense_local/backend/worker/studio/builders/mindmap.py
  • surfsense_local/backend/worker/studio/builders/quiz.py
  • surfsense_local/backend/worker/studio/builders/summary.py
  • surfsense_local/backend/worker/studio/content/__init__.py
  • surfsense_local/backend/worker/studio/content/flashcards/__init__.py
  • surfsense_local/backend/worker/studio/content/flashcards/pipeline.py
  • surfsense_local/backend/worker/studio/content/flashcards/prompts/capable.md
  • surfsense_local/backend/worker/studio/content/flashcards/prompts/compact.md
  • surfsense_local/backend/worker/studio/content/flashcards/prompts/frontier.md
  • surfsense_local/backend/worker/studio/content/mindmap/__init__.py
  • surfsense_local/backend/worker/studio/content/mindmap/pipeline.py
  • surfsense_local/backend/worker/studio/content/mindmap/prompts/capable.md
  • surfsense_local/backend/worker/studio/content/mindmap/prompts/compact.md
  • surfsense_local/backend/worker/studio/content/mindmap/prompts/frontier.md
  • surfsense_local/backend/worker/studio/content/quiz/__init__.py
  • surfsense_local/backend/worker/studio/content/quiz/pipeline.py
  • surfsense_local/backend/worker/studio/content/quiz/prompts/capable.md
  • surfsense_local/backend/worker/studio/content/quiz/prompts/compact.md
  • surfsense_local/backend/worker/studio/content/quiz/prompts/frontier.md
  • surfsense_local/backend/worker/studio/content/summary/__init__.py
  • surfsense_local/backend/worker/studio/content/summary/pipeline.py
  • surfsense_local/backend/worker/studio/content/summary/prompts/capable.md
  • surfsense_local/backend/worker/studio/content/summary/prompts/compact.md
  • surfsense_local/backend/worker/studio/content/summary/prompts/frontier.md
  • surfsense_local/backend/worker/studio/generate.py
  • surfsense_local/backend/worker/studio/job.py
  • surfsense_local/backend/worker/studio/job_router.py
  • surfsense_local/backend/worker/studio/media/__init__.py
  • surfsense_local/backend/worker/studio/media/audio/__init__.py
  • surfsense_local/backend/worker/studio/media/audio/podcast/__init__.py
  • surfsense_local/backend/worker/studio/media/audio/podcast/draft.py
  • surfsense_local/backend/worker/studio/media/audio/podcast/outline.py
  • surfsense_local/backend/worker/studio/media/audio/podcast/pipeline.py
  • surfsense_local/backend/worker/studio/media/audio/podcast/prompts/draft/capable.md
  • surfsense_local/backend/worker/studio/media/audio/podcast/prompts/draft/compact.md
  • surfsense_local/backend/worker/studio/media/audio/podcast/prompts/draft/frontier.md
  • surfsense_local/backend/worker/studio/media/audio/podcast/prompts/outline/capable.md
  • surfsense_local/backend/worker/studio/media/audio/podcast/prompts/outline/compact.md
  • surfsense_local/backend/worker/studio/media/audio/podcast/prompts/outline/frontier.md
  • surfsense_local/backend/worker/studio/media/audio/podcast/roster.py
  • surfsense_local/backend/worker/studio/media/image.py
  • surfsense_local/backend/worker/studio/media/podcast/__init__.py
  • surfsense_local/backend/worker/studio/media/podcast/tts.py
  • surfsense_local/backend/worker/studio/media/visual/__init__.py
  • surfsense_local/backend/worker/studio/media/visual/image/__init__.py
  • surfsense_local/backend/worker/studio/media/visual/image/pipeline.py
  • surfsense_local/backend/worker/studio/media/visual/image/prompts/capable.md
  • surfsense_local/backend/worker/studio/media/visual/image/prompts/compact.md
  • surfsense_local/backend/worker/studio/media/visual/image/prompts/frontier.md
  • surfsense_local/backend/worker/studio/media/visual/infographic/__init__.py
  • surfsense_local/backend/worker/studio/media/visual/infographic/pipeline.py
  • surfsense_local/backend/worker/studio/media/visual/infographic/prompts/capable.md
  • surfsense_local/backend/worker/studio/media/visual/infographic/prompts/compact.md
  • surfsense_local/backend/worker/studio/media/visual/infographic/prompts/frontier.md
  • surfsense_local/backend/worker/studio/office/__init__.py
  • surfsense_local/backend/worker/studio/office/pipeline.py
  • surfsense_local/backend/worker/studio/office/prompt.py
  • surfsense_local/backend/worker/studio/office/prompts/capable.md
  • surfsense_local/backend/worker/studio/office/prompts/compact.md
  • surfsense_local/backend/worker/studio/office/prompts/frontier.md
  • surfsense_local/backend/worker/studio/pipeline.py
  • surfsense_local/backend/worker/studio/shared/__init__.py
  • surfsense_local/backend/worker/studio/shared/artifact.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/studio/shared/text.py
  • surfsense_local/backend/worker/studio/web/__init__.py
  • surfsense_local/backend/worker/studio/web/html/__init__.py
  • surfsense_local/backend/worker/studio/web/html/pipeline.py
  • surfsense_local/backend/worker/studio/web/html/prompts/capable.md
  • surfsense_local/backend/worker/studio/web/html/prompts/compact.md
  • surfsense_local/backend/worker/studio/web/html/prompts/frontier.md
  • surfsense_local/electron/.gitignore
  • surfsense_local/electron/build/icon.icns
  • surfsense_local/electron/electron-builder.yml
  • surfsense_local/electron/package.json
  • surfsense_local/electron/pnpm-workspace.yaml
  • surfsense_local/electron/scripts/electron-dev.mjs
  • surfsense_local/electron/scripts/fetch-llmfit.mjs
  • surfsense_local/electron/scripts/fetch-ollama.mjs
  • surfsense_local/electron/scripts/fetch-sdcpp.mjs
  • surfsense_local/electron/src/main/document-files.test.mts
  • surfsense_local/electron/src/main/document-files.test.ts
  • surfsense_local/electron/src/main/document-files.ts
  • surfsense_local/electron/src/main/index.ts
  • surfsense_local/electron/src/main/secret.test.ts
  • surfsense_local/electron/src/main/secret.ts
  • surfsense_local/electron/src/main/sidecars/python.ts
  • surfsense_local/electron/src/main/sidecars/sdcpp.ts
  • surfsense_local/electron/src/main/sidecars/supervisor.ts
  • surfsense_local/electron/src/main/sidecars/types.ts
  • surfsense_local/electron/src/main/theme-prefs.ts
  • surfsense_local/electron/src/main/updater.test.ts
  • surfsense_local/electron/src/main/updater.ts
  • surfsense_local/electron/src/preload/index.ts
  • surfsense_local/frontend/index.html
  • surfsense_local/frontend/package.json
  • surfsense_local/frontend/src/app/app-bootstrap.test.tsx
  • surfsense_local/frontend/src/components/relative-time.tsx
  • surfsense_local/frontend/src/components/theme-provider.tsx
  • surfsense_local/frontend/src/components/ui/alert.tsx
  • surfsense_local/frontend/src/components/ui/button.tsx
  • surfsense_local/frontend/src/components/ui/combobox.tsx
  • surfsense_local/frontend/src/components/ui/detail-panel.tsx
  • surfsense_local/frontend/src/components/ui/icons.tsx
  • surfsense_local/frontend/src/components/ui/input-group.tsx
  • surfsense_local/frontend/src/components/ui/progress.tsx
  • surfsense_local/frontend/src/components/ui/scroll-shadow.tsx
  • surfsense_local/frontend/src/components/ui/select.tsx
  • surfsense_local/frontend/src/components/ui/sonner.tsx
  • surfsense_local/frontend/src/features/chat/api.ts
  • 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/chats-dialog.test.tsx
  • surfsense_local/frontend/src/features/chat/chats-dialog.tsx
  • surfsense_local/frontend/src/features/chat/message.tsx
  • surfsense_local/frontend/src/features/chat/model-picker.test.tsx
  • surfsense_local/frontend/src/features/chat/model-picker.tsx
  • surfsense_local/frontend/src/features/chat/sse.ts
  • surfsense_local/frontend/src/features/chat/thread-list.test.tsx
  • surfsense_local/frontend/src/features/chat/thread-list.tsx
  • 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.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/dashboard/right-panel.tsx
  • surfsense_local/frontend/src/features/dashboard/sidebar-footer.test.tsx
  • surfsense_local/frontend/src/features/dashboard/sidebar-footer.tsx
  • surfsense_local/frontend/src/features/egress/api.ts
  • surfsense_local/frontend/src/features/egress/egress-prompt.test.tsx
  • surfsense_local/frontend/src/features/egress/egress-prompt.tsx
  • surfsense_local/frontend/src/features/egress/network-settings.test.tsx
  • surfsense_local/frontend/src/features/egress/network-settings.tsx
  • 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/use-license.ts
  • surfsense_local/frontend/src/features/model-catalog/api.ts
  • surfsense_local/frontend/src/features/model-catalog/local-image-model.tsx
  • surfsense_local/frontend/src/features/model-catalog/model-card.tsx
  • surfsense_local/frontend/src/features/model-catalog/model-catalog-page.tsx
  • surfsense_local/frontend/src/features/model-catalog/model-catalog.test.tsx
  • surfsense_local/frontend/src/features/model-selection/api.ts
  • surfsense_local/frontend/src/features/model-selection/connection-card.tsx
  • surfsense_local/frontend/src/features/model-selection/connection-form.tsx
  • surfsense_local/frontend/src/features/model-selection/model-list.tsx
  • surfsense_local/frontend/src/features/model-selection/model-selection-content.tsx
  • surfsense_local/frontend/src/features/model-selection/openai-compatible-panel.test.tsx
  • surfsense_local/frontend/src/features/model-selection/openai-compatible-panel.tsx
  • surfsense_local/frontend/src/features/model-selection/selected-roles.tsx
  • surfsense_local/frontend/src/features/model-selection/use-model-selection.ts
  • surfsense_local/frontend/src/features/onboarding/onboarding-dither-background.webp
  • surfsense_local/frontend/src/features/onboarding/onboarding-dither-shader.ts
  • surfsense_local/frontend/src/features/onboarding/onboarding-dither.tsx
  • surfsense_local/frontend/src/features/onboarding/onboarding-page.test.tsx
  • surfsense_local/frontend/src/features/onboarding/onboarding-page.tsx
  • surfsense_local/frontend/src/features/settings/models-settings.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/sources/api.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/use-sources.ts
  • surfsense_local/frontend/src/features/studio/api.ts
  • surfsense_local/frontend/src/features/studio/artifact-list.test.tsx
  • surfsense_local/frontend/src/features/studio/artifact-list.tsx
  • 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-formats.ts
  • 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/document-viewer.tsx
  • surfsense_local/frontend/src/features/studio/viewers/docx-viewer.tsx
  • surfsense_local/frontend/src/features/studio/viewers/flashcards/card-order.ts
  • surfsense_local/frontend/src/features/studio/viewers/flashcards/flashcard-surface.tsx
  • surfsense_local/frontend/src/features/studio/viewers/flashcards/flashcards-viewer.test.tsx
  • surfsense_local/frontend/src/features/studio/viewers/flashcards/flashcards-viewer.tsx
  • surfsense_local/frontend/src/features/studio/viewers/flashcards/state.ts
  • surfsense_local/frontend/src/features/studio/viewers/html-viewer.tsx
  • surfsense_local/frontend/src/features/studio/viewers/media-viewer.tsx
  • surfsense_local/frontend/src/features/studio/viewers/mindmap-viewer.test.tsx
  • surfsense_local/frontend/src/features/studio/viewers/mindmap-viewer.tsx
  • surfsense_local/frontend/src/features/studio/viewers/parse-study-text.ts
  • surfsense_local/frontend/src/features/studio/viewers/parse-workbook.test.ts
  • surfsense_local/frontend/src/features/studio/viewers/parse-workbook.ts
  • surfsense_local/frontend/src/features/studio/viewers/pdf-viewer.tsx
  • surfsense_local/frontend/src/features/studio/viewers/podcast-viewer.tsx
  • surfsense_local/frontend/src/features/studio/viewers/pptx-viewer.tsx
  • surfsense_local/frontend/src/features/studio/viewers/quiz/quiz-viewer.test.tsx
  • surfsense_local/frontend/src/features/studio/viewers/quiz/quiz-viewer.tsx
  • surfsense_local/frontend/src/features/studio/viewers/quiz/review-screen.tsx
  • surfsense_local/frontend/src/features/studio/viewers/quiz/score-screen.tsx
  • surfsense_local/frontend/src/features/studio/viewers/quiz/state.ts
  • surfsense_local/frontend/src/features/studio/viewers/registry.tsx
  • surfsense_local/frontend/src/features/studio/viewers/streamdown-config.ts
  • surfsense_local/frontend/src/features/studio/viewers/study-text.test.tsx
  • surfsense_local/frontend/src/features/studio/viewers/study-text.tsx
  • surfsense_local/frontend/src/features/studio/viewers/summary-viewer.tsx
  • surfsense_local/frontend/src/features/studio/viewers/viewer-layout.ts
  • surfsense_local/frontend/src/features/studio/viewers/xlsx-viewer.tsx
  • surfsense_local/frontend/src/features/updates/stub-bridge.ts
  • surfsense_local/frontend/src/features/updates/update-settings.test.tsx
  • surfsense_local/frontend/src/features/updates/update-settings.tsx
  • surfsense_local/frontend/src/features/updates/use-update-state.ts
  • surfsense_local/frontend/src/features/workspaces/workspace-rail.tsx
  • surfsense_local/frontend/src/hooks/use-modifier-held.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/test-utils.tsx
  • surfsense_local/scripts/bump-version.sh
  • surfsense_mcp/AGENTS.md
  • surfsense_obsidian/.editorconfig
  • surfsense_obsidian/.gitignore
  • surfsense_obsidian/.npmrc
  • surfsense_obsidian/AGENTS.md
  • surfsense_obsidian/LICENSE
  • surfsense_obsidian/README.md
  • surfsense_obsidian/esbuild.config.mjs
  • surfsense_obsidian/eslint.config.mts
  • surfsense_obsidian/manifest.json
  • surfsense_obsidian/package.json
  • surfsense_obsidian/pnpm-workspace.yaml
  • surfsense_obsidian/src/api-client.ts
  • surfsense_obsidian/src/attachments-confirm-modal.ts
  • surfsense_obsidian/src/excludes.ts
  • surfsense_obsidian/src/folder-suggest-modal.ts
  • surfsense_obsidian/src/main.ts
  • surfsense_obsidian/src/payload.ts
  • surfsense_obsidian/src/queue.ts
  • surfsense_obsidian/src/settings.ts
  • surfsense_obsidian/src/status-bar.ts
  • surfsense_obsidian/src/status-modal.ts
  • surfsense_obsidian/src/status-visuals.ts
  • surfsense_obsidian/src/sync-engine.ts
  • surfsense_obsidian/src/types.ts
  • surfsense_obsidian/src/vault-identity.ts
  • surfsense_obsidian/styles.css
  • surfsense_obsidian/tsconfig.json
  • surfsense_obsidian/version-bump.mjs
  • surfsense_obsidian/versions.json
  • surfsense_web/.cursorrules
  • surfsense_web/.cursorrules
  • surfsense_web/.env.example
  • surfsense_web/AGENTS.md
  • surfsense_web/README.md
  • surfsense_web/app/(home)/announcements/page.tsx
  • surfsense_web/app/(home)/blog/[slug]/loading.tsx
  • surfsense_web/app/(home)/blog/[slug]/page.tsx
  • surfsense_web/app/(home)/blog/blog-magazine.tsx
  • surfsense_web/app/(home)/blog/loading.tsx
  • surfsense_web/app/(home)/connectors/page.tsx
  • surfsense_web/app/(home)/contact/page.tsx
  • surfsense_web/app/(home)/downloads/download-panels.tsx
  • surfsense_web/app/(home)/downloads/page.tsx
  • surfsense_web/app/(home)/external-mcp-connectors/page.tsx
  • surfsense_web/app/(home)/free/[model_slug]/loading.tsx
  • surfsense_web/app/(home)/free/[model_slug]/page.tsx
  • surfsense_web/app/(home)/free/layout.tsx
  • surfsense_web/app/(home)/free/loading.tsx
  • surfsense_web/app/(home)/free/page.tsx
  • surfsense_web/app/(home)/home.css
  • surfsense_web/app/(home)/layout.tsx
  • surfsense_web/app/(home)/license/activate/page.tsx
  • surfsense_web/app/(home)/license/license-forms.tsx
  • surfsense_web/app/(home)/license/page.tsx
  • surfsense_web/app/(home)/license/success/license-download.tsx
  • surfsense_web/app/(home)/license/success/page.tsx
  • surfsense_web/app/(home)/login/GoogleLoginButton.tsx
  • surfsense_web/app/(home)/login/LocalLoginForm.tsx
  • surfsense_web/app/(home)/login/page.tsx
  • surfsense_web/app/(home)/mcp-server/page.tsx
  • surfsense_web/app/(home)/page.tsx
  • surfsense_web/app/(home)/plugins/page.tsx
  • surfsense_web/app/(home)/pricing/page.tsx
  • surfsense_web/app/(home)/privacy/page.tsx
  • surfsense_web/app/(home)/private-ai-for-business/page.tsx
  • surfsense_web/app/(home)/sunset/layout.tsx
  • surfsense_web/app/(home)/sunset/page.tsx
  • surfsense_web/app/(home)/sunset/sunset-export.tsx
  • surfsense_web/app/(home)/terms/page.tsx
  • surfsense_web/app/api/contact/route.ts
  • surfsense_web/app/db/index.ts
  • surfsense_web/app/db/schema.ts
  • surfsense_web/app/globals.css
  • surfsense_web/app/layout.config.tsx
  • surfsense_web/app/layout.tsx
  • surfsense_web/app/sitemap.ts
  • surfsense_web/components/ads/ad-unit.tsx
  • surfsense_web/components/ads/adsense-config.ts
  • surfsense_web/components/ads/adsense-script.tsx
  • surfsense_web/components/assistant-ui/connector-popup/connect-forms/components/github-connect-form.tsx
  • surfsense_web/components/assistant-ui/connector-popup/connector-configs/components/obsidian-config.tsx
  • surfsense_web/components/connectors-marketing/agent-transcript.tsx
  • surfsense_web/components/connectors-marketing/api-mcp-tabs.tsx
  • surfsense_web/components/connectors-marketing/connector-page.tsx
  • surfsense_web/components/contact/contact-content.ts
  • surfsense_web/components/contact/contact-form.tsx
  • surfsense_web/components/contact/contact-sections.tsx
  • surfsense_web/components/free-chat/free-chat-page.tsx
  • surfsense_web/components/free-chat/remove-ads-banner.tsx
  • surfsense_web/components/homepage/community-strip.tsx
  • surfsense_web/components/homepage/connector-grid.tsx
  • surfsense_web/components/homepage/footer-new.tsx
  • surfsense_web/components/homepage/hero-chat-demo.tsx
  • surfsense_web/components/homepage/hero-section.tsx
  • surfsense_web/components/homepage/home/home-artifact-illustration.tsx
  • surfsense_web/components/homepage/home/home-button.tsx
  • surfsense_web/components/homepage/home/home-content.ts
  • surfsense_web/components/homepage/home/home-features-tabs.tsx
  • surfsense_web/components/homepage/home/home-format-cell.tsx
  • surfsense_web/components/homepage/home/home-hero-dither-shader.ts
  • surfsense_web/components/homepage/home/home-hero-dither.tsx
  • surfsense_web/components/homepage/home/home-logos.tsx
  • surfsense_web/components/homepage/home/home-questions.tsx
  • surfsense_web/components/homepage/home/home-sections.tsx
  • surfsense_web/components/homepage/logo-cloud.tsx
  • surfsense_web/components/homepage/navbar.tsx
  • surfsense_web/components/homepage/persona-paths.tsx
  • surfsense_web/components/homepage/social-proof.tsx
  • surfsense_web/components/homepage/top-announcement-bar.tsx
  • surfsense_web/components/homepage/use-cases.tsx
  • surfsense_web/components/pricing.tsx
  • surfsense_web/components/pricing/platforms-tooltip.tsx
  • surfsense_web/components/pricing/pricing-content.ts
  • surfsense_web/components/pricing/pricing-section.tsx
  • surfsense_web/components/pricing/pricing-sections.tsx
  • surfsense_web/components/seo/breadcrumb-nav.tsx
  • surfsense_web/components/site/github-stars.ts
  • surfsense_web/components/site/guide-steps.tsx
  • surfsense_web/components/site/site-content.ts
  • surfsense_web/components/site/site-footer-glass.tsx
  • surfsense_web/components/site/site-footer.tsx
  • surfsense_web/components/site/site-nav.tsx
  • surfsense_web/components/site/site-shell.tsx
  • surfsense_web/components/site/site-stars.tsx
  • surfsense_web/components/theme/theme-toggle.tsx
  • surfsense_web/components/ui/canvas-reveal-effect.tsx
  • surfsense_web/components/ui/card-spotlight.tsx
  • surfsense_web/components/ui/changelog-timeline.tsx
  • surfsense_web/components/ui/flow-button.tsx
  • surfsense_web/components/ui/icons.tsx
  • surfsense_web/content/docs/connectors/deprecated/web-crawler.mdx
  • surfsense_web/content/docs/connectors/external/index.mdx
  • surfsense_web/content/docs/connectors/index.mdx
  • surfsense_web/content/docs/connectors/native/index.mdx
  • surfsense_web/content/docs/docker-installation/index.mdx
  • surfsense_web/content/docs/how-to/index.mdx
  • surfsense_web/content/docs/index.mdx
  • surfsense_web/content/docs/legacy/code-of-conduct.mdx
  • surfsense_web/content/docs/legacy/connectors/deprecated/baidu-search.mdx
  • surfsense_web/content/docs/legacy/connectors/deprecated/discord.mdx
  • surfsense_web/content/docs/legacy/connectors/deprecated/elasticsearch.mdx
  • surfsense_web/content/docs/legacy/connectors/deprecated/luma.mdx
  • surfsense_web/content/docs/legacy/connectors/deprecated/meta.json
  • surfsense_web/content/docs/legacy/connectors/deprecated/microsoft-teams.mdx
  • surfsense_web/content/docs/legacy/connectors/deprecated/web-crawler.mdx
  • surfsense_web/content/docs/legacy/connectors/external/airtable.mdx
  • surfsense_web/content/docs/legacy/connectors/external/bookstack.mdx
  • surfsense_web/content/docs/legacy/connectors/external/circleback.mdx
  • surfsense_web/content/docs/legacy/connectors/external/dropbox.mdx
  • surfsense_web/content/docs/legacy/connectors/external/github.mdx
  • surfsense_web/content/docs/legacy/connectors/external/google.mdx
  • surfsense_web/content/docs/legacy/connectors/external/index.mdx
  • surfsense_web/content/docs/legacy/connectors/external/meta.json
  • surfsense_web/content/docs/legacy/connectors/external/obsidian.mdx
  • surfsense_web/content/docs/legacy/connectors/external/onedrive.mdx
  • surfsense_web/content/docs/legacy/connectors/external/slack.mdx
  • surfsense_web/content/docs/legacy/connectors/index.mdx
  • surfsense_web/content/docs/legacy/connectors/meta.json
  • surfsense_web/content/docs/legacy/connectors/native/amazon.mdx
  • surfsense_web/content/docs/legacy/connectors/native/google-maps.mdx
  • surfsense_web/content/docs/legacy/connectors/native/google-search.mdx
  • surfsense_web/content/docs/legacy/connectors/native/indeed.mdx
  • surfsense_web/content/docs/legacy/connectors/native/index.mdx
  • surfsense_web/content/docs/legacy/connectors/native/instagram.mdx
  • surfsense_web/content/docs/legacy/connectors/native/meta.json
  • surfsense_web/content/docs/legacy/connectors/native/reddit.mdx
  • surfsense_web/content/docs/legacy/connectors/native/tiktok.mdx
  • surfsense_web/content/docs/legacy/connectors/native/walmart.mdx
  • surfsense_web/content/docs/legacy/connectors/native/web-crawl.mdx
  • surfsense_web/content/docs/legacy/connectors/native/youtube.mdx
  • surfsense_web/content/docs/legacy/docker-installation/index.mdx
  • surfsense_web/content/docs/legacy/docker-installation/meta.json
  • surfsense_web/content/docs/legacy/docker-installation/updating.mdx
  • surfsense_web/content/docs/legacy/how-to/index.mdx
  • surfsense_web/content/docs/legacy/how-to/mcp-server.mdx
  • surfsense_web/content/docs/legacy/how-to/meta.json
  • surfsense_web/content/docs/legacy/how-to/realtime-collaboration.mdx
  • surfsense_web/content/docs/legacy/how-to/web-search.mdx
  • surfsense_web/content/docs/legacy/how-to/zero-sync.mdx
  • surfsense_web/content/docs/legacy/index.mdx
  • surfsense_web/content/docs/legacy/installation.mdx
  • surfsense_web/content/docs/legacy/local-models/index.mdx
  • surfsense_web/content/docs/legacy/local-models/lm-studio.mdx
  • surfsense_web/content/docs/legacy/local-models/meta.json
  • surfsense_web/content/docs/legacy/local-models/ollama.mdx
  • surfsense_web/content/docs/legacy/local-models/other-local-servers.mdx
  • surfsense_web/content/docs/legacy/manual-installation.mdx
  • surfsense_web/content/docs/legacy/messaging-channels/discord.mdx
  • surfsense_web/content/docs/legacy/messaging-channels/docker.mdx
  • surfsense_web/content/docs/legacy/messaging-channels/index.mdx
  • surfsense_web/content/docs/legacy/messaging-channels/meta.json
  • surfsense_web/content/docs/legacy/messaging-channels/slack.mdx
  • surfsense_web/content/docs/legacy/messaging-channels/telegram.mdx
  • surfsense_web/content/docs/legacy/messaging-channels/troubleshooting.mdx
  • surfsense_web/content/docs/legacy/messaging-channels/whatsapp.mdx
  • surfsense_web/content/docs/legacy/meta.json
  • surfsense_web/content/docs/legacy/observability.mdx
  • surfsense_web/content/docs/legacy/testing.mdx
  • surfsense_web/content/docs/local-models/index.mdx
  • surfsense_web/content/docs/messaging-channels/index.mdx
  • surfsense_web/content/docs/meta.json
  • surfsense_web/content/docs/v2/index.mdx
  • surfsense_web/content/docs/v2/meta.json
  • surfsense_web/drizzle.config.ts
  • surfsense_web/lib/app-release.ts
  • surfsense_web/lib/auth-utils.ts
  • surfsense_web/lib/desktop-download-utils.ts
  • surfsense_web/lib/docs-redirects.ts
  • surfsense_web/lib/env-config.ts
  • surfsense_web/lib/free-models.test.ts
  • surfsense_web/lib/free-models.ts
  • surfsense_web/lib/public-routes.ts
  • surfsense_web/lib/release-assets.ts
  • surfsense_web/lib/sunset.ts
  • surfsense_web/next.config.ts
  • surfsense_web/package.json
  • surfsense_web/proxy.ts
  • surfsense_web/public/homepage/cta-dither-background.webp
  • surfsense_web/scripts/capture-guide-shots.mjs
  • surfsense_web/tests/unit/docs-redirects.test.ts
  • surfsense_web/tests/unit/sunset-redirect.test.ts
  • versions.json

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

@CREDO23
CREDO23 merged commit a3c7822 into main Sep 18, 2026
6 of 11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants