Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
248 changes: 138 additions & 110 deletions README.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/agentic-search.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ A deep dive into Thuki's agentic RAG search pipeline: how retrieval-augmented ge

## Setup

> **Roadmap:** First-class, out-of-box `/search` support (bundled native sidecars or pre-built container images shipped with the app) is planned. Today, enabling `/search` requires cloning this repository to run the local Docker services described below. Track progress and contribute in the project's [GitHub issues](https://github.com/quiet-node/thuki/issues).
> **Roadmap:** First-class, out-of-box `/search` support (bundled native sidecars or pre-built container images shipped with the app) is planned. Today, enabling `/search` requires cloning this repository to run the local Docker services described below. Track it in [#257](https://github.com/quiet-node/thuki/issues/257).

The `/search` command depends on two local Docker containers: a **SearXNG** meta-search engine and a **Trafilatura** reader. Both run on `127.0.0.1` only, so every query and every fetched page stays on your machine.

Expand Down
2 changes: 1 addition & 1 deletion docs/commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ This means you can highlight text anywhere on screen, summon Thuki with double-t

## Image input on text-only models

`/extract`, `/tldr`, `/translate`, `/rewrite`, `/refine`, `/bullets`, `/todos`, and `/explain` read attached images locally via macOS Vision OCR, so they work even when the active model has no vision capability. Only plain submits and `/screen` alone require a vision model to read images. See [OCR-supported commands](./ocr-commands.md) for the full list and details.
`/extract`, `/tldr`, `/translate`, `/rewrite`, `/refine`, `/bullets`, `/todos`, and `/explain` pull the text out of attached images locally via macOS Vision OCR, so they work even when the active model has no vision capability. They read text, not scenes: describing a textless image still needs a vision model. Only plain submits and `/screen` alone send the image itself to the model. See [OCR-supported commands](./ocr-commands.md) for the full list and details.

## /search

Expand Down
2 changes: 2 additions & 0 deletions sandbox/search-box/reader/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

Trafilatura-based URL-to-markdown extractor. Second stop of Thuki's agentic `/search` pipeline.

> **Roadmap:** This Docker service is the interim way to run `/search`. A first-class, out-of-box `/search` bundled with the app (no Docker to run yourself) is planned. See [Setup](../../../docs/agentic-search.md#setup).

## What it does

Takes a URL, fetches the page, strips boilerplate (navigation, ads, footers, cookie banners), and returns clean markdown the synthesis LLM can cite against.
Expand Down
2 changes: 2 additions & 0 deletions sandbox/search-box/searxng/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

Self-hosted, privacy-respecting meta-search engine. First stop of Thuki's `/search` pipeline.

> **Roadmap:** This Docker service is the interim way to run `/search`. A first-class, out-of-box `/search` bundled with the app (no Docker to run yourself) is planned. See [Setup](../../../docs/agentic-search.md#setup).

## What it does

SearXNG aggregates results from 70+ upstream engines (Google, Bing, DuckDuckGo, Brave, Wikipedia, Stack Overflow, GitHub, arXiv, etc.) and returns a unified JSON result set. Our instance is:
Expand Down
2 changes: 1 addition & 1 deletion src/config/commandArtifacts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ export function renderCommandsMarkdown(): string {
'',
'## Image input on text-only models',
'',
'`/extract`, `/tldr`, `/translate`, `/rewrite`, `/refine`, `/bullets`, `/todos`, and `/explain` read attached images locally via macOS Vision OCR, so they work even when the active model has no vision capability. Only plain submits and `/screen` alone require a vision model to read images. See [OCR-supported commands](./ocr-commands.md) for the full list and details.',
'`/extract`, `/tldr`, `/translate`, `/rewrite`, `/refine`, `/bullets`, `/todos`, and `/explain` pull the text out of attached images locally via macOS Vision OCR, so they work even when the active model has no vision capability. They read text, not scenes: describing a textless image still needs a vision model. Only plain submits and `/screen` alone send the image itself to the model. See [OCR-supported commands](./ocr-commands.md) for the full list and details.',
'',
...COMMANDS.flatMap((command, index) => {
const section = renderDocsSection(command);
Expand Down
2 changes: 1 addition & 1 deletion src/config/tips.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ export const TIPS: readonly Tip[] = [
'Use /screen to snap your display and attach it to the chat for visual context',
'Use /extract to extract any text from images or screenshots',
{
text: 'OCR-supported commands (/extract, /translate, etc.) read images locally: no vision model needed ↗',
text: 'OCR-supported commands (/extract, /translate, etc.) read text in images locally: no vision model needed ↗',
url: 'https://github.com/quiet-node/thuki/blob/main/docs/ocr-commands.md',
},
'Highlight text in any app before summoning Thuki to include it as context',
Expand Down
9 changes: 5 additions & 4 deletions src/view/onboarding/SubscribeStep.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -230,9 +230,10 @@ export function SubscribeStep({ onContinue, downloadStatus }: Props) {
))}
</div>

{/* Free + local guarantee, capping the roadmap. It applies to the list
specifically (voice and meeting notes are paid, cloud features
elsewhere) and is the only product-local line on this screen, so it
{/* Local-first ethos line, capping the roadmap. It states how Thuki is
built today rather than promising a delivery model for the unshipped
roadmap items above, whose pricing and where they run are not yet
decided. It is the only product-local line on this screen, so it
repeats neither the subtitle nor the email trust line below. */}
<p
style={{
Expand All @@ -243,7 +244,7 @@ export function SubscribeStep({ onContinue, downloadStatus }: Props) {
margin: '0 0 12px',
}}
>
All free. All local. Nothing ever leaves your Mac.
Local-first, always. Your conversations stay on your Mac.
</p>

{/* Divider */}
Expand Down
6 changes: 4 additions & 2 deletions src/view/onboarding/__tests__/SubscribeStep.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,12 @@ describe('SubscribeStep', () => {
).toBeInTheDocument();
});

it('states the free and local guarantee under the roadmap', () => {
it('states the local-first ethos line under the roadmap', () => {
render(<SubscribeStep onContinue={vi.fn()} />);
expect(
screen.getByText('All free. All local. Nothing ever leaves your Mac.'),
screen.getByText(
'Local-first, always. Your conversations stay on your Mac.',
),
).toBeInTheDocument();
});

Expand Down
Loading