From fe02ac7819eaee16a6ae48f68a5e20f077b6a805 Mon Sep 17 00:00:00 2001 From: sheepbox8646 Date: Sat, 5 Sep 2026 00:50:57 +0800 Subject: [PATCH] chore: migrate docs site from VitePress to Scalar Docs Replace the VitePress setup with Scalar Docs, keeping the existing URL structure and information architecture unchanged. Self-written components are swapped for Scalar-provided ones: - DocsHome.vue + theme/style.css -> cards on both home pages - ::: tip/warning/danger containers -> (10 pages renamed to .mdx and importing from scalar-mdx-components) - 88 Vue window.location.replace redirect stubs -> siteConfig.routing.redirects - locales + en.ts/zh.ts sidebars -> Scalar versions + built-in version selector - themeConfig.nav -> navigation.tabs, which also scopes the sidebar - themeConfig.footer -> siteConfig.footer (docs/footer.html) Local search, dark-mode toggle and the TOC now come from Scalar, so docs/.vitepress/ is removed along with the Vue dependency. Bilingual routing uses Scalar versions: the `default` version is served unprefixed and every other key becomes a path prefix, so `zh` reproduces the existing /zh/* URLs and Scalar renders the language switcher. Route keys inside the `zh` version are written without the /zh prefix. Internal links drop their .md suffixes to match the new routes. This also surfaced one pre-existing dead link (/zh/integrations/providers/tts/index), which VitePress had hidden behind ignoreDeadLinks: true. Verified with @scalar/cli: config validates, all 108 pages preprocess with no errors, sidebars generate 52 mirrored URLs per language, and there are no unresolved internal links, missing images, unrouted pages, or routes pointing at missing files. Hosting moves to Scalar, which has no static export, so the GitHub Pages workflow is replaced by check-config on PRs and project publish on tags. Going live still needs a CNAME for docs.memoh.ai pointing at dns.scalar.com, a Scalar Dashboard project, and a SCALAR_API_KEY secret. Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/deploy-docs.yml | 59 +- .github/workflows/validate-docs.yml | 30 + .gitignore | 4 +- README.md | 76 +- README_CN.md | 76 +- docs/.vitepress/config.ts | 87 - docs/.vitepress/en.ts | 94 - docs/.vitepress/theme/components/DocsHome.vue | 164 -- docs/.vitepress/theme/index.ts | 10 - docs/.vitepress/theme/style.css | 106 -- docs/.vitepress/zh.ts | 94 - docs/about.md | 4 +- docs/channels/dingtalk.md | 16 - docs/channels/discord.md | 16 - docs/channels/feishu.md | 16 - docs/channels/index.md | 16 - docs/channels/matrix.md | 16 - docs/channels/misskey.md | 16 - docs/channels/qq.md | 16 - docs/channels/slack.md | 16 - docs/channels/telegram.md | 16 - docs/channels/wechatoa.md | 16 - docs/channels/wecom.md | 16 - docs/channels/weixin.md | 16 - docs/footer.html | 18 + docs/getting-started/access.md | 16 - docs/getting-started/acp.md | 16 - docs/getting-started/bot.md | 16 - docs/getting-started/browser-computer-use.md | 16 - docs/getting-started/channels.md | 16 - docs/getting-started/compaction.md | 16 - docs/getting-started/container.md | 16 - docs/getting-started/email.md | 16 - docs/getting-started/files.md | 16 - docs/getting-started/heartbeat.md | 16 - docs/getting-started/mcp.md | 16 - docs/getting-started/memory.md | 16 - docs/getting-started/plugins.md | 16 - docs/getting-started/provider-and-model.md | 16 - docs/getting-started/schedule.md | 16 - docs/getting-started/search-provider.md | 16 - docs/getting-started/sessions.md | 16 - docs/getting-started/skills.md | 16 - docs/getting-started/slash-commands.md | 16 - docs/getting-started/supermarket.md | 16 - docs/guides/acp.md | 8 +- docs/guides/bot.md | 12 +- docs/guides/browser-computer-use.md | 2 +- docs/guides/compaction.md | 2 +- docs/guides/{computers.md => computers.mdx} | 16 +- docs/guides/connectors.md | 8 +- docs/guides/container.md | 2 +- docs/guides/{email.md => email.mdx} | 10 +- docs/guides/hooks.md | 6 +- docs/guides/index.md | 4 +- docs/guides/mcp.md | 2 +- docs/guides/memory.md | 4 +- docs/guides/plugins.md | 8 +- docs/guides/skills.md | 4 +- docs/guides/slash-commands.md | 2 +- docs/guides/supermarket.md | 4 +- docs/index.md | 9 - docs/index.mdx | 20 + docs/installation/desktop.md | 16 - docs/installation/docker.md | 16 - docs/installation/index.md | 16 - docs/installation/kata-containerd.md | 16 - docs/installation/sqlite.md | 16 - docs/installation/workspace-backends.md | 16 - docs/integrations/index.md | 8 +- docs/integrations/providers/index.md | 4 +- .../providers/{llm.md => llm.mdx} | 20 +- docs/integrations/providers/memory/builtin.md | 2 +- docs/integrations/providers/memory/index.md | 14 +- docs/integrations/providers/memory/mem0.md | 2 +- .../providers/memory/openviking.md | 2 +- docs/integrations/providers/tts/index.md | 4 +- docs/integrations/providers/video.md | 4 +- docs/memory-providers/builtin.md | 16 - docs/memory-providers/index.md | 16 - docs/memory-providers/mem0.md | 16 - docs/memory-providers/openviking.md | 16 - docs/self-hosted/desktop.md | 2 +- docs/self-hosted/docker.md | 16 +- ...kata-containerd.md => kata-containerd.mdx} | 12 +- ...ace-backends.md => workspace-backends.mdx} | 10 +- docs/tts-providers/edge.md | 16 - docs/tts-providers/index.md | 16 - docs/zh/about.md | 4 +- docs/zh/channels/dingtalk.md | 16 - docs/zh/channels/discord.md | 16 - docs/zh/channels/feishu.md | 16 - docs/zh/channels/index.md | 16 - docs/zh/channels/matrix.md | 16 - docs/zh/channels/misskey.md | 16 - docs/zh/channels/qq.md | 16 - docs/zh/channels/slack.md | 16 - docs/zh/channels/telegram.md | 16 - docs/zh/channels/wechatoa.md | 16 - docs/zh/channels/wecom.md | 16 - docs/zh/channels/weixin.md | 16 - docs/zh/getting-started/access.md | 16 - docs/zh/getting-started/acp.md | 16 - docs/zh/getting-started/bot.md | 16 - .../getting-started/browser-computer-use.md | 16 - docs/zh/getting-started/channels.md | 16 - docs/zh/getting-started/compaction.md | 16 - docs/zh/getting-started/container.md | 16 - docs/zh/getting-started/email.md | 16 - docs/zh/getting-started/files.md | 16 - docs/zh/getting-started/heartbeat.md | 16 - docs/zh/getting-started/mcp.md | 16 - docs/zh/getting-started/memory.md | 16 - docs/zh/getting-started/plugins.md | 16 - docs/zh/getting-started/provider-and-model.md | 16 - docs/zh/getting-started/schedule.md | 16 - docs/zh/getting-started/search-provider.md | 16 - docs/zh/getting-started/sessions.md | 16 - docs/zh/getting-started/skills.md | 16 - docs/zh/getting-started/slash-commands.md | 16 - docs/zh/getting-started/supermarket.md | 16 - docs/zh/guides/acp.md | 8 +- docs/zh/guides/bot.md | 18 +- docs/zh/guides/browser-computer-use.md | 2 +- docs/zh/guides/compaction.md | 10 +- .../zh/guides/{computers.md => computers.mdx} | 16 +- docs/zh/guides/connectors.md | 8 +- docs/zh/guides/container.md | 2 +- docs/zh/guides/{email.md => email.mdx} | 10 +- docs/zh/guides/hooks.md | 6 +- docs/zh/guides/index.md | 4 +- docs/zh/guides/mcp.md | 2 +- docs/zh/guides/memory.md | 10 +- docs/zh/guides/plugins.md | 8 +- docs/zh/guides/sessions.md | 2 +- docs/zh/guides/skills.md | 4 +- docs/zh/guides/slash-commands.md | 6 +- docs/zh/guides/supermarket.md | 4 +- docs/zh/index.md | 9 - docs/zh/index.mdx | 20 + docs/zh/installation/desktop.md | 16 - docs/zh/installation/docker.md | 16 - docs/zh/installation/index.md | 16 - docs/zh/installation/kata-containerd.md | 16 - docs/zh/installation/sqlite.md | 16 - docs/zh/installation/workspace-backends.md | 16 - docs/zh/integrations/index.md | 8 +- docs/zh/integrations/providers/index.md | 4 +- .../providers/{llm.md => llm.mdx} | 22 +- .../integrations/providers/memory/builtin.md | 2 +- .../zh/integrations/providers/memory/index.md | 14 +- docs/zh/integrations/providers/memory/mem0.md | 2 +- .../providers/memory/openviking.md | 2 +- docs/zh/integrations/providers/tts/index.md | 4 +- docs/zh/integrations/providers/video.md | 4 +- docs/zh/memory-providers/builtin.md | 16 - docs/zh/memory-providers/index.md | 16 - docs/zh/memory-providers/mem0.md | 16 - docs/zh/memory-providers/openviking.md | 16 - docs/zh/self-hosted/desktop.md | 2 +- docs/zh/self-hosted/docker.md | 16 +- ...kata-containerd.md => kata-containerd.mdx} | 12 +- ...ace-backends.md => workspace-backends.mdx} | 10 +- docs/zh/tts-providers/edge.md | 16 - docs/zh/tts-providers/index.md | 16 - package.json | 10 +- pnpm-lock.yaml | 1623 ----------------- scalar.config.json | 1103 +++++++++++ 168 files changed, 1506 insertions(+), 3938 deletions(-) create mode 100644 .github/workflows/validate-docs.yml delete mode 100644 docs/.vitepress/config.ts delete mode 100644 docs/.vitepress/en.ts delete mode 100644 docs/.vitepress/theme/components/DocsHome.vue delete mode 100644 docs/.vitepress/theme/index.ts delete mode 100644 docs/.vitepress/theme/style.css delete mode 100644 docs/.vitepress/zh.ts delete mode 100644 docs/channels/dingtalk.md delete mode 100644 docs/channels/discord.md delete mode 100644 docs/channels/feishu.md delete mode 100644 docs/channels/index.md delete mode 100644 docs/channels/matrix.md delete mode 100644 docs/channels/misskey.md delete mode 100644 docs/channels/qq.md delete mode 100644 docs/channels/slack.md delete mode 100644 docs/channels/telegram.md delete mode 100644 docs/channels/wechatoa.md delete mode 100644 docs/channels/wecom.md delete mode 100644 docs/channels/weixin.md create mode 100644 docs/footer.html delete mode 100644 docs/getting-started/access.md delete mode 100644 docs/getting-started/acp.md delete mode 100644 docs/getting-started/bot.md delete mode 100644 docs/getting-started/browser-computer-use.md delete mode 100644 docs/getting-started/channels.md delete mode 100644 docs/getting-started/compaction.md delete mode 100644 docs/getting-started/container.md delete mode 100644 docs/getting-started/email.md delete mode 100644 docs/getting-started/files.md delete mode 100644 docs/getting-started/heartbeat.md delete mode 100644 docs/getting-started/mcp.md delete mode 100644 docs/getting-started/memory.md delete mode 100644 docs/getting-started/plugins.md delete mode 100644 docs/getting-started/provider-and-model.md delete mode 100644 docs/getting-started/schedule.md delete mode 100644 docs/getting-started/search-provider.md delete mode 100644 docs/getting-started/sessions.md delete mode 100644 docs/getting-started/skills.md delete mode 100644 docs/getting-started/slash-commands.md delete mode 100644 docs/getting-started/supermarket.md rename docs/guides/{computers.md => computers.mdx} (86%) rename docs/guides/{email.md => email.mdx} (86%) delete mode 100644 docs/index.md create mode 100644 docs/index.mdx delete mode 100644 docs/installation/desktop.md delete mode 100644 docs/installation/docker.md delete mode 100644 docs/installation/index.md delete mode 100644 docs/installation/kata-containerd.md delete mode 100644 docs/installation/sqlite.md delete mode 100644 docs/installation/workspace-backends.md rename docs/integrations/providers/{llm.md => llm.mdx} (93%) delete mode 100644 docs/memory-providers/builtin.md delete mode 100644 docs/memory-providers/index.md delete mode 100644 docs/memory-providers/mem0.md delete mode 100644 docs/memory-providers/openviking.md rename docs/self-hosted/{kata-containerd.md => kata-containerd.mdx} (55%) rename docs/self-hosted/{workspace-backends.md => workspace-backends.mdx} (94%) delete mode 100644 docs/tts-providers/edge.md delete mode 100644 docs/tts-providers/index.md delete mode 100644 docs/zh/channels/dingtalk.md delete mode 100644 docs/zh/channels/discord.md delete mode 100644 docs/zh/channels/feishu.md delete mode 100644 docs/zh/channels/index.md delete mode 100644 docs/zh/channels/matrix.md delete mode 100644 docs/zh/channels/misskey.md delete mode 100644 docs/zh/channels/qq.md delete mode 100644 docs/zh/channels/slack.md delete mode 100644 docs/zh/channels/telegram.md delete mode 100644 docs/zh/channels/wechatoa.md delete mode 100644 docs/zh/channels/wecom.md delete mode 100644 docs/zh/channels/weixin.md delete mode 100644 docs/zh/getting-started/access.md delete mode 100644 docs/zh/getting-started/acp.md delete mode 100644 docs/zh/getting-started/bot.md delete mode 100644 docs/zh/getting-started/browser-computer-use.md delete mode 100644 docs/zh/getting-started/channels.md delete mode 100644 docs/zh/getting-started/compaction.md delete mode 100644 docs/zh/getting-started/container.md delete mode 100644 docs/zh/getting-started/email.md delete mode 100644 docs/zh/getting-started/files.md delete mode 100644 docs/zh/getting-started/heartbeat.md delete mode 100644 docs/zh/getting-started/mcp.md delete mode 100644 docs/zh/getting-started/memory.md delete mode 100644 docs/zh/getting-started/plugins.md delete mode 100644 docs/zh/getting-started/provider-and-model.md delete mode 100644 docs/zh/getting-started/schedule.md delete mode 100644 docs/zh/getting-started/search-provider.md delete mode 100644 docs/zh/getting-started/sessions.md delete mode 100644 docs/zh/getting-started/skills.md delete mode 100644 docs/zh/getting-started/slash-commands.md delete mode 100644 docs/zh/getting-started/supermarket.md rename docs/zh/guides/{computers.md => computers.mdx} (85%) rename docs/zh/guides/{email.md => email.mdx} (80%) delete mode 100644 docs/zh/index.md create mode 100644 docs/zh/index.mdx delete mode 100644 docs/zh/installation/desktop.md delete mode 100644 docs/zh/installation/docker.md delete mode 100644 docs/zh/installation/index.md delete mode 100644 docs/zh/installation/kata-containerd.md delete mode 100644 docs/zh/installation/sqlite.md delete mode 100644 docs/zh/installation/workspace-backends.md rename docs/zh/integrations/providers/{llm.md => llm.mdx} (91%) delete mode 100644 docs/zh/memory-providers/builtin.md delete mode 100644 docs/zh/memory-providers/index.md delete mode 100644 docs/zh/memory-providers/mem0.md delete mode 100644 docs/zh/memory-providers/openviking.md rename docs/zh/self-hosted/{kata-containerd.md => kata-containerd.mdx} (55%) rename docs/zh/self-hosted/{workspace-backends.md => workspace-backends.mdx} (94%) delete mode 100644 docs/zh/tts-providers/edge.md delete mode 100644 docs/zh/tts-providers/index.md delete mode 100644 pnpm-lock.yaml create mode 100644 scalar.config.json diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index 9265773..d30b8ac 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -6,61 +6,30 @@ on: - "v*" workflow_dispatch: -# Set GITHUB_TOKEN permissions to allow deployment to GitHub Pages -permissions: - contents: write - pages: write - id-token: write - -# Allow only one concurrent deployment, skipping runs between the currently running and latest queued. -# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +# Only one publish at a time; never cancel an in-flight production deploy. concurrency: - group: pages + group: scalar-docs cancel-in-progress: false jobs: - build-and-deploy: + publish: runs-on: ubuntu-latest - + steps: - name: Checkout main uses: actions/checkout@v4 with: ref: main - fetch-depth: 0 # Not needed if lastUpdated is not enabled - + - name: Setup Node uses: actions/setup-node@v4 with: - node-version: 20 - - - name: Setup pnpm - uses: pnpm/action-setup@v4 - with: - version: 10 - - - name: Get pnpm store directory - shell: bash - run: | - echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV - - - name: Setup pnpm cache - uses: actions/cache@v4 - with: - path: ${{ env.STORE_PATH }} - key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} - restore-keys: | - ${{ runner.os }}-pnpm-store- - - - name: Install dependencies - run: pnpm install --frozen-lockfile - - - name: Build with VitePress - run: pnpm build - - - name: Deploy to GitHub Pages - uses: peaceiris/actions-gh-pages@v4 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./docs/.vitepress/dist - cname: docs.memoh.ai + node-version: 24 + + - name: Validate scalar.config.json + run: npx @scalar/cli@latest project check-config + + - name: Publish to Scalar + env: + SCALAR_API_KEY: ${{ secrets.SCALAR_API_KEY }} + run: npx @scalar/cli@latest project publish diff --git a/.github/workflows/validate-docs.yml b/.github/workflows/validate-docs.yml new file mode 100644 index 0000000..736fcc5 --- /dev/null +++ b/.github/workflows/validate-docs.yml @@ -0,0 +1,30 @@ +name: Validate Docs + +on: + push: + branches: + - main + paths: + - "scalar.config.json" + - "docs/**" + pull_request: + paths: + - "scalar.config.json" + - "docs/**" + +jobs: + validate: + name: Validate scalar.config.json + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 24 + + - name: Validate + run: npx @scalar/cli@latest project check-config diff --git a/.gitignore b/.gitignore index d11e654..92598dc 100644 --- a/.gitignore +++ b/.gitignore @@ -23,4 +23,6 @@ dist-ssr *.sln *.sw? -.vitepress/cache \ No newline at end of file + +# Scalar CLI +.scalar diff --git a/README.md b/README.md index 19189c8..cba6556 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ This repository contains the public documentation site for [Memoh](https://github.com/felinics/Memoh), a multi-member, long-memory AI agent platform with isolated workspaces, channel integrations, and desktop/server deployment modes. -The product source code lives in [`felinics/Memoh`](https://github.com/felinics/Memoh). This repository only owns the docs site: VitePress config, Markdown pages, and screenshots. +The product source code lives in [`felinics/Memoh`](https://github.com/felinics/Memoh). This repository only owns the docs site: the Scalar Docs config, Markdown/MDX pages, and screenshots. ## What Is Here @@ -27,11 +27,11 @@ The product source code lives in [`felinics/Memoh`](https://github.com/felinics/ - **Self-hosted** docs for Desktop, Server Deploy, workspace backends, Kata, and SQLite. - **English and Chinese docs** under `docs/` and `docs/zh/`. - **Static assets** under `docs/public/`, including screenshots and logos. -- **VitePress config** under `docs/.vitepress/`. +- **Scalar Docs config** in `scalar.config.json` at the repository root. ## Documentation Structure -The current VitePress site is organized around three primary navigation roots: +The site is organized around three primary navigation roots: - `docs/guides/` for product usage guides. - `docs/integrations/` for channels, providers, memory providers, TTS, and web search. @@ -43,46 +43,32 @@ The Simplified Chinese mirror uses the same structure under `docs/zh/`: - `docs/zh/integrations/` - `docs/zh/self-hosted/` -Legacy paths still exist for old external links, but they are redirect pages instead of the main content source: +Both languages are wired up as Scalar **versions** in `scalar.config.json`. The `default` version serves English at `/*`, the `zh` version serves Simplified Chinese at `/zh/*`, and Scalar renders the language switcher in the header. Inside the `zh` version, route keys are written *without* the `/zh` prefix — Scalar adds it. -- `docs/getting-started/` -- `docs/installation/` -- `docs/channels/` -- `docs/tts-providers/` -- `docs/memory-providers/` -- Matching Chinese redirects under `docs/zh/` +Legacy paths from the previous information architecture (`/getting-started/*`, `/installation/*`, `/channels/*`, `/tts-providers/*`, `/memory-providers/*`, and their `/zh/` counterparts) are kept alive as `siteConfig.routing.redirects` entries in `scalar.config.json`. There are no redirect pages in `docs/` anymore — when a redirect target moves, edit the config. -When updating content, edit the primary paths above first. Only touch a legacy redirect page when the redirect target itself changes. - -Keep the English and Simplified Chinese docs mirrored. If you add, rename, remove, or move a page in one language, make the matching change in the other language and update both VitePress sidebar files. - -Do not edit `docs/.vitepress/dist/` by hand. It is generated build output and should not be treated as source documentation. +Keep the English and Simplified Chinese docs mirrored. If you add, rename, remove, or move a page in one language, make the matching change in the other language and update both versions in `scalar.config.json`. ## Local Development -Use Node.js and pnpm. The repository is a standalone VitePress project. +The Scalar CLI needs no install step: ```bash -pnpm install -pnpm dev +npx @scalar/cli project preview ``` The dev server runs at: ```text -http://localhost:5173 +http://localhost:7970 ``` -## Build - -```bash -pnpm build -``` +## Validate -Preview the production build: +`scalar.config.json` is the single source of truth for the sitemap and sidebar, and CI validates it on every push and pull request that touches `scalar.config.json` or `docs/**`: ```bash -pnpm preview +npx @scalar/cli project check-config ``` ## Project Layout @@ -90,37 +76,37 @@ pnpm preview ```text . ├── docs/ -│ ├── .vitepress/ # VitePress config, nav, sidebars │ ├── guides/ # Product usage guides │ ├── integrations/ # Channels and providers │ ├── self-hosted/ # Open-source deployment docs -│ ├── getting-started/ # Legacy redirects to guides -│ ├── installation/ # Legacy redirects to self-hosted -│ ├── channels/ # Legacy redirects to integrations/channels -│ ├── tts-providers/ # Legacy redirects to integrations/providers/tts -│ ├── memory-providers/ # Legacy redirects to integrations/providers/memory -│ ├── public/ # Static images and logo -│ ├── zh/ # Simplified Chinese documentation and redirects -│ └── *.md # Landing and compatibility pages -├── package.json -└── pnpm-lock.yaml +│ ├── public/ # Static images and logo (served from the site root) +│ ├── zh/ # Simplified Chinese documentation +│ ├── footer.html # Site footer +│ └── index.mdx # Landing page +├── scalar.config.json # Navigation, routing, theme, redirects +└── package.json +``` + +Pages are plain Markdown by default. Use the `.mdx` extension when a page needs [Scalar components](https://scalar.com/products/docs) such as `Callout` or `PageLink`, and import them at the top of the file: + +```mdx +import { Callout } from 'scalar-mdx-components' + + + Something to be careful about. + ``` ## Contributing Small fixes are best made directly in the relevant Markdown page. For larger changes: -1. Run `pnpm dev`. +1. Run `npx @scalar/cli project preview`. 2. Edit the docs under `docs/`. -3. Run `pnpm build`. +3. Run `npx @scalar/cli project check-config`. 4. Open a pull request with screenshots when the change affects layout or images. -When adding a new page, update the matching sidebar file in `docs/.vitepress/`: - -- `en.ts` for English pages -- `zh.ts` for Chinese pages - -Do not use the legacy redirect folders as the canonical location for new content. New source pages should live under `guides`, `integrations`, or `self-hosted`, with the matching `docs/zh/` page kept in sync. +When adding a new page, add a matching route entry under both versions in `scalar.config.json` — a file with no route entry is not published. New source pages should live under `guides`, `integrations`, or `self-hosted`, with the matching `docs/zh/` page kept in sync. ## License diff --git a/README_CN.md b/README_CN.md index a5b1395..eaa820e 100644 --- a/README_CN.md +++ b/README_CN.md @@ -18,7 +18,7 @@ 这个仓库保存 [Memoh](https://github.com/felinics/Memoh) 的公开文档。Memoh 是一个多成员、长期记忆的 AI 智能体平台,支持独立 workspace、跨渠道接入,以及桌面版和服务器部署。 -产品代码在 [`felinics/Memoh`](https://github.com/felinics/Memoh)。这个仓库只负责文档站:VitePress 配置、Markdown 页面和截图。 +产品代码在 [`felinics/Memoh`](https://github.com/felinics/Memoh)。这个仓库只负责文档站:Scalar Docs 配置、Markdown/MDX 页面和截图。 ## 这里有什么 @@ -27,11 +27,11 @@ - **自托管**:Desktop、Server Deploy、workspace backend、Kata 和 SQLite 等开源部署文档。 - 英文和中文文档,分别位于 `docs/` 和 `docs/zh/`。 - 截图、logo 等静态资源,位于 `docs/public/`。 -- VitePress 配置,位于 `docs/.vitepress/`。 +- Scalar Docs 配置,位于仓库根目录的 `scalar.config.json`。 ## 文档站结构 -当前 VitePress 文档站围绕三个主导航路径组织: +文档站围绕三个主导航路径组织: - `docs/guides/`:产品使用教程。 - `docs/integrations/`:渠道、提供方、记忆提供方、TTS 和网页搜索。 @@ -43,46 +43,32 @@ - `docs/zh/integrations/` - `docs/zh/self-hosted/` -旧路径仍然保留,用于兼容外部旧链接,但它们是重定向页面,不是主要内容源: +两种语言在 `scalar.config.json` 里以 Scalar **version** 的形式配置:`default` 提供英文文档,路径为 `/*`;`zh` 提供简体中文文档,路径为 `/zh/*`;语言切换器由 Scalar 在页头自动渲染。注意 `zh` version 内部的路由 key 不要带 `/zh` 前缀,Scalar 会自动加上。 -- `docs/getting-started/` -- `docs/installation/` -- `docs/channels/` -- `docs/tts-providers/` -- `docs/memory-providers/` -- `docs/zh/` 下对应的中文重定向路径 +旧信息架构的路径(`/getting-started/*`、`/installation/*`、`/channels/*`、`/tts-providers/*`、`/memory-providers/*` 以及 `/zh/` 下的对应路径)通过 `scalar.config.json` 里的 `siteConfig.routing.redirects` 保持可用。`docs/` 下不再有重定向页面——重定向目标变化时,直接改配置。 -更新内容时,请优先修改上面的主路径。只有重定向目标本身变化时,才需要修改 legacy redirect 页面。 - -英文和简体中文文档需要保持镜像一致。如果在一种语言中新增、重命名、删除或移动页面,请在另一种语言中做对应变更,并同时更新两个 VitePress 侧边栏文件。 - -不要手动编辑 `docs/.vitepress/dist/`。它是构建生成产物,不应当作为文档源码维护。 +英文和简体中文文档需要保持镜像一致。如果在一种语言中新增、重命名、删除或移动页面,请在另一种语言中做对应变更,并同时更新 `scalar.config.json` 里的两个 version。 ## 本地开发 -需要 Node.js 和 pnpm。这个仓库是独立的 VitePress 项目。 +Scalar CLI 无需安装步骤: ```bash -pnpm install -pnpm dev +npx @scalar/cli project preview ``` 开发服务器默认运行在: ```text -http://localhost:5173 +http://localhost:7970 ``` -## 构建 - -```bash -pnpm build -``` +## 校验 -预览生产构建: +`scalar.config.json` 是站点地图和侧边栏的唯一来源。任何改动 `scalar.config.json` 或 `docs/**` 的 push 和 PR,CI 都会校验它: ```bash -pnpm preview +npx @scalar/cli project check-config ``` ## 目录结构 @@ -90,37 +76,37 @@ pnpm preview ```text . ├── docs/ -│ ├── .vitepress/ # VitePress 配置、导航、侧边栏 │ ├── guides/ # 产品使用教程 │ ├── integrations/ # 渠道和提供方 │ ├── self-hosted/ # 开源自托管部署文档 -│ ├── getting-started/ # 到 guides 的旧路径重定向 -│ ├── installation/ # 到 self-hosted 的旧路径重定向 -│ ├── channels/ # 到 integrations/channels 的旧路径重定向 -│ ├── tts-providers/ # 到 integrations/providers/tts 的旧路径重定向 -│ ├── memory-providers/ # 到 integrations/providers/memory 的旧路径重定向 -│ ├── public/ # 静态图片和 logo -│ ├── zh/ # 中文文档和重定向页面 -│ └── *.md # 入口和兼容页面 -├── package.json -└── pnpm-lock.yaml +│ ├── public/ # 静态图片和 logo(从站点根路径提供) +│ ├── zh/ # 中文文档 +│ ├── footer.html # 站点页脚 +│ └── index.mdx # 落地页 +├── scalar.config.json # 导航、路由、主题、重定向 +└── package.json +``` + +页面默认是纯 Markdown。需要用 [Scalar 组件](https://scalar.com/products/docs)(例如 `Callout`、`PageLink`)时,把文件扩展名改成 `.mdx`,并在文件顶部导入: + +```mdx +import { Callout } from 'scalar-mdx-components' + + + 需要注意的内容。 + ``` ## 贡献文档 小的错别字、链接和措辞修正可以直接改对应 Markdown 页面。较大的结构调整建议这样做: -1. 运行 `pnpm dev`。 +1. 运行 `npx @scalar/cli project preview`。 2. 修改 `docs/` 下的文档。 -3. 运行 `pnpm build`。 +3. 运行 `npx @scalar/cli project check-config`。 4. 如果改动影响布局或图片,在 PR 里附上截图。 -新增页面时,记得更新对应的侧边栏配置: - -- 英文页面:`docs/.vitepress/en.ts` -- 中文页面:`docs/.vitepress/zh.ts` - -不要把 legacy redirect 目录作为新内容的规范位置。新的源码页面应放在 `guides`、`integrations` 或 `self-hosted` 下,并同步维护对应的 `docs/zh/` 页面。 +新增页面时,记得在 `scalar.config.json` 的两个 version 下都加上对应的路由条目——没有路由条目的文件不会被发布。新的源码页面应放在 `guides`、`integrations` 或 `self-hosted` 下,并同步维护对应的 `docs/zh/` 页面。 ## 许可证 diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts deleted file mode 100644 index a46632a..0000000 --- a/docs/.vitepress/config.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { defineConfig } from 'vitepress' -import { en } from './en' -import { zh } from './zh' - -// https://vitepress.vuejs.org/config/app-configs -export default defineConfig({ - title: 'Memoh Documentation', - description: 'Multi-member long-memory AI agent platform with desktop and server deploy modes.', - - head: [ - ['link', { rel: 'icon', href: '/logo.svg' }] - ], - - base: '/', - - locales: { - root: { - label: 'English', - lang: 'en', - themeConfig: { - nav: [ - { text: 'Guides', link: '/guides/' }, - { text: 'Integrations', link: '/integrations/' }, - { text: 'Self-hosted', link: '/self-hosted/' }, - ], - }, - }, - zh: { - label: '简体中文', - lang: 'zh', - themeConfig: { - nav: [ - { text: '教程', link: '/zh/guides/' }, - { text: '集成', link: '/zh/integrations/' }, - { text: '自托管', link: '/zh/self-hosted/' }, - ], - }, - } - }, - - themeConfig: { - siteTitle: 'Memoh', - sidebar: { - ...en, - ...zh, - }, - - nav: [ - { text: 'Guides', link: '/guides/' }, - { text: 'Integrations', link: '/integrations/' }, - { text: 'Self-hosted', link: '/self-hosted/' }, - ], - - logo: { - src: '/logo.svg', - alt: 'Memoh' - }, - - socialLinks: [ - { icon: 'github', link: 'https://github.com/felinics/Memoh' } - ], - - footer: { - message: 'Published under AGPLv3', - copyright: 'Copyright © 2024-present Memoh' - }, - - search: { - provider: 'local' - }, - - editLink: { - pattern: 'https://github.com/felinics/memoh-docs/edit/main/docs/:path', - text: 'Edit on GitHub' - }, - - lastUpdated: { - text: 'Last Updated', - formatOptions: { - dateStyle: 'short', - timeStyle: 'medium' - } - } - }, - - ignoreDeadLinks: true, -}) diff --git a/docs/.vitepress/en.ts b/docs/.vitepress/en.ts deleted file mode 100644 index 9194fed..0000000 --- a/docs/.vitepress/en.ts +++ /dev/null @@ -1,94 +0,0 @@ -export const en = { - '/guides/': [ - { - text: 'Guides', - items: [ - { text: 'Overview', link: '/guides/' }, - { text: 'Preferences', link: '/guides/preferences.md' }, - { text: 'Bot', link: '/guides/bot.md' }, - { text: 'Sessions', link: '/guides/sessions.md' }, - { text: 'Agents / ACP', link: '/guides/acp.md' }, - { text: 'Access Control', link: '/guides/access.md' }, - { text: 'Workspace', link: '/guides/container.md' }, - { text: 'Computers', link: '/guides/computers.md' }, - { text: 'Browser / Computer Use', link: '/guides/browser-computer-use.md' }, - { text: 'Files', link: '/guides/files.md' }, - { text: 'Skills', link: '/guides/skills.md' }, - { text: 'Supermarket', link: '/guides/supermarket.md' }, - { text: 'Connectors', link: '/guides/connectors.md' }, - { text: 'Plugins', link: '/guides/plugins.md' }, - { text: 'Hooks', link: '/guides/hooks.md' }, - { text: 'MCP', link: '/guides/mcp.md' }, - { text: 'Memory', link: '/guides/memory.md' }, - { text: 'Compaction', link: '/guides/compaction.md' }, - { text: 'Heartbeat', link: '/guides/heartbeat.md' }, - { text: 'Scheduled Tasks', link: '/guides/schedule.md' }, - { text: 'Email', link: '/guides/email.md' }, - { text: 'Slash Commands', link: '/guides/slash-commands.md' }, - ], - }, - ], - '/integrations/': [ - { - text: 'Integrations', - items: [ - { text: 'Overview', link: '/integrations/' }, - ], - }, - { - text: 'Channels', - items: [ - { text: 'Overview', link: '/integrations/channels/' }, - { text: 'Slack', link: '/integrations/channels/slack.md' }, - { text: 'Telegram', link: '/integrations/channels/telegram.md' }, - { text: 'Feishu (Lark)', link: '/integrations/channels/feishu.md' }, - { text: 'Discord', link: '/integrations/channels/discord.md' }, - { text: 'QQ', link: '/integrations/channels/qq.md' }, - { text: 'Matrix', link: '/integrations/channels/matrix.md' }, - { text: 'Misskey', link: '/integrations/channels/misskey.md' }, - { text: 'LINE', link: '/integrations/channels/line.md' }, - { text: 'DingTalk', link: '/integrations/channels/dingtalk.md' }, - { text: 'WeCom (WeWork)', link: '/integrations/channels/wecom.md' }, - { text: 'WeChat', link: '/integrations/channels/weixin.md' }, - { text: 'WeChat Official Account', link: '/integrations/channels/wechatoa.md' }, - ], - }, - { - text: 'Providers', - items: [ - { text: 'Overview', link: '/integrations/providers/' }, - { text: 'LLM Providers', link: '/integrations/providers/llm.md' }, - { text: 'Web Search Providers', link: '/integrations/providers/web-search.md' }, - { text: 'Video Providers', link: '/integrations/providers/video.md' }, - ], - }, - { - text: 'Memory Providers', - items: [ - { text: 'Overview', link: '/integrations/providers/memory/' }, - { text: 'Built-in', link: '/integrations/providers/memory/builtin.md' }, - { text: 'Mem0', link: '/integrations/providers/memory/mem0.md' }, - { text: 'OpenViking', link: '/integrations/providers/memory/openviking.md' }, - ], - }, - { - text: 'TTS Providers', - items: [ - { text: 'Overview', link: '/integrations/providers/tts/' }, - { text: 'Edge TTS', link: '/integrations/providers/tts/edge.md' }, - ], - }, - ], - '/self-hosted/': [ - { - text: 'Self-hosted', - items: [ - { text: 'Overview', link: '/self-hosted/' }, - { text: 'Desktop', link: '/self-hosted/desktop.md' }, - { text: 'Server Deploy', link: '/self-hosted/docker.md' }, - { text: 'Workspace Backends', link: '/self-hosted/workspace-backends.md' }, - { text: 'SQLite', link: '/self-hosted/sqlite.md' }, - ], - }, - ], -} diff --git a/docs/.vitepress/theme/components/DocsHome.vue b/docs/.vitepress/theme/components/DocsHome.vue deleted file mode 100644 index 49513c6..0000000 --- a/docs/.vitepress/theme/components/DocsHome.vue +++ /dev/null @@ -1,164 +0,0 @@ - - - - - diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts deleted file mode 100644 index 0e9c187..0000000 --- a/docs/.vitepress/theme/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -import DefaultTheme from 'vitepress/theme' -import DocsHome from './components/DocsHome.vue' -import './style.css' - -export default { - extends: DefaultTheme, - enhanceApp({ app }) { - app.component('DocsHome', DocsHome) - }, -} diff --git a/docs/.vitepress/theme/style.css b/docs/.vitepress/theme/style.css deleted file mode 100644 index 117eeab..0000000 --- a/docs/.vitepress/theme/style.css +++ /dev/null @@ -1,106 +0,0 @@ -.docs-home { - margin: 24px 0 28px; -} - -.docs-home__cards { - display: grid; - grid-template-columns: repeat(3, minmax(0, 1fr)); - gap: 16px; -} - -.docs-home__card { - display: flex; - flex-direction: column; - min-height: 178px; - padding: 22px; - border: 1px solid var(--vp-c-divider); - border-radius: 8px; - color: var(--vp-c-text-1); - background: var(--vp-c-bg-soft); - text-decoration: none !important; - transition: border-color 0.18s ease, background-color 0.18s ease, transform 0.18s ease; -} - -.docs-home__card:hover { - border-color: var(--vp-c-brand-2); - background: var(--vp-c-bg); - text-decoration: none !important; - transform: translateY(-2px); -} - -.docs-home__card:hover .docs-home__card-title { - color: var(--vp-c-brand-1); -} - -.docs-home__card * { - text-decoration: none !important; -} - -.docs-home__card--guide { - border-top: 4px solid #2f8f6b; -} - -.docs-home__card--integration { - border-top: 4px solid #3b73d9; -} - -.docs-home__card--hosted { - border-top: 4px solid #b46a2a; -} - -.docs-home__icon { - display: inline-flex; - align-items: center; - justify-content: center; - width: 38px; - height: 38px; - border: 1px solid var(--vp-c-divider); - border-radius: 8px; - color: var(--vp-c-brand-1); - background: var(--vp-c-bg); -} - -.docs-home__icon svg { - width: 22px; - height: 22px; - fill: none; - stroke: currentColor; - stroke-width: 1.8; - stroke-linecap: round; - stroke-linejoin: round; -} - -.docs-home__card-title { - margin-top: 20px; - color: var(--vp-c-text-1); - font-size: 22px; - line-height: 1.25; - font-weight: 760; -} - -.docs-home__card-text { - margin-top: 12px; - color: var(--vp-c-text-2); - font-size: 14px; - line-height: 1.55; -} - -@media (max-width: 860px) { - .docs-home { - margin-top: 22px; - } - - .docs-home__cards { - grid-template-columns: 1fr; - } - - .docs-home__card { - min-height: 0; - } -} - -@media (min-width: 861px) and (max-width: 1080px) { - .docs-home__cards { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } -} diff --git a/docs/.vitepress/zh.ts b/docs/.vitepress/zh.ts deleted file mode 100644 index 47ad02c..0000000 --- a/docs/.vitepress/zh.ts +++ /dev/null @@ -1,94 +0,0 @@ -export const zh = { - '/zh/guides/': [ - { - text: '教程', - items: [ - { text: '总览', link: '/zh/guides/' }, - { text: '用户偏好', link: '/zh/guides/preferences.md' }, - { text: '机器人', link: '/zh/guides/bot.md' }, - { text: '会话', link: '/zh/guides/sessions.md' }, - { text: 'Agents / ACP', link: '/zh/guides/acp.md' }, - { text: '访问控制', link: '/zh/guides/access.md' }, - { text: 'Workspace', link: '/zh/guides/container.md' }, - { text: '电脑(远程 Runtime)', link: '/zh/guides/computers.md' }, - { text: 'Browser / Computer Use', link: '/zh/guides/browser-computer-use.md' }, - { text: '文件', link: '/zh/guides/files.md' }, - { text: '技能', link: '/zh/guides/skills.md' }, - { text: '超市', link: '/zh/guides/supermarket.md' }, - { text: '连接器', link: '/zh/guides/connectors.md' }, - { text: '插件', link: '/zh/guides/plugins.md' }, - { text: 'Hooks', link: '/zh/guides/hooks.md' }, - { text: 'MCP', link: '/zh/guides/mcp.md' }, - { text: '长期记忆', link: '/zh/guides/memory.md' }, - { text: '上下文压缩', link: '/zh/guides/compaction.md' }, - { text: '心跳', link: '/zh/guides/heartbeat.md' }, - { text: '计划任务', link: '/zh/guides/schedule.md' }, - { text: '邮件', link: '/zh/guides/email.md' }, - { text: '斜杠命令', link: '/zh/guides/slash-commands.md' }, - ], - }, - ], - '/zh/integrations/': [ - { - text: '集成', - items: [ - { text: '总览', link: '/zh/integrations/' }, - ], - }, - { - text: '渠道', - items: [ - { text: '总览', link: '/zh/integrations/channels/' }, - { text: 'Slack', link: '/zh/integrations/channels/slack.md' }, - { text: 'Telegram', link: '/zh/integrations/channels/telegram.md' }, - { text: '飞书', link: '/zh/integrations/channels/feishu.md' }, - { text: 'Discord', link: '/zh/integrations/channels/discord.md' }, - { text: 'QQ', link: '/zh/integrations/channels/qq.md' }, - { text: 'Matrix', link: '/zh/integrations/channels/matrix.md' }, - { text: 'Misskey', link: '/zh/integrations/channels/misskey.md' }, - { text: 'LINE', link: '/zh/integrations/channels/line.md' }, - { text: '钉钉', link: '/zh/integrations/channels/dingtalk.md' }, - { text: '企微', link: '/zh/integrations/channels/wecom.md' }, - { text: '微信', link: '/zh/integrations/channels/weixin.md' }, - { text: '微信公众号', link: '/zh/integrations/channels/wechatoa.md' }, - ], - }, - { - text: '提供方', - items: [ - { text: '总览', link: '/zh/integrations/providers/' }, - { text: 'LLM 提供方', link: '/zh/integrations/providers/llm.md' }, - { text: '搜索提供方', link: '/zh/integrations/providers/web-search.md' }, - { text: '视频提供方', link: '/zh/integrations/providers/video.md' }, - ], - }, - { - text: '记忆提供方', - items: [ - { text: '总览', link: '/zh/integrations/providers/memory/' }, - { text: '内置', link: '/zh/integrations/providers/memory/builtin.md' }, - { text: 'Mem0', link: '/zh/integrations/providers/memory/mem0.md' }, - { text: 'OpenViking', link: '/zh/integrations/providers/memory/openviking.md' }, - ], - }, - { - text: 'TTS 提供方', - items: [ - { text: '总览', link: '/zh/integrations/providers/tts/' }, - { text: 'Edge TTS', link: '/zh/integrations/providers/tts/edge.md' }, - ], - }, - ], - '/zh/self-hosted/': [ - { - text: '自托管', - items: [ - { text: '总览', link: '/zh/self-hosted/' }, - { text: 'Desktop 桌面版', link: '/zh/self-hosted/desktop.md' }, - { text: 'Server Deploy', link: '/zh/self-hosted/docker.md' }, - { text: 'Workspace Backend', link: '/zh/self-hosted/workspace-backends.md' }, - { text: 'SQLite 部署', link: '/zh/self-hosted/sqlite.md' }, - ], - }, - ], -} diff --git a/docs/about.md b/docs/about.md index f1b42cb..dc78717 100644 --- a/docs/about.md +++ b/docs/about.md @@ -38,7 +38,7 @@ Access control is split between channel-side chat permissions and workspace-side - **[Bot Setup](/guides/bot)** - create and configure a bot. - **[Providers And Models](/integrations/providers/llm)** - configure model access. -- **[Channels](/integrations/channels/)** - choose where bots are reachable. +- **[Channels](/integrations/channels)** - choose where bots are reachable. - **[Plugins](/guides/plugins)** and **[Supermarket](/guides/supermarket)** - install packaged capabilities. - **[Scheduled Tasks](/guides/schedule)** and **[Access Control](/guides/access)** - operate recurring work and permissions. -- **[Self-hosted](/self-hosted/)** - deploy and maintain your own Memoh instance. +- **[Self-hosted](/self-hosted)** - deploy and maintain your own Memoh instance. diff --git a/docs/channels/dingtalk.md b/docs/channels/dingtalk.md deleted file mode 100644 index 4aa1a1f..0000000 --- a/docs/channels/dingtalk.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/integrations/channels/dingtalk](/integrations/channels/dingtalk). diff --git a/docs/channels/discord.md b/docs/channels/discord.md deleted file mode 100644 index 81aaa2a..0000000 --- a/docs/channels/discord.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/integrations/channels/discord](/integrations/channels/discord). diff --git a/docs/channels/feishu.md b/docs/channels/feishu.md deleted file mode 100644 index 3e3883e..0000000 --- a/docs/channels/feishu.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/integrations/channels/feishu](/integrations/channels/feishu). diff --git a/docs/channels/index.md b/docs/channels/index.md deleted file mode 100644 index c67fe66..0000000 --- a/docs/channels/index.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/integrations/channels/](/integrations/channels/). diff --git a/docs/channels/matrix.md b/docs/channels/matrix.md deleted file mode 100644 index 0a93a82..0000000 --- a/docs/channels/matrix.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/integrations/channels/matrix](/integrations/channels/matrix). diff --git a/docs/channels/misskey.md b/docs/channels/misskey.md deleted file mode 100644 index f0c264c..0000000 --- a/docs/channels/misskey.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/integrations/channels/misskey](/integrations/channels/misskey). diff --git a/docs/channels/qq.md b/docs/channels/qq.md deleted file mode 100644 index bf13986..0000000 --- a/docs/channels/qq.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/integrations/channels/qq](/integrations/channels/qq). diff --git a/docs/channels/slack.md b/docs/channels/slack.md deleted file mode 100644 index 3e84204..0000000 --- a/docs/channels/slack.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/integrations/channels/slack](/integrations/channels/slack). diff --git a/docs/channels/telegram.md b/docs/channels/telegram.md deleted file mode 100644 index dcacbe6..0000000 --- a/docs/channels/telegram.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/integrations/channels/telegram](/integrations/channels/telegram). diff --git a/docs/channels/wechatoa.md b/docs/channels/wechatoa.md deleted file mode 100644 index 238b928..0000000 --- a/docs/channels/wechatoa.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/integrations/channels/wechatoa](/integrations/channels/wechatoa). diff --git a/docs/channels/wecom.md b/docs/channels/wecom.md deleted file mode 100644 index 3be285e..0000000 --- a/docs/channels/wecom.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/integrations/channels/wecom](/integrations/channels/wecom). diff --git a/docs/channels/weixin.md b/docs/channels/weixin.md deleted file mode 100644 index c6eb368..0000000 --- a/docs/channels/weixin.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/integrations/channels/weixin](/integrations/channels/weixin). diff --git a/docs/footer.html b/docs/footer.html new file mode 100644 index 0000000..92fa3ae --- /dev/null +++ b/docs/footer.html @@ -0,0 +1,18 @@ +
+

Published under AGPLv3

+

Copyright © 2024-present Memoh

+
+ + diff --git a/docs/getting-started/access.md b/docs/getting-started/access.md deleted file mode 100644 index b8b417e..0000000 --- a/docs/getting-started/access.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/guides/access](/guides/access). diff --git a/docs/getting-started/acp.md b/docs/getting-started/acp.md deleted file mode 100644 index f5deb88..0000000 --- a/docs/getting-started/acp.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/guides/acp](/guides/acp). diff --git a/docs/getting-started/bot.md b/docs/getting-started/bot.md deleted file mode 100644 index a6f10d1..0000000 --- a/docs/getting-started/bot.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/guides/bot](/guides/bot). diff --git a/docs/getting-started/browser-computer-use.md b/docs/getting-started/browser-computer-use.md deleted file mode 100644 index f944051..0000000 --- a/docs/getting-started/browser-computer-use.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/guides/browser-computer-use](/guides/browser-computer-use). diff --git a/docs/getting-started/channels.md b/docs/getting-started/channels.md deleted file mode 100644 index c67fe66..0000000 --- a/docs/getting-started/channels.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/integrations/channels/](/integrations/channels/). diff --git a/docs/getting-started/compaction.md b/docs/getting-started/compaction.md deleted file mode 100644 index 80b2b7e..0000000 --- a/docs/getting-started/compaction.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/guides/compaction](/guides/compaction). diff --git a/docs/getting-started/container.md b/docs/getting-started/container.md deleted file mode 100644 index 982f55f..0000000 --- a/docs/getting-started/container.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/guides/container](/guides/container). diff --git a/docs/getting-started/email.md b/docs/getting-started/email.md deleted file mode 100644 index 8c1772a..0000000 --- a/docs/getting-started/email.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/guides/email](/guides/email). diff --git a/docs/getting-started/files.md b/docs/getting-started/files.md deleted file mode 100644 index 6b96301..0000000 --- a/docs/getting-started/files.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/guides/files](/guides/files). diff --git a/docs/getting-started/heartbeat.md b/docs/getting-started/heartbeat.md deleted file mode 100644 index 4e394f0..0000000 --- a/docs/getting-started/heartbeat.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/guides/heartbeat](/guides/heartbeat). diff --git a/docs/getting-started/mcp.md b/docs/getting-started/mcp.md deleted file mode 100644 index 3a78424..0000000 --- a/docs/getting-started/mcp.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/guides/mcp](/guides/mcp). diff --git a/docs/getting-started/memory.md b/docs/getting-started/memory.md deleted file mode 100644 index 0e3b7e2..0000000 --- a/docs/getting-started/memory.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/guides/memory](/guides/memory). diff --git a/docs/getting-started/plugins.md b/docs/getting-started/plugins.md deleted file mode 100644 index 864f97b..0000000 --- a/docs/getting-started/plugins.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/guides/plugins](/guides/plugins). diff --git a/docs/getting-started/provider-and-model.md b/docs/getting-started/provider-and-model.md deleted file mode 100644 index c5edd2c..0000000 --- a/docs/getting-started/provider-and-model.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/integrations/providers/llm](/integrations/providers/llm). diff --git a/docs/getting-started/schedule.md b/docs/getting-started/schedule.md deleted file mode 100644 index d748792..0000000 --- a/docs/getting-started/schedule.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/guides/schedule](/guides/schedule). diff --git a/docs/getting-started/search-provider.md b/docs/getting-started/search-provider.md deleted file mode 100644 index abaa60b..0000000 --- a/docs/getting-started/search-provider.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/integrations/providers/web-search](/integrations/providers/web-search). diff --git a/docs/getting-started/sessions.md b/docs/getting-started/sessions.md deleted file mode 100644 index 524bf27..0000000 --- a/docs/getting-started/sessions.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/guides/sessions](/guides/sessions). diff --git a/docs/getting-started/skills.md b/docs/getting-started/skills.md deleted file mode 100644 index 1bc0af1..0000000 --- a/docs/getting-started/skills.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/guides/skills](/guides/skills). diff --git a/docs/getting-started/slash-commands.md b/docs/getting-started/slash-commands.md deleted file mode 100644 index a15ce87..0000000 --- a/docs/getting-started/slash-commands.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/guides/slash-commands](/guides/slash-commands). diff --git a/docs/getting-started/supermarket.md b/docs/getting-started/supermarket.md deleted file mode 100644 index 2791e47..0000000 --- a/docs/getting-started/supermarket.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/guides/supermarket](/guides/supermarket). diff --git a/docs/guides/acp.md b/docs/guides/acp.md index 1951d7b..78faca3 100644 --- a/docs/guides/acp.md +++ b/docs/guides/acp.md @@ -90,7 +90,7 @@ ACP work uses the `acp_agent` session type. These sessions are created and manag ## Related Pages -- [Bot Management](/guides/bot.md) -- [Sessions](/guides/sessions.md) -- [Files](/guides/files.md) -- [Providers And Models](/integrations/providers/llm.md) +- [Bot Management](/guides/bot) +- [Sessions](/guides/sessions) +- [Files](/guides/files) +- [Providers And Models](/integrations/providers/llm) diff --git a/docs/guides/bot.md b/docs/guides/bot.md index 6263e66..111dec4 100644 --- a/docs/guides/bot.md +++ b/docs/guides/bot.md @@ -60,11 +60,11 @@ After creating a bot, the most important step is configuring its runtime setting If you have not created these resources yet, set them up first: - [Providers And Models](/integrations/providers/llm) -- [Built-in Memory Provider](/integrations/providers/memory/builtin.md) +- [Built-in Memory Provider](/integrations/providers/memory/builtin) - [Search Providers](/integrations/providers/web-search) -- [TTS Providers](/integrations/providers/tts/index.md) -- [Agents / ACP](/guides/acp.md) -- [Plugins](/guides/plugins.md) +- [TTS Providers](/integrations/providers/tts) +- [Agents / ACP](/guides/acp) +- [Plugins](/guides/plugins) --- @@ -88,7 +88,7 @@ The **General** tab contains the settings that shape everyday conversation behav Notes: - The **Image Generation Model** is intentionally separate from the normal chat model so you can dedicate an image-capable model only to visual generation tasks. -- The **TTS Model** comes from the [TTS Providers](/integrations/providers/tts/index.md) system and uses `speech` models from the configured speech provider. +- The **TTS Model** comes from the [TTS Providers](/integrations/providers/tts) system and uses `speech` models from the configured speech provider. - The selected chat model's `context_window` influences session status reporting and [Context Compaction](/guides/compaction). --- @@ -153,7 +153,7 @@ Workspace files and terminals are available from the chat workspace UI after the - Open terminal sessions inside the workspace runtime. - Use display/browser tools when the bot workspace has display support enabled. -For file workflows, see [Files](/guides/files.md). For headed browser and desktop workflows, see [Browser / Computer Use](/guides/browser-computer-use.md). +For file workflows, see [Files](/guides/files). For headed browser and desktop workflows, see [Browser / Computer Use](/guides/browser-computer-use). --- diff --git a/docs/guides/browser-computer-use.md b/docs/guides/browser-computer-use.md index 861c16e..2d1d4c3 100644 --- a/docs/guides/browser-computer-use.md +++ b/docs/guides/browser-computer-use.md @@ -47,7 +47,7 @@ Computer Use depends on the `a11y-cli` binary installed under `/opt/memoh/toolki These tools are workspace runtime features. They do not automate the Electron desktop app itself. -When a bot has remote [Computers](/guides/computers.md) attached, Browser Use and Computer Use still run in the **Server Workspace** — they do not follow the selected work location. +When a bot has remote [Computers](/guides/computers) attached, Browser Use and Computer Use still run in the **Server Workspace** — they do not follow the selected work location. ## Related diff --git a/docs/guides/compaction.md b/docs/guides/compaction.md index 6a31b6e..f2b362b 100644 --- a/docs/guides/compaction.md +++ b/docs/guides/compaction.md @@ -14,7 +14,7 @@ New bots ship with automatic context compaction **enabled and zero-config**. You - If a session grows past about **75%** before the background pass catches up, Memoh compacts **synchronously** before sending the next turn. - Either path aims to bring the raw history back down to about **40%** of the window. -The only real prerequisite: the bot's chat model must declare a `context_window` in its model settings. Without it, the automatic policy has no budget to work against and never triggers. See [Providers And Models](/integrations/providers/llm.md). +The only real prerequisite: the bot's chat model must declare a `context_window` in its model settings. Without it, the automatic policy has no budget to work against and never triggers. See [Providers And Models](/integrations/providers/llm). Bots created before this default changed keep their stored settings and behave as configured (see legacy mode below). diff --git a/docs/guides/computers.md b/docs/guides/computers.mdx similarity index 86% rename from docs/guides/computers.md rename to docs/guides/computers.mdx index 948c80c..4dd26e3 100644 --- a/docs/guides/computers.md +++ b/docs/guides/computers.mdx @@ -1,3 +1,5 @@ +import { Callout } from 'scalar-mdx-components' + # Computers (Remote Runtimes) Memoh can connect your own computers to a deployment so bots can work on them: read and write files, and run commands. The Web UI calls these **Computers**; a bot picks between them as **Work locations**. @@ -6,9 +8,11 @@ The agent itself does not move. Model calls, chat, sessions, and memory all stay The connection is outbound from the computer to the server over WebSocket. The computer does not need a public IP or any open ports and can sit behind NAT. -::: danger Understand what you are sharing -A connected computer exposes the files of the OS user who runs the runtime and executes commands **as that user**. There is no directory sandbox: any file that user can touch, a bot with access can touch. Only bots you explicitly add the computer to can use it, and write/execute actions ask for approval by default — but treat connecting a computer as granting shell access. -::: + + **Understand what you are sharing** + + A connected computer exposes the files of the OS user who runs the runtime and executes commands **as that user**. There is no directory sandbox: any file that user can touch, a bot with access can touch. Only bots you explicitly add the computer to can use it, and write/execute actions ask for approval by default — but treat connecting a computer as granting shell access. + --- @@ -72,6 +76,6 @@ Every location has its own approval policy for **read**, **write**, and **execut ## Related Pages -- [Bot Workspace Management](/guides/container.md) -- [Browser / Computer Use](/guides/browser-computer-use.md) -- [Self-hosted Overview](/self-hosted/index.md) +- [Bot Workspace Management](/guides/container) +- [Browser / Computer Use](/guides/browser-computer-use) +- [Self-hosted Overview](/self-hosted) diff --git a/docs/guides/connectors.md b/docs/guides/connectors.md index 75b256c..f8b613c 100644 --- a/docs/guides/connectors.md +++ b/docs/guides/connectors.md @@ -18,7 +18,7 @@ api_token = "" # trusted server-to-server token Leaving both empty disables the feature. In deployed environments, prefer the matching environment variables (`MEMOH_CONNECT_IT_BASE_URL`, `MEMOH_CONNECT_IT_API_TOKEN`). -The one-click server deployment provisions a co-hosted Connect-It automatically on fresh installs; see [Server Deploy](/self-hosted/docker.md#connect-it-connectors). When Connect-It is not configured, the Supermarket hides the **Connectors** tab and connector operations report that connectors are not configured on this server. +The one-click server deployment provisions a co-hosted Connect-It automatically on fresh installs; see [Server Deploy](/self-hosted/docker#connect-it-connectors). When Connect-It is not configured, the Supermarket hides the **Connectors** tab and connector operations report that connectors are not configured on this server. --- @@ -67,6 +67,6 @@ Each connection gets a **tool namespace** derived from the connector type when i ## Related Pages -- [Supermarket](/guides/supermarket.md) — where connectors are discovered and connected. -- [MCP](/guides/mcp.md) — direct MCP connection management. -- [Server Deploy](/self-hosted/docker.md#connect-it-connectors) — co-hosted Connect-It provisioning, credentials, and the OAuth callback URL. +- [Supermarket](/guides/supermarket) — where connectors are discovered and connected. +- [MCP](/guides/mcp) — direct MCP connection management. +- [Server Deploy](/self-hosted/docker#connect-it-connectors) — co-hosted Connect-It provisioning, credentials, and the OAuth callback URL. diff --git a/docs/guides/container.md b/docs/guides/container.md index 1e08246..526ebf7 100644 --- a/docs/guides/container.md +++ b/docs/guides/container.md @@ -14,7 +14,7 @@ The workspace acts as the bot's private computer. Within it, the bot can: The workspace toolkit ships both **Node.js** and **Python** runtimes (with `pip` and `uv` on the PATH), so bots can run Python scripts and install packages without preparing an interpreter first. -A bot can also work outside its server workspace on connected machines — see [Computers](/guides/computers.md). +A bot can also work outside its server workspace on connected machines — see [Computers](/guides/computers). The underlying runtime is selected globally with `[container].backend` in `config.toml`, with trusted local workspace support controlled separately. The official Docker Compose server deploy uses `containerd`; Docker Engine, Apple, and local workspace modes are documented in [Workspace Backends](/self-hosted/workspace-backends). diff --git a/docs/guides/email.md b/docs/guides/email.mdx similarity index 86% rename from docs/guides/email.md rename to docs/guides/email.mdx index 0b30aeb..2faf5f4 100644 --- a/docs/guides/email.md +++ b/docs/guides/email.mdx @@ -1,3 +1,5 @@ +import { Callout } from 'scalar-mdx-components' + # Email Providers and Bindings Memoh allows your Bot to send and receive emails, providing another powerful channel for communication and task management. @@ -16,9 +18,11 @@ Manage your email service connections from the **Email Provider** page in the si Email providers are **scoped per user**: each user configures and sees only their own email accounts, and bot bindings can only use providers owned by the same user. Different users may reuse the same provider name without conflict. -::: tip Gmail OAuth -For Gmail providers, the OAuth application credentials (client ID / client secret) are no longer entered in the UI — the deployment operator configures them once in `conf/oauth-clients.toml` on the server. Users only go through the Gmail sign-in flow. -::: + + **Gmail OAuth** + + For Gmail providers, the OAuth application credentials (client ID / client secret) are no longer entered in the UI — the deployment operator configures them once in `conf/oauth-clients.toml` on the server. Users only go through the Gmail sign-in flow. + ### Creating a Provider diff --git a/docs/guides/hooks.md b/docs/guides/hooks.md index 47eae20..1c999c1 100644 --- a/docs/guides/hooks.md +++ b/docs/guides/hooks.md @@ -294,6 +294,6 @@ Hooks are powerful. Treat them like code that runs inside the bot workspace. ## Related Pages -- [Bot Management](/guides/bot.md) -- [Plugins](/guides/plugins.md) -- [Skills](/guides/skills.md) +- [Bot Management](/guides/bot) +- [Plugins](/guides/plugins) +- [Skills](/guides/skills) diff --git a/docs/guides/index.md b/docs/guides/index.md index bec22a1..87ac903 100644 --- a/docs/guides/index.md +++ b/docs/guides/index.md @@ -27,5 +27,5 @@ Use these guides to learn Memoh from the product workflow side. They assume you ## Other Documentation Areas -- **[Integrations](/integrations/)**: Connect channels and providers. -- **[Self-hosted](/self-hosted/)**: Deploy and operate your own Memoh instance. +- **[Integrations](/integrations)**: Connect channels and providers. +- **[Self-hosted](/self-hosted)**: Deploy and operate your own Memoh instance. diff --git a/docs/guides/mcp.md b/docs/guides/mcp.md index e87cee9..c490556 100644 --- a/docs/guides/mcp.md +++ b/docs/guides/mcp.md @@ -6,7 +6,7 @@ Memoh fully supports the **Model Context Protocol (MCP)**, allowing you to conne MCP provides a standardized way for bots to access external data sources and tools. Each Bot can have its own independent set of MCP connections. -You can configure connections manually from the **MCP** tab, or start from a curated template in **[Supermarket](/guides/supermarket.md)** and then review the prefilled draft in the bot editor. +You can configure connections manually from the **MCP** tab, or start from a curated template in **[Supermarket](/guides/supermarket)** and then review the prefilled draft in the bot editor. --- diff --git a/docs/guides/memory.md b/docs/guides/memory.md index 2955927..41a5a94 100644 --- a/docs/guides/memory.md +++ b/docs/guides/memory.md @@ -6,7 +6,7 @@ Memoh's structured long-term memory system allows bots to remember information a Before using the **Memory** tab, make sure your bot already has a **Memory Provider** configured. -1. Create a provider from one of the [Memory Providers](/integrations/providers/memory/index.md) (Built-in, Mem0, or OpenViking). +1. Create a provider from one of the [Memory Providers](/integrations/providers/memory) (Built-in, Mem0, or OpenViking). 2. Open your bot's **General** tab. 3. Select the provider in the **Memory Provider** field. 4. Click **Save**. @@ -110,5 +110,5 @@ If you are trying to shorten the currently active conversation history, use **Co - The bot automatically searches and retrieves memories during chat. - The assigned **Memory Provider** controls the memory backend used by the bot. -- Provider-specific settings (such as memory mode, embedding model, or API keys) are configured in the provider itself — see [Memory Providers](/integrations/providers/memory/index.md). +- Provider-specific settings (such as memory mode, embedding model, or API keys) are configured in the provider itself — see [Memory Providers](/integrations/providers/memory). - Memories provide the long-term knowledge that makes each bot unique to its owner. diff --git a/docs/guides/plugins.md b/docs/guides/plugins.md index 6988c37..0724c74 100644 --- a/docs/guides/plugins.md +++ b/docs/guides/plugins.md @@ -100,7 +100,7 @@ When managed OAuth succeeds, Memoh refreshes the plugin status and enables the m ## Related Pages -- [Supermarket](/guides/supermarket.md) -- [Skills](/guides/skills.md) -- [MCP](/guides/mcp.md) -- [Bot Management](/guides/bot.md) +- [Supermarket](/guides/supermarket) +- [Skills](/guides/skills) +- [MCP](/guides/mcp) +- [Bot Management](/guides/bot) diff --git a/docs/guides/skills.md b/docs/guides/skills.md index 75d3f3c..58eda0b 100644 --- a/docs/guides/skills.md +++ b/docs/guides/skills.md @@ -1,6 +1,6 @@ # Bot Skills -Skills are reusable prompt modules that extend a bot's behavior, style, and tool-usage guidance. You manage them from the bot's **Skills** tab, and you can either write them yourself or install them from **[Supermarket](/guides/supermarket.md)**. +Skills are reusable prompt modules that extend a bot's behavior, style, and tool-usage guidance. You manage them from the bot's **Skills** tab, and you can either write them yourself or install them from **[Supermarket](/guides/supermarket)**. --- @@ -154,4 +154,4 @@ If a discovered skill is useful but you want to fully manage it in Memoh, adopt 2. Prefer clear names and short descriptions. 3. Use **Disable** before **Delete** if you are unsure. 4. Use **Adopt** for legacy skills you plan to keep. -5. Install reusable skills from **[Supermarket](/guides/supermarket.md)** instead of copy-pasting them repeatedly. +5. Install reusable skills from **[Supermarket](/guides/supermarket)** instead of copy-pasting them repeatedly. diff --git a/docs/guides/slash-commands.md b/docs/guides/slash-commands.md index d7c8681..79d7a02 100644 --- a/docs/guides/slash-commands.md +++ b/docs/guides/slash-commands.md @@ -38,7 +38,7 @@ Two commands are **top-level** instead of resource groups: ## Skill Activation And Quick Actions -Besides fixed commands, the slash system can activate the bot's [Skills](/guides/skills.md) on demand: +Besides fixed commands, the slash system can activate the bot's [Skills](/guides/skills) on demand: ```text / [optional prompt] diff --git a/docs/guides/supermarket.md b/docs/guides/supermarket.md index 611c812..481f257 100644 --- a/docs/guides/supermarket.md +++ b/docs/guides/supermarket.md @@ -8,13 +8,13 @@ The Web UI shows Supermarket under Settings with three tabs: - **Plugins** - **Skills** -**Connectors** comes first and is the default landing tab when the server has [Connect-It configured](/guides/connectors.md#requirements). Without Connect-It, the tab is hidden and **Plugins** is the default instead. +**Connectors** comes first and is the default landing tab when the server has [Connect-It configured](/guides/connectors#requirements). Without Connect-It, the tab is hidden and **Plugins** is the default instead. --- ## Connect A Service -The **Connectors** tab lists services a bot can connect through OAuth or an API key. Pick one, click **Connect**, select the target bot, and complete the authorization. The full flow — authentication methods, connection statuses, and how connector tools reach the bot — is documented in [Connectors](/guides/connectors.md). +The **Connectors** tab lists services a bot can connect through OAuth or an API key. Pick one, click **Connect**, select the target bot, and complete the authorization. The full flow — authentication methods, connection statuses, and how connector tools reach the bot — is documented in [Connectors](/guides/connectors). --- diff --git a/docs/index.md b/docs/index.md deleted file mode 100644 index 55e1f2e..0000000 --- a/docs/index.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Memoh Documentation ---- - -# Memoh Documentation - -Learn Memoh, connect external systems, or run your own deployment. - - diff --git a/docs/index.mdx b/docs/index.mdx new file mode 100644 index 0000000..3eefd43 --- /dev/null +++ b/docs/index.mdx @@ -0,0 +1,20 @@ +import { PageLink } from 'scalar-mdx-components' + +# Memoh Documentation + +Learn Memoh, connect external systems, or run your own deployment. + + + + + + diff --git a/docs/installation/desktop.md b/docs/installation/desktop.md deleted file mode 100644 index 0f77117..0000000 --- a/docs/installation/desktop.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/self-hosted/desktop](/self-hosted/desktop). diff --git a/docs/installation/docker.md b/docs/installation/docker.md deleted file mode 100644 index 3df6574..0000000 --- a/docs/installation/docker.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/self-hosted/docker](/self-hosted/docker). diff --git a/docs/installation/index.md b/docs/installation/index.md deleted file mode 100644 index 999ce55..0000000 --- a/docs/installation/index.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/self-hosted/](/self-hosted/). diff --git a/docs/installation/kata-containerd.md b/docs/installation/kata-containerd.md deleted file mode 100644 index a581aad..0000000 --- a/docs/installation/kata-containerd.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/self-hosted/kata-containerd](/self-hosted/kata-containerd). diff --git a/docs/installation/sqlite.md b/docs/installation/sqlite.md deleted file mode 100644 index 26b6028..0000000 --- a/docs/installation/sqlite.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/self-hosted/sqlite](/self-hosted/sqlite). diff --git a/docs/installation/workspace-backends.md b/docs/installation/workspace-backends.md deleted file mode 100644 index 7222294..0000000 --- a/docs/installation/workspace-backends.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/self-hosted/workspace-backends](/self-hosted/workspace-backends). diff --git a/docs/integrations/index.md b/docs/integrations/index.md index 1dbea7c..43ba3bd 100644 --- a/docs/integrations/index.md +++ b/docs/integrations/index.md @@ -6,7 +6,7 @@ Integrations connect Memoh to external systems. Use this section when you want a Channels make bots reachable outside the web app. -- **[Channels Overview](/integrations/channels/)**: Supported platforms and general setup flow. +- **[Channels Overview](/integrations/channels)**: Supported platforms and general setup flow. - **[Slack](/integrations/channels/slack)**, **[Telegram](/integrations/channels/telegram)**, **[Feishu](/integrations/channels/feishu)**, **[Discord](/integrations/channels/discord)**, **[WeChat](/integrations/channels/weixin)**, and more. ## Providers @@ -14,10 +14,10 @@ Channels make bots reachable outside the web app. Providers connect Memoh to external capability backends. - **[LLM Providers](/integrations/providers/llm)**: Configure upstream APIs, client types, and model roles. -- **[Memory Providers](/integrations/providers/memory/)**: Choose built-in memory, Mem0, or OpenViking. -- **[TTS Providers](/integrations/providers/tts/)**: Configure speech synthesis providers and models. +- **[Memory Providers](/integrations/providers/memory)**: Choose built-in memory, Mem0, or OpenViking. +- **[TTS Providers](/integrations/providers/tts)**: Configure speech synthesis providers and models. - **[Web Search Providers](/integrations/providers/web-search)**: Configure search provider access. ## Product Guides -After integrations are configured, use **[Guides](/guides/)** for bot setup, sessions, memory operations, tools, and daily workflows. +After integrations are configured, use **[Guides](/guides)** for bot setup, sessions, memory operations, tools, and daily workflows. diff --git a/docs/integrations/providers/index.md b/docs/integrations/providers/index.md index 8684c4b..a2cc8f8 100644 --- a/docs/integrations/providers/index.md +++ b/docs/integrations/providers/index.md @@ -5,8 +5,8 @@ Providers connect Memoh to external capability backends. Configure them before a ## Provider Types - **[LLM Providers](/integrations/providers/llm)**: Chat, embedding, image, and related model configuration. -- **[Memory Providers](/integrations/providers/memory/)**: Long-term memory storage and retrieval backends. -- **[TTS Providers](/integrations/providers/tts/)**: Speech synthesis providers and voices. +- **[Memory Providers](/integrations/providers/memory)**: Long-term memory storage and retrieval backends. +- **[TTS Providers](/integrations/providers/tts)**: Speech synthesis providers and voices. - **[Web Search Providers](/integrations/providers/web-search)**: Search providers used by web access tools. For product-level usage after provider setup, see **[Bot](/guides/bot)** and **[Memory](/guides/memory)**. diff --git a/docs/integrations/providers/llm.md b/docs/integrations/providers/llm.mdx similarity index 93% rename from docs/integrations/providers/llm.md rename to docs/integrations/providers/llm.mdx index a2be8e4..cec1787 100644 --- a/docs/integrations/providers/llm.md +++ b/docs/integrations/providers/llm.mdx @@ -1,3 +1,5 @@ +import { Callout } from 'scalar-mdx-components' + # Providers And Models To use Memoh effectively, you usually configure: @@ -7,7 +9,7 @@ To use Memoh effectively, you usually configure: - optional **speech providers** if you want text-to-speech - optional **transcription providers** if you want speech-to-text -The Web UI manages chat and embedding providers/models from the **Models** page. Speech models are managed from [TTS Providers](/integrations/providers/tts/index.md), and transcription models are managed from the Transcription settings page. +The Web UI manages chat and embedding providers/models from the **Models** page. Speech models are managed from [TTS Providers](/integrations/providers/tts), and transcription models are managed from the Transcription settings page. --- @@ -70,7 +72,7 @@ Memoh currently supports these client types: | `microsoft-speech` | Microsoft speech providers | | `google-transcription` | Google transcription providers | -Speech and transcription client types are for audio workflows, not for chat. Configure speech through [TTS Providers](/integrations/providers/tts/index.md) and transcription through the Transcription settings page. Exact model and voice availability depends on the configured provider template and upstream account. +Speech and transcription client types are for audio workflows, not for chat. Configure speech through [TTS Providers](/integrations/providers/tts) and transcription through the Transcription settings page. Exact model and voice availability depends on the configured provider template and upstream account. --- @@ -100,9 +102,11 @@ This is a good fit when you want Codex-style model access for coding-oriented wo GitHub Copilot is especially useful if you already have access to Copilot-backed chat and embedding models and want to reuse that access from Memoh. -::: warning Upgrade note -Copilot credentials used to be stored per user. They are now a single provider-level credential, the same as Codex. After upgrading an existing deployment, re-authorize the Copilot provider once. -::: + + **Upgrade note** + + Copilot credentials used to be stored per user. They are now a single provider-level credential, the same as Codex. After upgrading an existing deployment, re-authorize the Copilot provider once. + ### Managed Model Catalogs @@ -151,7 +155,7 @@ Memoh distinguishes four model types: Important distinction: - The **Models** page is primarily where you manage `chat` and `embedding` models. -- `speech` models are exposed through [TTS Providers](/integrations/providers/tts/index.md). +- `speech` models are exposed through [TTS Providers](/integrations/providers/tts). - `transcription` models are exposed through the Transcription settings page. --- @@ -216,7 +220,7 @@ Use embedding models with memory providers or any feature that relies on vector ## Speech And Transcription Models -Speech models are managed from [TTS Providers](/integrations/providers/tts/index.md), not from the standard chat provider flow. +Speech models are managed from [TTS Providers](/integrations/providers/tts), not from the standard chat provider flow. Current speech provider categories include: @@ -257,5 +261,5 @@ You do not need to force one model to do everything. ## Next Steps - To assign chat, image, memory, and TTS settings to a bot, see [Bot Management](/guides/bot). -- To configure speech providers and speech models, see [TTS Providers](/integrations/providers/tts/index.md). +- To configure speech providers and speech models, see [TTS Providers](/integrations/providers/tts). - To configure speech-to-text, open the Transcription settings page in the Web UI. diff --git a/docs/integrations/providers/memory/builtin.md b/docs/integrations/providers/memory/builtin.md index 7da697f..4a980a0 100644 --- a/docs/integrations/providers/memory/builtin.md +++ b/docs/integrations/providers/memory/builtin.md @@ -115,4 +115,4 @@ Once a memory provider is assigned to the bot, you can manage actual memories fr - Search, edit, and delete memories - Compact or rebuild the memory store -For day-to-day memory operations, continue with [Bot Memory Management](/guides/memory.md). +For day-to-day memory operations, continue with [Bot Memory Management](/guides/memory). diff --git a/docs/integrations/providers/memory/index.md b/docs/integrations/providers/memory/index.md index 9b710a7..c09568d 100644 --- a/docs/integrations/providers/memory/index.md +++ b/docs/integrations/providers/memory/index.md @@ -6,9 +6,9 @@ Memoh uses a **Memory Provider** to define how a bot stores, retrieves, and mana Memoh supports the following memory providers: -- [Built-in](/integrations/providers/memory/builtin.md): The default memory system included with Memoh. Supports three modes — off (file-based), sparse (neural sparse vectors), and dense (embedding-based semantic search). Fully self-hosted. -- [Mem0](/integrations/providers/memory/mem0.md): SaaS memory provider via the Mem0 API. Requires an API key. -- [OpenViking](/integrations/providers/memory/openviking.md): Self-hosted or SaaS memory provider with its own API. +- [Built-in](/integrations/providers/memory/builtin): The default memory system included with Memoh. Supports three modes — off (file-based), sparse (neural sparse vectors), and dense (embedding-based semantic search). Fully self-hosted. +- [Mem0](/integrations/providers/memory/mem0): SaaS memory provider via the Mem0 API. Requires an API key. +- [OpenViking](/integrations/providers/memory/openviking): Self-hosted or SaaS memory provider with its own API. --- @@ -24,7 +24,7 @@ Memoh supports the following memory providers: ## Next Steps -- [Built-in Memory Provider](/integrations/providers/memory/builtin.md) — Default, self-hosted with three memory modes. -- [Mem0 Memory Provider](/integrations/providers/memory/mem0.md) — SaaS via Mem0 API. -- [OpenViking Memory Provider](/integrations/providers/memory/openviking.md) — Self-hosted or SaaS. -- [Bot Memory Management](/guides/memory.md) — Manage memory entries after the provider is assigned. +- [Built-in Memory Provider](/integrations/providers/memory/builtin) — Default, self-hosted with three memory modes. +- [Mem0 Memory Provider](/integrations/providers/memory/mem0) — SaaS via Mem0 API. +- [OpenViking Memory Provider](/integrations/providers/memory/openviking) — Self-hosted or SaaS. +- [Bot Memory Management](/guides/memory) — Manage memory entries after the provider is assigned. diff --git a/docs/integrations/providers/memory/mem0.md b/docs/integrations/providers/memory/mem0.md index cf762a7..887c006 100644 --- a/docs/integrations/providers/memory/mem0.md +++ b/docs/integrations/providers/memory/mem0.md @@ -42,4 +42,4 @@ After creating a provider, select it from the list and configure its settings. Once assigned, the bot will use Mem0 as its memory backend. Memory extraction, search, and management operations are routed through the Mem0 API. -For day-to-day memory operations, see [Bot Memory Management](/guides/memory.md). +For day-to-day memory operations, see [Bot Memory Management](/guides/memory). diff --git a/docs/integrations/providers/memory/openviking.md b/docs/integrations/providers/memory/openviking.md index 8dc5ce7..07ca2a5 100644 --- a/docs/integrations/providers/memory/openviking.md +++ b/docs/integrations/providers/memory/openviking.md @@ -40,4 +40,4 @@ After creating a provider, select it from the list and configure its settings. Once assigned, the bot will use OpenViking as its memory backend. Memory extraction, search, and management operations are routed through the OpenViking API. -For day-to-day memory operations, see [Bot Memory Management](/guides/memory.md). +For day-to-day memory operations, see [Bot Memory Management](/guides/memory). diff --git a/docs/integrations/providers/tts/index.md b/docs/integrations/providers/tts/index.md index 46c2648..a36ea71 100644 --- a/docs/integrations/providers/tts/index.md +++ b/docs/integrations/providers/tts/index.md @@ -24,7 +24,7 @@ Memoh supports **Text-to-Speech (TTS)** so bots can synthesize spoken audio from | Provider | Description | |----------|-------------| -| [Edge TTS](/integrations/providers/tts/edge.md) | Free, uses Microsoft Edge's public read-aloud API. 256+ voices across 50+ languages. No API key required. | +| [Edge TTS](/integrations/providers/tts/edge) | Free, uses Microsoft Edge's public read-aloud API. 256+ voices across 50+ languages. No API key required. | | OpenAI-compatible speech | Uses OpenAI-compatible speech APIs when configured with a matching provider template and credentials. | | OpenRouter Speech | Uses OpenRouter speech-capable routes when available to the configured account. | | ElevenLabs Speech | Uses ElevenLabs text-to-speech models and voices. | @@ -42,5 +42,5 @@ Transcription is managed separately from TTS. Memoh also supports transcription ## Next Steps -- To set up the no-key Edge option, continue with [Edge TTS](/integrations/providers/tts/edge.md). +- To set up the no-key Edge option, continue with [Edge TTS](/integrations/providers/tts/edge). - To understand how audio provider client types relate to models, see [Providers And Models](/integrations/providers/llm). diff --git a/docs/integrations/providers/video.md b/docs/integrations/providers/video.md index 2475ca0..e03fd2c 100644 --- a/docs/integrations/providers/video.md +++ b/docs/integrations/providers/video.md @@ -54,5 +54,5 @@ If the workspace is unreachable when generation finishes, the task still complet ## Related Pages -- [Providers And Models](/integrations/providers/llm.md) -- [Bot Workspace Management](/guides/container.md) +- [Providers And Models](/integrations/providers/llm) +- [Bot Workspace Management](/guides/container) diff --git a/docs/memory-providers/builtin.md b/docs/memory-providers/builtin.md deleted file mode 100644 index c676527..0000000 --- a/docs/memory-providers/builtin.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/integrations/providers/memory/builtin](/integrations/providers/memory/builtin). diff --git a/docs/memory-providers/index.md b/docs/memory-providers/index.md deleted file mode 100644 index 562d298..0000000 --- a/docs/memory-providers/index.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/integrations/providers/memory/](/integrations/providers/memory/). diff --git a/docs/memory-providers/mem0.md b/docs/memory-providers/mem0.md deleted file mode 100644 index 45656f3..0000000 --- a/docs/memory-providers/mem0.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/integrations/providers/memory/mem0](/integrations/providers/memory/mem0). diff --git a/docs/memory-providers/openviking.md b/docs/memory-providers/openviking.md deleted file mode 100644 index 200d408..0000000 --- a/docs/memory-providers/openviking.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/integrations/providers/memory/openviking](/integrations/providers/memory/openviking). diff --git a/docs/self-hosted/desktop.md b/docs/self-hosted/desktop.md index 1d62cad..5467f71 100644 --- a/docs/self-hosted/desktop.md +++ b/docs/self-hosted/desktop.md @@ -45,7 +45,7 @@ Switching to a different server clears the local sign-in state, so you will auth ## Sharing this computer with bots -Desktop can register the machine it runs on as a **Computer** that server-side bots can work on, without running a separate runtime process. Enable **This computer**, give it a name, and Desktop keeps the connection alive in the background. See [Computers](/guides/computers.md) for the permission model and per-bot setup. +Desktop can register the machine it runs on as a **Computer** that server-side bots can work on, without running a separate runtime process. Enable **This computer**, give it a name, and Desktop keeps the connection alive in the background. See [Computers](/guides/computers) for the permission model and per-bot setup. ## Workspace behavior diff --git a/docs/self-hosted/docker.md b/docs/self-hosted/docker.md index c260b7a..115cc8f 100644 --- a/docs/self-hosted/docker.md +++ b/docs/self-hosted/docker.md @@ -4,9 +4,9 @@ Server Deploy is the self-hosted Memoh stack for always-on, multi-user or multi- This page documents the Docker Compose server deployment. For the native local client, see [Desktop Installation](/self-hosted/desktop). -The default Compose stack includes PostgreSQL, the main server with an explicit workspace backend and in-process AI agent, and the web UI. SQLite is also available for single-node server installs; see [SQLite deployment](/self-hosted/sqlite.md). +The default Compose stack includes PostgreSQL, the main server with an explicit workspace backend and in-process AI agent, and the web UI. SQLite is also available for single-node server installs; see [SQLite deployment](/self-hosted/sqlite). -The official Compose stack uses the `containerd` workspace backend. The server image starts an embedded containerd and mounts the runtime files needed by bot workspaces. For Docker Engine and Apple backends, see [Workspace backends](/self-hosted/workspace-backends.md). +The official Compose stack uses the `containerd` workspace backend. The server image starts an embedded containerd and mounts the runtime files needed by bot workspaces. For Docker Engine and Apple backends, see [Workspace backends](/self-hosted/workspace-backends). ## Service Architecture @@ -19,7 +19,7 @@ The Docker Compose stack consists of multiple services. Some are always started, | **postgres** | *(core)* | PostgreSQL database | | **qdrant** | `qdrant` | Qdrant vector database for memory search (sparse and dense modes) | | **sparse** | `sparse` | Neural sparse encoding service for memory retrieval (see below) | -| **connect-it** | `connectors` | Co-hosted [Connect-It](https://github.com/memohai/connect-it) service backing bot [connectors](/guides/connectors.md) (see below) | +| **connect-it** | `connectors` | Co-hosted [Connect-It](https://github.com/memohai/connect-it) service backing bot [connectors](/guides/connectors) (see below) | ### Sparse Service @@ -45,11 +45,11 @@ Enable the sparse profile (`--profile sparse`) if you plan to use the built-in m docker compose --profile qdrant --profile sparse up -d ``` -For more details on memory modes, see [Built-in Memory Provider](/integrations/providers/memory/builtin.md). +For more details on memory modes, see [Built-in Memory Provider](/integrations/providers/memory/builtin). ### Connect-It Connectors -The **connect-it** container runs [Connect-It](https://github.com/memohai/connect-it), the service behind bot [connectors](/guides/connectors.md) — third-party service connections (GitHub, Notion, and so on) over OAuth or API keys. It shares the Memoh PostgreSQL instance under a separate `connect_it` schema and manages its own migrations. +The **connect-it** container runs [Connect-It](https://github.com/memohai/connect-it), the service behind bot [connectors](/guides/connectors) — third-party service connections (GitHub, Notion, and so on) over OAuth or API keys. It shares the Memoh PostgreSQL instance under a separate `connect_it` schema and manages its own migrations. The install script manages Connect-It end to end: @@ -193,7 +193,7 @@ Edit `config.toml` — at minimum change: - `auth.jwt_secret` — Generate with `openssl rand -base64 32` - `postgres.password` — Database password (also set `POSTGRES_PASSWORD` env var to match) -For SQLite, set `database.driver = "sqlite"` and use `docker-compose.sqlite.yml`. Details are in [SQLite deployment](/self-hosted/sqlite.md). +For SQLite, set `database.driver = "sqlite"` and use `docker-compose.sqlite.yml`. Details are in [SQLite deployment](/self-hosted/sqlite). Then start (recommended — with Qdrant and Sparse): @@ -211,7 +211,7 @@ POSTGRES_PASSWORD=your-db-password docker compose up -d > **Important**: `docker-compose.yml` mounts `./config.toml` by default. You must create this file before starting — running without it will fail. -To enable [connectors](/guides/connectors.md) in a manual deployment, generate the Connect-It credentials yourself and add the `connectors` profile: +To enable [connectors](/guides/connectors) in a manual deployment, generate the Connect-It credentials yourself and add the `connectors` profile: ```bash MEMOH_CONNECT_IT_BASE_URL="http://connect-it:8421" \ @@ -279,7 +279,7 @@ The `config.toml` file controls all server behavior. Here is a summary of the av | `[qdrant]` | Qdrant vector database connection (base_url, api_key, timeout) | | `[sparse]` | Sparse encoding service URL | | `[registry]` | Provider definitions directory | -| `[connect_it]` | Connect-It endpoint for [connectors](/guides/connectors.md) (`base_url`, `api_token`); both empty disables the feature. The Compose environment overrides these via `MEMOH_CONNECT_IT_BASE_URL` / `MEMOH_CONNECT_IT_API_TOKEN`. | +| `[connect_it]` | Connect-It endpoint for [connectors](/guides/connectors) (`base_url`, `api_token`); both empty disables the feature. The Compose environment overrides these via `MEMOH_CONNECT_IT_BASE_URL` / `MEMOH_CONNECT_IT_API_TOKEN`. | | `[web]` | Web frontend host and port | | `[agent]` | Tool output truncation limits: `tool_output_max_bytes` (default 65536), `tool_output_max_lines` (default 2000), `system_files_max_bytes` (default 32768). Oversized tool output keeps head and tail instead of being cut off blindly. | | `[session_runtime]` | Session-state backend for multi-instance deployments; see [Multi-Instance Deployments](#multi-instance-deployments) | diff --git a/docs/self-hosted/kata-containerd.md b/docs/self-hosted/kata-containerd.mdx similarity index 55% rename from docs/self-hosted/kata-containerd.md rename to docs/self-hosted/kata-containerd.mdx index 4bb0da3..278793d 100644 --- a/docs/self-hosted/kata-containerd.md +++ b/docs/self-hosted/kata-containerd.mdx @@ -1,12 +1,16 @@ +import { Callout } from 'scalar-mdx-components' + # Containerd + Kata (Removed) -::: danger Removed feature -Kata Containers support has been removed from Memoh. Current versions run workspace containers with standard containerd runtimes only, and the `[containerd].runtime_type` Kata setting, the `server-kata` image target, and the Kata compose overlays no longer exist. -::: + + **Removed feature** + + Kata Containers support has been removed from Memoh. Current versions run workspace containers with standard containerd runtimes only, and the `[containerd].runtime_type` Kata setting, the `server-kata` image target, and the Kata compose overlays no longer exist. + If you were running an older Memoh version with Kata workspaces: - Switch the deployment back to the standard `containerd` backend before upgrading. Workspace data itself lives in containerd snapshots and the data volume, not in the Kata runtime, so bots keep their files. - Remove Kata-specific compose overrides (`/dev/kvm` mounts, Kata shim mounts, `BRIDGE_TCP_ADDR` bridge settings) from your stack. -For current backend options, see [Workspace Backends](/self-hosted/workspace-backends.md). +For current backend options, see [Workspace Backends](/self-hosted/workspace-backends). diff --git a/docs/self-hosted/workspace-backends.md b/docs/self-hosted/workspace-backends.mdx similarity index 94% rename from docs/self-hosted/workspace-backends.md rename to docs/self-hosted/workspace-backends.mdx index ff92aed..abd8e1f 100644 --- a/docs/self-hosted/workspace-backends.md +++ b/docs/self-hosted/workspace-backends.mdx @@ -1,3 +1,5 @@ +import { Callout } from 'scalar-mdx-components' + # Workspace Backends Each Memoh bot works inside a workspace. A workspace may be an isolated container or, in trusted desktop/local scenarios, a host local directory. The backend decides where that workspace runs and which isolation, networking, snapshot, and display features are available. @@ -19,9 +21,11 @@ backend = "containerd" # containerd, docker, or apple The one-click Docker Compose server deploy uses `containerd`. That is intentional: the server image starts an embedded containerd and mounts the runtime files needed by bot workspaces. Use the other backends for manual deployments where you control the host runtime paths. -::: warning Kata Containers support removed -Older Memoh versions could run workspaces under Kata Containers via `[containerd].runtime_type`. That support has been removed — current versions use standard containerd runtimes only. -::: + + **Kata Containers support removed** + + Older Memoh versions could run workspaces under Kata Containers via `[containerd].runtime_type`. That support has been removed — current versions use standard containerd runtimes only. + ## Trusted local workspaces diff --git a/docs/tts-providers/edge.md b/docs/tts-providers/edge.md deleted file mode 100644 index d110f18..0000000 --- a/docs/tts-providers/edge.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/integrations/providers/tts/edge](/integrations/providers/tts/edge). diff --git a/docs/tts-providers/index.md b/docs/tts-providers/index.md deleted file mode 100644 index 2446d86..0000000 --- a/docs/tts-providers/index.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/integrations/providers/tts/](/integrations/providers/tts/). diff --git a/docs/zh/about.md b/docs/zh/about.md index bae1c47..b84ddde 100644 --- a/docs/zh/about.md +++ b/docs/zh/about.md @@ -38,7 +38,7 @@ Web UI 覆盖了更多日常操作:机器人设置、会话、供应商、渠 - **[机器人](/zh/guides/bot)** - 创建并配置机器人。 - **[供应商与模型](/zh/integrations/providers/llm)** - 配置模型访问。 -- **[渠道](/zh/integrations/channels/)** - 选择机器人出现的位置。 +- **[渠道](/zh/integrations/channels)** - 选择机器人出现的位置。 - **[插件](/zh/guides/plugins)** 和 **[Supermarket](/zh/guides/supermarket)** - 安装打包能力。 - **[计划任务](/zh/guides/schedule)** 和 **[访问控制](/zh/guides/access)** - 运维周期性工作和权限。 -- **[自托管](/zh/self-hosted/)** - 部署并维护自己的 Memoh 实例。 +- **[自托管](/zh/self-hosted)** - 部署并维护自己的 Memoh 实例。 diff --git a/docs/zh/channels/dingtalk.md b/docs/zh/channels/dingtalk.md deleted file mode 100644 index 1f3ac5e..0000000 --- a/docs/zh/channels/dingtalk.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/integrations/channels/dingtalk](/zh/integrations/channels/dingtalk). diff --git a/docs/zh/channels/discord.md b/docs/zh/channels/discord.md deleted file mode 100644 index 09d56fd..0000000 --- a/docs/zh/channels/discord.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/integrations/channels/discord](/zh/integrations/channels/discord). diff --git a/docs/zh/channels/feishu.md b/docs/zh/channels/feishu.md deleted file mode 100644 index 6380e18..0000000 --- a/docs/zh/channels/feishu.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/integrations/channels/feishu](/zh/integrations/channels/feishu). diff --git a/docs/zh/channels/index.md b/docs/zh/channels/index.md deleted file mode 100644 index e1c5144..0000000 --- a/docs/zh/channels/index.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/integrations/channels/](/zh/integrations/channels/). diff --git a/docs/zh/channels/matrix.md b/docs/zh/channels/matrix.md deleted file mode 100644 index f6c7e35..0000000 --- a/docs/zh/channels/matrix.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/integrations/channels/matrix](/zh/integrations/channels/matrix). diff --git a/docs/zh/channels/misskey.md b/docs/zh/channels/misskey.md deleted file mode 100644 index bc43c5b..0000000 --- a/docs/zh/channels/misskey.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/integrations/channels/misskey](/zh/integrations/channels/misskey). diff --git a/docs/zh/channels/qq.md b/docs/zh/channels/qq.md deleted file mode 100644 index 9c5f98f..0000000 --- a/docs/zh/channels/qq.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/integrations/channels/qq](/zh/integrations/channels/qq). diff --git a/docs/zh/channels/slack.md b/docs/zh/channels/slack.md deleted file mode 100644 index a1f2744..0000000 --- a/docs/zh/channels/slack.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/integrations/channels/slack](/zh/integrations/channels/slack). diff --git a/docs/zh/channels/telegram.md b/docs/zh/channels/telegram.md deleted file mode 100644 index ccde2f2..0000000 --- a/docs/zh/channels/telegram.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/integrations/channels/telegram](/zh/integrations/channels/telegram). diff --git a/docs/zh/channels/wechatoa.md b/docs/zh/channels/wechatoa.md deleted file mode 100644 index 7f3e33f..0000000 --- a/docs/zh/channels/wechatoa.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/integrations/channels/wechatoa](/zh/integrations/channels/wechatoa). diff --git a/docs/zh/channels/wecom.md b/docs/zh/channels/wecom.md deleted file mode 100644 index 2d0b997..0000000 --- a/docs/zh/channels/wecom.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/integrations/channels/wecom](/zh/integrations/channels/wecom). diff --git a/docs/zh/channels/weixin.md b/docs/zh/channels/weixin.md deleted file mode 100644 index a94f31e..0000000 --- a/docs/zh/channels/weixin.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/integrations/channels/weixin](/zh/integrations/channels/weixin). diff --git a/docs/zh/getting-started/access.md b/docs/zh/getting-started/access.md deleted file mode 100644 index 9eb100e..0000000 --- a/docs/zh/getting-started/access.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/guides/access](/zh/guides/access). diff --git a/docs/zh/getting-started/acp.md b/docs/zh/getting-started/acp.md deleted file mode 100644 index afb79bb..0000000 --- a/docs/zh/getting-started/acp.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/guides/acp](/zh/guides/acp). diff --git a/docs/zh/getting-started/bot.md b/docs/zh/getting-started/bot.md deleted file mode 100644 index 68235fe..0000000 --- a/docs/zh/getting-started/bot.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/guides/bot](/zh/guides/bot). diff --git a/docs/zh/getting-started/browser-computer-use.md b/docs/zh/getting-started/browser-computer-use.md deleted file mode 100644 index e73456f..0000000 --- a/docs/zh/getting-started/browser-computer-use.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/guides/browser-computer-use](/zh/guides/browser-computer-use). diff --git a/docs/zh/getting-started/channels.md b/docs/zh/getting-started/channels.md deleted file mode 100644 index e1c5144..0000000 --- a/docs/zh/getting-started/channels.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/integrations/channels/](/zh/integrations/channels/). diff --git a/docs/zh/getting-started/compaction.md b/docs/zh/getting-started/compaction.md deleted file mode 100644 index a8a7cd5..0000000 --- a/docs/zh/getting-started/compaction.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/guides/compaction](/zh/guides/compaction). diff --git a/docs/zh/getting-started/container.md b/docs/zh/getting-started/container.md deleted file mode 100644 index c7903ca..0000000 --- a/docs/zh/getting-started/container.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/guides/container](/zh/guides/container). diff --git a/docs/zh/getting-started/email.md b/docs/zh/getting-started/email.md deleted file mode 100644 index 449566b..0000000 --- a/docs/zh/getting-started/email.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/guides/email](/zh/guides/email). diff --git a/docs/zh/getting-started/files.md b/docs/zh/getting-started/files.md deleted file mode 100644 index c517cad..0000000 --- a/docs/zh/getting-started/files.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/guides/files](/zh/guides/files). diff --git a/docs/zh/getting-started/heartbeat.md b/docs/zh/getting-started/heartbeat.md deleted file mode 100644 index 3d16ebe..0000000 --- a/docs/zh/getting-started/heartbeat.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/guides/heartbeat](/zh/guides/heartbeat). diff --git a/docs/zh/getting-started/mcp.md b/docs/zh/getting-started/mcp.md deleted file mode 100644 index 2f60757..0000000 --- a/docs/zh/getting-started/mcp.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/guides/mcp](/zh/guides/mcp). diff --git a/docs/zh/getting-started/memory.md b/docs/zh/getting-started/memory.md deleted file mode 100644 index a9504dc..0000000 --- a/docs/zh/getting-started/memory.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/guides/memory](/zh/guides/memory). diff --git a/docs/zh/getting-started/plugins.md b/docs/zh/getting-started/plugins.md deleted file mode 100644 index e29bbb5..0000000 --- a/docs/zh/getting-started/plugins.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/guides/plugins](/zh/guides/plugins). diff --git a/docs/zh/getting-started/provider-and-model.md b/docs/zh/getting-started/provider-and-model.md deleted file mode 100644 index 6e053e6..0000000 --- a/docs/zh/getting-started/provider-and-model.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/integrations/providers/llm](/zh/integrations/providers/llm). diff --git a/docs/zh/getting-started/schedule.md b/docs/zh/getting-started/schedule.md deleted file mode 100644 index 815eaca..0000000 --- a/docs/zh/getting-started/schedule.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/guides/schedule](/zh/guides/schedule). diff --git a/docs/zh/getting-started/search-provider.md b/docs/zh/getting-started/search-provider.md deleted file mode 100644 index 1006c71..0000000 --- a/docs/zh/getting-started/search-provider.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/integrations/providers/web-search](/zh/integrations/providers/web-search). diff --git a/docs/zh/getting-started/sessions.md b/docs/zh/getting-started/sessions.md deleted file mode 100644 index 2c92838..0000000 --- a/docs/zh/getting-started/sessions.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/guides/sessions](/zh/guides/sessions). diff --git a/docs/zh/getting-started/skills.md b/docs/zh/getting-started/skills.md deleted file mode 100644 index 15b82f0..0000000 --- a/docs/zh/getting-started/skills.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/guides/skills](/zh/guides/skills). diff --git a/docs/zh/getting-started/slash-commands.md b/docs/zh/getting-started/slash-commands.md deleted file mode 100644 index 0ce87a8..0000000 --- a/docs/zh/getting-started/slash-commands.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/guides/slash-commands](/zh/guides/slash-commands). diff --git a/docs/zh/getting-started/supermarket.md b/docs/zh/getting-started/supermarket.md deleted file mode 100644 index 502d652..0000000 --- a/docs/zh/getting-started/supermarket.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/guides/supermarket](/zh/guides/supermarket). diff --git a/docs/zh/guides/acp.md b/docs/zh/guides/acp.md index c09ea00..839aaa0 100644 --- a/docs/zh/guides/acp.md +++ b/docs/zh/guides/acp.md @@ -90,7 +90,7 @@ ACP 工作使用 `acp_agent` 会话类型,由 Agents/ACP 工作流创建和管 ## 相关页面 -- [机器人](/zh/guides/bot.md) -- [会话](/zh/guides/sessions.md) -- [文件](/zh/guides/files.md) -- [提供方与模型](/zh/integrations/providers/llm.md) +- [机器人](/zh/guides/bot) +- [会话](/zh/guides/sessions) +- [文件](/zh/guides/files) +- [提供方与模型](/zh/integrations/providers/llm) diff --git a/docs/zh/guides/bot.md b/docs/zh/guides/bot.md index 5f34866..0127358 100644 --- a/docs/zh/guides/bot.md +++ b/docs/zh/guides/bot.md @@ -55,11 +55,11 @@ Files、Terminal、Display、Browser 这些 workspace 工具在聊天 workspace 若这些资源还没有,先建好: - [供应商与模型](/zh/integrations/providers/llm) -- [内置记忆提供方](/zh/integrations/providers/memory/builtin.md)(如用) +- [内置记忆提供方](/zh/integrations/providers/memory/builtin)(如用) - [搜索提供方](/zh/integrations/providers/web-search) -- [TTS 提供方](/zh/integrations/providers/tts/index) -- [Agents / ACP](/zh/guides/acp.md) -- [插件](/zh/guides/plugins.md) +- [TTS 提供方](/zh/integrations/providers/tts) +- [Agents / ACP](/zh/guides/acp) +- [插件](/zh/guides/plugins) --- @@ -81,8 +81,8 @@ Files、Terminal、Display、Browser 这些 workspace 工具在聊天 workspace 注意: - **生图模型** 故意与主聊天模型分开,好单独换「更擅长出图」的。 -- **TTS** 在 [TTS 提供方](/zh/integrations/providers/tts/index.md) 里用所配置语音提供方的 `speech` 模型。 -- `context_window` 会影响状态栏展示和 [会话压缩](/zh/guides/compaction.md) 的体感。 +- **TTS** 在 [TTS 提供方](/zh/integrations/providers/tts) 里用所配置语音提供方的 `speech` 模型。 +- `context_window` 会影响状态栏展示和 [会话压缩](/zh/guides/compaction) 的体感。 --- @@ -109,7 +109,7 @@ Files、Terminal、Display、Browser 这些 workspace 工具在聊天 workspace | **Compaction Ratio** | 压多狠 | | **Compaction Model** | 可选,专门做摘要的模型 | -细节见 [会话上下文压缩](/zh/guides/compaction.md)。 +细节见 [会话上下文压缩](/zh/guides/compaction)。 --- @@ -117,7 +117,7 @@ Files、Terminal、Display、Browser 这些 workspace 工具在聊天 workspace 创建时先给一个 **ACL 预设**,之后在 **Access** 里微调。**预设** 给一版默认策略,**Default Effect** 管「没命中规则时」放行还是挡。 -[会话](/zh/guides/sessions.md) 与 Discuss 的默认行为在那一页。若你用 API/自动化,配置里还可能有 `discuss_probe_model_id` 等进阶项,日常创建不必先动。 +[会话](/zh/guides/sessions) 与 Discuss 的默认行为在那一页。若你用 API/自动化,配置里还可能有 `discuss_probe_model_id` 等进阶项,日常创建不必先动。 --- @@ -129,7 +129,7 @@ Workspace 文件和终端在聊天 workspace UI 里使用;前提是该机器 - 打开 workspace 内的终端会话 - 在开启 display 后使用浏览器/桌面相关工具 -文件流程见 [文件](/zh/guides/files.md),有头浏览器和桌面操作见 [Browser / Computer Use](/zh/guides/browser-computer-use.md)。 +文件流程见 [文件](/zh/guides/files),有头浏览器和桌面操作见 [Browser / Computer Use](/zh/guides/browser-computer-use)。 --- diff --git a/docs/zh/guides/browser-computer-use.md b/docs/zh/guides/browser-computer-use.md index 1b8bc7e..b87679d 100644 --- a/docs/zh/guides/browser-computer-use.md +++ b/docs/zh/guides/browser-computer-use.md @@ -47,7 +47,7 @@ Computer Use 依赖容器内 `/opt/memoh/toolkit/display/bin/a11y-cli` 以及 wo 这些是 workspace runtime 能力,不是用来自动化 Electron 桌面 App 本身的。 -机器人挂了远程[电脑](/zh/guides/computers.md)时,Browser Use / Computer Use 也仍然在**服务器工作区**里跑,不跟随所选使用位置。 +机器人挂了远程[电脑](/zh/guides/computers)时,Browser Use / Computer Use 也仍然在**服务器工作区**里跑,不跟随所选使用位置。 ## 相关页面 diff --git a/docs/zh/guides/compaction.md b/docs/zh/guides/compaction.md index 0594e45..9a18114 100644 --- a/docs/zh/guides/compaction.md +++ b/docs/zh/guides/compaction.md @@ -2,7 +2,7 @@ **上下文压缩**只针对**当前这一会话**:把早先轮次压成摘要,让后面模型调用时带的**活跃窗口**小一点。 -这和**改记忆库里存的长记忆**不是一码事。要动存储条目,看 [长期记忆](/zh/guides/memory.md)。 +这和**改记忆库里存的长记忆**不是一码事。要动存储条目,看 [长期记忆](/zh/guides/memory)。 --- @@ -14,7 +14,7 @@ - 后台没追上、涨过约 **75%**:下一轮发送前**同步**压。 - 两条路都把原始历史压回窗口约 **40%**。 -唯一的真前提:聊天模型必须在模型设置里声明 `context_window`。没有它,自动策略没有预算基准,**永远不会触发**。见 [提供方与模型](/zh/integrations/providers/llm.md)。 +唯一的真前提:聊天模型必须在模型设置里声明 `context_window`。没有它,自动策略没有预算基准,**永远不会触发**。见 [提供方与模型](/zh/integrations/providers/llm)。 默认值变更之前建的机器人保留原有设置、按原语义跑(见下面的 legacy 模式)。 @@ -110,6 +110,6 @@ Memoh 拿当前 chat 模型的 `context_window` 对照本会话,网页状态 ## 接下来 -- 会话、Discuss:[会话](/zh/guides/sessions.md) -- 斜杠与 `/compact`:[斜杠命令](/zh/guides/slash-commands.md) -- 长期记忆维护:[长期记忆](/zh/guides/memory.md) +- 会话、Discuss:[会话](/zh/guides/sessions) +- 斜杠与 `/compact`:[斜杠命令](/zh/guides/slash-commands) +- 长期记忆维护:[长期记忆](/zh/guides/memory) diff --git a/docs/zh/guides/computers.md b/docs/zh/guides/computers.mdx similarity index 85% rename from docs/zh/guides/computers.md rename to docs/zh/guides/computers.mdx index 9ded1e0..239af5d 100644 --- a/docs/zh/guides/computers.md +++ b/docs/zh/guides/computers.mdx @@ -1,3 +1,5 @@ +import { Callout } from 'scalar-mdx-components' + # 电脑(远程 Runtime) 可以把你自己的电脑接进 Memoh 部署,让机器人在上面干活:读写文件、跑命令。Web UI 里这叫**电脑**(Computers);机器人这边以**使用位置**(Work locations)的形式在它们之间选。 @@ -6,9 +8,11 @@ Agent 本体不挪窝。模型调用、聊天、会话、记忆全在 Memoh serv 连接方向是电脑**主动连 server** 的 WebSocket。电脑不需要公网 IP、不需要开端口,在 NAT 后面也行。 -::: danger 想清楚你在共享什么 -接入的电脑暴露的是跑 runtime 的那个系统用户能访问的文件,命令也**以该用户身份**执行。没有目录沙箱:那个用户碰得到的,有权限的机器人就碰得到。只有你明确添加了这台电脑的机器人才能用它,写/执行默认也要审批——但心态上要按"给了个 shell"来对待。 -::: + + **想清楚你在共享什么** + + 接入的电脑暴露的是跑 runtime 的那个系统用户能访问的文件,命令也**以该用户身份**执行。没有目录沙箱:那个用户碰得到的,有权限的机器人就碰得到。只有你明确添加了这台电脑的机器人才能用它,写/执行默认也要审批——但心态上要按"给了个 shell"来对待。 + --- @@ -72,6 +76,6 @@ Memoh Desktop 内置了这个能力:打开**这台电脑**开关、起个名 ## 相关页面 -- [Workspace](/zh/guides/container.md) -- [Browser / Computer Use](/zh/guides/browser-computer-use.md) -- [自托管总览](/zh/self-hosted/index.md) +- [Workspace](/zh/guides/container) +- [Browser / Computer Use](/zh/guides/browser-computer-use) +- [自托管总览](/zh/self-hosted) diff --git a/docs/zh/guides/connectors.md b/docs/zh/guides/connectors.md index e9967ff..e9ba6ca 100644 --- a/docs/zh/guides/connectors.md +++ b/docs/zh/guides/connectors.md @@ -18,7 +18,7 @@ api_token = "" # 服务端之间的可信 token 两项留空即关闭该功能。线上环境建议用对应的环境变量(`MEMOH_CONNECT_IT_BASE_URL`、`MEMOH_CONNECT_IT_API_TOKEN`)。 -一键 Server Deploy 会在全新安装时自动带起一个同机部署的 Connect-It,见 [Server Deploy](/zh/self-hosted/docker.md#connect-it-连接器)。没配置 Connect-It 时,超市不会显示 **Connectors** tab,连接器相关操作会提示服务器未配置连接器。 +一键 Server Deploy 会在全新安装时自动带起一个同机部署的 Connect-It,见 [Server Deploy](/zh/self-hosted/docker#connect-it-连接器)。没配置 Connect-It 时,超市不会显示 **Connectors** tab,连接器相关操作会提示服务器未配置连接器。 --- @@ -67,6 +67,6 @@ OAuth 授权中途放弃的话,这条连接会一直停在 **Waiting for autho ## 相关页面 -- [超市](/zh/guides/supermarket.md) —— 发现和连接服务的入口。 -- [MCP](/zh/guides/mcp.md) —— 直接管理 MCP 连接。 -- [Server Deploy](/zh/self-hosted/docker.md#connect-it-连接器) —— 同机部署 Connect-It、凭据管理和 OAuth 回调地址。 +- [超市](/zh/guides/supermarket) —— 发现和连接服务的入口。 +- [MCP](/zh/guides/mcp) —— 直接管理 MCP 连接。 +- [Server Deploy](/zh/self-hosted/docker#connect-it-连接器) —— 同机部署 Connect-It、凭据管理和 OAuth 回调地址。 diff --git a/docs/zh/guides/container.md b/docs/zh/guides/container.md index b85e29f..1c9a7d4 100644 --- a/docs/zh/guides/container.md +++ b/docs/zh/guides/container.md @@ -14,7 +14,7 @@ workspace toolkit 自带 **Node.js** 和 **Python** 两套运行时(`pip`、`uv` 都在 PATH 上),机器人跑 Python 脚本、装包不用先折腾解释器。 -机器人还可以在 server workspace 之外、你接入的机器上干活——见 [电脑(远程 Runtime)](/zh/guides/computers.md)。 +机器人还可以在 server workspace 之外、你接入的机器上干活——见 [电脑(远程 Runtime)](/zh/guides/computers)。 底层容器 runtime 由 `config.toml` 的 `[container].backend` 决定,trusted local workspace 另行控制。官方 Docker Compose Server Deploy 使用 `containerd`;Docker Engine、Apple 和 local workspace 的差异见 [Workspace backend](/zh/self-hosted/workspace-backends)。 diff --git a/docs/zh/guides/email.md b/docs/zh/guides/email.mdx similarity index 80% rename from docs/zh/guides/email.md rename to docs/zh/guides/email.mdx index ad2fd4a..d504e09 100644 --- a/docs/zh/guides/email.md +++ b/docs/zh/guides/email.mdx @@ -1,3 +1,5 @@ +import { Callout } from 'scalar-mdx-components' + # 邮件 让机器人**收/发**邮件,分两步:**邮服提供方** + 机器人上的 **Email 绑定**。 @@ -15,9 +17,11 @@ 邮服提供方**按用户隔离**:每人配自己的、只看得见自己的,机器人绑定也只能用机器人所属用户自己的提供方。不同用户可以重名,互不冲突。 -::: tip Gmail OAuth -Gmail 类提供方的 OAuth 应用凭据(client ID / client secret)不再在界面里填——由部署方在 server 的 `conf/oauth-clients.toml` 里配一次。用户只走 Gmail 登录授权流程。 -::: + + **Gmail OAuth** + + Gmail 类提供方的 OAuth 应用凭据(client ID / client secret)不再在界面里填——由部署方在 server 的 `conf/oauth-clients.toml` 里配一次。用户只走 Gmail 登录授权流程。 + ### 新建 diff --git a/docs/zh/guides/hooks.md b/docs/zh/guides/hooks.md index 591bc64..238d420 100644 --- a/docs/zh/guides/hooks.md +++ b/docs/zh/guides/hooks.md @@ -294,6 +294,6 @@ Hooks 很强大。请把它们当成会在机器人 workspace 里运行的代码 ## 相关页面 -- [机器人](/zh/guides/bot.md) -- [插件](/zh/guides/plugins.md) -- [技能](/zh/guides/skills.md) +- [机器人](/zh/guides/bot) +- [插件](/zh/guides/plugins) +- [技能](/zh/guides/skills) diff --git a/docs/zh/guides/index.md b/docs/zh/guides/index.md index 14da19a..e16bba1 100644 --- a/docs/zh/guides/index.md +++ b/docs/zh/guides/index.md @@ -27,5 +27,5 @@ ## 其他文档区域 -- **[集成](/zh/integrations/)**:连接渠道和提供方。 -- **[自托管](/zh/self-hosted/)**:部署和运维自己的 Memoh 实例。 +- **[集成](/zh/integrations)**:连接渠道和提供方。 +- **[自托管](/zh/self-hosted)**:部署和运维自己的 Memoh 实例。 diff --git a/docs/zh/guides/mcp.md b/docs/zh/guides/mcp.md index c5aa6f0..1f55b71 100644 --- a/docs/zh/guides/mcp.md +++ b/docs/zh/guides/mcp.md @@ -4,7 +4,7 @@ Memoh 支持 **Model Context Protocol (MCP)**,让机器人接外部工具与 ## 在做什么 -MCP 把「外部数据、外部工具」用相对统一的方式接进来。你在机器人 **MCP** tab 里手配,或从 [超市](/zh/guides/supermarket.md) 装模板再进编辑器改。 +MCP 把「外部数据、外部工具」用相对统一的方式接进来。你在机器人 **MCP** tab 里手配,或从 [超市](/zh/guides/supermarket) 装模板再进编辑器改。 --- diff --git a/docs/zh/guides/memory.md b/docs/zh/guides/memory.md index 808c0f6..d61f16c 100644 --- a/docs/zh/guides/memory.md +++ b/docs/zh/guides/memory.md @@ -4,7 +4,7 @@ Memoh 的结构化长期记忆让机器人在**多路会话**里也能用上以 ## 先决条件 -1. 在 [记忆提供方](/zh/integrations/providers/memory/index.md) 里建一个(内置、Mem0、OpenViking 等)。 +1. 在 [记忆提供方](/zh/integrations/providers/memory) 里建一个(内置、Mem0、OpenViking 等)。 2. 打开机器人 **General**。 3. **Memory Provider** 里选中。 4. 保存。 @@ -17,7 +17,7 @@ Memoh 的结构化长期记忆让机器人在**多路会话**里也能用上以 记忆条目的存、取、搜都由当前提供方实现;按类型和模式,可能是文件索引、稀疏向量、稠密向量、或外接 API。用户发消息时,Memoh 会尝试取出相关记忆塞进当次上下文。 -本页说 **长期记忆**;**会话写太长** 要压短,是另一件事,见 [会话上下文压缩](/zh/guides/compaction.md)。 +本页说 **长期记忆**;**会话写太长** 要压短,是另一件事,见 [会话上下文压缩](/zh/guides/compaction)。 --- @@ -40,7 +40,7 @@ Memoh 的结构化长期记忆让机器人在**多路会话**里也能用上以 积累多了可以在 **Memory** tab 对**存储侧**做 **Compact**:合并重复、去陈旧、压噪声。有 **Ratio**、**Decay Days** 等参数。 -这和 [会话上下文压缩](/zh/guides/compaction.md) 不同:后者是**单路会话**里把 prompt 压短,不改库里长期记忆条目的存法与合并结果。 +这和 [会话上下文压缩](/zh/guides/compaction) 不同:后者是**单路会话**里把 prompt 压短,不改库里长期记忆条目的存法与合并结果。 --- @@ -70,12 +70,12 @@ Memoh 的结构化长期记忆让机器人在**多路会话**里也能用上以 | **上下文压缩** | 当前这一路会话 | 状态区或 `/compact` | 用摘要把**本会话**历史变短,给后面轮次用 | 要减「跨会话噪声」、整理记忆库 → 用 **记忆压缩**。 -要减「这一路聊太长了」→ 用 [会话上下文压缩](/zh/guides/compaction.md)。 +要减「这一路聊太长了」→ 用 [会话上下文压缩](/zh/guides/compaction)。 --- ## 和机器人的关系 - 聊的时候会按配置去搜记忆。 -- 具体用哪种后端、什么模式、embedding 等,在**提供方**上配,见 [记忆提供方](/zh/integrations/providers/memory/index.md)。 +- 具体用哪种后端、什么模式、embedding 等,在**提供方**上配,见 [记忆提供方](/zh/integrations/providers/memory)。 - 长期记忆是机器人「个性与事实」里很大一块来源。 diff --git a/docs/zh/guides/plugins.md b/docs/zh/guides/plugins.md index fb64339..b768bfb 100644 --- a/docs/zh/guides/plugins.md +++ b/docs/zh/guides/plugins.md @@ -100,7 +100,7 @@ Managed OAuth 成功后,Memoh 会刷新插件状态,并在插件进入 `read ## 相关页面 -- [Supermarket](/zh/guides/supermarket.md) -- [技能](/zh/guides/skills.md) -- [MCP](/zh/guides/mcp.md) -- [机器人](/zh/guides/bot.md) +- [Supermarket](/zh/guides/supermarket) +- [技能](/zh/guides/skills) +- [MCP](/zh/guides/mcp) +- [机器人](/zh/guides/bot) diff --git a/docs/zh/guides/sessions.md b/docs/zh/guides/sessions.md index c06036e..1611209 100644 --- a/docs/zh/guides/sessions.md +++ b/docs/zh/guides/sessions.md @@ -84,7 +84,7 @@ ACP Agent 会话不通过 `/new` 创建。要先在机器人详情的 **Agents** ## 状态区 -状态区和 `/status` 是同一份信息:本会话消息数、**上下文占用**(相对 `context_window`)、**缓存命中**、读写量、**本路用到的技能** 等。这里有 **立即压缩**,触发的是 [会话上下文压缩](/zh/guides/compaction.md),不是改记忆条目的那种。 +状态区和 `/status` 是同一份信息:本会话消息数、**上下文占用**(相对 `context_window`)、**缓存命中**、读写量、**本路用到的技能** 等。这里有 **立即压缩**,触发的是 [会话上下文压缩](/zh/guides/compaction),不是改记忆条目的那种。 --- diff --git a/docs/zh/guides/skills.md b/docs/zh/guides/skills.md index fc85384..01a2d8b 100644 --- a/docs/zh/guides/skills.md +++ b/docs/zh/guides/skills.md @@ -1,6 +1,6 @@ # 技能 -**技能**是可复用的提示模块,用来改机器人的语气、行为方式、工具使用习惯。在机器人的 **Skills** tab 里管;可手写,也可从 [超市](/zh/guides/supermarket.md) 装。 +**技能**是可复用的提示模块,用来改机器人的语气、行为方式、工具使用习惯。在机器人的 **Skills** tab 里管;可手写,也可从 [超市](/zh/guides/supermarket) 装。 --- @@ -127,4 +127,4 @@ Memoh 随 workspace 模板带了几个内置技能(如 `skill-creator`、`hook 1. 先少而精,名字和描述写清楚。 2. 不确定删不删时先 **Disable**。 3. 要长期留用的发现项用 **Adopt**。 -4. 能复用就从 [超市](/zh/guides/supermarket.md) 装,少复制粘贴多份。 +4. 能复用就从 [超市](/zh/guides/supermarket) 装,少复制粘贴多份。 diff --git a/docs/zh/guides/slash-commands.md b/docs/zh/guides/slash-commands.md index 9240356..7a92fb7 100644 --- a/docs/zh/guides/slash-commands.md +++ b/docs/zh/guides/slash-commands.md @@ -36,7 +36,7 @@ Memoh 支持 **斜杠命令**,在进 LLM 之前截获。用来快速看状态 ## 技能激活与快捷操作 -固定命令之外,斜杠还能按需激活机器人的[技能](/zh/guides/skills.md): +固定命令之外,斜杠还能按需激活机器人的[技能](/zh/guides/skills): ```text /<技能名> [可选的提示词] @@ -139,7 +139,7 @@ Memoh 支持 **斜杠命令**,在进 LLM 之前截获。用来快速看状态 **内置网页本地** 没有 `/new discuss`,要 discuss 请用 Telegram、Discord 等。 -细节见 [会话](/zh/guides/sessions.md)。 +细节见 [会话](/zh/guides/sessions)。 ### `/stop` @@ -313,7 +313,7 @@ Memoh 支持 **斜杠命令**,在进 LLM 之前截获。用来快速看状态 ## `/compact` -立刻对**当前会话**做 [会话上下文压缩](/zh/guides/compaction.md),**不是**改记忆库里条目的那种记忆压缩。 +立刻对**当前会话**做 [会话上下文压缩](/zh/guides/compaction),**不是**改记忆库里条目的那种记忆压缩。 | 动作 | 用法 | |------|------| diff --git a/docs/zh/guides/supermarket.md b/docs/zh/guides/supermarket.md index c19939f..659a695 100644 --- a/docs/zh/guides/supermarket.md +++ b/docs/zh/guides/supermarket.md @@ -8,13 +8,13 @@ Web UI 会在 Settings 下显示 Supermarket,提供三个 tab: - **Plugins** - **Skills** -服务器[配置了 Connect-It](/zh/guides/connectors.md#前提) 时,**Connectors** 排在第一个,也是默认落地的 tab;没配置时这个 tab 不显示,默认落在 **Plugins**。 +服务器[配置了 Connect-It](/zh/guides/connectors#前提) 时,**Connectors** 排在第一个,也是默认落地的 tab;没配置时这个 tab 不显示,默认落在 **Plugins**。 --- ## 连接一个服务 -**Connectors** tab 列出可以通过 OAuth 或 API Key 连给 Bot 的服务。挑一个点 **Connect**,选目标 Bot,完成授权即可。完整流程——认证方式、连接状态、工具怎么到 Bot 手上——见[连接器](/zh/guides/connectors.md)。 +**Connectors** tab 列出可以通过 OAuth 或 API Key 连给 Bot 的服务。挑一个点 **Connect**,选目标 Bot,完成授权即可。完整流程——认证方式、连接状态、工具怎么到 Bot 手上——见[连接器](/zh/guides/connectors)。 --- diff --git a/docs/zh/index.md b/docs/zh/index.md deleted file mode 100644 index 578ccee..0000000 --- a/docs/zh/index.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Memoh 中文文档 ---- - -# Memoh 中文文档 - -学习 Memoh、连接外部系统,或部署自己的服务。 - - diff --git a/docs/zh/index.mdx b/docs/zh/index.mdx new file mode 100644 index 0000000..96f0ba2 --- /dev/null +++ b/docs/zh/index.mdx @@ -0,0 +1,20 @@ +import { PageLink } from 'scalar-mdx-components' + +# Memoh 中文文档 + +学习 Memoh、连接外部系统,或部署自己的服务。 + + + + + + diff --git a/docs/zh/installation/desktop.md b/docs/zh/installation/desktop.md deleted file mode 100644 index 38d3a8c..0000000 --- a/docs/zh/installation/desktop.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/self-hosted/desktop](/zh/self-hosted/desktop). diff --git a/docs/zh/installation/docker.md b/docs/zh/installation/docker.md deleted file mode 100644 index 71546a5..0000000 --- a/docs/zh/installation/docker.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/self-hosted/docker](/zh/self-hosted/docker). diff --git a/docs/zh/installation/index.md b/docs/zh/installation/index.md deleted file mode 100644 index fff30c7..0000000 --- a/docs/zh/installation/index.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/self-hosted/](/zh/self-hosted/). diff --git a/docs/zh/installation/kata-containerd.md b/docs/zh/installation/kata-containerd.md deleted file mode 100644 index 5735bea..0000000 --- a/docs/zh/installation/kata-containerd.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/self-hosted/kata-containerd](/zh/self-hosted/kata-containerd). diff --git a/docs/zh/installation/sqlite.md b/docs/zh/installation/sqlite.md deleted file mode 100644 index 02fab86..0000000 --- a/docs/zh/installation/sqlite.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/self-hosted/sqlite](/zh/self-hosted/sqlite). diff --git a/docs/zh/installation/workspace-backends.md b/docs/zh/installation/workspace-backends.md deleted file mode 100644 index 177b92b..0000000 --- a/docs/zh/installation/workspace-backends.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/self-hosted/workspace-backends](/zh/self-hosted/workspace-backends). diff --git a/docs/zh/integrations/index.md b/docs/zh/integrations/index.md index f39a6ae..cdc27e8 100644 --- a/docs/zh/integrations/index.md +++ b/docs/zh/integrations/index.md @@ -6,7 +6,7 @@ 渠道让机器人可以在网页端之外被访问。 -- **[渠道总览](/zh/integrations/channels/)**:支持的平台和通用配置流程。 +- **[渠道总览](/zh/integrations/channels)**:支持的平台和通用配置流程。 - **[Slack](/zh/integrations/channels/slack)**、**[Telegram](/zh/integrations/channels/telegram)**、**[飞书](/zh/integrations/channels/feishu)**、**[Discord](/zh/integrations/channels/discord)**、**[微信](/zh/integrations/channels/weixin)** 等。 ## 提供方 @@ -14,10 +14,10 @@ 提供方把 Memoh 接到外部能力后端。 - **[LLM 提供方](/zh/integrations/providers/llm)**:配置上游 API、client type 和模型角色。 -- **[记忆提供方](/zh/integrations/providers/memory/)**:选择内置记忆、Mem0 或 OpenViking。 -- **[TTS 提供方](/zh/integrations/providers/tts/)**:配置语音合成提供方和模型。 +- **[记忆提供方](/zh/integrations/providers/memory)**:选择内置记忆、Mem0 或 OpenViking。 +- **[TTS 提供方](/zh/integrations/providers/tts)**:配置语音合成提供方和模型。 - **[搜索提供方](/zh/integrations/providers/web-search)**:配置搜索提供方接入。 ## 产品教程 -集成配置完成后,到 **[教程](/zh/guides/)** 查看机器人、会话、记忆操作、工具和日常工作流。 +集成配置完成后,到 **[教程](/zh/guides)** 查看机器人、会话、记忆操作、工具和日常工作流。 diff --git a/docs/zh/integrations/providers/index.md b/docs/zh/integrations/providers/index.md index 22de380..c6aa898 100644 --- a/docs/zh/integrations/providers/index.md +++ b/docs/zh/integrations/providers/index.md @@ -5,8 +5,8 @@ ## 提供方类型 - **[LLM 提供方](/zh/integrations/providers/llm)**:聊天、embedding、生图等模型配置。 -- **[记忆提供方](/zh/integrations/providers/memory/)**:长期记忆的存储和检索后端。 -- **[TTS 提供方](/zh/integrations/providers/tts/)**:语音合成提供方和音色。 +- **[记忆提供方](/zh/integrations/providers/memory)**:长期记忆的存储和检索后端。 +- **[TTS 提供方](/zh/integrations/providers/tts)**:语音合成提供方和音色。 - **[搜索提供方](/zh/integrations/providers/web-search)**:网页访问工具使用的搜索提供方。 配置完成后,产品侧使用方式见 **[机器人](/zh/guides/bot)** 和 **[长期记忆](/zh/guides/memory)**。 diff --git a/docs/zh/integrations/providers/llm.md b/docs/zh/integrations/providers/llm.mdx similarity index 91% rename from docs/zh/integrations/providers/llm.md rename to docs/zh/integrations/providers/llm.mdx index 02411a8..a05a22e 100644 --- a/docs/zh/integrations/providers/llm.md +++ b/docs/zh/integrations/providers/llm.mdx @@ -1,10 +1,12 @@ +import { Callout } from 'scalar-mdx-components' + # 供应商与模型 日常用 Memoh,多半要配好: - 一个或多个 **供应商**(怎么连上游 API) - 其下的 **模型** -- 若要朗读,再配 **语音合成**(见 [TTS](/zh/integrations/providers/tts/index.md)) +- 若要朗读,再配 **语音合成**(见 [TTS](/zh/integrations/providers/tts)) - 若要把语音转文字,再配 **语音转写** 聊天与 embedding 在 **Models** 页管理;语音合成模型在 TTS 流程里单走,语音转写模型在 Transcription 设置页管理。 @@ -68,7 +70,7 @@ | `microsoft-speech` | Microsoft 语音合成 | | `google-transcription` | Google 语音转写 | -语音合成与语音转写类型不能当主聊天用。语音合成走 [TTS 提供方](/zh/integrations/providers/tts/index.md),语音转写走 Transcription 设置页。具体模型、音色和语言取决于 provider 模板与上游账号。 +语音合成与语音转写类型不能当主聊天用。语音合成走 [TTS 提供方](/zh/integrations/providers/tts),语音转写走 Transcription 设置页。具体模型、音色和语言取决于 provider 模板与上游账号。 --- @@ -98,9 +100,11 @@ 你本来就有 Copilot 时,可复用进 Memoh。 -::: warning 升级提醒 -Copilot 凭据以前按用户存,现在和 Codex 一样是供应商级的一份。老部署升级后要把 Copilot 供应商**重新授权一次**。 -::: + + **升级提醒** + + Copilot 凭据以前按用户存,现在和 Codex 一样是供应商级的一份。老部署升级后要把 Copilot 供应商**重新授权一次**。 + ### 托管模型目录 @@ -136,7 +140,7 @@ Copilot 凭据以前按用户存,现在和 Codex 一样是供应商级的一 | `speech` | 朗读,挂在 TTS | | `transcription` | 语音转文字,挂在 Transcription | -**Models** 页主要管 chat / embedding;speech 在 [TTS](/zh/integrations/providers/tts/index.md),transcription 在 Transcription 设置页。 +**Models** 页主要管 chat / embedding;speech 在 [TTS](/zh/integrations/providers/tts),transcription 在 Transcription 设置页。 --- @@ -186,7 +190,7 @@ Memoh 用来: ## 语音合成与转写模型 -语音合成在 [TTS 提供方](/zh/integrations/providers/tts/index.md) 配,不跟普通 chat 供应商混流。当前语音合成类别包括: +语音合成在 [TTS 提供方](/zh/integrations/providers/tts) 配,不跟普通 chat 供应商混流。当前语音合成类别包括: - Edge:`edge-speech` - OpenAI 兼容:`openai-speech` @@ -224,6 +228,6 @@ Memoh 用来: ## 接下来 -- 给机器人绑聊天、生图、浏览器、记忆、朗读等:[机器人](/zh/guides/bot.md) -- 配语音提供方与语音模型:[TTS 提供方](/zh/integrations/providers/tts/index.md) +- 给机器人绑聊天、生图、浏览器、记忆、朗读等:[机器人](/zh/guides/bot) +- 配语音提供方与语音模型:[TTS 提供方](/zh/integrations/providers/tts) - 配语音转文字:打开 Web UI 的 Transcription 设置页 diff --git a/docs/zh/integrations/providers/memory/builtin.md b/docs/zh/integrations/providers/memory/builtin.md index 75ef858..c9ca4f2 100644 --- a/docs/zh/integrations/providers/memory/builtin.md +++ b/docs/zh/integrations/providers/memory/builtin.md @@ -99,4 +99,4 @@ base_url = "http://qdrant:6334" ## 配好之后 -在 **Memory** tab 可手建、从对话抽、搜、改、压、重建等。日常操作见 [长期记忆](/zh/guides/memory.md)。 +在 **Memory** tab 可手建、从对话抽、搜、改、压、重建等。日常操作见 [长期记忆](/zh/guides/memory)。 diff --git a/docs/zh/integrations/providers/memory/index.md b/docs/zh/integrations/providers/memory/index.md index 3293efb..7ced814 100644 --- a/docs/zh/integrations/providers/memory/index.md +++ b/docs/zh/integrations/providers/memory/index.md @@ -4,9 +4,9 @@ ## 有哪些 -- [内置](/zh/integrations/providers/memory/builtin.md):默认自带,可关、稀疏、稠密三档,全可自建。 -- [Mem0](/zh/integrations/providers/memory/mem0.md):走 Mem0 云 API,要密钥。 -- [OpenViking](/zh/integrations/providers/memory/openviking.md):自建或 SaaS,自有 API。 +- [内置](/zh/integrations/providers/memory/builtin):默认自带,可关、稀疏、稠密三档,全可自建。 +- [Mem0](/zh/integrations/providers/memory/mem0):走 Mem0 云 API,要密钥。 +- [OpenViking](/zh/integrations/providers/memory/openviking):自建或 SaaS,自有 API。 --- @@ -22,7 +22,7 @@ ## 接下来 -- [内置](/zh/integrations/providers/memory/builtin.md) -- [Mem0](/zh/integrations/providers/memory/mem0.md) -- [OpenViking](/zh/integrations/providers/memory/openviking.md) -- 条目级操作:[长期记忆](/zh/guides/memory.md) +- [内置](/zh/integrations/providers/memory/builtin) +- [Mem0](/zh/integrations/providers/memory/mem0) +- [OpenViking](/zh/integrations/providers/memory/openviking) +- 条目级操作:[长期记忆](/zh/guides/memory) diff --git a/docs/zh/integrations/providers/memory/mem0.md b/docs/zh/integrations/providers/memory/mem0.md index 5be1301..a94413b 100644 --- a/docs/zh/integrations/providers/memory/mem0.md +++ b/docs/zh/integrations/providers/memory/mem0.md @@ -33,4 +33,4 @@ ## 使用 -绑上后,抽取、搜索、管理都走 Mem0 API。日常见 [长期记忆](/zh/guides/memory.md)。 +绑上后,抽取、搜索、管理都走 Mem0 API。日常见 [长期记忆](/zh/guides/memory)。 diff --git a/docs/zh/integrations/providers/memory/openviking.md b/docs/zh/integrations/providers/memory/openviking.md index eaa91df..889e7dc 100644 --- a/docs/zh/integrations/providers/memory/openviking.md +++ b/docs/zh/integrations/providers/memory/openviking.md @@ -31,4 +31,4 @@ ## 使用 -绑上后,记忆相关 API 都走 OpenViking。日常见 [长期记忆](/zh/guides/memory.md)。 +绑上后,记忆相关 API 都走 OpenViking。日常见 [长期记忆](/zh/guides/memory)。 diff --git a/docs/zh/integrations/providers/tts/index.md b/docs/zh/integrations/providers/tts/index.md index 5cf3243..93461b3 100644 --- a/docs/zh/integrations/providers/tts/index.md +++ b/docs/zh/integrations/providers/tts/index.md @@ -23,7 +23,7 @@ Memoh 支持把字变成声音。可以分三层想: | 提供方 | 说明 | |--------|------| -| [Edge TTS](/zh/integrations/providers/tts/edge.md) | 走 Edge 公开朗读接口,无 key,多语音 | +| [Edge TTS](/zh/integrations/providers/tts/edge) | 走 Edge 公开朗读接口,无 key,多语音 | | OpenAI 兼容语音合成 | 使用 OpenAI 兼容的语音合成 API,需要匹配 provider 模板和凭据。 | | OpenRouter Speech | 使用 OpenRouter 可用的语音合成路线,具体取决于账号能力。 | | ElevenLabs Speech | 使用 ElevenLabs 语音合成模型和音色。 | @@ -41,5 +41,5 @@ Memoh 支持把字变成声音。可以分三层想: ## 接下来 -- 配无 key 的 Edge 选项:[Edge TTS](/zh/integrations/providers/tts/edge.md) +- 配无 key 的 Edge 选项:[Edge TTS](/zh/integrations/providers/tts/edge) - 了解音频 provider client type 与模型关系:[供应商与模型](/zh/integrations/providers/llm) diff --git a/docs/zh/integrations/providers/video.md b/docs/zh/integrations/providers/video.md index 707f261..cff526e 100644 --- a/docs/zh/integrations/providers/video.md +++ b/docs/zh/integrations/providers/video.md @@ -54,5 +54,5 @@ OpenRouter 支持 **Import Models** 在线拉模型列表;ModelArk 和火山 ## 相关页面 -- [提供方与模型](/zh/integrations/providers/llm.md) -- [Workspace](/zh/guides/container.md) +- [提供方与模型](/zh/integrations/providers/llm) +- [Workspace](/zh/guides/container) diff --git a/docs/zh/memory-providers/builtin.md b/docs/zh/memory-providers/builtin.md deleted file mode 100644 index d5e28ad..0000000 --- a/docs/zh/memory-providers/builtin.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/integrations/providers/memory/builtin](/zh/integrations/providers/memory/builtin). diff --git a/docs/zh/memory-providers/index.md b/docs/zh/memory-providers/index.md deleted file mode 100644 index f5bad3f..0000000 --- a/docs/zh/memory-providers/index.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/integrations/providers/memory/](/zh/integrations/providers/memory/). diff --git a/docs/zh/memory-providers/mem0.md b/docs/zh/memory-providers/mem0.md deleted file mode 100644 index 6a18a4a..0000000 --- a/docs/zh/memory-providers/mem0.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/integrations/providers/memory/mem0](/zh/integrations/providers/memory/mem0). diff --git a/docs/zh/memory-providers/openviking.md b/docs/zh/memory-providers/openviking.md deleted file mode 100644 index c0a65dc..0000000 --- a/docs/zh/memory-providers/openviking.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/integrations/providers/memory/openviking](/zh/integrations/providers/memory/openviking). diff --git a/docs/zh/self-hosted/desktop.md b/docs/zh/self-hosted/desktop.md index 85cfc67..b2a68f4 100644 --- a/docs/zh/self-hosted/desktop.md +++ b/docs/zh/self-hosted/desktop.md @@ -45,7 +45,7 @@ Desktop 也可以不用自己的本地后端,直接作为 [Server Deploy](/zh/ ## 把这台电脑共享给机器人 -Desktop 可以把它所在的这台机器注册成 server 侧机器人可用的**电脑**,不用另跑 runtime 进程:打开**这台电脑**开关、起个名字,Desktop 在后台维持连接。权限模型和按机器人的配置见 [电脑(远程 Runtime)](/zh/guides/computers.md)。 +Desktop 可以把它所在的这台机器注册成 server 侧机器人可用的**电脑**,不用另跑 runtime 进程:打开**这台电脑**开关、起个名字,Desktop 在后台维持连接。权限模型和按机器人的配置见 [电脑(远程 Runtime)](/zh/guides/computers)。 ## Workspace 行为 diff --git a/docs/zh/self-hosted/docker.md b/docs/zh/self-hosted/docker.md index eee53c2..6d620f8 100644 --- a/docs/zh/self-hosted/docker.md +++ b/docs/zh/self-hosted/docker.md @@ -4,9 +4,9 @@ Server Deploy 是 Memoh 的自托管服务端部署形态,适合长期在线 本页说明 Docker Compose 版 Server Deploy。要安装本地原生客户端,请看 [Desktop 桌面版](/zh/self-hosted/desktop)。 -默认编排里包含 PostgreSQL、主服务(显式配置 workspace backend,智能体也在同一进程)和网页前端。单机轻量 server 部署也可以用 SQLite,见 [SQLite 部署](/zh/self-hosted/sqlite.md)。 +默认编排里包含 PostgreSQL、主服务(显式配置 workspace backend,智能体也在同一进程)和网页前端。单机轻量 server 部署也可以用 SQLite,见 [SQLite 部署](/zh/self-hosted/sqlite)。 -官方 Compose 栈使用 `containerd` workspace backend。server 镜像会启动内置 containerd,并挂好机器人 workspace 需要的 runtime 文件。Docker Engine 和 Apple 后端见 [Workspace backend](/zh/self-hosted/workspace-backends.md)。 +官方 Compose 栈使用 `containerd` workspace backend。server 镜像会启动内置 containerd,并挂好机器人 workspace 需要的 runtime 文件。Docker Engine 和 Apple 后端见 [Workspace backend](/zh/self-hosted/workspace-backends)。 ## 服务结构 @@ -19,7 +19,7 @@ Compose 里有多组服务。有的默认就起,有的通过 `--profile` 打 | **postgres** | *(核心)* | PostgreSQL | | **qdrant** | `qdrant` | 向量库,给记忆检索用(稀疏/稠密) | | **sparse** | `sparse` | 神经稀疏编码,给记忆检索(见下) | -| **connect-it** | `connectors` | 同机部署的 [Connect-It](https://github.com/memohai/connect-it),支撑 Bot [连接器](/zh/guides/connectors.md)(见下) | +| **connect-it** | `connectors` | 同机部署的 [Connect-It](https://github.com/memohai/connect-it),支撑 Bot [连接器](/zh/guides/connectors)(见下) | ### sparse 服务 @@ -45,11 +45,11 @@ Compose 里有多组服务。有的默认就起,有的通过 `--profile` 打 docker compose --profile qdrant --profile sparse up -d ``` -模式细节见 [内置记忆提供方](/zh/integrations/providers/memory/builtin.md)。 +模式细节见 [内置记忆提供方](/zh/integrations/providers/memory/builtin)。 ### Connect-It 连接器 -**connect-it** 容器跑的是 [Connect-It](https://github.com/memohai/connect-it),Bot [连接器](/zh/guides/connectors.md)背后的服务——通过 OAuth 或 API Key 把第三方服务(GitHub、Notion 这类)连给 Bot。它共用 Memoh 的 PostgreSQL,数据隔离在单独的 `connect_it` schema 里,迁移自己管。 +**connect-it** 容器跑的是 [Connect-It](https://github.com/memohai/connect-it),Bot [连接器](/zh/guides/connectors)背后的服务——通过 OAuth 或 API Key 把第三方服务(GitHub、Notion 这类)连给 Bot。它共用 Memoh 的 PostgreSQL,数据隔离在单独的 `connect_it` schema 里,迁移自己管。 安装脚本把 Connect-It 全程管起来: @@ -170,7 +170,7 @@ cp conf/app.docker.toml config.toml - `auth.jwt_secret`(可 `openssl rand -base64 32`) - `postgres.password`(环境变量 `POSTGRES_PASSWORD` 要一致) -如果用 SQLite,把 `database.driver` 改成 `"sqlite"`,并使用 `docker-compose.sqlite.yml`。详细步骤见 [SQLite 部署](/zh/self-hosted/sqlite.md)。 +如果用 SQLite,把 `database.driver` 改成 `"sqlite"`,并使用 `docker-compose.sqlite.yml`。详细步骤见 [SQLite 部署](/zh/self-hosted/sqlite)。 然后(推荐开 Qdrant 和 sparse): @@ -188,7 +188,7 @@ POSTGRES_PASSWORD=你的库密码 docker compose up -d > **重要**:`docker-compose.yml` 默认挂 `./config.toml`,先建好文件再 `up`,否则起不来。 -手动部署要开[连接器](/zh/guides/connectors.md)的话,自己生成 Connect-It 凭据并加 `connectors` profile: +手动部署要开[连接器](/zh/guides/connectors)的话,自己生成 Connect-It 凭据并加 `connectors` profile: ```bash MEMOH_CONNECT_IT_BASE_URL="http://connect-it:8421" \ @@ -254,7 +254,7 @@ docker compose -f docker-compose.yml -f docker/docker-compose.cn.yml \ | `[qdrant]` | Qdrant 地址、密钥、超时 | | `[sparse]` | 稀疏服务 URL | | `[registry]` | 供应商定义目录 | -| `[connect_it]` | [连接器](/zh/guides/connectors.md)用的 Connect-It 地址(`base_url`、`api_token`);两项都空即关闭该功能。Compose 环境里由 `MEMOH_CONNECT_IT_BASE_URL` / `MEMOH_CONNECT_IT_API_TOKEN` 覆盖 | +| `[connect_it]` | [连接器](/zh/guides/connectors)用的 Connect-It 地址(`base_url`、`api_token`);两项都空即关闭该功能。Compose 环境里由 `MEMOH_CONNECT_IT_BASE_URL` / `MEMOH_CONNECT_IT_API_TOKEN` 覆盖 | | `[web]` | 前端 host/port | | `[agent]` | 工具输出截断上限:`tool_output_max_bytes`(默认 65536)、`tool_output_max_lines`(默认 2000)、`system_files_max_bytes`(默认 32768)。超限时保留头尾,不是盲切。 | | `[session_runtime]` | 多实例部署的会话状态后端,见上面「多实例部署」 | diff --git a/docs/zh/self-hosted/kata-containerd.md b/docs/zh/self-hosted/kata-containerd.mdx similarity index 55% rename from docs/zh/self-hosted/kata-containerd.md rename to docs/zh/self-hosted/kata-containerd.mdx index 583bd0f..eacffc3 100644 --- a/docs/zh/self-hosted/kata-containerd.md +++ b/docs/zh/self-hosted/kata-containerd.mdx @@ -1,12 +1,16 @@ +import { Callout } from 'scalar-mdx-components' + # Containerd + Kata(已移除) -::: danger 功能已移除 -Memoh 已经移除 Kata Containers 支持。当前版本只用标准 containerd runtime 运行 workspace 容器,`[containerd].runtime_type` 的 Kata 设置、`server-kata` image target、Kata compose overlay 都不存在了。 -::: + + **功能已移除** + + Memoh 已经移除 Kata Containers 支持。当前版本只用标准 containerd runtime 运行 workspace 容器,`[containerd].runtime_type` 的 Kata 设置、`server-kata` image target、Kata compose overlay 都不存在了。 + 如果你还有跑着 Kata workspace 的老版本部署: - 升级前先把部署切回标准 `containerd` backend。workspace 数据在 containerd snapshot 和数据卷里,不在 Kata runtime 里,机器人文件不会丢。 - 把 Kata 专属的 compose overrides(`/dev/kvm` 挂载、Kata shim 挂载、`BRIDGE_TCP_ADDR` bridge 设置)从栈里清掉。 -当前可用的 backend 选项见 [Workspace Backend](/zh/self-hosted/workspace-backends.md)。 +当前可用的 backend 选项见 [Workspace Backend](/zh/self-hosted/workspace-backends)。 diff --git a/docs/zh/self-hosted/workspace-backends.md b/docs/zh/self-hosted/workspace-backends.mdx similarity index 94% rename from docs/zh/self-hosted/workspace-backends.md rename to docs/zh/self-hosted/workspace-backends.mdx index 0e940d6..8d865d7 100644 --- a/docs/zh/self-hosted/workspace-backends.md +++ b/docs/zh/self-hosted/workspace-backends.mdx @@ -1,3 +1,5 @@ +import { Callout } from 'scalar-mdx-components' + # Workspace backend 每个 Memoh 机器人都在一个 workspace 里工作。workspace 可以是隔离容器,也可以是在 Desktop/local 场景下明确受信任的本机目录。Backend 决定 workspace 跑在哪里,以及隔离、网络、快照和 display 能力是否可用。 @@ -19,9 +21,11 @@ backend = "containerd" # containerd、docker 或 apple 一键 Docker Compose Server Deploy 固定使用 `containerd`。这是有意的:server 镜像会启动内置 containerd,并挂好机器人 workspace 需要的 runtime 文件。`docker`、`apple` 更适合你能控制宿主机 runtime 路径的手动部署。 -::: warning Kata Containers 支持已移除 -旧版本可以通过 `[containerd].runtime_type` 让 workspace 跑在 Kata Containers 里。该支持已经移除——当前版本只用标准 containerd runtime。 -::: + + **Kata Containers 支持已移除** + + 旧版本可以通过 `[containerd].runtime_type` 让 workspace 跑在 Kata Containers 里。该支持已经移除——当前版本只用标准 containerd runtime。 + ## Trusted local workspace diff --git a/docs/zh/tts-providers/edge.md b/docs/zh/tts-providers/edge.md deleted file mode 100644 index fedcd9c..0000000 --- a/docs/zh/tts-providers/edge.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/integrations/providers/tts/edge](/zh/integrations/providers/tts/edge). diff --git a/docs/zh/tts-providers/index.md b/docs/zh/tts-providers/index.md deleted file mode 100644 index 170a155..0000000 --- a/docs/zh/tts-providers/index.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: false -title: Redirecting ---- - - - - - -Redirecting to [/zh/integrations/providers/tts/](/zh/integrations/providers/tts/). diff --git a/package.json b/package.json index ba985da..7d87902 100644 --- a/package.json +++ b/package.json @@ -4,13 +4,11 @@ "private": true, "type": "module", "scripts": { - "dev": "vitepress dev docs", - "build": "vitepress build docs", - "serve": "vitepress serve docs", - "preview": "vitepress preview docs" + "dev": "scalar project preview", + "check": "scalar project check-config", + "publish:docs": "scalar project publish" }, "devDependencies": { - "vitepress": "^1.6.0", - "vue": "^3.5.0" + "@scalar/cli": "^2.1.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index ef7c738..0000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,1623 +0,0 @@ -lockfileVersion: '9.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -importers: - - .: - devDependencies: - vitepress: - specifier: ^1.6.0 - version: 1.6.4(@algolia/client-search@5.53.0)(postcss@8.5.15)(search-insights@2.17.3) - vue: - specifier: ^3.5.0 - version: 3.5.35 - -packages: - - '@algolia/abtesting@1.19.0': - resolution: {integrity: sha512-Lhnez3hhXHk25lfxLAMxvkP4fmN3+1RgADhD2ssMDBYuAsDVReeyP+3SGRx+ntq8ijMrLqUyfvO72TB6jsTteQ==} - 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.53.0': - resolution: {integrity: sha512-0ZjA5Hcmaoz5Lj6OG0zhfIyeqzJZnLW2CRJA1W17UwMFGRtZAJ9yJKRvPEDA6gkpsIoQxORTSW6sWFiuYncPNQ==} - engines: {node: '>= 14.0.0'} - - '@algolia/client-analytics@5.53.0': - resolution: {integrity: sha512-kWNodP75iiEaOtemC9F/hlxNBG5E2QUjN1BusnE6m2b4l7Qh/BUO3fGCVsmKJI65VO4VKGGmT43ICvHtTcJ2JQ==} - engines: {node: '>= 14.0.0'} - - '@algolia/client-common@5.53.0': - resolution: {integrity: sha512-YPN45TXD9Wrse185t/Ta7nktZsqpv97oOjCzp2sblHnCL6rBc9TDeJAg1IGl2UpdwnSD05Zu/5wLB4watOUMyg==} - engines: {node: '>= 14.0.0'} - - '@algolia/client-insights@5.53.0': - resolution: {integrity: sha512-qAcYTDJE6m924FDDUQvdD6vh7DYaqOeSpFS74IP37/JRV0v4cGBauyxTF2WzDnokUylQDbqreoFIJZfg0Fitmw==} - engines: {node: '>= 14.0.0'} - - '@algolia/client-personalization@5.53.0': - resolution: {integrity: sha512-fQaY+DkSJOpuUVUe8MQTwrdiKAqkJGhpDarB08duBn/sUv7Bkib6MDRQauCcWTWTe4HIW+EbwQP9R4kci1V/Yw==} - engines: {node: '>= 14.0.0'} - - '@algolia/client-query-suggestions@5.53.0': - resolution: {integrity: sha512-o72tsiEZGfeS/dxL9IADfzcZWGEwKDEe5CvtrBuT//3JR+SHuTtHRI2ZTf7D7bcKagcbojvO8hnkHdfoakSlYg==} - engines: {node: '>= 14.0.0'} - - '@algolia/client-search@5.53.0': - resolution: {integrity: sha512-Ds16IyPm/dNJPCU8OzApo2gwGrgWT5BYHhE3NFwZbpCveqyvPDB9sZDDkJ5DsdOGT2aC+R3i0/M1OVXF2qdgPg==} - engines: {node: '>= 14.0.0'} - - '@algolia/ingestion@1.53.0': - resolution: {integrity: sha512-oNbT6z4NwD8Pou9VPINGlN/tlG1afESh2EbxqnP6rwl95xKVD/Zlciis1PpNeO/9U/rrajc1+7DcfKi03tX1KQ==} - engines: {node: '>= 14.0.0'} - - '@algolia/monitoring@1.53.0': - resolution: {integrity: sha512-G+KZb/yd+qAOFn/cEvTGeLxQm8aP3a0od50l3z/ylccY+/o4YG3TNcjU1tFQHW4mXC137GPyR7W70R0kRQDLnA==} - engines: {node: '>= 14.0.0'} - - '@algolia/recommend@5.53.0': - resolution: {integrity: sha512-6aVfYd55Un6IUgPLbo84WfgFZlS3L0vA1ttzXL5vahHewUJ8jYgd89TzlWRTeej7w70mb9RWsVlFYGmJ/diQww==} - engines: {node: '>= 14.0.0'} - - '@algolia/requester-browser-xhr@5.53.0': - resolution: {integrity: sha512-ke27DqgzCOlt+RbeEdCxtXxMQOnAOi8ujr2wid0DmDKzR95Kw/f9sBsuhBxtjevCqJRJszfRTLY0B1pbO6IhkA==} - engines: {node: '>= 14.0.0'} - - '@algolia/requester-fetch@5.53.0': - resolution: {integrity: sha512-GngiOqt2Gq4oLno6yXQVj9om+qSO9SWAoduoTOEg79dKZ62brB8OOIvSJG/vDNoanYi6a7Al9uDZwXvi+bcVTg==} - engines: {node: '>= 14.0.0'} - - '@algolia/requester-node-http@5.53.0': - resolution: {integrity: sha512-6mF9LZMUk0QqWvrnxkxBqhswwz6Xfiwy6/gmTzL5HrlhdVG3ITAqGV2k3XmVThP1h0Ulc3VQwiNCD7/Nr4JNlQ==} - engines: {node: '>= 14.0.0'} - - '@babel/helper-string-parser@7.29.7': - resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.29.7': - resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.29.7': - resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} - engines: {node: '>=6.0.0'} - hasBin: true - - '@babel/types@7.29.7': - resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} - engines: {node: '>=6.9.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 - - '@esbuild/aix-ppc64@0.21.5': - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} - engines: {node: '>=12'} - 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-arm@0.21.5': - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.21.5': - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} - engines: {node: '>=12'} - 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-x64@0.21.5': - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} - engines: {node: '>=12'} - 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-x64@0.21.5': - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} - engines: {node: '>=12'} - 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-arm@0.21.5': - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.21.5': - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} - engines: {node: '>=12'} - 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-mips64el@0.21.5': - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} - engines: {node: '>=12'} - 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-riscv64@0.21.5': - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.21.5': - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.21.5': - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-x64@0.21.5': - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-x64@0.21.5': - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - - '@esbuild/sunos-x64@0.21.5': - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.21.5': - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} - engines: {node: '>=12'} - 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-x64@0.21.5': - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - - '@iconify-json/simple-icons@1.2.84': - resolution: {integrity: sha512-v4JVu6xIewGoETD4mm2k6UAdFAbTlY1duw5ZNSxYORfs2yFsHDhoU9Omn/BgrV0nR/ptWkF3ZIr/ZHoYXI/6Jw==} - - '@iconify/types@2.0.0': - resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} - - '@jridgewell/sourcemap-codec@1.5.5': - resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - - '@rollup/rollup-android-arm-eabi@4.61.0': - resolution: {integrity: sha512-dnxczajOqt0gesZlN5pGQ1s1imQVrsmCw5G2Ci4oM+0WvNz3pyRnlWrT7McoZIb8VlFwCawdmbWRmxRn7HI+VQ==} - cpu: [arm] - os: [android] - - '@rollup/rollup-android-arm64@4.61.0': - resolution: {integrity: sha512-Bp3JpGP00Vu3f238ivRrjf7z3xSzVPXqCmaJYA9t2c+c8vKYvOzmXF7LkkeUalTEGd6cZcSWe+PFIP3Vy48fRg==} - cpu: [arm64] - os: [android] - - '@rollup/rollup-darwin-arm64@4.61.0': - resolution: {integrity: sha512-zaYIpr670mUmmZ1tVzUFplbQbG7h3Gugx3L5FoqhsC2m/YnLlR1a7zVLmXNPy+iY1tFPEbNG+HHBXZGyId0G5w==} - cpu: [arm64] - os: [darwin] - - '@rollup/rollup-darwin-x64@4.61.0': - resolution: {integrity: sha512-+P49fvkv2dSoeevUW+lgZ/I2JHSsJCK1Lyjj7Cu6E4UHG4tS9XIefzIjo5qhgELjAclnen1rLzK2PMKJdo+Dyg==} - cpu: [x64] - os: [darwin] - - '@rollup/rollup-freebsd-arm64@4.61.0': - resolution: {integrity: sha512-l3FAAOyKJXH2ea6KNFN+MMgC/rnE94YGLXs2ehYqDcCoHt1DpvgWX75BhUJxN38XojP7Ul+4H8PRn7EdyqSDrw==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.61.0': - resolution: {integrity: sha512-VokPN3TSctKj65cyCNPaUh4vMFA8awxOot/0sp+4J7ZlNRKQEhXhawqPwajoi8H5ZFt61i0ugZJuTKXBjGJ17Q==} - cpu: [x64] - os: [freebsd] - - '@rollup/rollup-linux-arm-gnueabihf@4.61.0': - resolution: {integrity: sha512-DxH0P3wxm+Yzs/p3zrk9dw1rURu8p0Nv5+MRK/L7OtnLNg5rLZraSBFZ8iUXOd9f2BlhJyEpIZUH/emjq4UJ4g==} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-arm-musleabihf@4.61.0': - resolution: {integrity: sha512-T6ZvMNe84kAz6TBWHC7hGAoEtzP1LWYw/AqayGWEF6uISt3Abk/st06LqRD9THd7Xz3NxzurUpzAuEAUbZf+nw==} - cpu: [arm] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-arm64-gnu@4.61.0': - resolution: {integrity: sha512-q/4hzvQkDs8b4jIBab1pnLiiM0ayTZsN2amBFPDzuyZxjEd4wDwx0UJFYM3cOZzSf5Kw8fnWSprJzIBMkcR44Q==} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-arm64-musl@4.61.0': - resolution: {integrity: sha512-vvYWX3akdEAY6km+9wAqFDnk6pQsbJKVnj7xawcvs/+fdlYBGp+U+Qq/lLfpIxYIZvZLHMAKD9HLdacSx/r3dw==} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-loong64-gnu@4.61.0': - resolution: {integrity: sha512-DePa5cqOxDP/Zp0VOXpeWaGew5iIv5DXp9NYbzkX5PFQyWVX9184WCTh3hvr/7lhXo8ZVlbFLkz8+o/q1dU6gA==} - cpu: [loong64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-loong64-musl@4.61.0': - resolution: {integrity: sha512-LV8aWMB8UChglMCEzs7RkN0GsH29RJaLLqwm9fCIjlqwxQTiWAqNcc7wjBkH31hV0PU/yVxGYvrYsgfea2qw6g==} - cpu: [loong64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-ppc64-gnu@4.61.0': - resolution: {integrity: sha512-QoNSnwQtaeNu5grdBbsL0tt1uyl5EnS8DA8Mr3nluMXbhdQNyhN+G4tBax7VCdxLKj8YJ0/4OO9Ho84jMnJtKA==} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-ppc64-musl@4.61.0': - resolution: {integrity: sha512-/zZp5MKapIIApE8trN8qLGNSiRN9TUoaUZ1cmVu4XnVdd5LQLOXTtyi+vtfUbNnT3iyjzpPqYeKXmvJ+gJGYWw==} - cpu: [ppc64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-riscv64-gnu@4.61.0': - resolution: {integrity: sha512-RbrzcD3aJ1k3UbtMRRBNwojdVVyXjuVAFTfn/xPa6EEl6GE9Sm/akPgFTb9aAC9pMKGJ6CtWxaGrqWcabH+ySg==} - cpu: [riscv64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-riscv64-musl@4.61.0': - resolution: {integrity: sha512-ZF+onDsBso8PJf1XaG9lB+O9RnBpKGnY6OrzC4CSHrtC1jb6jWLTKK4bRqdoCXHd22gyr2hiYmEAm8Wns/BOCw==} - cpu: [riscv64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-s390x-gnu@4.61.0': - resolution: {integrity: sha512-Atk0aSIk5Zx2Wuh9dgRQgLP0Koc8hOeYpbWryMXyk8G8/HmPkwPPkMqIIDhrXHHYqfUzSJA/I7IWSBv8xSmRBA==} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-x64-gnu@4.61.0': - resolution: {integrity: sha512-0uMOcf3eZ5K+K4cYHkdxShFMPlPXCOdfDFEFn9dNYAEEd2cVvmOfH7zFgRVoDgmtQ1m9k5q7qfrHzyMAubKYUA==} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-x64-musl@4.61.0': - resolution: {integrity: sha512-mvFtE4A/t/7hRJ7X8Ozmu8FsIkAUat2nzl12pgU337BRmq87AQUJztwHz2Zv5/tjo9/C95E66CK03SI/ToEDJw==} - cpu: [x64] - os: [linux] - libc: [musl] - - '@rollup/rollup-openbsd-x64@4.61.0': - resolution: {integrity: sha512-z9b9+aTxvt8n2rNltMPvyaUfB8NJ+CVyOrGK/MdIKHx7B+lXmZpm/XbRsU7Rpf3fRqJ2uS6mBJiJveCtq8LHDg==} - cpu: [x64] - os: [openbsd] - - '@rollup/rollup-openharmony-arm64@4.61.0': - resolution: {integrity: sha512-jXaXFqKMehsOc+g8R6oo33RRC6w07G9jDBxAE5eAKX7mOcCbZloYIPNhfG9Wl+P9O9IWHFO4OJgPi1Ml2qkt7w==} - cpu: [arm64] - os: [openharmony] - - '@rollup/rollup-win32-arm64-msvc@4.61.0': - resolution: {integrity: sha512-OXNWVFocS2IA4+QplhTZZ2a+8hPZR7T8KuozsNmJKK8y7cp83StHvGksfHzPG3wczWTczyWHVQuqeiTUbjiyBg==} - cpu: [arm64] - os: [win32] - - '@rollup/rollup-win32-ia32-msvc@4.61.0': - resolution: {integrity: sha512-AlAbNtBO637LxSldqV43z0FfXoGfl2TW1DgAg/bs7aQswFbDewz2SJm3BUhiGfbOVtW571xbc9p+REdxhyN/Eg==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-gnu@4.61.0': - resolution: {integrity: sha512-QRSrQXyJ1M4tjNXdR0/G/IgV6lzfQQJYBjlWIEYkY2Xs86DRl/iEpQ4blMDjJxSl7n19eDKKXMg0AmuBVYy8pQ==} - cpu: [x64] - os: [win32] - - '@rollup/rollup-win32-x64-msvc@4.61.0': - resolution: {integrity: sha512-tkuFxhvKO/HlGd0VsINF6vHSYH8AF8W0TcNxKDK6JZmrehngFj78pToc8iemtnvwilDjs2G/qSzYFhe9U8q+fw==} - cpu: [x64] - os: [win32] - - '@shikijs/core@2.5.0': - resolution: {integrity: sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==} - - '@shikijs/engine-javascript@2.5.0': - resolution: {integrity: sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==} - - '@shikijs/engine-oniguruma@2.5.0': - resolution: {integrity: sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==} - - '@shikijs/langs@2.5.0': - resolution: {integrity: sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==} - - '@shikijs/themes@2.5.0': - resolution: {integrity: sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==} - - '@shikijs/transformers@2.5.0': - resolution: {integrity: sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg==} - - '@shikijs/types@2.5.0': - resolution: {integrity: sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==} - - '@shikijs/vscode-textmate@10.0.2': - resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} - - '@types/estree@1.0.9': - resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} - - '@types/hast@3.0.4': - resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} - - '@types/linkify-it@5.0.0': - resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} - - '@types/markdown-it@14.1.2': - resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} - - '@types/mdast@4.0.4': - resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} - - '@types/mdurl@2.0.0': - resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} - - '@types/unist@3.0.3': - resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - - '@types/web-bluetooth@0.0.21': - resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} - - '@ungap/structured-clone@1.3.1': - resolution: {integrity: sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==} - - '@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 - - '@vue/compiler-core@3.5.35': - resolution: {integrity: sha512-BUmHaR1J+O+CKZ9uJucdVTEr1LHsdyvv7vG3eNRhK3CczEHeMd/LtsHAuD7PbrxvI2envCY2v7HI1vC1aBRzKw==} - - '@vue/compiler-dom@3.5.35': - resolution: {integrity: sha512-k+bprkXxuqhVajgTx5mUHuir7TwQzUKOWR40ng1ncAqQRPnrLngGGgqVEEhOnTMlc8btHYVKmrP8s5Qyg0hvYA==} - - '@vue/compiler-sfc@3.5.35': - resolution: {integrity: sha512-G5VPMcXTSywXBgtFOZOnHKBxKSrwXUcvY1iaF5/hRcy7t0J6CH/d8ha9F4nzi00Fax1eLV0QHM7v4mQu68jydw==} - - '@vue/compiler-ssr@3.5.35': - resolution: {integrity: sha512-rGhAeXgdM7/ffTJGXT69rCCdTmjDewnFuUZfBQQHTdcEBeWdT5HCGY60y2ytLJr9/Dsu7IntUi5z/w0h6Rjnzw==} - - '@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.35': - resolution: {integrity: sha512-tVc+SsHConvh/Lz64qq1pP3rYArBmK42xonovEcxY74SQtvctZodG/zhq54P5dr38cVuw25d27cPNRdlMidpGQ==} - - '@vue/runtime-core@3.5.35': - resolution: {integrity: sha512-A/xFNX9loIcWDygeQuNCfKuh0CoYBzxhqEMNah5TSFg9Z53DrFYEN2qi5CU9necjM1OWYegYREUTHmXTmhfXtg==} - - '@vue/runtime-dom@3.5.35': - resolution: {integrity: sha512-odrJ1C391dbGnyDRh8U+rnP7J2amIEzfmRk5vXy7xi3aZhEXofTvpi0T4HJb6jlNqQZTNPR5MPHSB3RHNkIORA==} - - '@vue/server-renderer@3.5.35': - resolution: {integrity: sha512-NkebSOYdB97wi8OQcO3HqzZSlymJi/aWsN/7h74OSVhRTm6qGs3Jp3e0rCXynmWwSlKeRrnlIug+ilYoHBmQDA==} - peerDependencies: - vue: 3.5.35 - - '@vue/shared@3.5.35': - resolution: {integrity: sha512-zSbjL7gRXwks2ZQLRGCajBtBXEOXW9Ddhn/HvSdrGkE2dqGnumzW8XtusRrxrE9LvqtiqDXQ+A60Hp6mvdYxfA==} - - '@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==} - - algoliasearch@5.53.0: - resolution: {integrity: sha512-OGW1q6b91CRSSeiOnM8LxuR5NYJ2esvw66jUZ4IIvdv+ItNkx3pwLuyR+jaCdbGee4ov5WgUnyPryyh11xvByQ==} - engines: {node: '>= 14.0.0'} - - birpc@2.9.0: - resolution: {integrity: sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==} - - ccount@2.0.1: - resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - - character-entities-html4@2.1.0: - resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} - - character-entities-legacy@3.0.0: - resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} - - comma-separated-tokens@2.0.3: - resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} - - copy-anything@4.0.5: - resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==} - engines: {node: '>=18'} - - csstype@3.2.3: - resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} - - dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - - devlop@1.1.0: - resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - - emoji-regex-xs@1.0.0: - resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} - - entities@7.0.1: - resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} - engines: {node: '>=0.12'} - - esbuild@0.21.5: - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} - engines: {node: '>=12'} - hasBin: true - - estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - - focus-trap@7.8.0: - resolution: {integrity: sha512-/yNdlIkpWbM0ptxno3ONTuf+2g318kh2ez3KSeZN5dZ8YC6AAmgeWz+GasYYiBJPFaYcSAPeu4GfhUaChzIJXA==} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - hast-util-to-html@9.0.5: - resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} - - hast-util-whitespace@3.0.0: - resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} - - hookable@5.5.3: - resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} - - html-void-elements@3.0.0: - resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - - is-what@5.5.0: - resolution: {integrity: sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==} - engines: {node: '>=18'} - - magic-string@0.30.21: - resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - - mark.js@8.11.1: - resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} - - mdast-util-to-hast@13.2.1: - resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} - - micromark-util-character@2.1.1: - resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} - - micromark-util-encode@2.0.1: - resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} - - micromark-util-sanitize-uri@2.0.1: - resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} - - micromark-util-symbol@2.0.1: - resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} - - micromark-util-types@2.0.2: - resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} - - 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==} - - nanoid@3.3.12: - resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - oniguruma-to-es@3.1.1: - resolution: {integrity: sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==} - - perfect-debounce@1.0.0: - resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} - - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - - postcss@8.5.15: - resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} - engines: {node: ^10 || ^12 || >=14} - - preact@10.29.2: - resolution: {integrity: sha512-7tNmwg/7mzzAoB/8kSg6Hl37JraAZw3Z3A0JSY7VXlZwo82Xn0G7wKbNNs2qoF4ZEEsQGTwDAroNdqKs1ofJxQ==} - - property-information@7.2.0: - resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==} - - regex-recursion@6.0.2: - resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} - - regex-utilities@2.3.0: - resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} - - regex@6.1.0: - resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} - - rfdc@1.4.1: - resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - - rollup@4.61.0: - resolution: {integrity: sha512-T9mWdbWfQtp0B5lv/HX+wrhYsmXRlcWnXXmJbXqKJhlRaoS6KMhq0gpyzW4UJfclcxrEdLnTgjT2NjruLONu0g==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - - search-insights@2.17.3: - resolution: {integrity: sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==} - - shiki@2.5.0: - resolution: {integrity: sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==} - - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} - - 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'} - - stringify-entities@4.0.4: - resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} - - superjson@2.2.6: - resolution: {integrity: sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==} - engines: {node: '>=16'} - - tabbable@6.4.0: - resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==} - - trim-lines@3.0.1: - resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - - unist-util-is@6.0.1: - resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} - - unist-util-position@5.0.0: - resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} - - unist-util-stringify-position@4.0.0: - resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} - - unist-util-visit-parents@6.0.2: - resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} - - unist-util-visit@5.1.0: - resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} - - vfile-message@4.0.3: - resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} - - 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 - - vitepress@1.6.4: - resolution: {integrity: sha512-+2ym1/+0VVrbhNyRoFFesVvBvHAVMZMK0rw60E3X/5349M1GuVdKeazuksqopEdvkKwKGs21Q729jX81/bkBJg==} - hasBin: true - peerDependencies: - markdown-it-mathjax3: ^4 - postcss: ^8 - peerDependenciesMeta: - markdown-it-mathjax3: - optional: true - postcss: - optional: true - - vue@3.5.35: - resolution: {integrity: sha512-cx89fnr+0kVGHiNFG6y6s0bdjypJRFNZn6x3WPstNdQR1bi1mbB7h4v5IBGTsPJU3nK1+0Iqj3Zf+hZWMieR4Q==} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - zwitch@2.0.4: - resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} - -snapshots: - - '@algolia/abtesting@1.19.0': - dependencies: - '@algolia/client-common': 5.53.0 - '@algolia/requester-browser-xhr': 5.53.0 - '@algolia/requester-fetch': 5.53.0 - '@algolia/requester-node-http': 5.53.0 - - '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.53.0)(algoliasearch@5.53.0)(search-insights@2.17.3)': - dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.53.0)(algoliasearch@5.53.0)(search-insights@2.17.3) - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.53.0)(algoliasearch@5.53.0) - transitivePeerDependencies: - - '@algolia/client-search' - - algoliasearch - - search-insights - - '@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.53.0)(algoliasearch@5.53.0)(search-insights@2.17.3)': - dependencies: - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.53.0)(algoliasearch@5.53.0) - search-insights: 2.17.3 - transitivePeerDependencies: - - '@algolia/client-search' - - algoliasearch - - '@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.53.0)(algoliasearch@5.53.0)': - dependencies: - '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.53.0)(algoliasearch@5.53.0) - '@algolia/client-search': 5.53.0 - algoliasearch: 5.53.0 - - '@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.53.0)(algoliasearch@5.53.0)': - dependencies: - '@algolia/client-search': 5.53.0 - algoliasearch: 5.53.0 - - '@algolia/client-abtesting@5.53.0': - dependencies: - '@algolia/client-common': 5.53.0 - '@algolia/requester-browser-xhr': 5.53.0 - '@algolia/requester-fetch': 5.53.0 - '@algolia/requester-node-http': 5.53.0 - - '@algolia/client-analytics@5.53.0': - dependencies: - '@algolia/client-common': 5.53.0 - '@algolia/requester-browser-xhr': 5.53.0 - '@algolia/requester-fetch': 5.53.0 - '@algolia/requester-node-http': 5.53.0 - - '@algolia/client-common@5.53.0': {} - - '@algolia/client-insights@5.53.0': - dependencies: - '@algolia/client-common': 5.53.0 - '@algolia/requester-browser-xhr': 5.53.0 - '@algolia/requester-fetch': 5.53.0 - '@algolia/requester-node-http': 5.53.0 - - '@algolia/client-personalization@5.53.0': - dependencies: - '@algolia/client-common': 5.53.0 - '@algolia/requester-browser-xhr': 5.53.0 - '@algolia/requester-fetch': 5.53.0 - '@algolia/requester-node-http': 5.53.0 - - '@algolia/client-query-suggestions@5.53.0': - dependencies: - '@algolia/client-common': 5.53.0 - '@algolia/requester-browser-xhr': 5.53.0 - '@algolia/requester-fetch': 5.53.0 - '@algolia/requester-node-http': 5.53.0 - - '@algolia/client-search@5.53.0': - dependencies: - '@algolia/client-common': 5.53.0 - '@algolia/requester-browser-xhr': 5.53.0 - '@algolia/requester-fetch': 5.53.0 - '@algolia/requester-node-http': 5.53.0 - - '@algolia/ingestion@1.53.0': - dependencies: - '@algolia/client-common': 5.53.0 - '@algolia/requester-browser-xhr': 5.53.0 - '@algolia/requester-fetch': 5.53.0 - '@algolia/requester-node-http': 5.53.0 - - '@algolia/monitoring@1.53.0': - dependencies: - '@algolia/client-common': 5.53.0 - '@algolia/requester-browser-xhr': 5.53.0 - '@algolia/requester-fetch': 5.53.0 - '@algolia/requester-node-http': 5.53.0 - - '@algolia/recommend@5.53.0': - dependencies: - '@algolia/client-common': 5.53.0 - '@algolia/requester-browser-xhr': 5.53.0 - '@algolia/requester-fetch': 5.53.0 - '@algolia/requester-node-http': 5.53.0 - - '@algolia/requester-browser-xhr@5.53.0': - dependencies: - '@algolia/client-common': 5.53.0 - - '@algolia/requester-fetch@5.53.0': - dependencies: - '@algolia/client-common': 5.53.0 - - '@algolia/requester-node-http@5.53.0': - dependencies: - '@algolia/client-common': 5.53.0 - - '@babel/helper-string-parser@7.29.7': {} - - '@babel/helper-validator-identifier@7.29.7': {} - - '@babel/parser@7.29.7': - dependencies: - '@babel/types': 7.29.7 - - '@babel/types@7.29.7': - dependencies: - '@babel/helper-string-parser': 7.29.7 - '@babel/helper-validator-identifier': 7.29.7 - - '@docsearch/css@3.8.2': {} - - '@docsearch/js@3.8.2(@algolia/client-search@5.53.0)(search-insights@2.17.3)': - dependencies: - '@docsearch/react': 3.8.2(@algolia/client-search@5.53.0)(search-insights@2.17.3) - preact: 10.29.2 - transitivePeerDependencies: - - '@algolia/client-search' - - '@types/react' - - react - - react-dom - - search-insights - - '@docsearch/react@3.8.2(@algolia/client-search@5.53.0)(search-insights@2.17.3)': - dependencies: - '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.53.0)(algoliasearch@5.53.0)(search-insights@2.17.3) - '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.53.0)(algoliasearch@5.53.0) - '@docsearch/css': 3.8.2 - algoliasearch: 5.53.0 - optionalDependencies: - search-insights: 2.17.3 - transitivePeerDependencies: - - '@algolia/client-search' - - '@esbuild/aix-ppc64@0.21.5': - optional: true - - '@esbuild/android-arm64@0.21.5': - optional: true - - '@esbuild/android-arm@0.21.5': - optional: true - - '@esbuild/android-x64@0.21.5': - optional: true - - '@esbuild/darwin-arm64@0.21.5': - optional: true - - '@esbuild/darwin-x64@0.21.5': - optional: true - - '@esbuild/freebsd-arm64@0.21.5': - optional: true - - '@esbuild/freebsd-x64@0.21.5': - optional: true - - '@esbuild/linux-arm64@0.21.5': - optional: true - - '@esbuild/linux-arm@0.21.5': - optional: true - - '@esbuild/linux-ia32@0.21.5': - optional: true - - '@esbuild/linux-loong64@0.21.5': - optional: true - - '@esbuild/linux-mips64el@0.21.5': - optional: true - - '@esbuild/linux-ppc64@0.21.5': - optional: true - - '@esbuild/linux-riscv64@0.21.5': - optional: true - - '@esbuild/linux-s390x@0.21.5': - optional: true - - '@esbuild/linux-x64@0.21.5': - optional: true - - '@esbuild/netbsd-x64@0.21.5': - optional: true - - '@esbuild/openbsd-x64@0.21.5': - optional: true - - '@esbuild/sunos-x64@0.21.5': - optional: true - - '@esbuild/win32-arm64@0.21.5': - optional: true - - '@esbuild/win32-ia32@0.21.5': - optional: true - - '@esbuild/win32-x64@0.21.5': - optional: true - - '@iconify-json/simple-icons@1.2.84': - dependencies: - '@iconify/types': 2.0.0 - - '@iconify/types@2.0.0': {} - - '@jridgewell/sourcemap-codec@1.5.5': {} - - '@rollup/rollup-android-arm-eabi@4.61.0': - optional: true - - '@rollup/rollup-android-arm64@4.61.0': - optional: true - - '@rollup/rollup-darwin-arm64@4.61.0': - optional: true - - '@rollup/rollup-darwin-x64@4.61.0': - optional: true - - '@rollup/rollup-freebsd-arm64@4.61.0': - optional: true - - '@rollup/rollup-freebsd-x64@4.61.0': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.61.0': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.61.0': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.61.0': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.61.0': - optional: true - - '@rollup/rollup-linux-loong64-gnu@4.61.0': - optional: true - - '@rollup/rollup-linux-loong64-musl@4.61.0': - optional: true - - '@rollup/rollup-linux-ppc64-gnu@4.61.0': - optional: true - - '@rollup/rollup-linux-ppc64-musl@4.61.0': - optional: true - - '@rollup/rollup-linux-riscv64-gnu@4.61.0': - optional: true - - '@rollup/rollup-linux-riscv64-musl@4.61.0': - optional: true - - '@rollup/rollup-linux-s390x-gnu@4.61.0': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.61.0': - optional: true - - '@rollup/rollup-linux-x64-musl@4.61.0': - optional: true - - '@rollup/rollup-openbsd-x64@4.61.0': - optional: true - - '@rollup/rollup-openharmony-arm64@4.61.0': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.61.0': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.61.0': - optional: true - - '@rollup/rollup-win32-x64-gnu@4.61.0': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.61.0': - optional: true - - '@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/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-oniguruma@2.5.0': - dependencies: - '@shikijs/types': 2.5.0 - '@shikijs/vscode-textmate': 10.0.2 - - '@shikijs/langs@2.5.0': - dependencies: - '@shikijs/types': 2.5.0 - - '@shikijs/themes@2.5.0': - dependencies: - '@shikijs/types': 2.5.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/vscode-textmate@10.0.2': {} - - '@types/estree@1.0.9': {} - - '@types/hast@3.0.4': - dependencies: - '@types/unist': 3.0.3 - - '@types/linkify-it@5.0.0': {} - - '@types/markdown-it@14.1.2': - dependencies: - '@types/linkify-it': 5.0.0 - '@types/mdurl': 2.0.0 - - '@types/mdast@4.0.4': - dependencies: - '@types/unist': 3.0.3 - - '@types/mdurl@2.0.0': {} - - '@types/unist@3.0.3': {} - - '@types/web-bluetooth@0.0.21': {} - - '@ungap/structured-clone@1.3.1': {} - - '@vitejs/plugin-vue@5.2.4(vite@5.4.21)(vue@3.5.35)': - dependencies: - vite: 5.4.21 - vue: 3.5.35 - - '@vue/compiler-core@3.5.35': - dependencies: - '@babel/parser': 7.29.7 - '@vue/shared': 3.5.35 - entities: 7.0.1 - estree-walker: 2.0.2 - source-map-js: 1.2.1 - - '@vue/compiler-dom@3.5.35': - dependencies: - '@vue/compiler-core': 3.5.35 - '@vue/shared': 3.5.35 - - '@vue/compiler-sfc@3.5.35': - dependencies: - '@babel/parser': 7.29.7 - '@vue/compiler-core': 3.5.35 - '@vue/compiler-dom': 3.5.35 - '@vue/compiler-ssr': 3.5.35 - '@vue/shared': 3.5.35 - estree-walker: 2.0.2 - magic-string: 0.30.21 - postcss: 8.5.15 - source-map-js: 1.2.1 - - '@vue/compiler-ssr@3.5.35': - dependencies: - '@vue/compiler-dom': 3.5.35 - '@vue/shared': 3.5.35 - - '@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.35': - dependencies: - '@vue/shared': 3.5.35 - - '@vue/runtime-core@3.5.35': - dependencies: - '@vue/reactivity': 3.5.35 - '@vue/shared': 3.5.35 - - '@vue/runtime-dom@3.5.35': - dependencies: - '@vue/reactivity': 3.5.35 - '@vue/runtime-core': 3.5.35 - '@vue/shared': 3.5.35 - csstype: 3.2.3 - - '@vue/server-renderer@3.5.35(vue@3.5.35)': - dependencies: - '@vue/compiler-ssr': 3.5.35 - '@vue/shared': 3.5.35 - vue: 3.5.35 - - '@vue/shared@3.5.35': {} - - '@vueuse/core@12.8.2': - dependencies: - '@types/web-bluetooth': 0.0.21 - '@vueuse/metadata': 12.8.2 - '@vueuse/shared': 12.8.2 - vue: 3.5.35 - transitivePeerDependencies: - - typescript - - '@vueuse/integrations@12.8.2(focus-trap@7.8.0)': - dependencies: - '@vueuse/core': 12.8.2 - '@vueuse/shared': 12.8.2 - vue: 3.5.35 - optionalDependencies: - focus-trap: 7.8.0 - transitivePeerDependencies: - - typescript - - '@vueuse/metadata@12.8.2': {} - - '@vueuse/shared@12.8.2': - dependencies: - vue: 3.5.35 - transitivePeerDependencies: - - typescript - - algoliasearch@5.53.0: - dependencies: - '@algolia/abtesting': 1.19.0 - '@algolia/client-abtesting': 5.53.0 - '@algolia/client-analytics': 5.53.0 - '@algolia/client-common': 5.53.0 - '@algolia/client-insights': 5.53.0 - '@algolia/client-personalization': 5.53.0 - '@algolia/client-query-suggestions': 5.53.0 - '@algolia/client-search': 5.53.0 - '@algolia/ingestion': 1.53.0 - '@algolia/monitoring': 1.53.0 - '@algolia/recommend': 5.53.0 - '@algolia/requester-browser-xhr': 5.53.0 - '@algolia/requester-fetch': 5.53.0 - '@algolia/requester-node-http': 5.53.0 - - birpc@2.9.0: {} - - ccount@2.0.1: {} - - character-entities-html4@2.1.0: {} - - character-entities-legacy@3.0.0: {} - - comma-separated-tokens@2.0.3: {} - - copy-anything@4.0.5: - dependencies: - is-what: 5.5.0 - - csstype@3.2.3: {} - - dequal@2.0.3: {} - - devlop@1.1.0: - dependencies: - dequal: 2.0.3 - - emoji-regex-xs@1.0.0: {} - - entities@7.0.1: {} - - 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 - - estree-walker@2.0.2: {} - - focus-trap@7.8.0: - dependencies: - tabbable: 6.4.0 - - fsevents@2.3.3: - optional: true - - hast-util-to-html@9.0.5: - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - ccount: 2.0.1 - comma-separated-tokens: 2.0.3 - hast-util-whitespace: 3.0.0 - html-void-elements: 3.0.0 - mdast-util-to-hast: 13.2.1 - property-information: 7.2.0 - space-separated-tokens: 2.0.2 - stringify-entities: 4.0.4 - zwitch: 2.0.4 - - hast-util-whitespace@3.0.0: - dependencies: - '@types/hast': 3.0.4 - - hookable@5.5.3: {} - - html-void-elements@3.0.0: {} - - is-what@5.5.0: {} - - magic-string@0.30.21: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - - mark.js@8.11.1: {} - - mdast-util-to-hast@13.2.1: - dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - '@ungap/structured-clone': 1.3.1 - devlop: 1.1.0 - micromark-util-sanitize-uri: 2.0.1 - trim-lines: 3.0.1 - unist-util-position: 5.0.0 - unist-util-visit: 5.1.0 - vfile: 6.0.3 - - micromark-util-character@2.1.1: - dependencies: - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-encode@2.0.1: {} - - micromark-util-sanitize-uri@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-encode: 2.0.1 - micromark-util-symbol: 2.0.1 - - micromark-util-symbol@2.0.1: {} - - micromark-util-types@2.0.2: {} - - minisearch@7.2.0: {} - - mitt@3.0.1: {} - - nanoid@3.3.12: {} - - oniguruma-to-es@3.1.1: - dependencies: - emoji-regex-xs: 1.0.0 - regex: 6.1.0 - regex-recursion: 6.0.2 - - perfect-debounce@1.0.0: {} - - picocolors@1.1.1: {} - - postcss@8.5.15: - dependencies: - nanoid: 3.3.12 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - preact@10.29.2: {} - - property-information@7.2.0: {} - - regex-recursion@6.0.2: - dependencies: - regex-utilities: 2.3.0 - - regex-utilities@2.3.0: {} - - regex@6.1.0: - dependencies: - regex-utilities: 2.3.0 - - rfdc@1.4.1: {} - - rollup@4.61.0: - dependencies: - '@types/estree': 1.0.9 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.61.0 - '@rollup/rollup-android-arm64': 4.61.0 - '@rollup/rollup-darwin-arm64': 4.61.0 - '@rollup/rollup-darwin-x64': 4.61.0 - '@rollup/rollup-freebsd-arm64': 4.61.0 - '@rollup/rollup-freebsd-x64': 4.61.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.61.0 - '@rollup/rollup-linux-arm-musleabihf': 4.61.0 - '@rollup/rollup-linux-arm64-gnu': 4.61.0 - '@rollup/rollup-linux-arm64-musl': 4.61.0 - '@rollup/rollup-linux-loong64-gnu': 4.61.0 - '@rollup/rollup-linux-loong64-musl': 4.61.0 - '@rollup/rollup-linux-ppc64-gnu': 4.61.0 - '@rollup/rollup-linux-ppc64-musl': 4.61.0 - '@rollup/rollup-linux-riscv64-gnu': 4.61.0 - '@rollup/rollup-linux-riscv64-musl': 4.61.0 - '@rollup/rollup-linux-s390x-gnu': 4.61.0 - '@rollup/rollup-linux-x64-gnu': 4.61.0 - '@rollup/rollup-linux-x64-musl': 4.61.0 - '@rollup/rollup-openbsd-x64': 4.61.0 - '@rollup/rollup-openharmony-arm64': 4.61.0 - '@rollup/rollup-win32-arm64-msvc': 4.61.0 - '@rollup/rollup-win32-ia32-msvc': 4.61.0 - '@rollup/rollup-win32-x64-gnu': 4.61.0 - '@rollup/rollup-win32-x64-msvc': 4.61.0 - fsevents: 2.3.3 - - search-insights@2.17.3: {} - - 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 - - source-map-js@1.2.1: {} - - space-separated-tokens@2.0.2: {} - - speakingurl@14.0.1: {} - - stringify-entities@4.0.4: - dependencies: - character-entities-html4: 2.1.0 - character-entities-legacy: 3.0.0 - - superjson@2.2.6: - dependencies: - copy-anything: 4.0.5 - - tabbable@6.4.0: {} - - trim-lines@3.0.1: {} - - unist-util-is@6.0.1: - dependencies: - '@types/unist': 3.0.3 - - unist-util-position@5.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-stringify-position@4.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-visit-parents@6.0.2: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.1 - - unist-util-visit@5.1.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.1 - unist-util-visit-parents: 6.0.2 - - vfile-message@4.0.3: - dependencies: - '@types/unist': 3.0.3 - unist-util-stringify-position: 4.0.0 - - vfile@6.0.3: - dependencies: - '@types/unist': 3.0.3 - vfile-message: 4.0.3 - - vite@5.4.21: - dependencies: - esbuild: 0.21.5 - postcss: 8.5.15 - rollup: 4.61.0 - optionalDependencies: - fsevents: 2.3.3 - - vitepress@1.6.4(@algolia/client-search@5.53.0)(postcss@8.5.15)(search-insights@2.17.3): - dependencies: - '@docsearch/css': 3.8.2 - '@docsearch/js': 3.8.2(@algolia/client-search@5.53.0)(search-insights@2.17.3) - '@iconify-json/simple-icons': 1.2.84 - '@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)(vue@3.5.35) - '@vue/devtools-api': 7.7.9 - '@vue/shared': 3.5.35 - '@vueuse/core': 12.8.2 - '@vueuse/integrations': 12.8.2(focus-trap@7.8.0) - focus-trap: 7.8.0 - mark.js: 8.11.1 - minisearch: 7.2.0 - shiki: 2.5.0 - vite: 5.4.21 - vue: 3.5.35 - optionalDependencies: - postcss: 8.5.15 - 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 - - vue@3.5.35: - dependencies: - '@vue/compiler-dom': 3.5.35 - '@vue/compiler-sfc': 3.5.35 - '@vue/runtime-dom': 3.5.35 - '@vue/server-renderer': 3.5.35(vue@3.5.35) - '@vue/shared': 3.5.35 - - zwitch@2.0.4: {} diff --git a/scalar.config.json b/scalar.config.json new file mode 100644 index 0000000..816b73c --- /dev/null +++ b/scalar.config.json @@ -0,0 +1,1103 @@ +{ + "$schema": "https://registry.scalar.com/@scalar/schemas/config", + "scalar": "2.0.0", + "info": { + "title": "Memoh Documentation", + "description": "Multi-member long-memory AI agent platform with desktop and server deploy modes." + }, + "assetsDir": "docs/public", + "siteConfig": { + "customDomain": "docs.memoh.ai", + "logo": "docs/public/logo.svg", + "theme": "default", + "colorScheme": { + "default": "system", + "showToggle": true + }, + "layout": { + "toc": true, + "header": true, + "search": { + "enabled": true, + "position": "sidebar" + } + }, + "head": { + "links": [ + { + "rel": "icon", + "href": "/logo.svg" + } + ] + }, + "footer": { + "filepath": "docs/footer.html" + }, + "routing": { + "redirects": [ + { + "from": "/channels/dingtalk", + "to": "/integrations/channels/dingtalk" + }, + { + "from": "/channels/discord", + "to": "/integrations/channels/discord" + }, + { + "from": "/channels/feishu", + "to": "/integrations/channels/feishu" + }, + { + "from": "/channels", + "to": "/integrations/channels" + }, + { + "from": "/channels/matrix", + "to": "/integrations/channels/matrix" + }, + { + "from": "/channels/misskey", + "to": "/integrations/channels/misskey" + }, + { + "from": "/channels/qq", + "to": "/integrations/channels/qq" + }, + { + "from": "/channels/slack", + "to": "/integrations/channels/slack" + }, + { + "from": "/channels/telegram", + "to": "/integrations/channels/telegram" + }, + { + "from": "/channels/wechatoa", + "to": "/integrations/channels/wechatoa" + }, + { + "from": "/channels/wecom", + "to": "/integrations/channels/wecom" + }, + { + "from": "/channels/weixin", + "to": "/integrations/channels/weixin" + }, + { + "from": "/getting-started/access", + "to": "/guides/access" + }, + { + "from": "/getting-started/acp", + "to": "/guides/acp" + }, + { + "from": "/getting-started/bot", + "to": "/guides/bot" + }, + { + "from": "/getting-started/browser-computer-use", + "to": "/guides/browser-computer-use" + }, + { + "from": "/getting-started/channels", + "to": "/integrations/channels" + }, + { + "from": "/getting-started/compaction", + "to": "/guides/compaction" + }, + { + "from": "/getting-started/container", + "to": "/guides/container" + }, + { + "from": "/getting-started/email", + "to": "/guides/email" + }, + { + "from": "/getting-started/files", + "to": "/guides/files" + }, + { + "from": "/getting-started/heartbeat", + "to": "/guides/heartbeat" + }, + { + "from": "/getting-started/mcp", + "to": "/guides/mcp" + }, + { + "from": "/getting-started/memory", + "to": "/guides/memory" + }, + { + "from": "/getting-started/plugins", + "to": "/guides/plugins" + }, + { + "from": "/getting-started/provider-and-model", + "to": "/integrations/providers/llm" + }, + { + "from": "/getting-started/schedule", + "to": "/guides/schedule" + }, + { + "from": "/getting-started/search-provider", + "to": "/integrations/providers/web-search" + }, + { + "from": "/getting-started/sessions", + "to": "/guides/sessions" + }, + { + "from": "/getting-started/skills", + "to": "/guides/skills" + }, + { + "from": "/getting-started/slash-commands", + "to": "/guides/slash-commands" + }, + { + "from": "/getting-started/supermarket", + "to": "/guides/supermarket" + }, + { + "from": "/installation/desktop", + "to": "/self-hosted/desktop" + }, + { + "from": "/installation/docker", + "to": "/self-hosted/docker" + }, + { + "from": "/installation", + "to": "/self-hosted" + }, + { + "from": "/installation/kata-containerd", + "to": "/self-hosted/kata-containerd" + }, + { + "from": "/installation/sqlite", + "to": "/self-hosted/sqlite" + }, + { + "from": "/installation/workspace-backends", + "to": "/self-hosted/workspace-backends" + }, + { + "from": "/memory-providers/builtin", + "to": "/integrations/providers/memory/builtin" + }, + { + "from": "/memory-providers", + "to": "/integrations/providers/memory" + }, + { + "from": "/memory-providers/mem0", + "to": "/integrations/providers/memory/mem0" + }, + { + "from": "/memory-providers/openviking", + "to": "/integrations/providers/memory/openviking" + }, + { + "from": "/tts-providers/edge", + "to": "/integrations/providers/tts/edge" + }, + { + "from": "/tts-providers", + "to": "/integrations/providers/tts" + }, + { + "from": "/zh/channels/dingtalk", + "to": "/zh/integrations/channels/dingtalk" + }, + { + "from": "/zh/channels/discord", + "to": "/zh/integrations/channels/discord" + }, + { + "from": "/zh/channels/feishu", + "to": "/zh/integrations/channels/feishu" + }, + { + "from": "/zh/channels", + "to": "/zh/integrations/channels" + }, + { + "from": "/zh/channels/matrix", + "to": "/zh/integrations/channels/matrix" + }, + { + "from": "/zh/channels/misskey", + "to": "/zh/integrations/channels/misskey" + }, + { + "from": "/zh/channels/qq", + "to": "/zh/integrations/channels/qq" + }, + { + "from": "/zh/channels/slack", + "to": "/zh/integrations/channels/slack" + }, + { + "from": "/zh/channels/telegram", + "to": "/zh/integrations/channels/telegram" + }, + { + "from": "/zh/channels/wechatoa", + "to": "/zh/integrations/channels/wechatoa" + }, + { + "from": "/zh/channels/wecom", + "to": "/zh/integrations/channels/wecom" + }, + { + "from": "/zh/channels/weixin", + "to": "/zh/integrations/channels/weixin" + }, + { + "from": "/zh/getting-started/access", + "to": "/zh/guides/access" + }, + { + "from": "/zh/getting-started/acp", + "to": "/zh/guides/acp" + }, + { + "from": "/zh/getting-started/bot", + "to": "/zh/guides/bot" + }, + { + "from": "/zh/getting-started/browser-computer-use", + "to": "/zh/guides/browser-computer-use" + }, + { + "from": "/zh/getting-started/channels", + "to": "/zh/integrations/channels" + }, + { + "from": "/zh/getting-started/compaction", + "to": "/zh/guides/compaction" + }, + { + "from": "/zh/getting-started/container", + "to": "/zh/guides/container" + }, + { + "from": "/zh/getting-started/email", + "to": "/zh/guides/email" + }, + { + "from": "/zh/getting-started/files", + "to": "/zh/guides/files" + }, + { + "from": "/zh/getting-started/heartbeat", + "to": "/zh/guides/heartbeat" + }, + { + "from": "/zh/getting-started/mcp", + "to": "/zh/guides/mcp" + }, + { + "from": "/zh/getting-started/memory", + "to": "/zh/guides/memory" + }, + { + "from": "/zh/getting-started/plugins", + "to": "/zh/guides/plugins" + }, + { + "from": "/zh/getting-started/provider-and-model", + "to": "/zh/integrations/providers/llm" + }, + { + "from": "/zh/getting-started/schedule", + "to": "/zh/guides/schedule" + }, + { + "from": "/zh/getting-started/search-provider", + "to": "/zh/integrations/providers/web-search" + }, + { + "from": "/zh/getting-started/sessions", + "to": "/zh/guides/sessions" + }, + { + "from": "/zh/getting-started/skills", + "to": "/zh/guides/skills" + }, + { + "from": "/zh/getting-started/slash-commands", + "to": "/zh/guides/slash-commands" + }, + { + "from": "/zh/getting-started/supermarket", + "to": "/zh/guides/supermarket" + }, + { + "from": "/zh/installation/desktop", + "to": "/zh/self-hosted/desktop" + }, + { + "from": "/zh/installation/docker", + "to": "/zh/self-hosted/docker" + }, + { + "from": "/zh/installation", + "to": "/zh/self-hosted" + }, + { + "from": "/zh/installation/kata-containerd", + "to": "/zh/self-hosted/kata-containerd" + }, + { + "from": "/zh/installation/sqlite", + "to": "/zh/self-hosted/sqlite" + }, + { + "from": "/zh/installation/workspace-backends", + "to": "/zh/self-hosted/workspace-backends" + }, + { + "from": "/zh/memory-providers/builtin", + "to": "/zh/integrations/providers/memory/builtin" + }, + { + "from": "/zh/memory-providers", + "to": "/zh/integrations/providers/memory" + }, + { + "from": "/zh/memory-providers/mem0", + "to": "/zh/integrations/providers/memory/mem0" + }, + { + "from": "/zh/memory-providers/openviking", + "to": "/zh/integrations/providers/memory/openviking" + }, + { + "from": "/zh/tts-providers/edge", + "to": "/zh/integrations/providers/tts/edge" + }, + { + "from": "/zh/tts-providers", + "to": "/zh/integrations/providers/tts" + } + ] + } + }, + "versions": { + "default": { + "title": "English", + "tabs": [ + { + "title": "Guides", + "to": "/guides", + "icon": "phosphor/regular/book-open" + }, + { + "title": "Integrations", + "to": "/integrations", + "icon": "phosphor/regular/plugs-connected" + }, + { + "title": "Self-hosted", + "to": "/self-hosted", + "icon": "phosphor/regular/hard-drives" + } + ], + "header": [ + { + "type": "link", + "title": "GitHub", + "icon": "phosphor/regular/github-logo", + "to": "https://github.com/felinics/Memoh", + "newTab": true, + "align": "end" + } + ], + "routes": { + "/": { + "type": "page", + "title": "Memoh Documentation", + "filepath": "docs/index.mdx", + "icon": "phosphor/regular/house" + }, + "/guides": { + "type": "group", + "title": "Guides", + "icon": "phosphor/regular/book-open", + "children": { + "": { + "type": "page", + "title": "Overview", + "filepath": "docs/guides/index.md" + }, + "/preferences": { + "type": "page", + "title": "Preferences", + "filepath": "docs/guides/preferences.md" + }, + "/bot": { + "type": "page", + "title": "Bot", + "filepath": "docs/guides/bot.md" + }, + "/sessions": { + "type": "page", + "title": "Sessions", + "filepath": "docs/guides/sessions.md" + }, + "/acp": { + "type": "page", + "title": "Agents / ACP", + "filepath": "docs/guides/acp.md" + }, + "/access": { + "type": "page", + "title": "Access Control", + "filepath": "docs/guides/access.md" + }, + "/container": { + "type": "page", + "title": "Workspace", + "filepath": "docs/guides/container.md" + }, + "/computers": { + "type": "page", + "title": "Computers", + "filepath": "docs/guides/computers.mdx" + }, + "/browser-computer-use": { + "type": "page", + "title": "Browser / Computer Use", + "filepath": "docs/guides/browser-computer-use.md" + }, + "/files": { + "type": "page", + "title": "Files", + "filepath": "docs/guides/files.md" + }, + "/skills": { + "type": "page", + "title": "Skills", + "filepath": "docs/guides/skills.md" + }, + "/supermarket": { + "type": "page", + "title": "Supermarket", + "filepath": "docs/guides/supermarket.md" + }, + "/connectors": { + "type": "page", + "title": "Connectors", + "filepath": "docs/guides/connectors.md" + }, + "/plugins": { + "type": "page", + "title": "Plugins", + "filepath": "docs/guides/plugins.md" + }, + "/hooks": { + "type": "page", + "title": "Hooks", + "filepath": "docs/guides/hooks.md" + }, + "/mcp": { + "type": "page", + "title": "MCP", + "filepath": "docs/guides/mcp.md" + }, + "/memory": { + "type": "page", + "title": "Memory", + "filepath": "docs/guides/memory.md" + }, + "/compaction": { + "type": "page", + "title": "Compaction", + "filepath": "docs/guides/compaction.md" + }, + "/heartbeat": { + "type": "page", + "title": "Heartbeat", + "filepath": "docs/guides/heartbeat.md" + }, + "/schedule": { + "type": "page", + "title": "Scheduled Tasks", + "filepath": "docs/guides/schedule.md" + }, + "/email": { + "type": "page", + "title": "Email", + "filepath": "docs/guides/email.mdx" + }, + "/slash-commands": { + "type": "page", + "title": "Slash Commands", + "filepath": "docs/guides/slash-commands.md" + } + } + }, + "/integrations": { + "type": "group", + "title": "Integrations", + "icon": "phosphor/regular/plugs-connected", + "children": { + "": { + "type": "page", + "title": "Overview", + "filepath": "docs/integrations/index.md" + }, + "/channels": { + "type": "group", + "title": "Channels", + "icon": "phosphor/regular/chats-circle", + "children": { + "": { + "type": "page", + "title": "Overview", + "filepath": "docs/integrations/channels/index.md" + }, + "/slack": { + "type": "page", + "title": "Slack", + "filepath": "docs/integrations/channels/slack.md" + }, + "/telegram": { + "type": "page", + "title": "Telegram", + "filepath": "docs/integrations/channels/telegram.md" + }, + "/feishu": { + "type": "page", + "title": "Feishu (Lark)", + "filepath": "docs/integrations/channels/feishu.md" + }, + "/discord": { + "type": "page", + "title": "Discord", + "filepath": "docs/integrations/channels/discord.md" + }, + "/qq": { + "type": "page", + "title": "QQ", + "filepath": "docs/integrations/channels/qq.md" + }, + "/matrix": { + "type": "page", + "title": "Matrix", + "filepath": "docs/integrations/channels/matrix.md" + }, + "/misskey": { + "type": "page", + "title": "Misskey", + "filepath": "docs/integrations/channels/misskey.md" + }, + "/line": { + "type": "page", + "title": "LINE", + "filepath": "docs/integrations/channels/line.md" + }, + "/dingtalk": { + "type": "page", + "title": "DingTalk", + "filepath": "docs/integrations/channels/dingtalk.md" + }, + "/wecom": { + "type": "page", + "title": "WeCom (WeWork)", + "filepath": "docs/integrations/channels/wecom.md" + }, + "/weixin": { + "type": "page", + "title": "WeChat", + "filepath": "docs/integrations/channels/weixin.md" + }, + "/wechatoa": { + "type": "page", + "title": "WeChat Official Account", + "filepath": "docs/integrations/channels/wechatoa.md" + } + } + }, + "/providers": { + "type": "group", + "title": "Providers", + "icon": "phosphor/regular/stack", + "children": { + "": { + "type": "page", + "title": "Overview", + "filepath": "docs/integrations/providers/index.md" + }, + "/llm": { + "type": "page", + "title": "LLM Providers", + "filepath": "docs/integrations/providers/llm.mdx" + }, + "/web-search": { + "type": "page", + "title": "Web Search Providers", + "filepath": "docs/integrations/providers/web-search.md" + }, + "/video": { + "type": "page", + "title": "Video Providers", + "filepath": "docs/integrations/providers/video.md" + }, + "/memory": { + "type": "group", + "title": "Memory Providers", + "icon": "phosphor/regular/brain", + "children": { + "": { + "type": "page", + "title": "Overview", + "filepath": "docs/integrations/providers/memory/index.md" + }, + "/builtin": { + "type": "page", + "title": "Built-in", + "filepath": "docs/integrations/providers/memory/builtin.md" + }, + "/mem0": { + "type": "page", + "title": "Mem0", + "filepath": "docs/integrations/providers/memory/mem0.md" + }, + "/openviking": { + "type": "page", + "title": "OpenViking", + "filepath": "docs/integrations/providers/memory/openviking.md" + } + } + }, + "/tts": { + "type": "group", + "title": "TTS Providers", + "icon": "phosphor/regular/speaker-high", + "children": { + "": { + "type": "page", + "title": "Overview", + "filepath": "docs/integrations/providers/tts/index.md" + }, + "/edge": { + "type": "page", + "title": "Edge TTS", + "filepath": "docs/integrations/providers/tts/edge.md" + } + } + } + } + } + } + }, + "/self-hosted": { + "type": "group", + "title": "Self-hosted", + "icon": "phosphor/regular/hard-drives", + "children": { + "": { + "type": "page", + "title": "Overview", + "filepath": "docs/self-hosted/index.md" + }, + "/desktop": { + "type": "page", + "title": "Desktop", + "filepath": "docs/self-hosted/desktop.md" + }, + "/docker": { + "type": "page", + "title": "Server Deploy", + "filepath": "docs/self-hosted/docker.md" + }, + "/workspace-backends": { + "type": "page", + "title": "Workspace Backends", + "filepath": "docs/self-hosted/workspace-backends.mdx" + }, + "/sqlite": { + "type": "page", + "title": "SQLite", + "filepath": "docs/self-hosted/sqlite.md" + }, + "/kata-containerd": { + "type": "page", + "title": "Containerd + Kata (Removed)", + "filepath": "docs/self-hosted/kata-containerd.mdx", + "showInSidebar": false + } + } + }, + "/about": { + "type": "page", + "title": "About", + "filepath": "docs/about.md", + "showInSidebar": false + } + } + }, + "zh": { + "title": "简体中文", + "tabs": [ + { + "title": "教程", + "to": "/guides", + "icon": "phosphor/regular/book-open" + }, + { + "title": "集成", + "to": "/integrations", + "icon": "phosphor/regular/plugs-connected" + }, + { + "title": "自托管", + "to": "/self-hosted", + "icon": "phosphor/regular/hard-drives" + } + ], + "header": [ + { + "type": "link", + "title": "GitHub", + "icon": "phosphor/regular/github-logo", + "to": "https://github.com/felinics/Memoh", + "newTab": true, + "align": "end" + } + ], + "routes": { + "/": { + "type": "page", + "title": "Memoh 中文文档", + "filepath": "docs/zh/index.mdx", + "icon": "phosphor/regular/house" + }, + "/guides": { + "type": "group", + "title": "教程", + "icon": "phosphor/regular/book-open", + "children": { + "": { + "type": "page", + "title": "总览", + "filepath": "docs/zh/guides/index.md" + }, + "/preferences": { + "type": "page", + "title": "用户偏好", + "filepath": "docs/zh/guides/preferences.md" + }, + "/bot": { + "type": "page", + "title": "机器人", + "filepath": "docs/zh/guides/bot.md" + }, + "/sessions": { + "type": "page", + "title": "会话", + "filepath": "docs/zh/guides/sessions.md" + }, + "/acp": { + "type": "page", + "title": "Agents / ACP", + "filepath": "docs/zh/guides/acp.md" + }, + "/access": { + "type": "page", + "title": "访问控制", + "filepath": "docs/zh/guides/access.md" + }, + "/container": { + "type": "page", + "title": "Workspace", + "filepath": "docs/zh/guides/container.md" + }, + "/computers": { + "type": "page", + "title": "电脑(远程 Runtime)", + "filepath": "docs/zh/guides/computers.mdx" + }, + "/browser-computer-use": { + "type": "page", + "title": "Browser / Computer Use", + "filepath": "docs/zh/guides/browser-computer-use.md" + }, + "/files": { + "type": "page", + "title": "文件", + "filepath": "docs/zh/guides/files.md" + }, + "/skills": { + "type": "page", + "title": "技能", + "filepath": "docs/zh/guides/skills.md" + }, + "/supermarket": { + "type": "page", + "title": "超市", + "filepath": "docs/zh/guides/supermarket.md" + }, + "/connectors": { + "type": "page", + "title": "连接器", + "filepath": "docs/zh/guides/connectors.md" + }, + "/plugins": { + "type": "page", + "title": "插件", + "filepath": "docs/zh/guides/plugins.md" + }, + "/hooks": { + "type": "page", + "title": "Hooks", + "filepath": "docs/zh/guides/hooks.md" + }, + "/mcp": { + "type": "page", + "title": "MCP", + "filepath": "docs/zh/guides/mcp.md" + }, + "/memory": { + "type": "page", + "title": "长期记忆", + "filepath": "docs/zh/guides/memory.md" + }, + "/compaction": { + "type": "page", + "title": "上下文压缩", + "filepath": "docs/zh/guides/compaction.md" + }, + "/heartbeat": { + "type": "page", + "title": "心跳", + "filepath": "docs/zh/guides/heartbeat.md" + }, + "/schedule": { + "type": "page", + "title": "计划任务", + "filepath": "docs/zh/guides/schedule.md" + }, + "/email": { + "type": "page", + "title": "邮件", + "filepath": "docs/zh/guides/email.mdx" + }, + "/slash-commands": { + "type": "page", + "title": "斜杠命令", + "filepath": "docs/zh/guides/slash-commands.md" + } + } + }, + "/integrations": { + "type": "group", + "title": "集成", + "icon": "phosphor/regular/plugs-connected", + "children": { + "": { + "type": "page", + "title": "总览", + "filepath": "docs/zh/integrations/index.md" + }, + "/channels": { + "type": "group", + "title": "渠道", + "icon": "phosphor/regular/chats-circle", + "children": { + "": { + "type": "page", + "title": "总览", + "filepath": "docs/zh/integrations/channels/index.md" + }, + "/slack": { + "type": "page", + "title": "Slack", + "filepath": "docs/zh/integrations/channels/slack.md" + }, + "/telegram": { + "type": "page", + "title": "Telegram", + "filepath": "docs/zh/integrations/channels/telegram.md" + }, + "/feishu": { + "type": "page", + "title": "飞书", + "filepath": "docs/zh/integrations/channels/feishu.md" + }, + "/discord": { + "type": "page", + "title": "Discord", + "filepath": "docs/zh/integrations/channels/discord.md" + }, + "/qq": { + "type": "page", + "title": "QQ", + "filepath": "docs/zh/integrations/channels/qq.md" + }, + "/matrix": { + "type": "page", + "title": "Matrix", + "filepath": "docs/zh/integrations/channels/matrix.md" + }, + "/misskey": { + "type": "page", + "title": "Misskey", + "filepath": "docs/zh/integrations/channels/misskey.md" + }, + "/line": { + "type": "page", + "title": "LINE", + "filepath": "docs/zh/integrations/channels/line.md" + }, + "/dingtalk": { + "type": "page", + "title": "钉钉", + "filepath": "docs/zh/integrations/channels/dingtalk.md" + }, + "/wecom": { + "type": "page", + "title": "企微", + "filepath": "docs/zh/integrations/channels/wecom.md" + }, + "/weixin": { + "type": "page", + "title": "微信", + "filepath": "docs/zh/integrations/channels/weixin.md" + }, + "/wechatoa": { + "type": "page", + "title": "微信公众号", + "filepath": "docs/zh/integrations/channels/wechatoa.md" + } + } + }, + "/providers": { + "type": "group", + "title": "提供方", + "icon": "phosphor/regular/stack", + "children": { + "": { + "type": "page", + "title": "总览", + "filepath": "docs/zh/integrations/providers/index.md" + }, + "/llm": { + "type": "page", + "title": "LLM 提供方", + "filepath": "docs/zh/integrations/providers/llm.mdx" + }, + "/web-search": { + "type": "page", + "title": "网页搜索提供方", + "filepath": "docs/zh/integrations/providers/web-search.md" + }, + "/video": { + "type": "page", + "title": "视频提供方", + "filepath": "docs/zh/integrations/providers/video.md" + }, + "/memory": { + "type": "group", + "title": "记忆提供方", + "icon": "phosphor/regular/brain", + "children": { + "": { + "type": "page", + "title": "总览", + "filepath": "docs/zh/integrations/providers/memory/index.md" + }, + "/builtin": { + "type": "page", + "title": "内置", + "filepath": "docs/zh/integrations/providers/memory/builtin.md" + }, + "/mem0": { + "type": "page", + "title": "Mem0", + "filepath": "docs/zh/integrations/providers/memory/mem0.md" + }, + "/openviking": { + "type": "page", + "title": "OpenViking", + "filepath": "docs/zh/integrations/providers/memory/openviking.md" + } + } + }, + "/tts": { + "type": "group", + "title": "TTS 提供方", + "icon": "phosphor/regular/speaker-high", + "children": { + "": { + "type": "page", + "title": "总览", + "filepath": "docs/zh/integrations/providers/tts/index.md" + }, + "/edge": { + "type": "page", + "title": "Edge TTS", + "filepath": "docs/zh/integrations/providers/tts/edge.md" + } + } + } + } + } + } + }, + "/self-hosted": { + "type": "group", + "title": "自托管", + "icon": "phosphor/regular/hard-drives", + "children": { + "": { + "type": "page", + "title": "总览", + "filepath": "docs/zh/self-hosted/index.md" + }, + "/desktop": { + "type": "page", + "title": "桌面版", + "filepath": "docs/zh/self-hosted/desktop.md" + }, + "/docker": { + "type": "page", + "title": "服务器部署", + "filepath": "docs/zh/self-hosted/docker.md" + }, + "/workspace-backends": { + "type": "page", + "title": "Workspace 后端", + "filepath": "docs/zh/self-hosted/workspace-backends.mdx" + }, + "/sqlite": { + "type": "page", + "title": "SQLite", + "filepath": "docs/zh/self-hosted/sqlite.md" + }, + "/kata-containerd": { + "type": "page", + "title": "Containerd + Kata(已移除)", + "filepath": "docs/zh/self-hosted/kata-containerd.mdx", + "showInSidebar": false + } + } + }, + "/about": { + "type": "page", + "title": "关于", + "filepath": "docs/zh/about.md", + "showInSidebar": false + } + } + } + } +}