diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1b1c33c8..926b5db0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -50,6 +50,9 @@ jobs: - name: Vite build check run: pnpm build + - name: Docs build check + run: pnpm docs:build + # ── 1. Coverage-backed tests ────────────────────────────────────────── # The coverage command runs the canonical frontend test suite. - name: Bundle MCP server resources (required by Tauri build) diff --git a/.github/workflows/release-stable.yml b/.github/workflows/release-stable.yml index d41725df..9eae918c 100644 --- a/.github/workflows/release-stable.yml +++ b/.github/workflows/release-stable.yml @@ -725,10 +725,10 @@ jobs: stable-latest.json # ───────────────────────────────────────────────────────────── - # Phase 4: Update GitHub Pages + # Phase 4: Update GitHub Pages with docs, release history, and download assets # ───────────────────────────────────────────────────────────── pages: - name: Update release history page + name: Update docs and release pages needs: [version, release] runs-on: ubuntu-latest permissions: @@ -739,16 +739,32 @@ jobs: steps: - uses: actions/checkout@v4 + - name: Setup pnpm + uses: pnpm/action-setup@v4 + with: + version: 10 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '22' + cache: 'pnpm' + - name: Setup Bun uses: oven-sh/setup-bun@v2 with: bun-version: latest - - name: Build release history page + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Build docs and release pages env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | + VITEPRESS_BASE="/${GITHUB_REPOSITORY#*/}/" pnpm docs:build mkdir -p _site/alpha _site/stable _site/release-notes + cp -R site/.vitepress/dist/. _site/ if [ -d release-notes ]; then cp release-notes/*.md _site/release-notes/ 2>/dev/null || true; fi gh api -H "Accept: application/vnd.github.html+json" repos/${{ github.repository }}/releases --paginate > _site/releases.json PAGES_URL="https://refactoringhq.github.io/${GITHUB_REPOSITORY#*/}" @@ -756,7 +772,7 @@ jobs: curl -fsSL "${PAGES_URL}/alpha/latest.json" -o _site/alpha/latest.json || echo '{}' > _site/alpha/latest.json gh release download --repo ${{ github.repository }} "${{ needs.version.outputs.tag }}" --pattern "stable-latest.json" --output _site/stable/latest.json || echo '{}' > _site/stable/latest.json bun scripts/build-release-download-page.ts --latest-json _site/stable/latest.json --releases-json _site/releases.json --output-file _site/stable/download/index.html - bun scripts/build-release-history-page.ts --releases-json _site/releases.json --output-file _site/index.html + bun scripts/build-release-history-page.ts --releases-json _site/releases.json --output-file _site/releases/index.html mkdir -p _site/download cp _site/stable/download/index.html _site/download/index.html diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2c65f30c..c2273395 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -766,10 +766,10 @@ jobs: alpha-latest.json # ───────────────────────────────────────────────────────────── - # Phase 4: Update GitHub Pages with release history + # Phase 4: Update GitHub Pages with docs, release history, and download assets # ───────────────────────────────────────────────────────────── pages: - name: Update release history page + name: Update docs and release pages needs: [version, release] runs-on: ubuntu-latest permissions: @@ -780,16 +780,32 @@ jobs: steps: - uses: actions/checkout@v4 + - name: Setup pnpm + uses: pnpm/action-setup@v4 + with: + version: 10 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '22' + cache: 'pnpm' + - name: Setup Bun uses: oven-sh/setup-bun@v2 with: bun-version: latest - - name: Build release history page + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Build docs and release pages env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | + VITEPRESS_BASE="/${GITHUB_REPOSITORY#*/}/" pnpm docs:build mkdir -p _site/alpha _site/stable _site/release-notes + cp -R site/.vitepress/dist/. _site/ if [ -d release-notes ]; then cp release-notes/*.md _site/release-notes/ 2>/dev/null || true; fi gh api -H "Accept: application/vnd.github.html+json" repos/${{ github.repository }}/releases --paginate > _site/releases.json PAGES_URL="https://refactoringhq.github.io/${GITHUB_REPOSITORY#*/}" @@ -797,7 +813,7 @@ jobs: gh release download --repo ${{ github.repository }} "${{ needs.version.outputs.tag }}" --pattern "alpha-latest.json" --output _site/alpha/latest.json || echo '{}' > _site/alpha/latest.json curl -fsSL "${PAGES_URL}/stable/latest.json" -o _site/stable/latest.json || echo '{}' > _site/stable/latest.json bun scripts/build-release-download-page.ts --latest-json _site/stable/latest.json --releases-json _site/releases.json --output-file _site/stable/download/index.html - bun scripts/build-release-history-page.ts --releases-json _site/releases.json --output-file _site/index.html + bun scripts/build-release-history-page.ts --releases-json _site/releases.json --output-file _site/releases/index.html mkdir -p _site/download cp _site/stable/download/index.html _site/download/index.html diff --git a/.gitignore b/.gitignore index 74c7a971..a89e22a0 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,9 @@ lerna-debug.log* node_modules dist dist-ssr +site/.vitepress/cache/ +site/.vitepress/dist/ +_site/ *.local # Editor directories and files @@ -42,7 +45,7 @@ final_selection.py src-tauri/target # Generated mcp-server bundle (built by scripts/bundle-mcp-server.mjs) -src-tauri/resources/ +src-tauri/resources/mcp-server/ # Python cache __pycache__/ diff --git a/README.md b/README.md index 35d51c5b..a2df9f85 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,8 @@ Download the [latest release here](https://refactoringhq.github.io/tolaria/downl When you open Tolaria for the first time you get the chance of cloning the [getting started vault](https://github.com/refactoringhq/tolaria-getting-started) — which gives you a walkthrough of the whole app. +The public user docs live in [`site/`](site/) and are published to GitHub Pages. Start with [Install Tolaria](site/start/install.md), then [First Launch](site/start/first-launch.md). + ## Open source and local setup Tolaria is open source and built with Tauri, React, and TypeScript. If you want to run or contribute to the app locally, here is [how to get started](https://github.com/refactoringhq/tolaria/blob/main/docs/GETTING-STARTED.md). You can also find the gist below 👇 diff --git a/docs/ABSTRACTIONS.md b/docs/ABSTRACTIONS.md index 5f563742..9e8b7ed9 100644 --- a/docs/ABSTRACTIONS.md +++ b/docs/ABSTRACTIONS.md @@ -4,7 +4,7 @@ Key abstractions and domain models in Tolaria. ## Design Philosophy -Tolaria's abstractions follow the **convention over configuration** principle: standard field names and folder structures have well-defined meanings and trigger UI behavior automatically. This makes vaults legible both to humans and to AI agents — the more a vault follows conventions, the less custom configuration an AI needs to navigate it correctly. +Tolaria's abstractions follow the **convention over configuration** principle: standard field names, types, and relationships have well-defined meanings and trigger UI behavior automatically. This makes vaults legible both to humans and to AI agents — the more a vault follows conventions, the less custom configuration an AI needs to navigate it correctly. The full set of design principles is documented in [ARCHITECTURE.md](./ARCHITECTURE.md#design-principles). @@ -751,6 +751,11 @@ Tolaria tracks managed vault-level AI guidance separately from normal note conte - `restore_vault_ai_guidance` repairs only Tolaria-managed files and creates the optional Gemini shim on explicit request; user-authored custom `AGENTS.md` / `CLAUDE.md` / `GEMINI.md` files are surfaced as custom and left untouched - The status bar AI badge and command palette consume that abstraction to expose restore actions only when the managed guidance is missing or broken +Vault guidance is intentionally short and vault-specific. General Tolaria product behavior is delivered through the bundled agent docs resource instead: +- `scripts/build-agent-docs.mjs` compiles the public `site/` Markdown into `src-tauri/resources/agent-docs/` +- `src-tauri/resources/agent-docs/AGENTS.md` orients agents to the generated docs bundle, while `index.md`, section bundles, `all.md`, `search-index.json`, and `pages/` provide fast local lookup +- `get_agent_docs_path` exposes the resolved resource folder to the renderer, and `buildAgentSystemPrompt()` tells every app-managed CLI agent to read vault `AGENTS.md` first, then search the bundled docs for Tolaria behavior + ### Getting Started / Onboarding `useOnboarding` hook detects first launch: diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index 4df903f5..c70a951b 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -246,7 +246,7 @@ Notes can be opened in separate Tauri windows for focused editing. Secondary win Full agent mode — spawns the selected local CLI agent as a subprocess with tool access and MCP vault integration. -1. **Frontend** (`AiPanel` + `useCliAiAgent` + `aiAgentSession.ts` + `aiAgents.ts` + `aiTargets.ts`) — one normalized session lifecycle for message state, reasoning blocks, tool action cards, response display, onboarding, default-target selection, and the per-vault Safe / Power User permission mode shown in the panel header for coding agents +1. **Frontend** (`AiPanel` + `useCliAiAgent` + `aiAgentSession.ts` + `aiAgents.ts` + `aiTargets.ts`) — one normalized session lifecycle for message state, reasoning blocks, tool action cards, response display, onboarding, default-target selection, bundled-docs prompt injection, and the per-vault Safe / Power User permission mode shown in the panel header for coding agents 2. **Backend orchestration** (`ai_agents.rs`) — normalizes agent availability, streaming, and the request permission mode before dispatching to per-agent adapters 3. **Shared runtime scaffold** (`cli_agent_runtime.rs`) — owns the common request shape, prompt wrapping, JSON-line subprocess lifecycle, normalized error/done handling, version probing, and Tolaria MCP server path resolution used by app-managed CLI agents 4. **Agent adapters** — Shared prompts are mode-aware on every turn, including turns with note context snapshots: Vault Safe tells agents not to use or advertise shell, while Power User tells shell-capable agents to keep local commands scoped to the active vault. Claude Code still uses `claude_cli.rs` with `acceptEdits`, strict Tolaria MCP config, and a scoped tool list: Safe enables file/search/edit tools only, while Power User adds Bash to the available tools and pre-approves Bash with `--allowedTools` without using dangerous bypass flags. Codex runtime specifics live in `codex_cli.rs`; Safe runs `codex --sandbox read-only --ask-for-approval untrusted exec --json`, while Power User runs `codex --sandbox workspace-write --ask-for-approval never exec --json` so shell execution stays enabled across repeated turns. OpenCode runs through `opencode run --format json` with transient permissions: Safe denies bash and external directories, while Power User allows bash but still denies external directories. Pi runs through `pi --mode json --no-session` with `npm:pi-mcp-adapter`; both modes currently share the same transient MCP config and the prompt does not promise shell for Pi Power User. Gemini runs through `gemini --output-format stream-json --prompt` so assistant message chunks, tool calls, and final errors are mapped from the CLI event stream instead of relying on a buffered `response` field. Gemini Safe uses `auto_edit` plus `tools.exclude=["run_shell_command"]`; Power User intentionally uses `yolo` against a trusted transient Tolaria MCP entry. Codex, OpenCode, Pi, and Gemini all launch from the active vault cwd with closed stdin and transient MCP config. All app-launched paths use hidden Windows launches and avoid dangerous permission-bypass flags. @@ -254,6 +254,8 @@ Full agent mode — spawns the selected local CLI agent as a subprocess with too CLI-agent availability intentionally does not depend only on the desktop app's inherited `PATH`. The detectors check the current process path, the user's login shell, and supported local/toolchain install locations such as native `~/.local/bin`, local `~/.claude/local`, Mise/asdf shims, nvm-managed Node installs, npm-global, Homebrew, Windows `%APPDATA%\npm`/pnpm/Scoop shims, Windows `.exe` launchers, and the macOS Codex app resource path so first-run onboarding works on fresh macOS and Windows installs. App-managed CLI spawns also expand the active vault path before using it as the subprocess working directory, then extend the child process `PATH` with the resolved binary directory plus those common toolchain directories, which lets GUI-launched macOS sessions run Homebrew/npm shims and their `node`-backed MCP subprocesses even when Finder/Dock did not inherit a terminal shell path. +CLI-agent system prompts also include a local Tolaria docs orientation when the bundled docs resource is present. `scripts/build-agent-docs.mjs` generates `src-tauri/resources/agent-docs/` from the public VitePress Markdown sources, including `index.md`, `AGENTS.md`, per-section bundles, `all.md`, `search-index.json`, and generated per-page files. Tauri bundles that folder as `agent-docs/`; `get_agent_docs_path` resolves the installed resource path, with a repository fallback for development, and `getAgentDocsPath()` caches it before each agent run. Agents are instructed to read the active vault's `AGENTS.md` for local conventions and search the bundled docs for Tolaria product behavior. + #### Agent Event Flow ```mermaid @@ -768,6 +770,7 @@ The vault backend (`src-tauri/src/vault/`) is split into focused submodules: | `stream_claude_chat` | Claude CLI chat mode (streaming) | | `check_claude_cli` | Check if Claude CLI is available | | `get_ai_agents_status` | Check Claude Code + Codex + OpenCode + Pi + Gemini availability | +| `get_agent_docs_path` | Resolve the bundled local Tolaria docs folder used in AI-agent system prompts | | `stream_ai_agent` | Stream Claude Code, Codex, OpenCode, Pi, or Gemini through the normalized agent event layer | | `register_mcp_tools` | Register MCP in Claude/Gemini/Cursor/generic config for the active vault | | `remove_mcp_tools` | Remove Tolaria's MCP entry from Claude/Gemini/Cursor/generic config | @@ -903,7 +906,8 @@ push to main → generate alpha-latest.json with darwin-aarch64, darwin-x86_64, Linux, and Windows updater URLs → publish GitHub prerelease alpha-vYYYY.M.D-alpha.NNNN named Tolaria Alpha YYYY.M.D.N → pages job: - → build static HTML release history page + → build VitePress public docs into the GitHub Pages root + → build static HTML release history page at /releases/ → publish alpha/latest.json → refresh latest.json + latest-canary.json as compatibility aliases to alpha → preserve stable/latest.json @@ -929,6 +933,8 @@ push stable-vYYYY.M.D tag → generate stable-latest.json with macOS Apple Silicon, macOS Intel, Linux, and Windows updater URLs plus platform-specific manual download URLs → publish GitHub release Tolaria YYYY.M.D → pages job: + → build VitePress public docs into the GitHub Pages root + → build static HTML release history page at /releases/ → publish stable/latest.json → publish stable/download/ and download/ as permanent download pages that keep the browser page visible while the platform installer starts → preserve alpha/latest.json diff --git a/docs/PUBLIC-DOCS-PLAN.md b/docs/PUBLIC-DOCS-PLAN.md new file mode 100644 index 00000000..f852ab2c --- /dev/null +++ b/docs/PUBLIC-DOCS-PLAN.md @@ -0,0 +1,47 @@ +# Public Docs Plan + +This document records the phase 1 information architecture for public Tolaria documentation. The public docs source lives in `site/`; the existing `docs/` directory remains contributor, architecture, and agent context. + +## Audiences + +| Audience | Needs | Primary location | +|---|---|---| +| New users | Install, first launch, understand the app layout, clone the starter vault | `site/start/` | +| Active users | Learn concrete workflows such as organizing, Git sync, custom views, and AI | `site/guides/` | +| Power users | Understand file layout, frontmatter, filters, release channels, shortcuts, and platform support | `site/reference/` | +| Contributors and agents | Architecture, abstractions, ADRs, development workflow | `docs/`, `AGENTS.md` | + +## Hosting Shape + +The GitHub Pages output should reserve the root for public docs and mount release assets underneath it: + +```text +/ public docs home +/releases/ release history +/download/ latest stable download redirect +/stable/latest.json +/alpha/latest.json +/latest.json compatibility alias for alpha latest +/latest-canary.json compatibility alias for alpha latest +``` + +## Current Coverage + +The phase 1 site now covers post-branch features added after the original April docs snapshot: + +- Windows and Linux release artifacts. +- Stable and Alpha updater channels. +- Direct AI model providers and local/API model setup. +- Claude Code, Codex, OpenCode, Pi, and Gemini CLI agent targets. +- Explicit MCP setup for external AI tools. +- Table of contents, note width, raw mode, and paste-without-formatting workflows. +- Media/PDF previews, image attachments, All Notes visibility, and Markdown whiteboards. +- System theme mode and sidebar pluralization settings. + +Every user-visible app change should answer: + +```text +Public docs impact: +- updated: +- not needed because: +``` diff --git a/eslint.config.js b/eslint.config.js index 037ba5a7..2ecf5672 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -6,7 +6,16 @@ import tseslint from 'typescript-eslint' import { defineConfig, globalIgnores } from 'eslint/config' export default defineConfig([ - globalIgnores(['dist', 'coverage', 'src-tauri/resources/', 'src-tauri/target/', 'src-tauri/gen/', 'tools/']), + globalIgnores([ + 'dist', + 'coverage', + 'site/.vitepress/cache/', + 'site/.vitepress/dist/', + 'src-tauri/resources/mcp-server/', + 'src-tauri/target/', + 'src-tauri/gen/', + 'tools/', + ]), { files: ['**/*.{ts,tsx}'], extends: [ diff --git a/lara.lock b/lara.lock index b0aa7fc9..4f1fc1e1 100644 --- a/lara.lock +++ b/lara.lock @@ -504,6 +504,8 @@ files: status.zoom.reset: dbf36ab275e5fbd256590e65aa1ca9a3 status.feedback.contribute: 96ab5025e38aef43fdb73c9830795264 status.feedback.label: 9887a4451812854f0f1b6f669a874307 + status.docs.open: 2066997d2262d4a9b79de68f255dc4a9 + status.docs.label: a3907cd461d8739aa3266047bc4b8c0c status.theme.light: 4abf27a209985375949aaa426c7c7f3d status.theme.dark: 541be2a55a52b518b8e510c476c7cc95 status.settings.open: bae08226d065231df6f01b08cd681c9b diff --git a/package.json b/package.json index e8381a6b..64bc8722 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,11 @@ "scripts": { "dev": "vite", "build": "tsc -b && vite build", + "agent-docs": "node scripts/build-agent-docs.mjs", "bundle-mcp": "node scripts/bundle-mcp-server.mjs", + "docs:dev": "vitepress dev site --host 127.0.0.1", + "docs:build": "pnpm agent-docs && vitepress build site", + "docs:preview": "vitepress preview site --host 127.0.0.1", "lint": "eslint .", "l10n:translate": "lara-cli translate", "l10n:translate:force": "lara-cli translate --force", @@ -103,6 +107,7 @@ "typescript": "~5.9.3", "typescript-eslint": "^8.48.0", "vite": "^7.3.2", + "vitepress": "^1.6.4", "vitest": "^4.0.18", "ws": "^8.19.0" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ea35df4f..d22a8d8e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -264,6 +264,9 @@ importers: vite: specifier: ^7.3.2 version: 7.3.2(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.3) + vitepress: + specifier: ^1.6.4 + version: 1.6.4(@algolia/client-search@5.52.1)(@types/node@24.10.13)(@types/react@19.2.14)(lightningcss@1.30.2)(postcss@8.5.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(search-insights@2.17.3)(typescript@5.9.3) vitest: specifier: ^4.0.18 version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@2.6.1)(jsdom@28.0.0)(lightningcss@1.30.2)(yaml@2.8.3) @@ -291,6 +294,82 @@ packages: '@adobe/css-tools@4.4.4': resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==} + '@algolia/abtesting@1.18.1': + resolution: {integrity: sha512-aehCadlWOGvrT91KUIZpC0MbB8KBW9yUuvTJFd2xesR7le/IsT4nJUnjCCZ4ZqZCeTcPHPV5mo//fZ5oxcSVYw==} + engines: {node: '>= 14.0.0'} + + '@algolia/autocomplete-core@1.17.7': + resolution: {integrity: sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==} + + '@algolia/autocomplete-plugin-algolia-insights@1.17.7': + resolution: {integrity: sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==} + peerDependencies: + search-insights: '>= 1 < 3' + + '@algolia/autocomplete-preset-algolia@1.17.7': + resolution: {integrity: sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + + '@algolia/autocomplete-shared@1.17.7': + resolution: {integrity: sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + + '@algolia/client-abtesting@5.52.1': + resolution: {integrity: sha512-HmXOGBOAOJPounpBzBpuY0zDYeiCpxgHnQmuA7JO6ScukcBdGp3/XM9zJk5pJx/xNGD68mbPGXWpDxGtl6BwDQ==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-analytics@5.52.1': + resolution: {integrity: sha512-5oo4+I8iixie9vXhCyNFCzeIr8pqA3FQ//VsLHTDvZAV4ttYOPGvYHGQq5NSalrLx5Jc3dRro/5uDOlnUMcBJg==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-common@5.52.1': + resolution: {integrity: sha512-qCDoZfx5MpX7XQzvQ3bC4tSEMkQWQMaF/ABtLuoze03Y/flR563CCSws02qIJ23oX7lxl92LsilZjINVyTdtLw==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-insights@5.52.1': + resolution: {integrity: sha512-hnGs0/lsFJ2PWDxNBz7pxreXo/Xz7gxYRcfePBUjsH26ad0kU/sgnVZd9LwWBpsQv65z2jlb5dkyaB9WE9M9FQ==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-personalization@5.52.1': + resolution: {integrity: sha512-2VxxNc/uBysyKvGeBdSM5n9eIDKH8kWD7wd9/yqbJAiVwU4Yv6tU1LSJusHKrXV/aCu1KW7t9Gug9QyeEmtn/Q==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-query-suggestions@5.52.1': + resolution: {integrity: sha512-O6mPtsw3xEfNOe6gWFpYLeAZAIljNa4Hgna3bq15PwyN7nbjTY0wXJFRbzs/0YVf75Br+SbOQUmjKxXYjDiSiQ==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-search@5.52.1': + resolution: {integrity: sha512-gA8oJOV1LnQQkDf91iebNnFInHuW0gRPEgLSOQ7EfipCEjYTHm5swm1DlH9H5RaRw4RrHuzHBegnlzc0MAstcg==} + engines: {node: '>= 14.0.0'} + + '@algolia/ingestion@1.52.1': + resolution: {integrity: sha512-U9zZfc5xIu9wRxZkt+HceJUAD4VKHKbAyLSloJdEyMRmphXeibfrY9cxqIXBcmPeZzGhn3Imb35Dq8l19PkJhw==} + engines: {node: '>= 14.0.0'} + + '@algolia/monitoring@1.52.1': + resolution: {integrity: sha512-a3SGNceHmkQfq77iG8Ka+w1pvwfZa/0lzEIgse30fL0kD+yKnd/dg0dQvSfFPAEt2f21DMcGkDSSeJlO3KdQjQ==} + engines: {node: '>= 14.0.0'} + + '@algolia/recommend@5.52.1': + resolution: {integrity: sha512-z98QEguCFDpxb4S/PyrUK1igqF8tPsdbqOUUO6ON91vJ58w+Gwa6ncrI0oNXSFcrkxA5EqPKPQ2A1PBCn08TYQ==} + engines: {node: '>= 14.0.0'} + + '@algolia/requester-browser-xhr@5.52.1': + resolution: {integrity: sha512-CI7+/0I11QeZM59Uc8whd2or0kqzFVjpaPn9Qpwll/krHcBAxk24WkAQ6WX+IwDVMfpont4YGbKwAmCre3vE8Q==} + engines: {node: '>= 14.0.0'} + + '@algolia/requester-fetch@5.52.1': + resolution: {integrity: sha512-S6bDuw9byfOvm3T71cgdoZgrgnZq6hpdMLkx52Louh57nUAmvGQESz2aojOynQHjbTiV55smvAFbgn0qT4tJrg==} + engines: {node: '>= 14.0.0'} + + '@algolia/requester-node-http@5.52.1': + resolution: {integrity: sha512-tqZXM+54rWo4mk5jL5Z/flE11nPmNEdXwFBM5py9DkOmbjeCNemfVd45FyM97XdzfZ0dl9uOJC6PYn1FpkeyQg==} + engines: {node: '>= 14.0.0'} + '@antfu/install-pkg@1.1.0': resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} @@ -376,6 +455,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.29.3': + resolution: {integrity: sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-transform-react-jsx-self@7.27.1': resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} engines: {node: '>=6.9.0'} @@ -547,105 +631,230 @@ packages: peerDependencies: react: '>=16.8.0' + '@docsearch/css@3.8.2': + resolution: {integrity: sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==} + + '@docsearch/js@3.8.2': + resolution: {integrity: sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==} + + '@docsearch/react@3.8.2': + resolution: {integrity: sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==} + peerDependencies: + '@types/react': '>= 16.8.0 < 19.0.0' + react: '>= 16.8.0 < 19.0.0' + react-dom: '>= 16.8.0 < 19.0.0' + search-insights: '>= 1 < 3' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + react-dom: + optional: true + search-insights: + optional: true + '@emoji-mart/data@1.2.1': resolution: {integrity: sha512-no2pQMWiBy6gpBEiqGeU77/bFejDqUTRY7KX+0+iur13op3bqUsXdnwoZs6Xb1zbv0gAj5VvS1PWoUUckSr5Dw==} + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + '@esbuild/aix-ppc64@0.27.3': resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm64@0.27.3': resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==} engines: {node: '>=18'} cpu: [arm64] os: [android] + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.27.3': resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==} engines: {node: '>=18'} cpu: [arm] os: [android] + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.27.3': resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==} engines: {node: '>=18'} cpu: [x64] os: [android] + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.27.3': resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.27.3': resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==} engines: {node: '>=18'} cpu: [x64] os: [darwin] + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.27.3': resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.27.3': resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.27.3': resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==} engines: {node: '>=18'} cpu: [arm64] os: [linux] + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.27.3': resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==} engines: {node: '>=18'} cpu: [arm] os: [linux] + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.27.3': resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==} engines: {node: '>=18'} cpu: [ia32] os: [linux] + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.27.3': resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==} engines: {node: '>=18'} cpu: [loong64] os: [linux] + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.27.3': resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.27.3': resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.27.3': resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.27.3': resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.27.3': resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==} engines: {node: '>=18'} @@ -658,6 +867,12 @@ packages: cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.27.3': resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==} engines: {node: '>=18'} @@ -670,6 +885,12 @@ packages: cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.27.3': resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==} engines: {node: '>=18'} @@ -682,24 +903,48 @@ packages: cpu: [arm64] os: [openharmony] + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.27.3': resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.27.3': resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.27.3': resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==} engines: {node: '>=18'} cpu: [ia32] os: [win32] + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.27.3': resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==} engines: {node: '>=18'} @@ -803,6 +1048,9 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} + '@iconify-json/simple-icons@1.2.81': + resolution: {integrity: sha512-Utjw4sPtoVdbpAQAkC4O0cYpt4ehQZYr6aFHhmvdeW8mQwkINyAe0ogTPqNptSSKogZ2lfgXM8zpuhO961Wnng==} + '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} @@ -2042,22 +2290,43 @@ packages: peerDependencies: react: ^16.14.0 || 17.x || 18.x || 19.x + '@shikijs/core@2.5.0': + resolution: {integrity: sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==} + '@shikijs/core@3.23.0': resolution: {integrity: sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==} + '@shikijs/engine-javascript@2.5.0': + resolution: {integrity: sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==} + '@shikijs/engine-javascript@3.23.0': resolution: {integrity: sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA==} + '@shikijs/engine-oniguruma@2.5.0': + resolution: {integrity: sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==} + '@shikijs/langs-precompiled@3.23.0': resolution: {integrity: sha512-NVFZ+aosM+a90oUmlM8pRZkVZPFgMabCPicOaP0xklM7Lo6U6J9JqKs+ld1Z9K85k1mfQITc6r7VfZiifitPDA==} engines: {node: '>=20'} + '@shikijs/langs@2.5.0': + resolution: {integrity: sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==} + '@shikijs/langs@3.23.0': resolution: {integrity: sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==} + '@shikijs/themes@2.5.0': + resolution: {integrity: sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==} + '@shikijs/themes@3.23.0': resolution: {integrity: sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==} + '@shikijs/transformers@2.5.0': + resolution: {integrity: sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg==} + + '@shikijs/types@2.5.0': + resolution: {integrity: sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==} + '@shikijs/types@3.22.0': resolution: {integrity: sha512-491iAekgKDBFE67z70Ok5a8KBMsQ2IJwOWw3us/7ffQkIBCyOQfm/aNwVMBUriP02QshIfgHCBSIYAl3u2eWjg==} @@ -2719,6 +2988,9 @@ packages: '@types/use-sync-external-store@1.5.0': resolution: {integrity: sha512-5dyB8nLC/qogMrlCizZnYWQTA4lnb/v+It+sqNl5YnSRAPMlIqY/X0Xn+gZw8vOL+TgTTr28VEbn3uf8fUtAkw==} + '@types/web-bluetooth@0.0.21': + resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} + '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} @@ -2801,6 +3073,13 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + '@vitejs/plugin-vue@5.2.4': + resolution: {integrity: sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 + vue: ^3.2.25 + '@vitest/coverage-v8@4.0.18': resolution: {integrity: sha512-7i+N2i0+ME+2JFZhfuz7Tg/FqKtilHjGyGvoHYQ6iLV0zahbsJ9sljC9OcFcPDbhYKCet+sG8SsVqlyGvPflZg==} peerDependencies: @@ -2839,6 +3118,94 @@ packages: '@vitest/utils@4.0.18': resolution: {integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==} + '@vue/compiler-core@3.5.34': + resolution: {integrity: sha512-s9cLyK5mLcvZ4Agva5QgRsQyLKvts9WbU9DB6NqiZkkGEdwmcEiylj5Jbwkp680drF/NNCV8OlAJSe+yMLxaJw==} + + '@vue/compiler-dom@3.5.34': + resolution: {integrity: sha512-EbF/T++k0e2MMZlJsBhzK8Sgwt0HcIPOhzn1CTB/lv6sQcyk+OWf8YeiLxZp3ro7MbbLcAfAJ6sEvjFWuNgUCw==} + + '@vue/compiler-sfc@3.5.34': + resolution: {integrity: sha512-D/ihr6uZeIt6r+pVZf46RWT1fAsLFMbUP7k8G1VkiiWexriED9GrX3echHd4Abbt17zjlfiFJ8z7a3BxZOPNjg==} + + '@vue/compiler-ssr@3.5.34': + resolution: {integrity: sha512-cDtTHKibkThKGHH1SP+WdccquNRYQDFH6rRjQCqT9G2ltFAfoR5pUftpab/z+aM5mW9HLLVQW7hfKKQe/1GBeQ==} + + '@vue/devtools-api@7.7.9': + resolution: {integrity: sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==} + + '@vue/devtools-kit@7.7.9': + resolution: {integrity: sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==} + + '@vue/devtools-shared@7.7.9': + resolution: {integrity: sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==} + + '@vue/reactivity@3.5.34': + resolution: {integrity: sha512-y9XDjCEuBp+98k+UL5dbYkh57AHU4o6cxZedOPXw3bmrZZYLQsVHguGurq7hVrPCSrQtrnz1f9dssyFr+dMXfQ==} + + '@vue/runtime-core@3.5.34': + resolution: {integrity: sha512-mKeBYvu8tcMSLhypAHBmriUFfWXKTCF/23Z4jiCoYK3UtWepkliViNLuR90V9XOyD62mUxs9p1jsrpK3CCGIzw==} + + '@vue/runtime-dom@3.5.34': + resolution: {integrity: sha512-e8kZzERmCwUnBRVsgSQlAfrfU2rGoy0FFKPBXSlfEjc/O3KfA7QP0t1/2ZylrbchjmIKB4dPTd07A6WPr0eOrg==} + + '@vue/server-renderer@3.5.34': + resolution: {integrity: sha512-nHxmJoTrKsmrkbILRhkC9gY1G3moZbJTqCzDd7DOOzG5KH9oeJ0Unqrff5f9v0pW//jES05ZkJcNtfE8JjOIew==} + peerDependencies: + vue: 3.5.34 + + '@vue/shared@3.5.34': + resolution: {integrity: sha512-24uqU4OIiX29ryC3MeWid/Xf2fa2EFRUVLb77nRhk+UrTVrh/XiGtFAFmJBAtBRbjwNdsPRP+jj/OL27Eg1NDA==} + + '@vueuse/core@12.8.2': + resolution: {integrity: sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==} + + '@vueuse/integrations@12.8.2': + resolution: {integrity: sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g==} + peerDependencies: + async-validator: ^4 + axios: ^1 + change-case: ^5 + drauu: ^0.4 + focus-trap: ^7 + fuse.js: ^7 + idb-keyval: ^6 + jwt-decode: ^4 + nprogress: ^0.2 + qrcode: ^1.5 + sortablejs: ^1 + universal-cookie: ^7 + peerDependenciesMeta: + async-validator: + optional: true + axios: + optional: true + change-case: + optional: true + drauu: + optional: true + focus-trap: + optional: true + fuse.js: + optional: true + idb-keyval: + optional: true + jwt-decode: + optional: true + nprogress: + optional: true + qrcode: + optional: true + sortablejs: + optional: true + universal-cookie: + optional: true + + '@vueuse/metadata@12.8.2': + resolution: {integrity: sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==} + + '@vueuse/shared@12.8.2': + resolution: {integrity: sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==} + abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} @@ -2880,6 +3247,10 @@ packages: ajv@8.18.0: resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + algoliasearch@5.52.1: + resolution: {integrity: sha512-fHA8+kXTbjagw3jkLiaS7KKrH8qe2DyOsiUhGlN4cdT77PEsfqXZl7ewDk1hsg+pJnPlnE50XtLxjR91iJOpmg==} + engines: {node: '>= 14.0.0'} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -2943,6 +3314,9 @@ packages: bidi-js@1.0.3: resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} + birpc@2.9.0: + resolution: {integrity: sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==} + body-parser@2.2.2: resolution: {integrity: sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==} engines: {node: '>=18'} @@ -3096,6 +3470,10 @@ packages: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} + copy-anything@4.0.5: + resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==} + engines: {node: '>=18'} + core-js@3.49.0: resolution: {integrity: sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg==} @@ -3368,6 +3746,9 @@ packages: emoji-mart@5.6.0: resolution: {integrity: sha512-eJp3QRe79pjwa+duv+n7+5YsNhRcMl812EcFVwrnRvYKoNPoQb5qxU8DG6Bgwji0akHdp6D4Ln6tYLG58MFSow==} + emoji-regex-xs@1.0.0: + resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} + emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} @@ -3393,6 +3774,10 @@ packages: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -3412,6 +3797,11 @@ packages: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + esbuild@0.27.3: resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} engines: {node: '>=18'} @@ -3489,6 +3879,9 @@ packages: estree-util-is-identifier-name@3.0.0: resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} @@ -3599,6 +3992,9 @@ packages: flatted@3.3.3: resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + focus-trap@7.8.0: + resolution: {integrity: sha512-/yNdlIkpWbM0ptxno3ONTuf+2g318kh2ez3KSeZN5dZ8YC6AAmgeWz+GasYYiBJPFaYcSAPeu4GfhUaChzIJXA==} + foreground-child@3.3.1: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} @@ -3769,6 +4165,9 @@ packages: resolution: {integrity: sha512-am5zfg3yu6sqn5yjKBNqhnTX7Cv+m00ox+7jbaKkrLMRJ4rAdldd1xPd/JzbBWspqaQv6RSTrgFN95EsfhC+7w==} engines: {node: '>=16.9.0'} + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + hotkeys-js@3.13.15: resolution: {integrity: sha512-gHh8a/cPTCpanraePpjRxyIlxDFrIhYqjuh01UHWEwDpglJKCnvLW8kqSx5gQtOuSsJogNZXLhOdbSExpgUiqg==} @@ -3914,6 +4313,10 @@ packages: resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} engines: {node: '>=18'} + is-what@5.5.0: + resolution: {integrity: sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==} + engines: {node: '>=18'} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -4174,6 +4577,9 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} + mark.js@8.11.1: + resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} + markdown-it@14.1.1: resolution: {integrity: sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==} hasBin: true @@ -4375,6 +4781,12 @@ packages: resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} + minisearch@7.2.0: + resolution: {integrity: sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + mlly@1.8.2: resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} @@ -4425,6 +4837,9 @@ packages: oniguruma-parser@0.12.1: resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} + oniguruma-to-es@3.1.1: + resolution: {integrity: sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==} + oniguruma-to-es@4.3.5: resolution: {integrity: sha512-Zjygswjpsewa0NLTsiizVuMQZbp0MDyM6lIt66OxsF21npUDlzpHi1Mgb/qhQdkb+dWFTzJmFbEWdvZgRho8eQ==} @@ -4495,6 +4910,9 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -4840,6 +5258,9 @@ packages: resolution: {integrity: sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==} engines: {node: '>=10'} + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + robust-predicates@3.0.3: resolution: {integrity: sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==} @@ -4878,6 +5299,9 @@ packages: scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + search-insights@2.17.3: + resolution: {integrity: sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==} + section-matter@1.0.0: resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} engines: {node: '>=4'} @@ -4910,6 +5334,9 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + shiki@2.5.0: + resolution: {integrity: sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==} + side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} engines: {node: '>= 0.4'} @@ -4940,6 +5367,10 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + speakingurl@14.0.1: + resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} + engines: {node: '>=0.10.0'} + sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -5010,6 +5441,10 @@ packages: stylis@4.4.0: resolution: {integrity: sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA==} + superjson@2.2.6: + resolution: {integrity: sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==} + engines: {node: '>=16'} + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -5245,6 +5680,37 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + vite@5.4.21: + resolution: {integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + vite@7.3.2: resolution: {integrity: sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -5285,6 +5751,18 @@ packages: yaml: optional: true + vitepress@1.6.4: + resolution: {integrity: sha512-+2ym1/+0VVrbhNyRoFFesVvBvHAVMZMK0rw60E3X/5349M1GuVdKeazuksqopEdvkKwKGs21Q729jX81/bkBJg==} + hasBin: true + peerDependencies: + markdown-it-mathjax3: ^4 + postcss: 8.5.10 + peerDependenciesMeta: + markdown-it-mathjax3: + optional: true + postcss: + optional: true + vitest@4.0.18: resolution: {integrity: sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -5339,6 +5817,14 @@ packages: vscode-uri@3.1.0: resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} + vue@3.5.34: + resolution: {integrity: sha512-WdLBG9gm02OgJIG9axd5Hpx0TFLdzVgfG2evFFu8Rur5O/IoGc5cMjnjh3tPL6GnRGsYvUhBSKVPYVcxRKpMCA==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + w3c-keyname@2.2.8: resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} @@ -5463,6 +5949,118 @@ snapshots: '@adobe/css-tools@4.4.4': {} + '@algolia/abtesting@1.18.1': + dependencies: + '@algolia/client-common': 5.52.1 + '@algolia/requester-browser-xhr': 5.52.1 + '@algolia/requester-fetch': 5.52.1 + '@algolia/requester-node-http': 5.52.1 + + '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.52.1)(algoliasearch@5.52.1)(search-insights@2.17.3)': + dependencies: + '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.52.1)(algoliasearch@5.52.1)(search-insights@2.17.3) + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.52.1)(algoliasearch@5.52.1) + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + - search-insights + + '@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.52.1)(algoliasearch@5.52.1)(search-insights@2.17.3)': + dependencies: + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.52.1)(algoliasearch@5.52.1) + search-insights: 2.17.3 + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + + '@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.52.1)(algoliasearch@5.52.1)': + dependencies: + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.52.1)(algoliasearch@5.52.1) + '@algolia/client-search': 5.52.1 + algoliasearch: 5.52.1 + + '@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.52.1)(algoliasearch@5.52.1)': + dependencies: + '@algolia/client-search': 5.52.1 + algoliasearch: 5.52.1 + + '@algolia/client-abtesting@5.52.1': + dependencies: + '@algolia/client-common': 5.52.1 + '@algolia/requester-browser-xhr': 5.52.1 + '@algolia/requester-fetch': 5.52.1 + '@algolia/requester-node-http': 5.52.1 + + '@algolia/client-analytics@5.52.1': + dependencies: + '@algolia/client-common': 5.52.1 + '@algolia/requester-browser-xhr': 5.52.1 + '@algolia/requester-fetch': 5.52.1 + '@algolia/requester-node-http': 5.52.1 + + '@algolia/client-common@5.52.1': {} + + '@algolia/client-insights@5.52.1': + dependencies: + '@algolia/client-common': 5.52.1 + '@algolia/requester-browser-xhr': 5.52.1 + '@algolia/requester-fetch': 5.52.1 + '@algolia/requester-node-http': 5.52.1 + + '@algolia/client-personalization@5.52.1': + dependencies: + '@algolia/client-common': 5.52.1 + '@algolia/requester-browser-xhr': 5.52.1 + '@algolia/requester-fetch': 5.52.1 + '@algolia/requester-node-http': 5.52.1 + + '@algolia/client-query-suggestions@5.52.1': + dependencies: + '@algolia/client-common': 5.52.1 + '@algolia/requester-browser-xhr': 5.52.1 + '@algolia/requester-fetch': 5.52.1 + '@algolia/requester-node-http': 5.52.1 + + '@algolia/client-search@5.52.1': + dependencies: + '@algolia/client-common': 5.52.1 + '@algolia/requester-browser-xhr': 5.52.1 + '@algolia/requester-fetch': 5.52.1 + '@algolia/requester-node-http': 5.52.1 + + '@algolia/ingestion@1.52.1': + dependencies: + '@algolia/client-common': 5.52.1 + '@algolia/requester-browser-xhr': 5.52.1 + '@algolia/requester-fetch': 5.52.1 + '@algolia/requester-node-http': 5.52.1 + + '@algolia/monitoring@1.52.1': + dependencies: + '@algolia/client-common': 5.52.1 + '@algolia/requester-browser-xhr': 5.52.1 + '@algolia/requester-fetch': 5.52.1 + '@algolia/requester-node-http': 5.52.1 + + '@algolia/recommend@5.52.1': + dependencies: + '@algolia/client-common': 5.52.1 + '@algolia/requester-browser-xhr': 5.52.1 + '@algolia/requester-fetch': 5.52.1 + '@algolia/requester-node-http': 5.52.1 + + '@algolia/requester-browser-xhr@5.52.1': + dependencies: + '@algolia/client-common': 5.52.1 + + '@algolia/requester-fetch@5.52.1': + dependencies: + '@algolia/client-common': 5.52.1 + + '@algolia/requester-node-http@5.52.1': + dependencies: + '@algolia/client-common': 5.52.1 + '@antfu/install-pkg@1.1.0': dependencies: package-manager-detector: 1.6.0 @@ -5575,6 +6173,10 @@ snapshots: dependencies: '@babel/types': 7.29.0 + '@babel/parser@7.29.3': + dependencies: + '@babel/types': 7.29.0 + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 @@ -5882,83 +6484,179 @@ snapshots: react: 19.2.4 tslib: 2.8.1 + '@docsearch/css@3.8.2': {} + + '@docsearch/js@3.8.2(@algolia/client-search@5.52.1)(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(search-insights@2.17.3)': + dependencies: + '@docsearch/react': 3.8.2(@algolia/client-search@5.52.1)(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(search-insights@2.17.3) + preact: 10.29.0 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/react' + - react + - react-dom + - search-insights + + '@docsearch/react@3.8.2(@algolia/client-search@5.52.1)(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(search-insights@2.17.3)': + dependencies: + '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.52.1)(algoliasearch@5.52.1)(search-insights@2.17.3) + '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.52.1)(algoliasearch@5.52.1) + '@docsearch/css': 3.8.2 + algoliasearch: 5.52.1 + optionalDependencies: + '@types/react': 19.2.14 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + search-insights: 2.17.3 + transitivePeerDependencies: + - '@algolia/client-search' + '@emoji-mart/data@1.2.1': {} + '@esbuild/aix-ppc64@0.21.5': + optional: true + '@esbuild/aix-ppc64@0.27.3': optional: true + '@esbuild/android-arm64@0.21.5': + optional: true + '@esbuild/android-arm64@0.27.3': optional: true + '@esbuild/android-arm@0.21.5': + optional: true + '@esbuild/android-arm@0.27.3': optional: true + '@esbuild/android-x64@0.21.5': + optional: true + '@esbuild/android-x64@0.27.3': optional: true + '@esbuild/darwin-arm64@0.21.5': + optional: true + '@esbuild/darwin-arm64@0.27.3': optional: true + '@esbuild/darwin-x64@0.21.5': + optional: true + '@esbuild/darwin-x64@0.27.3': optional: true + '@esbuild/freebsd-arm64@0.21.5': + optional: true + '@esbuild/freebsd-arm64@0.27.3': optional: true + '@esbuild/freebsd-x64@0.21.5': + optional: true + '@esbuild/freebsd-x64@0.27.3': optional: true + '@esbuild/linux-arm64@0.21.5': + optional: true + '@esbuild/linux-arm64@0.27.3': optional: true + '@esbuild/linux-arm@0.21.5': + optional: true + '@esbuild/linux-arm@0.27.3': optional: true + '@esbuild/linux-ia32@0.21.5': + optional: true + '@esbuild/linux-ia32@0.27.3': optional: true + '@esbuild/linux-loong64@0.21.5': + optional: true + '@esbuild/linux-loong64@0.27.3': optional: true + '@esbuild/linux-mips64el@0.21.5': + optional: true + '@esbuild/linux-mips64el@0.27.3': optional: true + '@esbuild/linux-ppc64@0.21.5': + optional: true + '@esbuild/linux-ppc64@0.27.3': optional: true + '@esbuild/linux-riscv64@0.21.5': + optional: true + '@esbuild/linux-riscv64@0.27.3': optional: true + '@esbuild/linux-s390x@0.21.5': + optional: true + '@esbuild/linux-s390x@0.27.3': optional: true + '@esbuild/linux-x64@0.21.5': + optional: true + '@esbuild/linux-x64@0.27.3': optional: true '@esbuild/netbsd-arm64@0.27.3': optional: true + '@esbuild/netbsd-x64@0.21.5': + optional: true + '@esbuild/netbsd-x64@0.27.3': optional: true '@esbuild/openbsd-arm64@0.27.3': optional: true + '@esbuild/openbsd-x64@0.21.5': + optional: true + '@esbuild/openbsd-x64@0.27.3': optional: true '@esbuild/openharmony-arm64@0.27.3': optional: true + '@esbuild/sunos-x64@0.21.5': + optional: true + '@esbuild/sunos-x64@0.27.3': optional: true + '@esbuild/win32-arm64@0.21.5': + optional: true + '@esbuild/win32-arm64@0.27.3': optional: true + '@esbuild/win32-ia32@0.21.5': + optional: true + '@esbuild/win32-ia32@0.27.3': optional: true + '@esbuild/win32-x64@0.21.5': + optional: true + '@esbuild/win32-x64@0.27.3': optional: true @@ -6058,6 +6756,10 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} + '@iconify-json/simple-icons@1.2.81': + dependencies: + '@iconify/types': 2.0.0 + '@iconify/types@2.0.0': {} '@iconify/utils@3.1.1': @@ -7302,6 +8004,15 @@ snapshots: '@sentry/core': 10.47.0 react: 19.2.4 + '@shikijs/core@2.5.0': + dependencies: + '@shikijs/engine-javascript': 2.5.0 + '@shikijs/engine-oniguruma': 2.5.0 + '@shikijs/types': 2.5.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + '@shikijs/core@3.23.0': dependencies: '@shikijs/types': 3.23.0 @@ -7309,25 +8020,54 @@ snapshots: '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 + '@shikijs/engine-javascript@2.5.0': + dependencies: + '@shikijs/types': 2.5.0 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 3.1.1 + '@shikijs/engine-javascript@3.23.0': dependencies: '@shikijs/types': 3.23.0 '@shikijs/vscode-textmate': 10.0.2 oniguruma-to-es: 4.3.5 + '@shikijs/engine-oniguruma@2.5.0': + dependencies: + '@shikijs/types': 2.5.0 + '@shikijs/vscode-textmate': 10.0.2 + '@shikijs/langs-precompiled@3.23.0': dependencies: '@shikijs/types': 3.23.0 oniguruma-to-es: 4.3.5 + '@shikijs/langs@2.5.0': + dependencies: + '@shikijs/types': 2.5.0 + '@shikijs/langs@3.23.0': dependencies: '@shikijs/types': 3.23.0 + '@shikijs/themes@2.5.0': + dependencies: + '@shikijs/types': 2.5.0 + '@shikijs/themes@3.23.0': dependencies: '@shikijs/types': 3.23.0 + '@shikijs/transformers@2.5.0': + dependencies: + '@shikijs/core': 2.5.0 + '@shikijs/types': 2.5.0 + + '@shikijs/types@2.5.0': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + '@shikijs/types@3.22.0': dependencies: '@shikijs/vscode-textmate': 10.0.2 @@ -8062,6 +8802,8 @@ snapshots: '@types/use-sync-external-store@1.5.0': {} + '@types/web-bluetooth@0.0.21': {} + '@types/ws@8.18.1': dependencies: '@types/node': 24.10.13 @@ -8183,6 +8925,11 @@ snapshots: transitivePeerDependencies: - supports-color + '@vitejs/plugin-vue@5.2.4(vite@5.4.21(@types/node@24.10.13)(lightningcss@1.30.2))(vue@3.5.34(typescript@5.9.3))': + dependencies: + vite: 5.4.21(@types/node@24.10.13)(lightningcss@1.30.2) + vue: 3.5.34(typescript@5.9.3) + '@vitest/coverage-v8@4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@2.6.1)(jsdom@28.0.0)(lightningcss@1.30.2)(yaml@2.8.3))': dependencies: '@bcoe/v8-coverage': 1.0.2 @@ -8236,6 +8983,105 @@ snapshots: '@vitest/pretty-format': 4.0.18 tinyrainbow: 3.0.3 + '@vue/compiler-core@3.5.34': + dependencies: + '@babel/parser': 7.29.3 + '@vue/shared': 3.5.34 + entities: 7.0.1 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.34': + dependencies: + '@vue/compiler-core': 3.5.34 + '@vue/shared': 3.5.34 + + '@vue/compiler-sfc@3.5.34': + dependencies: + '@babel/parser': 7.29.3 + '@vue/compiler-core': 3.5.34 + '@vue/compiler-dom': 3.5.34 + '@vue/compiler-ssr': 3.5.34 + '@vue/shared': 3.5.34 + estree-walker: 2.0.2 + magic-string: 0.30.21 + postcss: 8.5.10 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.34': + dependencies: + '@vue/compiler-dom': 3.5.34 + '@vue/shared': 3.5.34 + + '@vue/devtools-api@7.7.9': + dependencies: + '@vue/devtools-kit': 7.7.9 + + '@vue/devtools-kit@7.7.9': + dependencies: + '@vue/devtools-shared': 7.7.9 + birpc: 2.9.0 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 1.0.0 + speakingurl: 14.0.1 + superjson: 2.2.6 + + '@vue/devtools-shared@7.7.9': + dependencies: + rfdc: 1.4.1 + + '@vue/reactivity@3.5.34': + dependencies: + '@vue/shared': 3.5.34 + + '@vue/runtime-core@3.5.34': + dependencies: + '@vue/reactivity': 3.5.34 + '@vue/shared': 3.5.34 + + '@vue/runtime-dom@3.5.34': + dependencies: + '@vue/reactivity': 3.5.34 + '@vue/runtime-core': 3.5.34 + '@vue/shared': 3.5.34 + csstype: 3.2.3 + + '@vue/server-renderer@3.5.34(vue@3.5.34(typescript@5.9.3))': + dependencies: + '@vue/compiler-ssr': 3.5.34 + '@vue/shared': 3.5.34 + vue: 3.5.34(typescript@5.9.3) + + '@vue/shared@3.5.34': {} + + '@vueuse/core@12.8.2(typescript@5.9.3)': + dependencies: + '@types/web-bluetooth': 0.0.21 + '@vueuse/metadata': 12.8.2 + '@vueuse/shared': 12.8.2(typescript@5.9.3) + vue: 3.5.34(typescript@5.9.3) + transitivePeerDependencies: + - typescript + + '@vueuse/integrations@12.8.2(focus-trap@7.8.0)(typescript@5.9.3)': + dependencies: + '@vueuse/core': 12.8.2(typescript@5.9.3) + '@vueuse/shared': 12.8.2(typescript@5.9.3) + vue: 3.5.34(typescript@5.9.3) + optionalDependencies: + focus-trap: 7.8.0 + transitivePeerDependencies: + - typescript + + '@vueuse/metadata@12.8.2': {} + + '@vueuse/shared@12.8.2(typescript@5.9.3)': + dependencies: + vue: 3.5.34(typescript@5.9.3) + transitivePeerDependencies: + - typescript + abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 @@ -8273,6 +9119,23 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + algoliasearch@5.52.1: + dependencies: + '@algolia/abtesting': 1.18.1 + '@algolia/client-abtesting': 5.52.1 + '@algolia/client-analytics': 5.52.1 + '@algolia/client-common': 5.52.1 + '@algolia/client-insights': 5.52.1 + '@algolia/client-personalization': 5.52.1 + '@algolia/client-query-suggestions': 5.52.1 + '@algolia/client-search': 5.52.1 + '@algolia/ingestion': 1.52.1 + '@algolia/monitoring': 1.52.1 + '@algolia/recommend': 5.52.1 + '@algolia/requester-browser-xhr': 5.52.1 + '@algolia/requester-fetch': 5.52.1 + '@algolia/requester-node-http': 5.52.1 + ansi-regex@5.0.1: {} ansi-regex@6.2.2: {} @@ -8323,6 +9186,8 @@ snapshots: dependencies: require-from-string: 2.0.2 + birpc@2.9.0: {} + body-parser@2.2.2: dependencies: bytes: 3.1.2 @@ -8461,6 +9326,10 @@ snapshots: cookie@0.7.2: {} + copy-anything@4.0.5: + dependencies: + is-what: 5.5.0 + core-js@3.49.0: {} cors@2.8.6: @@ -8749,6 +9618,8 @@ snapshots: emoji-mart@5.6.0: {} + emoji-regex-xs@1.0.0: {} + emoji-regex@10.6.0: {} emoji-regex@8.0.0: {} @@ -8768,6 +9639,8 @@ snapshots: entities@6.0.1: {} + entities@7.0.1: {} + es-define-property@1.0.1: {} es-errors@1.3.0: {} @@ -8785,6 +9658,32 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + esbuild@0.27.3: optionalDependencies: '@esbuild/aix-ppc64': 0.27.3 @@ -8907,6 +9806,8 @@ snapshots: estree-util-is-identifier-name@3.0.0: {} + estree-walker@2.0.2: {} + estree-walker@3.0.3: dependencies: '@types/estree': 1.0.8 @@ -9029,6 +9930,10 @@ snapshots: flatted@3.3.3: {} + focus-trap@7.8.0: + dependencies: + tabbable: 6.4.0 + foreground-child@3.3.1: dependencies: cross-spawn: 7.0.6 @@ -9282,6 +10187,8 @@ snapshots: hono@4.12.14: {} + hookable@5.5.3: {} + hotkeys-js@3.13.15: {} html-encoding-sniffer@6.0.0: @@ -9394,6 +10301,8 @@ snapshots: is-unicode-supported@2.1.0: {} + is-what@5.5.0: {} + isexe@2.0.0: {} isomorphic.js@0.2.5: {} @@ -9627,6 +10536,8 @@ snapshots: dependencies: semver: 7.7.4 + mark.js@8.11.1: {} + markdown-it@14.1.1: dependencies: argparse: 2.0.1 @@ -10048,6 +10959,10 @@ snapshots: minipass@7.1.3: {} + minisearch@7.2.0: {} + + mitt@3.0.1: {} + mlly@1.8.2: dependencies: acorn: 8.16.0 @@ -10087,6 +11002,12 @@ snapshots: oniguruma-parser@0.12.1: {} + oniguruma-to-es@3.1.1: + dependencies: + emoji-regex-xs: 1.0.0 + regex: 6.1.0 + regex-recursion: 6.0.2 + oniguruma-to-es@4.3.5: dependencies: oniguruma-parser: 0.12.1 @@ -10169,6 +11090,8 @@ snapshots: pathe@2.0.3: {} + perfect-debounce@1.0.0: {} + picocolors@1.1.1: {} picomatch@4.0.4: {} @@ -10655,6 +11578,8 @@ snapshots: ret@0.5.0: {} + rfdc@1.4.1: {} + robust-predicates@3.0.3: {} rollup@4.59.0: @@ -10723,6 +11648,8 @@ snapshots: scheduler@0.27.0: {} + search-insights@2.17.3: {} + section-matter@1.0.0: dependencies: extend-shallow: 2.0.1 @@ -10765,6 +11692,17 @@ snapshots: shebang-regex@3.0.0: {} + shiki@2.5.0: + dependencies: + '@shikijs/core': 2.5.0 + '@shikijs/engine-javascript': 2.5.0 + '@shikijs/engine-oniguruma': 2.5.0 + '@shikijs/langs': 2.5.0 + '@shikijs/themes': 2.5.0 + '@shikijs/types': 2.5.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 @@ -10801,6 +11739,8 @@ snapshots: space-separated-tokens@2.0.2: {} + speakingurl@14.0.1: {} + sprintf-js@1.0.3: {} stackback@0.0.2: {} @@ -10867,6 +11807,10 @@ snapshots: stylis@4.4.0: {} + superjson@2.2.6: + dependencies: + copy-anything: 4.0.5 + supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -11093,6 +12037,16 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 + vite@5.4.21(@types/node@24.10.13)(lightningcss@1.30.2): + dependencies: + esbuild: 0.21.5 + postcss: 8.5.10 + rollup: 4.59.0 + optionalDependencies: + '@types/node': 24.10.13 + fsevents: 2.3.3 + lightningcss: 1.30.2 + vite@7.3.2(@types/node@24.10.13)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.3): dependencies: esbuild: 0.27.3 @@ -11108,6 +12062,55 @@ snapshots: lightningcss: 1.30.2 yaml: 2.8.3 + vitepress@1.6.4(@algolia/client-search@5.52.1)(@types/node@24.10.13)(@types/react@19.2.14)(lightningcss@1.30.2)(postcss@8.5.10)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(search-insights@2.17.3)(typescript@5.9.3): + dependencies: + '@docsearch/css': 3.8.2 + '@docsearch/js': 3.8.2(@algolia/client-search@5.52.1)(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(search-insights@2.17.3) + '@iconify-json/simple-icons': 1.2.81 + '@shikijs/core': 2.5.0 + '@shikijs/transformers': 2.5.0 + '@shikijs/types': 2.5.0 + '@types/markdown-it': 14.1.2 + '@vitejs/plugin-vue': 5.2.4(vite@5.4.21(@types/node@24.10.13)(lightningcss@1.30.2))(vue@3.5.34(typescript@5.9.3)) + '@vue/devtools-api': 7.7.9 + '@vue/shared': 3.5.34 + '@vueuse/core': 12.8.2(typescript@5.9.3) + '@vueuse/integrations': 12.8.2(focus-trap@7.8.0)(typescript@5.9.3) + focus-trap: 7.8.0 + mark.js: 8.11.1 + minisearch: 7.2.0 + shiki: 2.5.0 + vite: 5.4.21(@types/node@24.10.13)(lightningcss@1.30.2) + vue: 3.5.34(typescript@5.9.3) + optionalDependencies: + postcss: 8.5.10 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/node' + - '@types/react' + - async-validator + - axios + - change-case + - drauu + - fuse.js + - idb-keyval + - jwt-decode + - less + - lightningcss + - nprogress + - qrcode + - react + - react-dom + - sass + - sass-embedded + - search-insights + - sortablejs + - stylus + - sugarss + - terser + - typescript + - universal-cookie + vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@2.6.1)(jsdom@28.0.0)(lightningcss@1.30.2)(yaml@2.8.3): dependencies: '@vitest/expect': 4.0.18 @@ -11164,6 +12167,16 @@ snapshots: vscode-uri@3.1.0: {} + vue@3.5.34(typescript@5.9.3): + dependencies: + '@vue/compiler-dom': 3.5.34 + '@vue/compiler-sfc': 3.5.34 + '@vue/runtime-dom': 3.5.34 + '@vue/server-renderer': 3.5.34(vue@3.5.34(typescript@5.9.3)) + '@vue/shared': 3.5.34 + optionalDependencies: + typescript: 5.9.3 + w3c-keyname@2.2.8: {} w3c-xmlserializer@5.0.0: diff --git a/scripts/build-agent-docs.mjs b/scripts/build-agent-docs.mjs new file mode 100644 index 00000000..99228a30 --- /dev/null +++ b/scripts/build-agent-docs.mjs @@ -0,0 +1,184 @@ +import { mkdir, readdir, readFile, rm, writeFile } from 'node:fs/promises' +import path from 'node:path' + +const repoRoot = path.resolve(import.meta.dirname, '..') +const siteRoot = path.join(repoRoot, 'site') +const outputRoot = path.join(repoRoot, 'src-tauri', 'resources', 'agent-docs') + +const sectionOrder = ['start', 'concepts', 'guides', 'reference', 'troubleshooting', 'download', 'releases'] +const ignoredDirs = new Set(['.vitepress', 'public', 'node_modules', '.DS_Store']) + +function titleFromSlug(slug) { + return slug + .replace(/[-_]+/g, ' ') + .replace(/\b\w/g, (letter) => letter.toUpperCase()) +} + +function stripFrontmatter(markdown) { + return markdown.replace(/^---\n[\s\S]*?\n---\n/, '') +} + +function firstHeading(markdown, fallback) { + const match = markdown.match(/^#\s+(.+)$/m) + return match?.[1]?.trim() || fallback +} + +function sectionForFile(relativePath) { + const [firstPart] = relativePath.split('/') + if (firstPart === 'index.md') return 'home' + return firstPart.replace(/\.md$/, '') +} + +async function listMarkdownFiles(dir, base = dir) { + const entries = await readdir(dir, { withFileTypes: true }) + const files = [] + + for (const entry of entries) { + if (ignoredDirs.has(entry.name)) continue + + const fullPath = path.join(dir, entry.name) + if (entry.isDirectory()) { + files.push(...await listMarkdownFiles(fullPath, base)) + } else if (entry.isFile() && entry.name.endsWith('.md')) { + files.push(path.relative(base, fullPath)) + } + } + + return files +} + +function sortDocs(files) { + return files.sort((a, b) => { + const sectionDiff = sectionOrder.indexOf(sectionForFile(a)) - sectionOrder.indexOf(sectionForFile(b)) + if (sectionDiff !== 0) return sectionDiff + return a.localeCompare(b) + }) +} + +function docUrl(relativePath) { + const withoutExt = relativePath.replace(/(^|\/)index\.md$/, '$1').replace(/\.md$/, '') + return `/${withoutExt}`.replace(/\/$/, '/') || '/' +} + +function formatDoc(doc) { + return `# ${doc.title}\n\nSource: ${doc.path}\nURL: ${doc.url}\n\n${doc.content}` +} + +function groupDocsBySection(docs) { + const bySection = new Map() + + for (const doc of docs) { + const docsInSection = bySection.get(doc.section) ?? [] + docsInSection.push(doc) + bySection.set(doc.section, docsInSection) + } + + return bySection +} + +function buildIndex(docs) { + const bySection = groupDocsBySection(docs) + const lines = [ + '# Tolaria Agent Docs', + '', + 'These docs are generated from the public Tolaria documentation for local AI agent lookup.', + '', + 'Start here, then use `rg` over this folder for specific Tolaria concepts and workflows.', + '', + ] + + for (const section of ['home', ...sectionOrder]) { + const docsInSection = bySection.get(section) + if (!docsInSection?.length) continue + + lines.push(`## ${titleFromSlug(section)}`, '') + for (const doc of docsInSection) { + lines.push(`- [${doc.title}](pages/${doc.path})`) + } + lines.push('') + } + + lines.push('## Generated Files', '') + lines.push('- `all.md`: all public docs concatenated for fast full-context reads.') + lines.push('- `search-index.json`: title, heading, section, path, and URL metadata for quick routing.') + lines.push('- `
.md`: one compact bundle per docs section.') + lines.push('- `pages/`: one generated Markdown file per public docs page.') + lines.push('') + + return lines.join('\n') +} + +function buildAgentInstructions() { + return `# AGENTS.md - Tolaria Docs Bundle + +This folder contains local, generated Tolaria product docs for AI agents. + +Use these docs when a user asks how Tolaria works, when you need product behavior, or before making Tolaria-specific assumptions. + +Recommended lookup flow: + +1. Read the active vault's AGENTS.md for vault-specific conventions. +2. Read this folder's index.md for the docs map. +3. Use \`rg\` over this folder for advanced concepts, workflows, shortcuts, Git, AutoGit, AI, types, properties, relationships, and troubleshooting. + +Vault-specific AGENTS.md wins for local conventions. These bundled docs win for Tolaria product behavior. +` +} + +function searchIndexFor(doc) { + const headings = [...doc.content.matchAll(/^#{2,3}\s+(.+)$/gm)].map((match) => match[1].trim()) + return { + title: doc.title, + path: `pages/${doc.path}`, + url: doc.url, + section: doc.section, + headings, + } +} + +async function main() { + const files = sortDocs(await listMarkdownFiles(siteRoot)) + const docs = [] + + for (const relativePath of files) { + const raw = await readFile(path.join(siteRoot, relativePath), 'utf8') + const content = stripFrontmatter(raw).trim() + const fallbackTitle = titleFromSlug(path.basename(relativePath, '.md')) + docs.push({ + content, + path: relativePath, + section: sectionForFile(relativePath), + title: firstHeading(content, fallbackTitle), + url: docUrl(relativePath), + }) + } + + await rm(outputRoot, { force: true, recursive: true }) + await mkdir(outputRoot, { recursive: true }) + + await writeFile(path.join(outputRoot, 'AGENTS.md'), buildAgentInstructions()) + await writeFile(path.join(outputRoot, 'index.md'), buildIndex(docs)) + await writeFile(path.join(outputRoot, 'all.md'), docs.map(formatDoc).join('\n\n---\n\n')) + await writeFile(path.join(outputRoot, 'search-index.json'), `${JSON.stringify(docs.map(searchIndexFor), null, 2)}\n`) + + for (const doc of docs) { + const outputPath = path.join(outputRoot, 'pages', doc.path) + await mkdir(path.dirname(outputPath), { recursive: true }) + await writeFile(outputPath, formatDoc(doc)) + } + + const bySection = groupDocsBySection(docs) + for (const [section, docsInSection] of bySection) { + await writeFile( + path.join(outputRoot, `${section}.md`), + docsInSection.map(formatDoc).join('\n\n---\n\n'), + ) + } + + console.log(`Generated ${docs.length} agent docs in ${path.relative(repoRoot, outputRoot)}`) +} + +main().catch((error) => { + console.error(error) + process.exit(1) +}) diff --git a/site/.vitepress/config.ts b/site/.vitepress/config.ts new file mode 100644 index 00000000..50251999 --- /dev/null +++ b/site/.vitepress/config.ts @@ -0,0 +1,107 @@ +import { defineConfig } from "vitepress"; + +const base = process.env.VITEPRESS_BASE ?? "/"; + +export default defineConfig({ + title: "Tolaria", + description: + "Tolaria is a local-first Markdown knowledge base with native relationships, Git history, and AI workflows.", + base, + cleanUrls: true, + head: [ + ["link", { rel: "icon", type: "image/png", href: `${base}landing/favicon.png` }], + ["meta", { property: "og:title", content: "Tolaria" }], + [ + "meta", + { + property: "og:description", + content: + "A second brain for the AI era. Free forever, local-first, Markdown-based, Git-ready, and AI-friendly.", + }, + ], + ], + themeConfig: { + logo: { src: "/landing/tolaria-icon.png", alt: "Tolaria" }, + nav: [ + { text: "Start", link: "/start/install" }, + { text: "Concepts", link: "/concepts/vaults" }, + { text: "Guides", link: "/guides/capture-a-note" }, + { text: "Downloads", link: "/download/" }, + ], + search: { + provider: "local", + }, + sidebar: [ + { + text: "Start Here", + items: [ + { text: "Install Tolaria", link: "/start/install" }, + { text: "First Launch", link: "/start/first-launch" }, + { text: "Getting Started Vault", link: "/start/getting-started-vault" }, + { text: "Open Or Create A Vault", link: "/start/open-or-create-vault" }, + ], + }, + { + text: "Concepts", + items: [ + { text: "Vaults", link: "/concepts/vaults" }, + { text: "Notes", link: "/concepts/notes" }, + { text: "Editor", link: "/concepts/editor" }, + { text: "Properties", link: "/concepts/properties" }, + { text: "Types", link: "/concepts/types" }, + { text: "Relationships", link: "/concepts/relationships" }, + { text: "Files And Media", link: "/concepts/files-and-media" }, + { text: "Inbox", link: "/concepts/inbox" }, + { text: "Git", link: "/concepts/git" }, + { text: "AI", link: "/concepts/ai" }, + ], + }, + { + text: "Guides", + items: [ + { text: "Capture A Note", link: "/guides/capture-a-note" }, + { text: "Organize The Inbox", link: "/guides/organize-inbox" }, + { text: "Use Wikilinks", link: "/guides/use-wikilinks" }, + { text: "Create Types", link: "/guides/create-types" }, + { text: "Build Custom Views", link: "/guides/build-custom-views" }, + { text: "Connect A Git Remote", link: "/guides/connect-a-git-remote" }, + { text: "Manage Git", link: "/guides/commit-and-push" }, + { text: "Use The AI", link: "/guides/use-ai-panel" }, + { text: "Configure AI Models", link: "/guides/configure-ai-models" }, + { text: "Use The Table Of Contents", link: "/guides/use-table-of-contents" }, + { text: "Use Media Previews", link: "/guides/use-media-previews" }, + { text: "Manage Display Preferences", link: "/guides/manage-display-preferences" }, + { text: "Use The Command Palette", link: "/guides/use-command-palette" }, + ], + }, + { + text: "Reference", + items: [ + { text: "Supported Platforms", link: "/reference/supported-platforms" }, + { text: "File Layout", link: "/reference/file-layout" }, + { text: "Frontmatter Fields", link: "/reference/frontmatter-fields" }, + { text: "View Filters", link: "/reference/view-filters" }, + { text: "Keyboard Shortcuts", link: "/reference/keyboard-shortcuts" }, + { text: "Release Channels", link: "/reference/release-channels" }, + { text: "Contribute", link: "/reference/contribute" }, + { text: "Docs Maintenance", link: "/reference/docs-maintenance" }, + ], + }, + { + text: "Troubleshooting", + items: [ + { text: "Vault Not Loading", link: "/troubleshooting/vault-not-loading" }, + { text: "Git Authentication", link: "/troubleshooting/git-auth" }, + { text: "AI Agent Not Found", link: "/troubleshooting/ai-agent-not-found" }, + { text: "Model Provider Connection", link: "/troubleshooting/model-provider-connection" }, + { text: "Sync Conflicts", link: "/troubleshooting/sync-conflicts" }, + ], + }, + ], + footer: { + message: "Free and open source. Local-first, Git-first, and Markdown-based.", + copyright: + "Tolaria is AGPL-3.0-or-later. The Tolaria name and logo remain covered by the project trademark policy.", + }, + }, +}); diff --git a/site/.vitepress/theme/LandingHome.vue b/site/.vitepress/theme/LandingHome.vue new file mode 100644 index 00000000..075873e1 --- /dev/null +++ b/site/.vitepress/theme/LandingHome.vue @@ -0,0 +1,1221 @@ + + + + + diff --git a/site/.vitepress/theme/Layout.vue b/site/.vitepress/theme/Layout.vue new file mode 100644 index 00000000..1fde4cb6 --- /dev/null +++ b/site/.vitepress/theme/Layout.vue @@ -0,0 +1,135 @@ + + + + + diff --git a/site/.vitepress/theme/assets/RefactoringSans.otf b/site/.vitepress/theme/assets/RefactoringSans.otf new file mode 100644 index 00000000..837a7761 Binary files /dev/null and b/site/.vitepress/theme/assets/RefactoringSans.otf differ diff --git a/site/.vitepress/theme/index.ts b/site/.vitepress/theme/index.ts new file mode 100644 index 00000000..f9c23905 --- /dev/null +++ b/site/.vitepress/theme/index.ts @@ -0,0 +1,12 @@ +import DefaultTheme from "vitepress/theme"; +import LandingHome from "./LandingHome.vue"; +import Layout from "./Layout.vue"; +import "./styles.css"; + +export default { + extends: DefaultTheme, + Layout, + enhanceApp({ app }) { + app.component("LandingHome", LandingHome); + }, +}; diff --git a/site/.vitepress/theme/styles.css b/site/.vitepress/theme/styles.css new file mode 100644 index 00000000..11d641ff --- /dev/null +++ b/site/.vitepress/theme/styles.css @@ -0,0 +1,230 @@ +@font-face { + font-family: "RefactoringSans"; + src: url("./assets/RefactoringSans.otf") format("opentype"); + font-display: swap; + font-style: normal; + font-weight: 400 900; +} + +:root { + --vp-font-family-base: + "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; + --vp-font-family-mono: "SF Mono", "Fira Code", ui-monospace, monospace; + --tolaria-font-brand: + "RefactoringSans", "Inter", -apple-system, BlinkMacSystemFont, sans-serif; + --tolaria-bg: #faf9f5; + --tolaria-surface: #ffffff; + --tolaria-surface-muted: #f7f6f3; + --tolaria-text: #1a1a18; + --tolaria-text-secondary: #6b6b60; + --tolaria-text-muted: #9b9b90; + --tolaria-border: #e5e5e0; + --tolaria-blue: #155dff; + --tolaria-blue-hover: #4a5ad6; + --tolaria-blue-soft: #e8eeff; + --vp-c-bg: var(--tolaria-surface); + --vp-c-bg-alt: var(--tolaria-surface-muted); + --vp-c-bg-elv: var(--tolaria-surface); + --vp-c-bg-soft: var(--tolaria-surface-muted); + --vp-c-text-1: var(--tolaria-text); + --vp-c-text-2: var(--tolaria-text-secondary); + --vp-c-text-3: var(--tolaria-text-muted); + --vp-c-border: var(--tolaria-border); + --vp-c-divider: var(--tolaria-border); + --vp-c-brand-1: var(--tolaria-blue); + --vp-c-brand-2: var(--tolaria-blue-hover); + --vp-c-brand-3: var(--tolaria-blue); + --vp-c-brand-soft: var(--tolaria-blue-soft); + --vp-button-brand-bg: var(--tolaria-blue); + --vp-button-brand-hover-bg: var(--tolaria-blue-hover); + --vp-button-brand-border: var(--tolaria-blue); + --vp-code-bg: #eeeeea; + --vp-code-color: var(--tolaria-text-secondary); +} + +.dark { + --vp-c-bg: #1f1e1b; + --vp-c-bg-alt: #191814; + --vp-c-bg-elv: #23221f; + --vp-c-bg-soft: #23221f; + --vp-c-text-1: #e6e1d8; + --vp-c-text-2: #b8b1a6; + --vp-c-text-3: #7f776d; + --vp-c-border: #34322d; + --vp-c-divider: #34322d; + --vp-c-brand-1: #78a4ff; + --vp-c-brand-2: #9bbeff; + --vp-c-brand-3: #78a4ff; + --vp-c-brand-soft: rgba(120, 164, 255, 0.16); + --vp-code-bg: #2d2b27; + --vp-code-color: #d8d1c6; +} + +html, +body, +#app { + background: var(--vp-c-bg); +} + +html.tolaria-landing-page, +html.tolaria-landing-page body, +html.tolaria-landing-page #app { + background: var(--tolaria-bg); +} + +.VPNavBarTitle .logo { + width: auto; + height: 28px; +} + +.VPNavBarTitle .title { + color: var(--vp-c-text-1); + font-family: var(--tolaria-font-brand); + font-size: 22px; + font-weight: 800; + letter-spacing: 0; +} + +.tolaria-landing-shell { + --vp-c-bg: var(--tolaria-bg); + --vp-nav-bg-color: var(--tolaria-bg); +} + +.tolaria-landing-shell .VPNav, +.tolaria-landing-shell .VPNavBar, +.tolaria-landing-shell .VPNavBar:not(.has-sidebar):not(.home.top), +.tolaria-landing-shell .VPNavBar:not(.home.top) .content-body, +.tolaria-landing-shell .VPNavBar .content-body { + background: var(--tolaria-bg); + background-color: var(--tolaria-bg); + backdrop-filter: blur(14px); +} + +.tolaria-landing-shell .VPNavBar .wrapper, +.tolaria-landing-shell .VPNavBar .container { + width: min(100%, 1280px); + max-width: 1280px; + margin-right: auto; + margin-left: auto; +} + +.tolaria-landing-shell .VPNavBar .wrapper { + padding-right: 20px; + padding-left: 20px; +} + +.tolaria-landing-shell .landing-container { + width: min(100%, 1280px); +} + +@media (min-width: 768px) { + .tolaria-landing-shell .VPNavBar .wrapper { + padding-right: 40px; + padding-left: 40px; + } +} + +.tolaria-landing-shell .VPNavBar .divider, +.tolaria-landing-shell .VPNavBar .divider-line { + display: none; + background-color: transparent; +} + +.tolaria-landing-shell .VPNavBar .divider-line { + opacity: 0; + transition: opacity 160ms ease; +} + +.VPNavBar { + position: relative; + z-index: calc(var(--vp-z-index-nav) + 2); +} + +.tolaria-landing-shell .VPLocalNav { + display: none; +} + +.VPNavScreen { + display: block !important; + visibility: visible !important; + opacity: 1 !important; + bottom: auto !important; + height: calc(100vh - var(--vp-nav-height) - var(--vp-layout-top-height, 0px)) !important; + z-index: calc(var(--vp-z-index-nav) + 1); + background: var(--vp-c-bg); +} + +.tolaria-scrolled .tolaria-landing-shell .VPNav { + box-shadow: 0 10px 24px rgba(26, 26, 24, 0.06); +} + +.tolaria-scrolled .tolaria-landing-shell .VPNavBar .divider-line { + opacity: 1; +} + +.DocSearch-Button { + border-radius: 999px; +} + +.tolaria-landing-shell .DocSearch-Button { + border: 1px solid var(--tolaria-border); + background: #fff; +} + +.vp-doc h1, +.vp-doc h2, +.vp-doc h3 { + letter-spacing: 0; +} + +.vp-doc a, +.VPNavBarMenuLink.active, +.VPLink.active { + color: var(--vp-c-brand-1); +} + +.vp-doc table { + display: table; + width: 100%; +} + +.vp-doc th { + color: var(--vp-c-text-1); + background: var(--vp-c-bg-soft); +} + +.vp-doc td, +.vp-doc th { + border-color: var(--vp-c-divider); +} + +.tolaria-landing-shell .VPContent, +.tolaria-landing-shell .VPPage, +.tolaria-landing-shell .VPDoc, +.tolaria-landing-shell .VPDoc .container, +.tolaria-landing-shell .VPDoc .content, +.tolaria-landing-shell .VPDoc .content-container, +.tolaria-landing-shell .VPDoc .main, +.tolaria-landing-shell .vp-doc { + max-width: none; + padding: 0; + margin: 0; +} + +@media (min-width: 960px) { + .tolaria-landing-shell .VPContent { + padding-top: var(--vp-nav-height); + } +} + +.tolaria-landing-shell .vp-doc > div { + width: 100%; +} + +.tolaria-landing-shell .vp-doc a { + text-decoration: none; +} + +.tolaria-landing-shell .VPFooter { + display: none; +} diff --git a/site/concepts/ai.md b/site/concepts/ai.md new file mode 100644 index 00000000..705c9de7 --- /dev/null +++ b/site/concepts/ai.md @@ -0,0 +1,32 @@ +# AI + +Tolaria has two AI paths: coding agents that can use tools to inspect and edit a vault, and direct model targets that answer in chat mode from note context. + +## Coding Agents + +The AI panel can stream supported local CLI agents through Tolaria's normalized event layer. Current targets include Claude Code, Codex, OpenCode, Pi, and Gemini CLI when they are installed on the machine. + +Coding agents can run in: + +- **Vault Safe** mode, limited to file, search, and edit tools. +- **Power User** mode, which can allow local shell commands scoped to the active vault for agents that support shell access. + +## Direct Models + +Direct model targets run in chat mode. They receive the active note, linked context, and conversation history, but they do not receive vault-write tools or shell access. + +Supported provider shapes include: + +- Local models through Ollama or LM Studio. +- Hosted providers such as OpenAI, Anthropic, Gemini, and OpenRouter. +- Custom OpenAI-compatible endpoints. + +## External MCP Setup + +Tolaria exposes an MCP server for external tools. The setup flow can write Tolaria's MCP entry into Claude Code, Gemini CLI, Cursor, and a generic MCP config path, and it can also copy the exact JSON snippet for manual setup. + +MCP setup is explicit. Closing the dialog leaves third-party config files untouched. + +## Why Git Matters For AI + +AI-generated changes should be inspectable. Git gives you diffs, history, rollback, and a clear boundary between suggestions and committed work. diff --git a/site/concepts/editor.md b/site/concepts/editor.md new file mode 100644 index 00000000..b07bc395 --- /dev/null +++ b/site/concepts/editor.md @@ -0,0 +1,23 @@ +# Editor + +Tolaria offers a rich editor for daily writing and a raw Markdown mode for exact file control. Both modes write back to the same Markdown file. + +## Rich Editing + +The rich editor supports blocks, slash commands, wikilinks, tables, code blocks, images, Mermaid diagrams, LaTeX-style math, and markdown-backed whiteboards. + +Use it when you want to write and reorganize quickly without thinking about Markdown syntax. + +## Raw Mode + +Raw mode shows the Markdown source directly. Use it when you need to edit YAML frontmatter, repair unusual Markdown, or make an exact text change. + +Toggle raw mode with `Cmd+\` on macOS or `Ctrl+\` on Windows and Linux. + +## Table Of Contents + +The table of contents panel builds an outline from headings in the current note. It is useful for long notes, procedures, research files, and generated documents. Toggle it with `Cmd+Shift+T` on macOS or `Ctrl+Shift+T` on Windows and Linux. + +## Width + +Notes can use normal or wide editor width. Set the default in Settings, or override an individual note from the editor toolbar. diff --git a/site/concepts/files-and-media.md b/site/concepts/files-and-media.md new file mode 100644 index 00000000..e88854ce --- /dev/null +++ b/site/concepts/files-and-media.md @@ -0,0 +1,34 @@ +# Files And Media + +Tolaria starts with Markdown notes, but a vault can also contain images, PDFs, media files, whiteboards, and other local files. + +## Mermaid Diagrams + +Use Mermaid code blocks when a note needs a diagram that should stay plain text and versionable. + +````md +```mermaid +flowchart LR + Idea --> Draft --> Review --> Publish +``` +```` + +Tolaria renders Mermaid diagrams in the editor while keeping the source in Markdown. + +## Attachments + +Images pasted into the editor are saved into the vault as normal files. They remain portable and can be opened by other tools. + +## Previews + +Tolaria can preview common image files, PDFs, and supported media files in the app. Files without an in-app preview can still be opened in the default system app. + +Settings control whether PDFs, images, and unsupported files appear in All Notes. Folder browsing still shows files in their folders. + +## Whiteboards + +Whiteboards use tldraw in the editor, but their durable representation stays in Markdown. That keeps them inside the vault and versioned by Git with the rest of your notes. + +## Git Boundary + +If generated or local-only files are ignored by Git, Tolaria can hide them from notes, search, quick open, and folders. Use this when build artifacts or private local files should not behave like vault content. diff --git a/site/concepts/git.md b/site/concepts/git.md new file mode 100644 index 00000000..f389a349 --- /dev/null +++ b/site/concepts/git.md @@ -0,0 +1,29 @@ +# Git + +Git is Tolaria's recommended history and sync layer. Tolaria can work with plain Markdown folders, and Git unlocks local history, recovery, remote backup, and multi-device workflows when you want them. + +Tolaria acts as a lightweight Git client for your vault. You can review changes, commit, pull, push, and inspect history without leaving the app. + +## What Tolaria Uses Git For + +- Whole-vault commit history. +- Current diff for the vault. +- Per-note history. +- Current diff for an individual note. +- Pull and push. +- Conflict detection and resolution. +- Remote connection for local-only vaults. + +## History And Diffs + +Each note can show its own history and current diff, so you can understand how that file changed over time or what is unsaved relative to Git. + +Tolaria also shows a history of the whole vault. Use it when you want to review broader changes across multiple notes before committing or syncing. + +## Local Commits + +You can commit changes inside Tolaria without leaving the app. This gives you useful restore points even before a remote is configured. + +## Remotes + +Connect a compatible Git remote when you want sync or backup. Tolaria relies on your system Git authentication, so GitHub CLI, SSH keys, credential helpers, and existing Git configuration can continue to work. diff --git a/site/concepts/inbox.md b/site/concepts/inbox.md new file mode 100644 index 00000000..8c22e5a7 --- /dev/null +++ b/site/concepts/inbox.md @@ -0,0 +1,23 @@ +# Inbox + +The Inbox is for notes that have been captured but not yet organized. + +## Why It Exists + +Fast capture should not require perfect structure. The Inbox gives you a place to put incomplete notes, then process them later. + +The Inbox workflow is optional. Turn it off in Settings > Workflow if you prefer every note to appear organized by default. + +## Organizing Inbox Notes + +When reviewing the Inbox: + +1. Give the note a clear H1. +2. Set its `type`. +3. Add status, dates, or URL if useful. +4. Add relationships with wikilinks or frontmatter fields. +5. Move it into a folder only if the folder adds value. + +## Healthy Inbox Habit + +Keep the Inbox small enough that it can be reviewed in one focused pass. Tolaria works best when capture is fast and organization is deliberate. diff --git a/site/concepts/notes.md b/site/concepts/notes.md new file mode 100644 index 00000000..666c5f0f --- /dev/null +++ b/site/concepts/notes.md @@ -0,0 +1,34 @@ +# Notes + +A note is a Markdown file with optional YAML frontmatter. Tolaria reads the first H1 as the primary title and keeps the file on disk as the durable representation. + +## Anatomy + +```md +--- +type: Project +status: Active +belongs_to: + - "[[workspace]]" +--- + +# Launch Documentation + +Draft the public Tolaria docs and keep them close to code changes. +``` + +## Titles + +The first H1 is the note title. Tolaria uses that title wherever the note is displayed: note lists, search results, wikilink suggestions, relationship pickers, tabs, and window titles. + +The title is separate from the filename. The filename stays visible in the breadcrumb so you can see the file on disk, and you can rename it independently when needed. + +Use the breadcrumb action to rename the file to match the title. New untitled notes can also auto-rename from the first H1 the first time they get a real title. Turn this behavior off in Settings > Vault Content > Titles & Filenames if you prefer filenames to stay unchanged until you rename them manually. + +## Body Links + +Use `[[wikilinks]]` to connect notes from the body. Tolaria shows autocomplete suggestions while you type, and links can resolve by filename or title. + +## Frontmatter + +Use frontmatter for structured fields such as type, status, date, URL, and relationships. Keep free-form thinking in the body. diff --git a/site/concepts/properties.md b/site/concepts/properties.md new file mode 100644 index 00000000..baa6aa4e --- /dev/null +++ b/site/concepts/properties.md @@ -0,0 +1,26 @@ +# Properties + +Properties are frontmatter fields that Tolaria can display, filter, and edit. + +## Suggested Properties + +Suggested properties are the fields Tolaria knows how to create quickly from the Properties panel. When a suggested property is missing, the panel shows a shortcut to add it with the right editor. + +| Field | Purpose | +| --- | --- | +| `type` | Groups the note into a type such as Project, Person, or Topic. | +| `status` | Tracks lifecycle state such as Active, Done, or Blocked. | +| `url` | Stores a canonical external link. | +| `date` | Represents a single date. | + +## System Properties + +Fields that start with `_` are system properties. They remain in plain text but are hidden from normal property editing. + +Examples include `_icon`, `_color`, `_order`, `_sidebar_label`, `_width`, and `_pinned_properties` on type documents or notes. + +## Property Editing + +The Properties panel is the safest place to edit structured properties. Toggle it with `Cmd+Shift+I` on macOS or `Ctrl+Shift+I` on Windows and Linux. + +Date fields use Tolaria's picker, relationship fields can use wikilinks, and raw Markdown mode is available when you need direct control over YAML. diff --git a/site/concepts/relationships.md b/site/concepts/relationships.md new file mode 100644 index 00000000..424f9faf --- /dev/null +++ b/site/concepts/relationships.md @@ -0,0 +1,32 @@ +# Relationships + +Relationships make a vault feel like a graph instead of a pile of documents. + +## Relationship Fields + +Any frontmatter field containing wikilinks can become a relationship. Relationship fields can point to one note or to an array of notes. + +```yaml +belongs_to: + - "[[product-work]]" +related_to: + - "[[documentation]]" + - "[[editor-research]]" +blocked_by: + - "[[release-process]]" + - "[[sync-conflicts]]" +``` + +Tolaria supports default relationship fields out of the box: `belongs_to`, `has`, and `related_to`. It also detects custom relationship fields dynamically when they contain wikilinks. + +Default relationships have automatically computed inverses. If a note says it `belongs_to` a project, the project can show that note under its inverse `has` relationship without you writing the reverse link by hand. `related_to` works as a lateral relationship in both directions. + +These outgoing and inverse relationships appear in the Properties panel and in Neighborhood mode, where the note list becomes a graph view around the selected note. + +## Body Links Versus Relationship Fields + +Use body links when the relationship appears naturally in writing. Use frontmatter relationships when the connection is important enough to show in navigation, filters, Neighborhood mode, or the Properties panel. + +## Backlinks + +Tolaria can show incoming links and inverse relationships, making it easier to navigate from a note to the rest of its context. diff --git a/site/concepts/types.md b/site/concepts/types.md new file mode 100644 index 00000000..25adf588 --- /dev/null +++ b/site/concepts/types.md @@ -0,0 +1,49 @@ +# Types + +Types describe what kind of thing a note represents: Project, Person, Topic, Procedure, Event, or any category you create. + +## Type Field + +The `type:` field assigns a note to a type. + +```yaml +type: Project +``` + +Tolaria does not infer type from folder location. Moving a file into another folder does not change its type. + +## Prefer Types Over Folders + +Types are the preferred way to group notes in Tolaria. Folders are supported for existing vaults and fallback organization, but Tolaria is built around types and relationships because they carry stronger meaning than file paths. + +Use types for semantic groups such as Projects, People, Topics, Procedures, Events, and Essays. Use relationships to connect notes across those groups. This gives Tolaria better structure for navigation, filtering, properties, templates, and future automation than folder location alone. + +## Type Documents + +Type documents are Markdown notes with `type: Type` in frontmatter. They describe how a type should appear and what new notes of that type should start with. + +```yaml +--- +type: Type +_icon: folder +_color: blue +_sidebar_label: Projects +_order: 10 +--- + +# Project +``` + +## What Types Control + +- Sidebar grouping. +- Type icon and color. +- Sidebar order and label. +- Pinned properties. +- New-note templates. + +## New Note Defaults + +Type documents can define empty properties and relationships. When you create a new note of that type, Tolaria shows placeholders for those fields so you can fill them in from the Properties panel. + +If a type document gives a property a value, that value becomes the default for new notes of that type. For example, a Project type can define `status: Active` so every new project starts active until you change it. diff --git a/site/concepts/vaults.md b/site/concepts/vaults.md new file mode 100644 index 00000000..cc264dc4 --- /dev/null +++ b/site/concepts/vaults.md @@ -0,0 +1,35 @@ +# Vaults + +A vault is the folder Tolaria reads and writes. The filesystem is the source of truth; the app state and cache are derived from files. + +## Core Rules + +- Notes are Markdown files. +- YAML frontmatter provides structure. +- Attachments are normal files inside the vault. +- Type definitions and saved views are also files. +- Git can track history and support remote sync. + +## Why Local Files Matter + +Local files keep your notes inspectable. You can open them in another editor, search with command-line tools, back them up with your own system, and version them with Git. + +Tolaria should never become the only way to read your data. + +## Git Is A Capability + +A plain folder of Markdown files can open as a vault. Git-backed vaults unlock history, changes, commits, pull, push, conflict handling, and remote setup. + +If a folder is not a Git repository, Tolaria can initialize Git when you explicitly ask it to. It avoids initializing broad personal folders such as Desktop, Documents, or Downloads unless they are clearly dedicated vault folders. + +## App State Versus Vault State + +Vault-level information should travel with the vault. Machine-specific preferences stay with the app installation. + +| Vault state | App state | +| --- | --- | +| Type icons and colors | Editor zoom | +| Saved views | Window size | +| Pinned properties | Recent vault list | +| Relationship conventions | Local cache | +| Vault AI guidance files | AI target selection | diff --git a/site/download/index.md b/site/download/index.md new file mode 100644 index 00000000..0363bf97 --- /dev/null +++ b/site/download/index.md @@ -0,0 +1,19 @@ +# Download + +Download Tolaria from the latest stable release. + +## Latest Stable + +[Open the installer download page](https://refactoringhq.github.io/tolaria/download/) + +The download page reads the latest stable release metadata and points you to the current macOS, Windows, or Linux artifact. + +## Other Builds + +- [Browse all GitHub releases](https://github.com/refactoringhq/tolaria/releases) +- [Read release history](/releases/) +- [Learn release channels](/reference/release-channels) + +## Verify The Version + +After launching the app, check the version shown in Tolaria's status bar or release surface. diff --git a/site/guides/build-custom-views.md b/site/guides/build-custom-views.md new file mode 100644 index 00000000..6e942298 --- /dev/null +++ b/site/guides/build-custom-views.md @@ -0,0 +1,25 @@ +# Build Custom Views + +Custom views are saved filters for recurring questions. + +## Good View Candidates + +- Active projects. +- People without a recent follow-up. +- Drafts ready for review. +- Notes changed this week. +- Events in a date range. + +## View Definition + +Saved views live as files in the vault. They describe filters, sorting, and visible columns using structured data. + +## Filters + +Custom views can use nested conditions, similar to Notion or Airtable filter groups. Combine `all` and `any` logic when a view needs to answer a more precise question than a single field filter can express. + +Date filters support dynamic natural-language values such as `today`, `yesterday`, or `one week ago`. Use these for views that should keep moving over time, such as recent work, stale follow-ups, or upcoming events. + +## Design The Question First + +Before creating a view, write the question it answers. A good view is not "all fields with all filters"; it is a focused lens. diff --git a/site/guides/capture-a-note.md b/site/guides/capture-a-note.md new file mode 100644 index 00000000..7bee504b --- /dev/null +++ b/site/guides/capture-a-note.md @@ -0,0 +1,18 @@ +# Capture A Note + +Use capture when you need to get an idea into the vault before you know where it belongs. + +## Steps + +1. Press `Cmd+N` on macOS or `Ctrl+N` on Windows and Linux. +2. Write a clear H1. +3. Add the rough content. +4. Leave structure for later if you are still thinking. + +## Capture Well + +Prefer a useful title over a perfect taxonomy. You can add type, status, and relationships during inbox review. + +## When To Add Structure Immediately + +Add structure while capturing when the note's type or relationships are already obvious. Otherwise, capture the idea first and organize it later. diff --git a/site/guides/commit-and-push.md b/site/guides/commit-and-push.md new file mode 100644 index 00000000..0017ce95 --- /dev/null +++ b/site/guides/commit-and-push.md @@ -0,0 +1,23 @@ +# Manage Git Manually Or With AutoGit + +Tolaria can act as a lightweight Git client for a Git-enabled vault. You can manage commits and pushes yourself, or enable AutoGit to create conservative checkpoints after editing pauses or when the app is no longer active. + +## Manual Git + +1. Open the Git or changes surface. +2. Review changed files. +3. Write a short commit message. +4. Commit locally. +5. Push when a remote is configured. + +If the remote has changed, pull first and resolve any conflicts. If the vault has no remote, manual commits still give you local history, diffs, and rollback. + +## AutoGit + +AutoGit is available in Settings for Git-enabled vaults. When enabled, Tolaria automatically commits and pushes saved local changes after an idle pause or after the app becomes inactive. + +Use AutoGit when you want the safety of regular checkpoints without interrupting capture or editing. You can still inspect each note's current diff, review note history, and browse the whole-vault history before making larger manual commits. + +## Use Small Commits + +Small commits make it easier to understand what changed, roll back safely, and review AI-generated edits. diff --git a/site/guides/configure-ai-models.md b/site/guides/configure-ai-models.md new file mode 100644 index 00000000..a77379ba --- /dev/null +++ b/site/guides/configure-ai-models.md @@ -0,0 +1,25 @@ +# Configure AI Models + +Use model providers when you want chat over note context without giving an agent vault-write tools. + +## Local Models + +Local model targets are for tools such as Ollama and LM Studio. They usually need a base URL and model ID, and they usually do not need an API key. + +## API Models + +API model targets are for hosted providers such as OpenAI, Anthropic, Gemini, OpenRouter, or another OpenAI-compatible endpoint. + +Tolaria does not store provider API keys in vault settings. Choose one of the supported key paths: + +- Save the key locally on this device. +- Read the key from an environment variable. +- Use no key for local providers that do not require one. + +## Test The Connection + +After adding a provider, use the test action in Settings. A successful test means Tolaria reached the endpoint and the model replied. + +## Select The Target + +Once configured, choose the model from the AI target selector or set it as the default AI target in Settings. diff --git a/site/guides/connect-a-git-remote.md b/site/guides/connect-a-git-remote.md new file mode 100644 index 00000000..4fb1285c --- /dev/null +++ b/site/guides/connect-a-git-remote.md @@ -0,0 +1,23 @@ +# Connect A Git Remote + +Connect a remote when you want backup or sync beyond the current machine. + +## Before You Start + +Make sure the remote repository exists and your system Git can authenticate to it. Tolaria uses system Git rather than storing provider-specific credentials. + +## Steps + +1. Open the bottom status bar remote chip, or run `Add Remote` from the command palette. +2. Paste the remote URL. +3. Confirm the remote name. +4. Fetch or push according to the app prompt. + +## Recommended Auth + +- SSH keys. +- GitHub CLI authentication. +- Existing Git credential helpers. +- macOS Keychain credentials for HTTPS remotes on macOS. + +If authentication fails, see [Git Authentication](/troubleshooting/git-auth). diff --git a/site/guides/create-types.md b/site/guides/create-types.md new file mode 100644 index 00000000..1e74697c --- /dev/null +++ b/site/guides/create-types.md @@ -0,0 +1,33 @@ +# Create Types + +Create a type when several notes share the same role in your system. + +## Steps + +1. Run `New Type` from the command palette, or click `+` in the Types header in the sidebar. +2. Give the type a clear name. +3. Add optional icon, color, sidebar order, sidebar label, pinned properties, suggested fields, default values, or a new-note template. + +You can also right-click a type in the sidebar to change its icon and color. + +```yaml +--- +type: Type +_icon: briefcase +_color: blue +_sidebar_label: Projects +_order: 10 +--- + +# Project +``` + +## Use Types Sparingly + +A type should represent a recurring category, not a one-off label. If you only need a temporary grouping, use a saved view or property instead. + +## Templates + +Type documents can include a Markdown template for new notes of that type. Keep templates small and useful: a heading, a few expected fields, and the first checklist are usually enough. + +Type documents can also define fields for new notes. Empty properties and relationships become placeholders in new notes of that type. Properties with values become defaults for new notes of that type. diff --git a/site/guides/manage-display-preferences.md b/site/guides/manage-display-preferences.md new file mode 100644 index 00000000..ebf30685 --- /dev/null +++ b/site/guides/manage-display-preferences.md @@ -0,0 +1,26 @@ +# Manage Display Preferences + +Display preferences live in local app settings unless a setting is intentionally stored in the note or vault. + +## Theme + +Choose Light, Dark, or System in Settings. System follows the operating system appearance at runtime. + +You can also switch theme mode from the command palette. + +## Note Width + +Set the default rich-editor width in Settings: + +- **Normal** for focused writing. +- **Wide** for tables, diagrams, dense notes, and generated documents. + +An individual note can override the default width from the editor toolbar. That override is stored as `_width` in the note frontmatter. + +## Sidebar Labels + +Tolaria can pluralize type names in the sidebar. Turn this off in Settings if your type names should be shown exactly as written, or use `_sidebar_label` on a type document for an explicit label. + +## Vault Content + +Settings also control whether Gitignored files and non-Markdown file categories are visible in the app. Use these controls to keep generated or local-only files out of regular note workflows. diff --git a/site/guides/organize-inbox.md b/site/guides/organize-inbox.md new file mode 100644 index 00000000..9b17580b --- /dev/null +++ b/site/guides/organize-inbox.md @@ -0,0 +1,31 @@ +# Organize The Inbox + +Inbox review turns quick captures into usable knowledge. + +## Remove A Note From Inbox + +When a note is organized enough, mark it as organized. Use `Cmd+E` on macOS or `Ctrl+E` on Windows and Linux, or click the organize action in the breadcrumb bar. + +That action is what removes the note from Inbox. If auto-advance is enabled in Settings > Workflow, Tolaria opens the next Inbox item immediately after you mark the current note organized. + +## Review Checklist + +- Rename unclear notes. +- Add or correct the first H1. +- Set `type`. +- Add `status` for actionable notes. +- Add `belongs_to`, `related_to`, or other relationship fields when useful. +- Archive or delete notes that no longer matter. + +## Make Notes Navigable + +A note is organized when you can answer: + +- What kind of thing is this? +- What is it connected to? +- What is this useful for? +- What will I do with it? + +## Avoid Over-Structuring + +Do not add fields just because they exist. Add the structure that will help future navigation, review, or automation. diff --git a/site/guides/use-ai-panel.md b/site/guides/use-ai-panel.md new file mode 100644 index 00000000..3eccc5eb --- /dev/null +++ b/site/guides/use-ai-panel.md @@ -0,0 +1,38 @@ +# Use The AI + +Tolaria gives you two ways to ask for AI help: open the AI panel for an ongoing conversation, or prompt directly from the editor with `Cmd+K` followed by a space. + +## Choose How To Prompt + +- **AI panel** is best for longer conversations, agent work, and requests that need visible back-and-forth. +- **Inline prompt** is best when you are already writing. Press `Cmd+K`, type a space, then write the prompt you want the AI to handle from the current note context. + +## Choose A Target + +Open Settings and choose the default AI target: + +- **Coding agent** for tool-backed vault editing through Claude Code, Codex, OpenCode, Pi, or Gemini CLI. +- **Local model** for Ollama or LM Studio chat over note context. +- **API model** for OpenAI, Anthropic, Gemini, OpenRouter, or an OpenAI-compatible endpoint. + +If a coding agent is missing, install it and reopen Tolaria or switch to another target. + +## Permission Mode + +Coding agents support per-vault permission modes: + +- **Vault Safe** keeps agents limited to file, search, and edit tools. +- **Power User** can allow shell commands for agents that support them. + +Direct model targets always stay in chat mode. They can use note context, but they cannot edit vault files through tools. + +## Good Requests + +- "Find notes related to this project." +- "Summarize what changed in this note." +- "Draft a weekly review from these linked notes." +- "Update this checklist based on the current project status." + +## Review Changes + +AI edits are file edits. Review them with Tolaria's diff and Git history before committing. diff --git a/site/guides/use-command-palette.md b/site/guides/use-command-palette.md new file mode 100644 index 00000000..410eeb33 --- /dev/null +++ b/site/guides/use-command-palette.md @@ -0,0 +1,26 @@ +# Use The Command Palette + +The command palette is the fastest way to move around Tolaria. + +Open it with: + +- `Cmd+K` on macOS. +- `Ctrl+K` on Linux and Windows. + +## Common Commands + +- New Note. +- Search. +- Open Settings. +- Reload Vault. +- Add Remote. +- Open Getting Started Vault. +- Toggle Raw Mode. +- Toggle Table of Contents. +- Toggle AI Panel. +- Use Light, Dark, or System theme. +- Open in New Window. + +## Keyboard-First Workflow + +Use the palette when you know what you want to do but do not want to hunt through panels. It is also the best place to discover commands as the app grows. diff --git a/site/guides/use-media-previews.md b/site/guides/use-media-previews.md new file mode 100644 index 00000000..ae39adfb --- /dev/null +++ b/site/guides/use-media-previews.md @@ -0,0 +1,25 @@ +# Use Media Previews + +Media previews let you inspect vault files without leaving Tolaria. + +## Open A File + +Select an image, PDF, media file, or unsupported file from a folder or file list. Tolaria opens supported files in the app and offers an external-open action for files that should use the system default app. + +## All Notes Visibility + +Open Settings to choose whether non-Markdown files appear in All Notes: + +- PDFs. +- Images. +- Unsupported files. + +Folder browsing still shows files in their folders even when a category is hidden from All Notes. + +## Attachments + +When you paste or drop an image into a note, Tolaria copies it into the vault and references the copied file from Markdown. + +## Troubleshooting + +If a preview does not render, open the file in the default app to confirm the file is valid, then check whether the file is inside the active vault and not blocked by operating-system permissions. diff --git a/site/guides/use-table-of-contents.md b/site/guides/use-table-of-contents.md new file mode 100644 index 00000000..bb3663d1 --- /dev/null +++ b/site/guides/use-table-of-contents.md @@ -0,0 +1,23 @@ +# Use The Table Of Contents + +The table of contents panel helps you navigate long notes by heading. + +## Open It + +Use the editor toolbar, the command palette, or the shortcut: + +- `Cmd+Shift+T` on macOS. +- `Ctrl+Shift+T` on Windows and Linux. + +## How It Works + +Tolaria builds the outline from the current note's headings. The panel updates as the note changes and can jump to sections in the editor. + +## Good Uses + +- Long procedures. +- Meeting notes with many sections. +- Research notes. +- Generated documents that need review. + +If a note has no useful headings, add clear H2 and H3 sections rather than relying on a long uninterrupted document. diff --git a/site/guides/use-wikilinks.md b/site/guides/use-wikilinks.md new file mode 100644 index 00000000..b84fa111 --- /dev/null +++ b/site/guides/use-wikilinks.md @@ -0,0 +1,24 @@ +# Use Wikilinks + +Wikilinks connect notes by name. + +```md +This project belongs to [[content-systems]] and is related to [[git-workflows]]. +``` + +## Link From The Body + +Use body links when the connection is part of the sentence you are writing. + +## Link From Frontmatter + +Use frontmatter links when the relationship should become structured metadata. + +```yaml +related_to: + - "[[git-workflows]]" +``` + +## Keep Links Stable + +Prefer clear note titles and filenames. Tolaria's wikilink autocomplete helps you pick the right target while you type. diff --git a/site/index.md b/site/index.md new file mode 100644 index 00000000..367f19cd --- /dev/null +++ b/site/index.md @@ -0,0 +1,10 @@ +--- +layout: page +sidebar: false +aside: false +landing: true +title: Tolaria +description: A second brain for the AI era. Free forever. +--- + + diff --git a/site/public/landing/Ai chat 3.png b/site/public/landing/Ai chat 3.png new file mode 100644 index 00000000..6ecc00dc Binary files /dev/null and b/site/public/landing/Ai chat 3.png differ diff --git a/site/public/landing/Block editor.png b/site/public/landing/Block editor.png new file mode 100644 index 00000000..757d8df0 Binary files /dev/null and b/site/public/landing/Block editor.png differ diff --git a/site/public/landing/Luca hello.jpeg b/site/public/landing/Luca hello.jpeg new file mode 100644 index 00000000..20d44267 Binary files /dev/null and b/site/public/landing/Luca hello.jpeg differ diff --git a/site/public/landing/ananth.webp b/site/public/landing/ananth.webp new file mode 100644 index 00000000..33b7a994 Binary files /dev/null and b/site/public/landing/ananth.webp differ diff --git a/site/public/landing/favicon.png b/site/public/landing/favicon.png new file mode 100644 index 00000000..46ac81d8 Binary files /dev/null and b/site/public/landing/favicon.png differ diff --git a/site/public/landing/git-history.png b/site/public/landing/git-history.png new file mode 100644 index 00000000..a50ab4fe Binary files /dev/null and b/site/public/landing/git-history.png differ diff --git a/site/public/landing/gregor.webp b/site/public/landing/gregor.webp new file mode 100644 index 00000000..ea505682 Binary files /dev/null and b/site/public/landing/gregor.webp differ diff --git a/site/public/landing/jordan.webp b/site/public/landing/jordan.webp new file mode 100644 index 00000000..81c83304 Binary files /dev/null and b/site/public/landing/jordan.webp differ diff --git a/site/public/landing/les-saintes.jpg b/site/public/landing/les-saintes.jpg new file mode 100644 index 00000000..fe7cdbfb Binary files /dev/null and b/site/public/landing/les-saintes.jpg differ diff --git a/site/public/landing/pulse.png b/site/public/landing/pulse.png new file mode 100644 index 00000000..933a9cd7 Binary files /dev/null and b/site/public/landing/pulse.png differ diff --git a/site/public/landing/relationships.png b/site/public/landing/relationships.png new file mode 100644 index 00000000..280fbd7e Binary files /dev/null and b/site/public/landing/relationships.png differ diff --git a/site/public/landing/simply-files.png b/site/public/landing/simply-files.png new file mode 100644 index 00000000..fd289b07 Binary files /dev/null and b/site/public/landing/simply-files.png differ diff --git a/site/public/landing/tolaria-icon.png b/site/public/landing/tolaria-icon.png new file mode 100644 index 00000000..5aad8cf6 Binary files /dev/null and b/site/public/landing/tolaria-icon.png differ diff --git a/site/public/landing/tolaria-screenshot-dark.png b/site/public/landing/tolaria-screenshot-dark.png new file mode 100644 index 00000000..d4d94a19 Binary files /dev/null and b/site/public/landing/tolaria-screenshot-dark.png differ diff --git a/site/public/landing/tolaria-screenshot.png b/site/public/landing/tolaria-screenshot.png new file mode 100644 index 00000000..739d51ba Binary files /dev/null and b/site/public/landing/tolaria-screenshot.png differ diff --git a/site/public/landing/track changes and push.png b/site/public/landing/track changes and push.png new file mode 100644 index 00000000..433fa4c7 Binary files /dev/null and b/site/public/landing/track changes and push.png differ diff --git a/site/public/landing/wikilinks.png b/site/public/landing/wikilinks.png new file mode 100644 index 00000000..6fb75686 Binary files /dev/null and b/site/public/landing/wikilinks.png differ diff --git a/site/public/landing/yaml frontmatter.png b/site/public/landing/yaml frontmatter.png new file mode 100644 index 00000000..bddaf4d7 Binary files /dev/null and b/site/public/landing/yaml frontmatter.png differ diff --git a/site/public/tolaria-icon.svg b/site/public/tolaria-icon.svg new file mode 100644 index 00000000..8d3de9a6 --- /dev/null +++ b/site/public/tolaria-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/site/reference/contribute.md b/site/reference/contribute.md new file mode 100644 index 00000000..6971864c --- /dev/null +++ b/site/reference/contribute.md @@ -0,0 +1,23 @@ +# Contribute + +Tolaria is free and open source, and any kind of help is useful. Pick the path that matches what you want to do. + +## Sponsor Or Support + +The best way to support Tolaria is to subscribe to [Refactoring](https://refactoring.fm/), Luca's newsletter and community about running good teams and shipping software with AI. + +## Feature Requests + +Use the [product board](https://tolaria.canny.io/) for feature ideas. Search first, upvote existing ideas, and create a new post when the request is genuinely new. + +## Discussions + +Use [GitHub Discussions](https://github.com/refactoringhq/tolaria/discussions) for questions, conversations, show and tell, and broader community context. + +## Contribute Code + +Small, focused pull requests are welcome. Check the product board first so you build the right thing, then open a PR on [GitHub](https://github.com/refactoringhq/tolaria/pulls). The [contributing guide](https://github.com/refactoringhq/tolaria/blob/main/CONTRIBUTING.md) explains the local workflow. + +## Report A Bug + +Use [GitHub Issues](https://github.com/refactoringhq/tolaria/issues) for bugs. Include what happened, what you expected, and clear reproduction steps. If you are reporting from inside Tolaria, use the Contribute panel to copy sanitized diagnostics and attach them to the issue. diff --git a/site/reference/docs-maintenance.md b/site/reference/docs-maintenance.md new file mode 100644 index 00000000..7efa5d5d --- /dev/null +++ b/site/reference/docs-maintenance.md @@ -0,0 +1,38 @@ +# Docs Maintenance + +The public docs live in the app repo so documentation changes can ship with behavior changes. + +## Update Docs When You Change + +- A Tauri command. +- A new component or hook that changes user behavior. +- A data model or frontmatter convention. +- Git, AI, onboarding, or release behavior. +- Public release pages, download metadata, or updater channels. +- Platform support. +- Keyboard shortcuts. + +## Suggested Workflow + +1. Make the code change. +2. Update the matching concept, guide, or reference page. +3. Add a troubleshooting page if the change creates a new failure mode. +4. Run `pnpm docs:build`. +5. Check the home page, search, release/download links, and changed docs pages in a browser. + +## Page Types + +| Type | Purpose | +| --- | --- | +| Start | Helps a new user get into the app. | +| Concepts | Explains mental models. | +| Guides | Teaches workflows. | +| Reference | Gives stable facts and tables. | +| Troubleshooting | Starts from a symptom and ends with recovery. | + +## Review Checklist + +- Does the page describe current behavior? +- Does it mention macOS primary and Windows/Linux supported-early status when platform support matters? +- Are links relative and VitePress-compatible? +- Can a user discover the page with local search? diff --git a/site/reference/file-layout.md b/site/reference/file-layout.md new file mode 100644 index 00000000..6c36b967 --- /dev/null +++ b/site/reference/file-layout.md @@ -0,0 +1,41 @@ +# File Layout + +Tolaria is not opinionated about folder structure. It finds notes recursively across the whole vault, stores new notes in the root by default, and uses types and relationships for real organization. + +```txt +my-vault/ + project-alpha.md + weekly-review.md + research/ + source-notes.md + attachments/ + diagram.png + source.pdf + project.md + person.md + views/ + active-projects.yml +``` + +## Root Notes + +Tolaria works well with a flat vault. Folders are optional and can be useful for compatibility with other tools, but they are not required for people, projects, topics, or any other note category. + +Type is not inferred from folder location. It comes from frontmatter, and relationships are expressed with wikilinks in fields. That is what Tolaria uses for the sidebar, Properties panel, search, custom views, and neighborhood navigation. + +## Special Folders + +| Folder | Purpose | +| --- | --- | +| `views/` | Saved custom views. | +| `attachments/` | Images and other attached files. | + +PDFs, images, and other non-Markdown files stay as normal files. Folder browsing can show them in place, and Settings controls whether PDFs, images, and unsupported files appear in All Notes. + +Whiteboards are Markdown files with durable tldraw data, so they belong with notes rather than in `attachments/`. + +Type definitions are Markdown notes with `type: Type` in frontmatter. New type documents are normal notes, and existing type documents in older folders still work. + +## Git Files + +If the vault is a Git repository, `.git/` belongs to Git. Tolaria reads Git state but does not treat `.git/` as notes. diff --git a/site/reference/frontmatter-fields.md b/site/reference/frontmatter-fields.md new file mode 100644 index 00000000..fdb81d64 --- /dev/null +++ b/site/reference/frontmatter-fields.md @@ -0,0 +1,26 @@ +# Frontmatter Fields + +Tolaria uses conventions instead of a required schema. + +| Field | Meaning | +| --- | --- | +| `type` | The note's entity type. | +| `status` | Lifecycle state. | +| `icon` | Per-note icon. | +| `url` | External URL. | +| `date` | Single date. | +| `belongs_to` | Parent relationship. | +| `related_to` | Lateral relationship. | +| `has` | Contained relationship. | +| `_width` | Per-note editor width override. | +| `_icon`, `_color` | Type or note appearance metadata. | +| `_sidebar_label`, `_order` | Type sidebar label and order. | +| `_pinned_properties` | Properties pinned for a type. | + +## Custom Fields + +You can add your own fields. If a field contains wikilinks, Tolaria can treat it as a relationship. + +## System Fields + +Fields starting with `_` are reserved for system behavior and hidden from standard property editing. They remain plain YAML, so they can still be inspected or changed in raw mode when needed. diff --git a/site/reference/keyboard-shortcuts.md b/site/reference/keyboard-shortcuts.md new file mode 100644 index 00000000..b5b02f51 --- /dev/null +++ b/site/reference/keyboard-shortcuts.md @@ -0,0 +1,24 @@ +# Keyboard Shortcuts + +| Shortcut | Action | +| --- | --- | +| `Cmd+K` / `Ctrl+K` | Open command palette. | +| `Cmd+P` / `Ctrl+P` | Quick open notes and files. | +| `Cmd+N` / `Ctrl+N` | Create a new note. | +| `Cmd+S` / `Ctrl+S` | Save current note. | +| `Cmd+F` / `Ctrl+F` | Find in the current note. | +| `Cmd+Shift+F` / `Ctrl+Shift+F` | Search the vault. | +| `Cmd+Shift+V` / `Ctrl+Shift+V` | Paste without formatting. | +| `Cmd+\` / `Ctrl+\` | Toggle raw Markdown mode. | +| `Cmd+Shift+T` / `Ctrl+Shift+T` | Toggle table of contents. | +| `Cmd+Shift+I` / `Ctrl+Shift+I` | Toggle Properties panel. | +| `Cmd+Shift+L` / `Ctrl+Shift+L` | Toggle AI panel. | +| `Cmd+[` / `Alt+Left` | Navigate back when available. | +| `Cmd+]` / `Alt+Right` | Navigate forward when available. | +| `Cmd+Shift+O` / `Ctrl+Shift+O` | Open current note in a new window. | +| `Cmd+D` / `Ctrl+D` | Toggle favorite for the current note. | +| `Cmd+E` / `Ctrl+E` | Mark the current Inbox note organized. | + +Some shortcuts vary by platform because macOS, Linux, and Windows reserve different key combinations. + +Use the command palette to discover the current command set. diff --git a/site/reference/release-channels.md b/site/reference/release-channels.md new file mode 100644 index 00000000..5b136c6d --- /dev/null +++ b/site/reference/release-channels.md @@ -0,0 +1,36 @@ +# Release Channels + +Tolaria publishes Stable and Alpha release metadata to GitHub Pages. + +## Stable + +Stable follows manually promoted releases. This is the right channel for normal use. + +The stable updater metadata lives at: + +```txt +/stable/latest.json +``` + +The public download page points at the latest stable release. + +## Alpha + +Alpha follows pushes to `main`. It receives fixes and features earlier, but it can be rougher than Stable. + +The alpha updater metadata lives at: + +```txt +/alpha/latest.json +``` + +Compatibility endpoints also point to the alpha metadata: + +```txt +/latest.json +/latest-canary.json +``` + +## Before Switching + +Commit or push important vault changes before changing release channel or installing an update. Your notes are local files, but a clean Git state makes recovery simpler. diff --git a/site/reference/supported-platforms.md b/site/reference/supported-platforms.md new file mode 100644 index 00000000..00a4998f --- /dev/null +++ b/site/reference/supported-platforms.md @@ -0,0 +1,23 @@ +# Supported Platforms + +Tolaria is a desktop app built with Tauri. Releases currently target macOS, Windows, and Linux. + +| Platform | Current support | Notes | +| --- | --- | --- | +| macOS | Primary | Main development and QA target. Apple Silicon and Intel artifacts are published. | +| Windows | Supported, early | NSIS installers and signed updater bundles are published. Menu, shell-path, and credential-helper behavior receive platform-specific fixes as they appear. | +| Linux | Supported, early | AppImage and deb artifacts are published. Behavior can depend on distro WebKitGTK packages, Wayland/X11 details, and input-method setup. | + +## Support Policy + +Primary support means the platform is part of normal development and release validation. Supported, early means release artifacts exist and the app is expected to work, but platform-specific bugs can take longer to diagnose than macOS issues. + +## Reporting Platform Bugs + +Include: + +- Tolaria version. +- Operating system and version. +- CPU architecture. +- Whether the vault is local-only or connected to a remote. +- Steps to reproduce. diff --git a/site/reference/view-filters.md b/site/reference/view-filters.md new file mode 100644 index 00000000..f72a26e5 --- /dev/null +++ b/site/reference/view-filters.md @@ -0,0 +1,33 @@ +# View Filters + +View filters define saved lists of notes. + +## Common Filter Ideas + +| Goal | Filter direction | +| --- | --- | +| Active projects | `type` is Project and `status` is Active | +| Drafts | `type` is Article and `status` is Draft | +| People follow-up | `type` is Person and date is before today | +| Recent work | modified date is within a recent range | + +## Sorting + +Useful sorts include: + +- Recently modified first. +- Title ascending. +- Status ascending. +- A custom property ascending or descending. + +## Operators + +Saved views can combine filters for text, dates, relationship fields, and frontmatter values. Relative date expressions are useful for views such as notes changed this week or people that need follow-up. + +Regex filters are available for power-user cases. Keep them narrow and test them on a small view first. + +## Keep Views Focused + +A view should answer one recurring question. If it becomes too broad, split it into two views. + +You can also customize view appearance with the same kind of icon and color controls used by types. diff --git a/site/releases/index.md b/site/releases/index.md new file mode 100644 index 00000000..922b45b2 --- /dev/null +++ b/site/releases/index.md @@ -0,0 +1,17 @@ +# Releases + +Tolaria releases are published on GitHub. + +- [Latest release](https://github.com/refactoringhq/tolaria/releases/latest) +- [All releases](https://github.com/refactoringhq/tolaria/releases) +- [Download page](/download/) + +## Release Channels + +Stable builds are intended for normal use. Pre-release builds may contain newer features and rougher edges. + +Tolaria also has an Alpha channel for builds generated from pushes to `main`. See [Release Channels](/reference/release-channels) before switching from Stable. + +## Before Updating + +Commit or push important vault changes before updating the app. Your notes are local files, but having a clean Git state makes recovery easier. diff --git a/site/start/first-launch.md b/site/start/first-launch.md new file mode 100644 index 00000000..09c42d1b --- /dev/null +++ b/site/start/first-launch.md @@ -0,0 +1,35 @@ +# First Launch + +The first launch flow is designed to get you into a real vault quickly without hiding the local-first model. + +## What You Choose + +Tolaria asks whether you want to: + +- Create or clone the Getting Started vault. +- Open an existing local vault. +- Create a new empty vault. + +The Getting Started vault is cloned locally and then disconnected from its remote. That keeps the sample safe to edit without accidentally pushing tutorial changes. + +## What Tolaria Creates + +Tolaria stores app-level settings on the local machine. Your notes stay in the vault folder you choose. + +| Data | Stored in | +| --- | --- | +| Notes and attachments | Your vault folder | +| Type definitions and saved views | Your vault folder | +| Window size, zoom, recent vaults | Local app settings | +| Cache data | Rebuildable local cache | + +## First Commands To Try + +- `Cmd+K` / `Ctrl+K`: open the command palette. +- `New Note`: create a note in the current vault. +- `Open Getting Started Vault`: clone the public sample vault. +- `Reload Vault`: rescan files after external edits. + +## AI Setup Prompt + +Tolaria can show an optional AI agents prompt after a vault is open. It checks common local install locations for supported coding agents and gives you setup paths, but you can dismiss it and use Tolaria without AI. diff --git a/site/start/getting-started-vault.md b/site/start/getting-started-vault.md new file mode 100644 index 00000000..970faa9d --- /dev/null +++ b/site/start/getting-started-vault.md @@ -0,0 +1,26 @@ +# Getting Started Vault + +The Getting Started vault is a small public sample vault hosted at [refactoringhq/tolaria-getting-started](https://github.com/refactoringhq/tolaria-getting-started). + +It exists to show Tolaria's conventions without requiring you to restructure your own notes first. + +## What It Demonstrates + +- Markdown notes with YAML frontmatter. +- Types such as Project, Person, Topic, and Procedure. +- Wikilinks in note bodies. +- Relationship fields in frontmatter. +- A local Git repository that can be connected to a remote later. +- Vault guidance files for AI agents. + +## Local-Only By Default + +When Tolaria clones the sample, it removes the remote from the local copy. This makes the sample vault disposable. You can edit it freely, commit locally, and delete it later. + +To connect a vault to your own remote, use the bottom status bar remote chip or run `Add Remote` from the command palette. + +Tolaria also repairs starter-vault guidance files when needed. `AGENTS.md` is the canonical guidance file, `CLAUDE.md` is kept as a compatibility shim, and `GEMINI.md` is only created when you explicitly restore Gemini guidance. + +## When To Move On + +After you understand the sample, open your own vault. Tolaria does not require a special folder structure: a folder of Markdown files is enough to start. diff --git a/site/start/install.md b/site/start/install.md new file mode 100644 index 00000000..24401453 --- /dev/null +++ b/site/start/install.md @@ -0,0 +1,36 @@ +# Install Tolaria + +Tolaria publishes desktop builds for macOS, Windows, and Linux. macOS is the primary day-to-day development target, with Windows and Linux builds supported through the release pipeline and fixed as platform issues are found. + +## Download + +Use the latest stable release unless you are intentionally testing pre-release builds: + +- [Download the latest stable build](https://refactoringhq.github.io/tolaria/download/) +- [Browse all GitHub releases](https://github.com/refactoringhq/tolaria/releases) +- [Read the release notes](/releases/) + +## Homebrew + +On macOS you can install the cask: + +```bash +brew install --cask tolaria +``` + +## Platform Status + +| Platform | Status | Notes | +| --- | --- | --- | +| macOS | Primary | Apple Silicon and Intel builds are published. Homebrew is available. | +| Windows | Supported, early | NSIS installers and signed updater bundles are published. Some shell and menu behavior can still need Windows-specific fixes. | +| Linux | Supported, early | AppImage and deb artifacts are published. Desktop behavior depends on distribution WebKitGTK and input-method integration. | + +See [Supported Platforms](/reference/supported-platforms) for the current support policy. + +## After Installing + +1. Open Tolaria. +2. Choose the Getting Started vault if you want a guided sample. +3. Or open an existing folder of Markdown files as a vault. +4. Use the command palette with `Cmd+K` on macOS or `Ctrl+K` on Linux and Windows. diff --git a/site/start/open-or-create-vault.md b/site/start/open-or-create-vault.md new file mode 100644 index 00000000..ab9d8bad --- /dev/null +++ b/site/start/open-or-create-vault.md @@ -0,0 +1,24 @@ +# Open Or Create A Vault + +A Tolaria vault is a folder on disk. The folder can contain Markdown notes, attachments, type definitions, saved views, and Git metadata. + +## Open An Existing Folder + +Choose an existing folder if you already have Markdown notes. Tolaria scans `.md` files and uses frontmatter when it exists. + +Good starting points: + +- A folder of plain Markdown files. +- An Obsidian-style vault. +- A Git repository containing notes. +- A copy of the Getting Started vault. + +## Create A New Vault + +Choose a new empty folder if you want Tolaria conventions from the start. New notes and optional type definitions are created as Markdown files. + +## Git Is Recommended, Not Required + +Tolaria works well with a plain folder of Markdown files. You can open, edit, organize, and search notes without making the vault a Git repository. + +Git is recommended when you want local history, diff views, recovery, pull, push, and remote sync without a proprietary backend. If a vault is not already a repository, Tolaria can initialize one when you explicitly ask it to. diff --git a/site/troubleshooting/ai-agent-not-found.md b/site/troubleshooting/ai-agent-not-found.md new file mode 100644 index 00000000..27f0e3c7 --- /dev/null +++ b/site/troubleshooting/ai-agent-not-found.md @@ -0,0 +1,23 @@ +# AI Agent Not Found + +Tolaria can only launch local CLI agents that are installed and discoverable. + +## Symptoms + +- The AI panel says no supported agent is available. +- Claude Code or another agent works in one shell but not in Tolaria. + +## Checks + +Open a terminal and run the agent command directly. For Claude Code: + +```bash +claude --version +``` + +If the command fails, install or repair the agent first. + +## Path Issues + +Desktop apps can inherit a different `PATH` from your interactive shell. Tolaria checks common install locations, but shell setup can still vary. Prefer installing CLI tools in standard locations or making them available from your login shell. + diff --git a/site/troubleshooting/git-auth.md b/site/troubleshooting/git-auth.md new file mode 100644 index 00000000..9c6e00f5 --- /dev/null +++ b/site/troubleshooting/git-auth.md @@ -0,0 +1,26 @@ +# Git Authentication + +Tolaria uses system Git authentication. It does not manage provider passwords directly. + +## Symptoms + +- Push fails. +- Pull asks for credentials repeatedly. +- Remote fetch works in one terminal but not in Tolaria. + +## Checks + +1. Open a terminal. +2. `cd` into the vault. +3. Run `git remote -v`. +4. Run `git fetch`. + +If `git fetch` fails in the terminal, fix system Git auth first. + +## Common Fixes + +- Sign in with GitHub CLI. +- Configure SSH keys. +- Update the remote URL. +- Check your credential helper. + diff --git a/site/troubleshooting/model-provider-connection.md b/site/troubleshooting/model-provider-connection.md new file mode 100644 index 00000000..e8df35b6 --- /dev/null +++ b/site/troubleshooting/model-provider-connection.md @@ -0,0 +1,25 @@ +# Model Provider Connection + +Use this checklist when a local or API model provider does not connect. + +## Local Providers + +For Ollama or LM Studio: + +1. Start the local model server. +2. Confirm the base URL in Tolaria matches the server. +3. Confirm the model ID is installed and loaded by the provider. +4. Use the Settings test action again. + +## API Providers + +For hosted providers: + +1. Confirm the provider kind and endpoint. +2. Confirm the model ID exists for your account. +3. Confirm the API key is saved locally or available in the configured environment variable. +4. Avoid storing secrets in the vault. + +## Chat Mode Boundary + +Direct model targets run in chat mode. If you need file-editing tools, use a coding agent target such as Claude Code, Codex, OpenCode, Pi, or Gemini CLI. diff --git a/site/troubleshooting/sync-conflicts.md b/site/troubleshooting/sync-conflicts.md new file mode 100644 index 00000000..6c1eff77 --- /dev/null +++ b/site/troubleshooting/sync-conflicts.md @@ -0,0 +1,20 @@ +# Sync Conflicts + +Sync conflicts happen when local and remote changes touch the same content. + +## What To Do + +1. Stop editing the conflicted note. +2. Open the conflict resolver if Tolaria presents it. +3. Review both sides. +4. Choose the correct content or merge manually. +5. Commit the resolved file. +6. Push again. + +## Prevent Conflicts + +- Pull before starting work on another device. +- Push after meaningful sessions. +- Keep AI-generated edits in small commits. +- Avoid editing the same note on multiple devices at the same time. + diff --git a/site/troubleshooting/vault-not-loading.md b/site/troubleshooting/vault-not-loading.md new file mode 100644 index 00000000..c96506dd --- /dev/null +++ b/site/troubleshooting/vault-not-loading.md @@ -0,0 +1,25 @@ +# Vault Not Loading + +Use this checklist when Tolaria cannot open or refresh a vault. + +## Check The Folder + +- Confirm the folder exists. +- Confirm the folder contains readable files. +- Confirm Tolaria has permission to access the folder. +- Try opening a smaller test vault to isolate the issue. + +## Check Git + +If the vault is a Git repository, verify it is not in a broken state: + +```bash +git status +``` + +Resolve interrupted merges or corrupted repository state before retrying. + +## Reload + +Run `Reload Vault` from the command palette. This clears derived cache and rescans the filesystem. + diff --git a/src-tauri/resources/agent-docs/AGENTS.md b/src-tauri/resources/agent-docs/AGENTS.md new file mode 100644 index 00000000..44904c3a --- /dev/null +++ b/src-tauri/resources/agent-docs/AGENTS.md @@ -0,0 +1,13 @@ +# AGENTS.md - Tolaria Docs Bundle + +This folder contains local, generated Tolaria product docs for AI agents. + +Use these docs when a user asks how Tolaria works, when you need product behavior, or before making Tolaria-specific assumptions. + +Recommended lookup flow: + +1. Read the active vault's AGENTS.md for vault-specific conventions. +2. Read this folder's index.md for the docs map. +3. Use `rg` over this folder for advanced concepts, workflows, shortcuts, Git, AutoGit, AI, types, properties, relationships, and troubleshooting. + +Vault-specific AGENTS.md wins for local conventions. These bundled docs win for Tolaria product behavior. diff --git a/src-tauri/resources/agent-docs/all.md b/src-tauri/resources/agent-docs/all.md new file mode 100644 index 00000000..1489d737 --- /dev/null +++ b/src-tauri/resources/agent-docs/all.md @@ -0,0 +1,1515 @@ +# Index + +Source: index.md +URL: / + + + +--- + +# First Launch + +Source: start/first-launch.md +URL: /start/first-launch + +# First Launch + +The first launch flow is designed to get you into a real vault quickly without hiding the local-first model. + +## What You Choose + +Tolaria asks whether you want to: + +- Create or clone the Getting Started vault. +- Open an existing local vault. +- Create a new empty vault. + +The Getting Started vault is cloned locally and then disconnected from its remote. That keeps the sample safe to edit without accidentally pushing tutorial changes. + +## What Tolaria Creates + +Tolaria stores app-level settings on the local machine. Your notes stay in the vault folder you choose. + +| Data | Stored in | +| --- | --- | +| Notes and attachments | Your vault folder | +| Type definitions and saved views | Your vault folder | +| Window size, zoom, recent vaults | Local app settings | +| Cache data | Rebuildable local cache | + +## First Commands To Try + +- `Cmd+K` / `Ctrl+K`: open the command palette. +- `New Note`: create a note in the current vault. +- `Open Getting Started Vault`: clone the public sample vault. +- `Reload Vault`: rescan files after external edits. + +## AI Setup Prompt + +Tolaria can show an optional AI agents prompt after a vault is open. It checks common local install locations for supported coding agents and gives you setup paths, but you can dismiss it and use Tolaria without AI. + +--- + +# Getting Started Vault + +Source: start/getting-started-vault.md +URL: /start/getting-started-vault + +# Getting Started Vault + +The Getting Started vault is a small public sample vault hosted at [refactoringhq/tolaria-getting-started](https://github.com/refactoringhq/tolaria-getting-started). + +It exists to show Tolaria's conventions without requiring you to restructure your own notes first. + +## What It Demonstrates + +- Markdown notes with YAML frontmatter. +- Types such as Project, Person, Topic, and Procedure. +- Wikilinks in note bodies. +- Relationship fields in frontmatter. +- A local Git repository that can be connected to a remote later. +- Vault guidance files for AI agents. + +## Local-Only By Default + +When Tolaria clones the sample, it removes the remote from the local copy. This makes the sample vault disposable. You can edit it freely, commit locally, and delete it later. + +To connect a vault to your own remote, use the bottom status bar remote chip or run `Add Remote` from the command palette. + +Tolaria also repairs starter-vault guidance files when needed. `AGENTS.md` is the canonical guidance file, `CLAUDE.md` is kept as a compatibility shim, and `GEMINI.md` is only created when you explicitly restore Gemini guidance. + +## When To Move On + +After you understand the sample, open your own vault. Tolaria does not require a special folder structure: a folder of Markdown files is enough to start. + +--- + +# Install Tolaria + +Source: start/install.md +URL: /start/install + +# Install Tolaria + +Tolaria publishes desktop builds for macOS, Windows, and Linux. macOS is the primary day-to-day development target, with Windows and Linux builds supported through the release pipeline and fixed as platform issues are found. + +## Download + +Use the latest stable release unless you are intentionally testing pre-release builds: + +- [Download the latest stable build](https://refactoringhq.github.io/tolaria/download/) +- [Browse all GitHub releases](https://github.com/refactoringhq/tolaria/releases) +- [Read the release notes](/releases/) + +## Homebrew + +On macOS you can install the cask: + +```bash +brew install --cask tolaria +``` + +## Platform Status + +| Platform | Status | Notes | +| --- | --- | --- | +| macOS | Primary | Apple Silicon and Intel builds are published. Homebrew is available. | +| Windows | Supported, early | NSIS installers and signed updater bundles are published. Some shell and menu behavior can still need Windows-specific fixes. | +| Linux | Supported, early | AppImage and deb artifacts are published. Desktop behavior depends on distribution WebKitGTK and input-method integration. | + +See [Supported Platforms](/reference/supported-platforms) for the current support policy. + +## After Installing + +1. Open Tolaria. +2. Choose the Getting Started vault if you want a guided sample. +3. Or open an existing folder of Markdown files as a vault. +4. Use the command palette with `Cmd+K` on macOS or `Ctrl+K` on Linux and Windows. + +--- + +# Open Or Create A Vault + +Source: start/open-or-create-vault.md +URL: /start/open-or-create-vault + +# Open Or Create A Vault + +A Tolaria vault is a folder on disk. The folder can contain Markdown notes, attachments, type definitions, saved views, and Git metadata. + +## Open An Existing Folder + +Choose an existing folder if you already have Markdown notes. Tolaria scans `.md` files and uses frontmatter when it exists. + +Good starting points: + +- A folder of plain Markdown files. +- An Obsidian-style vault. +- A Git repository containing notes. +- A copy of the Getting Started vault. + +## Create A New Vault + +Choose a new empty folder if you want Tolaria conventions from the start. New notes and optional type definitions are created as Markdown files. + +## Git Is Recommended, Not Required + +Tolaria works well with a plain folder of Markdown files. You can open, edit, organize, and search notes without making the vault a Git repository. + +Git is recommended when you want local history, diff views, recovery, pull, push, and remote sync without a proprietary backend. If a vault is not already a repository, Tolaria can initialize one when you explicitly ask it to. + +--- + +# AI + +Source: concepts/ai.md +URL: /concepts/ai + +# AI + +Tolaria has two AI paths: coding agents that can use tools to inspect and edit a vault, and direct model targets that answer in chat mode from note context. + +## Coding Agents + +The AI panel can stream supported local CLI agents through Tolaria's normalized event layer. Current targets include Claude Code, Codex, OpenCode, Pi, and Gemini CLI when they are installed on the machine. + +Coding agents can run in: + +- **Vault Safe** mode, limited to file, search, and edit tools. +- **Power User** mode, which can allow local shell commands scoped to the active vault for agents that support shell access. + +## Direct Models + +Direct model targets run in chat mode. They receive the active note, linked context, and conversation history, but they do not receive vault-write tools or shell access. + +Supported provider shapes include: + +- Local models through Ollama or LM Studio. +- Hosted providers such as OpenAI, Anthropic, Gemini, and OpenRouter. +- Custom OpenAI-compatible endpoints. + +## External MCP Setup + +Tolaria exposes an MCP server for external tools. The setup flow can write Tolaria's MCP entry into Claude Code, Gemini CLI, Cursor, and a generic MCP config path, and it can also copy the exact JSON snippet for manual setup. + +MCP setup is explicit. Closing the dialog leaves third-party config files untouched. + +## Why Git Matters For AI + +AI-generated changes should be inspectable. Git gives you diffs, history, rollback, and a clear boundary between suggestions and committed work. + +--- + +# Editor + +Source: concepts/editor.md +URL: /concepts/editor + +# Editor + +Tolaria offers a rich editor for daily writing and a raw Markdown mode for exact file control. Both modes write back to the same Markdown file. + +## Rich Editing + +The rich editor supports blocks, slash commands, wikilinks, tables, code blocks, images, Mermaid diagrams, LaTeX-style math, and markdown-backed whiteboards. + +Use it when you want to write and reorganize quickly without thinking about Markdown syntax. + +## Raw Mode + +Raw mode shows the Markdown source directly. Use it when you need to edit YAML frontmatter, repair unusual Markdown, or make an exact text change. + +Toggle raw mode with `Cmd+\` on macOS or `Ctrl+\` on Windows and Linux. + +## Table Of Contents + +The table of contents panel builds an outline from headings in the current note. It is useful for long notes, procedures, research files, and generated documents. Toggle it with `Cmd+Shift+T` on macOS or `Ctrl+Shift+T` on Windows and Linux. + +## Width + +Notes can use normal or wide editor width. Set the default in Settings, or override an individual note from the editor toolbar. + +--- + +# Files And Media + +Source: concepts/files-and-media.md +URL: /concepts/files-and-media + +# Files And Media + +Tolaria starts with Markdown notes, but a vault can also contain images, PDFs, media files, whiteboards, and other local files. + +## Mermaid Diagrams + +Use Mermaid code blocks when a note needs a diagram that should stay plain text and versionable. + +````md +```mermaid +flowchart LR + Idea --> Draft --> Review --> Publish +``` +```` + +Tolaria renders Mermaid diagrams in the editor while keeping the source in Markdown. + +## Attachments + +Images pasted into the editor are saved into the vault as normal files. They remain portable and can be opened by other tools. + +## Previews + +Tolaria can preview common image files, PDFs, and supported media files in the app. Files without an in-app preview can still be opened in the default system app. + +Settings control whether PDFs, images, and unsupported files appear in All Notes. Folder browsing still shows files in their folders. + +## Whiteboards + +Whiteboards use tldraw in the editor, but their durable representation stays in Markdown. That keeps them inside the vault and versioned by Git with the rest of your notes. + +## Git Boundary + +If generated or local-only files are ignored by Git, Tolaria can hide them from notes, search, quick open, and folders. Use this when build artifacts or private local files should not behave like vault content. + +--- + +# Git + +Source: concepts/git.md +URL: /concepts/git + +# Git + +Git is Tolaria's recommended history and sync layer. Tolaria can work with plain Markdown folders, and Git unlocks local history, recovery, remote backup, and multi-device workflows when you want them. + +Tolaria acts as a lightweight Git client for your vault. You can review changes, commit, pull, push, and inspect history without leaving the app. + +## What Tolaria Uses Git For + +- Whole-vault commit history. +- Current diff for the vault. +- Per-note history. +- Current diff for an individual note. +- Pull and push. +- Conflict detection and resolution. +- Remote connection for local-only vaults. + +## History And Diffs + +Each note can show its own history and current diff, so you can understand how that file changed over time or what is unsaved relative to Git. + +Tolaria also shows a history of the whole vault. Use it when you want to review broader changes across multiple notes before committing or syncing. + +## Local Commits + +You can commit changes inside Tolaria without leaving the app. This gives you useful restore points even before a remote is configured. + +## Remotes + +Connect a compatible Git remote when you want sync or backup. Tolaria relies on your system Git authentication, so GitHub CLI, SSH keys, credential helpers, and existing Git configuration can continue to work. + +--- + +# Inbox + +Source: concepts/inbox.md +URL: /concepts/inbox + +# Inbox + +The Inbox is for notes that have been captured but not yet organized. + +## Why It Exists + +Fast capture should not require perfect structure. The Inbox gives you a place to put incomplete notes, then process them later. + +The Inbox workflow is optional. Turn it off in Settings > Workflow if you prefer every note to appear organized by default. + +## Organizing Inbox Notes + +When reviewing the Inbox: + +1. Give the note a clear H1. +2. Set its `type`. +3. Add status, dates, or URL if useful. +4. Add relationships with wikilinks or frontmatter fields. +5. Move it into a folder only if the folder adds value. + +## Healthy Inbox Habit + +Keep the Inbox small enough that it can be reviewed in one focused pass. Tolaria works best when capture is fast and organization is deliberate. + +--- + +# Notes + +Source: concepts/notes.md +URL: /concepts/notes + +# Notes + +A note is a Markdown file with optional YAML frontmatter. Tolaria reads the first H1 as the primary title and keeps the file on disk as the durable representation. + +## Anatomy + +```md +--- +type: Project +status: Active +belongs_to: + - "[[workspace]]" +--- + +# Launch Documentation + +Draft the public Tolaria docs and keep them close to code changes. +``` + +## Titles + +The first H1 is the note title. Tolaria uses that title wherever the note is displayed: note lists, search results, wikilink suggestions, relationship pickers, tabs, and window titles. + +The title is separate from the filename. The filename stays visible in the breadcrumb so you can see the file on disk, and you can rename it independently when needed. + +Use the breadcrumb action to rename the file to match the title. New untitled notes can also auto-rename from the first H1 the first time they get a real title. Turn this behavior off in Settings > Vault Content > Titles & Filenames if you prefer filenames to stay unchanged until you rename them manually. + +## Body Links + +Use `[[wikilinks]]` to connect notes from the body. Tolaria shows autocomplete suggestions while you type, and links can resolve by filename or title. + +## Frontmatter + +Use frontmatter for structured fields such as type, status, date, URL, and relationships. Keep free-form thinking in the body. + +--- + +# Properties + +Source: concepts/properties.md +URL: /concepts/properties + +# Properties + +Properties are frontmatter fields that Tolaria can display, filter, and edit. + +## Suggested Properties + +Suggested properties are the fields Tolaria knows how to create quickly from the Properties panel. When a suggested property is missing, the panel shows a shortcut to add it with the right editor. + +| Field | Purpose | +| --- | --- | +| `type` | Groups the note into a type such as Project, Person, or Topic. | +| `status` | Tracks lifecycle state such as Active, Done, or Blocked. | +| `url` | Stores a canonical external link. | +| `date` | Represents a single date. | + +## System Properties + +Fields that start with `_` are system properties. They remain in plain text but are hidden from normal property editing. + +Examples include `_icon`, `_color`, `_order`, `_sidebar_label`, `_width`, and `_pinned_properties` on type documents or notes. + +## Property Editing + +The Properties panel is the safest place to edit structured properties. Toggle it with `Cmd+Shift+I` on macOS or `Ctrl+Shift+I` on Windows and Linux. + +Date fields use Tolaria's picker, relationship fields can use wikilinks, and raw Markdown mode is available when you need direct control over YAML. + +--- + +# Relationships + +Source: concepts/relationships.md +URL: /concepts/relationships + +# Relationships + +Relationships make a vault feel like a graph instead of a pile of documents. + +## Relationship Fields + +Any frontmatter field containing wikilinks can become a relationship. Relationship fields can point to one note or to an array of notes. + +```yaml +belongs_to: + - "[[product-work]]" +related_to: + - "[[documentation]]" + - "[[editor-research]]" +blocked_by: + - "[[release-process]]" + - "[[sync-conflicts]]" +``` + +Tolaria supports default relationship fields out of the box: `belongs_to`, `has`, and `related_to`. It also detects custom relationship fields dynamically when they contain wikilinks. + +Default relationships have automatically computed inverses. If a note says it `belongs_to` a project, the project can show that note under its inverse `has` relationship without you writing the reverse link by hand. `related_to` works as a lateral relationship in both directions. + +These outgoing and inverse relationships appear in the Properties panel and in Neighborhood mode, where the note list becomes a graph view around the selected note. + +## Body Links Versus Relationship Fields + +Use body links when the relationship appears naturally in writing. Use frontmatter relationships when the connection is important enough to show in navigation, filters, Neighborhood mode, or the Properties panel. + +## Backlinks + +Tolaria can show incoming links and inverse relationships, making it easier to navigate from a note to the rest of its context. + +--- + +# Types + +Source: concepts/types.md +URL: /concepts/types + +# Types + +Types describe what kind of thing a note represents: Project, Person, Topic, Procedure, Event, or any category you create. + +## Type Field + +The `type:` field assigns a note to a type. + +```yaml +type: Project +``` + +Tolaria does not infer type from folder location. Moving a file into another folder does not change its type. + +## Prefer Types Over Folders + +Types are the preferred way to group notes in Tolaria. Folders are supported for existing vaults and fallback organization, but Tolaria is built around types and relationships because they carry stronger meaning than file paths. + +Use types for semantic groups such as Projects, People, Topics, Procedures, Events, and Essays. Use relationships to connect notes across those groups. This gives Tolaria better structure for navigation, filtering, properties, templates, and future automation than folder location alone. + +## Type Documents + +Type documents are Markdown notes with `type: Type` in frontmatter. They describe how a type should appear and what new notes of that type should start with. + +```yaml +--- +type: Type +_icon: folder +_color: blue +_sidebar_label: Projects +_order: 10 +--- + +# Project +``` + +## What Types Control + +- Sidebar grouping. +- Type icon and color. +- Sidebar order and label. +- Pinned properties. +- New-note templates. + +## New Note Defaults + +Type documents can define empty properties and relationships. When you create a new note of that type, Tolaria shows placeholders for those fields so you can fill them in from the Properties panel. + +If a type document gives a property a value, that value becomes the default for new notes of that type. For example, a Project type can define `status: Active` so every new project starts active until you change it. + +--- + +# Vaults + +Source: concepts/vaults.md +URL: /concepts/vaults + +# Vaults + +A vault is the folder Tolaria reads and writes. The filesystem is the source of truth; the app state and cache are derived from files. + +## Core Rules + +- Notes are Markdown files. +- YAML frontmatter provides structure. +- Attachments are normal files inside the vault. +- Type definitions and saved views are also files. +- Git can track history and support remote sync. + +## Why Local Files Matter + +Local files keep your notes inspectable. You can open them in another editor, search with command-line tools, back them up with your own system, and version them with Git. + +Tolaria should never become the only way to read your data. + +## Git Is A Capability + +A plain folder of Markdown files can open as a vault. Git-backed vaults unlock history, changes, commits, pull, push, conflict handling, and remote setup. + +If a folder is not a Git repository, Tolaria can initialize Git when you explicitly ask it to. It avoids initializing broad personal folders such as Desktop, Documents, or Downloads unless they are clearly dedicated vault folders. + +## App State Versus Vault State + +Vault-level information should travel with the vault. Machine-specific preferences stay with the app installation. + +| Vault state | App state | +| --- | --- | +| Type icons and colors | Editor zoom | +| Saved views | Window size | +| Pinned properties | Recent vault list | +| Relationship conventions | Local cache | +| Vault AI guidance files | AI target selection | + +--- + +# Build Custom Views + +Source: guides/build-custom-views.md +URL: /guides/build-custom-views + +# Build Custom Views + +Custom views are saved filters for recurring questions. + +## Good View Candidates + +- Active projects. +- People without a recent follow-up. +- Drafts ready for review. +- Notes changed this week. +- Events in a date range. + +## View Definition + +Saved views live as files in the vault. They describe filters, sorting, and visible columns using structured data. + +## Filters + +Custom views can use nested conditions, similar to Notion or Airtable filter groups. Combine `all` and `any` logic when a view needs to answer a more precise question than a single field filter can express. + +Date filters support dynamic natural-language values such as `today`, `yesterday`, or `one week ago`. Use these for views that should keep moving over time, such as recent work, stale follow-ups, or upcoming events. + +## Design The Question First + +Before creating a view, write the question it answers. A good view is not "all fields with all filters"; it is a focused lens. + +--- + +# Capture A Note + +Source: guides/capture-a-note.md +URL: /guides/capture-a-note + +# Capture A Note + +Use capture when you need to get an idea into the vault before you know where it belongs. + +## Steps + +1. Press `Cmd+N` on macOS or `Ctrl+N` on Windows and Linux. +2. Write a clear H1. +3. Add the rough content. +4. Leave structure for later if you are still thinking. + +## Capture Well + +Prefer a useful title over a perfect taxonomy. You can add type, status, and relationships during inbox review. + +## When To Add Structure Immediately + +Add structure while capturing when the note's type or relationships are already obvious. Otherwise, capture the idea first and organize it later. + +--- + +# Manage Git Manually Or With AutoGit + +Source: guides/commit-and-push.md +URL: /guides/commit-and-push + +# Manage Git Manually Or With AutoGit + +Tolaria can act as a lightweight Git client for a Git-enabled vault. You can manage commits and pushes yourself, or enable AutoGit to create conservative checkpoints after editing pauses or when the app is no longer active. + +## Manual Git + +1. Open the Git or changes surface. +2. Review changed files. +3. Write a short commit message. +4. Commit locally. +5. Push when a remote is configured. + +If the remote has changed, pull first and resolve any conflicts. If the vault has no remote, manual commits still give you local history, diffs, and rollback. + +## AutoGit + +AutoGit is available in Settings for Git-enabled vaults. When enabled, Tolaria automatically commits and pushes saved local changes after an idle pause or after the app becomes inactive. + +Use AutoGit when you want the safety of regular checkpoints without interrupting capture or editing. You can still inspect each note's current diff, review note history, and browse the whole-vault history before making larger manual commits. + +## Use Small Commits + +Small commits make it easier to understand what changed, roll back safely, and review AI-generated edits. + +--- + +# Configure AI Models + +Source: guides/configure-ai-models.md +URL: /guides/configure-ai-models + +# Configure AI Models + +Use model providers when you want chat over note context without giving an agent vault-write tools. + +## Local Models + +Local model targets are for tools such as Ollama and LM Studio. They usually need a base URL and model ID, and they usually do not need an API key. + +## API Models + +API model targets are for hosted providers such as OpenAI, Anthropic, Gemini, OpenRouter, or another OpenAI-compatible endpoint. + +Tolaria does not store provider API keys in vault settings. Choose one of the supported key paths: + +- Save the key locally on this device. +- Read the key from an environment variable. +- Use no key for local providers that do not require one. + +## Test The Connection + +After adding a provider, use the test action in Settings. A successful test means Tolaria reached the endpoint and the model replied. + +## Select The Target + +Once configured, choose the model from the AI target selector or set it as the default AI target in Settings. + +--- + +# Connect A Git Remote + +Source: guides/connect-a-git-remote.md +URL: /guides/connect-a-git-remote + +# Connect A Git Remote + +Connect a remote when you want backup or sync beyond the current machine. + +## Before You Start + +Make sure the remote repository exists and your system Git can authenticate to it. Tolaria uses system Git rather than storing provider-specific credentials. + +## Steps + +1. Open the bottom status bar remote chip, or run `Add Remote` from the command palette. +2. Paste the remote URL. +3. Confirm the remote name. +4. Fetch or push according to the app prompt. + +## Recommended Auth + +- SSH keys. +- GitHub CLI authentication. +- Existing Git credential helpers. +- macOS Keychain credentials for HTTPS remotes on macOS. + +If authentication fails, see [Git Authentication](/troubleshooting/git-auth). + +--- + +# Create Types + +Source: guides/create-types.md +URL: /guides/create-types + +# Create Types + +Create a type when several notes share the same role in your system. + +## Steps + +1. Run `New Type` from the command palette, or click `+` in the Types header in the sidebar. +2. Give the type a clear name. +3. Add optional icon, color, sidebar order, sidebar label, pinned properties, suggested fields, default values, or a new-note template. + +You can also right-click a type in the sidebar to change its icon and color. + +```yaml +--- +type: Type +_icon: briefcase +_color: blue +_sidebar_label: Projects +_order: 10 +--- + +# Project +``` + +## Use Types Sparingly + +A type should represent a recurring category, not a one-off label. If you only need a temporary grouping, use a saved view or property instead. + +## Templates + +Type documents can include a Markdown template for new notes of that type. Keep templates small and useful: a heading, a few expected fields, and the first checklist are usually enough. + +Type documents can also define fields for new notes. Empty properties and relationships become placeholders in new notes of that type. Properties with values become defaults for new notes of that type. + +--- + +# Manage Display Preferences + +Source: guides/manage-display-preferences.md +URL: /guides/manage-display-preferences + +# Manage Display Preferences + +Display preferences live in local app settings unless a setting is intentionally stored in the note or vault. + +## Theme + +Choose Light, Dark, or System in Settings. System follows the operating system appearance at runtime. + +You can also switch theme mode from the command palette. + +## Note Width + +Set the default rich-editor width in Settings: + +- **Normal** for focused writing. +- **Wide** for tables, diagrams, dense notes, and generated documents. + +An individual note can override the default width from the editor toolbar. That override is stored as `_width` in the note frontmatter. + +## Sidebar Labels + +Tolaria can pluralize type names in the sidebar. Turn this off in Settings if your type names should be shown exactly as written, or use `_sidebar_label` on a type document for an explicit label. + +## Vault Content + +Settings also control whether Gitignored files and non-Markdown file categories are visible in the app. Use these controls to keep generated or local-only files out of regular note workflows. + +--- + +# Organize The Inbox + +Source: guides/organize-inbox.md +URL: /guides/organize-inbox + +# Organize The Inbox + +Inbox review turns quick captures into usable knowledge. + +## Remove A Note From Inbox + +When a note is organized enough, mark it as organized. Use `Cmd+E` on macOS or `Ctrl+E` on Windows and Linux, or click the organize action in the breadcrumb bar. + +That action is what removes the note from Inbox. If auto-advance is enabled in Settings > Workflow, Tolaria opens the next Inbox item immediately after you mark the current note organized. + +## Review Checklist + +- Rename unclear notes. +- Add or correct the first H1. +- Set `type`. +- Add `status` for actionable notes. +- Add `belongs_to`, `related_to`, or other relationship fields when useful. +- Archive or delete notes that no longer matter. + +## Make Notes Navigable + +A note is organized when you can answer: + +- What kind of thing is this? +- What is it connected to? +- What is this useful for? +- What will I do with it? + +## Avoid Over-Structuring + +Do not add fields just because they exist. Add the structure that will help future navigation, review, or automation. + +--- + +# Use The AI + +Source: guides/use-ai-panel.md +URL: /guides/use-ai-panel + +# Use The AI + +Tolaria gives you two ways to ask for AI help: open the AI panel for an ongoing conversation, or prompt directly from the editor with `Cmd+K` followed by a space. + +## Choose How To Prompt + +- **AI panel** is best for longer conversations, agent work, and requests that need visible back-and-forth. +- **Inline prompt** is best when you are already writing. Press `Cmd+K`, type a space, then write the prompt you want the AI to handle from the current note context. + +## Choose A Target + +Open Settings and choose the default AI target: + +- **Coding agent** for tool-backed vault editing through Claude Code, Codex, OpenCode, Pi, or Gemini CLI. +- **Local model** for Ollama or LM Studio chat over note context. +- **API model** for OpenAI, Anthropic, Gemini, OpenRouter, or an OpenAI-compatible endpoint. + +If a coding agent is missing, install it and reopen Tolaria or switch to another target. + +## Permission Mode + +Coding agents support per-vault permission modes: + +- **Vault Safe** keeps agents limited to file, search, and edit tools. +- **Power User** can allow shell commands for agents that support them. + +Direct model targets always stay in chat mode. They can use note context, but they cannot edit vault files through tools. + +## Good Requests + +- "Find notes related to this project." +- "Summarize what changed in this note." +- "Draft a weekly review from these linked notes." +- "Update this checklist based on the current project status." + +## Review Changes + +AI edits are file edits. Review them with Tolaria's diff and Git history before committing. + +--- + +# Use The Command Palette + +Source: guides/use-command-palette.md +URL: /guides/use-command-palette + +# Use The Command Palette + +The command palette is the fastest way to move around Tolaria. + +Open it with: + +- `Cmd+K` on macOS. +- `Ctrl+K` on Linux and Windows. + +## Common Commands + +- New Note. +- Search. +- Open Settings. +- Reload Vault. +- Add Remote. +- Open Getting Started Vault. +- Toggle Raw Mode. +- Toggle Table of Contents. +- Toggle AI Panel. +- Use Light, Dark, or System theme. +- Open in New Window. + +## Keyboard-First Workflow + +Use the palette when you know what you want to do but do not want to hunt through panels. It is also the best place to discover commands as the app grows. + +--- + +# Use Media Previews + +Source: guides/use-media-previews.md +URL: /guides/use-media-previews + +# Use Media Previews + +Media previews let you inspect vault files without leaving Tolaria. + +## Open A File + +Select an image, PDF, media file, or unsupported file from a folder or file list. Tolaria opens supported files in the app and offers an external-open action for files that should use the system default app. + +## All Notes Visibility + +Open Settings to choose whether non-Markdown files appear in All Notes: + +- PDFs. +- Images. +- Unsupported files. + +Folder browsing still shows files in their folders even when a category is hidden from All Notes. + +## Attachments + +When you paste or drop an image into a note, Tolaria copies it into the vault and references the copied file from Markdown. + +## Troubleshooting + +If a preview does not render, open the file in the default app to confirm the file is valid, then check whether the file is inside the active vault and not blocked by operating-system permissions. + +--- + +# Use The Table Of Contents + +Source: guides/use-table-of-contents.md +URL: /guides/use-table-of-contents + +# Use The Table Of Contents + +The table of contents panel helps you navigate long notes by heading. + +## Open It + +Use the editor toolbar, the command palette, or the shortcut: + +- `Cmd+Shift+T` on macOS. +- `Ctrl+Shift+T` on Windows and Linux. + +## How It Works + +Tolaria builds the outline from the current note's headings. The panel updates as the note changes and can jump to sections in the editor. + +## Good Uses + +- Long procedures. +- Meeting notes with many sections. +- Research notes. +- Generated documents that need review. + +If a note has no useful headings, add clear H2 and H3 sections rather than relying on a long uninterrupted document. + +--- + +# Use Wikilinks + +Source: guides/use-wikilinks.md +URL: /guides/use-wikilinks + +# Use Wikilinks + +Wikilinks connect notes by name. + +```md +This project belongs to [[content-systems]] and is related to [[git-workflows]]. +``` + +## Link From The Body + +Use body links when the connection is part of the sentence you are writing. + +## Link From Frontmatter + +Use frontmatter links when the relationship should become structured metadata. + +```yaml +related_to: + - "[[git-workflows]]" +``` + +## Keep Links Stable + +Prefer clear note titles and filenames. Tolaria's wikilink autocomplete helps you pick the right target while you type. + +--- + +# Contribute + +Source: reference/contribute.md +URL: /reference/contribute + +# Contribute + +Tolaria is free and open source, and any kind of help is useful. Pick the path that matches what you want to do. + +## Sponsor Or Support + +The best way to support Tolaria is to subscribe to [Refactoring](https://refactoring.fm/), Luca's newsletter and community about running good teams and shipping software with AI. + +## Feature Requests + +Use the [product board](https://tolaria.canny.io/) for feature ideas. Search first, upvote existing ideas, and create a new post when the request is genuinely new. + +## Discussions + +Use [GitHub Discussions](https://github.com/refactoringhq/tolaria/discussions) for questions, conversations, show and tell, and broader community context. + +## Contribute Code + +Small, focused pull requests are welcome. Check the product board first so you build the right thing, then open a PR on [GitHub](https://github.com/refactoringhq/tolaria/pulls). The [contributing guide](https://github.com/refactoringhq/tolaria/blob/main/CONTRIBUTING.md) explains the local workflow. + +## Report A Bug + +Use [GitHub Issues](https://github.com/refactoringhq/tolaria/issues) for bugs. Include what happened, what you expected, and clear reproduction steps. If you are reporting from inside Tolaria, use the Contribute panel to copy sanitized diagnostics and attach them to the issue. + +--- + +# Docs Maintenance + +Source: reference/docs-maintenance.md +URL: /reference/docs-maintenance + +# Docs Maintenance + +The public docs live in the app repo so documentation changes can ship with behavior changes. + +## Update Docs When You Change + +- A Tauri command. +- A new component or hook that changes user behavior. +- A data model or frontmatter convention. +- Git, AI, onboarding, or release behavior. +- Public release pages, download metadata, or updater channels. +- Platform support. +- Keyboard shortcuts. + +## Suggested Workflow + +1. Make the code change. +2. Update the matching concept, guide, or reference page. +3. Add a troubleshooting page if the change creates a new failure mode. +4. Run `pnpm docs:build`. +5. Check the home page, search, release/download links, and changed docs pages in a browser. + +## Page Types + +| Type | Purpose | +| --- | --- | +| Start | Helps a new user get into the app. | +| Concepts | Explains mental models. | +| Guides | Teaches workflows. | +| Reference | Gives stable facts and tables. | +| Troubleshooting | Starts from a symptom and ends with recovery. | + +## Review Checklist + +- Does the page describe current behavior? +- Does it mention macOS primary and Windows/Linux supported-early status when platform support matters? +- Are links relative and VitePress-compatible? +- Can a user discover the page with local search? + +--- + +# File Layout + +Source: reference/file-layout.md +URL: /reference/file-layout + +# File Layout + +Tolaria is not opinionated about folder structure. It finds notes recursively across the whole vault, stores new notes in the root by default, and uses types and relationships for real organization. + +```txt +my-vault/ + project-alpha.md + weekly-review.md + research/ + source-notes.md + attachments/ + diagram.png + source.pdf + project.md + person.md + views/ + active-projects.yml +``` + +## Root Notes + +Tolaria works well with a flat vault. Folders are optional and can be useful for compatibility with other tools, but they are not required for people, projects, topics, or any other note category. + +Type is not inferred from folder location. It comes from frontmatter, and relationships are expressed with wikilinks in fields. That is what Tolaria uses for the sidebar, Properties panel, search, custom views, and neighborhood navigation. + +## Special Folders + +| Folder | Purpose | +| --- | --- | +| `views/` | Saved custom views. | +| `attachments/` | Images and other attached files. | + +PDFs, images, and other non-Markdown files stay as normal files. Folder browsing can show them in place, and Settings controls whether PDFs, images, and unsupported files appear in All Notes. + +Whiteboards are Markdown files with durable tldraw data, so they belong with notes rather than in `attachments/`. + +Type definitions are Markdown notes with `type: Type` in frontmatter. New type documents are normal notes, and existing type documents in older folders still work. + +## Git Files + +If the vault is a Git repository, `.git/` belongs to Git. Tolaria reads Git state but does not treat `.git/` as notes. + +--- + +# Frontmatter Fields + +Source: reference/frontmatter-fields.md +URL: /reference/frontmatter-fields + +# Frontmatter Fields + +Tolaria uses conventions instead of a required schema. + +| Field | Meaning | +| --- | --- | +| `type` | The note's entity type. | +| `status` | Lifecycle state. | +| `icon` | Per-note icon. | +| `url` | External URL. | +| `date` | Single date. | +| `belongs_to` | Parent relationship. | +| `related_to` | Lateral relationship. | +| `has` | Contained relationship. | +| `_width` | Per-note editor width override. | +| `_icon`, `_color` | Type or note appearance metadata. | +| `_sidebar_label`, `_order` | Type sidebar label and order. | +| `_pinned_properties` | Properties pinned for a type. | + +## Custom Fields + +You can add your own fields. If a field contains wikilinks, Tolaria can treat it as a relationship. + +## System Fields + +Fields starting with `_` are reserved for system behavior and hidden from standard property editing. They remain plain YAML, so they can still be inspected or changed in raw mode when needed. + +--- + +# Keyboard Shortcuts + +Source: reference/keyboard-shortcuts.md +URL: /reference/keyboard-shortcuts + +# Keyboard Shortcuts + +| Shortcut | Action | +| --- | --- | +| `Cmd+K` / `Ctrl+K` | Open command palette. | +| `Cmd+P` / `Ctrl+P` | Quick open notes and files. | +| `Cmd+N` / `Ctrl+N` | Create a new note. | +| `Cmd+S` / `Ctrl+S` | Save current note. | +| `Cmd+F` / `Ctrl+F` | Find in the current note. | +| `Cmd+Shift+F` / `Ctrl+Shift+F` | Search the vault. | +| `Cmd+Shift+V` / `Ctrl+Shift+V` | Paste without formatting. | +| `Cmd+\` / `Ctrl+\` | Toggle raw Markdown mode. | +| `Cmd+Shift+T` / `Ctrl+Shift+T` | Toggle table of contents. | +| `Cmd+Shift+I` / `Ctrl+Shift+I` | Toggle Properties panel. | +| `Cmd+Shift+L` / `Ctrl+Shift+L` | Toggle AI panel. | +| `Cmd+[` / `Alt+Left` | Navigate back when available. | +| `Cmd+]` / `Alt+Right` | Navigate forward when available. | +| `Cmd+Shift+O` / `Ctrl+Shift+O` | Open current note in a new window. | +| `Cmd+D` / `Ctrl+D` | Toggle favorite for the current note. | +| `Cmd+E` / `Ctrl+E` | Mark the current Inbox note organized. | + +Some shortcuts vary by platform because macOS, Linux, and Windows reserve different key combinations. + +Use the command palette to discover the current command set. + +--- + +# Release Channels + +Source: reference/release-channels.md +URL: /reference/release-channels + +# Release Channels + +Tolaria publishes Stable and Alpha release metadata to GitHub Pages. + +## Stable + +Stable follows manually promoted releases. This is the right channel for normal use. + +The stable updater metadata lives at: + +```txt +/stable/latest.json +``` + +The public download page points at the latest stable release. + +## Alpha + +Alpha follows pushes to `main`. It receives fixes and features earlier, but it can be rougher than Stable. + +The alpha updater metadata lives at: + +```txt +/alpha/latest.json +``` + +Compatibility endpoints also point to the alpha metadata: + +```txt +/latest.json +/latest-canary.json +``` + +## Before Switching + +Commit or push important vault changes before changing release channel or installing an update. Your notes are local files, but a clean Git state makes recovery simpler. + +--- + +# Supported Platforms + +Source: reference/supported-platforms.md +URL: /reference/supported-platforms + +# Supported Platforms + +Tolaria is a desktop app built with Tauri. Releases currently target macOS, Windows, and Linux. + +| Platform | Current support | Notes | +| --- | --- | --- | +| macOS | Primary | Main development and QA target. Apple Silicon and Intel artifacts are published. | +| Windows | Supported, early | NSIS installers and signed updater bundles are published. Menu, shell-path, and credential-helper behavior receive platform-specific fixes as they appear. | +| Linux | Supported, early | AppImage and deb artifacts are published. Behavior can depend on distro WebKitGTK packages, Wayland/X11 details, and input-method setup. | + +## Support Policy + +Primary support means the platform is part of normal development and release validation. Supported, early means release artifacts exist and the app is expected to work, but platform-specific bugs can take longer to diagnose than macOS issues. + +## Reporting Platform Bugs + +Include: + +- Tolaria version. +- Operating system and version. +- CPU architecture. +- Whether the vault is local-only or connected to a remote. +- Steps to reproduce. + +--- + +# View Filters + +Source: reference/view-filters.md +URL: /reference/view-filters + +# View Filters + +View filters define saved lists of notes. + +## Common Filter Ideas + +| Goal | Filter direction | +| --- | --- | +| Active projects | `type` is Project and `status` is Active | +| Drafts | `type` is Article and `status` is Draft | +| People follow-up | `type` is Person and date is before today | +| Recent work | modified date is within a recent range | + +## Sorting + +Useful sorts include: + +- Recently modified first. +- Title ascending. +- Status ascending. +- A custom property ascending or descending. + +## Operators + +Saved views can combine filters for text, dates, relationship fields, and frontmatter values. Relative date expressions are useful for views such as notes changed this week or people that need follow-up. + +Regex filters are available for power-user cases. Keep them narrow and test them on a small view first. + +## Keep Views Focused + +A view should answer one recurring question. If it becomes too broad, split it into two views. + +You can also customize view appearance with the same kind of icon and color controls used by types. + +--- + +# AI Agent Not Found + +Source: troubleshooting/ai-agent-not-found.md +URL: /troubleshooting/ai-agent-not-found + +# AI Agent Not Found + +Tolaria can only launch local CLI agents that are installed and discoverable. + +## Symptoms + +- The AI panel says no supported agent is available. +- Claude Code or another agent works in one shell but not in Tolaria. + +## Checks + +Open a terminal and run the agent command directly. For Claude Code: + +```bash +claude --version +``` + +If the command fails, install or repair the agent first. + +## Path Issues + +Desktop apps can inherit a different `PATH` from your interactive shell. Tolaria checks common install locations, but shell setup can still vary. Prefer installing CLI tools in standard locations or making them available from your login shell. + +--- + +# Git Authentication + +Source: troubleshooting/git-auth.md +URL: /troubleshooting/git-auth + +# Git Authentication + +Tolaria uses system Git authentication. It does not manage provider passwords directly. + +## Symptoms + +- Push fails. +- Pull asks for credentials repeatedly. +- Remote fetch works in one terminal but not in Tolaria. + +## Checks + +1. Open a terminal. +2. `cd` into the vault. +3. Run `git remote -v`. +4. Run `git fetch`. + +If `git fetch` fails in the terminal, fix system Git auth first. + +## Common Fixes + +- Sign in with GitHub CLI. +- Configure SSH keys. +- Update the remote URL. +- Check your credential helper. + +--- + +# Model Provider Connection + +Source: troubleshooting/model-provider-connection.md +URL: /troubleshooting/model-provider-connection + +# Model Provider Connection + +Use this checklist when a local or API model provider does not connect. + +## Local Providers + +For Ollama or LM Studio: + +1. Start the local model server. +2. Confirm the base URL in Tolaria matches the server. +3. Confirm the model ID is installed and loaded by the provider. +4. Use the Settings test action again. + +## API Providers + +For hosted providers: + +1. Confirm the provider kind and endpoint. +2. Confirm the model ID exists for your account. +3. Confirm the API key is saved locally or available in the configured environment variable. +4. Avoid storing secrets in the vault. + +## Chat Mode Boundary + +Direct model targets run in chat mode. If you need file-editing tools, use a coding agent target such as Claude Code, Codex, OpenCode, Pi, or Gemini CLI. + +--- + +# Sync Conflicts + +Source: troubleshooting/sync-conflicts.md +URL: /troubleshooting/sync-conflicts + +# Sync Conflicts + +Sync conflicts happen when local and remote changes touch the same content. + +## What To Do + +1. Stop editing the conflicted note. +2. Open the conflict resolver if Tolaria presents it. +3. Review both sides. +4. Choose the correct content or merge manually. +5. Commit the resolved file. +6. Push again. + +## Prevent Conflicts + +- Pull before starting work on another device. +- Push after meaningful sessions. +- Keep AI-generated edits in small commits. +- Avoid editing the same note on multiple devices at the same time. + +--- + +# Vault Not Loading + +Source: troubleshooting/vault-not-loading.md +URL: /troubleshooting/vault-not-loading + +# Vault Not Loading + +Use this checklist when Tolaria cannot open or refresh a vault. + +## Check The Folder + +- Confirm the folder exists. +- Confirm the folder contains readable files. +- Confirm Tolaria has permission to access the folder. +- Try opening a smaller test vault to isolate the issue. + +## Check Git + +If the vault is a Git repository, verify it is not in a broken state: + +```bash +git status +``` + +Resolve interrupted merges or corrupted repository state before retrying. + +## Reload + +Run `Reload Vault` from the command palette. This clears derived cache and rescans the filesystem. + +--- + +# Download + +Source: download/index.md +URL: /download/ + +# Download + +Download Tolaria from the latest stable release. + +## Latest Stable + +[Open the installer download page](https://refactoringhq.github.io/tolaria/download/) + +The download page reads the latest stable release metadata and points you to the current macOS, Windows, or Linux artifact. + +## Other Builds + +- [Browse all GitHub releases](https://github.com/refactoringhq/tolaria/releases) +- [Read release history](/releases/) +- [Learn release channels](/reference/release-channels) + +## Verify The Version + +After launching the app, check the version shown in Tolaria's status bar or release surface. + +--- + +# Releases + +Source: releases/index.md +URL: /releases/ + +# Releases + +Tolaria releases are published on GitHub. + +- [Latest release](https://github.com/refactoringhq/tolaria/releases/latest) +- [All releases](https://github.com/refactoringhq/tolaria/releases) +- [Download page](/download/) + +## Release Channels + +Stable builds are intended for normal use. Pre-release builds may contain newer features and rougher edges. + +Tolaria also has an Alpha channel for builds generated from pushes to `main`. See [Release Channels](/reference/release-channels) before switching from Stable. + +## Before Updating + +Commit or push important vault changes before updating the app. Your notes are local files, but having a clean Git state makes recovery easier. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/concepts.md b/src-tauri/resources/agent-docs/concepts.md new file mode 100644 index 00000000..0ebccf44 --- /dev/null +++ b/src-tauri/resources/agent-docs/concepts.md @@ -0,0 +1,394 @@ +# AI + +Source: concepts/ai.md +URL: /concepts/ai + +# AI + +Tolaria has two AI paths: coding agents that can use tools to inspect and edit a vault, and direct model targets that answer in chat mode from note context. + +## Coding Agents + +The AI panel can stream supported local CLI agents through Tolaria's normalized event layer. Current targets include Claude Code, Codex, OpenCode, Pi, and Gemini CLI when they are installed on the machine. + +Coding agents can run in: + +- **Vault Safe** mode, limited to file, search, and edit tools. +- **Power User** mode, which can allow local shell commands scoped to the active vault for agents that support shell access. + +## Direct Models + +Direct model targets run in chat mode. They receive the active note, linked context, and conversation history, but they do not receive vault-write tools or shell access. + +Supported provider shapes include: + +- Local models through Ollama or LM Studio. +- Hosted providers such as OpenAI, Anthropic, Gemini, and OpenRouter. +- Custom OpenAI-compatible endpoints. + +## External MCP Setup + +Tolaria exposes an MCP server for external tools. The setup flow can write Tolaria's MCP entry into Claude Code, Gemini CLI, Cursor, and a generic MCP config path, and it can also copy the exact JSON snippet for manual setup. + +MCP setup is explicit. Closing the dialog leaves third-party config files untouched. + +## Why Git Matters For AI + +AI-generated changes should be inspectable. Git gives you diffs, history, rollback, and a clear boundary between suggestions and committed work. + +--- + +# Editor + +Source: concepts/editor.md +URL: /concepts/editor + +# Editor + +Tolaria offers a rich editor for daily writing and a raw Markdown mode for exact file control. Both modes write back to the same Markdown file. + +## Rich Editing + +The rich editor supports blocks, slash commands, wikilinks, tables, code blocks, images, Mermaid diagrams, LaTeX-style math, and markdown-backed whiteboards. + +Use it when you want to write and reorganize quickly without thinking about Markdown syntax. + +## Raw Mode + +Raw mode shows the Markdown source directly. Use it when you need to edit YAML frontmatter, repair unusual Markdown, or make an exact text change. + +Toggle raw mode with `Cmd+\` on macOS or `Ctrl+\` on Windows and Linux. + +## Table Of Contents + +The table of contents panel builds an outline from headings in the current note. It is useful for long notes, procedures, research files, and generated documents. Toggle it with `Cmd+Shift+T` on macOS or `Ctrl+Shift+T` on Windows and Linux. + +## Width + +Notes can use normal or wide editor width. Set the default in Settings, or override an individual note from the editor toolbar. + +--- + +# Files And Media + +Source: concepts/files-and-media.md +URL: /concepts/files-and-media + +# Files And Media + +Tolaria starts with Markdown notes, but a vault can also contain images, PDFs, media files, whiteboards, and other local files. + +## Mermaid Diagrams + +Use Mermaid code blocks when a note needs a diagram that should stay plain text and versionable. + +````md +```mermaid +flowchart LR + Idea --> Draft --> Review --> Publish +``` +```` + +Tolaria renders Mermaid diagrams in the editor while keeping the source in Markdown. + +## Attachments + +Images pasted into the editor are saved into the vault as normal files. They remain portable and can be opened by other tools. + +## Previews + +Tolaria can preview common image files, PDFs, and supported media files in the app. Files without an in-app preview can still be opened in the default system app. + +Settings control whether PDFs, images, and unsupported files appear in All Notes. Folder browsing still shows files in their folders. + +## Whiteboards + +Whiteboards use tldraw in the editor, but their durable representation stays in Markdown. That keeps them inside the vault and versioned by Git with the rest of your notes. + +## Git Boundary + +If generated or local-only files are ignored by Git, Tolaria can hide them from notes, search, quick open, and folders. Use this when build artifacts or private local files should not behave like vault content. + +--- + +# Git + +Source: concepts/git.md +URL: /concepts/git + +# Git + +Git is Tolaria's recommended history and sync layer. Tolaria can work with plain Markdown folders, and Git unlocks local history, recovery, remote backup, and multi-device workflows when you want them. + +Tolaria acts as a lightweight Git client for your vault. You can review changes, commit, pull, push, and inspect history without leaving the app. + +## What Tolaria Uses Git For + +- Whole-vault commit history. +- Current diff for the vault. +- Per-note history. +- Current diff for an individual note. +- Pull and push. +- Conflict detection and resolution. +- Remote connection for local-only vaults. + +## History And Diffs + +Each note can show its own history and current diff, so you can understand how that file changed over time or what is unsaved relative to Git. + +Tolaria also shows a history of the whole vault. Use it when you want to review broader changes across multiple notes before committing or syncing. + +## Local Commits + +You can commit changes inside Tolaria without leaving the app. This gives you useful restore points even before a remote is configured. + +## Remotes + +Connect a compatible Git remote when you want sync or backup. Tolaria relies on your system Git authentication, so GitHub CLI, SSH keys, credential helpers, and existing Git configuration can continue to work. + +--- + +# Inbox + +Source: concepts/inbox.md +URL: /concepts/inbox + +# Inbox + +The Inbox is for notes that have been captured but not yet organized. + +## Why It Exists + +Fast capture should not require perfect structure. The Inbox gives you a place to put incomplete notes, then process them later. + +The Inbox workflow is optional. Turn it off in Settings > Workflow if you prefer every note to appear organized by default. + +## Organizing Inbox Notes + +When reviewing the Inbox: + +1. Give the note a clear H1. +2. Set its `type`. +3. Add status, dates, or URL if useful. +4. Add relationships with wikilinks or frontmatter fields. +5. Move it into a folder only if the folder adds value. + +## Healthy Inbox Habit + +Keep the Inbox small enough that it can be reviewed in one focused pass. Tolaria works best when capture is fast and organization is deliberate. + +--- + +# Notes + +Source: concepts/notes.md +URL: /concepts/notes + +# Notes + +A note is a Markdown file with optional YAML frontmatter. Tolaria reads the first H1 as the primary title and keeps the file on disk as the durable representation. + +## Anatomy + +```md +--- +type: Project +status: Active +belongs_to: + - "[[workspace]]" +--- + +# Launch Documentation + +Draft the public Tolaria docs and keep them close to code changes. +``` + +## Titles + +The first H1 is the note title. Tolaria uses that title wherever the note is displayed: note lists, search results, wikilink suggestions, relationship pickers, tabs, and window titles. + +The title is separate from the filename. The filename stays visible in the breadcrumb so you can see the file on disk, and you can rename it independently when needed. + +Use the breadcrumb action to rename the file to match the title. New untitled notes can also auto-rename from the first H1 the first time they get a real title. Turn this behavior off in Settings > Vault Content > Titles & Filenames if you prefer filenames to stay unchanged until you rename them manually. + +## Body Links + +Use `[[wikilinks]]` to connect notes from the body. Tolaria shows autocomplete suggestions while you type, and links can resolve by filename or title. + +## Frontmatter + +Use frontmatter for structured fields such as type, status, date, URL, and relationships. Keep free-form thinking in the body. + +--- + +# Properties + +Source: concepts/properties.md +URL: /concepts/properties + +# Properties + +Properties are frontmatter fields that Tolaria can display, filter, and edit. + +## Suggested Properties + +Suggested properties are the fields Tolaria knows how to create quickly from the Properties panel. When a suggested property is missing, the panel shows a shortcut to add it with the right editor. + +| Field | Purpose | +| --- | --- | +| `type` | Groups the note into a type such as Project, Person, or Topic. | +| `status` | Tracks lifecycle state such as Active, Done, or Blocked. | +| `url` | Stores a canonical external link. | +| `date` | Represents a single date. | + +## System Properties + +Fields that start with `_` are system properties. They remain in plain text but are hidden from normal property editing. + +Examples include `_icon`, `_color`, `_order`, `_sidebar_label`, `_width`, and `_pinned_properties` on type documents or notes. + +## Property Editing + +The Properties panel is the safest place to edit structured properties. Toggle it with `Cmd+Shift+I` on macOS or `Ctrl+Shift+I` on Windows and Linux. + +Date fields use Tolaria's picker, relationship fields can use wikilinks, and raw Markdown mode is available when you need direct control over YAML. + +--- + +# Relationships + +Source: concepts/relationships.md +URL: /concepts/relationships + +# Relationships + +Relationships make a vault feel like a graph instead of a pile of documents. + +## Relationship Fields + +Any frontmatter field containing wikilinks can become a relationship. Relationship fields can point to one note or to an array of notes. + +```yaml +belongs_to: + - "[[product-work]]" +related_to: + - "[[documentation]]" + - "[[editor-research]]" +blocked_by: + - "[[release-process]]" + - "[[sync-conflicts]]" +``` + +Tolaria supports default relationship fields out of the box: `belongs_to`, `has`, and `related_to`. It also detects custom relationship fields dynamically when they contain wikilinks. + +Default relationships have automatically computed inverses. If a note says it `belongs_to` a project, the project can show that note under its inverse `has` relationship without you writing the reverse link by hand. `related_to` works as a lateral relationship in both directions. + +These outgoing and inverse relationships appear in the Properties panel and in Neighborhood mode, where the note list becomes a graph view around the selected note. + +## Body Links Versus Relationship Fields + +Use body links when the relationship appears naturally in writing. Use frontmatter relationships when the connection is important enough to show in navigation, filters, Neighborhood mode, or the Properties panel. + +## Backlinks + +Tolaria can show incoming links and inverse relationships, making it easier to navigate from a note to the rest of its context. + +--- + +# Types + +Source: concepts/types.md +URL: /concepts/types + +# Types + +Types describe what kind of thing a note represents: Project, Person, Topic, Procedure, Event, or any category you create. + +## Type Field + +The `type:` field assigns a note to a type. + +```yaml +type: Project +``` + +Tolaria does not infer type from folder location. Moving a file into another folder does not change its type. + +## Prefer Types Over Folders + +Types are the preferred way to group notes in Tolaria. Folders are supported for existing vaults and fallback organization, but Tolaria is built around types and relationships because they carry stronger meaning than file paths. + +Use types for semantic groups such as Projects, People, Topics, Procedures, Events, and Essays. Use relationships to connect notes across those groups. This gives Tolaria better structure for navigation, filtering, properties, templates, and future automation than folder location alone. + +## Type Documents + +Type documents are Markdown notes with `type: Type` in frontmatter. They describe how a type should appear and what new notes of that type should start with. + +```yaml +--- +type: Type +_icon: folder +_color: blue +_sidebar_label: Projects +_order: 10 +--- + +# Project +``` + +## What Types Control + +- Sidebar grouping. +- Type icon and color. +- Sidebar order and label. +- Pinned properties. +- New-note templates. + +## New Note Defaults + +Type documents can define empty properties and relationships. When you create a new note of that type, Tolaria shows placeholders for those fields so you can fill them in from the Properties panel. + +If a type document gives a property a value, that value becomes the default for new notes of that type. For example, a Project type can define `status: Active` so every new project starts active until you change it. + +--- + +# Vaults + +Source: concepts/vaults.md +URL: /concepts/vaults + +# Vaults + +A vault is the folder Tolaria reads and writes. The filesystem is the source of truth; the app state and cache are derived from files. + +## Core Rules + +- Notes are Markdown files. +- YAML frontmatter provides structure. +- Attachments are normal files inside the vault. +- Type definitions and saved views are also files. +- Git can track history and support remote sync. + +## Why Local Files Matter + +Local files keep your notes inspectable. You can open them in another editor, search with command-line tools, back them up with your own system, and version them with Git. + +Tolaria should never become the only way to read your data. + +## Git Is A Capability + +A plain folder of Markdown files can open as a vault. Git-backed vaults unlock history, changes, commits, pull, push, conflict handling, and remote setup. + +If a folder is not a Git repository, Tolaria can initialize Git when you explicitly ask it to. It avoids initializing broad personal folders such as Desktop, Documents, or Downloads unless they are clearly dedicated vault folders. + +## App State Versus Vault State + +Vault-level information should travel with the vault. Machine-specific preferences stay with the app installation. + +| Vault state | App state | +| --- | --- | +| Type icons and colors | Editor zoom | +| Saved views | Window size | +| Pinned properties | Recent vault list | +| Relationship conventions | Local cache | +| Vault AI guidance files | AI target selection | \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/download.md b/src-tauri/resources/agent-docs/download.md new file mode 100644 index 00000000..640833c6 --- /dev/null +++ b/src-tauri/resources/agent-docs/download.md @@ -0,0 +1,24 @@ +# Download + +Source: download/index.md +URL: /download/ + +# Download + +Download Tolaria from the latest stable release. + +## Latest Stable + +[Open the installer download page](https://refactoringhq.github.io/tolaria/download/) + +The download page reads the latest stable release metadata and points you to the current macOS, Windows, or Linux artifact. + +## Other Builds + +- [Browse all GitHub releases](https://github.com/refactoringhq/tolaria/releases) +- [Read release history](/releases/) +- [Learn release channels](/reference/release-channels) + +## Verify The Version + +After launching the app, check the version shown in Tolaria's status bar or release surface. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/guides.md b/src-tauri/resources/agent-docs/guides.md new file mode 100644 index 00000000..95bf3e4b --- /dev/null +++ b/src-tauri/resources/agent-docs/guides.md @@ -0,0 +1,441 @@ +# Build Custom Views + +Source: guides/build-custom-views.md +URL: /guides/build-custom-views + +# Build Custom Views + +Custom views are saved filters for recurring questions. + +## Good View Candidates + +- Active projects. +- People without a recent follow-up. +- Drafts ready for review. +- Notes changed this week. +- Events in a date range. + +## View Definition + +Saved views live as files in the vault. They describe filters, sorting, and visible columns using structured data. + +## Filters + +Custom views can use nested conditions, similar to Notion or Airtable filter groups. Combine `all` and `any` logic when a view needs to answer a more precise question than a single field filter can express. + +Date filters support dynamic natural-language values such as `today`, `yesterday`, or `one week ago`. Use these for views that should keep moving over time, such as recent work, stale follow-ups, or upcoming events. + +## Design The Question First + +Before creating a view, write the question it answers. A good view is not "all fields with all filters"; it is a focused lens. + +--- + +# Capture A Note + +Source: guides/capture-a-note.md +URL: /guides/capture-a-note + +# Capture A Note + +Use capture when you need to get an idea into the vault before you know where it belongs. + +## Steps + +1. Press `Cmd+N` on macOS or `Ctrl+N` on Windows and Linux. +2. Write a clear H1. +3. Add the rough content. +4. Leave structure for later if you are still thinking. + +## Capture Well + +Prefer a useful title over a perfect taxonomy. You can add type, status, and relationships during inbox review. + +## When To Add Structure Immediately + +Add structure while capturing when the note's type or relationships are already obvious. Otherwise, capture the idea first and organize it later. + +--- + +# Manage Git Manually Or With AutoGit + +Source: guides/commit-and-push.md +URL: /guides/commit-and-push + +# Manage Git Manually Or With AutoGit + +Tolaria can act as a lightweight Git client for a Git-enabled vault. You can manage commits and pushes yourself, or enable AutoGit to create conservative checkpoints after editing pauses or when the app is no longer active. + +## Manual Git + +1. Open the Git or changes surface. +2. Review changed files. +3. Write a short commit message. +4. Commit locally. +5. Push when a remote is configured. + +If the remote has changed, pull first and resolve any conflicts. If the vault has no remote, manual commits still give you local history, diffs, and rollback. + +## AutoGit + +AutoGit is available in Settings for Git-enabled vaults. When enabled, Tolaria automatically commits and pushes saved local changes after an idle pause or after the app becomes inactive. + +Use AutoGit when you want the safety of regular checkpoints without interrupting capture or editing. You can still inspect each note's current diff, review note history, and browse the whole-vault history before making larger manual commits. + +## Use Small Commits + +Small commits make it easier to understand what changed, roll back safely, and review AI-generated edits. + +--- + +# Configure AI Models + +Source: guides/configure-ai-models.md +URL: /guides/configure-ai-models + +# Configure AI Models + +Use model providers when you want chat over note context without giving an agent vault-write tools. + +## Local Models + +Local model targets are for tools such as Ollama and LM Studio. They usually need a base URL and model ID, and they usually do not need an API key. + +## API Models + +API model targets are for hosted providers such as OpenAI, Anthropic, Gemini, OpenRouter, or another OpenAI-compatible endpoint. + +Tolaria does not store provider API keys in vault settings. Choose one of the supported key paths: + +- Save the key locally on this device. +- Read the key from an environment variable. +- Use no key for local providers that do not require one. + +## Test The Connection + +After adding a provider, use the test action in Settings. A successful test means Tolaria reached the endpoint and the model replied. + +## Select The Target + +Once configured, choose the model from the AI target selector or set it as the default AI target in Settings. + +--- + +# Connect A Git Remote + +Source: guides/connect-a-git-remote.md +URL: /guides/connect-a-git-remote + +# Connect A Git Remote + +Connect a remote when you want backup or sync beyond the current machine. + +## Before You Start + +Make sure the remote repository exists and your system Git can authenticate to it. Tolaria uses system Git rather than storing provider-specific credentials. + +## Steps + +1. Open the bottom status bar remote chip, or run `Add Remote` from the command palette. +2. Paste the remote URL. +3. Confirm the remote name. +4. Fetch or push according to the app prompt. + +## Recommended Auth + +- SSH keys. +- GitHub CLI authentication. +- Existing Git credential helpers. +- macOS Keychain credentials for HTTPS remotes on macOS. + +If authentication fails, see [Git Authentication](/troubleshooting/git-auth). + +--- + +# Create Types + +Source: guides/create-types.md +URL: /guides/create-types + +# Create Types + +Create a type when several notes share the same role in your system. + +## Steps + +1. Run `New Type` from the command palette, or click `+` in the Types header in the sidebar. +2. Give the type a clear name. +3. Add optional icon, color, sidebar order, sidebar label, pinned properties, suggested fields, default values, or a new-note template. + +You can also right-click a type in the sidebar to change its icon and color. + +```yaml +--- +type: Type +_icon: briefcase +_color: blue +_sidebar_label: Projects +_order: 10 +--- + +# Project +``` + +## Use Types Sparingly + +A type should represent a recurring category, not a one-off label. If you only need a temporary grouping, use a saved view or property instead. + +## Templates + +Type documents can include a Markdown template for new notes of that type. Keep templates small and useful: a heading, a few expected fields, and the first checklist are usually enough. + +Type documents can also define fields for new notes. Empty properties and relationships become placeholders in new notes of that type. Properties with values become defaults for new notes of that type. + +--- + +# Manage Display Preferences + +Source: guides/manage-display-preferences.md +URL: /guides/manage-display-preferences + +# Manage Display Preferences + +Display preferences live in local app settings unless a setting is intentionally stored in the note or vault. + +## Theme + +Choose Light, Dark, or System in Settings. System follows the operating system appearance at runtime. + +You can also switch theme mode from the command palette. + +## Note Width + +Set the default rich-editor width in Settings: + +- **Normal** for focused writing. +- **Wide** for tables, diagrams, dense notes, and generated documents. + +An individual note can override the default width from the editor toolbar. That override is stored as `_width` in the note frontmatter. + +## Sidebar Labels + +Tolaria can pluralize type names in the sidebar. Turn this off in Settings if your type names should be shown exactly as written, or use `_sidebar_label` on a type document for an explicit label. + +## Vault Content + +Settings also control whether Gitignored files and non-Markdown file categories are visible in the app. Use these controls to keep generated or local-only files out of regular note workflows. + +--- + +# Organize The Inbox + +Source: guides/organize-inbox.md +URL: /guides/organize-inbox + +# Organize The Inbox + +Inbox review turns quick captures into usable knowledge. + +## Remove A Note From Inbox + +When a note is organized enough, mark it as organized. Use `Cmd+E` on macOS or `Ctrl+E` on Windows and Linux, or click the organize action in the breadcrumb bar. + +That action is what removes the note from Inbox. If auto-advance is enabled in Settings > Workflow, Tolaria opens the next Inbox item immediately after you mark the current note organized. + +## Review Checklist + +- Rename unclear notes. +- Add or correct the first H1. +- Set `type`. +- Add `status` for actionable notes. +- Add `belongs_to`, `related_to`, or other relationship fields when useful. +- Archive or delete notes that no longer matter. + +## Make Notes Navigable + +A note is organized when you can answer: + +- What kind of thing is this? +- What is it connected to? +- What is this useful for? +- What will I do with it? + +## Avoid Over-Structuring + +Do not add fields just because they exist. Add the structure that will help future navigation, review, or automation. + +--- + +# Use The AI + +Source: guides/use-ai-panel.md +URL: /guides/use-ai-panel + +# Use The AI + +Tolaria gives you two ways to ask for AI help: open the AI panel for an ongoing conversation, or prompt directly from the editor with `Cmd+K` followed by a space. + +## Choose How To Prompt + +- **AI panel** is best for longer conversations, agent work, and requests that need visible back-and-forth. +- **Inline prompt** is best when you are already writing. Press `Cmd+K`, type a space, then write the prompt you want the AI to handle from the current note context. + +## Choose A Target + +Open Settings and choose the default AI target: + +- **Coding agent** for tool-backed vault editing through Claude Code, Codex, OpenCode, Pi, or Gemini CLI. +- **Local model** for Ollama or LM Studio chat over note context. +- **API model** for OpenAI, Anthropic, Gemini, OpenRouter, or an OpenAI-compatible endpoint. + +If a coding agent is missing, install it and reopen Tolaria or switch to another target. + +## Permission Mode + +Coding agents support per-vault permission modes: + +- **Vault Safe** keeps agents limited to file, search, and edit tools. +- **Power User** can allow shell commands for agents that support them. + +Direct model targets always stay in chat mode. They can use note context, but they cannot edit vault files through tools. + +## Good Requests + +- "Find notes related to this project." +- "Summarize what changed in this note." +- "Draft a weekly review from these linked notes." +- "Update this checklist based on the current project status." + +## Review Changes + +AI edits are file edits. Review them with Tolaria's diff and Git history before committing. + +--- + +# Use The Command Palette + +Source: guides/use-command-palette.md +URL: /guides/use-command-palette + +# Use The Command Palette + +The command palette is the fastest way to move around Tolaria. + +Open it with: + +- `Cmd+K` on macOS. +- `Ctrl+K` on Linux and Windows. + +## Common Commands + +- New Note. +- Search. +- Open Settings. +- Reload Vault. +- Add Remote. +- Open Getting Started Vault. +- Toggle Raw Mode. +- Toggle Table of Contents. +- Toggle AI Panel. +- Use Light, Dark, or System theme. +- Open in New Window. + +## Keyboard-First Workflow + +Use the palette when you know what you want to do but do not want to hunt through panels. It is also the best place to discover commands as the app grows. + +--- + +# Use Media Previews + +Source: guides/use-media-previews.md +URL: /guides/use-media-previews + +# Use Media Previews + +Media previews let you inspect vault files without leaving Tolaria. + +## Open A File + +Select an image, PDF, media file, or unsupported file from a folder or file list. Tolaria opens supported files in the app and offers an external-open action for files that should use the system default app. + +## All Notes Visibility + +Open Settings to choose whether non-Markdown files appear in All Notes: + +- PDFs. +- Images. +- Unsupported files. + +Folder browsing still shows files in their folders even when a category is hidden from All Notes. + +## Attachments + +When you paste or drop an image into a note, Tolaria copies it into the vault and references the copied file from Markdown. + +## Troubleshooting + +If a preview does not render, open the file in the default app to confirm the file is valid, then check whether the file is inside the active vault and not blocked by operating-system permissions. + +--- + +# Use The Table Of Contents + +Source: guides/use-table-of-contents.md +URL: /guides/use-table-of-contents + +# Use The Table Of Contents + +The table of contents panel helps you navigate long notes by heading. + +## Open It + +Use the editor toolbar, the command palette, or the shortcut: + +- `Cmd+Shift+T` on macOS. +- `Ctrl+Shift+T` on Windows and Linux. + +## How It Works + +Tolaria builds the outline from the current note's headings. The panel updates as the note changes and can jump to sections in the editor. + +## Good Uses + +- Long procedures. +- Meeting notes with many sections. +- Research notes. +- Generated documents that need review. + +If a note has no useful headings, add clear H2 and H3 sections rather than relying on a long uninterrupted document. + +--- + +# Use Wikilinks + +Source: guides/use-wikilinks.md +URL: /guides/use-wikilinks + +# Use Wikilinks + +Wikilinks connect notes by name. + +```md +This project belongs to [[content-systems]] and is related to [[git-workflows]]. +``` + +## Link From The Body + +Use body links when the connection is part of the sentence you are writing. + +## Link From Frontmatter + +Use frontmatter links when the relationship should become structured metadata. + +```yaml +related_to: + - "[[git-workflows]]" +``` + +## Keep Links Stable + +Prefer clear note titles and filenames. Tolaria's wikilink autocomplete helps you pick the right target while you type. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/home.md b/src-tauri/resources/agent-docs/home.md new file mode 100644 index 00000000..a3261667 --- /dev/null +++ b/src-tauri/resources/agent-docs/home.md @@ -0,0 +1,6 @@ +# Index + +Source: index.md +URL: / + + \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/index.md b/src-tauri/resources/agent-docs/index.md new file mode 100644 index 00000000..b9868aac --- /dev/null +++ b/src-tauri/resources/agent-docs/index.md @@ -0,0 +1,79 @@ +# Tolaria Agent Docs + +These docs are generated from the public Tolaria documentation for local AI agent lookup. + +Start here, then use `rg` over this folder for specific Tolaria concepts and workflows. + +## Home + +- [Index](pages/index.md) + +## Start + +- [First Launch](pages/start/first-launch.md) +- [Getting Started Vault](pages/start/getting-started-vault.md) +- [Install Tolaria](pages/start/install.md) +- [Open Or Create A Vault](pages/start/open-or-create-vault.md) + +## Concepts + +- [AI](pages/concepts/ai.md) +- [Editor](pages/concepts/editor.md) +- [Files And Media](pages/concepts/files-and-media.md) +- [Git](pages/concepts/git.md) +- [Inbox](pages/concepts/inbox.md) +- [Notes](pages/concepts/notes.md) +- [Properties](pages/concepts/properties.md) +- [Relationships](pages/concepts/relationships.md) +- [Types](pages/concepts/types.md) +- [Vaults](pages/concepts/vaults.md) + +## Guides + +- [Build Custom Views](pages/guides/build-custom-views.md) +- [Capture A Note](pages/guides/capture-a-note.md) +- [Manage Git Manually Or With AutoGit](pages/guides/commit-and-push.md) +- [Configure AI Models](pages/guides/configure-ai-models.md) +- [Connect A Git Remote](pages/guides/connect-a-git-remote.md) +- [Create Types](pages/guides/create-types.md) +- [Manage Display Preferences](pages/guides/manage-display-preferences.md) +- [Organize The Inbox](pages/guides/organize-inbox.md) +- [Use The AI](pages/guides/use-ai-panel.md) +- [Use The Command Palette](pages/guides/use-command-palette.md) +- [Use Media Previews](pages/guides/use-media-previews.md) +- [Use The Table Of Contents](pages/guides/use-table-of-contents.md) +- [Use Wikilinks](pages/guides/use-wikilinks.md) + +## Reference + +- [Contribute](pages/reference/contribute.md) +- [Docs Maintenance](pages/reference/docs-maintenance.md) +- [File Layout](pages/reference/file-layout.md) +- [Frontmatter Fields](pages/reference/frontmatter-fields.md) +- [Keyboard Shortcuts](pages/reference/keyboard-shortcuts.md) +- [Release Channels](pages/reference/release-channels.md) +- [Supported Platforms](pages/reference/supported-platforms.md) +- [View Filters](pages/reference/view-filters.md) + +## Troubleshooting + +- [AI Agent Not Found](pages/troubleshooting/ai-agent-not-found.md) +- [Git Authentication](pages/troubleshooting/git-auth.md) +- [Model Provider Connection](pages/troubleshooting/model-provider-connection.md) +- [Sync Conflicts](pages/troubleshooting/sync-conflicts.md) +- [Vault Not Loading](pages/troubleshooting/vault-not-loading.md) + +## Download + +- [Download](pages/download/index.md) + +## Releases + +- [Releases](pages/releases/index.md) + +## Generated Files + +- `all.md`: all public docs concatenated for fast full-context reads. +- `search-index.json`: title, heading, section, path, and URL metadata for quick routing. +- `
.md`: one compact bundle per docs section. +- `pages/`: one generated Markdown file per public docs page. diff --git a/src-tauri/resources/agent-docs/pages/concepts/ai.md b/src-tauri/resources/agent-docs/pages/concepts/ai.md new file mode 100644 index 00000000..cf8450f3 --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/concepts/ai.md @@ -0,0 +1,37 @@ +# AI + +Source: concepts/ai.md +URL: /concepts/ai + +# AI + +Tolaria has two AI paths: coding agents that can use tools to inspect and edit a vault, and direct model targets that answer in chat mode from note context. + +## Coding Agents + +The AI panel can stream supported local CLI agents through Tolaria's normalized event layer. Current targets include Claude Code, Codex, OpenCode, Pi, and Gemini CLI when they are installed on the machine. + +Coding agents can run in: + +- **Vault Safe** mode, limited to file, search, and edit tools. +- **Power User** mode, which can allow local shell commands scoped to the active vault for agents that support shell access. + +## Direct Models + +Direct model targets run in chat mode. They receive the active note, linked context, and conversation history, but they do not receive vault-write tools or shell access. + +Supported provider shapes include: + +- Local models through Ollama or LM Studio. +- Hosted providers such as OpenAI, Anthropic, Gemini, and OpenRouter. +- Custom OpenAI-compatible endpoints. + +## External MCP Setup + +Tolaria exposes an MCP server for external tools. The setup flow can write Tolaria's MCP entry into Claude Code, Gemini CLI, Cursor, and a generic MCP config path, and it can also copy the exact JSON snippet for manual setup. + +MCP setup is explicit. Closing the dialog leaves third-party config files untouched. + +## Why Git Matters For AI + +AI-generated changes should be inspectable. Git gives you diffs, history, rollback, and a clear boundary between suggestions and committed work. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/concepts/editor.md b/src-tauri/resources/agent-docs/pages/concepts/editor.md new file mode 100644 index 00000000..e3e1b5a3 --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/concepts/editor.md @@ -0,0 +1,28 @@ +# Editor + +Source: concepts/editor.md +URL: /concepts/editor + +# Editor + +Tolaria offers a rich editor for daily writing and a raw Markdown mode for exact file control. Both modes write back to the same Markdown file. + +## Rich Editing + +The rich editor supports blocks, slash commands, wikilinks, tables, code blocks, images, Mermaid diagrams, LaTeX-style math, and markdown-backed whiteboards. + +Use it when you want to write and reorganize quickly without thinking about Markdown syntax. + +## Raw Mode + +Raw mode shows the Markdown source directly. Use it when you need to edit YAML frontmatter, repair unusual Markdown, or make an exact text change. + +Toggle raw mode with `Cmd+\` on macOS or `Ctrl+\` on Windows and Linux. + +## Table Of Contents + +The table of contents panel builds an outline from headings in the current note. It is useful for long notes, procedures, research files, and generated documents. Toggle it with `Cmd+Shift+T` on macOS or `Ctrl+Shift+T` on Windows and Linux. + +## Width + +Notes can use normal or wide editor width. Set the default in Settings, or override an individual note from the editor toolbar. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/concepts/files-and-media.md b/src-tauri/resources/agent-docs/pages/concepts/files-and-media.md new file mode 100644 index 00000000..67e54914 --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/concepts/files-and-media.md @@ -0,0 +1,39 @@ +# Files And Media + +Source: concepts/files-and-media.md +URL: /concepts/files-and-media + +# Files And Media + +Tolaria starts with Markdown notes, but a vault can also contain images, PDFs, media files, whiteboards, and other local files. + +## Mermaid Diagrams + +Use Mermaid code blocks when a note needs a diagram that should stay plain text and versionable. + +````md +```mermaid +flowchart LR + Idea --> Draft --> Review --> Publish +``` +```` + +Tolaria renders Mermaid diagrams in the editor while keeping the source in Markdown. + +## Attachments + +Images pasted into the editor are saved into the vault as normal files. They remain portable and can be opened by other tools. + +## Previews + +Tolaria can preview common image files, PDFs, and supported media files in the app. Files without an in-app preview can still be opened in the default system app. + +Settings control whether PDFs, images, and unsupported files appear in All Notes. Folder browsing still shows files in their folders. + +## Whiteboards + +Whiteboards use tldraw in the editor, but their durable representation stays in Markdown. That keeps them inside the vault and versioned by Git with the rest of your notes. + +## Git Boundary + +If generated or local-only files are ignored by Git, Tolaria can hide them from notes, search, quick open, and folders. Use this when build artifacts or private local files should not behave like vault content. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/concepts/git.md b/src-tauri/resources/agent-docs/pages/concepts/git.md new file mode 100644 index 00000000..f31d3630 --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/concepts/git.md @@ -0,0 +1,34 @@ +# Git + +Source: concepts/git.md +URL: /concepts/git + +# Git + +Git is Tolaria's recommended history and sync layer. Tolaria can work with plain Markdown folders, and Git unlocks local history, recovery, remote backup, and multi-device workflows when you want them. + +Tolaria acts as a lightweight Git client for your vault. You can review changes, commit, pull, push, and inspect history without leaving the app. + +## What Tolaria Uses Git For + +- Whole-vault commit history. +- Current diff for the vault. +- Per-note history. +- Current diff for an individual note. +- Pull and push. +- Conflict detection and resolution. +- Remote connection for local-only vaults. + +## History And Diffs + +Each note can show its own history and current diff, so you can understand how that file changed over time or what is unsaved relative to Git. + +Tolaria also shows a history of the whole vault. Use it when you want to review broader changes across multiple notes before committing or syncing. + +## Local Commits + +You can commit changes inside Tolaria without leaving the app. This gives you useful restore points even before a remote is configured. + +## Remotes + +Connect a compatible Git remote when you want sync or backup. Tolaria relies on your system Git authentication, so GitHub CLI, SSH keys, credential helpers, and existing Git configuration can continue to work. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/concepts/inbox.md b/src-tauri/resources/agent-docs/pages/concepts/inbox.md new file mode 100644 index 00000000..d6e69a9b --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/concepts/inbox.md @@ -0,0 +1,28 @@ +# Inbox + +Source: concepts/inbox.md +URL: /concepts/inbox + +# Inbox + +The Inbox is for notes that have been captured but not yet organized. + +## Why It Exists + +Fast capture should not require perfect structure. The Inbox gives you a place to put incomplete notes, then process them later. + +The Inbox workflow is optional. Turn it off in Settings > Workflow if you prefer every note to appear organized by default. + +## Organizing Inbox Notes + +When reviewing the Inbox: + +1. Give the note a clear H1. +2. Set its `type`. +3. Add status, dates, or URL if useful. +4. Add relationships with wikilinks or frontmatter fields. +5. Move it into a folder only if the folder adds value. + +## Healthy Inbox Habit + +Keep the Inbox small enough that it can be reviewed in one focused pass. Tolaria works best when capture is fast and organization is deliberate. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/concepts/notes.md b/src-tauri/resources/agent-docs/pages/concepts/notes.md new file mode 100644 index 00000000..3f254221 --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/concepts/notes.md @@ -0,0 +1,39 @@ +# Notes + +Source: concepts/notes.md +URL: /concepts/notes + +# Notes + +A note is a Markdown file with optional YAML frontmatter. Tolaria reads the first H1 as the primary title and keeps the file on disk as the durable representation. + +## Anatomy + +```md +--- +type: Project +status: Active +belongs_to: + - "[[workspace]]" +--- + +# Launch Documentation + +Draft the public Tolaria docs and keep them close to code changes. +``` + +## Titles + +The first H1 is the note title. Tolaria uses that title wherever the note is displayed: note lists, search results, wikilink suggestions, relationship pickers, tabs, and window titles. + +The title is separate from the filename. The filename stays visible in the breadcrumb so you can see the file on disk, and you can rename it independently when needed. + +Use the breadcrumb action to rename the file to match the title. New untitled notes can also auto-rename from the first H1 the first time they get a real title. Turn this behavior off in Settings > Vault Content > Titles & Filenames if you prefer filenames to stay unchanged until you rename them manually. + +## Body Links + +Use `[[wikilinks]]` to connect notes from the body. Tolaria shows autocomplete suggestions while you type, and links can resolve by filename or title. + +## Frontmatter + +Use frontmatter for structured fields such as type, status, date, URL, and relationships. Keep free-form thinking in the body. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/concepts/properties.md b/src-tauri/resources/agent-docs/pages/concepts/properties.md new file mode 100644 index 00000000..3805a36e --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/concepts/properties.md @@ -0,0 +1,31 @@ +# Properties + +Source: concepts/properties.md +URL: /concepts/properties + +# Properties + +Properties are frontmatter fields that Tolaria can display, filter, and edit. + +## Suggested Properties + +Suggested properties are the fields Tolaria knows how to create quickly from the Properties panel. When a suggested property is missing, the panel shows a shortcut to add it with the right editor. + +| Field | Purpose | +| --- | --- | +| `type` | Groups the note into a type such as Project, Person, or Topic. | +| `status` | Tracks lifecycle state such as Active, Done, or Blocked. | +| `url` | Stores a canonical external link. | +| `date` | Represents a single date. | + +## System Properties + +Fields that start with `_` are system properties. They remain in plain text but are hidden from normal property editing. + +Examples include `_icon`, `_color`, `_order`, `_sidebar_label`, `_width`, and `_pinned_properties` on type documents or notes. + +## Property Editing + +The Properties panel is the safest place to edit structured properties. Toggle it with `Cmd+Shift+I` on macOS or `Ctrl+Shift+I` on Windows and Linux. + +Date fields use Tolaria's picker, relationship fields can use wikilinks, and raw Markdown mode is available when you need direct control over YAML. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/concepts/relationships.md b/src-tauri/resources/agent-docs/pages/concepts/relationships.md new file mode 100644 index 00000000..309a0b0b --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/concepts/relationships.md @@ -0,0 +1,37 @@ +# Relationships + +Source: concepts/relationships.md +URL: /concepts/relationships + +# Relationships + +Relationships make a vault feel like a graph instead of a pile of documents. + +## Relationship Fields + +Any frontmatter field containing wikilinks can become a relationship. Relationship fields can point to one note or to an array of notes. + +```yaml +belongs_to: + - "[[product-work]]" +related_to: + - "[[documentation]]" + - "[[editor-research]]" +blocked_by: + - "[[release-process]]" + - "[[sync-conflicts]]" +``` + +Tolaria supports default relationship fields out of the box: `belongs_to`, `has`, and `related_to`. It also detects custom relationship fields dynamically when they contain wikilinks. + +Default relationships have automatically computed inverses. If a note says it `belongs_to` a project, the project can show that note under its inverse `has` relationship without you writing the reverse link by hand. `related_to` works as a lateral relationship in both directions. + +These outgoing and inverse relationships appear in the Properties panel and in Neighborhood mode, where the note list becomes a graph view around the selected note. + +## Body Links Versus Relationship Fields + +Use body links when the relationship appears naturally in writing. Use frontmatter relationships when the connection is important enough to show in navigation, filters, Neighborhood mode, or the Properties panel. + +## Backlinks + +Tolaria can show incoming links and inverse relationships, making it easier to navigate from a note to the rest of its context. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/concepts/types.md b/src-tauri/resources/agent-docs/pages/concepts/types.md new file mode 100644 index 00000000..f1c23293 --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/concepts/types.md @@ -0,0 +1,54 @@ +# Types + +Source: concepts/types.md +URL: /concepts/types + +# Types + +Types describe what kind of thing a note represents: Project, Person, Topic, Procedure, Event, or any category you create. + +## Type Field + +The `type:` field assigns a note to a type. + +```yaml +type: Project +``` + +Tolaria does not infer type from folder location. Moving a file into another folder does not change its type. + +## Prefer Types Over Folders + +Types are the preferred way to group notes in Tolaria. Folders are supported for existing vaults and fallback organization, but Tolaria is built around types and relationships because they carry stronger meaning than file paths. + +Use types for semantic groups such as Projects, People, Topics, Procedures, Events, and Essays. Use relationships to connect notes across those groups. This gives Tolaria better structure for navigation, filtering, properties, templates, and future automation than folder location alone. + +## Type Documents + +Type documents are Markdown notes with `type: Type` in frontmatter. They describe how a type should appear and what new notes of that type should start with. + +```yaml +--- +type: Type +_icon: folder +_color: blue +_sidebar_label: Projects +_order: 10 +--- + +# Project +``` + +## What Types Control + +- Sidebar grouping. +- Type icon and color. +- Sidebar order and label. +- Pinned properties. +- New-note templates. + +## New Note Defaults + +Type documents can define empty properties and relationships. When you create a new note of that type, Tolaria shows placeholders for those fields so you can fill them in from the Properties panel. + +If a type document gives a property a value, that value becomes the default for new notes of that type. For example, a Project type can define `status: Active` so every new project starts active until you change it. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/concepts/vaults.md b/src-tauri/resources/agent-docs/pages/concepts/vaults.md new file mode 100644 index 00000000..c46095af --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/concepts/vaults.md @@ -0,0 +1,40 @@ +# Vaults + +Source: concepts/vaults.md +URL: /concepts/vaults + +# Vaults + +A vault is the folder Tolaria reads and writes. The filesystem is the source of truth; the app state and cache are derived from files. + +## Core Rules + +- Notes are Markdown files. +- YAML frontmatter provides structure. +- Attachments are normal files inside the vault. +- Type definitions and saved views are also files. +- Git can track history and support remote sync. + +## Why Local Files Matter + +Local files keep your notes inspectable. You can open them in another editor, search with command-line tools, back them up with your own system, and version them with Git. + +Tolaria should never become the only way to read your data. + +## Git Is A Capability + +A plain folder of Markdown files can open as a vault. Git-backed vaults unlock history, changes, commits, pull, push, conflict handling, and remote setup. + +If a folder is not a Git repository, Tolaria can initialize Git when you explicitly ask it to. It avoids initializing broad personal folders such as Desktop, Documents, or Downloads unless they are clearly dedicated vault folders. + +## App State Versus Vault State + +Vault-level information should travel with the vault. Machine-specific preferences stay with the app installation. + +| Vault state | App state | +| --- | --- | +| Type icons and colors | Editor zoom | +| Saved views | Window size | +| Pinned properties | Recent vault list | +| Relationship conventions | Local cache | +| Vault AI guidance files | AI target selection | \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/download/index.md b/src-tauri/resources/agent-docs/pages/download/index.md new file mode 100644 index 00000000..640833c6 --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/download/index.md @@ -0,0 +1,24 @@ +# Download + +Source: download/index.md +URL: /download/ + +# Download + +Download Tolaria from the latest stable release. + +## Latest Stable + +[Open the installer download page](https://refactoringhq.github.io/tolaria/download/) + +The download page reads the latest stable release metadata and points you to the current macOS, Windows, or Linux artifact. + +## Other Builds + +- [Browse all GitHub releases](https://github.com/refactoringhq/tolaria/releases) +- [Read release history](/releases/) +- [Learn release channels](/reference/release-channels) + +## Verify The Version + +After launching the app, check the version shown in Tolaria's status bar or release surface. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/guides/build-custom-views.md b/src-tauri/resources/agent-docs/pages/guides/build-custom-views.md new file mode 100644 index 00000000..487adb3e --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/guides/build-custom-views.md @@ -0,0 +1,30 @@ +# Build Custom Views + +Source: guides/build-custom-views.md +URL: /guides/build-custom-views + +# Build Custom Views + +Custom views are saved filters for recurring questions. + +## Good View Candidates + +- Active projects. +- People without a recent follow-up. +- Drafts ready for review. +- Notes changed this week. +- Events in a date range. + +## View Definition + +Saved views live as files in the vault. They describe filters, sorting, and visible columns using structured data. + +## Filters + +Custom views can use nested conditions, similar to Notion or Airtable filter groups. Combine `all` and `any` logic when a view needs to answer a more precise question than a single field filter can express. + +Date filters support dynamic natural-language values such as `today`, `yesterday`, or `one week ago`. Use these for views that should keep moving over time, such as recent work, stale follow-ups, or upcoming events. + +## Design The Question First + +Before creating a view, write the question it answers. A good view is not "all fields with all filters"; it is a focused lens. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/guides/capture-a-note.md b/src-tauri/resources/agent-docs/pages/guides/capture-a-note.md new file mode 100644 index 00000000..f8582186 --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/guides/capture-a-note.md @@ -0,0 +1,23 @@ +# Capture A Note + +Source: guides/capture-a-note.md +URL: /guides/capture-a-note + +# Capture A Note + +Use capture when you need to get an idea into the vault before you know where it belongs. + +## Steps + +1. Press `Cmd+N` on macOS or `Ctrl+N` on Windows and Linux. +2. Write a clear H1. +3. Add the rough content. +4. Leave structure for later if you are still thinking. + +## Capture Well + +Prefer a useful title over a perfect taxonomy. You can add type, status, and relationships during inbox review. + +## When To Add Structure Immediately + +Add structure while capturing when the note's type or relationships are already obvious. Otherwise, capture the idea first and organize it later. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/guides/commit-and-push.md b/src-tauri/resources/agent-docs/pages/guides/commit-and-push.md new file mode 100644 index 00000000..8778dc0b --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/guides/commit-and-push.md @@ -0,0 +1,28 @@ +# Manage Git Manually Or With AutoGit + +Source: guides/commit-and-push.md +URL: /guides/commit-and-push + +# Manage Git Manually Or With AutoGit + +Tolaria can act as a lightweight Git client for a Git-enabled vault. You can manage commits and pushes yourself, or enable AutoGit to create conservative checkpoints after editing pauses or when the app is no longer active. + +## Manual Git + +1. Open the Git or changes surface. +2. Review changed files. +3. Write a short commit message. +4. Commit locally. +5. Push when a remote is configured. + +If the remote has changed, pull first and resolve any conflicts. If the vault has no remote, manual commits still give you local history, diffs, and rollback. + +## AutoGit + +AutoGit is available in Settings for Git-enabled vaults. When enabled, Tolaria automatically commits and pushes saved local changes after an idle pause or after the app becomes inactive. + +Use AutoGit when you want the safety of regular checkpoints without interrupting capture or editing. You can still inspect each note's current diff, review note history, and browse the whole-vault history before making larger manual commits. + +## Use Small Commits + +Small commits make it easier to understand what changed, roll back safely, and review AI-generated edits. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/guides/configure-ai-models.md b/src-tauri/resources/agent-docs/pages/guides/configure-ai-models.md new file mode 100644 index 00000000..c6a87e5d --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/guides/configure-ai-models.md @@ -0,0 +1,30 @@ +# Configure AI Models + +Source: guides/configure-ai-models.md +URL: /guides/configure-ai-models + +# Configure AI Models + +Use model providers when you want chat over note context without giving an agent vault-write tools. + +## Local Models + +Local model targets are for tools such as Ollama and LM Studio. They usually need a base URL and model ID, and they usually do not need an API key. + +## API Models + +API model targets are for hosted providers such as OpenAI, Anthropic, Gemini, OpenRouter, or another OpenAI-compatible endpoint. + +Tolaria does not store provider API keys in vault settings. Choose one of the supported key paths: + +- Save the key locally on this device. +- Read the key from an environment variable. +- Use no key for local providers that do not require one. + +## Test The Connection + +After adding a provider, use the test action in Settings. A successful test means Tolaria reached the endpoint and the model replied. + +## Select The Target + +Once configured, choose the model from the AI target selector or set it as the default AI target in Settings. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/guides/connect-a-git-remote.md b/src-tauri/resources/agent-docs/pages/guides/connect-a-git-remote.md new file mode 100644 index 00000000..84ec1673 --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/guides/connect-a-git-remote.md @@ -0,0 +1,28 @@ +# Connect A Git Remote + +Source: guides/connect-a-git-remote.md +URL: /guides/connect-a-git-remote + +# Connect A Git Remote + +Connect a remote when you want backup or sync beyond the current machine. + +## Before You Start + +Make sure the remote repository exists and your system Git can authenticate to it. Tolaria uses system Git rather than storing provider-specific credentials. + +## Steps + +1. Open the bottom status bar remote chip, or run `Add Remote` from the command palette. +2. Paste the remote URL. +3. Confirm the remote name. +4. Fetch or push according to the app prompt. + +## Recommended Auth + +- SSH keys. +- GitHub CLI authentication. +- Existing Git credential helpers. +- macOS Keychain credentials for HTTPS remotes on macOS. + +If authentication fails, see [Git Authentication](/troubleshooting/git-auth). \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/guides/create-types.md b/src-tauri/resources/agent-docs/pages/guides/create-types.md new file mode 100644 index 00000000..17d47fb8 --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/guides/create-types.md @@ -0,0 +1,38 @@ +# Create Types + +Source: guides/create-types.md +URL: /guides/create-types + +# Create Types + +Create a type when several notes share the same role in your system. + +## Steps + +1. Run `New Type` from the command palette, or click `+` in the Types header in the sidebar. +2. Give the type a clear name. +3. Add optional icon, color, sidebar order, sidebar label, pinned properties, suggested fields, default values, or a new-note template. + +You can also right-click a type in the sidebar to change its icon and color. + +```yaml +--- +type: Type +_icon: briefcase +_color: blue +_sidebar_label: Projects +_order: 10 +--- + +# Project +``` + +## Use Types Sparingly + +A type should represent a recurring category, not a one-off label. If you only need a temporary grouping, use a saved view or property instead. + +## Templates + +Type documents can include a Markdown template for new notes of that type. Keep templates small and useful: a heading, a few expected fields, and the first checklist are usually enough. + +Type documents can also define fields for new notes. Empty properties and relationships become placeholders in new notes of that type. Properties with values become defaults for new notes of that type. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/guides/manage-display-preferences.md b/src-tauri/resources/agent-docs/pages/guides/manage-display-preferences.md new file mode 100644 index 00000000..64239109 --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/guides/manage-display-preferences.md @@ -0,0 +1,31 @@ +# Manage Display Preferences + +Source: guides/manage-display-preferences.md +URL: /guides/manage-display-preferences + +# Manage Display Preferences + +Display preferences live in local app settings unless a setting is intentionally stored in the note or vault. + +## Theme + +Choose Light, Dark, or System in Settings. System follows the operating system appearance at runtime. + +You can also switch theme mode from the command palette. + +## Note Width + +Set the default rich-editor width in Settings: + +- **Normal** for focused writing. +- **Wide** for tables, diagrams, dense notes, and generated documents. + +An individual note can override the default width from the editor toolbar. That override is stored as `_width` in the note frontmatter. + +## Sidebar Labels + +Tolaria can pluralize type names in the sidebar. Turn this off in Settings if your type names should be shown exactly as written, or use `_sidebar_label` on a type document for an explicit label. + +## Vault Content + +Settings also control whether Gitignored files and non-Markdown file categories are visible in the app. Use these controls to keep generated or local-only files out of regular note workflows. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/guides/organize-inbox.md b/src-tauri/resources/agent-docs/pages/guides/organize-inbox.md new file mode 100644 index 00000000..8cabe51d --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/guides/organize-inbox.md @@ -0,0 +1,36 @@ +# Organize The Inbox + +Source: guides/organize-inbox.md +URL: /guides/organize-inbox + +# Organize The Inbox + +Inbox review turns quick captures into usable knowledge. + +## Remove A Note From Inbox + +When a note is organized enough, mark it as organized. Use `Cmd+E` on macOS or `Ctrl+E` on Windows and Linux, or click the organize action in the breadcrumb bar. + +That action is what removes the note from Inbox. If auto-advance is enabled in Settings > Workflow, Tolaria opens the next Inbox item immediately after you mark the current note organized. + +## Review Checklist + +- Rename unclear notes. +- Add or correct the first H1. +- Set `type`. +- Add `status` for actionable notes. +- Add `belongs_to`, `related_to`, or other relationship fields when useful. +- Archive or delete notes that no longer matter. + +## Make Notes Navigable + +A note is organized when you can answer: + +- What kind of thing is this? +- What is it connected to? +- What is this useful for? +- What will I do with it? + +## Avoid Over-Structuring + +Do not add fields just because they exist. Add the structure that will help future navigation, review, or automation. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/guides/use-ai-panel.md b/src-tauri/resources/agent-docs/pages/guides/use-ai-panel.md new file mode 100644 index 00000000..6caec98f --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/guides/use-ai-panel.md @@ -0,0 +1,43 @@ +# Use The AI + +Source: guides/use-ai-panel.md +URL: /guides/use-ai-panel + +# Use The AI + +Tolaria gives you two ways to ask for AI help: open the AI panel for an ongoing conversation, or prompt directly from the editor with `Cmd+K` followed by a space. + +## Choose How To Prompt + +- **AI panel** is best for longer conversations, agent work, and requests that need visible back-and-forth. +- **Inline prompt** is best when you are already writing. Press `Cmd+K`, type a space, then write the prompt you want the AI to handle from the current note context. + +## Choose A Target + +Open Settings and choose the default AI target: + +- **Coding agent** for tool-backed vault editing through Claude Code, Codex, OpenCode, Pi, or Gemini CLI. +- **Local model** for Ollama or LM Studio chat over note context. +- **API model** for OpenAI, Anthropic, Gemini, OpenRouter, or an OpenAI-compatible endpoint. + +If a coding agent is missing, install it and reopen Tolaria or switch to another target. + +## Permission Mode + +Coding agents support per-vault permission modes: + +- **Vault Safe** keeps agents limited to file, search, and edit tools. +- **Power User** can allow shell commands for agents that support them. + +Direct model targets always stay in chat mode. They can use note context, but they cannot edit vault files through tools. + +## Good Requests + +- "Find notes related to this project." +- "Summarize what changed in this note." +- "Draft a weekly review from these linked notes." +- "Update this checklist based on the current project status." + +## Review Changes + +AI edits are file edits. Review them with Tolaria's diff and Git history before committing. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/guides/use-command-palette.md b/src-tauri/resources/agent-docs/pages/guides/use-command-palette.md new file mode 100644 index 00000000..3792eefa --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/guides/use-command-palette.md @@ -0,0 +1,31 @@ +# Use The Command Palette + +Source: guides/use-command-palette.md +URL: /guides/use-command-palette + +# Use The Command Palette + +The command palette is the fastest way to move around Tolaria. + +Open it with: + +- `Cmd+K` on macOS. +- `Ctrl+K` on Linux and Windows. + +## Common Commands + +- New Note. +- Search. +- Open Settings. +- Reload Vault. +- Add Remote. +- Open Getting Started Vault. +- Toggle Raw Mode. +- Toggle Table of Contents. +- Toggle AI Panel. +- Use Light, Dark, or System theme. +- Open in New Window. + +## Keyboard-First Workflow + +Use the palette when you know what you want to do but do not want to hunt through panels. It is also the best place to discover commands as the app grows. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/guides/use-media-previews.md b/src-tauri/resources/agent-docs/pages/guides/use-media-previews.md new file mode 100644 index 00000000..768ad342 --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/guides/use-media-previews.md @@ -0,0 +1,30 @@ +# Use Media Previews + +Source: guides/use-media-previews.md +URL: /guides/use-media-previews + +# Use Media Previews + +Media previews let you inspect vault files without leaving Tolaria. + +## Open A File + +Select an image, PDF, media file, or unsupported file from a folder or file list. Tolaria opens supported files in the app and offers an external-open action for files that should use the system default app. + +## All Notes Visibility + +Open Settings to choose whether non-Markdown files appear in All Notes: + +- PDFs. +- Images. +- Unsupported files. + +Folder browsing still shows files in their folders even when a category is hidden from All Notes. + +## Attachments + +When you paste or drop an image into a note, Tolaria copies it into the vault and references the copied file from Markdown. + +## Troubleshooting + +If a preview does not render, open the file in the default app to confirm the file is valid, then check whether the file is inside the active vault and not blocked by operating-system permissions. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/guides/use-table-of-contents.md b/src-tauri/resources/agent-docs/pages/guides/use-table-of-contents.md new file mode 100644 index 00000000..f978c0e1 --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/guides/use-table-of-contents.md @@ -0,0 +1,28 @@ +# Use The Table Of Contents + +Source: guides/use-table-of-contents.md +URL: /guides/use-table-of-contents + +# Use The Table Of Contents + +The table of contents panel helps you navigate long notes by heading. + +## Open It + +Use the editor toolbar, the command palette, or the shortcut: + +- `Cmd+Shift+T` on macOS. +- `Ctrl+Shift+T` on Windows and Linux. + +## How It Works + +Tolaria builds the outline from the current note's headings. The panel updates as the note changes and can jump to sections in the editor. + +## Good Uses + +- Long procedures. +- Meeting notes with many sections. +- Research notes. +- Generated documents that need review. + +If a note has no useful headings, add clear H2 and H3 sections rather than relying on a long uninterrupted document. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/guides/use-wikilinks.md b/src-tauri/resources/agent-docs/pages/guides/use-wikilinks.md new file mode 100644 index 00000000..b4e00caf --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/guides/use-wikilinks.md @@ -0,0 +1,29 @@ +# Use Wikilinks + +Source: guides/use-wikilinks.md +URL: /guides/use-wikilinks + +# Use Wikilinks + +Wikilinks connect notes by name. + +```md +This project belongs to [[content-systems]] and is related to [[git-workflows]]. +``` + +## Link From The Body + +Use body links when the connection is part of the sentence you are writing. + +## Link From Frontmatter + +Use frontmatter links when the relationship should become structured metadata. + +```yaml +related_to: + - "[[git-workflows]]" +``` + +## Keep Links Stable + +Prefer clear note titles and filenames. Tolaria's wikilink autocomplete helps you pick the right target while you type. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/index.md b/src-tauri/resources/agent-docs/pages/index.md new file mode 100644 index 00000000..a3261667 --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/index.md @@ -0,0 +1,6 @@ +# Index + +Source: index.md +URL: / + + \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/reference/contribute.md b/src-tauri/resources/agent-docs/pages/reference/contribute.md new file mode 100644 index 00000000..3a94eb7d --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/reference/contribute.md @@ -0,0 +1,28 @@ +# Contribute + +Source: reference/contribute.md +URL: /reference/contribute + +# Contribute + +Tolaria is free and open source, and any kind of help is useful. Pick the path that matches what you want to do. + +## Sponsor Or Support + +The best way to support Tolaria is to subscribe to [Refactoring](https://refactoring.fm/), Luca's newsletter and community about running good teams and shipping software with AI. + +## Feature Requests + +Use the [product board](https://tolaria.canny.io/) for feature ideas. Search first, upvote existing ideas, and create a new post when the request is genuinely new. + +## Discussions + +Use [GitHub Discussions](https://github.com/refactoringhq/tolaria/discussions) for questions, conversations, show and tell, and broader community context. + +## Contribute Code + +Small, focused pull requests are welcome. Check the product board first so you build the right thing, then open a PR on [GitHub](https://github.com/refactoringhq/tolaria/pulls). The [contributing guide](https://github.com/refactoringhq/tolaria/blob/main/CONTRIBUTING.md) explains the local workflow. + +## Report A Bug + +Use [GitHub Issues](https://github.com/refactoringhq/tolaria/issues) for bugs. Include what happened, what you expected, and clear reproduction steps. If you are reporting from inside Tolaria, use the Contribute panel to copy sanitized diagnostics and attach them to the issue. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/reference/docs-maintenance.md b/src-tauri/resources/agent-docs/pages/reference/docs-maintenance.md new file mode 100644 index 00000000..b15cc241 --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/reference/docs-maintenance.md @@ -0,0 +1,43 @@ +# Docs Maintenance + +Source: reference/docs-maintenance.md +URL: /reference/docs-maintenance + +# Docs Maintenance + +The public docs live in the app repo so documentation changes can ship with behavior changes. + +## Update Docs When You Change + +- A Tauri command. +- A new component or hook that changes user behavior. +- A data model or frontmatter convention. +- Git, AI, onboarding, or release behavior. +- Public release pages, download metadata, or updater channels. +- Platform support. +- Keyboard shortcuts. + +## Suggested Workflow + +1. Make the code change. +2. Update the matching concept, guide, or reference page. +3. Add a troubleshooting page if the change creates a new failure mode. +4. Run `pnpm docs:build`. +5. Check the home page, search, release/download links, and changed docs pages in a browser. + +## Page Types + +| Type | Purpose | +| --- | --- | +| Start | Helps a new user get into the app. | +| Concepts | Explains mental models. | +| Guides | Teaches workflows. | +| Reference | Gives stable facts and tables. | +| Troubleshooting | Starts from a symptom and ends with recovery. | + +## Review Checklist + +- Does the page describe current behavior? +- Does it mention macOS primary and Windows/Linux supported-early status when platform support matters? +- Are links relative and VitePress-compatible? +- Can a user discover the page with local search? \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/reference/file-layout.md b/src-tauri/resources/agent-docs/pages/reference/file-layout.md new file mode 100644 index 00000000..49bf425d --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/reference/file-layout.md @@ -0,0 +1,46 @@ +# File Layout + +Source: reference/file-layout.md +URL: /reference/file-layout + +# File Layout + +Tolaria is not opinionated about folder structure. It finds notes recursively across the whole vault, stores new notes in the root by default, and uses types and relationships for real organization. + +```txt +my-vault/ + project-alpha.md + weekly-review.md + research/ + source-notes.md + attachments/ + diagram.png + source.pdf + project.md + person.md + views/ + active-projects.yml +``` + +## Root Notes + +Tolaria works well with a flat vault. Folders are optional and can be useful for compatibility with other tools, but they are not required for people, projects, topics, or any other note category. + +Type is not inferred from folder location. It comes from frontmatter, and relationships are expressed with wikilinks in fields. That is what Tolaria uses for the sidebar, Properties panel, search, custom views, and neighborhood navigation. + +## Special Folders + +| Folder | Purpose | +| --- | --- | +| `views/` | Saved custom views. | +| `attachments/` | Images and other attached files. | + +PDFs, images, and other non-Markdown files stay as normal files. Folder browsing can show them in place, and Settings controls whether PDFs, images, and unsupported files appear in All Notes. + +Whiteboards are Markdown files with durable tldraw data, so they belong with notes rather than in `attachments/`. + +Type definitions are Markdown notes with `type: Type` in frontmatter. New type documents are normal notes, and existing type documents in older folders still work. + +## Git Files + +If the vault is a Git repository, `.git/` belongs to Git. Tolaria reads Git state but does not treat `.git/` as notes. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/reference/frontmatter-fields.md b/src-tauri/resources/agent-docs/pages/reference/frontmatter-fields.md new file mode 100644 index 00000000..e9d7203d --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/reference/frontmatter-fields.md @@ -0,0 +1,31 @@ +# Frontmatter Fields + +Source: reference/frontmatter-fields.md +URL: /reference/frontmatter-fields + +# Frontmatter Fields + +Tolaria uses conventions instead of a required schema. + +| Field | Meaning | +| --- | --- | +| `type` | The note's entity type. | +| `status` | Lifecycle state. | +| `icon` | Per-note icon. | +| `url` | External URL. | +| `date` | Single date. | +| `belongs_to` | Parent relationship. | +| `related_to` | Lateral relationship. | +| `has` | Contained relationship. | +| `_width` | Per-note editor width override. | +| `_icon`, `_color` | Type or note appearance metadata. | +| `_sidebar_label`, `_order` | Type sidebar label and order. | +| `_pinned_properties` | Properties pinned for a type. | + +## Custom Fields + +You can add your own fields. If a field contains wikilinks, Tolaria can treat it as a relationship. + +## System Fields + +Fields starting with `_` are reserved for system behavior and hidden from standard property editing. They remain plain YAML, so they can still be inspected or changed in raw mode when needed. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/reference/keyboard-shortcuts.md b/src-tauri/resources/agent-docs/pages/reference/keyboard-shortcuts.md new file mode 100644 index 00000000..0ea896ed --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/reference/keyboard-shortcuts.md @@ -0,0 +1,29 @@ +# Keyboard Shortcuts + +Source: reference/keyboard-shortcuts.md +URL: /reference/keyboard-shortcuts + +# Keyboard Shortcuts + +| Shortcut | Action | +| --- | --- | +| `Cmd+K` / `Ctrl+K` | Open command palette. | +| `Cmd+P` / `Ctrl+P` | Quick open notes and files. | +| `Cmd+N` / `Ctrl+N` | Create a new note. | +| `Cmd+S` / `Ctrl+S` | Save current note. | +| `Cmd+F` / `Ctrl+F` | Find in the current note. | +| `Cmd+Shift+F` / `Ctrl+Shift+F` | Search the vault. | +| `Cmd+Shift+V` / `Ctrl+Shift+V` | Paste without formatting. | +| `Cmd+\` / `Ctrl+\` | Toggle raw Markdown mode. | +| `Cmd+Shift+T` / `Ctrl+Shift+T` | Toggle table of contents. | +| `Cmd+Shift+I` / `Ctrl+Shift+I` | Toggle Properties panel. | +| `Cmd+Shift+L` / `Ctrl+Shift+L` | Toggle AI panel. | +| `Cmd+[` / `Alt+Left` | Navigate back when available. | +| `Cmd+]` / `Alt+Right` | Navigate forward when available. | +| `Cmd+Shift+O` / `Ctrl+Shift+O` | Open current note in a new window. | +| `Cmd+D` / `Ctrl+D` | Toggle favorite for the current note. | +| `Cmd+E` / `Ctrl+E` | Mark the current Inbox note organized. | + +Some shortcuts vary by platform because macOS, Linux, and Windows reserve different key combinations. + +Use the command palette to discover the current command set. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/reference/release-channels.md b/src-tauri/resources/agent-docs/pages/reference/release-channels.md new file mode 100644 index 00000000..1ae915da --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/reference/release-channels.md @@ -0,0 +1,41 @@ +# Release Channels + +Source: reference/release-channels.md +URL: /reference/release-channels + +# Release Channels + +Tolaria publishes Stable and Alpha release metadata to GitHub Pages. + +## Stable + +Stable follows manually promoted releases. This is the right channel for normal use. + +The stable updater metadata lives at: + +```txt +/stable/latest.json +``` + +The public download page points at the latest stable release. + +## Alpha + +Alpha follows pushes to `main`. It receives fixes and features earlier, but it can be rougher than Stable. + +The alpha updater metadata lives at: + +```txt +/alpha/latest.json +``` + +Compatibility endpoints also point to the alpha metadata: + +```txt +/latest.json +/latest-canary.json +``` + +## Before Switching + +Commit or push important vault changes before changing release channel or installing an update. Your notes are local files, but a clean Git state makes recovery simpler. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/reference/supported-platforms.md b/src-tauri/resources/agent-docs/pages/reference/supported-platforms.md new file mode 100644 index 00000000..c1767f3d --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/reference/supported-platforms.md @@ -0,0 +1,28 @@ +# Supported Platforms + +Source: reference/supported-platforms.md +URL: /reference/supported-platforms + +# Supported Platforms + +Tolaria is a desktop app built with Tauri. Releases currently target macOS, Windows, and Linux. + +| Platform | Current support | Notes | +| --- | --- | --- | +| macOS | Primary | Main development and QA target. Apple Silicon and Intel artifacts are published. | +| Windows | Supported, early | NSIS installers and signed updater bundles are published. Menu, shell-path, and credential-helper behavior receive platform-specific fixes as they appear. | +| Linux | Supported, early | AppImage and deb artifacts are published. Behavior can depend on distro WebKitGTK packages, Wayland/X11 details, and input-method setup. | + +## Support Policy + +Primary support means the platform is part of normal development and release validation. Supported, early means release artifacts exist and the app is expected to work, but platform-specific bugs can take longer to diagnose than macOS issues. + +## Reporting Platform Bugs + +Include: + +- Tolaria version. +- Operating system and version. +- CPU architecture. +- Whether the vault is local-only or connected to a remote. +- Steps to reproduce. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/reference/view-filters.md b/src-tauri/resources/agent-docs/pages/reference/view-filters.md new file mode 100644 index 00000000..533498ea --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/reference/view-filters.md @@ -0,0 +1,38 @@ +# View Filters + +Source: reference/view-filters.md +URL: /reference/view-filters + +# View Filters + +View filters define saved lists of notes. + +## Common Filter Ideas + +| Goal | Filter direction | +| --- | --- | +| Active projects | `type` is Project and `status` is Active | +| Drafts | `type` is Article and `status` is Draft | +| People follow-up | `type` is Person and date is before today | +| Recent work | modified date is within a recent range | + +## Sorting + +Useful sorts include: + +- Recently modified first. +- Title ascending. +- Status ascending. +- A custom property ascending or descending. + +## Operators + +Saved views can combine filters for text, dates, relationship fields, and frontmatter values. Relative date expressions are useful for views such as notes changed this week or people that need follow-up. + +Regex filters are available for power-user cases. Keep them narrow and test them on a small view first. + +## Keep Views Focused + +A view should answer one recurring question. If it becomes too broad, split it into two views. + +You can also customize view appearance with the same kind of icon and color controls used by types. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/releases/index.md b/src-tauri/resources/agent-docs/pages/releases/index.md new file mode 100644 index 00000000..091e4d4a --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/releases/index.md @@ -0,0 +1,22 @@ +# Releases + +Source: releases/index.md +URL: /releases/ + +# Releases + +Tolaria releases are published on GitHub. + +- [Latest release](https://github.com/refactoringhq/tolaria/releases/latest) +- [All releases](https://github.com/refactoringhq/tolaria/releases) +- [Download page](/download/) + +## Release Channels + +Stable builds are intended for normal use. Pre-release builds may contain newer features and rougher edges. + +Tolaria also has an Alpha channel for builds generated from pushes to `main`. See [Release Channels](/reference/release-channels) before switching from Stable. + +## Before Updating + +Commit or push important vault changes before updating the app. Your notes are local files, but having a clean Git state makes recovery easier. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/start/first-launch.md b/src-tauri/resources/agent-docs/pages/start/first-launch.md new file mode 100644 index 00000000..dde0c9ca --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/start/first-launch.md @@ -0,0 +1,40 @@ +# First Launch + +Source: start/first-launch.md +URL: /start/first-launch + +# First Launch + +The first launch flow is designed to get you into a real vault quickly without hiding the local-first model. + +## What You Choose + +Tolaria asks whether you want to: + +- Create or clone the Getting Started vault. +- Open an existing local vault. +- Create a new empty vault. + +The Getting Started vault is cloned locally and then disconnected from its remote. That keeps the sample safe to edit without accidentally pushing tutorial changes. + +## What Tolaria Creates + +Tolaria stores app-level settings on the local machine. Your notes stay in the vault folder you choose. + +| Data | Stored in | +| --- | --- | +| Notes and attachments | Your vault folder | +| Type definitions and saved views | Your vault folder | +| Window size, zoom, recent vaults | Local app settings | +| Cache data | Rebuildable local cache | + +## First Commands To Try + +- `Cmd+K` / `Ctrl+K`: open the command palette. +- `New Note`: create a note in the current vault. +- `Open Getting Started Vault`: clone the public sample vault. +- `Reload Vault`: rescan files after external edits. + +## AI Setup Prompt + +Tolaria can show an optional AI agents prompt after a vault is open. It checks common local install locations for supported coding agents and gives you setup paths, but you can dismiss it and use Tolaria without AI. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/start/getting-started-vault.md b/src-tauri/resources/agent-docs/pages/start/getting-started-vault.md new file mode 100644 index 00000000..86650f7a --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/start/getting-started-vault.md @@ -0,0 +1,31 @@ +# Getting Started Vault + +Source: start/getting-started-vault.md +URL: /start/getting-started-vault + +# Getting Started Vault + +The Getting Started vault is a small public sample vault hosted at [refactoringhq/tolaria-getting-started](https://github.com/refactoringhq/tolaria-getting-started). + +It exists to show Tolaria's conventions without requiring you to restructure your own notes first. + +## What It Demonstrates + +- Markdown notes with YAML frontmatter. +- Types such as Project, Person, Topic, and Procedure. +- Wikilinks in note bodies. +- Relationship fields in frontmatter. +- A local Git repository that can be connected to a remote later. +- Vault guidance files for AI agents. + +## Local-Only By Default + +When Tolaria clones the sample, it removes the remote from the local copy. This makes the sample vault disposable. You can edit it freely, commit locally, and delete it later. + +To connect a vault to your own remote, use the bottom status bar remote chip or run `Add Remote` from the command palette. + +Tolaria also repairs starter-vault guidance files when needed. `AGENTS.md` is the canonical guidance file, `CLAUDE.md` is kept as a compatibility shim, and `GEMINI.md` is only created when you explicitly restore Gemini guidance. + +## When To Move On + +After you understand the sample, open your own vault. Tolaria does not require a special folder structure: a folder of Markdown files is enough to start. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/start/install.md b/src-tauri/resources/agent-docs/pages/start/install.md new file mode 100644 index 00000000..b8c32edf --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/start/install.md @@ -0,0 +1,41 @@ +# Install Tolaria + +Source: start/install.md +URL: /start/install + +# Install Tolaria + +Tolaria publishes desktop builds for macOS, Windows, and Linux. macOS is the primary day-to-day development target, with Windows and Linux builds supported through the release pipeline and fixed as platform issues are found. + +## Download + +Use the latest stable release unless you are intentionally testing pre-release builds: + +- [Download the latest stable build](https://refactoringhq.github.io/tolaria/download/) +- [Browse all GitHub releases](https://github.com/refactoringhq/tolaria/releases) +- [Read the release notes](/releases/) + +## Homebrew + +On macOS you can install the cask: + +```bash +brew install --cask tolaria +``` + +## Platform Status + +| Platform | Status | Notes | +| --- | --- | --- | +| macOS | Primary | Apple Silicon and Intel builds are published. Homebrew is available. | +| Windows | Supported, early | NSIS installers and signed updater bundles are published. Some shell and menu behavior can still need Windows-specific fixes. | +| Linux | Supported, early | AppImage and deb artifacts are published. Desktop behavior depends on distribution WebKitGTK and input-method integration. | + +See [Supported Platforms](/reference/supported-platforms) for the current support policy. + +## After Installing + +1. Open Tolaria. +2. Choose the Getting Started vault if you want a guided sample. +3. Or open an existing folder of Markdown files as a vault. +4. Use the command palette with `Cmd+K` on macOS or `Ctrl+K` on Linux and Windows. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/start/open-or-create-vault.md b/src-tauri/resources/agent-docs/pages/start/open-or-create-vault.md new file mode 100644 index 00000000..e97cad81 --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/start/open-or-create-vault.md @@ -0,0 +1,29 @@ +# Open Or Create A Vault + +Source: start/open-or-create-vault.md +URL: /start/open-or-create-vault + +# Open Or Create A Vault + +A Tolaria vault is a folder on disk. The folder can contain Markdown notes, attachments, type definitions, saved views, and Git metadata. + +## Open An Existing Folder + +Choose an existing folder if you already have Markdown notes. Tolaria scans `.md` files and uses frontmatter when it exists. + +Good starting points: + +- A folder of plain Markdown files. +- An Obsidian-style vault. +- A Git repository containing notes. +- A copy of the Getting Started vault. + +## Create A New Vault + +Choose a new empty folder if you want Tolaria conventions from the start. New notes and optional type definitions are created as Markdown files. + +## Git Is Recommended, Not Required + +Tolaria works well with a plain folder of Markdown files. You can open, edit, organize, and search notes without making the vault a Git repository. + +Git is recommended when you want local history, diff views, recovery, pull, push, and remote sync without a proprietary backend. If a vault is not already a repository, Tolaria can initialize one when you explicitly ask it to. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/troubleshooting/ai-agent-not-found.md b/src-tauri/resources/agent-docs/pages/troubleshooting/ai-agent-not-found.md new file mode 100644 index 00000000..613407ed --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/troubleshooting/ai-agent-not-found.md @@ -0,0 +1,27 @@ +# AI Agent Not Found + +Source: troubleshooting/ai-agent-not-found.md +URL: /troubleshooting/ai-agent-not-found + +# AI Agent Not Found + +Tolaria can only launch local CLI agents that are installed and discoverable. + +## Symptoms + +- The AI panel says no supported agent is available. +- Claude Code or another agent works in one shell but not in Tolaria. + +## Checks + +Open a terminal and run the agent command directly. For Claude Code: + +```bash +claude --version +``` + +If the command fails, install or repair the agent first. + +## Path Issues + +Desktop apps can inherit a different `PATH` from your interactive shell. Tolaria checks common install locations, but shell setup can still vary. Prefer installing CLI tools in standard locations or making them available from your login shell. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/troubleshooting/git-auth.md b/src-tauri/resources/agent-docs/pages/troubleshooting/git-auth.md new file mode 100644 index 00000000..f4cd4981 --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/troubleshooting/git-auth.md @@ -0,0 +1,30 @@ +# Git Authentication + +Source: troubleshooting/git-auth.md +URL: /troubleshooting/git-auth + +# Git Authentication + +Tolaria uses system Git authentication. It does not manage provider passwords directly. + +## Symptoms + +- Push fails. +- Pull asks for credentials repeatedly. +- Remote fetch works in one terminal but not in Tolaria. + +## Checks + +1. Open a terminal. +2. `cd` into the vault. +3. Run `git remote -v`. +4. Run `git fetch`. + +If `git fetch` fails in the terminal, fix system Git auth first. + +## Common Fixes + +- Sign in with GitHub CLI. +- Configure SSH keys. +- Update the remote URL. +- Check your credential helper. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/troubleshooting/model-provider-connection.md b/src-tauri/resources/agent-docs/pages/troubleshooting/model-provider-connection.md new file mode 100644 index 00000000..47c99285 --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/troubleshooting/model-provider-connection.md @@ -0,0 +1,30 @@ +# Model Provider Connection + +Source: troubleshooting/model-provider-connection.md +URL: /troubleshooting/model-provider-connection + +# Model Provider Connection + +Use this checklist when a local or API model provider does not connect. + +## Local Providers + +For Ollama or LM Studio: + +1. Start the local model server. +2. Confirm the base URL in Tolaria matches the server. +3. Confirm the model ID is installed and loaded by the provider. +4. Use the Settings test action again. + +## API Providers + +For hosted providers: + +1. Confirm the provider kind and endpoint. +2. Confirm the model ID exists for your account. +3. Confirm the API key is saved locally or available in the configured environment variable. +4. Avoid storing secrets in the vault. + +## Chat Mode Boundary + +Direct model targets run in chat mode. If you need file-editing tools, use a coding agent target such as Claude Code, Codex, OpenCode, Pi, or Gemini CLI. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/troubleshooting/sync-conflicts.md b/src-tauri/resources/agent-docs/pages/troubleshooting/sync-conflicts.md new file mode 100644 index 00000000..a122c9e9 --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/troubleshooting/sync-conflicts.md @@ -0,0 +1,24 @@ +# Sync Conflicts + +Source: troubleshooting/sync-conflicts.md +URL: /troubleshooting/sync-conflicts + +# Sync Conflicts + +Sync conflicts happen when local and remote changes touch the same content. + +## What To Do + +1. Stop editing the conflicted note. +2. Open the conflict resolver if Tolaria presents it. +3. Review both sides. +4. Choose the correct content or merge manually. +5. Commit the resolved file. +6. Push again. + +## Prevent Conflicts + +- Pull before starting work on another device. +- Push after meaningful sessions. +- Keep AI-generated edits in small commits. +- Avoid editing the same note on multiple devices at the same time. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/pages/troubleshooting/vault-not-loading.md b/src-tauri/resources/agent-docs/pages/troubleshooting/vault-not-loading.md new file mode 100644 index 00000000..de2fa5c1 --- /dev/null +++ b/src-tauri/resources/agent-docs/pages/troubleshooting/vault-not-loading.md @@ -0,0 +1,29 @@ +# Vault Not Loading + +Source: troubleshooting/vault-not-loading.md +URL: /troubleshooting/vault-not-loading + +# Vault Not Loading + +Use this checklist when Tolaria cannot open or refresh a vault. + +## Check The Folder + +- Confirm the folder exists. +- Confirm the folder contains readable files. +- Confirm Tolaria has permission to access the folder. +- Try opening a smaller test vault to isolate the issue. + +## Check Git + +If the vault is a Git repository, verify it is not in a broken state: + +```bash +git status +``` + +Resolve interrupted merges or corrupted repository state before retrying. + +## Reload + +Run `Reload Vault` from the command palette. This clears derived cache and rescans the filesystem. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/reference.md b/src-tauri/resources/agent-docs/reference.md new file mode 100644 index 00000000..f32db5e1 --- /dev/null +++ b/src-tauri/resources/agent-docs/reference.md @@ -0,0 +1,305 @@ +# Contribute + +Source: reference/contribute.md +URL: /reference/contribute + +# Contribute + +Tolaria is free and open source, and any kind of help is useful. Pick the path that matches what you want to do. + +## Sponsor Or Support + +The best way to support Tolaria is to subscribe to [Refactoring](https://refactoring.fm/), Luca's newsletter and community about running good teams and shipping software with AI. + +## Feature Requests + +Use the [product board](https://tolaria.canny.io/) for feature ideas. Search first, upvote existing ideas, and create a new post when the request is genuinely new. + +## Discussions + +Use [GitHub Discussions](https://github.com/refactoringhq/tolaria/discussions) for questions, conversations, show and tell, and broader community context. + +## Contribute Code + +Small, focused pull requests are welcome. Check the product board first so you build the right thing, then open a PR on [GitHub](https://github.com/refactoringhq/tolaria/pulls). The [contributing guide](https://github.com/refactoringhq/tolaria/blob/main/CONTRIBUTING.md) explains the local workflow. + +## Report A Bug + +Use [GitHub Issues](https://github.com/refactoringhq/tolaria/issues) for bugs. Include what happened, what you expected, and clear reproduction steps. If you are reporting from inside Tolaria, use the Contribute panel to copy sanitized diagnostics and attach them to the issue. + +--- + +# Docs Maintenance + +Source: reference/docs-maintenance.md +URL: /reference/docs-maintenance + +# Docs Maintenance + +The public docs live in the app repo so documentation changes can ship with behavior changes. + +## Update Docs When You Change + +- A Tauri command. +- A new component or hook that changes user behavior. +- A data model or frontmatter convention. +- Git, AI, onboarding, or release behavior. +- Public release pages, download metadata, or updater channels. +- Platform support. +- Keyboard shortcuts. + +## Suggested Workflow + +1. Make the code change. +2. Update the matching concept, guide, or reference page. +3. Add a troubleshooting page if the change creates a new failure mode. +4. Run `pnpm docs:build`. +5. Check the home page, search, release/download links, and changed docs pages in a browser. + +## Page Types + +| Type | Purpose | +| --- | --- | +| Start | Helps a new user get into the app. | +| Concepts | Explains mental models. | +| Guides | Teaches workflows. | +| Reference | Gives stable facts and tables. | +| Troubleshooting | Starts from a symptom and ends with recovery. | + +## Review Checklist + +- Does the page describe current behavior? +- Does it mention macOS primary and Windows/Linux supported-early status when platform support matters? +- Are links relative and VitePress-compatible? +- Can a user discover the page with local search? + +--- + +# File Layout + +Source: reference/file-layout.md +URL: /reference/file-layout + +# File Layout + +Tolaria is not opinionated about folder structure. It finds notes recursively across the whole vault, stores new notes in the root by default, and uses types and relationships for real organization. + +```txt +my-vault/ + project-alpha.md + weekly-review.md + research/ + source-notes.md + attachments/ + diagram.png + source.pdf + project.md + person.md + views/ + active-projects.yml +``` + +## Root Notes + +Tolaria works well with a flat vault. Folders are optional and can be useful for compatibility with other tools, but they are not required for people, projects, topics, or any other note category. + +Type is not inferred from folder location. It comes from frontmatter, and relationships are expressed with wikilinks in fields. That is what Tolaria uses for the sidebar, Properties panel, search, custom views, and neighborhood navigation. + +## Special Folders + +| Folder | Purpose | +| --- | --- | +| `views/` | Saved custom views. | +| `attachments/` | Images and other attached files. | + +PDFs, images, and other non-Markdown files stay as normal files. Folder browsing can show them in place, and Settings controls whether PDFs, images, and unsupported files appear in All Notes. + +Whiteboards are Markdown files with durable tldraw data, so they belong with notes rather than in `attachments/`. + +Type definitions are Markdown notes with `type: Type` in frontmatter. New type documents are normal notes, and existing type documents in older folders still work. + +## Git Files + +If the vault is a Git repository, `.git/` belongs to Git. Tolaria reads Git state but does not treat `.git/` as notes. + +--- + +# Frontmatter Fields + +Source: reference/frontmatter-fields.md +URL: /reference/frontmatter-fields + +# Frontmatter Fields + +Tolaria uses conventions instead of a required schema. + +| Field | Meaning | +| --- | --- | +| `type` | The note's entity type. | +| `status` | Lifecycle state. | +| `icon` | Per-note icon. | +| `url` | External URL. | +| `date` | Single date. | +| `belongs_to` | Parent relationship. | +| `related_to` | Lateral relationship. | +| `has` | Contained relationship. | +| `_width` | Per-note editor width override. | +| `_icon`, `_color` | Type or note appearance metadata. | +| `_sidebar_label`, `_order` | Type sidebar label and order. | +| `_pinned_properties` | Properties pinned for a type. | + +## Custom Fields + +You can add your own fields. If a field contains wikilinks, Tolaria can treat it as a relationship. + +## System Fields + +Fields starting with `_` are reserved for system behavior and hidden from standard property editing. They remain plain YAML, so they can still be inspected or changed in raw mode when needed. + +--- + +# Keyboard Shortcuts + +Source: reference/keyboard-shortcuts.md +URL: /reference/keyboard-shortcuts + +# Keyboard Shortcuts + +| Shortcut | Action | +| --- | --- | +| `Cmd+K` / `Ctrl+K` | Open command palette. | +| `Cmd+P` / `Ctrl+P` | Quick open notes and files. | +| `Cmd+N` / `Ctrl+N` | Create a new note. | +| `Cmd+S` / `Ctrl+S` | Save current note. | +| `Cmd+F` / `Ctrl+F` | Find in the current note. | +| `Cmd+Shift+F` / `Ctrl+Shift+F` | Search the vault. | +| `Cmd+Shift+V` / `Ctrl+Shift+V` | Paste without formatting. | +| `Cmd+\` / `Ctrl+\` | Toggle raw Markdown mode. | +| `Cmd+Shift+T` / `Ctrl+Shift+T` | Toggle table of contents. | +| `Cmd+Shift+I` / `Ctrl+Shift+I` | Toggle Properties panel. | +| `Cmd+Shift+L` / `Ctrl+Shift+L` | Toggle AI panel. | +| `Cmd+[` / `Alt+Left` | Navigate back when available. | +| `Cmd+]` / `Alt+Right` | Navigate forward when available. | +| `Cmd+Shift+O` / `Ctrl+Shift+O` | Open current note in a new window. | +| `Cmd+D` / `Ctrl+D` | Toggle favorite for the current note. | +| `Cmd+E` / `Ctrl+E` | Mark the current Inbox note organized. | + +Some shortcuts vary by platform because macOS, Linux, and Windows reserve different key combinations. + +Use the command palette to discover the current command set. + +--- + +# Release Channels + +Source: reference/release-channels.md +URL: /reference/release-channels + +# Release Channels + +Tolaria publishes Stable and Alpha release metadata to GitHub Pages. + +## Stable + +Stable follows manually promoted releases. This is the right channel for normal use. + +The stable updater metadata lives at: + +```txt +/stable/latest.json +``` + +The public download page points at the latest stable release. + +## Alpha + +Alpha follows pushes to `main`. It receives fixes and features earlier, but it can be rougher than Stable. + +The alpha updater metadata lives at: + +```txt +/alpha/latest.json +``` + +Compatibility endpoints also point to the alpha metadata: + +```txt +/latest.json +/latest-canary.json +``` + +## Before Switching + +Commit or push important vault changes before changing release channel or installing an update. Your notes are local files, but a clean Git state makes recovery simpler. + +--- + +# Supported Platforms + +Source: reference/supported-platforms.md +URL: /reference/supported-platforms + +# Supported Platforms + +Tolaria is a desktop app built with Tauri. Releases currently target macOS, Windows, and Linux. + +| Platform | Current support | Notes | +| --- | --- | --- | +| macOS | Primary | Main development and QA target. Apple Silicon and Intel artifacts are published. | +| Windows | Supported, early | NSIS installers and signed updater bundles are published. Menu, shell-path, and credential-helper behavior receive platform-specific fixes as they appear. | +| Linux | Supported, early | AppImage and deb artifacts are published. Behavior can depend on distro WebKitGTK packages, Wayland/X11 details, and input-method setup. | + +## Support Policy + +Primary support means the platform is part of normal development and release validation. Supported, early means release artifacts exist and the app is expected to work, but platform-specific bugs can take longer to diagnose than macOS issues. + +## Reporting Platform Bugs + +Include: + +- Tolaria version. +- Operating system and version. +- CPU architecture. +- Whether the vault is local-only or connected to a remote. +- Steps to reproduce. + +--- + +# View Filters + +Source: reference/view-filters.md +URL: /reference/view-filters + +# View Filters + +View filters define saved lists of notes. + +## Common Filter Ideas + +| Goal | Filter direction | +| --- | --- | +| Active projects | `type` is Project and `status` is Active | +| Drafts | `type` is Article and `status` is Draft | +| People follow-up | `type` is Person and date is before today | +| Recent work | modified date is within a recent range | + +## Sorting + +Useful sorts include: + +- Recently modified first. +- Title ascending. +- Status ascending. +- A custom property ascending or descending. + +## Operators + +Saved views can combine filters for text, dates, relationship fields, and frontmatter values. Relative date expressions are useful for views such as notes changed this week or people that need follow-up. + +Regex filters are available for power-user cases. Keep them narrow and test them on a small view first. + +## Keep Views Focused + +A view should answer one recurring question. If it becomes too broad, split it into two views. + +You can also customize view appearance with the same kind of icon and color controls used by types. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/releases.md b/src-tauri/resources/agent-docs/releases.md new file mode 100644 index 00000000..091e4d4a --- /dev/null +++ b/src-tauri/resources/agent-docs/releases.md @@ -0,0 +1,22 @@ +# Releases + +Source: releases/index.md +URL: /releases/ + +# Releases + +Tolaria releases are published on GitHub. + +- [Latest release](https://github.com/refactoringhq/tolaria/releases/latest) +- [All releases](https://github.com/refactoringhq/tolaria/releases) +- [Download page](/download/) + +## Release Channels + +Stable builds are intended for normal use. Pre-release builds may contain newer features and rougher edges. + +Tolaria also has an Alpha channel for builds generated from pushes to `main`. See [Release Channels](/reference/release-channels) before switching from Stable. + +## Before Updating + +Commit or push important vault changes before updating the app. Your notes are local files, but having a clean Git state makes recovery easier. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/search-index.json b/src-tauri/resources/agent-docs/search-index.json new file mode 100644 index 00000000..116c2e35 --- /dev/null +++ b/src-tauri/resources/agent-docs/search-index.json @@ -0,0 +1,484 @@ +[ + { + "title": "Index", + "path": "pages/index.md", + "url": "/", + "section": "home", + "headings": [] + }, + { + "title": "First Launch", + "path": "pages/start/first-launch.md", + "url": "/start/first-launch", + "section": "start", + "headings": [ + "What You Choose", + "What Tolaria Creates", + "First Commands To Try", + "AI Setup Prompt" + ] + }, + { + "title": "Getting Started Vault", + "path": "pages/start/getting-started-vault.md", + "url": "/start/getting-started-vault", + "section": "start", + "headings": [ + "What It Demonstrates", + "Local-Only By Default", + "When To Move On" + ] + }, + { + "title": "Install Tolaria", + "path": "pages/start/install.md", + "url": "/start/install", + "section": "start", + "headings": [ + "Download", + "Homebrew", + "Platform Status", + "After Installing" + ] + }, + { + "title": "Open Or Create A Vault", + "path": "pages/start/open-or-create-vault.md", + "url": "/start/open-or-create-vault", + "section": "start", + "headings": [ + "Open An Existing Folder", + "Create A New Vault", + "Git Is Recommended, Not Required" + ] + }, + { + "title": "AI", + "path": "pages/concepts/ai.md", + "url": "/concepts/ai", + "section": "concepts", + "headings": [ + "Coding Agents", + "Direct Models", + "External MCP Setup", + "Why Git Matters For AI" + ] + }, + { + "title": "Editor", + "path": "pages/concepts/editor.md", + "url": "/concepts/editor", + "section": "concepts", + "headings": [ + "Rich Editing", + "Raw Mode", + "Table Of Contents", + "Width" + ] + }, + { + "title": "Files And Media", + "path": "pages/concepts/files-and-media.md", + "url": "/concepts/files-and-media", + "section": "concepts", + "headings": [ + "Mermaid Diagrams", + "Attachments", + "Previews", + "Whiteboards", + "Git Boundary" + ] + }, + { + "title": "Git", + "path": "pages/concepts/git.md", + "url": "/concepts/git", + "section": "concepts", + "headings": [ + "What Tolaria Uses Git For", + "History And Diffs", + "Local Commits", + "Remotes" + ] + }, + { + "title": "Inbox", + "path": "pages/concepts/inbox.md", + "url": "/concepts/inbox", + "section": "concepts", + "headings": [ + "Why It Exists", + "Organizing Inbox Notes", + "Healthy Inbox Habit" + ] + }, + { + "title": "Notes", + "path": "pages/concepts/notes.md", + "url": "/concepts/notes", + "section": "concepts", + "headings": [ + "Anatomy", + "Titles", + "Body Links", + "Frontmatter" + ] + }, + { + "title": "Properties", + "path": "pages/concepts/properties.md", + "url": "/concepts/properties", + "section": "concepts", + "headings": [ + "Suggested Properties", + "System Properties", + "Property Editing" + ] + }, + { + "title": "Relationships", + "path": "pages/concepts/relationships.md", + "url": "/concepts/relationships", + "section": "concepts", + "headings": [ + "Relationship Fields", + "Body Links Versus Relationship Fields", + "Backlinks" + ] + }, + { + "title": "Types", + "path": "pages/concepts/types.md", + "url": "/concepts/types", + "section": "concepts", + "headings": [ + "Type Field", + "Prefer Types Over Folders", + "Type Documents", + "What Types Control", + "New Note Defaults" + ] + }, + { + "title": "Vaults", + "path": "pages/concepts/vaults.md", + "url": "/concepts/vaults", + "section": "concepts", + "headings": [ + "Core Rules", + "Why Local Files Matter", + "Git Is A Capability", + "App State Versus Vault State" + ] + }, + { + "title": "Build Custom Views", + "path": "pages/guides/build-custom-views.md", + "url": "/guides/build-custom-views", + "section": "guides", + "headings": [ + "Good View Candidates", + "View Definition", + "Filters", + "Design The Question First" + ] + }, + { + "title": "Capture A Note", + "path": "pages/guides/capture-a-note.md", + "url": "/guides/capture-a-note", + "section": "guides", + "headings": [ + "Steps", + "Capture Well", + "When To Add Structure Immediately" + ] + }, + { + "title": "Manage Git Manually Or With AutoGit", + "path": "pages/guides/commit-and-push.md", + "url": "/guides/commit-and-push", + "section": "guides", + "headings": [ + "Manual Git", + "AutoGit", + "Use Small Commits" + ] + }, + { + "title": "Configure AI Models", + "path": "pages/guides/configure-ai-models.md", + "url": "/guides/configure-ai-models", + "section": "guides", + "headings": [ + "Local Models", + "API Models", + "Test The Connection", + "Select The Target" + ] + }, + { + "title": "Connect A Git Remote", + "path": "pages/guides/connect-a-git-remote.md", + "url": "/guides/connect-a-git-remote", + "section": "guides", + "headings": [ + "Before You Start", + "Steps", + "Recommended Auth" + ] + }, + { + "title": "Create Types", + "path": "pages/guides/create-types.md", + "url": "/guides/create-types", + "section": "guides", + "headings": [ + "Steps", + "Use Types Sparingly", + "Templates" + ] + }, + { + "title": "Manage Display Preferences", + "path": "pages/guides/manage-display-preferences.md", + "url": "/guides/manage-display-preferences", + "section": "guides", + "headings": [ + "Theme", + "Note Width", + "Sidebar Labels", + "Vault Content" + ] + }, + { + "title": "Organize The Inbox", + "path": "pages/guides/organize-inbox.md", + "url": "/guides/organize-inbox", + "section": "guides", + "headings": [ + "Remove A Note From Inbox", + "Review Checklist", + "Make Notes Navigable", + "Avoid Over-Structuring" + ] + }, + { + "title": "Use The AI", + "path": "pages/guides/use-ai-panel.md", + "url": "/guides/use-ai-panel", + "section": "guides", + "headings": [ + "Choose How To Prompt", + "Choose A Target", + "Permission Mode", + "Good Requests", + "Review Changes" + ] + }, + { + "title": "Use The Command Palette", + "path": "pages/guides/use-command-palette.md", + "url": "/guides/use-command-palette", + "section": "guides", + "headings": [ + "Common Commands", + "Keyboard-First Workflow" + ] + }, + { + "title": "Use Media Previews", + "path": "pages/guides/use-media-previews.md", + "url": "/guides/use-media-previews", + "section": "guides", + "headings": [ + "Open A File", + "All Notes Visibility", + "Attachments", + "Troubleshooting" + ] + }, + { + "title": "Use The Table Of Contents", + "path": "pages/guides/use-table-of-contents.md", + "url": "/guides/use-table-of-contents", + "section": "guides", + "headings": [ + "Open It", + "How It Works", + "Good Uses" + ] + }, + { + "title": "Use Wikilinks", + "path": "pages/guides/use-wikilinks.md", + "url": "/guides/use-wikilinks", + "section": "guides", + "headings": [ + "Link From The Body", + "Link From Frontmatter", + "Keep Links Stable" + ] + }, + { + "title": "Contribute", + "path": "pages/reference/contribute.md", + "url": "/reference/contribute", + "section": "reference", + "headings": [ + "Sponsor Or Support", + "Feature Requests", + "Discussions", + "Contribute Code", + "Report A Bug" + ] + }, + { + "title": "Docs Maintenance", + "path": "pages/reference/docs-maintenance.md", + "url": "/reference/docs-maintenance", + "section": "reference", + "headings": [ + "Update Docs When You Change", + "Suggested Workflow", + "Page Types", + "Review Checklist" + ] + }, + { + "title": "File Layout", + "path": "pages/reference/file-layout.md", + "url": "/reference/file-layout", + "section": "reference", + "headings": [ + "Root Notes", + "Special Folders", + "Git Files" + ] + }, + { + "title": "Frontmatter Fields", + "path": "pages/reference/frontmatter-fields.md", + "url": "/reference/frontmatter-fields", + "section": "reference", + "headings": [ + "Custom Fields", + "System Fields" + ] + }, + { + "title": "Keyboard Shortcuts", + "path": "pages/reference/keyboard-shortcuts.md", + "url": "/reference/keyboard-shortcuts", + "section": "reference", + "headings": [] + }, + { + "title": "Release Channels", + "path": "pages/reference/release-channels.md", + "url": "/reference/release-channels", + "section": "reference", + "headings": [ + "Stable", + "Alpha", + "Before Switching" + ] + }, + { + "title": "Supported Platforms", + "path": "pages/reference/supported-platforms.md", + "url": "/reference/supported-platforms", + "section": "reference", + "headings": [ + "Support Policy", + "Reporting Platform Bugs" + ] + }, + { + "title": "View Filters", + "path": "pages/reference/view-filters.md", + "url": "/reference/view-filters", + "section": "reference", + "headings": [ + "Common Filter Ideas", + "Sorting", + "Operators", + "Keep Views Focused" + ] + }, + { + "title": "AI Agent Not Found", + "path": "pages/troubleshooting/ai-agent-not-found.md", + "url": "/troubleshooting/ai-agent-not-found", + "section": "troubleshooting", + "headings": [ + "Symptoms", + "Checks", + "Path Issues" + ] + }, + { + "title": "Git Authentication", + "path": "pages/troubleshooting/git-auth.md", + "url": "/troubleshooting/git-auth", + "section": "troubleshooting", + "headings": [ + "Symptoms", + "Checks", + "Common Fixes" + ] + }, + { + "title": "Model Provider Connection", + "path": "pages/troubleshooting/model-provider-connection.md", + "url": "/troubleshooting/model-provider-connection", + "section": "troubleshooting", + "headings": [ + "Local Providers", + "API Providers", + "Chat Mode Boundary" + ] + }, + { + "title": "Sync Conflicts", + "path": "pages/troubleshooting/sync-conflicts.md", + "url": "/troubleshooting/sync-conflicts", + "section": "troubleshooting", + "headings": [ + "What To Do", + "Prevent Conflicts" + ] + }, + { + "title": "Vault Not Loading", + "path": "pages/troubleshooting/vault-not-loading.md", + "url": "/troubleshooting/vault-not-loading", + "section": "troubleshooting", + "headings": [ + "Check The Folder", + "Check Git", + "Reload" + ] + }, + { + "title": "Download", + "path": "pages/download/index.md", + "url": "/download/", + "section": "download", + "headings": [ + "Latest Stable", + "Other Builds", + "Verify The Version" + ] + }, + { + "title": "Releases", + "path": "pages/releases/index.md", + "url": "/releases/", + "section": "releases", + "headings": [ + "Release Channels", + "Before Updating" + ] + } +] diff --git a/src-tauri/resources/agent-docs/start.md b/src-tauri/resources/agent-docs/start.md new file mode 100644 index 00000000..2971df97 --- /dev/null +++ b/src-tauri/resources/agent-docs/start.md @@ -0,0 +1,150 @@ +# First Launch + +Source: start/first-launch.md +URL: /start/first-launch + +# First Launch + +The first launch flow is designed to get you into a real vault quickly without hiding the local-first model. + +## What You Choose + +Tolaria asks whether you want to: + +- Create or clone the Getting Started vault. +- Open an existing local vault. +- Create a new empty vault. + +The Getting Started vault is cloned locally and then disconnected from its remote. That keeps the sample safe to edit without accidentally pushing tutorial changes. + +## What Tolaria Creates + +Tolaria stores app-level settings on the local machine. Your notes stay in the vault folder you choose. + +| Data | Stored in | +| --- | --- | +| Notes and attachments | Your vault folder | +| Type definitions and saved views | Your vault folder | +| Window size, zoom, recent vaults | Local app settings | +| Cache data | Rebuildable local cache | + +## First Commands To Try + +- `Cmd+K` / `Ctrl+K`: open the command palette. +- `New Note`: create a note in the current vault. +- `Open Getting Started Vault`: clone the public sample vault. +- `Reload Vault`: rescan files after external edits. + +## AI Setup Prompt + +Tolaria can show an optional AI agents prompt after a vault is open. It checks common local install locations for supported coding agents and gives you setup paths, but you can dismiss it and use Tolaria without AI. + +--- + +# Getting Started Vault + +Source: start/getting-started-vault.md +URL: /start/getting-started-vault + +# Getting Started Vault + +The Getting Started vault is a small public sample vault hosted at [refactoringhq/tolaria-getting-started](https://github.com/refactoringhq/tolaria-getting-started). + +It exists to show Tolaria's conventions without requiring you to restructure your own notes first. + +## What It Demonstrates + +- Markdown notes with YAML frontmatter. +- Types such as Project, Person, Topic, and Procedure. +- Wikilinks in note bodies. +- Relationship fields in frontmatter. +- A local Git repository that can be connected to a remote later. +- Vault guidance files for AI agents. + +## Local-Only By Default + +When Tolaria clones the sample, it removes the remote from the local copy. This makes the sample vault disposable. You can edit it freely, commit locally, and delete it later. + +To connect a vault to your own remote, use the bottom status bar remote chip or run `Add Remote` from the command palette. + +Tolaria also repairs starter-vault guidance files when needed. `AGENTS.md` is the canonical guidance file, `CLAUDE.md` is kept as a compatibility shim, and `GEMINI.md` is only created when you explicitly restore Gemini guidance. + +## When To Move On + +After you understand the sample, open your own vault. Tolaria does not require a special folder structure: a folder of Markdown files is enough to start. + +--- + +# Install Tolaria + +Source: start/install.md +URL: /start/install + +# Install Tolaria + +Tolaria publishes desktop builds for macOS, Windows, and Linux. macOS is the primary day-to-day development target, with Windows and Linux builds supported through the release pipeline and fixed as platform issues are found. + +## Download + +Use the latest stable release unless you are intentionally testing pre-release builds: + +- [Download the latest stable build](https://refactoringhq.github.io/tolaria/download/) +- [Browse all GitHub releases](https://github.com/refactoringhq/tolaria/releases) +- [Read the release notes](/releases/) + +## Homebrew + +On macOS you can install the cask: + +```bash +brew install --cask tolaria +``` + +## Platform Status + +| Platform | Status | Notes | +| --- | --- | --- | +| macOS | Primary | Apple Silicon and Intel builds are published. Homebrew is available. | +| Windows | Supported, early | NSIS installers and signed updater bundles are published. Some shell and menu behavior can still need Windows-specific fixes. | +| Linux | Supported, early | AppImage and deb artifacts are published. Desktop behavior depends on distribution WebKitGTK and input-method integration. | + +See [Supported Platforms](/reference/supported-platforms) for the current support policy. + +## After Installing + +1. Open Tolaria. +2. Choose the Getting Started vault if you want a guided sample. +3. Or open an existing folder of Markdown files as a vault. +4. Use the command palette with `Cmd+K` on macOS or `Ctrl+K` on Linux and Windows. + +--- + +# Open Or Create A Vault + +Source: start/open-or-create-vault.md +URL: /start/open-or-create-vault + +# Open Or Create A Vault + +A Tolaria vault is a folder on disk. The folder can contain Markdown notes, attachments, type definitions, saved views, and Git metadata. + +## Open An Existing Folder + +Choose an existing folder if you already have Markdown notes. Tolaria scans `.md` files and uses frontmatter when it exists. + +Good starting points: + +- A folder of plain Markdown files. +- An Obsidian-style vault. +- A Git repository containing notes. +- A copy of the Getting Started vault. + +## Create A New Vault + +Choose a new empty folder if you want Tolaria conventions from the start. New notes and optional type definitions are created as Markdown files. + +## Git Is Recommended, Not Required + +Tolaria works well with a plain folder of Markdown files. You can open, edit, organize, and search notes without making the vault a Git repository. + +Git is recommended when you want local history, diff views, recovery, pull, push, and remote sync without a proprietary backend. If a vault is not already a repository, Tolaria can initialize one when you explicitly ask it to. \ No newline at end of file diff --git a/src-tauri/resources/agent-docs/troubleshooting.md b/src-tauri/resources/agent-docs/troubleshooting.md new file mode 100644 index 00000000..330f3770 --- /dev/null +++ b/src-tauri/resources/agent-docs/troubleshooting.md @@ -0,0 +1,152 @@ +# AI Agent Not Found + +Source: troubleshooting/ai-agent-not-found.md +URL: /troubleshooting/ai-agent-not-found + +# AI Agent Not Found + +Tolaria can only launch local CLI agents that are installed and discoverable. + +## Symptoms + +- The AI panel says no supported agent is available. +- Claude Code or another agent works in one shell but not in Tolaria. + +## Checks + +Open a terminal and run the agent command directly. For Claude Code: + +```bash +claude --version +``` + +If the command fails, install or repair the agent first. + +## Path Issues + +Desktop apps can inherit a different `PATH` from your interactive shell. Tolaria checks common install locations, but shell setup can still vary. Prefer installing CLI tools in standard locations or making them available from your login shell. + +--- + +# Git Authentication + +Source: troubleshooting/git-auth.md +URL: /troubleshooting/git-auth + +# Git Authentication + +Tolaria uses system Git authentication. It does not manage provider passwords directly. + +## Symptoms + +- Push fails. +- Pull asks for credentials repeatedly. +- Remote fetch works in one terminal but not in Tolaria. + +## Checks + +1. Open a terminal. +2. `cd` into the vault. +3. Run `git remote -v`. +4. Run `git fetch`. + +If `git fetch` fails in the terminal, fix system Git auth first. + +## Common Fixes + +- Sign in with GitHub CLI. +- Configure SSH keys. +- Update the remote URL. +- Check your credential helper. + +--- + +# Model Provider Connection + +Source: troubleshooting/model-provider-connection.md +URL: /troubleshooting/model-provider-connection + +# Model Provider Connection + +Use this checklist when a local or API model provider does not connect. + +## Local Providers + +For Ollama or LM Studio: + +1. Start the local model server. +2. Confirm the base URL in Tolaria matches the server. +3. Confirm the model ID is installed and loaded by the provider. +4. Use the Settings test action again. + +## API Providers + +For hosted providers: + +1. Confirm the provider kind and endpoint. +2. Confirm the model ID exists for your account. +3. Confirm the API key is saved locally or available in the configured environment variable. +4. Avoid storing secrets in the vault. + +## Chat Mode Boundary + +Direct model targets run in chat mode. If you need file-editing tools, use a coding agent target such as Claude Code, Codex, OpenCode, Pi, or Gemini CLI. + +--- + +# Sync Conflicts + +Source: troubleshooting/sync-conflicts.md +URL: /troubleshooting/sync-conflicts + +# Sync Conflicts + +Sync conflicts happen when local and remote changes touch the same content. + +## What To Do + +1. Stop editing the conflicted note. +2. Open the conflict resolver if Tolaria presents it. +3. Review both sides. +4. Choose the correct content or merge manually. +5. Commit the resolved file. +6. Push again. + +## Prevent Conflicts + +- Pull before starting work on another device. +- Push after meaningful sessions. +- Keep AI-generated edits in small commits. +- Avoid editing the same note on multiple devices at the same time. + +--- + +# Vault Not Loading + +Source: troubleshooting/vault-not-loading.md +URL: /troubleshooting/vault-not-loading + +# Vault Not Loading + +Use this checklist when Tolaria cannot open or refresh a vault. + +## Check The Folder + +- Confirm the folder exists. +- Confirm the folder contains readable files. +- Confirm Tolaria has permission to access the folder. +- Try opening a smaller test vault to isolate the issue. + +## Check Git + +If the vault is a Git repository, verify it is not in a broken state: + +```bash +git status +``` + +Resolve interrupted merges or corrupted repository state before retrying. + +## Reload + +Run `Reload Vault` from the command palette. This clears derived cache and rescans the filesystem. \ No newline at end of file diff --git a/src-tauri/src/commands/ai.rs b/src-tauri/src/commands/ai.rs index 43026c37..4e1f0ddf 100644 --- a/src-tauri/src/commands/ai.rs +++ b/src-tauri/src/commands/ai.rs @@ -10,6 +10,9 @@ use super::expand_tilde; #[cfg(desktop)] type StreamEmitter = Box; +#[cfg(desktop)] +const AGENT_DOCS_RESOURCE_DIR: &str = "agent-docs"; + #[cfg(desktop)] async fn run_desktop_stream( app_handle: tauri::AppHandle, @@ -63,6 +66,35 @@ pub fn get_ai_agents_status() -> AiAgentsStatus { crate::ai_agents::get_ai_agents_status() } +#[cfg(desktop)] +#[tauri::command] +pub fn get_agent_docs_path(app_handle: tauri::AppHandle) -> Result { + use std::path::PathBuf; + use tauri::path::BaseDirectory; + use tauri::Manager; + + let mut candidates = Vec::new(); + + if let Ok(resource_path) = app_handle + .path() + .resolve(AGENT_DOCS_RESOURCE_DIR, BaseDirectory::Resource) + { + candidates.push(resource_path); + } + + candidates.push( + PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .join("resources") + .join(AGENT_DOCS_RESOURCE_DIR), + ); + + candidates + .into_iter() + .find(|path| path.join("index.md").is_file()) + .map(|path| path.to_string_lossy().into_owned()) + .ok_or_else(|| "Tolaria agent docs are not bundled in this build.".to_string()) +} + #[tauri::command] pub fn get_vault_ai_guidance_status(vault_path: String) -> Result { let vault_path = expand_tilde(&vault_path); @@ -169,6 +201,12 @@ pub fn get_ai_agents_status() -> AiAgentsStatus { } } +#[cfg(mobile)] +#[tauri::command] +pub fn get_agent_docs_path() -> Result { + Err("Bundled agent docs are only available in the desktop app.".into()) +} + #[cfg(mobile)] #[tauri::command] pub async fn stream_claude_chat( diff --git a/src-tauri/src/commands/vault.rs b/src-tauri/src/commands/vault.rs index bce95aad..8a27c3cd 100644 --- a/src-tauri/src/commands/vault.rs +++ b/src-tauri/src/commands/vault.rs @@ -96,7 +96,8 @@ mod tests { let agents = std::fs::read_to_string(vault_path.join("AGENTS.md")).unwrap(); let claude = std::fs::read_to_string(vault_path.join("CLAUDE.md")).unwrap(); - assert!(agents.contains("Legacy `title:` frontmatter is still read as a fallback")); + assert!(agents.contains("Use the first H1 as the note title.")); + assert!(agents.contains("Tolaria reads notes recursively from all folders")); assert!(agents.contains("views/*.yml")); assert!(claude.starts_with("---\ntype: Note\n_organized: true\n---")); assert!(claude.contains("@AGENTS.md")); diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 9b5052b6..6fb21964 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -410,6 +410,7 @@ macro_rules! app_invoke_handler { commands::init_git_repo, commands::check_claude_cli, commands::get_ai_agents_status, + commands::get_agent_docs_path, commands::get_vault_ai_guidance_status, commands::restore_vault_ai_guidance, commands::stream_claude_chat, diff --git a/src-tauri/src/vault/config_seed.rs b/src-tauri/src/vault/config_seed.rs index 580174d1..23d44157 100644 --- a/src-tauri/src/vault/config_seed.rs +++ b/src-tauri/src/vault/config_seed.rs @@ -594,7 +594,8 @@ mod tests { seed_config_files(vault.to_str().unwrap()); let content = read_root_agents(&vault); - assert!(content.contains("Legacy `title:` frontmatter is still read as a fallback")); + assert!(content.contains("Use the first H1 as the note title.")); + assert!(content.contains("Tolaria reads notes recursively from all folders")); assert!(content.contains("views/*.yml")); assert!(content.contains("Belongs to:")); } diff --git a/src-tauri/src/vault/getting_started.rs b/src-tauri/src/vault/getting_started.rs index 636f1eb8..a21f203f 100644 --- a/src-tauri/src/vault/getting_started.rs +++ b/src-tauri/src/vault/getting_started.rs @@ -302,16 +302,18 @@ _organized: true # AGENTS.md — Tolaria Vault -This is a [Tolaria](https://github.com/refactoringhq/tolaria) vault, a folder of Markdown files with YAML frontmatter forming a personal knowledge graph. +This is a [Tolaria](https://github.com/refactoringhq/tolaria) vault. -Keep edits compatible with this starter vault's current conventions. Prefer small, human-readable changes over heavy restructuring. +Keep this file focused on vault-specific conventions. For general Tolaria behavior, use the bundled Tolaria agent docs path provided by the app session context. ## Core conventions -- One Markdown note per file. -- The first H1 in the body is the preferred display title. Legacy `title:` frontmatter is still read as a fallback when a note has no H1, but do not add it to new notes. +- Notes are Markdown files. +- Use the first H1 as the note title. Tolaria uses this title in the note list, wikilinks, search, and other display surfaces. - Store note type in the `type:` frontmatter field. -- In this starter vault, type definitions currently live at the vault root, for example `project.md`, `person.md`, `note.md`, and `type.md`. Keep new type files at the vault root unless the user explicitly asks to reorganize them. +- Use wikilinks in body text and frontmatter fields to connect notes. +- Prefer types and relationships for organization. Folder structure is optional and should not be treated as the primary source of meaning. +- Tolaria reads notes recursively from all folders and stores new notes in the vault root by default. - Saved views live in `views/*.yml`. - Files in `attachments/` are assets, not notes. Reference them from notes, but do not treat them as notes or types. - Frontmatter properties that start with `_` are usually Tolaria-managed state. Leave them alone unless the user explicitly asks for them to change. @@ -333,7 +335,7 @@ Body content in Markdown. ## Types -In this starter vault, types are regular notes stored at the vault root and use `type: Type`. +Types are regular notes with `type: Type`. They define how notes of that type appear and which properties or relationships should be suggested for new notes. ```yaml --- @@ -349,11 +351,13 @@ _sort: "property:onboarding:asc" # Project ``` -Useful type metadata in this vault includes `icon`/`_icon`, `color`/`_color`, `order`/`_order`, `sidebar label`, `_list_properties_display`, `_sort`, `template`, `view`, and `visible`. When editing an existing file, preserve the key style already used there instead of mass-normalizing underscored keys. +Empty properties and relationships in a type document become placeholders on new notes of that type. Values attached to properties in the type document become defaults for type instances. + +Useful type metadata includes `icon`/`_icon`, `color`/`_color`, `order`/`_order`, `sidebar label`, `_list_properties_display`, `_sort`, `template`, `view`, and `visible`. When editing an existing file, preserve the key style already used there instead of mass-normalizing underscored keys. ## Relationships -Any frontmatter property whose value contains `[[wikilinks]]` is treated as a relationship. In this starter vault, common relationship keys include `related_to` and `belongs_to`, but custom relationship names are valid too. +Any frontmatter property whose value contains `[[wikilinks]]` is treated as a relationship. Common relationship keys include `related_to`, `belongs_to`, and `has`, but custom relationship names are valid too. Preserve older relationship labels such as `Belongs to:` when editing existing notes that already use them. @@ -405,14 +409,15 @@ Use kebab-case: `my-note-title.md`. One note per file. ## What agents should do - Create and edit notes using the frontmatter and H1 conventions above. -- Create and edit type documents at the vault root. +- Create and edit type documents when the user asks for note categories or defaults. - Add or modify relationships without breaking existing wikilinks. - Create and edit saved views in `views/`. - Update `AGENTS.md` only when the user asks for vault-level guidance changes. +- Search the bundled Tolaria docs when the user asks how Tolaria works or when you need product behavior beyond these base conventions. ## What agents should avoid -- Do not move existing type files out of the vault root unless the user explicitly asks. +- Do not infer note type or meaning from folders. - Do not treat files in `attachments/` as notes, types, or view definitions. - Do not silently overwrite an existing custom `AGENTS.md`. - Do not rewrite installation-specific app configuration unless the user explicitly asks. @@ -837,9 +842,10 @@ Saved filters live in `views/` as `.view.json` files: fn test_agents_template_matches_current_tolaria_vault_conventions() { assert!(AGENTS_MD.starts_with("---\ntype: Note\n_organized: true\n---\n")); assert!(AGENTS_MD.contains("# AGENTS.md — Tolaria Vault")); - assert!(AGENTS_MD.contains("Legacy `title:` frontmatter is still read as a fallback")); + assert!(AGENTS_MD.contains("Use the first H1 as the note title.")); assert!(AGENTS_MD.contains("Store note type in the `type:` frontmatter field.")); - assert!(AGENTS_MD.contains("type definitions currently live at the vault root")); + assert!(AGENTS_MD.contains("Tolaria reads notes recursively from all folders")); + assert!(AGENTS_MD.contains("Search the bundled Tolaria docs")); assert!(AGENTS_MD.contains("attachments/")); assert!(AGENTS_MD.contains("views/*.yml")); assert!(AGENTS_MD.contains("option:direction")); @@ -850,5 +856,6 @@ Saved filters live in `views/` as `.view.json` files: assert!(!AGENTS_MD.contains("Laputa")); assert!(!AGENTS_MD.contains("Is A")); assert!(!AGENTS_MD.contains("is_a")); + assert!(!AGENTS_MD.contains("type definitions currently live")); } } diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 3702f33f..6c8e9117 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -7,7 +7,7 @@ "frontendDist": "../dist", "devUrl": "http://localhost:5202", "beforeDevCommand": "pnpm dev", - "beforeBuildCommand": "pnpm build && pnpm bundle-mcp" + "beforeBuildCommand": "pnpm build && pnpm bundle-mcp && pnpm agent-docs" }, "app": { "withGlobalTauri": true, @@ -59,7 +59,8 @@ } }, "resources": { - "resources/mcp-server/**/*": "mcp-server/" + "resources/mcp-server/**/*": "mcp-server/", + "resources/agent-docs/**/*": "agent-docs/" }, "icon": [ "icons/32x32.png", diff --git a/src/App.tsx b/src/App.tsx index 5e73b355..e82852bf 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -97,6 +97,8 @@ import { openNoteListPropertiesPicker } from './components/note-list/noteListPro import type { NoteListMultiSelectionCommands } from './components/note-list/multiSelectionCommands' import { focusNoteIconPropertyEditor } from './components/noteIconPropertyEvents' import { trackEvent } from './lib/telemetry' +import { TOLARIA_DOCS_URL } from './constants/feedback' +import { openExternalUrl } from './utils/url' import { SYSTEM_UI_LANGUAGE, getBrowserLanguagePreferences, @@ -265,6 +267,9 @@ function App() { const [mcpDialogAction, setMcpDialogAction] = useState<'connect' | 'disconnect' | null>(null) const openFeedback = useCallback(() => setShowFeedback(true), []) const closeFeedback = useCallback(() => setShowFeedback(false), []) + const openDocs = useCallback(() => { + void openExternalUrl(TOLARIA_DOCS_URL) + }, []) const networkStatus = useNetworkStatus() useEffect(() => { @@ -1812,7 +1817,7 @@ function App() { - handleSetSelection({ kind: 'filter', filter: 'changes' })} onClickPulse={() => handleSetSelection({ kind: 'filter', filter: 'pulse' })} onCommitPush={handleCommitPush} onInitializeGit={openGitSetupDialog} isOffline={networkStatus.isOffline} isGitVault={isGitVault} isVaultReloading={vault.isReloading || isVaultContentLoading} syncStatus={autoSync.syncStatus} lastSyncTime={autoSync.lastSyncTime} conflictCount={autoSync.conflictFiles.length} remoteStatus={autoSync.remoteStatus} onTriggerSync={autoSync.triggerSync} onPullAndPush={autoSync.pullAndPush} onOpenConflictResolver={conflictFlow.handleOpenConflictResolver} zoomLevel={zoom.zoomLevel} themeMode={documentThemeMode} onZoomReset={zoom.zoomReset} onToggleThemeMode={settingsLoaded ? handleToggleThemeMode : undefined} buildNumber={buildNumber} onCheckForUpdates={handleCheckForUpdates} onRemoveVault={vaultSwitcher.removeVault} mcpStatus={mcpStatus} onInstallMcp={openMcpSetupDialog} aiAgentsStatus={aiAgentsStatus} vaultAiGuidanceStatus={vaultAiGuidanceStatus} defaultAiAgent={aiAgentPreferences.defaultAiAgent} defaultAiTarget={settings.default_ai_target ?? undefined} aiModelProviders={settings.ai_model_providers ?? []} onSetDefaultAiAgent={aiAgentPreferences.setDefaultAiAgent} onSetDefaultAiTarget={aiAgentPreferences.setDefaultAiTarget} onRestoreVaultAiGuidance={() => { void restoreVaultAiGuidance() }} locale={appLocale} /> + handleSetSelection({ kind: 'filter', filter: 'changes' })} onClickPulse={() => handleSetSelection({ kind: 'filter', filter: 'pulse' })} onCommitPush={handleCommitPush} onInitializeGit={openGitSetupDialog} isOffline={networkStatus.isOffline} isGitVault={isGitVault} isVaultReloading={vault.isReloading || isVaultContentLoading} syncStatus={autoSync.syncStatus} lastSyncTime={autoSync.lastSyncTime} conflictCount={autoSync.conflictFiles.length} remoteStatus={autoSync.remoteStatus} onTriggerSync={autoSync.triggerSync} onPullAndPush={autoSync.pullAndPush} onOpenConflictResolver={conflictFlow.handleOpenConflictResolver} zoomLevel={zoom.zoomLevel} themeMode={documentThemeMode} onZoomReset={zoom.zoomReset} onToggleThemeMode={settingsLoaded ? handleToggleThemeMode : undefined} buildNumber={buildNumber} onCheckForUpdates={handleCheckForUpdates} onRemoveVault={vaultSwitcher.removeVault} mcpStatus={mcpStatus} onInstallMcp={openMcpSetupDialog} aiAgentsStatus={aiAgentsStatus} vaultAiGuidanceStatus={vaultAiGuidanceStatus} defaultAiAgent={aiAgentPreferences.defaultAiAgent} defaultAiTarget={settings.default_ai_target ?? undefined} aiModelProviders={settings.ai_model_providers ?? []} onSetDefaultAiAgent={aiAgentPreferences.setDefaultAiAgent} onSetDefaultAiTarget={aiAgentPreferences.setDefaultAiTarget} onRestoreVaultAiGuidance={() => { void restoreVaultAiGuidance() }} locale={appLocale} /> setToastMessage(null)} /> diff --git a/src/components/StatusBar.test.tsx b/src/components/StatusBar.test.tsx index 0a7e6897..64e8426b 100644 --- a/src/components/StatusBar.test.tsx +++ b/src/components/StatusBar.test.tsx @@ -123,6 +123,16 @@ describe('StatusBar', () => { expect(onOpenFeedback).toHaveBeenCalledOnce() }) + it('shows and opens Docs from the bottom bar', () => { + const onOpenDocs = vi.fn() + render() + expect(screen.getByTestId('status-docs')).toHaveTextContent('Docs') + + fireEvent.click(screen.getByTestId('status-docs')) + + expect(onOpenDocs).toHaveBeenCalledOnce() + }) + it('shows a theme toggle instead of the notifications placeholder', () => { render( void onToggleThemeMode?: () => void onOpenFeedback?: () => void + onOpenDocs?: () => void buildNumber?: string onCheckForUpdates?: () => void onRemoveVault?: (path: string) => void @@ -204,6 +205,7 @@ function StatusBarSecondaryFromFooter({ onZoomReset, onToggleThemeMode, onOpenFeedback, + onOpenDocs, onOpenSettings, locale = 'en', compact, @@ -217,6 +219,7 @@ function StatusBarSecondaryFromFooter({ onZoomReset={onZoomReset} onToggleThemeMode={onToggleThemeMode} onOpenFeedback={onOpenFeedback} + onOpenDocs={onOpenDocs} onOpenSettings={onOpenSettings} locale={locale} stacked={stacked} diff --git a/src/components/status-bar/StatusBarSections.tsx b/src/components/status-bar/StatusBarSections.tsx index a76516aa..f5408b27 100644 --- a/src/components/status-bar/StatusBarSections.tsx +++ b/src/components/status-bar/StatusBarSections.tsx @@ -1,12 +1,13 @@ -import { Moon, Package, Settings, Sun } from 'lucide-react' +import { BookOpen, Moon, Package, Settings, Sun } from 'lucide-react' import { Megaphone } from '@phosphor-icons/react' +import type { ComponentType, MouseEventHandler } from 'react' import type { AiAgentId, AiAgentsStatus } from '../../lib/aiAgents' import type { AiModelProvider } from '../../lib/aiTargets' import type { VaultAiGuidanceStatus } from '../../lib/vaultAiGuidance' import type { ClaudeCodeStatus } from '../../hooks/useClaudeCodeStatus' import type { McpStatus } from '../../hooks/useMcpStatus' import type { ThemeMode } from '../../lib/themeMode' -import { translate, type AppLocale } from '../../lib/i18n' +import { translate, type AppLocale, type TranslationKey } from '../../lib/i18n' import { useStatusBarAddRemote } from '../../hooks/useStatusBarAddRemote' import type { GitRemoteStatus, SyncStatus } from '../../types' import { rememberFeedbackDialogOpener } from '../../lib/feedbackDialogOpener' @@ -90,6 +91,7 @@ interface StatusBarSecondarySectionProps { onZoomReset?: () => void onToggleThemeMode?: () => void onOpenFeedback?: () => void + onOpenDocs?: () => void onOpenSettings?: () => void stacked?: boolean compact?: boolean @@ -289,6 +291,47 @@ function StatusBarPrimaryBadges({ ) } +type StatusLinkButtonProps = { + compact: boolean + icon: ComponentType<{ size?: number }> + labelKey: TranslationKey + locale: AppLocale + onClick: MouseEventHandler + testId: string + tooltipKey: TranslationKey +} + +function StatusLinkButton({ + compact, + icon: Icon, + labelKey, + locale, + onClick, + testId, + tooltipKey, +}: StatusLinkButtonProps) { + const className = compact + ? 'h-6 w-6 rounded-sm p-0 text-muted-foreground hover:text-foreground' + : 'h-6 px-2 text-[12px] font-medium text-muted-foreground hover:text-foreground' + + return ( + + + + ) +} + function FeedbackButton({ compact, locale, @@ -298,28 +341,41 @@ function FeedbackButton({ locale: AppLocale onOpenFeedback: () => void }) { - const className = compact - ? 'h-6 w-6 rounded-sm p-0 text-muted-foreground hover:text-foreground' - : 'h-6 px-2 text-[12px] font-medium text-muted-foreground hover:text-foreground' - return ( - - - + { + rememberFeedbackDialogOpener(event.currentTarget) + onOpenFeedback() + }} + testId="status-feedback" + tooltipKey="status.feedback.contribute" + /> + ) +} + +function DocsButton({ + compact, + locale, + onOpenDocs, +}: { + compact: boolean + locale: AppLocale + onOpenDocs: () => void +}) { + return ( + ) } @@ -465,6 +521,7 @@ export function StatusBarSecondarySection({ onZoomReset, onToggleThemeMode, onOpenFeedback, + onOpenDocs, onOpenSettings, locale = 'en', stacked = false, @@ -503,6 +560,7 @@ export function StatusBarSecondarySection({ )} {onOpenFeedback && } + {onOpenDocs && }