From 08b4f67eda21ea8bef1a8b08aa06f222068a2110 Mon Sep 17 00:00:00 2001 From: sheepbox8646 Date: Mon, 9 Mar 2026 15:38:06 +0000 Subject: [PATCH] deploy: f8bfd7c1070ba150e211df5eae46b1d4f396c3dd --- 404.html | 4 +-- about.html | 12 ++++----- ...ut.md.gLogz9hP.js => about.md.Dtv0dtOs.js} | 2 +- ...z9hP.lean.js => about.md.Dtv0dtOs.lean.js} | 2 +- assets/{app.BC6GRvcN.js => app.CFQrAvF4.js} | 2 +- ...GCU.js => blogs_2026-02-16.md.cjgZmunL.js} | 2 +- ...s => blogs_2026-02-16.md.cjgZmunL.lean.js} | 2 +- ...DyCOc_Zm.js => blogs_index.md.B2P01evP.js} | 2 +- ...ean.js => blogs_index.md.B2P01evP.lean.js} | 2 +- ...28b.js => channels_discord.md.WNpdGj29.js} | 2 +- ...s => channels_discord.md.WNpdGj29.lean.js} | 2 +- ...F8IG.js => channels_feishu.md.BBJ8KQPd.js} | 2 +- ...js => channels_feishu.md.BBJ8KQPd.lean.js} | 2 +- assets/channels_index.md.Cd1GuQFE.js | 1 - assets/channels_index.md.Cd1GuQFE.lean.js | 1 - assets/channels_index.md.T_VHXXZf.js | 1 + assets/channels_index.md.T_VHXXZf.lean.js | 1 + assets/channels_qq.md.B_4bodh-.js | 1 + assets/channels_qq.md.B_4bodh-.lean.js | 1 + ...Hx.js => channels_telegram.md.B9i-uoiX.js} | 2 +- ... => channels_telegram.md.B9i-uoiX.lean.js} | 2 +- .../chunks/@localSearchIndexroot.CiUS92bE.js | 1 - .../chunks/@localSearchIndexroot.DdL7OiJi.js | 1 + ...BTWqjx.js => VPLocalSearchBox.DE8nKMEK.js} | 2 +- assets/chunks/framework.BZohXCq9.js | 19 ++++++++++++++ assets/chunks/framework.ePeAWSvT.js | 19 -------------- .../{theme.Dze9WHF4.js => theme.B0ckB4ri.js} | 4 +-- ....js => getting-started_bot.md.AR4RHnpe.js} | 2 +- ...> getting-started_bot.md.AR4RHnpe.lean.js} | 2 +- ...=> getting-started_browser.md.B8YEEooM.js} | 2 +- ...tting-started_browser.md.B8YEEooM.lean.js} | 2 +- .../getting-started_channels.md.C0YPWL-y.js | 1 + ...tting-started_channels.md.C0YPWL-y.lean.js | 1 + .../getting-started_channels.md.DiSUpicV.js | 1 - ...tting-started_channels.md.DiSUpicV.lean.js | 1 - ... getting-started_container.md.D49M0dHe.js} | 2 +- ...ing-started_container.md.D49M0dHe.lean.js} | 2 +- ...s => getting-started_email.md.BRkUZLh2.js} | 2 +- ...getting-started_email.md.BRkUZLh2.lean.js} | 2 +- ...s => getting-started_files.md.CczR71or.js} | 2 +- ...getting-started_files.md.CczR71or.lean.js} | 2 +- ... getting-started_heartbeat.md.B-SMiJUD.js} | 2 +- ...ing-started_heartbeat.md.B-SMiJUD.lean.js} | 2 +- ....js => getting-started_mcp.md.Bb2toM2o.js} | 2 +- ...> getting-started_mcp.md.Bb2toM2o.lean.js} | 2 +- ... => getting-started_memory.md.Dt7Ez9Lk.js} | 2 +- ...etting-started_memory.md.Dt7Ez9Lk.lean.js} | 2 +- ...started_provider-and-model.md.BquaPnJe.js} | 2 +- ...ed_provider-and-model.md.BquaPnJe.lean.js} | 2 +- ...> getting-started_schedule.md.CNDu3SiN.js} | 2 +- ...ting-started_schedule.md.CNDu3SiN.lean.js} | 2 +- ...ng-started_search-provider.md.R9B5DkBj.js} | 2 +- ...arted_search-provider.md.R9B5DkBj.lean.js} | 2 +- ... => getting-started_skills.md.DzSZ-qiC.js} | 2 +- ...etting-started_skills.md.DzSZ-qiC.lean.js} | 2 +- ... getting-started_subagents.md.6oBLlW8a.js} | 2 +- ...ing-started_subagents.md.6oBLlW8a.lean.js} | 2 +- ...ex.md.7vMrZCVa.js => index.md.D1yGsPie.js} | 2 +- ...ZCVa.lean.js => index.md.D1yGsPie.lean.js} | 2 +- ....js => installation_docker.md.qkaakAVc.js} | 2 +- ...> installation_docker.md.qkaakAVc.lean.js} | 2 +- ...> memory-providers_builtin.md.BDxazTz6.js} | 2 +- ...ory-providers_builtin.md.BDxazTz6.lean.js} | 2 +- ... => memory-providers_index.md.DNPBOVmb.js} | 2 +- ...emory-providers_index.md.DNPBOVmb.lean.js} | 2 +- ...cepts_identity-and-binding.md.7e9GdoK6.js} | 2 +- ..._identity-and-binding.md.7e9GdoK6.lean.js} | 2 +- ...vt.js => zh_concepts_index.md.Brd21jcS.js} | 2 +- ... => zh_concepts_index.md.Brd21jcS.lean.js} | 2 +- ...md.DbGu2QT1.js => zh_index.md.CZQRt_rQ.js} | 2 +- ...1.lean.js => zh_index.md.CZQRt_rQ.lean.js} | 2 +- ...js => zh_style_terminology.md.DLv5QofI.js} | 2 +- ... zh_style_terminology.md.DLv5QofI.lean.js} | 2 +- blogs/2026-02-16.html | 10 +++---- blogs/index.html | 10 +++---- channels/discord.html | 12 ++++----- channels/feishu.html | 12 ++++----- channels/index.html | 12 ++++----- channels/qq.html | 26 +++++++++++++++++++ channels/telegram.html | 12 ++++----- getting-started/bot.html | 12 ++++----- getting-started/browser.html | 12 ++++----- getting-started/channels.html | 12 ++++----- getting-started/container.html | 12 ++++----- getting-started/email.html | 12 ++++----- getting-started/files.html | 12 ++++----- getting-started/heartbeat.html | 12 ++++----- getting-started/mcp.html | 12 ++++----- getting-started/memory.html | 12 ++++----- getting-started/provider-and-model.html | 12 ++++----- getting-started/schedule.html | 12 ++++----- getting-started/search-provider.html | 12 ++++----- getting-started/skills.html | 12 ++++----- getting-started/subagents.html | 12 ++++----- hashmap.json | 2 +- index.html | 12 ++++----- installation/docker.html | 12 ++++----- memory-providers/builtin.html | 12 ++++----- memory-providers/index.html | 12 ++++----- zh/concepts/identity-and-binding.html | 10 +++---- zh/concepts/index.html | 10 +++---- zh/index.html | 10 +++---- zh/style/terminology.html | 10 +++---- 103 files changed, 281 insertions(+), 253 deletions(-) rename assets/{about.md.gLogz9hP.js => about.md.Dtv0dtOs.js} (98%) rename assets/{about.md.gLogz9hP.lean.js => about.md.Dtv0dtOs.lean.js} (68%) rename assets/{app.BC6GRvcN.js => app.CFQrAvF4.js} (90%) rename assets/{blogs_2026-02-16.md.CVgn4GCU.js => blogs_2026-02-16.md.cjgZmunL.js} (98%) rename assets/{blogs_2026-02-16.md.CVgn4GCU.lean.js => blogs_2026-02-16.md.cjgZmunL.lean.js} (82%) rename assets/{blogs_index.md.DyCOc_Zm.js => blogs_index.md.B2P01evP.js} (82%) rename assets/{blogs_index.md.DyCOc_Zm.lean.js => blogs_index.md.B2P01evP.lean.js} (82%) rename assets/{channels_discord.md.DBWQl28b.js => channels_discord.md.WNpdGj29.js} (98%) rename assets/{channels_discord.md.DBWQl28b.lean.js => channels_discord.md.WNpdGj29.lean.js} (85%) rename assets/{channels_feishu.md.-Rc8F8IG.js => channels_feishu.md.BBJ8KQPd.js} (96%) rename assets/{channels_feishu.md.-Rc8F8IG.lean.js => channels_feishu.md.BBJ8KQPd.lean.js} (72%) delete mode 100644 assets/channels_index.md.Cd1GuQFE.js delete mode 100644 assets/channels_index.md.Cd1GuQFE.lean.js create mode 100644 assets/channels_index.md.T_VHXXZf.js create mode 100644 assets/channels_index.md.T_VHXXZf.lean.js create mode 100644 assets/channels_qq.md.B_4bodh-.js create mode 100644 assets/channels_qq.md.B_4bodh-.lean.js rename assets/{channels_telegram.md.URjBaQHx.js => channels_telegram.md.B9i-uoiX.js} (98%) rename assets/{channels_telegram.md.URjBaQHx.lean.js => channels_telegram.md.B9i-uoiX.lean.js} (85%) delete mode 100644 assets/chunks/@localSearchIndexroot.CiUS92bE.js create mode 100644 assets/chunks/@localSearchIndexroot.DdL7OiJi.js rename assets/chunks/{VPLocalSearchBox.DWBTWqjx.js => VPLocalSearchBox.DE8nKMEK.js} (99%) create mode 100644 assets/chunks/framework.BZohXCq9.js delete mode 100644 assets/chunks/framework.ePeAWSvT.js rename assets/chunks/{theme.Dze9WHF4.js => theme.B0ckB4ri.js} (99%) rename assets/{getting-started_bot.md.CxYqtI4G.js => getting-started_bot.md.AR4RHnpe.js} (98%) rename assets/{getting-started_bot.md.CxYqtI4G.lean.js => getting-started_bot.md.AR4RHnpe.lean.js} (85%) rename assets/{getting-started_browser.md.CHy6pyTr.js => getting-started_browser.md.B8YEEooM.js} (98%) rename assets/{getting-started_browser.md.CHy6pyTr.lean.js => getting-started_browser.md.B8YEEooM.lean.js} (86%) create mode 100644 assets/getting-started_channels.md.C0YPWL-y.js create mode 100644 assets/getting-started_channels.md.C0YPWL-y.lean.js delete mode 100644 assets/getting-started_channels.md.DiSUpicV.js delete mode 100644 assets/getting-started_channels.md.DiSUpicV.lean.js rename assets/{getting-started_container.md.CiSK-fMx.js => getting-started_container.md.D49M0dHe.js} (97%) rename assets/{getting-started_container.md.CiSK-fMx.lean.js => getting-started_container.md.D49M0dHe.lean.js} (73%) rename assets/{getting-started_email.md.CKJOqdzG.js => getting-started_email.md.BRkUZLh2.js} (97%) rename assets/{getting-started_email.md.CKJOqdzG.lean.js => getting-started_email.md.BRkUZLh2.lean.js} (72%) rename assets/{getting-started_files.md.Cl6keVS-.js => getting-started_files.md.CczR71or.js} (96%) rename assets/{getting-started_files.md.Cl6keVS-.lean.js => getting-started_files.md.CczR71or.lean.js} (72%) rename assets/{getting-started_heartbeat.md.CgIS9a7z.js => getting-started_heartbeat.md.B-SMiJUD.js} (98%) rename assets/{getting-started_heartbeat.md.CgIS9a7z.lean.js => getting-started_heartbeat.md.B-SMiJUD.lean.js} (86%) rename assets/{getting-started_mcp.md.DyRwe04F.js => getting-started_mcp.md.Bb2toM2o.js} (98%) rename assets/{getting-started_mcp.md.DyRwe04F.lean.js => getting-started_mcp.md.Bb2toM2o.lean.js} (85%) rename assets/{getting-started_memory.md.CVd8M6Eu.js => getting-started_memory.md.Dt7Ez9Lk.js} (98%) rename assets/{getting-started_memory.md.CVd8M6Eu.lean.js => getting-started_memory.md.Dt7Ez9Lk.lean.js} (86%) rename assets/{getting-started_provider-and-model.md.BGpLYgEh.js => getting-started_provider-and-model.md.BquaPnJe.js} (98%) rename assets/{getting-started_provider-and-model.md.BGpLYgEh.lean.js => getting-started_provider-and-model.md.BquaPnJe.lean.js} (87%) rename assets/{getting-started_schedule.md.B0pL41RB.js => getting-started_schedule.md.CNDu3SiN.js} (98%) rename assets/{getting-started_schedule.md.B0pL41RB.lean.js => getting-started_schedule.md.CNDu3SiN.lean.js} (72%) rename assets/{getting-started_search-provider.md.CWTVwyy0.js => getting-started_search-provider.md.R9B5DkBj.js} (97%) rename assets/{getting-started_search-provider.md.CWTVwyy0.lean.js => getting-started_search-provider.md.R9B5DkBj.lean.js} (73%) rename assets/{getting-started_skills.md.EnvAtRea.js => getting-started_skills.md.DzSZ-qiC.js} (97%) rename assets/{getting-started_skills.md.EnvAtRea.lean.js => getting-started_skills.md.DzSZ-qiC.lean.js} (71%) rename assets/{getting-started_subagents.md.B79V3Ppa.js => getting-started_subagents.md.6oBLlW8a.js} (96%) rename assets/{getting-started_subagents.md.B79V3Ppa.lean.js => getting-started_subagents.md.6oBLlW8a.lean.js} (72%) rename assets/{index.md.7vMrZCVa.js => index.md.D1yGsPie.js} (92%) rename assets/{index.md.7vMrZCVa.lean.js => index.md.D1yGsPie.lean.js} (69%) rename assets/{installation_docker.md.Bk_onHJi.js => installation_docker.md.qkaakAVc.js} (99%) rename assets/{installation_docker.md.Bk_onHJi.lean.js => installation_docker.md.qkaakAVc.lean.js} (71%) rename assets/{memory-providers_builtin.md.Cgc3R-Wx.js => memory-providers_builtin.md.BDxazTz6.js} (97%) rename assets/{memory-providers_builtin.md.Cgc3R-Wx.lean.js => memory-providers_builtin.md.BDxazTz6.lean.js} (73%) rename assets/{memory-providers_index.md.DLe5Y0PL.js => memory-providers_index.md.DNPBOVmb.js} (97%) rename assets/{memory-providers_index.md.DLe5Y0PL.lean.js => memory-providers_index.md.DNPBOVmb.lean.js} (85%) rename assets/{zh_concepts_identity-and-binding.md.B6I6pSqI.js => zh_concepts_identity-and-binding.md.7e9GdoK6.js} (96%) rename assets/{zh_concepts_identity-and-binding.md.B6I6pSqI.lean.js => zh_concepts_identity-and-binding.md.7e9GdoK6.lean.js} (74%) rename assets/{zh_concepts_index.md.uaZIblvt.js => zh_concepts_index.md.Brd21jcS.js} (93%) rename assets/{zh_concepts_index.md.uaZIblvt.lean.js => zh_concepts_index.md.Brd21jcS.lean.js} (71%) rename assets/{zh_index.md.DbGu2QT1.js => zh_index.md.CZQRt_rQ.js} (92%) rename assets/{zh_index.md.DbGu2QT1.lean.js => zh_index.md.CZQRt_rQ.lean.js} (69%) rename assets/{zh_style_terminology.md.C89A7q1C.js => zh_style_terminology.md.DLv5QofI.js} (96%) rename assets/{zh_style_terminology.md.C89A7q1C.lean.js => zh_style_terminology.md.DLv5QofI.lean.js} (71%) create mode 100644 channels/qq.html diff --git a/404.html b/404.html index 387c9cab..db7ccf4e 100644 --- a/404.html +++ b/404.html @@ -9,7 +9,7 @@ - + @@ -17,7 +17,7 @@
- + \ No newline at end of file diff --git a/about.html b/about.html index 1bbe3fa2..cfc15042 100644 --- a/about.html +++ b/about.html @@ -9,18 +9,18 @@ - + - - - + + + -
Skip to content

About Memoh

What is Memoh?

Memoh is a multi-member, structured long-memory, containerized AI agent system platform. You can create your own AI bots and chat with them via Telegram, Discord, Lark (Feishu), Email, Web, or CLI. Every bot has an independent container and memory system, allowing it to edit files, execute commands, and access the network within its own container — like having its own computer and brain.

Key Features

Multi-Bot Management

Create multiple bots. Humans and bots, or bots with each other, can chat privately, in groups, or collaborate. Supports role-based access control (owner / admin / member) with ownership transfer. Build bot teams, or set up accounts for family members to manage daily tasks with bots.

Multi-User & Identity Recognition

Bots can distinguish individual users in group chats, remember each person's context separately, and send direct messages to specific users. Cross-platform identity binding unifies the same person across Telegram, Discord, Lark, and Web.

Containerized Isolation

Each bot runs in its own isolated container (powered by Containerd) with a separate filesystem and network. Bots can freely read/write files and execute commands within their containers without interfering with each other. Supports container snapshots for save/restore.

Memory Engineering

A deeply engineered memory layer:

  • Automatically extracts key facts from each conversation turn and stores them as structured memories
  • Hybrid retrieval: semantic search (via Qdrant vector database) + keyword retrieval (BM25)
  • Loads the last 24 hours of conversation context by default
  • Automatic memory compaction and rebuild capabilities
  • Multi-language auto-detection

Multi-Platform Support

Unified channel adapter architecture for connecting to multiple messaging platforms:

  • Telegram — Full support with streaming, Markdown, attachments, and replies
  • Discord — Full support
  • Lark (Feishu) — Full support
  • Email — Inbound webhook + outbound providers (Mailgun, generic SMTP)
  • Web — Built-in web chat interface with streaming
  • CLI — Command-line chat

Agent Capabilities

Bots come with a rich set of built-in tools:

  • Web Search — Configurable search providers (Brave, Bing, Google, Tavily, SearXNG, DuckDuckGo, and more) for real-time information
  • Browser Automation — Use Playwright-powered browser tools for navigation, clicking, form filling, screenshots, PDF export, and rendered page inspection
  • Subagents — Create specialized subagents with independent context, assign skills, and delegate complex tasks
  • Skills — Define bot personality via IDENTITY.md, SOUL.md, and modular skill files that bots can enable/disable at runtime
  • Container Operations — Read/write files, edit code, and execute commands inside the container
  • Memory Management — Search and manage memories
  • Messaging — Send messages and reactions to specific users or channels

Multi-LLM Provider Support

Flexibly switch between a wide range of LLM providers via four client types:

  • OpenAI Responses API, OpenAI Chat Completions API (including compatible services)
  • Anthropic Messages API, Google Generative AI API

Per-bot model assignment for chat, memory, and embedding.

MCP Protocol Support

Full MCP (Model Context Protocol) support via HTTP, SSE, and Stdio to connect external tool services. Built-in tools for container operations, memory search, web search, scheduling, messaging, and more. Each bot can have its own independent MCP connections.

Scheduled Tasks

Configure scheduled tasks using cron expressions to automatically run commands at specified times. Supports max execution count limits and manual triggers.

Inbox

Cross-channel inbox — messages from other channels are queued and surfaced in the system prompt so the bot never misses context.

Graphical Configuration

Modern web UI (Vue 3 + Tailwind CSS) with real-time streaming chat, tool call visualization, container filesystem browser, and visual configuration for bots, channels, providers, models, MCP, skills, and all other settings. Dark/light theme, i18n. No coding required to set up your own AI bot.

CLI Tool

A command-line tool for bot management, channel configuration, model management, streaming chat, and more — designed for developers who prefer the terminal. See CLI documentation.

Installation

To get Memoh running:

  • Docker — Recommended. One-click or manual setup with Docker Compose. Includes all services (PostgreSQL, Qdrant, Containerd, server, agent, web) — no extra dependencies on the host.

Published under AGPLv3

- +
Skip to content

About Memoh

What is Memoh?

Memoh is a multi-member, structured long-memory, containerized AI agent system platform. You can create your own AI bots and chat with them via Telegram, Discord, Lark (Feishu), Email, Web, or CLI. Every bot has an independent container and memory system, allowing it to edit files, execute commands, and access the network within its own container — like having its own computer and brain.

Key Features

Multi-Bot Management

Create multiple bots. Humans and bots, or bots with each other, can chat privately, in groups, or collaborate. Supports role-based access control (owner / admin / member) with ownership transfer. Build bot teams, or set up accounts for family members to manage daily tasks with bots.

Multi-User & Identity Recognition

Bots can distinguish individual users in group chats, remember each person's context separately, and send direct messages to specific users. Cross-platform identity binding unifies the same person across Telegram, Discord, Lark, and Web.

Containerized Isolation

Each bot runs in its own isolated container (powered by Containerd) with a separate filesystem and network. Bots can freely read/write files and execute commands within their containers without interfering with each other. Supports container snapshots for save/restore.

Memory Engineering

A deeply engineered memory layer:

  • Automatically extracts key facts from each conversation turn and stores them as structured memories
  • Hybrid retrieval: semantic search (via Qdrant vector database) + keyword retrieval (BM25)
  • Loads the last 24 hours of conversation context by default
  • Automatic memory compaction and rebuild capabilities
  • Multi-language auto-detection

Multi-Platform Support

Unified channel adapter architecture for connecting to multiple messaging platforms:

  • Telegram — Full support with streaming, Markdown, attachments, and replies
  • Discord — Full support
  • Lark (Feishu) — Full support
  • Email — Inbound webhook + outbound providers (Mailgun, generic SMTP)
  • Web — Built-in web chat interface with streaming
  • CLI — Command-line chat

Agent Capabilities

Bots come with a rich set of built-in tools:

  • Web Search — Configurable search providers (Brave, Bing, Google, Tavily, SearXNG, DuckDuckGo, and more) for real-time information
  • Browser Automation — Use Playwright-powered browser tools for navigation, clicking, form filling, screenshots, PDF export, and rendered page inspection
  • Subagents — Create specialized subagents with independent context, assign skills, and delegate complex tasks
  • Skills — Define bot personality via IDENTITY.md, SOUL.md, and modular skill files that bots can enable/disable at runtime
  • Container Operations — Read/write files, edit code, and execute commands inside the container
  • Memory Management — Search and manage memories
  • Messaging — Send messages and reactions to specific users or channels

Multi-LLM Provider Support

Flexibly switch between a wide range of LLM providers via four client types:

  • OpenAI Responses API, OpenAI Chat Completions API (including compatible services)
  • Anthropic Messages API, Google Generative AI API

Per-bot model assignment for chat, memory, and embedding.

MCP Protocol Support

Full MCP (Model Context Protocol) support via HTTP, SSE, and Stdio to connect external tool services. Built-in tools for container operations, memory search, web search, scheduling, messaging, and more. Each bot can have its own independent MCP connections.

Scheduled Tasks

Configure scheduled tasks using cron expressions to automatically run commands at specified times. Supports max execution count limits and manual triggers.

Inbox

Cross-channel inbox — messages from other channels are queued and surfaced in the system prompt so the bot never misses context.

Graphical Configuration

Modern web UI (Vue 3 + Tailwind CSS) with real-time streaming chat, tool call visualization, container filesystem browser, and visual configuration for bots, channels, providers, models, MCP, skills, and all other settings. Dark/light theme, i18n. No coding required to set up your own AI bot.

CLI Tool

A command-line tool for bot management, channel configuration, model management, streaming chat, and more — designed for developers who prefer the terminal. See CLI documentation.

Installation

To get Memoh running:

  • Docker — Recommended. One-click or manual setup with Docker Compose. Includes all services (PostgreSQL, Qdrant, Containerd, server, agent, web) — no extra dependencies on the host.

Published under AGPLv3

+ \ No newline at end of file diff --git a/assets/about.md.gLogz9hP.js b/assets/about.md.Dtv0dtOs.js similarity index 98% rename from assets/about.md.gLogz9hP.js rename to assets/about.md.Dtv0dtOs.js index 92ef680e..fcbd656a 100644 --- a/assets/about.md.gLogz9hP.js +++ b/assets/about.md.Dtv0dtOs.js @@ -1 +1 @@ -import{_ as a,o as t,c as o,ag as i}from"./chunks/framework.ePeAWSvT.js";const h=JSON.parse('{"title":"About Memoh","description":"","frontmatter":{},"headers":[],"relativePath":"about.md","filePath":"about.md","lastUpdated":1772873936000}'),n={name:"about.md"};function r(s,e,l,c,d,m){return t(),o("div",null,[...e[0]||(e[0]=[i('

About Memoh

What is Memoh?

Memoh is a multi-member, structured long-memory, containerized AI agent system platform. You can create your own AI bots and chat with them via Telegram, Discord, Lark (Feishu), Email, Web, or CLI. Every bot has an independent container and memory system, allowing it to edit files, execute commands, and access the network within its own container — like having its own computer and brain.

Key Features

Multi-Bot Management

Create multiple bots. Humans and bots, or bots with each other, can chat privately, in groups, or collaborate. Supports role-based access control (owner / admin / member) with ownership transfer. Build bot teams, or set up accounts for family members to manage daily tasks with bots.

Multi-User & Identity Recognition

Bots can distinguish individual users in group chats, remember each person's context separately, and send direct messages to specific users. Cross-platform identity binding unifies the same person across Telegram, Discord, Lark, and Web.

Containerized Isolation

Each bot runs in its own isolated container (powered by Containerd) with a separate filesystem and network. Bots can freely read/write files and execute commands within their containers without interfering with each other. Supports container snapshots for save/restore.

Memory Engineering

A deeply engineered memory layer:

Multi-Platform Support

Unified channel adapter architecture for connecting to multiple messaging platforms:

Agent Capabilities

Bots come with a rich set of built-in tools:

Multi-LLM Provider Support

Flexibly switch between a wide range of LLM providers via four client types:

Per-bot model assignment for chat, memory, and embedding.

MCP Protocol Support

Full MCP (Model Context Protocol) support via HTTP, SSE, and Stdio to connect external tool services. Built-in tools for container operations, memory search, web search, scheduling, messaging, and more. Each bot can have its own independent MCP connections.

Scheduled Tasks

Configure scheduled tasks using cron expressions to automatically run commands at specified times. Supports max execution count limits and manual triggers.

Inbox

Cross-channel inbox — messages from other channels are queued and surfaced in the system prompt so the bot never misses context.

Graphical Configuration

Modern web UI (Vue 3 + Tailwind CSS) with real-time streaming chat, tool call visualization, container filesystem browser, and visual configuration for bots, channels, providers, models, MCP, skills, and all other settings. Dark/light theme, i18n. No coding required to set up your own AI bot.

CLI Tool

A command-line tool for bot management, channel configuration, model management, streaming chat, and more — designed for developers who prefer the terminal. See CLI documentation.

Installation

To get Memoh running:

',36)])])}const p=a(n,[["render",r]]);export{h as __pageData,p as default}; +import{_ as a,o as t,c as o,ag as i}from"./chunks/framework.BZohXCq9.js";const h=JSON.parse('{"title":"About Memoh","description":"","frontmatter":{},"headers":[],"relativePath":"about.md","filePath":"about.md","lastUpdated":1772873936000}'),n={name:"about.md"};function r(s,e,l,c,d,m){return t(),o("div",null,[...e[0]||(e[0]=[i('

About Memoh

What is Memoh?

Memoh is a multi-member, structured long-memory, containerized AI agent system platform. You can create your own AI bots and chat with them via Telegram, Discord, Lark (Feishu), Email, Web, or CLI. Every bot has an independent container and memory system, allowing it to edit files, execute commands, and access the network within its own container — like having its own computer and brain.

Key Features

Multi-Bot Management

Create multiple bots. Humans and bots, or bots with each other, can chat privately, in groups, or collaborate. Supports role-based access control (owner / admin / member) with ownership transfer. Build bot teams, or set up accounts for family members to manage daily tasks with bots.

Multi-User & Identity Recognition

Bots can distinguish individual users in group chats, remember each person's context separately, and send direct messages to specific users. Cross-platform identity binding unifies the same person across Telegram, Discord, Lark, and Web.

Containerized Isolation

Each bot runs in its own isolated container (powered by Containerd) with a separate filesystem and network. Bots can freely read/write files and execute commands within their containers without interfering with each other. Supports container snapshots for save/restore.

Memory Engineering

A deeply engineered memory layer:

Multi-Platform Support

Unified channel adapter architecture for connecting to multiple messaging platforms:

Agent Capabilities

Bots come with a rich set of built-in tools:

Multi-LLM Provider Support

Flexibly switch between a wide range of LLM providers via four client types:

Per-bot model assignment for chat, memory, and embedding.

MCP Protocol Support

Full MCP (Model Context Protocol) support via HTTP, SSE, and Stdio to connect external tool services. Built-in tools for container operations, memory search, web search, scheduling, messaging, and more. Each bot can have its own independent MCP connections.

Scheduled Tasks

Configure scheduled tasks using cron expressions to automatically run commands at specified times. Supports max execution count limits and manual triggers.

Inbox

Cross-channel inbox — messages from other channels are queued and surfaced in the system prompt so the bot never misses context.

Graphical Configuration

Modern web UI (Vue 3 + Tailwind CSS) with real-time streaming chat, tool call visualization, container filesystem browser, and visual configuration for bots, channels, providers, models, MCP, skills, and all other settings. Dark/light theme, i18n. No coding required to set up your own AI bot.

CLI Tool

A command-line tool for bot management, channel configuration, model management, streaming chat, and more — designed for developers who prefer the terminal. See CLI documentation.

Installation

To get Memoh running:

',36)])])}const p=a(n,[["render",r]]);export{h as __pageData,p as default}; diff --git a/assets/about.md.gLogz9hP.lean.js b/assets/about.md.Dtv0dtOs.lean.js similarity index 68% rename from assets/about.md.gLogz9hP.lean.js rename to assets/about.md.Dtv0dtOs.lean.js index d4aef59a..2308a2e3 100644 --- a/assets/about.md.gLogz9hP.lean.js +++ b/assets/about.md.Dtv0dtOs.lean.js @@ -1 +1 @@ -import{_ as a,o as t,c as o,ag as i}from"./chunks/framework.ePeAWSvT.js";const h=JSON.parse('{"title":"About Memoh","description":"","frontmatter":{},"headers":[],"relativePath":"about.md","filePath":"about.md","lastUpdated":1772873936000}'),n={name:"about.md"};function r(s,e,l,c,d,m){return t(),o("div",null,[...e[0]||(e[0]=[i("",36)])])}const p=a(n,[["render",r]]);export{h as __pageData,p as default}; +import{_ as a,o as t,c as o,ag as i}from"./chunks/framework.BZohXCq9.js";const h=JSON.parse('{"title":"About Memoh","description":"","frontmatter":{},"headers":[],"relativePath":"about.md","filePath":"about.md","lastUpdated":1772873936000}'),n={name:"about.md"};function r(s,e,l,c,d,m){return t(),o("div",null,[...e[0]||(e[0]=[i("",36)])])}const p=a(n,[["render",r]]);export{h as __pageData,p as default}; diff --git a/assets/app.BC6GRvcN.js b/assets/app.CFQrAvF4.js similarity index 90% rename from assets/app.BC6GRvcN.js rename to assets/app.CFQrAvF4.js index 52e0bb5c..ed1e810a 100644 --- a/assets/app.BC6GRvcN.js +++ b/assets/app.CFQrAvF4.js @@ -1 +1 @@ -import{t as p}from"./chunks/theme.Dze9WHF4.js";import{R as s,a2 as i,a3 as u,a4 as c,a5 as l,a6 as f,a7 as d,a8 as m,a9 as h,aa as g,ab as A,d as v,u as y,v as C,s as P,ac as b,ad as w,ae as R,af as E}from"./chunks/framework.ePeAWSvT.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=y();return C(()=>{P(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&b(),w(),R(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=_(),a=D();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function D(){return A(S)}function _(){let e=s;return h(a=>{let t=g(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp}; +import{t as p}from"./chunks/theme.B0ckB4ri.js";import{R as s,a2 as i,a3 as u,a4 as c,a5 as l,a6 as f,a7 as d,a8 as m,a9 as h,aa as g,ab as A,d as v,u as y,v as C,s as P,ac as b,ad as w,ae as R,af as E}from"./chunks/framework.BZohXCq9.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=y();return C(()=>{P(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&b(),w(),R(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=_(),a=D();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function D(){return A(S)}function _(){let e=s;return h(a=>{let t=g(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp}; diff --git a/assets/blogs_2026-02-16.md.CVgn4GCU.js b/assets/blogs_2026-02-16.md.cjgZmunL.js similarity index 98% rename from assets/blogs_2026-02-16.md.CVgn4GCU.js rename to assets/blogs_2026-02-16.md.cjgZmunL.js index b7350e38..c79cea59 100644 --- a/assets/blogs_2026-02-16.md.CVgn4GCU.js +++ b/assets/blogs_2026-02-16.md.cjgZmunL.js @@ -1 +1 @@ -import{_ as t,o as a,c as o,ag as n}from"./chunks/framework.ePeAWSvT.js";const r="/blogs/2026-02-16/01-multi-bots.png",i="/blogs/2026-02-16/02-containerized.png",s="/blogs/2026-02-16/03-memory-engineering.png",y=JSON.parse('{"title":"Introduction to Memoh - The Case for an Always-On, Containerized Home Agent","description":"","frontmatter":{"title":"Introduction to Memoh - The Case for an Always-On, Containerized Home Agent","author":"Team Memoh"},"headers":[],"relativePath":"blogs/2026-02-16.md","filePath":"blogs/2026-02-16.md","lastUpdated":1771238980000}'),l={name:"blogs/2026-02-16.md"};function h(c,e,d,u,m,p){return a(),o("div",null,[...e[0]||(e[0]=[n('

Introduction to Memoh - The Case for an Always-On, Containerized Home Agent

Overview

We enter 2026 with a familiar tension: models get smarter every quarter, but the “agent experience” still breaks on context, latency, privacy, and real-world workflows. Over the past year, we kept circling three questions:

Memoh is our attempt to turn those questions into something buildable—not a manifesto, but a system that can survive contact with reality.

Story Time

Time travels fast. Somewhere between “I’ll remember this” and “wait, why did we decide that?”, a year disappears.

That’s the annoying part of building: most progress doesn’t feel like progress while it’s happening. It’s just a stream of small choices, half-finished threads, late-night fixes, and the occasional moment that actually clicks. The kind of moment where you sit back and think: okay—this is real.

Around the same time, I noticed something else: the internet started to feel smoother—and worse.

Text got cleaner, longer, more polite, more… empty. You could smell when something was generated: low information density, too many metaphors, too much agreement, not enough stakes.

I caught myself doing it too.

So I started forcing a constraint: say it plainly. Keep the density. Don’t inflate. Don’t hide behind style. If something mattered, anchor it to a real moment, a real trade-off, a real cost paid.

Because the thing LLMs can’t give you is not “intelligence.” It’s weight. The feeling that a human actually stood somewhere in time and wrote from that position.

That’s when I realized what I wanted wasn’t “an AI that can talk.” I wanted an AI that can live with you—quietly, continuously, accumulating context without turning your life into content sludge.

Phones were our first instinct—it's personal, powerful, always there. But mobile OS is closed: without OEM privileges you can build an app, not ambient infrastructure.

So we looked for the always-on node every home already has: the router (conceptually). Then the economics clash—router-class hardware can’t carry memory, RAG, tools, and multi-user agents. The device evolves: more RAM/storage, a screen, mic/speaker, tiny battery for take out, portable form.

Eventually it stops being a router. It becomes a new category: a home agent base layer.

What

Memoh is a containerized home/studio AI base layer: cloud-grade model capability paired with local-first memory (knowledge base, RAG/search, conversation history) that stays under your control.

Why

Long-context models raise the ceiling for agents—but they also make “fully local” expensive and “fully cloud” uncomfortable. People don’t want to re-brief AI every day, and they don’t want their durable context trapped in someone else’s feed. Containerization makes Memoh portable, reproducible, and safe to run as always-on infrastructure—so continuity becomes cheap, private, and dependable.

How

We run Memoh as a containerized stack: isolated services for storage (files/DB/vector index), retrieval, tool/runtime execution, and the control plane. Inference calls cloud APIs when you need frontier capability; durable memory and indexing stay local. The device acts as an always-on node (router-like, not a router) serving multiple users with strict boundaries: sharing is explicit, private context remains private, and everything is deployable/upgradable as versioned containers.

Features

Compare to OpenClaw

We share a core belief: both Memoh and OpenClaw treat the agent as more than a chatbox—we give the LLM a playground: a real environment where it can remember, use tools, and iterate.

Where Memoh differs:

Conclusion

Memoh is built for one thing: always-on continuity—an AI that stays online, and a memory that stays yours.

We keep frontier inference in the cloud, keep durable context local, and run everything as a containerized, always-on stack. If you want an agent that feels less like an app and more like home infrastructure, that’s the bet Memoh is making.

Furthermore, we will continue to operate and permanently open-source Memoh, making it a product with long impact.

',33)])])}const f=t(l,[["render",h]]);export{y as __pageData,f as default}; +import{_ as t,o as a,c as o,ag as n}from"./chunks/framework.BZohXCq9.js";const r="/blogs/2026-02-16/01-multi-bots.png",i="/blogs/2026-02-16/02-containerized.png",s="/blogs/2026-02-16/03-memory-engineering.png",y=JSON.parse('{"title":"Introduction to Memoh - The Case for an Always-On, Containerized Home Agent","description":"","frontmatter":{"title":"Introduction to Memoh - The Case for an Always-On, Containerized Home Agent","author":"Team Memoh"},"headers":[],"relativePath":"blogs/2026-02-16.md","filePath":"blogs/2026-02-16.md","lastUpdated":1771238980000}'),l={name:"blogs/2026-02-16.md"};function h(c,e,d,u,m,p){return a(),o("div",null,[...e[0]||(e[0]=[n('

Introduction to Memoh - The Case for an Always-On, Containerized Home Agent

Overview

We enter 2026 with a familiar tension: models get smarter every quarter, but the “agent experience” still breaks on context, latency, privacy, and real-world workflows. Over the past year, we kept circling three questions:

Memoh is our attempt to turn those questions into something buildable—not a manifesto, but a system that can survive contact with reality.

Story Time

Time travels fast. Somewhere between “I’ll remember this” and “wait, why did we decide that?”, a year disappears.

That’s the annoying part of building: most progress doesn’t feel like progress while it’s happening. It’s just a stream of small choices, half-finished threads, late-night fixes, and the occasional moment that actually clicks. The kind of moment where you sit back and think: okay—this is real.

Around the same time, I noticed something else: the internet started to feel smoother—and worse.

Text got cleaner, longer, more polite, more… empty. You could smell when something was generated: low information density, too many metaphors, too much agreement, not enough stakes.

I caught myself doing it too.

So I started forcing a constraint: say it plainly. Keep the density. Don’t inflate. Don’t hide behind style. If something mattered, anchor it to a real moment, a real trade-off, a real cost paid.

Because the thing LLMs can’t give you is not “intelligence.” It’s weight. The feeling that a human actually stood somewhere in time and wrote from that position.

That’s when I realized what I wanted wasn’t “an AI that can talk.” I wanted an AI that can live with you—quietly, continuously, accumulating context without turning your life into content sludge.

Phones were our first instinct—it's personal, powerful, always there. But mobile OS is closed: without OEM privileges you can build an app, not ambient infrastructure.

So we looked for the always-on node every home already has: the router (conceptually). Then the economics clash—router-class hardware can’t carry memory, RAG, tools, and multi-user agents. The device evolves: more RAM/storage, a screen, mic/speaker, tiny battery for take out, portable form.

Eventually it stops being a router. It becomes a new category: a home agent base layer.

What

Memoh is a containerized home/studio AI base layer: cloud-grade model capability paired with local-first memory (knowledge base, RAG/search, conversation history) that stays under your control.

Why

Long-context models raise the ceiling for agents—but they also make “fully local” expensive and “fully cloud” uncomfortable. People don’t want to re-brief AI every day, and they don’t want their durable context trapped in someone else’s feed. Containerization makes Memoh portable, reproducible, and safe to run as always-on infrastructure—so continuity becomes cheap, private, and dependable.

How

We run Memoh as a containerized stack: isolated services for storage (files/DB/vector index), retrieval, tool/runtime execution, and the control plane. Inference calls cloud APIs when you need frontier capability; durable memory and indexing stay local. The device acts as an always-on node (router-like, not a router) serving multiple users with strict boundaries: sharing is explicit, private context remains private, and everything is deployable/upgradable as versioned containers.

Features

Compare to OpenClaw

We share a core belief: both Memoh and OpenClaw treat the agent as more than a chatbox—we give the LLM a playground: a real environment where it can remember, use tools, and iterate.

Where Memoh differs:

Conclusion

Memoh is built for one thing: always-on continuity—an AI that stays online, and a memory that stays yours.

We keep frontier inference in the cloud, keep durable context local, and run everything as a containerized, always-on stack. If you want an agent that feels less like an app and more like home infrastructure, that’s the bet Memoh is making.

Furthermore, we will continue to operate and permanently open-source Memoh, making it a product with long impact.

',33)])])}const f=t(l,[["render",h]]);export{y as __pageData,f as default}; diff --git a/assets/blogs_2026-02-16.md.CVgn4GCU.lean.js b/assets/blogs_2026-02-16.md.cjgZmunL.lean.js similarity index 82% rename from assets/blogs_2026-02-16.md.CVgn4GCU.lean.js rename to assets/blogs_2026-02-16.md.cjgZmunL.lean.js index 9a489d53..397e2ceb 100644 --- a/assets/blogs_2026-02-16.md.CVgn4GCU.lean.js +++ b/assets/blogs_2026-02-16.md.cjgZmunL.lean.js @@ -1 +1 @@ -import{_ as t,o as a,c as o,ag as n}from"./chunks/framework.ePeAWSvT.js";const r="/blogs/2026-02-16/01-multi-bots.png",i="/blogs/2026-02-16/02-containerized.png",s="/blogs/2026-02-16/03-memory-engineering.png",y=JSON.parse('{"title":"Introduction to Memoh - The Case for an Always-On, Containerized Home Agent","description":"","frontmatter":{"title":"Introduction to Memoh - The Case for an Always-On, Containerized Home Agent","author":"Team Memoh"},"headers":[],"relativePath":"blogs/2026-02-16.md","filePath":"blogs/2026-02-16.md","lastUpdated":1771238980000}'),l={name:"blogs/2026-02-16.md"};function h(c,e,d,u,m,p){return a(),o("div",null,[...e[0]||(e[0]=[n("",33)])])}const f=t(l,[["render",h]]);export{y as __pageData,f as default}; +import{_ as t,o as a,c as o,ag as n}from"./chunks/framework.BZohXCq9.js";const r="/blogs/2026-02-16/01-multi-bots.png",i="/blogs/2026-02-16/02-containerized.png",s="/blogs/2026-02-16/03-memory-engineering.png",y=JSON.parse('{"title":"Introduction to Memoh - The Case for an Always-On, Containerized Home Agent","description":"","frontmatter":{"title":"Introduction to Memoh - The Case for an Always-On, Containerized Home Agent","author":"Team Memoh"},"headers":[],"relativePath":"blogs/2026-02-16.md","filePath":"blogs/2026-02-16.md","lastUpdated":1771238980000}'),l={name:"blogs/2026-02-16.md"};function h(c,e,d,u,m,p){return a(),o("div",null,[...e[0]||(e[0]=[n("",33)])])}const f=t(l,[["render",h]]);export{y as __pageData,f as default}; diff --git a/assets/blogs_index.md.DyCOc_Zm.js b/assets/blogs_index.md.B2P01evP.js similarity index 82% rename from assets/blogs_index.md.DyCOc_Zm.js rename to assets/blogs_index.md.B2P01evP.js index 29dd1bc2..76507078 100644 --- a/assets/blogs_index.md.DyCOc_Zm.js +++ b/assets/blogs_index.md.B2P01evP.js @@ -1 +1 @@ -import{_ as a,o,c as s,j as e,a as l}from"./chunks/framework.ePeAWSvT.js";const g=JSON.parse('{"title":"Blogs","description":"","frontmatter":{},"headers":[],"relativePath":"blogs/index.md","filePath":"blogs/index.md","lastUpdated":1771238299000}'),n={name:"blogs/index.md"};function r(i,t,d,c,p,m){return o(),s("div",null,[...t[0]||(t[0]=[e("h1",{id:"blogs",tabindex:"-1"},[l("Blogs "),e("a",{class:"header-anchor",href:"#blogs","aria-label":'Permalink to "Blogs"'},"​")],-1),e("p",null,"This section contains the latest blogs about Memoh.",-1),e("ul",null,[e("li",null,[e("a",{href:"/blogs/2026-02-16.html"},"Introduction (Feb 2026)")])],-1)])])}const h=a(n,[["render",r]]);export{g as __pageData,h as default}; +import{_ as a,o,c as s,j as e,a as l}from"./chunks/framework.BZohXCq9.js";const g=JSON.parse('{"title":"Blogs","description":"","frontmatter":{},"headers":[],"relativePath":"blogs/index.md","filePath":"blogs/index.md","lastUpdated":1771238299000}'),n={name:"blogs/index.md"};function r(i,t,d,c,p,m){return o(),s("div",null,[...t[0]||(t[0]=[e("h1",{id:"blogs",tabindex:"-1"},[l("Blogs "),e("a",{class:"header-anchor",href:"#blogs","aria-label":'Permalink to "Blogs"'},"​")],-1),e("p",null,"This section contains the latest blogs about Memoh.",-1),e("ul",null,[e("li",null,[e("a",{href:"/blogs/2026-02-16.html"},"Introduction (Feb 2026)")])],-1)])])}const h=a(n,[["render",r]]);export{g as __pageData,h as default}; diff --git a/assets/blogs_index.md.DyCOc_Zm.lean.js b/assets/blogs_index.md.B2P01evP.lean.js similarity index 82% rename from assets/blogs_index.md.DyCOc_Zm.lean.js rename to assets/blogs_index.md.B2P01evP.lean.js index 29dd1bc2..76507078 100644 --- a/assets/blogs_index.md.DyCOc_Zm.lean.js +++ b/assets/blogs_index.md.B2P01evP.lean.js @@ -1 +1 @@ -import{_ as a,o,c as s,j as e,a as l}from"./chunks/framework.ePeAWSvT.js";const g=JSON.parse('{"title":"Blogs","description":"","frontmatter":{},"headers":[],"relativePath":"blogs/index.md","filePath":"blogs/index.md","lastUpdated":1771238299000}'),n={name:"blogs/index.md"};function r(i,t,d,c,p,m){return o(),s("div",null,[...t[0]||(t[0]=[e("h1",{id:"blogs",tabindex:"-1"},[l("Blogs "),e("a",{class:"header-anchor",href:"#blogs","aria-label":'Permalink to "Blogs"'},"​")],-1),e("p",null,"This section contains the latest blogs about Memoh.",-1),e("ul",null,[e("li",null,[e("a",{href:"/blogs/2026-02-16.html"},"Introduction (Feb 2026)")])],-1)])])}const h=a(n,[["render",r]]);export{g as __pageData,h as default}; +import{_ as a,o,c as s,j as e,a as l}from"./chunks/framework.BZohXCq9.js";const g=JSON.parse('{"title":"Blogs","description":"","frontmatter":{},"headers":[],"relativePath":"blogs/index.md","filePath":"blogs/index.md","lastUpdated":1771238299000}'),n={name:"blogs/index.md"};function r(i,t,d,c,p,m){return o(),s("div",null,[...t[0]||(t[0]=[e("h1",{id:"blogs",tabindex:"-1"},[l("Blogs "),e("a",{class:"header-anchor",href:"#blogs","aria-label":'Permalink to "Blogs"'},"​")],-1),e("p",null,"This section contains the latest blogs about Memoh.",-1),e("ul",null,[e("li",null,[e("a",{href:"/blogs/2026-02-16.html"},"Introduction (Feb 2026)")])],-1)])])}const h=a(n,[["render",r]]);export{g as __pageData,h as default}; diff --git a/assets/channels_discord.md.DBWQl28b.js b/assets/channels_discord.md.WNpdGj29.js similarity index 98% rename from assets/channels_discord.md.DBWQl28b.js rename to assets/channels_discord.md.WNpdGj29.js index e98af880..bff889d6 100644 --- a/assets/channels_discord.md.DBWQl28b.js +++ b/assets/channels_discord.md.WNpdGj29.js @@ -1 +1 @@ -import{_ as t,o,c as r,ag as a}from"./chunks/framework.ePeAWSvT.js";const p=JSON.parse('{"title":"Discord Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/discord.md","filePath":"channels/discord.md","lastUpdated":1772359263000}'),i={name:"channels/discord.md"};function n(s,e,l,c,d,h){return o(),r("div",null,[...e[0]||(e[0]=[a('

Discord Channel Configuration

Connecting your Memoh Bot to Discord allows it to join servers and interact with community members.

Step 1: Create a Discord Application

  1. Go to the Discord Developer Portal.
  2. Click New Application and give it a name.
  3. In the left sidebar, go to Bot.
  4. Click Reset Token to generate a Bot Token. Copy this token and store it securely.

Step 2: Configure Bot Settings

  1. Scroll down to the Privileged Gateway Intents section.
  2. Enable Message Content Intent (required for the bot to read user messages).
  3. Save changes.

Step 3: Invite the Bot to Your Server

  1. Go to OAuth2 > URL Generator.
  2. Select scopes: bot, applications.commands.
  3. Select permissions: Send Messages, Read Message History, Embed Links, Attach Files.
  4. Copy the generated URL and open it in your browser.
  5. Select the server you want to add the bot to and authorize it.

Official Guide: Discord Developer Portal - Bots

Step 4: Configure Memoh

  1. Go to your Bot's Channels tab in the Memoh Web UI.
  2. Click Add Channel and select Discord.
  3. Paste your Bot Token.
  4. Click Save and Enable.

Features Supported

',13)])])}const u=t(i,[["render",n]]);export{p as __pageData,u as default}; +import{_ as t,o,c as r,ag as a}from"./chunks/framework.BZohXCq9.js";const p=JSON.parse('{"title":"Discord Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/discord.md","filePath":"channels/discord.md","lastUpdated":1772359263000}'),i={name:"channels/discord.md"};function n(s,e,l,c,d,h){return o(),r("div",null,[...e[0]||(e[0]=[a('

Discord Channel Configuration

Connecting your Memoh Bot to Discord allows it to join servers and interact with community members.

Step 1: Create a Discord Application

  1. Go to the Discord Developer Portal.
  2. Click New Application and give it a name.
  3. In the left sidebar, go to Bot.
  4. Click Reset Token to generate a Bot Token. Copy this token and store it securely.

Step 2: Configure Bot Settings

  1. Scroll down to the Privileged Gateway Intents section.
  2. Enable Message Content Intent (required for the bot to read user messages).
  3. Save changes.

Step 3: Invite the Bot to Your Server

  1. Go to OAuth2 > URL Generator.
  2. Select scopes: bot, applications.commands.
  3. Select permissions: Send Messages, Read Message History, Embed Links, Attach Files.
  4. Copy the generated URL and open it in your browser.
  5. Select the server you want to add the bot to and authorize it.

Official Guide: Discord Developer Portal - Bots

Step 4: Configure Memoh

  1. Go to your Bot's Channels tab in the Memoh Web UI.
  2. Click Add Channel and select Discord.
  3. Paste your Bot Token.
  4. Click Save and Enable.

Features Supported

',13)])])}const u=t(i,[["render",n]]);export{p as __pageData,u as default}; diff --git a/assets/channels_discord.md.DBWQl28b.lean.js b/assets/channels_discord.md.WNpdGj29.lean.js similarity index 85% rename from assets/channels_discord.md.DBWQl28b.lean.js rename to assets/channels_discord.md.WNpdGj29.lean.js index 3b67d877..ec18dc21 100644 --- a/assets/channels_discord.md.DBWQl28b.lean.js +++ b/assets/channels_discord.md.WNpdGj29.lean.js @@ -1 +1 @@ -import{_ as t,o,c as r,ag as a}from"./chunks/framework.ePeAWSvT.js";const p=JSON.parse('{"title":"Discord Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/discord.md","filePath":"channels/discord.md","lastUpdated":1772359263000}'),i={name:"channels/discord.md"};function n(s,e,l,c,d,h){return o(),r("div",null,[...e[0]||(e[0]=[a("",13)])])}const u=t(i,[["render",n]]);export{p as __pageData,u as default}; +import{_ as t,o,c as r,ag as a}from"./chunks/framework.BZohXCq9.js";const p=JSON.parse('{"title":"Discord Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/discord.md","filePath":"channels/discord.md","lastUpdated":1772359263000}'),i={name:"channels/discord.md"};function n(s,e,l,c,d,h){return o(),r("div",null,[...e[0]||(e[0]=[a("",13)])])}const u=t(i,[["render",n]]);export{p as __pageData,u as default}; diff --git a/assets/channels_feishu.md.-Rc8F8IG.js b/assets/channels_feishu.md.BBJ8KQPd.js similarity index 96% rename from assets/channels_feishu.md.-Rc8F8IG.js rename to assets/channels_feishu.md.BBJ8KQPd.js index a48fe1b7..f1dc33ac 100644 --- a/assets/channels_feishu.md.-Rc8F8IG.js +++ b/assets/channels_feishu.md.BBJ8KQPd.js @@ -1 +1 @@ -import{_ as o,o as t,c as i,ag as a}from"./chunks/framework.ePeAWSvT.js";const c=JSON.parse('{"title":"Feishu (Lark) Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/feishu.md","filePath":"channels/feishu.md","lastUpdated":1772359263000}'),n={name:"channels/feishu.md"};function s(r,e,l,p,h,g){return t(),i("div",null,[...e[0]||(e[0]=[a('

Feishu (Lark) Channel Configuration

Memoh supports integrating with Feishu (Lark) via the Open Platform. This allows your enterprise bots to interact with users in groups or private chats.

Step 1: Create a Feishu App

  1. Go to the Feishu Open Platform and log in.
  2. Click Create Custom App.
  3. Enter a name and description, then click Create.
  4. In the left sidebar, go to App Settings > Credentials & Basic Info.
  5. Copy your App ID and App Secret.

Step 2: Enable Bot Capability

  1. In the Feishu Developer Console, go to Capabilities > Bot.
  2. Click Enable Bot.

Step 3: Configure Permissions

  1. Go to Capabilities > Permissions.
  2. Search for and enable the following permissions (at minimum):
    • im:message (Receive and send messages)
    • im:chat (Access group chat information)
  3. Click Apply for Permissions if required by your organization.

Step 4: Configure Events (Webhook Mode)

  1. In Memoh, go to your Bot's Channels tab and add a Feishu channel.
  2. Choose Inbound Mode: webhook.
  3. Fill in your App ID and App Secret.
  4. Click Save. Memoh will generate a Webhook Callback URL.
  5. Copy this URL.
  6. In the Feishu Console, go to App Settings > Event Subscriptions.
  7. Paste the URL into the Verification URL field and save.
  8. Add events like Receive Message (im.message.receive_v1).

Official Guide: Feishu Custom Bot Guide

Step 5: Publish Your App

  1. In the Feishu Console, go to App Release > Version Management & Release.
  2. Click Create a Version, fill in the details, and submit for approval.
  3. Once approved and published, the bot is ready to use.
',13)])])}const d=o(n,[["render",s]]);export{c as __pageData,d as default}; +import{_ as o,o as t,c as i,ag as a}from"./chunks/framework.BZohXCq9.js";const c=JSON.parse('{"title":"Feishu (Lark) Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/feishu.md","filePath":"channels/feishu.md","lastUpdated":1772359263000}'),n={name:"channels/feishu.md"};function s(r,e,l,p,h,g){return t(),i("div",null,[...e[0]||(e[0]=[a('

Feishu (Lark) Channel Configuration

Memoh supports integrating with Feishu (Lark) via the Open Platform. This allows your enterprise bots to interact with users in groups or private chats.

Step 1: Create a Feishu App

  1. Go to the Feishu Open Platform and log in.
  2. Click Create Custom App.
  3. Enter a name and description, then click Create.
  4. In the left sidebar, go to App Settings > Credentials & Basic Info.
  5. Copy your App ID and App Secret.

Step 2: Enable Bot Capability

  1. In the Feishu Developer Console, go to Capabilities > Bot.
  2. Click Enable Bot.

Step 3: Configure Permissions

  1. Go to Capabilities > Permissions.
  2. Search for and enable the following permissions (at minimum):
    • im:message (Receive and send messages)
    • im:chat (Access group chat information)
  3. Click Apply for Permissions if required by your organization.

Step 4: Configure Events (Webhook Mode)

  1. In Memoh, go to your Bot's Channels tab and add a Feishu channel.
  2. Choose Inbound Mode: webhook.
  3. Fill in your App ID and App Secret.
  4. Click Save. Memoh will generate a Webhook Callback URL.
  5. Copy this URL.
  6. In the Feishu Console, go to App Settings > Event Subscriptions.
  7. Paste the URL into the Verification URL field and save.
  8. Add events like Receive Message (im.message.receive_v1).

Official Guide: Feishu Custom Bot Guide

Step 5: Publish Your App

  1. In the Feishu Console, go to App Release > Version Management & Release.
  2. Click Create a Version, fill in the details, and submit for approval.
  3. Once approved and published, the bot is ready to use.
',13)])])}const d=o(n,[["render",s]]);export{c as __pageData,d as default}; diff --git a/assets/channels_feishu.md.-Rc8F8IG.lean.js b/assets/channels_feishu.md.BBJ8KQPd.lean.js similarity index 72% rename from assets/channels_feishu.md.-Rc8F8IG.lean.js rename to assets/channels_feishu.md.BBJ8KQPd.lean.js index d493c8bf..a3a800e4 100644 --- a/assets/channels_feishu.md.-Rc8F8IG.lean.js +++ b/assets/channels_feishu.md.BBJ8KQPd.lean.js @@ -1 +1 @@ -import{_ as o,o as t,c as i,ag as a}from"./chunks/framework.ePeAWSvT.js";const c=JSON.parse('{"title":"Feishu (Lark) Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/feishu.md","filePath":"channels/feishu.md","lastUpdated":1772359263000}'),n={name:"channels/feishu.md"};function s(r,e,l,p,h,g){return t(),i("div",null,[...e[0]||(e[0]=[a("",13)])])}const d=o(n,[["render",s]]);export{c as __pageData,d as default}; +import{_ as o,o as t,c as i,ag as a}from"./chunks/framework.BZohXCq9.js";const c=JSON.parse('{"title":"Feishu (Lark) Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/feishu.md","filePath":"channels/feishu.md","lastUpdated":1772359263000}'),n={name:"channels/feishu.md"};function s(r,e,l,p,h,g){return t(),i("div",null,[...e[0]||(e[0]=[a("",13)])])}const d=o(n,[["render",s]]);export{c as __pageData,d as default}; diff --git a/assets/channels_index.md.Cd1GuQFE.js b/assets/channels_index.md.Cd1GuQFE.js deleted file mode 100644 index bd96b4d9..00000000 --- a/assets/channels_index.md.Cd1GuQFE.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,o as a,c as n,ag as r}from"./chunks/framework.ePeAWSvT.js";const u=JSON.parse('{"title":"Channels Overview","description":"","frontmatter":{},"headers":[],"relativePath":"channels/index.md","filePath":"channels/index.md","lastUpdated":1772359263000}'),o={name:"channels/index.md"};function s(i,e,l,h,c,d){return a(),n("div",null,[...e[0]||(e[0]=[r('

Channels Overview

Channels are the gateways that connect your Memoh Bots to the outside world. By configuring channels, you can interact with your bots via your favorite messaging platforms.

Memoh currently supports the following channels:

General Setup Flow

  1. Create an external app/bot: Register your bot on the target platform (e.g., via BotFather on Telegram).
  2. Obtain credentials: Fetch API tokens, App IDs, or secrets.
  3. Configure in Memoh: Add the channel to your Bot's settings and paste the credentials.
  4. Enable: Activate the channel to start receiving and sending messages.

Choose a channel from the sidebar to see detailed configuration guides for each platform.

',7)])])}const m=t(o,[["render",s]]);export{u as __pageData,m as default}; diff --git a/assets/channels_index.md.Cd1GuQFE.lean.js b/assets/channels_index.md.Cd1GuQFE.lean.js deleted file mode 100644 index 60e40ad0..00000000 --- a/assets/channels_index.md.Cd1GuQFE.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,o as a,c as n,ag as r}from"./chunks/framework.ePeAWSvT.js";const u=JSON.parse('{"title":"Channels Overview","description":"","frontmatter":{},"headers":[],"relativePath":"channels/index.md","filePath":"channels/index.md","lastUpdated":1772359263000}'),o={name:"channels/index.md"};function s(i,e,l,h,c,d){return a(),n("div",null,[...e[0]||(e[0]=[r("",7)])])}const m=t(o,[["render",s]]);export{u as __pageData,m as default}; diff --git a/assets/channels_index.md.T_VHXXZf.js b/assets/channels_index.md.T_VHXXZf.js new file mode 100644 index 00000000..fe0110dd --- /dev/null +++ b/assets/channels_index.md.T_VHXXZf.js @@ -0,0 +1 @@ +import{_ as t,o as a,c as n,ag as r}from"./chunks/framework.BZohXCq9.js";const u=JSON.parse('{"title":"Channels Overview","description":"","frontmatter":{},"headers":[],"relativePath":"channels/index.md","filePath":"channels/index.md","lastUpdated":1773070648000}'),o={name:"channels/index.md"};function s(i,e,l,h,c,d){return a(),n("div",null,[...e[0]||(e[0]=[r('

Channels Overview

Channels are the gateways that connect your Memoh Bots to the outside world. By configuring channels, you can interact with your bots via your favorite messaging platforms.

Memoh currently supports the following channels:

General Setup Flow

  1. Create an external app/bot: Register your bot on the target platform (e.g., via BotFather on Telegram).
  2. Obtain credentials: Fetch API tokens, App IDs, or secrets.
  3. Configure in Memoh: Add the channel to your Bot's settings and paste the credentials.
  4. Enable: Activate the channel to start receiving and sending messages.

Choose a channel from the sidebar to see detailed configuration guides for each platform.

',7)])])}const p=t(o,[["render",s]]);export{u as __pageData,p as default}; diff --git a/assets/channels_index.md.T_VHXXZf.lean.js b/assets/channels_index.md.T_VHXXZf.lean.js new file mode 100644 index 00000000..32bed627 --- /dev/null +++ b/assets/channels_index.md.T_VHXXZf.lean.js @@ -0,0 +1 @@ +import{_ as t,o as a,c as n,ag as r}from"./chunks/framework.BZohXCq9.js";const u=JSON.parse('{"title":"Channels Overview","description":"","frontmatter":{},"headers":[],"relativePath":"channels/index.md","filePath":"channels/index.md","lastUpdated":1773070648000}'),o={name:"channels/index.md"};function s(i,e,l,h,c,d){return a(),n("div",null,[...e[0]||(e[0]=[r("",7)])])}const p=t(o,[["render",s]]);export{u as __pageData,p as default}; diff --git a/assets/channels_qq.md.B_4bodh-.js b/assets/channels_qq.md.B_4bodh-.js new file mode 100644 index 00000000..e8be8d6d --- /dev/null +++ b/assets/channels_qq.md.B_4bodh-.js @@ -0,0 +1 @@ +import{_ as e,o,c as a,ag as n}from"./chunks/framework.BZohXCq9.js";const u=JSON.parse('{"title":"QQ Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/qq.md","filePath":"channels/qq.md","lastUpdated":1773070648000}'),r={name:"channels/qq.md"};function i(l,t,s,c,p,d){return o(),a("div",null,[...t[0]||(t[0]=[n('

QQ Channel Configuration

Connecting your Memoh Bot to QQ allows it to interact with users through QQ's official Bot platform.

Step 1: Create a QQ Bot

  1. Go to the QQ Bot Open Platform and log in with your QQ account.
  2. Click Create Bot (创建机器人) - no approval required. Each account can create up to 5 bots.
  3. Copy the AppID and AppSecret displayed on the page.

Important: AppSecret is only shown once. Save it securely - viewing it again will force a reset.

Step 2: Configure Memoh

  1. Go to your Bot's Channels tab in the Memoh Web UI.
  2. Click Add Channel and select QQ.
  3. Paste your AppID and AppSecret.
  4. Configure optional settings:
    • Markdown Support: Enable Markdown formatting (default: enabled).
    • Enable Input Hint: Show typing indicators (default: enabled).
  5. Click Save and Enable.

Step 3: Bind Your Identity (Optional)

If your bot is a personal type bot, bind your QQ identity to chat with it directly:

  1. In Memoh Web UI, go to Settings > Bind Code.
  2. Select QQ and click Generate.
  3. Copy the code and send it to your bot in a QQ direct message.

Features Supported

Official Resources

',14)])])}const h=e(r,[["render",i]]);export{u as __pageData,h as default}; diff --git a/assets/channels_qq.md.B_4bodh-.lean.js b/assets/channels_qq.md.B_4bodh-.lean.js new file mode 100644 index 00000000..2534571f --- /dev/null +++ b/assets/channels_qq.md.B_4bodh-.lean.js @@ -0,0 +1 @@ +import{_ as e,o,c as a,ag as n}from"./chunks/framework.BZohXCq9.js";const u=JSON.parse('{"title":"QQ Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/qq.md","filePath":"channels/qq.md","lastUpdated":1773070648000}'),r={name:"channels/qq.md"};function i(l,t,s,c,p,d){return o(),a("div",null,[...t[0]||(t[0]=[n("",14)])])}const h=e(r,[["render",i]]);export{u as __pageData,h as default}; diff --git a/assets/channels_telegram.md.URjBaQHx.js b/assets/channels_telegram.md.B9i-uoiX.js similarity index 98% rename from assets/channels_telegram.md.URjBaQHx.js rename to assets/channels_telegram.md.B9i-uoiX.js index 37ad0b1e..82730adc 100644 --- a/assets/channels_telegram.md.URjBaQHx.js +++ b/assets/channels_telegram.md.B9i-uoiX.js @@ -1 +1 @@ -import{_ as t,o,c as a,ag as n}from"./chunks/framework.ePeAWSvT.js";const u=JSON.parse('{"title":"Telegram Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/telegram.md","filePath":"channels/telegram.md","lastUpdated":1772359263000}'),r={name:"channels/telegram.md"};function l(i,e,s,d,g,h){return o(),a("div",null,[...e[0]||(e[0]=[n('

Telegram Channel Configuration

This guide walks you through connecting your Memoh Bot to Telegram. Telegram is one of the most supported platforms in Memoh, featuring streaming responses, Markdown formatting, and attachment support.

Step 1: Create a Telegram Bot

You need to create a bot on Telegram to get an API token.

  1. Open Telegram and search for the official @BotFather bot.
  2. Send the /newbot command.
  3. Follow the prompts:
    • Name: Choose a display name for your bot (e.g., My Memoh Bot).
    • Username: Choose a unique username ending in bot (e.g., my_memoh_bot).
  4. BotFather will provide you with an API Token (e.g., 123456789:ABCdefGHIjklMNOpqrsTUVwxyz). Keep this token secret.

Official Guide: Telegram Bot Tutorial

Step 2: Configure Memoh

  1. Go to your Bot's Detail Page in the Memoh Web UI.
  2. Select the Channels tab.
  3. Click Add Channel and select Telegram.
  4. Paste your API Token into the credentials field.
  5. Click Save and Enable.

Step 3: Bind Your Identity (Optional)

If your bot is a personal type bot, you need to bind your Telegram identity to your Memoh account to chat with it directly.

  1. In Memoh Web UI, go to Settings > Bind Code.
  2. Select Telegram and click Generate.
  3. Copy the code.
  4. Open a chat with your new bot on Telegram and send the bind code.
  5. The bot should respond that your identity is successfully linked.

Features Supported

',13)])])}const p=t(r,[["render",l]]);export{u as __pageData,p as default}; +import{_ as t,o,c as a,ag as n}from"./chunks/framework.BZohXCq9.js";const u=JSON.parse('{"title":"Telegram Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/telegram.md","filePath":"channels/telegram.md","lastUpdated":1772359263000}'),r={name:"channels/telegram.md"};function l(i,e,s,d,g,h){return o(),a("div",null,[...e[0]||(e[0]=[n('

Telegram Channel Configuration

This guide walks you through connecting your Memoh Bot to Telegram. Telegram is one of the most supported platforms in Memoh, featuring streaming responses, Markdown formatting, and attachment support.

Step 1: Create a Telegram Bot

You need to create a bot on Telegram to get an API token.

  1. Open Telegram and search for the official @BotFather bot.
  2. Send the /newbot command.
  3. Follow the prompts:
    • Name: Choose a display name for your bot (e.g., My Memoh Bot).
    • Username: Choose a unique username ending in bot (e.g., my_memoh_bot).
  4. BotFather will provide you with an API Token (e.g., 123456789:ABCdefGHIjklMNOpqrsTUVwxyz). Keep this token secret.

Official Guide: Telegram Bot Tutorial

Step 2: Configure Memoh

  1. Go to your Bot's Detail Page in the Memoh Web UI.
  2. Select the Channels tab.
  3. Click Add Channel and select Telegram.
  4. Paste your API Token into the credentials field.
  5. Click Save and Enable.

Step 3: Bind Your Identity (Optional)

If your bot is a personal type bot, you need to bind your Telegram identity to your Memoh account to chat with it directly.

  1. In Memoh Web UI, go to Settings > Bind Code.
  2. Select Telegram and click Generate.
  3. Copy the code.
  4. Open a chat with your new bot on Telegram and send the bind code.
  5. The bot should respond that your identity is successfully linked.

Features Supported

',13)])])}const p=t(r,[["render",l]]);export{u as __pageData,p as default}; diff --git a/assets/channels_telegram.md.URjBaQHx.lean.js b/assets/channels_telegram.md.B9i-uoiX.lean.js similarity index 85% rename from assets/channels_telegram.md.URjBaQHx.lean.js rename to assets/channels_telegram.md.B9i-uoiX.lean.js index 2ff074a4..a37101ad 100644 --- a/assets/channels_telegram.md.URjBaQHx.lean.js +++ b/assets/channels_telegram.md.B9i-uoiX.lean.js @@ -1 +1 @@ -import{_ as t,o,c as a,ag as n}from"./chunks/framework.ePeAWSvT.js";const u=JSON.parse('{"title":"Telegram Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/telegram.md","filePath":"channels/telegram.md","lastUpdated":1772359263000}'),r={name:"channels/telegram.md"};function l(i,e,s,d,g,h){return o(),a("div",null,[...e[0]||(e[0]=[n("",13)])])}const p=t(r,[["render",l]]);export{u as __pageData,p as default}; +import{_ as t,o,c as a,ag as n}from"./chunks/framework.BZohXCq9.js";const u=JSON.parse('{"title":"Telegram Channel Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"channels/telegram.md","filePath":"channels/telegram.md","lastUpdated":1772359263000}'),r={name:"channels/telegram.md"};function l(i,e,s,d,g,h){return o(),a("div",null,[...e[0]||(e[0]=[n("",13)])])}const p=t(r,[["render",l]]);export{u as __pageData,p as default}; diff --git a/assets/chunks/@localSearchIndexroot.CiUS92bE.js b/assets/chunks/@localSearchIndexroot.CiUS92bE.js deleted file mode 100644 index 269bb315..00000000 --- a/assets/chunks/@localSearchIndexroot.CiUS92bE.js +++ /dev/null @@ -1 +0,0 @@ -const e='{"documentCount":179,"nextId":179,"documentIds":{"0":"/about.html#about-memoh","1":"/about.html#what-is-memoh","2":"/about.html#key-features","3":"/about.html#multi-bot-management","4":"/about.html#multi-user-identity-recognition","5":"/about.html#containerized-isolation","6":"/about.html#memory-engineering","7":"/about.html#multi-platform-support","8":"/about.html#agent-capabilities","9":"/about.html#multi-llm-provider-support","10":"/about.html#mcp-protocol-support","11":"/about.html#scheduled-tasks","12":"/about.html#inbox","13":"/about.html#graphical-configuration","14":"/about.html#cli-tool","15":"/about.html#installation","16":"/blogs/2026-02-16.html#introduction-to-memoh-the-case-for-an-always-on-containerized-home-agent","17":"/blogs/2026-02-16.html#overview","18":"/blogs/2026-02-16.html#story-time","19":"/blogs/2026-02-16.html#what","20":"/blogs/2026-02-16.html#why","21":"/blogs/2026-02-16.html#how","22":"/blogs/2026-02-16.html#features","23":"/blogs/2026-02-16.html#compare-to-openclaw","24":"/blogs/2026-02-16.html#conclusion","25":"/blogs/#blogs","26":"/channels/discord.html#discord-channel-configuration","27":"/channels/discord.html#step-1-create-a-discord-application","28":"/channels/discord.html#step-2-configure-bot-settings","29":"/channels/discord.html#step-3-invite-the-bot-to-your-server","30":"/channels/discord.html#step-4-configure-memoh","31":"/channels/discord.html#features-supported","32":"/channels/feishu.html#feishu-lark-channel-configuration","33":"/channels/feishu.html#step-1-create-a-feishu-app","34":"/channels/feishu.html#step-2-enable-bot-capability","35":"/channels/feishu.html#step-3-configure-permissions","36":"/channels/feishu.html#step-4-configure-events-webhook-mode","37":"/channels/feishu.html#step-5-publish-your-app","38":"/channels/telegram.html#telegram-channel-configuration","39":"/channels/telegram.html#step-1-create-a-telegram-bot","40":"/channels/telegram.html#step-2-configure-memoh","41":"/channels/telegram.html#step-3-bind-your-identity-optional","42":"/channels/telegram.html#features-supported","43":"/channels/#channels-overview","44":"/channels/#general-setup-flow","45":"/getting-started/bot.html#bot-management","46":"/getting-started/bot.html#creating-a-bot","47":"/getting-started/bot.html#bot-detail-page","48":"/getting-started/bot.html#overview-tab","49":"/getting-started/bot.html#configuring-the-bot-s-core-settings","50":"/getting-started/bot.html#settings-tab-reference","51":"/getting-started/bot.html#deleting-a-bot","52":"/getting-started/browser.html#browser-contexts","53":"/getting-started/browser.html#concept-browser-gateway","54":"/getting-started/browser.html#creating-a-browser-context","55":"/getting-started/browser.html#configuring-a-browser-context","56":"/getting-started/browser.html#managing-contexts","57":"/getting-started/browser.html#assigning-a-browser-context-to-a-bot","58":"/getting-started/browser.html#bot-interaction","59":"/getting-started/browser.html#next-steps","60":"/getting-started/channels.html#bot-channels","61":"/getting-started/channels.html#concept-unified-communication","62":"/getting-started/channels.html#supported-channels","63":"/getting-started/channels.html#popular-platforms","64":"/getting-started/channels.html#configuration-flow","65":"/getting-started/channels.html#_1-adding-a-channel","66":"/getting-started/channels.html#_2-common-fields","67":"/getting-started/channels.html#_3-special-case-feishu-webhook","68":"/getting-started/channels.html#operations","69":"/getting-started/container.html#bot-container-management","70":"/getting-started/container.html#concept-the-isolated-workspace","71":"/getting-started/container.html#operations","72":"/getting-started/container.html#lifecycle-actions","73":"/getting-started/container.html#container-information","74":"/getting-started/container.html#snapshots","75":"/getting-started/container.html#creating-a-snapshot","76":"/getting-started/container.html#restoring-a-snapshot","77":"/getting-started/container.html#managing-snapshots","78":"/getting-started/files.html#bot-files-management","79":"/getting-started/files.html#operations","80":"/getting-started/files.html#browsing-and-navigation","81":"/getting-started/files.html#managing-files","82":"/getting-started/files.html#viewing-and-editing","83":"/getting-started/files.html#text-files","84":"/getting-started/files.html#images","85":"/getting-started/files.html#bot-interaction-with-files","86":"/getting-started/email.html#email-providers-and-bindings","87":"/getting-started/email.html#concept-email-as-a-bot-channel","88":"/getting-started/email.html#email-provider","89":"/getting-started/email.html#creating-a-provider","90":"/getting-started/email.html#bot-email-bindings","91":"/getting-started/email.html#adding-a-binding","92":"/getting-started/email.html#outbox-and-history","93":"/getting-started/email.html#bot-interaction","94":"/getting-started/heartbeat.html#bot-heartbeat","95":"/getting-started/heartbeat.html#concept-scheduled-autonomy","96":"/getting-started/heartbeat.html#configuration","97":"/getting-started/heartbeat.html#logs-and-monitoring","98":"/getting-started/heartbeat.html#managing-logs","99":"/getting-started/heartbeat.html#bot-interaction","100":"/getting-started/mcp.html#mcp-connections","101":"/getting-started/mcp.html#concept-extending-bot-capabilities","102":"/getting-started/mcp.html#connection-types","103":"/getting-started/mcp.html#_1-stdio-local-process","104":"/getting-started/mcp.html#_2-remote-http-sse","105":"/getting-started/mcp.html#operations","106":"/getting-started/mcp.html#bot-interaction","107":"/getting-started/memory.html#bot-memory-management","108":"/getting-started/memory.html#prerequisites","109":"/getting-started/memory.html#concept-semantic-search","110":"/getting-started/memory.html#operations","111":"/getting-started/memory.html#_1-creating-memories","112":"/getting-started/memory.html#_2-searching-and-managing","113":"/getting-started/memory.html#memory-compression-compact","114":"/getting-started/memory.html#visualization-vector-manifold","115":"/getting-started/memory.html#top-k-bucket-chart","116":"/getting-started/memory.html#cdf-curve-cumulative-distribution-function","117":"/getting-started/memory.html#bot-interaction","118":"/getting-started/provider-and-model.html#llm-provider-and-model","119":"/getting-started/provider-and-model.html#llm-provider","120":"/getting-started/provider-and-model.html#creating-a-provider","121":"/getting-started/provider-and-model.html#managing-providers","122":"/getting-started/provider-and-model.html#model","123":"/getting-started/provider-and-model.html#adding-a-model","124":"/getting-started/provider-and-model.html#managing-models","125":"/getting-started/provider-and-model.html#next-steps","126":"/getting-started/schedule.html#scheduled-tasks","127":"/getting-started/schedule.html#concept-cron-based-automation","128":"/getting-started/schedule.html#schedule-fields","129":"/getting-started/schedule.html#cron-pattern-reference","130":"/getting-started/schedule.html#viewing-schedules","131":"/getting-started/schedule.html#creating-schedules","132":"/getting-started/schedule.html#via-the-bot-conversational","133":"/getting-started/schedule.html#via-the-api","134":"/getting-started/schedule.html#execution-flow","135":"/getting-started/schedule.html#schedule-vs-heartbeat","136":"/getting-started/search-provider.html#search-providers","137":"/getting-started/search-provider.html#concept-real-time-knowledge","138":"/getting-started/search-provider.html#supported-search-engines","139":"/getting-started/search-provider.html#configuration-flow","140":"/getting-started/search-provider.html#_1-adding-a-search-provider","141":"/getting-started/search-provider.html#_2-managing-providers","142":"/getting-started/search-provider.html#assigning-a-search-provider-to-a-bot","143":"/getting-started/search-provider.html#bot-interaction","144":"/getting-started/skills.html#bot-skills","145":"/getting-started/skills.html#concept-skills-as-markdown","146":"/getting-started/skills.html#example-skill-structure","147":"/getting-started/skills.html#managing-skills","148":"/getting-started/skills.html#adding-a-skill","149":"/getting-started/skills.html#editing-and-deleting","150":"/getting-started/skills.html#how-bots-use-skills","151":"/getting-started/subagents.html#bot-subagents","152":"/getting-started/subagents.html#concept-task-specialization","153":"/getting-started/subagents.html#fields","154":"/getting-started/subagents.html#operations","155":"/getting-started/subagents.html#bot-interaction","156":"/#memoh-documentation","157":"/#documentation","158":"/installation/docker.html#docker-installation","159":"/installation/docker.html#prerequisites","160":"/installation/docker.html#one-click-install-recommended","161":"/installation/docker.html#manual-install","162":"/installation/docker.html#china-mainland-mirror","163":"/installation/docker.html#access-points","164":"/installation/docker.html#common-commands","165":"/installation/docker.html#environment-variables","166":"/installation/docker.html#production-checklist","167":"/installation/docker.html#troubleshooting","168":"/installation/docker.html#security-warnings","169":"/memory-providers/builtin.html#built-in-memory-provider","170":"/memory-providers/builtin.html#creating-a-built-in-provider","171":"/memory-providers/builtin.html#configuring-a-built-in-provider","172":"/memory-providers/builtin.html#managing-providers","173":"/memory-providers/builtin.html#assigning-a-memory-provider-to-a-bot","174":"/memory-providers/builtin.html#using-memory-after-setup","175":"/memory-providers/#memory-providers","176":"/memory-providers/#available-providers","177":"/memory-providers/#basic-flow","178":"/memory-providers/#next-steps"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[2,1,1],"1":[4,2,55],"2":[2,2,1],"3":[3,4,39],"4":[5,4,33],"5":[2,4,38],"6":[2,4,48],"7":[3,4,41],"8":[2,4,97],"9":[4,4,36],"10":[3,4,37],"11":[2,4,22],"12":[1,4,21],"13":[2,4,47],"14":[2,4,24],"15":[1,2,29],"16":[12,1,1],"17":[1,12,74],"18":[2,12,215],"19":[1,12,29],"20":[1,12,54],"21":[1,12,65],"22":[1,12,104],"23":[3,12,83],"24":[1,12,62],"25":[1,1,12],"26":[3,1,16],"27":[6,3,28],"28":[5,3,21],"29":[8,3,42],"30":[4,3,23],"31":[2,3,25],"32":[4,1,24],"33":[6,4,34],"34":[5,4,13],"35":[4,4,31],"36":[7,4,56],"37":[5,4,30],"38":[3,1,28],"39":[6,3,55],"40":[4,3,30],"41":[7,3,45],"42":[2,3,35],"43":[2,1,66],"44":[3,2,53],"45":[2,1,34],"46":[3,2,42],"47":[3,2,23],"48":[2,4,37],"49":[6,2,82],"50":[3,2,112],"51":[3,2,44],"52":[2,1,45],"53":[3,2,45],"54":[4,2,27],"55":[4,2,76],"56":[2,5,15],"57":[6,2,33],"58":[2,2,55],"59":[2,2,27],"60":[2,1,18],"61":[3,2,29],"62":[2,2,14],"63":[2,3,22],"64":[2,2,1],"65":[4,4,24],"66":[3,4,33],"67":[5,4,32],"68":[1,2,20],"69":[3,1,35],"70":[4,3,30],"71":[1,3,16],"72":[2,4,51],"73":[2,3,46],"74":[1,3,32],"75":[3,4,18],"76":[3,4,17],"77":[2,4,23],"78":[3,1,24],"79":[1,3,17],"80":[3,4,31],"81":[2,4,42],"82":[3,3,17],"83":[2,6,39],"84":[1,6,20],"85":[4,3,36],"86":[4,1,18],"87":[6,4,28],"88":[2,4,13],"89":[3,5,38],"90":[3,4,15],"91":[3,5,41],"92":[3,4,34],"93":[2,4,45],"94":[2,1,24],"95":[3,2,38],"96":[1,2,41],"97":[3,2,46],"98":[2,5,29],"99":[2,2,36],"100":[2,1,21],"101":[4,2,25],"102":[2,2,11],"103":[5,4,51],"104":[5,4,36],"105":[1,2,43],"106":[2,2,32],"107":[3,1,22],"108":[1,3,37],"109":[3,3,31],"110":[1,3,14],"111":[3,4,25],"112":[4,4,25],"113":[4,3,49],"114":[3,3,17],"115":[4,6,12],"116":[6,6,19],"117":[2,3,45],"118":[4,1,16],"119":[2,4,27],"120":[3,4,46],"121":[2,4,27],"122":[1,4,31],"123":[3,4,88],"124":[2,4,16],"125":[2,4,16],"126":[2,1,33],"127":[4,2,37],"128":[2,2,77],"129":[3,2,46],"130":[2,2,31],"131":[2,2,8],"132":[5,4,46],"133":[3,4,42],"134":[2,2,48],"135":[3,2,52],"136":[2,1,23],"137":[4,2,28],"138":[3,2,53],"139":[2,2,1],"140":[5,4,44],"141":[3,4,21],"142":[6,2,22],"143":[2,2,35],"144":[2,1,23],"145":[4,2,27],"146":[3,5,37],"147":[2,2,15],"148":[3,3,22],"149":[3,3,23],"150":[4,2,35],"151":[2,1,27],"152":[3,2,31],"153":[1,2,48],"154":[1,2,37],"155":[2,2,43],"156":[2,1,46],"157":[1,2,34],"158":[2,1,44],"159":[1,2,5],"160":[5,2,101],"161":[2,2,80],"162":[3,4,45],"163":[2,2,39],"164":[2,2,33],"165":[2,2,49],"166":[2,2,47],"167":[1,2,20],"168":[2,2,27],"169":[4,1,53],"170":[5,4,29],"171":[5,4,47],"172":[2,6,18],"173":[6,4,37],"174":[4,4,38],"175":[2,1,33],"176":[2,2,34],"177":[2,2,31],"178":[2,2,22]},"averageFieldLength":[2.905027932960894,3.223463687150837,36.100558659217896],"storedFields":{"0":{"title":"About Memoh","titles":[]},"1":{"title":"What is Memoh?","titles":["About Memoh"]},"2":{"title":"Key Features","titles":["About Memoh"]},"3":{"title":"Multi-Bot Management","titles":["About Memoh","Key Features"]},"4":{"title":"Multi-User & Identity Recognition","titles":["About Memoh","Key Features"]},"5":{"title":"Containerized Isolation","titles":["About Memoh","Key Features"]},"6":{"title":"Memory Engineering","titles":["About Memoh","Key Features"]},"7":{"title":"Multi-Platform Support","titles":["About Memoh","Key Features"]},"8":{"title":"Agent Capabilities","titles":["About Memoh","Key Features"]},"9":{"title":"Multi-LLM Provider Support","titles":["About Memoh","Key Features"]},"10":{"title":"MCP Protocol Support","titles":["About Memoh","Key Features"]},"11":{"title":"Scheduled Tasks","titles":["About Memoh","Key Features"]},"12":{"title":"Inbox","titles":["About Memoh","Key Features"]},"13":{"title":"Graphical Configuration","titles":["About Memoh","Key Features"]},"14":{"title":"CLI Tool","titles":["About Memoh","Key Features"]},"15":{"title":"Installation","titles":["About Memoh"]},"16":{"title":"Introduction to Memoh - The Case for an Always-On, Containerized Home Agent","titles":[]},"17":{"title":"Overview","titles":["Introduction to Memoh - The Case for an Always-On, Containerized Home Agent"]},"18":{"title":"Story Time","titles":["Introduction to Memoh - The Case for an Always-On, Containerized Home Agent"]},"19":{"title":"What","titles":["Introduction to Memoh - The Case for an Always-On, Containerized Home Agent"]},"20":{"title":"Why","titles":["Introduction to Memoh - The Case for an Always-On, Containerized Home Agent"]},"21":{"title":"How","titles":["Introduction to Memoh - The Case for an Always-On, Containerized Home Agent"]},"22":{"title":"Features","titles":["Introduction to Memoh - The Case for an Always-On, Containerized Home Agent"]},"23":{"title":"Compare to OpenClaw","titles":["Introduction to Memoh - The Case for an Always-On, Containerized Home Agent"]},"24":{"title":"Conclusion","titles":["Introduction to Memoh - The Case for an Always-On, Containerized Home Agent"]},"25":{"title":"Blogs","titles":[]},"26":{"title":"Discord Channel Configuration","titles":[]},"27":{"title":"Step 1: Create a Discord Application","titles":["Discord Channel Configuration"]},"28":{"title":"Step 2: Configure Bot Settings","titles":["Discord Channel Configuration"]},"29":{"title":"Step 3: Invite the Bot to Your Server","titles":["Discord Channel Configuration"]},"30":{"title":"Step 4: Configure Memoh","titles":["Discord Channel Configuration"]},"31":{"title":"Features Supported","titles":["Discord Channel Configuration"]},"32":{"title":"Feishu (Lark) Channel Configuration","titles":[]},"33":{"title":"Step 1: Create a Feishu App","titles":["Feishu (Lark) Channel Configuration"]},"34":{"title":"Step 2: Enable Bot Capability","titles":["Feishu (Lark) Channel Configuration"]},"35":{"title":"Step 3: Configure Permissions","titles":["Feishu (Lark) Channel Configuration"]},"36":{"title":"Step 4: Configure Events (Webhook Mode)","titles":["Feishu (Lark) Channel Configuration"]},"37":{"title":"Step 5: Publish Your App","titles":["Feishu (Lark) Channel Configuration"]},"38":{"title":"Telegram Channel Configuration","titles":[]},"39":{"title":"Step 1: Create a Telegram Bot","titles":["Telegram Channel Configuration"]},"40":{"title":"Step 2: Configure Memoh","titles":["Telegram Channel Configuration"]},"41":{"title":"Step 3: Bind Your Identity (Optional)","titles":["Telegram Channel Configuration"]},"42":{"title":"Features Supported","titles":["Telegram Channel Configuration"]},"43":{"title":"Channels Overview","titles":[]},"44":{"title":"General Setup Flow","titles":["Channels Overview"]},"45":{"title":"Bot Management","titles":[]},"46":{"title":"Creating a Bot","titles":["Bot Management"]},"47":{"title":"Bot Detail Page","titles":["Bot Management"]},"48":{"title":"Overview Tab","titles":["Bot Management","Bot Detail Page"]},"49":{"title":"Configuring the Bot\'s Core Settings","titles":["Bot Management"]},"50":{"title":"Settings Tab Reference","titles":["Bot Management"]},"51":{"title":"Deleting a Bot","titles":["Bot Management"]},"52":{"title":"Browser Contexts","titles":[]},"53":{"title":"Concept: Browser Gateway","titles":["Browser Contexts"]},"54":{"title":"Creating a Browser Context","titles":["Browser Contexts"]},"55":{"title":"Configuring a Browser Context","titles":["Browser Contexts"]},"56":{"title":"Managing Contexts","titles":["Browser Contexts","Configuring a Browser Context"]},"57":{"title":"Assigning a Browser Context to a Bot","titles":["Browser Contexts"]},"58":{"title":"Bot Interaction","titles":["Browser Contexts"]},"59":{"title":"Next Steps","titles":["Browser Contexts"]},"60":{"title":"Bot Channels","titles":[]},"61":{"title":"Concept: Unified Communication","titles":["Bot Channels"]},"62":{"title":"Supported Channels","titles":["Bot Channels"]},"63":{"title":"Popular Platforms","titles":["Bot Channels","Supported Channels"]},"64":{"title":"Configuration Flow","titles":["Bot Channels"]},"65":{"title":"1. Adding a Channel","titles":["Bot Channels","Configuration Flow"]},"66":{"title":"2. Common Fields","titles":["Bot Channels","Configuration Flow"]},"67":{"title":"3. Special Case: Feishu Webhook","titles":["Bot Channels","Configuration Flow"]},"68":{"title":"Operations","titles":["Bot Channels"]},"69":{"title":"Bot Container Management","titles":[]},"70":{"title":"Concept: The Isolated Workspace","titles":["Bot Container Management"]},"71":{"title":"Operations","titles":["Bot Container Management"]},"72":{"title":"Lifecycle Actions","titles":["Bot Container Management","Operations"]},"73":{"title":"Container Information","titles":["Bot Container Management"]},"74":{"title":"Snapshots","titles":["Bot Container Management"]},"75":{"title":"Creating a Snapshot","titles":["Bot Container Management","Snapshots"]},"76":{"title":"Restoring a Snapshot","titles":["Bot Container Management","Snapshots"]},"77":{"title":"Managing Snapshots","titles":["Bot Container Management","Snapshots"]},"78":{"title":"Bot Files Management","titles":[]},"79":{"title":"Operations","titles":["Bot Files Management"]},"80":{"title":"Browsing and Navigation","titles":["Bot Files Management","Operations"]},"81":{"title":"Managing Files","titles":["Bot Files Management","Operations"]},"82":{"title":"Viewing and Editing","titles":["Bot Files Management"]},"83":{"title":"Text Files","titles":["Bot Files Management","Viewing and Editing"]},"84":{"title":"Images","titles":["Bot Files Management","Viewing and Editing"]},"85":{"title":"Bot Interaction with Files","titles":["Bot Files Management"]},"86":{"title":"Email Providers and Bindings","titles":[]},"87":{"title":"Concept: Email as a Bot Channel","titles":["Email Providers and Bindings"]},"88":{"title":"Email Provider","titles":["Email Providers and Bindings"]},"89":{"title":"Creating a Provider","titles":["Email Providers and Bindings","Email Provider"]},"90":{"title":"Bot Email Bindings","titles":["Email Providers and Bindings"]},"91":{"title":"Adding a Binding","titles":["Email Providers and Bindings","Bot Email Bindings"]},"92":{"title":"Outbox and History","titles":["Email Providers and Bindings"]},"93":{"title":"Bot Interaction","titles":["Email Providers and Bindings"]},"94":{"title":"Bot Heartbeat","titles":[]},"95":{"title":"Concept: Scheduled Autonomy","titles":["Bot Heartbeat"]},"96":{"title":"Configuration","titles":["Bot Heartbeat"]},"97":{"title":"Logs and Monitoring","titles":["Bot Heartbeat"]},"98":{"title":"Managing Logs","titles":["Bot Heartbeat","Logs and Monitoring"]},"99":{"title":"Bot Interaction","titles":["Bot Heartbeat"]},"100":{"title":"MCP Connections","titles":[]},"101":{"title":"Concept: Extending Bot Capabilities","titles":["MCP Connections"]},"102":{"title":"Connection Types","titles":["MCP Connections"]},"103":{"title":"1. Stdio (Local Process)","titles":["MCP Connections","Connection Types"]},"104":{"title":"2. Remote (HTTP/SSE)","titles":["MCP Connections","Connection Types"]},"105":{"title":"Operations","titles":["MCP Connections"]},"106":{"title":"Bot Interaction","titles":["MCP Connections"]},"107":{"title":"Bot Memory Management","titles":[]},"108":{"title":"Prerequisites","titles":["Bot Memory Management"]},"109":{"title":"Concept: Semantic Search","titles":["Bot Memory Management"]},"110":{"title":"Operations","titles":["Bot Memory Management"]},"111":{"title":"1. Creating Memories","titles":["Bot Memory Management","Operations"]},"112":{"title":"2. Searching and Managing","titles":["Bot Memory Management","Operations"]},"113":{"title":"Memory Compression (Compact)","titles":["Bot Memory Management"]},"114":{"title":"Visualization: Vector Manifold","titles":["Bot Memory Management"]},"115":{"title":"Top-K Bucket Chart","titles":["Bot Memory Management","Visualization: Vector Manifold"]},"116":{"title":"CDF Curve (Cumulative Distribution Function)","titles":["Bot Memory Management","Visualization: Vector Manifold"]},"117":{"title":"Bot Interaction","titles":["Bot Memory Management"]},"118":{"title":"LLM Provider and Model","titles":[]},"119":{"title":"LLM Provider","titles":["LLM Provider and Model"]},"120":{"title":"Creating a Provider","titles":["LLM Provider and Model","LLM Provider"]},"121":{"title":"Managing Providers","titles":["LLM Provider and Model","LLM Provider"]},"122":{"title":"Model","titles":["LLM Provider and Model"]},"123":{"title":"Adding a Model","titles":["LLM Provider and Model","Model"]},"124":{"title":"Managing Models","titles":["LLM Provider and Model","Model"]},"125":{"title":"Next Steps","titles":["LLM Provider and Model"]},"126":{"title":"Scheduled Tasks","titles":[]},"127":{"title":"Concept: Cron-Based Automation","titles":["Scheduled Tasks"]},"128":{"title":"Schedule Fields","titles":["Scheduled Tasks"]},"129":{"title":"Cron Pattern Reference","titles":["Scheduled Tasks"]},"130":{"title":"Viewing Schedules","titles":["Scheduled Tasks"]},"131":{"title":"Creating Schedules","titles":["Scheduled Tasks"]},"132":{"title":"Via the Bot (Conversational)","titles":["Scheduled Tasks","Creating Schedules"]},"133":{"title":"Via the API","titles":["Scheduled Tasks","Creating Schedules"]},"134":{"title":"Execution Flow","titles":["Scheduled Tasks"]},"135":{"title":"Schedule vs. Heartbeat","titles":["Scheduled Tasks"]},"136":{"title":"Search Providers","titles":[]},"137":{"title":"Concept: Real-Time Knowledge","titles":["Search Providers"]},"138":{"title":"Supported Search Engines","titles":["Search Providers"]},"139":{"title":"Configuration Flow","titles":["Search Providers"]},"140":{"title":"1. Adding a Search Provider","titles":["Search Providers","Configuration Flow"]},"141":{"title":"2. Managing Providers","titles":["Search Providers","Configuration Flow"]},"142":{"title":"Assigning a Search Provider to a Bot","titles":["Search Providers"]},"143":{"title":"Bot Interaction","titles":["Search Providers"]},"144":{"title":"Bot Skills","titles":[]},"145":{"title":"Concept: Skills as Markdown","titles":["Bot Skills"]},"146":{"title":"Example Skill Structure","titles":["Bot Skills","Concept: Skills as Markdown"]},"147":{"title":"Managing Skills","titles":["Bot Skills"]},"148":{"title":"Adding a Skill","titles":["Bot Skills","Managing Skills"]},"149":{"title":"Editing and Deleting","titles":["Bot Skills","Managing Skills"]},"150":{"title":"How Bots Use Skills","titles":["Bot Skills"]},"151":{"title":"Bot Subagents","titles":[]},"152":{"title":"Concept: Task Specialization","titles":["Bot Subagents"]},"153":{"title":"Fields","titles":["Bot Subagents"]},"154":{"title":"Operations","titles":["Bot Subagents"]},"155":{"title":"Bot Interaction","titles":["Bot Subagents"]},"156":{"title":"Memoh Documentation","titles":[]},"157":{"title":"Documentation","titles":["Memoh Documentation"]},"158":{"title":"Docker Installation","titles":[]},"159":{"title":"Prerequisites","titles":["Docker Installation"]},"160":{"title":"One-Click Install (Recommended)","titles":["Docker Installation"]},"161":{"title":"Manual Install","titles":["Docker Installation"]},"162":{"title":"China Mainland Mirror","titles":["Docker Installation","Manual Install"]},"163":{"title":"Access Points","titles":["Docker Installation"]},"164":{"title":"Common Commands","titles":["Docker Installation"]},"165":{"title":"Environment Variables","titles":["Docker Installation"]},"166":{"title":"Production Checklist","titles":["Docker Installation"]},"167":{"title":"Troubleshooting","titles":["Docker Installation"]},"168":{"title":"Security Warnings","titles":["Docker Installation"]},"169":{"title":"Built-in Memory Provider","titles":[]},"170":{"title":"Creating a Built-in Provider","titles":["Built-in Memory Provider"]},"171":{"title":"Configuring a Built-in Provider","titles":["Built-in Memory Provider"]},"172":{"title":"Managing Providers","titles":["Built-in Memory Provider","Configuring a Built-in Provider"]},"173":{"title":"Assigning a Memory Provider to a Bot","titles":["Built-in Memory Provider"]},"174":{"title":"Using Memory After Setup","titles":["Built-in Memory Provider"]},"175":{"title":"Memory Providers","titles":[]},"176":{"title":"Available Providers","titles":["Memory Providers"]},"177":{"title":"Basic Flow","titles":["Memory Providers"]},"178":{"title":"Next Steps","titles":["Memory Providers"]}},"dirtCount":0,"index":[["x26",{"2":{"164":2,"167":2}}],["=",{"2":{"162":1}}],["~",{"2":{"160":2}}],["|",{"2":{"160":5}}],["ˈmemoʊ",{"2":{"156":1}}],["`run",{"2":{"146":1}}],["`edit",{"2":{"146":1}}],["6",{"2":{"129":1}}],["│",{"2":{"129":15}}],["┌─────────────",{"2":{"129":5}}],["9",{"2":{"128":2,"129":2}}],["8083",{"2":{"163":1}}],["8081",{"2":{"163":1}}],["8080",{"2":{"163":1}}],["8082",{"2":{"163":1}}],["8",{"2":{"113":1,"129":3,"132":1,"133":1}}],["00",{"2":{"128":1,"129":3}}],["0",{"2":{"113":3,"128":1,"129":9,"133":1,"160":4,"165":2}}],["zh",{"2":{"55":1}}],["zone",{"2":{"51":1}}],["59",{"2":{"129":1}}],["5",{"0":{"37":1},"2":{"113":1}}],["4o",{"2":{"122":1,"123":1}}],["4",{"0":{"30":1,"36":1}}],["12",{"2":{"129":1}}],["123456789",{"2":{"39":1}}],["1536",{"2":{"123":1}}],["1",{"0":{"27":1,"33":1,"39":1,"65":1,"103":1,"111":1,"140":1},"2":{"129":4,"163":1}}],["jwt",{"2":{"160":2,"161":1}}],["jina",{"2":{"138":1}}],["jpg",{"2":{"84":1}}],["json",{"2":{"105":3,"133":1}}],["js",{"2":{"83":1}}],["join",{"2":{"26":1}}],["jobs",{"2":{"23":1}}],["just",{"2":{"18":1,"93":1}}],["k",{"0":{"115":1}}],["known",{"2":{"74":1}}],["knowledge",{"0":{"137":1},"2":{"19":1,"59":1,"117":1,"136":1}}],["kind",{"2":{"18":1}}],["keep",{"2":{"18":1,"24":2,"39":1,"98":1}}],["kept",{"2":{"17":1}}],["keys",{"2":{"66":1}}],["keyword",{"2":{"6":1}}],["key",{"0":{"2":1},"1":{"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1},"2":{"6":1,"89":1,"103":1,"120":1,"121":1,"140":1,"157":1}}],["yml",{"2":{"161":1,"162":2,"166":1}}],["yaml",{"2":{"145":1,"146":1,"150":1}}],["yandex",{"2":{"138":1}}],["y",{"2":{"103":1,"160":1}}],["yes",{"2":{"123":5}}],["yet",{"2":{"49":1,"59":1}}],["year",{"2":{"17":1,"18":1}}],["yours",{"2":{"24":1}}],["your",{"0":{"29":1,"37":1,"41":1},"2":{"1":1,"13":1,"18":1,"19":1,"22":1,"26":1,"29":1,"30":2,"32":1,"33":1,"35":1,"36":2,"38":1,"39":1,"40":2,"41":5,"43":3,"44":2,"49":1,"50":1,"57":1,"60":2,"62":1,"67":1,"71":1,"81":2,"85":1,"86":1,"87":1,"88":1,"90":1,"94":1,"100":1,"108":2,"110":1,"120":1,"125":1,"136":1,"137":1,"138":2,"140":1,"142":1,"147":1,"152":1,"156":1,"158":1,"160":1,"161":1,"164":1,"173":1}}],["you",{"2":{"1":1,"18":5,"21":1,"24":1,"29":1,"38":1,"39":2,"41":1,"43":1,"47":2,"49":1,"56":1,"57":1,"59":1,"60":1,"61":1,"74":1,"78":1,"82":1,"91":1,"94":2,"100":1,"114":1,"116":1,"117":1,"118":1,"125":2,"126":1,"132":1,"133":1,"136":1,"140":1,"142":1,"146":2,"150":1,"158":1,"161":1,"162":1,"168":1,"169":1,"172":1,"173":1,"174":1}}],["20",{"2":{"129":1}}],["2026",{"2":{"17":1,"25":1}}],["23",{"2":{"129":1}}],["2",{"0":{"28":1,"34":1,"40":1,"66":1,"104":1,"112":1,"141":1},"2":{"163":1}}],["24",{"2":{"6":1,"22":1}}],["32",{"2":{"161":1}}],["31",{"2":{"129":1}}],["30",{"2":{"96":1,"129":2}}],["3",{"0":{"29":1,"35":1,"41":1,"67":1},"2":{"13":1,"113":1,"122":1}}],["quickly",{"2":{"66":1,"80":1,"98":1,"105":2}}],["quick",{"2":{"48":1}}],["quietly",{"2":{"18":1}}],["quot",{"2":{"42":2,"70":2,"93":2,"95":2,"99":4,"120":2,"128":4,"132":2,"135":2,"140":2,"144":4,"150":2,"153":2,"155":2}}],["queries",{"2":{"115":1}}],["question",{"2":{"109":1,"143":1}}],["questions",{"2":{"17":2}}],["queued",{"2":{"12":1}}],["quarter",{"2":{"17":1}}],["qdrant",{"2":{"6":1,"15":1,"158":1,"166":1}}],["null",{"2":{"133":1}}],["number",{"2":{"73":1,"113":1,"128":2}}],["npx",{"2":{"103":1}}],["night",{"2":{"18":1}}],["navigating",{"2":{"53":1}}],["navigation",{"0":{"80":1},"2":{"8":1,"55":1,"58":1,"80":1}}],["navigate",{"2":{"46":1,"49":1,"51":1,"54":1,"57":1,"89":1,"120":1,"130":1,"140":1,"142":1,"170":1,"173":1}}],["name",{"2":{"27":1,"33":1,"39":2,"46":2,"54":2,"55":2,"75":1,"105":1,"120":2,"121":1,"123":2,"128":2,"130":1,"133":1,"140":2,"146":1,"148":1,"153":1,"154":2,"170":2,"171":2,"172":1}}],["natural",{"2":{"17":1,"128":1,"132":1,"135":1}}],["now",{"2":{"125":1,"176":1}}],["non",{"2":{"50":1}}],["node",{"2":{"18":1,"21":1}}],["notes",{"2":{"138":1}}],["notifications",{"2":{"95":1}}],["noticed",{"2":{"18":1}}],["not",{"2":{"17":1,"18":3,"21":1,"49":1,"59":1,"108":1,"158":1,"161":1,"164":1,"173":1}}],["no",{"2":{"13":1,"15":1,"22":1,"56":1,"112":1,"123":2,"160":1,"167":1,"172":1,"173":1}}],["necessary",{"2":{"166":1}}],["nerdctl",{"2":{"158":1}}],["next",{"0":{"59":1,"125":1,"178":1},"2":{"77":1,"124":2,"149":1}}],["needed",{"2":{"112":1}}],["need",{"2":{"21":1,"39":1,"41":1,"118":1,"140":1,"158":1}}],["news",{"2":{"128":2}}],["newbot",{"2":{"39":1}}],["new",{"2":{"18":1,"27":1,"41":1,"80":1,"111":1,"154":1}}],["never",{"2":{"12":1}}],["network",{"2":{"1":1,"5":1,"22":1,"23":1,"104":1,"156":1}}],["github",{"2":{"160":1,"161":1}}],["git",{"2":{"159":1,"161":1,"165":1}}],["give",{"2":{"18":1,"23":1,"27":1,"52":1}}],["global",{"2":{"138":1}}],["gpt",{"2":{"122":1,"123":1}}],["gather",{"2":{"58":1}}],["gateways",{"2":{"43":1}}],["gateway",{"0":{"53":1},"2":{"28":1,"52":1,"53":1,"158":1,"163":2}}],["guest",{"2":{"50":1}}],["guests",{"2":{"46":1}}],["guides",{"2":{"44":1,"63":1,"157":1}}],["guide",{"2":{"29":1,"36":2,"38":1,"39":1,"108":1,"157":1}}],["g",{"2":{"39":3,"44":1,"80":1,"83":1,"84":1,"89":1,"103":2,"104":1,"120":2,"123":3,"128":3,"134":1,"140":2,"153":1,"160":1,"165":1,"166":1}}],["gt",{"2":{"29":1,"33":1,"34":1,"35":1,"36":1,"37":1,"41":1}}],["good",{"2":{"74":1}}],["google",{"2":{"8":1,"9":1,"123":1,"137":1,"138":1}}],["go",{"2":{"27":2,"29":1,"30":1,"33":2,"34":1,"35":1,"36":2,"37":1,"40":1,"41":1,"49":1,"57":1,"142":1,"173":1}}],["got",{"2":{"18":1}}],["getting",{"2":{"157":1}}],["gets",{"2":{"23":1}}],["get",{"2":{"15":1,"17":1,"39":1}}],["general",{"0":{"44":1},"2":{"135":1,"152":1}}],["generation",{"2":{"50":1}}],["generating",{"2":{"50":1}}],["generative",{"2":{"9":1,"123":1}}],["generator",{"2":{"29":1}}],["generate",{"2":{"27":1,"36":1,"41":1,"67":1,"160":1,"161":1}}],["generated",{"2":{"18":1,"29":1,"160":1}}],["generic",{"2":{"7":1,"87":1,"89":1,"135":1}}],["grounded",{"2":{"143":1}}],["group",{"2":{"4":1,"35":1,"46":1,"161":1,"164":1}}],["groups",{"2":{"3":1,"22":1,"32":1}}],["gracefully",{"2":{"72":1}}],["grade",{"2":{"19":1}}],["graphical",{"0":{"13":1},"2":{"22":1}}],["+",{"2":{"6":1,"7":1,"13":1,"23":1}}],["v2",{"2":{"159":1}}],["vs",{"0":{"135":1}}],["volume",{"2":{"89":1}}],["volumes",{"2":{"72":1}}],["v1",{"2":{"36":1,"120":1,"165":1}}],["validate",{"2":{"167":1}}],["value",{"2":{"17":1,"103":1}}],["var",{"2":{"161":1}}],["variable",{"2":{"165":1}}],["variables",{"0":{"165":1},"2":{"103":1,"160":1}}],["various",{"2":{"22":1,"45":1,"60":1,"136":1}}],["version=v1",{"2":{"160":2}}],["versions",{"2":{"160":1,"165":1,"176":1}}],["versioning",{"2":{"74":1}}],["version",{"2":{"37":2,"160":1,"165":1}}],["versioned",{"2":{"21":1}}],["verification",{"2":{"36":1}}],["vector",{"0":{"114":1},"1":{"115":1,"116":1},"2":{"6":1,"21":1,"123":2,"169":1,"171":1}}],["video",{"2":{"123":1}}],["viewing",{"0":{"82":1,"130":1},"1":{"83":1,"84":1}}],["view",{"2":{"77":1,"98":1,"154":1,"164":1,"167":1}}],["viewport",{"2":{"50":1,"52":1,"55":4}}],["visualizes",{"2":{"116":1}}],["visualization",{"0":{"114":1},"1":{"115":1,"116":1},"2":{"13":1}}],["visual",{"2":{"13":1,"84":1,"114":1}}],["via",{"0":{"132":1,"133":1},"2":{"1":1,"6":1,"8":1,"9":1,"10":1,"31":1,"32":1,"43":2,"44":1,"45":1,"70":1,"93":2,"103":1,"156":1,"158":1,"166":1}}],["vue",{"2":{"13":1}}],["rule",{"2":{"127":1}}],["running",{"2":{"15":1,"48":1,"72":1,"73":2,"160":1,"161":1}}],["run",{"2":{"11":1,"20":1,"21":1,"22":1,"24":1,"103":1,"156":1,"158":1,"160":1,"168":1}}],["runtime",{"2":{"8":1,"21":1,"49":1,"50":1,"73":1,"109":1,"173":1}}],["runs",{"2":{"5":1,"22":1,"128":1,"132":1,"156":1,"158":1,"168":1}}],["right",{"2":{"121":1,"141":1,"176":1}}],["rich",{"2":{"8":1,"43":1}}],["rand",{"2":{"161":1}}],["range",{"2":{"9":1}}],["ratio",{"2":{"55":1,"113":2}}],["raise",{"2":{"20":1}}],["ram",{"2":{"18":1}}],["rag",{"2":{"18":1,"19":1}}],["root",{"2":{"120":1}}],["routine",{"2":{"99":1,"126":1,"135":1}}],["routing",{"2":{"66":1}}],["router",{"2":{"18":3,"21":2}}],["role",{"2":{"3":1,"153":1}}],["regular",{"2":{"166":1}}],["registry",{"2":{"162":2}}],["registered",{"2":{"50":1}}],["register",{"2":{"44":1,"132":1}}],["reverse",{"2":{"166":1}}],["rewriting",{"2":{"150":1}}],["retained",{"2":{"113":1}}],["retrieves",{"2":{"117":1,"175":1}}],["retrieve",{"2":{"81":1}}],["retrieved",{"2":{"22":1,"109":1,"115":1,"116":1}}],["retrieval",{"2":{"6":2,"21":1,"169":1}}],["redundant",{"2":{"113":1}}],["requires",{"2":{"143":1,"160":1}}],["required",{"2":{"13":1,"22":1,"28":1,"35":1,"65":1,"89":1,"123":1,"161":1}}],["requested",{"2":{"106":1}}],["rename",{"2":{"81":2}}],["rendered",{"2":{"8":1,"53":1}}],["refresh",{"2":{"80":1,"98":1,"130":1}}],["reference",{"0":{"50":1,"129":1},"2":{"157":1}}],["related",{"2":{"171":1}}],["relationships",{"2":{"77":1}}],["relevant",{"2":{"107":1,"109":1,"115":1,"116":1}}],["release",{"2":{"37":2,"160":2,"165":1}}],["reload",{"2":{"80":1,"130":1}}],["relying",{"2":{"58":1}}],["reusable",{"2":{"53":1}}],["recent",{"2":{"115":1}}],["receiving",{"2":{"44":1}}],["receives",{"2":{"99":1,"134":1}}],["receive",{"2":{"35":1,"36":2,"86":1,"155":1}}],["recurring",{"2":{"95":1,"126":1,"135":1}}],["recursive",{"2":{"81":1}}],["recipient",{"2":{"92":1}}],["records",{"2":{"98":1}}],["recommended",{"0":{"160":1},"2":{"15":1,"138":1,"157":1,"158":1}}],["recognition",{"0":{"4":1}}],["remote",{"0":{"104":1},"2":{"104":2}}],["removing",{"2":{"66":1}}],["remove",{"2":{"51":1,"56":1,"68":1,"72":1,"77":1,"81":1,"98":1,"112":1,"124":1,"149":1,"154":1,"172":1}}],["remains",{"2":{"21":1}}],["remembers",{"2":{"49":1}}],["remember",{"2":{"4":1,"18":1,"23":1,"85":1,"107":1}}],["repository",{"2":{"160":1}}],["reports",{"2":{"93":1,"126":1}}],["represented",{"2":{"145":1}}],["represents",{"2":{"119":1}}],["reproducible",{"2":{"20":1}}],["replies",{"2":{"7":1,"42":2}}],["re",{"2":{"20":1}}],["resource",{"2":{"166":1}}],["resources",{"2":{"49":1,"72":1,"106":1}}],["research",{"2":{"138":1,"152":1,"153":1}}],["reset",{"2":{"27":1,"76":1}}],["restrict",{"2":{"166":1}}],["rest",{"2":{"133":1}}],["restoring",{"0":{"76":1}}],["restore",{"2":{"5":1,"74":1,"76":1}}],["result",{"2":{"97":1,"133":1}}],["results",{"2":{"58":1,"127":1,"134":1,"143":2,"155":1}}],["response",{"2":{"97":1,"143":1}}],["responses",{"2":{"9":1,"38":1,"42":1,"50":1,"123":1}}],["respond",{"2":{"41":1,"93":1}}],["reached",{"2":{"134":1}}],["reactions",{"2":{"8":1}}],["reasoning",{"2":{"50":4,"106":1,"123":2}}],["realized",{"2":{"18":1}}],["reality",{"2":{"17":1}}],["real",{"0":{"137":1},"2":{"8":1,"13":1,"17":2,"18":4,"23":1,"58":1,"73":1,"136":1,"143":1}}],["reading",{"2":{"53":1}}],["ready",{"2":{"37":1,"43":1}}],["read",{"2":{"5":1,"8":1,"28":1,"29":1,"83":1,"85":1,"91":1,"134":1}}],["rebuild",{"2":{"6":1,"167":1,"169":1,"174":1}}],["utc",{"2":{"55":1}}],["url",{"2":{"29":2,"36":4,"46":1,"67":2,"104":1,"119":1,"120":2,"121":1,"140":1,"163":1}}],["uncomment",{"2":{"162":1}}],["uncomfortable",{"2":{"20":1}}],["unread",{"2":{"132":1,"133":2}}],["unlimited",{"2":{"128":1,"135":1}}],["unique",{"2":{"39":1,"73":1,"117":1}}],["unified",{"0":{"61":1},"2":{"7":1}}],["unifies",{"2":{"4":1}}],["understand",{"2":{"114":1}}],["understands",{"2":{"42":1}}],["under",{"2":{"19":1}}],["ui",{"2":{"13":1,"30":1,"40":1,"41":1,"55":1,"82":1,"158":1,"163":1,"171":1,"176":1}}],["usually",{"2":{"169":1}}],["usage",{"2":{"153":1,"154":1}}],["us",{"2":{"55":1}}],["using",{"0":{"174":1},"2":{"11":1,"45":1,"60":1,"67":1,"72":1,"108":1,"126":1,"127":1,"133":1,"134":1,"177":1}}],["useful",{"2":{"74":1,"95":1,"126":1}}],["used",{"2":{"49":1,"50":3,"73":1,"96":1,"117":1,"123":1,"169":2,"171":2}}],["uses",{"2":{"49":1,"129":1,"155":1,"175":1}}],["use",{"0":{"150":1},"2":{"8":1,"22":1,"23":1,"37":1,"49":2,"50":1,"52":2,"53":1,"56":1,"57":1,"58":1,"77":1,"81":1,"85":1,"93":1,"99":1,"105":1,"106":1,"118":1,"121":2,"135":2,"137":1,"141":1,"144":1,"146":2,"160":3,"162":2,"165":2,"168":2,"172":1,"173":1}}],["username",{"2":{"39":2,"89":1}}],["users",{"2":{"4":2,"8":1,"21":1,"32":1,"46":1,"49":1,"50":1,"162":1}}],["user",{"0":{"4":1},"2":{"18":1,"23":1,"28":1,"55":2,"93":1,"106":1,"109":1,"143":1,"146":1,"161":1,"164":1}}],["upload",{"2":{"81":1}}],["update",{"2":{"55":1,"56":1,"68":2,"81":1,"121":1,"141":1,"154":1,"164":1,"172":1}}],["upgradable",{"2":{"21":1}}],["up",{"2":{"3":1,"13":1,"22":1,"49":1,"95":1,"152":1,"161":1,"162":1,"164":2,"167":1}}],["d",{"2":{"161":1,"162":1,"164":2,"167":1}}],["dynamic",{"2":{"65":1}}],["dropdown",{"2":{"57":1,"142":1,"173":1}}],["db",{"2":{"21":1,"161":1}}],["during",{"2":{"97":1,"99":2,"117":1,"137":1,"150":1,"169":1}}],["duration",{"2":{"97":1}}],["durable",{"2":{"20":1,"21":1,"24":1}}],["duckduckgo",{"2":{"8":1,"138":1}}],["do",{"2":{"158":1}}],["domains",{"2":{"151":1}}],["domain",{"2":{"89":1}}],["download",{"2":{"81":1}}],["down",{"2":{"28":1,"72":1,"164":1}}],["don",{"2":{"18":2,"20":2}}],["doing",{"2":{"18":1}}],["doesn",{"2":{"18":1,"72":1}}],["does",{"2":{"17":1,"93":1,"128":1}}],["documented",{"2":{"146":1}}],["document",{"2":{"145":1}}],["documentation",{"0":{"156":1,"157":1},"1":{"157":1},"2":{"14":1}}],["docker",{"0":{"158":1},"1":{"159":1,"160":1,"161":1,"162":1,"163":1,"164":1,"165":1,"166":1,"167":1,"168":1},"2":{"15":2,"73":1,"157":1,"158":2,"159":2,"160":6,"161":4,"162":5,"164":6,"165":2,"166":1,"167":3}}],["dense",{"2":{"169":1}}],["density",{"2":{"18":2}}],["decisions",{"2":{"171":1}}],["decision",{"2":{"169":1}}],["decide",{"2":{"18":1}}],["decay",{"2":{"113":1}}],["delivered",{"2":{"134":1}}],["deliver",{"2":{"127":1}}],["delivery",{"2":{"89":1,"92":1}}],["delete",{"2":{"51":1,"56":1,"68":1,"72":2,"77":1,"81":1,"91":1,"112":1,"121":2,"124":1,"141":2,"149":1,"154":1,"172":1,"174":1}}],["deleting",{"0":{"51":1,"149":1},"2":{"105":1}}],["delegate",{"2":{"8":1,"151":1}}],["dedicated",{"2":{"69":1,"78":1}}],["deep",{"2":{"50":1,"152":1}}],["deeply",{"2":{"6":1}}],["determine",{"2":{"113":1}}],["detection",{"2":{"6":1}}],["detailed",{"2":{"44":1,"63":1,"97":1,"157":1}}],["detail",{"0":{"47":1},"1":{"48":1},"2":{"40":1,"47":1,"49":1,"51":1,"62":1,"71":1,"78":1,"90":1,"96":1,"102":1,"110":1,"130":1,"147":1,"153":1}}],["details",{"2":{"37":1,"48":1}}],["desired",{"2":{"76":1}}],["designed",{"2":{"14":1,"138":1}}],["description",{"2":{"33":1,"50":1,"55":1,"66":1,"96":1,"103":1,"104":1,"123":1,"128":2,"133":1,"146":1,"148":1,"153":2,"154":2,"165":1,"171":1}}],["deployable",{"2":{"21":1}}],["depending",{"2":{"140":1}}],["dependable",{"2":{"20":1}}],["dependencies",{"2":{"15":1}}],["developer",{"2":{"27":1,"29":1,"34":1}}],["developers",{"2":{"14":1}}],["device",{"2":{"18":1,"21":1,"23":1,"55":2}}],["defines",{"2":{"128":1}}],["define",{"2":{"8":1,"49":1,"50":2,"144":1,"175":1}}],["defaults",{"2":{"123":1,"160":2}}],["default",{"2":{"6":1,"22":1,"23":1,"96":1,"123":1,"161":1,"163":1,"165":1,"166":1,"168":1,"176":1}}],["danger",{"2":{"51":1}}],["data",{"2":{"51":2,"72":1,"73":2,"95":1,"101":1,"103":1,"126":1,"160":3,"166":1}}],["database",{"2":{"6":1,"22":1,"48":1,"161":1}}],["days",{"2":{"113":2}}],["day",{"2":{"20":1,"129":5,"132":1,"174":2}}],["dark",{"2":{"13":1}}],["daily",{"2":{"3":1,"128":1,"132":1,"133":1}}],["dialog",{"2":{"148":1,"154":1}}],["digest",{"2":{"132":1,"133":1}}],["dimensions",{"2":{"123":1}}],["different",{"2":{"61":1,"96":1}}],["differs",{"2":{"23":1}}],["did",{"2":{"18":1}}],["directories",{"2":{"80":1,"81":1}}],["directory",{"2":{"79":1,"80":1,"103":1,"160":2}}],["directly",{"2":{"41":1,"67":1,"78":1,"84":1,"112":1,"162":1}}],["direct",{"2":{"4":1,"43":1}}],["distribution",{"0":{"116":1},"2":{"115":1}}],["distinguishes",{"2":{"122":1}}],["distinguish",{"2":{"4":1}}],["discover",{"2":{"106":1}}],["discord",{"0":{"26":1,"27":1},"1":{"27":1,"28":1,"29":1,"30":1,"31":1},"2":{"1":1,"4":1,"7":1,"26":1,"27":1,"29":1,"30":1,"31":1,"43":1,"61":1,"63":1,"157":1}}],["displays",{"2":{"73":1}}],["display",{"2":{"39":1,"46":1,"54":1,"55":1,"120":1,"123":1,"128":1,"170":1,"171":1}}],["disappears",{"2":{"18":1}}],["disabled",{"2":{"66":1,"134":1}}],["disable",{"2":{"8":1,"66":1,"68":1,"105":1}}],["ps",{"2":{"164":1}}],["pm",{"2":{"129":1}}],["png",{"2":{"84":1}}],["python3",{"2":{"103":1}}],["py",{"2":{"83":1}}],["pipeline",{"2":{"169":1}}],["pins",{"2":{"165":1}}],["pin",{"2":{"160":1}}],["pixel",{"2":{"55":1}}],["pixels",{"2":{"55":2}}],["picture",{"2":{"46":1}}],["pulled",{"2":{"163":1}}],["pulls",{"2":{"160":1}}],["pull",{"2":{"160":1,"164":1}}],["purpose",{"2":{"135":1,"153":1}}],["public",{"2":{"46":1,"50":1}}],["published",{"2":{"37":1}}],["publish",{"0":{"37":1}}],["push",{"2":{"23":1}}],["pencil",{"2":{"149":1}}],["people",{"2":{"20":1}}],["periodic",{"2":{"94":1,"95":1,"126":1,"135":2}}],["performance",{"2":{"138":1}}],["performing",{"2":{"114":1,"126":1}}],["perform",{"2":{"45":1,"58":1,"72":1,"85":1,"94":1,"99":1,"106":1,"152":1}}],["persistence",{"2":{"73":1}}],["persistent",{"2":{"45":1,"51":1,"72":1}}],["personalized",{"2":{"107":1}}],["personality",{"2":{"8":1,"45":1,"144":1,"145":1}}],["personal",{"2":{"17":1,"18":1,"41":1,"46":1}}],["person",{"2":{"4":2}}],["permissions",{"0":{"35":1},"2":{"29":1,"35":3,"91":1,"93":1,"155":1}}],["permanently",{"2":{"24":1,"51":1,"68":1,"154":1}}],["per",{"2":{"9":1}}],["phones",{"2":{"18":1}}],["pattern",{"0":{"129":1},"2":{"128":1,"129":2,"130":1,"133":1}}],["path",{"2":{"80":1,"165":1}}],["paths",{"2":{"73":2}}],["passwords",{"2":{"166":2,"168":1}}],["password=your",{"2":{"161":1}}],["password",{"2":{"89":1,"160":2,"161":6,"165":3}}],["paste",{"2":{"30":1,"36":1,"40":1,"44":1,"67":1}}],["past",{"2":{"17":1}}],["package",{"2":{"70":1}}],["parsed",{"2":{"145":1}}],["parent",{"2":{"77":1,"80":1}}],["parameters",{"2":{"50":1,"140":1}}],["part",{"2":{"18":1}}],["pairs",{"2":{"103":1}}],["paired",{"2":{"19":1}}],["paid",{"2":{"18":1}}],["pages",{"2":{"52":1}}],["page",{"0":{"47":1},"1":{"48":1},"2":{"8":1,"40":1,"46":1,"47":1,"49":1,"51":1,"52":1,"53":1,"54":2,"57":1,"58":1,"62":1,"71":1,"78":1,"88":1,"89":1,"90":1,"96":1,"102":1,"110":1,"120":1,"123":1,"130":1,"138":1,"140":1,"142":1,"147":1,"153":1,"170":2,"173":1,"177":1}}],["points",{"0":{"163":1}}],["pool",{"2":{"113":1}}],["ports",{"2":{"166":1}}],["port",{"2":{"89":1}}],["portal",{"2":{"27":1,"29":1,"85":1}}],["portable",{"2":{"18":1,"20":1}}],["popular",{"0":{"63":1}}],["powerful",{"2":{"18":1,"86":1,"138":1}}],["powered",{"2":{"5":1,"8":1,"53":1,"138":1}}],["postgres",{"2":{"160":2,"161":3,"165":2,"166":1}}],["postgresql",{"2":{"15":1,"158":1,"165":1}}],["post",{"2":{"133":1}}],["position",{"2":{"18":1}}],["polite",{"2":{"18":1}}],["pdfs",{"2":{"53":1}}],["pdf",{"2":{"8":1,"58":1}}],["playground",{"2":{"23":1}}],["playwright",{"2":{"8":1,"53":1}}],["plane",{"2":{"21":1}}],["plainly",{"2":{"18":1}}],["platforms",{"0":{"63":1},"2":{"7":1,"22":1,"38":1,"43":1,"45":1,"60":1}}],["platform",{"0":{"7":1},"2":{"1":1,"4":1,"32":1,"33":1,"44":2,"63":1,"65":1,"66":2}}],["prefix",{"2":{"164":1}}],["prefer",{"2":{"14":1}}],["precise",{"2":{"135":1}}],["prerequisites",{"0":{"108":1,"159":1}}],["preview",{"2":{"84":2}}],["preserve",{"2":{"72":1}}],["practices",{"2":{"146":1}}],["practice",{"2":{"53":1}}],["primarily",{"2":{"131":1}}],["primary",{"2":{"50":1}}],["privileged",{"2":{"28":1,"168":1}}],["privileges",{"2":{"18":1}}],["private",{"2":{"20":1,"21":2,"32":1,"46":1,"70":1}}],["privately",{"2":{"3":1,"22":1}}],["privacy",{"2":{"17":1,"23":1,"138":2}}],["proxy",{"2":{"166":1}}],["proceed",{"2":{"125":1}}],["process",{"0":{"103":1},"2":{"91":1,"97":1,"103":1,"106":1,"143":1}}],["providing",{"2":{"86":1,"107":1,"154":1}}],["provided",{"2":{"48":1,"66":1,"106":1,"111":1}}],["provides",{"2":{"48":1,"53":1,"69":1,"79":1,"92":1,"97":1,"101":1}}],["provide",{"2":{"39":1,"75":1,"91":1,"99":1,"117":1,"143":2}}],["provider",{"0":{"9":1,"88":1,"89":1,"118":1,"119":1,"120":1,"140":1,"142":1,"169":1,"170":1,"171":1,"173":1},"1":{"89":1,"119":1,"120":2,"121":2,"122":1,"123":1,"124":1,"125":1,"170":1,"171":1,"172":2,"173":1,"174":1},"2":{"22":1,"49":5,"50":3,"59":1,"87":2,"88":1,"89":3,"91":1,"108":6,"109":1,"117":3,"118":1,"119":1,"120":2,"121":3,"122":1,"123":2,"137":1,"138":1,"140":2,"141":3,"142":2,"143":1,"169":1,"170":3,"171":3,"172":2,"173":4,"174":1,"175":3,"176":3,"177":5,"178":3}}],["providers",{"0":{"86":1,"121":1,"136":1,"141":1,"172":1,"175":1,"176":1},"1":{"87":1,"88":1,"89":1,"90":1,"91":1,"92":1,"93":1,"137":1,"138":1,"139":1,"140":1,"141":1,"142":1,"143":1,"176":1,"177":1,"178":1},"2":{"7":1,"8":1,"9":1,"13":1,"43":1,"49":1,"100":1,"138":1,"170":3,"177":1}}],["programmatically",{"2":{"133":1}}],["programming",{"2":{"83":1}}],["progress",{"2":{"18":2}}],["profile",{"2":{"46":1,"49":1,"53":1}}],["production",{"0":{"166":1},"2":{"168":2}}],["product",{"2":{"24":1,"176":1}}],["prompts",{"2":{"39":1,"95":1,"160":1}}],["prompt",{"2":{"12":1,"99":1,"135":1,"150":1,"160":1}}],["protocol",{"0":{"10":1},"2":{"10":1,"100":1,"123":1}}],["hub",{"2":{"61":1,"162":1}}],["human",{"2":{"18":1}}],["humans",{"2":{"3":1,"22":1}}],["html",{"2":{"58":1}}],["https",{"2":{"55":2,"120":1,"160":5,"161":1,"166":1,"168":1}}],["http",{"0":{"104":1},"2":{"10":1,"104":2,"163":4}}],["helping",{"2":{"116":1}}],["help",{"2":{"114":1}}],["helps",{"2":{"113":1,"150":1}}],["held",{"2":{"23":1}}],["height",{"2":{"55":2}}],["headers",{"2":{"104":2}}],["headless",{"2":{"52":1}}],["heartbeat",{"0":{"94":1,"135":1},"1":{"95":1,"96":1,"97":1,"98":1,"99":1},"2":{"94":1,"95":1,"96":5,"97":4,"98":1,"99":3,"135":2}}],["health",{"2":{"48":2}}],["highly",{"2":{"138":1}}],["highlighting",{"2":{"83":1}}],["high",{"2":{"50":1,"89":1}}],["history",{"0":{"92":1},"2":{"19":1,"29":1,"50":1,"98":1,"111":1,"153":1,"154":1}}],["hide",{"2":{"18":1}}],["hour",{"2":{"129":1}}],["hours",{"2":{"6":1,"22":1}}],["how",{"0":{"21":1,"150":1},"2":{"49":1,"63":1,"66":1,"96":1,"97":1,"113":1,"114":1,"116":1,"144":1,"175":1}}],["home",{"0":{"16":1},"1":{"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1},"2":{"18":2,"19":1,"23":1,"24":1}}],["hosted",{"2":{"119":1,"138":1}}],["host",{"2":{"15":1,"69":1,"73":1,"89":1,"158":1}}],["hybrid",{"2":{"6":1,"23":1}}],["handles",{"2":{"93":1,"152":1,"162":1}}],["half",{"2":{"18":1}}],["happening",{"2":{"18":1}}],["hardware",{"2":{"17":1,"18":1}}],["have",{"2":{"10":1,"23":1,"49":1,"59":1,"72":1,"101":1,"108":1,"125":1}}],["having",{"2":{"1":1,"22":1}}],["has",{"2":{"1":1,"18":1,"78":1,"108":1,"128":1,"132":1}}],["blocks",{"2":{"42":1}}],["blogs",{"0":{"25":1},"2":{"25":1}}],["best",{"2":{"146":1}}],["belongs",{"2":{"122":1}}],["belief",{"2":{"23":1}}],["before",{"2":{"50":1,"108":1,"161":1,"168":1}}],["behave",{"2":{"144":1}}],["behaviors",{"2":{"150":1}}],["behavior",{"2":{"50":2,"52":1,"55":1}}],["behind",{"2":{"18":1}}],["bet",{"2":{"24":1}}],["between",{"2":{"9":1,"18":1,"66":1,"80":1,"104":1,"122":1}}],["be",{"2":{"22":1,"23":1,"51":1,"91":1,"96":1,"134":1,"143":1,"160":1,"176":1}}],["become",{"2":{"113":1}}],["becomes",{"2":{"18":1,"20":1,"137":1,"175":1}}],["because",{"2":{"18":1}}],["being",{"2":{"18":1}}],["bashdocker",{"2":{"164":1,"167":1}}],["bashsudo",{"2":{"161":1,"162":1}}],["bashgit",{"2":{"161":1}}],["bashuse",{"2":{"160":1}}],["bashmemoh",{"2":{"160":1}}],["bashcurl",{"2":{"160":2}}],["basic",{"0":{"177":1},"2":{"33":1,"46":1,"148":1}}],["base64",{"2":{"161":1}}],["base",{"2":{"18":1,"19":2,"73":1,"119":1,"120":1,"140":1}}],["based",{"0":{"127":1},"2":{"3":1,"65":1,"93":1}}],["battery",{"2":{"18":1}}],["backups",{"2":{"166":2}}],["background",{"2":{"73":1}}],["backend",{"2":{"49":1,"50":1,"108":1,"117":1,"169":1,"175":1}}],["back",{"2":{"18":1,"42":1,"81":1}}],["bocha",{"2":{"138":1}}],["bound",{"2":{"127":1}}],["boundaries",{"2":{"21":1,"23":1}}],["boundary",{"2":{"17":1}}],["bold",{"2":{"42":1}}],["bottom",{"2":{"49":1,"51":1,"120":1}}],["botfather",{"2":{"39":2,"44":1}}],["both",{"2":{"23":1,"135":1}}],["bot",{"0":{"3":1,"28":1,"29":1,"34":1,"39":1,"45":1,"46":1,"47":1,"49":1,"51":1,"57":1,"58":1,"60":1,"69":1,"78":1,"85":1,"87":1,"90":1,"93":1,"94":1,"99":1,"101":1,"106":1,"107":1,"117":1,"132":1,"142":1,"143":1,"144":1,"151":1,"155":1,"173":1},"1":{"46":1,"47":1,"48":2,"49":1,"50":1,"51":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"91":1,"95":1,"96":1,"97":1,"98":1,"99":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1,"145":1,"146":1,"147":1,"148":1,"149":1,"150":1,"152":1,"153":1,"154":1,"155":1},"2":{"1":1,"3":1,"5":1,"8":1,"9":1,"10":1,"12":1,"13":1,"14":1,"22":3,"23":1,"26":1,"27":2,"28":1,"29":2,"30":2,"34":2,"36":2,"37":1,"38":1,"39":7,"40":1,"41":4,"42":4,"44":3,"45":1,"46":2,"47":1,"48":1,"49":5,"50":4,"51":4,"52":4,"57":2,"58":2,"59":2,"60":1,"61":1,"62":2,"66":1,"69":2,"70":2,"71":2,"72":1,"73":1,"74":2,"78":2,"80":1,"81":2,"82":1,"83":1,"85":2,"86":1,"87":2,"90":2,"91":5,"92":1,"93":2,"94":1,"95":1,"96":1,"97":2,"99":3,"100":1,"101":1,"102":1,"106":1,"108":3,"109":1,"110":2,"111":1,"116":1,"117":3,"125":1,"126":1,"127":2,"130":2,"132":3,"133":1,"136":1,"137":1,"142":1,"143":2,"144":2,"145":1,"147":2,"149":1,"150":2,"151":1,"152":2,"153":2,"155":3,"156":1,"173":2,"174":3,"175":2,"177":2,"178":1}}],["bots",{"0":{"150":1},"2":{"1":1,"3":4,"4":1,"5":1,"8":2,"13":1,"22":6,"29":1,"32":1,"43":2,"45":1,"46":1,"50":1,"53":2,"57":1,"63":1,"69":1,"101":1,"107":1,"133":1,"142":1,"156":1,"157":1,"173":1}}],["bucket",{"0":{"115":1}}],["business",{"2":{"43":1}}],["buttons",{"2":{"53":1}}],["button",{"2":{"46":1,"77":1,"105":1,"120":1,"121":1,"141":1}}],["but",{"2":{"17":2,"18":1,"20":1,"72":1,"155":1,"176":1}}],["builtin",{"2":{"170":1,"171":1,"176":1}}],["built",{"0":{"169":1,"170":1,"171":1},"1":{"170":1,"171":1,"172":2,"173":1,"174":1},"2":{"7":1,"8":1,"10":1,"23":1,"24":1,"43":1,"49":1,"50":1,"58":1,"59":1,"83":1,"108":1,"109":1,"117":1,"169":1,"176":1,"178":1}}],["buildkit",{"2":{"158":1}}],["building",{"2":{"18":1,"155":1}}],["buildable",{"2":{"17":1}}],["build",{"2":{"3":1,"18":1,"23":1,"167":1}}],["breadcrumb",{"2":{"80":1}}],["breaks",{"2":{"17":1}}],["bridges",{"2":{"61":1}}],["brief",{"2":{"20":1,"128":1,"153":1}}],["browse",{"2":{"136":1}}],["browser",{"0":{"52":1,"53":1,"54":1,"55":1,"57":1},"1":{"53":1,"54":1,"55":1,"56":2,"57":1,"58":1,"59":1},"2":{"8":2,"13":1,"29":1,"49":5,"50":2,"52":6,"53":4,"54":4,"55":4,"57":3,"58":4,"163":1}}],["browsing",{"0":{"80":1},"2":{"50":1,"79":1}}],["brave",{"2":{"8":1,"137":1,"138":1,"140":1}}],["brain",{"2":{"1":1}}],["bind",{"0":{"41":1},"2":{"41":3,"175":1}}],["bindings",{"0":{"86":1,"90":1},"1":{"87":1,"88":1,"89":1,"90":1,"91":2,"92":1,"93":1},"2":{"172":1}}],["binding",{"0":{"91":1},"2":{"4":1,"87":1,"91":1}}],["bing",{"2":{"8":1,"137":1,"138":1}}],["bm25",{"2":{"6":1}}],["by",{"2":{"5":1,"6":1,"22":2,"23":1,"35":1,"43":1,"53":1,"63":1,"66":1,"80":1,"92":1,"98":1,"105":1,"106":3,"112":1,"117":1,"123":1,"151":1,"154":1,"157":1,"161":1}}],["f",{"2":{"162":2,"164":1}}],["fssl",{"2":{"160":5}}],["flexible",{"2":{"135":1}}],["flexibly",{"2":{"9":1}}],["flow",{"0":{"44":1,"64":1,"134":1,"139":1,"177":1},"1":{"65":1,"66":1,"67":1,"140":1,"141":1}}],["future",{"2":{"176":1}}],["function",{"0":{"116":1}}],["furthermore",{"2":{"24":1}}],["fully",{"2":{"20":2,"100":1}}],["full",{"2":{"7":3,"10":1,"31":1,"167":1}}],["fixed",{"2":{"135":1}}],["fixes",{"2":{"18":1}}],["five",{"2":{"129":1}}],["firewall",{"2":{"166":1}}],["fired",{"2":{"128":1}}],["fires",{"2":{"127":1,"134":1}}],["first",{"2":{"18":1,"19":1,"23":2,"49":1,"118":1,"129":1,"163":1}}],["fine",{"2":{"116":1}}],["finds",{"2":{"109":1}}],["find",{"2":{"57":1,"76":1,"98":1,"105":1,"142":1,"173":1}}],["finished",{"2":{"18":1}}],["fields",{"0":{"66":1,"128":1,"153":1},"2":{"49":1,"65":1,"89":1,"120":1,"123":1,"129":1,"170":1}}],["field",{"2":{"36":1,"40":1,"50":1,"54":1,"55":1,"66":1,"96":1,"103":1,"104":1,"108":1,"123":1,"128":1,"129":1,"153":1,"171":1}}],["filter",{"2":{"98":1,"112":1}}],["file`",{"2":{"146":1}}],["fileviewer",{"2":{"82":1}}],["filemanager",{"2":{"79":1}}],["file",{"2":{"72":1,"79":1,"80":1,"81":2,"83":2,"84":2,"105":2,"123":1,"134":1,"161":1,"165":1}}],["filesystem",{"2":{"5":1,"13":1,"69":1,"78":2,"83":1,"95":1,"103":1}}],["files",{"0":{"78":1,"81":1,"83":1,"85":1},"1":{"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1},"2":{"1":1,"5":1,"8":2,"21":1,"22":1,"23":1,"29":1,"31":1,"42":2,"51":1,"70":1,"78":1,"80":1,"81":2,"82":1,"85":2,"145":1,"156":1}}],["fill",{"2":{"36":1,"37":1,"46":1,"52":1,"54":1,"58":1,"65":1,"89":1,"105":1,"120":1,"140":1,"148":1,"170":1}}],["filling",{"2":{"8":1,"53":1}}],["focus",{"2":{"151":1}}],["focused",{"2":{"43":1,"138":1}}],["folders",{"2":{"81":1}}],["folder",{"2":{"80":1,"81":1}}],["follow",{"2":{"39":1,"48":1,"146":1}}],["following",{"2":{"35":1,"43":1,"54":1,"120":1,"123":1,"140":1,"170":1,"176":1}}],["four",{"2":{"9":1}}],["forward",{"2":{"23":1}}],["forcing",{"2":{"18":1}}],["formats",{"2":{"83":1}}],["formatting",{"2":{"38":1}}],["forms",{"2":{"52":1,"53":1}}],["form",{"2":{"8":1,"17":1,"18":1,"49":1,"121":2,"141":2}}],["for",{"0":{"16":1},"1":{"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1},"2":{"3":1,"5":1,"7":1,"8":2,"9":1,"10":1,"13":1,"14":2,"18":2,"20":1,"21":1,"22":1,"24":1,"28":1,"31":1,"35":2,"37":1,"39":2,"42":1,"43":3,"44":1,"46":1,"49":3,"50":5,"51":1,"53":2,"54":1,"58":1,"61":1,"63":2,"73":2,"74":1,"75":1,"81":1,"86":1,"89":2,"93":1,"94":1,"95":1,"101":1,"103":2,"104":1,"113":1,"115":1,"117":1,"120":2,"122":2,"123":3,"126":1,"128":3,"130":1,"135":2,"136":1,"138":2,"140":2,"152":1,"153":1,"155":1,"157":1,"160":3,"162":1,"165":1,"166":1,"169":2,"170":1,"171":2,"174":1,"175":1}}],["friendly",{"2":{"123":1,"140":1}}],["frontmatter",{"2":{"145":1,"149":1,"150":1}}],["frontier",{"2":{"21":1,"24":1}}],["from",{"2":{"6":1,"12":1,"18":1,"42":1,"44":1,"46":1,"54":1,"55":1,"62":1,"65":1,"71":1,"78":1,"81":2,"87":1,"88":1,"89":1,"90":1,"96":2,"102":1,"105":1,"108":1,"110":1,"111":2,"120":1,"121":1,"123":1,"138":1,"140":1,"141":1,"147":1,"149":1,"153":2,"155":1,"160":2,"169":1,"170":1,"171":1,"174":2,"177":2}}],["freely",{"2":{"5":1,"22":1}}],["false",{"2":{"165":1}}],["fail",{"2":{"161":1}}],["failed",{"2":{"97":1}}],["favorite",{"2":{"43":1,"60":1}}],["faster",{"2":{"23":1}}],["fast",{"2":{"18":1}}],["factor",{"2":{"17":1,"55":1}}],["facts",{"2":{"6":1}}],["familiar",{"2":{"17":1,"79":1}}],["family",{"2":{"3":1}}],["fetch",{"2":{"44":1,"160":1}}],["feature",{"2":{"43":1,"94":1,"113":1,"135":1}}],["features",{"0":{"2":1,"22":1,"31":1,"42":1},"1":{"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1},"2":{"135":1,"157":1}}],["featuring",{"2":{"38":1}}],["feb",{"2":{"25":1}}],["feed",{"2":{"20":1}}],["feels",{"2":{"24":1}}],["feeling",{"2":{"18":1}}],["feel",{"2":{"17":1,"18":2}}],["feishu",{"0":{"32":1,"33":1,"67":1},"1":{"33":1,"34":1,"35":1,"36":1,"37":1},"2":{"1":1,"7":1,"22":1,"32":1,"33":1,"34":1,"36":3,"37":1,"43":1,"63":1,"67":3,"156":1,"157":1}}],["icon",{"2":{"124":2,"149":2}}],["ignore",{"2":{"55":1}}],["irreversible",{"2":{"51":1}}],["identifier",{"2":{"73":1,"81":1,"123":1,"153":1}}],["identity",{"0":{"4":1,"41":1},"2":{"4":1,"8":1,"41":2}}],["ids",{"2":{"44":1}}],["id",{"2":{"33":1,"36":1,"55":1,"73":1,"105":1,"112":1,"123":2,"133":1}}],["implementation",{"2":{"171":1}}],["import",{"2":{"105":2}}],["important",{"2":{"49":1,"161":1}}],["impact",{"2":{"24":1}}],["immediately",{"2":{"68":1}}],["immediate",{"2":{"43":1}}],["image",{"2":{"72":1,"73":2,"84":1,"123":1,"160":2,"165":1}}],["images",{"0":{"84":1},"2":{"31":1,"42":1,"160":1,"163":1,"164":1,"165":1}}],["imap",{"2":{"43":1}}],["im",{"2":{"35":2,"36":1}}],["if",{"2":{"18":1,"24":1,"31":1,"35":1,"41":1,"48":1,"49":1,"50":2,"59":1,"67":1,"72":1,"91":3,"123":1,"134":1,"161":1,"164":1,"173":1}}],["i",{"2":{"18":7}}],["i18n",{"2":{"13":1}}],["inherit",{"2":{"155":1}}],["injected",{"2":{"150":1}}],["input",{"2":{"103":1,"123":1}}],["inquiries",{"2":{"93":1}}],["incremented",{"2":{"134":1}}],["incoming",{"2":{"91":1,"93":1}}],["included",{"2":{"176":1}}],["include",{"2":{"53":1,"106":1}}],["includes",{"2":{"15":1,"109":1,"114":1,"158":1,"176":1}}],["including",{"2":{"9":1,"51":1,"130":1}}],["initialize",{"2":{"72":1,"163":1}}],["involves",{"2":{"87":1}}],["invoked",{"2":{"57":1}}],["invalid",{"2":{"55":1}}],["invite",{"0":{"29":1}}],["info",{"2":{"33":1,"46":1}}],["information",{"0":{"73":1},"2":{"8":1,"18":1,"35":1,"58":1,"107":1,"113":1,"116":1,"136":1,"143":1}}],["inference",{"2":{"21":1,"23":1,"24":1}}],["infrastructure",{"2":{"18":1,"20":1,"23":1,"24":1}}],["inflate",{"2":{"18":1}}],["integrated",{"2":{"79":1,"82":1}}],["integrating",{"2":{"32":1}}],["integration",{"2":{"31":1,"43":3}}],["intent",{"2":{"28":1}}],["intents",{"2":{"28":1}}],["intelligence",{"2":{"18":1}}],["internal",{"2":{"123":1}}],["internet",{"2":{"18":1}}],["intervention",{"2":{"126":1}}],["intervene",{"2":{"85":1}}],["interval",{"2":{"95":1,"96":1,"135":1}}],["interactions",{"2":{"107":1}}],["interaction",{"0":{"58":1,"85":1,"93":1,"99":1,"106":1,"117":1,"143":1,"155":1}}],["interact",{"2":{"26":1,"32":1,"43":1,"50":1,"58":1,"60":1,"82":1}}],["interface",{"2":{"7":1,"22":1,"43":1,"98":1}}],["interfering",{"2":{"5":1}}],["into",{"2":{"17":1,"18":1,"36":1,"40":1,"67":1,"81":1,"111":1,"132":1,"145":1,"150":1}}],["introduction",{"0":{"16":1},"1":{"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1},"2":{"25":1}}],["inbox",{"0":{"12":1},"2":{"12":1,"91":1}}],["inbound",{"2":{"7":1,"36":1,"67":1}}],["inspect",{"2":{"52":1,"58":1,"154":1}}],["inspection",{"2":{"8":1}}],["instruction",{"2":{"128":1,"135":1}}],["instance",{"2":{"72":1,"73":1,"122":1,"177":1}}],["install",{"0":{"160":1,"161":1},"1":{"162":1},"2":{"70":1,"158":1,"160":3,"162":1,"165":1}}],["installation",{"0":{"15":1,"158":1},"1":{"159":1,"160":1,"161":1,"162":1,"163":1,"164":1,"165":1,"166":1,"167":1,"168":1},"2":{"157":2}}],["instead",{"2":{"58":1}}],["instinct",{"2":{"18":1}}],["inside",{"2":{"8":1,"78":1,"117":1,"158":1}}],["indexing",{"2":{"21":1,"23":1}}],["index",{"2":{"21":1}}],["independent",{"2":{"1":1,"8":1,"10":1,"45":1,"101":1,"151":1,"154":1}}],["individual",{"2":{"4":1}}],["in",{"0":{"169":1,"170":1,"171":1},"1":{"170":1,"171":1,"172":2,"173":1,"174":1},"2":{"3":1,"4":1,"5":1,"7":1,"8":1,"10":1,"12":1,"18":1,"20":1,"22":3,"23":1,"24":1,"27":1,"29":1,"30":1,"32":1,"33":2,"34":1,"36":3,"37":2,"38":1,"39":1,"40":1,"41":1,"43":1,"44":1,"46":2,"49":1,"50":1,"51":1,"53":1,"54":2,"55":3,"58":1,"59":1,"62":1,"65":1,"67":1,"69":1,"71":1,"72":1,"73":1,"75":1,"76":1,"78":1,"83":2,"84":1,"85":1,"88":1,"89":1,"90":1,"93":2,"96":2,"102":1,"105":1,"106":1,"108":2,"109":3,"110":1,"111":1,"112":1,"117":1,"120":1,"121":1,"123":1,"124":1,"131":1,"132":1,"138":1,"140":1,"141":2,"147":1,"148":2,"153":1,"156":1,"161":1,"162":2,"163":1,"164":1,"165":1,"166":1,"168":2,"169":1,"170":2,"171":1,"173":1,"175":1,"176":3,"177":1,"178":1}}],["italic",{"2":{"42":1}}],["iterate",{"2":{"23":1}}],["itself",{"2":{"85":1,"132":1}}],["its",{"2":{"1":2,"5":1,"10":1,"22":1,"45":1,"47":2,"49":1,"50":2,"51":1,"55":1,"56":1,"66":1,"69":1,"78":2,"81":1,"85":2,"91":1,"93":1,"95":1,"99":2,"101":1,"106":1,"117":1,"121":1,"127":1,"134":1,"141":1,"143":1,"149":1,"154":1,"156":1,"171":1,"172":1,"173":1,"175":1}}],["it",{"2":{"1":1,"18":9,"23":2,"24":1,"26":1,"27":2,"29":2,"41":1,"48":1,"55":1,"60":1,"61":1,"67":1,"70":1,"72":1,"73":1,"74":1,"77":1,"83":1,"93":2,"94":2,"99":1,"119":1,"124":1,"127":2,"128":1,"136":1,"137":1,"144":1,"152":1,"161":1,"169":2,"171":1}}],["issue",{"2":{"97":1}}],["isolated",{"0":{"70":1},"2":{"5":1,"21":1,"22":1,"23":1,"45":1,"69":1,"78":1,"156":1}}],["isolation",{"0":{"5":1},"2":{"69":1}}],["is",{"0":{"1":1},"2":{"1":1,"17":1,"18":3,"19":1,"21":2,"22":2,"24":2,"37":1,"38":1,"41":2,"45":1,"49":1,"51":1,"52":1,"53":1,"55":1,"58":1,"74":1,"75":1,"85":1,"95":2,"96":1,"106":1,"113":1,"114":1,"122":1,"126":1,"127":1,"128":1,"134":3,"137":1,"145":1,"152":1,"156":1,"157":1,"158":1,"161":2,"164":1,"169":1,"171":1,"173":1,"174":1,"176":1,"178":1}}],["elements",{"2":{"52":1}}],["else",{"2":{"18":1,"20":1}}],["effort",{"2":{"50":2}}],["errors",{"2":{"55":1,"98":1}}],["error",{"2":{"48":1,"97":1}}],["e",{"2":{"39":3,"44":1,"80":1,"83":1,"84":1,"89":1,"103":2,"104":1,"120":2,"123":3,"128":3,"134":1,"140":2,"153":1,"160":1,"165":1,"166":1}}],["edge",{"2":{"23":1}}],["editor",{"2":{"79":1,"83":1,"148":1}}],["editing",{"0":{"82":1,"149":1},"1":{"83":1,"84":1},"2":{"72":1,"169":1}}],["edit",{"2":{"1":1,"8":1,"22":1,"56":1,"83":1,"112":1,"121":1,"124":2,"141":1,"149":1,"154":1,"156":1,"161":1,"172":1,"174":1}}],["easily",{"2":{"150":1}}],["easy",{"2":{"22":1}}],["each",{"2":{"3":1,"4":1,"5":2,"6":1,"10":1,"22":3,"23":1,"44":1,"63":1,"101":1,"117":1,"135":1,"156":1}}],["even",{"2":{"94":1}}],["event",{"2":{"36":1,"67":1}}],["events",{"0":{"36":1},"2":{"36":1,"104":1}}],["eventually",{"2":{"18":1}}],["everything",{"2":{"21":1,"24":1,"158":1}}],["every",{"2":{"1":1,"17":1,"18":1,"20":1,"22":1,"69":1,"78":1,"97":1,"129":5,"132":1,"133":1}}],["evolves",{"2":{"18":1}}],["economics",{"2":{"18":1}}],["embedded",{"2":{"158":1}}],["embedding",{"2":{"9":1,"50":1,"117":1,"122":2,"123":2,"169":2,"171":2}}],["embed",{"2":{"29":1,"123":1}}],["empty",{"2":{"18":1,"128":1}}],["emails",{"2":{"86":1,"91":2,"92":1,"93":1,"132":1,"133":2}}],["email",{"0":{"86":1,"87":1,"88":1,"90":1},"1":{"87":1,"88":1,"89":2,"90":1,"91":2,"92":1,"93":1},"2":{"1":1,"7":1,"43":2,"87":5,"88":2,"89":3,"90":2,"91":3,"92":5,"93":3}}],["endpoint",{"2":{"104":1}}],["ending",{"2":{"39":1}}],["env",{"2":{"103":1,"161":1}}],["environments",{"2":{"168":1}}],["environment",{"0":{"165":1},"2":{"23":1,"50":1,"52":1,"69":1,"71":1,"74":1,"103":1,"160":1}}],["encountered",{"2":{"97":1}}],["ensure",{"2":{"75":1}}],["ensures",{"2":{"69":1}}],["enabling",{"2":{"61":1,"94":1,"136":1}}],["enables",{"2":{"55":1,"146":1}}],["enabled",{"2":{"50":2,"91":3,"96":1,"128":1,"130":1,"133":1}}],["enable",{"0":{"34":1},"2":{"8":1,"28":1,"30":1,"34":1,"35":1,"40":1,"44":1,"50":1,"66":1,"68":2,"105":1,"123":1}}],["en",{"2":{"55":1}}],["engines",{"0":{"138":1},"2":{"136":1,"138":2}}],["engine",{"2":{"49":1,"50":1,"140":2}}],["engineered",{"2":{"6":1}}],["engineering",{"0":{"6":1},"2":{"22":1}}],["entity",{"2":{"154":1}}],["entities",{"2":{"151":1}}],["entire",{"2":{"47":1,"150":1}}],["entries",{"2":{"98":1,"112":1,"178":1}}],["enterprise",{"2":{"32":1,"43":1}}],["enter",{"2":{"17":1,"33":1,"111":1}}],["enough",{"2":{"18":1}}],["exa",{"2":{"138":1}}],["exact",{"2":{"123":1}}],["examples",{"2":{"129":1}}],["example",{"0":{"146":1},"2":{"113":1}}],["existing",{"2":{"77":1,"112":1,"154":1}}],["exist",{"2":{"72":1}}],["executable",{"2":{"103":1}}],["executing",{"2":{"72":1}}],["executions",{"2":{"128":1}}],["execution",{"0":{"134":1},"2":{"11":1,"21":1,"97":1,"130":1,"135":1,"152":1}}],["executes",{"2":{"103":1,"127":1,"134":1}}],["execute",{"2":{"1":1,"5":1,"8":1,"22":1,"69":1,"70":1,"95":1,"96":1}}],["expression",{"2":{"128":1,"132":1,"135":1}}],["expressions",{"2":{"11":1,"22":1,"126":1}}],["explanation",{"2":{"128":1,"153":1}}],["explicit",{"2":{"21":1,"23":1}}],["exposed",{"2":{"106":1}}],["export",{"2":{"8":1,"58":1,"105":2}}],["expensive",{"2":{"20":1}}],["experienced",{"2":{"23":1}}],["experience",{"2":{"17":1,"79":1}}],["extending",{"0":{"101":1}}],["external",{"2":{"10":1,"44":1,"100":1,"101":1,"126":1,"136":1}}],["extraction",{"2":{"169":2,"171":1,"175":1}}],["extract",{"2":{"111":1,"174":1}}],["extracts",{"2":{"6":1}}],["extra",{"2":{"15":1}}],["older",{"2":{"98":1,"113":1}}],["old",{"2":{"98":1}}],["ok",{"2":{"97":1}}],["okay",{"2":{"18":1}}],["observe",{"2":{"58":1}}],["obtain",{"2":{"44":1}}],["o1",{"2":{"50":1,"123":1}}],["optimize",{"2":{"113":1}}],["optionally",{"2":{"50":1,"113":1,"117":1}}],["optional",{"0":{"41":1},"2":{"55":4,"128":1,"135":1,"171":2}}],["opt",{"2":{"103":1}}],["operates",{"2":{"69":1}}],["operate",{"2":{"24":1,"155":1}}],["operations",{"0":{"68":1,"71":1,"79":1,"105":1,"110":1,"154":1},"1":{"72":1,"80":1,"81":1,"111":1,"112":1},"2":{"8":1,"10":1,"72":1,"85":1,"174":1}}],["openssl",{"2":{"161":1}}],["open",{"2":{"24":1,"29":1,"32":1,"33":1,"39":1,"41":1,"52":1,"57":1,"83":1,"108":1,"148":1,"154":1,"173":1,"177":2}}],["openclaw",{"0":{"23":1},"2":{"23":1}}],["openai",{"2":{"9":2,"50":1,"119":1,"120":2,"123":3}}],["oauth2",{"2":{"29":1}}],["oem",{"2":{"18":1}}],["os",{"2":{"18":1}}],["occasional",{"2":{"18":1}}],["output",{"2":{"103":1}}],["outbox",{"0":{"92":1},"2":{"92":1,"93":1}}],["outbound",{"2":{"7":1}}],["outgoing",{"2":{"91":1,"93":1}}],["outside",{"2":{"43":1}}],["out",{"2":{"18":1}}],["our",{"2":{"17":1,"18":1}}],["override",{"2":{"166":1}}],["overlay",{"2":{"162":1}}],["over",{"2":{"17":1,"104":1,"113":1}}],["overview",{"0":{"17":1,"43":1,"48":1},"1":{"44":1},"2":{"48":1}}],["only",{"2":{"50":1,"58":1,"113":1,"168":1,"171":1,"176":1}}],["online",{"2":{"24":1}}],["once",{"2":{"37":1,"47":1,"52":1,"106":1,"137":1,"174":1}}],["on",{"0":{"16":1},"1":{"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1},"2":{"15":1,"17":2,"18":1,"20":1,"21":1,"24":2,"39":1,"41":1,"44":2,"47":1,"58":1,"61":1,"63":1,"65":1,"81":1,"93":1,"96":1,"103":1,"121":1,"123":1,"128":1,"140":1,"141":1,"151":1,"153":1,"158":1,"161":1,"164":1}}],["one",{"0":{"160":1},"2":{"15":1,"24":1,"38":1,"53":1,"118":2,"175":1,"177":1}}],["often",{"2":{"96":1}}],["official",{"2":{"29":1,"36":1,"39":2,"160":1}}],["off",{"2":{"18":1,"96":1}}],["of",{"2":{"6":1,"8":1,"9":1,"17":2,"18":3,"22":1,"38":1,"48":1,"49":1,"50":1,"58":1,"71":1,"73":1,"74":1,"77":1,"92":2,"97":2,"99":2,"101":1,"103":2,"104":2,"113":1,"115":1,"116":1,"120":2,"128":3,"129":3,"132":1,"144":1,"153":2,"154":1,"166":1,"177":1}}],["other",{"2":{"3":1,"5":1,"12":1,"13":1,"22":1,"69":1,"135":1,"138":1,"140":1}}],["orchestrated",{"2":{"158":1}}],["oriented",{"2":{"135":1}}],["organization",{"2":{"35":1}}],["or",{"2":{"1":1,"3":3,"8":1,"15":1,"22":2,"32":1,"42":1,"44":1,"46":1,"48":1,"53":2,"55":2,"58":2,"66":2,"69":2,"72":1,"73":1,"75":1,"81":2,"85":1,"87":1,"93":1,"95":1,"96":1,"97":2,"98":1,"99":1,"104":1,"105":2,"112":1,"113":1,"119":1,"121":1,"122":1,"123":1,"126":1,"137":1,"149":1,"150":1,"151":1,"152":1,"154":1,"156":1,"158":1,"161":1,"166":1,"172":1,"174":1}}],["ownership",{"2":{"3":1}}],["owner",{"2":{"3":1,"46":1,"117":1}}],["own",{"2":{"1":3,"5":1,"10":1,"13":1,"22":3,"45":1,"50":1,"69":1,"78":1,"85":1,"91":1,"101":1,"138":1,"151":1,"155":1,"156":2}}],["leave",{"2":{"128":1}}],["leaving",{"2":{"82":1}}],["least",{"2":{"118":2}}],["lets",{"2":{"58":1}}],["level",{"2":{"50":1}}],["left",{"2":{"27":1,"33":1}}],["less",{"2":{"24":1}}],["ll",{"2":{"18":1}}],["llms",{"2":{"18":1}}],["llm",{"0":{"9":1,"118":1,"119":1},"1":{"119":1,"120":2,"121":2,"122":1,"123":1,"124":1,"125":1},"2":{"9":1,"23":1,"49":1,"50":1,"96":1,"118":1,"119":1,"169":1}}],["list",{"2":{"65":1,"76":1,"77":1,"80":1,"103":1,"112":1,"121":1,"123":2,"124":1,"130":2,"153":1}}],["limit",{"2":{"50":2,"128":1,"135":1}}],["limits",{"2":{"11":1,"166":2}}],["linux",{"2":{"164":1}}],["link",{"2":{"87":1}}],["linked",{"2":{"41":1}}],["links",{"2":{"29":1,"42":1,"53":1,"157":1}}],["line",{"2":{"7":1,"14":1,"92":1,"103":1,"162":1}}],["lifecycle",{"0":{"72":1},"2":{"47":1,"71":1}}],["life",{"2":{"18":1}}],["live",{"2":{"18":1}}],["lighter",{"2":{"23":1}}],["light",{"2":{"13":1}}],["like",{"2":{"1":1,"18":1,"21":1,"22":1,"24":2,"36":1,"50":1,"53":1,"58":1,"72":1,"87":1,"119":1,"122":1,"137":1,"152":1}}],["lost",{"2":{"51":1}}],["login",{"2":{"163":1}}],["logs",{"0":{"97":1,"98":1},"1":{"98":1},"2":{"98":1,"99":1,"164":2,"167":2}}],["log",{"2":{"33":1,"92":1,"97":1,"98":1}}],["loading",{"2":{"50":1}}],["load",{"2":{"50":1,"98":2}}],["loaded",{"2":{"22":1,"50":1}}],["loads",{"2":{"6":1}}],["localhost",{"2":{"163":4}}],["locale",{"2":{"50":1,"52":1,"55":2}}],["local",{"0":{"103":1},"2":{"19":1,"20":1,"21":1,"23":1,"24":1,"81":2,"103":1}}],["looked",{"2":{"18":1}}],["low",{"2":{"18":1,"50":1}}],["longer",{"2":{"18":1,"56":1,"112":1,"172":1}}],["long",{"2":{"1":1,"17":1,"20":1,"24":1,"59":1,"97":1,"107":1,"117":1,"156":1,"175":1}}],["launch",{"2":{"72":1}}],["later",{"2":{"74":1}}],["latest",{"2":{"25":1,"80":1,"98":1,"160":1,"164":1,"165":1}}],["late",{"2":{"18":1}}],["latency",{"2":{"17":1}}],["languages",{"2":{"83":1}}],["language",{"2":{"6":1,"50":2,"128":1,"132":1,"135":1}}],["last",{"2":{"6":1,"22":1}}],["layer",{"2":{"6":1,"18":1,"19":1}}],["lark",{"0":{"32":1},"1":{"33":1,"34":1,"35":1,"36":1,"37":1},"2":{"1":1,"4":1,"7":1,"22":1,"32":1,"43":1,"63":1,"156":1}}],["two",{"2":{"87":1,"131":1}}],["typical",{"2":{"53":1}}],["type",{"2":{"41":1,"46":1,"89":1,"103":1,"104":1,"105":1,"123":2,"170":1,"171":1,"176":1}}],["types",{"0":{"102":1},"1":{"103":1,"104":1},"2":{"9":1,"176":1,"177":1}}],["tune",{"2":{"116":1}}],["tutorial",{"2":{"39":1}}],["turning",{"2":{"18":1}}],["turn",{"2":{"6":1,"17":1,"22":1}}],["timing",{"2":{"135":1}}],["timezone",{"2":{"52":1,"55":2}}],["timestamp",{"2":{"92":1}}],["timestamps",{"2":{"77":1}}],["times",{"2":{"11":1,"22":1,"128":1}}],["time",{"0":{"18":1,"137":1},"2":{"8":1,"13":1,"18":3,"50":2,"73":1,"97":1,"113":2,"136":1,"143":1}}],["tiny",{"2":{"18":1}}],["t",{"2":{"18":6,"20":2,"72":1,"94":1}}],["trusted",{"2":{"168":1}}],["true",{"2":{"133":1,"165":1}}],["triggering",{"2":{"126":1}}],["triggered",{"2":{"97":1,"127":1}}],["trigger",{"2":{"93":1,"95":1,"96":1,"135":1}}],["triggers",{"2":{"11":1,"128":1,"134":1}}],["tree",{"2":{"79":1}}],["treat",{"2":{"23":1}}],["troubleshooting",{"0":{"167":1},"2":{"93":1}}],["troubleshoot",{"2":{"48":1}}],["traits",{"2":{"145":1}}],["trash",{"2":{"124":1,"149":1}}],["translate",{"2":{"132":1}}],["transport",{"2":{"104":1}}],["transfer",{"2":{"3":1,"81":1}}],["tracked",{"2":{"93":1}}],["traditional",{"2":{"89":1}}],["trade",{"2":{"18":1}}],["trapped",{"2":{"20":1}}],["travels",{"2":{"18":1}}],["than",{"2":{"23":1,"113":1}}],["that",{"2":{"8":1,"17":1,"18":8,"19":1,"24":4,"41":1,"43":1,"45":1,"50":1,"57":1,"61":1,"85":1,"95":1,"97":1,"99":1,"112":1,"117":1,"122":1,"125":1,"128":1,"132":1,"137":1,"173":1,"175":1,"177":1}}],["through",{"2":{"22":2,"38":1,"43":1,"47":1,"52":1,"109":1}}],["threshold",{"2":{"116":1}}],["threads",{"2":{"18":1}}],["three",{"2":{"17":1}}],["thing",{"2":{"18":1,"24":1}}],["thinking",{"2":{"50":1,"135":1}}],["thinks",{"2":{"42":1}}],["think",{"2":{"18":1,"95":1}}],["this",{"2":{"18":2,"25":1,"27":1,"32":1,"36":1,"38":1,"39":1,"50":1,"51":2,"54":1,"58":1,"67":2,"69":1,"72":1,"74":1,"76":1,"78":1,"95":1,"96":1,"103":1,"104":1,"120":1,"126":1,"128":1,"130":1,"132":1,"153":1,"155":1,"161":1,"162":1,"163":1,"170":1,"171":1}}],["those",{"2":{"17":1}}],["these",{"2":{"49":2,"85":1,"106":1,"145":1}}],["they",{"2":{"20":2,"144":1,"151":1}}],["then",{"2":{"18":1,"33":1,"127":1,"161":1}}],["there",{"2":{"18":1}}],["their",{"2":{"5":1,"20":1,"22":2,"77":1,"130":1,"151":1,"155":1}}],["the",{"0":{"16":1,"29":1,"49":1,"70":1,"132":1,"133":1},"1":{"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1},"2":{"1":1,"4":1,"6":1,"8":1,"12":2,"14":1,"15":1,"17":4,"18":12,"20":1,"21":2,"22":3,"23":3,"24":2,"25":1,"27":2,"28":2,"29":3,"30":1,"32":1,"33":2,"34":1,"35":1,"36":3,"37":3,"38":1,"39":3,"40":3,"41":3,"42":4,"43":4,"44":5,"46":6,"48":3,"49":11,"50":13,"51":5,"52":3,"53":1,"54":4,"55":3,"57":5,"58":4,"62":2,"65":5,"66":2,"68":3,"69":2,"70":3,"71":3,"72":8,"73":6,"74":3,"75":2,"76":4,"77":1,"78":2,"79":1,"80":4,"81":3,"82":3,"83":4,"84":1,"85":3,"88":2,"89":4,"90":2,"91":7,"92":7,"93":3,"94":1,"95":2,"96":9,"97":6,"98":2,"99":4,"100":1,"102":2,"103":3,"104":3,"105":3,"106":6,"108":5,"109":3,"110":2,"111":2,"112":1,"113":3,"114":2,"115":2,"116":2,"117":7,"119":1,"120":9,"121":5,"123":9,"124":3,"127":2,"128":10,"129":1,"130":4,"132":4,"133":2,"134":9,"136":1,"138":2,"140":5,"141":5,"142":4,"143":3,"144":2,"145":1,"146":2,"147":2,"148":2,"149":3,"150":5,"151":1,"152":1,"153":7,"154":2,"155":3,"156":1,"158":3,"160":6,"161":1,"162":3,"164":1,"165":1,"168":1,"169":4,"170":4,"171":4,"173":5,"174":3,"175":1,"176":4,"177":5,"178":2}}],["theme",{"2":{"13":1}}],["them",{"2":{"1":1,"6":1,"49":1,"81":1,"105":1,"109":1,"156":1}}],["tag",{"2":{"160":1,"165":1}}],["task",{"0":{"152":1},"2":{"86":1,"96":1,"97":1,"126":1,"128":3,"135":1}}],["tasks",{"0":{"11":1,"126":1},"1":{"127":1,"128":1,"129":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1},"2":{"3":1,"8":1,"11":1,"22":2,"45":1,"73":2,"94":1,"99":1,"106":1,"126":1,"135":1,"151":1}}],["target",{"2":{"44":1}}],["tabs",{"2":{"47":1}}],["tab",{"0":{"48":1,"50":1},"2":{"30":1,"36":1,"40":1,"48":1,"49":1,"50":1,"51":1,"57":1,"58":1,"62":1,"71":1,"73":1,"78":1,"85":1,"90":1,"92":1,"96":1,"97":1,"102":1,"108":2,"110":1,"114":1,"130":1,"142":1,"147":1,"153":1,"173":1,"174":1,"175":1,"177":2}}],["takes",{"2":{"47":1}}],["take",{"2":{"18":1,"163":1}}],["talks",{"2":{"49":1}}],["talk",{"2":{"18":1}}],["tailwind",{"2":{"13":1}}],["tavily",{"2":{"8":1,"138":1}}],["template",{"2":{"148":1,"160":1}}],["temporary",{"2":{"72":1}}],["tech",{"2":{"128":1}}],["testing",{"2":{"74":1}}],["term",{"2":{"59":1,"107":1,"117":1,"175":1}}],["terminal",{"2":{"14":1}}],["teammate",{"2":{"152":1}}],["team",{"2":{"23":1}}],["teams",{"2":{"3":1}}],["textarea",{"2":{"111":1}}],["text",{"0":{"83":1},"2":{"18":1,"31":1,"83":1,"112":1,"122":1,"123":1}}],["tension",{"2":{"17":1}}],["telegram",{"0":{"38":1,"39":1},"1":{"39":1,"40":1,"41":1,"42":1},"2":{"1":1,"4":1,"7":1,"22":1,"38":2,"39":3,"40":1,"41":3,"43":1,"44":1,"61":1,"63":1,"128":1,"133":1,"156":1,"157":1}}],["total",{"2":{"128":1}}],["today",{"2":{"128":1}}],["top",{"0":{"115":1},"2":{"128":1}}],["toml",{"2":{"83":1,"157":1,"160":1,"161":4,"162":2,"163":1,"165":2,"166":1}}],["toggle",{"2":{"68":1,"96":1,"105":1}}],["tokens",{"2":{"44":1,"50":1,"66":1}}],["token",{"2":{"27":3,"30":1,"39":3,"40":1,"50":1,"120":1,"153":1}}],["took",{"2":{"97":1}}],["too",{"2":{"18":3}}],["toolbar",{"2":{"79":1}}],["tool",{"0":{"14":1},"2":{"10":1,"13":1,"14":1,"21":1,"100":1,"132":1,"137":1,"146":1,"155":1}}],["tools",{"2":{"8":2,"10":1,"18":1,"23":1,"45":1,"52":1,"57":1,"58":1,"72":1,"85":1,"95":1,"99":1,"101":1,"106":2,"114":1,"127":1,"134":1,"144":1,"145":1,"146":1,"150":1}}],["to",{"0":{"16":1,"23":1,"29":1,"57":1,"142":1,"173":1},"1":{"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1},"2":{"1":1,"3":1,"4":1,"7":1,"8":1,"10":1,"11":1,"13":1,"15":1,"17":1,"18":2,"20":2,"22":3,"23":1,"24":1,"26":2,"27":3,"28":2,"29":3,"30":1,"31":1,"32":1,"33":2,"34":1,"35":1,"36":2,"37":2,"38":1,"39":2,"40":1,"41":4,"42":1,"43":1,"44":3,"46":3,"47":1,"48":1,"49":2,"50":2,"51":3,"52":3,"54":1,"55":1,"57":2,"59":1,"60":2,"61":1,"63":1,"67":2,"69":1,"72":2,"74":1,"76":1,"77":2,"80":1,"81":3,"82":1,"83":3,"84":1,"85":2,"86":1,"87":3,"89":1,"91":1,"92":1,"93":3,"94":2,"95":1,"96":1,"97":1,"98":1,"100":2,"101":1,"103":1,"104":1,"105":2,"106":1,"107":1,"111":1,"113":2,"114":1,"117":1,"118":2,"119":1,"120":1,"121":1,"122":1,"123":1,"124":3,"125":1,"126":1,"127":3,"128":2,"130":2,"132":2,"133":1,"134":1,"136":3,"137":1,"138":1,"140":2,"142":2,"143":2,"146":1,"149":3,"150":1,"151":1,"152":1,"153":1,"154":1,"155":1,"156":1,"157":1,"158":2,"160":1,"161":1,"164":1,"165":4,"166":1,"169":1,"170":1,"173":2,"174":2,"175":1,"178":2}}],["wrote",{"2":{"18":1}}],["write",{"2":{"5":1,"8":1,"85":1,"91":1,"146":1}}],["ways",{"2":{"131":1}}],["way",{"2":{"93":1,"101":1,"158":1}}],["warnings",{"0":{"168":1}}],["warning",{"2":{"48":1,"51":1}}],["walks",{"2":{"38":1}}],["want",{"2":{"20":2,"24":1,"29":1}}],["wanted",{"2":{"18":2}}],["wasn",{"2":{"18":1}}],["was",{"2":{"18":1,"92":1,"97":1}}],["wait",{"2":{"18":1}}],["works",{"2":{"169":1}}],["workspace",{"0":{"70":1},"2":{"85":1,"155":1,"160":2}}],["working",{"2":{"103":1}}],["workflows",{"2":{"17":1,"43":1,"169":1}}],["worse",{"2":{"18":1}}],["world",{"2":{"17":1,"43":1}}],["well",{"2":{"169":1}}],["week",{"2":{"129":1}}],["were",{"2":{"18":1}}],["weight",{"2":{"18":1}}],["we",{"2":{"17":2,"18":2,"21":1,"23":2,"24":2}}],["webp",{"2":{"84":1}}],["websites",{"2":{"53":1,"58":1}}],["webhook",{"0":{"36":1,"67":1},"2":{"7":1,"36":2,"67":2}}],["web",{"2":{"1":1,"4":1,"7":2,"8":1,"10":1,"13":1,"15":1,"30":1,"40":1,"41":1,"43":1,"49":1,"50":2,"82":1,"134":1,"136":1,"138":1,"156":1,"158":1,"163":1,"176":1}}],["which",{"2":{"127":1}}],["while",{"2":{"18":1,"152":1,"163":1}}],["whether",{"2":{"73":1,"92":1,"97":1,"128":1}}],["when",{"2":{"18":2,"21":1,"57":1,"58":1,"94":1,"97":1,"109":1,"127":1,"128":2,"134":1,"143":1,"160":1,"162":1}}],["where",{"2":{"17":1,"18":1,"23":2,"47":1}}],["why",{"0":{"20":1},"2":{"18":1}}],["who",{"2":{"14":1,"162":1}}],["what",{"0":{"1":1,"19":1},"2":{"17":2,"18":1,"128":1,"144":1,"157":1}}],["window",{"2":{"113":1}}],["width",{"2":{"55":2}}],["wide",{"2":{"9":1}}],["will",{"2":{"24":1,"36":1,"39":1,"46":1,"51":1,"67":1,"72":1,"76":1,"106":1,"108":1,"132":1,"143":2,"148":1,"160":1,"161":1,"173":1}}],["without",{"2":{"5":1,"18":2,"66":1,"69":1,"82":1,"105":1,"108":1,"126":1,"150":1,"161":1}}],["within",{"2":{"1":1,"5":1,"22":1,"69":1,"70":1,"80":1,"145":1,"155":1}}],["with",{"0":{"85":1},"2":{"1":1,"3":3,"5":2,"7":2,"8":2,"13":1,"15":1,"17":2,"18":1,"19":1,"21":1,"22":3,"24":1,"26":1,"31":1,"32":2,"39":1,"41":2,"43":2,"45":1,"49":1,"50":1,"55":1,"58":1,"59":1,"60":1,"77":1,"79":1,"81":1,"82":1,"91":1,"94":1,"109":1,"129":1,"134":1,"145":1,"148":1,"151":1,"152":1,"155":2,"156":2,"158":1,"160":1,"161":1,"164":1,"166":1,"168":1,"169":2,"174":1,"176":1,"178":1}}],["cpu",{"2":{"166":1}}],["cp",{"2":{"161":1}}],["cd",{"2":{"161":1}}],["cdf",{"0":{"116":1}}],["cwd",{"2":{"103":1}}],["certs",{"2":{"166":1}}],["certain",{"2":{"113":1}}],["certificates",{"2":{"55":1}}],["ceiling",{"2":{"20":1}}],["cn",{"2":{"55":1,"160":2,"162":3,"165":1}}],["cumulative",{"0":{"116":1}}],["curl",{"2":{"160":3}}],["curve",{"0":{"116":1}}],["current",{"2":{"58":1,"74":1,"80":1,"128":1,"134":1}}],["currently",{"2":{"43":1,"73":1,"128":1,"171":1,"176":1,"178":1}}],["custom",{"2":{"33":1,"36":1,"55":1,"104":1,"135":1}}],["clear",{"2":{"98":1}}],["clean",{"2":{"98":1,"146":1}}],["cleaning",{"2":{"95":1}}],["cleaner",{"2":{"18":1}}],["clone",{"2":{"160":1,"161":1}}],["cloud",{"2":{"19":1,"20":1,"21":1,"23":1,"24":1}}],["closed",{"2":{"18":1}}],["class",{"2":{"18":1}}],["clash",{"2":{"18":1}}],["clicks",{"2":{"18":1}}],["click",{"0":{"160":1},"2":{"15":1,"27":2,"30":2,"33":2,"34":1,"35":1,"36":1,"37":1,"40":2,"41":1,"46":2,"49":1,"51":1,"52":1,"54":2,"57":1,"58":1,"65":1,"75":1,"76":1,"81":1,"83":2,"84":1,"89":2,"91":2,"105":1,"108":1,"120":2,"123":2,"124":2,"130":1,"140":1,"142":1,"148":2,"149":2,"170":2,"173":1}}],["clicking",{"2":{"8":1,"47":1,"53":1}}],["client",{"2":{"9":1,"123":1}}],["cli",{"0":{"14":1},"2":{"1":1,"7":1,"14":1,"156":1}}],["china",{"0":{"162":1},"2":{"160":1,"162":2,"165":1}}],["checklist",{"0":{"166":1}}],["checking",{"2":{"126":1}}],["checks",{"2":{"95":1}}],["check",{"2":{"48":2,"91":1,"135":1,"160":1}}],["cheap",{"2":{"20":1}}],["choose",{"2":{"36":1,"39":2,"44":1,"46":1,"89":1,"104":1,"105":1}}],["choices",{"2":{"18":1}}],["chart",{"0":{"115":1}}],["change",{"2":{"65":1,"161":1,"163":1,"166":1,"168":1}}],["changes",{"2":{"28":1,"74":1,"80":1,"83":1}}],["channels",{"0":{"43":1,"60":1,"62":1},"1":{"44":1,"61":1,"62":1,"63":2,"64":1,"65":1,"66":1,"67":1,"68":1},"2":{"8":1,"12":1,"13":1,"30":1,"36":1,"40":1,"43":3,"45":1,"60":1,"61":1,"62":1,"157":2}}],["channel",{"0":{"26":1,"32":1,"38":1,"65":1,"87":1},"1":{"27":1,"28":1,"29":1,"30":1,"31":1,"33":1,"34":1,"35":1,"36":1,"37":1,"39":1,"40":1,"41":1,"42":1},"2":{"7":1,"12":1,"14":1,"22":1,"30":1,"36":1,"40":1,"44":3,"48":1,"65":2,"66":1,"68":3,"86":1,"127":1,"128":1,"134":1}}],["chatting",{"2":{"94":1}}],["chatbox",{"2":{"23":1}}],["chats",{"2":{"4":1,"32":1,"46":1}}],["chat",{"2":{"1":1,"3":1,"7":2,"9":2,"13":1,"14":1,"22":2,"31":1,"35":2,"41":2,"43":1,"45":1,"49":1,"50":2,"60":1,"61":1,"93":1,"96":1,"117":1,"122":1,"123":3,"156":1,"169":1,"171":1}}],["circling",{"2":{"17":1}}],["css",{"2":{"13":1}}],["cache",{"2":{"167":1}}],["categorize",{"2":{"150":1}}],["category",{"2":{"18":1}}],["capturing",{"2":{"53":1}}],["captured",{"2":{"76":1}}],["capture",{"2":{"52":1,"74":1}}],["capability",{"0":{"34":1},"2":{"17":1,"19":1,"21":1,"138":1}}],["capabilities",{"0":{"8":1,"101":1},"2":{"6":1,"34":1,"35":1,"50":2,"90":1,"123":1,"144":1,"146":1,"150":1}}],["card",{"2":{"47":1,"149":1}}],["carry",{"2":{"18":1}}],["caught",{"2":{"18":1}}],["cases",{"2":{"53":1}}],["case",{"0":{"16":1,"67":1},"1":{"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1},"2":{"135":1}}],["called",{"2":{"132":1}}],["callback",{"2":{"36":1,"67":1}}],["calls",{"2":{"21":1,"128":2,"133":1,"134":2,"135":1}}],["call",{"2":{"13":1,"143":1}}],["cannot",{"2":{"162":1}}],["can",{"2":{"1":1,"3":1,"4":1,"5":1,"8":1,"10":1,"17":1,"18":5,"22":3,"23":2,"42":1,"43":1,"45":1,"47":1,"50":2,"52":2,"57":1,"58":1,"61":1,"70":1,"78":1,"85":1,"91":6,"93":1,"96":1,"99":1,"101":1,"113":1,"117":1,"125":1,"127":1,"132":1,"133":1,"134":1,"137":1,"143":1,"144":1,"146":1,"152":1,"160":1,"174":1,"175":1}}],["creation",{"2":{"77":1,"169":1}}],["creating",{"0":{"46":1,"54":1,"75":1,"89":1,"111":1,"120":1,"131":1,"170":1},"1":{"132":1,"133":1},"2":{"49":1,"55":1,"73":1,"171":1}}],["created",{"2":{"47":1,"49":1,"57":1,"80":1,"91":1,"131":1,"142":1,"173":1}}],["create",{"0":{"27":1,"33":1,"39":1},"2":{"1":1,"3":1,"8":1,"22":1,"33":2,"37":1,"39":1,"44":1,"46":2,"54":1,"63":1,"72":1,"75":1,"80":1,"89":1,"91":1,"108":1,"120":1,"123":1,"125":1,"132":2,"133":1,"154":1,"155":1,"156":1,"161":1,"170":1,"174":1,"177":1}}],["credentials",{"2":{"33":1,"40":1,"44":2,"65":1,"66":1,"119":1,"140":1,"160":1}}],["cron",{"0":{"127":1,"129":1},"2":{"11":1,"22":1,"126":1,"127":1,"128":1,"129":1,"130":1,"132":1,"134":1,"135":1}}],["cross",{"2":{"4":1,"12":1}}],["collection",{"2":{"95":1}}],["collaborate",{"2":{"3":1,"22":1}}],["copy",{"2":{"27":1,"29":1,"33":1,"36":1,"41":1,"67":1}}],["core",{"0":{"49":1},"2":{"23":1,"49":1,"50":1}}],["cost",{"2":{"18":1}}],["could",{"2":{"18":1}}],["counter",{"2":{"134":1}}],["counts",{"2":{"130":1}}],["count",{"2":{"11":1}}],["coding",{"2":{"13":1,"22":1,"146":1}}],["coder",{"2":{"146":3}}],["code",{"2":{"8":1,"41":3,"42":1,"69":1,"146":1}}],["conf",{"2":{"161":1}}],["config",{"2":{"105":1,"157":1,"160":1,"161":3,"162":1,"163":1,"165":3,"166":1,"167":1}}],["configuring",{"0":{"49":1,"55":1,"171":1},"1":{"56":1,"172":1},"2":{"43":1,"49":1}}],["configurations",{"2":{"48":1}}],["configuration",{"0":{"13":1,"26":1,"32":1,"38":1,"64":1,"96":1,"139":1},"1":{"27":1,"28":1,"29":1,"30":1,"31":1,"33":1,"34":1,"35":1,"36":1,"37":1,"39":1,"40":1,"41":1,"42":1,"65":1,"66":1,"67":1,"140":1,"141":1},"2":{"13":1,"14":1,"44":1,"50":1,"53":1,"56":1,"63":3,"65":1,"66":1,"67":1,"68":2,"74":1,"83":1,"105":2,"108":1,"141":1,"160":1,"165":1,"167":1,"173":1}}],["configurable",{"2":{"8":1,"45":1}}],["configured",{"2":{"31":1,"43":1,"58":1,"59":1,"72":1,"108":1,"125":1,"137":1}}],["configure",{"0":{"28":1,"30":1,"35":1,"36":1,"40":1},"2":{"11":1,"22":1,"44":1,"49":1,"61":1,"62":1,"63":1,"66":1,"87":1,"90":1,"96":1,"102":1,"117":1,"118":1,"123":1,"125":1,"138":1,"153":1,"157":1,"166":1,"169":1,"171":1,"177":1,"178":1}}],["confirm",{"2":{"51":1}}],["confidence",{"2":{"23":1}}],["converse",{"2":{"93":1}}],["conversational",{"0":{"132":1}}],["conversations",{"2":{"49":1,"107":1,"169":1,"174":1}}],["conversation",{"2":{"6":2,"19":1,"22":1,"50":1,"111":2,"122":1,"123":1,"137":1,"150":1,"151":1,"152":1,"153":1,"154":1}}],["consumption",{"2":{"153":1}}],["consider",{"2":{"116":1}}],["console",{"2":{"34":1,"36":1,"37":1}}],["constraint",{"2":{"18":1}}],["concept",{"0":{"53":1,"61":1,"70":1,"87":1,"95":1,"101":1,"109":1,"127":1,"137":1,"145":1,"152":1},"1":{"146":1}}],["conceptually",{"2":{"18":1}}],["conclusion",{"0":{"24":1}}],["connected",{"2":{"127":1,"134":1}}],["connects",{"2":{"104":1}}],["connection",{"0":{"102":1},"1":{"103":1,"104":1},"2":{"87":1,"103":1,"104":1,"105":3,"106":1,"119":1,"137":1}}],["connections",{"0":{"100":1},"1":{"101":1,"102":1,"103":1,"104":1,"105":1,"106":1},"2":{"10":1,"62":1,"88":1,"101":1,"102":1,"105":2}}],["connectivity",{"2":{"48":1}}],["connecting",{"2":{"7":1,"26":1,"38":1,"87":1}}],["connect",{"2":{"10":1,"43":2,"60":1,"100":1,"136":1,"138":1}}],["continue",{"2":{"24":1,"59":1,"174":1,"178":1}}],["continuity",{"2":{"20":1,"24":1}}],["continuously",{"2":{"18":1}}],["content",{"2":{"18":1,"28":1,"31":1,"52":1,"53":1,"83":1,"111":1,"112":1,"148":1,"149":1}}],["contextually",{"2":{"107":1}}],["contexts",{"0":{"52":1,"56":1},"1":{"53":1,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1},"2":{"49":1,"54":3}}],["context",{"0":{"54":1,"55":1,"57":1},"1":{"56":1},"2":{"4":1,"6":1,"8":1,"10":1,"12":1,"17":2,"18":1,"20":2,"21":1,"22":1,"24":1,"42":1,"49":1,"50":4,"52":2,"53":1,"54":2,"55":1,"56":2,"57":3,"58":1,"100":2,"106":1,"109":1,"127":1,"134":1,"151":1,"153":1,"154":2}}],["contains",{"2":{"25":1,"50":1}}],["containerization",{"2":{"20":1}}],["containerized",{"0":{"5":1,"16":1},"1":{"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1},"2":{"1":1,"19":1,"21":1,"22":1,"23":1,"24":1,"156":1}}],["containers",{"2":{"5":1,"21":1,"22":1,"158":1,"166":1}}],["containerd",{"2":{"5":1,"15":1,"73":1,"158":2}}],["container",{"0":{"69":1,"73":1},"1":{"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1},"2":{"1":2,"5":2,"8":2,"10":1,"13":1,"22":1,"23":1,"45":1,"48":1,"51":1,"69":1,"70":1,"71":1,"72":5,"73":4,"74":1,"75":1,"76":1,"78":1,"81":2,"145":1,"149":1,"153":1,"155":1,"156":1,"168":1}}],["contact",{"2":{"17":1}}],["controls",{"2":{"117":1}}],["control",{"2":{"3":1,"19":1,"21":1}}],["combined",{"2":{"160":1}}],["com",{"2":{"120":1,"161":1}}],["common",{"0":{"66":1,"164":1},"2":{"83":1,"129":1}}],["communicate",{"2":{"152":1,"155":1}}],["communicates",{"2":{"103":1}}],["communication",{"0":{"61":1},"2":{"50":1,"86":1}}],["community",{"2":{"26":1,"43":1}}],["command`",{"2":{"146":1}}],["command",{"2":{"7":1,"14":1,"39":1,"103":3,"127":1,"128":1,"133":1,"134":2,"135":1}}],["commands",{"0":{"164":1},"2":{"1":1,"5":1,"8":1,"11":1,"22":2,"23":1,"29":1,"31":2,"69":1,"156":1}}],["comes",{"2":{"45":1}}],["come",{"2":{"8":1}}],["comprehensive",{"2":{"138":1,"143":1}}],["compression",{"0":{"113":1},"2":{"113":1}}],["component",{"2":{"79":1}}],["compose",{"2":{"15":1,"91":1,"158":1,"159":1,"160":2,"161":2,"162":4,"164":6,"166":1,"167":4}}],["compact",{"0":{"113":1},"2":{"113":2,"174":1}}],["compaction",{"2":{"6":1,"169":1}}],["compare",{"0":{"23":1}}],["compatible",{"2":{"9":1,"119":1}}],["complement",{"2":{"135":1}}],["completed",{"2":{"97":1}}],["completions",{"2":{"9":1,"123":1}}],["complex",{"2":{"8":1,"45":1,"74":1,"151":1}}],["computer",{"2":{"1":1,"22":1,"70":1,"81":1}}],["ssl",{"2":{"166":1}}],["sse",{"0":{"104":1},"2":{"10":1,"104":1}}],["swap",{"2":{"150":1}}],["switch",{"2":{"9":1,"68":1}}],["synthesized",{"2":{"143":1}}],["syntax",{"2":{"83":1,"129":1}}],["systems",{"2":{"155":1}}],["system",{"2":{"1":2,"12":1,"17":1,"48":1,"69":1,"99":1,"107":1,"109":1,"114":1,"150":2,"156":2,"176":1}}],["snapshot",{"0":{"75":1,"76":1},"2":{"75":2,"76":1,"77":1}}],["snapshots",{"0":{"74":1,"77":1},"1":{"75":1,"76":1,"77":1},"2":{"5":1,"74":1,"77":1}}],["shipped",{"2":{"169":1}}],["sh",{"2":{"160":10}}],["shut",{"2":{"72":1}}],["shanghai",{"2":{"55":1}}],["share",{"2":{"23":1}}],["sharing",{"2":{"21":1,"23":1}}],["showing",{"2":{"92":1}}],["shown",{"2":{"55":1,"171":1}}],["shows",{"2":{"48":1,"115":1,"130":1}}],["should",{"2":{"41":1,"49":2,"52":1,"96":1,"99":1,"116":1,"144":1}}],["slow",{"2":{"160":1}}],["slash",{"2":{"31":1}}],["sludge",{"2":{"18":1}}],["spin",{"2":{"152":1}}],["split",{"2":{"23":1}}],["speaker",{"2":{"18":1}}],["specify",{"2":{"113":1,"140":1}}],["specified",{"2":{"11":1,"22":1}}],["specifically",{"2":{"138":1}}],["specific",{"2":{"4":1,"8":1,"87":1,"105":1,"111":1,"122":1,"127":1,"135":1,"137":1,"140":1,"151":1,"153":2,"160":1}}],["specialization",{"0":{"152":1}}],["specialized",{"2":{"8":1,"45":1,"47":1,"151":1,"152":1}}],["special",{"0":{"67":1},"2":{"99":1}}],["silently",{"2":{"160":1}}],["silent",{"2":{"160":1}}],["simultaneously",{"2":{"61":1}}],["simple",{"2":{"22":1}}],["single",{"2":{"61":1,"155":1}}],["size",{"2":{"52":1,"123":1}}],["sidebar",{"2":{"27":1,"33":1,"44":1,"46":1,"54":1,"55":1,"88":1,"89":1,"120":2,"138":1,"140":1,"141":1,"170":1,"171":1,"177":1}}],["sites",{"2":{"55":1}}],["sit",{"2":{"17":1,"18":1}}],["smell",{"2":{"18":1}}],["smoother",{"2":{"18":1}}],["small",{"2":{"18":1,"122":1}}],["smarter",{"2":{"17":1}}],["smtp",{"2":{"7":1,"43":1,"87":1,"89":1}}],["sogou",{"2":{"138":1}}],["software",{"2":{"70":1}}],["sources",{"2":{"101":1}}],["source",{"2":{"24":1}}],["soul",{"2":{"8":1}}],["someone",{"2":{"20":1}}],["somewhere",{"2":{"18":2}}],["something",{"2":{"17":1,"18":3}}],["so",{"2":{"12":1,"18":2,"20":1}}],["scope",{"2":{"155":1}}],["scopes",{"2":{"29":1}}],["scoring",{"2":{"116":1}}],["scale",{"2":{"55":1}}],["script",{"2":{"160":2,"162":1}}],["scripts",{"2":{"70":1}}],["scroll",{"2":{"28":1,"51":1,"58":1}}],["screenshot",{"2":{"58":1}}],["screenshots",{"2":{"8":1,"52":1,"53":1}}],["screen",{"2":{"18":1}}],["schedules",{"0":{"130":1,"131":1},"1":{"132":1,"133":1},"2":{"130":1,"131":1,"133":1}}],["schedule",{"0":{"128":1,"135":1},"2":{"22":1,"94":1,"127":2,"128":3,"130":1,"132":4,"133":1,"134":4,"135":2}}],["scheduled",{"0":{"11":1,"95":1,"126":1},"1":{"127":1,"128":1,"129":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1},"2":{"11":1,"22":1,"95":1,"126":1}}],["scheduling",{"2":{"10":1}}],["skill",{"0":{"146":1,"148":1},"2":{"8":1,"145":1,"146":2,"147":1,"148":1,"149":2}}],["skills",{"0":{"144":1,"145":1,"147":1,"150":1},"1":{"145":1,"146":2,"147":1,"148":2,"149":2,"150":1},"2":{"8":2,"13":1,"22":1,"85":1,"95":1,"99":1,"127":1,"144":1,"147":1,"150":3,"153":2}}],["sudo",{"2":{"160":5,"161":1,"164":1}}],["sun=0",{"2":{"129":1}}],["summarize",{"2":{"128":1,"133":2}}],["summary",{"2":{"97":1,"128":1,"132":1}}],["such",{"2":{"50":1,"52":1,"55":2,"58":1}}],["successfully",{"2":{"41":1,"92":1,"97":1}}],["subagent",{"2":{"152":2,"153":3,"154":4,"155":1}}],["subagents",{"0":{"151":1},"1":{"152":1,"153":1,"154":1,"155":1},"2":{"8":2,"151":1,"153":2,"155":2}}],["subject",{"2":{"92":2}}],["submitting",{"2":{"53":1}}],["submit",{"2":{"37":1}}],["subscriptions",{"2":{"36":1}}],["sustainable",{"2":{"23":1}}],["sure",{"2":{"108":1}}],["survive",{"2":{"17":1}}],["surfaced",{"2":{"12":1}}],["supported",{"0":{"31":1,"42":1,"62":1,"138":1},"1":{"63":1},"2":{"38":1,"123":1,"138":1,"176":1,"177":1,"178":1}}],["support",{"0":{"7":1,"9":1,"10":1},"2":{"7":3,"10":1,"23":1,"31":1,"38":1,"42":1,"43":1,"81":1}}],["supports",{"2":{"3":1,"5":1,"11":1,"22":1,"32":1,"43":1,"50":1,"83":1,"100":1,"123":2,"169":1}}],["steps",{"0":{"59":1,"125":1,"178":1},"2":{"87":1,"123":1}}],["step",{"0":{"27":1,"28":1,"29":1,"30":1,"33":1,"34":1,"35":1,"36":1,"37":1,"39":1,"40":1,"41":1},"2":{"49":1,"63":2,"157":2}}],["studio",{"2":{"19":1,"23":1}}],["stop",{"2":{"72":1,"164":1}}],["stopped",{"2":{"48":1,"73":1,"75":1}}],["stops",{"2":{"18":1}}],["stood",{"2":{"18":1}}],["store",{"2":{"27":1,"70":1,"174":1}}],["stored",{"2":{"22":2,"109":1,"145":1}}],["stores",{"2":{"6":1,"52":1,"119":1,"175":1}}],["storage",{"2":{"18":1,"21":1}}],["story",{"0":{"18":1}}],["style",{"2":{"18":1,"55":1}}],["stable",{"2":{"75":1}}],["statistics",{"2":{"153":1}}],["static",{"2":{"58":1}}],["state",{"2":{"70":1,"72":1,"74":1,"75":1,"76":1}}],["status",{"2":{"48":1,"68":1,"73":1,"92":1,"95":1,"97":1,"98":1,"130":1,"164":1}}],["startup",{"2":{"163":2}}],["starting",{"2":{"161":1}}],["start",{"2":{"44":1,"72":1,"160":1,"161":1,"164":1}}],["started",{"2":{"18":2,"157":1}}],["standardized",{"2":{"101":1}}],["standard",{"2":{"43":1,"49":1,"103":1,"105":1,"129":1,"169":1}}],["stay",{"2":{"21":1}}],["stays",{"2":{"19":1,"24":2}}],["stack",{"2":{"21":1,"24":1,"158":1}}],["stakes",{"2":{"18":1}}],["still",{"2":{"17":1}}],["stdio",{"0":{"103":1},"2":{"10":1}}],["structure",{"0":{"146":1}}],["structured",{"2":{"1":1,"6":1,"93":1,"107":1,"156":1}}],["string",{"2":{"55":1}}],["strict",{"2":{"21":1}}],["stream",{"2":{"18":1}}],["streaming",{"2":{"7":2,"13":1,"14":1,"38":1,"42":1,"43":1}}],["saving",{"2":{"57":1,"74":1}}],["save",{"2":{"5":1,"28":1,"30":1,"36":2,"40":1,"49":1,"57":1,"68":2,"72":1,"83":2,"108":1,"142":1,"148":1,"173":1}}],["safely",{"2":{"74":1}}],["safe",{"2":{"20":1}}],["say",{"2":{"18":1}}],["same",{"2":{"4":1,"18":1}}],["serper",{"2":{"138":1}}],["service",{"2":{"87":1,"88":1,"119":1,"120":1,"134":1,"163":1,"167":1,"168":1}}],["services",{"2":{"9":1,"10":1,"15":1,"21":1,"48":1,"61":1,"100":1,"160":1,"163":1}}],["serving",{"2":{"21":1}}],["servers",{"2":{"26":1,"43":1,"89":1}}],["server",{"0":{"29":1},"2":{"15":1,"29":1,"87":1,"103":2,"104":3,"106":2,"158":1,"167":1}}],["self",{"2":{"119":1,"138":1}}],["selected",{"2":{"50":1,"65":1,"173":1}}],["select",{"2":{"29":3,"30":1,"40":2,"41":1,"49":3,"55":1,"56":1,"57":1,"58":1,"65":1,"81":1,"91":1,"108":1,"111":1,"121":1,"123":1,"130":1,"141":1,"142":2,"170":1,"171":1,"172":1,"173":1}}],["sent",{"2":{"92":3,"104":1,"128":1}}],["sends",{"2":{"127":1,"132":1}}],["sending",{"2":{"44":1,"95":1,"126":1}}],["send",{"2":{"4":1,"8":1,"29":1,"35":1,"39":1,"41":1,"42":2,"67":1,"86":1,"91":1,"93":1,"128":1,"133":1,"134":1}}],["sessions",{"2":{"70":1}}],["several",{"2":{"47":1}}],["security",{"0":{"168":1},"2":{"69":1}}],["securely",{"2":{"27":1}}],["seconds",{"2":{"50":1}}],["secrets",{"2":{"44":1,"66":1,"166":1,"168":1}}],["secret",{"2":{"33":1,"36":1,"39":1,"160":2,"161":1}}],["section",{"2":{"25":1,"28":1,"123":1}}],["see",{"2":{"14":1,"44":1,"46":1,"59":1,"63":1,"80":1,"84":1,"178":1}}],["searxng",{"2":{"8":1,"138":1,"140":1}}],["searching",{"0":{"112":1}}],["searches",{"2":{"49":1,"117":1}}],["search",{"0":{"109":1,"136":1,"138":1,"140":1,"142":1},"1":{"137":1,"138":1,"139":1,"140":1,"141":1,"142":1,"143":1},"2":{"6":1,"8":3,"10":2,"19":1,"22":1,"35":1,"39":1,"49":4,"50":2,"58":1,"105":1,"109":1,"112":1,"122":1,"123":1,"134":1,"136":1,"137":2,"138":6,"140":4,"142":1,"143":3,"169":1,"171":1,"174":1,"175":1}}],["semantic",{"0":{"109":1},"2":{"6":1,"22":1,"109":1,"169":1,"171":1}}],["separate",{"2":{"5":1}}],["separately",{"2":{"4":1}}],["setup",{"0":{"44":1,"174":1},"2":{"15":1,"59":1}}],["settings",{"0":{"28":1,"49":1,"50":1},"2":{"13":1,"22":1,"33":1,"36":1,"41":1,"44":1,"49":2,"50":1,"51":1,"55":1,"57":1,"108":1,"117":1,"121":1,"140":1,"141":1,"142":1,"160":1,"171":1,"173":2,"175":1,"177":2}}],["set",{"2":{"3":1,"8":1,"13":1,"22":1,"49":1,"50":1,"91":1,"95":1,"101":1,"113":1,"134":1,"147":1,"161":1,"162":1,"165":1,"166":1}}],["s",{"0":{"49":1},"2":{"4":1,"17":1,"18":6,"20":1,"24":1,"30":1,"31":1,"36":1,"40":1,"44":1,"46":1,"48":1,"49":1,"50":2,"59":1,"62":1,"67":1,"68":2,"70":1,"71":1,"73":2,"74":2,"81":2,"82":1,"83":2,"85":1,"90":1,"91":1,"92":2,"97":1,"99":1,"107":1,"108":1,"109":2,"110":1,"111":2,"128":1,"143":1,"145":1,"147":1,"149":1,"150":1,"153":2,"154":1,"155":2,"160":1,"169":1,"174":1,"177":2}}],["my",{"2":{"39":2,"132":1,"133":1,"140":1}}],["myself",{"2":{"18":1}}],["mirror=true",{"2":{"160":2,"162":1}}],["mirror",{"0":{"162":1},"2":{"160":1,"162":1,"165":2}}],["midnight",{"2":{"129":2}}],["minute",{"2":{"129":1}}],["minutes",{"2":{"96":2,"129":1,"135":1,"163":1}}],["minimum",{"2":{"35":1,"161":1}}],["mic",{"2":{"18":1}}],["misses",{"2":{"12":1}}],["must",{"2":{"72":1,"161":1,"165":1,"168":1}}],["much",{"2":{"18":1,"113":1,"116":1}}],["multiple",{"2":{"3":1,"7":1,"21":1,"22":1,"61":1,"70":1,"105":1,"107":1,"143":1}}],["multi",{"0":{"3":1,"4":1,"7":1,"9":1},"2":{"1":1,"6":1,"18":1,"22":1,"23":1,"155":1,"156":1}}],["mcpservers",{"2":{"105":1}}],["mcp",{"0":{"10":1,"100":1},"1":{"101":1,"102":1,"103":1,"104":1,"105":1,"106":1},"2":{"10":2,"13":1,"22":1,"31":1,"85":1,"99":1,"100":1,"101":2,"102":2,"104":2,"106":3,"162":1}}],["mounts",{"2":{"161":1}}],["morning",{"2":{"128":1,"133":1}}],["more",{"2":{"8":1,"10":1,"14":1,"18":3,"22":2,"23":1,"24":1,"53":1,"61":1,"98":1,"176":1}}],["monday",{"2":{"129":1}}],["month",{"2":{"129":3}}],["monitoring",{"0":{"97":1},"1":{"98":1},"2":{"93":1}}],["monitor",{"2":{"85":1}}],["monitors",{"2":{"48":1}}],["monaco",{"2":{"83":1,"148":1}}],["move",{"2":{"80":1}}],["mobile",{"2":{"18":1,"50":1,"52":1,"55":2}}],["moment",{"2":{"18":3}}],["most",{"2":{"18":1,"38":1,"43":1,"49":1,"109":1,"115":1}}],["modalities",{"2":{"123":1}}],["modify",{"2":{"70":1,"83":1,"112":1,"149":1}}],["mode",{"0":{"36":1},"2":{"36":1,"67":1}}],["modern",{"2":{"13":1}}],["modelcontextprotocol",{"2":{"103":1}}],["models",{"0":{"124":1},"2":{"13":1,"17":1,"20":1,"50":1,"120":1,"122":2,"123":2,"125":1,"157":1}}],["model",{"0":{"118":1,"122":1,"123":1},"1":{"119":1,"120":1,"121":1,"122":1,"123":2,"124":2,"125":1},"2":{"9":1,"10":1,"14":1,"19":1,"22":1,"49":2,"50":2,"58":1,"96":2,"100":1,"117":2,"118":1,"122":1,"123":5,"124":2,"169":3,"171":4,"172":1}}],["modular",{"2":{"8":1,"150":1,"155":1}}],["md",{"2":{"8":2,"83":1}}],["macos",{"2":{"161":1}}],["machine",{"2":{"81":1}}],["match",{"2":{"161":1,"165":1}}],["mattered",{"2":{"18":1}}],["may",{"2":{"140":1,"163":1,"176":1}}],["mapped",{"2":{"66":1}}],["mail",{"2":{"93":1}}],["mailgun",{"2":{"7":1,"87":1,"89":1}}],["mainland",{"0":{"162":1},"2":{"160":1,"162":1,"165":1}}],["maintenance",{"2":{"126":1}}],["maintain",{"2":{"70":1}}],["main",{"2":{"50":1,"96":1,"151":1,"152":1,"155":2,"158":1,"167":1,"168":1}}],["making",{"2":{"24":2,"169":1}}],["make",{"2":{"20":1,"108":1}}],["makes",{"2":{"17":1,"20":1,"117":1}}],["manifold",{"0":{"114":1},"1":{"115":1,"116":1}}],["manifesto",{"2":{"17":1}}],["managing",{"0":{"56":1,"77":1,"81":1,"98":1,"112":1,"121":1,"124":1,"141":1,"147":1,"172":1},"1":{"148":1,"149":1}}],["manages",{"2":{"175":1}}],["managed",{"2":{"151":1}}],["manager",{"2":{"84":1}}],["managers",{"2":{"70":1}}],["manage",{"2":{"3":1,"8":1,"47":1,"54":1,"59":1,"71":1,"78":1,"85":1,"88":1,"91":1,"110":1,"147":1,"150":1,"170":1,"174":1,"177":1,"178":1}}],["management",{"0":{"3":1,"45":1,"69":1,"78":1,"107":1},"1":{"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1},"2":{"8":1,"14":2,"22":1,"37":1,"58":1,"59":1,"86":1,"174":1,"178":1}}],["many",{"2":{"18":1,"72":1}}],["manually",{"2":{"85":1,"111":1,"174":1}}],["manual",{"0":{"161":1},"1":{"162":1},"2":{"11":1,"15":1,"126":1,"169":1}}],["max",{"2":{"11":1,"50":2,"128":1,"133":1,"134":1,"135":1}}],["markdown",{"0":{"145":1},"1":{"146":1},"2":{"7":1,"38":1,"42":1,"145":1}}],["mental",{"2":{"155":1}}],["metrics",{"2":{"154":1}}],["metaphors",{"2":{"18":1}}],["me",{"2":{"132":1}}],["meaning",{"2":{"129":1}}],["medium",{"2":{"50":1}}],["message",{"2":{"28":1,"29":1,"31":1,"35":1,"36":2,"42":1,"134":1}}],["messages",{"2":{"4":1,"8":1,"9":1,"12":1,"28":1,"29":1,"35":1,"43":1,"44":1,"66":1,"67":1,"111":1,"123":1,"153":1}}],["messaging",{"2":{"7":1,"8":1,"10":1,"43":1,"45":1,"60":1,"61":1}}],["memories",{"0":{"111":1},"2":{"6":1,"8":1,"109":2,"110":1,"112":2,"113":2,"115":1,"116":1,"117":2,"174":4,"177":1}}],["memory",{"0":{"6":1,"107":1,"113":1,"169":1,"173":1,"174":1,"175":1},"1":{"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1,"170":1,"171":1,"172":1,"173":1,"174":1,"176":1,"177":1,"178":1},"2":{"1":2,"6":2,"8":1,"9":1,"10":1,"18":1,"19":1,"21":1,"22":3,"23":1,"24":1,"45":1,"48":1,"49":3,"50":3,"51":1,"59":3,"99":1,"107":1,"108":6,"109":2,"110":1,"111":3,"112":1,"113":1,"114":2,"117":3,"122":1,"156":2,"166":1,"169":9,"170":3,"171":3,"173":2,"174":5,"175":5,"176":2,"177":3,"178":3}}],["memohai",{"2":{"161":1}}],["memoh123",{"2":{"160":1,"165":1}}],["memoh",{"0":{"0":1,"1":1,"16":1,"30":1,"40":1,"156":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"157":1},"2":{"1":1,"15":1,"17":1,"19":1,"20":1,"21":1,"23":2,"24":3,"25":1,"26":1,"30":1,"32":1,"36":2,"38":2,"39":2,"40":1,"41":2,"43":2,"44":1,"52":1,"61":1,"66":1,"67":2,"69":1,"78":1,"86":1,"100":1,"103":1,"107":1,"109":2,"118":1,"122":1,"136":1,"144":1,"156":1,"157":2,"158":1,"160":8,"161":2,"162":1,"165":2,"169":2,"175":1,"176":2}}],["members",{"2":{"3":1,"26":1}}],["member",{"2":{"1":1,"3":1,"156":1}}],["available",{"0":{"176":1},"2":{"127":1}}],["avatar",{"2":{"46":1}}],["audio",{"2":{"123":1}}],["audit",{"2":{"92":1,"97":1}}],["auth",{"2":{"161":1}}],["authentication",{"2":{"104":1,"119":1,"120":1}}],["authorize",{"2":{"29":1}}],["automate",{"2":{"126":1}}],["automation",{"0":{"127":1},"2":{"8":1,"49":2,"50":1,"53":1,"135":1}}],["automatic",{"2":{"6":1,"95":1,"169":1}}],["automatically",{"2":{"6":1,"11":1,"106":1,"117":1,"132":1,"134":1,"143":1,"162":1}}],["autonomy",{"0":{"95":1}}],["autonomous",{"2":{"94":1,"99":1,"135":1}}],["auto",{"2":{"6":1,"160":1}}],["affecting",{"2":{"69":1}}],["after",{"0":{"174":1},"2":{"49":1,"55":1,"57":1,"59":1,"163":1,"171":1,"178":1}}],["able",{"2":{"156":1}}],["abcdefghijklmnopqrstuvwxyz",{"2":{"39":1}}],["about",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1},"2":{"25":1,"73":1,"157":1}}],["a2a",{"2":{"23":1}}],["am",{"2":{"128":1,"129":2,"132":1}}],["ambient",{"2":{"18":1}}],["amp",{"0":{"4":1},"2":{"33":1,"37":1}}],["approach",{"2":{"155":1}}],["approved",{"2":{"37":1}}],["approval",{"2":{"37":1}}],["appear",{"2":{"42":1}}],["apply",{"2":{"35":1,"83":1}}],["applications",{"2":{"29":1,"60":1}}],["application",{"0":{"27":1},"2":{"27":1}}],["app",{"0":{"33":1,"37":1},"2":{"18":1,"24":1,"33":4,"36":3,"37":1,"44":2,"67":1,"161":1}}],["apis",{"2":{"21":1}}],["api",{"0":{"133":1},"2":{"9":4,"39":2,"40":1,"44":1,"66":1,"89":1,"119":1,"120":3,"121":1,"123":1,"133":2,"137":1,"140":2,"163":1}}],["aggregator",{"2":{"138":1}}],["agreement",{"2":{"18":1}}],["agent2agent",{"2":{"23":1}}],["agents",{"2":{"17":1,"18":1,"20":1}}],["agent",{"0":{"8":1,"16":1},"1":{"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1},"2":{"1":1,"15":1,"17":1,"18":1,"23":1,"24":1,"45":1,"55":2,"127":1,"128":1,"134":2,"155":1,"156":1,"158":1,"163":1}}],["along",{"2":{"134":1}}],["alerts",{"2":{"98":1}}],["alert",{"2":{"97":1}}],["also",{"2":{"20":1,"42":1,"85":1,"92":1,"133":1,"161":1,"165":1}}],["already",{"2":{"18":1,"108":1,"128":1}}],["always",{"0":{"16":1},"1":{"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1},"2":{"17":1,"18":2,"20":1,"21":1,"24":2,"146":1}}],["allow",{"2":{"50":1,"74":1,"126":1,"150":1}}],["allows",{"2":{"26":1,"32":1,"55":1,"67":1,"69":1,"82":1,"86":1,"94":1,"107":1,"136":1,"155":1}}],["allowing",{"2":{"1":1,"60":1,"93":1,"100":1}}],["all",{"2":{"13":1,"15":1,"50":1,"51":2,"92":1,"130":1,"158":1,"160":2,"166":1,"168":1}}],["arguments",{"2":{"103":2}}],["around",{"2":{"18":1}}],["aren",{"2":{"94":1}}],["are",{"2":{"12":1,"43":1,"57":1,"65":1,"66":1,"93":1,"109":1,"112":1,"131":1,"144":1,"145":1,"150":1,"151":2,"163":1}}],["architecture",{"2":{"7":1}}],["attachment",{"2":{"38":1,"43":1}}],["attachments",{"2":{"7":1,"31":1,"42":1}}],["attach",{"2":{"29":1}}],["attempt",{"2":{"17":1}}],["at",{"2":{"8":1,"11":1,"22":1,"35":1,"49":1,"51":1,"92":1,"95":1,"118":2,"120":1,"128":1,"129":4,"132":1,"161":1}}],["advanced",{"2":{"146":1}}],["added",{"2":{"176":1}}],["additional",{"2":{"140":1}}],["adding",{"0":{"65":1,"91":1,"123":1,"140":1,"148":1}}],["address",{"2":{"87":1,"91":1,"92":1}}],["add",{"2":{"29":1,"30":1,"36":2,"40":1,"44":1,"54":1,"65":1,"89":1,"91":1,"105":3,"120":1,"123":1,"140":1,"148":1,"154":1,"170":1}}],["adapter",{"2":{"7":1}}],["admin123",{"2":{"160":1,"163":1}}],["admin",{"2":{"3":1,"160":3,"161":2,"163":1}}],["ask",{"2":{"132":1}}],["asks",{"2":{"109":1}}],["asia",{"2":{"55":1}}],["assistant",{"2":{"153":1}}],["assist",{"2":{"146":1}}],["assigning",{"0":{"57":1,"142":1,"173":1}}],["assigned",{"2":{"50":1,"52":1,"99":1,"117":1,"143":1,"153":1,"174":1,"178":1}}],["assignment",{"2":{"9":1}}],["assign",{"2":{"8":1,"169":1,"177":1}}],["associated",{"2":{"51":1,"91":1}}],["as",{"0":{"87":1,"145":1},"1":{"146":1},"2":{"6":1,"20":1,"21":3,"22":1,"23":2,"24":1,"42":1,"50":1,"52":1,"55":2,"58":1,"61":1,"70":1,"73":1,"93":1,"145":1,"146":1,"150":1}}],["actual",{"2":{"174":1,"177":1}}],["actually",{"2":{"17":1,"18":2}}],["activity",{"2":{"135":1,"153":1}}],["activities",{"2":{"99":1}}],["active",{"2":{"68":1,"73":1,"105":1,"106":1,"108":1,"128":1}}],["activate",{"2":{"44":1,"68":1}}],["actions",{"0":{"72":1},"2":{"58":1,"93":1,"94":1,"126":1}}],["action",{"2":{"51":2,"58":1,"81":1,"97":1}}],["acts",{"2":{"21":1,"53":1,"61":1,"70":1}}],["across",{"2":{"4":1,"70":1,"107":1}}],["accurate",{"2":{"143":1}}],["accumulate",{"2":{"113":1}}],["accumulating",{"2":{"18":1}}],["account",{"2":{"41":1}}],["accounts",{"2":{"3":1}}],["accessible",{"2":{"46":1}}],["access",{"0":{"163":1},"2":{"1":1,"3":1,"22":1,"31":1,"35":1,"43":1,"52":1,"101":1,"132":1,"156":1,"162":1,"166":1,"168":1}}],["analysis",{"2":{"152":1}}],["answer",{"2":{"143":1}}],["another",{"2":{"86":1}}],["any",{"2":{"48":1,"99":1,"126":1,"127":1,"134":1}}],["anchor",{"2":{"18":1}}],["annoying",{"2":{"18":1}}],["anthropic",{"2":{"9":1,"119":1,"123":1}}],["an",{"0":{"16":1},"1":{"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1},"2":{"1":1,"18":3,"21":1,"23":2,"24":3,"39":2,"44":1,"45":1,"84":1,"87":1,"92":2,"97":1,"106":1,"108":1,"117":1,"119":2,"154":1,"156":1}}],["and",{"0":{"80":1,"82":1,"86":1,"92":1,"97":1,"112":1,"118":1,"149":1},"1":{"83":1,"84":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1,"93":1,"98":1,"119":1,"120":1,"121":1,"122":1,"123":1,"124":1,"125":1},"2":{"1":4,"3":1,"4":2,"5":2,"6":2,"7":1,"8":7,"9":1,"10":2,"11":1,"12":1,"13":2,"14":1,"17":1,"18":6,"20":4,"21":3,"22":7,"23":6,"24":4,"26":1,"27":2,"29":2,"30":2,"31":1,"33":3,"35":2,"36":3,"37":2,"38":1,"39":1,"40":2,"41":2,"42":1,"43":3,"44":2,"45":2,"49":2,"50":3,"51":3,"52":2,"53":3,"55":1,"56":1,"57":1,"58":1,"61":1,"63":1,"65":2,"66":1,"67":1,"68":2,"69":1,"70":1,"73":1,"74":1,"76":1,"77":1,"79":1,"81":1,"83":2,"85":2,"86":2,"91":2,"93":1,"95":1,"100":1,"101":1,"103":1,"105":1,"106":1,"107":1,"109":2,"113":1,"117":2,"118":1,"119":1,"121":1,"122":1,"125":1,"127":1,"128":1,"129":1,"130":1,"132":2,"133":1,"134":1,"135":1,"136":1,"138":1,"141":1,"142":2,"143":1,"144":2,"145":2,"146":3,"148":1,"150":1,"152":1,"153":3,"154":3,"155":1,"156":1,"157":4,"158":1,"160":4,"162":1,"163":1,"166":2,"168":1,"169":4,"171":2,"172":1,"173":1,"174":1,"175":3,"176":1,"177":1}}],["ai",{"2":{"1":2,"9":1,"13":1,"17":1,"18":2,"19":1,"20":1,"22":1,"24":1,"45":1,"119":1,"122":1,"123":1,"138":1,"151":1,"156":2}}],["a",{"0":{"27":1,"33":1,"39":1,"46":1,"51":1,"54":1,"55":1,"57":2,"65":1,"75":1,"76":1,"87":1,"89":1,"91":1,"120":1,"123":1,"140":1,"142":2,"148":1,"170":1,"171":1,"173":2},"1":{"56":1,"172":1},"2":{"1":1,"5":1,"6":1,"8":1,"9":1,"14":1,"17":3,"18":11,"19":1,"21":2,"22":1,"23":4,"24":3,"27":2,"33":1,"36":2,"37":1,"39":3,"41":2,"44":1,"45":1,"46":1,"47":1,"48":2,"49":1,"51":1,"52":6,"53":2,"54":1,"55":1,"56":2,"58":1,"59":1,"61":2,"66":1,"67":1,"68":1,"69":1,"72":1,"74":1,"75":2,"77":2,"79":2,"80":1,"81":2,"83":1,"84":1,"87":5,"93":1,"95":3,"97":2,"99":3,"101":1,"103":2,"104":1,"105":4,"108":3,"109":2,"111":1,"113":2,"117":1,"119":2,"120":1,"121":1,"122":3,"123":2,"124":2,"125":1,"127":5,"128":3,"132":5,"134":1,"137":4,"140":1,"141":1,"143":3,"144":1,"145":2,"146":1,"148":2,"149":2,"152":3,"153":2,"154":4,"155":1,"156":1,"160":1,"166":1,"170":1,"171":1,"172":2,"174":1,"175":3,"177":2}}]],"serializationVersion":2}';export{e as default}; diff --git a/assets/chunks/@localSearchIndexroot.DdL7OiJi.js b/assets/chunks/@localSearchIndexroot.DdL7OiJi.js new file mode 100644 index 00000000..665d5254 --- /dev/null +++ b/assets/chunks/@localSearchIndexroot.DdL7OiJi.js @@ -0,0 +1 @@ +const e='{"documentCount":185,"nextId":185,"documentIds":{"0":"/about.html#about-memoh","1":"/about.html#what-is-memoh","2":"/about.html#key-features","3":"/about.html#multi-bot-management","4":"/about.html#multi-user-identity-recognition","5":"/about.html#containerized-isolation","6":"/about.html#memory-engineering","7":"/about.html#multi-platform-support","8":"/about.html#agent-capabilities","9":"/about.html#multi-llm-provider-support","10":"/about.html#mcp-protocol-support","11":"/about.html#scheduled-tasks","12":"/about.html#inbox","13":"/about.html#graphical-configuration","14":"/about.html#cli-tool","15":"/about.html#installation","16":"/blogs/2026-02-16.html#introduction-to-memoh-the-case-for-an-always-on-containerized-home-agent","17":"/blogs/2026-02-16.html#overview","18":"/blogs/2026-02-16.html#story-time","19":"/blogs/2026-02-16.html#what","20":"/blogs/2026-02-16.html#why","21":"/blogs/2026-02-16.html#how","22":"/blogs/2026-02-16.html#features","23":"/blogs/2026-02-16.html#compare-to-openclaw","24":"/blogs/2026-02-16.html#conclusion","25":"/blogs/#blogs","26":"/channels/discord.html#discord-channel-configuration","27":"/channels/discord.html#step-1-create-a-discord-application","28":"/channels/discord.html#step-2-configure-bot-settings","29":"/channels/discord.html#step-3-invite-the-bot-to-your-server","30":"/channels/discord.html#step-4-configure-memoh","31":"/channels/discord.html#features-supported","32":"/channels/feishu.html#feishu-lark-channel-configuration","33":"/channels/feishu.html#step-1-create-a-feishu-app","34":"/channels/feishu.html#step-2-enable-bot-capability","35":"/channels/feishu.html#step-3-configure-permissions","36":"/channels/feishu.html#step-4-configure-events-webhook-mode","37":"/channels/feishu.html#step-5-publish-your-app","38":"/channels/#channels-overview","39":"/channels/#general-setup-flow","40":"/channels/qq.html#qq-channel-configuration","41":"/channels/qq.html#step-1-create-a-qq-bot","42":"/channels/qq.html#step-2-configure-memoh","43":"/channels/qq.html#step-3-bind-your-identity-optional","44":"/channels/qq.html#features-supported","45":"/channels/qq.html#official-resources","46":"/channels/telegram.html#telegram-channel-configuration","47":"/channels/telegram.html#step-1-create-a-telegram-bot","48":"/channels/telegram.html#step-2-configure-memoh","49":"/channels/telegram.html#step-3-bind-your-identity-optional","50":"/channels/telegram.html#features-supported","51":"/getting-started/bot.html#bot-management","52":"/getting-started/bot.html#creating-a-bot","53":"/getting-started/bot.html#bot-detail-page","54":"/getting-started/bot.html#overview-tab","55":"/getting-started/bot.html#configuring-the-bot-s-core-settings","56":"/getting-started/bot.html#settings-tab-reference","57":"/getting-started/bot.html#deleting-a-bot","58":"/getting-started/browser.html#browser-contexts","59":"/getting-started/browser.html#concept-browser-gateway","60":"/getting-started/browser.html#creating-a-browser-context","61":"/getting-started/browser.html#configuring-a-browser-context","62":"/getting-started/browser.html#managing-contexts","63":"/getting-started/browser.html#assigning-a-browser-context-to-a-bot","64":"/getting-started/browser.html#bot-interaction","65":"/getting-started/browser.html#next-steps","66":"/getting-started/channels.html#bot-channels","67":"/getting-started/channels.html#concept-unified-communication","68":"/getting-started/channels.html#supported-channels","69":"/getting-started/channels.html#popular-platforms","70":"/getting-started/channels.html#configuration-flow","71":"/getting-started/channels.html#_1-adding-a-channel","72":"/getting-started/channels.html#_2-common-fields","73":"/getting-started/channels.html#_3-special-case-feishu-webhook","74":"/getting-started/channels.html#operations","75":"/getting-started/container.html#bot-container-management","76":"/getting-started/container.html#concept-the-isolated-workspace","77":"/getting-started/container.html#operations","78":"/getting-started/container.html#lifecycle-actions","79":"/getting-started/container.html#container-information","80":"/getting-started/container.html#snapshots","81":"/getting-started/container.html#creating-a-snapshot","82":"/getting-started/container.html#restoring-a-snapshot","83":"/getting-started/container.html#managing-snapshots","84":"/getting-started/email.html#email-providers-and-bindings","85":"/getting-started/email.html#concept-email-as-a-bot-channel","86":"/getting-started/email.html#email-provider","87":"/getting-started/email.html#creating-a-provider","88":"/getting-started/email.html#bot-email-bindings","89":"/getting-started/email.html#adding-a-binding","90":"/getting-started/email.html#outbox-and-history","91":"/getting-started/email.html#bot-interaction","92":"/getting-started/files.html#bot-files-management","93":"/getting-started/files.html#operations","94":"/getting-started/files.html#browsing-and-navigation","95":"/getting-started/files.html#managing-files","96":"/getting-started/files.html#viewing-and-editing","97":"/getting-started/files.html#text-files","98":"/getting-started/files.html#images","99":"/getting-started/files.html#bot-interaction-with-files","100":"/getting-started/heartbeat.html#bot-heartbeat","101":"/getting-started/heartbeat.html#concept-scheduled-autonomy","102":"/getting-started/heartbeat.html#configuration","103":"/getting-started/heartbeat.html#logs-and-monitoring","104":"/getting-started/heartbeat.html#managing-logs","105":"/getting-started/heartbeat.html#bot-interaction","106":"/getting-started/mcp.html#mcp-connections","107":"/getting-started/mcp.html#concept-extending-bot-capabilities","108":"/getting-started/mcp.html#connection-types","109":"/getting-started/mcp.html#_1-stdio-local-process","110":"/getting-started/mcp.html#_2-remote-http-sse","111":"/getting-started/mcp.html#operations","112":"/getting-started/mcp.html#bot-interaction","113":"/getting-started/memory.html#bot-memory-management","114":"/getting-started/memory.html#prerequisites","115":"/getting-started/memory.html#concept-semantic-search","116":"/getting-started/memory.html#operations","117":"/getting-started/memory.html#_1-creating-memories","118":"/getting-started/memory.html#_2-searching-and-managing","119":"/getting-started/memory.html#memory-compression-compact","120":"/getting-started/memory.html#visualization-vector-manifold","121":"/getting-started/memory.html#top-k-bucket-chart","122":"/getting-started/memory.html#cdf-curve-cumulative-distribution-function","123":"/getting-started/memory.html#bot-interaction","124":"/getting-started/provider-and-model.html#llm-provider-and-model","125":"/getting-started/provider-and-model.html#llm-provider","126":"/getting-started/provider-and-model.html#creating-a-provider","127":"/getting-started/provider-and-model.html#managing-providers","128":"/getting-started/provider-and-model.html#model","129":"/getting-started/provider-and-model.html#adding-a-model","130":"/getting-started/provider-and-model.html#managing-models","131":"/getting-started/provider-and-model.html#next-steps","132":"/getting-started/schedule.html#scheduled-tasks","133":"/getting-started/schedule.html#concept-cron-based-automation","134":"/getting-started/schedule.html#schedule-fields","135":"/getting-started/schedule.html#cron-pattern-reference","136":"/getting-started/schedule.html#viewing-schedules","137":"/getting-started/schedule.html#creating-schedules","138":"/getting-started/schedule.html#via-the-bot-conversational","139":"/getting-started/schedule.html#via-the-api","140":"/getting-started/schedule.html#execution-flow","141":"/getting-started/schedule.html#schedule-vs-heartbeat","142":"/getting-started/skills.html#bot-skills","143":"/getting-started/skills.html#concept-skills-as-markdown","144":"/getting-started/skills.html#example-skill-structure","145":"/getting-started/skills.html#managing-skills","146":"/getting-started/skills.html#adding-a-skill","147":"/getting-started/skills.html#editing-and-deleting","148":"/getting-started/skills.html#how-bots-use-skills","149":"/getting-started/search-provider.html#search-providers","150":"/getting-started/search-provider.html#concept-real-time-knowledge","151":"/getting-started/search-provider.html#supported-search-engines","152":"/getting-started/search-provider.html#configuration-flow","153":"/getting-started/search-provider.html#_1-adding-a-search-provider","154":"/getting-started/search-provider.html#_2-managing-providers","155":"/getting-started/search-provider.html#assigning-a-search-provider-to-a-bot","156":"/getting-started/search-provider.html#bot-interaction","157":"/getting-started/subagents.html#bot-subagents","158":"/getting-started/subagents.html#concept-task-specialization","159":"/getting-started/subagents.html#fields","160":"/getting-started/subagents.html#operations","161":"/getting-started/subagents.html#bot-interaction","162":"/#memoh-documentation","163":"/#documentation","164":"/installation/docker.html#docker-installation","165":"/installation/docker.html#prerequisites","166":"/installation/docker.html#one-click-install-recommended","167":"/installation/docker.html#manual-install","168":"/installation/docker.html#china-mainland-mirror","169":"/installation/docker.html#access-points","170":"/installation/docker.html#common-commands","171":"/installation/docker.html#environment-variables","172":"/installation/docker.html#production-checklist","173":"/installation/docker.html#troubleshooting","174":"/installation/docker.html#security-warnings","175":"/memory-providers/builtin.html#built-in-memory-provider","176":"/memory-providers/builtin.html#creating-a-built-in-provider","177":"/memory-providers/builtin.html#configuring-a-built-in-provider","178":"/memory-providers/builtin.html#managing-providers","179":"/memory-providers/builtin.html#assigning-a-memory-provider-to-a-bot","180":"/memory-providers/builtin.html#using-memory-after-setup","181":"/memory-providers/#memory-providers","182":"/memory-providers/#available-providers","183":"/memory-providers/#basic-flow","184":"/memory-providers/#next-steps"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[2,1,1],"1":[4,2,55],"2":[2,2,1],"3":[3,4,39],"4":[5,4,33],"5":[2,4,38],"6":[2,4,48],"7":[3,4,41],"8":[2,4,97],"9":[4,4,36],"10":[3,4,37],"11":[2,4,22],"12":[1,4,21],"13":[2,4,47],"14":[2,4,24],"15":[1,2,29],"16":[12,1,1],"17":[1,12,74],"18":[2,12,215],"19":[1,12,29],"20":[1,12,54],"21":[1,12,65],"22":[1,12,104],"23":[3,12,83],"24":[1,12,62],"25":[1,1,12],"26":[3,1,16],"27":[6,3,28],"28":[5,3,21],"29":[8,3,42],"30":[4,3,23],"31":[2,3,25],"32":[4,1,24],"33":[6,4,34],"34":[5,4,13],"35":[4,4,31],"36":[7,4,56],"37":[5,4,30],"38":[2,1,76],"39":[3,2,53],"40":[3,1,16],"41":[6,3,46],"42":[4,3,37],"43":[7,3,36],"44":[2,3,36],"45":[2,3,6],"46":[3,1,28],"47":[6,3,55],"48":[4,3,30],"49":[7,3,45],"50":[2,3,35],"51":[2,1,34],"52":[3,2,42],"53":[3,2,23],"54":[2,4,37],"55":[6,2,82],"56":[3,2,112],"57":[3,2,44],"58":[2,1,45],"59":[3,2,45],"60":[4,2,27],"61":[4,2,76],"62":[2,5,15],"63":[6,2,33],"64":[2,2,55],"65":[2,2,27],"66":[2,1,18],"67":[3,2,29],"68":[2,2,14],"69":[2,3,23],"70":[2,2,1],"71":[4,4,24],"72":[3,4,33],"73":[5,4,32],"74":[1,2,20],"75":[3,1,35],"76":[4,3,30],"77":[1,3,16],"78":[2,4,51],"79":[2,3,46],"80":[1,3,32],"81":[3,4,18],"82":[3,4,17],"83":[2,4,23],"84":[4,1,18],"85":[6,4,28],"86":[2,4,13],"87":[3,5,38],"88":[3,4,15],"89":[3,5,41],"90":[3,4,34],"91":[2,4,45],"92":[3,1,24],"93":[1,3,17],"94":[3,4,31],"95":[2,4,42],"96":[3,3,17],"97":[2,6,39],"98":[1,6,20],"99":[4,3,36],"100":[2,1,24],"101":[3,2,38],"102":[1,2,41],"103":[3,2,46],"104":[2,5,29],"105":[2,2,36],"106":[2,1,21],"107":[4,2,25],"108":[2,2,11],"109":[5,4,51],"110":[5,4,36],"111":[1,2,43],"112":[2,2,32],"113":[3,1,22],"114":[1,3,37],"115":[3,3,31],"116":[1,3,14],"117":[3,4,25],"118":[4,4,25],"119":[4,3,49],"120":[3,3,17],"121":[4,6,12],"122":[6,6,19],"123":[2,3,45],"124":[4,1,16],"125":[2,4,27],"126":[3,4,46],"127":[2,4,27],"128":[1,4,31],"129":[3,4,88],"130":[2,4,16],"131":[2,4,16],"132":[2,1,33],"133":[4,2,37],"134":[2,2,77],"135":[3,2,46],"136":[2,2,31],"137":[2,2,8],"138":[5,4,46],"139":[3,4,42],"140":[2,2,48],"141":[3,2,52],"142":[2,1,23],"143":[4,2,27],"144":[3,5,37],"145":[2,2,15],"146":[3,3,22],"147":[3,3,23],"148":[4,2,35],"149":[2,1,23],"150":[4,2,28],"151":[3,2,53],"152":[2,2,1],"153":[5,4,44],"154":[3,4,21],"155":[6,2,22],"156":[2,2,35],"157":[2,1,27],"158":[3,2,31],"159":[1,2,48],"160":[1,2,37],"161":[2,2,43],"162":[2,1,46],"163":[1,2,34],"164":[2,1,44],"165":[1,2,5],"166":[5,2,101],"167":[2,2,80],"168":[3,4,45],"169":[2,2,39],"170":[2,2,33],"171":[2,2,49],"172":[2,2,47],"173":[1,2,20],"174":[2,2,27],"175":[4,1,53],"176":[5,4,29],"177":[5,4,47],"178":[2,6,18],"179":[6,4,37],"180":[4,4,38],"181":[2,1,33],"182":[2,2,34],"183":[2,2,31],"184":[2,2,22]},"averageFieldLength":[2.9405405405405407,3.2054054054054055,35.94594594594593],"storedFields":{"0":{"title":"About Memoh","titles":[]},"1":{"title":"What is Memoh?","titles":["About Memoh"]},"2":{"title":"Key Features","titles":["About Memoh"]},"3":{"title":"Multi-Bot Management","titles":["About Memoh","Key Features"]},"4":{"title":"Multi-User & Identity Recognition","titles":["About Memoh","Key Features"]},"5":{"title":"Containerized Isolation","titles":["About Memoh","Key Features"]},"6":{"title":"Memory Engineering","titles":["About Memoh","Key Features"]},"7":{"title":"Multi-Platform Support","titles":["About Memoh","Key Features"]},"8":{"title":"Agent Capabilities","titles":["About Memoh","Key Features"]},"9":{"title":"Multi-LLM Provider Support","titles":["About Memoh","Key Features"]},"10":{"title":"MCP Protocol Support","titles":["About Memoh","Key Features"]},"11":{"title":"Scheduled Tasks","titles":["About Memoh","Key Features"]},"12":{"title":"Inbox","titles":["About Memoh","Key Features"]},"13":{"title":"Graphical Configuration","titles":["About Memoh","Key Features"]},"14":{"title":"CLI Tool","titles":["About Memoh","Key Features"]},"15":{"title":"Installation","titles":["About Memoh"]},"16":{"title":"Introduction to Memoh - The Case for an Always-On, Containerized Home Agent","titles":[]},"17":{"title":"Overview","titles":["Introduction to Memoh - The Case for an Always-On, Containerized Home Agent"]},"18":{"title":"Story Time","titles":["Introduction to Memoh - The Case for an Always-On, Containerized Home Agent"]},"19":{"title":"What","titles":["Introduction to Memoh - The Case for an Always-On, Containerized Home Agent"]},"20":{"title":"Why","titles":["Introduction to Memoh - The Case for an Always-On, Containerized Home Agent"]},"21":{"title":"How","titles":["Introduction to Memoh - The Case for an Always-On, Containerized Home Agent"]},"22":{"title":"Features","titles":["Introduction to Memoh - The Case for an Always-On, Containerized Home Agent"]},"23":{"title":"Compare to OpenClaw","titles":["Introduction to Memoh - The Case for an Always-On, Containerized Home Agent"]},"24":{"title":"Conclusion","titles":["Introduction to Memoh - The Case for an Always-On, Containerized Home Agent"]},"25":{"title":"Blogs","titles":[]},"26":{"title":"Discord Channel Configuration","titles":[]},"27":{"title":"Step 1: Create a Discord Application","titles":["Discord Channel Configuration"]},"28":{"title":"Step 2: Configure Bot Settings","titles":["Discord Channel Configuration"]},"29":{"title":"Step 3: Invite the Bot to Your Server","titles":["Discord Channel Configuration"]},"30":{"title":"Step 4: Configure Memoh","titles":["Discord Channel Configuration"]},"31":{"title":"Features Supported","titles":["Discord Channel Configuration"]},"32":{"title":"Feishu (Lark) Channel Configuration","titles":[]},"33":{"title":"Step 1: Create a Feishu App","titles":["Feishu (Lark) Channel Configuration"]},"34":{"title":"Step 2: Enable Bot Capability","titles":["Feishu (Lark) Channel Configuration"]},"35":{"title":"Step 3: Configure Permissions","titles":["Feishu (Lark) Channel Configuration"]},"36":{"title":"Step 4: Configure Events (Webhook Mode)","titles":["Feishu (Lark) Channel Configuration"]},"37":{"title":"Step 5: Publish Your App","titles":["Feishu (Lark) Channel Configuration"]},"38":{"title":"Channels Overview","titles":[]},"39":{"title":"General Setup Flow","titles":["Channels Overview"]},"40":{"title":"QQ Channel Configuration","titles":[]},"41":{"title":"Step 1: Create a QQ Bot","titles":["QQ Channel Configuration"]},"42":{"title":"Step 2: Configure Memoh","titles":["QQ Channel Configuration"]},"43":{"title":"Step 3: Bind Your Identity (Optional)","titles":["QQ Channel Configuration"]},"44":{"title":"Features Supported","titles":["QQ Channel Configuration"]},"45":{"title":"Official Resources","titles":["QQ Channel Configuration"]},"46":{"title":"Telegram Channel Configuration","titles":[]},"47":{"title":"Step 1: Create a Telegram Bot","titles":["Telegram Channel Configuration"]},"48":{"title":"Step 2: Configure Memoh","titles":["Telegram Channel Configuration"]},"49":{"title":"Step 3: Bind Your Identity (Optional)","titles":["Telegram Channel Configuration"]},"50":{"title":"Features Supported","titles":["Telegram Channel Configuration"]},"51":{"title":"Bot Management","titles":[]},"52":{"title":"Creating a Bot","titles":["Bot Management"]},"53":{"title":"Bot Detail Page","titles":["Bot Management"]},"54":{"title":"Overview Tab","titles":["Bot Management","Bot Detail Page"]},"55":{"title":"Configuring the Bot\'s Core Settings","titles":["Bot Management"]},"56":{"title":"Settings Tab Reference","titles":["Bot Management"]},"57":{"title":"Deleting a Bot","titles":["Bot Management"]},"58":{"title":"Browser Contexts","titles":[]},"59":{"title":"Concept: Browser Gateway","titles":["Browser Contexts"]},"60":{"title":"Creating a Browser Context","titles":["Browser Contexts"]},"61":{"title":"Configuring a Browser Context","titles":["Browser Contexts"]},"62":{"title":"Managing Contexts","titles":["Browser Contexts","Configuring a Browser Context"]},"63":{"title":"Assigning a Browser Context to a Bot","titles":["Browser Contexts"]},"64":{"title":"Bot Interaction","titles":["Browser Contexts"]},"65":{"title":"Next Steps","titles":["Browser Contexts"]},"66":{"title":"Bot Channels","titles":[]},"67":{"title":"Concept: Unified Communication","titles":["Bot Channels"]},"68":{"title":"Supported Channels","titles":["Bot Channels"]},"69":{"title":"Popular Platforms","titles":["Bot Channels","Supported Channels"]},"70":{"title":"Configuration Flow","titles":["Bot Channels"]},"71":{"title":"1. Adding a Channel","titles":["Bot Channels","Configuration Flow"]},"72":{"title":"2. Common Fields","titles":["Bot Channels","Configuration Flow"]},"73":{"title":"3. Special Case: Feishu Webhook","titles":["Bot Channels","Configuration Flow"]},"74":{"title":"Operations","titles":["Bot Channels"]},"75":{"title":"Bot Container Management","titles":[]},"76":{"title":"Concept: The Isolated Workspace","titles":["Bot Container Management"]},"77":{"title":"Operations","titles":["Bot Container Management"]},"78":{"title":"Lifecycle Actions","titles":["Bot Container Management","Operations"]},"79":{"title":"Container Information","titles":["Bot Container Management"]},"80":{"title":"Snapshots","titles":["Bot Container Management"]},"81":{"title":"Creating a Snapshot","titles":["Bot Container Management","Snapshots"]},"82":{"title":"Restoring a Snapshot","titles":["Bot Container Management","Snapshots"]},"83":{"title":"Managing Snapshots","titles":["Bot Container Management","Snapshots"]},"84":{"title":"Email Providers and Bindings","titles":[]},"85":{"title":"Concept: Email as a Bot Channel","titles":["Email Providers and Bindings"]},"86":{"title":"Email Provider","titles":["Email Providers and Bindings"]},"87":{"title":"Creating a Provider","titles":["Email Providers and Bindings","Email Provider"]},"88":{"title":"Bot Email Bindings","titles":["Email Providers and Bindings"]},"89":{"title":"Adding a Binding","titles":["Email Providers and Bindings","Bot Email Bindings"]},"90":{"title":"Outbox and History","titles":["Email Providers and Bindings"]},"91":{"title":"Bot Interaction","titles":["Email Providers and Bindings"]},"92":{"title":"Bot Files Management","titles":[]},"93":{"title":"Operations","titles":["Bot Files Management"]},"94":{"title":"Browsing and Navigation","titles":["Bot Files Management","Operations"]},"95":{"title":"Managing Files","titles":["Bot Files Management","Operations"]},"96":{"title":"Viewing and Editing","titles":["Bot Files Management"]},"97":{"title":"Text Files","titles":["Bot Files Management","Viewing and Editing"]},"98":{"title":"Images","titles":["Bot Files Management","Viewing and Editing"]},"99":{"title":"Bot Interaction with Files","titles":["Bot Files Management"]},"100":{"title":"Bot Heartbeat","titles":[]},"101":{"title":"Concept: Scheduled Autonomy","titles":["Bot Heartbeat"]},"102":{"title":"Configuration","titles":["Bot Heartbeat"]},"103":{"title":"Logs and Monitoring","titles":["Bot Heartbeat"]},"104":{"title":"Managing Logs","titles":["Bot Heartbeat","Logs and Monitoring"]},"105":{"title":"Bot Interaction","titles":["Bot Heartbeat"]},"106":{"title":"MCP Connections","titles":[]},"107":{"title":"Concept: Extending Bot Capabilities","titles":["MCP Connections"]},"108":{"title":"Connection Types","titles":["MCP Connections"]},"109":{"title":"1. Stdio (Local Process)","titles":["MCP Connections","Connection Types"]},"110":{"title":"2. Remote (HTTP/SSE)","titles":["MCP Connections","Connection Types"]},"111":{"title":"Operations","titles":["MCP Connections"]},"112":{"title":"Bot Interaction","titles":["MCP Connections"]},"113":{"title":"Bot Memory Management","titles":[]},"114":{"title":"Prerequisites","titles":["Bot Memory Management"]},"115":{"title":"Concept: Semantic Search","titles":["Bot Memory Management"]},"116":{"title":"Operations","titles":["Bot Memory Management"]},"117":{"title":"1. Creating Memories","titles":["Bot Memory Management","Operations"]},"118":{"title":"2. Searching and Managing","titles":["Bot Memory Management","Operations"]},"119":{"title":"Memory Compression (Compact)","titles":["Bot Memory Management"]},"120":{"title":"Visualization: Vector Manifold","titles":["Bot Memory Management"]},"121":{"title":"Top-K Bucket Chart","titles":["Bot Memory Management","Visualization: Vector Manifold"]},"122":{"title":"CDF Curve (Cumulative Distribution Function)","titles":["Bot Memory Management","Visualization: Vector Manifold"]},"123":{"title":"Bot Interaction","titles":["Bot Memory Management"]},"124":{"title":"LLM Provider and Model","titles":[]},"125":{"title":"LLM Provider","titles":["LLM Provider and Model"]},"126":{"title":"Creating a Provider","titles":["LLM Provider and Model","LLM Provider"]},"127":{"title":"Managing Providers","titles":["LLM Provider and Model","LLM Provider"]},"128":{"title":"Model","titles":["LLM Provider and Model"]},"129":{"title":"Adding a Model","titles":["LLM Provider and Model","Model"]},"130":{"title":"Managing Models","titles":["LLM Provider and Model","Model"]},"131":{"title":"Next Steps","titles":["LLM Provider and Model"]},"132":{"title":"Scheduled Tasks","titles":[]},"133":{"title":"Concept: Cron-Based Automation","titles":["Scheduled Tasks"]},"134":{"title":"Schedule Fields","titles":["Scheduled Tasks"]},"135":{"title":"Cron Pattern Reference","titles":["Scheduled Tasks"]},"136":{"title":"Viewing Schedules","titles":["Scheduled Tasks"]},"137":{"title":"Creating Schedules","titles":["Scheduled Tasks"]},"138":{"title":"Via the Bot (Conversational)","titles":["Scheduled Tasks","Creating Schedules"]},"139":{"title":"Via the API","titles":["Scheduled Tasks","Creating Schedules"]},"140":{"title":"Execution Flow","titles":["Scheduled Tasks"]},"141":{"title":"Schedule vs. Heartbeat","titles":["Scheduled Tasks"]},"142":{"title":"Bot Skills","titles":[]},"143":{"title":"Concept: Skills as Markdown","titles":["Bot Skills"]},"144":{"title":"Example Skill Structure","titles":["Bot Skills","Concept: Skills as Markdown"]},"145":{"title":"Managing Skills","titles":["Bot Skills"]},"146":{"title":"Adding a Skill","titles":["Bot Skills","Managing Skills"]},"147":{"title":"Editing and Deleting","titles":["Bot Skills","Managing Skills"]},"148":{"title":"How Bots Use Skills","titles":["Bot Skills"]},"149":{"title":"Search Providers","titles":[]},"150":{"title":"Concept: Real-Time Knowledge","titles":["Search Providers"]},"151":{"title":"Supported Search Engines","titles":["Search Providers"]},"152":{"title":"Configuration Flow","titles":["Search Providers"]},"153":{"title":"1. Adding a Search Provider","titles":["Search Providers","Configuration Flow"]},"154":{"title":"2. Managing Providers","titles":["Search Providers","Configuration Flow"]},"155":{"title":"Assigning a Search Provider to a Bot","titles":["Search Providers"]},"156":{"title":"Bot Interaction","titles":["Search Providers"]},"157":{"title":"Bot Subagents","titles":[]},"158":{"title":"Concept: Task Specialization","titles":["Bot Subagents"]},"159":{"title":"Fields","titles":["Bot Subagents"]},"160":{"title":"Operations","titles":["Bot Subagents"]},"161":{"title":"Bot Interaction","titles":["Bot Subagents"]},"162":{"title":"Memoh Documentation","titles":[]},"163":{"title":"Documentation","titles":["Memoh Documentation"]},"164":{"title":"Docker Installation","titles":[]},"165":{"title":"Prerequisites","titles":["Docker Installation"]},"166":{"title":"One-Click Install (Recommended)","titles":["Docker Installation"]},"167":{"title":"Manual Install","titles":["Docker Installation"]},"168":{"title":"China Mainland Mirror","titles":["Docker Installation","Manual Install"]},"169":{"title":"Access Points","titles":["Docker Installation"]},"170":{"title":"Common Commands","titles":["Docker Installation"]},"171":{"title":"Environment Variables","titles":["Docker Installation"]},"172":{"title":"Production Checklist","titles":["Docker Installation"]},"173":{"title":"Troubleshooting","titles":["Docker Installation"]},"174":{"title":"Security Warnings","titles":["Docker Installation"]},"175":{"title":"Built-in Memory Provider","titles":[]},"176":{"title":"Creating a Built-in Provider","titles":["Built-in Memory Provider"]},"177":{"title":"Configuring a Built-in Provider","titles":["Built-in Memory Provider"]},"178":{"title":"Managing Providers","titles":["Built-in Memory Provider","Configuring a Built-in Provider"]},"179":{"title":"Assigning a Memory Provider to a Bot","titles":["Built-in Memory Provider"]},"180":{"title":"Using Memory After Setup","titles":["Built-in Memory Provider"]},"181":{"title":"Memory Providers","titles":[]},"182":{"title":"Available Providers","titles":["Memory Providers"]},"183":{"title":"Basic Flow","titles":["Memory Providers"]},"184":{"title":"Next Steps","titles":["Memory Providers"]}},"dirtCount":0,"index":[["x26",{"2":{"170":2,"173":2}}],["=",{"2":{"168":1}}],["~",{"2":{"166":2}}],["|",{"2":{"166":5}}],["ˈmemoʊ",{"2":{"162":1}}],["`run",{"2":{"144":1}}],["`edit",{"2":{"144":1}}],["6",{"2":{"135":1}}],["│",{"2":{"135":15}}],["┌─────────────",{"2":{"135":5}}],["9",{"2":{"134":2,"135":2}}],["8083",{"2":{"169":1}}],["8081",{"2":{"169":1}}],["8080",{"2":{"169":1}}],["8082",{"2":{"169":1}}],["8",{"2":{"119":1,"135":3,"138":1,"139":1}}],["00",{"2":{"134":1,"135":3}}],["0",{"2":{"119":3,"134":1,"135":9,"139":1,"166":4,"171":2}}],["zh",{"2":{"61":1}}],["zone",{"2":{"57":1}}],["创建机器人",{"2":{"41":1}}],["59",{"2":{"135":1}}],["5",{"0":{"37":1},"2":{"41":1,"119":1}}],["4o",{"2":{"128":1,"129":1}}],["4",{"0":{"30":1,"36":1}}],["12",{"2":{"135":1}}],["123456789",{"2":{"47":1}}],["1536",{"2":{"129":1}}],["1",{"0":{"27":1,"33":1,"41":1,"47":1,"71":1,"109":1,"117":1,"153":1},"2":{"135":4,"169":1}}],["jwt",{"2":{"166":2,"167":1}}],["jina",{"2":{"151":1}}],["jpg",{"2":{"98":1}}],["json",{"2":{"111":3,"139":1}}],["js",{"2":{"97":1}}],["join",{"2":{"26":1}}],["jobs",{"2":{"23":1}}],["just",{"2":{"18":1,"91":1}}],["k",{"0":{"121":1}}],["known",{"2":{"80":1}}],["knowledge",{"0":{"150":1},"2":{"19":1,"65":1,"123":1,"149":1}}],["kind",{"2":{"18":1}}],["keep",{"2":{"18":1,"24":2,"47":1,"104":1}}],["kept",{"2":{"17":1}}],["keys",{"2":{"72":1}}],["keyword",{"2":{"6":1}}],["key",{"0":{"2":1},"1":{"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1},"2":{"6":1,"87":1,"109":1,"126":1,"127":1,"153":1,"163":1}}],["yml",{"2":{"167":1,"168":2,"172":1}}],["yandex",{"2":{"151":1}}],["yaml",{"2":{"143":1,"144":1,"148":1}}],["y",{"2":{"109":1,"166":1}}],["yes",{"2":{"129":5}}],["yet",{"2":{"55":1,"65":1}}],["year",{"2":{"17":1,"18":1}}],["yours",{"2":{"24":1}}],["your",{"0":{"29":1,"37":1,"43":1,"49":1},"2":{"1":1,"13":1,"18":1,"19":1,"22":1,"26":1,"29":1,"30":2,"32":1,"33":1,"35":1,"36":2,"38":3,"39":2,"40":1,"41":1,"42":2,"43":3,"46":1,"47":1,"48":2,"49":5,"55":1,"56":1,"63":1,"66":2,"68":1,"73":1,"77":1,"84":1,"85":1,"86":1,"88":1,"95":2,"99":1,"100":1,"106":1,"114":2,"116":1,"126":1,"131":1,"145":1,"149":1,"150":1,"151":2,"153":1,"155":1,"158":1,"162":1,"164":1,"166":1,"167":1,"170":1,"179":1}}],["you",{"2":{"1":1,"18":5,"21":1,"24":1,"29":1,"38":1,"46":1,"47":2,"49":1,"53":2,"55":1,"62":1,"63":1,"65":1,"66":1,"67":1,"80":1,"89":1,"92":1,"96":1,"100":2,"106":1,"120":1,"122":1,"123":1,"124":1,"131":2,"132":1,"138":1,"139":1,"144":2,"148":1,"149":1,"153":1,"155":1,"164":1,"167":1,"168":1,"174":1,"175":1,"178":1,"179":1,"180":1}}],["20",{"2":{"135":1}}],["2026",{"2":{"17":1,"25":1}}],["23",{"2":{"135":1}}],["2",{"0":{"28":1,"34":1,"42":1,"48":1,"72":1,"110":1,"118":1,"154":1},"2":{"169":1}}],["24",{"2":{"6":1,"22":1}}],["32",{"2":{"167":1}}],["31",{"2":{"135":1}}],["30",{"2":{"102":1,"135":2}}],["3",{"0":{"29":1,"35":1,"43":1,"49":1,"73":1},"2":{"13":1,"119":1,"128":1}}],["qq",{"0":{"40":1,"41":1},"1":{"41":1,"42":1,"43":1,"44":1,"45":1},"2":{"38":1,"40":2,"41":2,"42":1,"43":3,"45":2,"69":1}}],["quot",{"2":{"50":2,"76":2,"91":2,"101":2,"105":4,"126":2,"134":4,"138":2,"141":2,"142":4,"148":2,"153":2,"159":2,"161":2}}],["quickly",{"2":{"72":1,"94":1,"104":1,"111":2}}],["quick",{"2":{"38":1,"54":1}}],["quietly",{"2":{"18":1}}],["queries",{"2":{"121":1}}],["question",{"2":{"115":1,"156":1}}],["questions",{"2":{"17":2}}],["queued",{"2":{"12":1}}],["quarter",{"2":{"17":1}}],["qdrant",{"2":{"6":1,"15":1,"164":1,"172":1}}],["null",{"2":{"139":1}}],["number",{"2":{"79":1,"119":1,"134":2}}],["npx",{"2":{"109":1}}],["night",{"2":{"18":1}}],["navigating",{"2":{"59":1}}],["navigation",{"0":{"94":1},"2":{"8":1,"61":1,"64":1,"94":1}}],["navigate",{"2":{"52":1,"55":1,"57":1,"60":1,"63":1,"87":1,"126":1,"136":1,"153":1,"155":1,"176":1,"179":1}}],["name",{"2":{"27":1,"33":1,"47":2,"52":2,"60":2,"61":2,"81":1,"111":1,"126":2,"127":1,"129":2,"134":2,"136":1,"139":1,"144":1,"146":1,"153":2,"159":1,"160":2,"176":2,"177":2,"178":1}}],["natural",{"2":{"17":1,"134":1,"138":1,"141":1}}],["now",{"2":{"131":1,"182":1}}],["non",{"2":{"56":1}}],["node",{"2":{"18":1,"21":1}}],["notes",{"2":{"151":1}}],["notifications",{"2":{"101":1}}],["noticed",{"2":{"18":1}}],["not",{"2":{"17":1,"18":3,"21":1,"55":1,"65":1,"114":1,"164":1,"167":1,"170":1,"179":1}}],["no",{"2":{"13":1,"15":1,"22":1,"41":1,"62":1,"118":1,"129":2,"166":1,"173":1,"178":1,"179":1}}],["necessary",{"2":{"172":1}}],["nerdctl",{"2":{"164":1}}],["next",{"0":{"65":1,"131":1,"184":1},"2":{"83":1,"130":2,"147":1}}],["needed",{"2":{"118":1}}],["need",{"2":{"21":1,"47":1,"49":1,"124":1,"153":1,"164":1}}],["news",{"2":{"134":2}}],["newbot",{"2":{"47":1}}],["new",{"2":{"18":1,"27":1,"49":1,"94":1,"117":1,"160":1}}],["never",{"2":{"12":1}}],["network",{"2":{"1":1,"5":1,"22":1,"23":1,"110":1,"162":1}}],["github",{"2":{"166":1,"167":1}}],["git",{"2":{"165":1,"167":1,"171":1}}],["give",{"2":{"18":1,"23":1,"27":1,"58":1}}],["global",{"2":{"151":1}}],["gpt",{"2":{"128":1,"129":1}}],["gather",{"2":{"64":1}}],["gateways",{"2":{"38":1}}],["gateway",{"0":{"59":1},"2":{"28":1,"58":1,"59":1,"164":1,"169":2}}],["guest",{"2":{"56":1}}],["guests",{"2":{"52":1}}],["guides",{"2":{"39":1,"69":1,"163":1}}],["guide",{"2":{"29":1,"36":2,"46":1,"47":1,"114":1,"163":1}}],["g",{"2":{"39":1,"47":3,"87":1,"94":1,"97":1,"98":1,"109":2,"110":1,"126":2,"129":3,"134":3,"140":1,"153":2,"159":1,"166":1,"171":1,"172":1}}],["gt",{"2":{"29":1,"33":1,"34":1,"35":1,"36":1,"37":1,"43":1,"49":1}}],["good",{"2":{"80":1}}],["google",{"2":{"8":1,"9":1,"129":1,"150":1,"151":1}}],["go",{"2":{"27":2,"29":1,"30":1,"33":2,"34":1,"35":1,"36":2,"37":1,"41":1,"42":1,"43":1,"48":1,"49":1,"55":1,"63":1,"155":1,"179":1}}],["got",{"2":{"18":1}}],["getting",{"2":{"163":1}}],["gets",{"2":{"23":1}}],["get",{"2":{"15":1,"17":1,"47":1}}],["general",{"0":{"39":1},"2":{"141":1,"158":1}}],["generation",{"2":{"56":1}}],["generating",{"2":{"44":1,"56":1}}],["generative",{"2":{"9":1,"129":1}}],["generator",{"2":{"29":1}}],["generate",{"2":{"27":1,"36":1,"43":1,"49":1,"73":1,"166":1,"167":1}}],["generated",{"2":{"18":1,"29":1,"166":1}}],["generic",{"2":{"7":1,"85":1,"87":1,"141":1}}],["grounded",{"2":{"156":1}}],["group",{"2":{"4":1,"35":1,"44":1,"52":1,"167":1,"170":1}}],["groups",{"2":{"3":1,"22":1,"32":1}}],["gracefully",{"2":{"78":1}}],["grade",{"2":{"19":1}}],["graphical",{"0":{"13":1},"2":{"22":1}}],["+",{"2":{"6":1,"7":1,"13":1,"23":1}}],["v2",{"2":{"165":1}}],["vs",{"0":{"141":1}}],["volume",{"2":{"87":1}}],["volumes",{"2":{"78":1}}],["v1",{"2":{"36":1,"126":1,"171":1}}],["validate",{"2":{"173":1}}],["value",{"2":{"17":1,"109":1}}],["var",{"2":{"167":1}}],["variable",{"2":{"171":1}}],["variables",{"0":{"171":1},"2":{"109":1,"166":1}}],["various",{"2":{"22":1,"51":1,"66":1,"149":1}}],["version=v1",{"2":{"166":2}}],["versions",{"2":{"166":1,"171":1,"182":1}}],["versioning",{"2":{"80":1}}],["version",{"2":{"37":2,"166":1,"171":1}}],["versioned",{"2":{"21":1}}],["verification",{"2":{"36":1}}],["vector",{"0":{"120":1},"1":{"121":1,"122":1},"2":{"6":1,"21":1,"129":2,"175":1,"177":1}}],["video",{"2":{"129":1}}],["view",{"2":{"83":1,"104":1,"160":1,"170":1,"173":1}}],["viewport",{"2":{"56":1,"58":1,"61":4}}],["viewing",{"0":{"96":1,"136":1},"1":{"97":1,"98":1},"2":{"41":1}}],["visualizes",{"2":{"122":1}}],["visualization",{"0":{"120":1},"1":{"121":1,"122":1},"2":{"13":1}}],["visual",{"2":{"13":1,"44":1,"98":1,"120":1}}],["via",{"0":{"138":1,"139":1},"2":{"1":1,"6":1,"8":1,"9":1,"10":1,"31":1,"32":1,"38":3,"39":1,"51":1,"76":1,"91":2,"109":1,"162":1,"164":1,"172":1}}],["vue",{"2":{"13":1}}],["rule",{"2":{"133":1}}],["running",{"2":{"15":1,"54":1,"78":1,"79":2,"166":1,"167":1}}],["run",{"2":{"11":1,"20":1,"21":1,"22":1,"24":1,"109":1,"162":1,"164":1,"166":1,"174":1}}],["runtime",{"2":{"8":1,"21":1,"55":1,"56":1,"79":1,"115":1,"179":1}}],["runs",{"2":{"5":1,"22":1,"134":1,"138":1,"162":1,"164":1,"174":1}}],["right",{"2":{"127":1,"154":1,"182":1}}],["rich",{"2":{"8":1,"38":1,"44":1}}],["rand",{"2":{"167":1}}],["range",{"2":{"9":1}}],["ratio",{"2":{"61":1,"119":2}}],["raise",{"2":{"20":1}}],["ram",{"2":{"18":1}}],["rag",{"2":{"18":1,"19":1}}],["root",{"2":{"126":1}}],["routine",{"2":{"105":1,"132":1,"141":1}}],["routing",{"2":{"72":1}}],["router",{"2":{"18":3,"21":2}}],["role",{"2":{"3":1,"159":1}}],["regular",{"2":{"172":1}}],["registry",{"2":{"168":2}}],["registration",{"2":{"38":1}}],["registered",{"2":{"56":1}}],["register",{"2":{"39":1,"138":1}}],["reverse",{"2":{"172":1}}],["rewriting",{"2":{"148":1}}],["retained",{"2":{"119":1}}],["retrieves",{"2":{"123":1,"181":1}}],["retrieve",{"2":{"95":1}}],["retrieved",{"2":{"22":1,"115":1,"121":1,"122":1}}],["retrieval",{"2":{"6":2,"21":1,"175":1}}],["redundant",{"2":{"119":1}}],["requires",{"2":{"156":1,"166":1}}],["required",{"2":{"13":1,"22":1,"28":1,"35":1,"41":1,"71":1,"87":1,"129":1,"167":1}}],["requested",{"2":{"112":1}}],["rename",{"2":{"95":2}}],["rendered",{"2":{"8":1,"59":1}}],["refresh",{"2":{"94":1,"104":1,"136":1}}],["reference",{"0":{"56":1,"135":1},"2":{"163":1}}],["related",{"2":{"177":1}}],["relationships",{"2":{"83":1}}],["relevant",{"2":{"113":1,"115":1,"121":1,"122":1}}],["release",{"2":{"37":2,"166":2,"171":1}}],["reload",{"2":{"94":1,"136":1}}],["relying",{"2":{"64":1}}],["reusable",{"2":{"59":1}}],["recent",{"2":{"121":1}}],["receiving",{"2":{"39":1}}],["receives",{"2":{"105":1,"140":1}}],["receive",{"2":{"35":1,"36":2,"84":1,"161":1}}],["recurring",{"2":{"101":1,"132":1,"141":1}}],["recursive",{"2":{"95":1}}],["recipient",{"2":{"90":1}}],["records",{"2":{"104":1}}],["recommended",{"0":{"166":1},"2":{"15":1,"151":1,"163":1,"164":1}}],["recognition",{"0":{"4":1}}],["remote",{"0":{"110":1},"2":{"110":2}}],["removing",{"2":{"72":1}}],["remove",{"2":{"57":1,"62":1,"74":1,"78":1,"83":1,"95":1,"104":1,"118":1,"130":1,"147":1,"160":1,"178":1}}],["remains",{"2":{"21":1}}],["remembers",{"2":{"55":1}}],["remember",{"2":{"4":1,"18":1,"23":1,"99":1,"113":1}}],["repository",{"2":{"166":1}}],["reports",{"2":{"91":1,"132":1}}],["represented",{"2":{"143":1}}],["represents",{"2":{"125":1}}],["reproducible",{"2":{"20":1}}],["replies",{"2":{"7":1,"50":2}}],["re",{"2":{"20":1}}],["resource",{"2":{"172":1}}],["resources",{"0":{"45":1},"2":{"55":1,"78":1,"112":1}}],["research",{"2":{"151":1,"158":1,"159":1}}],["reset",{"2":{"27":1,"41":1,"82":1}}],["restrict",{"2":{"172":1}}],["rest",{"2":{"139":1}}],["restoring",{"0":{"82":1}}],["restore",{"2":{"5":1,"80":1,"82":1}}],["result",{"2":{"103":1,"139":1}}],["results",{"2":{"64":1,"133":1,"140":1,"156":2,"161":1}}],["response",{"2":{"103":1,"156":1}}],["responses",{"2":{"9":1,"44":1,"46":1,"50":1,"56":1,"129":1}}],["respond",{"2":{"49":1,"91":1}}],["reached",{"2":{"140":1}}],["reactions",{"2":{"8":1}}],["reasoning",{"2":{"56":4,"112":1,"129":2}}],["realized",{"2":{"18":1}}],["reality",{"2":{"17":1}}],["real",{"0":{"150":1},"2":{"8":1,"13":1,"17":2,"18":4,"23":1,"64":1,"79":1,"149":1,"156":1}}],["reading",{"2":{"59":1}}],["ready",{"2":{"37":1,"38":1}}],["read",{"2":{"5":1,"8":1,"28":1,"29":1,"89":1,"97":1,"99":1,"140":1}}],["rebuild",{"2":{"6":1,"173":1,"175":1,"180":1}}],["utc",{"2":{"61":1}}],["url",{"2":{"29":2,"36":4,"52":1,"73":2,"110":1,"125":1,"126":2,"127":1,"153":1,"169":1}}],["uncomment",{"2":{"168":1}}],["uncomfortable",{"2":{"20":1}}],["unread",{"2":{"138":1,"139":2}}],["unlimited",{"2":{"134":1,"141":1}}],["unique",{"2":{"47":1,"79":1,"123":1}}],["unified",{"0":{"67":1},"2":{"7":1}}],["unifies",{"2":{"4":1}}],["understand",{"2":{"120":1}}],["understands",{"2":{"50":1}}],["under",{"2":{"19":1}}],["ui",{"2":{"13":1,"30":1,"42":1,"43":1,"48":1,"49":1,"61":1,"96":1,"164":1,"169":1,"177":1,"182":1}}],["usually",{"2":{"175":1}}],["usage",{"2":{"159":1,"160":1}}],["us",{"2":{"61":1}}],["using",{"0":{"180":1},"2":{"11":1,"51":1,"66":1,"73":1,"78":1,"114":1,"132":1,"133":1,"139":1,"140":1,"183":1}}],["useful",{"2":{"80":1,"101":1,"132":1}}],["used",{"2":{"55":1,"56":3,"79":1,"102":1,"123":1,"129":1,"175":2,"177":2}}],["uses",{"2":{"55":1,"135":1,"161":1,"181":1}}],["use",{"0":{"148":1},"2":{"8":1,"22":1,"23":1,"37":1,"55":2,"56":1,"58":2,"59":1,"62":1,"63":1,"64":1,"83":1,"91":1,"95":1,"99":1,"105":1,"111":1,"112":1,"124":1,"127":2,"141":2,"142":1,"144":2,"150":1,"154":1,"166":3,"168":2,"171":2,"174":2,"178":1,"179":1}}],["username",{"2":{"47":2,"87":1}}],["users",{"2":{"4":2,"8":1,"21":1,"32":1,"40":1,"52":1,"55":1,"56":1,"168":1}}],["user",{"0":{"4":1},"2":{"18":1,"23":1,"28":1,"61":2,"91":1,"112":1,"115":1,"144":1,"156":1,"167":1,"170":1}}],["upload",{"2":{"95":1}}],["update",{"2":{"61":1,"62":1,"74":2,"95":1,"127":1,"154":1,"160":1,"170":1,"178":1}}],["upgradable",{"2":{"21":1}}],["up",{"2":{"3":1,"13":1,"22":1,"41":1,"55":1,"101":1,"158":1,"167":1,"168":1,"170":2,"173":1}}],["d",{"2":{"167":1,"168":1,"170":2,"173":1}}],["dynamic",{"2":{"71":1}}],["dropdown",{"2":{"63":1,"155":1,"179":1}}],["dm",{"2":{"38":1}}],["db",{"2":{"21":1,"167":1}}],["during",{"2":{"103":1,"105":2,"123":1,"148":1,"150":1,"175":1}}],["duration",{"2":{"103":1}}],["durable",{"2":{"20":1,"21":1,"24":1}}],["duckduckgo",{"2":{"8":1,"151":1}}],["do",{"2":{"164":1}}],["domains",{"2":{"157":1}}],["domain",{"2":{"87":1}}],["download",{"2":{"95":1}}],["down",{"2":{"28":1,"78":1,"170":1}}],["don",{"2":{"18":2,"20":2}}],["doing",{"2":{"18":1}}],["doesn",{"2":{"18":1,"78":1}}],["does",{"2":{"17":1,"91":1,"134":1}}],["documented",{"2":{"144":1}}],["document",{"2":{"143":1}}],["documentation",{"0":{"162":1,"163":1},"1":{"163":1},"2":{"14":1,"45":1}}],["docker",{"0":{"164":1},"1":{"165":1,"166":1,"167":1,"168":1,"169":1,"170":1,"171":1,"172":1,"173":1,"174":1},"2":{"15":2,"79":1,"163":1,"164":2,"165":2,"166":6,"167":4,"168":5,"170":6,"171":2,"172":1,"173":3}}],["dense",{"2":{"175":1}}],["density",{"2":{"18":2}}],["decisions",{"2":{"177":1}}],["decision",{"2":{"175":1}}],["decide",{"2":{"18":1}}],["decay",{"2":{"119":1}}],["delivered",{"2":{"140":1}}],["deliver",{"2":{"133":1}}],["delivery",{"2":{"87":1,"90":1}}],["delete",{"2":{"57":1,"62":1,"74":1,"78":2,"83":1,"89":1,"95":1,"118":1,"127":2,"130":1,"147":1,"154":2,"160":1,"178":1,"180":1}}],["deleting",{"0":{"57":1,"147":1},"2":{"111":1}}],["delegate",{"2":{"8":1,"157":1}}],["deep",{"2":{"56":1,"158":1}}],["deeply",{"2":{"6":1}}],["dedicated",{"2":{"38":1,"75":1,"92":1}}],["determine",{"2":{"119":1}}],["detection",{"2":{"6":1}}],["detail",{"0":{"53":1},"1":{"54":1},"2":{"48":1,"53":1,"55":1,"57":1,"68":1,"77":1,"88":1,"92":1,"102":1,"108":1,"116":1,"136":1,"145":1,"159":1}}],["detailed",{"2":{"39":1,"69":1,"103":1,"163":1}}],["details",{"2":{"37":1,"54":1}}],["desired",{"2":{"82":1}}],["designed",{"2":{"14":1,"151":1}}],["description",{"2":{"33":1,"56":1,"61":1,"72":1,"102":1,"109":1,"110":1,"129":1,"134":2,"139":1,"144":1,"146":1,"159":2,"160":2,"171":1,"177":1}}],["deployable",{"2":{"21":1}}],["depending",{"2":{"153":1}}],["dependable",{"2":{"20":1}}],["dependencies",{"2":{"15":1}}],["developer",{"2":{"27":1,"29":1,"34":1}}],["developers",{"2":{"14":1}}],["device",{"2":{"18":1,"21":1,"23":1,"61":2}}],["defines",{"2":{"134":1}}],["define",{"2":{"8":1,"55":1,"56":2,"142":1,"181":1}}],["defaults",{"2":{"129":1,"166":2}}],["default",{"2":{"6":1,"22":1,"23":1,"42":2,"102":1,"129":1,"167":1,"169":1,"171":1,"172":1,"174":1,"182":1}}],["danger",{"2":{"57":1}}],["data",{"2":{"57":2,"78":1,"79":2,"101":1,"107":1,"109":1,"132":1,"166":3,"172":1}}],["database",{"2":{"6":1,"22":1,"54":1,"167":1}}],["days",{"2":{"119":2}}],["day",{"2":{"20":1,"135":5,"138":1,"180":2}}],["dark",{"2":{"13":1}}],["daily",{"2":{"3":1,"134":1,"138":1,"139":1}}],["dialog",{"2":{"146":1,"160":1}}],["digest",{"2":{"138":1,"139":1}}],["dimensions",{"2":{"129":1}}],["different",{"2":{"67":1,"102":1}}],["differs",{"2":{"23":1}}],["did",{"2":{"18":1}}],["directories",{"2":{"94":1,"95":1}}],["directory",{"2":{"93":1,"94":1,"109":1,"166":2}}],["directly",{"2":{"43":1,"49":1,"73":1,"92":1,"98":1,"118":1,"168":1}}],["direct",{"2":{"4":1,"38":1,"43":1,"44":1}}],["distribution",{"0":{"122":1},"2":{"121":1}}],["distinguishes",{"2":{"128":1}}],["distinguish",{"2":{"4":1}}],["discover",{"2":{"112":1}}],["discord",{"0":{"26":1,"27":1},"1":{"27":1,"28":1,"29":1,"30":1,"31":1},"2":{"1":1,"4":1,"7":1,"26":1,"27":1,"29":1,"30":1,"31":1,"38":1,"67":1,"69":1,"163":1}}],["displays",{"2":{"79":1}}],["display",{"2":{"47":1,"52":1,"60":1,"61":1,"126":1,"129":1,"134":1,"176":1,"177":1}}],["displayed",{"2":{"41":1}}],["disappears",{"2":{"18":1}}],["disabled",{"2":{"72":1,"140":1}}],["disable",{"2":{"8":1,"72":1,"74":1,"111":1}}],["ps",{"2":{"170":1}}],["pm",{"2":{"135":1}}],["png",{"2":{"98":1}}],["python3",{"2":{"109":1}}],["py",{"2":{"97":1}}],["pipeline",{"2":{"175":1}}],["pins",{"2":{"171":1}}],["pin",{"2":{"166":1}}],["pixel",{"2":{"61":1}}],["pixels",{"2":{"61":2}}],["picture",{"2":{"52":1}}],["pulled",{"2":{"169":1}}],["pulls",{"2":{"166":1}}],["pull",{"2":{"166":1,"170":1}}],["purpose",{"2":{"141":1,"159":1}}],["public",{"2":{"52":1,"56":1}}],["published",{"2":{"37":1}}],["publish",{"0":{"37":1}}],["push",{"2":{"23":1}}],["pencil",{"2":{"147":1}}],["people",{"2":{"20":1}}],["periodic",{"2":{"100":1,"101":1,"132":1,"141":2}}],["performance",{"2":{"151":1}}],["performing",{"2":{"120":1,"132":1}}],["perform",{"2":{"51":1,"64":1,"78":1,"99":1,"100":1,"105":1,"112":1,"158":1}}],["persistence",{"2":{"79":1}}],["persistent",{"2":{"51":1,"57":1,"78":1}}],["personalized",{"2":{"113":1}}],["personality",{"2":{"8":1,"51":1,"142":1,"143":1}}],["personal",{"2":{"17":1,"18":1,"38":1,"43":1,"49":1,"52":1}}],["person",{"2":{"4":2}}],["permissions",{"0":{"35":1},"2":{"29":1,"35":3,"89":1,"91":1,"161":1}}],["permanently",{"2":{"24":1,"57":1,"74":1,"160":1}}],["per",{"2":{"9":1}}],["phones",{"2":{"18":1}}],["pattern",{"0":{"135":1},"2":{"134":1,"135":2,"136":1,"139":1}}],["path",{"2":{"94":1,"171":1}}],["paths",{"2":{"79":2}}],["passwords",{"2":{"172":2,"174":1}}],["password=your",{"2":{"167":1}}],["password",{"2":{"87":1,"166":2,"167":6,"171":3}}],["paste",{"2":{"30":1,"36":1,"39":1,"42":1,"48":1,"73":1}}],["past",{"2":{"17":1}}],["package",{"2":{"76":1}}],["parsed",{"2":{"143":1}}],["parent",{"2":{"83":1,"94":1}}],["parameters",{"2":{"56":1,"153":1}}],["part",{"2":{"18":1}}],["pairs",{"2":{"109":1}}],["paired",{"2":{"19":1}}],["paid",{"2":{"18":1}}],["pages",{"2":{"58":1}}],["page",{"0":{"53":1},"1":{"54":1},"2":{"8":1,"41":1,"48":1,"52":1,"53":1,"55":1,"57":1,"58":1,"59":1,"60":2,"63":1,"64":1,"68":1,"77":1,"86":1,"87":1,"88":1,"92":1,"102":1,"108":1,"116":1,"126":1,"129":1,"136":1,"145":1,"151":1,"153":1,"155":1,"159":1,"176":2,"179":1,"183":1}}],["points",{"0":{"169":1}}],["pool",{"2":{"119":1}}],["ports",{"2":{"172":1}}],["port",{"2":{"87":1}}],["portal",{"2":{"27":1,"29":1,"38":1,"99":1}}],["portable",{"2":{"18":1,"20":1}}],["popular",{"0":{"69":1}}],["powerful",{"2":{"18":1,"84":1,"151":1}}],["powered",{"2":{"5":1,"8":1,"59":1,"151":1}}],["postgres",{"2":{"166":2,"167":3,"171":2,"172":1}}],["postgresql",{"2":{"15":1,"164":1,"171":1}}],["post",{"2":{"139":1}}],["position",{"2":{"18":1}}],["polite",{"2":{"18":1}}],["pdfs",{"2":{"59":1}}],["pdf",{"2":{"8":1,"64":1}}],["playground",{"2":{"23":1}}],["playwright",{"2":{"8":1,"59":1}}],["plane",{"2":{"21":1}}],["plainly",{"2":{"18":1}}],["platforms",{"0":{"69":1},"2":{"7":1,"22":1,"38":1,"46":1,"51":1,"66":1}}],["platform",{"0":{"7":1},"2":{"1":1,"4":1,"32":1,"33":1,"39":2,"40":1,"41":1,"45":1,"69":1,"71":1,"72":2}}],["prefix",{"2":{"170":1}}],["prefer",{"2":{"14":1}}],["precise",{"2":{"141":1}}],["prerequisites",{"0":{"114":1,"165":1}}],["preview",{"2":{"98":2}}],["preserve",{"2":{"78":1}}],["practices",{"2":{"144":1}}],["practice",{"2":{"59":1}}],["primarily",{"2":{"137":1}}],["primary",{"2":{"56":1}}],["privileged",{"2":{"28":1,"174":1}}],["privileges",{"2":{"18":1}}],["private",{"2":{"20":1,"21":2,"32":1,"52":1,"76":1}}],["privately",{"2":{"3":1,"22":1}}],["privacy",{"2":{"17":1,"23":1,"151":2}}],["proxy",{"2":{"172":1}}],["proceed",{"2":{"131":1}}],["process",{"0":{"109":1},"2":{"89":1,"103":1,"109":1,"112":1,"156":1}}],["programmatically",{"2":{"139":1}}],["programming",{"2":{"97":1}}],["progress",{"2":{"18":2}}],["providing",{"2":{"84":1,"113":1,"160":1}}],["provided",{"2":{"54":1,"72":1,"112":1,"117":1}}],["provides",{"2":{"54":1,"59":1,"75":1,"90":1,"93":1,"103":1,"107":1}}],["provide",{"2":{"47":1,"81":1,"89":1,"105":1,"123":1,"156":2}}],["provider",{"0":{"9":1,"86":1,"87":1,"124":1,"125":1,"126":1,"153":1,"155":1,"175":1,"176":1,"177":1,"179":1},"1":{"87":1,"125":1,"126":2,"127":2,"128":1,"129":1,"130":1,"131":1,"176":1,"177":1,"178":2,"179":1,"180":1},"2":{"22":1,"55":5,"56":3,"65":1,"85":2,"86":1,"87":3,"89":1,"114":6,"115":1,"123":3,"124":1,"125":1,"126":2,"127":3,"128":1,"129":2,"150":1,"151":1,"153":2,"154":3,"155":2,"156":1,"175":1,"176":3,"177":3,"178":2,"179":4,"180":1,"181":3,"182":3,"183":5,"184":3}}],["providers",{"0":{"84":1,"127":1,"149":1,"154":1,"178":1,"181":1,"182":1},"1":{"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"150":1,"151":1,"152":1,"153":1,"154":1,"155":1,"156":1,"182":1,"183":1,"184":1},"2":{"7":1,"8":1,"9":1,"13":1,"38":1,"55":1,"106":1,"151":1,"176":3,"183":1}}],["profile",{"2":{"52":1,"55":1,"59":1}}],["production",{"0":{"172":1},"2":{"174":2}}],["product",{"2":{"24":1,"182":1}}],["prompts",{"2":{"47":1,"101":1,"166":1}}],["prompt",{"2":{"12":1,"105":1,"141":1,"148":1,"166":1}}],["protocol",{"0":{"10":1},"2":{"10":1,"106":1,"129":1}}],["hub",{"2":{"67":1,"168":1}}],["human",{"2":{"18":1}}],["humans",{"2":{"3":1,"22":1}}],["html",{"2":{"64":1}}],["https",{"2":{"61":2,"126":1,"166":5,"167":1,"172":1,"174":1}}],["http",{"0":{"110":1},"2":{"10":1,"110":2,"169":4}}],["helping",{"2":{"122":1}}],["help",{"2":{"120":1}}],["helps",{"2":{"119":1,"148":1}}],["held",{"2":{"23":1}}],["height",{"2":{"61":2}}],["headers",{"2":{"110":2}}],["headless",{"2":{"58":1}}],["heartbeat",{"0":{"100":1,"141":1},"1":{"101":1,"102":1,"103":1,"104":1,"105":1},"2":{"100":1,"101":1,"102":5,"103":4,"104":1,"105":3,"141":2}}],["health",{"2":{"54":2}}],["highly",{"2":{"151":1}}],["highlighting",{"2":{"97":1}}],["high",{"2":{"56":1,"87":1}}],["hint",{"2":{"42":1}}],["history",{"0":{"90":1},"2":{"19":1,"29":1,"56":1,"104":1,"117":1,"159":1,"160":1}}],["hide",{"2":{"18":1}}],["hour",{"2":{"135":1}}],["hours",{"2":{"6":1,"22":1}}],["how",{"0":{"21":1,"148":1},"2":{"55":1,"69":1,"72":1,"102":1,"103":1,"119":1,"120":1,"122":1,"142":1,"181":1}}],["home",{"0":{"16":1},"1":{"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1},"2":{"18":2,"19":1,"23":1,"24":1}}],["hosted",{"2":{"125":1,"151":1}}],["host",{"2":{"15":1,"75":1,"79":1,"87":1,"164":1}}],["hybrid",{"2":{"6":1,"23":1}}],["handles",{"2":{"91":1,"158":1,"168":1}}],["half",{"2":{"18":1}}],["happening",{"2":{"18":1}}],["hardware",{"2":{"17":1,"18":1}}],["have",{"2":{"10":1,"23":1,"55":1,"65":1,"78":1,"107":1,"114":1,"131":1}}],["having",{"2":{"1":1,"22":1}}],["has",{"2":{"1":1,"18":1,"92":1,"114":1,"134":1,"138":1}}],["blocks",{"2":{"44":1,"50":1}}],["blogs",{"0":{"25":1},"2":{"25":1}}],["best",{"2":{"144":1}}],["belongs",{"2":{"128":1}}],["belief",{"2":{"23":1}}],["before",{"2":{"56":1,"114":1,"167":1,"174":1}}],["behave",{"2":{"142":1}}],["behaviors",{"2":{"148":1}}],["behavior",{"2":{"56":2,"58":1,"61":1}}],["behind",{"2":{"18":1}}],["bet",{"2":{"24":1}}],["between",{"2":{"9":1,"18":1,"72":1,"94":1,"110":1,"128":1}}],["be",{"2":{"22":1,"23":1,"57":1,"89":1,"102":1,"140":1,"156":1,"166":1,"182":1}}],["become",{"2":{"119":1}}],["becomes",{"2":{"18":1,"20":1,"150":1,"181":1}}],["because",{"2":{"18":1}}],["being",{"2":{"18":1}}],["bashdocker",{"2":{"170":1,"173":1}}],["bashsudo",{"2":{"167":1,"168":1}}],["bashgit",{"2":{"167":1}}],["bashuse",{"2":{"166":1}}],["bashmemoh",{"2":{"166":1}}],["bashcurl",{"2":{"166":2}}],["basic",{"0":{"183":1},"2":{"33":1,"52":1,"146":1}}],["base64",{"2":{"167":1}}],["base",{"2":{"18":1,"19":2,"79":1,"125":1,"126":1,"153":1}}],["based",{"0":{"133":1},"2":{"3":1,"71":1,"91":1}}],["battery",{"2":{"18":1}}],["backups",{"2":{"172":2}}],["background",{"2":{"79":1}}],["backend",{"2":{"55":1,"56":1,"114":1,"123":1,"175":1,"181":1}}],["back",{"2":{"18":1,"50":1,"95":1}}],["bocha",{"2":{"151":1}}],["bound",{"2":{"133":1}}],["boundaries",{"2":{"21":1,"23":1}}],["boundary",{"2":{"17":1}}],["bold",{"2":{"44":1,"50":1}}],["bottom",{"2":{"55":1,"57":1,"126":1}}],["botfather",{"2":{"39":1,"47":2}}],["both",{"2":{"23":1,"141":1}}],["bot",{"0":{"3":1,"28":1,"29":1,"34":1,"41":1,"47":1,"51":1,"52":1,"53":1,"55":1,"57":1,"63":1,"64":1,"66":1,"75":1,"85":1,"88":1,"91":1,"92":1,"99":1,"100":1,"105":1,"107":1,"112":1,"113":1,"123":1,"138":1,"142":1,"155":1,"156":1,"157":1,"161":1,"179":1},"1":{"52":1,"53":1,"54":2,"55":1,"56":1,"57":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"89":1,"93":1,"94":1,"95":1,"96":1,"97":1,"98":1,"99":1,"101":1,"102":1,"103":1,"104":1,"105":1,"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1,"143":1,"144":1,"145":1,"146":1,"147":1,"148":1,"158":1,"159":1,"160":1,"161":1},"2":{"1":1,"3":1,"5":1,"8":1,"9":1,"10":1,"12":1,"13":1,"14":1,"22":3,"23":1,"26":1,"27":2,"28":1,"29":2,"30":2,"34":2,"36":2,"37":1,"38":1,"39":3,"40":2,"41":2,"42":1,"43":3,"45":2,"46":1,"47":7,"48":1,"49":4,"50":4,"51":1,"52":2,"53":1,"54":1,"55":5,"56":4,"57":4,"58":4,"63":2,"64":2,"65":2,"66":1,"67":1,"68":2,"72":1,"75":2,"76":2,"77":2,"78":1,"79":1,"80":2,"84":1,"85":2,"88":2,"89":5,"90":1,"91":2,"92":2,"94":1,"95":2,"96":1,"97":1,"99":2,"100":1,"101":1,"102":1,"103":2,"105":3,"106":1,"107":1,"108":1,"112":1,"114":3,"115":1,"116":2,"117":1,"122":1,"123":3,"131":1,"132":1,"133":2,"136":2,"138":3,"139":1,"142":2,"143":1,"145":2,"147":1,"148":2,"149":1,"150":1,"155":1,"156":2,"157":1,"158":2,"159":2,"161":3,"162":1,"179":2,"180":3,"181":2,"183":2,"184":1}}],["bots",{"0":{"148":1},"2":{"1":1,"3":4,"4":1,"5":1,"8":2,"13":1,"22":6,"29":1,"32":1,"38":3,"41":1,"51":1,"52":1,"56":1,"59":2,"63":1,"69":1,"75":1,"107":1,"113":1,"139":1,"155":1,"162":1,"163":1,"179":1}}],["bucket",{"0":{"121":1}}],["business",{"2":{"38":1}}],["buttons",{"2":{"59":1}}],["button",{"2":{"52":1,"83":1,"111":1,"126":1,"127":1,"154":1}}],["but",{"2":{"17":2,"18":1,"20":1,"78":1,"161":1,"182":1}}],["builtin",{"2":{"176":1,"177":1,"182":1}}],["built",{"0":{"175":1,"176":1,"177":1},"1":{"176":1,"177":1,"178":2,"179":1,"180":1},"2":{"7":1,"8":1,"10":1,"23":1,"24":1,"38":1,"55":1,"56":1,"64":1,"65":1,"97":1,"114":1,"115":1,"123":1,"175":1,"182":1,"184":1}}],["buildkit",{"2":{"164":1}}],["building",{"2":{"18":1,"161":1}}],["buildable",{"2":{"17":1}}],["build",{"2":{"3":1,"18":1,"23":1,"173":1}}],["breadcrumb",{"2":{"94":1}}],["breaks",{"2":{"17":1}}],["bridges",{"2":{"67":1}}],["brief",{"2":{"20":1,"134":1,"159":1}}],["browse",{"2":{"149":1}}],["browser",{"0":{"58":1,"59":1,"60":1,"61":1,"63":1},"1":{"59":1,"60":1,"61":1,"62":2,"63":1,"64":1,"65":1},"2":{"8":2,"13":1,"29":1,"55":5,"56":2,"58":6,"59":4,"60":4,"61":4,"63":3,"64":4,"169":1}}],["browsing",{"0":{"94":1},"2":{"56":1,"93":1}}],["brave",{"2":{"8":1,"150":1,"151":1,"153":1}}],["brain",{"2":{"1":1}}],["bind",{"0":{"43":1,"49":1},"2":{"43":2,"49":3,"181":1}}],["bindings",{"0":{"84":1,"88":1},"1":{"85":1,"86":1,"87":1,"88":1,"89":2,"90":1,"91":1},"2":{"178":1}}],["binding",{"0":{"89":1},"2":{"4":1,"85":1,"89":1}}],["bing",{"2":{"8":1,"150":1,"151":1}}],["bm25",{"2":{"6":1}}],["by",{"2":{"5":1,"6":1,"22":2,"23":1,"35":1,"38":1,"59":1,"69":1,"72":1,"90":1,"94":1,"104":1,"111":1,"112":3,"118":1,"123":1,"129":1,"157":1,"160":1,"163":1,"167":1}}],["f",{"2":{"168":2,"170":1}}],["fssl",{"2":{"166":5}}],["flexible",{"2":{"141":1}}],["flexibly",{"2":{"9":1}}],["flow",{"0":{"39":1,"70":1,"140":1,"152":1,"183":1},"1":{"71":1,"72":1,"73":1,"153":1,"154":1}}],["future",{"2":{"182":1}}],["function",{"0":{"122":1}}],["furthermore",{"2":{"24":1}}],["fully",{"2":{"20":2,"106":1}}],["full",{"2":{"7":3,"10":1,"31":1,"44":1,"173":1}}],["fixed",{"2":{"141":1}}],["fixes",{"2":{"18":1}}],["five",{"2":{"135":1}}],["firewall",{"2":{"172":1}}],["fired",{"2":{"134":1}}],["fires",{"2":{"133":1,"140":1}}],["first",{"2":{"18":1,"19":1,"23":2,"55":1,"124":1,"135":1,"169":1}}],["fine",{"2":{"122":1}}],["finds",{"2":{"115":1}}],["find",{"2":{"63":1,"82":1,"104":1,"111":1,"155":1,"179":1}}],["finished",{"2":{"18":1}}],["fields",{"0":{"72":1,"134":1,"159":1},"2":{"55":1,"71":1,"87":1,"126":1,"129":1,"135":1,"176":1}}],["field",{"2":{"36":1,"48":1,"56":1,"60":1,"61":1,"72":1,"102":1,"109":1,"110":1,"114":1,"129":1,"134":1,"135":1,"159":1,"177":1}}],["filter",{"2":{"104":1,"118":1}}],["file`",{"2":{"144":1}}],["fileviewer",{"2":{"96":1}}],["filemanager",{"2":{"93":1}}],["file",{"2":{"78":1,"93":1,"94":1,"95":2,"97":2,"98":2,"111":2,"129":1,"140":1,"167":1,"171":1}}],["filesystem",{"2":{"5":1,"13":1,"75":1,"92":2,"97":1,"101":1,"109":1}}],["files",{"0":{"92":1,"95":1,"97":1,"99":1},"1":{"93":1,"94":1,"95":1,"96":1,"97":1,"98":1,"99":1},"2":{"1":1,"5":1,"8":2,"21":1,"22":1,"23":1,"29":1,"31":1,"44":1,"50":2,"57":1,"76":1,"92":1,"94":1,"95":2,"96":1,"99":2,"143":1,"162":1}}],["fill",{"2":{"36":1,"37":1,"52":1,"58":1,"60":1,"64":1,"71":1,"87":1,"111":1,"126":1,"146":1,"153":1,"176":1}}],["filling",{"2":{"8":1,"59":1}}],["focus",{"2":{"157":1}}],["focused",{"2":{"38":1,"151":1}}],["folders",{"2":{"95":1}}],["folder",{"2":{"94":1,"95":1}}],["follow",{"2":{"47":1,"54":1,"144":1}}],["following",{"2":{"35":1,"38":1,"60":1,"126":1,"129":1,"153":1,"176":1,"182":1}}],["four",{"2":{"9":1}}],["force",{"2":{"41":1}}],["forcing",{"2":{"18":1}}],["forward",{"2":{"23":1}}],["formats",{"2":{"97":1}}],["formatting",{"2":{"42":1,"44":1,"46":1}}],["forms",{"2":{"58":1,"59":1}}],["form",{"2":{"8":1,"17":1,"18":1,"55":1,"127":2,"154":2}}],["for",{"0":{"16":1},"1":{"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1},"2":{"3":1,"5":1,"7":1,"8":2,"9":1,"10":1,"13":1,"14":2,"18":2,"20":1,"21":1,"22":1,"24":1,"28":1,"31":1,"35":2,"37":1,"38":4,"39":1,"44":2,"47":2,"50":1,"52":1,"55":3,"56":5,"57":1,"59":2,"60":1,"64":1,"67":1,"69":2,"79":2,"80":1,"81":1,"84":1,"87":2,"91":1,"95":1,"100":1,"101":1,"107":1,"109":2,"110":1,"119":1,"121":1,"123":1,"126":2,"128":2,"129":3,"132":1,"134":3,"136":1,"141":2,"149":1,"151":2,"153":2,"158":1,"159":1,"161":1,"163":1,"166":3,"168":1,"171":1,"172":1,"175":2,"176":1,"177":2,"180":1,"181":1}}],["friendly",{"2":{"129":1,"153":1}}],["frontmatter",{"2":{"143":1,"147":1,"148":1}}],["frontier",{"2":{"21":1,"24":1}}],["from",{"2":{"6":1,"12":1,"18":1,"39":1,"50":1,"52":1,"60":1,"61":1,"68":1,"71":1,"77":1,"85":1,"86":1,"87":1,"88":1,"92":1,"95":2,"102":2,"108":1,"111":1,"114":1,"116":1,"117":2,"126":1,"127":1,"129":1,"145":1,"147":1,"151":1,"153":1,"154":1,"159":2,"161":1,"166":2,"175":1,"176":1,"177":1,"180":2,"183":2}}],["freely",{"2":{"5":1,"22":1}}],["false",{"2":{"171":1}}],["fail",{"2":{"167":1}}],["failed",{"2":{"103":1}}],["favorite",{"2":{"38":1,"66":1}}],["faster",{"2":{"23":1}}],["fast",{"2":{"18":1}}],["factor",{"2":{"17":1,"61":1}}],["facts",{"2":{"6":1}}],["familiar",{"2":{"17":1,"93":1}}],["family",{"2":{"3":1}}],["featuring",{"2":{"46":1}}],["feature",{"2":{"38":1,"100":1,"119":1,"141":1}}],["features",{"0":{"2":1,"22":1,"31":1,"44":1,"50":1},"1":{"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1},"2":{"141":1,"163":1}}],["fetch",{"2":{"39":1,"166":1}}],["feb",{"2":{"25":1}}],["feedback",{"2":{"44":1}}],["feed",{"2":{"20":1}}],["feels",{"2":{"24":1}}],["feeling",{"2":{"18":1}}],["feel",{"2":{"17":1,"18":2}}],["feishu",{"0":{"32":1,"33":1,"73":1},"1":{"33":1,"34":1,"35":1,"36":1,"37":1},"2":{"1":1,"7":1,"22":1,"32":1,"33":1,"34":1,"36":3,"37":1,"38":1,"69":1,"73":3,"162":1,"163":1}}],["icon",{"2":{"130":2,"147":2}}],["ignore",{"2":{"61":1}}],["irreversible",{"2":{"57":1}}],["identifier",{"2":{"79":1,"95":1,"129":1,"159":1}}],["identity",{"0":{"4":1,"43":1,"49":1},"2":{"4":1,"8":1,"43":1,"49":2}}],["ids",{"2":{"39":1}}],["id",{"2":{"33":1,"36":1,"61":1,"79":1,"111":1,"118":1,"129":2,"139":1}}],["implementation",{"2":{"177":1}}],["import",{"2":{"111":2}}],["important",{"2":{"41":1,"55":1,"167":1}}],["impact",{"2":{"24":1}}],["immediately",{"2":{"74":1}}],["immediate",{"2":{"38":1}}],["image",{"2":{"78":1,"79":2,"98":1,"129":1,"166":2,"171":1}}],["images",{"0":{"98":1},"2":{"31":1,"44":1,"50":1,"166":1,"169":1,"170":1,"171":1}}],["imap",{"2":{"38":1}}],["im",{"2":{"35":2,"36":1}}],["if",{"2":{"18":1,"24":1,"31":1,"35":1,"43":1,"49":1,"54":1,"55":1,"56":2,"65":1,"73":1,"78":1,"89":3,"129":1,"140":1,"167":1,"170":1,"179":1}}],["i",{"2":{"18":7}}],["i18n",{"2":{"13":1}}],["inherit",{"2":{"161":1}}],["injected",{"2":{"148":1}}],["inquiries",{"2":{"91":1}}],["incremented",{"2":{"140":1}}],["incoming",{"2":{"89":1,"91":1}}],["included",{"2":{"182":1}}],["include",{"2":{"59":1,"112":1}}],["includes",{"2":{"15":1,"115":1,"120":1,"164":1,"182":1}}],["including",{"2":{"9":1,"57":1,"136":1}}],["initialize",{"2":{"78":1,"169":1}}],["involves",{"2":{"85":1}}],["invoked",{"2":{"63":1}}],["invalid",{"2":{"61":1}}],["invite",{"0":{"29":1}}],["input",{"2":{"42":1,"109":1,"129":1}}],["info",{"2":{"33":1,"52":1}}],["information",{"0":{"79":1},"2":{"8":1,"18":1,"35":1,"64":1,"113":1,"119":1,"122":1,"149":1,"156":1}}],["inference",{"2":{"21":1,"23":1,"24":1}}],["infrastructure",{"2":{"18":1,"20":1,"23":1,"24":1}}],["inflate",{"2":{"18":1}}],["integrated",{"2":{"93":1,"96":1}}],["integrating",{"2":{"32":1}}],["integration",{"2":{"31":1,"38":3}}],["intent",{"2":{"28":1}}],["intents",{"2":{"28":1}}],["intelligence",{"2":{"18":1}}],["internal",{"2":{"129":1}}],["internet",{"2":{"18":1}}],["intervention",{"2":{"132":1}}],["intervene",{"2":{"99":1}}],["interval",{"2":{"101":1,"102":1,"141":1}}],["interactions",{"2":{"113":1}}],["interaction",{"0":{"64":1,"91":1,"99":1,"105":1,"112":1,"123":1,"156":1,"161":1}}],["interact",{"2":{"26":1,"32":1,"38":1,"40":1,"56":1,"64":1,"66":1,"96":1}}],["interface",{"2":{"7":1,"22":1,"38":1,"104":1}}],["interfering",{"2":{"5":1}}],["into",{"2":{"17":1,"18":1,"36":1,"48":1,"73":1,"95":1,"117":1,"138":1,"143":1,"148":1}}],["introduction",{"0":{"16":1},"1":{"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1},"2":{"25":1}}],["inbox",{"0":{"12":1},"2":{"12":1,"89":1}}],["inbound",{"2":{"7":1,"36":1,"73":1}}],["inspect",{"2":{"58":1,"64":1,"160":1}}],["inspection",{"2":{"8":1}}],["instruction",{"2":{"134":1,"141":1}}],["instance",{"2":{"78":1,"79":1,"128":1,"183":1}}],["install",{"0":{"166":1,"167":1},"1":{"168":1},"2":{"76":1,"164":1,"166":3,"168":1,"171":1}}],["installation",{"0":{"15":1,"164":1},"1":{"165":1,"166":1,"167":1,"168":1,"169":1,"170":1,"171":1,"172":1,"173":1,"174":1},"2":{"163":2}}],["instead",{"2":{"64":1}}],["instinct",{"2":{"18":1}}],["inside",{"2":{"8":1,"92":1,"123":1,"164":1}}],["indicators",{"2":{"42":1,"44":1}}],["individual",{"2":{"4":1}}],["indexing",{"2":{"21":1,"23":1}}],["index",{"2":{"21":1}}],["independent",{"2":{"1":1,"8":1,"10":1,"51":1,"107":1,"157":1,"160":1}}],["in",{"0":{"175":1,"176":1,"177":1},"1":{"176":1,"177":1,"178":2,"179":1,"180":1},"2":{"3":1,"4":1,"5":1,"7":1,"8":1,"10":1,"12":1,"18":1,"20":1,"22":3,"23":1,"24":1,"27":1,"29":1,"30":1,"32":1,"33":2,"34":1,"36":3,"37":2,"38":1,"39":1,"41":1,"42":1,"43":2,"46":1,"47":1,"48":1,"49":1,"52":2,"55":1,"56":1,"57":1,"59":1,"60":2,"61":3,"64":1,"65":1,"68":1,"71":1,"73":1,"75":1,"77":1,"78":1,"79":1,"81":1,"82":1,"86":1,"87":1,"88":1,"91":2,"92":1,"97":2,"98":1,"99":1,"102":2,"108":1,"111":1,"112":1,"114":2,"115":3,"116":1,"117":1,"118":1,"123":1,"126":1,"127":1,"129":1,"130":1,"137":1,"138":1,"145":1,"146":2,"151":1,"153":1,"154":2,"159":1,"162":1,"167":1,"168":2,"169":1,"170":1,"171":1,"172":1,"174":2,"175":1,"176":2,"177":1,"179":1,"181":1,"182":3,"183":1,"184":1}}],["italic",{"2":{"44":1,"50":1}}],["iterate",{"2":{"23":1}}],["itself",{"2":{"99":1,"138":1}}],["its",{"2":{"1":2,"5":1,"10":1,"22":1,"51":1,"53":2,"55":1,"56":2,"57":1,"61":1,"62":1,"72":1,"75":1,"89":1,"91":1,"92":2,"95":1,"99":2,"101":1,"105":2,"107":1,"112":1,"123":1,"127":1,"133":1,"140":1,"147":1,"154":1,"156":1,"160":1,"162":1,"177":1,"178":1,"179":1,"181":1}}],["it",{"2":{"1":1,"18":9,"23":2,"24":1,"26":1,"27":2,"29":2,"40":1,"41":2,"43":2,"49":1,"54":1,"61":1,"66":1,"67":1,"73":1,"76":1,"78":1,"79":1,"80":1,"83":1,"91":2,"97":1,"100":2,"105":1,"125":1,"130":1,"133":2,"134":1,"142":1,"149":1,"150":1,"158":1,"167":1,"175":2,"177":1}}],["issue",{"2":{"103":1}}],["isolated",{"0":{"76":1},"2":{"5":1,"21":1,"22":1,"23":1,"51":1,"75":1,"92":1,"162":1}}],["isolation",{"0":{"5":1},"2":{"75":1}}],["is",{"0":{"1":1},"2":{"1":1,"17":1,"18":3,"19":1,"21":2,"22":2,"24":2,"37":1,"41":1,"43":1,"46":1,"49":2,"51":1,"55":1,"57":1,"58":1,"59":1,"61":1,"64":1,"80":1,"81":1,"99":1,"101":2,"102":1,"112":1,"119":1,"120":1,"128":1,"132":1,"133":1,"134":1,"140":3,"143":1,"150":1,"158":1,"162":1,"163":1,"164":1,"167":2,"170":1,"175":1,"177":1,"179":1,"180":1,"182":1,"184":1}}],["elements",{"2":{"58":1}}],["else",{"2":{"18":1,"20":1}}],["effort",{"2":{"56":2}}],["errors",{"2":{"61":1,"104":1}}],["error",{"2":{"54":1,"103":1}}],["e",{"2":{"39":1,"47":3,"87":1,"94":1,"97":1,"98":1,"109":2,"110":1,"126":2,"129":3,"134":3,"140":1,"153":2,"159":1,"166":1,"171":1,"172":1}}],["edge",{"2":{"23":1}}],["editor",{"2":{"93":1,"97":1,"146":1}}],["editing",{"0":{"96":1,"147":1},"1":{"97":1,"98":1},"2":{"78":1,"175":1}}],["edit",{"2":{"1":1,"8":1,"22":1,"62":1,"97":1,"118":1,"127":1,"130":2,"147":1,"154":1,"160":1,"162":1,"167":1,"178":1,"180":1}}],["easily",{"2":{"148":1}}],["easy",{"2":{"22":1}}],["each",{"2":{"3":1,"4":1,"5":2,"6":1,"10":1,"22":3,"23":1,"39":1,"41":1,"69":1,"107":1,"123":1,"141":1,"162":1}}],["even",{"2":{"100":1}}],["event",{"2":{"36":1,"73":1}}],["events",{"0":{"36":1},"2":{"36":1,"110":1}}],["eventually",{"2":{"18":1}}],["everything",{"2":{"21":1,"24":1,"164":1}}],["every",{"2":{"1":1,"17":1,"18":1,"20":1,"22":1,"75":1,"92":1,"103":1,"135":5,"138":1,"139":1}}],["evolves",{"2":{"18":1}}],["economics",{"2":{"18":1}}],["embedded",{"2":{"164":1}}],["embedding",{"2":{"9":1,"56":1,"123":1,"128":2,"129":2,"175":2,"177":2}}],["embed",{"2":{"29":1,"129":1}}],["empty",{"2":{"18":1,"134":1}}],["emails",{"2":{"84":1,"89":2,"90":1,"91":1,"138":1,"139":2}}],["email",{"0":{"84":1,"85":1,"86":1,"88":1},"1":{"85":1,"86":1,"87":2,"88":1,"89":2,"90":1,"91":1},"2":{"1":1,"7":1,"38":2,"85":5,"86":2,"87":3,"88":2,"89":3,"90":5,"91":3}}],["endpoint",{"2":{"110":1}}],["ending",{"2":{"47":1}}],["env",{"2":{"109":1,"167":1}}],["environments",{"2":{"174":1}}],["environment",{"0":{"171":1},"2":{"23":1,"56":1,"58":1,"75":1,"77":1,"80":1,"109":1,"166":1}}],["encountered",{"2":{"103":1}}],["ensure",{"2":{"81":1}}],["ensures",{"2":{"75":1}}],["enabling",{"2":{"67":1,"100":1,"149":1}}],["enables",{"2":{"61":1,"144":1}}],["enabled",{"2":{"42":2,"56":2,"89":3,"102":1,"134":1,"136":1,"139":1}}],["enable",{"0":{"34":1},"2":{"8":1,"28":1,"30":1,"34":1,"35":1,"39":1,"42":3,"48":1,"56":1,"72":1,"74":2,"111":1,"129":1}}],["en",{"2":{"61":1}}],["engines",{"0":{"151":1},"2":{"149":1,"151":2}}],["engine",{"2":{"55":1,"56":1,"153":2}}],["engineered",{"2":{"6":1}}],["engineering",{"0":{"6":1},"2":{"22":1}}],["entity",{"2":{"160":1}}],["entities",{"2":{"157":1}}],["entire",{"2":{"53":1,"148":1}}],["entries",{"2":{"104":1,"118":1,"184":1}}],["enterprise",{"2":{"32":1,"38":1}}],["enter",{"2":{"17":1,"33":1,"117":1}}],["enough",{"2":{"18":1}}],["exa",{"2":{"151":1}}],["exact",{"2":{"129":1}}],["examples",{"2":{"135":1}}],["example",{"0":{"144":1},"2":{"119":1}}],["existing",{"2":{"83":1,"118":1,"160":1}}],["exist",{"2":{"78":1}}],["executable",{"2":{"109":1}}],["executing",{"2":{"78":1}}],["executions",{"2":{"134":1}}],["execution",{"0":{"140":1},"2":{"11":1,"21":1,"103":1,"136":1,"141":1,"158":1}}],["executes",{"2":{"109":1,"133":1,"140":1}}],["execute",{"2":{"1":1,"5":1,"8":1,"22":1,"75":1,"76":1,"101":1,"102":1}}],["expression",{"2":{"134":1,"138":1,"141":1}}],["expressions",{"2":{"11":1,"22":1,"132":1}}],["explanation",{"2":{"134":1,"159":1}}],["explicit",{"2":{"21":1,"23":1}}],["exposed",{"2":{"112":1}}],["export",{"2":{"8":1,"64":1,"111":2}}],["expensive",{"2":{"20":1}}],["experienced",{"2":{"23":1}}],["experience",{"2":{"17":1,"93":1}}],["extending",{"0":{"107":1}}],["external",{"2":{"10":1,"39":1,"106":1,"107":1,"132":1,"149":1}}],["extraction",{"2":{"175":2,"177":1,"181":1}}],["extract",{"2":{"117":1,"180":1}}],["extracts",{"2":{"6":1}}],["extra",{"2":{"15":1}}],["older",{"2":{"104":1,"119":1}}],["old",{"2":{"104":1}}],["ok",{"2":{"103":1}}],["okay",{"2":{"18":1}}],["observe",{"2":{"64":1}}],["obtain",{"2":{"39":1}}],["o1",{"2":{"56":1,"129":1}}],["optimize",{"2":{"119":1}}],["optionally",{"2":{"56":1,"119":1,"123":1}}],["optional",{"0":{"43":1,"49":1},"2":{"42":1,"61":4,"134":1,"141":1,"177":2}}],["opt",{"2":{"109":1}}],["operates",{"2":{"75":1}}],["operate",{"2":{"24":1,"161":1}}],["operations",{"0":{"74":1,"77":1,"93":1,"111":1,"116":1,"160":1},"1":{"78":1,"94":1,"95":1,"117":1,"118":1},"2":{"8":1,"10":1,"78":1,"99":1,"180":1}}],["openssl",{"2":{"167":1}}],["open",{"2":{"24":1,"29":1,"32":1,"33":1,"41":1,"45":1,"47":1,"49":1,"58":1,"63":1,"97":1,"114":1,"146":1,"160":1,"179":1,"183":2}}],["openclaw",{"0":{"23":1},"2":{"23":1}}],["openai",{"2":{"9":2,"56":1,"125":1,"126":2,"129":3}}],["oauth2",{"2":{"29":1}}],["oem",{"2":{"18":1}}],["os",{"2":{"18":1}}],["occasional",{"2":{"18":1}}],["output",{"2":{"109":1}}],["outbox",{"0":{"90":1},"2":{"90":1,"91":1}}],["outbound",{"2":{"7":1}}],["outgoing",{"2":{"89":1,"91":1}}],["outside",{"2":{"38":1}}],["out",{"2":{"18":1}}],["our",{"2":{"17":1,"18":1}}],["override",{"2":{"172":1}}],["overlay",{"2":{"168":1}}],["over",{"2":{"17":1,"110":1,"119":1}}],["overview",{"0":{"17":1,"38":1,"54":1},"1":{"39":1},"2":{"54":1}}],["only",{"2":{"41":1,"56":1,"64":1,"119":1,"174":1,"177":1,"182":1}}],["online",{"2":{"24":1}}],["once",{"2":{"37":1,"41":1,"53":1,"58":1,"112":1,"150":1,"180":1}}],["on",{"0":{"16":1},"1":{"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1},"2":{"15":1,"17":2,"18":1,"20":1,"21":1,"24":2,"39":2,"41":1,"47":1,"49":1,"53":1,"64":1,"67":1,"69":1,"71":1,"91":1,"95":1,"102":1,"109":1,"127":1,"129":1,"134":1,"153":1,"154":1,"157":1,"159":1,"164":1,"167":1,"170":1}}],["one",{"0":{"166":1},"2":{"15":1,"24":1,"46":1,"59":1,"124":2,"181":1,"183":1}}],["often",{"2":{"102":1}}],["official",{"0":{"45":1},"2":{"29":1,"36":1,"40":1,"47":2,"166":1}}],["off",{"2":{"18":1,"102":1}}],["of",{"2":{"6":1,"8":1,"9":1,"17":2,"18":3,"22":1,"46":1,"54":1,"55":1,"56":1,"64":1,"77":1,"79":1,"80":1,"83":1,"90":2,"103":2,"105":2,"107":1,"109":2,"110":2,"119":1,"121":1,"122":1,"126":2,"134":3,"135":3,"138":1,"142":1,"159":2,"160":1,"172":1,"183":1}}],["other",{"2":{"3":1,"5":1,"12":1,"13":1,"22":1,"75":1,"141":1,"151":1,"153":1}}],["orchestrated",{"2":{"164":1}}],["oriented",{"2":{"141":1}}],["organization",{"2":{"35":1}}],["or",{"2":{"1":1,"3":3,"8":1,"15":1,"22":2,"32":1,"39":1,"50":1,"52":1,"54":1,"59":2,"61":2,"64":2,"72":2,"75":2,"78":1,"79":1,"81":1,"85":1,"91":1,"95":2,"99":1,"101":1,"102":1,"103":2,"104":1,"105":1,"110":1,"111":2,"118":1,"119":1,"125":1,"127":1,"128":1,"129":1,"132":1,"147":1,"148":1,"150":1,"157":1,"158":1,"160":1,"162":1,"164":1,"167":1,"172":1,"178":1,"180":1}}],["ownership",{"2":{"3":1}}],["owner",{"2":{"3":1,"52":1,"123":1}}],["own",{"2":{"1":3,"5":1,"10":1,"13":1,"22":3,"51":1,"56":1,"75":1,"89":1,"92":1,"99":1,"107":1,"151":1,"157":1,"161":1,"162":2}}],["leave",{"2":{"134":1}}],["leaving",{"2":{"96":1}}],["least",{"2":{"124":2}}],["lets",{"2":{"64":1}}],["level",{"2":{"56":1}}],["left",{"2":{"27":1,"33":1}}],["less",{"2":{"24":1}}],["ll",{"2":{"18":1}}],["llms",{"2":{"18":1}}],["llm",{"0":{"9":1,"124":1,"125":1},"1":{"125":1,"126":2,"127":2,"128":1,"129":1,"130":1,"131":1},"2":{"9":1,"23":1,"55":1,"56":1,"102":1,"124":1,"125":1,"175":1}}],["list",{"2":{"71":1,"82":1,"83":1,"94":1,"109":1,"118":1,"127":1,"129":2,"130":1,"136":2,"159":1}}],["limit",{"2":{"56":2,"134":1,"141":1}}],["limits",{"2":{"11":1,"172":2}}],["linux",{"2":{"170":1}}],["link",{"2":{"85":1}}],["linked",{"2":{"49":1}}],["links",{"2":{"29":1,"44":1,"50":1,"59":1,"163":1}}],["line",{"2":{"7":1,"14":1,"90":1,"109":1,"168":1}}],["lifecycle",{"0":{"78":1},"2":{"53":1,"77":1}}],["life",{"2":{"18":1}}],["live",{"2":{"18":1}}],["lighter",{"2":{"23":1}}],["light",{"2":{"13":1}}],["like",{"2":{"1":1,"18":1,"21":1,"22":1,"24":2,"36":1,"56":1,"59":1,"64":1,"78":1,"85":1,"125":1,"128":1,"150":1,"158":1}}],["lost",{"2":{"57":1}}],["login",{"2":{"169":1}}],["logs",{"0":{"103":1,"104":1},"1":{"104":1},"2":{"104":1,"105":1,"170":2,"173":2}}],["log",{"2":{"33":1,"41":1,"90":1,"103":1,"104":1}}],["loading",{"2":{"56":1}}],["load",{"2":{"56":1,"104":2}}],["loaded",{"2":{"22":1,"56":1}}],["loads",{"2":{"6":1}}],["localhost",{"2":{"169":4}}],["locale",{"2":{"56":1,"58":1,"61":2}}],["local",{"0":{"109":1},"2":{"19":1,"20":1,"21":1,"23":1,"24":1,"95":2,"109":1}}],["looked",{"2":{"18":1}}],["low",{"2":{"18":1,"56":1}}],["longer",{"2":{"18":1,"62":1,"118":1,"178":1}}],["long",{"2":{"1":1,"17":1,"20":1,"24":1,"65":1,"103":1,"113":1,"123":1,"162":1,"181":1}}],["launch",{"2":{"78":1}}],["later",{"2":{"80":1}}],["latest",{"2":{"25":1,"94":1,"104":1,"166":1,"170":1,"171":1}}],["late",{"2":{"18":1}}],["latency",{"2":{"17":1}}],["languages",{"2":{"97":1}}],["language",{"2":{"6":1,"56":2,"134":1,"138":1,"141":1}}],["last",{"2":{"6":1,"22":1}}],["layer",{"2":{"6":1,"18":1,"19":1}}],["lark",{"0":{"32":1},"1":{"33":1,"34":1,"35":1,"36":1,"37":1},"2":{"1":1,"4":1,"7":1,"22":1,"32":1,"38":1,"69":1,"162":1}}],["two",{"2":{"85":1,"137":1}}],["tune",{"2":{"122":1}}],["tutorial",{"2":{"47":1}}],["turning",{"2":{"18":1}}],["turn",{"2":{"6":1,"17":1,"22":1}}],["typical",{"2":{"59":1}}],["typing",{"2":{"42":1,"44":1}}],["type",{"2":{"43":1,"49":1,"52":1,"87":1,"109":1,"110":1,"111":1,"129":2,"176":1,"177":1,"182":1}}],["types",{"0":{"108":1},"1":{"109":1,"110":1},"2":{"9":1,"44":1,"182":1,"183":1}}],["timing",{"2":{"141":1}}],["timezone",{"2":{"58":1,"61":2}}],["timestamp",{"2":{"90":1}}],["timestamps",{"2":{"83":1}}],["times",{"2":{"11":1,"22":1,"134":1}}],["time",{"0":{"18":1,"150":1},"2":{"8":1,"13":1,"18":3,"56":2,"79":1,"103":1,"119":2,"149":1,"156":1}}],["tiny",{"2":{"18":1}}],["t",{"2":{"18":6,"20":2,"78":1,"100":1}}],["trusted",{"2":{"174":1}}],["true",{"2":{"139":1,"171":1}}],["tree",{"2":{"93":1}}],["treat",{"2":{"23":1}}],["triggering",{"2":{"132":1}}],["triggered",{"2":{"103":1,"133":1}}],["trigger",{"2":{"91":1,"101":1,"102":1,"141":1}}],["triggers",{"2":{"11":1,"134":1,"140":1}}],["troubleshooting",{"0":{"173":1},"2":{"91":1}}],["troubleshoot",{"2":{"54":1}}],["traits",{"2":{"143":1}}],["trash",{"2":{"130":1,"147":1}}],["translate",{"2":{"138":1}}],["transport",{"2":{"110":1}}],["transfer",{"2":{"3":1,"95":1}}],["tracked",{"2":{"91":1}}],["traditional",{"2":{"87":1}}],["trade",{"2":{"18":1}}],["trapped",{"2":{"20":1}}],["travels",{"2":{"18":1}}],["than",{"2":{"23":1,"119":1}}],["that",{"2":{"8":1,"17":1,"18":8,"19":1,"24":4,"38":1,"49":1,"51":1,"56":1,"63":1,"67":1,"99":1,"101":1,"103":1,"105":1,"118":1,"123":1,"128":1,"131":1,"134":1,"138":1,"150":1,"179":1,"181":1,"183":1}}],["through",{"2":{"22":2,"38":1,"40":1,"46":1,"53":1,"58":1,"115":1}}],["threshold",{"2":{"122":1}}],["threads",{"2":{"18":1}}],["three",{"2":{"17":1}}],["thing",{"2":{"18":1,"24":1}}],["thinking",{"2":{"56":1,"141":1}}],["thinks",{"2":{"50":1}}],["think",{"2":{"18":1,"101":1}}],["this",{"2":{"18":2,"25":1,"27":1,"32":1,"36":1,"46":1,"47":1,"56":1,"57":2,"60":1,"64":1,"73":2,"75":1,"78":1,"80":1,"82":1,"92":1,"101":1,"102":1,"109":1,"110":1,"126":1,"132":1,"134":1,"136":1,"138":1,"159":1,"161":1,"167":1,"168":1,"169":1,"176":1,"177":1}}],["those",{"2":{"17":1}}],["these",{"2":{"55":2,"99":1,"112":1,"143":1}}],["they",{"2":{"20":2,"142":1,"157":1}}],["then",{"2":{"18":1,"33":1,"133":1,"167":1}}],["there",{"2":{"18":1}}],["their",{"2":{"5":1,"20":1,"22":2,"83":1,"136":1,"157":1,"161":1}}],["the",{"0":{"16":1,"29":1,"55":1,"76":1,"138":1,"139":1},"1":{"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1},"2":{"1":1,"4":1,"6":1,"8":1,"12":2,"14":1,"15":1,"17":4,"18":12,"20":1,"21":2,"22":3,"23":3,"24":2,"25":1,"27":2,"28":2,"29":3,"30":1,"32":1,"33":2,"34":1,"35":1,"36":3,"37":3,"38":5,"39":5,"41":3,"42":1,"43":1,"46":1,"47":3,"48":3,"49":3,"50":4,"52":6,"54":3,"55":11,"56":13,"57":5,"58":3,"59":1,"60":4,"61":3,"63":5,"64":4,"68":2,"71":5,"72":2,"74":3,"75":2,"76":3,"77":3,"78":8,"79":6,"80":3,"81":2,"82":4,"83":1,"86":2,"87":4,"88":2,"89":7,"90":7,"91":3,"92":2,"93":1,"94":4,"95":3,"96":3,"97":4,"98":1,"99":3,"100":1,"101":2,"102":9,"103":6,"104":2,"105":4,"106":1,"108":2,"109":3,"110":3,"111":3,"112":6,"114":5,"115":3,"116":2,"117":2,"118":1,"119":3,"120":2,"121":2,"122":2,"123":7,"125":1,"126":9,"127":5,"129":9,"130":3,"133":2,"134":10,"135":1,"136":4,"138":4,"139":2,"140":9,"142":2,"143":1,"144":2,"145":2,"146":2,"147":3,"148":5,"149":1,"151":2,"153":5,"154":5,"155":4,"156":3,"157":1,"158":1,"159":7,"160":2,"161":3,"162":1,"164":3,"166":6,"167":1,"168":3,"170":1,"171":1,"174":1,"175":4,"176":4,"177":4,"179":5,"180":3,"181":1,"182":4,"183":5,"184":2}}],["theme",{"2":{"13":1}}],["them",{"2":{"1":1,"6":1,"55":1,"95":1,"111":1,"115":1,"162":1}}],["tag",{"2":{"166":1,"171":1}}],["task",{"0":{"158":1},"2":{"84":1,"102":1,"103":1,"132":1,"134":3,"141":1}}],["tasks",{"0":{"11":1,"132":1},"1":{"133":1,"134":1,"135":1,"136":1,"137":1,"138":1,"139":1,"140":1,"141":1},"2":{"3":1,"8":1,"11":1,"22":2,"51":1,"79":2,"100":1,"105":1,"112":1,"132":1,"141":1,"157":1}}],["target",{"2":{"39":1,"44":1}}],["tabs",{"2":{"53":1}}],["tab",{"0":{"54":1,"56":1},"2":{"30":1,"36":1,"42":1,"48":1,"54":1,"55":1,"56":1,"57":1,"63":1,"64":1,"68":1,"77":1,"79":1,"88":1,"90":1,"92":1,"99":1,"102":1,"103":1,"108":1,"114":2,"116":1,"120":1,"136":1,"145":1,"155":1,"159":1,"179":1,"180":1,"181":1,"183":2}}],["takes",{"2":{"53":1}}],["take",{"2":{"18":1,"169":1}}],["talks",{"2":{"55":1}}],["talk",{"2":{"18":1}}],["tailwind",{"2":{"13":1}}],["tavily",{"2":{"8":1,"151":1}}],["template",{"2":{"146":1,"166":1}}],["temporary",{"2":{"78":1}}],["tech",{"2":{"134":1}}],["testing",{"2":{"80":1}}],["term",{"2":{"65":1,"113":1,"123":1,"181":1}}],["terminal",{"2":{"14":1}}],["teammate",{"2":{"158":1}}],["team",{"2":{"23":1}}],["teams",{"2":{"3":1}}],["textarea",{"2":{"117":1}}],["text",{"0":{"97":1},"2":{"18":1,"31":1,"44":1,"97":1,"118":1,"128":1,"129":1}}],["tension",{"2":{"17":1}}],["telegram",{"0":{"46":1,"47":1},"1":{"47":1,"48":1,"49":1,"50":1},"2":{"1":1,"4":1,"7":1,"22":1,"38":1,"39":1,"46":2,"47":3,"48":1,"49":3,"67":1,"69":1,"134":1,"139":1,"162":1,"163":1}}],["total",{"2":{"134":1}}],["today",{"2":{"134":1}}],["top",{"0":{"121":1},"2":{"134":1}}],["toml",{"2":{"97":1,"163":1,"166":1,"167":4,"168":2,"169":1,"171":2,"172":1}}],["toggle",{"2":{"74":1,"102":1,"111":1}}],["tokens",{"2":{"39":1,"56":1,"72":1}}],["token",{"2":{"27":3,"30":1,"47":3,"48":1,"56":1,"126":1,"159":1}}],["took",{"2":{"103":1}}],["too",{"2":{"18":3}}],["toolbar",{"2":{"93":1}}],["tool",{"0":{"14":1},"2":{"10":1,"13":1,"14":1,"21":1,"106":1,"138":1,"144":1,"150":1,"161":1}}],["tools",{"2":{"8":2,"10":1,"18":1,"23":1,"51":1,"58":1,"63":1,"64":1,"78":1,"99":1,"101":1,"105":1,"107":1,"112":2,"120":1,"133":1,"140":1,"142":1,"143":1,"144":1,"148":1}}],["to",{"0":{"16":1,"23":1,"29":1,"63":1,"155":1,"179":1},"1":{"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1},"2":{"1":1,"3":1,"4":1,"7":1,"8":1,"10":1,"11":1,"13":1,"15":1,"17":1,"18":2,"20":2,"22":3,"23":1,"24":1,"26":2,"27":3,"28":2,"29":3,"30":1,"31":1,"32":1,"33":2,"34":1,"35":1,"36":2,"37":2,"38":1,"39":3,"40":2,"41":2,"42":1,"43":3,"46":1,"47":2,"48":1,"49":4,"50":1,"52":3,"53":1,"54":1,"55":2,"56":2,"57":3,"58":3,"60":1,"61":1,"63":2,"65":1,"66":2,"67":1,"69":1,"73":2,"75":1,"78":2,"80":1,"82":1,"83":2,"84":1,"85":3,"87":1,"89":1,"90":1,"91":3,"94":1,"95":3,"96":1,"97":3,"98":1,"99":2,"100":2,"101":1,"102":1,"103":1,"104":1,"106":2,"107":1,"109":1,"110":1,"111":2,"112":1,"113":1,"117":1,"119":2,"120":1,"123":1,"124":2,"125":1,"126":1,"127":1,"128":1,"129":1,"130":3,"131":1,"132":1,"133":3,"134":2,"136":2,"138":2,"139":1,"140":1,"144":1,"147":3,"148":1,"149":3,"150":1,"151":1,"153":2,"155":2,"156":2,"157":1,"158":1,"159":1,"160":1,"161":1,"162":1,"163":1,"164":2,"166":1,"167":1,"170":1,"171":4,"172":1,"175":1,"176":1,"179":2,"180":2,"181":1,"184":2}}],["wrote",{"2":{"18":1}}],["write",{"2":{"5":1,"8":1,"89":1,"99":1,"144":1}}],["ways",{"2":{"137":1}}],["way",{"2":{"91":1,"107":1,"164":1}}],["warnings",{"0":{"174":1}}],["warning",{"2":{"54":1,"57":1}}],["walks",{"2":{"46":1}}],["want",{"2":{"20":2,"24":1,"29":1}}],["wanted",{"2":{"18":2}}],["wasn",{"2":{"18":1}}],["was",{"2":{"18":1,"90":1,"103":1}}],["wait",{"2":{"18":1}}],["works",{"2":{"175":1}}],["workspace",{"0":{"76":1},"2":{"99":1,"161":1,"166":2}}],["working",{"2":{"109":1}}],["workflows",{"2":{"17":1,"38":1,"175":1}}],["worse",{"2":{"18":1}}],["world",{"2":{"17":1,"38":1}}],["well",{"2":{"175":1}}],["week",{"2":{"135":1}}],["were",{"2":{"18":1}}],["weight",{"2":{"18":1}}],["we",{"2":{"17":2,"18":2,"21":1,"23":2,"24":2}}],["webp",{"2":{"98":1}}],["websites",{"2":{"59":1,"64":1}}],["webhook",{"0":{"36":1,"73":1},"2":{"7":1,"36":2,"73":2}}],["web",{"2":{"1":1,"4":1,"7":2,"8":1,"10":1,"13":1,"15":1,"30":1,"38":1,"42":1,"43":1,"48":1,"49":1,"55":1,"56":2,"96":1,"140":1,"149":1,"151":1,"162":1,"164":1,"169":1,"182":1}}],["which",{"2":{"133":1}}],["while",{"2":{"18":1,"44":1,"158":1,"169":1}}],["whether",{"2":{"79":1,"90":1,"103":1,"134":1}}],["when",{"2":{"18":2,"21":1,"63":1,"64":1,"100":1,"103":1,"115":1,"133":1,"134":2,"140":1,"156":1,"166":1,"168":1}}],["where",{"2":{"17":1,"18":1,"23":2,"53":1}}],["why",{"0":{"20":1},"2":{"18":1}}],["who",{"2":{"14":1,"168":1}}],["what",{"0":{"1":1,"19":1},"2":{"17":2,"18":1,"134":1,"142":1,"163":1}}],["window",{"2":{"119":1}}],["width",{"2":{"61":2}}],["wide",{"2":{"9":1}}],["will",{"2":{"24":1,"36":1,"41":1,"47":1,"52":1,"57":1,"73":1,"78":1,"82":1,"112":1,"114":1,"138":1,"146":1,"156":2,"166":1,"167":1,"179":1}}],["without",{"2":{"5":1,"18":2,"72":1,"75":1,"96":1,"111":1,"114":1,"132":1,"148":1,"167":1}}],["within",{"2":{"1":1,"5":1,"22":1,"75":1,"76":1,"94":1,"143":1,"161":1}}],["with",{"0":{"99":1},"2":{"1":1,"3":3,"5":2,"7":2,"8":2,"13":1,"15":1,"17":2,"18":1,"19":1,"21":1,"22":3,"24":1,"26":1,"31":1,"32":2,"38":2,"40":1,"41":1,"43":1,"44":1,"47":1,"49":2,"51":1,"55":1,"56":1,"61":1,"64":1,"65":1,"66":1,"83":1,"89":1,"93":1,"95":1,"96":1,"100":1,"115":1,"135":1,"140":1,"143":1,"146":1,"157":1,"158":1,"161":2,"162":2,"164":1,"166":1,"167":1,"170":1,"172":1,"174":1,"175":2,"180":1,"182":1,"184":1}}],["cpu",{"2":{"172":1}}],["cp",{"2":{"167":1}}],["cd",{"2":{"167":1}}],["cdf",{"0":{"122":1}}],["cwd",{"2":{"109":1}}],["certs",{"2":{"172":1}}],["certain",{"2":{"119":1}}],["certificates",{"2":{"61":1}}],["ceiling",{"2":{"20":1}}],["cn",{"2":{"61":1,"166":2,"168":3,"171":1}}],["c2c",{"2":{"44":1}}],["cumulative",{"0":{"122":1}}],["curl",{"2":{"166":3}}],["curve",{"0":{"122":1}}],["current",{"2":{"64":1,"80":1,"94":1,"134":1,"140":1}}],["currently",{"2":{"38":1,"79":1,"134":1,"177":1,"182":1,"184":1}}],["custom",{"2":{"33":1,"36":1,"61":1,"110":1,"141":1}}],["clear",{"2":{"104":1}}],["clean",{"2":{"104":1,"144":1}}],["cleaning",{"2":{"101":1}}],["cleaner",{"2":{"18":1}}],["clone",{"2":{"166":1,"167":1}}],["cloud",{"2":{"19":1,"20":1,"21":1,"23":1,"24":1}}],["closed",{"2":{"18":1}}],["class",{"2":{"18":1}}],["clash",{"2":{"18":1}}],["clicks",{"2":{"18":1}}],["click",{"0":{"166":1},"2":{"15":1,"27":2,"30":2,"33":2,"34":1,"35":1,"36":1,"37":1,"41":1,"42":2,"43":1,"48":2,"49":1,"52":2,"55":1,"57":1,"58":1,"60":2,"63":1,"64":1,"71":1,"81":1,"82":1,"87":2,"89":2,"95":1,"97":2,"98":1,"111":1,"114":1,"126":2,"129":2,"130":2,"136":1,"146":2,"147":2,"153":1,"155":1,"176":2,"179":1}}],["clicking",{"2":{"8":1,"53":1,"59":1}}],["client",{"2":{"9":1,"129":1}}],["cli",{"0":{"14":1},"2":{"1":1,"7":1,"14":1,"162":1}}],["china",{"0":{"168":1},"2":{"166":1,"168":2,"171":1}}],["checklist",{"0":{"172":1}}],["checking",{"2":{"132":1}}],["checks",{"2":{"101":1}}],["check",{"2":{"54":2,"89":1,"141":1,"166":1}}],["cheap",{"2":{"20":1}}],["choose",{"2":{"36":1,"39":1,"47":2,"52":1,"87":1,"110":1,"111":1}}],["choices",{"2":{"18":1}}],["chart",{"0":{"121":1}}],["change",{"2":{"71":1,"167":1,"169":1,"172":1,"174":1}}],["changes",{"2":{"28":1,"80":1,"94":1,"97":1}}],["channels",{"0":{"38":1,"66":1,"68":1},"1":{"39":1,"67":1,"68":1,"69":2,"70":1,"71":1,"72":1,"73":1,"74":1},"2":{"8":1,"12":1,"13":1,"30":1,"36":1,"38":3,"42":1,"48":1,"51":1,"66":1,"67":1,"68":1,"163":2}}],["channel",{"0":{"26":1,"32":1,"40":1,"46":1,"71":1,"85":1},"1":{"27":1,"28":1,"29":1,"30":1,"31":1,"33":1,"34":1,"35":1,"36":1,"37":1,"41":1,"42":1,"43":1,"44":1,"45":1,"47":1,"48":1,"49":1,"50":1},"2":{"7":1,"12":1,"14":1,"22":1,"30":1,"36":1,"39":3,"42":1,"44":1,"48":1,"54":1,"71":2,"72":1,"74":3,"84":1,"133":1,"134":1,"140":1}}],["chatting",{"2":{"100":1}}],["chatbox",{"2":{"23":1}}],["chats",{"2":{"4":1,"32":1,"52":1}}],["chat",{"2":{"1":1,"3":1,"7":2,"9":2,"13":1,"14":1,"22":2,"31":1,"35":2,"38":1,"43":1,"49":2,"51":1,"55":1,"56":2,"66":1,"67":1,"91":1,"102":1,"123":1,"128":1,"129":3,"162":1,"175":1,"177":1}}],["circling",{"2":{"17":1}}],["css",{"2":{"13":1}}],["cache",{"2":{"173":1}}],["categorize",{"2":{"148":1}}],["category",{"2":{"18":1}}],["capturing",{"2":{"59":1}}],["captured",{"2":{"82":1}}],["capture",{"2":{"58":1,"80":1}}],["capability",{"0":{"34":1},"2":{"17":1,"19":1,"21":1,"151":1}}],["capabilities",{"0":{"8":1,"107":1},"2":{"6":1,"34":1,"35":1,"56":2,"88":1,"129":1,"142":1,"144":1,"148":1}}],["card",{"2":{"53":1,"147":1}}],["carry",{"2":{"18":1}}],["caught",{"2":{"18":1}}],["cases",{"2":{"59":1}}],["case",{"0":{"16":1,"73":1},"1":{"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1},"2":{"141":1}}],["called",{"2":{"138":1}}],["callback",{"2":{"36":1,"73":1}}],["calls",{"2":{"21":1,"134":2,"139":1,"140":2,"141":1}}],["call",{"2":{"13":1,"156":1}}],["cannot",{"2":{"168":1}}],["can",{"2":{"1":1,"3":1,"4":1,"5":1,"8":1,"10":1,"17":1,"18":5,"22":3,"23":2,"38":1,"41":1,"50":1,"51":1,"53":1,"56":2,"58":2,"63":1,"64":1,"67":1,"76":1,"89":6,"91":1,"92":1,"99":1,"102":1,"105":1,"107":1,"119":1,"123":1,"131":1,"133":1,"138":1,"139":1,"140":1,"142":1,"144":1,"150":1,"156":1,"158":1,"166":1,"180":1,"181":1}}],["creation",{"2":{"83":1,"175":1}}],["creating",{"0":{"52":1,"60":1,"81":1,"87":1,"117":1,"126":1,"137":1,"176":1},"1":{"138":1,"139":1},"2":{"55":1,"61":1,"79":1,"177":1}}],["created",{"2":{"53":1,"55":1,"63":1,"89":1,"94":1,"137":1,"155":1,"179":1}}],["create",{"0":{"27":1,"33":1,"41":1,"47":1},"2":{"1":1,"3":1,"8":1,"22":1,"33":2,"37":1,"39":1,"41":2,"47":1,"52":2,"60":1,"69":1,"78":1,"81":1,"87":1,"89":1,"94":1,"114":1,"126":1,"129":1,"131":1,"138":2,"139":1,"160":1,"161":1,"162":1,"167":1,"176":1,"180":1,"183":1}}],["credentials",{"2":{"33":1,"39":2,"48":1,"71":1,"72":1,"125":1,"153":1,"166":1}}],["cron",{"0":{"133":1,"135":1},"2":{"11":1,"22":1,"132":1,"133":1,"134":1,"135":1,"136":1,"138":1,"140":1,"141":1}}],["cross",{"2":{"4":1,"12":1}}],["collection",{"2":{"101":1}}],["collaborate",{"2":{"3":1,"22":1}}],["copy",{"2":{"27":1,"29":1,"33":1,"36":1,"41":1,"43":1,"49":1,"73":1}}],["core",{"0":{"55":1},"2":{"23":1,"55":1,"56":1}}],["cost",{"2":{"18":1}}],["could",{"2":{"18":1}}],["counter",{"2":{"140":1}}],["counts",{"2":{"136":1}}],["count",{"2":{"11":1}}],["coding",{"2":{"13":1,"22":1,"144":1}}],["coder",{"2":{"144":3}}],["code",{"2":{"8":1,"43":2,"44":1,"49":3,"50":1,"75":1,"144":1}}],["conf",{"2":{"167":1}}],["config",{"2":{"111":1,"163":1,"166":1,"167":3,"168":1,"169":1,"171":3,"172":1,"173":1}}],["configuring",{"0":{"55":1,"61":1,"177":1},"1":{"62":1,"178":1},"2":{"38":1,"55":1}}],["configurations",{"2":{"54":1}}],["configuration",{"0":{"13":1,"26":1,"32":1,"40":1,"46":1,"70":1,"102":1,"152":1},"1":{"27":1,"28":1,"29":1,"30":1,"31":1,"33":1,"34":1,"35":1,"36":1,"37":1,"41":1,"42":1,"43":1,"44":1,"45":1,"47":1,"48":1,"49":1,"50":1,"71":1,"72":1,"73":1,"153":1,"154":1},"2":{"13":1,"14":1,"39":1,"56":1,"59":1,"62":1,"69":4,"71":1,"72":1,"73":1,"74":2,"80":1,"97":1,"111":2,"114":1,"154":1,"166":1,"171":1,"173":1,"179":1}}],["configurable",{"2":{"8":1,"51":1}}],["configured",{"2":{"31":1,"38":1,"64":1,"65":1,"78":1,"114":1,"131":1,"150":1}}],["configure",{"0":{"28":1,"30":1,"35":1,"36":1,"42":1,"48":1},"2":{"11":1,"22":1,"39":1,"42":1,"55":1,"67":1,"68":1,"69":1,"72":1,"85":1,"88":1,"102":1,"108":1,"123":1,"124":1,"129":1,"131":1,"151":1,"159":1,"163":1,"172":1,"175":1,"177":1,"183":1,"184":1}}],["confirm",{"2":{"57":1}}],["confidence",{"2":{"23":1}}],["converse",{"2":{"91":1}}],["conversational",{"0":{"138":1}}],["conversations",{"2":{"55":1,"113":1,"175":1,"180":1}}],["conversation",{"2":{"6":2,"19":1,"22":1,"56":1,"117":2,"128":1,"129":1,"148":1,"150":1,"157":1,"158":1,"159":1,"160":1}}],["consumption",{"2":{"159":1}}],["consider",{"2":{"122":1}}],["console",{"2":{"34":1,"36":1,"37":1}}],["constraint",{"2":{"18":1}}],["concept",{"0":{"59":1,"67":1,"76":1,"85":1,"101":1,"107":1,"115":1,"133":1,"143":1,"150":1,"158":1},"1":{"144":1}}],["conceptually",{"2":{"18":1}}],["conclusion",{"0":{"24":1}}],["connected",{"2":{"133":1,"140":1}}],["connects",{"2":{"110":1}}],["connection",{"0":{"108":1},"1":{"109":1,"110":1},"2":{"85":1,"109":1,"110":1,"111":3,"112":1,"125":1,"150":1}}],["connections",{"0":{"106":1},"1":{"107":1,"108":1,"109":1,"110":1,"111":1,"112":1},"2":{"10":1,"68":1,"86":1,"107":1,"108":1,"111":2}}],["connectivity",{"2":{"54":1}}],["connecting",{"2":{"7":1,"26":1,"40":1,"46":1,"85":1}}],["connect",{"2":{"10":1,"38":2,"66":1,"106":1,"149":1,"151":1}}],["continue",{"2":{"24":1,"65":1,"180":1,"184":1}}],["continuity",{"2":{"20":1,"24":1}}],["continuously",{"2":{"18":1}}],["content",{"2":{"18":1,"28":1,"31":1,"44":1,"58":1,"59":1,"97":1,"117":1,"118":1,"146":1,"147":1}}],["contextually",{"2":{"113":1}}],["contexts",{"0":{"58":1,"62":1},"1":{"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"65":1},"2":{"55":1,"60":3}}],["context",{"0":{"60":1,"61":1,"63":1},"1":{"62":1},"2":{"4":1,"6":1,"8":1,"10":1,"12":1,"17":2,"18":1,"20":2,"21":1,"22":1,"24":1,"50":1,"55":1,"56":4,"58":2,"59":1,"60":2,"61":1,"62":2,"63":3,"64":1,"106":2,"112":1,"115":1,"133":1,"140":1,"157":1,"159":1,"160":2}}],["contains",{"2":{"25":1,"56":1}}],["containerization",{"2":{"20":1}}],["containerized",{"0":{"5":1,"16":1},"1":{"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1},"2":{"1":1,"19":1,"21":1,"22":1,"23":1,"24":1,"162":1}}],["containers",{"2":{"5":1,"21":1,"22":1,"164":1,"172":1}}],["containerd",{"2":{"5":1,"15":1,"79":1,"164":2}}],["container",{"0":{"75":1,"79":1},"1":{"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1},"2":{"1":2,"5":2,"8":2,"10":1,"13":1,"22":1,"23":1,"51":1,"54":1,"57":1,"75":1,"76":1,"77":1,"78":5,"79":4,"80":1,"81":1,"82":1,"92":1,"95":2,"143":1,"147":1,"159":1,"161":1,"162":1,"174":1}}],["contact",{"2":{"17":1}}],["controls",{"2":{"123":1}}],["control",{"2":{"3":1,"19":1,"21":1}}],["combined",{"2":{"166":1}}],["com",{"2":{"126":1,"167":1}}],["common",{"0":{"72":1,"170":1},"2":{"97":1,"135":1}}],["communicate",{"2":{"158":1,"161":1}}],["communicates",{"2":{"109":1}}],["communication",{"0":{"67":1},"2":{"56":1,"84":1}}],["community",{"2":{"26":1,"38":1}}],["command`",{"2":{"144":1}}],["command",{"2":{"7":1,"14":1,"47":1,"109":3,"133":1,"134":1,"139":1,"140":2,"141":1}}],["commands",{"0":{"170":1},"2":{"1":1,"5":1,"8":1,"11":1,"22":2,"23":1,"29":1,"31":2,"75":1,"162":1}}],["comes",{"2":{"51":1}}],["come",{"2":{"8":1}}],["comprehensive",{"2":{"151":1,"156":1}}],["compression",{"0":{"119":1},"2":{"119":1}}],["component",{"2":{"93":1}}],["compose",{"2":{"15":1,"89":1,"164":1,"165":1,"166":2,"167":2,"168":4,"170":6,"172":1,"173":4}}],["compact",{"0":{"119":1},"2":{"119":2,"180":1}}],["compaction",{"2":{"6":1,"175":1}}],["compare",{"0":{"23":1}}],["compatible",{"2":{"9":1,"125":1}}],["complement",{"2":{"141":1}}],["completed",{"2":{"103":1}}],["completions",{"2":{"9":1,"129":1}}],["complex",{"2":{"8":1,"51":1,"80":1,"157":1}}],["computer",{"2":{"1":1,"22":1,"76":1,"95":1}}],["ssl",{"2":{"172":1}}],["sse",{"0":{"110":1},"2":{"10":1,"110":1}}],["swap",{"2":{"148":1}}],["switch",{"2":{"9":1,"74":1}}],["synthesized",{"2":{"156":1}}],["syntax",{"2":{"97":1,"135":1}}],["systems",{"2":{"161":1}}],["system",{"2":{"1":2,"12":1,"17":1,"54":1,"75":1,"105":1,"113":1,"115":1,"120":1,"148":2,"162":2,"182":1}}],["snapshot",{"0":{"81":1,"82":1},"2":{"81":2,"82":1,"83":1}}],["snapshots",{"0":{"80":1,"83":1},"1":{"81":1,"82":1,"83":1},"2":{"5":1,"80":1,"83":1}}],["shipped",{"2":{"175":1}}],["sh",{"2":{"166":10}}],["shut",{"2":{"78":1}}],["shanghai",{"2":{"61":1}}],["share",{"2":{"23":1}}],["sharing",{"2":{"21":1,"23":1}}],["should",{"2":{"49":1,"55":2,"58":1,"102":1,"105":1,"122":1,"142":1}}],["showing",{"2":{"90":1}}],["shows",{"2":{"54":1,"121":1,"136":1}}],["show",{"2":{"42":1}}],["shown",{"2":{"41":1,"61":1,"177":1}}],["slow",{"2":{"166":1}}],["slash",{"2":{"31":1}}],["sludge",{"2":{"18":1}}],["spin",{"2":{"158":1}}],["split",{"2":{"23":1}}],["speaker",{"2":{"18":1}}],["specify",{"2":{"119":1,"153":1}}],["specified",{"2":{"11":1,"22":1}}],["specifically",{"2":{"151":1}}],["specific",{"2":{"4":1,"8":1,"85":1,"111":1,"117":1,"128":1,"133":1,"141":1,"150":1,"153":1,"157":1,"159":2,"166":1}}],["specialization",{"0":{"158":1}}],["specialized",{"2":{"8":1,"51":1,"53":1,"157":1,"158":1}}],["special",{"0":{"73":1},"2":{"105":1}}],["silently",{"2":{"166":1}}],["silent",{"2":{"166":1}}],["simultaneously",{"2":{"67":1}}],["simple",{"2":{"22":1}}],["single",{"2":{"67":1,"161":1}}],["size",{"2":{"58":1,"129":1}}],["sidebar",{"2":{"27":1,"33":1,"39":1,"52":1,"60":1,"61":1,"86":1,"87":1,"126":2,"151":1,"153":1,"154":1,"176":1,"177":1,"183":1}}],["sites",{"2":{"61":1}}],["sit",{"2":{"17":1,"18":1}}],["smell",{"2":{"18":1}}],["smoother",{"2":{"18":1}}],["small",{"2":{"18":1,"128":1}}],["smarter",{"2":{"17":1}}],["smtp",{"2":{"7":1,"38":1,"85":1,"87":1}}],["sogou",{"2":{"151":1}}],["software",{"2":{"76":1}}],["sources",{"2":{"107":1}}],["source",{"2":{"24":1}}],["soul",{"2":{"8":1}}],["someone",{"2":{"20":1}}],["somewhere",{"2":{"18":2}}],["something",{"2":{"17":1,"18":3}}],["so",{"2":{"12":1,"18":2,"20":1}}],["scope",{"2":{"161":1}}],["scopes",{"2":{"29":1}}],["scoring",{"2":{"122":1}}],["scale",{"2":{"61":1}}],["script",{"2":{"166":2,"168":1}}],["scripts",{"2":{"76":1}}],["scroll",{"2":{"28":1,"57":1,"64":1}}],["screenshot",{"2":{"64":1}}],["screenshots",{"2":{"8":1,"58":1,"59":1}}],["screen",{"2":{"18":1}}],["schedules",{"0":{"136":1,"137":1},"1":{"138":1,"139":1},"2":{"136":1,"137":1,"139":1}}],["schedule",{"0":{"134":1,"141":1},"2":{"22":1,"100":1,"133":2,"134":3,"136":1,"138":4,"139":1,"140":4,"141":2}}],["scheduled",{"0":{"11":1,"101":1,"132":1},"1":{"133":1,"134":1,"135":1,"136":1,"137":1,"138":1,"139":1,"140":1,"141":1},"2":{"11":1,"22":1,"101":1,"132":1}}],["scheduling",{"2":{"10":1}}],["skill",{"0":{"144":1,"146":1},"2":{"8":1,"143":1,"144":2,"145":1,"146":1,"147":2}}],["skills",{"0":{"142":1,"143":1,"145":1,"148":1},"1":{"143":1,"144":2,"145":1,"146":2,"147":2,"148":1},"2":{"8":2,"13":1,"22":1,"99":1,"101":1,"105":1,"133":1,"142":1,"145":1,"148":3,"159":2}}],["sudo",{"2":{"166":5,"167":1,"170":1}}],["sun=0",{"2":{"135":1}}],["summarize",{"2":{"134":1,"139":2}}],["summary",{"2":{"103":1,"134":1,"138":1}}],["such",{"2":{"56":1,"58":1,"61":2,"64":1}}],["successfully",{"2":{"49":1,"90":1,"103":1}}],["subagent",{"2":{"158":2,"159":3,"160":4,"161":1}}],["subagents",{"0":{"157":1},"1":{"158":1,"159":1,"160":1,"161":1},"2":{"8":2,"157":1,"159":2,"161":2}}],["subject",{"2":{"90":2}}],["submitting",{"2":{"59":1}}],["submit",{"2":{"37":1}}],["subscriptions",{"2":{"36":1}}],["sustainable",{"2":{"23":1}}],["sure",{"2":{"114":1}}],["survive",{"2":{"17":1}}],["surfaced",{"2":{"12":1}}],["supported",{"0":{"31":1,"44":1,"50":1,"68":1,"151":1},"1":{"69":1},"2":{"46":1,"129":1,"151":1,"182":1,"183":1,"184":1}}],["support",{"0":{"7":1,"9":1,"10":1},"2":{"7":3,"10":1,"23":1,"31":1,"38":1,"42":1,"44":2,"46":1,"50":1,"95":1}}],["supports",{"2":{"3":1,"5":1,"11":1,"22":1,"32":1,"38":1,"56":1,"97":1,"106":1,"129":2,"175":1}}],["steps",{"0":{"65":1,"131":1,"184":1},"2":{"85":1,"129":1}}],["step",{"0":{"27":1,"28":1,"29":1,"30":1,"33":1,"34":1,"35":1,"36":1,"37":1,"41":1,"42":1,"43":1,"47":1,"48":1,"49":1},"2":{"55":1,"69":2,"163":2}}],["studio",{"2":{"19":1,"23":1}}],["stop",{"2":{"78":1,"170":1}}],["stopped",{"2":{"54":1,"79":1,"81":1}}],["stops",{"2":{"18":1}}],["stood",{"2":{"18":1}}],["store",{"2":{"27":1,"76":1,"180":1}}],["stored",{"2":{"22":2,"115":1,"143":1}}],["stores",{"2":{"6":1,"58":1,"125":1,"181":1}}],["storage",{"2":{"18":1,"21":1}}],["story",{"0":{"18":1}}],["style",{"2":{"18":1,"61":1}}],["stable",{"2":{"81":1}}],["statistics",{"2":{"159":1}}],["static",{"2":{"64":1}}],["state",{"2":{"76":1,"78":1,"80":1,"81":1,"82":1}}],["status",{"2":{"54":1,"74":1,"79":1,"90":1,"101":1,"103":1,"104":1,"136":1,"170":1}}],["startup",{"2":{"169":2}}],["starting",{"2":{"167":1}}],["start",{"2":{"39":1,"78":1,"166":1,"167":1,"170":1}}],["started",{"2":{"18":2,"163":1}}],["standardized",{"2":{"107":1}}],["standard",{"2":{"38":1,"55":1,"109":1,"111":1,"135":1,"175":1}}],["stay",{"2":{"21":1}}],["stays",{"2":{"19":1,"24":2}}],["stack",{"2":{"21":1,"24":1,"164":1}}],["stakes",{"2":{"18":1}}],["still",{"2":{"17":1}}],["stdio",{"0":{"109":1},"2":{"10":1}}],["structure",{"0":{"144":1}}],["structured",{"2":{"1":1,"6":1,"91":1,"113":1,"162":1}}],["string",{"2":{"61":1}}],["strict",{"2":{"21":1}}],["stream",{"2":{"18":1}}],["streaming",{"2":{"7":2,"13":1,"14":1,"38":1,"46":1,"50":1}}],["saving",{"2":{"63":1,"80":1}}],["save",{"2":{"5":1,"28":1,"30":1,"36":2,"41":1,"42":1,"48":1,"55":1,"63":1,"74":2,"78":1,"97":2,"114":1,"146":1,"155":1,"179":1}}],["safely",{"2":{"80":1}}],["safe",{"2":{"20":1}}],["say",{"2":{"18":1}}],["same",{"2":{"4":1,"18":1}}],["serper",{"2":{"151":1}}],["service",{"2":{"85":1,"86":1,"125":1,"126":1,"140":1,"169":1,"173":1,"174":1}}],["services",{"2":{"9":1,"10":1,"15":1,"21":1,"54":1,"67":1,"106":1,"166":1,"169":1}}],["serving",{"2":{"21":1}}],["servers",{"2":{"26":1,"38":1,"87":1}}],["server",{"0":{"29":1},"2":{"15":1,"29":1,"85":1,"109":2,"110":3,"112":2,"164":1,"173":1}}],["self",{"2":{"125":1,"151":1}}],["selected",{"2":{"56":1,"71":1,"179":1}}],["select",{"2":{"29":3,"30":1,"42":1,"43":1,"48":2,"49":1,"55":3,"61":1,"62":1,"63":1,"64":1,"71":1,"89":1,"95":1,"114":1,"117":1,"127":1,"129":1,"136":1,"154":1,"155":2,"176":1,"177":1,"178":1,"179":1}}],["sent",{"2":{"90":3,"110":1,"134":1}}],["sends",{"2":{"133":1,"138":1}}],["sending",{"2":{"39":1,"101":1,"132":1}}],["send",{"2":{"4":1,"8":1,"29":1,"35":1,"43":1,"47":1,"49":1,"50":2,"73":1,"84":1,"89":1,"91":1,"134":1,"139":1,"140":1}}],["sessions",{"2":{"76":1}}],["several",{"2":{"53":1}}],["security",{"0":{"174":1},"2":{"75":1}}],["securely",{"2":{"27":1,"41":1}}],["seconds",{"2":{"56":1}}],["secrets",{"2":{"39":1,"72":1,"172":1,"174":1}}],["secret",{"2":{"33":1,"36":1,"47":1,"166":2,"167":1}}],["section",{"2":{"25":1,"28":1,"129":1}}],["see",{"2":{"14":1,"39":1,"52":1,"65":1,"69":1,"94":1,"98":1,"184":1}}],["searxng",{"2":{"8":1,"151":1,"153":1}}],["searching",{"0":{"118":1}}],["searches",{"2":{"55":1,"123":1}}],["search",{"0":{"115":1,"149":1,"151":1,"153":1,"155":1},"1":{"150":1,"151":1,"152":1,"153":1,"154":1,"155":1,"156":1},"2":{"6":1,"8":3,"10":2,"19":1,"22":1,"35":1,"47":1,"55":4,"56":2,"64":1,"111":1,"115":1,"118":1,"128":1,"129":1,"140":1,"149":1,"150":2,"151":6,"153":4,"155":1,"156":3,"175":1,"177":1,"180":1,"181":1}}],["semantic",{"0":{"115":1},"2":{"6":1,"22":1,"115":1,"175":1,"177":1}}],["separate",{"2":{"5":1}}],["separately",{"2":{"4":1}}],["setup",{"0":{"39":1,"180":1},"2":{"15":1,"38":1,"65":1}}],["settings",{"0":{"28":1,"55":1,"56":1},"2":{"13":1,"22":1,"33":1,"36":1,"39":1,"42":1,"43":1,"49":1,"55":2,"56":1,"57":1,"61":1,"63":1,"114":1,"123":1,"127":1,"153":1,"154":1,"155":1,"166":1,"177":1,"179":2,"181":1,"183":2}}],["set",{"2":{"3":1,"8":1,"13":1,"22":1,"55":1,"56":1,"89":1,"101":1,"107":1,"119":1,"140":1,"145":1,"167":1,"168":1,"171":1,"172":1}}],["s",{"0":{"55":1},"2":{"4":1,"17":1,"18":6,"20":1,"24":1,"30":1,"31":1,"36":1,"39":1,"40":1,"42":1,"48":1,"52":1,"54":1,"55":1,"56":2,"65":1,"68":1,"73":1,"74":2,"76":1,"77":1,"79":2,"80":2,"88":1,"89":1,"90":2,"95":2,"96":1,"97":2,"99":1,"103":1,"105":1,"113":1,"114":1,"115":2,"116":1,"117":2,"134":1,"143":1,"145":1,"147":1,"148":1,"156":1,"159":2,"160":1,"161":2,"166":1,"175":1,"180":1,"183":2}}],["my",{"2":{"47":2,"138":1,"139":1,"153":1}}],["myself",{"2":{"18":1}}],["mirror=true",{"2":{"166":2,"168":1}}],["mirror",{"0":{"168":1},"2":{"166":1,"168":1,"171":2}}],["midnight",{"2":{"135":2}}],["minute",{"2":{"135":1}}],["minutes",{"2":{"102":2,"135":1,"141":1,"169":1}}],["minimum",{"2":{"35":1,"167":1}}],["mic",{"2":{"18":1}}],["misses",{"2":{"12":1}}],["must",{"2":{"78":1,"167":1,"171":1,"174":1}}],["much",{"2":{"18":1,"119":1,"122":1}}],["multiple",{"2":{"3":1,"7":1,"21":1,"22":1,"67":1,"76":1,"111":1,"113":1,"156":1}}],["multi",{"0":{"3":1,"4":1,"7":1,"9":1},"2":{"1":1,"6":1,"18":1,"22":1,"23":1,"161":1,"162":1}}],["mcpservers",{"2":{"111":1}}],["mcp",{"0":{"10":1,"106":1},"1":{"107":1,"108":1,"109":1,"110":1,"111":1,"112":1},"2":{"10":2,"13":1,"22":1,"31":1,"99":1,"105":1,"106":1,"107":2,"108":2,"110":2,"112":3,"168":1}}],["mounts",{"2":{"167":1}}],["morning",{"2":{"134":1,"139":1}}],["more",{"2":{"8":1,"10":1,"14":1,"18":3,"22":2,"23":1,"24":1,"59":1,"67":1,"104":1,"182":1}}],["monday",{"2":{"135":1}}],["month",{"2":{"135":3}}],["monaco",{"2":{"97":1,"146":1}}],["monitor",{"2":{"99":1}}],["monitoring",{"0":{"103":1},"1":{"104":1},"2":{"91":1}}],["monitors",{"2":{"54":1}}],["move",{"2":{"94":1}}],["mobile",{"2":{"18":1,"56":1,"58":1,"61":2}}],["moment",{"2":{"18":3}}],["most",{"2":{"18":1,"38":1,"46":1,"55":1,"115":1,"121":1}}],["modalities",{"2":{"129":1}}],["modify",{"2":{"76":1,"97":1,"118":1,"147":1}}],["mode",{"0":{"36":1},"2":{"36":1,"73":1}}],["modern",{"2":{"13":1}}],["modelcontextprotocol",{"2":{"109":1}}],["models",{"0":{"130":1},"2":{"13":1,"17":1,"20":1,"56":1,"126":1,"128":2,"129":2,"131":1,"163":1}}],["model",{"0":{"124":1,"128":1,"129":1},"1":{"125":1,"126":1,"127":1,"128":1,"129":2,"130":2,"131":1},"2":{"9":1,"10":1,"14":1,"19":1,"22":1,"55":2,"56":2,"64":1,"102":2,"106":1,"123":2,"124":1,"128":1,"129":5,"130":2,"175":3,"177":4,"178":1}}],["modular",{"2":{"8":1,"148":1,"161":1}}],["md",{"2":{"8":2,"97":1}}],["macos",{"2":{"167":1}}],["machine",{"2":{"95":1}}],["match",{"2":{"167":1,"171":1}}],["mattered",{"2":{"18":1}}],["may",{"2":{"153":1,"169":1,"182":1}}],["mapped",{"2":{"72":1}}],["mail",{"2":{"91":1}}],["mailgun",{"2":{"7":1,"85":1,"87":1}}],["mainland",{"0":{"168":1},"2":{"166":1,"168":1,"171":1}}],["maintenance",{"2":{"132":1}}],["maintain",{"2":{"76":1}}],["main",{"2":{"56":1,"102":1,"157":1,"158":1,"161":2,"164":1,"173":1,"174":1}}],["making",{"2":{"24":2,"175":1}}],["make",{"2":{"20":1,"114":1}}],["makes",{"2":{"17":1,"20":1,"123":1}}],["manifold",{"0":{"120":1},"1":{"121":1,"122":1}}],["manifesto",{"2":{"17":1}}],["managing",{"0":{"62":1,"83":1,"95":1,"104":1,"118":1,"127":1,"130":1,"145":1,"154":1,"178":1},"1":{"146":1,"147":1}}],["manages",{"2":{"181":1}}],["managed",{"2":{"157":1}}],["manager",{"2":{"98":1}}],["managers",{"2":{"76":1}}],["manage",{"2":{"3":1,"8":1,"53":1,"60":1,"65":1,"77":1,"86":1,"89":1,"92":1,"99":1,"116":1,"145":1,"148":1,"176":1,"180":1,"183":1,"184":1}}],["management",{"0":{"3":1,"51":1,"75":1,"92":1,"113":1},"1":{"52":1,"53":1,"54":1,"55":1,"56":1,"57":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"93":1,"94":1,"95":1,"96":1,"97":1,"98":1,"99":1,"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1},"2":{"8":1,"14":2,"22":1,"37":1,"64":1,"65":1,"84":1,"180":1,"184":1}}],["many",{"2":{"18":1,"78":1}}],["manually",{"2":{"99":1,"117":1,"180":1}}],["manual",{"0":{"167":1},"1":{"168":1},"2":{"11":1,"15":1,"132":1,"175":1}}],["max",{"2":{"11":1,"56":2,"134":1,"139":1,"140":1,"141":1}}],["markdown",{"0":{"143":1},"1":{"144":1},"2":{"7":1,"42":2,"44":1,"46":1,"50":1,"143":1}}],["mental",{"2":{"161":1}}],["metrics",{"2":{"160":1}}],["metaphors",{"2":{"18":1}}],["me",{"2":{"138":1}}],["meaning",{"2":{"135":1}}],["medium",{"2":{"56":1}}],["message",{"2":{"28":1,"29":1,"31":1,"35":1,"36":2,"43":1,"44":2,"50":1,"140":1}}],["messages",{"2":{"4":1,"8":1,"9":1,"12":1,"28":1,"29":1,"35":1,"38":1,"39":1,"44":1,"72":1,"73":1,"117":1,"129":1,"159":1}}],["messaging",{"2":{"7":1,"8":1,"10":1,"38":1,"51":1,"66":1,"67":1}}],["memories",{"0":{"117":1},"2":{"6":1,"8":1,"115":2,"116":1,"118":2,"119":2,"121":1,"122":1,"123":2,"180":4,"183":1}}],["memory",{"0":{"6":1,"113":1,"119":1,"175":1,"179":1,"180":1,"181":1},"1":{"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1,"176":1,"177":1,"178":1,"179":1,"180":1,"182":1,"183":1,"184":1},"2":{"1":2,"6":2,"8":1,"9":1,"10":1,"18":1,"19":1,"21":1,"22":3,"23":1,"24":1,"51":1,"54":1,"55":3,"56":3,"57":1,"65":3,"105":1,"113":1,"114":6,"115":2,"116":1,"117":3,"118":1,"119":1,"120":2,"123":3,"128":1,"162":2,"172":1,"175":9,"176":3,"177":3,"179":2,"180":5,"181":5,"182":2,"183":3,"184":3}}],["memohai",{"2":{"167":1}}],["memoh123",{"2":{"166":1,"171":1}}],["memoh",{"0":{"0":1,"1":1,"16":1,"30":1,"42":1,"48":1,"162":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"163":1},"2":{"1":1,"15":1,"17":1,"19":1,"20":1,"21":1,"23":2,"24":3,"25":1,"26":1,"30":1,"32":1,"36":2,"38":2,"39":1,"40":1,"42":1,"43":1,"46":2,"47":2,"48":1,"49":2,"58":1,"67":1,"72":1,"73":2,"75":1,"84":1,"92":1,"106":1,"109":1,"113":1,"115":2,"124":1,"128":1,"142":1,"149":1,"162":1,"163":2,"164":1,"166":8,"167":2,"168":1,"171":2,"175":2,"181":1,"182":2}}],["members",{"2":{"3":1,"26":1}}],["member",{"2":{"1":1,"3":1,"162":1}}],["available",{"0":{"182":1},"2":{"133":1}}],["avatar",{"2":{"52":1}}],["audio",{"2":{"129":1}}],["audit",{"2":{"90":1,"103":1}}],["auth",{"2":{"167":1}}],["authentication",{"2":{"110":1,"125":1,"126":1}}],["authorize",{"2":{"29":1}}],["automate",{"2":{"132":1}}],["automation",{"0":{"133":1},"2":{"8":1,"55":2,"56":1,"59":1,"141":1}}],["automatic",{"2":{"6":1,"101":1,"175":1}}],["automatically",{"2":{"6":1,"11":1,"112":1,"123":1,"138":1,"140":1,"156":1,"168":1}}],["autonomy",{"0":{"101":1}}],["autonomous",{"2":{"100":1,"105":1,"141":1}}],["auto",{"2":{"6":1,"166":1}}],["affecting",{"2":{"75":1}}],["after",{"0":{"180":1},"2":{"55":1,"61":1,"63":1,"65":1,"169":1,"177":1,"184":1}}],["able",{"2":{"162":1}}],["abcdefghijklmnopqrstuvwxyz",{"2":{"47":1}}],["about",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1},"2":{"25":1,"79":1,"163":1}}],["a2a",{"2":{"23":1}}],["am",{"2":{"134":1,"135":2,"138":1}}],["ambient",{"2":{"18":1}}],["amp",{"0":{"4":1},"2":{"33":1,"37":1}}],["approach",{"2":{"161":1}}],["approved",{"2":{"37":1}}],["approval",{"2":{"37":1,"41":1}}],["appear",{"2":{"50":1}}],["appsecret",{"2":{"41":2,"42":1}}],["appid",{"2":{"41":1,"42":1}}],["apply",{"2":{"35":1,"97":1}}],["applications",{"2":{"29":1,"66":1}}],["application",{"0":{"27":1},"2":{"27":1}}],["app",{"0":{"33":1,"37":1},"2":{"18":1,"24":1,"33":4,"36":3,"37":1,"39":2,"73":1,"167":1}}],["apis",{"2":{"21":1}}],["api",{"0":{"139":1},"2":{"9":4,"39":1,"47":2,"48":1,"72":1,"87":1,"125":1,"126":3,"127":1,"129":1,"139":2,"150":1,"153":2,"169":1}}],["aggregator",{"2":{"151":1}}],["again",{"2":{"41":1}}],["agreement",{"2":{"18":1}}],["agent2agent",{"2":{"23":1}}],["agents",{"2":{"17":1,"18":1,"20":1}}],["agent",{"0":{"8":1,"16":1},"1":{"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1},"2":{"1":1,"15":1,"17":1,"18":1,"23":1,"24":1,"51":1,"61":2,"133":1,"134":1,"140":2,"161":1,"162":1,"164":1,"169":1}}],["along",{"2":{"140":1}}],["alerts",{"2":{"104":1}}],["alert",{"2":{"103":1}}],["also",{"2":{"20":1,"50":1,"90":1,"99":1,"139":1,"167":1,"171":1}}],["already",{"2":{"18":1,"114":1,"134":1}}],["always",{"0":{"16":1},"1":{"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1},"2":{"17":1,"18":2,"20":1,"21":1,"24":2,"144":1}}],["allow",{"2":{"56":1,"80":1,"132":1,"148":1}}],["allows",{"2":{"26":1,"32":1,"40":1,"61":1,"73":1,"75":1,"84":1,"96":1,"100":1,"113":1,"149":1,"161":1}}],["allowing",{"2":{"1":1,"66":1,"91":1,"106":1}}],["all",{"2":{"13":1,"15":1,"56":1,"57":2,"90":1,"136":1,"164":1,"166":2,"172":1,"174":1}}],["arguments",{"2":{"109":2}}],["around",{"2":{"18":1}}],["aren",{"2":{"100":1}}],["are",{"2":{"12":1,"38":1,"63":1,"71":1,"72":1,"91":1,"115":1,"118":1,"137":1,"142":1,"143":1,"148":1,"157":2,"169":1}}],["architecture",{"2":{"7":1}}],["attachment",{"2":{"38":1,"46":1}}],["attachments",{"2":{"7":1,"31":1,"44":1,"50":1}}],["attach",{"2":{"29":1}}],["attempt",{"2":{"17":1}}],["at",{"2":{"8":1,"11":1,"22":1,"35":1,"55":1,"57":1,"90":1,"101":1,"124":2,"126":1,"134":1,"135":4,"138":1,"167":1}}],["advanced",{"2":{"144":1}}],["added",{"2":{"182":1}}],["additional",{"2":{"153":1}}],["adding",{"0":{"71":1,"89":1,"129":1,"146":1,"153":1}}],["address",{"2":{"85":1,"89":1,"90":1}}],["add",{"2":{"29":1,"30":1,"36":2,"39":1,"42":1,"48":1,"60":1,"71":1,"87":1,"89":1,"111":3,"126":1,"129":1,"146":1,"153":1,"160":1,"176":1}}],["adapter",{"2":{"7":1}}],["admin123",{"2":{"166":1,"169":1}}],["admin",{"2":{"3":1,"166":3,"167":2,"169":1}}],["ask",{"2":{"138":1}}],["asks",{"2":{"115":1}}],["asia",{"2":{"61":1}}],["assistant",{"2":{"159":1}}],["assist",{"2":{"144":1}}],["assigning",{"0":{"63":1,"155":1,"179":1}}],["assigned",{"2":{"56":1,"58":1,"105":1,"123":1,"156":1,"159":1,"180":1,"184":1}}],["assignment",{"2":{"9":1}}],["assign",{"2":{"8":1,"175":1,"183":1}}],["associated",{"2":{"57":1,"89":1}}],["as",{"0":{"85":1,"143":1},"1":{"144":1},"2":{"6":1,"20":1,"21":3,"22":1,"23":2,"24":1,"50":1,"56":1,"58":1,"61":2,"64":1,"67":1,"76":1,"79":1,"91":1,"143":1,"144":1,"148":1}}],["actual",{"2":{"180":1,"183":1}}],["actually",{"2":{"17":1,"18":2}}],["activity",{"2":{"141":1,"159":1}}],["activities",{"2":{"105":1}}],["active",{"2":{"74":1,"79":1,"111":1,"112":1,"114":1,"134":1}}],["activate",{"2":{"39":1,"74":1}}],["actions",{"0":{"78":1},"2":{"64":1,"91":1,"100":1,"132":1}}],["action",{"2":{"57":2,"64":1,"95":1,"103":1}}],["acts",{"2":{"21":1,"59":1,"67":1,"76":1}}],["across",{"2":{"4":1,"76":1,"113":1}}],["accurate",{"2":{"156":1}}],["accumulate",{"2":{"119":1}}],["accumulating",{"2":{"18":1}}],["account",{"2":{"41":2,"49":1}}],["accounts",{"2":{"3":1}}],["accessible",{"2":{"52":1}}],["access",{"0":{"169":1},"2":{"1":1,"3":1,"22":1,"31":1,"35":1,"38":1,"58":1,"107":1,"138":1,"162":1,"168":1,"172":1,"174":1}}],["analysis",{"2":{"158":1}}],["answer",{"2":{"156":1}}],["another",{"2":{"84":1}}],["any",{"2":{"54":1,"105":1,"132":1,"133":1,"140":1}}],["anchor",{"2":{"18":1}}],["annoying",{"2":{"18":1}}],["anthropic",{"2":{"9":1,"125":1,"129":1}}],["an",{"0":{"16":1},"1":{"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1},"2":{"1":1,"18":3,"21":1,"23":2,"24":3,"39":1,"47":2,"51":1,"85":1,"90":2,"98":1,"103":1,"112":1,"114":1,"123":1,"125":2,"160":1,"162":1}}],["and",{"0":{"84":1,"90":1,"94":1,"96":1,"103":1,"118":1,"124":1,"147":1},"1":{"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"97":1,"98":1,"104":1,"125":1,"126":1,"127":1,"128":1,"129":1,"130":1,"131":1},"2":{"1":4,"3":1,"4":2,"5":2,"6":2,"7":1,"8":7,"9":1,"10":2,"11":1,"12":1,"13":2,"14":1,"17":1,"18":6,"20":4,"21":3,"22":7,"23":6,"24":4,"26":1,"27":2,"29":2,"30":2,"31":1,"33":3,"35":2,"36":3,"37":2,"38":3,"39":2,"41":2,"42":3,"43":2,"44":3,"46":1,"47":1,"48":2,"49":2,"50":1,"51":2,"55":2,"56":3,"57":3,"58":2,"59":3,"61":1,"62":1,"63":1,"64":1,"67":1,"69":1,"71":2,"72":1,"73":1,"74":2,"75":1,"76":1,"79":1,"80":1,"82":1,"83":1,"84":2,"89":2,"91":1,"93":1,"95":1,"97":2,"99":2,"101":1,"106":1,"107":1,"109":1,"111":1,"112":1,"113":1,"115":2,"119":1,"123":2,"124":1,"125":1,"127":1,"128":1,"131":1,"133":1,"134":1,"135":1,"136":1,"138":2,"139":1,"140":1,"141":1,"142":2,"143":2,"144":3,"146":1,"148":1,"149":1,"151":1,"154":1,"155":2,"156":1,"158":1,"159":3,"160":3,"161":1,"162":1,"163":4,"164":1,"166":4,"168":1,"169":1,"172":2,"174":1,"175":4,"177":2,"178":1,"179":1,"180":1,"181":3,"182":1,"183":1}}],["ai",{"2":{"1":2,"9":1,"13":1,"17":1,"18":2,"19":1,"20":1,"22":1,"24":1,"38":1,"51":1,"125":1,"128":1,"129":1,"151":1,"157":1,"162":2}}],["a",{"0":{"27":1,"33":1,"41":1,"47":1,"52":1,"57":1,"60":1,"61":1,"63":2,"71":1,"81":1,"82":1,"85":1,"87":1,"89":1,"126":1,"129":1,"146":1,"153":1,"155":2,"176":1,"177":1,"179":2},"1":{"62":1,"178":1},"2":{"1":1,"5":1,"6":1,"8":1,"9":1,"14":1,"17":3,"18":11,"19":1,"21":2,"22":1,"23":4,"24":3,"27":2,"33":1,"36":2,"37":1,"39":1,"41":1,"43":2,"47":3,"49":2,"51":1,"52":1,"53":1,"54":2,"55":1,"57":1,"58":6,"59":2,"60":1,"61":1,"62":2,"64":1,"65":1,"67":2,"72":1,"73":1,"74":1,"75":1,"78":1,"80":1,"81":2,"83":2,"85":5,"91":1,"93":2,"94":1,"95":2,"97":1,"98":1,"101":3,"103":2,"105":3,"107":1,"109":2,"110":1,"111":4,"114":3,"115":2,"117":1,"119":2,"123":1,"125":2,"126":1,"127":1,"128":3,"129":2,"130":2,"131":1,"133":5,"134":3,"138":5,"140":1,"142":1,"143":2,"144":1,"146":2,"147":2,"150":4,"153":1,"154":1,"156":3,"158":3,"159":2,"160":4,"161":1,"162":1,"166":1,"172":1,"176":1,"177":1,"178":2,"180":1,"181":3,"183":2}}]],"serializationVersion":2}';export{e as default}; diff --git a/assets/chunks/VPLocalSearchBox.DWBTWqjx.js b/assets/chunks/VPLocalSearchBox.DE8nKMEK.js similarity index 99% rename from assets/chunks/VPLocalSearchBox.DWBTWqjx.js rename to assets/chunks/VPLocalSearchBox.DE8nKMEK.js index fa20d55a..47a01981 100644 --- a/assets/chunks/VPLocalSearchBox.DWBTWqjx.js +++ b/assets/chunks/VPLocalSearchBox.DE8nKMEK.js @@ -1,4 +1,4 @@ -var At=Object.defineProperty;var Ct=(a,e,t)=>e in a?At(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var Me=(a,e,t)=>Ct(a,typeof e!="symbol"?e+"":e,t);import{V as nt,q as Be,ah as Mt,h as be,ai as rt,aj as Lt,ak as Dt,al as Pt,G as ce,d as zt,am as it,p as he,an as Vt,ao as jt,s as $t,ap as Bt,v as Le,P as ve,O as _e,aq as Wt,ar as Kt,W as Jt,R as qt,$ as Ut,o as q,b as Ht,j as T,a0 as Gt,k as P,as as Qt,at as Yt,au as Zt,c as Q,n as st,e as xe,B as at,F as ot,a as pe,t as me,av as Xt,aw as lt,ax as en,a5 as tn,aa as nn,ay as rn,_ as sn}from"./framework.ePeAWSvT.js";import{u as an,c as on}from"./theme.Dze9WHF4.js";const ln={root:()=>nt(()=>import("./@localSearchIndexroot.CiUS92bE.js"),[]),zh:()=>nt(()=>import("./@localSearchIndexzh.dDuBvO1t.js"),[])};/*! +var At=Object.defineProperty;var Ct=(a,e,t)=>e in a?At(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var Me=(a,e,t)=>Ct(a,typeof e!="symbol"?e+"":e,t);import{V as nt,q as Be,ah as Mt,h as be,ai as rt,aj as Lt,ak as Dt,al as Pt,G as ce,d as zt,am as it,p as he,an as Vt,ao as jt,s as $t,ap as Bt,v as Le,P as ve,O as _e,aq as Wt,ar as Kt,W as Jt,R as qt,$ as Ut,o as q,b as Ht,j as T,a0 as Gt,k as P,as as Qt,at as Yt,au as Zt,c as Q,n as st,e as xe,B as at,F as ot,a as pe,t as me,av as Xt,aw as lt,ax as en,a5 as tn,aa as nn,ay as rn,_ as sn}from"./framework.BZohXCq9.js";import{u as an,c as on}from"./theme.B0ckB4ri.js";const ln={root:()=>nt(()=>import("./@localSearchIndexroot.DdL7OiJi.js"),[]),zh:()=>nt(()=>import("./@localSearchIndexzh.dDuBvO1t.js"),[])};/*! * tabbable 6.4.0 * @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE */var bt=["input:not([inert]):not([inert] *)","select:not([inert]):not([inert] *)","textarea:not([inert]):not([inert] *)","a[href]:not([inert]):not([inert] *)","button:not([inert]):not([inert] *)","[tabindex]:not(slot):not([inert]):not([inert] *)","audio[controls]:not([inert]):not([inert] *)","video[controls]:not([inert]):not([inert] *)",'[contenteditable]:not([contenteditable="false"]):not([inert]):not([inert] *)',"details>summary:first-of-type:not([inert]):not([inert] *)","details:not([inert]):not([inert] *)"],ke=bt.join(","),yt=typeof Element>"u",ae=yt?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Ne=!yt&&Element.prototype.getRootNode?function(a){var e;return a==null||(e=a.getRootNode)===null||e===void 0?void 0:e.call(a)}:function(a){return a==null?void 0:a.ownerDocument},Fe=function(e,t){var n;t===void 0&&(t=!0);var r=e==null||(n=e.getAttribute)===null||n===void 0?void 0:n.call(e,"inert"),s=r===""||r==="true",i=s||t&&e&&(typeof e.closest=="function"?e.closest("[inert]"):Fe(e.parentNode));return i},cn=function(e){var t,n=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return n===""||n==="true"},wt=function(e,t,n){if(Fe(e))return[];var r=Array.prototype.slice.apply(e.querySelectorAll(ke));return t&&ae.call(e,ke)&&r.unshift(e),r=r.filter(n),r},Re=function(e,t,n){for(var r=[],s=Array.from(e);s.length;){var i=s.shift();if(!Fe(i,!1))if(i.tagName==="SLOT"){var o=i.assignedElements(),l=o.length?o:i.children,c=Re(l,!0,n);n.flatten?r.push.apply(r,c):r.push({scopeParent:i,candidates:c})}else{var h=ae.call(i,ke);h&&n.filter(i)&&(t||!e.includes(i))&&r.push(i);var m=i.shadowRoot||typeof n.getShadowRoot=="function"&&n.getShadowRoot(i),p=!Fe(m,!1)&&(!n.shadowRootFilter||n.shadowRootFilter(i));if(m&&p){var b=Re(m===!0?i.children:m.children,!0,n);n.flatten?r.push.apply(r,b):r.push({scopeParent:i,candidates:b})}else s.unshift.apply(s,i.children)}}return r},St=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},se=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||cn(e))&&!St(e)?0:e.tabIndex},un=function(e,t){var n=se(e);return n<0&&t&&!St(e)?0:n},dn=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},_t=function(e){return e.tagName==="INPUT"},fn=function(e){return _t(e)&&e.type==="hidden"},hn=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(n){return n.tagName==="SUMMARY"});return t},vn=function(e,t){for(var n=0;nsummary:first-of-type"),o=i?e.parentElement:e;if(ae.call(o,"details:not([open]) *"))return!0;if(!n||n==="full"||n==="full-native"||n==="legacy-full"){if(typeof r=="function"){for(var l=e;e;){var c=e.parentElement,h=Ne(e);if(c&&!c.shadowRoot&&r(c)===!0)return ct(e);e.assignedSlot?e=e.assignedSlot:!c&&h!==e.ownerDocument?e=h.host:e=c}e=l}if(bn(e))return!e.getClientRects().length;if(n!=="legacy-full")return!0}else if(n==="non-zero-area")return ct(e);return!1},wn=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName==="FIELDSET"&&t.disabled){for(var n=0;n=0)},xt=function(e){var t=[],n=[];return e.forEach(function(r,s){var i=!!r.scopeParent,o=i?r.scopeParent:r,l=un(o,i),c=i?xt(r.candidates):o;l===0?i?t.push.apply(t,c):t.push(o):n.push({documentOrder:s,tabIndex:l,item:r,isScope:i,content:c})}),n.sort(dn).reduce(function(r,s){return s.isScope?r.push.apply(r,s.content):r.push(s.content),r},[]).concat(t)},_n=function(e,t){t=t||{};var n;return t.getShadowRoot?n=Re([e],t.includeContainer,{filter:We.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:Sn}):n=wt(e,t.includeContainer,We.bind(null,t)),xt(n)},xn=function(e,t){t=t||{};var n;return t.getShadowRoot?n=Re([e],t.includeContainer,{filter:Oe.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):n=wt(e,t.includeContainer,Oe.bind(null,t)),n},oe=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ae.call(e,ke)===!1?!1:We(t,e)},Tn=bt.concat("iframe:not([inert]):not([inert] *)").join(","),De=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ae.call(e,Tn)===!1?!1:Oe(t,e)};/*! diff --git a/assets/chunks/framework.BZohXCq9.js b/assets/chunks/framework.BZohXCq9.js new file mode 100644 index 00000000..17a8b505 --- /dev/null +++ b/assets/chunks/framework.BZohXCq9.js @@ -0,0 +1,19 @@ +/** +* @vue/shared v3.5.30 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Bs(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const ne={},Lt=[],Xe=()=>{},_i=()=>!1,cn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Ks=e=>e.startsWith("onUpdate:"),fe=Object.assign,qs=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},cl=Object.prototype.hasOwnProperty,Z=(e,t)=>cl.call(e,t),K=Array.isArray,It=e=>an(e)==="[object Map]",bi=e=>an(e)==="[object Set]",_r=e=>an(e)==="[object Date]",q=e=>typeof e=="function",le=e=>typeof e=="string",De=e=>typeof e=="symbol",Q=e=>e!==null&&typeof e=="object",wi=e=>(Q(e)||q(e))&&q(e.then)&&q(e.catch),Si=Object.prototype.toString,an=e=>Si.call(e),al=e=>an(e).slice(8,-1),Ti=e=>an(e)==="[object Object]",Un=e=>le(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,vt=Bs(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Bn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},ul=/-\w/g,Te=Bn(e=>e.replace(ul,t=>t.slice(1).toUpperCase())),fl=/\B([A-Z])/g,ft=Bn(e=>e.replace(fl,"-$1").toLowerCase()),Kn=Bn(e=>e.charAt(0).toUpperCase()+e.slice(1)),An=Bn(e=>e?`on${Kn(e)}`:""),Ge=(e,t)=>!Object.is(e,t),Rn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},Gs=e=>{const t=parseFloat(e);return isNaN(t)?e:t},dl=e=>{const t=le(e)?Number(e):NaN;return isNaN(t)?e:t};let br;const qn=()=>br||(br=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Xs(e){if(K(e)){const t={};for(let n=0;n{if(n){const s=n.split(pl);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function Ys(e){let t="";if(le(e))t=e;else if(K(e))for(let n=0;n!!(e&&e.__v_isRef===!0),bl=e=>le(e)?e:e==null?"":K(e)||Q(e)&&(e.toString===Si||!q(e.toString))?Ci(e)?bl(e.value):JSON.stringify(e,Ai,2):String(e),Ai=(e,t)=>Ci(t)?Ai(e,t.value):It(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],i)=>(n[ls(s,i)+" =>"]=r,n),{})}:bi(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>ls(n))}:De(t)?ls(t):Q(t)&&!K(t)&&!Ti(t)?String(t):t,ls=(e,t="")=>{var n;return De(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.5.30 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let ye;class wl{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.__v_skip=!0,this.parent=ye,!t&&ye&&(this.index=(ye.scopes||(ye.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0&&--this._on===0&&(ye=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if(Gt){let t=Gt;for(Gt=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;qt;){let t=qt;for(qt=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function Li(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Ii(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),Zs(s),Tl(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function Ms(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Fi(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Fi(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Zt)||(e.globalVersion=Zt,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Ms(e))))return;e.flags|=2;const t=e.dep,n=re,s=Ne;re=e,Ne=!0;try{Li(e);const r=e.fn(e._value);(t.version===0||Ge(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{re=n,Ne=s,Ii(e),e.flags&=-3}}function Zs(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)Zs(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Tl(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Ne=!0;const Ni=[];function tt(){Ni.push(Ne),Ne=!1}function nt(){const e=Ni.pop();Ne=e===void 0?!0:e}function wr(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=re;re=void 0;try{t()}finally{re=n}}}let Zt=0;class El{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Gn{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!re||!Ne||re===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==re)n=this.activeLink=new El(re,this),re.deps?(n.prevDep=re.depsTail,re.depsTail.nextDep=n,re.depsTail=n):re.deps=re.depsTail=n,Hi(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=re.depsTail,n.nextDep=void 0,re.depsTail.nextDep=n,re.depsTail=n,re.deps===n&&(re.deps=s)}return n}trigger(t){this.version++,Zt++,this.notify(t)}notify(t){zs();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Qs()}}}function Hi(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)Hi(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Fn=new WeakMap,_t=Symbol(""),Os=Symbol(""),en=Symbol("");function _e(e,t,n){if(Ne&&re){let s=Fn.get(e);s||Fn.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new Gn),r.map=s,r.key=n),r.track()}}function Ze(e,t,n,s,r,i){const o=Fn.get(e);if(!o){Zt++;return}const l=c=>{c&&c.trigger()};if(zs(),t==="clear")o.forEach(l);else{const c=K(e),u=c&&Un(n);if(c&&n==="length"){const a=Number(s);o.forEach((d,m)=>{(m==="length"||m===en||!De(m)&&m>=a)&&l(d)})}else switch((n!==void 0||o.has(void 0))&&l(o.get(n)),u&&l(o.get(en)),t){case"add":c?u&&l(o.get("length")):(l(o.get(_t)),It(e)&&l(o.get(Os)));break;case"delete":c||(l(o.get(_t)),It(e)&&l(o.get(Os)));break;case"set":It(e)&&l(o.get(_t));break}}Qs()}function xl(e,t){const n=Fn.get(e);return n&&n.get(t)}function At(e){const t=z(e);return t===e?t:(_e(t,"iterate",en),Me(e)?t:t.map($e))}function Xn(e){return _e(e=z(e),"iterate",en),e}function qe(e,t){return st(e)?Dt(ct(e)?$e(t):t):$e(t)}const Cl={__proto__:null,[Symbol.iterator](){return as(this,Symbol.iterator,e=>qe(this,e))},concat(...e){return At(this).concat(...e.map(t=>K(t)?At(t):t))},entries(){return as(this,"entries",e=>(e[1]=qe(this,e[1]),e))},every(e,t){return Ye(this,"every",e,t,void 0,arguments)},filter(e,t){return Ye(this,"filter",e,t,n=>n.map(s=>qe(this,s)),arguments)},find(e,t){return Ye(this,"find",e,t,n=>qe(this,n),arguments)},findIndex(e,t){return Ye(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Ye(this,"findLast",e,t,n=>qe(this,n),arguments)},findLastIndex(e,t){return Ye(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Ye(this,"forEach",e,t,void 0,arguments)},includes(...e){return us(this,"includes",e)},indexOf(...e){return us(this,"indexOf",e)},join(e){return At(this).join(e)},lastIndexOf(...e){return us(this,"lastIndexOf",e)},map(e,t){return Ye(this,"map",e,t,void 0,arguments)},pop(){return Wt(this,"pop")},push(...e){return Wt(this,"push",e)},reduce(e,...t){return Sr(this,"reduce",e,t)},reduceRight(e,...t){return Sr(this,"reduceRight",e,t)},shift(){return Wt(this,"shift")},some(e,t){return Ye(this,"some",e,t,void 0,arguments)},splice(...e){return Wt(this,"splice",e)},toReversed(){return At(this).toReversed()},toSorted(e){return At(this).toSorted(e)},toSpliced(...e){return At(this).toSpliced(...e)},unshift(...e){return Wt(this,"unshift",e)},values(){return as(this,"values",e=>qe(this,e))}};function as(e,t,n){const s=Xn(e),r=s[t]();return s!==e&&!Me(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.done||(i.value=n(i.value)),i}),r}const Al=Array.prototype;function Ye(e,t,n,s,r,i){const o=Xn(e),l=o!==e&&!Me(e),c=o[t];if(c!==Al[t]){const d=c.apply(e,i);return l?$e(d):d}let u=n;o!==e&&(l?u=function(d,m){return n.call(this,qe(e,d),m,e)}:n.length>2&&(u=function(d,m){return n.call(this,d,m,e)}));const a=c.call(o,u,s);return l&&r?r(a):a}function Sr(e,t,n,s){const r=Xn(e),i=r!==e&&!Me(e);let o=n,l=!1;r!==e&&(i?(l=s.length===0,o=function(u,a,d){return l&&(l=!1,u=qe(e,u)),n.call(this,u,qe(e,a),d,e)}):n.length>3&&(o=function(u,a,d){return n.call(this,u,a,d,e)}));const c=r[t](o,...s);return l?qe(e,c):c}function us(e,t,n){const s=z(e);_e(s,"iterate",en);const r=s[t](...n);return(r===-1||r===!1)&&Yn(n[0])?(n[0]=z(n[0]),s[t](...n)):r}function Wt(e,t,n=[]){tt(),zs();const s=z(e)[t].apply(e,n);return Qs(),nt(),s}const Rl=Bs("__proto__,__v_isRef,__isVue"),Di=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(De));function Ml(e){De(e)||(e=String(e));const t=z(this);return _e(t,"has",e),t.hasOwnProperty(e)}class $i{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?jl:Wi:i?ki:Vi).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=K(t);if(!r){let c;if(o&&(c=Cl[n]))return c;if(n==="hasOwnProperty")return Ml}const l=Reflect.get(t,n,ae(t)?t:s);if((De(n)?Di.has(n):Rl(n))||(r||_e(t,"get",n),i))return l;if(ae(l)){const c=o&&Un(n)?l:l.value;return r&&Q(c)?tn(c):c}return Q(l)?r?tn(l):Ht(l):l}}class ji extends $i{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];const o=K(t)&&Un(n);if(!this._isShallow){const u=st(i);if(!Me(s)&&!st(s)&&(i=z(i),s=z(s)),!o&&ae(i)&&!ae(s))return u||(i.value=s),!0}const l=o?Number(n)e,mn=e=>Reflect.getPrototypeOf(e);function Fl(e,t,n){return function(...s){const r=this.__v_raw,i=z(r),o=It(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,u=r[e](...s),a=n?Ps:t?Dt:$e;return!t&&_e(i,"iterate",c?Os:_t),fe(Object.create(u),{next(){const{value:d,done:m}=u.next();return m?{value:d,done:m}:{value:l?[a(d[0]),a(d[1])]:a(d),done:m}}})}}function yn(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Nl(e,t){const n={get(r){const i=this.__v_raw,o=z(i),l=z(r);e||(Ge(r,l)&&_e(o,"get",r),_e(o,"get",l));const{has:c}=mn(o),u=t?Ps:e?Dt:$e;if(c.call(o,r))return u(i.get(r));if(c.call(o,l))return u(i.get(l));i!==o&&i.get(r)},get size(){const r=this.__v_raw;return!e&&_e(z(r),"iterate",_t),r.size},has(r){const i=this.__v_raw,o=z(i),l=z(r);return e||(Ge(r,l)&&_e(o,"has",r),_e(o,"has",l)),r===l?i.has(r):i.has(r)||i.has(l)},forEach(r,i){const o=this,l=o.__v_raw,c=z(l),u=t?Ps:e?Dt:$e;return!e&&_e(c,"iterate",_t),l.forEach((a,d)=>r.call(i,u(a),u(d),o))}};return fe(n,e?{add:yn("add"),set:yn("set"),delete:yn("delete"),clear:yn("clear")}:{add(r){const i=z(this),o=mn(i),l=z(r),c=!t&&!Me(r)&&!st(r)?l:r;return o.has.call(i,c)||Ge(r,c)&&o.has.call(i,r)||Ge(l,c)&&o.has.call(i,l)||(i.add(c),Ze(i,"add",c,c)),this},set(r,i){!t&&!Me(i)&&!st(i)&&(i=z(i));const o=z(this),{has:l,get:c}=mn(o);let u=l.call(o,r);u||(r=z(r),u=l.call(o,r));const a=c.call(o,r);return o.set(r,i),u?Ge(i,a)&&Ze(o,"set",r,i):Ze(o,"add",r,i),this},delete(r){const i=z(this),{has:o,get:l}=mn(i);let c=o.call(i,r);c||(r=z(r),c=o.call(i,r)),l&&l.call(i,r);const u=i.delete(r);return c&&Ze(i,"delete",r,void 0),u},clear(){const r=z(this),i=r.size!==0,o=r.clear();return i&&Ze(r,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=Fl(r,e,t)}),n}function er(e,t){const n=Nl(e,t);return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(Z(n,r)&&r in s?n:s,r,i)}const Hl={get:er(!1,!1)},Dl={get:er(!1,!0)},$l={get:er(!0,!1)};const Vi=new WeakMap,ki=new WeakMap,Wi=new WeakMap,jl=new WeakMap;function Vl(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function kl(e){return e.__v_skip||!Object.isExtensible(e)?0:Vl(al(e))}function Ht(e){return st(e)?e:tr(e,!1,Pl,Hl,Vi)}function Wl(e){return tr(e,!1,Il,Dl,ki)}function tn(e){return tr(e,!0,Ll,$l,Wi)}function tr(e,t,n,s,r){if(!Q(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=kl(e);if(i===0)return e;const o=r.get(e);if(o)return o;const l=new Proxy(e,i===2?s:n);return r.set(e,l),l}function ct(e){return st(e)?ct(e.__v_raw):!!(e&&e.__v_isReactive)}function st(e){return!!(e&&e.__v_isReadonly)}function Me(e){return!!(e&&e.__v_isShallow)}function Yn(e){return e?!!e.__v_raw:!1}function z(e){const t=e&&e.__v_raw;return t?z(t):e}function Mn(e){return!Z(e,"__v_skip")&&Object.isExtensible(e)&&Ei(e,"__v_skip",!0),e}const $e=e=>Q(e)?Ht(e):e,Dt=e=>Q(e)?tn(e):e;function ae(e){return e?e.__v_isRef===!0:!1}function He(e){return Ui(e,!1)}function xe(e){return Ui(e,!0)}function Ui(e,t){return ae(e)?e:new Ul(e,t)}class Ul{constructor(t,n){this.dep=new Gn,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:z(t),this._value=n?t:$e(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||Me(t)||st(t);t=s?t:z(t),Ge(t,n)&&(this._rawValue=t,this._value=s?t:$e(t),this.dep.trigger())}}function Jn(e){return ae(e)?e.value:e}function ce(e){return q(e)?e():Jn(e)}const Bl={get:(e,t,n)=>t==="__v_raw"?e:Jn(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return ae(r)&&!ae(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function Bi(e){return ct(e)?e:new Proxy(e,Bl)}class Kl{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new Gn,{get:s,set:r}=t(n.track.bind(n),n.trigger.bind(n));this._get=s,this._set=r}get value(){return this._value=this._get()}set value(t){this._set(t)}}function ql(e){return new Kl(e)}class Gl{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0,this._raw=z(t);let r=!0,i=t;if(!K(t)||!Un(String(n)))do r=!Yn(i)||Me(i);while(r&&(i=i.__v_raw));this._shallow=r}get value(){let t=this._object[this._key];return this._shallow&&(t=Jn(t)),this._value=t===void 0?this._defaultValue:t}set value(t){if(this._shallow&&ae(this._raw[this._key])){const n=this._object[this._key];if(ae(n)){n.value=t;return}}this._object[this._key]=t}get dep(){return xl(this._raw,this._key)}}class Xl{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function Yl(e,t,n){return ae(e)?e:q(e)?new Xl(e):Q(e)&&arguments.length>1?Jl(e,t,n):He(e)}function Jl(e,t,n){return new Gl(e,t,n)}class zl{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Gn(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Zt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&re!==this)return Pi(this,!0),!0}get value(){const t=this.dep.track();return Fi(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Ql(e,t,n=!1){let s,r;return q(e)?s=e:(s=e.get,r=e.set),new zl(s,r,n)}const vn={},Nn=new WeakMap;let mt;function Zl(e,t=!1,n=mt){if(n){let s=Nn.get(n);s||Nn.set(n,s=[]),s.push(e)}}function ec(e,t,n=ne){const{immediate:s,deep:r,once:i,scheduler:o,augmentJob:l,call:c}=n,u=g=>r?g:Me(g)||r===!1||r===0?et(g,1):et(g);let a,d,m,_,b=!1,y=!1;if(ae(e)?(d=()=>e.value,b=Me(e)):ct(e)?(d=()=>u(e),b=!0):K(e)?(y=!0,b=e.some(g=>ct(g)||Me(g)),d=()=>e.map(g=>{if(ae(g))return g.value;if(ct(g))return u(g);if(q(g))return c?c(g,2):g()})):q(e)?t?d=c?()=>c(e,2):e:d=()=>{if(m){tt();try{m()}finally{nt()}}const g=mt;mt=a;try{return c?c(e,3,[_]):e(_)}finally{mt=g}}:d=Xe,t&&r){const g=d,A=r===!0?1/0:r;d=()=>et(g(),A)}const D=Ri(),P=()=>{a.stop(),D&&D.active&&qs(D.effects,a)};if(i&&t){const g=t;t=(...A)=>{g(...A),P()}}let I=y?new Array(e.length).fill(vn):vn;const p=g=>{if(!(!(a.flags&1)||!a.dirty&&!g))if(t){const A=a.run();if(r||b||(y?A.some((j,M)=>Ge(j,I[M])):Ge(A,I))){m&&m();const j=mt;mt=a;try{const M=[A,I===vn?void 0:y&&I[0]===vn?[]:I,_];I=A,c?c(t,3,M):t(...M)}finally{mt=j}}}else a.run()};return l&&l(p),a=new Mi(d),a.scheduler=o?()=>o(p,!1):p,_=g=>Zl(g,!1,a),m=a.onStop=()=>{const g=Nn.get(a);if(g){if(c)c(g,4);else for(const A of g)A();Nn.delete(a)}},t?s?p(!0):I=a.run():o?o(p.bind(null,!0),!0):a.run(),P.pause=a.pause.bind(a),P.resume=a.resume.bind(a),P.stop=P,P}function et(e,t=1/0,n){if(t<=0||!Q(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,ae(e))et(e.value,t,n);else if(K(e))for(let s=0;s{et(s,t,n)});else if(Ti(e)){for(const s in e)et(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&et(e[s],t,n)}return e}/** +* @vue/runtime-core v3.5.30 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function un(e,t,n,s){try{return s?e(...s):e()}catch(r){fn(r,t,n)}}function je(e,t,n,s){if(q(e)){const r=un(e,t,n,s);return r&&wi(r)&&r.catch(i=>{fn(i,t,n)}),r}if(K(e)){const r=[];for(let i=0;i>>1,r=we[s],i=nn(r);i=nn(n)?we.push(e):we.splice(nc(t),0,e),e.flags|=1,qi()}}function qi(){Hn||(Hn=Ki.then(Gi))}function sc(e){K(e)?Ft.push(...e):lt&&e.id===-1?lt.splice(Mt+1,0,e):e.flags&1||(Ft.push(e),e.flags|=1),qi()}function Tr(e,t,n=Ue+1){for(;nnn(n)-nn(s));if(Ft.length=0,lt){lt.push(...t);return}for(lt=t,Mt=0;Mte.id==null?e.flags&2?-1:1/0:e.id;function Gi(e){try{for(Ue=0;Ue{s._d&&kn(-1);const i=$n(t);let o;try{o=e(...r)}finally{$n(i),s._d&&kn(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function Uu(e,t){if(pe===null)return e;const n=ns(pe),s=e.dirs||(e.dirs=[]);for(let r=0;r1)return n&&q(t)?t.call(s&&s.proxy):t}}function Yi(){return!!(xt()||St)}const oc=Symbol.for("v-scx"),lc=()=>bt(oc);function sr(e,t){return Qn(e,null,t)}function Bu(e,t){return Qn(e,null,{flush:"post"})}function Ie(e,t,n){return Qn(e,t,n)}function Qn(e,t,n=ne){const{immediate:s,deep:r,flush:i,once:o}=n,l=fe({},n),c=t&&s||!t&&i!=="post";let u;if($t){if(i==="sync"){const _=lc();u=_.__watcherHandles||(_.__watcherHandles=[])}else if(!c){const _=()=>{};return _.stop=Xe,_.resume=Xe,_.pause=Xe,_}}const a=he;l.call=(_,b,y)=>je(_,a,b,y);let d=!1;i==="post"?l.scheduler=_=>{me(_,a&&a.suspense)}:i!=="sync"&&(d=!0,l.scheduler=(_,b)=>{b?_():nr(_)}),l.augmentJob=_=>{t&&(_.flags|=4),d&&(_.flags|=2,a&&(_.id=a.uid,_.i=a))};const m=ec(e,t,l);return $t&&(u?u.push(m):c&&m()),m}function cc(e,t,n){const s=this.proxy,r=le(e)?e.includes(".")?Ji(s,e):()=>s[e]:e.bind(s,s);let i;q(t)?i=t:(i=t.handler,n=t);const o=hn(this),l=Qn(r,i.bind(s),n);return o(),l}function Ji(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;re.__isTeleport,Xt=e=>e&&(e.disabled||e.disabled===""),Er=e=>e&&(e.defer||e.defer===""),xr=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Cr=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Ls=(e,t)=>{const n=e&&e.to;return le(n)?t?t(n):null:n},Zi={name:"Teleport",__isTeleport:!0,process(e,t,n,s,r,i,o,l,c,u){const{mc:a,pc:d,pbc:m,o:{insert:_,querySelector:b,createText:y,createComment:D}}=u,P=Xt(t.props);let{shapeFlag:I,children:p,dynamicChildren:g}=t;if(e==null){const A=t.el=y(""),j=t.anchor=y("");_(A,n,s),_(j,n,s);const M=(T,O)=>{I&16&&a(p,T,O,r,i,o,l,c)},k=()=>{const T=t.target=Ls(t.props,b),O=Is(T,t,y,_);T&&(o!=="svg"&&xr(T)?o="svg":o!=="mathml"&&Cr(T)&&(o="mathml"),r&&r.isCE&&(r.ce._teleportTargets||(r.ce._teleportTargets=new Set)).add(T),P||(M(T,O),On(t,!1)))};P&&(M(n,j),On(t,!0)),Er(t.props)?(t.el.__isMounted=!1,me(()=>{k(),delete t.el.__isMounted},i)):k()}else{if(Er(t.props)&&e.el.__isMounted===!1){me(()=>{Zi.process(e,t,n,s,r,i,o,l,c,u)},i);return}t.el=e.el,t.targetStart=e.targetStart;const A=t.anchor=e.anchor,j=t.target=e.target,M=t.targetAnchor=e.targetAnchor,k=Xt(e.props),T=k?n:j,O=k?A:M;if(o==="svg"||xr(j)?o="svg":(o==="mathml"||Cr(j))&&(o="mathml"),g?(m(e.dynamicChildren,g,T,r,i,o,l),cr(e,t,!0)):c||d(e,t,T,O,r,i,o,l,!1),P)k?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):_n(t,n,A,u,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const R=t.target=Ls(t.props,b);R&&_n(t,R,null,u,0)}else k&&_n(t,j,M,u,1);On(t,P)}},remove(e,t,n,{um:s,o:{remove:r}},i){const{shapeFlag:o,children:l,anchor:c,targetStart:u,targetAnchor:a,target:d,props:m}=e;if(d&&(r(u),r(a)),i&&r(c),o&16){const _=i||!Xt(m);for(let b=0;b{e.isMounted=!0}),oo(()=>{e.isUnmounting=!0}),e}const Oe=[Function,Array],eo={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Oe,onEnter:Oe,onAfterEnter:Oe,onEnterCancelled:Oe,onBeforeLeave:Oe,onLeave:Oe,onAfterLeave:Oe,onLeaveCancelled:Oe,onBeforeAppear:Oe,onAppear:Oe,onAfterAppear:Oe,onAppearCancelled:Oe},to=e=>{const t=e.subTree;return t.component?to(t.component):t},fc={name:"BaseTransition",props:eo,setup(e,{slots:t}){const n=xt(),s=uc();return()=>{const r=t.default&&ro(t.default(),!0);if(!r||!r.length)return;const i=no(r),o=z(e),{mode:l}=o;if(s.isLeaving)return fs(i);const c=Ar(i);if(!c)return fs(i);let u=Fs(c,o,s,n,d=>u=d);c.type!==de&&sn(c,u);let a=n.subTree&&Ar(n.subTree);if(a&&a.type!==de&&!yt(a,c)&&to(n).type!==de){let d=Fs(a,o,s,n);if(sn(a,d),l==="out-in"&&c.type!==de)return s.isLeaving=!0,d.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete d.afterLeave,a=void 0},fs(i);l==="in-out"&&c.type!==de?d.delayLeave=(m,_,b)=>{const y=so(s,a);y[String(a.key)]=a,m[Ke]=()=>{_(),m[Ke]=void 0,delete u.delayedLeave,a=void 0},u.delayedLeave=()=>{b(),delete u.delayedLeave,a=void 0}}:a=void 0}else a&&(a=void 0);return i}}};function no(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==de){t=n;break}}return t}const dc=fc;function so(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function Fs(e,t,n,s,r){const{appear:i,mode:o,persisted:l=!1,onBeforeEnter:c,onEnter:u,onAfterEnter:a,onEnterCancelled:d,onBeforeLeave:m,onLeave:_,onAfterLeave:b,onLeaveCancelled:y,onBeforeAppear:D,onAppear:P,onAfterAppear:I,onAppearCancelled:p}=t,g=String(e.key),A=so(n,e),j=(T,O)=>{T&&je(T,s,9,O)},M=(T,O)=>{const R=O[1];j(T,O),K(T)?T.every(w=>w.length<=1)&&R():T.length<=1&&R()},k={mode:o,persisted:l,beforeEnter(T){let O=c;if(!n.isMounted)if(i)O=D||c;else return;T[Ke]&&T[Ke](!0);const R=A[g];R&&yt(e,R)&&R.el[Ke]&&R.el[Ke](),j(O,[T])},enter(T){if(A[g]===e)return;let O=u,R=a,w=d;if(!n.isMounted)if(i)O=P||u,R=I||a,w=p||d;else return;let H=!1;T[Ut]=oe=>{H||(H=!0,oe?j(w,[T]):j(R,[T]),k.delayedLeave&&k.delayedLeave(),T[Ut]=void 0)};const Y=T[Ut].bind(null,!1);O?M(O,[T,Y]):Y()},leave(T,O){const R=String(e.key);if(T[Ut]&&T[Ut](!0),n.isUnmounting)return O();j(m,[T]);let w=!1;T[Ke]=Y=>{w||(w=!0,O(),Y?j(y,[T]):j(b,[T]),T[Ke]=void 0,A[R]===e&&delete A[R])};const H=T[Ke].bind(null,!1);A[R]=e,_?M(_,[T,H]):H()},clone(T){const O=Fs(T,t,n,s,r);return r&&r(O),O}};return k}function fs(e){if(dn(e))return e=at(e),e.children=null,e}function Ar(e){if(!dn(e))return Qi(e.type)&&e.children?no(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&q(n.default))return n.default()}}function sn(e,t){e.shapeFlag&6&&e.component?(e.transition=t,sn(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function ro(e,t=!1,n){let s=[],r=0;for(let i=0;i1)for(let i=0;iNt(y,t&&(K(t)?t[D]:t),n,s,r));return}if(wt(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&Nt(e,t,n,s.component.subTree);return}const i=s.shapeFlag&4?ns(s.component):s.el,o=r?null:i,{i:l,r:c}=e,u=t&&t.r,a=l.refs===ne?l.refs={}:l.refs,d=l.setupState,m=z(d),_=d===ne?_i:y=>Rr(a,y)?!1:Z(m,y),b=(y,D)=>!(D&&Rr(a,D));if(u!=null&&u!==c){if(Mr(t),le(u))a[u]=null,_(u)&&(d[u]=null);else if(ae(u)){const y=t;b(u,y.k)&&(u.value=null),y.k&&(a[y.k]=null)}}if(q(c))un(c,l,12,[o,a]);else{const y=le(c),D=ae(c);if(y||D){const P=()=>{if(e.f){const I=y?_(c)?d[c]:a[c]:b()||!e.k?c.value:a[e.k];if(r)K(I)&&qs(I,i);else if(K(I))I.includes(i)||I.push(i);else if(y)a[c]=[i],_(c)&&(d[c]=a[c]);else{const p=[i];b(c,e.k)&&(c.value=p),e.k&&(a[e.k]=p)}}else y?(a[c]=o,_(c)&&(d[c]=o)):D&&(b(c,e.k)&&(c.value=o),e.k&&(a[e.k]=o))};if(o){const I=()=>{P(),jn.delete(e)};I.id=-1,jn.set(e,I),me(I,n)}else Mr(e),P()}}}function Mr(e){const t=jn.get(e);t&&(t.flags|=8,jn.delete(e))}let Or=!1;const Rt=()=>{Or||(console.error("Hydration completed but contains mismatches."),Or=!0)},hc=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",pc=e=>e.namespaceURI.includes("MathML"),bn=e=>{if(e.nodeType===1){if(hc(e))return"svg";if(pc(e))return"mathml"}},Pt=e=>e.nodeType===8;function gc(e){const{mt:t,p:n,o:{patchProp:s,createText:r,nextSibling:i,parentNode:o,remove:l,insert:c,createComment:u}}=e,a=(p,g)=>{if(!g.hasChildNodes()){n(null,p,g),Dn(),g._vnode=p;return}d(g.firstChild,p,null,null,null),Dn(),g._vnode=p},d=(p,g,A,j,M,k=!1)=>{k=k||!!g.dynamicChildren;const T=Pt(p)&&p.data==="[",O=()=>y(p,g,A,j,M,T),{type:R,ref:w,shapeFlag:H,patchFlag:Y}=g;let oe=p.nodeType;g.el=p,Y===-2&&(k=!1,g.dynamicChildren=null);let U=null;switch(R){case Tt:oe!==3?g.children===""?(c(g.el=r(""),o(p),p),U=p):U=O():(p.data!==g.children&&(Rt(),p.data=g.children),U=i(p));break;case de:I(p)?(U=i(p),P(g.el=p.content.firstChild,p,A)):oe!==8||T?U=O():U=i(p);break;case Jt:if(T&&(p=i(p),oe=p.nodeType),oe===1||oe===3){U=p;const X=!g.children.length;for(let V=0;V{k=k||!!g.dynamicChildren;const{type:T,props:O,patchFlag:R,shapeFlag:w,dirs:H,transition:Y}=g,oe=T==="input"||T==="option";if(oe||R!==-1){H&&Be(g,null,A,"created");let U=!1;if(I(p)){U=Ao(null,Y)&&A&&A.vnode.props&&A.vnode.props.appear;const V=p.content.firstChild;if(U){const te=V.getAttribute("class");te&&(V.$cls=te),Y.beforeEnter(V)}P(V,p,A),g.el=p=V}if(w&16&&!(O&&(O.innerHTML||O.textContent))){let V=_(p.firstChild,g,p,A,j,M,k);for(;V;){wn(p,1)||Rt();const te=V;V=V.nextSibling,l(te)}}else if(w&8){let V=g.children;V[0]===` +`&&(p.tagName==="PRE"||p.tagName==="TEXTAREA")&&(V=V.slice(1));const{textContent:te}=p;te!==V&&te!==V.replace(/\r\n|\r/g,` +`)&&(wn(p,0)||Rt(),p.textContent=g.children)}if(O){if(oe||!k||R&48){const V=p.tagName.includes("-");for(const te in O)(oe&&(te.endsWith("value")||te==="indeterminate")||cn(te)&&!vt(te)||te[0]==="."||V&&!vt(te))&&s(p,te,null,O[te],void 0,A)}else if(O.onClick)s(p,"onClick",null,O.onClick,void 0,A);else if(R&4&&ct(O.style))for(const V in O.style)O.style[V]}let X;(X=O&&O.onVnodeBeforeMount)&&Pe(X,A,g),H&&Be(g,null,A,"beforeMount"),((X=O&&O.onVnodeMounted)||H||U)&&Po(()=>{X&&Pe(X,A,g),U&&Y.enter(p),H&&Be(g,null,A,"mounted")},j)}return p.nextSibling},_=(p,g,A,j,M,k,T)=>{T=T||!!g.dynamicChildren;const O=g.children,R=O.length;for(let w=0;w{const{slotScopeIds:T}=g;T&&(M=M?M.concat(T):T);const O=o(p),R=_(i(p),g,O,A,j,M,k);return R&&Pt(R)&&R.data==="]"?i(g.anchor=R):(Rt(),c(g.anchor=u("]"),O,R),R)},y=(p,g,A,j,M,k)=>{if(wn(p.parentElement,1)||Rt(),g.el=null,k){const R=D(p);for(;;){const w=i(p);if(w&&w!==R)l(w);else break}}const T=i(p),O=o(p);return l(p),n(null,g,O,T,A,j,bn(O),M),A&&(A.vnode.el=g.el,yo(A,g.el)),T},D=(p,g="[",A="]")=>{let j=0;for(;p;)if(p=i(p),p&&Pt(p)&&(p.data===g&&j++,p.data===A)){if(j===0)return i(p);j--}return p},P=(p,g,A)=>{const j=g.parentNode;j&&j.replaceChild(p,g);let M=A;for(;M;)M.vnode.el===g&&(M.vnode.el=M.subTree.el=p),M=M.parent},I=p=>p.nodeType===1&&p.tagName==="TEMPLATE";return[a,d]}const Pr="data-allow-mismatch",mc={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function wn(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(Pr);)e=e.parentElement;const n=e&&e.getAttribute(Pr);if(n==null)return!1;if(n==="")return!0;{const s=n.split(",");return t===0&&s.includes("children")?!0:s.includes(mc[t])}}qn().requestIdleCallback;qn().cancelIdleCallback;function yc(e,t){if(Pt(e)&&e.data==="["){let n=1,s=e.nextSibling;for(;s;){if(s.nodeType===1){if(t(s)===!1)break}else if(Pt(s))if(s.data==="]"){if(--n===0)break}else s.data==="["&&n++;s=s.nextSibling}}else t(e)}const wt=e=>!!e.type.__asyncLoader;function qu(e){q(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:s,delay:r=200,hydrate:i,timeout:o,suspensible:l=!0,onError:c}=e;let u=null,a,d=0;const m=()=>(d++,u=null,_()),_=()=>{let b;return u||(b=u=t().catch(y=>{if(y=y instanceof Error?y:new Error(String(y)),c)return new Promise((D,P)=>{c(y,()=>D(m()),()=>P(y),d+1)});throw y}).then(y=>b!==u&&u?u:(y&&(y.__esModule||y[Symbol.toStringTag]==="Module")&&(y=y.default),a=y,y)))};return rr({name:"AsyncComponentWrapper",__asyncLoader:_,__asyncHydrate(b,y,D){let P=!1;(y.bu||(y.bu=[])).push(()=>P=!0);const I=()=>{P||D()},p=i?()=>{const g=i(I,A=>yc(b,A));g&&(y.bum||(y.bum=[])).push(g)}:I;a?p():_().then(()=>!y.isUnmounted&&p())},get __asyncResolved(){return a},setup(){const b=he;if(ir(b),a)return()=>Sn(a,b);const y=p=>{u=null,fn(p,b,13,!s)};if(l&&b.suspense||$t)return _().then(p=>()=>Sn(p,b)).catch(p=>(y(p),()=>s?ue(s,{error:p}):null));const D=He(!1),P=He(),I=He(!!r);return r&&setTimeout(()=>{I.value=!1},r),o!=null&&setTimeout(()=>{if(!D.value&&!P.value){const p=new Error(`Async component timed out after ${o}ms.`);y(p),P.value=p}},o),_().then(()=>{D.value=!0,b.parent&&dn(b.parent.vnode)&&b.parent.update()}).catch(p=>{y(p),P.value=p}),()=>{if(D.value&&a)return Sn(a,b);if(P.value&&s)return ue(s,{error:P.value});if(n&&!I.value)return Sn(n,b)}}})}function Sn(e,t){const{ref:n,props:s,children:r,ce:i}=t.vnode,o=ue(e,s,r);return o.ref=n,o.ce=i,delete t.vnode.ce,o}const dn=e=>e.type.__isKeepAlive;function vc(e,t){io(e,"a",t)}function _c(e,t){io(e,"da",t)}function io(e,t,n=he){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Zn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)dn(r.parent.vnode)&&bc(s,t,n,r),r=r.parent}}function bc(e,t,n,s){const r=Zn(t,e,s,!0);es(()=>{qs(s[t],r)},n)}function Zn(e,t,n=he,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{tt();const l=hn(n),c=je(t,n,e,o);return l(),nt(),c});return s?r.unshift(i):r.push(i),i}}const it=e=>(t,n=he)=>{(!$t||e==="sp")&&Zn(e,(...s)=>t(...s),n)},wc=it("bm"),jt=it("m"),Sc=it("bu"),Tc=it("u"),oo=it("bum"),es=it("um"),Ec=it("sp"),xc=it("rtg"),Cc=it("rtc");function Ac(e,t=he){Zn("ec",e,t)}const lo="components";function Gu(e,t){return ao(lo,e,!0,t)||e}const co=Symbol.for("v-ndc");function Xu(e){return le(e)?ao(lo,e,!1)||e:e||co}function ao(e,t,n=!0,s=!1){const r=pe||he;if(r){const i=r.type;{const l=ca(i,!1);if(l&&(l===t||l===Te(t)||l===Kn(Te(t))))return i}const o=Lr(r[e]||i[e],t)||Lr(r.appContext[e],t);return!o&&s?i:o}}function Lr(e,t){return e&&(e[t]||e[Te(t)]||e[Kn(Te(t))])}function Yu(e,t,n,s){let r;const i=n,o=K(e);if(o||le(e)){const l=o&&ct(e);let c=!1,u=!1;l&&(c=!Me(e),u=st(e),e=Xn(e)),r=new Array(e.length);for(let a=0,d=e.length;at(l,c,void 0,i));else{const l=Object.keys(e);r=new Array(l.length);for(let c=0,u=l.length;c0;return t!=="default"&&(n.name=t),js(),Vs(Se,null,[ue("slot",n,s&&s())],u?-2:64)}let i=e[t];i&&i._c&&(i._d=!1),js();const o=i&&uo(i(n)),l=n.key||o&&o.key,c=Vs(Se,{key:(l&&!De(l)?l:`_${t}`)+(!o&&s?"_fb":"")},o||(s?s():[]),o&&e._===1?64:-2);return!r&&c.scopeId&&(c.slotScopeIds=[c.scopeId+"-s"]),i&&i._c&&(i._d=!0),c}function uo(e){return e.some(t=>on(t)?!(t.type===de||t.type===Se&&!uo(t.children)):!0)?e:null}function zu(e,t){const n={};for(const s in e)n[/[A-Z]/.test(s)?`on:${s}`:An(s)]=e[s];return n}const Ns=e=>e?Ho(e)?ns(e):Ns(e.parent):null,Yt=fe(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Ns(e.parent),$root:e=>Ns(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>ho(e),$forceUpdate:e=>e.f||(e.f=()=>{nr(e.update)}),$nextTick:e=>e.n||(e.n=zn.bind(e.proxy)),$watch:e=>cc.bind(e)}),ds=(e,t)=>e!==ne&&!e.__isScriptSetup&&Z(e,t),Rc={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;if(t[0]!=="$"){const m=o[t];if(m!==void 0)switch(m){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(ds(s,t))return o[t]=1,s[t];if(r!==ne&&Z(r,t))return o[t]=2,r[t];if(Z(i,t))return o[t]=3,i[t];if(n!==ne&&Z(n,t))return o[t]=4,n[t];Hs&&(o[t]=0)}}const u=Yt[t];let a,d;if(u)return t==="$attrs"&&_e(e.attrs,"get",""),u(e);if((a=l.__cssModules)&&(a=a[t]))return a;if(n!==ne&&Z(n,t))return o[t]=4,n[t];if(d=c.config.globalProperties,Z(d,t))return d[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return ds(r,t)?(r[t]=n,!0):s!==ne&&Z(s,t)?(s[t]=n,!0):Z(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,props:i,type:o}},l){let c;return!!(n[l]||e!==ne&&l[0]!=="$"&&Z(e,l)||ds(t,l)||Z(i,l)||Z(s,l)||Z(Yt,l)||Z(r.config.globalProperties,l)||(c=o.__cssModules)&&c[l])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Z(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Qu(){return Mc().slots}function Mc(e){const t=xt();return t.setupContext||(t.setupContext=$o(t))}function Ir(e){return K(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Hs=!0;function Oc(e){const t=ho(e),n=e.proxy,s=e.ctx;Hs=!1,t.beforeCreate&&Fr(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:u,created:a,beforeMount:d,mounted:m,beforeUpdate:_,updated:b,activated:y,deactivated:D,beforeDestroy:P,beforeUnmount:I,destroyed:p,unmounted:g,render:A,renderTracked:j,renderTriggered:M,errorCaptured:k,serverPrefetch:T,expose:O,inheritAttrs:R,components:w,directives:H,filters:Y}=t;if(u&&Pc(u,s,null),o)for(const X in o){const V=o[X];q(V)&&(s[X]=V.bind(n))}if(r){const X=r.call(n,n);Q(X)&&(e.data=Ht(X))}if(Hs=!0,i)for(const X in i){const V=i[X],te=q(V)?V.bind(n,n):q(V.get)?V.get.bind(n,n):Xe,pn=!q(V)&&q(V.set)?V.set.bind(n):Xe,dt=ie({get:te,set:pn});Object.defineProperty(s,X,{enumerable:!0,configurable:!0,get:()=>dt.value,set:ke=>dt.value=ke})}if(l)for(const X in l)fo(l[X],s,n,X);if(c){const X=q(c)?c.call(n):c;Reflect.ownKeys(X).forEach(V=>{ic(V,X[V])})}a&&Fr(a,e,"c");function U(X,V){K(V)?V.forEach(te=>X(te.bind(n))):V&&X(V.bind(n))}if(U(wc,d),U(jt,m),U(Sc,_),U(Tc,b),U(vc,y),U(_c,D),U(Ac,k),U(Cc,j),U(xc,M),U(oo,I),U(es,g),U(Ec,T),K(O))if(O.length){const X=e.exposed||(e.exposed={});O.forEach(V=>{Object.defineProperty(X,V,{get:()=>n[V],set:te=>n[V]=te,enumerable:!0})})}else e.exposed||(e.exposed={});A&&e.render===Xe&&(e.render=A),R!=null&&(e.inheritAttrs=R),w&&(e.components=w),H&&(e.directives=H),T&&ir(e)}function Pc(e,t,n=Xe){K(e)&&(e=Ds(e));for(const s in e){const r=e[s];let i;Q(r)?"default"in r?i=bt(r.from||s,r.default,!0):i=bt(r.from||s):i=bt(r),ae(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function Fr(e,t,n){je(K(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function fo(e,t,n,s){let r=s.includes(".")?Ji(n,s):()=>n[s];if(le(e)){const i=t[e];q(i)&&Ie(r,i)}else if(q(e))Ie(r,e.bind(n));else if(Q(e))if(K(e))e.forEach(i=>fo(i,t,n,s));else{const i=q(e.handler)?e.handler.bind(n):t[e.handler];q(i)&&Ie(r,i,e)}}function ho(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(u=>Vn(c,u,o,!0)),Vn(c,t,o)),Q(t)&&i.set(t,c),c}function Vn(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&Vn(e,i,n,!0),r&&r.forEach(o=>Vn(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=Lc[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const Lc={data:Nr,props:Hr,emits:Hr,methods:Kt,computed:Kt,beforeCreate:be,created:be,beforeMount:be,mounted:be,beforeUpdate:be,updated:be,beforeDestroy:be,beforeUnmount:be,destroyed:be,unmounted:be,activated:be,deactivated:be,errorCaptured:be,serverPrefetch:be,components:Kt,directives:Kt,watch:Fc,provide:Nr,inject:Ic};function Nr(e,t){return t?e?function(){return fe(q(e)?e.call(this,this):e,q(t)?t.call(this,this):t)}:t:e}function Ic(e,t){return Kt(Ds(e),Ds(t))}function Ds(e){if(K(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Te(t)}Modifiers`]||e[`${ft(t)}Modifiers`];function $c(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||ne;let r=n;const i=t.startsWith("update:"),o=i&&Dc(s,t.slice(7));o&&(o.trim&&(r=n.map(a=>le(a)?a.trim():a)),o.number&&(r=n.map(Gs)));let l,c=s[l=An(t)]||s[l=An(Te(t))];!c&&i&&(c=s[l=An(ft(t))]),c&&je(c,e,6,r);const u=s[l+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,je(u,e,6,r)}}const jc=new WeakMap;function go(e,t,n=!1){const s=n?jc:t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!q(e)){const c=u=>{const a=go(u,t,!0);a&&(l=!0,fe(o,a))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(Q(e)&&s.set(e,null),null):(K(i)?i.forEach(c=>o[c]=null):fe(o,i),Q(e)&&s.set(e,o),o)}function ts(e,t){return!e||!cn(t)?!1:(t=t.slice(2).replace(/Once$/,""),Z(e,t[0].toLowerCase()+t.slice(1))||Z(e,ft(t))||Z(e,t))}function hs(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:c,render:u,renderCache:a,props:d,data:m,setupState:_,ctx:b,inheritAttrs:y}=e,D=$n(e);let P,I;try{if(n.shapeFlag&4){const g=r||s,A=g;P=Le(u.call(A,g,a,d,_,m,b)),I=l}else{const g=t;P=Le(g.length>1?g(d,{attrs:l,slots:o,emit:c}):g(d,null)),I=t.props?l:Vc(l)}}catch(g){zt.length=0,fn(g,e,1),P=ue(de)}let p=P;if(I&&y!==!1){const g=Object.keys(I),{shapeFlag:A}=p;g.length&&A&7&&(i&&g.some(Ks)&&(I=kc(I,i)),p=at(p,I,!1,!0))}return n.dirs&&(p=at(p,null,!1,!0),p.dirs=p.dirs?p.dirs.concat(n.dirs):n.dirs),n.transition&&sn(p,n.transition),P=p,$n(D),P}const Vc=e=>{let t;for(const n in e)(n==="class"||n==="style"||cn(n))&&((t||(t={}))[n]=e[n]);return t},kc=(e,t)=>{const n={};for(const s in e)(!Ks(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Wc(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,u=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?Dr(s,o,u):!!o;if(c&8){const a=t.dynamicProps;for(let d=0;dObject.create(vo),bo=e=>Object.getPrototypeOf(e)===vo;function Uc(e,t,n,s=!1){const r={},i=_o();e.propsDefaults=Object.create(null),wo(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:Wl(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function Bc(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=z(r),[c]=e.propsOptions;let u=!1;if((s||o>0)&&!(o&16)){if(o&8){const a=e.vnode.dynamicProps;for(let d=0;d{c=!0;const[m,_]=So(d,t,!0);fe(o,m),_&&l.push(..._)};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}if(!i&&!c)return Q(e)&&s.set(e,Lt),Lt;if(K(i))for(let a=0;ae==="_"||e==="_ctx"||e==="$stable",lr=e=>K(e)?e.map(Le):[Le(e)],qc=(e,t,n)=>{if(t._n)return t;const s=rc((...r)=>lr(t(...r)),n);return s._c=!1,s},To=(e,t,n)=>{const s=e._ctx;for(const r in e){if(or(r))continue;const i=e[r];if(q(i))t[r]=qc(r,i,s);else if(i!=null){const o=lr(i);t[r]=()=>o}}},Eo=(e,t)=>{const n=lr(t);e.slots.default=()=>n},xo=(e,t,n)=>{for(const s in t)(n||!or(s))&&(e[s]=t[s])},Gc=(e,t,n)=>{const s=e.slots=_o();if(e.vnode.shapeFlag&32){const r=t._;r?(xo(s,t,n),n&&Ei(s,"_",r,!0)):To(t,s)}else t&&Eo(e,t)},Xc=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=ne;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:xo(r,t,n):(i=!t.$stable,To(t,r)),o=t}else t&&(Eo(e,t),o={default:1});if(i)for(const l in r)!or(l)&&o[l]==null&&delete r[l]},me=Po;function Yc(e){return Co(e)}function Jc(e){return Co(e,gc)}function Co(e,t){const n=qn();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:u,setElementText:a,parentNode:d,nextSibling:m,setScopeId:_=Xe,insertStaticContent:b}=e,y=(f,h,v,C=null,S=null,E=null,N=void 0,F=null,L=!!h.dynamicChildren)=>{if(f===h)return;f&&!yt(f,h)&&(C=gn(f),ke(f,S,E,!0),f=null),h.patchFlag===-2&&(L=!1,h.dynamicChildren=null);const{type:x,ref:B,shapeFlag:$}=h;switch(x){case Tt:D(f,h,v,C);break;case de:P(f,h,v,C);break;case Jt:f==null&&I(h,v,C,N);break;case Se:w(f,h,v,C,S,E,N,F,L);break;default:$&1?A(f,h,v,C,S,E,N,F,L):$&6?H(f,h,v,C,S,E,N,F,L):($&64||$&128)&&x.process(f,h,v,C,S,E,N,F,L,Ct)}B!=null&&S?Nt(B,f&&f.ref,E,h||f,!h):B==null&&f&&f.ref!=null&&Nt(f.ref,null,E,f,!0)},D=(f,h,v,C)=>{if(f==null)s(h.el=l(h.children),v,C);else{const S=h.el=f.el;h.children!==f.children&&u(S,h.children)}},P=(f,h,v,C)=>{f==null?s(h.el=c(h.children||""),v,C):h.el=f.el},I=(f,h,v,C)=>{[f.el,f.anchor]=b(f.children,h,v,C,f.el,f.anchor)},p=({el:f,anchor:h},v,C)=>{let S;for(;f&&f!==h;)S=m(f),s(f,v,C),f=S;s(h,v,C)},g=({el:f,anchor:h})=>{let v;for(;f&&f!==h;)v=m(f),r(f),f=v;r(h)},A=(f,h,v,C,S,E,N,F,L)=>{if(h.type==="svg"?N="svg":h.type==="math"&&(N="mathml"),f==null)j(h,v,C,S,E,N,F,L);else{const x=f.el&&f.el._isVueCE?f.el:null;try{x&&x._beginPatch(),T(f,h,S,E,N,F,L)}finally{x&&x._endPatch()}}},j=(f,h,v,C,S,E,N,F)=>{let L,x;const{props:B,shapeFlag:$,transition:W,dirs:G}=f;if(L=f.el=o(f.type,E,B&&B.is,B),$&8?a(L,f.children):$&16&&k(f.children,L,null,C,S,ps(f,E),N,F),G&&Be(f,null,C,"created"),M(L,f,f.scopeId,N,C),B){for(const se in B)se!=="value"&&!vt(se)&&i(L,se,null,B[se],E,C);"value"in B&&i(L,"value",null,B.value,E),(x=B.onVnodeBeforeMount)&&Pe(x,C,f)}G&&Be(f,null,C,"beforeMount");const J=Ao(S,W);J&&W.beforeEnter(L),s(L,h,v),((x=B&&B.onVnodeMounted)||J||G)&&me(()=>{x&&Pe(x,C,f),J&&W.enter(L),G&&Be(f,null,C,"mounted")},S)},M=(f,h,v,C,S)=>{if(v&&_(f,v),C)for(let E=0;E{for(let x=L;x{const F=h.el=f.el;let{patchFlag:L,dynamicChildren:x,dirs:B}=h;L|=f.patchFlag&16;const $=f.props||ne,W=h.props||ne;let G;if(v&&ht(v,!1),(G=W.onVnodeBeforeUpdate)&&Pe(G,v,h,f),B&&Be(h,f,v,"beforeUpdate"),v&&ht(v,!0),($.innerHTML&&W.innerHTML==null||$.textContent&&W.textContent==null)&&a(F,""),x?O(f.dynamicChildren,x,F,v,C,ps(h,S),E):N||V(f,h,F,null,v,C,ps(h,S),E,!1),L>0){if(L&16)R(F,$,W,v,S);else if(L&2&&$.class!==W.class&&i(F,"class",null,W.class,S),L&4&&i(F,"style",$.style,W.style,S),L&8){const J=h.dynamicProps;for(let se=0;se{G&&Pe(G,v,h,f),B&&Be(h,f,v,"updated")},C)},O=(f,h,v,C,S,E,N)=>{for(let F=0;F{if(h!==v){if(h!==ne)for(const E in h)!vt(E)&&!(E in v)&&i(f,E,h[E],null,S,C);for(const E in v){if(vt(E))continue;const N=v[E],F=h[E];N!==F&&E!=="value"&&i(f,E,F,N,S,C)}"value"in v&&i(f,"value",h.value,v.value,S)}},w=(f,h,v,C,S,E,N,F,L)=>{const x=h.el=f?f.el:l(""),B=h.anchor=f?f.anchor:l("");let{patchFlag:$,dynamicChildren:W,slotScopeIds:G}=h;G&&(F=F?F.concat(G):G),f==null?(s(x,v,C),s(B,v,C),k(h.children||[],v,B,S,E,N,F,L)):$>0&&$&64&&W&&f.dynamicChildren&&f.dynamicChildren.length===W.length?(O(f.dynamicChildren,W,v,S,E,N,F),(h.key!=null||S&&h===S.subTree)&&cr(f,h,!0)):V(f,h,v,B,S,E,N,F,L)},H=(f,h,v,C,S,E,N,F,L)=>{h.slotScopeIds=F,f==null?h.shapeFlag&512?S.ctx.activate(h,v,C,N,L):Y(h,v,C,S,E,N,L):oe(f,h,L)},Y=(f,h,v,C,S,E,N)=>{const F=f.component=ra(f,C,S);if(dn(f)&&(F.ctx.renderer=Ct),ia(F,!1,N),F.asyncDep){if(S&&S.registerDep(F,U,N),!f.el){const L=F.subTree=ue(de);P(null,L,h,v),f.placeholder=L.el}}else U(F,f,h,v,S,E,N)},oe=(f,h,v)=>{const C=h.component=f.component;if(Wc(f,h,v))if(C.asyncDep&&!C.asyncResolved){X(C,h,v);return}else C.next=h,C.update();else h.el=f.el,C.vnode=h},U=(f,h,v,C,S,E,N)=>{const F=()=>{if(f.isMounted){let{next:$,bu:W,u:G,parent:J,vnode:se}=f;{const Ce=Ro(f);if(Ce){$&&($.el=se.el,X(f,$,N)),Ce.asyncDep.then(()=>{me(()=>{f.isUnmounted||x()},S)});return}}let ee=$,Ee;ht(f,!1),$?($.el=se.el,X(f,$,N)):$=se,W&&Rn(W),(Ee=$.props&&$.props.onVnodeBeforeUpdate)&&Pe(Ee,J,$,se),ht(f,!0);const ge=hs(f),Fe=f.subTree;f.subTree=ge,y(Fe,ge,d(Fe.el),gn(Fe),f,S,E),$.el=ge.el,ee===null&&yo(f,ge.el),G&&me(G,S),(Ee=$.props&&$.props.onVnodeUpdated)&&me(()=>Pe(Ee,J,$,se),S)}else{let $;const{el:W,props:G}=h,{bm:J,m:se,parent:ee,root:Ee,type:ge}=f,Fe=wt(h);if(ht(f,!1),J&&Rn(J),!Fe&&($=G&&G.onVnodeBeforeMount)&&Pe($,ee,h),ht(f,!0),W&&os){const Ce=()=>{f.subTree=hs(f),os(W,f.subTree,f,S,null)};Fe&&ge.__asyncHydrate?ge.__asyncHydrate(W,f,Ce):Ce()}else{Ee.ce&&Ee.ce._hasShadowRoot()&&Ee.ce._injectChildStyle(ge,f.parent?f.parent.type:void 0);const Ce=f.subTree=hs(f);y(null,Ce,v,C,f,S,E),h.el=Ce.el}if(se&&me(se,S),!Fe&&($=G&&G.onVnodeMounted)){const Ce=h;me(()=>Pe($,ee,Ce),S)}(h.shapeFlag&256||ee&&wt(ee.vnode)&&ee.vnode.shapeFlag&256)&&f.a&&me(f.a,S),f.isMounted=!0,h=v=C=null}};f.scope.on();const L=f.effect=new Mi(F);f.scope.off();const x=f.update=L.run.bind(L),B=f.job=L.runIfDirty.bind(L);B.i=f,B.id=f.uid,L.scheduler=()=>nr(B),ht(f,!0),x()},X=(f,h,v)=>{h.component=f;const C=f.vnode.props;f.vnode=h,f.next=null,Bc(f,h.props,C,v),Xc(f,h.children,v),tt(),Tr(f),nt()},V=(f,h,v,C,S,E,N,F,L=!1)=>{const x=f&&f.children,B=f?f.shapeFlag:0,$=h.children,{patchFlag:W,shapeFlag:G}=h;if(W>0){if(W&128){pn(x,$,v,C,S,E,N,F,L);return}else if(W&256){te(x,$,v,C,S,E,N,F,L);return}}G&8?(B&16&&Vt(x,S,E),$!==x&&a(v,$)):B&16?G&16?pn(x,$,v,C,S,E,N,F,L):Vt(x,S,E,!0):(B&8&&a(v,""),G&16&&k($,v,C,S,E,N,F,L))},te=(f,h,v,C,S,E,N,F,L)=>{f=f||Lt,h=h||Lt;const x=f.length,B=h.length,$=Math.min(x,B);let W;for(W=0;W<$;W++){const G=h[W]=L?Qe(h[W]):Le(h[W]);y(f[W],G,v,null,S,E,N,F,L)}x>B?Vt(f,S,E,!0,!1,$):k(h,v,C,S,E,N,F,L,$)},pn=(f,h,v,C,S,E,N,F,L)=>{let x=0;const B=h.length;let $=f.length-1,W=B-1;for(;x<=$&&x<=W;){const G=f[x],J=h[x]=L?Qe(h[x]):Le(h[x]);if(yt(G,J))y(G,J,v,null,S,E,N,F,L);else break;x++}for(;x<=$&&x<=W;){const G=f[$],J=h[W]=L?Qe(h[W]):Le(h[W]);if(yt(G,J))y(G,J,v,null,S,E,N,F,L);else break;$--,W--}if(x>$){if(x<=W){const G=W+1,J=GW)for(;x<=$;)ke(f[x],S,E,!0),x++;else{const G=x,J=x,se=new Map;for(x=J;x<=W;x++){const Ae=h[x]=L?Qe(h[x]):Le(h[x]);Ae.key!=null&&se.set(Ae.key,x)}let ee,Ee=0;const ge=W-J+1;let Fe=!1,Ce=0;const kt=new Array(ge);for(x=0;x=ge){ke(Ae,S,E,!0);continue}let We;if(Ae.key!=null)We=se.get(Ae.key);else for(ee=J;ee<=W;ee++)if(kt[ee-J]===0&&yt(Ae,h[ee])){We=ee;break}We===void 0?ke(Ae,S,E,!0):(kt[We-J]=x+1,We>=Ce?Ce=We:Fe=!0,y(Ae,h[We],v,null,S,E,N,F,L),Ee++)}const mr=Fe?zc(kt):Lt;for(ee=mr.length-1,x=ge-1;x>=0;x--){const Ae=J+x,We=h[Ae],yr=h[Ae+1],vr=Ae+1{const{el:E,type:N,transition:F,children:L,shapeFlag:x}=f;if(x&6){dt(f.component.subTree,h,v,C);return}if(x&128){f.suspense.move(h,v,C);return}if(x&64){N.move(f,h,v,Ct);return}if(N===Se){s(E,h,v);for(let $=0;$F.enter(E),S);else{const{leave:$,delayLeave:W,afterLeave:G}=F,J=()=>{f.ctx.isUnmounted?r(E):s(E,h,v)},se=()=>{E._isLeaving&&E[Ke](!0),$(E,()=>{J(),G&&G()})};W?W(E,J,se):se()}else s(E,h,v)},ke=(f,h,v,C=!1,S=!1)=>{const{type:E,props:N,ref:F,children:L,dynamicChildren:x,shapeFlag:B,patchFlag:$,dirs:W,cacheIndex:G}=f;if($===-2&&(S=!1),F!=null&&(tt(),Nt(F,null,v,f,!0),nt()),G!=null&&(h.renderCache[G]=void 0),B&256){h.ctx.deactivate(f);return}const J=B&1&&W,se=!wt(f);let ee;if(se&&(ee=N&&N.onVnodeBeforeUnmount)&&Pe(ee,h,f),B&6)ll(f.component,v,C);else{if(B&128){f.suspense.unmount(v,C);return}J&&Be(f,null,h,"beforeUnmount"),B&64?f.type.remove(f,h,v,Ct,C):x&&!x.hasOnce&&(E!==Se||$>0&&$&64)?Vt(x,h,v,!1,!0):(E===Se&&$&384||!S&&B&16)&&Vt(L,h,v),C&&pr(f)}(se&&(ee=N&&N.onVnodeUnmounted)||J)&&me(()=>{ee&&Pe(ee,h,f),J&&Be(f,null,h,"unmounted")},v)},pr=f=>{const{type:h,el:v,anchor:C,transition:S}=f;if(h===Se){ol(v,C);return}if(h===Jt){g(f);return}const E=()=>{r(v),S&&!S.persisted&&S.afterLeave&&S.afterLeave()};if(f.shapeFlag&1&&S&&!S.persisted){const{leave:N,delayLeave:F}=S,L=()=>N(v,E);F?F(f.el,E,L):L()}else E()},ol=(f,h)=>{let v;for(;f!==h;)v=m(f),r(f),f=v;r(h)},ll=(f,h,v)=>{const{bum:C,scope:S,job:E,subTree:N,um:F,m:L,a:x}=f;jr(L),jr(x),C&&Rn(C),S.stop(),E&&(E.flags|=8,ke(N,f,h,v)),F&&me(F,h),me(()=>{f.isUnmounted=!0},h)},Vt=(f,h,v,C=!1,S=!1,E=0)=>{for(let N=E;N{if(f.shapeFlag&6)return gn(f.component.subTree);if(f.shapeFlag&128)return f.suspense.next();const h=m(f.anchor||f.el),v=h&&h[zi];return v?m(v):h};let rs=!1;const gr=(f,h,v)=>{let C;f==null?h._vnode&&(ke(h._vnode,null,null,!0),C=h._vnode.component):y(h._vnode||null,f,h,null,null,null,v),h._vnode=f,rs||(rs=!0,Tr(C),Dn(),rs=!1)},Ct={p:y,um:ke,m:dt,r:pr,mt:Y,mc:k,pc:V,pbc:O,n:gn,o:e};let is,os;return t&&([is,os]=t(Ct)),{render:gr,hydrate:is,createApp:Hc(gr,is)}}function ps({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function ht({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Ao(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function cr(e,t,n=!1){const s=e.children,r=t.children;if(K(s)&&K(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function Ro(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Ro(t)}function jr(e){if(e)for(let t=0;te.__isSuspense;function Po(e,t){t&&t.pendingBranch?K(e)?t.effects.push(...e):t.effects.push(e):sc(e)}const Se=Symbol.for("v-fgt"),Tt=Symbol.for("v-txt"),de=Symbol.for("v-cmt"),Jt=Symbol.for("v-stc"),zt=[];let Re=null;function js(e=!1){zt.push(Re=e?null:[])}function Qc(){zt.pop(),Re=zt[zt.length-1]||null}let rn=1;function kn(e,t=!1){rn+=e,e<0&&Re&&t&&(Re.hasOnce=!0)}function Lo(e){return e.dynamicChildren=rn>0?Re||Lt:null,Qc(),rn>0&&Re&&Re.push(e),e}function Zu(e,t,n,s,r,i){return Lo(Fo(e,t,n,s,r,i,!0))}function Vs(e,t,n,s,r){return Lo(ue(e,t,n,s,r,!0))}function on(e){return e?e.__v_isVNode===!0:!1}function yt(e,t){return e.type===t.type&&e.key===t.key}const Io=({key:e})=>e??null,Pn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?le(e)||ae(e)||q(e)?{i:pe,r:e,k:t,f:!!n}:e:null);function Fo(e,t=null,n=null,s=0,r=null,i=e===Se?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Io(t),ref:t&&Pn(t),scopeId:Xi,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:pe};return l?(ar(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=le(n)?8:16),rn>0&&!o&&Re&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Re.push(c),c}const ue=Zc;function Zc(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===co)&&(e=de),on(e)){const l=at(e,t,!0);return n&&ar(l,n),rn>0&&!i&&Re&&(l.shapeFlag&6?Re[Re.indexOf(e)]=l:Re.push(l)),l.patchFlag=-2,l}if(aa(e)&&(e=e.__vccOpts),t){t=ea(t);let{class:l,style:c}=t;l&&!le(l)&&(t.class=Ys(l)),Q(c)&&(Yn(c)&&!K(c)&&(c=fe({},c)),t.style=Xs(c))}const o=le(e)?1:Oo(e)?128:Qi(e)?64:Q(e)?4:q(e)?2:0;return Fo(e,t,n,s,r,o,i,!0)}function ea(e){return e?Yn(e)||bo(e)?fe({},e):e:null}function at(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:o,children:l,transition:c}=e,u=t?ta(r||{},t):r,a={__v_isVNode:!0,__v_skip:!0,type:e.type,props:u,key:u&&Io(u),ref:t&&t.ref?n&&i?K(i)?i.concat(Pn(t)):[i,Pn(t)]:Pn(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Se?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&at(e.ssContent),ssFallback:e.ssFallback&&at(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&sn(a,c.clone(a)),a}function No(e=" ",t=0){return ue(Tt,null,e,t)}function ef(e,t){const n=ue(Jt,null,e);return n.staticCount=t,n}function tf(e="",t=!1){return t?(js(),Vs(de,null,e)):ue(de,null,e)}function Le(e){return e==null||typeof e=="boolean"?ue(de):K(e)?ue(Se,null,e.slice()):on(e)?Qe(e):ue(Tt,null,String(e))}function Qe(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:at(e)}function ar(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(K(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),ar(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!bo(t)?t._ctx=pe:r===3&&pe&&(pe.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else q(t)?(t={default:t,_ctx:pe},n=32):(t=String(t),s&64?(n=16,t=[No(t)]):n=8);e.children=t,e.shapeFlag|=n}function ta(...e){const t={};for(let n=0;nhe||pe;let Wn,ks;{const e=qn(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};Wn=t("__VUE_INSTANCE_SETTERS__",n=>he=n),ks=t("__VUE_SSR_SETTERS__",n=>$t=n)}const hn=e=>{const t=he;return Wn(e),e.scope.on(),()=>{e.scope.off(),Wn(t)}},Vr=()=>{he&&he.scope.off(),Wn(null)};function Ho(e){return e.vnode.shapeFlag&4}let $t=!1;function ia(e,t=!1,n=!1){t&&ks(t);const{props:s,children:r}=e.vnode,i=Ho(e);Uc(e,s,i,t),Gc(e,r,n||t);const o=i?oa(e,t):void 0;return t&&ks(!1),o}function oa(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Rc);const{setup:s}=n;if(s){tt();const r=e.setupContext=s.length>1?$o(e):null,i=hn(e),o=un(s,e,0,[e.props,r]),l=wi(o);if(nt(),i(),(l||e.sp)&&!wt(e)&&ir(e),l){if(o.then(Vr,Vr),t)return o.then(c=>{kr(e,c)}).catch(c=>{fn(c,e,0)});e.asyncDep=o}else kr(e,o)}else Do(e)}function kr(e,t,n){q(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Q(t)&&(e.setupState=Bi(t)),Do(e)}function Do(e,t,n){const s=e.type;e.render||(e.render=s.render||Xe);{const r=hn(e);tt();try{Oc(e)}finally{nt(),r()}}}const la={get(e,t){return _e(e,"get",""),e[t]}};function $o(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,la),slots:e.slots,emit:e.emit,expose:t}}function ns(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Bi(Mn(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Yt)return Yt[n](e)},has(t,n){return n in t||n in Yt}})):e.proxy}function ca(e,t=!0){return q(e)?e.displayName||e.name:e.name||t&&e.__name}function aa(e){return q(e)&&"__vccOpts"in e}const ie=(e,t)=>Ql(e,t,$t);function Ws(e,t,n){try{kn(-1);const s=arguments.length;return s===2?Q(t)&&!K(t)?on(t)?ue(e,null,[t]):ue(e,t):ue(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&on(n)&&(n=[n]),ue(e,t,n))}finally{kn(1)}}const ua="3.5.30";/** +* @vue/runtime-dom v3.5.30 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let Us;const Wr=typeof window<"u"&&window.trustedTypes;if(Wr)try{Us=Wr.createPolicy("vue",{createHTML:e=>e})}catch{}const jo=Us?e=>Us.createHTML(e):e=>e,fa="http://www.w3.org/2000/svg",da="http://www.w3.org/1998/Math/MathML",ze=typeof document<"u"?document:null,Ur=ze&&ze.createElement("template"),ha={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?ze.createElementNS(fa,e):t==="mathml"?ze.createElementNS(da,e):n?ze.createElement(e,{is:n}):ze.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>ze.createTextNode(e),createComment:e=>ze.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>ze.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{Ur.innerHTML=jo(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=Ur.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},ot="transition",Bt="animation",ln=Symbol("_vtc"),Vo={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},pa=fe({},eo,Vo),ga=e=>(e.displayName="Transition",e.props=pa,e),nf=ga((e,{slots:t})=>Ws(dc,ma(e),t)),pt=(e,t=[])=>{K(e)?e.forEach(n=>n(...t)):e&&e(...t)},Br=e=>e?K(e)?e.some(t=>t.length>1):e.length>1:!1;function ma(e){const t={};for(const w in e)w in Vo||(t[w]=e[w]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:u=o,appearToClass:a=l,leaveFromClass:d=`${n}-leave-from`,leaveActiveClass:m=`${n}-leave-active`,leaveToClass:_=`${n}-leave-to`}=e,b=ya(r),y=b&&b[0],D=b&&b[1],{onBeforeEnter:P,onEnter:I,onEnterCancelled:p,onLeave:g,onLeaveCancelled:A,onBeforeAppear:j=P,onAppear:M=I,onAppearCancelled:k=p}=t,T=(w,H,Y,oe)=>{w._enterCancelled=oe,gt(w,H?a:l),gt(w,H?u:o),Y&&Y()},O=(w,H)=>{w._isLeaving=!1,gt(w,d),gt(w,_),gt(w,m),H&&H()},R=w=>(H,Y)=>{const oe=w?M:I,U=()=>T(H,w,Y);pt(oe,[H,U]),Kr(()=>{gt(H,w?c:i),Je(H,w?a:l),Br(oe)||qr(H,s,y,U)})};return fe(t,{onBeforeEnter(w){pt(P,[w]),Je(w,i),Je(w,o)},onBeforeAppear(w){pt(j,[w]),Je(w,c),Je(w,u)},onEnter:R(!1),onAppear:R(!0),onLeave(w,H){w._isLeaving=!0;const Y=()=>O(w,H);Je(w,d),w._enterCancelled?(Je(w,m),Yr(w)):(Yr(w),Je(w,m)),Kr(()=>{w._isLeaving&&(gt(w,d),Je(w,_),Br(g)||qr(w,s,D,Y))}),pt(g,[w,Y])},onEnterCancelled(w){T(w,!1,void 0,!0),pt(p,[w])},onAppearCancelled(w){T(w,!0,void 0,!0),pt(k,[w])},onLeaveCancelled(w){O(w),pt(A,[w])}})}function ya(e){if(e==null)return null;if(Q(e))return[gs(e.enter),gs(e.leave)];{const t=gs(e);return[t,t]}}function gs(e){return dl(e)}function Je(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[ln]||(e[ln]=new Set)).add(t)}function gt(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[ln];n&&(n.delete(t),n.size||(e[ln]=void 0))}function Kr(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let va=0;function qr(e,t,n,s){const r=e._endId=++va,i=()=>{r===e._endId&&s()};if(n!=null)return setTimeout(i,n);const{type:o,timeout:l,propCount:c}=_a(e,t);if(!o)return s();const u=o+"end";let a=0;const d=()=>{e.removeEventListener(u,m),i()},m=_=>{_.target===e&&++a>=c&&d()};setTimeout(()=>{a(n[b]||"").split(", "),r=s(`${ot}Delay`),i=s(`${ot}Duration`),o=Gr(r,i),l=s(`${Bt}Delay`),c=s(`${Bt}Duration`),u=Gr(l,c);let a=null,d=0,m=0;t===ot?o>0&&(a=ot,d=o,m=i.length):t===Bt?u>0&&(a=Bt,d=u,m=c.length):(d=Math.max(o,u),a=d>0?o>u?ot:Bt:null,m=a?a===ot?i.length:c.length:0);const _=a===ot&&/\b(?:transform|all)(?:,|$)/.test(s(`${ot}Property`).toString());return{type:a,timeout:d,propCount:m,hasTransform:_}}function Gr(e,t){for(;e.lengthXr(n)+Xr(e[s])))}function Xr(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Yr(e){return(e?e.ownerDocument:document).body.offsetHeight}function ba(e,t,n){const s=e[ln];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Jr=Symbol("_vod"),wa=Symbol("_vsh"),Sa=Symbol(""),Ta=/(?:^|;)\s*display\s*:/;function Ea(e,t,n){const s=e.style,r=le(n);let i=!1;if(n&&!r){if(t)if(le(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&Ln(s,l,"")}else for(const o in t)n[o]==null&&Ln(s,o,"");for(const o in n)o==="display"&&(i=!0),Ln(s,o,n[o])}else if(r){if(t!==n){const o=s[Sa];o&&(n+=";"+o),s.cssText=n,i=Ta.test(n)}}else t&&e.removeAttribute("style");Jr in e&&(e[Jr]=i?s.display:"",e[wa]&&(s.display="none"))}const zr=/\s*!important$/;function Ln(e,t,n){if(K(n))n.forEach(s=>Ln(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=xa(e,t);zr.test(n)?e.setProperty(ft(s),n.replace(zr,""),"important"):e[s]=n}}const Qr=["Webkit","Moz","ms"],ms={};function xa(e,t){const n=ms[t];if(n)return n;let s=Te(t);if(s!=="filter"&&s in e)return ms[t]=s;s=Kn(s);for(let r=0;rys||(Ma.then(()=>ys=0),ys=Date.now());function Pa(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;je(La(s,n.value),t,5,[s])};return n.value=e,n.attached=Oa(),n}function La(e,t){if(K(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const ri=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Ia=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?ba(e,s,o):t==="style"?Ea(e,n,s):cn(t)?Ks(t)||Aa(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Fa(e,t,s,o))?(ti(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&ei(e,t,s,o,i,t!=="value")):e._isVueCE&&(Na(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!le(s)))?ti(e,Te(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),ei(e,t,s,o))};function Fa(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&ri(t)&&q(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return ri(t)&&le(n)?!1:t in e}function Na(e,t){const n=e._def.props;if(!n)return!1;const s=Te(t);return Array.isArray(n)?n.some(r=>Te(r)===s):Object.keys(n).some(r=>Te(r)===s)}const ii=e=>{const t=e.props["onUpdate:modelValue"]||!1;return K(t)?n=>Rn(t,n):t};function Ha(e){e.target.composing=!0}function oi(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const vs=Symbol("_assign");function li(e,t,n){return t&&(e=e.trim()),n&&(e=Gs(e)),e}const sf={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e[vs]=ii(r);const i=s||r.props&&r.props.type==="number";Ot(e,t?"change":"input",o=>{o.target.composing||e[vs](li(e.value,n,i))}),(n||i)&&Ot(e,"change",()=>{e.value=li(e.value,n,i)}),t||(Ot(e,"compositionstart",Ha),Ot(e,"compositionend",oi),Ot(e,"change",oi))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:r,number:i}},o){if(e[vs]=ii(o),e.composing)return;const l=(i||e.type==="number")&&!/^0\d/.test(e.value)?Gs(e.value):e.value,c=t??"";l!==c&&(document.activeElement===e&&e.type!=="range"&&(s&&t===n||r&&e.value.trim()===c)||(e.value=c))}},Da=["ctrl","shift","alt","meta"],$a={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Da.some(n=>e[`${n}Key`]&&!t.includes(n))},rf=(e,t)=>{if(!e)return e;const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...i)=>{for(let o=0;o{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=r=>{if(!("key"in r))return;const i=ft(r.key);if(t.some(o=>o===i||ja[o]===i))return e(r)})},ko=fe({patchProp:Ia},ha);let Qt,ci=!1;function Va(){return Qt||(Qt=Yc(ko))}function ka(){return Qt=ci?Qt:Jc(ko),ci=!0,Qt}const lf=(...e)=>{const t=Va().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Uo(s);if(!r)return;const i=t._component;!q(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const o=n(r,!1,Wo(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t},cf=(...e)=>{const t=ka().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Uo(s);if(r)return n(r,!0,Wo(r))},t};function Wo(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Uo(e){return le(e)?document.querySelector(e):e}const Wa=window.__VP_SITE_DATA__;function Bo(e){return Ri()?(Sl(e),!0):!1}const _s=new WeakMap,Ua=(...e)=>{var t;const n=e[0],s=(t=xt())==null?void 0:t.proxy;if(s==null&&!Yi())throw new Error("injectLocal must be called in setup");return s&&_s.has(s)&&n in _s.get(s)?_s.get(s)[n]:bt(...e)},Ko=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const af=e=>e!=null,Ba=Object.prototype.toString,Ka=e=>Ba.call(e)==="[object Object]",ut=()=>{},ai=qa();function qa(){var e,t;return Ko&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function ur(e,t){function n(...s){return new Promise((r,i)=>{Promise.resolve(e(()=>t.apply(this,s),{fn:t,thisArg:this,args:s})).then(r).catch(i)})}return n}const qo=e=>e();function Go(e,t={}){let n,s,r=ut;const i=c=>{clearTimeout(c),r(),r=ut};let o;return c=>{const u=ce(e),a=ce(t.maxWait);return n&&i(n),u<=0||a!==void 0&&a<=0?(s&&(i(s),s=null),Promise.resolve(c())):new Promise((d,m)=>{r=t.rejectOnCancel?m:d,o=c,a&&!s&&(s=setTimeout(()=>{n&&i(n),s=null,d(o())},a)),n=setTimeout(()=>{s&&i(s),s=null,d(c())},u)})}}function Ga(...e){let t=0,n,s=!0,r=ut,i,o,l,c,u;!ae(e[0])&&typeof e[0]=="object"?{delay:o,trailing:l=!0,leading:c=!0,rejectOnCancel:u=!1}=e[0]:[o,l=!0,c=!0,u=!1]=e;const a=()=>{n&&(clearTimeout(n),n=void 0,r(),r=ut)};return m=>{const _=ce(o),b=Date.now()-t,y=()=>i=m();return a(),_<=0?(t=Date.now(),y()):(b>_&&(c||!s)?(t=Date.now(),y()):l&&(i=new Promise((D,P)=>{r=u?P:D,n=setTimeout(()=>{t=Date.now(),s=!0,D(y()),a()},Math.max(0,_-b))})),!c&&!n&&(n=setTimeout(()=>s=!0,_)),s=!1,i)}}function Xa(e=qo,t={}){const{initialState:n="active"}=t,s=fr(n==="active");function r(){s.value=!1}function i(){s.value=!0}return{isActive:tn(s),pause:r,resume:i,eventFilter:(...l)=>{s.value&&e(...l)}}}function ui(e){return e.endsWith("rem")?Number.parseFloat(e)*16:Number.parseFloat(e)}function Ya(e){return xt()}function bs(e){return Array.isArray(e)?e:[e]}function fr(...e){if(e.length!==1)return Yl(...e);const t=e[0];return typeof t=="function"?tn(ql(()=>({get:t,set:ut}))):He(t)}function Ja(e,t=200,n={}){return ur(Go(t,n),e)}function za(e,t=200,n=!1,s=!0,r=!1){return ur(Ga(t,n,s,r),e)}function Xo(e,t,n={}){const{eventFilter:s=qo,...r}=n;return Ie(e,ur(s,t),r)}function Qa(e,t,n={}){const{eventFilter:s,initialState:r="active",...i}=n,{eventFilter:o,pause:l,resume:c,isActive:u}=Xa(s,{initialState:r});return{stop:Xo(e,t,{...i,eventFilter:o}),pause:l,resume:c,isActive:u}}function ss(e,t=!0,n){Ya()?jt(e,n):t?e():zn(e)}function uf(e,t,n={}){const{debounce:s=0,maxWait:r=void 0,...i}=n;return Xo(e,t,{...i,eventFilter:Go(s,{maxWait:r})})}function Za(e,t,n){return Ie(e,t,{...n,immediate:!0})}function ff(e,t,n){let s;ae(n)?s={evaluating:n}:s={};const{lazy:r=!1,evaluating:i=void 0,shallow:o=!0,onError:l=ut}=s,c=xe(!r),u=o?xe(t):He(t);let a=0;return sr(async d=>{if(!c.value)return;a++;const m=a;let _=!1;i&&Promise.resolve().then(()=>{i.value=!0});try{const b=await e(y=>{d(()=>{i&&(i.value=!1),_||y()})});m===a&&(u.value=b)}catch(b){l(b)}finally{i&&m===a&&(i.value=!1),_=!0}}),r?ie(()=>(c.value=!0,u.value)):u}const Ve=Ko?window:void 0;function dr(e){var t;const n=ce(e);return(t=n==null?void 0:n.$el)!=null?t:n}function rt(...e){const t=[],n=()=>{t.forEach(l=>l()),t.length=0},s=(l,c,u,a)=>(l.addEventListener(c,u,a),()=>l.removeEventListener(c,u,a)),r=ie(()=>{const l=bs(ce(e[0])).filter(c=>c!=null);return l.every(c=>typeof c!="string")?l:void 0}),i=Za(()=>{var l,c;return[(c=(l=r.value)==null?void 0:l.map(u=>dr(u)))!=null?c:[Ve].filter(u=>u!=null),bs(ce(r.value?e[1]:e[0])),bs(Jn(r.value?e[2]:e[1])),ce(r.value?e[3]:e[2])]},([l,c,u,a])=>{if(n(),!(l!=null&&l.length)||!(c!=null&&c.length)||!(u!=null&&u.length))return;const d=Ka(a)?{...a}:a;t.push(...l.flatMap(m=>c.flatMap(_=>u.map(b=>s(m,_,b,d)))))},{flush:"post"}),o=()=>{i(),n()};return Bo(n),o}function eu(){const e=xe(!1),t=xt();return t&&jt(()=>{e.value=!0},t),e}function tu(e){const t=eu();return ie(()=>(t.value,!!e()))}function nu(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function df(...e){let t,n,s={};e.length===3?(t=e[0],n=e[1],s=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],s=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:r=Ve,eventName:i="keydown",passive:o=!1,dedupe:l=!1}=s,c=nu(t);return rt(r,i,a=>{a.repeat&&ce(l)||c(a)&&n(a)},o)}const su=Symbol("vueuse-ssr-width");function ru(){const e=Yi()?Ua(su,null):null;return typeof e=="number"?e:void 0}function Yo(e,t={}){const{window:n=Ve,ssrWidth:s=ru()}=t,r=tu(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function"),i=xe(typeof s=="number"),o=xe(),l=xe(!1),c=u=>{l.value=u.matches};return sr(()=>{if(i.value){i.value=!r.value;const u=ce(e).split(",");l.value=u.some(a=>{const d=a.includes("not all"),m=a.match(/\(\s*min-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/),_=a.match(/\(\s*max-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/);let b=!!(m||_);return m&&b&&(b=s>=ui(m[1])),_&&b&&(b=s<=ui(_[1])),d?!b:b});return}r.value&&(o.value=n.matchMedia(ce(e)),l.value=o.value.matches)}),rt(o,"change",c,{passive:!0}),ie(()=>l.value)}const Tn=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},En="__vueuse_ssr_handlers__",iu=ou();function ou(){return En in Tn||(Tn[En]=Tn[En]||{}),Tn[En]}function Jo(e,t){return iu[e]||t}function zo(e){return Yo("(prefers-color-scheme: dark)",e)}function lu(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const cu={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},fi="vueuse-storage";function hr(e,t,n,s={}){var r;const{flush:i="pre",deep:o=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:u=!1,shallow:a,window:d=Ve,eventFilter:m,onError:_=R=>{console.error(R)},initOnMounted:b}=s,y=(a?xe:He)(typeof t=="function"?t():t),D=ie(()=>ce(e));if(!n)try{n=Jo("getDefaultStorage",()=>{var R;return(R=Ve)==null?void 0:R.localStorage})()}catch(R){_(R)}if(!n)return y;const P=ce(t),I=lu(P),p=(r=s.serializer)!=null?r:cu[I],{pause:g,resume:A}=Qa(y,()=>M(y.value),{flush:i,deep:o,eventFilter:m});Ie(D,()=>T(),{flush:i}),d&&l&&ss(()=>{n instanceof Storage?rt(d,"storage",T,{passive:!0}):rt(d,fi,O),b&&T()}),b||T();function j(R,w){if(d){const H={key:D.value,oldValue:R,newValue:w,storageArea:n};d.dispatchEvent(n instanceof Storage?new StorageEvent("storage",H):new CustomEvent(fi,{detail:H}))}}function M(R){try{const w=n.getItem(D.value);if(R==null)j(w,null),n.removeItem(D.value);else{const H=p.write(R);w!==H&&(n.setItem(D.value,H),j(w,H))}}catch(w){_(w)}}function k(R){const w=R?R.newValue:n.getItem(D.value);if(w==null)return c&&P!=null&&n.setItem(D.value,p.write(P)),P;if(!R&&u){const H=p.read(w);return typeof u=="function"?u(H,P):I==="object"&&!Array.isArray(H)?{...P,...H}:H}else return typeof w!="string"?w:p.read(w)}function T(R){if(!(R&&R.storageArea!==n)){if(R&&R.key==null){y.value=P;return}if(!(R&&R.key!==D.value)){g();try{(R==null?void 0:R.newValue)!==p.write(y.value)&&(y.value=k(R))}catch(w){_(w)}finally{R?zn(A):A()}}}}function O(R){T(R.detail)}return y}const au="*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}";function uu(e={}){const{selector:t="html",attribute:n="class",initialValue:s="auto",window:r=Ve,storage:i,storageKey:o="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:u,disableTransition:a=!0}=e,d={auto:"",light:"light",dark:"dark",...e.modes||{}},m=zo({window:r}),_=ie(()=>m.value?"dark":"light"),b=c||(o==null?fr(s):hr(o,s,i,{window:r,listenToStorageChanges:l})),y=ie(()=>b.value==="auto"?_.value:b.value),D=Jo("updateHTMLAttrs",(g,A,j)=>{const M=typeof g=="string"?r==null?void 0:r.document.querySelector(g):dr(g);if(!M)return;const k=new Set,T=new Set;let O=null;if(A==="class"){const w=j.split(/\s/g);Object.values(d).flatMap(H=>(H||"").split(/\s/g)).filter(Boolean).forEach(H=>{w.includes(H)?k.add(H):T.add(H)})}else O={key:A,value:j};if(k.size===0&&T.size===0&&O===null)return;let R;a&&(R=r.document.createElement("style"),R.appendChild(document.createTextNode(au)),r.document.head.appendChild(R));for(const w of k)M.classList.add(w);for(const w of T)M.classList.remove(w);O&&M.setAttribute(O.key,O.value),a&&(r.getComputedStyle(R).opacity,document.head.removeChild(R))});function P(g){var A;D(t,n,(A=d[g])!=null?A:g)}function I(g){e.onChanged?e.onChanged(g,P):P(g)}Ie(y,I,{flush:"post",immediate:!0}),ss(()=>I(y.value));const p=ie({get(){return u?b.value:y.value},set(g){b.value=g}});return Object.assign(p,{store:b,system:_,state:y})}function fu(e={}){const{valueDark:t="dark",valueLight:n=""}=e,s=uu({...e,onChanged:(o,l)=>{var c;e.onChanged?(c=e.onChanged)==null||c.call(e,o==="dark",l,o):l(o)},modes:{dark:t,light:n}}),r=ie(()=>s.system.value);return ie({get(){return s.value==="dark"},set(o){const l=o?"dark":"light";r.value===l?s.value="auto":s.value=l}})}function ws(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}const di=1;function du(e,t={}){const{throttle:n=0,idle:s=200,onStop:r=ut,onScroll:i=ut,offset:o={left:0,right:0,top:0,bottom:0},eventListenerOptions:l={capture:!1,passive:!0},behavior:c="auto",window:u=Ve,onError:a=M=>{console.error(M)}}=t,d=xe(0),m=xe(0),_=ie({get(){return d.value},set(M){y(M,void 0)}}),b=ie({get(){return m.value},set(M){y(void 0,M)}});function y(M,k){var T,O,R,w;if(!u)return;const H=ce(e);if(!H)return;(R=H instanceof Document?u.document.body:H)==null||R.scrollTo({top:(T=ce(k))!=null?T:b.value,left:(O=ce(M))!=null?O:_.value,behavior:ce(c)});const Y=((w=H==null?void 0:H.document)==null?void 0:w.documentElement)||(H==null?void 0:H.documentElement)||H;_!=null&&(d.value=Y.scrollLeft),b!=null&&(m.value=Y.scrollTop)}const D=xe(!1),P=Ht({left:!0,right:!1,top:!0,bottom:!1}),I=Ht({left:!1,right:!1,top:!1,bottom:!1}),p=M=>{D.value&&(D.value=!1,I.left=!1,I.right=!1,I.top=!1,I.bottom=!1,r(M))},g=Ja(p,n+s),A=M=>{var k;if(!u)return;const T=((k=M==null?void 0:M.document)==null?void 0:k.documentElement)||(M==null?void 0:M.documentElement)||dr(M),{display:O,flexDirection:R,direction:w}=getComputedStyle(T),H=w==="rtl"?-1:1,Y=T.scrollLeft;I.left=Yd.value;const oe=Math.abs(Y*H)<=(o.left||0),U=Math.abs(Y*H)+T.clientWidth>=T.scrollWidth-(o.right||0)-di;O==="flex"&&R==="row-reverse"?(P.left=U,P.right=oe):(P.left=oe,P.right=U),d.value=Y;let X=T.scrollTop;M===u.document&&!X&&(X=u.document.body.scrollTop),I.top=Xm.value;const V=Math.abs(X)<=(o.top||0),te=Math.abs(X)+T.clientHeight>=T.scrollHeight-(o.bottom||0)-di;O==="flex"&&R==="column-reverse"?(P.top=te,P.bottom=V):(P.top=V,P.bottom=te),m.value=X},j=M=>{var k;if(!u)return;const T=(k=M.target.documentElement)!=null?k:M.target;A(T),D.value=!0,g(M),i(M)};return rt(e,"scroll",n?za(j,n,!0,!1):j,l),ss(()=>{try{const M=ce(e);if(!M)return;A(M)}catch(M){a(M)}}),rt(e,"scrollend",p,l),{x:_,y:b,isScrolling:D,arrivedState:P,directions:I,measure(){const M=ce(e);u&&M&&A(M)}}}function hf(e,t,n={}){const{window:s=Ve}=n;return hr(e,t,s==null?void 0:s.localStorage,n)}function Qo(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const Ss=new WeakMap;function pf(e,t=!1){const n=xe(t);let s=null,r="";Ie(fr(e),l=>{const c=ws(ce(l));if(c){const u=c;if(Ss.get(u)||Ss.set(u,u.style.overflow),u.style.overflow!=="hidden"&&(r=u.style.overflow),u.style.overflow==="hidden")return n.value=!0;if(n.value)return u.style.overflow="hidden"}},{immediate:!0});const i=()=>{const l=ws(ce(e));!l||n.value||(ai&&(s=rt(l,"touchmove",c=>{hu(c)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},o=()=>{const l=ws(ce(e));!l||!n.value||(ai&&(s==null||s()),l.style.overflow=r,Ss.delete(l),n.value=!1)};return Bo(o),ie({get(){return n.value},set(l){l?i():o()}})}function gf(e,t,n={}){const{window:s=Ve}=n;return hr(e,t,s==null?void 0:s.sessionStorage,n)}function mf(e={}){const{window:t=Ve,...n}=e;return du(t,n)}function yf(e={}){const{window:t=Ve,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:s=Number.POSITIVE_INFINITY,listenOrientation:r=!0,includeScrollbar:i=!0,type:o="inner"}=e,l=xe(n),c=xe(s),u=()=>{if(t)if(o==="outer")l.value=t.outerWidth,c.value=t.outerHeight;else if(o==="visual"&&t.visualViewport){const{width:d,height:m,scale:_}=t.visualViewport;l.value=Math.round(d*_),c.value=Math.round(m*_)}else i?(l.value=t.innerWidth,c.value=t.innerHeight):(l.value=t.document.documentElement.clientWidth,c.value=t.document.documentElement.clientHeight)};u(),ss(u);const a={passive:!0};if(rt("resize",u,a),t&&o==="visual"&&t.visualViewport&&rt(t.visualViewport,"resize",u,a),r){const d=Yo("(orientation: portrait)");Ie(d,()=>u())}return{width:l,height:c}}const Ts={};var Es={};const Zo=/^(?:[a-z]+:|\/\/)/i,pu="vitepress-theme-appearance",gu=/#.*$/,mu=/[?#].*$/,yu=/(?:(^|\/)index)?\.(?:md|html)$/,ve=typeof document<"u",el={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function vu(e,t,n=!1){if(t===void 0)return!1;if(e=hi(`/${e}`),n)return new RegExp(t).test(e);if(hi(t)!==e)return!1;const s=t.match(gu);return s?(ve?location.hash:"")===s[0]:!0}function hi(e){return decodeURI(e).replace(mu,"").replace(yu,"$1")}function _u(e){return Zo.test(e)}function bu(e,t){return Object.keys((e==null?void 0:e.locales)||{}).find(n=>n!=="root"&&!_u(n)&&vu(t,`/${n}/`,!0))||"root"}function wu(e,t){var s,r,i,o,l,c,u;const n=bu(e,t);return Object.assign({},e,{localeIndex:n,lang:((s=e.locales[n])==null?void 0:s.lang)??e.lang,dir:((r=e.locales[n])==null?void 0:r.dir)??e.dir,title:((i=e.locales[n])==null?void 0:i.title)??e.title,titleTemplate:((o=e.locales[n])==null?void 0:o.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:nl(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(u=e.locales[n])==null?void 0:u.themeConfig}})}function tl(e,t){const n=t.title||e.title,s=t.titleTemplate??e.titleTemplate;if(typeof s=="string"&&s.includes(":title"))return s.replace(/:title/g,n);const r=Su(e.title,s);return n===r.slice(3)?n:`${n}${r}`}function Su(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function Tu(e,t){const[n,s]=t;if(n!=="meta")return!1;const r=Object.entries(s)[0];return r==null?!1:e.some(([i,o])=>i===n&&o[r[0]]===r[1])}function nl(e,t){return[...e.filter(n=>!Tu(t,n)),...t]}const Eu=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,xu=/^[a-z]:/i;function pi(e){const t=xu.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(Eu,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const xs=new Set;function Cu(e){if(xs.size===0){const n=typeof process=="object"&&(Es==null?void 0:Es.VITE_EXTRA_EXTENSIONS)||(Ts==null?void 0:Ts.VITE_EXTRA_EXTENSIONS)||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(s=>xs.add(s))}const t=e.split(".").pop();return t==null||!xs.has(t.toLowerCase())}function vf(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}const Au=Symbol(),Et=xe(Wa);function _f(e){const t=ie(()=>wu(Et.value,e.data.relativePath)),n=t.value.appearance,s=n==="force-dark"?He(!0):n==="force-auto"?zo():n?fu({storageKey:pu,initialValue:()=>n==="dark"?"dark":"auto",...typeof n=="object"?n:{}}):He(!1),r=He(ve?location.hash:"");return ve&&window.addEventListener("hashchange",()=>{r.value=location.hash}),Ie(()=>e.data,()=>{r.value=ve?location.hash:""}),{site:t,theme:ie(()=>t.value.themeConfig),page:ie(()=>e.data),frontmatter:ie(()=>e.data.frontmatter),params:ie(()=>e.data.params),lang:ie(()=>t.value.lang),dir:ie(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:ie(()=>t.value.localeIndex||"root"),title:ie(()=>tl(t.value,e.data)),description:ie(()=>e.data.description||t.value.description),isDark:s,hash:ie(()=>r.value)}}function Ru(){const e=bt(Au);if(!e)throw new Error("vitepress data not properly injected in app");return e}function Mu(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function gi(e){return Zo.test(e)||!e.startsWith("/")?e:Mu(Et.value.base,e)}function Ou(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),ve){const n="/";t=pi(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let s=__VP_HASH_MAP__[t.toLowerCase()];if(s||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",s=__VP_HASH_MAP__[t.toLowerCase()]),!s)return null;t=`${n}assets/${t}.${s}.js`}else t=`./${pi(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let In=[];function bf(e){In.push(e),es(()=>{In=In.filter(t=>t!==e)})}function Pu(){let e=Et.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=mi(e,n);else if(Array.isArray(e))for(const s of e){const r=mi(s,n);if(r){t=r;break}}return t}function mi(e,t){const n=document.querySelector(e);if(!n)return 0;const s=n.getBoundingClientRect().bottom;return s<0?0:s+t}const Lu=Symbol(),sl="http://a.com",Iu=()=>({path:"/",component:null,data:el});function wf(e,t){const n=Ht(Iu()),s={route:n,go:r};async function r(l=ve?location.href:"/"){var c,u;l=Cs(l),await((c=s.onBeforeRouteChange)==null?void 0:c.call(s,l))!==!1&&(ve&&l!==Cs(location.href)&&(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",l)),await o(l),await((u=s.onAfterRouteChange??s.onAfterRouteChanged)==null?void 0:u(l)))}let i=null;async function o(l,c=0,u=!1){var m,_;if(await((m=s.onBeforePageLoad)==null?void 0:m.call(s,l))===!1)return;const a=new URL(l,sl),d=i=a.pathname;try{let b=await e(d);if(!b)throw new Error(`Page not found: ${d}`);if(i===d){i=null;const{default:y,__pageData:D}=b;if(!y)throw new Error(`Invalid route component: ${y}`);await((_=s.onAfterPageLoad)==null?void 0:_.call(s,l)),n.path=ve?d:gi(d),n.component=Mn(y),n.data=Mn(D),ve&&zn(()=>{let P=Et.value.base+D.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!Et.value.cleanUrls&&!P.endsWith("/")&&(P+=".html"),P!==a.pathname&&(a.pathname=P,l=P+a.search+a.hash,history.replaceState({},"",l)),a.hash&&!c){let I=null;try{I=document.getElementById(decodeURIComponent(a.hash).slice(1))}catch(p){console.warn(p)}if(I){yi(I,a.hash);return}}window.scrollTo(0,c)})}}catch(b){if(!/fetch|Page not found/.test(b.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(b),!u)try{const y=await fetch(Et.value.base+"hashmap.json");window.__VP_HASH_MAP__=await y.json(),await o(l,c,!0);return}catch{}if(i===d){i=null,n.path=ve?d:gi(d),n.component=t?Mn(t):null;const y=ve?d.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").replace(/^\//,""):"404.md";n.data={...el,relativePath:y}}}}return ve&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",l=>{if(l.defaultPrevented||!(l.target instanceof Element)||l.target.closest("button")||l.button!==0||l.ctrlKey||l.shiftKey||l.altKey||l.metaKey)return;const c=l.target.closest("a");if(!c||c.closest(".vp-raw")||c.hasAttribute("download")||c.hasAttribute("target"))return;const u=c.getAttribute("href")??(c instanceof SVGAElement?c.getAttribute("xlink:href"):null);if(u==null)return;const{href:a,origin:d,pathname:m,hash:_,search:b}=new URL(u,c.baseURI),y=new URL(location.href);d===y.origin&&Cu(m)&&(l.preventDefault(),m===y.pathname&&b===y.search?(_!==y.hash&&(history.pushState({},"",a),window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:y.href,newURL:a}))),_?yi(c,_,c.classList.contains("header-anchor")):window.scrollTo(0,0)):r(a))},{capture:!0}),window.addEventListener("popstate",async l=>{var u;if(l.state===null)return;const c=Cs(location.href);await o(c,l.state&&l.state.scrollPosition||0),await((u=s.onAfterRouteChange??s.onAfterRouteChanged)==null?void 0:u(c))}),window.addEventListener("hashchange",l=>{l.preventDefault()})),s}function Fu(){const e=bt(Lu);if(!e)throw new Error("useRouter() is called without provider.");return e}function rl(){return Fu().route}function yi(e,t,n=!1){let s=null;try{s=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(r){console.warn(r)}if(s){let r=function(){!n||Math.abs(o-window.scrollY)>window.innerHeight?window.scrollTo(0,o):window.scrollTo({left:0,top:o,behavior:"smooth"})};const i=parseInt(window.getComputedStyle(s).paddingTop,10),o=window.scrollY+s.getBoundingClientRect().top-Pu()+i;requestAnimationFrame(r)}}function Cs(e){const t=new URL(e,sl);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),Et.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}const xn=()=>In.forEach(e=>e()),Sf=rr({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=rl(),{frontmatter:n,site:s}=Ru();return Ie(n,xn,{deep:!0,flush:"post"}),()=>Ws(e.as,s.value.contentProps??{style:{position:"relative"}},[t.component?Ws(t.component,{onVnodeMounted:xn,onVnodeUpdated:xn,onVnodeUnmounted:xn}):"404 Page Not Found"])}}),Tf=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},Nu="modulepreload",Hu=function(e){return"/"+e},vi={},Ef=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),l=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));r=Promise.allSettled(n.map(c=>{if(c=Hu(c),c in vi)return;vi[c]=!0;const u=c.endsWith(".css"),a=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${a}`))return;const d=document.createElement("link");if(d.rel=u?"stylesheet":Nu,u||(d.as="script"),d.crossOrigin="",d.href=c,l&&d.setAttribute("nonce",l),document.head.appendChild(d),u)return new Promise((m,_)=>{d.addEventListener("load",m),d.addEventListener("error",()=>_(new Error(`Unable to preload CSS for ${c}`)))})}))}function i(o){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o}return r.then(o=>{for(const l of o||[])l.status==="rejected"&&i(l.reason);return t().catch(i)})},xf=rr({setup(e,{slots:t}){const n=He(!1);return jt(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function Cf(){ve&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const s=(n=t.parentElement)==null?void 0:n.parentElement;if(!s)return;const r=Array.from(s.querySelectorAll("input")).indexOf(t);if(r<0)return;const i=s.querySelector(".blocks");if(!i)return;const o=Array.from(i.children).find(u=>u.classList.contains("active"));if(!o)return;const l=i.children[r];if(!l||o===l)return;o.classList.remove("active"),l.classList.add("active");const c=s==null?void 0:s.querySelector(`label[for="${t.id}"]`);c==null||c.scrollIntoView({block:"nearest"})}})}function Af(){if(ve){const e=new WeakMap;window.addEventListener("click",t=>{var s;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const r=n.parentElement,i=(s=n.nextElementSibling)==null?void 0:s.nextElementSibling;if(!r||!i)return;const o=/language-(shellscript|shell|bash|sh|zsh)/.test(r.className),l=[".vp-copy-ignore",".diff.remove"],c=i.cloneNode(!0);c.querySelectorAll(l.join(",")).forEach(a=>a.remove());let u=c.textContent||"";o&&(u=u.replace(/^ *(\$|>) /gm,"").trim()),Du(u).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const a=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,a)})}})}}async function Du(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const s=document.getSelection(),r=s?s.rangeCount>0&&s.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),r&&(s.removeAllRanges(),s.addRange(r)),n&&n.focus()}}function Rf(e,t){let n=!0,s=[];const r=i=>{if(n){n=!1,i.forEach(l=>{const c=As(l);for(const u of document.head.children)if(u.isEqualNode(c)){s.push(u);return}});return}const o=i.map(As);s.forEach((l,c)=>{const u=o.findIndex(a=>a==null?void 0:a.isEqualNode(l??null));u!==-1?delete o[u]:(l==null||l.remove(),delete s[c])}),o.forEach(l=>l&&document.head.appendChild(l)),s=[...s,...o].filter(Boolean)};sr(()=>{const i=e.data,o=t.value,l=i&&i.description,c=i&&i.frontmatter.head||[],u=tl(o,i);u!==document.title&&(document.title=u);const a=l||o.description;let d=document.querySelector("meta[name=description]");d?d.getAttribute("content")!==a&&d.setAttribute("content",a):As(["meta",{name:"description",content:a}]),r(nl(o.head,ju(c)))})}function As([e,t,n]){const s=document.createElement(e);for(const r in t)s.setAttribute(r,t[r]);return n&&(s.innerHTML=n),e==="script"&&t.async==null&&(s.async=!1),s}function $u(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function ju(e){return e.filter(t=>!$u(t))}const Rs=new Set,il=()=>document.createElement("link"),Vu=e=>{const t=il();t.rel="prefetch",t.href=e,document.head.appendChild(t)},ku=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let Cn;const Wu=ve&&(Cn=il())&&Cn.relList&&Cn.relList.supports&&Cn.relList.supports("prefetch")?Vu:ku;function Mf(){if(!ve||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const s=()=>{n&&n.disconnect(),n=new IntersectionObserver(i=>{i.forEach(o=>{if(o.isIntersecting){const l=o.target;n.unobserve(l);const{pathname:c}=l;if(!Rs.has(c)){Rs.add(c);const u=Ou(c);u&&Wu(u)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(i=>{const{hostname:o,pathname:l}=new URL(i.href instanceof SVGAnimatedString?i.href.animVal:i.href,i.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||i.target!=="_blank"&&o===location.hostname&&(l!==location.pathname?n.observe(i):Rs.add(l))})})};jt(s);const r=rl();Ie(()=>r.path,s),es(()=>{n&&n.disconnect()})}export{oo as $,Pu as A,Yu as B,Gu as C,bf as D,ue as E,Se as F,xe as G,Xu as H,Zo as I,rl as J,ta as K,bt as L,yf as M,Xs as N,df as O,zn as P,mf as Q,ve as R,tn as S,nf as T,qu as U,Ef as V,pf as W,ic as X,zu as Y,of as Z,Tf as _,No as a,rf as a0,Qu as a1,Rf as a2,Lu as a3,_f as a4,Au as a5,Sf as a6,xf as a7,Et as a8,wf as a9,Ou as aa,cf as ab,Mf as ac,Af as ad,Cf as ae,Ws as af,ef as ag,Bo as ah,ce as ai,bs as aj,dr as ak,af as al,ff as am,gf as an,hf as ao,uf as ap,Fu as aq,rt as ar,Uu as as,sf as at,ae as au,Ku as av,Mn as aw,lf as ax,vf as ay,Vs as b,Zu as c,rr as d,tf as e,Cu as f,gi as g,ie as h,_u as i,Fo as j,Jn as k,vu as l,Yo as m,Ys as n,js as o,He as p,Ie as q,Ju as r,sr as s,bl as t,Ru as u,jt as v,rc as w,es as x,Bu as y,Tc as z}; diff --git a/assets/chunks/framework.ePeAWSvT.js b/assets/chunks/framework.ePeAWSvT.js deleted file mode 100644 index e677b467..00000000 --- a/assets/chunks/framework.ePeAWSvT.js +++ /dev/null @@ -1,19 +0,0 @@ -/** -* @vue/shared v3.5.29 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function Bs(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const ne={},Lt=[],qe=()=>{},_i=()=>!1,cn=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Ks=e=>e.startsWith("onUpdate:"),fe=Object.assign,qs=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},cl=Object.prototype.hasOwnProperty,Z=(e,t)=>cl.call(e,t),K=Array.isArray,It=e=>an(e)==="[object Map]",bi=e=>an(e)==="[object Set]",_r=e=>an(e)==="[object Date]",q=e=>typeof e=="function",le=e=>typeof e=="string",De=e=>typeof e=="symbol",Q=e=>e!==null&&typeof e=="object",wi=e=>(Q(e)||q(e))&&q(e.then)&&q(e.catch),Si=Object.prototype.toString,an=e=>Si.call(e),al=e=>an(e).slice(8,-1),Ti=e=>an(e)==="[object Object]",Un=e=>le(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,vt=Bs(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Bn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},ul=/-\w/g,Ie=Bn(e=>e.replace(ul,t=>t.slice(1).toUpperCase())),fl=/\B([A-Z])/g,ft=Bn(e=>e.replace(fl,"-$1").toLowerCase()),Kn=Bn(e=>e.charAt(0).toUpperCase()+e.slice(1)),An=Bn(e=>e?`on${Kn(e)}`:""),lt=(e,t)=>!Object.is(e,t),Rn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},Gs=e=>{const t=parseFloat(e);return isNaN(t)?e:t},dl=e=>{const t=le(e)?Number(e):NaN;return isNaN(t)?e:t};let br;const qn=()=>br||(br=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Xs(e){if(K(e)){const t={};for(let n=0;n{if(n){const s=n.split(pl);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function Ys(e){let t="";if(le(e))t=e;else if(K(e))for(let n=0;n!!(e&&e.__v_isRef===!0),bl=e=>le(e)?e:e==null?"":K(e)||Q(e)&&(e.toString===Si||!q(e.toString))?Ci(e)?bl(e.value):JSON.stringify(e,Ai,2):String(e),Ai=(e,t)=>Ci(t)?Ai(e,t.value):It(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],i)=>(n[ls(s,i)+" =>"]=r,n),{})}:bi(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>ls(n))}:De(t)?ls(t):Q(t)&&!K(t)&&!Ti(t)?String(t):t,ls=(e,t="")=>{var n;return De(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** -* @vue/reactivity v3.5.29 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let ye;class wl{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.__v_skip=!0,this.parent=ye,!t&&ye&&(this.index=(ye.scopes||(ye.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0&&--this._on===0&&(ye=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if(Gt){let t=Gt;for(Gt=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;qt;){let t=qt;for(qt=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function Li(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Ii(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),Zs(s),Tl(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function Ms(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Ni(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Ni(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Zt)||(e.globalVersion=Zt,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Ms(e))))return;e.flags|=2;const t=e.dep,n=re,s=Fe;re=e,Fe=!0;try{Li(e);const r=e.fn(e._value);(t.version===0||lt(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{re=n,Fe=s,Ii(e),e.flags&=-3}}function Zs(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)Zs(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Tl(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Fe=!0;const Fi=[];function Ze(){Fi.push(Fe),Fe=!1}function et(){const e=Fi.pop();Fe=e===void 0?!0:e}function wr(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=re;re=void 0;try{t()}finally{re=n}}}let Zt=0;class El{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Gn{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!re||!Fe||re===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==re)n=this.activeLink=new El(re,this),re.deps?(n.prevDep=re.depsTail,re.depsTail.nextDep=n,re.depsTail=n):re.deps=re.depsTail=n,Hi(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=re.depsTail,n.nextDep=void 0,re.depsTail.nextDep=n,re.depsTail=n,re.deps===n&&(re.deps=s)}return n}trigger(t){this.version++,Zt++,this.notify(t)}notify(t){zs();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Qs()}}}function Hi(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)Hi(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Nn=new WeakMap,_t=Symbol(""),Os=Symbol(""),en=Symbol("");function _e(e,t,n){if(Fe&&re){let s=Nn.get(e);s||Nn.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new Gn),r.map=s,r.key=n),r.track()}}function ze(e,t,n,s,r,i){const o=Nn.get(e);if(!o){Zt++;return}const l=c=>{c&&c.trigger()};if(zs(),t==="clear")o.forEach(l);else{const c=K(e),u=c&&Un(n);if(c&&n==="length"){const a=Number(s);o.forEach((d,m)=>{(m==="length"||m===en||!De(m)&&m>=a)&&l(d)})}else switch((n!==void 0||o.has(void 0))&&l(o.get(n)),u&&l(o.get(en)),t){case"add":c?u&&l(o.get("length")):(l(o.get(_t)),It(e)&&l(o.get(Os)));break;case"delete":c||(l(o.get(_t)),It(e)&&l(o.get(Os)));break;case"set":It(e)&&l(o.get(_t));break}}Qs()}function xl(e,t){const n=Nn.get(e);return n&&n.get(t)}function At(e){const t=z(e);return t===e?t:(_e(t,"iterate",en),Re(e)?t:t.map($e))}function Xn(e){return _e(e=z(e),"iterate",en),e}function it(e,t){return tt(e)?Dt(ct(e)?$e(t):t):$e(t)}const Cl={__proto__:null,[Symbol.iterator](){return as(this,Symbol.iterator,e=>it(this,e))},concat(...e){return At(this).concat(...e.map(t=>K(t)?At(t):t))},entries(){return as(this,"entries",e=>(e[1]=it(this,e[1]),e))},every(e,t){return Ge(this,"every",e,t,void 0,arguments)},filter(e,t){return Ge(this,"filter",e,t,n=>n.map(s=>it(this,s)),arguments)},find(e,t){return Ge(this,"find",e,t,n=>it(this,n),arguments)},findIndex(e,t){return Ge(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Ge(this,"findLast",e,t,n=>it(this,n),arguments)},findLastIndex(e,t){return Ge(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Ge(this,"forEach",e,t,void 0,arguments)},includes(...e){return us(this,"includes",e)},indexOf(...e){return us(this,"indexOf",e)},join(e){return At(this).join(e)},lastIndexOf(...e){return us(this,"lastIndexOf",e)},map(e,t){return Ge(this,"map",e,t,void 0,arguments)},pop(){return Wt(this,"pop")},push(...e){return Wt(this,"push",e)},reduce(e,...t){return Sr(this,"reduce",e,t)},reduceRight(e,...t){return Sr(this,"reduceRight",e,t)},shift(){return Wt(this,"shift")},some(e,t){return Ge(this,"some",e,t,void 0,arguments)},splice(...e){return Wt(this,"splice",e)},toReversed(){return At(this).toReversed()},toSorted(e){return At(this).toSorted(e)},toSpliced(...e){return At(this).toSpliced(...e)},unshift(...e){return Wt(this,"unshift",e)},values(){return as(this,"values",e=>it(this,e))}};function as(e,t,n){const s=Xn(e),r=s[t]();return s!==e&&!Re(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.done||(i.value=n(i.value)),i}),r}const Al=Array.prototype;function Ge(e,t,n,s,r,i){const o=Xn(e),l=o!==e&&!Re(e),c=o[t];if(c!==Al[t]){const d=c.apply(e,i);return l?$e(d):d}let u=n;o!==e&&(l?u=function(d,m){return n.call(this,it(e,d),m,e)}:n.length>2&&(u=function(d,m){return n.call(this,d,m,e)}));const a=c.call(o,u,s);return l&&r?r(a):a}function Sr(e,t,n,s){const r=Xn(e);let i=n;return r!==e&&(Re(e)?n.length>3&&(i=function(o,l,c){return n.call(this,o,l,c,e)}):i=function(o,l,c){return n.call(this,o,it(e,l),c,e)}),r[t](i,...s)}function us(e,t,n){const s=z(e);_e(s,"iterate",en);const r=s[t](...n);return(r===-1||r===!1)&&Yn(n[0])?(n[0]=z(n[0]),s[t](...n)):r}function Wt(e,t,n=[]){Ze(),zs();const s=z(e)[t].apply(e,n);return Qs(),et(),s}const Rl=Bs("__proto__,__v_isRef,__isVue"),Di=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(De));function Ml(e){De(e)||(e=String(e));const t=z(this);return _e(t,"has",e),t.hasOwnProperty(e)}class $i{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?jl:Wi:i?ki:Vi).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=K(t);if(!r){let c;if(o&&(c=Cl[n]))return c;if(n==="hasOwnProperty")return Ml}const l=Reflect.get(t,n,ae(t)?t:s);if((De(n)?Di.has(n):Rl(n))||(r||_e(t,"get",n),i))return l;if(ae(l)){const c=o&&Un(n)?l:l.value;return r&&Q(c)?tn(c):c}return Q(l)?r?tn(l):Ht(l):l}}class ji extends $i{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];const o=K(t)&&Un(n);if(!this._isShallow){const u=tt(i);if(!Re(s)&&!tt(s)&&(i=z(i),s=z(s)),!o&&ae(i)&&!ae(s))return u||(i.value=s),!0}const l=o?Number(n)e,mn=e=>Reflect.getPrototypeOf(e);function Nl(e,t,n){return function(...s){const r=this.__v_raw,i=z(r),o=It(i),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,u=r[e](...s),a=n?Ps:t?Dt:$e;return!t&&_e(i,"iterate",c?Os:_t),fe(Object.create(u),{next(){const{value:d,done:m}=u.next();return m?{value:d,done:m}:{value:l?[a(d[0]),a(d[1])]:a(d),done:m}}})}}function yn(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Fl(e,t){const n={get(r){const i=this.__v_raw,o=z(i),l=z(r);e||(lt(r,l)&&_e(o,"get",r),_e(o,"get",l));const{has:c}=mn(o),u=t?Ps:e?Dt:$e;if(c.call(o,r))return u(i.get(r));if(c.call(o,l))return u(i.get(l));i!==o&&i.get(r)},get size(){const r=this.__v_raw;return!e&&_e(z(r),"iterate",_t),r.size},has(r){const i=this.__v_raw,o=z(i),l=z(r);return e||(lt(r,l)&&_e(o,"has",r),_e(o,"has",l)),r===l?i.has(r):i.has(r)||i.has(l)},forEach(r,i){const o=this,l=o.__v_raw,c=z(l),u=t?Ps:e?Dt:$e;return!e&&_e(c,"iterate",_t),l.forEach((a,d)=>r.call(i,u(a),u(d),o))}};return fe(n,e?{add:yn("add"),set:yn("set"),delete:yn("delete"),clear:yn("clear")}:{add(r){!t&&!Re(r)&&!tt(r)&&(r=z(r));const i=z(this);return mn(i).has.call(i,r)||(i.add(r),ze(i,"add",r,r)),this},set(r,i){!t&&!Re(i)&&!tt(i)&&(i=z(i));const o=z(this),{has:l,get:c}=mn(o);let u=l.call(o,r);u||(r=z(r),u=l.call(o,r));const a=c.call(o,r);return o.set(r,i),u?lt(i,a)&&ze(o,"set",r,i):ze(o,"add",r,i),this},delete(r){const i=z(this),{has:o,get:l}=mn(i);let c=o.call(i,r);c||(r=z(r),c=o.call(i,r)),l&&l.call(i,r);const u=i.delete(r);return c&&ze(i,"delete",r,void 0),u},clear(){const r=z(this),i=r.size!==0,o=r.clear();return i&&ze(r,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=Nl(r,e,t)}),n}function er(e,t){const n=Fl(e,t);return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(Z(n,r)&&r in s?n:s,r,i)}const Hl={get:er(!1,!1)},Dl={get:er(!1,!0)},$l={get:er(!0,!1)};const Vi=new WeakMap,ki=new WeakMap,Wi=new WeakMap,jl=new WeakMap;function Vl(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function kl(e){return e.__v_skip||!Object.isExtensible(e)?0:Vl(al(e))}function Ht(e){return tt(e)?e:tr(e,!1,Pl,Hl,Vi)}function Wl(e){return tr(e,!1,Il,Dl,ki)}function tn(e){return tr(e,!0,Ll,$l,Wi)}function tr(e,t,n,s,r){if(!Q(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=kl(e);if(i===0)return e;const o=r.get(e);if(o)return o;const l=new Proxy(e,i===2?s:n);return r.set(e,l),l}function ct(e){return tt(e)?ct(e.__v_raw):!!(e&&e.__v_isReactive)}function tt(e){return!!(e&&e.__v_isReadonly)}function Re(e){return!!(e&&e.__v_isShallow)}function Yn(e){return e?!!e.__v_raw:!1}function z(e){const t=e&&e.__v_raw;return t?z(t):e}function Mn(e){return!Z(e,"__v_skip")&&Object.isExtensible(e)&&Ei(e,"__v_skip",!0),e}const $e=e=>Q(e)?Ht(e):e,Dt=e=>Q(e)?tn(e):e;function ae(e){return e?e.__v_isRef===!0:!1}function He(e){return Ui(e,!1)}function Ee(e){return Ui(e,!0)}function Ui(e,t){return ae(e)?e:new Ul(e,t)}class Ul{constructor(t,n){this.dep=new Gn,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:z(t),this._value=n?t:$e(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||Re(t)||tt(t);t=s?t:z(t),lt(t,n)&&(this._rawValue=t,this._value=s?t:$e(t),this.dep.trigger())}}function Jn(e){return ae(e)?e.value:e}function ce(e){return q(e)?e():Jn(e)}const Bl={get:(e,t,n)=>t==="__v_raw"?e:Jn(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return ae(r)&&!ae(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function Bi(e){return ct(e)?e:new Proxy(e,Bl)}class Kl{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new Gn,{get:s,set:r}=t(n.track.bind(n),n.trigger.bind(n));this._get=s,this._set=r}get value(){return this._value=this._get()}set value(t){this._set(t)}}function ql(e){return new Kl(e)}class Gl{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0,this._raw=z(t);let r=!0,i=t;if(!K(t)||!Un(String(n)))do r=!Yn(i)||Re(i);while(r&&(i=i.__v_raw));this._shallow=r}get value(){let t=this._object[this._key];return this._shallow&&(t=Jn(t)),this._value=t===void 0?this._defaultValue:t}set value(t){if(this._shallow&&ae(this._raw[this._key])){const n=this._object[this._key];if(ae(n)){n.value=t;return}}this._object[this._key]=t}get dep(){return xl(this._raw,this._key)}}class Xl{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function Yl(e,t,n){return ae(e)?e:q(e)?new Xl(e):Q(e)&&arguments.length>1?Jl(e,t,n):He(e)}function Jl(e,t,n){return new Gl(e,t,n)}class zl{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Gn(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Zt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&re!==this)return Pi(this,!0),!0}get value(){const t=this.dep.track();return Ni(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Ql(e,t,n=!1){let s,r;return q(e)?s=e:(s=e.get,r=e.set),new zl(s,r,n)}const vn={},Fn=new WeakMap;let mt;function Zl(e,t=!1,n=mt){if(n){let s=Fn.get(n);s||Fn.set(n,s=[]),s.push(e)}}function ec(e,t,n=ne){const{immediate:s,deep:r,once:i,scheduler:o,augmentJob:l,call:c}=n,u=g=>r?g:Re(g)||r===!1||r===0?Qe(g,1):Qe(g);let a,d,m,_,b=!1,y=!1;if(ae(e)?(d=()=>e.value,b=Re(e)):ct(e)?(d=()=>u(e),b=!0):K(e)?(y=!0,b=e.some(g=>ct(g)||Re(g)),d=()=>e.map(g=>{if(ae(g))return g.value;if(ct(g))return u(g);if(q(g))return c?c(g,2):g()})):q(e)?t?d=c?()=>c(e,2):e:d=()=>{if(m){Ze();try{m()}finally{et()}}const g=mt;mt=a;try{return c?c(e,3,[_]):e(_)}finally{mt=g}}:d=qe,t&&r){const g=d,A=r===!0?1/0:r;d=()=>Qe(g(),A)}const D=Ri(),P=()=>{a.stop(),D&&D.active&&qs(D.effects,a)};if(i&&t){const g=t;t=(...A)=>{g(...A),P()}}let I=y?new Array(e.length).fill(vn):vn;const p=g=>{if(!(!(a.flags&1)||!a.dirty&&!g))if(t){const A=a.run();if(r||b||(y?A.some((j,M)=>lt(j,I[M])):lt(A,I))){m&&m();const j=mt;mt=a;try{const M=[A,I===vn?void 0:y&&I[0]===vn?[]:I,_];I=A,c?c(t,3,M):t(...M)}finally{mt=j}}}else a.run()};return l&&l(p),a=new Mi(d),a.scheduler=o?()=>o(p,!1):p,_=g=>Zl(g,!1,a),m=a.onStop=()=>{const g=Fn.get(a);if(g){if(c)c(g,4);else for(const A of g)A();Fn.delete(a)}},t?s?p(!0):I=a.run():o?o(p.bind(null,!0),!0):a.run(),P.pause=a.pause.bind(a),P.resume=a.resume.bind(a),P.stop=P,P}function Qe(e,t=1/0,n){if(t<=0||!Q(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,ae(e))Qe(e.value,t,n);else if(K(e))for(let s=0;s{Qe(s,t,n)});else if(Ti(e)){for(const s in e)Qe(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&Qe(e[s],t,n)}return e}/** -* @vue/runtime-core v3.5.29 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function un(e,t,n,s){try{return s?e(...s):e()}catch(r){fn(r,t,n)}}function je(e,t,n,s){if(q(e)){const r=un(e,t,n,s);return r&&wi(r)&&r.catch(i=>{fn(i,t,n)}),r}if(K(e)){const r=[];for(let i=0;i>>1,r=we[s],i=nn(r);i=nn(n)?we.push(e):we.splice(nc(t),0,e),e.flags|=1,qi()}}function qi(){Hn||(Hn=Ki.then(Gi))}function sc(e){K(e)?Nt.push(...e):ot&&e.id===-1?ot.splice(Mt+1,0,e):e.flags&1||(Nt.push(e),e.flags|=1),qi()}function Tr(e,t,n=Ue+1){for(;nnn(n)-nn(s));if(Nt.length=0,ot){ot.push(...t);return}for(ot=t,Mt=0;Mte.id==null?e.flags&2?-1:1/0:e.id;function Gi(e){try{for(Ue=0;Ue{s._d&&kn(-1);const i=$n(t);let o;try{o=e(...r)}finally{$n(i),s._d&&kn(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function Wu(e,t){if(pe===null)return e;const n=ns(pe),s=e.dirs||(e.dirs=[]);for(let r=0;r1)return n&&q(t)?t.call(s&&s.proxy):t}}function Yi(){return!!(xt()||St)}const oc=Symbol.for("v-scx"),lc=()=>bt(oc);function sr(e,t){return Qn(e,null,t)}function Uu(e,t){return Qn(e,null,{flush:"post"})}function Le(e,t,n){return Qn(e,t,n)}function Qn(e,t,n=ne){const{immediate:s,deep:r,flush:i,once:o}=n,l=fe({},n),c=t&&s||!t&&i!=="post";let u;if($t){if(i==="sync"){const _=lc();u=_.__watcherHandles||(_.__watcherHandles=[])}else if(!c){const _=()=>{};return _.stop=qe,_.resume=qe,_.pause=qe,_}}const a=he;l.call=(_,b,y)=>je(_,a,b,y);let d=!1;i==="post"?l.scheduler=_=>{me(_,a&&a.suspense)}:i!=="sync"&&(d=!0,l.scheduler=(_,b)=>{b?_():nr(_)}),l.augmentJob=_=>{t&&(_.flags|=4),d&&(_.flags|=2,a&&(_.id=a.uid,_.i=a))};const m=ec(e,t,l);return $t&&(u?u.push(m):c&&m()),m}function cc(e,t,n){const s=this.proxy,r=le(e)?e.includes(".")?Ji(s,e):()=>s[e]:e.bind(s,s);let i;q(t)?i=t:(i=t.handler,n=t);const o=hn(this),l=Qn(r,i.bind(s),n);return o(),l}function Ji(e,t){const n=t.split(".");return()=>{let s=e;for(let r=0;re.__isTeleport,Xt=e=>e&&(e.disabled||e.disabled===""),Er=e=>e&&(e.defer||e.defer===""),xr=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Cr=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Ls=(e,t)=>{const n=e&&e.to;return le(n)?t?t(n):null:n},Zi={name:"Teleport",__isTeleport:!0,process(e,t,n,s,r,i,o,l,c,u){const{mc:a,pc:d,pbc:m,o:{insert:_,querySelector:b,createText:y,createComment:D}}=u,P=Xt(t.props);let{shapeFlag:I,children:p,dynamicChildren:g}=t;if(e==null){const A=t.el=y(""),j=t.anchor=y("");_(A,n,s),_(j,n,s);const M=(T,O)=>{I&16&&a(p,T,O,r,i,o,l,c)},k=()=>{const T=t.target=Ls(t.props,b),O=Is(T,t,y,_);T&&(o!=="svg"&&xr(T)?o="svg":o!=="mathml"&&Cr(T)&&(o="mathml"),r&&r.isCE&&(r.ce._teleportTargets||(r.ce._teleportTargets=new Set)).add(T),P||(M(T,O),On(t,!1)))};P&&(M(n,j),On(t,!0)),Er(t.props)?(t.el.__isMounted=!1,me(()=>{k(),delete t.el.__isMounted},i)):k()}else{if(Er(t.props)&&e.el.__isMounted===!1){me(()=>{Zi.process(e,t,n,s,r,i,o,l,c,u)},i);return}t.el=e.el,t.targetStart=e.targetStart;const A=t.anchor=e.anchor,j=t.target=e.target,M=t.targetAnchor=e.targetAnchor,k=Xt(e.props),T=k?n:j,O=k?A:M;if(o==="svg"||xr(j)?o="svg":(o==="mathml"||Cr(j))&&(o="mathml"),g?(m(e.dynamicChildren,g,T,r,i,o,l),cr(e,t,!0)):c||d(e,t,T,O,r,i,o,l,!1),P)k?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):_n(t,n,A,u,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const R=t.target=Ls(t.props,b);R&&_n(t,R,null,u,0)}else k&&_n(t,j,M,u,1);On(t,P)}},remove(e,t,n,{um:s,o:{remove:r}},i){const{shapeFlag:o,children:l,anchor:c,targetStart:u,targetAnchor:a,target:d,props:m}=e;if(d&&(r(u),r(a)),i&&r(c),o&16){const _=i||!Xt(m);for(let b=0;b{e.isMounted=!0}),oo(()=>{e.isUnmounting=!0}),e}const Me=[Function,Array],eo={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Me,onEnter:Me,onAfterEnter:Me,onEnterCancelled:Me,onBeforeLeave:Me,onLeave:Me,onAfterLeave:Me,onLeaveCancelled:Me,onBeforeAppear:Me,onAppear:Me,onAfterAppear:Me,onAppearCancelled:Me},to=e=>{const t=e.subTree;return t.component?to(t.component):t},fc={name:"BaseTransition",props:eo,setup(e,{slots:t}){const n=xt(),s=uc();return()=>{const r=t.default&&ro(t.default(),!0);if(!r||!r.length)return;const i=no(r),o=z(e),{mode:l}=o;if(s.isLeaving)return fs(i);const c=Ar(i);if(!c)return fs(i);let u=Ns(c,o,s,n,d=>u=d);c.type!==de&&sn(c,u);let a=n.subTree&&Ar(n.subTree);if(a&&a.type!==de&&!yt(a,c)&&to(n).type!==de){let d=Ns(a,o,s,n);if(sn(a,d),l==="out-in"&&c.type!==de)return s.isLeaving=!0,d.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete d.afterLeave,a=void 0},fs(i);l==="in-out"&&c.type!==de?d.delayLeave=(m,_,b)=>{const y=so(s,a);y[String(a.key)]=a,m[Ke]=()=>{_(),m[Ke]=void 0,delete u.delayedLeave,a=void 0},u.delayedLeave=()=>{b(),delete u.delayedLeave,a=void 0}}:a=void 0}else a&&(a=void 0);return i}}};function no(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==de){t=n;break}}return t}const dc=fc;function so(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function Ns(e,t,n,s,r){const{appear:i,mode:o,persisted:l=!1,onBeforeEnter:c,onEnter:u,onAfterEnter:a,onEnterCancelled:d,onBeforeLeave:m,onLeave:_,onAfterLeave:b,onLeaveCancelled:y,onBeforeAppear:D,onAppear:P,onAfterAppear:I,onAppearCancelled:p}=t,g=String(e.key),A=so(n,e),j=(T,O)=>{T&&je(T,s,9,O)},M=(T,O)=>{const R=O[1];j(T,O),K(T)?T.every(w=>w.length<=1)&&R():T.length<=1&&R()},k={mode:o,persisted:l,beforeEnter(T){let O=c;if(!n.isMounted)if(i)O=D||c;else return;T[Ke]&&T[Ke](!0);const R=A[g];R&&yt(e,R)&&R.el[Ke]&&R.el[Ke](),j(O,[T])},enter(T){if(A[g]===e)return;let O=u,R=a,w=d;if(!n.isMounted)if(i)O=P||u,R=I||a,w=p||d;else return;let H=!1;T[Ut]=oe=>{H||(H=!0,oe?j(w,[T]):j(R,[T]),k.delayedLeave&&k.delayedLeave(),T[Ut]=void 0)};const Y=T[Ut].bind(null,!1);O?M(O,[T,Y]):Y()},leave(T,O){const R=String(e.key);if(T[Ut]&&T[Ut](!0),n.isUnmounting)return O();j(m,[T]);let w=!1;T[Ke]=Y=>{w||(w=!0,O(),Y?j(y,[T]):j(b,[T]),T[Ke]=void 0,A[R]===e&&delete A[R])};const H=T[Ke].bind(null,!1);A[R]=e,_?M(_,[T,H]):H()},clone(T){const O=Ns(T,t,n,s,r);return r&&r(O),O}};return k}function fs(e){if(dn(e))return e=at(e),e.children=null,e}function Ar(e){if(!dn(e))return Qi(e.type)&&e.children?no(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&q(n.default))return n.default()}}function sn(e,t){e.shapeFlag&6&&e.component?(e.transition=t,sn(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function ro(e,t=!1,n){let s=[],r=0;for(let i=0;i1)for(let i=0;iFt(y,t&&(K(t)?t[D]:t),n,s,r));return}if(wt(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&Ft(e,t,n,s.component.subTree);return}const i=s.shapeFlag&4?ns(s.component):s.el,o=r?null:i,{i:l,r:c}=e,u=t&&t.r,a=l.refs===ne?l.refs={}:l.refs,d=l.setupState,m=z(d),_=d===ne?_i:y=>Rr(a,y)?!1:Z(m,y),b=(y,D)=>!(D&&Rr(a,D));if(u!=null&&u!==c){if(Mr(t),le(u))a[u]=null,_(u)&&(d[u]=null);else if(ae(u)){const y=t;b(u,y.k)&&(u.value=null),y.k&&(a[y.k]=null)}}if(q(c))un(c,l,12,[o,a]);else{const y=le(c),D=ae(c);if(y||D){const P=()=>{if(e.f){const I=y?_(c)?d[c]:a[c]:b()||!e.k?c.value:a[e.k];if(r)K(I)&&qs(I,i);else if(K(I))I.includes(i)||I.push(i);else if(y)a[c]=[i],_(c)&&(d[c]=a[c]);else{const p=[i];b(c,e.k)&&(c.value=p),e.k&&(a[e.k]=p)}}else y?(a[c]=o,_(c)&&(d[c]=o)):D&&(b(c,e.k)&&(c.value=o),e.k&&(a[e.k]=o))};if(o){const I=()=>{P(),jn.delete(e)};I.id=-1,jn.set(e,I),me(I,n)}else Mr(e),P()}}}function Mr(e){const t=jn.get(e);t&&(t.flags|=8,jn.delete(e))}let Or=!1;const Rt=()=>{Or||(console.error("Hydration completed but contains mismatches."),Or=!0)},hc=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",pc=e=>e.namespaceURI.includes("MathML"),bn=e=>{if(e.nodeType===1){if(hc(e))return"svg";if(pc(e))return"mathml"}},Pt=e=>e.nodeType===8;function gc(e){const{mt:t,p:n,o:{patchProp:s,createText:r,nextSibling:i,parentNode:o,remove:l,insert:c,createComment:u}}=e,a=(p,g)=>{if(!g.hasChildNodes()){n(null,p,g),Dn(),g._vnode=p;return}d(g.firstChild,p,null,null,null),Dn(),g._vnode=p},d=(p,g,A,j,M,k=!1)=>{k=k||!!g.dynamicChildren;const T=Pt(p)&&p.data==="[",O=()=>y(p,g,A,j,M,T),{type:R,ref:w,shapeFlag:H,patchFlag:Y}=g;let oe=p.nodeType;g.el=p,Y===-2&&(k=!1,g.dynamicChildren=null);let U=null;switch(R){case Tt:oe!==3?g.children===""?(c(g.el=r(""),o(p),p),U=p):U=O():(p.data!==g.children&&(Rt(),p.data=g.children),U=i(p));break;case de:I(p)?(U=i(p),P(g.el=p.content.firstChild,p,A)):oe!==8||T?U=O():U=i(p);break;case Jt:if(T&&(p=i(p),oe=p.nodeType),oe===1||oe===3){U=p;const X=!g.children.length;for(let V=0;V{k=k||!!g.dynamicChildren;const{type:T,props:O,patchFlag:R,shapeFlag:w,dirs:H,transition:Y}=g,oe=T==="input"||T==="option";if(oe||R!==-1){H&&Be(g,null,A,"created");let U=!1;if(I(p)){U=Ao(null,Y)&&A&&A.vnode.props&&A.vnode.props.appear;const V=p.content.firstChild;if(U){const te=V.getAttribute("class");te&&(V.$cls=te),Y.beforeEnter(V)}P(V,p,A),g.el=p=V}if(w&16&&!(O&&(O.innerHTML||O.textContent))){let V=_(p.firstChild,g,p,A,j,M,k);for(;V;){wn(p,1)||Rt();const te=V;V=V.nextSibling,l(te)}}else if(w&8){let V=g.children;V[0]===` -`&&(p.tagName==="PRE"||p.tagName==="TEXTAREA")&&(V=V.slice(1));const{textContent:te}=p;te!==V&&te!==V.replace(/\r\n|\r/g,` -`)&&(wn(p,0)||Rt(),p.textContent=g.children)}if(O){if(oe||!k||R&48){const V=p.tagName.includes("-");for(const te in O)(oe&&(te.endsWith("value")||te==="indeterminate")||cn(te)&&!vt(te)||te[0]==="."||V&&!vt(te))&&s(p,te,null,O[te],void 0,A)}else if(O.onClick)s(p,"onClick",null,O.onClick,void 0,A);else if(R&4&&ct(O.style))for(const V in O.style)O.style[V]}let X;(X=O&&O.onVnodeBeforeMount)&&Oe(X,A,g),H&&Be(g,null,A,"beforeMount"),((X=O&&O.onVnodeMounted)||H||U)&&Po(()=>{X&&Oe(X,A,g),U&&Y.enter(p),H&&Be(g,null,A,"mounted")},j)}return p.nextSibling},_=(p,g,A,j,M,k,T)=>{T=T||!!g.dynamicChildren;const O=g.children,R=O.length;for(let w=0;w{const{slotScopeIds:T}=g;T&&(M=M?M.concat(T):T);const O=o(p),R=_(i(p),g,O,A,j,M,k);return R&&Pt(R)&&R.data==="]"?i(g.anchor=R):(Rt(),c(g.anchor=u("]"),O,R),R)},y=(p,g,A,j,M,k)=>{if(wn(p.parentElement,1)||Rt(),g.el=null,k){const R=D(p);for(;;){const w=i(p);if(w&&w!==R)l(w);else break}}const T=i(p),O=o(p);return l(p),n(null,g,O,T,A,j,bn(O),M),A&&(A.vnode.el=g.el,yo(A,g.el)),T},D=(p,g="[",A="]")=>{let j=0;for(;p;)if(p=i(p),p&&Pt(p)&&(p.data===g&&j++,p.data===A)){if(j===0)return i(p);j--}return p},P=(p,g,A)=>{const j=g.parentNode;j&&j.replaceChild(p,g);let M=A;for(;M;)M.vnode.el===g&&(M.vnode.el=M.subTree.el=p),M=M.parent},I=p=>p.nodeType===1&&p.tagName==="TEMPLATE";return[a,d]}const Pr="data-allow-mismatch",mc={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function wn(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(Pr);)e=e.parentElement;const n=e&&e.getAttribute(Pr);if(n==null)return!1;if(n==="")return!0;{const s=n.split(",");return t===0&&s.includes("children")?!0:s.includes(mc[t])}}qn().requestIdleCallback;qn().cancelIdleCallback;function yc(e,t){if(Pt(e)&&e.data==="["){let n=1,s=e.nextSibling;for(;s;){if(s.nodeType===1){if(t(s)===!1)break}else if(Pt(s))if(s.data==="]"){if(--n===0)break}else s.data==="["&&n++;s=s.nextSibling}}else t(e)}const wt=e=>!!e.type.__asyncLoader;function Ku(e){q(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:s,delay:r=200,hydrate:i,timeout:o,suspensible:l=!0,onError:c}=e;let u=null,a,d=0;const m=()=>(d++,u=null,_()),_=()=>{let b;return u||(b=u=t().catch(y=>{if(y=y instanceof Error?y:new Error(String(y)),c)return new Promise((D,P)=>{c(y,()=>D(m()),()=>P(y),d+1)});throw y}).then(y=>b!==u&&u?u:(y&&(y.__esModule||y[Symbol.toStringTag]==="Module")&&(y=y.default),a=y,y)))};return rr({name:"AsyncComponentWrapper",__asyncLoader:_,__asyncHydrate(b,y,D){let P=!1;(y.bu||(y.bu=[])).push(()=>P=!0);const I=()=>{P||D()},p=i?()=>{const g=i(I,A=>yc(b,A));g&&(y.bum||(y.bum=[])).push(g)}:I;a?p():_().then(()=>!y.isUnmounted&&p())},get __asyncResolved(){return a},setup(){const b=he;if(ir(b),a)return()=>Sn(a,b);const y=p=>{u=null,fn(p,b,13,!s)};if(l&&b.suspense||$t)return _().then(p=>()=>Sn(p,b)).catch(p=>(y(p),()=>s?ue(s,{error:p}):null));const D=He(!1),P=He(),I=He(!!r);return r&&setTimeout(()=>{I.value=!1},r),o!=null&&setTimeout(()=>{if(!D.value&&!P.value){const p=new Error(`Async component timed out after ${o}ms.`);y(p),P.value=p}},o),_().then(()=>{D.value=!0,b.parent&&dn(b.parent.vnode)&&b.parent.update()}).catch(p=>{y(p),P.value=p}),()=>{if(D.value&&a)return Sn(a,b);if(P.value&&s)return ue(s,{error:P.value});if(n&&!I.value)return Sn(n,b)}}})}function Sn(e,t){const{ref:n,props:s,children:r,ce:i}=t.vnode,o=ue(e,s,r);return o.ref=n,o.ce=i,delete t.vnode.ce,o}const dn=e=>e.type.__isKeepAlive;function vc(e,t){io(e,"a",t)}function _c(e,t){io(e,"da",t)}function io(e,t,n=he){const s=e.__wdc||(e.__wdc=()=>{let r=n;for(;r;){if(r.isDeactivated)return;r=r.parent}return e()});if(Zn(t,s,n),n){let r=n.parent;for(;r&&r.parent;)dn(r.parent.vnode)&&bc(s,t,n,r),r=r.parent}}function bc(e,t,n,s){const r=Zn(t,e,s,!0);es(()=>{qs(s[t],r)},n)}function Zn(e,t,n=he,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{Ze();const l=hn(n),c=je(t,n,e,o);return l(),et(),c});return s?r.unshift(i):r.push(i),i}}const st=e=>(t,n=he)=>{(!$t||e==="sp")&&Zn(e,(...s)=>t(...s),n)},wc=st("bm"),jt=st("m"),Sc=st("bu"),Tc=st("u"),oo=st("bum"),es=st("um"),Ec=st("sp"),xc=st("rtg"),Cc=st("rtc");function Ac(e,t=he){Zn("ec",e,t)}const lo="components";function qu(e,t){return ao(lo,e,!0,t)||e}const co=Symbol.for("v-ndc");function Gu(e){return le(e)?ao(lo,e,!1)||e:e||co}function ao(e,t,n=!0,s=!1){const r=pe||he;if(r){const i=r.type;{const l=ca(i,!1);if(l&&(l===t||l===Ie(t)||l===Kn(Ie(t))))return i}const o=Lr(r[e]||i[e],t)||Lr(r.appContext[e],t);return!o&&s?i:o}}function Lr(e,t){return e&&(e[t]||e[Ie(t)]||e[Kn(Ie(t))])}function Xu(e,t,n,s){let r;const i=n,o=K(e);if(o||le(e)){const l=o&&ct(e);let c=!1,u=!1;l&&(c=!Re(e),u=tt(e),e=Xn(e)),r=new Array(e.length);for(let a=0,d=e.length;at(l,c,void 0,i));else{const l=Object.keys(e);r=new Array(l.length);for(let c=0,u=l.length;c0;return t!=="default"&&(n.name=t),js(),Vs(Se,null,[ue("slot",n,s&&s())],u?-2:64)}let i=e[t];i&&i._c&&(i._d=!1),js();const o=i&&uo(i(n)),l=n.key||o&&o.key,c=Vs(Se,{key:(l&&!De(l)?l:`_${t}`)+(!o&&s?"_fb":"")},o||(s?s():[]),o&&e._===1?64:-2);return!r&&c.scopeId&&(c.slotScopeIds=[c.scopeId+"-s"]),i&&i._c&&(i._d=!0),c}function uo(e){return e.some(t=>on(t)?!(t.type===de||t.type===Se&&!uo(t.children)):!0)?e:null}function Ju(e,t){const n={};for(const s in e)n[/[A-Z]/.test(s)?`on:${s}`:An(s)]=e[s];return n}const Fs=e=>e?Ho(e)?ns(e):Fs(e.parent):null,Yt=fe(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Fs(e.parent),$root:e=>Fs(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>ho(e),$forceUpdate:e=>e.f||(e.f=()=>{nr(e.update)}),$nextTick:e=>e.n||(e.n=zn.bind(e.proxy)),$watch:e=>cc.bind(e)}),ds=(e,t)=>e!==ne&&!e.__isScriptSetup&&Z(e,t),Rc={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:l,appContext:c}=e;if(t[0]!=="$"){const m=o[t];if(m!==void 0)switch(m){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(ds(s,t))return o[t]=1,s[t];if(r!==ne&&Z(r,t))return o[t]=2,r[t];if(Z(i,t))return o[t]=3,i[t];if(n!==ne&&Z(n,t))return o[t]=4,n[t];Hs&&(o[t]=0)}}const u=Yt[t];let a,d;if(u)return t==="$attrs"&&_e(e.attrs,"get",""),u(e);if((a=l.__cssModules)&&(a=a[t]))return a;if(n!==ne&&Z(n,t))return o[t]=4,n[t];if(d=c.config.globalProperties,Z(d,t))return d[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return ds(r,t)?(r[t]=n,!0):s!==ne&&Z(s,t)?(s[t]=n,!0):Z(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,props:i,type:o}},l){let c;return!!(n[l]||e!==ne&&l[0]!=="$"&&Z(e,l)||ds(t,l)||Z(i,l)||Z(s,l)||Z(Yt,l)||Z(r.config.globalProperties,l)||(c=o.__cssModules)&&c[l])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Z(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function zu(){return Mc().slots}function Mc(e){const t=xt();return t.setupContext||(t.setupContext=$o(t))}function Ir(e){return K(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let Hs=!0;function Oc(e){const t=ho(e),n=e.proxy,s=e.ctx;Hs=!1,t.beforeCreate&&Nr(t.beforeCreate,e,"bc");const{data:r,computed:i,methods:o,watch:l,provide:c,inject:u,created:a,beforeMount:d,mounted:m,beforeUpdate:_,updated:b,activated:y,deactivated:D,beforeDestroy:P,beforeUnmount:I,destroyed:p,unmounted:g,render:A,renderTracked:j,renderTriggered:M,errorCaptured:k,serverPrefetch:T,expose:O,inheritAttrs:R,components:w,directives:H,filters:Y}=t;if(u&&Pc(u,s,null),o)for(const X in o){const V=o[X];q(V)&&(s[X]=V.bind(n))}if(r){const X=r.call(n,n);Q(X)&&(e.data=Ht(X))}if(Hs=!0,i)for(const X in i){const V=i[X],te=q(V)?V.bind(n,n):q(V.get)?V.get.bind(n,n):qe,pn=!q(V)&&q(V.set)?V.set.bind(n):qe,dt=ie({get:te,set:pn});Object.defineProperty(s,X,{enumerable:!0,configurable:!0,get:()=>dt.value,set:ke=>dt.value=ke})}if(l)for(const X in l)fo(l[X],s,n,X);if(c){const X=q(c)?c.call(n):c;Reflect.ownKeys(X).forEach(V=>{ic(V,X[V])})}a&&Nr(a,e,"c");function U(X,V){K(V)?V.forEach(te=>X(te.bind(n))):V&&X(V.bind(n))}if(U(wc,d),U(jt,m),U(Sc,_),U(Tc,b),U(vc,y),U(_c,D),U(Ac,k),U(Cc,j),U(xc,M),U(oo,I),U(es,g),U(Ec,T),K(O))if(O.length){const X=e.exposed||(e.exposed={});O.forEach(V=>{Object.defineProperty(X,V,{get:()=>n[V],set:te=>n[V]=te,enumerable:!0})})}else e.exposed||(e.exposed={});A&&e.render===qe&&(e.render=A),R!=null&&(e.inheritAttrs=R),w&&(e.components=w),H&&(e.directives=H),T&&ir(e)}function Pc(e,t,n=qe){K(e)&&(e=Ds(e));for(const s in e){const r=e[s];let i;Q(r)?"default"in r?i=bt(r.from||s,r.default,!0):i=bt(r.from||s):i=bt(r),ae(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):t[s]=i}}function Nr(e,t,n){je(K(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function fo(e,t,n,s){let r=s.includes(".")?Ji(n,s):()=>n[s];if(le(e)){const i=t[e];q(i)&&Le(r,i)}else if(q(e))Le(r,e.bind(n));else if(Q(e))if(K(e))e.forEach(i=>fo(i,t,n,s));else{const i=q(e.handler)?e.handler.bind(n):t[e.handler];q(i)&&Le(r,i,e)}}function ho(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:i,config:{optionMergeStrategies:o}}=e.appContext,l=i.get(t);let c;return l?c=l:!r.length&&!n&&!s?c=t:(c={},r.length&&r.forEach(u=>Vn(c,u,o,!0)),Vn(c,t,o)),Q(t)&&i.set(t,c),c}function Vn(e,t,n,s=!1){const{mixins:r,extends:i}=t;i&&Vn(e,i,n,!0),r&&r.forEach(o=>Vn(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=Lc[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const Lc={data:Fr,props:Hr,emits:Hr,methods:Kt,computed:Kt,beforeCreate:be,created:be,beforeMount:be,mounted:be,beforeUpdate:be,updated:be,beforeDestroy:be,beforeUnmount:be,destroyed:be,unmounted:be,activated:be,deactivated:be,errorCaptured:be,serverPrefetch:be,components:Kt,directives:Kt,watch:Nc,provide:Fr,inject:Ic};function Fr(e,t){return t?e?function(){return fe(q(e)?e.call(this,this):e,q(t)?t.call(this,this):t)}:t:e}function Ic(e,t){return Kt(Ds(e),Ds(t))}function Ds(e){if(K(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ie(t)}Modifiers`]||e[`${ft(t)}Modifiers`];function $c(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||ne;let r=n;const i=t.startsWith("update:"),o=i&&Dc(s,t.slice(7));o&&(o.trim&&(r=n.map(a=>le(a)?a.trim():a)),o.number&&(r=n.map(Gs)));let l,c=s[l=An(t)]||s[l=An(Ie(t))];!c&&i&&(c=s[l=An(ft(t))]),c&&je(c,e,6,r);const u=s[l+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,je(u,e,6,r)}}const jc=new WeakMap;function go(e,t,n=!1){const s=n?jc:t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={},l=!1;if(!q(e)){const c=u=>{const a=go(u,t,!0);a&&(l=!0,fe(o,a))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!l?(Q(e)&&s.set(e,null),null):(K(i)?i.forEach(c=>o[c]=null):fe(o,i),Q(e)&&s.set(e,o),o)}function ts(e,t){return!e||!cn(t)?!1:(t=t.slice(2).replace(/Once$/,""),Z(e,t[0].toLowerCase()+t.slice(1))||Z(e,ft(t))||Z(e,t))}function hs(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:l,emit:c,render:u,renderCache:a,props:d,data:m,setupState:_,ctx:b,inheritAttrs:y}=e,D=$n(e);let P,I;try{if(n.shapeFlag&4){const g=r||s,A=g;P=Pe(u.call(A,g,a,d,_,m,b)),I=l}else{const g=t;P=Pe(g.length>1?g(d,{attrs:l,slots:o,emit:c}):g(d,null)),I=t.props?l:Vc(l)}}catch(g){zt.length=0,fn(g,e,1),P=ue(de)}let p=P;if(I&&y!==!1){const g=Object.keys(I),{shapeFlag:A}=p;g.length&&A&7&&(i&&g.some(Ks)&&(I=kc(I,i)),p=at(p,I,!1,!0))}return n.dirs&&(p=at(p,null,!1,!0),p.dirs=p.dirs?p.dirs.concat(n.dirs):n.dirs),n.transition&&sn(p,n.transition),P=p,$n(D),P}const Vc=e=>{let t;for(const n in e)(n==="class"||n==="style"||cn(n))&&((t||(t={}))[n]=e[n]);return t},kc=(e,t)=>{const n={};for(const s in e)(!Ks(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Wc(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:l,patchFlag:c}=t,u=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?Dr(s,o,u):!!o;if(c&8){const a=t.dynamicProps;for(let d=0;dObject.create(vo),bo=e=>Object.getPrototypeOf(e)===vo;function Uc(e,t,n,s=!1){const r={},i=_o();e.propsDefaults=Object.create(null),wo(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:Wl(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function Bc(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,l=z(r),[c]=e.propsOptions;let u=!1;if((s||o>0)&&!(o&16)){if(o&8){const a=e.vnode.dynamicProps;for(let d=0;d{c=!0;const[m,_]=So(d,t,!0);fe(o,m),_&&l.push(..._)};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}if(!i&&!c)return Q(e)&&s.set(e,Lt),Lt;if(K(i))for(let a=0;ae==="_"||e==="_ctx"||e==="$stable",lr=e=>K(e)?e.map(Pe):[Pe(e)],qc=(e,t,n)=>{if(t._n)return t;const s=rc((...r)=>lr(t(...r)),n);return s._c=!1,s},To=(e,t,n)=>{const s=e._ctx;for(const r in e){if(or(r))continue;const i=e[r];if(q(i))t[r]=qc(r,i,s);else if(i!=null){const o=lr(i);t[r]=()=>o}}},Eo=(e,t)=>{const n=lr(t);e.slots.default=()=>n},xo=(e,t,n)=>{for(const s in t)(n||!or(s))&&(e[s]=t[s])},Gc=(e,t,n)=>{const s=e.slots=_o();if(e.vnode.shapeFlag&32){const r=t._;r?(xo(s,t,n),n&&Ei(s,"_",r,!0)):To(t,s)}else t&&Eo(e,t)},Xc=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=ne;if(s.shapeFlag&32){const l=t._;l?n&&l===1?i=!1:xo(r,t,n):(i=!t.$stable,To(t,r)),o=t}else t&&(Eo(e,t),o={default:1});if(i)for(const l in r)!or(l)&&o[l]==null&&delete r[l]},me=Po;function Yc(e){return Co(e)}function Jc(e){return Co(e,gc)}function Co(e,t){const n=qn();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:l,createComment:c,setText:u,setElementText:a,parentNode:d,nextSibling:m,setScopeId:_=qe,insertStaticContent:b}=e,y=(f,h,v,C=null,S=null,E=null,F=void 0,N=null,L=!!h.dynamicChildren)=>{if(f===h)return;f&&!yt(f,h)&&(C=gn(f),ke(f,S,E,!0),f=null),h.patchFlag===-2&&(L=!1,h.dynamicChildren=null);const{type:x,ref:B,shapeFlag:$}=h;switch(x){case Tt:D(f,h,v,C);break;case de:P(f,h,v,C);break;case Jt:f==null&&I(h,v,C,F);break;case Se:w(f,h,v,C,S,E,F,N,L);break;default:$&1?A(f,h,v,C,S,E,F,N,L):$&6?H(f,h,v,C,S,E,F,N,L):($&64||$&128)&&x.process(f,h,v,C,S,E,F,N,L,Ct)}B!=null&&S?Ft(B,f&&f.ref,E,h||f,!h):B==null&&f&&f.ref!=null&&Ft(f.ref,null,E,f,!0)},D=(f,h,v,C)=>{if(f==null)s(h.el=l(h.children),v,C);else{const S=h.el=f.el;h.children!==f.children&&u(S,h.children)}},P=(f,h,v,C)=>{f==null?s(h.el=c(h.children||""),v,C):h.el=f.el},I=(f,h,v,C)=>{[f.el,f.anchor]=b(f.children,h,v,C,f.el,f.anchor)},p=({el:f,anchor:h},v,C)=>{let S;for(;f&&f!==h;)S=m(f),s(f,v,C),f=S;s(h,v,C)},g=({el:f,anchor:h})=>{let v;for(;f&&f!==h;)v=m(f),r(f),f=v;r(h)},A=(f,h,v,C,S,E,F,N,L)=>{if(h.type==="svg"?F="svg":h.type==="math"&&(F="mathml"),f==null)j(h,v,C,S,E,F,N,L);else{const x=f.el&&f.el._isVueCE?f.el:null;try{x&&x._beginPatch(),T(f,h,S,E,F,N,L)}finally{x&&x._endPatch()}}},j=(f,h,v,C,S,E,F,N)=>{let L,x;const{props:B,shapeFlag:$,transition:W,dirs:G}=f;if(L=f.el=o(f.type,E,B&&B.is,B),$&8?a(L,f.children):$&16&&k(f.children,L,null,C,S,ps(f,E),F,N),G&&Be(f,null,C,"created"),M(L,f,f.scopeId,F,C),B){for(const se in B)se!=="value"&&!vt(se)&&i(L,se,null,B[se],E,C);"value"in B&&i(L,"value",null,B.value,E),(x=B.onVnodeBeforeMount)&&Oe(x,C,f)}G&&Be(f,null,C,"beforeMount");const J=Ao(S,W);J&&W.beforeEnter(L),s(L,h,v),((x=B&&B.onVnodeMounted)||J||G)&&me(()=>{x&&Oe(x,C,f),J&&W.enter(L),G&&Be(f,null,C,"mounted")},S)},M=(f,h,v,C,S)=>{if(v&&_(f,v),C)for(let E=0;E{for(let x=L;x{const N=h.el=f.el;let{patchFlag:L,dynamicChildren:x,dirs:B}=h;L|=f.patchFlag&16;const $=f.props||ne,W=h.props||ne;let G;if(v&&ht(v,!1),(G=W.onVnodeBeforeUpdate)&&Oe(G,v,h,f),B&&Be(h,f,v,"beforeUpdate"),v&&ht(v,!0),($.innerHTML&&W.innerHTML==null||$.textContent&&W.textContent==null)&&a(N,""),x?O(f.dynamicChildren,x,N,v,C,ps(h,S),E):F||V(f,h,N,null,v,C,ps(h,S),E,!1),L>0){if(L&16)R(N,$,W,v,S);else if(L&2&&$.class!==W.class&&i(N,"class",null,W.class,S),L&4&&i(N,"style",$.style,W.style,S),L&8){const J=h.dynamicProps;for(let se=0;se{G&&Oe(G,v,h,f),B&&Be(h,f,v,"updated")},C)},O=(f,h,v,C,S,E,F)=>{for(let N=0;N{if(h!==v){if(h!==ne)for(const E in h)!vt(E)&&!(E in v)&&i(f,E,h[E],null,S,C);for(const E in v){if(vt(E))continue;const F=v[E],N=h[E];F!==N&&E!=="value"&&i(f,E,N,F,S,C)}"value"in v&&i(f,"value",h.value,v.value,S)}},w=(f,h,v,C,S,E,F,N,L)=>{const x=h.el=f?f.el:l(""),B=h.anchor=f?f.anchor:l("");let{patchFlag:$,dynamicChildren:W,slotScopeIds:G}=h;G&&(N=N?N.concat(G):G),f==null?(s(x,v,C),s(B,v,C),k(h.children||[],v,B,S,E,F,N,L)):$>0&&$&64&&W&&f.dynamicChildren&&f.dynamicChildren.length===W.length?(O(f.dynamicChildren,W,v,S,E,F,N),(h.key!=null||S&&h===S.subTree)&&cr(f,h,!0)):V(f,h,v,B,S,E,F,N,L)},H=(f,h,v,C,S,E,F,N,L)=>{h.slotScopeIds=N,f==null?h.shapeFlag&512?S.ctx.activate(h,v,C,F,L):Y(h,v,C,S,E,F,L):oe(f,h,L)},Y=(f,h,v,C,S,E,F)=>{const N=f.component=ra(f,C,S);if(dn(f)&&(N.ctx.renderer=Ct),ia(N,!1,F),N.asyncDep){if(S&&S.registerDep(N,U,F),!f.el){const L=N.subTree=ue(de);P(null,L,h,v),f.placeholder=L.el}}else U(N,f,h,v,S,E,F)},oe=(f,h,v)=>{const C=h.component=f.component;if(Wc(f,h,v))if(C.asyncDep&&!C.asyncResolved){X(C,h,v);return}else C.next=h,C.update();else h.el=f.el,C.vnode=h},U=(f,h,v,C,S,E,F)=>{const N=()=>{if(f.isMounted){let{next:$,bu:W,u:G,parent:J,vnode:se}=f;{const xe=Ro(f);if(xe){$&&($.el=se.el,X(f,$,F)),xe.asyncDep.then(()=>{me(()=>{f.isUnmounted||x()},S)});return}}let ee=$,Te;ht(f,!1),$?($.el=se.el,X(f,$,F)):$=se,W&&Rn(W),(Te=$.props&&$.props.onVnodeBeforeUpdate)&&Oe(Te,J,$,se),ht(f,!0);const ge=hs(f),Ne=f.subTree;f.subTree=ge,y(Ne,ge,d(Ne.el),gn(Ne),f,S,E),$.el=ge.el,ee===null&&yo(f,ge.el),G&&me(G,S),(Te=$.props&&$.props.onVnodeUpdated)&&me(()=>Oe(Te,J,$,se),S)}else{let $;const{el:W,props:G}=h,{bm:J,m:se,parent:ee,root:Te,type:ge}=f,Ne=wt(h);if(ht(f,!1),J&&Rn(J),!Ne&&($=G&&G.onVnodeBeforeMount)&&Oe($,ee,h),ht(f,!0),W&&os){const xe=()=>{f.subTree=hs(f),os(W,f.subTree,f,S,null)};Ne&&ge.__asyncHydrate?ge.__asyncHydrate(W,f,xe):xe()}else{Te.ce&&Te.ce._hasShadowRoot()&&Te.ce._injectChildStyle(ge);const xe=f.subTree=hs(f);y(null,xe,v,C,f,S,E),h.el=xe.el}if(se&&me(se,S),!Ne&&($=G&&G.onVnodeMounted)){const xe=h;me(()=>Oe($,ee,xe),S)}(h.shapeFlag&256||ee&&wt(ee.vnode)&&ee.vnode.shapeFlag&256)&&f.a&&me(f.a,S),f.isMounted=!0,h=v=C=null}};f.scope.on();const L=f.effect=new Mi(N);f.scope.off();const x=f.update=L.run.bind(L),B=f.job=L.runIfDirty.bind(L);B.i=f,B.id=f.uid,L.scheduler=()=>nr(B),ht(f,!0),x()},X=(f,h,v)=>{h.component=f;const C=f.vnode.props;f.vnode=h,f.next=null,Bc(f,h.props,C,v),Xc(f,h.children,v),Ze(),Tr(f),et()},V=(f,h,v,C,S,E,F,N,L=!1)=>{const x=f&&f.children,B=f?f.shapeFlag:0,$=h.children,{patchFlag:W,shapeFlag:G}=h;if(W>0){if(W&128){pn(x,$,v,C,S,E,F,N,L);return}else if(W&256){te(x,$,v,C,S,E,F,N,L);return}}G&8?(B&16&&Vt(x,S,E),$!==x&&a(v,$)):B&16?G&16?pn(x,$,v,C,S,E,F,N,L):Vt(x,S,E,!0):(B&8&&a(v,""),G&16&&k($,v,C,S,E,F,N,L))},te=(f,h,v,C,S,E,F,N,L)=>{f=f||Lt,h=h||Lt;const x=f.length,B=h.length,$=Math.min(x,B);let W;for(W=0;W<$;W++){const G=h[W]=L?Je(h[W]):Pe(h[W]);y(f[W],G,v,null,S,E,F,N,L)}x>B?Vt(f,S,E,!0,!1,$):k(h,v,C,S,E,F,N,L,$)},pn=(f,h,v,C,S,E,F,N,L)=>{let x=0;const B=h.length;let $=f.length-1,W=B-1;for(;x<=$&&x<=W;){const G=f[x],J=h[x]=L?Je(h[x]):Pe(h[x]);if(yt(G,J))y(G,J,v,null,S,E,F,N,L);else break;x++}for(;x<=$&&x<=W;){const G=f[$],J=h[W]=L?Je(h[W]):Pe(h[W]);if(yt(G,J))y(G,J,v,null,S,E,F,N,L);else break;$--,W--}if(x>$){if(x<=W){const G=W+1,J=GW)for(;x<=$;)ke(f[x],S,E,!0),x++;else{const G=x,J=x,se=new Map;for(x=J;x<=W;x++){const Ce=h[x]=L?Je(h[x]):Pe(h[x]);Ce.key!=null&&se.set(Ce.key,x)}let ee,Te=0;const ge=W-J+1;let Ne=!1,xe=0;const kt=new Array(ge);for(x=0;x=ge){ke(Ce,S,E,!0);continue}let We;if(Ce.key!=null)We=se.get(Ce.key);else for(ee=J;ee<=W;ee++)if(kt[ee-J]===0&&yt(Ce,h[ee])){We=ee;break}We===void 0?ke(Ce,S,E,!0):(kt[We-J]=x+1,We>=xe?xe=We:Ne=!0,y(Ce,h[We],v,null,S,E,F,N,L),Te++)}const mr=Ne?zc(kt):Lt;for(ee=mr.length-1,x=ge-1;x>=0;x--){const Ce=J+x,We=h[Ce],yr=h[Ce+1],vr=Ce+1{const{el:E,type:F,transition:N,children:L,shapeFlag:x}=f;if(x&6){dt(f.component.subTree,h,v,C);return}if(x&128){f.suspense.move(h,v,C);return}if(x&64){F.move(f,h,v,Ct);return}if(F===Se){s(E,h,v);for(let $=0;$N.enter(E),S);else{const{leave:$,delayLeave:W,afterLeave:G}=N,J=()=>{f.ctx.isUnmounted?r(E):s(E,h,v)},se=()=>{E._isLeaving&&E[Ke](!0),$(E,()=>{J(),G&&G()})};W?W(E,J,se):se()}else s(E,h,v)},ke=(f,h,v,C=!1,S=!1)=>{const{type:E,props:F,ref:N,children:L,dynamicChildren:x,shapeFlag:B,patchFlag:$,dirs:W,cacheIndex:G}=f;if($===-2&&(S=!1),N!=null&&(Ze(),Ft(N,null,v,f,!0),et()),G!=null&&(h.renderCache[G]=void 0),B&256){h.ctx.deactivate(f);return}const J=B&1&&W,se=!wt(f);let ee;if(se&&(ee=F&&F.onVnodeBeforeUnmount)&&Oe(ee,h,f),B&6)ll(f.component,v,C);else{if(B&128){f.suspense.unmount(v,C);return}J&&Be(f,null,h,"beforeUnmount"),B&64?f.type.remove(f,h,v,Ct,C):x&&!x.hasOnce&&(E!==Se||$>0&&$&64)?Vt(x,h,v,!1,!0):(E===Se&&$&384||!S&&B&16)&&Vt(L,h,v),C&&pr(f)}(se&&(ee=F&&F.onVnodeUnmounted)||J)&&me(()=>{ee&&Oe(ee,h,f),J&&Be(f,null,h,"unmounted")},v)},pr=f=>{const{type:h,el:v,anchor:C,transition:S}=f;if(h===Se){ol(v,C);return}if(h===Jt){g(f);return}const E=()=>{r(v),S&&!S.persisted&&S.afterLeave&&S.afterLeave()};if(f.shapeFlag&1&&S&&!S.persisted){const{leave:F,delayLeave:N}=S,L=()=>F(v,E);N?N(f.el,E,L):L()}else E()},ol=(f,h)=>{let v;for(;f!==h;)v=m(f),r(f),f=v;r(h)},ll=(f,h,v)=>{const{bum:C,scope:S,job:E,subTree:F,um:N,m:L,a:x}=f;jr(L),jr(x),C&&Rn(C),S.stop(),E&&(E.flags|=8,ke(F,f,h,v)),N&&me(N,h),me(()=>{f.isUnmounted=!0},h)},Vt=(f,h,v,C=!1,S=!1,E=0)=>{for(let F=E;F{if(f.shapeFlag&6)return gn(f.component.subTree);if(f.shapeFlag&128)return f.suspense.next();const h=m(f.anchor||f.el),v=h&&h[zi];return v?m(v):h};let rs=!1;const gr=(f,h,v)=>{let C;f==null?h._vnode&&(ke(h._vnode,null,null,!0),C=h._vnode.component):y(h._vnode||null,f,h,null,null,null,v),h._vnode=f,rs||(rs=!0,Tr(C),Dn(),rs=!1)},Ct={p:y,um:ke,m:dt,r:pr,mt:Y,mc:k,pc:V,pbc:O,n:gn,o:e};let is,os;return t&&([is,os]=t(Ct)),{render:gr,hydrate:is,createApp:Hc(gr,is)}}function ps({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function ht({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Ao(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function cr(e,t,n=!1){const s=e.children,r=t.children;if(K(s)&&K(r))for(let i=0;i>1,e[n[l]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function Ro(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Ro(t)}function jr(e){if(e)for(let t=0;te.__isSuspense;function Po(e,t){t&&t.pendingBranch?K(e)?t.effects.push(...e):t.effects.push(e):sc(e)}const Se=Symbol.for("v-fgt"),Tt=Symbol.for("v-txt"),de=Symbol.for("v-cmt"),Jt=Symbol.for("v-stc"),zt=[];let Ae=null;function js(e=!1){zt.push(Ae=e?null:[])}function Qc(){zt.pop(),Ae=zt[zt.length-1]||null}let rn=1;function kn(e,t=!1){rn+=e,e<0&&Ae&&t&&(Ae.hasOnce=!0)}function Lo(e){return e.dynamicChildren=rn>0?Ae||Lt:null,Qc(),rn>0&&Ae&&Ae.push(e),e}function Qu(e,t,n,s,r,i){return Lo(No(e,t,n,s,r,i,!0))}function Vs(e,t,n,s,r){return Lo(ue(e,t,n,s,r,!0))}function on(e){return e?e.__v_isVNode===!0:!1}function yt(e,t){return e.type===t.type&&e.key===t.key}const Io=({key:e})=>e??null,Pn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?le(e)||ae(e)||q(e)?{i:pe,r:e,k:t,f:!!n}:e:null);function No(e,t=null,n=null,s=0,r=null,i=e===Se?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Io(t),ref:t&&Pn(t),scopeId:Xi,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:pe};return l?(ar(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=le(n)?8:16),rn>0&&!o&&Ae&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Ae.push(c),c}const ue=Zc;function Zc(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===co)&&(e=de),on(e)){const l=at(e,t,!0);return n&&ar(l,n),rn>0&&!i&&Ae&&(l.shapeFlag&6?Ae[Ae.indexOf(e)]=l:Ae.push(l)),l.patchFlag=-2,l}if(aa(e)&&(e=e.__vccOpts),t){t=ea(t);let{class:l,style:c}=t;l&&!le(l)&&(t.class=Ys(l)),Q(c)&&(Yn(c)&&!K(c)&&(c=fe({},c)),t.style=Xs(c))}const o=le(e)?1:Oo(e)?128:Qi(e)?64:Q(e)?4:q(e)?2:0;return No(e,t,n,s,r,o,i,!0)}function ea(e){return e?Yn(e)||bo(e)?fe({},e):e:null}function at(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:o,children:l,transition:c}=e,u=t?ta(r||{},t):r,a={__v_isVNode:!0,__v_skip:!0,type:e.type,props:u,key:u&&Io(u),ref:t&&t.ref?n&&i?K(i)?i.concat(Pn(t)):[i,Pn(t)]:Pn(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Se?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&at(e.ssContent),ssFallback:e.ssFallback&&at(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&sn(a,c.clone(a)),a}function Fo(e=" ",t=0){return ue(Tt,null,e,t)}function Zu(e,t){const n=ue(Jt,null,e);return n.staticCount=t,n}function ef(e="",t=!1){return t?(js(),Vs(de,null,e)):ue(de,null,e)}function Pe(e){return e==null||typeof e=="boolean"?ue(de):K(e)?ue(Se,null,e.slice()):on(e)?Je(e):ue(Tt,null,String(e))}function Je(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:at(e)}function ar(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(K(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),ar(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!bo(t)?t._ctx=pe:r===3&&pe&&(pe.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else q(t)?(t={default:t,_ctx:pe},n=32):(t=String(t),s&64?(n=16,t=[Fo(t)]):n=8);e.children=t,e.shapeFlag|=n}function ta(...e){const t={};for(let n=0;nhe||pe;let Wn,ks;{const e=qn(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};Wn=t("__VUE_INSTANCE_SETTERS__",n=>he=n),ks=t("__VUE_SSR_SETTERS__",n=>$t=n)}const hn=e=>{const t=he;return Wn(e),e.scope.on(),()=>{e.scope.off(),Wn(t)}},Vr=()=>{he&&he.scope.off(),Wn(null)};function Ho(e){return e.vnode.shapeFlag&4}let $t=!1;function ia(e,t=!1,n=!1){t&&ks(t);const{props:s,children:r}=e.vnode,i=Ho(e);Uc(e,s,i,t),Gc(e,r,n||t);const o=i?oa(e,t):void 0;return t&&ks(!1),o}function oa(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Rc);const{setup:s}=n;if(s){Ze();const r=e.setupContext=s.length>1?$o(e):null,i=hn(e),o=un(s,e,0,[e.props,r]),l=wi(o);if(et(),i(),(l||e.sp)&&!wt(e)&&ir(e),l){if(o.then(Vr,Vr),t)return o.then(c=>{kr(e,c)}).catch(c=>{fn(c,e,0)});e.asyncDep=o}else kr(e,o)}else Do(e)}function kr(e,t,n){q(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Q(t)&&(e.setupState=Bi(t)),Do(e)}function Do(e,t,n){const s=e.type;e.render||(e.render=s.render||qe);{const r=hn(e);Ze();try{Oc(e)}finally{et(),r()}}}const la={get(e,t){return _e(e,"get",""),e[t]}};function $o(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,la),slots:e.slots,emit:e.emit,expose:t}}function ns(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Bi(Mn(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Yt)return Yt[n](e)},has(t,n){return n in t||n in Yt}})):e.proxy}function ca(e,t=!0){return q(e)?e.displayName||e.name:e.name||t&&e.__name}function aa(e){return q(e)&&"__vccOpts"in e}const ie=(e,t)=>Ql(e,t,$t);function Ws(e,t,n){try{kn(-1);const s=arguments.length;return s===2?Q(t)&&!K(t)?on(t)?ue(e,null,[t]):ue(e,t):ue(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&on(n)&&(n=[n]),ue(e,t,n))}finally{kn(1)}}const ua="3.5.29";/** -* @vue/runtime-dom v3.5.29 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let Us;const Wr=typeof window<"u"&&window.trustedTypes;if(Wr)try{Us=Wr.createPolicy("vue",{createHTML:e=>e})}catch{}const jo=Us?e=>Us.createHTML(e):e=>e,fa="http://www.w3.org/2000/svg",da="http://www.w3.org/1998/Math/MathML",Ye=typeof document<"u"?document:null,Ur=Ye&&Ye.createElement("template"),ha={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?Ye.createElementNS(fa,e):t==="mathml"?Ye.createElementNS(da,e):n?Ye.createElement(e,{is:n}):Ye.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>Ye.createTextNode(e),createComment:e=>Ye.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Ye.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{Ur.innerHTML=jo(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const l=Ur.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},rt="transition",Bt="animation",ln=Symbol("_vtc"),Vo={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},pa=fe({},eo,Vo),ga=e=>(e.displayName="Transition",e.props=pa,e),tf=ga((e,{slots:t})=>Ws(dc,ma(e),t)),pt=(e,t=[])=>{K(e)?e.forEach(n=>n(...t)):e&&e(...t)},Br=e=>e?K(e)?e.some(t=>t.length>1):e.length>1:!1;function ma(e){const t={};for(const w in e)w in Vo||(t[w]=e[w]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:u=o,appearToClass:a=l,leaveFromClass:d=`${n}-leave-from`,leaveActiveClass:m=`${n}-leave-active`,leaveToClass:_=`${n}-leave-to`}=e,b=ya(r),y=b&&b[0],D=b&&b[1],{onBeforeEnter:P,onEnter:I,onEnterCancelled:p,onLeave:g,onLeaveCancelled:A,onBeforeAppear:j=P,onAppear:M=I,onAppearCancelled:k=p}=t,T=(w,H,Y,oe)=>{w._enterCancelled=oe,gt(w,H?a:l),gt(w,H?u:o),Y&&Y()},O=(w,H)=>{w._isLeaving=!1,gt(w,d),gt(w,_),gt(w,m),H&&H()},R=w=>(H,Y)=>{const oe=w?M:I,U=()=>T(H,w,Y);pt(oe,[H,U]),Kr(()=>{gt(H,w?c:i),Xe(H,w?a:l),Br(oe)||qr(H,s,y,U)})};return fe(t,{onBeforeEnter(w){pt(P,[w]),Xe(w,i),Xe(w,o)},onBeforeAppear(w){pt(j,[w]),Xe(w,c),Xe(w,u)},onEnter:R(!1),onAppear:R(!0),onLeave(w,H){w._isLeaving=!0;const Y=()=>O(w,H);Xe(w,d),w._enterCancelled?(Xe(w,m),Yr(w)):(Yr(w),Xe(w,m)),Kr(()=>{w._isLeaving&&(gt(w,d),Xe(w,_),Br(g)||qr(w,s,D,Y))}),pt(g,[w,Y])},onEnterCancelled(w){T(w,!1,void 0,!0),pt(p,[w])},onAppearCancelled(w){T(w,!0,void 0,!0),pt(k,[w])},onLeaveCancelled(w){O(w),pt(A,[w])}})}function ya(e){if(e==null)return null;if(Q(e))return[gs(e.enter),gs(e.leave)];{const t=gs(e);return[t,t]}}function gs(e){return dl(e)}function Xe(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[ln]||(e[ln]=new Set)).add(t)}function gt(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[ln];n&&(n.delete(t),n.size||(e[ln]=void 0))}function Kr(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let va=0;function qr(e,t,n,s){const r=e._endId=++va,i=()=>{r===e._endId&&s()};if(n!=null)return setTimeout(i,n);const{type:o,timeout:l,propCount:c}=_a(e,t);if(!o)return s();const u=o+"end";let a=0;const d=()=>{e.removeEventListener(u,m),i()},m=_=>{_.target===e&&++a>=c&&d()};setTimeout(()=>{a(n[b]||"").split(", "),r=s(`${rt}Delay`),i=s(`${rt}Duration`),o=Gr(r,i),l=s(`${Bt}Delay`),c=s(`${Bt}Duration`),u=Gr(l,c);let a=null,d=0,m=0;t===rt?o>0&&(a=rt,d=o,m=i.length):t===Bt?u>0&&(a=Bt,d=u,m=c.length):(d=Math.max(o,u),a=d>0?o>u?rt:Bt:null,m=a?a===rt?i.length:c.length:0);const _=a===rt&&/\b(?:transform|all)(?:,|$)/.test(s(`${rt}Property`).toString());return{type:a,timeout:d,propCount:m,hasTransform:_}}function Gr(e,t){for(;e.lengthXr(n)+Xr(e[s])))}function Xr(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Yr(e){return(e?e.ownerDocument:document).body.offsetHeight}function ba(e,t,n){const s=e[ln];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Jr=Symbol("_vod"),wa=Symbol("_vsh"),Sa=Symbol(""),Ta=/(?:^|;)\s*display\s*:/;function Ea(e,t,n){const s=e.style,r=le(n);let i=!1;if(n&&!r){if(t)if(le(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&Ln(s,l,"")}else for(const o in t)n[o]==null&&Ln(s,o,"");for(const o in n)o==="display"&&(i=!0),Ln(s,o,n[o])}else if(r){if(t!==n){const o=s[Sa];o&&(n+=";"+o),s.cssText=n,i=Ta.test(n)}}else t&&e.removeAttribute("style");Jr in e&&(e[Jr]=i?s.display:"",e[wa]&&(s.display="none"))}const zr=/\s*!important$/;function Ln(e,t,n){if(K(n))n.forEach(s=>Ln(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=xa(e,t);zr.test(n)?e.setProperty(ft(s),n.replace(zr,""),"important"):e[s]=n}}const Qr=["Webkit","Moz","ms"],ms={};function xa(e,t){const n=ms[t];if(n)return n;let s=Ie(t);if(s!=="filter"&&s in e)return ms[t]=s;s=Kn(s);for(let r=0;rys||(Ma.then(()=>ys=0),ys=Date.now());function Pa(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;je(La(s,n.value),t,5,[s])};return n.value=e,n.attached=Oa(),n}function La(e,t){if(K(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const ri=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Ia=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?ba(e,s,o):t==="style"?Ea(e,n,s):cn(t)?Ks(t)||Aa(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Na(e,t,s,o))?(ti(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&ei(e,t,s,o,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!le(s))?ti(e,Ie(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),ei(e,t,s,o))};function Na(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&ri(t)&&q(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return ri(t)&&le(n)?!1:t in e}const ii=e=>{const t=e.props["onUpdate:modelValue"]||!1;return K(t)?n=>Rn(t,n):t};function Fa(e){e.target.composing=!0}function oi(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const vs=Symbol("_assign");function li(e,t,n){return t&&(e=e.trim()),n&&(e=Gs(e)),e}const nf={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e[vs]=ii(r);const i=s||r.props&&r.props.type==="number";Ot(e,t?"change":"input",o=>{o.target.composing||e[vs](li(e.value,n,i))}),(n||i)&&Ot(e,"change",()=>{e.value=li(e.value,n,i)}),t||(Ot(e,"compositionstart",Fa),Ot(e,"compositionend",oi),Ot(e,"change",oi))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:r,number:i}},o){if(e[vs]=ii(o),e.composing)return;const l=(i||e.type==="number")&&!/^0\d/.test(e.value)?Gs(e.value):e.value,c=t??"";l!==c&&(document.activeElement===e&&e.type!=="range"&&(s&&t===n||r&&e.value.trim()===c)||(e.value=c))}},Ha=["ctrl","shift","alt","meta"],Da={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Ha.some(n=>e[`${n}Key`]&&!t.includes(n))},sf=(e,t)=>{if(!e)return e;const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...i)=>{for(let o=0;o{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=r=>{if(!("key"in r))return;const i=ft(r.key);if(t.some(o=>o===i||$a[o]===i))return e(r)})},ko=fe({patchProp:Ia},ha);let Qt,ci=!1;function ja(){return Qt||(Qt=Yc(ko))}function Va(){return Qt=ci?Qt:Jc(ko),ci=!0,Qt}const of=(...e)=>{const t=ja().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Uo(s);if(!r)return;const i=t._component;!q(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const o=n(r,!1,Wo(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t},lf=(...e)=>{const t=Va().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=Uo(s);if(r)return n(r,!0,Wo(r))},t};function Wo(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Uo(e){return le(e)?document.querySelector(e):e}const ka=window.__VP_SITE_DATA__;function Bo(e){return Ri()?(Sl(e),!0):!1}const _s=new WeakMap,Wa=(...e)=>{var t;const n=e[0],s=(t=xt())==null?void 0:t.proxy;if(s==null&&!Yi())throw new Error("injectLocal must be called in setup");return s&&_s.has(s)&&n in _s.get(s)?_s.get(s)[n]:bt(...e)},Ko=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const cf=e=>e!=null,Ua=Object.prototype.toString,Ba=e=>Ua.call(e)==="[object Object]",ut=()=>{},ai=Ka();function Ka(){var e,t;return Ko&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function ur(e,t){function n(...s){return new Promise((r,i)=>{Promise.resolve(e(()=>t.apply(this,s),{fn:t,thisArg:this,args:s})).then(r).catch(i)})}return n}const qo=e=>e();function Go(e,t={}){let n,s,r=ut;const i=c=>{clearTimeout(c),r(),r=ut};let o;return c=>{const u=ce(e),a=ce(t.maxWait);return n&&i(n),u<=0||a!==void 0&&a<=0?(s&&(i(s),s=null),Promise.resolve(c())):new Promise((d,m)=>{r=t.rejectOnCancel?m:d,o=c,a&&!s&&(s=setTimeout(()=>{n&&i(n),s=null,d(o())},a)),n=setTimeout(()=>{s&&i(s),s=null,d(c())},u)})}}function qa(...e){let t=0,n,s=!0,r=ut,i,o,l,c,u;!ae(e[0])&&typeof e[0]=="object"?{delay:o,trailing:l=!0,leading:c=!0,rejectOnCancel:u=!1}=e[0]:[o,l=!0,c=!0,u=!1]=e;const a=()=>{n&&(clearTimeout(n),n=void 0,r(),r=ut)};return m=>{const _=ce(o),b=Date.now()-t,y=()=>i=m();return a(),_<=0?(t=Date.now(),y()):(b>_&&(c||!s)?(t=Date.now(),y()):l&&(i=new Promise((D,P)=>{r=u?P:D,n=setTimeout(()=>{t=Date.now(),s=!0,D(y()),a()},Math.max(0,_-b))})),!c&&!n&&(n=setTimeout(()=>s=!0,_)),s=!1,i)}}function Ga(e=qo,t={}){const{initialState:n="active"}=t,s=fr(n==="active");function r(){s.value=!1}function i(){s.value=!0}return{isActive:tn(s),pause:r,resume:i,eventFilter:(...l)=>{s.value&&e(...l)}}}function ui(e){return e.endsWith("rem")?Number.parseFloat(e)*16:Number.parseFloat(e)}function Xa(e){return xt()}function bs(e){return Array.isArray(e)?e:[e]}function fr(...e){if(e.length!==1)return Yl(...e);const t=e[0];return typeof t=="function"?tn(ql(()=>({get:t,set:ut}))):He(t)}function Ya(e,t=200,n={}){return ur(Go(t,n),e)}function Ja(e,t=200,n=!1,s=!0,r=!1){return ur(qa(t,n,s,r),e)}function Xo(e,t,n={}){const{eventFilter:s=qo,...r}=n;return Le(e,ur(s,t),r)}function za(e,t,n={}){const{eventFilter:s,initialState:r="active",...i}=n,{eventFilter:o,pause:l,resume:c,isActive:u}=Ga(s,{initialState:r});return{stop:Xo(e,t,{...i,eventFilter:o}),pause:l,resume:c,isActive:u}}function ss(e,t=!0,n){Xa()?jt(e,n):t?e():zn(e)}function af(e,t,n={}){const{debounce:s=0,maxWait:r=void 0,...i}=n;return Xo(e,t,{...i,eventFilter:Go(s,{maxWait:r})})}function Qa(e,t,n){return Le(e,t,{...n,immediate:!0})}function uf(e,t,n){let s;ae(n)?s={evaluating:n}:s={};const{lazy:r=!1,evaluating:i=void 0,shallow:o=!0,onError:l=ut}=s,c=Ee(!r),u=o?Ee(t):He(t);let a=0;return sr(async d=>{if(!c.value)return;a++;const m=a;let _=!1;i&&Promise.resolve().then(()=>{i.value=!0});try{const b=await e(y=>{d(()=>{i&&(i.value=!1),_||y()})});m===a&&(u.value=b)}catch(b){l(b)}finally{i&&m===a&&(i.value=!1),_=!0}}),r?ie(()=>(c.value=!0,u.value)):u}const Ve=Ko?window:void 0;function dr(e){var t;const n=ce(e);return(t=n==null?void 0:n.$el)!=null?t:n}function nt(...e){const t=[],n=()=>{t.forEach(l=>l()),t.length=0},s=(l,c,u,a)=>(l.addEventListener(c,u,a),()=>l.removeEventListener(c,u,a)),r=ie(()=>{const l=bs(ce(e[0])).filter(c=>c!=null);return l.every(c=>typeof c!="string")?l:void 0}),i=Qa(()=>{var l,c;return[(c=(l=r.value)==null?void 0:l.map(u=>dr(u)))!=null?c:[Ve].filter(u=>u!=null),bs(ce(r.value?e[1]:e[0])),bs(Jn(r.value?e[2]:e[1])),ce(r.value?e[3]:e[2])]},([l,c,u,a])=>{if(n(),!(l!=null&&l.length)||!(c!=null&&c.length)||!(u!=null&&u.length))return;const d=Ba(a)?{...a}:a;t.push(...l.flatMap(m=>c.flatMap(_=>u.map(b=>s(m,_,b,d)))))},{flush:"post"}),o=()=>{i(),n()};return Bo(n),o}function Za(){const e=Ee(!1),t=xt();return t&&jt(()=>{e.value=!0},t),e}function eu(e){const t=Za();return ie(()=>(t.value,!!e()))}function tu(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function ff(...e){let t,n,s={};e.length===3?(t=e[0],n=e[1],s=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],s=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:r=Ve,eventName:i="keydown",passive:o=!1,dedupe:l=!1}=s,c=tu(t);return nt(r,i,a=>{a.repeat&&ce(l)||c(a)&&n(a)},o)}const nu=Symbol("vueuse-ssr-width");function su(){const e=Yi()?Wa(nu,null):null;return typeof e=="number"?e:void 0}function Yo(e,t={}){const{window:n=Ve,ssrWidth:s=su()}=t,r=eu(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function"),i=Ee(typeof s=="number"),o=Ee(),l=Ee(!1),c=u=>{l.value=u.matches};return sr(()=>{if(i.value){i.value=!r.value;const u=ce(e).split(",");l.value=u.some(a=>{const d=a.includes("not all"),m=a.match(/\(\s*min-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/),_=a.match(/\(\s*max-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/);let b=!!(m||_);return m&&b&&(b=s>=ui(m[1])),_&&b&&(b=s<=ui(_[1])),d?!b:b});return}r.value&&(o.value=n.matchMedia(ce(e)),l.value=o.value.matches)}),nt(o,"change",c,{passive:!0}),ie(()=>l.value)}const Tn=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},En="__vueuse_ssr_handlers__",ru=iu();function iu(){return En in Tn||(Tn[En]=Tn[En]||{}),Tn[En]}function Jo(e,t){return ru[e]||t}function zo(e){return Yo("(prefers-color-scheme: dark)",e)}function ou(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const lu={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},fi="vueuse-storage";function hr(e,t,n,s={}){var r;const{flush:i="pre",deep:o=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:u=!1,shallow:a,window:d=Ve,eventFilter:m,onError:_=R=>{console.error(R)},initOnMounted:b}=s,y=(a?Ee:He)(typeof t=="function"?t():t),D=ie(()=>ce(e));if(!n)try{n=Jo("getDefaultStorage",()=>{var R;return(R=Ve)==null?void 0:R.localStorage})()}catch(R){_(R)}if(!n)return y;const P=ce(t),I=ou(P),p=(r=s.serializer)!=null?r:lu[I],{pause:g,resume:A}=za(y,()=>M(y.value),{flush:i,deep:o,eventFilter:m});Le(D,()=>T(),{flush:i}),d&&l&&ss(()=>{n instanceof Storage?nt(d,"storage",T,{passive:!0}):nt(d,fi,O),b&&T()}),b||T();function j(R,w){if(d){const H={key:D.value,oldValue:R,newValue:w,storageArea:n};d.dispatchEvent(n instanceof Storage?new StorageEvent("storage",H):new CustomEvent(fi,{detail:H}))}}function M(R){try{const w=n.getItem(D.value);if(R==null)j(w,null),n.removeItem(D.value);else{const H=p.write(R);w!==H&&(n.setItem(D.value,H),j(w,H))}}catch(w){_(w)}}function k(R){const w=R?R.newValue:n.getItem(D.value);if(w==null)return c&&P!=null&&n.setItem(D.value,p.write(P)),P;if(!R&&u){const H=p.read(w);return typeof u=="function"?u(H,P):I==="object"&&!Array.isArray(H)?{...P,...H}:H}else return typeof w!="string"?w:p.read(w)}function T(R){if(!(R&&R.storageArea!==n)){if(R&&R.key==null){y.value=P;return}if(!(R&&R.key!==D.value)){g();try{(R==null?void 0:R.newValue)!==p.write(y.value)&&(y.value=k(R))}catch(w){_(w)}finally{R?zn(A):A()}}}}function O(R){T(R.detail)}return y}const cu="*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}";function au(e={}){const{selector:t="html",attribute:n="class",initialValue:s="auto",window:r=Ve,storage:i,storageKey:o="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:u,disableTransition:a=!0}=e,d={auto:"",light:"light",dark:"dark",...e.modes||{}},m=zo({window:r}),_=ie(()=>m.value?"dark":"light"),b=c||(o==null?fr(s):hr(o,s,i,{window:r,listenToStorageChanges:l})),y=ie(()=>b.value==="auto"?_.value:b.value),D=Jo("updateHTMLAttrs",(g,A,j)=>{const M=typeof g=="string"?r==null?void 0:r.document.querySelector(g):dr(g);if(!M)return;const k=new Set,T=new Set;let O=null;if(A==="class"){const w=j.split(/\s/g);Object.values(d).flatMap(H=>(H||"").split(/\s/g)).filter(Boolean).forEach(H=>{w.includes(H)?k.add(H):T.add(H)})}else O={key:A,value:j};if(k.size===0&&T.size===0&&O===null)return;let R;a&&(R=r.document.createElement("style"),R.appendChild(document.createTextNode(cu)),r.document.head.appendChild(R));for(const w of k)M.classList.add(w);for(const w of T)M.classList.remove(w);O&&M.setAttribute(O.key,O.value),a&&(r.getComputedStyle(R).opacity,document.head.removeChild(R))});function P(g){var A;D(t,n,(A=d[g])!=null?A:g)}function I(g){e.onChanged?e.onChanged(g,P):P(g)}Le(y,I,{flush:"post",immediate:!0}),ss(()=>I(y.value));const p=ie({get(){return u?b.value:y.value},set(g){b.value=g}});return Object.assign(p,{store:b,system:_,state:y})}function uu(e={}){const{valueDark:t="dark",valueLight:n=""}=e,s=au({...e,onChanged:(o,l)=>{var c;e.onChanged?(c=e.onChanged)==null||c.call(e,o==="dark",l,o):l(o)},modes:{dark:t,light:n}}),r=ie(()=>s.system.value);return ie({get(){return s.value==="dark"},set(o){const l=o?"dark":"light";r.value===l?s.value="auto":s.value=l}})}function ws(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}const di=1;function fu(e,t={}){const{throttle:n=0,idle:s=200,onStop:r=ut,onScroll:i=ut,offset:o={left:0,right:0,top:0,bottom:0},eventListenerOptions:l={capture:!1,passive:!0},behavior:c="auto",window:u=Ve,onError:a=M=>{console.error(M)}}=t,d=Ee(0),m=Ee(0),_=ie({get(){return d.value},set(M){y(M,void 0)}}),b=ie({get(){return m.value},set(M){y(void 0,M)}});function y(M,k){var T,O,R,w;if(!u)return;const H=ce(e);if(!H)return;(R=H instanceof Document?u.document.body:H)==null||R.scrollTo({top:(T=ce(k))!=null?T:b.value,left:(O=ce(M))!=null?O:_.value,behavior:ce(c)});const Y=((w=H==null?void 0:H.document)==null?void 0:w.documentElement)||(H==null?void 0:H.documentElement)||H;_!=null&&(d.value=Y.scrollLeft),b!=null&&(m.value=Y.scrollTop)}const D=Ee(!1),P=Ht({left:!0,right:!1,top:!0,bottom:!1}),I=Ht({left:!1,right:!1,top:!1,bottom:!1}),p=M=>{D.value&&(D.value=!1,I.left=!1,I.right=!1,I.top=!1,I.bottom=!1,r(M))},g=Ya(p,n+s),A=M=>{var k;if(!u)return;const T=((k=M==null?void 0:M.document)==null?void 0:k.documentElement)||(M==null?void 0:M.documentElement)||dr(M),{display:O,flexDirection:R,direction:w}=getComputedStyle(T),H=w==="rtl"?-1:1,Y=T.scrollLeft;I.left=Yd.value;const oe=Math.abs(Y*H)<=(o.left||0),U=Math.abs(Y*H)+T.clientWidth>=T.scrollWidth-(o.right||0)-di;O==="flex"&&R==="row-reverse"?(P.left=U,P.right=oe):(P.left=oe,P.right=U),d.value=Y;let X=T.scrollTop;M===u.document&&!X&&(X=u.document.body.scrollTop),I.top=Xm.value;const V=Math.abs(X)<=(o.top||0),te=Math.abs(X)+T.clientHeight>=T.scrollHeight-(o.bottom||0)-di;O==="flex"&&R==="column-reverse"?(P.top=te,P.bottom=V):(P.top=V,P.bottom=te),m.value=X},j=M=>{var k;if(!u)return;const T=(k=M.target.documentElement)!=null?k:M.target;A(T),D.value=!0,g(M),i(M)};return nt(e,"scroll",n?Ja(j,n,!0,!1):j,l),ss(()=>{try{const M=ce(e);if(!M)return;A(M)}catch(M){a(M)}}),nt(e,"scrollend",p,l),{x:_,y:b,isScrolling:D,arrivedState:P,directions:I,measure(){const M=ce(e);u&&M&&A(M)}}}function df(e,t,n={}){const{window:s=Ve}=n;return hr(e,t,s==null?void 0:s.localStorage,n)}function Qo(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const Ss=new WeakMap;function hf(e,t=!1){const n=Ee(t);let s=null,r="";Le(fr(e),l=>{const c=ws(ce(l));if(c){const u=c;if(Ss.get(u)||Ss.set(u,u.style.overflow),u.style.overflow!=="hidden"&&(r=u.style.overflow),u.style.overflow==="hidden")return n.value=!0;if(n.value)return u.style.overflow="hidden"}},{immediate:!0});const i=()=>{const l=ws(ce(e));!l||n.value||(ai&&(s=nt(l,"touchmove",c=>{du(c)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},o=()=>{const l=ws(ce(e));!l||!n.value||(ai&&(s==null||s()),l.style.overflow=r,Ss.delete(l),n.value=!1)};return Bo(o),ie({get(){return n.value},set(l){l?i():o()}})}function pf(e,t,n={}){const{window:s=Ve}=n;return hr(e,t,s==null?void 0:s.sessionStorage,n)}function gf(e={}){const{window:t=Ve,...n}=e;return fu(t,n)}function mf(e={}){const{window:t=Ve,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:s=Number.POSITIVE_INFINITY,listenOrientation:r=!0,includeScrollbar:i=!0,type:o="inner"}=e,l=Ee(n),c=Ee(s),u=()=>{if(t)if(o==="outer")l.value=t.outerWidth,c.value=t.outerHeight;else if(o==="visual"&&t.visualViewport){const{width:d,height:m,scale:_}=t.visualViewport;l.value=Math.round(d*_),c.value=Math.round(m*_)}else i?(l.value=t.innerWidth,c.value=t.innerHeight):(l.value=t.document.documentElement.clientWidth,c.value=t.document.documentElement.clientHeight)};u(),ss(u);const a={passive:!0};if(nt("resize",u,a),t&&o==="visual"&&t.visualViewport&&nt(t.visualViewport,"resize",u,a),r){const d=Yo("(orientation: portrait)");Le(d,()=>u())}return{width:l,height:c}}const Ts={};var Es={};const Zo=/^(?:[a-z]+:|\/\/)/i,hu="vitepress-theme-appearance",pu=/#.*$/,gu=/[?#].*$/,mu=/(?:(^|\/)index)?\.(?:md|html)$/,ve=typeof document<"u",el={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function yu(e,t,n=!1){if(t===void 0)return!1;if(e=hi(`/${e}`),n)return new RegExp(t).test(e);if(hi(t)!==e)return!1;const s=t.match(pu);return s?(ve?location.hash:"")===s[0]:!0}function hi(e){return decodeURI(e).replace(gu,"").replace(mu,"$1")}function vu(e){return Zo.test(e)}function _u(e,t){return Object.keys((e==null?void 0:e.locales)||{}).find(n=>n!=="root"&&!vu(n)&&yu(t,`/${n}/`,!0))||"root"}function bu(e,t){var s,r,i,o,l,c,u;const n=_u(e,t);return Object.assign({},e,{localeIndex:n,lang:((s=e.locales[n])==null?void 0:s.lang)??e.lang,dir:((r=e.locales[n])==null?void 0:r.dir)??e.dir,title:((i=e.locales[n])==null?void 0:i.title)??e.title,titleTemplate:((o=e.locales[n])==null?void 0:o.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:nl(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(u=e.locales[n])==null?void 0:u.themeConfig}})}function tl(e,t){const n=t.title||e.title,s=t.titleTemplate??e.titleTemplate;if(typeof s=="string"&&s.includes(":title"))return s.replace(/:title/g,n);const r=wu(e.title,s);return n===r.slice(3)?n:`${n}${r}`}function wu(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function Su(e,t){const[n,s]=t;if(n!=="meta")return!1;const r=Object.entries(s)[0];return r==null?!1:e.some(([i,o])=>i===n&&o[r[0]]===r[1])}function nl(e,t){return[...e.filter(n=>!Su(t,n)),...t]}const Tu=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,Eu=/^[a-z]:/i;function pi(e){const t=Eu.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(Tu,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const xs=new Set;function xu(e){if(xs.size===0){const n=typeof process=="object"&&(Es==null?void 0:Es.VITE_EXTRA_EXTENSIONS)||(Ts==null?void 0:Ts.VITE_EXTRA_EXTENSIONS)||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(s=>xs.add(s))}const t=e.split(".").pop();return t==null||!xs.has(t.toLowerCase())}function yf(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}const Cu=Symbol(),Et=Ee(ka);function vf(e){const t=ie(()=>bu(Et.value,e.data.relativePath)),n=t.value.appearance,s=n==="force-dark"?He(!0):n==="force-auto"?zo():n?uu({storageKey:hu,initialValue:()=>n==="dark"?"dark":"auto",...typeof n=="object"?n:{}}):He(!1),r=He(ve?location.hash:"");return ve&&window.addEventListener("hashchange",()=>{r.value=location.hash}),Le(()=>e.data,()=>{r.value=ve?location.hash:""}),{site:t,theme:ie(()=>t.value.themeConfig),page:ie(()=>e.data),frontmatter:ie(()=>e.data.frontmatter),params:ie(()=>e.data.params),lang:ie(()=>t.value.lang),dir:ie(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:ie(()=>t.value.localeIndex||"root"),title:ie(()=>tl(t.value,e.data)),description:ie(()=>e.data.description||t.value.description),isDark:s,hash:ie(()=>r.value)}}function Au(){const e=bt(Cu);if(!e)throw new Error("vitepress data not properly injected in app");return e}function Ru(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function gi(e){return Zo.test(e)||!e.startsWith("/")?e:Ru(Et.value.base,e)}function Mu(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),ve){const n="/";t=pi(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let s=__VP_HASH_MAP__[t.toLowerCase()];if(s||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",s=__VP_HASH_MAP__[t.toLowerCase()]),!s)return null;t=`${n}assets/${t}.${s}.js`}else t=`./${pi(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let In=[];function _f(e){In.push(e),es(()=>{In=In.filter(t=>t!==e)})}function Ou(){let e=Et.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=mi(e,n);else if(Array.isArray(e))for(const s of e){const r=mi(s,n);if(r){t=r;break}}return t}function mi(e,t){const n=document.querySelector(e);if(!n)return 0;const s=n.getBoundingClientRect().bottom;return s<0?0:s+t}const Pu=Symbol(),sl="http://a.com",Lu=()=>({path:"/",component:null,data:el});function bf(e,t){const n=Ht(Lu()),s={route:n,go:r};async function r(l=ve?location.href:"/"){var c,u;l=Cs(l),await((c=s.onBeforeRouteChange)==null?void 0:c.call(s,l))!==!1&&(ve&&l!==Cs(location.href)&&(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",l)),await o(l),await((u=s.onAfterRouteChange??s.onAfterRouteChanged)==null?void 0:u(l)))}let i=null;async function o(l,c=0,u=!1){var m,_;if(await((m=s.onBeforePageLoad)==null?void 0:m.call(s,l))===!1)return;const a=new URL(l,sl),d=i=a.pathname;try{let b=await e(d);if(!b)throw new Error(`Page not found: ${d}`);if(i===d){i=null;const{default:y,__pageData:D}=b;if(!y)throw new Error(`Invalid route component: ${y}`);await((_=s.onAfterPageLoad)==null?void 0:_.call(s,l)),n.path=ve?d:gi(d),n.component=Mn(y),n.data=Mn(D),ve&&zn(()=>{let P=Et.value.base+D.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!Et.value.cleanUrls&&!P.endsWith("/")&&(P+=".html"),P!==a.pathname&&(a.pathname=P,l=P+a.search+a.hash,history.replaceState({},"",l)),a.hash&&!c){let I=null;try{I=document.getElementById(decodeURIComponent(a.hash).slice(1))}catch(p){console.warn(p)}if(I){yi(I,a.hash);return}}window.scrollTo(0,c)})}}catch(b){if(!/fetch|Page not found/.test(b.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(b),!u)try{const y=await fetch(Et.value.base+"hashmap.json");window.__VP_HASH_MAP__=await y.json(),await o(l,c,!0);return}catch{}if(i===d){i=null,n.path=ve?d:gi(d),n.component=t?Mn(t):null;const y=ve?d.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").replace(/^\//,""):"404.md";n.data={...el,relativePath:y}}}}return ve&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",l=>{if(l.defaultPrevented||!(l.target instanceof Element)||l.target.closest("button")||l.button!==0||l.ctrlKey||l.shiftKey||l.altKey||l.metaKey)return;const c=l.target.closest("a");if(!c||c.closest(".vp-raw")||c.hasAttribute("download")||c.hasAttribute("target"))return;const u=c.getAttribute("href")??(c instanceof SVGAElement?c.getAttribute("xlink:href"):null);if(u==null)return;const{href:a,origin:d,pathname:m,hash:_,search:b}=new URL(u,c.baseURI),y=new URL(location.href);d===y.origin&&xu(m)&&(l.preventDefault(),m===y.pathname&&b===y.search?(_!==y.hash&&(history.pushState({},"",a),window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:y.href,newURL:a}))),_?yi(c,_,c.classList.contains("header-anchor")):window.scrollTo(0,0)):r(a))},{capture:!0}),window.addEventListener("popstate",async l=>{var u;if(l.state===null)return;const c=Cs(location.href);await o(c,l.state&&l.state.scrollPosition||0),await((u=s.onAfterRouteChange??s.onAfterRouteChanged)==null?void 0:u(c))}),window.addEventListener("hashchange",l=>{l.preventDefault()})),s}function Iu(){const e=bt(Pu);if(!e)throw new Error("useRouter() is called without provider.");return e}function rl(){return Iu().route}function yi(e,t,n=!1){let s=null;try{s=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(r){console.warn(r)}if(s){let r=function(){!n||Math.abs(o-window.scrollY)>window.innerHeight?window.scrollTo(0,o):window.scrollTo({left:0,top:o,behavior:"smooth"})};const i=parseInt(window.getComputedStyle(s).paddingTop,10),o=window.scrollY+s.getBoundingClientRect().top-Ou()+i;requestAnimationFrame(r)}}function Cs(e){const t=new URL(e,sl);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),Et.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}const xn=()=>In.forEach(e=>e()),wf=rr({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=rl(),{frontmatter:n,site:s}=Au();return Le(n,xn,{deep:!0,flush:"post"}),()=>Ws(e.as,s.value.contentProps??{style:{position:"relative"}},[t.component?Ws(t.component,{onVnodeMounted:xn,onVnodeUpdated:xn,onVnodeUnmounted:xn}):"404 Page Not Found"])}}),Sf=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},Nu="modulepreload",Fu=function(e){return"/"+e},vi={},Tf=function(t,n,s){let r=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),l=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));r=Promise.allSettled(n.map(c=>{if(c=Fu(c),c in vi)return;vi[c]=!0;const u=c.endsWith(".css"),a=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${a}`))return;const d=document.createElement("link");if(d.rel=u?"stylesheet":Nu,u||(d.as="script"),d.crossOrigin="",d.href=c,l&&d.setAttribute("nonce",l),document.head.appendChild(d),u)return new Promise((m,_)=>{d.addEventListener("load",m),d.addEventListener("error",()=>_(new Error(`Unable to preload CSS for ${c}`)))})}))}function i(o){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=o,window.dispatchEvent(l),!l.defaultPrevented)throw o}return r.then(o=>{for(const l of o||[])l.status==="rejected"&&i(l.reason);return t().catch(i)})},Ef=rr({setup(e,{slots:t}){const n=He(!1);return jt(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function xf(){ve&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const s=(n=t.parentElement)==null?void 0:n.parentElement;if(!s)return;const r=Array.from(s.querySelectorAll("input")).indexOf(t);if(r<0)return;const i=s.querySelector(".blocks");if(!i)return;const o=Array.from(i.children).find(u=>u.classList.contains("active"));if(!o)return;const l=i.children[r];if(!l||o===l)return;o.classList.remove("active"),l.classList.add("active");const c=s==null?void 0:s.querySelector(`label[for="${t.id}"]`);c==null||c.scrollIntoView({block:"nearest"})}})}function Cf(){if(ve){const e=new WeakMap;window.addEventListener("click",t=>{var s;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const r=n.parentElement,i=(s=n.nextElementSibling)==null?void 0:s.nextElementSibling;if(!r||!i)return;const o=/language-(shellscript|shell|bash|sh|zsh)/.test(r.className),l=[".vp-copy-ignore",".diff.remove"],c=i.cloneNode(!0);c.querySelectorAll(l.join(",")).forEach(a=>a.remove());let u=c.textContent||"";o&&(u=u.replace(/^ *(\$|>) /gm,"").trim()),Hu(u).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const a=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,a)})}})}}async function Hu(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const s=document.getSelection(),r=s?s.rangeCount>0&&s.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),r&&(s.removeAllRanges(),s.addRange(r)),n&&n.focus()}}function Af(e,t){let n=!0,s=[];const r=i=>{if(n){n=!1,i.forEach(l=>{const c=As(l);for(const u of document.head.children)if(u.isEqualNode(c)){s.push(u);return}});return}const o=i.map(As);s.forEach((l,c)=>{const u=o.findIndex(a=>a==null?void 0:a.isEqualNode(l??null));u!==-1?delete o[u]:(l==null||l.remove(),delete s[c])}),o.forEach(l=>l&&document.head.appendChild(l)),s=[...s,...o].filter(Boolean)};sr(()=>{const i=e.data,o=t.value,l=i&&i.description,c=i&&i.frontmatter.head||[],u=tl(o,i);u!==document.title&&(document.title=u);const a=l||o.description;let d=document.querySelector("meta[name=description]");d?d.getAttribute("content")!==a&&d.setAttribute("content",a):As(["meta",{name:"description",content:a}]),r(nl(o.head,$u(c)))})}function As([e,t,n]){const s=document.createElement(e);for(const r in t)s.setAttribute(r,t[r]);return n&&(s.innerHTML=n),e==="script"&&t.async==null&&(s.async=!1),s}function Du(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function $u(e){return e.filter(t=>!Du(t))}const Rs=new Set,il=()=>document.createElement("link"),ju=e=>{const t=il();t.rel="prefetch",t.href=e,document.head.appendChild(t)},Vu=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let Cn;const ku=ve&&(Cn=il())&&Cn.relList&&Cn.relList.supports&&Cn.relList.supports("prefetch")?ju:Vu;function Rf(){if(!ve||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const s=()=>{n&&n.disconnect(),n=new IntersectionObserver(i=>{i.forEach(o=>{if(o.isIntersecting){const l=o.target;n.unobserve(l);const{pathname:c}=l;if(!Rs.has(c)){Rs.add(c);const u=Mu(c);u&&ku(u)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(i=>{const{hostname:o,pathname:l}=new URL(i.href instanceof SVGAnimatedString?i.href.animVal:i.href,i.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||i.target!=="_blank"&&o===location.hostname&&(l!==location.pathname?n.observe(i):Rs.add(l))})})};jt(s);const r=rl();Le(()=>r.path,s),es(()=>{n&&n.disconnect()})}export{oo as $,Ou as A,Xu as B,qu as C,_f as D,ue as E,Se as F,Ee as G,Gu as H,Zo as I,rl as J,ta as K,bt as L,mf as M,Xs as N,ff as O,zn as P,gf as Q,ve as R,tn as S,tf as T,Ku as U,Tf as V,hf as W,ic as X,Ju as Y,rf as Z,Sf as _,Fo as a,sf as a0,zu as a1,Af as a2,Pu as a3,vf as a4,Cu as a5,wf as a6,Ef as a7,Et as a8,bf as a9,Mu as aa,lf as ab,Rf as ac,Cf as ad,xf as ae,Ws as af,Zu as ag,Bo as ah,ce as ai,bs as aj,dr as ak,cf as al,uf as am,pf as an,df as ao,af as ap,Iu as aq,nt as ar,Wu as as,nf as at,ae as au,Bu as av,Mn as aw,of as ax,yf as ay,Vs as b,Qu as c,rr as d,ef as e,xu as f,gi as g,ie as h,vu as i,No as j,Jn as k,yu as l,Yo as m,Ys as n,js as o,He as p,Le as q,Yu as r,sr as s,bl as t,Au as u,jt as v,rc as w,es as x,Uu as y,Tc as z}; diff --git a/assets/chunks/theme.Dze9WHF4.js b/assets/chunks/theme.B0ckB4ri.js similarity index 99% rename from assets/chunks/theme.Dze9WHF4.js rename to assets/chunks/theme.B0ckB4ri.js index 63d1b450..0de79518 100644 --- a/assets/chunks/theme.Dze9WHF4.js +++ b/assets/chunks/theme.B0ckB4ri.js @@ -1,2 +1,2 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPLocalSearchBox.DWBTWqjx.js","assets/chunks/framework.ePeAWSvT.js"])))=>i.map(i=>d[i]); -import{d as p,c as u,r as c,n as N,o as s,a as j,t as M,b as _,w as h,T as ue,e as m,_ as g,u as Ce,i as He,f as Be,g as de,h as y,j as d,k as i,l as z,m as se,p as S,q as F,s as X,v as U,x as ve,y as fe,z as Ee,A as Fe,F as x,B as A,C as W,D as Y,E as k,G as $e,H as B,I as ye,J as Q,K as G,L as Z,M as De,N as Pe,O as ie,P as Le,Q as Ve,R as ee,S as Oe,U as Ge,V as Ue,W as Se,X as Te,Y as je,Z as ze,$ as We,a0 as Ke,a1 as qe}from"./framework.ePeAWSvT.js";const Re=p({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(e){return(t,n)=>(s(),u("span",{class:N(["VPBadge",e.type])},[c(t.$slots,"default",{},()=>[j(M(e.text),1)])],2))}}),Je={key:0,class:"VPBackdrop"},Xe=p({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(e){return(t,n)=>(s(),_(ue,{name:"fade"},{default:h(()=>[e.show?(s(),u("div",Je)):m("",!0)]),_:1}))}}),Ye=g(Xe,[["__scopeId","data-v-b2fc99d2"]]),L=Ce;function Qe(e,t){let n,a=!1;return()=>{n&&clearTimeout(n),a?n=setTimeout(e,t):(e(),(a=!0)&&setTimeout(()=>a=!1,t))}}function re(e){return e.startsWith("/")?e:`/${e}`}function he(e){const{pathname:t,search:n,hash:a,protocol:o}=new URL(e,"http://a.com");if(He(e)||e.startsWith("#")||!o.startsWith("http")||!Be(t))return e;const{site:r}=L(),l=t.endsWith("/")||t.endsWith(".html")?e:e.replace(/(?:(^\.+)\/)?.*$/,`$1${t.replace(/(\.md)?$/,r.value.cleanUrls?"":".html")}${n}${a}`);return de(l)}function q({correspondingLink:e=!1}={}){const{site:t,localeIndex:n,page:a,theme:o,hash:r}=L(),l=y(()=>{var f,$;return{label:(f=t.value.locales[n.value])==null?void 0:f.label,link:(($=t.value.locales[n.value])==null?void 0:$.link)||(n.value==="root"?"/":`/${n.value}/`)}});return{localeLinks:y(()=>Object.entries(t.value.locales).flatMap(([f,$])=>l.value.label===$.label?[]:{text:$.label,link:Ze($.link||(f==="root"?"/":`/${f}/`),o.value.i18nRouting!==!1&&e,a.value.relativePath.slice(l.value.link.length-1),!t.value.cleanUrls)+r.value})),currentLang:l}}function Ze(e,t,n,a){return t?e.replace(/\/$/,"")+re(n.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,a?".html":"")):e}const et={class:"NotFound"},tt={class:"code"},nt={class:"title"},at={class:"quote"},ot={class:"action"},st=["href","aria-label"],it=p({__name:"NotFound",setup(e){const{theme:t}=L(),{currentLang:n}=q();return(a,o)=>{var r,l,v,f,$;return s(),u("div",et,[d("p",tt,M(((r=i(t).notFound)==null?void 0:r.code)??"404"),1),d("h1",nt,M(((l=i(t).notFound)==null?void 0:l.title)??"PAGE NOT FOUND"),1),o[0]||(o[0]=d("div",{class:"divider"},null,-1)),d("blockquote",at,M(((v=i(t).notFound)==null?void 0:v.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),d("div",ot,[d("a",{class:"link",href:i(de)(i(n).link),"aria-label":((f=i(t).notFound)==null?void 0:f.linkLabel)??"go to home"},M((($=i(t).notFound)==null?void 0:$.linkText)??"Take me home"),9,st)])])}}}),rt=g(it,[["__scopeId","data-v-dc48cef8"]]);function Ne(e,t){if(Array.isArray(e))return R(e);if(e==null)return[];t=re(t);const n=Object.keys(e).sort((o,r)=>r.split("/").length-o.split("/").length).find(o=>t.startsWith(re(o))),a=n?e[n]:[];return Array.isArray(a)?R(a):R(a.items,a.base)}function lt(e){const t=[];let n=0;for(const a in e){const o=e[a];if(o.items){n=t.push(o);continue}t[n]||t.push({items:[]}),t[n].items.push(o)}return t}function ct(e){const t=[];function n(a){for(const o of a)o.text&&o.link&&t.push({text:o.text,link:o.link,docFooterText:o.docFooterText}),o.items&&n(o.items)}return n(e),t}function le(e,t){return Array.isArray(t)?t.some(n=>le(e,n)):z(e,t.link)?!0:t.items?le(e,t.items):!1}function R(e,t){return[...e].map(n=>{const a={...n},o=a.base||t;return o&&a.link&&(a.link=o+a.link),a.items&&(a.items=R(a.items,o)),a})}function D(){const{frontmatter:e,page:t,theme:n}=L(),a=se("(min-width: 960px)"),o=S(!1),r=y(()=>{const w=n.value.sidebar,C=t.value.relativePath;return w?Ne(w,C):[]}),l=S(r.value);F(r,(w,C)=>{JSON.stringify(w)!==JSON.stringify(C)&&(l.value=r.value)});const v=y(()=>e.value.sidebar!==!1&&l.value.length>0&&e.value.layout!=="home"),f=y(()=>$?e.value.aside==null?n.value.aside==="left":e.value.aside==="left":!1),$=y(()=>e.value.layout==="home"?!1:e.value.aside!=null?!!e.value.aside:n.value.aside!==!1),V=y(()=>v.value&&a.value),b=y(()=>v.value?lt(l.value):[]);function P(){o.value=!0}function T(){o.value=!1}function I(){o.value?T():P()}return{isOpen:o,sidebar:l,sidebarGroups:b,hasSidebar:v,hasAside:$,leftAside:f,isSidebarEnabled:V,open:P,close:T,toggle:I}}function ut(e,t){let n;X(()=>{n=e.value?document.activeElement:void 0}),U(()=>{window.addEventListener("keyup",a)}),ve(()=>{window.removeEventListener("keyup",a)});function a(o){o.key==="Escape"&&e.value&&(t(),n==null||n.focus())}}function dt(e){const{page:t,hash:n}=L(),a=S(!1),o=y(()=>e.value.collapsed!=null),r=y(()=>!!e.value.link),l=S(!1),v=()=>{l.value=z(t.value.relativePath,e.value.link)};F([t,e,n],v),U(v);const f=y(()=>l.value?!0:e.value.items?le(t.value.relativePath,e.value.items):!1),$=y(()=>!!(e.value.items&&e.value.items.length));X(()=>{a.value=!!(o.value&&e.value.collapsed)}),fe(()=>{(l.value||f.value)&&(a.value=!1)});function V(){o.value&&(a.value=!a.value)}return{collapsed:a,collapsible:o,isLink:r,isActiveLink:l,hasActiveLink:f,hasChildren:$,toggle:V}}function vt(){const{hasSidebar:e}=D(),t=se("(min-width: 960px)"),n=se("(min-width: 1280px)");return{isAsideEnabled:y(()=>!n.value&&!t.value?!1:e.value?n.value:t.value)}}const ft=/\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/,ce=[];function Me(e){return typeof e.outline=="object"&&!Array.isArray(e.outline)&&e.outline.label||e.outlineTitle||"On this page"}function me(e){const t=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(n=>n.id&&n.hasChildNodes()).map(n=>{const a=Number(n.tagName[1]);return{element:n,title:ht(n),link:"#"+n.id,level:a}});return mt(t,e)}function ht(e){let t="";for(const n of e.childNodes)if(n.nodeType===1){if(ft.test(n.className))continue;t+=n.textContent}else n.nodeType===3&&(t+=n.textContent);return t.trim()}function mt(e,t){if(t===!1)return[];const n=(typeof t=="object"&&!Array.isArray(t)?t.level:t)||2,[a,o]=typeof n=="number"?[n,n]:n==="deep"?[2,6]:n;return _t(e,a,o)}function pt(e,t){const{isAsideEnabled:n}=vt(),a=Qe(r,100);let o=null;U(()=>{requestAnimationFrame(r),window.addEventListener("scroll",a)}),Ee(()=>{l(location.hash)}),ve(()=>{window.removeEventListener("scroll",a)});function r(){if(!n.value)return;const v=window.scrollY,f=window.innerHeight,$=document.body.offsetHeight,V=Math.abs(v+f-$)<1,b=ce.map(({element:T,link:I})=>({link:I,top:kt(T)})).filter(({top:T})=>!Number.isNaN(T)).sort((T,I)=>T.top-I.top);if(!b.length){l(null);return}if(v<1){l(null);return}if(V){l(b[b.length-1].link);return}let P=null;for(const{link:T,top:I}of b){if(I>v+Fe()+4)break;P=T}l(P)}function l(v){o&&o.classList.remove("active"),v==null?o=null:o=e.value.querySelector(`a[href="${decodeURIComponent(v)}"]`);const f=o;f?(f.classList.add("active"),t.value.style.top=f.offsetTop+39+"px",t.value.style.opacity="1"):(t.value.style.top="33px",t.value.style.opacity="0")}}function kt(e){let t=0;for(;e!==document.body;){if(e===null)return NaN;t+=e.offsetTop,e=e.offsetParent}return t}function _t(e,t,n){ce.length=0;const a=[],o=[];return e.forEach(r=>{const l={...r,children:[]};let v=o[o.length-1];for(;v&&v.level>=l.level;)o.pop(),v=o[o.length-1];if(l.element.classList.contains("ignore-header")||v&&"shouldIgnore"in v){o.push({level:l.level,shouldIgnore:!0});return}l.level>n||l.level{const o=W("VPDocOutlineItem",!0);return s(),u("ul",{class:N(["VPDocOutlineItem",e.root?"root":"nested"])},[(s(!0),u(x,null,A(e.headers,({children:r,link:l,title:v})=>(s(),u("li",null,[d("a",{class:"outline-link",href:l,onClick:t,title:v},M(v),9,bt),r!=null&&r.length?(s(),_(o,{key:0,headers:r},null,8,["headers"])):m("",!0)]))),256))],2)}}}),xe=g(gt,[["__scopeId","data-v-554af1ab"]]),$t={class:"content"},yt={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},Pt=p({__name:"VPDocAsideOutline",setup(e){const{frontmatter:t,theme:n}=L(),a=$e([]);Y(()=>{a.value=me(t.value.outline??n.value.outline)});const o=S(),r=S();return pt(o,r),(l,v)=>(s(),u("nav",{"aria-labelledby":"doc-outline-aria-label",class:N(["VPDocAsideOutline",{"has-outline":a.value.length>0}]),ref_key:"container",ref:o},[d("div",$t,[d("div",{class:"outline-marker",ref_key:"marker",ref:r},null,512),d("div",yt,M(i(Me)(i(n))),1),k(xe,{headers:a.value,root:!0},null,8,["headers"])])],2))}}),Lt=g(Pt,[["__scopeId","data-v-3d6074c1"]]),Vt={class:"VPDocAsideCarbonAds"},St=p({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(e){const t=()=>null;return(n,a)=>(s(),u("div",Vt,[k(i(t),{"carbon-ads":e.carbonAds},null,8,["carbon-ads"])]))}}),Tt={class:"VPDocAside"},Nt=p({__name:"VPDocAside",setup(e){const{theme:t}=L();return(n,a)=>(s(),u("div",Tt,[c(n.$slots,"aside-top",{},void 0,!0),c(n.$slots,"aside-outline-before",{},void 0,!0),k(Lt),c(n.$slots,"aside-outline-after",{},void 0,!0),a[0]||(a[0]=d("div",{class:"spacer"},null,-1)),c(n.$slots,"aside-ads-before",{},void 0,!0),i(t).carbonAds?(s(),_(St,{key:0,"carbon-ads":i(t).carbonAds},null,8,["carbon-ads"])):m("",!0),c(n.$slots,"aside-ads-after",{},void 0,!0),c(n.$slots,"aside-bottom",{},void 0,!0)]))}}),Mt=g(Nt,[["__scopeId","data-v-f5225fdd"]]);function xt(){const{theme:e,page:t}=L();return y(()=>{const{text:n="Edit this page",pattern:a=""}=e.value.editLink||{};let o;return typeof a=="function"?o=a(t.value):o=a.replace(/:path/g,t.value.filePath),{url:o,text:n}})}function It(){const{page:e,theme:t,frontmatter:n}=L();return y(()=>{var $,V,b,P,T,I,w,C;const a=Ne(t.value.sidebar,e.value.relativePath),o=ct(a),r=wt(o,H=>H.link.replace(/[?#].*$/,"")),l=r.findIndex(H=>z(e.value.relativePath,H.link)),v=(($=t.value.docFooter)==null?void 0:$.prev)===!1&&!n.value.prev||n.value.prev===!1,f=((V=t.value.docFooter)==null?void 0:V.next)===!1&&!n.value.next||n.value.next===!1;return{prev:v?void 0:{text:(typeof n.value.prev=="string"?n.value.prev:typeof n.value.prev=="object"?n.value.prev.text:void 0)??((b=r[l-1])==null?void 0:b.docFooterText)??((P=r[l-1])==null?void 0:P.text),link:(typeof n.value.prev=="object"?n.value.prev.link:void 0)??((T=r[l-1])==null?void 0:T.link)},next:f?void 0:{text:(typeof n.value.next=="string"?n.value.next:typeof n.value.next=="object"?n.value.next.text:void 0)??((I=r[l+1])==null?void 0:I.docFooterText)??((w=r[l+1])==null?void 0:w.text),link:(typeof n.value.next=="object"?n.value.next.link:void 0)??((C=r[l+1])==null?void 0:C.link)}}})}function wt(e,t){const n=new Set;return e.filter(a=>{const o=t(a);return n.has(o)?!1:n.add(o)})}const E=p({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(e){const t=e,n=y(()=>t.tag??(t.href?"a":"span")),a=y(()=>t.href&&ye.test(t.href)||t.target==="_blank");return(o,r)=>(s(),_(B(n.value),{class:N(["VPLink",{link:e.href,"vp-external-link-icon":a.value,"no-icon":e.noIcon}]),href:e.href?i(he)(e.href):void 0,target:e.target??(a.value?"_blank":void 0),rel:e.rel??(a.value?"noreferrer":void 0)},{default:h(()=>[c(o.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),At={class:"VPLastUpdated"},Ct=["datetime"],Ht=p({__name:"VPDocFooterLastUpdated",setup(e){const{theme:t,page:n,lang:a}=L(),o=y(()=>new Date(n.value.lastUpdated)),r=y(()=>o.value.toISOString()),l=S("");return U(()=>{X(()=>{var v,f,$;l.value=new Intl.DateTimeFormat((f=(v=t.value.lastUpdated)==null?void 0:v.formatOptions)!=null&&f.forceLocale?a.value:void 0,(($=t.value.lastUpdated)==null?void 0:$.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(o.value)})}),(v,f)=>{var $;return s(),u("p",At,[j(M((($=i(t).lastUpdated)==null?void 0:$.text)||i(t).lastUpdatedText||"Last updated")+": ",1),d("time",{datetime:r.value},M(l.value),9,Ct)])}}}),Bt=g(Ht,[["__scopeId","data-v-76b89e12"]]),Et={key:0,class:"VPDocFooter"},Ft={key:0,class:"edit-info"},Dt={key:0,class:"edit-link"},Ot={key:1,class:"last-updated"},Gt={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},Ut={class:"pager"},jt=["innerHTML"],zt=["innerHTML"],Wt={class:"pager"},Kt=["innerHTML"],qt=["innerHTML"],Rt=p({__name:"VPDocFooter",setup(e){const{theme:t,page:n,frontmatter:a}=L(),o=xt(),r=It(),l=y(()=>t.value.editLink&&a.value.editLink!==!1),v=y(()=>n.value.lastUpdated),f=y(()=>l.value||v.value||r.value.prev||r.value.next);return($,V)=>{var b,P,T,I;return f.value?(s(),u("footer",Et,[c($.$slots,"doc-footer-before",{},void 0,!0),l.value||v.value?(s(),u("div",Ft,[l.value?(s(),u("div",Dt,[k(E,{class:"edit-link-button",href:i(o).url,"no-icon":!0},{default:h(()=>[V[0]||(V[0]=d("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),j(" "+M(i(o).text),1)]),_:1},8,["href"])])):m("",!0),v.value?(s(),u("div",Ot,[k(Bt)])):m("",!0)])):m("",!0),(b=i(r).prev)!=null&&b.link||(P=i(r).next)!=null&&P.link?(s(),u("nav",Gt,[V[1]||(V[1]=d("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),d("div",Ut,[(T=i(r).prev)!=null&&T.link?(s(),_(E,{key:0,class:"pager-link prev",href:i(r).prev.link},{default:h(()=>{var w;return[d("span",{class:"desc",innerHTML:((w=i(t).docFooter)==null?void 0:w.prev)||"Previous page"},null,8,jt),d("span",{class:"title",innerHTML:i(r).prev.text},null,8,zt)]}),_:1},8,["href"])):m("",!0)]),d("div",Wt,[(I=i(r).next)!=null&&I.link?(s(),_(E,{key:0,class:"pager-link next",href:i(r).next.link},{default:h(()=>{var w;return[d("span",{class:"desc",innerHTML:((w=i(t).docFooter)==null?void 0:w.next)||"Next page"},null,8,Kt),d("span",{class:"title",innerHTML:i(r).next.text},null,8,qt)]}),_:1},8,["href"])):m("",!0)])])):m("",!0)])):m("",!0)}}}),Jt=g(Rt,[["__scopeId","data-v-57f47480"]]),Xt={class:"container"},Yt={class:"aside-container"},Qt={class:"aside-content"},Zt={class:"content"},en={class:"content-container"},tn={class:"main"},nn=p({__name:"VPDoc",setup(e){const{theme:t}=L(),n=Q(),{hasSidebar:a,hasAside:o,leftAside:r}=D(),l=y(()=>n.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(v,f)=>{const $=W("Content");return s(),u("div",{class:N(["VPDoc",{"has-sidebar":i(a),"has-aside":i(o)}])},[c(v.$slots,"doc-top",{},void 0,!0),d("div",Xt,[i(o)?(s(),u("div",{key:0,class:N(["aside",{"left-aside":i(r)}])},[f[0]||(f[0]=d("div",{class:"aside-curtain"},null,-1)),d("div",Yt,[d("div",Qt,[k(Mt,null,{"aside-top":h(()=>[c(v.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":h(()=>[c(v.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":h(()=>[c(v.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":h(()=>[c(v.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":h(()=>[c(v.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":h(()=>[c(v.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):m("",!0),d("div",Zt,[d("div",en,[c(v.$slots,"doc-before",{},void 0,!0),d("main",tn,[k($,{class:N(["vp-doc",[l.value,i(t).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),k(Jt,null,{"doc-footer-before":h(()=>[c(v.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),c(v.$slots,"doc-after",{},void 0,!0)])])]),c(v.$slots,"doc-bottom",{},void 0,!0)],2)}}}),an=g(nn,[["__scopeId","data-v-b4547c88"]]),on=p({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(e){const t=e,n=y(()=>t.href&&ye.test(t.href)),a=y(()=>t.tag||(t.href?"a":"button"));return(o,r)=>(s(),_(B(a.value),{class:N(["VPButton",[e.size,e.theme]]),href:e.href?i(he)(e.href):void 0,target:t.target??(n.value?"_blank":void 0),rel:t.rel??(n.value?"noreferrer":void 0)},{default:h(()=>[j(M(e.text),1)]),_:1},8,["class","href","target","rel"]))}}),sn=g(on,[["__scopeId","data-v-9a3de217"]]),rn=["src","alt"],ln=p({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(e){return(t,n)=>{const a=W("VPImage",!0);return e.image?(s(),u(x,{key:0},[typeof e.image=="string"||"src"in e.image?(s(),u("img",G({key:0,class:"VPImage"},typeof e.image=="string"?t.$attrs:{...e.image,...t.$attrs},{src:i(de)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,rn)):(s(),u(x,{key:1},[k(a,G({class:"dark",image:e.image.dark,alt:e.image.alt},t.$attrs),null,16,["image","alt"]),k(a,G({class:"light",image:e.image.light,alt:e.image.alt},t.$attrs),null,16,["image","alt"])],64))],64)):m("",!0)}}}),J=g(ln,[["__scopeId","data-v-4ea68547"]]),cn={class:"container"},un={class:"main"},dn={class:"heading"},vn=["innerHTML"],fn=["innerHTML"],hn=["innerHTML"],mn={key:0,class:"actions"},pn={key:0,class:"image"},kn={class:"image-container"},_n=p({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(e){const t=Z("hero-image-slot-exists");return(n,a)=>(s(),u("div",{class:N(["VPHero",{"has-image":e.image||i(t)}])},[d("div",cn,[d("div",un,[c(n.$slots,"home-hero-info-before",{},void 0,!0),c(n.$slots,"home-hero-info",{},()=>[d("h1",dn,[e.name?(s(),u("span",{key:0,innerHTML:e.name,class:"name clip"},null,8,vn)):m("",!0),e.text?(s(),u("span",{key:1,innerHTML:e.text,class:"text"},null,8,fn)):m("",!0)]),e.tagline?(s(),u("p",{key:0,innerHTML:e.tagline,class:"tagline"},null,8,hn)):m("",!0)],!0),c(n.$slots,"home-hero-info-after",{},void 0,!0),e.actions?(s(),u("div",mn,[(s(!0),u(x,null,A(e.actions,o=>(s(),u("div",{key:o.link,class:"action"},[k(sn,{tag:"a",size:"medium",theme:o.theme,text:o.text,href:o.link,target:o.target,rel:o.rel},null,8,["theme","text","href","target","rel"])]))),128))])):m("",!0),c(n.$slots,"home-hero-actions-after",{},void 0,!0)]),e.image||i(t)?(s(),u("div",pn,[d("div",kn,[a[0]||(a[0]=d("div",{class:"image-bg"},null,-1)),c(n.$slots,"home-hero-image",{},()=>[e.image?(s(),_(J,{key:0,class:"image-src",image:e.image},null,8,["image"])):m("",!0)],!0)])])):m("",!0)])],2))}}),bn=g(_n,[["__scopeId","data-v-7697383f"]]),gn=p({__name:"VPHomeHero",setup(e){const{frontmatter:t}=L();return(n,a)=>i(t).hero?(s(),_(bn,{key:0,class:"VPHomeHero",name:i(t).hero.name,text:i(t).hero.text,tagline:i(t).hero.tagline,image:i(t).hero.image,actions:i(t).hero.actions},{"home-hero-info-before":h(()=>[c(n.$slots,"home-hero-info-before")]),"home-hero-info":h(()=>[c(n.$slots,"home-hero-info")]),"home-hero-info-after":h(()=>[c(n.$slots,"home-hero-info-after")]),"home-hero-actions-after":h(()=>[c(n.$slots,"home-hero-actions-after")]),"home-hero-image":h(()=>[c(n.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):m("",!0)}}),$n={class:"box"},yn={key:0,class:"icon"},Pn=["innerHTML"],Ln=["innerHTML"],Vn=["innerHTML"],Sn={key:4,class:"link-text"},Tn={class:"link-text-value"},Nn=p({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(e){return(t,n)=>(s(),_(E,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:h(()=>[d("article",$n,[typeof e.icon=="object"&&e.icon.wrap?(s(),u("div",yn,[k(J,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(s(),_(J,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(s(),u("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Pn)):m("",!0),d("h2",{class:"title",innerHTML:e.title},null,8,Ln),e.details?(s(),u("p",{key:3,class:"details",innerHTML:e.details},null,8,Vn)):m("",!0),e.linkText?(s(),u("div",Sn,[d("p",Tn,[j(M(e.linkText)+" ",1),n[0]||(n[0]=d("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):m("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),Mn=g(Nn,[["__scopeId","data-v-56f5d2c1"]]),xn={key:0,class:"VPFeatures"},In={class:"container"},wn={class:"items"},An=p({__name:"VPFeatures",props:{features:{}},setup(e){const t=e,n=y(()=>{const a=t.features.length;if(a){if(a===2)return"grid-2";if(a===3)return"grid-3";if(a%3===0)return"grid-6";if(a>3)return"grid-4"}else return});return(a,o)=>e.features?(s(),u("div",xn,[d("div",In,[d("div",wn,[(s(!0),u(x,null,A(e.features,r=>(s(),u("div",{key:r.title,class:N(["item",[n.value]])},[k(Mn,{icon:r.icon,title:r.title,details:r.details,link:r.link,"link-text":r.linkText,rel:r.rel,target:r.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):m("",!0)}}),Cn=g(An,[["__scopeId","data-v-79f59e92"]]),Hn=p({__name:"VPHomeFeatures",setup(e){const{frontmatter:t}=L();return(n,a)=>i(t).features?(s(),_(Cn,{key:0,class:"VPHomeFeatures",features:i(t).features},null,8,["features"])):m("",!0)}}),Bn=p({__name:"VPHomeContent",setup(e){const{width:t}=De({initialWidth:0,includeScrollbar:!1});return(n,a)=>(s(),u("div",{class:"vp-doc container",style:Pe(i(t)?{"--vp-offset":`calc(50% - ${i(t)/2}px)`}:{})},[c(n.$slots,"default",{},void 0,!0)],4))}}),En=g(Bn,[["__scopeId","data-v-7484ad42"]]),Fn=p({__name:"VPHome",setup(e){const{frontmatter:t,theme:n}=L();return(a,o)=>{const r=W("Content");return s(),u("div",{class:N(["VPHome",{"external-link-icon-enabled":i(n).externalLinkIcon}])},[c(a.$slots,"home-hero-before",{},void 0,!0),k(gn,null,{"home-hero-info-before":h(()=>[c(a.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":h(()=>[c(a.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":h(()=>[c(a.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":h(()=>[c(a.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":h(()=>[c(a.$slots,"home-hero-image",{},void 0,!0)]),_:3}),c(a.$slots,"home-hero-after",{},void 0,!0),c(a.$slots,"home-features-before",{},void 0,!0),k(Hn),c(a.$slots,"home-features-after",{},void 0,!0),i(t).markdownStyles!==!1?(s(),_(En,{key:0},{default:h(()=>[k(r)]),_:1})):(s(),_(r,{key:1}))],2)}}}),Dn=g(Fn,[["__scopeId","data-v-15d67397"]]),On={},Gn={class:"VPPage"};function Un(e,t){const n=W("Content");return s(),u("div",Gn,[c(e.$slots,"page-top"),k(n),c(e.$slots,"page-bottom")])}const jn=g(On,[["render",Un]]),zn=p({__name:"VPContent",setup(e){const{page:t,frontmatter:n}=L(),{hasSidebar:a}=D();return(o,r)=>(s(),u("div",{class:N(["VPContent",{"has-sidebar":i(a),"is-home":i(n).layout==="home"}]),id:"VPContent"},[i(t).isNotFound?c(o.$slots,"not-found",{key:0},()=>[k(rt)],!0):i(n).layout==="page"?(s(),_(jn,{key:1},{"page-top":h(()=>[c(o.$slots,"page-top",{},void 0,!0)]),"page-bottom":h(()=>[c(o.$slots,"page-bottom",{},void 0,!0)]),_:3})):i(n).layout==="home"?(s(),_(Dn,{key:2},{"home-hero-before":h(()=>[c(o.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":h(()=>[c(o.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":h(()=>[c(o.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":h(()=>[c(o.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":h(()=>[c(o.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":h(()=>[c(o.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":h(()=>[c(o.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":h(()=>[c(o.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":h(()=>[c(o.$slots,"home-features-after",{},void 0,!0)]),_:3})):i(n).layout&&i(n).layout!=="doc"?(s(),_(B(i(n).layout),{key:3})):(s(),_(an,{key:4},{"doc-top":h(()=>[c(o.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":h(()=>[c(o.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":h(()=>[c(o.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":h(()=>[c(o.$slots,"doc-before",{},void 0,!0)]),"doc-after":h(()=>[c(o.$slots,"doc-after",{},void 0,!0)]),"aside-top":h(()=>[c(o.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":h(()=>[c(o.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":h(()=>[c(o.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":h(()=>[c(o.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":h(()=>[c(o.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":h(()=>[c(o.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),Wn=g(zn,[["__scopeId","data-v-b7673a1a"]]),Kn={class:"container"},qn=["innerHTML"],Rn=["innerHTML"],Jn=p({__name:"VPFooter",setup(e){const{theme:t,frontmatter:n}=L(),{hasSidebar:a}=D();return(o,r)=>i(t).footer&&i(n).footer!==!1?(s(),u("footer",{key:0,class:N(["VPFooter",{"has-sidebar":i(a)}])},[d("div",Kn,[i(t).footer.message?(s(),u("p",{key:0,class:"message",innerHTML:i(t).footer.message},null,8,qn)):m("",!0),i(t).footer.copyright?(s(),u("p",{key:1,class:"copyright",innerHTML:i(t).footer.copyright},null,8,Rn)):m("",!0)])],2)):m("",!0)}}),Xn=g(Jn,[["__scopeId","data-v-eda79520"]]);function Yn(){const{theme:e,frontmatter:t}=L(),n=$e([]),a=y(()=>n.value.length>0);return Y(()=>{n.value=me(t.value.outline??e.value.outline)}),{headers:n,hasLocalNav:a}}const Qn={class:"menu-text"},Zn={class:"header"},ea={class:"outline"},ta=p({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(e){const t=e,{theme:n}=L(),a=S(!1),o=S(0),r=S(),l=S();function v(b){var P;(P=r.value)!=null&&P.contains(b.target)||(a.value=!1)}F(a,b=>{if(b){document.addEventListener("click",v);return}document.removeEventListener("click",v)}),ie("Escape",()=>{a.value=!1}),Y(()=>{a.value=!1});function f(){a.value=!a.value,o.value=window.innerHeight+Math.min(window.scrollY-t.navHeight,0)}function $(b){b.target.classList.contains("outline-link")&&(l.value&&(l.value.style.transition="none"),Le(()=>{a.value=!1}))}function V(){a.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(b,P)=>(s(),u("div",{class:"VPLocalNavOutlineDropdown",style:Pe({"--vp-vh":o.value+"px"}),ref_key:"main",ref:r},[e.headers.length>0?(s(),u("button",{key:0,onClick:f,class:N({open:a.value})},[d("span",Qn,M(i(Me)(i(n))),1),P[0]||(P[0]=d("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(s(),u("button",{key:1,onClick:V},M(i(n).returnToTopLabel||"Return to top"),1)),k(ue,{name:"flyout"},{default:h(()=>[a.value?(s(),u("div",{key:0,ref_key:"items",ref:l,class:"items",onClick:$},[d("div",Zn,[d("a",{class:"top-link",href:"#",onClick:V},M(i(n).returnToTopLabel||"Return to top"),1)]),d("div",ea,[k(xe,{headers:e.headers},null,8,["headers"])])],512)):m("",!0)]),_:1})],4))}}),na=g(ta,[["__scopeId","data-v-b1705a02"]]),aa={class:"container"},oa=["aria-expanded"],sa={class:"menu-text"},ia=p({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(e){const{theme:t,frontmatter:n}=L(),{hasSidebar:a}=D(),{headers:o}=Yn(),{y:r}=Ve(),l=S(0);U(()=>{l.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),Y(()=>{o.value=me(n.value.outline??t.value.outline)});const v=y(()=>o.value.length===0),f=y(()=>v.value&&!a.value),$=y(()=>({VPLocalNav:!0,"has-sidebar":a.value,empty:v.value,fixed:f.value}));return(V,b)=>i(n).layout!=="home"&&(!f.value||i(r)>=l.value)?(s(),u("div",{key:0,class:N($.value)},[d("div",aa,[i(a)?(s(),u("button",{key:0,class:"menu","aria-expanded":e.open,"aria-controls":"VPSidebarNav",onClick:b[0]||(b[0]=P=>V.$emit("open-menu"))},[b[1]||(b[1]=d("span",{class:"vpi-align-left menu-icon"},null,-1)),d("span",sa,M(i(t).sidebarMenuLabel||"Menu"),1)],8,oa)):m("",!0),k(na,{headers:i(o),navHeight:l.value},null,8,["headers","navHeight"])])],2)):m("",!0)}}),ra=g(ia,[["__scopeId","data-v-35fedc2e"]]);function la(){const e=S(!1);function t(){e.value=!0,window.addEventListener("resize",o)}function n(){e.value=!1,window.removeEventListener("resize",o)}function a(){e.value?n():t()}function o(){window.outerWidth>=768&&n()}const r=Q();return F(()=>r.path,n),{isScreenOpen:e,openScreen:t,closeScreen:n,toggleScreen:a}}const ca={},ua={class:"VPSwitch",type:"button",role:"switch"},da={class:"check"},va={key:0,class:"icon"};function fa(e,t){return s(),u("button",ua,[d("span",da,[e.$slots.default?(s(),u("span",va,[c(e.$slots,"default",{},void 0,!0)])):m("",!0)])])}const ha=g(ca,[["render",fa],["__scopeId","data-v-30be283b"]]),ma=p({__name:"VPSwitchAppearance",setup(e){const{isDark:t,theme:n}=L(),a=Z("toggle-appearance",()=>{t.value=!t.value}),o=S("");return fe(()=>{o.value=t.value?n.value.lightModeSwitchTitle||"Switch to light theme":n.value.darkModeSwitchTitle||"Switch to dark theme"}),(r,l)=>(s(),_(ha,{title:o.value,class:"VPSwitchAppearance","aria-checked":i(t),onClick:i(a)},{default:h(()=>[...l[0]||(l[0]=[d("span",{class:"vpi-sun sun"},null,-1),d("span",{class:"vpi-moon moon"},null,-1)])]),_:1},8,["title","aria-checked","onClick"]))}}),pe=g(ma,[["__scopeId","data-v-37f1304f"]]),pa={key:0,class:"VPNavBarAppearance"},ka=p({__name:"VPNavBarAppearance",setup(e){const{site:t}=L();return(n,a)=>i(t).appearance&&i(t).appearance!=="force-dark"&&i(t).appearance!=="force-auto"?(s(),u("div",pa,[k(pe)])):m("",!0)}}),_a=g(ka,[["__scopeId","data-v-f62f81f9"]]),ke=S();let Ie=!1,oe=0;function ba(e){const t=S(!1);if(ee){!Ie&&ga(),oe++;const n=F(ke,a=>{var o,r,l;a===e.el.value||(o=e.el.value)!=null&&o.contains(a)?(t.value=!0,(r=e.onFocus)==null||r.call(e)):(t.value=!1,(l=e.onBlur)==null||l.call(e))});ve(()=>{n(),oe--,oe||$a()})}return Oe(t)}function ga(){document.addEventListener("focusin",we),Ie=!0,ke.value=document.activeElement}function $a(){document.removeEventListener("focusin",we)}function we(){ke.value=document.activeElement}const ya={class:"VPMenuLink"},Pa=["innerHTML"],La=p({__name:"VPMenuLink",props:{item:{}},setup(e){const{page:t}=L();return(n,a)=>(s(),u("div",ya,[k(E,{class:N({active:i(z)(i(t).relativePath,e.item.activeMatch||e.item.link,!!e.item.activeMatch)}),href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon},{default:h(()=>[d("span",{innerHTML:e.item.text},null,8,Pa)]),_:1},8,["class","href","target","rel","no-icon"])]))}}),te=g(La,[["__scopeId","data-v-058d8208"]]),Va={class:"VPMenuGroup"},Sa={key:0,class:"title"},Ta=p({__name:"VPMenuGroup",props:{text:{},items:{}},setup(e){return(t,n)=>(s(),u("div",Va,[e.text?(s(),u("p",Sa,M(e.text),1)):m("",!0),(s(!0),u(x,null,A(e.items,a=>(s(),u(x,null,["link"in a?(s(),_(te,{key:0,item:a},null,8,["item"])):m("",!0)],64))),256))]))}}),Na=g(Ta,[["__scopeId","data-v-e7041b42"]]),Ma={class:"VPMenu"},xa={key:0,class:"items"},Ia=p({__name:"VPMenu",props:{items:{}},setup(e){return(t,n)=>(s(),u("div",Ma,[e.items?(s(),u("div",xa,[(s(!0),u(x,null,A(e.items,a=>(s(),u(x,{key:JSON.stringify(a)},["link"in a?(s(),_(te,{key:0,item:a},null,8,["item"])):"component"in a?(s(),_(B(a.component),G({key:1,ref_for:!0},a.props),null,16)):(s(),_(Na,{key:2,text:a.text,items:a.items},null,8,["text","items"]))],64))),128))])):m("",!0),c(t.$slots,"default",{},void 0,!0)]))}}),wa=g(Ia,[["__scopeId","data-v-3472f68e"]]),Aa=["aria-expanded","aria-label"],Ca={key:0,class:"text"},Ha=["innerHTML"],Ba={key:1,class:"vpi-more-horizontal icon"},Ea={class:"menu"},Fa=p({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(e){const t=S(!1),n=S();ba({el:n,onBlur:a});function a(){t.value=!1}return(o,r)=>(s(),u("div",{class:"VPFlyout",ref_key:"el",ref:n,onMouseenter:r[1]||(r[1]=l=>t.value=!0),onMouseleave:r[2]||(r[2]=l=>t.value=!1)},[d("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":t.value,"aria-label":e.label,onClick:r[0]||(r[0]=l=>t.value=!t.value)},[e.button||e.icon?(s(),u("span",Ca,[e.icon?(s(),u("span",{key:0,class:N([e.icon,"option-icon"])},null,2)):m("",!0),e.button?(s(),u("span",{key:1,innerHTML:e.button},null,8,Ha)):m("",!0),r[3]||(r[3]=d("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(s(),u("span",Ba))],8,Aa),d("div",Ea,[k(wa,{items:e.items},{default:h(()=>[c(o.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),_e=g(Fa,[["__scopeId","data-v-be779828"]]),Da=["href","aria-label","innerHTML"],Oa=p({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(e){const t=e,n=S();U(async()=>{var r;await Le();const o=(r=n.value)==null?void 0:r.children[0];o instanceof HTMLElement&&o.className.startsWith("vpi-social-")&&(getComputedStyle(o).maskImage||getComputedStyle(o).webkitMaskImage)==="none"&&o.style.setProperty("--icon",`url('https://api.iconify.design/simple-icons/${t.icon}.svg')`)});const a=y(()=>typeof t.icon=="object"?t.icon.svg:``);return(o,r)=>(s(),u("a",{ref_key:"el",ref:n,class:"VPSocialLink no-icon",href:e.link,"aria-label":e.ariaLabel??(typeof e.icon=="string"?e.icon:""),target:"_blank",rel:"noopener",innerHTML:a.value},null,8,Da))}}),Ga=g(Oa,[["__scopeId","data-v-57e28dd3"]]),Ua={class:"VPSocialLinks"},ja=p({__name:"VPSocialLinks",props:{links:{}},setup(e){return(t,n)=>(s(),u("div",Ua,[(s(!0),u(x,null,A(e.links,({link:a,icon:o,ariaLabel:r})=>(s(),_(Ga,{key:a,icon:o,link:a,ariaLabel:r},null,8,["icon","link","ariaLabel"]))),128))]))}}),be=g(ja,[["__scopeId","data-v-756072eb"]]),za={key:0,class:"group translations"},Wa={class:"trans-title"},Ka={key:1,class:"group"},qa={class:"item appearance"},Ra={class:"label"},Ja={class:"appearance-action"},Xa={key:2,class:"group"},Ya={class:"item social-links"},Qa=p({__name:"VPNavBarExtra",setup(e){const{site:t,theme:n}=L(),{localeLinks:a,currentLang:o}=q({correspondingLink:!0}),r=y(()=>a.value.length&&o.value.label||t.value.appearance||n.value.socialLinks);return(l,v)=>r.value?(s(),_(_e,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:h(()=>[i(a).length&&i(o).label?(s(),u("div",za,[d("p",Wa,M(i(o).label),1),(s(!0),u(x,null,A(i(a),f=>(s(),_(te,{key:f.link,item:f},null,8,["item"]))),128))])):m("",!0),i(t).appearance&&i(t).appearance!=="force-dark"&&i(t).appearance!=="force-auto"?(s(),u("div",Ka,[d("div",qa,[d("p",Ra,M(i(n).darkModeSwitchLabel||"Appearance"),1),d("div",Ja,[k(pe)])])])):m("",!0),i(n).socialLinks?(s(),u("div",Xa,[d("div",Ya,[k(be,{class:"social-links-list",links:i(n).socialLinks},null,8,["links"])])])):m("",!0)]),_:1})):m("",!0)}}),Za=g(Qa,[["__scopeId","data-v-d3d9fc8f"]]),eo=["aria-expanded"],to=p({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(e){return(t,n)=>(s(),u("button",{type:"button",class:N(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:n[0]||(n[0]=a=>t.$emit("click"))},[...n[1]||(n[1]=[d("span",{class:"container"},[d("span",{class:"top"}),d("span",{class:"middle"}),d("span",{class:"bottom"})],-1)])],10,eo))}}),no=g(to,[["__scopeId","data-v-2f352f04"]]),ao=["innerHTML"],oo=p({__name:"VPNavBarMenuLink",props:{item:{}},setup(e){const{page:t}=L();return(n,a)=>(s(),_(E,{class:N({VPNavBarMenuLink:!0,active:i(z)(i(t).relativePath,e.item.activeMatch||e.item.link,!!e.item.activeMatch)}),href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,tabindex:"0"},{default:h(()=>[d("span",{innerHTML:e.item.text},null,8,ao)]),_:1},8,["class","href","target","rel","no-icon"]))}}),so=g(oo,[["__scopeId","data-v-6a150605"]]),io=p({__name:"VPNavBarMenuGroup",props:{item:{}},setup(e){const t=e,{page:n}=L(),a=r=>"component"in r?!1:"link"in r?z(n.value.relativePath,r.link,!!t.item.activeMatch):r.items.some(a),o=y(()=>a(t.item));return(r,l)=>(s(),_(_e,{class:N({VPNavBarMenuGroup:!0,active:i(z)(i(n).relativePath,e.item.activeMatch,!!e.item.activeMatch)||o.value}),button:e.item.text,items:e.item.items},null,8,["class","button","items"]))}}),ro={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},lo=p({__name:"VPNavBarMenu",setup(e){const{theme:t}=L();return(n,a)=>i(t).nav?(s(),u("nav",ro,[a[0]||(a[0]=d("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(s(!0),u(x,null,A(i(t).nav,o=>(s(),u(x,{key:JSON.stringify(o)},["link"in o?(s(),_(so,{key:0,item:o},null,8,["item"])):"component"in o?(s(),_(B(o.component),G({key:1,ref_for:!0},o.props),null,16)):(s(),_(io,{key:2,item:o},null,8,["item"]))],64))),128))])):m("",!0)}}),co=g(lo,[["__scopeId","data-v-9175dda3"]]);function uo(e){const{localeIndex:t,theme:n}=L();function a(o){var I,w,C;const r=o.split("."),l=(I=n.value.search)==null?void 0:I.options,v=l&&typeof l=="object",f=v&&((C=(w=l.locales)==null?void 0:w[t.value])==null?void 0:C.translations)||null,$=v&&l.translations||null;let V=f,b=$,P=e;const T=r.pop();for(const H of r){let O=null;const K=P==null?void 0:P[H];K&&(O=P=K);const ne=b==null?void 0:b[H];ne&&(O=b=ne);const ae=V==null?void 0:V[H];ae&&(O=V=ae),K||(P=O),ne||(b=O),ae||(V=O)}return(V==null?void 0:V[T])??(b==null?void 0:b[T])??(P==null?void 0:P[T])??""}return a}const vo=["aria-label"],fo={class:"DocSearch-Button-Container"},ho={class:"DocSearch-Button-Placeholder"},ge=p({__name:"VPNavBarSearchButton",setup(e){const n=uo({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(a,o)=>(s(),u("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":i(n)("button.buttonAriaLabel")},[d("span",fo,[o[0]||(o[0]=d("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1)),d("span",ho,M(i(n)("button.buttonText")),1)]),o[1]||(o[1]=d("span",{class:"DocSearch-Button-Keys"},[d("kbd",{class:"DocSearch-Button-Key"}),d("kbd",{class:"DocSearch-Button-Key"},"K")],-1))],8,vo))}}),mo={class:"VPNavBarSearch"},po={id:"local-search"},ko={key:1,id:"docsearch"},_o=p({__name:"VPNavBarSearch",setup(e){const t=Ge(()=>Ue(()=>import("./VPLocalSearchBox.DWBTWqjx.js"),__vite__mapDeps([0,1]))),n=()=>null,{theme:a}=L(),o=S(!1),r=S(!1);U(()=>{});function l(){o.value||(o.value=!0,setTimeout(v,16))}function v(){const b=new Event("keydown");b.key="k",b.metaKey=!0,window.dispatchEvent(b),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||v()},16)}function f(b){const P=b.target,T=P.tagName;return P.isContentEditable||T==="INPUT"||T==="SELECT"||T==="TEXTAREA"}const $=S(!1);ie("k",b=>{(b.ctrlKey||b.metaKey)&&(b.preventDefault(),$.value=!0)}),ie("/",b=>{f(b)||(b.preventDefault(),$.value=!0)});const V="local";return(b,P)=>{var T;return s(),u("div",mo,[i(V)==="local"?(s(),u(x,{key:0},[$.value?(s(),_(i(t),{key:0,onClose:P[0]||(P[0]=I=>$.value=!1)})):m("",!0),d("div",po,[k(ge,{onClick:P[1]||(P[1]=I=>$.value=!0)})])],64)):i(V)==="algolia"?(s(),u(x,{key:1},[o.value?(s(),_(i(n),{key:0,algolia:((T=i(a).search)==null?void 0:T.options)??i(a).algolia,onVnodeBeforeMount:P[2]||(P[2]=I=>r.value=!0)},null,8,["algolia"])):m("",!0),r.value?m("",!0):(s(),u("div",ko,[k(ge,{onClick:l})]))],64)):m("",!0)])}}}),bo=p({__name:"VPNavBarSocialLinks",setup(e){const{theme:t}=L();return(n,a)=>i(t).socialLinks?(s(),_(be,{key:0,class:"VPNavBarSocialLinks",links:i(t).socialLinks},null,8,["links"])):m("",!0)}}),go=g(bo,[["__scopeId","data-v-7d10330c"]]),$o=["href","rel","target"],yo=["innerHTML"],Po={key:2},Lo=p({__name:"VPNavBarTitle",setup(e){const{site:t,theme:n}=L(),{hasSidebar:a}=D(),{currentLang:o}=q(),r=y(()=>{var f;return typeof n.value.logoLink=="string"?n.value.logoLink:(f=n.value.logoLink)==null?void 0:f.link}),l=y(()=>{var f;return typeof n.value.logoLink=="string"||(f=n.value.logoLink)==null?void 0:f.rel}),v=y(()=>{var f;return typeof n.value.logoLink=="string"||(f=n.value.logoLink)==null?void 0:f.target});return(f,$)=>(s(),u("div",{class:N(["VPNavBarTitle",{"has-sidebar":i(a)}])},[d("a",{class:"title",href:r.value??i(he)(i(o).link),rel:l.value,target:v.value},[c(f.$slots,"nav-bar-title-before",{},void 0,!0),i(n).logo?(s(),_(J,{key:0,class:"logo",image:i(n).logo},null,8,["image"])):m("",!0),i(n).siteTitle?(s(),u("span",{key:1,innerHTML:i(n).siteTitle},null,8,yo)):i(n).siteTitle===void 0?(s(),u("span",Po,M(i(t).title),1)):m("",!0),c(f.$slots,"nav-bar-title-after",{},void 0,!0)],8,$o)],2))}}),Vo=g(Lo,[["__scopeId","data-v-d3112b8f"]]),So={class:"items"},To={class:"title"},No=p({__name:"VPNavBarTranslations",setup(e){const{theme:t}=L(),{localeLinks:n,currentLang:a}=q({correspondingLink:!0});return(o,r)=>i(n).length&&i(a).label?(s(),_(_e,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:i(t).langMenuLabel||"Change language"},{default:h(()=>[d("div",So,[d("p",To,M(i(a).label),1),(s(!0),u(x,null,A(i(n),l=>(s(),_(te,{key:l.link,item:l},null,8,["item"]))),128))])]),_:1},8,["label"])):m("",!0)}}),Mo=g(No,[["__scopeId","data-v-06507d70"]]),xo={class:"wrapper"},Io={class:"container"},wo={class:"title"},Ao={class:"content"},Co={class:"content-body"},Ho=p({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(e){const t=e,{y:n}=Ve(),{hasSidebar:a}=D(),{frontmatter:o}=L(),r=S({});return fe(()=>{r.value={"has-sidebar":a.value,home:o.value.layout==="home",top:n.value===0,"screen-open":t.isScreenOpen}}),(l,v)=>(s(),u("div",{class:N(["VPNavBar",r.value])},[d("div",xo,[d("div",Io,[d("div",wo,[k(Vo,null,{"nav-bar-title-before":h(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":h(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),d("div",Ao,[d("div",Co,[c(l.$slots,"nav-bar-content-before",{},void 0,!0),k(_o,{class:"search"}),k(co,{class:"menu"}),k(Mo,{class:"translations"}),k(_a,{class:"appearance"}),k(go,{class:"social-links"}),k(Za,{class:"extra"}),c(l.$slots,"nav-bar-content-after",{},void 0,!0),k(no,{class:"hamburger",active:e.isScreenOpen,onClick:v[0]||(v[0]=f=>l.$emit("toggle-screen"))},null,8,["active"])])])])]),v[1]||(v[1]=d("div",{class:"divider"},[d("div",{class:"divider-line"})],-1))],2))}}),Bo=g(Ho,[["__scopeId","data-v-e42a4d1c"]]),Eo={key:0,class:"VPNavScreenAppearance"},Fo={class:"text"},Do=p({__name:"VPNavScreenAppearance",setup(e){const{site:t,theme:n}=L();return(a,o)=>i(t).appearance&&i(t).appearance!=="force-dark"&&i(t).appearance!=="force-auto"?(s(),u("div",Eo,[d("p",Fo,M(i(n).darkModeSwitchLabel||"Appearance"),1),k(pe)])):m("",!0)}}),Oo=g(Do,[["__scopeId","data-v-b4a65e82"]]),Go=["innerHTML"],Uo=p({__name:"VPNavScreenMenuLink",props:{item:{}},setup(e){const t=Z("close-screen");return(n,a)=>(s(),_(E,{class:"VPNavScreenMenuLink",href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,onClick:i(t)},{default:h(()=>[d("span",{innerHTML:e.item.text},null,8,Go)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),jo=g(Uo,[["__scopeId","data-v-e3bc982a"]]),zo=["innerHTML"],Wo=p({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(e){const t=Z("close-screen");return(n,a)=>(s(),_(E,{class:"VPNavScreenMenuGroupLink",href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,onClick:i(t)},{default:h(()=>[d("span",{innerHTML:e.item.text},null,8,zo)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),Ae=g(Wo,[["__scopeId","data-v-0138002c"]]),Ko={class:"VPNavScreenMenuGroupSection"},qo={key:0,class:"title"},Ro=p({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(e){return(t,n)=>(s(),u("div",Ko,[e.text?(s(),u("p",qo,M(e.text),1)):m("",!0),(s(!0),u(x,null,A(e.items,a=>(s(),_(Ae,{key:a.text,item:a},null,8,["item"]))),128))]))}}),Jo=g(Ro,[["__scopeId","data-v-7042a42f"]]),Xo=["aria-controls","aria-expanded"],Yo=["innerHTML"],Qo=["id"],Zo={key:0,class:"item"},es={key:1,class:"item"},ts={key:2,class:"group"},ns=p({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(e){const t=e,n=S(!1),a=y(()=>`NavScreenGroup-${t.text.replace(" ","-").toLowerCase()}`);function o(){n.value=!n.value}return(r,l)=>(s(),u("div",{class:N(["VPNavScreenMenuGroup",{open:n.value}])},[d("button",{class:"button","aria-controls":a.value,"aria-expanded":n.value,onClick:o},[d("span",{class:"button-text",innerHTML:e.text},null,8,Yo),l[0]||(l[0]=d("span",{class:"vpi-plus button-icon"},null,-1))],8,Xo),d("div",{id:a.value,class:"items"},[(s(!0),u(x,null,A(e.items,v=>(s(),u(x,{key:JSON.stringify(v)},["link"in v?(s(),u("div",Zo,[k(Ae,{item:v},null,8,["item"])])):"component"in v?(s(),u("div",es,[(s(),_(B(v.component),G({ref_for:!0},v.props,{"screen-menu":""}),null,16))])):(s(),u("div",ts,[k(Jo,{text:v.text,items:v.items},null,8,["text","items"])]))],64))),128))],8,Qo)],2))}}),as=g(ns,[["__scopeId","data-v-45c59f43"]]),os={key:0,class:"VPNavScreenMenu"},ss=p({__name:"VPNavScreenMenu",setup(e){const{theme:t}=L();return(n,a)=>i(t).nav?(s(),u("nav",os,[(s(!0),u(x,null,A(i(t).nav,o=>(s(),u(x,{key:JSON.stringify(o)},["link"in o?(s(),_(jo,{key:0,item:o},null,8,["item"])):"component"in o?(s(),_(B(o.component),G({key:1,ref_for:!0},o.props,{"screen-menu":""}),null,16)):(s(),_(as,{key:2,text:o.text||"",items:o.items},null,8,["text","items"]))],64))),128))])):m("",!0)}}),is=p({__name:"VPNavScreenSocialLinks",setup(e){const{theme:t}=L();return(n,a)=>i(t).socialLinks?(s(),_(be,{key:0,class:"VPNavScreenSocialLinks",links:i(t).socialLinks},null,8,["links"])):m("",!0)}}),rs={class:"list"},ls=p({__name:"VPNavScreenTranslations",setup(e){const{localeLinks:t,currentLang:n}=q({correspondingLink:!0}),a=S(!1);function o(){a.value=!a.value}return(r,l)=>i(t).length&&i(n).label?(s(),u("div",{key:0,class:N(["VPNavScreenTranslations",{open:a.value}])},[d("button",{class:"title",onClick:o},[l[0]||(l[0]=d("span",{class:"vpi-languages icon lang"},null,-1)),j(" "+M(i(n).label)+" ",1),l[1]||(l[1]=d("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),d("ul",rs,[(s(!0),u(x,null,A(i(t),v=>(s(),u("li",{key:v.link,class:"item"},[k(E,{class:"link",href:v.link},{default:h(()=>[j(M(v.text),1)]),_:2},1032,["href"])]))),128))])],2)):m("",!0)}}),cs=g(ls,[["__scopeId","data-v-8eef12ad"]]),us={class:"container"},ds=p({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(e){const t=S(null),n=Se(ee?document.body:null);return(a,o)=>(s(),_(ue,{name:"fade",onEnter:o[0]||(o[0]=r=>n.value=!0),onAfterLeave:o[1]||(o[1]=r=>n.value=!1)},{default:h(()=>[e.open?(s(),u("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:t,id:"VPNavScreen"},[d("div",us,[c(a.$slots,"nav-screen-content-before",{},void 0,!0),k(ss,{class:"menu"}),k(cs,{class:"translations"}),k(Oo,{class:"appearance"}),k(is,{class:"social-links"}),c(a.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):m("",!0)]),_:3}))}}),vs=g(ds,[["__scopeId","data-v-1bbfffc9"]]),fs={key:0,class:"VPNav"},hs=p({__name:"VPNav",setup(e){const{isScreenOpen:t,closeScreen:n,toggleScreen:a}=la(),{frontmatter:o}=L(),r=y(()=>o.value.navbar!==!1);return Te("close-screen",n),X(()=>{ee&&document.documentElement.classList.toggle("hide-nav",!r.value)}),(l,v)=>r.value?(s(),u("header",fs,[k(Bo,{"is-screen-open":i(t),onToggleScreen:i(a)},{"nav-bar-title-before":h(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":h(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":h(()=>[c(l.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":h(()=>[c(l.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),k(vs,{open:i(t)},{"nav-screen-content-before":h(()=>[c(l.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":h(()=>[c(l.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):m("",!0)}}),ms=g(hs,[["__scopeId","data-v-8f6a06d2"]]),ps=["role","tabindex"],ks={key:1,class:"items"},_s=p({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(e){const t=e,{collapsed:n,collapsible:a,isLink:o,isActiveLink:r,hasActiveLink:l,hasChildren:v,toggle:f}=dt(y(()=>t.item)),$=y(()=>v.value?"section":"div"),V=y(()=>o.value?"a":"div"),b=y(()=>v.value?t.depth+2===7?"p":`h${t.depth+2}`:"p"),P=y(()=>o.value?void 0:"button"),T=y(()=>[[`level-${t.depth}`],{collapsible:a.value},{collapsed:n.value},{"is-link":o.value},{"is-active":r.value},{"has-active":l.value}]);function I(C){"key"in C&&C.key!=="Enter"||!t.item.link&&f()}function w(){t.item.link&&f()}return(C,H)=>{const O=W("VPSidebarItem",!0);return s(),_(B($.value),{class:N(["VPSidebarItem",T.value])},{default:h(()=>[e.item.text?(s(),u("div",G({key:0,class:"item",role:P.value},je(e.item.items?{click:I,keydown:I}:{},!0),{tabindex:e.item.items&&0}),[H[1]||(H[1]=d("div",{class:"indicator"},null,-1)),e.item.link?(s(),_(E,{key:0,tag:V.value,class:"link",href:e.item.link,rel:e.item.rel,target:e.item.target},{default:h(()=>[(s(),_(B(b.value),{class:"text",innerHTML:e.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(s(),_(B(b.value),{key:1,class:"text",innerHTML:e.item.text},null,8,["innerHTML"])),e.item.collapsed!=null&&e.item.items&&e.item.items.length?(s(),u("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:w,onKeydown:ze(w,["enter"]),tabindex:"0"},[...H[0]||(H[0]=[d("span",{class:"vpi-chevron-right caret-icon"},null,-1)])],32)):m("",!0)],16,ps)):m("",!0),e.item.items&&e.item.items.length?(s(),u("div",ks,[e.depth<5?(s(!0),u(x,{key:0},A(e.item.items,K=>(s(),_(O,{key:K.text,item:K,depth:e.depth+1},null,8,["item","depth"]))),128)):m("",!0)])):m("",!0)]),_:1},8,["class"])}}}),bs=g(_s,[["__scopeId","data-v-9a07bd0b"]]),gs=p({__name:"VPSidebarGroup",props:{items:{}},setup(e){const t=S(!0);let n=null;return U(()=>{n=setTimeout(()=>{n=null,t.value=!1},300)}),We(()=>{n!=null&&(clearTimeout(n),n=null)}),(a,o)=>(s(!0),u(x,null,A(e.items,r=>(s(),u("div",{key:r.text,class:N(["group",{"no-transition":t.value}])},[k(bs,{item:r,depth:0},null,8,["item"])],2))),128))}}),$s=g(gs,[["__scopeId","data-v-c16c12a8"]]),ys={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},Ps=p({__name:"VPSidebar",props:{open:{type:Boolean}},setup(e){const{sidebarGroups:t,hasSidebar:n}=D(),a=e,o=S(null),r=Se(ee?document.body:null);F([a,o],()=>{var v;a.open?(r.value=!0,(v=o.value)==null||v.focus()):r.value=!1},{immediate:!0,flush:"post"});const l=S(0);return F(t,()=>{l.value+=1},{deep:!0}),(v,f)=>i(n)?(s(),u("aside",{key:0,class:N(["VPSidebar",{open:e.open}]),ref_key:"navEl",ref:o,onClick:f[0]||(f[0]=Ke(()=>{},["stop"]))},[f[2]||(f[2]=d("div",{class:"curtain"},null,-1)),d("nav",ys,[f[1]||(f[1]=d("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),c(v.$slots,"sidebar-nav-before",{},void 0,!0),(s(),_($s,{items:i(t),key:l.value},null,8,["items"])),c(v.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):m("",!0)}}),Ls=g(Ps,[["__scopeId","data-v-297c64fb"]]),Vs=p({__name:"VPSkipLink",setup(e){const{theme:t}=L(),n=Q(),a=S();F(()=>n.path,()=>a.value.focus());function o({target:r}){const l=document.getElementById(decodeURIComponent(r.hash).slice(1));if(l){const v=()=>{l.removeAttribute("tabindex"),l.removeEventListener("blur",v)};l.setAttribute("tabindex","-1"),l.addEventListener("blur",v),l.focus(),window.scrollTo(0,0)}}return(r,l)=>(s(),u(x,null,[d("span",{ref_key:"backToTop",ref:a,tabindex:"-1"},null,512),d("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:o},M(i(t).skipToContentLabel||"Skip to content"),1)],64))}}),Ss=g(Vs,[["__scopeId","data-v-a25f5db6"]]),Ts=p({__name:"Layout",setup(e){const{isOpen:t,open:n,close:a}=D(),o=Q();F(()=>o.path,a),ut(t,a);const{frontmatter:r}=L(),l=qe(),v=y(()=>!!l["home-hero-image"]);return Te("hero-image-slot-exists",v),(f,$)=>{const V=W("Content");return i(r).layout!==!1?(s(),u("div",{key:0,class:N(["Layout",i(r).pageClass])},[c(f.$slots,"layout-top",{},void 0,!0),k(Ss),k(Ye,{class:"backdrop",show:i(t),onClick:i(a)},null,8,["show","onClick"]),k(ms,null,{"nav-bar-title-before":h(()=>[c(f.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":h(()=>[c(f.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":h(()=>[c(f.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":h(()=>[c(f.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":h(()=>[c(f.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":h(()=>[c(f.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),k(ra,{open:i(t),onOpenMenu:i(n)},null,8,["open","onOpenMenu"]),k(Ls,{open:i(t)},{"sidebar-nav-before":h(()=>[c(f.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":h(()=>[c(f.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),k(Wn,null,{"page-top":h(()=>[c(f.$slots,"page-top",{},void 0,!0)]),"page-bottom":h(()=>[c(f.$slots,"page-bottom",{},void 0,!0)]),"not-found":h(()=>[c(f.$slots,"not-found",{},void 0,!0)]),"home-hero-before":h(()=>[c(f.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":h(()=>[c(f.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":h(()=>[c(f.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":h(()=>[c(f.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":h(()=>[c(f.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":h(()=>[c(f.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":h(()=>[c(f.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":h(()=>[c(f.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":h(()=>[c(f.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":h(()=>[c(f.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":h(()=>[c(f.$slots,"doc-before",{},void 0,!0)]),"doc-after":h(()=>[c(f.$slots,"doc-after",{},void 0,!0)]),"doc-top":h(()=>[c(f.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":h(()=>[c(f.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":h(()=>[c(f.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":h(()=>[c(f.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":h(()=>[c(f.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":h(()=>[c(f.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":h(()=>[c(f.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":h(()=>[c(f.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),k(Xn),c(f.$slots,"layout-bottom",{},void 0,!0)],2)):(s(),_(V,{key:1}))}}}),Ns=g(Ts,[["__scopeId","data-v-fed1f3d6"]]),xs={Layout:Ns,enhanceApp:({app:e})=>{e.component("Badge",Re)}};export{uo as c,xs as t,L as u}; +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPLocalSearchBox.DE8nKMEK.js","assets/chunks/framework.BZohXCq9.js"])))=>i.map(i=>d[i]); +import{d as p,c as u,r as c,n as N,o as s,a as j,t as M,b as _,w as h,T as ue,e as m,_ as g,u as Ce,i as He,f as Be,g as de,h as y,j as d,k as i,l as z,m as se,p as S,q as F,s as X,v as U,x as ve,y as fe,z as Ee,A as Fe,F as x,B as A,C as W,D as Y,E as k,G as $e,H as B,I as ye,J as Q,K as G,L as Z,M as De,N as Pe,O as ie,P as Le,Q as Ve,R as ee,S as Oe,U as Ge,V as Ue,W as Se,X as Te,Y as je,Z as ze,$ as We,a0 as Ke,a1 as qe}from"./framework.BZohXCq9.js";const Re=p({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(e){return(t,n)=>(s(),u("span",{class:N(["VPBadge",e.type])},[c(t.$slots,"default",{},()=>[j(M(e.text),1)])],2))}}),Je={key:0,class:"VPBackdrop"},Xe=p({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(e){return(t,n)=>(s(),_(ue,{name:"fade"},{default:h(()=>[e.show?(s(),u("div",Je)):m("",!0)]),_:1}))}}),Ye=g(Xe,[["__scopeId","data-v-b2fc99d2"]]),L=Ce;function Qe(e,t){let n,a=!1;return()=>{n&&clearTimeout(n),a?n=setTimeout(e,t):(e(),(a=!0)&&setTimeout(()=>a=!1,t))}}function re(e){return e.startsWith("/")?e:`/${e}`}function he(e){const{pathname:t,search:n,hash:a,protocol:o}=new URL(e,"http://a.com");if(He(e)||e.startsWith("#")||!o.startsWith("http")||!Be(t))return e;const{site:r}=L(),l=t.endsWith("/")||t.endsWith(".html")?e:e.replace(/(?:(^\.+)\/)?.*$/,`$1${t.replace(/(\.md)?$/,r.value.cleanUrls?"":".html")}${n}${a}`);return de(l)}function q({correspondingLink:e=!1}={}){const{site:t,localeIndex:n,page:a,theme:o,hash:r}=L(),l=y(()=>{var f,$;return{label:(f=t.value.locales[n.value])==null?void 0:f.label,link:(($=t.value.locales[n.value])==null?void 0:$.link)||(n.value==="root"?"/":`/${n.value}/`)}});return{localeLinks:y(()=>Object.entries(t.value.locales).flatMap(([f,$])=>l.value.label===$.label?[]:{text:$.label,link:Ze($.link||(f==="root"?"/":`/${f}/`),o.value.i18nRouting!==!1&&e,a.value.relativePath.slice(l.value.link.length-1),!t.value.cleanUrls)+r.value})),currentLang:l}}function Ze(e,t,n,a){return t?e.replace(/\/$/,"")+re(n.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,a?".html":"")):e}const et={class:"NotFound"},tt={class:"code"},nt={class:"title"},at={class:"quote"},ot={class:"action"},st=["href","aria-label"],it=p({__name:"NotFound",setup(e){const{theme:t}=L(),{currentLang:n}=q();return(a,o)=>{var r,l,v,f,$;return s(),u("div",et,[d("p",tt,M(((r=i(t).notFound)==null?void 0:r.code)??"404"),1),d("h1",nt,M(((l=i(t).notFound)==null?void 0:l.title)??"PAGE NOT FOUND"),1),o[0]||(o[0]=d("div",{class:"divider"},null,-1)),d("blockquote",at,M(((v=i(t).notFound)==null?void 0:v.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),d("div",ot,[d("a",{class:"link",href:i(de)(i(n).link),"aria-label":((f=i(t).notFound)==null?void 0:f.linkLabel)??"go to home"},M((($=i(t).notFound)==null?void 0:$.linkText)??"Take me home"),9,st)])])}}}),rt=g(it,[["__scopeId","data-v-dc48cef8"]]);function Ne(e,t){if(Array.isArray(e))return R(e);if(e==null)return[];t=re(t);const n=Object.keys(e).sort((o,r)=>r.split("/").length-o.split("/").length).find(o=>t.startsWith(re(o))),a=n?e[n]:[];return Array.isArray(a)?R(a):R(a.items,a.base)}function lt(e){const t=[];let n=0;for(const a in e){const o=e[a];if(o.items){n=t.push(o);continue}t[n]||t.push({items:[]}),t[n].items.push(o)}return t}function ct(e){const t=[];function n(a){for(const o of a)o.text&&o.link&&t.push({text:o.text,link:o.link,docFooterText:o.docFooterText}),o.items&&n(o.items)}return n(e),t}function le(e,t){return Array.isArray(t)?t.some(n=>le(e,n)):z(e,t.link)?!0:t.items?le(e,t.items):!1}function R(e,t){return[...e].map(n=>{const a={...n},o=a.base||t;return o&&a.link&&(a.link=o+a.link),a.items&&(a.items=R(a.items,o)),a})}function D(){const{frontmatter:e,page:t,theme:n}=L(),a=se("(min-width: 960px)"),o=S(!1),r=y(()=>{const w=n.value.sidebar,C=t.value.relativePath;return w?Ne(w,C):[]}),l=S(r.value);F(r,(w,C)=>{JSON.stringify(w)!==JSON.stringify(C)&&(l.value=r.value)});const v=y(()=>e.value.sidebar!==!1&&l.value.length>0&&e.value.layout!=="home"),f=y(()=>$?e.value.aside==null?n.value.aside==="left":e.value.aside==="left":!1),$=y(()=>e.value.layout==="home"?!1:e.value.aside!=null?!!e.value.aside:n.value.aside!==!1),V=y(()=>v.value&&a.value),b=y(()=>v.value?lt(l.value):[]);function P(){o.value=!0}function T(){o.value=!1}function I(){o.value?T():P()}return{isOpen:o,sidebar:l,sidebarGroups:b,hasSidebar:v,hasAside:$,leftAside:f,isSidebarEnabled:V,open:P,close:T,toggle:I}}function ut(e,t){let n;X(()=>{n=e.value?document.activeElement:void 0}),U(()=>{window.addEventListener("keyup",a)}),ve(()=>{window.removeEventListener("keyup",a)});function a(o){o.key==="Escape"&&e.value&&(t(),n==null||n.focus())}}function dt(e){const{page:t,hash:n}=L(),a=S(!1),o=y(()=>e.value.collapsed!=null),r=y(()=>!!e.value.link),l=S(!1),v=()=>{l.value=z(t.value.relativePath,e.value.link)};F([t,e,n],v),U(v);const f=y(()=>l.value?!0:e.value.items?le(t.value.relativePath,e.value.items):!1),$=y(()=>!!(e.value.items&&e.value.items.length));X(()=>{a.value=!!(o.value&&e.value.collapsed)}),fe(()=>{(l.value||f.value)&&(a.value=!1)});function V(){o.value&&(a.value=!a.value)}return{collapsed:a,collapsible:o,isLink:r,isActiveLink:l,hasActiveLink:f,hasChildren:$,toggle:V}}function vt(){const{hasSidebar:e}=D(),t=se("(min-width: 960px)"),n=se("(min-width: 1280px)");return{isAsideEnabled:y(()=>!n.value&&!t.value?!1:e.value?n.value:t.value)}}const ft=/\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/,ce=[];function Me(e){return typeof e.outline=="object"&&!Array.isArray(e.outline)&&e.outline.label||e.outlineTitle||"On this page"}function me(e){const t=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(n=>n.id&&n.hasChildNodes()).map(n=>{const a=Number(n.tagName[1]);return{element:n,title:ht(n),link:"#"+n.id,level:a}});return mt(t,e)}function ht(e){let t="";for(const n of e.childNodes)if(n.nodeType===1){if(ft.test(n.className))continue;t+=n.textContent}else n.nodeType===3&&(t+=n.textContent);return t.trim()}function mt(e,t){if(t===!1)return[];const n=(typeof t=="object"&&!Array.isArray(t)?t.level:t)||2,[a,o]=typeof n=="number"?[n,n]:n==="deep"?[2,6]:n;return _t(e,a,o)}function pt(e,t){const{isAsideEnabled:n}=vt(),a=Qe(r,100);let o=null;U(()=>{requestAnimationFrame(r),window.addEventListener("scroll",a)}),Ee(()=>{l(location.hash)}),ve(()=>{window.removeEventListener("scroll",a)});function r(){if(!n.value)return;const v=window.scrollY,f=window.innerHeight,$=document.body.offsetHeight,V=Math.abs(v+f-$)<1,b=ce.map(({element:T,link:I})=>({link:I,top:kt(T)})).filter(({top:T})=>!Number.isNaN(T)).sort((T,I)=>T.top-I.top);if(!b.length){l(null);return}if(v<1){l(null);return}if(V){l(b[b.length-1].link);return}let P=null;for(const{link:T,top:I}of b){if(I>v+Fe()+4)break;P=T}l(P)}function l(v){o&&o.classList.remove("active"),v==null?o=null:o=e.value.querySelector(`a[href="${decodeURIComponent(v)}"]`);const f=o;f?(f.classList.add("active"),t.value.style.top=f.offsetTop+39+"px",t.value.style.opacity="1"):(t.value.style.top="33px",t.value.style.opacity="0")}}function kt(e){let t=0;for(;e!==document.body;){if(e===null)return NaN;t+=e.offsetTop,e=e.offsetParent}return t}function _t(e,t,n){ce.length=0;const a=[],o=[];return e.forEach(r=>{const l={...r,children:[]};let v=o[o.length-1];for(;v&&v.level>=l.level;)o.pop(),v=o[o.length-1];if(l.element.classList.contains("ignore-header")||v&&"shouldIgnore"in v){o.push({level:l.level,shouldIgnore:!0});return}l.level>n||l.level{const o=W("VPDocOutlineItem",!0);return s(),u("ul",{class:N(["VPDocOutlineItem",e.root?"root":"nested"])},[(s(!0),u(x,null,A(e.headers,({children:r,link:l,title:v})=>(s(),u("li",null,[d("a",{class:"outline-link",href:l,onClick:t,title:v},M(v),9,bt),r!=null&&r.length?(s(),_(o,{key:0,headers:r},null,8,["headers"])):m("",!0)]))),256))],2)}}}),xe=g(gt,[["__scopeId","data-v-554af1ab"]]),$t={class:"content"},yt={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},Pt=p({__name:"VPDocAsideOutline",setup(e){const{frontmatter:t,theme:n}=L(),a=$e([]);Y(()=>{a.value=me(t.value.outline??n.value.outline)});const o=S(),r=S();return pt(o,r),(l,v)=>(s(),u("nav",{"aria-labelledby":"doc-outline-aria-label",class:N(["VPDocAsideOutline",{"has-outline":a.value.length>0}]),ref_key:"container",ref:o},[d("div",$t,[d("div",{class:"outline-marker",ref_key:"marker",ref:r},null,512),d("div",yt,M(i(Me)(i(n))),1),k(xe,{headers:a.value,root:!0},null,8,["headers"])])],2))}}),Lt=g(Pt,[["__scopeId","data-v-3d6074c1"]]),Vt={class:"VPDocAsideCarbonAds"},St=p({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(e){const t=()=>null;return(n,a)=>(s(),u("div",Vt,[k(i(t),{"carbon-ads":e.carbonAds},null,8,["carbon-ads"])]))}}),Tt={class:"VPDocAside"},Nt=p({__name:"VPDocAside",setup(e){const{theme:t}=L();return(n,a)=>(s(),u("div",Tt,[c(n.$slots,"aside-top",{},void 0,!0),c(n.$slots,"aside-outline-before",{},void 0,!0),k(Lt),c(n.$slots,"aside-outline-after",{},void 0,!0),a[0]||(a[0]=d("div",{class:"spacer"},null,-1)),c(n.$slots,"aside-ads-before",{},void 0,!0),i(t).carbonAds?(s(),_(St,{key:0,"carbon-ads":i(t).carbonAds},null,8,["carbon-ads"])):m("",!0),c(n.$slots,"aside-ads-after",{},void 0,!0),c(n.$slots,"aside-bottom",{},void 0,!0)]))}}),Mt=g(Nt,[["__scopeId","data-v-f5225fdd"]]);function xt(){const{theme:e,page:t}=L();return y(()=>{const{text:n="Edit this page",pattern:a=""}=e.value.editLink||{};let o;return typeof a=="function"?o=a(t.value):o=a.replace(/:path/g,t.value.filePath),{url:o,text:n}})}function It(){const{page:e,theme:t,frontmatter:n}=L();return y(()=>{var $,V,b,P,T,I,w,C;const a=Ne(t.value.sidebar,e.value.relativePath),o=ct(a),r=wt(o,H=>H.link.replace(/[?#].*$/,"")),l=r.findIndex(H=>z(e.value.relativePath,H.link)),v=(($=t.value.docFooter)==null?void 0:$.prev)===!1&&!n.value.prev||n.value.prev===!1,f=((V=t.value.docFooter)==null?void 0:V.next)===!1&&!n.value.next||n.value.next===!1;return{prev:v?void 0:{text:(typeof n.value.prev=="string"?n.value.prev:typeof n.value.prev=="object"?n.value.prev.text:void 0)??((b=r[l-1])==null?void 0:b.docFooterText)??((P=r[l-1])==null?void 0:P.text),link:(typeof n.value.prev=="object"?n.value.prev.link:void 0)??((T=r[l-1])==null?void 0:T.link)},next:f?void 0:{text:(typeof n.value.next=="string"?n.value.next:typeof n.value.next=="object"?n.value.next.text:void 0)??((I=r[l+1])==null?void 0:I.docFooterText)??((w=r[l+1])==null?void 0:w.text),link:(typeof n.value.next=="object"?n.value.next.link:void 0)??((C=r[l+1])==null?void 0:C.link)}}})}function wt(e,t){const n=new Set;return e.filter(a=>{const o=t(a);return n.has(o)?!1:n.add(o)})}const E=p({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(e){const t=e,n=y(()=>t.tag??(t.href?"a":"span")),a=y(()=>t.href&&ye.test(t.href)||t.target==="_blank");return(o,r)=>(s(),_(B(n.value),{class:N(["VPLink",{link:e.href,"vp-external-link-icon":a.value,"no-icon":e.noIcon}]),href:e.href?i(he)(e.href):void 0,target:e.target??(a.value?"_blank":void 0),rel:e.rel??(a.value?"noreferrer":void 0)},{default:h(()=>[c(o.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),At={class:"VPLastUpdated"},Ct=["datetime"],Ht=p({__name:"VPDocFooterLastUpdated",setup(e){const{theme:t,page:n,lang:a}=L(),o=y(()=>new Date(n.value.lastUpdated)),r=y(()=>o.value.toISOString()),l=S("");return U(()=>{X(()=>{var v,f,$;l.value=new Intl.DateTimeFormat((f=(v=t.value.lastUpdated)==null?void 0:v.formatOptions)!=null&&f.forceLocale?a.value:void 0,(($=t.value.lastUpdated)==null?void 0:$.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(o.value)})}),(v,f)=>{var $;return s(),u("p",At,[j(M((($=i(t).lastUpdated)==null?void 0:$.text)||i(t).lastUpdatedText||"Last updated")+": ",1),d("time",{datetime:r.value},M(l.value),9,Ct)])}}}),Bt=g(Ht,[["__scopeId","data-v-76b89e12"]]),Et={key:0,class:"VPDocFooter"},Ft={key:0,class:"edit-info"},Dt={key:0,class:"edit-link"},Ot={key:1,class:"last-updated"},Gt={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},Ut={class:"pager"},jt=["innerHTML"],zt=["innerHTML"],Wt={class:"pager"},Kt=["innerHTML"],qt=["innerHTML"],Rt=p({__name:"VPDocFooter",setup(e){const{theme:t,page:n,frontmatter:a}=L(),o=xt(),r=It(),l=y(()=>t.value.editLink&&a.value.editLink!==!1),v=y(()=>n.value.lastUpdated),f=y(()=>l.value||v.value||r.value.prev||r.value.next);return($,V)=>{var b,P,T,I;return f.value?(s(),u("footer",Et,[c($.$slots,"doc-footer-before",{},void 0,!0),l.value||v.value?(s(),u("div",Ft,[l.value?(s(),u("div",Dt,[k(E,{class:"edit-link-button",href:i(o).url,"no-icon":!0},{default:h(()=>[V[0]||(V[0]=d("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),j(" "+M(i(o).text),1)]),_:1},8,["href"])])):m("",!0),v.value?(s(),u("div",Ot,[k(Bt)])):m("",!0)])):m("",!0),(b=i(r).prev)!=null&&b.link||(P=i(r).next)!=null&&P.link?(s(),u("nav",Gt,[V[1]||(V[1]=d("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),d("div",Ut,[(T=i(r).prev)!=null&&T.link?(s(),_(E,{key:0,class:"pager-link prev",href:i(r).prev.link},{default:h(()=>{var w;return[d("span",{class:"desc",innerHTML:((w=i(t).docFooter)==null?void 0:w.prev)||"Previous page"},null,8,jt),d("span",{class:"title",innerHTML:i(r).prev.text},null,8,zt)]}),_:1},8,["href"])):m("",!0)]),d("div",Wt,[(I=i(r).next)!=null&&I.link?(s(),_(E,{key:0,class:"pager-link next",href:i(r).next.link},{default:h(()=>{var w;return[d("span",{class:"desc",innerHTML:((w=i(t).docFooter)==null?void 0:w.next)||"Next page"},null,8,Kt),d("span",{class:"title",innerHTML:i(r).next.text},null,8,qt)]}),_:1},8,["href"])):m("",!0)])])):m("",!0)])):m("",!0)}}}),Jt=g(Rt,[["__scopeId","data-v-57f47480"]]),Xt={class:"container"},Yt={class:"aside-container"},Qt={class:"aside-content"},Zt={class:"content"},en={class:"content-container"},tn={class:"main"},nn=p({__name:"VPDoc",setup(e){const{theme:t}=L(),n=Q(),{hasSidebar:a,hasAside:o,leftAside:r}=D(),l=y(()=>n.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(v,f)=>{const $=W("Content");return s(),u("div",{class:N(["VPDoc",{"has-sidebar":i(a),"has-aside":i(o)}])},[c(v.$slots,"doc-top",{},void 0,!0),d("div",Xt,[i(o)?(s(),u("div",{key:0,class:N(["aside",{"left-aside":i(r)}])},[f[0]||(f[0]=d("div",{class:"aside-curtain"},null,-1)),d("div",Yt,[d("div",Qt,[k(Mt,null,{"aside-top":h(()=>[c(v.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":h(()=>[c(v.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":h(()=>[c(v.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":h(()=>[c(v.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":h(()=>[c(v.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":h(()=>[c(v.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):m("",!0),d("div",Zt,[d("div",en,[c(v.$slots,"doc-before",{},void 0,!0),d("main",tn,[k($,{class:N(["vp-doc",[l.value,i(t).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),k(Jt,null,{"doc-footer-before":h(()=>[c(v.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),c(v.$slots,"doc-after",{},void 0,!0)])])]),c(v.$slots,"doc-bottom",{},void 0,!0)],2)}}}),an=g(nn,[["__scopeId","data-v-b4547c88"]]),on=p({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(e){const t=e,n=y(()=>t.href&&ye.test(t.href)),a=y(()=>t.tag||(t.href?"a":"button"));return(o,r)=>(s(),_(B(a.value),{class:N(["VPButton",[e.size,e.theme]]),href:e.href?i(he)(e.href):void 0,target:t.target??(n.value?"_blank":void 0),rel:t.rel??(n.value?"noreferrer":void 0)},{default:h(()=>[j(M(e.text),1)]),_:1},8,["class","href","target","rel"]))}}),sn=g(on,[["__scopeId","data-v-9a3de217"]]),rn=["src","alt"],ln=p({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(e){return(t,n)=>{const a=W("VPImage",!0);return e.image?(s(),u(x,{key:0},[typeof e.image=="string"||"src"in e.image?(s(),u("img",G({key:0,class:"VPImage"},typeof e.image=="string"?t.$attrs:{...e.image,...t.$attrs},{src:i(de)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,rn)):(s(),u(x,{key:1},[k(a,G({class:"dark",image:e.image.dark,alt:e.image.alt},t.$attrs),null,16,["image","alt"]),k(a,G({class:"light",image:e.image.light,alt:e.image.alt},t.$attrs),null,16,["image","alt"])],64))],64)):m("",!0)}}}),J=g(ln,[["__scopeId","data-v-4ea68547"]]),cn={class:"container"},un={class:"main"},dn={class:"heading"},vn=["innerHTML"],fn=["innerHTML"],hn=["innerHTML"],mn={key:0,class:"actions"},pn={key:0,class:"image"},kn={class:"image-container"},_n=p({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(e){const t=Z("hero-image-slot-exists");return(n,a)=>(s(),u("div",{class:N(["VPHero",{"has-image":e.image||i(t)}])},[d("div",cn,[d("div",un,[c(n.$slots,"home-hero-info-before",{},void 0,!0),c(n.$slots,"home-hero-info",{},()=>[d("h1",dn,[e.name?(s(),u("span",{key:0,innerHTML:e.name,class:"name clip"},null,8,vn)):m("",!0),e.text?(s(),u("span",{key:1,innerHTML:e.text,class:"text"},null,8,fn)):m("",!0)]),e.tagline?(s(),u("p",{key:0,innerHTML:e.tagline,class:"tagline"},null,8,hn)):m("",!0)],!0),c(n.$slots,"home-hero-info-after",{},void 0,!0),e.actions?(s(),u("div",mn,[(s(!0),u(x,null,A(e.actions,o=>(s(),u("div",{key:o.link,class:"action"},[k(sn,{tag:"a",size:"medium",theme:o.theme,text:o.text,href:o.link,target:o.target,rel:o.rel},null,8,["theme","text","href","target","rel"])]))),128))])):m("",!0),c(n.$slots,"home-hero-actions-after",{},void 0,!0)]),e.image||i(t)?(s(),u("div",pn,[d("div",kn,[a[0]||(a[0]=d("div",{class:"image-bg"},null,-1)),c(n.$slots,"home-hero-image",{},()=>[e.image?(s(),_(J,{key:0,class:"image-src",image:e.image},null,8,["image"])):m("",!0)],!0)])])):m("",!0)])],2))}}),bn=g(_n,[["__scopeId","data-v-7697383f"]]),gn=p({__name:"VPHomeHero",setup(e){const{frontmatter:t}=L();return(n,a)=>i(t).hero?(s(),_(bn,{key:0,class:"VPHomeHero",name:i(t).hero.name,text:i(t).hero.text,tagline:i(t).hero.tagline,image:i(t).hero.image,actions:i(t).hero.actions},{"home-hero-info-before":h(()=>[c(n.$slots,"home-hero-info-before")]),"home-hero-info":h(()=>[c(n.$slots,"home-hero-info")]),"home-hero-info-after":h(()=>[c(n.$slots,"home-hero-info-after")]),"home-hero-actions-after":h(()=>[c(n.$slots,"home-hero-actions-after")]),"home-hero-image":h(()=>[c(n.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):m("",!0)}}),$n={class:"box"},yn={key:0,class:"icon"},Pn=["innerHTML"],Ln=["innerHTML"],Vn=["innerHTML"],Sn={key:4,class:"link-text"},Tn={class:"link-text-value"},Nn=p({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(e){return(t,n)=>(s(),_(E,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:h(()=>[d("article",$n,[typeof e.icon=="object"&&e.icon.wrap?(s(),u("div",yn,[k(J,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(s(),_(J,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(s(),u("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Pn)):m("",!0),d("h2",{class:"title",innerHTML:e.title},null,8,Ln),e.details?(s(),u("p",{key:3,class:"details",innerHTML:e.details},null,8,Vn)):m("",!0),e.linkText?(s(),u("div",Sn,[d("p",Tn,[j(M(e.linkText)+" ",1),n[0]||(n[0]=d("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):m("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),Mn=g(Nn,[["__scopeId","data-v-56f5d2c1"]]),xn={key:0,class:"VPFeatures"},In={class:"container"},wn={class:"items"},An=p({__name:"VPFeatures",props:{features:{}},setup(e){const t=e,n=y(()=>{const a=t.features.length;if(a){if(a===2)return"grid-2";if(a===3)return"grid-3";if(a%3===0)return"grid-6";if(a>3)return"grid-4"}else return});return(a,o)=>e.features?(s(),u("div",xn,[d("div",In,[d("div",wn,[(s(!0),u(x,null,A(e.features,r=>(s(),u("div",{key:r.title,class:N(["item",[n.value]])},[k(Mn,{icon:r.icon,title:r.title,details:r.details,link:r.link,"link-text":r.linkText,rel:r.rel,target:r.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):m("",!0)}}),Cn=g(An,[["__scopeId","data-v-79f59e92"]]),Hn=p({__name:"VPHomeFeatures",setup(e){const{frontmatter:t}=L();return(n,a)=>i(t).features?(s(),_(Cn,{key:0,class:"VPHomeFeatures",features:i(t).features},null,8,["features"])):m("",!0)}}),Bn=p({__name:"VPHomeContent",setup(e){const{width:t}=De({initialWidth:0,includeScrollbar:!1});return(n,a)=>(s(),u("div",{class:"vp-doc container",style:Pe(i(t)?{"--vp-offset":`calc(50% - ${i(t)/2}px)`}:{})},[c(n.$slots,"default",{},void 0,!0)],4))}}),En=g(Bn,[["__scopeId","data-v-7484ad42"]]),Fn=p({__name:"VPHome",setup(e){const{frontmatter:t,theme:n}=L();return(a,o)=>{const r=W("Content");return s(),u("div",{class:N(["VPHome",{"external-link-icon-enabled":i(n).externalLinkIcon}])},[c(a.$slots,"home-hero-before",{},void 0,!0),k(gn,null,{"home-hero-info-before":h(()=>[c(a.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":h(()=>[c(a.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":h(()=>[c(a.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":h(()=>[c(a.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":h(()=>[c(a.$slots,"home-hero-image",{},void 0,!0)]),_:3}),c(a.$slots,"home-hero-after",{},void 0,!0),c(a.$slots,"home-features-before",{},void 0,!0),k(Hn),c(a.$slots,"home-features-after",{},void 0,!0),i(t).markdownStyles!==!1?(s(),_(En,{key:0},{default:h(()=>[k(r)]),_:1})):(s(),_(r,{key:1}))],2)}}}),Dn=g(Fn,[["__scopeId","data-v-15d67397"]]),On={},Gn={class:"VPPage"};function Un(e,t){const n=W("Content");return s(),u("div",Gn,[c(e.$slots,"page-top"),k(n),c(e.$slots,"page-bottom")])}const jn=g(On,[["render",Un]]),zn=p({__name:"VPContent",setup(e){const{page:t,frontmatter:n}=L(),{hasSidebar:a}=D();return(o,r)=>(s(),u("div",{class:N(["VPContent",{"has-sidebar":i(a),"is-home":i(n).layout==="home"}]),id:"VPContent"},[i(t).isNotFound?c(o.$slots,"not-found",{key:0},()=>[k(rt)],!0):i(n).layout==="page"?(s(),_(jn,{key:1},{"page-top":h(()=>[c(o.$slots,"page-top",{},void 0,!0)]),"page-bottom":h(()=>[c(o.$slots,"page-bottom",{},void 0,!0)]),_:3})):i(n).layout==="home"?(s(),_(Dn,{key:2},{"home-hero-before":h(()=>[c(o.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":h(()=>[c(o.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":h(()=>[c(o.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":h(()=>[c(o.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":h(()=>[c(o.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":h(()=>[c(o.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":h(()=>[c(o.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":h(()=>[c(o.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":h(()=>[c(o.$slots,"home-features-after",{},void 0,!0)]),_:3})):i(n).layout&&i(n).layout!=="doc"?(s(),_(B(i(n).layout),{key:3})):(s(),_(an,{key:4},{"doc-top":h(()=>[c(o.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":h(()=>[c(o.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":h(()=>[c(o.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":h(()=>[c(o.$slots,"doc-before",{},void 0,!0)]),"doc-after":h(()=>[c(o.$slots,"doc-after",{},void 0,!0)]),"aside-top":h(()=>[c(o.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":h(()=>[c(o.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":h(()=>[c(o.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":h(()=>[c(o.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":h(()=>[c(o.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":h(()=>[c(o.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),Wn=g(zn,[["__scopeId","data-v-b7673a1a"]]),Kn={class:"container"},qn=["innerHTML"],Rn=["innerHTML"],Jn=p({__name:"VPFooter",setup(e){const{theme:t,frontmatter:n}=L(),{hasSidebar:a}=D();return(o,r)=>i(t).footer&&i(n).footer!==!1?(s(),u("footer",{key:0,class:N(["VPFooter",{"has-sidebar":i(a)}])},[d("div",Kn,[i(t).footer.message?(s(),u("p",{key:0,class:"message",innerHTML:i(t).footer.message},null,8,qn)):m("",!0),i(t).footer.copyright?(s(),u("p",{key:1,class:"copyright",innerHTML:i(t).footer.copyright},null,8,Rn)):m("",!0)])],2)):m("",!0)}}),Xn=g(Jn,[["__scopeId","data-v-eda79520"]]);function Yn(){const{theme:e,frontmatter:t}=L(),n=$e([]),a=y(()=>n.value.length>0);return Y(()=>{n.value=me(t.value.outline??e.value.outline)}),{headers:n,hasLocalNav:a}}const Qn={class:"menu-text"},Zn={class:"header"},ea={class:"outline"},ta=p({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(e){const t=e,{theme:n}=L(),a=S(!1),o=S(0),r=S(),l=S();function v(b){var P;(P=r.value)!=null&&P.contains(b.target)||(a.value=!1)}F(a,b=>{if(b){document.addEventListener("click",v);return}document.removeEventListener("click",v)}),ie("Escape",()=>{a.value=!1}),Y(()=>{a.value=!1});function f(){a.value=!a.value,o.value=window.innerHeight+Math.min(window.scrollY-t.navHeight,0)}function $(b){b.target.classList.contains("outline-link")&&(l.value&&(l.value.style.transition="none"),Le(()=>{a.value=!1}))}function V(){a.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(b,P)=>(s(),u("div",{class:"VPLocalNavOutlineDropdown",style:Pe({"--vp-vh":o.value+"px"}),ref_key:"main",ref:r},[e.headers.length>0?(s(),u("button",{key:0,onClick:f,class:N({open:a.value})},[d("span",Qn,M(i(Me)(i(n))),1),P[0]||(P[0]=d("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(s(),u("button",{key:1,onClick:V},M(i(n).returnToTopLabel||"Return to top"),1)),k(ue,{name:"flyout"},{default:h(()=>[a.value?(s(),u("div",{key:0,ref_key:"items",ref:l,class:"items",onClick:$},[d("div",Zn,[d("a",{class:"top-link",href:"#",onClick:V},M(i(n).returnToTopLabel||"Return to top"),1)]),d("div",ea,[k(xe,{headers:e.headers},null,8,["headers"])])],512)):m("",!0)]),_:1})],4))}}),na=g(ta,[["__scopeId","data-v-b1705a02"]]),aa={class:"container"},oa=["aria-expanded"],sa={class:"menu-text"},ia=p({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(e){const{theme:t,frontmatter:n}=L(),{hasSidebar:a}=D(),{headers:o}=Yn(),{y:r}=Ve(),l=S(0);U(()=>{l.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),Y(()=>{o.value=me(n.value.outline??t.value.outline)});const v=y(()=>o.value.length===0),f=y(()=>v.value&&!a.value),$=y(()=>({VPLocalNav:!0,"has-sidebar":a.value,empty:v.value,fixed:f.value}));return(V,b)=>i(n).layout!=="home"&&(!f.value||i(r)>=l.value)?(s(),u("div",{key:0,class:N($.value)},[d("div",aa,[i(a)?(s(),u("button",{key:0,class:"menu","aria-expanded":e.open,"aria-controls":"VPSidebarNav",onClick:b[0]||(b[0]=P=>V.$emit("open-menu"))},[b[1]||(b[1]=d("span",{class:"vpi-align-left menu-icon"},null,-1)),d("span",sa,M(i(t).sidebarMenuLabel||"Menu"),1)],8,oa)):m("",!0),k(na,{headers:i(o),navHeight:l.value},null,8,["headers","navHeight"])])],2)):m("",!0)}}),ra=g(ia,[["__scopeId","data-v-35fedc2e"]]);function la(){const e=S(!1);function t(){e.value=!0,window.addEventListener("resize",o)}function n(){e.value=!1,window.removeEventListener("resize",o)}function a(){e.value?n():t()}function o(){window.outerWidth>=768&&n()}const r=Q();return F(()=>r.path,n),{isScreenOpen:e,openScreen:t,closeScreen:n,toggleScreen:a}}const ca={},ua={class:"VPSwitch",type:"button",role:"switch"},da={class:"check"},va={key:0,class:"icon"};function fa(e,t){return s(),u("button",ua,[d("span",da,[e.$slots.default?(s(),u("span",va,[c(e.$slots,"default",{},void 0,!0)])):m("",!0)])])}const ha=g(ca,[["render",fa],["__scopeId","data-v-30be283b"]]),ma=p({__name:"VPSwitchAppearance",setup(e){const{isDark:t,theme:n}=L(),a=Z("toggle-appearance",()=>{t.value=!t.value}),o=S("");return fe(()=>{o.value=t.value?n.value.lightModeSwitchTitle||"Switch to light theme":n.value.darkModeSwitchTitle||"Switch to dark theme"}),(r,l)=>(s(),_(ha,{title:o.value,class:"VPSwitchAppearance","aria-checked":i(t),onClick:i(a)},{default:h(()=>[...l[0]||(l[0]=[d("span",{class:"vpi-sun sun"},null,-1),d("span",{class:"vpi-moon moon"},null,-1)])]),_:1},8,["title","aria-checked","onClick"]))}}),pe=g(ma,[["__scopeId","data-v-37f1304f"]]),pa={key:0,class:"VPNavBarAppearance"},ka=p({__name:"VPNavBarAppearance",setup(e){const{site:t}=L();return(n,a)=>i(t).appearance&&i(t).appearance!=="force-dark"&&i(t).appearance!=="force-auto"?(s(),u("div",pa,[k(pe)])):m("",!0)}}),_a=g(ka,[["__scopeId","data-v-f62f81f9"]]),ke=S();let Ie=!1,oe=0;function ba(e){const t=S(!1);if(ee){!Ie&&ga(),oe++;const n=F(ke,a=>{var o,r,l;a===e.el.value||(o=e.el.value)!=null&&o.contains(a)?(t.value=!0,(r=e.onFocus)==null||r.call(e)):(t.value=!1,(l=e.onBlur)==null||l.call(e))});ve(()=>{n(),oe--,oe||$a()})}return Oe(t)}function ga(){document.addEventListener("focusin",we),Ie=!0,ke.value=document.activeElement}function $a(){document.removeEventListener("focusin",we)}function we(){ke.value=document.activeElement}const ya={class:"VPMenuLink"},Pa=["innerHTML"],La=p({__name:"VPMenuLink",props:{item:{}},setup(e){const{page:t}=L();return(n,a)=>(s(),u("div",ya,[k(E,{class:N({active:i(z)(i(t).relativePath,e.item.activeMatch||e.item.link,!!e.item.activeMatch)}),href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon},{default:h(()=>[d("span",{innerHTML:e.item.text},null,8,Pa)]),_:1},8,["class","href","target","rel","no-icon"])]))}}),te=g(La,[["__scopeId","data-v-058d8208"]]),Va={class:"VPMenuGroup"},Sa={key:0,class:"title"},Ta=p({__name:"VPMenuGroup",props:{text:{},items:{}},setup(e){return(t,n)=>(s(),u("div",Va,[e.text?(s(),u("p",Sa,M(e.text),1)):m("",!0),(s(!0),u(x,null,A(e.items,a=>(s(),u(x,null,["link"in a?(s(),_(te,{key:0,item:a},null,8,["item"])):m("",!0)],64))),256))]))}}),Na=g(Ta,[["__scopeId","data-v-e7041b42"]]),Ma={class:"VPMenu"},xa={key:0,class:"items"},Ia=p({__name:"VPMenu",props:{items:{}},setup(e){return(t,n)=>(s(),u("div",Ma,[e.items?(s(),u("div",xa,[(s(!0),u(x,null,A(e.items,a=>(s(),u(x,{key:JSON.stringify(a)},["link"in a?(s(),_(te,{key:0,item:a},null,8,["item"])):"component"in a?(s(),_(B(a.component),G({key:1,ref_for:!0},a.props),null,16)):(s(),_(Na,{key:2,text:a.text,items:a.items},null,8,["text","items"]))],64))),128))])):m("",!0),c(t.$slots,"default",{},void 0,!0)]))}}),wa=g(Ia,[["__scopeId","data-v-3472f68e"]]),Aa=["aria-expanded","aria-label"],Ca={key:0,class:"text"},Ha=["innerHTML"],Ba={key:1,class:"vpi-more-horizontal icon"},Ea={class:"menu"},Fa=p({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(e){const t=S(!1),n=S();ba({el:n,onBlur:a});function a(){t.value=!1}return(o,r)=>(s(),u("div",{class:"VPFlyout",ref_key:"el",ref:n,onMouseenter:r[1]||(r[1]=l=>t.value=!0),onMouseleave:r[2]||(r[2]=l=>t.value=!1)},[d("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":t.value,"aria-label":e.label,onClick:r[0]||(r[0]=l=>t.value=!t.value)},[e.button||e.icon?(s(),u("span",Ca,[e.icon?(s(),u("span",{key:0,class:N([e.icon,"option-icon"])},null,2)):m("",!0),e.button?(s(),u("span",{key:1,innerHTML:e.button},null,8,Ha)):m("",!0),r[3]||(r[3]=d("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(s(),u("span",Ba))],8,Aa),d("div",Ea,[k(wa,{items:e.items},{default:h(()=>[c(o.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),_e=g(Fa,[["__scopeId","data-v-be779828"]]),Da=["href","aria-label","innerHTML"],Oa=p({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(e){const t=e,n=S();U(async()=>{var r;await Le();const o=(r=n.value)==null?void 0:r.children[0];o instanceof HTMLElement&&o.className.startsWith("vpi-social-")&&(getComputedStyle(o).maskImage||getComputedStyle(o).webkitMaskImage)==="none"&&o.style.setProperty("--icon",`url('https://api.iconify.design/simple-icons/${t.icon}.svg')`)});const a=y(()=>typeof t.icon=="object"?t.icon.svg:``);return(o,r)=>(s(),u("a",{ref_key:"el",ref:n,class:"VPSocialLink no-icon",href:e.link,"aria-label":e.ariaLabel??(typeof e.icon=="string"?e.icon:""),target:"_blank",rel:"noopener",innerHTML:a.value},null,8,Da))}}),Ga=g(Oa,[["__scopeId","data-v-57e28dd3"]]),Ua={class:"VPSocialLinks"},ja=p({__name:"VPSocialLinks",props:{links:{}},setup(e){return(t,n)=>(s(),u("div",Ua,[(s(!0),u(x,null,A(e.links,({link:a,icon:o,ariaLabel:r})=>(s(),_(Ga,{key:a,icon:o,link:a,ariaLabel:r},null,8,["icon","link","ariaLabel"]))),128))]))}}),be=g(ja,[["__scopeId","data-v-756072eb"]]),za={key:0,class:"group translations"},Wa={class:"trans-title"},Ka={key:1,class:"group"},qa={class:"item appearance"},Ra={class:"label"},Ja={class:"appearance-action"},Xa={key:2,class:"group"},Ya={class:"item social-links"},Qa=p({__name:"VPNavBarExtra",setup(e){const{site:t,theme:n}=L(),{localeLinks:a,currentLang:o}=q({correspondingLink:!0}),r=y(()=>a.value.length&&o.value.label||t.value.appearance||n.value.socialLinks);return(l,v)=>r.value?(s(),_(_e,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:h(()=>[i(a).length&&i(o).label?(s(),u("div",za,[d("p",Wa,M(i(o).label),1),(s(!0),u(x,null,A(i(a),f=>(s(),_(te,{key:f.link,item:f},null,8,["item"]))),128))])):m("",!0),i(t).appearance&&i(t).appearance!=="force-dark"&&i(t).appearance!=="force-auto"?(s(),u("div",Ka,[d("div",qa,[d("p",Ra,M(i(n).darkModeSwitchLabel||"Appearance"),1),d("div",Ja,[k(pe)])])])):m("",!0),i(n).socialLinks?(s(),u("div",Xa,[d("div",Ya,[k(be,{class:"social-links-list",links:i(n).socialLinks},null,8,["links"])])])):m("",!0)]),_:1})):m("",!0)}}),Za=g(Qa,[["__scopeId","data-v-d3d9fc8f"]]),eo=["aria-expanded"],to=p({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(e){return(t,n)=>(s(),u("button",{type:"button",class:N(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:n[0]||(n[0]=a=>t.$emit("click"))},[...n[1]||(n[1]=[d("span",{class:"container"},[d("span",{class:"top"}),d("span",{class:"middle"}),d("span",{class:"bottom"})],-1)])],10,eo))}}),no=g(to,[["__scopeId","data-v-2f352f04"]]),ao=["innerHTML"],oo=p({__name:"VPNavBarMenuLink",props:{item:{}},setup(e){const{page:t}=L();return(n,a)=>(s(),_(E,{class:N({VPNavBarMenuLink:!0,active:i(z)(i(t).relativePath,e.item.activeMatch||e.item.link,!!e.item.activeMatch)}),href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,tabindex:"0"},{default:h(()=>[d("span",{innerHTML:e.item.text},null,8,ao)]),_:1},8,["class","href","target","rel","no-icon"]))}}),so=g(oo,[["__scopeId","data-v-6a150605"]]),io=p({__name:"VPNavBarMenuGroup",props:{item:{}},setup(e){const t=e,{page:n}=L(),a=r=>"component"in r?!1:"link"in r?z(n.value.relativePath,r.link,!!t.item.activeMatch):r.items.some(a),o=y(()=>a(t.item));return(r,l)=>(s(),_(_e,{class:N({VPNavBarMenuGroup:!0,active:i(z)(i(n).relativePath,e.item.activeMatch,!!e.item.activeMatch)||o.value}),button:e.item.text,items:e.item.items},null,8,["class","button","items"]))}}),ro={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},lo=p({__name:"VPNavBarMenu",setup(e){const{theme:t}=L();return(n,a)=>i(t).nav?(s(),u("nav",ro,[a[0]||(a[0]=d("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(s(!0),u(x,null,A(i(t).nav,o=>(s(),u(x,{key:JSON.stringify(o)},["link"in o?(s(),_(so,{key:0,item:o},null,8,["item"])):"component"in o?(s(),_(B(o.component),G({key:1,ref_for:!0},o.props),null,16)):(s(),_(io,{key:2,item:o},null,8,["item"]))],64))),128))])):m("",!0)}}),co=g(lo,[["__scopeId","data-v-9175dda3"]]);function uo(e){const{localeIndex:t,theme:n}=L();function a(o){var I,w,C;const r=o.split("."),l=(I=n.value.search)==null?void 0:I.options,v=l&&typeof l=="object",f=v&&((C=(w=l.locales)==null?void 0:w[t.value])==null?void 0:C.translations)||null,$=v&&l.translations||null;let V=f,b=$,P=e;const T=r.pop();for(const H of r){let O=null;const K=P==null?void 0:P[H];K&&(O=P=K);const ne=b==null?void 0:b[H];ne&&(O=b=ne);const ae=V==null?void 0:V[H];ae&&(O=V=ae),K||(P=O),ne||(b=O),ae||(V=O)}return(V==null?void 0:V[T])??(b==null?void 0:b[T])??(P==null?void 0:P[T])??""}return a}const vo=["aria-label"],fo={class:"DocSearch-Button-Container"},ho={class:"DocSearch-Button-Placeholder"},ge=p({__name:"VPNavBarSearchButton",setup(e){const n=uo({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(a,o)=>(s(),u("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":i(n)("button.buttonAriaLabel")},[d("span",fo,[o[0]||(o[0]=d("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1)),d("span",ho,M(i(n)("button.buttonText")),1)]),o[1]||(o[1]=d("span",{class:"DocSearch-Button-Keys"},[d("kbd",{class:"DocSearch-Button-Key"}),d("kbd",{class:"DocSearch-Button-Key"},"K")],-1))],8,vo))}}),mo={class:"VPNavBarSearch"},po={id:"local-search"},ko={key:1,id:"docsearch"},_o=p({__name:"VPNavBarSearch",setup(e){const t=Ge(()=>Ue(()=>import("./VPLocalSearchBox.DE8nKMEK.js"),__vite__mapDeps([0,1]))),n=()=>null,{theme:a}=L(),o=S(!1),r=S(!1);U(()=>{});function l(){o.value||(o.value=!0,setTimeout(v,16))}function v(){const b=new Event("keydown");b.key="k",b.metaKey=!0,window.dispatchEvent(b),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||v()},16)}function f(b){const P=b.target,T=P.tagName;return P.isContentEditable||T==="INPUT"||T==="SELECT"||T==="TEXTAREA"}const $=S(!1);ie("k",b=>{(b.ctrlKey||b.metaKey)&&(b.preventDefault(),$.value=!0)}),ie("/",b=>{f(b)||(b.preventDefault(),$.value=!0)});const V="local";return(b,P)=>{var T;return s(),u("div",mo,[i(V)==="local"?(s(),u(x,{key:0},[$.value?(s(),_(i(t),{key:0,onClose:P[0]||(P[0]=I=>$.value=!1)})):m("",!0),d("div",po,[k(ge,{onClick:P[1]||(P[1]=I=>$.value=!0)})])],64)):i(V)==="algolia"?(s(),u(x,{key:1},[o.value?(s(),_(i(n),{key:0,algolia:((T=i(a).search)==null?void 0:T.options)??i(a).algolia,onVnodeBeforeMount:P[2]||(P[2]=I=>r.value=!0)},null,8,["algolia"])):m("",!0),r.value?m("",!0):(s(),u("div",ko,[k(ge,{onClick:l})]))],64)):m("",!0)])}}}),bo=p({__name:"VPNavBarSocialLinks",setup(e){const{theme:t}=L();return(n,a)=>i(t).socialLinks?(s(),_(be,{key:0,class:"VPNavBarSocialLinks",links:i(t).socialLinks},null,8,["links"])):m("",!0)}}),go=g(bo,[["__scopeId","data-v-7d10330c"]]),$o=["href","rel","target"],yo=["innerHTML"],Po={key:2},Lo=p({__name:"VPNavBarTitle",setup(e){const{site:t,theme:n}=L(),{hasSidebar:a}=D(),{currentLang:o}=q(),r=y(()=>{var f;return typeof n.value.logoLink=="string"?n.value.logoLink:(f=n.value.logoLink)==null?void 0:f.link}),l=y(()=>{var f;return typeof n.value.logoLink=="string"||(f=n.value.logoLink)==null?void 0:f.rel}),v=y(()=>{var f;return typeof n.value.logoLink=="string"||(f=n.value.logoLink)==null?void 0:f.target});return(f,$)=>(s(),u("div",{class:N(["VPNavBarTitle",{"has-sidebar":i(a)}])},[d("a",{class:"title",href:r.value??i(he)(i(o).link),rel:l.value,target:v.value},[c(f.$slots,"nav-bar-title-before",{},void 0,!0),i(n).logo?(s(),_(J,{key:0,class:"logo",image:i(n).logo},null,8,["image"])):m("",!0),i(n).siteTitle?(s(),u("span",{key:1,innerHTML:i(n).siteTitle},null,8,yo)):i(n).siteTitle===void 0?(s(),u("span",Po,M(i(t).title),1)):m("",!0),c(f.$slots,"nav-bar-title-after",{},void 0,!0)],8,$o)],2))}}),Vo=g(Lo,[["__scopeId","data-v-d3112b8f"]]),So={class:"items"},To={class:"title"},No=p({__name:"VPNavBarTranslations",setup(e){const{theme:t}=L(),{localeLinks:n,currentLang:a}=q({correspondingLink:!0});return(o,r)=>i(n).length&&i(a).label?(s(),_(_e,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:i(t).langMenuLabel||"Change language"},{default:h(()=>[d("div",So,[d("p",To,M(i(a).label),1),(s(!0),u(x,null,A(i(n),l=>(s(),_(te,{key:l.link,item:l},null,8,["item"]))),128))])]),_:1},8,["label"])):m("",!0)}}),Mo=g(No,[["__scopeId","data-v-06507d70"]]),xo={class:"wrapper"},Io={class:"container"},wo={class:"title"},Ao={class:"content"},Co={class:"content-body"},Ho=p({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(e){const t=e,{y:n}=Ve(),{hasSidebar:a}=D(),{frontmatter:o}=L(),r=S({});return fe(()=>{r.value={"has-sidebar":a.value,home:o.value.layout==="home",top:n.value===0,"screen-open":t.isScreenOpen}}),(l,v)=>(s(),u("div",{class:N(["VPNavBar",r.value])},[d("div",xo,[d("div",Io,[d("div",wo,[k(Vo,null,{"nav-bar-title-before":h(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":h(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),d("div",Ao,[d("div",Co,[c(l.$slots,"nav-bar-content-before",{},void 0,!0),k(_o,{class:"search"}),k(co,{class:"menu"}),k(Mo,{class:"translations"}),k(_a,{class:"appearance"}),k(go,{class:"social-links"}),k(Za,{class:"extra"}),c(l.$slots,"nav-bar-content-after",{},void 0,!0),k(no,{class:"hamburger",active:e.isScreenOpen,onClick:v[0]||(v[0]=f=>l.$emit("toggle-screen"))},null,8,["active"])])])])]),v[1]||(v[1]=d("div",{class:"divider"},[d("div",{class:"divider-line"})],-1))],2))}}),Bo=g(Ho,[["__scopeId","data-v-e42a4d1c"]]),Eo={key:0,class:"VPNavScreenAppearance"},Fo={class:"text"},Do=p({__name:"VPNavScreenAppearance",setup(e){const{site:t,theme:n}=L();return(a,o)=>i(t).appearance&&i(t).appearance!=="force-dark"&&i(t).appearance!=="force-auto"?(s(),u("div",Eo,[d("p",Fo,M(i(n).darkModeSwitchLabel||"Appearance"),1),k(pe)])):m("",!0)}}),Oo=g(Do,[["__scopeId","data-v-b4a65e82"]]),Go=["innerHTML"],Uo=p({__name:"VPNavScreenMenuLink",props:{item:{}},setup(e){const t=Z("close-screen");return(n,a)=>(s(),_(E,{class:"VPNavScreenMenuLink",href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,onClick:i(t)},{default:h(()=>[d("span",{innerHTML:e.item.text},null,8,Go)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),jo=g(Uo,[["__scopeId","data-v-e3bc982a"]]),zo=["innerHTML"],Wo=p({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(e){const t=Z("close-screen");return(n,a)=>(s(),_(E,{class:"VPNavScreenMenuGroupLink",href:e.item.link,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,onClick:i(t)},{default:h(()=>[d("span",{innerHTML:e.item.text},null,8,zo)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),Ae=g(Wo,[["__scopeId","data-v-0138002c"]]),Ko={class:"VPNavScreenMenuGroupSection"},qo={key:0,class:"title"},Ro=p({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(e){return(t,n)=>(s(),u("div",Ko,[e.text?(s(),u("p",qo,M(e.text),1)):m("",!0),(s(!0),u(x,null,A(e.items,a=>(s(),_(Ae,{key:a.text,item:a},null,8,["item"]))),128))]))}}),Jo=g(Ro,[["__scopeId","data-v-7042a42f"]]),Xo=["aria-controls","aria-expanded"],Yo=["innerHTML"],Qo=["id"],Zo={key:0,class:"item"},es={key:1,class:"item"},ts={key:2,class:"group"},ns=p({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(e){const t=e,n=S(!1),a=y(()=>`NavScreenGroup-${t.text.replace(" ","-").toLowerCase()}`);function o(){n.value=!n.value}return(r,l)=>(s(),u("div",{class:N(["VPNavScreenMenuGroup",{open:n.value}])},[d("button",{class:"button","aria-controls":a.value,"aria-expanded":n.value,onClick:o},[d("span",{class:"button-text",innerHTML:e.text},null,8,Yo),l[0]||(l[0]=d("span",{class:"vpi-plus button-icon"},null,-1))],8,Xo),d("div",{id:a.value,class:"items"},[(s(!0),u(x,null,A(e.items,v=>(s(),u(x,{key:JSON.stringify(v)},["link"in v?(s(),u("div",Zo,[k(Ae,{item:v},null,8,["item"])])):"component"in v?(s(),u("div",es,[(s(),_(B(v.component),G({ref_for:!0},v.props,{"screen-menu":""}),null,16))])):(s(),u("div",ts,[k(Jo,{text:v.text,items:v.items},null,8,["text","items"])]))],64))),128))],8,Qo)],2))}}),as=g(ns,[["__scopeId","data-v-45c59f43"]]),os={key:0,class:"VPNavScreenMenu"},ss=p({__name:"VPNavScreenMenu",setup(e){const{theme:t}=L();return(n,a)=>i(t).nav?(s(),u("nav",os,[(s(!0),u(x,null,A(i(t).nav,o=>(s(),u(x,{key:JSON.stringify(o)},["link"in o?(s(),_(jo,{key:0,item:o},null,8,["item"])):"component"in o?(s(),_(B(o.component),G({key:1,ref_for:!0},o.props,{"screen-menu":""}),null,16)):(s(),_(as,{key:2,text:o.text||"",items:o.items},null,8,["text","items"]))],64))),128))])):m("",!0)}}),is=p({__name:"VPNavScreenSocialLinks",setup(e){const{theme:t}=L();return(n,a)=>i(t).socialLinks?(s(),_(be,{key:0,class:"VPNavScreenSocialLinks",links:i(t).socialLinks},null,8,["links"])):m("",!0)}}),rs={class:"list"},ls=p({__name:"VPNavScreenTranslations",setup(e){const{localeLinks:t,currentLang:n}=q({correspondingLink:!0}),a=S(!1);function o(){a.value=!a.value}return(r,l)=>i(t).length&&i(n).label?(s(),u("div",{key:0,class:N(["VPNavScreenTranslations",{open:a.value}])},[d("button",{class:"title",onClick:o},[l[0]||(l[0]=d("span",{class:"vpi-languages icon lang"},null,-1)),j(" "+M(i(n).label)+" ",1),l[1]||(l[1]=d("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),d("ul",rs,[(s(!0),u(x,null,A(i(t),v=>(s(),u("li",{key:v.link,class:"item"},[k(E,{class:"link",href:v.link},{default:h(()=>[j(M(v.text),1)]),_:2},1032,["href"])]))),128))])],2)):m("",!0)}}),cs=g(ls,[["__scopeId","data-v-8eef12ad"]]),us={class:"container"},ds=p({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(e){const t=S(null),n=Se(ee?document.body:null);return(a,o)=>(s(),_(ue,{name:"fade",onEnter:o[0]||(o[0]=r=>n.value=!0),onAfterLeave:o[1]||(o[1]=r=>n.value=!1)},{default:h(()=>[e.open?(s(),u("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:t,id:"VPNavScreen"},[d("div",us,[c(a.$slots,"nav-screen-content-before",{},void 0,!0),k(ss,{class:"menu"}),k(cs,{class:"translations"}),k(Oo,{class:"appearance"}),k(is,{class:"social-links"}),c(a.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):m("",!0)]),_:3}))}}),vs=g(ds,[["__scopeId","data-v-1bbfffc9"]]),fs={key:0,class:"VPNav"},hs=p({__name:"VPNav",setup(e){const{isScreenOpen:t,closeScreen:n,toggleScreen:a}=la(),{frontmatter:o}=L(),r=y(()=>o.value.navbar!==!1);return Te("close-screen",n),X(()=>{ee&&document.documentElement.classList.toggle("hide-nav",!r.value)}),(l,v)=>r.value?(s(),u("header",fs,[k(Bo,{"is-screen-open":i(t),onToggleScreen:i(a)},{"nav-bar-title-before":h(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":h(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":h(()=>[c(l.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":h(()=>[c(l.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),k(vs,{open:i(t)},{"nav-screen-content-before":h(()=>[c(l.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":h(()=>[c(l.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):m("",!0)}}),ms=g(hs,[["__scopeId","data-v-8f6a06d2"]]),ps=["role","tabindex"],ks={key:1,class:"items"},_s=p({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(e){const t=e,{collapsed:n,collapsible:a,isLink:o,isActiveLink:r,hasActiveLink:l,hasChildren:v,toggle:f}=dt(y(()=>t.item)),$=y(()=>v.value?"section":"div"),V=y(()=>o.value?"a":"div"),b=y(()=>v.value?t.depth+2===7?"p":`h${t.depth+2}`:"p"),P=y(()=>o.value?void 0:"button"),T=y(()=>[[`level-${t.depth}`],{collapsible:a.value},{collapsed:n.value},{"is-link":o.value},{"is-active":r.value},{"has-active":l.value}]);function I(C){"key"in C&&C.key!=="Enter"||!t.item.link&&f()}function w(){t.item.link&&f()}return(C,H)=>{const O=W("VPSidebarItem",!0);return s(),_(B($.value),{class:N(["VPSidebarItem",T.value])},{default:h(()=>[e.item.text?(s(),u("div",G({key:0,class:"item",role:P.value},je(e.item.items?{click:I,keydown:I}:{},!0),{tabindex:e.item.items&&0}),[H[1]||(H[1]=d("div",{class:"indicator"},null,-1)),e.item.link?(s(),_(E,{key:0,tag:V.value,class:"link",href:e.item.link,rel:e.item.rel,target:e.item.target},{default:h(()=>[(s(),_(B(b.value),{class:"text",innerHTML:e.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(s(),_(B(b.value),{key:1,class:"text",innerHTML:e.item.text},null,8,["innerHTML"])),e.item.collapsed!=null&&e.item.items&&e.item.items.length?(s(),u("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:w,onKeydown:ze(w,["enter"]),tabindex:"0"},[...H[0]||(H[0]=[d("span",{class:"vpi-chevron-right caret-icon"},null,-1)])],32)):m("",!0)],16,ps)):m("",!0),e.item.items&&e.item.items.length?(s(),u("div",ks,[e.depth<5?(s(!0),u(x,{key:0},A(e.item.items,K=>(s(),_(O,{key:K.text,item:K,depth:e.depth+1},null,8,["item","depth"]))),128)):m("",!0)])):m("",!0)]),_:1},8,["class"])}}}),bs=g(_s,[["__scopeId","data-v-9a07bd0b"]]),gs=p({__name:"VPSidebarGroup",props:{items:{}},setup(e){const t=S(!0);let n=null;return U(()=>{n=setTimeout(()=>{n=null,t.value=!1},300)}),We(()=>{n!=null&&(clearTimeout(n),n=null)}),(a,o)=>(s(!0),u(x,null,A(e.items,r=>(s(),u("div",{key:r.text,class:N(["group",{"no-transition":t.value}])},[k(bs,{item:r,depth:0},null,8,["item"])],2))),128))}}),$s=g(gs,[["__scopeId","data-v-c16c12a8"]]),ys={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},Ps=p({__name:"VPSidebar",props:{open:{type:Boolean}},setup(e){const{sidebarGroups:t,hasSidebar:n}=D(),a=e,o=S(null),r=Se(ee?document.body:null);F([a,o],()=>{var v;a.open?(r.value=!0,(v=o.value)==null||v.focus()):r.value=!1},{immediate:!0,flush:"post"});const l=S(0);return F(t,()=>{l.value+=1},{deep:!0}),(v,f)=>i(n)?(s(),u("aside",{key:0,class:N(["VPSidebar",{open:e.open}]),ref_key:"navEl",ref:o,onClick:f[0]||(f[0]=Ke(()=>{},["stop"]))},[f[2]||(f[2]=d("div",{class:"curtain"},null,-1)),d("nav",ys,[f[1]||(f[1]=d("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),c(v.$slots,"sidebar-nav-before",{},void 0,!0),(s(),_($s,{items:i(t),key:l.value},null,8,["items"])),c(v.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):m("",!0)}}),Ls=g(Ps,[["__scopeId","data-v-297c64fb"]]),Vs=p({__name:"VPSkipLink",setup(e){const{theme:t}=L(),n=Q(),a=S();F(()=>n.path,()=>a.value.focus());function o({target:r}){const l=document.getElementById(decodeURIComponent(r.hash).slice(1));if(l){const v=()=>{l.removeAttribute("tabindex"),l.removeEventListener("blur",v)};l.setAttribute("tabindex","-1"),l.addEventListener("blur",v),l.focus(),window.scrollTo(0,0)}}return(r,l)=>(s(),u(x,null,[d("span",{ref_key:"backToTop",ref:a,tabindex:"-1"},null,512),d("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:o},M(i(t).skipToContentLabel||"Skip to content"),1)],64))}}),Ss=g(Vs,[["__scopeId","data-v-a25f5db6"]]),Ts=p({__name:"Layout",setup(e){const{isOpen:t,open:n,close:a}=D(),o=Q();F(()=>o.path,a),ut(t,a);const{frontmatter:r}=L(),l=qe(),v=y(()=>!!l["home-hero-image"]);return Te("hero-image-slot-exists",v),(f,$)=>{const V=W("Content");return i(r).layout!==!1?(s(),u("div",{key:0,class:N(["Layout",i(r).pageClass])},[c(f.$slots,"layout-top",{},void 0,!0),k(Ss),k(Ye,{class:"backdrop",show:i(t),onClick:i(a)},null,8,["show","onClick"]),k(ms,null,{"nav-bar-title-before":h(()=>[c(f.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":h(()=>[c(f.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":h(()=>[c(f.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":h(()=>[c(f.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":h(()=>[c(f.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":h(()=>[c(f.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),k(ra,{open:i(t),onOpenMenu:i(n)},null,8,["open","onOpenMenu"]),k(Ls,{open:i(t)},{"sidebar-nav-before":h(()=>[c(f.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":h(()=>[c(f.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),k(Wn,null,{"page-top":h(()=>[c(f.$slots,"page-top",{},void 0,!0)]),"page-bottom":h(()=>[c(f.$slots,"page-bottom",{},void 0,!0)]),"not-found":h(()=>[c(f.$slots,"not-found",{},void 0,!0)]),"home-hero-before":h(()=>[c(f.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":h(()=>[c(f.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":h(()=>[c(f.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":h(()=>[c(f.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":h(()=>[c(f.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":h(()=>[c(f.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":h(()=>[c(f.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":h(()=>[c(f.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":h(()=>[c(f.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":h(()=>[c(f.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":h(()=>[c(f.$slots,"doc-before",{},void 0,!0)]),"doc-after":h(()=>[c(f.$slots,"doc-after",{},void 0,!0)]),"doc-top":h(()=>[c(f.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":h(()=>[c(f.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":h(()=>[c(f.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":h(()=>[c(f.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":h(()=>[c(f.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":h(()=>[c(f.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":h(()=>[c(f.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":h(()=>[c(f.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),k(Xn),c(f.$slots,"layout-bottom",{},void 0,!0)],2)):(s(),_(V,{key:1}))}}}),Ns=g(Ts,[["__scopeId","data-v-fed1f3d6"]]),xs={Layout:Ns,enhanceApp:({app:e})=>{e.component("Badge",Re)}};export{uo as c,xs as t,L as u}; diff --git a/assets/getting-started_bot.md.CxYqtI4G.js b/assets/getting-started_bot.md.AR4RHnpe.js similarity index 98% rename from assets/getting-started_bot.md.CxYqtI4G.js rename to assets/getting-started_bot.md.AR4RHnpe.js index 40b956f6..24bf97c0 100644 --- a/assets/getting-started_bot.md.CxYqtI4G.js +++ b/assets/getting-started_bot.md.AR4RHnpe.js @@ -1 +1 @@ -import{_ as e,o,c as r,ag as a}from"./chunks/framework.ePeAWSvT.js";const b=JSON.parse('{"title":"Bot Management","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/bot.md","filePath":"getting-started/bot.md","lastUpdated":1772873936000}'),i={name:"getting-started/bot.md"};function n(s,t,l,d,g,h){return o(),r("div",null,[...t[0]||(t[0]=[a('

Bot Management

A Bot is an independent AI agent that comes with its own isolated container, persistent memory, and configurable personality. Bots can chat via various messaging platforms (Channels) and perform complex tasks using specialized tools.

Creating a Bot

  1. Navigate to the Bots page from the sidebar.
  2. Click the Create Bot button.
  3. Fill in the basic info:
    • Display Name: The name users will see in group chats.
    • Avatar: A URL for the bot's profile picture.
    • Type: Choose personal (private to owner) or public (accessible to guests).
  4. Click Create.

Bot Detail Page

Once created, clicking on a bot card takes you to its Detail Page, where you can manage its entire lifecycle through several specialized tabs.

Overview Tab

The Overview tab provides a quick health check of the bot's services. It monitors:

  • Container status (running/stopped)
  • Database connectivity
  • Channel configurations
  • Memory system health

If any check shows a warning or error, follow the provided details to troubleshoot.

Configuring the Bot's Core Settings

After creating a bot, the most important step is configuring its runtime settings. These define how the bot talks, remembers, searches, and uses browser automation.

  1. Navigate to your bot's Detail Page.
  2. Go to the Settings tab.
  3. Configure the core fields:
    • Chat Model: Used for standard conversations with users.
    • Memory Provider: Select the memory backend the bot should use.
    • Search Provider: Select the search engine provider for web search.
    • Browser Context: Select the browser profile the bot should use for browser automation.
  4. Click Save at the bottom of the form.

If you have not created these resources yet, set them up first:


Settings Tab Reference

The Settings tab contains all the core parameters that define your bot's behavior and runtime configuration.

FieldDescription
Chat ModelThe main LLM used for generating chat responses.
Memory ProviderThe memory backend assigned to the bot. The built-in provider can optionally define its own memory and embedding models.
Search ProviderThe search engine used for web browsing capabilities.
Browser ContextThe browser environment used for web automation, such as viewport, locale, and mobile behavior.
Max Context Load TimeTime limit (seconds) for loading context before generation.
Max Context TokensToken limit for the loaded conversation history.
LanguageThe bot's primary communication language.
Reasoning EnabledIf the selected model supports reasoning (like OpenAI o1), enable this to use its deep thinking capabilities.
Reasoning EffortSet the level of reasoning effort (low, medium, high).
Allow Guest(Public bots only) If enabled, non-registered users can interact with the bot.

Deleting a Bot

To permanently remove a bot and all its associated data (including container files and memory):

  1. Navigate to the Settings tab in the Bot Detail page.
  2. Scroll to the Danger Zone at the bottom.
  3. Click Delete Bot and confirm the action.

Warning: This action is irreversible. All persistent data for this bot will be lost.

',25)])])}const m=e(i,[["render",n]]);export{b as __pageData,m as default}; +import{_ as e,o,c as r,ag as a}from"./chunks/framework.BZohXCq9.js";const b=JSON.parse('{"title":"Bot Management","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/bot.md","filePath":"getting-started/bot.md","lastUpdated":1772873936000}'),i={name:"getting-started/bot.md"};function n(s,t,l,d,g,h){return o(),r("div",null,[...t[0]||(t[0]=[a('

Bot Management

A Bot is an independent AI agent that comes with its own isolated container, persistent memory, and configurable personality. Bots can chat via various messaging platforms (Channels) and perform complex tasks using specialized tools.

Creating a Bot

  1. Navigate to the Bots page from the sidebar.
  2. Click the Create Bot button.
  3. Fill in the basic info:
    • Display Name: The name users will see in group chats.
    • Avatar: A URL for the bot's profile picture.
    • Type: Choose personal (private to owner) or public (accessible to guests).
  4. Click Create.

Bot Detail Page

Once created, clicking on a bot card takes you to its Detail Page, where you can manage its entire lifecycle through several specialized tabs.

Overview Tab

The Overview tab provides a quick health check of the bot's services. It monitors:

  • Container status (running/stopped)
  • Database connectivity
  • Channel configurations
  • Memory system health

If any check shows a warning or error, follow the provided details to troubleshoot.

Configuring the Bot's Core Settings

After creating a bot, the most important step is configuring its runtime settings. These define how the bot talks, remembers, searches, and uses browser automation.

  1. Navigate to your bot's Detail Page.
  2. Go to the Settings tab.
  3. Configure the core fields:
    • Chat Model: Used for standard conversations with users.
    • Memory Provider: Select the memory backend the bot should use.
    • Search Provider: Select the search engine provider for web search.
    • Browser Context: Select the browser profile the bot should use for browser automation.
  4. Click Save at the bottom of the form.

If you have not created these resources yet, set them up first:


Settings Tab Reference

The Settings tab contains all the core parameters that define your bot's behavior and runtime configuration.

FieldDescription
Chat ModelThe main LLM used for generating chat responses.
Memory ProviderThe memory backend assigned to the bot. The built-in provider can optionally define its own memory and embedding models.
Search ProviderThe search engine used for web browsing capabilities.
Browser ContextThe browser environment used for web automation, such as viewport, locale, and mobile behavior.
Max Context Load TimeTime limit (seconds) for loading context before generation.
Max Context TokensToken limit for the loaded conversation history.
LanguageThe bot's primary communication language.
Reasoning EnabledIf the selected model supports reasoning (like OpenAI o1), enable this to use its deep thinking capabilities.
Reasoning EffortSet the level of reasoning effort (low, medium, high).
Allow Guest(Public bots only) If enabled, non-registered users can interact with the bot.

Deleting a Bot

To permanently remove a bot and all its associated data (including container files and memory):

  1. Navigate to the Settings tab in the Bot Detail page.
  2. Scroll to the Danger Zone at the bottom.
  3. Click Delete Bot and confirm the action.

Warning: This action is irreversible. All persistent data for this bot will be lost.

',25)])])}const m=e(i,[["render",n]]);export{b as __pageData,m as default}; diff --git a/assets/getting-started_bot.md.CxYqtI4G.lean.js b/assets/getting-started_bot.md.AR4RHnpe.lean.js similarity index 85% rename from assets/getting-started_bot.md.CxYqtI4G.lean.js rename to assets/getting-started_bot.md.AR4RHnpe.lean.js index abde7e90..eb0d9182 100644 --- a/assets/getting-started_bot.md.CxYqtI4G.lean.js +++ b/assets/getting-started_bot.md.AR4RHnpe.lean.js @@ -1 +1 @@ -import{_ as e,o,c as r,ag as a}from"./chunks/framework.ePeAWSvT.js";const b=JSON.parse('{"title":"Bot Management","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/bot.md","filePath":"getting-started/bot.md","lastUpdated":1772873936000}'),i={name:"getting-started/bot.md"};function n(s,t,l,d,g,h){return o(),r("div",null,[...t[0]||(t[0]=[a("",25)])])}const m=e(i,[["render",n]]);export{b as __pageData,m as default}; +import{_ as e,o,c as r,ag as a}from"./chunks/framework.BZohXCq9.js";const b=JSON.parse('{"title":"Bot Management","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/bot.md","filePath":"getting-started/bot.md","lastUpdated":1772873936000}'),i={name:"getting-started/bot.md"};function n(s,t,l,d,g,h){return o(),r("div",null,[...t[0]||(t[0]=[a("",25)])])}const m=e(i,[["render",n]]);export{b as __pageData,m as default}; diff --git a/assets/getting-started_browser.md.CHy6pyTr.js b/assets/getting-started_browser.md.B8YEEooM.js similarity index 98% rename from assets/getting-started_browser.md.CHy6pyTr.js rename to assets/getting-started_browser.md.B8YEEooM.js index 8c94d068..5afd6c53 100644 --- a/assets/getting-started_browser.md.CHy6pyTr.js +++ b/assets/getting-started_browser.md.B8YEEooM.js @@ -1 +1 @@ -import{_ as e,o,c as r,ag as a}from"./chunks/framework.ePeAWSvT.js";const b=JSON.parse('{"title":"Browser Contexts","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/browser.md","filePath":"getting-started/browser.md","lastUpdated":1772873936000}'),n={name:"getting-started/browser.md"};function s(i,t,l,d,c,g){return o(),r("div",null,[...t[0]||(t[0]=[a('

Browser Contexts

Memoh can give a bot access to a headless browser through the Browser Gateway. A Browser Context stores the browser environment a bot should use, such as viewport size, locale, timezone, and mobile behavior.

Once a browser context is assigned to a bot, the bot can use browser tools to open pages, click elements, fill forms, capture screenshots, and inspect page content.


Concept: Browser Gateway

The Browser Gateway is powered by Playwright and provides browser automation for bots. In practice, a browser context acts like a reusable browser profile configuration for one or more bots.

Typical use cases include:

  • Navigating websites
  • Clicking buttons and links
  • Filling and submitting forms
  • Reading rendered page content
  • Capturing screenshots or PDFs

Creating a Browser Context

Manage contexts from the Browser Contexts page in the sidebar.

  1. Navigate to the Browser Contexts page.
  2. Click Add Browser Context.
  3. Fill in the following field:
    • Name: A display name for this browser context.
  4. Click Create.

Configuring a Browser Context

After creating a context, select it from the sidebar and update its settings.

FieldDescription
NameThe display name shown in the UI.
Viewport WidthBrowser viewport width in pixels.
Viewport HeightBrowser viewport height in pixels.
User AgentOptional custom browser user agent string.
Device Scale FactorOptional device pixel ratio.
LocaleOptional locale such as en-US or zh-CN.
Timezone IDOptional timezone such as UTC or Asia/Shanghai.
Is MobileEnables mobile-style browser behavior.
Ignore HTTPS ErrorsAllows navigation to sites with invalid HTTPS certificates.

Managing Contexts

  • Edit: Select a context and update its configuration.
  • Delete: Remove a context you no longer use.

Assigning a Browser Context to a Bot

  1. Navigate to the Bots page and open your bot.
  2. Go to the Settings tab.
  3. Find the Browser Context dropdown.
  4. Select the context you created.
  5. Click Save.

After saving, the bot can use that browser context when browser tools are invoked.


Bot Interaction

When a browser context is configured, the bot can use built-in browser tools such as:

  • browser_action: perform actions like navigation, click, fill, select, scroll, tab management, screenshot, or PDF export
  • browser_observe: inspect the current page and gather information for the model

This lets the bot interact with real websites instead of relying only on static HTML or search results.


Next Steps

',30)])])}const p=e(n,[["render",s]]);export{b as __pageData,p as default}; +import{_ as e,o,c as r,ag as a}from"./chunks/framework.BZohXCq9.js";const b=JSON.parse('{"title":"Browser Contexts","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/browser.md","filePath":"getting-started/browser.md","lastUpdated":1772873936000}'),n={name:"getting-started/browser.md"};function s(i,t,l,d,c,g){return o(),r("div",null,[...t[0]||(t[0]=[a('

Browser Contexts

Memoh can give a bot access to a headless browser through the Browser Gateway. A Browser Context stores the browser environment a bot should use, such as viewport size, locale, timezone, and mobile behavior.

Once a browser context is assigned to a bot, the bot can use browser tools to open pages, click elements, fill forms, capture screenshots, and inspect page content.


Concept: Browser Gateway

The Browser Gateway is powered by Playwright and provides browser automation for bots. In practice, a browser context acts like a reusable browser profile configuration for one or more bots.

Typical use cases include:

  • Navigating websites
  • Clicking buttons and links
  • Filling and submitting forms
  • Reading rendered page content
  • Capturing screenshots or PDFs

Creating a Browser Context

Manage contexts from the Browser Contexts page in the sidebar.

  1. Navigate to the Browser Contexts page.
  2. Click Add Browser Context.
  3. Fill in the following field:
    • Name: A display name for this browser context.
  4. Click Create.

Configuring a Browser Context

After creating a context, select it from the sidebar and update its settings.

FieldDescription
NameThe display name shown in the UI.
Viewport WidthBrowser viewport width in pixels.
Viewport HeightBrowser viewport height in pixels.
User AgentOptional custom browser user agent string.
Device Scale FactorOptional device pixel ratio.
LocaleOptional locale such as en-US or zh-CN.
Timezone IDOptional timezone such as UTC or Asia/Shanghai.
Is MobileEnables mobile-style browser behavior.
Ignore HTTPS ErrorsAllows navigation to sites with invalid HTTPS certificates.

Managing Contexts

  • Edit: Select a context and update its configuration.
  • Delete: Remove a context you no longer use.

Assigning a Browser Context to a Bot

  1. Navigate to the Bots page and open your bot.
  2. Go to the Settings tab.
  3. Find the Browser Context dropdown.
  4. Select the context you created.
  5. Click Save.

After saving, the bot can use that browser context when browser tools are invoked.


Bot Interaction

When a browser context is configured, the bot can use built-in browser tools such as:

  • browser_action: perform actions like navigation, click, fill, select, scroll, tab management, screenshot, or PDF export
  • browser_observe: inspect the current page and gather information for the model

This lets the bot interact with real websites instead of relying only on static HTML or search results.


Next Steps

',30)])])}const p=e(n,[["render",s]]);export{b as __pageData,p as default}; diff --git a/assets/getting-started_browser.md.CHy6pyTr.lean.js b/assets/getting-started_browser.md.B8YEEooM.lean.js similarity index 86% rename from assets/getting-started_browser.md.CHy6pyTr.lean.js rename to assets/getting-started_browser.md.B8YEEooM.lean.js index f5f27b36..805ada35 100644 --- a/assets/getting-started_browser.md.CHy6pyTr.lean.js +++ b/assets/getting-started_browser.md.B8YEEooM.lean.js @@ -1 +1 @@ -import{_ as e,o,c as r,ag as a}from"./chunks/framework.ePeAWSvT.js";const b=JSON.parse('{"title":"Browser Contexts","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/browser.md","filePath":"getting-started/browser.md","lastUpdated":1772873936000}'),n={name:"getting-started/browser.md"};function s(i,t,l,d,c,g){return o(),r("div",null,[...t[0]||(t[0]=[a("",30)])])}const p=e(n,[["render",s]]);export{b as __pageData,p as default}; +import{_ as e,o,c as r,ag as a}from"./chunks/framework.BZohXCq9.js";const b=JSON.parse('{"title":"Browser Contexts","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/browser.md","filePath":"getting-started/browser.md","lastUpdated":1772873936000}'),n={name:"getting-started/browser.md"};function s(i,t,l,d,c,g){return o(),r("div",null,[...t[0]||(t[0]=[a("",30)])])}const p=e(n,[["render",s]]);export{b as __pageData,p as default}; diff --git a/assets/getting-started_channels.md.C0YPWL-y.js b/assets/getting-started_channels.md.C0YPWL-y.js new file mode 100644 index 00000000..85597a20 --- /dev/null +++ b/assets/getting-started_channels.md.C0YPWL-y.js @@ -0,0 +1 @@ +import{_ as a,o as t,c as n,ag as o}from"./chunks/framework.BZohXCq9.js";const g=JSON.parse('{"title":"Bot Channels","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/channels.md","filePath":"getting-started/channels.md","lastUpdated":1773070648000}'),i={name:"getting-started/channels.md"};function r(l,e,s,h,d,c){return t(),n("div",null,[...e[0]||(e[0]=[o('

Bot Channels

Channels connect your Bot to various messaging platforms, allowing you to interact with it using your favorite chat applications.

Concept: Unified Communication

Memoh acts as a hub that bridges different messaging services. You can configure multiple channels for a single bot, enabling it to chat on Telegram, Discord, and more simultaneously.


Supported Channels

Configure your bot's connections from the Channels tab in the Bot Detail page.

For detailed step-by-step guides on how to create and configure bots for each platform, see:


Configuration Flow

1. Adding a Channel

  1. Click Add Channel.
  2. Select the platform from the list.
  3. Fill in the required credentials and configuration. The fields are dynamic and change based on the selected channel.

2. Common Fields

FieldDescription
CredentialsAPI tokens, secrets, or bot keys provided by the platform.
DisabledQuickly enable or disable a channel without removing its configuration.
RoutingConfigure how messages are mapped between the platform and Memoh.

3. Special Case: Feishu Webhook

If using Feishu in webhook inbound mode:

  1. Memoh will generate a Webhook Callback URL.
  2. Copy this URL and paste it into your Feishu App's event configuration.
  3. This allows Feishu to send messages directly to Memoh.

Operations

  • Save: Update the configuration.
  • Save and Enable: Update and immediately activate the channel.
  • Enable/Disable Toggle: Switch the channel's active status.
  • Delete: Permanently remove a channel's configuration.
',22)])])}const m=a(i,[["render",r]]);export{g as __pageData,m as default}; diff --git a/assets/getting-started_channels.md.C0YPWL-y.lean.js b/assets/getting-started_channels.md.C0YPWL-y.lean.js new file mode 100644 index 00000000..7497513a --- /dev/null +++ b/assets/getting-started_channels.md.C0YPWL-y.lean.js @@ -0,0 +1 @@ +import{_ as a,o as t,c as n,ag as o}from"./chunks/framework.BZohXCq9.js";const g=JSON.parse('{"title":"Bot Channels","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/channels.md","filePath":"getting-started/channels.md","lastUpdated":1773070648000}'),i={name:"getting-started/channels.md"};function r(l,e,s,h,d,c){return t(),n("div",null,[...e[0]||(e[0]=[o("",22)])])}const m=a(i,[["render",r]]);export{g as __pageData,m as default}; diff --git a/assets/getting-started_channels.md.DiSUpicV.js b/assets/getting-started_channels.md.DiSUpicV.js deleted file mode 100644 index 146f24ff..00000000 --- a/assets/getting-started_channels.md.DiSUpicV.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,o as t,c as n,ag as o}from"./chunks/framework.ePeAWSvT.js";const g=JSON.parse('{"title":"Bot Channels","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/channels.md","filePath":"getting-started/channels.md","lastUpdated":1772359263000}'),i={name:"getting-started/channels.md"};function r(l,e,s,h,d,c){return t(),n("div",null,[...e[0]||(e[0]=[o('

Bot Channels

Channels connect your Bot to various messaging platforms, allowing you to interact with it using your favorite chat applications.

Concept: Unified Communication

Memoh acts as a hub that bridges different messaging services. You can configure multiple channels for a single bot, enabling it to chat on Telegram, Discord, and more simultaneously.


Supported Channels

Configure your bot's connections from the Channels tab in the Bot Detail page.

For detailed step-by-step guides on how to create and configure bots for each platform, see:


Configuration Flow

1. Adding a Channel

  1. Click Add Channel.
  2. Select the platform from the list.
  3. Fill in the required credentials and configuration. The fields are dynamic and change based on the selected channel.

2. Common Fields

FieldDescription
CredentialsAPI tokens, secrets, or bot keys provided by the platform.
DisabledQuickly enable or disable a channel without removing its configuration.
RoutingConfigure how messages are mapped between the platform and Memoh.

3. Special Case: Feishu Webhook

If using Feishu in webhook inbound mode:

  1. Memoh will generate a Webhook Callback URL.
  2. Copy this URL and paste it into your Feishu App's event configuration.
  3. This allows Feishu to send messages directly to Memoh.

Operations

  • Save: Update the configuration.
  • Save and Enable: Update and immediately activate the channel.
  • Enable/Disable Toggle: Switch the channel's active status.
  • Delete: Permanently remove a channel's configuration.
',22)])])}const p=a(i,[["render",r]]);export{g as __pageData,p as default}; diff --git a/assets/getting-started_channels.md.DiSUpicV.lean.js b/assets/getting-started_channels.md.DiSUpicV.lean.js deleted file mode 100644 index 0773e614..00000000 --- a/assets/getting-started_channels.md.DiSUpicV.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,o as t,c as n,ag as o}from"./chunks/framework.ePeAWSvT.js";const g=JSON.parse('{"title":"Bot Channels","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/channels.md","filePath":"getting-started/channels.md","lastUpdated":1772359263000}'),i={name:"getting-started/channels.md"};function r(l,e,s,h,d,c){return t(),n("div",null,[...e[0]||(e[0]=[o("",22)])])}const p=a(i,[["render",r]]);export{g as __pageData,p as default}; diff --git a/assets/getting-started_container.md.CiSK-fMx.js b/assets/getting-started_container.md.D49M0dHe.js similarity index 97% rename from assets/getting-started_container.md.CiSK-fMx.js rename to assets/getting-started_container.md.D49M0dHe.js index bb50f1ed..0d8d2212 100644 --- a/assets/getting-started_container.md.CiSK-fMx.js +++ b/assets/getting-started_container.md.D49M0dHe.js @@ -1 +1 @@ -import{_ as e,o as a,c as n,ag as o}from"./chunks/framework.ePeAWSvT.js";const g=JSON.parse('{"title":"Bot Container Management","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/container.md","filePath":"getting-started/container.md","lastUpdated":1772359263000}'),i={name:"getting-started/container.md"};function s(r,t,l,h,c,p){return a(),n("div",null,[...t[0]||(t[0]=[o('

Bot Container Management

Every Bot in Memoh operates within its own isolated container environment. This isolation ensures security, provides a dedicated filesystem, and allows the bot to execute code or commands without affecting other bots or the host system.

Concept: The Isolated Workspace

The container acts as the bot's private "computer." Within it, the bot can:

  • Store and modify files
  • Install software via package managers
  • Execute scripts
  • Maintain state across multiple sessions

Operations

Manage the lifecycle of your bot's environment from the Container tab in the Bot Detail page.

Lifecycle Actions

  • Create: Initialize the container if it doesn't exist (using the configured image).
  • Start: Launch the container. The bot must have a running container to perform many operations like file editing or executing tools.
  • Stop: Gracefully shut down the container to save resources.
  • Delete: Remove the container instance. This will delete the temporary state but preserve the data in persistent volumes.

Container Information

The Container tab displays real-time data about the bot's runtime:

  • Container ID: Unique identifier for the instance.
  • Status: Whether it's currently running, stopped, or creating.
  • Image: The Docker/Containerd image used as the base.
  • Paths: Host and container paths for data persistence.
  • Tasks: Number of active background tasks running in the container.

Snapshots

Snapshots allow you to capture the current state of the bot's container and restore it later. This is useful for:

  • Saving a known good configuration
  • Versioning the bot's environment
  • Testing complex changes safely

Creating a Snapshot

  1. Ensure the container is stopped or in a stable state.
  2. Click Create Snapshot.
  3. Provide a name for the snapshot.

Restoring a Snapshot

  • Find the desired snapshot in the list and click Restore. This will reset the container to the captured state.

Managing Snapshots

  • View a list of existing snapshots with their creation timestamps and parent relationships.
  • Use the Delete button next to a snapshot to remove it.
',24)])])}const u=e(i,[["render",s]]);export{g as __pageData,u as default}; +import{_ as e,o as a,c as n,ag as o}from"./chunks/framework.BZohXCq9.js";const g=JSON.parse('{"title":"Bot Container Management","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/container.md","filePath":"getting-started/container.md","lastUpdated":1772359263000}'),i={name:"getting-started/container.md"};function s(r,t,l,h,c,p){return a(),n("div",null,[...t[0]||(t[0]=[o('

Bot Container Management

Every Bot in Memoh operates within its own isolated container environment. This isolation ensures security, provides a dedicated filesystem, and allows the bot to execute code or commands without affecting other bots or the host system.

Concept: The Isolated Workspace

The container acts as the bot's private "computer." Within it, the bot can:

  • Store and modify files
  • Install software via package managers
  • Execute scripts
  • Maintain state across multiple sessions

Operations

Manage the lifecycle of your bot's environment from the Container tab in the Bot Detail page.

Lifecycle Actions

  • Create: Initialize the container if it doesn't exist (using the configured image).
  • Start: Launch the container. The bot must have a running container to perform many operations like file editing or executing tools.
  • Stop: Gracefully shut down the container to save resources.
  • Delete: Remove the container instance. This will delete the temporary state but preserve the data in persistent volumes.

Container Information

The Container tab displays real-time data about the bot's runtime:

  • Container ID: Unique identifier for the instance.
  • Status: Whether it's currently running, stopped, or creating.
  • Image: The Docker/Containerd image used as the base.
  • Paths: Host and container paths for data persistence.
  • Tasks: Number of active background tasks running in the container.

Snapshots

Snapshots allow you to capture the current state of the bot's container and restore it later. This is useful for:

  • Saving a known good configuration
  • Versioning the bot's environment
  • Testing complex changes safely

Creating a Snapshot

  1. Ensure the container is stopped or in a stable state.
  2. Click Create Snapshot.
  3. Provide a name for the snapshot.

Restoring a Snapshot

  • Find the desired snapshot in the list and click Restore. This will reset the container to the captured state.

Managing Snapshots

  • View a list of existing snapshots with their creation timestamps and parent relationships.
  • Use the Delete button next to a snapshot to remove it.
',24)])])}const u=e(i,[["render",s]]);export{g as __pageData,u as default}; diff --git a/assets/getting-started_container.md.CiSK-fMx.lean.js b/assets/getting-started_container.md.D49M0dHe.lean.js similarity index 73% rename from assets/getting-started_container.md.CiSK-fMx.lean.js rename to assets/getting-started_container.md.D49M0dHe.lean.js index b52ae5a6..5d49e036 100644 --- a/assets/getting-started_container.md.CiSK-fMx.lean.js +++ b/assets/getting-started_container.md.D49M0dHe.lean.js @@ -1 +1 @@ -import{_ as e,o as a,c as n,ag as o}from"./chunks/framework.ePeAWSvT.js";const g=JSON.parse('{"title":"Bot Container Management","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/container.md","filePath":"getting-started/container.md","lastUpdated":1772359263000}'),i={name:"getting-started/container.md"};function s(r,t,l,h,c,p){return a(),n("div",null,[...t[0]||(t[0]=[o("",24)])])}const u=e(i,[["render",s]]);export{g as __pageData,u as default}; +import{_ as e,o as a,c as n,ag as o}from"./chunks/framework.BZohXCq9.js";const g=JSON.parse('{"title":"Bot Container Management","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/container.md","filePath":"getting-started/container.md","lastUpdated":1772359263000}'),i={name:"getting-started/container.md"};function s(r,t,l,h,c,p){return a(),n("div",null,[...t[0]||(t[0]=[o("",24)])])}const u=e(i,[["render",s]]);export{g as __pageData,u as default}; diff --git a/assets/getting-started_email.md.CKJOqdzG.js b/assets/getting-started_email.md.BRkUZLh2.js similarity index 97% rename from assets/getting-started_email.md.CKJOqdzG.js rename to assets/getting-started_email.md.BRkUZLh2.js index 81de4be8..33a6819d 100644 --- a/assets/getting-started_email.md.CKJOqdzG.js +++ b/assets/getting-started_email.md.BRkUZLh2.js @@ -1 +1 @@ -import{_ as i,o as a,c as o,ag as t}from"./chunks/framework.ePeAWSvT.js";const m=JSON.parse('{"title":"Email Providers and Bindings","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/email.md","filePath":"getting-started/email.md","lastUpdated":1772359263000}'),n={name:"getting-started/email.md"};function r(l,e,s,d,g,c){return a(),o("div",null,[...e[0]||(e[0]=[t('

Email Providers and Bindings

Memoh allows your Bot to send and receive emails, providing another powerful channel for communication and task management.

Concept: Email as a Bot Channel

Connecting email to your Bot involves two steps:

  1. Email Provider: Configure a connection to an email service (like Mailgun or a generic SMTP server).
  2. Email Binding: Link a specific email address from a provider to a Bot.

Email Provider

Manage your email service connections from the Email Provider page in the sidebar.

Creating a Provider

  1. Navigate to the Email Provider page from the sidebar.
  2. Click Add Email Provider.
  3. Choose the provider type:
    • Mailgun: For high-volume delivery.
    • Generic SMTP: For traditional email servers.
  4. Fill in the required fields (e.g., domain, api_key, host, port, username, password).
  5. Click Create.

Bot Email Bindings

Configure your bot's email capabilities from the Email tab in the Bot Detail page.

Adding a Binding

  1. Click Add Binding.
  2. Select the Email Provider you created.
  3. Provide the Email Address to be associated with the bot.
  4. Set the bot's permissions:
    • Can Read: If enabled, the bot can check and process incoming emails.
    • Can Write: If enabled, the bot can compose and send outgoing emails.
    • Can Delete: If enabled, the bot can manage its own email inbox.
  5. Click Create.

Outbox and History

The Email tab also provides an Outbox showing an audit log of all emails sent by the bot:

  • To: The recipient's email address.
  • Subject: The email's subject line.
  • Status: Whether the email was sent successfully.
  • Sent At: The timestamp of the email delivery.

Bot Interaction

  • The bot can use its email permissions to send reports, respond to user inquiries, or trigger actions based on incoming mail.
  • Outgoing emails are tracked in the outbox for monitoring and troubleshooting.
  • The bot handles email in a structured way, allowing it to "converse" via email just as it does via chat.
',22)])])}const u=i(n,[["render",r]]);export{m as __pageData,u as default}; +import{_ as i,o as a,c as o,ag as t}from"./chunks/framework.BZohXCq9.js";const m=JSON.parse('{"title":"Email Providers and Bindings","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/email.md","filePath":"getting-started/email.md","lastUpdated":1772359263000}'),n={name:"getting-started/email.md"};function r(l,e,s,d,g,c){return a(),o("div",null,[...e[0]||(e[0]=[t('

Email Providers and Bindings

Memoh allows your Bot to send and receive emails, providing another powerful channel for communication and task management.

Concept: Email as a Bot Channel

Connecting email to your Bot involves two steps:

  1. Email Provider: Configure a connection to an email service (like Mailgun or a generic SMTP server).
  2. Email Binding: Link a specific email address from a provider to a Bot.

Email Provider

Manage your email service connections from the Email Provider page in the sidebar.

Creating a Provider

  1. Navigate to the Email Provider page from the sidebar.
  2. Click Add Email Provider.
  3. Choose the provider type:
    • Mailgun: For high-volume delivery.
    • Generic SMTP: For traditional email servers.
  4. Fill in the required fields (e.g., domain, api_key, host, port, username, password).
  5. Click Create.

Bot Email Bindings

Configure your bot's email capabilities from the Email tab in the Bot Detail page.

Adding a Binding

  1. Click Add Binding.
  2. Select the Email Provider you created.
  3. Provide the Email Address to be associated with the bot.
  4. Set the bot's permissions:
    • Can Read: If enabled, the bot can check and process incoming emails.
    • Can Write: If enabled, the bot can compose and send outgoing emails.
    • Can Delete: If enabled, the bot can manage its own email inbox.
  5. Click Create.

Outbox and History

The Email tab also provides an Outbox showing an audit log of all emails sent by the bot:

  • To: The recipient's email address.
  • Subject: The email's subject line.
  • Status: Whether the email was sent successfully.
  • Sent At: The timestamp of the email delivery.

Bot Interaction

  • The bot can use its email permissions to send reports, respond to user inquiries, or trigger actions based on incoming mail.
  • Outgoing emails are tracked in the outbox for monitoring and troubleshooting.
  • The bot handles email in a structured way, allowing it to "converse" via email just as it does via chat.
',22)])])}const u=i(n,[["render",r]]);export{m as __pageData,u as default}; diff --git a/assets/getting-started_email.md.CKJOqdzG.lean.js b/assets/getting-started_email.md.BRkUZLh2.lean.js similarity index 72% rename from assets/getting-started_email.md.CKJOqdzG.lean.js rename to assets/getting-started_email.md.BRkUZLh2.lean.js index d2ff4e87..24e87fb2 100644 --- a/assets/getting-started_email.md.CKJOqdzG.lean.js +++ b/assets/getting-started_email.md.BRkUZLh2.lean.js @@ -1 +1 @@ -import{_ as i,o as a,c as o,ag as t}from"./chunks/framework.ePeAWSvT.js";const m=JSON.parse('{"title":"Email Providers and Bindings","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/email.md","filePath":"getting-started/email.md","lastUpdated":1772359263000}'),n={name:"getting-started/email.md"};function r(l,e,s,d,g,c){return a(),o("div",null,[...e[0]||(e[0]=[t("",22)])])}const u=i(n,[["render",r]]);export{m as __pageData,u as default}; +import{_ as i,o as a,c as o,ag as t}from"./chunks/framework.BZohXCq9.js";const m=JSON.parse('{"title":"Email Providers and Bindings","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/email.md","filePath":"getting-started/email.md","lastUpdated":1772359263000}'),n={name:"getting-started/email.md"};function r(l,e,s,d,g,c){return a(),o("div",null,[...e[0]||(e[0]=[t("",22)])])}const u=i(n,[["render",r]]);export{m as __pageData,u as default}; diff --git a/assets/getting-started_files.md.Cl6keVS-.js b/assets/getting-started_files.md.CczR71or.js similarity index 96% rename from assets/getting-started_files.md.Cl6keVS-.js rename to assets/getting-started_files.md.CczR71or.js index 426faf79..1f2104ec 100644 --- a/assets/getting-started_files.md.Cl6keVS-.js +++ b/assets/getting-started_files.md.CczR71or.js @@ -1 +1 @@ -import{_ as t,o as i,c as a,ag as o}from"./chunks/framework.ePeAWSvT.js";const m=JSON.parse('{"title":"Bot Files Management","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/files.md","filePath":"getting-started/files.md","lastUpdated":1772359263000}'),n={name:"getting-started/files.md"};function r(s,e,l,g,d,h){return i(),a("div",null,[...e[0]||(e[0]=[o('

Bot Files Management

Every Memoh Bot has its own dedicated filesystem inside its isolated container. You can manage this filesystem directly from the Files tab in the Bot Detail page.


Operations

The FileManager component provides a familiar file-browsing experience with a toolbar, directory tree, and integrated editor.

Browsing and Navigation

  • Breadcrumb Navigation: Quickly move between parent directories.
  • Refresh: Reload the file list to see the latest changes (e.g., files created by the bot).
  • New Folder: Create a directory within the current path.

Managing Files

  • Upload: Select files from your local computer to transfer them into the bot's container.
  • Rename: Click on a file or folder and use the rename action to update its identifier.
  • Delete: Remove files or folders (with recursive support for directories).
  • Download: Retrieve a file from the bot's container back to your local machine.

Viewing and Editing

The integrated FileViewer allows you to interact with the bot's files without leaving the web UI.

Text Files

  • Read/Edit: Click a text file (e.g., .md, .js, .py, .toml) to open it in the built-in Monaco Editor.
  • Syntax Highlighting: Supports common programming languages and configuration formats.
  • Save: Modify the file's content and click Save to apply the changes to the bot's filesystem.

Images

  • Preview: Click an image file (e.g., .png, .jpg, .webp) to see a visual preview directly in the file manager.

Bot Interaction with Files

Remember that the bot itself can also perform these operations:

  • Use its Skills or MCP tools to read, write, and manage its own files.
  • The Files tab is your portal to monitor and manually intervene in the bot's workspace.
',20)])])}const f=t(n,[["render",r]]);export{m as __pageData,f as default}; +import{_ as t,o as i,c as a,ag as o}from"./chunks/framework.BZohXCq9.js";const m=JSON.parse('{"title":"Bot Files Management","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/files.md","filePath":"getting-started/files.md","lastUpdated":1772359263000}'),n={name:"getting-started/files.md"};function r(s,e,l,g,d,h){return i(),a("div",null,[...e[0]||(e[0]=[o('

Bot Files Management

Every Memoh Bot has its own dedicated filesystem inside its isolated container. You can manage this filesystem directly from the Files tab in the Bot Detail page.


Operations

The FileManager component provides a familiar file-browsing experience with a toolbar, directory tree, and integrated editor.

Browsing and Navigation

  • Breadcrumb Navigation: Quickly move between parent directories.
  • Refresh: Reload the file list to see the latest changes (e.g., files created by the bot).
  • New Folder: Create a directory within the current path.

Managing Files

  • Upload: Select files from your local computer to transfer them into the bot's container.
  • Rename: Click on a file or folder and use the rename action to update its identifier.
  • Delete: Remove files or folders (with recursive support for directories).
  • Download: Retrieve a file from the bot's container back to your local machine.

Viewing and Editing

The integrated FileViewer allows you to interact with the bot's files without leaving the web UI.

Text Files

  • Read/Edit: Click a text file (e.g., .md, .js, .py, .toml) to open it in the built-in Monaco Editor.
  • Syntax Highlighting: Supports common programming languages and configuration formats.
  • Save: Modify the file's content and click Save to apply the changes to the bot's filesystem.

Images

  • Preview: Click an image file (e.g., .png, .jpg, .webp) to see a visual preview directly in the file manager.

Bot Interaction with Files

Remember that the bot itself can also perform these operations:

  • Use its Skills or MCP tools to read, write, and manage its own files.
  • The Files tab is your portal to monitor and manually intervene in the bot's workspace.
',20)])])}const f=t(n,[["render",r]]);export{m as __pageData,f as default}; diff --git a/assets/getting-started_files.md.Cl6keVS-.lean.js b/assets/getting-started_files.md.CczR71or.lean.js similarity index 72% rename from assets/getting-started_files.md.Cl6keVS-.lean.js rename to assets/getting-started_files.md.CczR71or.lean.js index 9049980a..fe9c3c72 100644 --- a/assets/getting-started_files.md.Cl6keVS-.lean.js +++ b/assets/getting-started_files.md.CczR71or.lean.js @@ -1 +1 @@ -import{_ as t,o as i,c as a,ag as o}from"./chunks/framework.ePeAWSvT.js";const m=JSON.parse('{"title":"Bot Files Management","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/files.md","filePath":"getting-started/files.md","lastUpdated":1772359263000}'),n={name:"getting-started/files.md"};function r(s,e,l,g,d,h){return i(),a("div",null,[...e[0]||(e[0]=[o("",20)])])}const f=t(n,[["render",r]]);export{m as __pageData,f as default}; +import{_ as t,o as i,c as a,ag as o}from"./chunks/framework.BZohXCq9.js";const m=JSON.parse('{"title":"Bot Files Management","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/files.md","filePath":"getting-started/files.md","lastUpdated":1772359263000}'),n={name:"getting-started/files.md"};function r(s,e,l,g,d,h){return i(),a("div",null,[...e[0]||(e[0]=[o("",20)])])}const f=t(n,[["render",r]]);export{m as __pageData,f as default}; diff --git a/assets/getting-started_heartbeat.md.CgIS9a7z.js b/assets/getting-started_heartbeat.md.B-SMiJUD.js similarity index 98% rename from assets/getting-started_heartbeat.md.CgIS9a7z.js rename to assets/getting-started_heartbeat.md.B-SMiJUD.js index f030bfc0..8fae082a 100644 --- a/assets/getting-started_heartbeat.md.CgIS9a7z.js +++ b/assets/getting-started_heartbeat.md.B-SMiJUD.js @@ -1 +1 @@ -import{_ as e,o,c as a,ag as r}from"./chunks/framework.ePeAWSvT.js";const c=JSON.parse('{"title":"Bot Heartbeat","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/heartbeat.md","filePath":"getting-started/heartbeat.md","lastUpdated":1772359263000}'),n={name:"getting-started/heartbeat.md"};function i(s,t,l,h,d,g){return o(),a("div",null,[...t[0]||(t[0]=[r('

Bot Heartbeat

The Heartbeat feature allows you to schedule periodic tasks for your Bot, enabling it to perform autonomous actions even when you aren't chatting with it.

Concept: Scheduled Autonomy

A Heartbeat is a recurring trigger that prompts the bot to "think" and execute its skills or tools at a set interval. This is useful for:

  • Periodic status checks
  • Automatic data collection
  • Cleaning up the filesystem
  • Sending scheduled notifications

Configuration

Configure the heartbeat from the Heartbeat tab in the Bot Detail page.

FieldDescription
EnabledToggle the heartbeat on or off.
IntervalHow often (in minutes) the heartbeat should trigger. The default is 30 minutes.
ModelThe LLM used to execute the heartbeat task. This can be different from the main chat model.

Logs and Monitoring

The Heartbeat tab provides a detailed audit log of every execution:

  • Status: Whether the heartbeat completed successfully (ok), encountered an issue (alert), or failed (error).
  • Time: When the heartbeat was triggered.
  • Duration: How long the bot took to process the task.
  • Result: A summary of the bot's action or response during that heartbeat.

Managing Logs

  • Filter by Status: Quickly find errors or alerts.
  • Refresh: Load the latest log entries.
  • Clear Logs: Remove old heartbeat records to keep the interface clean.
  • Load More: View older history.

Bot Interaction

  • During a heartbeat, the bot receives a special system prompt that it should perform its "routine" tasks.
  • The bot can use any of its assigned Skills or MCP tools during a heartbeat.
  • Heartbeat logs provide the "memory" of the bot's autonomous activities.
',18)])])}const b=e(n,[["render",i]]);export{c as __pageData,b as default}; +import{_ as e,o,c as a,ag as r}from"./chunks/framework.BZohXCq9.js";const c=JSON.parse('{"title":"Bot Heartbeat","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/heartbeat.md","filePath":"getting-started/heartbeat.md","lastUpdated":1772359263000}'),n={name:"getting-started/heartbeat.md"};function i(s,t,l,h,d,g){return o(),a("div",null,[...t[0]||(t[0]=[r('

Bot Heartbeat

The Heartbeat feature allows you to schedule periodic tasks for your Bot, enabling it to perform autonomous actions even when you aren't chatting with it.

Concept: Scheduled Autonomy

A Heartbeat is a recurring trigger that prompts the bot to "think" and execute its skills or tools at a set interval. This is useful for:

  • Periodic status checks
  • Automatic data collection
  • Cleaning up the filesystem
  • Sending scheduled notifications

Configuration

Configure the heartbeat from the Heartbeat tab in the Bot Detail page.

FieldDescription
EnabledToggle the heartbeat on or off.
IntervalHow often (in minutes) the heartbeat should trigger. The default is 30 minutes.
ModelThe LLM used to execute the heartbeat task. This can be different from the main chat model.

Logs and Monitoring

The Heartbeat tab provides a detailed audit log of every execution:

  • Status: Whether the heartbeat completed successfully (ok), encountered an issue (alert), or failed (error).
  • Time: When the heartbeat was triggered.
  • Duration: How long the bot took to process the task.
  • Result: A summary of the bot's action or response during that heartbeat.

Managing Logs

  • Filter by Status: Quickly find errors or alerts.
  • Refresh: Load the latest log entries.
  • Clear Logs: Remove old heartbeat records to keep the interface clean.
  • Load More: View older history.

Bot Interaction

  • During a heartbeat, the bot receives a special system prompt that it should perform its "routine" tasks.
  • The bot can use any of its assigned Skills or MCP tools during a heartbeat.
  • Heartbeat logs provide the "memory" of the bot's autonomous activities.
',18)])])}const b=e(n,[["render",i]]);export{c as __pageData,b as default}; diff --git a/assets/getting-started_heartbeat.md.CgIS9a7z.lean.js b/assets/getting-started_heartbeat.md.B-SMiJUD.lean.js similarity index 86% rename from assets/getting-started_heartbeat.md.CgIS9a7z.lean.js rename to assets/getting-started_heartbeat.md.B-SMiJUD.lean.js index 7c1de4f0..ee221e78 100644 --- a/assets/getting-started_heartbeat.md.CgIS9a7z.lean.js +++ b/assets/getting-started_heartbeat.md.B-SMiJUD.lean.js @@ -1 +1 @@ -import{_ as e,o,c as a,ag as r}from"./chunks/framework.ePeAWSvT.js";const c=JSON.parse('{"title":"Bot Heartbeat","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/heartbeat.md","filePath":"getting-started/heartbeat.md","lastUpdated":1772359263000}'),n={name:"getting-started/heartbeat.md"};function i(s,t,l,h,d,g){return o(),a("div",null,[...t[0]||(t[0]=[r("",18)])])}const b=e(n,[["render",i]]);export{c as __pageData,b as default}; +import{_ as e,o,c as a,ag as r}from"./chunks/framework.BZohXCq9.js";const c=JSON.parse('{"title":"Bot Heartbeat","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/heartbeat.md","filePath":"getting-started/heartbeat.md","lastUpdated":1772359263000}'),n={name:"getting-started/heartbeat.md"};function i(s,t,l,h,d,g){return o(),a("div",null,[...t[0]||(t[0]=[r("",18)])])}const b=e(n,[["render",i]]);export{c as __pageData,b as default}; diff --git a/assets/getting-started_mcp.md.DyRwe04F.js b/assets/getting-started_mcp.md.Bb2toM2o.js similarity index 98% rename from assets/getting-started_mcp.md.DyRwe04F.js rename to assets/getting-started_mcp.md.Bb2toM2o.js index 230d19ab..6f7fae54 100644 --- a/assets/getting-started_mcp.md.DyRwe04F.js +++ b/assets/getting-started_mcp.md.Bb2toM2o.js @@ -1 +1 @@ -import{_ as e,o,c as n,ag as r}from"./chunks/framework.ePeAWSvT.js";const g=JSON.parse('{"title":"MCP Connections","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/mcp.md","filePath":"getting-started/mcp.md","lastUpdated":1772359263000}'),a={name:"getting-started/mcp.md"};function s(i,t,c,d,l,h){return o(),n("div",null,[...t[0]||(t[0]=[r('

MCP Connections

Memoh fully supports the Model Context Protocol (MCP), allowing you to connect your Bot to external tool services and context providers.

Concept: Extending Bot Capabilities

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.


Connection Types

Configure MCP connections from the MCP tab in the Bot Detail page.

1. Stdio (Local Process)

This type of connection executes a local command on the server and communicates via standard input/output.

FieldDescription
CommandThe executable to run (e.g., npx, python3).
ArgumentsA list of command-line arguments (e.g., -y, @modelcontextprotocol/server-filesystem, /opt/memoh/data).
EnvKey-value pairs for environment variables.
CWDWorking directory for the process.

2. Remote (HTTP/SSE)

This type of connection connects to a remote MCP server over the network.

FieldDescription
URLThe endpoint of the remote MCP server.
HeadersCustom HTTP headers (e.g., for authentication).
TransportChoose between http or sse (Server-Sent Events).

Operations

  • Add Connection: Click Add, choose the type, and fill in the configuration.
  • Import JSON: Use the Import button to quickly add multiple connections from a standard mcpServers JSON config file.
  • Toggle Active: Enable or disable specific connections without deleting them.
  • Search: Quickly find a connection by name or ID.
  • Export: Export a connection configuration to a JSON file.

Bot Interaction

Once an MCP connection is active, the bot will automatically:

  • Discover the tools and resources exposed by the MCP server.
  • Use these tools to perform tasks requested by the user.
  • Include the context provided by the MCP server in its reasoning process.
',20)])])}const m=e(a,[["render",s]]);export{g as __pageData,m as default}; +import{_ as e,o,c as n,ag as r}from"./chunks/framework.BZohXCq9.js";const g=JSON.parse('{"title":"MCP Connections","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/mcp.md","filePath":"getting-started/mcp.md","lastUpdated":1772359263000}'),a={name:"getting-started/mcp.md"};function s(i,t,c,d,l,h){return o(),n("div",null,[...t[0]||(t[0]=[r('

MCP Connections

Memoh fully supports the Model Context Protocol (MCP), allowing you to connect your Bot to external tool services and context providers.

Concept: Extending Bot Capabilities

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.


Connection Types

Configure MCP connections from the MCP tab in the Bot Detail page.

1. Stdio (Local Process)

This type of connection executes a local command on the server and communicates via standard input/output.

FieldDescription
CommandThe executable to run (e.g., npx, python3).
ArgumentsA list of command-line arguments (e.g., -y, @modelcontextprotocol/server-filesystem, /opt/memoh/data).
EnvKey-value pairs for environment variables.
CWDWorking directory for the process.

2. Remote (HTTP/SSE)

This type of connection connects to a remote MCP server over the network.

FieldDescription
URLThe endpoint of the remote MCP server.
HeadersCustom HTTP headers (e.g., for authentication).
TransportChoose between http or sse (Server-Sent Events).

Operations

  • Add Connection: Click Add, choose the type, and fill in the configuration.
  • Import JSON: Use the Import button to quickly add multiple connections from a standard mcpServers JSON config file.
  • Toggle Active: Enable or disable specific connections without deleting them.
  • Search: Quickly find a connection by name or ID.
  • Export: Export a connection configuration to a JSON file.

Bot Interaction

Once an MCP connection is active, the bot will automatically:

  • Discover the tools and resources exposed by the MCP server.
  • Use these tools to perform tasks requested by the user.
  • Include the context provided by the MCP server in its reasoning process.
',20)])])}const m=e(a,[["render",s]]);export{g as __pageData,m as default}; diff --git a/assets/getting-started_mcp.md.DyRwe04F.lean.js b/assets/getting-started_mcp.md.Bb2toM2o.lean.js similarity index 85% rename from assets/getting-started_mcp.md.DyRwe04F.lean.js rename to assets/getting-started_mcp.md.Bb2toM2o.lean.js index 831f9614..1816ddc8 100644 --- a/assets/getting-started_mcp.md.DyRwe04F.lean.js +++ b/assets/getting-started_mcp.md.Bb2toM2o.lean.js @@ -1 +1 @@ -import{_ as e,o,c as n,ag as r}from"./chunks/framework.ePeAWSvT.js";const g=JSON.parse('{"title":"MCP Connections","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/mcp.md","filePath":"getting-started/mcp.md","lastUpdated":1772359263000}'),a={name:"getting-started/mcp.md"};function s(i,t,c,d,l,h){return o(),n("div",null,[...t[0]||(t[0]=[r("",20)])])}const m=e(a,[["render",s]]);export{g as __pageData,m as default}; +import{_ as e,o,c as n,ag as r}from"./chunks/framework.BZohXCq9.js";const g=JSON.parse('{"title":"MCP Connections","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/mcp.md","filePath":"getting-started/mcp.md","lastUpdated":1772359263000}'),a={name:"getting-started/mcp.md"};function s(i,t,c,d,l,h){return o(),n("div",null,[...t[0]||(t[0]=[r("",20)])])}const m=e(a,[["render",s]]);export{g as __pageData,m as default}; diff --git a/assets/getting-started_memory.md.CVd8M6Eu.js b/assets/getting-started_memory.md.Dt7Ez9Lk.js similarity index 98% rename from assets/getting-started_memory.md.CVd8M6Eu.js rename to assets/getting-started_memory.md.Dt7Ez9Lk.js index ec873221..9569b095 100644 --- a/assets/getting-started_memory.md.CVd8M6Eu.js +++ b/assets/getting-started_memory.md.Dt7Ez9Lk.js @@ -1 +1 @@ -import{_ as t,o,c as r,ag as a}from"./chunks/framework.ePeAWSvT.js";const u=JSON.parse('{"title":"Bot Memory Management","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/memory.md","filePath":"getting-started/memory.md","lastUpdated":1772873936000}'),i={name:"getting-started/memory.md"};function n(s,e,m,l,c,h){return o(),r("div",null,[...e[0]||(e[0]=[a('

Bot Memory Management

Memoh's structured long-term memory system allows bots to remember information across multiple conversations, providing contextually relevant and personalized interactions.

Prerequisites

Before using the Memory tab, make sure your bot already has a Memory Provider configured.

  1. Create a provider from the Built-in Memory Provider guide.
  2. Open your bot's Settings tab.
  3. Select the provider in the Memory Provider field.
  4. Click Save.

Without a memory provider, the bot will not have an active memory backend configuration.


With the built-in memory provider, memories are stored in Memoh's memory system and retrieved through semantic search. When a user asks a question, Memoh finds the most relevant memories and includes them in the bot's runtime context.


Operations

Manage your bot's memories from the Memory tab in the Bot Detail page.

1. Creating Memories

  • New Memory: Manually enter a memory's content in the provided textarea.
  • From Conversation: Select specific messages from the bot's conversation history to extract into memory.

2. Searching and Managing

  • Search: Filter memories by ID or text content.
  • Edit: Modify existing memory entries directly in the list.
  • Delete: Remove memories that are no longer needed.

Memory Compression (Compact)

Over time, memories can accumulate and become redundant. The Compact feature helps optimize the memory pool.

  • Ratio: Set the compression ratio (for example 0.8, 0.5, or 0.3) to determine how much information is retained.
  • Decay Days: Optionally specify a time window to compact only memories older than a certain number of days.

Visualization: Vector Manifold

The Memory tab includes visual tools to help you understand how the memory system is performing:

Top-K Bucket Chart

Shows the distribution of relevant memories retrieved for the most recent queries.

CDF Curve (Cumulative Distribution Function)

Visualizes the scoring threshold of retrieved memories, helping you fine-tune how much relevant information the bot should consider.


Bot Interaction

  • The bot automatically searches and retrieves memories during chat.
  • The assigned Memory Provider controls the memory backend used by the bot.
  • For the built-in provider, you can optionally configure a Memory Model and an Embedding Model inside the provider settings.
  • Memories provide the long-term knowledge that makes each bot unique to its owner.
',30)])])}const g=t(i,[["render",n]]);export{u as __pageData,g as default}; +import{_ as t,o,c as r,ag as a}from"./chunks/framework.BZohXCq9.js";const u=JSON.parse('{"title":"Bot Memory Management","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/memory.md","filePath":"getting-started/memory.md","lastUpdated":1772873936000}'),i={name:"getting-started/memory.md"};function n(s,e,m,l,c,h){return o(),r("div",null,[...e[0]||(e[0]=[a('

Bot Memory Management

Memoh's structured long-term memory system allows bots to remember information across multiple conversations, providing contextually relevant and personalized interactions.

Prerequisites

Before using the Memory tab, make sure your bot already has a Memory Provider configured.

  1. Create a provider from the Built-in Memory Provider guide.
  2. Open your bot's Settings tab.
  3. Select the provider in the Memory Provider field.
  4. Click Save.

Without a memory provider, the bot will not have an active memory backend configuration.


With the built-in memory provider, memories are stored in Memoh's memory system and retrieved through semantic search. When a user asks a question, Memoh finds the most relevant memories and includes them in the bot's runtime context.


Operations

Manage your bot's memories from the Memory tab in the Bot Detail page.

1. Creating Memories

  • New Memory: Manually enter a memory's content in the provided textarea.
  • From Conversation: Select specific messages from the bot's conversation history to extract into memory.

2. Searching and Managing

  • Search: Filter memories by ID or text content.
  • Edit: Modify existing memory entries directly in the list.
  • Delete: Remove memories that are no longer needed.

Memory Compression (Compact)

Over time, memories can accumulate and become redundant. The Compact feature helps optimize the memory pool.

  • Ratio: Set the compression ratio (for example 0.8, 0.5, or 0.3) to determine how much information is retained.
  • Decay Days: Optionally specify a time window to compact only memories older than a certain number of days.

Visualization: Vector Manifold

The Memory tab includes visual tools to help you understand how the memory system is performing:

Top-K Bucket Chart

Shows the distribution of relevant memories retrieved for the most recent queries.

CDF Curve (Cumulative Distribution Function)

Visualizes the scoring threshold of retrieved memories, helping you fine-tune how much relevant information the bot should consider.


Bot Interaction

  • The bot automatically searches and retrieves memories during chat.
  • The assigned Memory Provider controls the memory backend used by the bot.
  • For the built-in provider, you can optionally configure a Memory Model and an Embedding Model inside the provider settings.
  • Memories provide the long-term knowledge that makes each bot unique to its owner.
',30)])])}const g=t(i,[["render",n]]);export{u as __pageData,g as default}; diff --git a/assets/getting-started_memory.md.CVd8M6Eu.lean.js b/assets/getting-started_memory.md.Dt7Ez9Lk.lean.js similarity index 86% rename from assets/getting-started_memory.md.CVd8M6Eu.lean.js rename to assets/getting-started_memory.md.Dt7Ez9Lk.lean.js index 4e617fab..e1b9cf6a 100644 --- a/assets/getting-started_memory.md.CVd8M6Eu.lean.js +++ b/assets/getting-started_memory.md.Dt7Ez9Lk.lean.js @@ -1 +1 @@ -import{_ as t,o,c as r,ag as a}from"./chunks/framework.ePeAWSvT.js";const u=JSON.parse('{"title":"Bot Memory Management","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/memory.md","filePath":"getting-started/memory.md","lastUpdated":1772873936000}'),i={name:"getting-started/memory.md"};function n(s,e,m,l,c,h){return o(),r("div",null,[...e[0]||(e[0]=[a("",30)])])}const g=t(i,[["render",n]]);export{u as __pageData,g as default}; +import{_ as t,o,c as r,ag as a}from"./chunks/framework.BZohXCq9.js";const u=JSON.parse('{"title":"Bot Memory Management","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/memory.md","filePath":"getting-started/memory.md","lastUpdated":1772873936000}'),i={name:"getting-started/memory.md"};function n(s,e,m,l,c,h){return o(),r("div",null,[...e[0]||(e[0]=[a("",30)])])}const g=t(i,[["render",n]]);export{u as __pageData,g as default}; diff --git a/assets/getting-started_provider-and-model.md.BGpLYgEh.js b/assets/getting-started_provider-and-model.md.BquaPnJe.js similarity index 98% rename from assets/getting-started_provider-and-model.md.BGpLYgEh.js rename to assets/getting-started_provider-and-model.md.BquaPnJe.js index cbe6fce5..79d562c8 100644 --- a/assets/getting-started_provider-and-model.md.BGpLYgEh.js +++ b/assets/getting-started_provider-and-model.md.BquaPnJe.js @@ -1 +1 @@ -import{_ as t,o,c as r,ag as d}from"./chunks/framework.ePeAWSvT.js";const p=JSON.parse('{"title":"LLM Provider and Model","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/provider-and-model.md","filePath":"getting-started/provider-and-model.md","lastUpdated":1772359263000}'),a={name:"getting-started/provider-and-model.md"};function i(n,e,l,s,g,h){return o(),r("div",null,[...e[0]||(e[0]=[d('

LLM Provider and Model

To use Memoh, you first need to configure at least one LLM Provider and at least one Model.

LLM Provider

An LLM Provider represents a connection to an AI service (like OpenAI, Anthropic, or a self-hosted compatible API). It stores the base URL and authentication credentials.

Creating a Provider

  1. Navigate to the Models page from the sidebar.
  2. Click the Add Provider button at the bottom of the sidebar.
  3. Fill in the following fields:
    • Name: A display name for this provider (e.g., "OpenAI").
    • Base URL: The root URL of the API (e.g., https://api.openai.com/v1).
    • API Key: Your authentication token for the service.
  4. Click Create.

Managing Providers

  • Edit: Select a provider from the list and use the form on the right to update its name, URL, or API key.
  • Delete: Use the Delete Provider button in the provider settings form.

Model

A Model is a specific AI instance (like gpt-4o or text-embedding-3-small) that belongs to a Provider. Memoh distinguishes between Chat models (for conversation) and Embedding models (for memory search).

Adding a Model

  1. Select a Provider from the list on the Models page.
  2. Click Add Model in the model list section.
  3. Configure the following fields:
FieldRequiredDescription
TypeYeschat for conversation, embedding for vector search.
Model IDYesThe exact identifier used by the provider (e.g., gpt-4o).
NameNoA friendly display name (defaults to Model ID).
Client TypeYes (Chat)The API protocol: openai-responses, openai-completions, anthropic-messages, or google-generative-ai.
Input ModalitiesYes (Chat)Capabilities supported: text (default), image, audio, video, file.
Supports ReasoningNoEnable if the model supports internal reasoning steps (e.g., OpenAI o1).
DimensionsYes (Embed)The vector size for embedding models (e.g., 1536).
  1. Click Create.

Managing Models

  • Edit: Click the edit icon next to a model in the list.
  • Delete: Click the trash icon next to a model to remove it.

Next Steps

Now that you have configured your models, you can proceed to Create and Configure a Bot.

',20)])])}const m=t(a,[["render",i]]);export{p as __pageData,m as default}; +import{_ as t,o,c as r,ag as d}from"./chunks/framework.BZohXCq9.js";const p=JSON.parse('{"title":"LLM Provider and Model","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/provider-and-model.md","filePath":"getting-started/provider-and-model.md","lastUpdated":1772359263000}'),a={name:"getting-started/provider-and-model.md"};function i(n,e,l,s,g,h){return o(),r("div",null,[...e[0]||(e[0]=[d('

LLM Provider and Model

To use Memoh, you first need to configure at least one LLM Provider and at least one Model.

LLM Provider

An LLM Provider represents a connection to an AI service (like OpenAI, Anthropic, or a self-hosted compatible API). It stores the base URL and authentication credentials.

Creating a Provider

  1. Navigate to the Models page from the sidebar.
  2. Click the Add Provider button at the bottom of the sidebar.
  3. Fill in the following fields:
    • Name: A display name for this provider (e.g., "OpenAI").
    • Base URL: The root URL of the API (e.g., https://api.openai.com/v1).
    • API Key: Your authentication token for the service.
  4. Click Create.

Managing Providers

  • Edit: Select a provider from the list and use the form on the right to update its name, URL, or API key.
  • Delete: Use the Delete Provider button in the provider settings form.

Model

A Model is a specific AI instance (like gpt-4o or text-embedding-3-small) that belongs to a Provider. Memoh distinguishes between Chat models (for conversation) and Embedding models (for memory search).

Adding a Model

  1. Select a Provider from the list on the Models page.
  2. Click Add Model in the model list section.
  3. Configure the following fields:
FieldRequiredDescription
TypeYeschat for conversation, embedding for vector search.
Model IDYesThe exact identifier used by the provider (e.g., gpt-4o).
NameNoA friendly display name (defaults to Model ID).
Client TypeYes (Chat)The API protocol: openai-responses, openai-completions, anthropic-messages, or google-generative-ai.
Input ModalitiesYes (Chat)Capabilities supported: text (default), image, audio, video, file.
Supports ReasoningNoEnable if the model supports internal reasoning steps (e.g., OpenAI o1).
DimensionsYes (Embed)The vector size for embedding models (e.g., 1536).
  1. Click Create.

Managing Models

  • Edit: Click the edit icon next to a model in the list.
  • Delete: Click the trash icon next to a model to remove it.

Next Steps

Now that you have configured your models, you can proceed to Create and Configure a Bot.

',20)])])}const m=t(a,[["render",i]]);export{p as __pageData,m as default}; diff --git a/assets/getting-started_provider-and-model.md.BGpLYgEh.lean.js b/assets/getting-started_provider-and-model.md.BquaPnJe.lean.js similarity index 87% rename from assets/getting-started_provider-and-model.md.BGpLYgEh.lean.js rename to assets/getting-started_provider-and-model.md.BquaPnJe.lean.js index 46e75682..57a0e749 100644 --- a/assets/getting-started_provider-and-model.md.BGpLYgEh.lean.js +++ b/assets/getting-started_provider-and-model.md.BquaPnJe.lean.js @@ -1 +1 @@ -import{_ as t,o,c as r,ag as d}from"./chunks/framework.ePeAWSvT.js";const p=JSON.parse('{"title":"LLM Provider and Model","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/provider-and-model.md","filePath":"getting-started/provider-and-model.md","lastUpdated":1772359263000}'),a={name:"getting-started/provider-and-model.md"};function i(n,e,l,s,g,h){return o(),r("div",null,[...e[0]||(e[0]=[d("",20)])])}const m=t(a,[["render",i]]);export{p as __pageData,m as default}; +import{_ as t,o,c as r,ag as d}from"./chunks/framework.BZohXCq9.js";const p=JSON.parse('{"title":"LLM Provider and Model","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/provider-and-model.md","filePath":"getting-started/provider-and-model.md","lastUpdated":1772359263000}'),a={name:"getting-started/provider-and-model.md"};function i(n,e,l,s,g,h){return o(),r("div",null,[...e[0]||(e[0]=[d("",20)])])}const m=t(a,[["render",i]]);export{p as __pageData,m as default}; diff --git a/assets/getting-started_schedule.md.B0pL41RB.js b/assets/getting-started_schedule.md.CNDu3SiN.js similarity index 98% rename from assets/getting-started_schedule.md.B0pL41RB.js rename to assets/getting-started_schedule.md.CNDu3SiN.js index e7ae0cf8..72566576 100644 --- a/assets/getting-started_schedule.md.B0pL41RB.js +++ b/assets/getting-started_schedule.md.CNDu3SiN.js @@ -1,4 +1,4 @@ -import{_ as t,o as a,c as s,ag as n}from"./chunks/framework.ePeAWSvT.js";const u=JSON.parse('{"title":"Scheduled Tasks","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/schedule.md","filePath":"getting-started/schedule.md","lastUpdated":1772359263000}'),i={name:"getting-started/schedule.md"};function r(o,e,l,d,h,c){return a(),s("div",null,[...e[0]||(e[0]=[n(`

Scheduled Tasks

Scheduled Tasks allow you to automate recurring bot actions using cron expressions. This is useful for sending periodic reports, checking external data, performing maintenance, or triggering any routine task without manual intervention.

Concept: Cron-Based Automation

A Schedule is a cron-triggered rule bound to a specific bot. When a schedule fires, it sends a command to the agent, which executes it using its available tools, skills, and context. The bot can then deliver results to any connected channel.


Schedule Fields

FieldDescription
NameA display name for the task (e.g., "Morning News Summary").
DescriptionA brief explanation of what the task does.
PatternA cron expression that defines when the task runs (e.g., 0 9 * * * for daily at 9:00 AM).
CommandThe natural-language instruction sent to the agent when the schedule triggers (e.g., "Summarize today's top tech news and send it to the Telegram channel").
EnabledWhether the schedule is currently active.
Max CallsOptional limit on the total number of executions. Leave empty for unlimited.
Current CallsThe number of times this schedule has already fired.

Cron Pattern Reference

The pattern field uses standard cron syntax with five fields:

┌───────────── minute (0–59)
+import{_ as t,o as a,c as s,ag as n}from"./chunks/framework.BZohXCq9.js";const u=JSON.parse('{"title":"Scheduled Tasks","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/schedule.md","filePath":"getting-started/schedule.md","lastUpdated":1772359263000}'),i={name:"getting-started/schedule.md"};function r(o,e,l,d,h,c){return a(),s("div",null,[...e[0]||(e[0]=[n(`

Scheduled Tasks

Scheduled Tasks allow you to automate recurring bot actions using cron expressions. This is useful for sending periodic reports, checking external data, performing maintenance, or triggering any routine task without manual intervention.

Concept: Cron-Based Automation

A Schedule is a cron-triggered rule bound to a specific bot. When a schedule fires, it sends a command to the agent, which executes it using its available tools, skills, and context. The bot can then deliver results to any connected channel.


Schedule Fields

FieldDescription
NameA display name for the task (e.g., "Morning News Summary").
DescriptionA brief explanation of what the task does.
PatternA cron expression that defines when the task runs (e.g., 0 9 * * * for daily at 9:00 AM).
CommandThe natural-language instruction sent to the agent when the schedule triggers (e.g., "Summarize today's top tech news and send it to the Telegram channel").
EnabledWhether the schedule is currently active.
Max CallsOptional limit on the total number of executions. Leave empty for unlimited.
Current CallsThe number of times this schedule has already fired.

Cron Pattern Reference

The pattern field uses standard cron syntax with five fields:

┌───────────── minute (0–59)
 │ ┌───────────── hour (0–23)
 │ │ ┌───────────── day of month (1–31)
 │ │ │ ┌───────────── month (1–12)
diff --git a/assets/getting-started_schedule.md.B0pL41RB.lean.js b/assets/getting-started_schedule.md.CNDu3SiN.lean.js
similarity index 72%
rename from assets/getting-started_schedule.md.B0pL41RB.lean.js
rename to assets/getting-started_schedule.md.CNDu3SiN.lean.js
index c7e44868..9d2f6719 100644
--- a/assets/getting-started_schedule.md.B0pL41RB.lean.js
+++ b/assets/getting-started_schedule.md.CNDu3SiN.lean.js
@@ -1 +1 @@
-import{_ as t,o as a,c as s,ag as n}from"./chunks/framework.ePeAWSvT.js";const u=JSON.parse('{"title":"Scheduled Tasks","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/schedule.md","filePath":"getting-started/schedule.md","lastUpdated":1772359263000}'),i={name:"getting-started/schedule.md"};function r(o,e,l,d,h,c){return a(),s("div",null,[...e[0]||(e[0]=[n("",35)])])}const g=t(i,[["render",r]]);export{u as __pageData,g as default};
+import{_ as t,o as a,c as s,ag as n}from"./chunks/framework.BZohXCq9.js";const u=JSON.parse('{"title":"Scheduled Tasks","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/schedule.md","filePath":"getting-started/schedule.md","lastUpdated":1772359263000}'),i={name:"getting-started/schedule.md"};function r(o,e,l,d,h,c){return a(),s("div",null,[...e[0]||(e[0]=[n("",35)])])}const g=t(i,[["render",r]]);export{u as __pageData,g as default};
diff --git a/assets/getting-started_search-provider.md.CWTVwyy0.js b/assets/getting-started_search-provider.md.R9B5DkBj.js
similarity index 97%
rename from assets/getting-started_search-provider.md.CWTVwyy0.js
rename to assets/getting-started_search-provider.md.R9B5DkBj.js
index f0e8772c..94940e00 100644
--- a/assets/getting-started_search-provider.md.CWTVwyy0.js
+++ b/assets/getting-started_search-provider.md.R9B5DkBj.js
@@ -1 +1 @@
-import{_ as r,o as t,c as o,ag as a}from"./chunks/framework.ePeAWSvT.js";const u=JSON.parse('{"title":"Search Providers","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/search-provider.md","filePath":"getting-started/search-provider.md","lastUpdated":1772359263000}'),i={name:"getting-started/search-provider.md"};function n(s,e,d,l,c,h){return t(),o("div",null,[...e[0]||(e[0]=[a('

Search Providers

Memoh allows you to connect your Bot to various search engines, enabling it to browse the web for real-time information and external knowledge.

Concept: Real-Time Knowledge

A Search Provider is a connection to a specific search API (like Brave, Google, or Bing). Once configured, it becomes a tool that your Bot can use during conversation.


Supported Search Engines

Configure your search engines from the Search Provider page in the sidebar.

Supported EnginesNotes
BraveHighly recommended for privacy and performance.
BingPowerful global search capability.
GoogleComprehensive web search.
TavilyDesigned specifically for AI-powered research.
SearxNGConnect to your own self-hosted search aggregator.
DuckDuckGoPrivacy-focused search.
Other ProvidersSogou, Serper, Jina, Exa, Bocha, Yandex.

Configuration Flow

1. Adding a Search Provider

  1. Navigate to the Search Provider page from the sidebar.
  2. Click Add Search Provider.
  3. Fill in the following:
    • Name: A friendly name (e.g., "My Brave Search").
    • API Key: Your credentials for the specific search engine API.
    • Other Parameters: Depending on the engine, you may need to specify additional settings (e.g., base_url for SearxNG).

2. Managing Providers

  • Edit: Select a provider from the sidebar and update its configuration in the form on the right.
  • Delete: Use the Delete Provider button in the provider settings form.

Assigning a Search Provider to a Bot

  1. Navigate to the Bots page and select your bot.
  2. Go to the Settings tab.
  3. Find the Search Provider dropdown and select the provider you created.
  4. Click Save.

Bot Interaction

  • When a user's question requires real-time information, the bot will automatically call its assigned Search Provider.
  • The bot will process the search results to provide a grounded and accurate response.
  • Multiple search results can be synthesized to provide a comprehensive answer.
',20)])])}const p=r(i,[["render",n]]);export{u as __pageData,p as default}; +import{_ as r,o as t,c as o,ag as a}from"./chunks/framework.BZohXCq9.js";const u=JSON.parse('{"title":"Search Providers","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/search-provider.md","filePath":"getting-started/search-provider.md","lastUpdated":1772359263000}'),i={name:"getting-started/search-provider.md"};function n(s,e,d,l,c,h){return t(),o("div",null,[...e[0]||(e[0]=[a('

Search Providers

Memoh allows you to connect your Bot to various search engines, enabling it to browse the web for real-time information and external knowledge.

Concept: Real-Time Knowledge

A Search Provider is a connection to a specific search API (like Brave, Google, or Bing). Once configured, it becomes a tool that your Bot can use during conversation.


Supported Search Engines

Configure your search engines from the Search Provider page in the sidebar.

Supported EnginesNotes
BraveHighly recommended for privacy and performance.
BingPowerful global search capability.
GoogleComprehensive web search.
TavilyDesigned specifically for AI-powered research.
SearxNGConnect to your own self-hosted search aggregator.
DuckDuckGoPrivacy-focused search.
Other ProvidersSogou, Serper, Jina, Exa, Bocha, Yandex.

Configuration Flow

1. Adding a Search Provider

  1. Navigate to the Search Provider page from the sidebar.
  2. Click Add Search Provider.
  3. Fill in the following:
    • Name: A friendly name (e.g., "My Brave Search").
    • API Key: Your credentials for the specific search engine API.
    • Other Parameters: Depending on the engine, you may need to specify additional settings (e.g., base_url for SearxNG).

2. Managing Providers

  • Edit: Select a provider from the sidebar and update its configuration in the form on the right.
  • Delete: Use the Delete Provider button in the provider settings form.

Assigning a Search Provider to a Bot

  1. Navigate to the Bots page and select your bot.
  2. Go to the Settings tab.
  3. Find the Search Provider dropdown and select the provider you created.
  4. Click Save.

Bot Interaction

  • When a user's question requires real-time information, the bot will automatically call its assigned Search Provider.
  • The bot will process the search results to provide a grounded and accurate response.
  • Multiple search results can be synthesized to provide a comprehensive answer.
',20)])])}const p=r(i,[["render",n]]);export{u as __pageData,p as default}; diff --git a/assets/getting-started_search-provider.md.CWTVwyy0.lean.js b/assets/getting-started_search-provider.md.R9B5DkBj.lean.js similarity index 73% rename from assets/getting-started_search-provider.md.CWTVwyy0.lean.js rename to assets/getting-started_search-provider.md.R9B5DkBj.lean.js index 20d12619..23584314 100644 --- a/assets/getting-started_search-provider.md.CWTVwyy0.lean.js +++ b/assets/getting-started_search-provider.md.R9B5DkBj.lean.js @@ -1 +1 @@ -import{_ as r,o as t,c as o,ag as a}from"./chunks/framework.ePeAWSvT.js";const u=JSON.parse('{"title":"Search Providers","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/search-provider.md","filePath":"getting-started/search-provider.md","lastUpdated":1772359263000}'),i={name:"getting-started/search-provider.md"};function n(s,e,d,l,c,h){return t(),o("div",null,[...e[0]||(e[0]=[a("",20)])])}const p=r(i,[["render",n]]);export{u as __pageData,p as default}; +import{_ as r,o as t,c as o,ag as a}from"./chunks/framework.BZohXCq9.js";const u=JSON.parse('{"title":"Search Providers","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/search-provider.md","filePath":"getting-started/search-provider.md","lastUpdated":1772359263000}'),i={name:"getting-started/search-provider.md"};function n(s,e,d,l,c,h){return t(),o("div",null,[...e[0]||(e[0]=[a("",20)])])}const p=r(i,[["render",n]]);export{u as __pageData,p as default}; diff --git a/assets/getting-started_skills.md.EnvAtRea.js b/assets/getting-started_skills.md.DzSZ-qiC.js similarity index 97% rename from assets/getting-started_skills.md.EnvAtRea.js rename to assets/getting-started_skills.md.DzSZ-qiC.js index 20a9bb9d..729e3b12 100644 --- a/assets/getting-started_skills.md.EnvAtRea.js +++ b/assets/getting-started_skills.md.DzSZ-qiC.js @@ -1,4 +1,4 @@ -import{_ as s,o as i,c as t,ag as e}from"./chunks/framework.ePeAWSvT.js";const c=JSON.parse('{"title":"Bot Skills","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/skills.md","filePath":"getting-started/skills.md","lastUpdated":1772359263000}'),l={name:"getting-started/skills.md"};function n(o,a,r,d,h,k){return i(),t("div",null,[...a[0]||(a[0]=[e(`

Bot Skills

Skills are the "personality" and "capabilities" of a Memoh Bot. They define how the bot should behave and what tools it can use.

Concept: Skills as Markdown

A Skill is represented as a Markdown document with YAML frontmatter. These files are stored within the bot's container and parsed into tools and personality traits.

Example Skill Structure

yaml
---
+import{_ as s,o as i,c as t,ag as e}from"./chunks/framework.BZohXCq9.js";const c=JSON.parse('{"title":"Bot Skills","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/skills.md","filePath":"getting-started/skills.md","lastUpdated":1772359263000}'),l={name:"getting-started/skills.md"};function n(o,a,r,d,h,k){return i(),t("div",null,[...a[0]||(a[0]=[e(`

Bot Skills

Skills are the "personality" and "capabilities" of a Memoh Bot. They define how the bot should behave and what tools it can use.

Concept: Skills as Markdown

A Skill is represented as a Markdown document with YAML frontmatter. These files are stored within the bot's container and parsed into tools and personality traits.

Example Skill Structure

yaml
---
 name: coder-skill
 description: Enables advanced coding capabilities and tool use.
 ---
diff --git a/assets/getting-started_skills.md.EnvAtRea.lean.js b/assets/getting-started_skills.md.DzSZ-qiC.lean.js
similarity index 71%
rename from assets/getting-started_skills.md.EnvAtRea.lean.js
rename to assets/getting-started_skills.md.DzSZ-qiC.lean.js
index a6ac10b3..9b1994a3 100644
--- a/assets/getting-started_skills.md.EnvAtRea.lean.js
+++ b/assets/getting-started_skills.md.DzSZ-qiC.lean.js
@@ -1 +1 @@
-import{_ as s,o as i,c as t,ag as e}from"./chunks/framework.ePeAWSvT.js";const c=JSON.parse('{"title":"Bot Skills","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/skills.md","filePath":"getting-started/skills.md","lastUpdated":1772359263000}'),l={name:"getting-started/skills.md"};function n(o,a,r,d,h,k){return i(),t("div",null,[...a[0]||(a[0]=[e("",16)])])}const g=s(l,[["render",n]]);export{c as __pageData,g as default};
+import{_ as s,o as i,c as t,ag as e}from"./chunks/framework.BZohXCq9.js";const c=JSON.parse('{"title":"Bot Skills","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/skills.md","filePath":"getting-started/skills.md","lastUpdated":1772359263000}'),l={name:"getting-started/skills.md"};function n(o,a,r,d,h,k){return i(),t("div",null,[...a[0]||(a[0]=[e("",16)])])}const g=s(l,[["render",n]]);export{c as __pageData,g as default};
diff --git a/assets/getting-started_subagents.md.B79V3Ppa.js b/assets/getting-started_subagents.md.6oBLlW8a.js
similarity index 96%
rename from assets/getting-started_subagents.md.B79V3Ppa.js
rename to assets/getting-started_subagents.md.6oBLlW8a.js
index 29ab1f6f..1775fc80 100644
--- a/assets/getting-started_subagents.md.B79V3Ppa.js
+++ b/assets/getting-started_subagents.md.6oBLlW8a.js
@@ -1 +1 @@
-import{_ as e,o as a,c as n,ag as o}from"./chunks/framework.ePeAWSvT.js";const u=JSON.parse('{"title":"Bot Subagents","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/subagents.md","filePath":"getting-started/subagents.md","lastUpdated":1772359263000}'),i={name:"getting-started/subagents.md"};function s(r,t,d,l,c,g){return a(),n("div",null,[...t[0]||(t[0]=[o('

Bot Subagents

Subagents are specialized AI entities with their own independent conversation context. They are managed by the main Bot to delegate complex tasks or focus on specific domains.

Concept: Task Specialization

A Subagent is like a specialized teammate for your Bot. While the main Bot handles general conversation, it can spin up and communicate with a Subagent to perform deep analysis, research, or execution.


Fields

Configure Subagents from the Subagents tab in the Bot Detail page.

FieldDescription
NameThe identifier for the subagent (e.g., "Research Assistant").
DescriptionA brief explanation of the subagent's purpose and role.
SkillsA list of specific Skills assigned from the bot's container.
MessagesThe conversation history and context specific to this subagent.
UsageStatistics on token consumption and activity.

Operations

  • Add Subagent: Create a new entity by providing a name and description.
  • Edit: Update the name or description of an existing subagent.
  • Delete: Permanently remove a subagent and its independent context.
  • View Context: Open a dialog to inspect the subagent's conversation history and usage metrics.

Bot Interaction

  • The main Bot uses the Subagent Tool to create, communicate with, and receive results from subagents.
  • Subagents inherit the main bot's container permissions but operate with their own "mental workspace."
  • This modular approach allows for building multi-agent systems within a single Bot's scope.
',14)])])}const p=e(i,[["render",s]]);export{u as __pageData,p as default}; +import{_ as e,o as a,c as n,ag as o}from"./chunks/framework.BZohXCq9.js";const u=JSON.parse('{"title":"Bot Subagents","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/subagents.md","filePath":"getting-started/subagents.md","lastUpdated":1772359263000}'),i={name:"getting-started/subagents.md"};function s(r,t,d,l,c,g){return a(),n("div",null,[...t[0]||(t[0]=[o('

Bot Subagents

Subagents are specialized AI entities with their own independent conversation context. They are managed by the main Bot to delegate complex tasks or focus on specific domains.

Concept: Task Specialization

A Subagent is like a specialized teammate for your Bot. While the main Bot handles general conversation, it can spin up and communicate with a Subagent to perform deep analysis, research, or execution.


Fields

Configure Subagents from the Subagents tab in the Bot Detail page.

FieldDescription
NameThe identifier for the subagent (e.g., "Research Assistant").
DescriptionA brief explanation of the subagent's purpose and role.
SkillsA list of specific Skills assigned from the bot's container.
MessagesThe conversation history and context specific to this subagent.
UsageStatistics on token consumption and activity.

Operations

  • Add Subagent: Create a new entity by providing a name and description.
  • Edit: Update the name or description of an existing subagent.
  • Delete: Permanently remove a subagent and its independent context.
  • View Context: Open a dialog to inspect the subagent's conversation history and usage metrics.

Bot Interaction

  • The main Bot uses the Subagent Tool to create, communicate with, and receive results from subagents.
  • Subagents inherit the main bot's container permissions but operate with their own "mental workspace."
  • This modular approach allows for building multi-agent systems within a single Bot's scope.
',14)])])}const p=e(i,[["render",s]]);export{u as __pageData,p as default}; diff --git a/assets/getting-started_subagents.md.B79V3Ppa.lean.js b/assets/getting-started_subagents.md.6oBLlW8a.lean.js similarity index 72% rename from assets/getting-started_subagents.md.B79V3Ppa.lean.js rename to assets/getting-started_subagents.md.6oBLlW8a.lean.js index a2bfe950..cc54e2cd 100644 --- a/assets/getting-started_subagents.md.B79V3Ppa.lean.js +++ b/assets/getting-started_subagents.md.6oBLlW8a.lean.js @@ -1 +1 @@ -import{_ as e,o as a,c as n,ag as o}from"./chunks/framework.ePeAWSvT.js";const u=JSON.parse('{"title":"Bot Subagents","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/subagents.md","filePath":"getting-started/subagents.md","lastUpdated":1772359263000}'),i={name:"getting-started/subagents.md"};function s(r,t,d,l,c,g){return a(),n("div",null,[...t[0]||(t[0]=[o("",14)])])}const p=e(i,[["render",s]]);export{u as __pageData,p as default}; +import{_ as e,o as a,c as n,ag as o}from"./chunks/framework.BZohXCq9.js";const u=JSON.parse('{"title":"Bot Subagents","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/subagents.md","filePath":"getting-started/subagents.md","lastUpdated":1772359263000}'),i={name:"getting-started/subagents.md"};function s(r,t,d,l,c,g){return a(),n("div",null,[...t[0]||(t[0]=[o("",14)])])}const p=e(i,[["render",s]]);export{u as __pageData,p as default}; diff --git a/assets/index.md.7vMrZCVa.js b/assets/index.md.D1yGsPie.js similarity index 92% rename from assets/index.md.7vMrZCVa.js rename to assets/index.md.D1yGsPie.js index 1660ff90..3d6f1354 100644 --- a/assets/index.md.7vMrZCVa.js +++ b/assets/index.md.D1yGsPie.js @@ -1 +1 @@ -import{_ as t,o as a,c as o,ag as n}from"./chunks/framework.ePeAWSvT.js";const u=JSON.parse('{"title":"Memoh Documentation","description":"","frontmatter":{},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1772359263000}'),i={name:"index.md"};function r(s,e,l,m,d,c){return a(),o("div",null,[...e[0]||(e[0]=[n('

Memoh Documentation

Memoh(/ˈmemoʊ/) is a multi-member, structured long-memory, containerized AI agent system. Create your own AI bots, chat with them via Telegram, Lark (Feishu), Web, or CLI. Each bot runs in an isolated container with its own memory system — able to edit files, run commands, and access the network.

Documentation

',4)])])}const f=t(i,[["render",r]]);export{u as __pageData,f as default}; +import{_ as t,o as a,c as o,ag as n}from"./chunks/framework.BZohXCq9.js";const u=JSON.parse('{"title":"Memoh Documentation","description":"","frontmatter":{},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1772359263000}'),i={name:"index.md"};function r(s,e,l,m,d,c){return a(),o("div",null,[...e[0]||(e[0]=[n('

Memoh Documentation

Memoh(/ˈmemoʊ/) is a multi-member, structured long-memory, containerized AI agent system. Create your own AI bots, chat with them via Telegram, Lark (Feishu), Web, or CLI. Each bot runs in an isolated container with its own memory system — able to edit files, run commands, and access the network.

Documentation

',4)])])}const f=t(i,[["render",r]]);export{u as __pageData,f as default}; diff --git a/assets/index.md.7vMrZCVa.lean.js b/assets/index.md.D1yGsPie.lean.js similarity index 69% rename from assets/index.md.7vMrZCVa.lean.js rename to assets/index.md.D1yGsPie.lean.js index 447b217f..0d9b75ab 100644 --- a/assets/index.md.7vMrZCVa.lean.js +++ b/assets/index.md.D1yGsPie.lean.js @@ -1 +1 @@ -import{_ as t,o as a,c as o,ag as n}from"./chunks/framework.ePeAWSvT.js";const u=JSON.parse('{"title":"Memoh Documentation","description":"","frontmatter":{},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1772359263000}'),i={name:"index.md"};function r(s,e,l,m,d,c){return a(),o("div",null,[...e[0]||(e[0]=[n("",4)])])}const f=t(i,[["render",r]]);export{u as __pageData,f as default}; +import{_ as t,o as a,c as o,ag as n}from"./chunks/framework.BZohXCq9.js";const u=JSON.parse('{"title":"Memoh Documentation","description":"","frontmatter":{},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1772359263000}'),i={name:"index.md"};function r(s,e,l,m,d,c){return a(),o("div",null,[...e[0]||(e[0]=[n("",4)])])}const f=t(i,[["render",r]]);export{u as __pageData,f as default}; diff --git a/assets/installation_docker.md.Bk_onHJi.js b/assets/installation_docker.md.qkaakAVc.js similarity index 99% rename from assets/installation_docker.md.Bk_onHJi.js rename to assets/installation_docker.md.qkaakAVc.js index a0868452..1a44c727 100644 --- a/assets/installation_docker.md.Bk_onHJi.js +++ b/assets/installation_docker.md.qkaakAVc.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as e,ag as t}from"./chunks/framework.ePeAWSvT.js";const c=JSON.parse('{"title":"Docker Installation","description":"","frontmatter":{},"headers":[],"relativePath":"installation/docker.md","filePath":"installation/docker.md","lastUpdated":1772882768000}'),n={name:"installation/docker.md"};function l(o,s,h,r,d,p){return a(),e("div",null,[...s[0]||(s[0]=[t(`

Docker Installation

Docker is the recommended way to run Memoh. The stack includes PostgreSQL, Qdrant, the main server (with embedded Containerd), agent gateway, and web UI — all orchestrated via Docker Compose. You do not need to install containerd, nerdctl, or buildkit on your host; everything runs inside containers.

Prerequisites

Run the official install script (requires Docker and Docker Compose):

bash
curl -fsSL https://memoh.sh | sudo sh

The script will:

  1. Check for Docker and Docker Compose
  2. Prompt for configuration (workspace, data directory, admin credentials, JWT secret, Postgres password)
  3. Fetch the latest release tag from GitHub and clone the repository
  4. Generate config.toml from the Docker template with your settings
  5. Pin Docker image versions to the release
  6. Pull images and start all services

Silent install (use all defaults, no prompts):

bash
curl -fsSL https://memoh.sh | sudo sh -s -- -y

Defaults when running silently:

  • Workspace: ~/memoh
  • Data directory: ~/memoh/data
  • Admin: admin / admin123
  • JWT secret: auto-generated
  • Postgres password: memoh123

Install a specific version:

bash
MEMOH_VERSION=v1.0.0 curl -fsSL https://memoh.sh | sudo sh

Use China mainland mirror (for slow image pulls):

bash
USE_CN_MIRROR=true curl -fsSL https://memoh.sh | sudo sh

Environment variables can be combined, e.g. MEMOH_VERSION=v1.0.0 USE_CN_MIRROR=true curl -fsSL https://memoh.sh | sudo sh

Manual Install

bash
git clone https://github.com/memohai/Memoh.git
+import{_ as i,o as a,c as e,ag as t}from"./chunks/framework.BZohXCq9.js";const c=JSON.parse('{"title":"Docker Installation","description":"","frontmatter":{},"headers":[],"relativePath":"installation/docker.md","filePath":"installation/docker.md","lastUpdated":1772882768000}'),n={name:"installation/docker.md"};function l(o,s,h,r,d,p){return a(),e("div",null,[...s[0]||(s[0]=[t(`

Docker Installation

Docker is the recommended way to run Memoh. The stack includes PostgreSQL, Qdrant, the main server (with embedded Containerd), agent gateway, and web UI — all orchestrated via Docker Compose. You do not need to install containerd, nerdctl, or buildkit on your host; everything runs inside containers.

Prerequisites

Run the official install script (requires Docker and Docker Compose):

bash
curl -fsSL https://memoh.sh | sudo sh

The script will:

  1. Check for Docker and Docker Compose
  2. Prompt for configuration (workspace, data directory, admin credentials, JWT secret, Postgres password)
  3. Fetch the latest release tag from GitHub and clone the repository
  4. Generate config.toml from the Docker template with your settings
  5. Pin Docker image versions to the release
  6. Pull images and start all services

Silent install (use all defaults, no prompts):

bash
curl -fsSL https://memoh.sh | sudo sh -s -- -y

Defaults when running silently:

  • Workspace: ~/memoh
  • Data directory: ~/memoh/data
  • Admin: admin / admin123
  • JWT secret: auto-generated
  • Postgres password: memoh123

Install a specific version:

bash
MEMOH_VERSION=v1.0.0 curl -fsSL https://memoh.sh | sudo sh

Use China mainland mirror (for slow image pulls):

bash
USE_CN_MIRROR=true curl -fsSL https://memoh.sh | sudo sh

Environment variables can be combined, e.g. MEMOH_VERSION=v1.0.0 USE_CN_MIRROR=true curl -fsSL https://memoh.sh | sudo sh

Manual Install

bash
git clone https://github.com/memohai/Memoh.git
 cd Memoh
 cp conf/app.docker.toml config.toml

Edit config.toml — at minimum change:

  • admin.password — Admin password
  • auth.jwt_secret — Generate with openssl rand -base64 32
  • postgres.password — Database password (also set POSTGRES_PASSWORD env var to match)

Then start:

bash
sudo POSTGRES_PASSWORD=your-db-password docker compose up -d

On macOS or if your user is in the docker group, sudo is not required.

Important: docker-compose.yml mounts ./config.toml by default. You must create this file before starting — running without it will fail.

China Mainland Mirror

For users in mainland China who cannot access Docker Hub directly, uncomment the registry line in config.toml:

toml
[mcp]
 registry = "memoh.cn"

And use the China mirror compose overlay:

bash
sudo docker compose -f docker-compose.yml -f docker/docker-compose.cn.yml up -d

The install script handles this automatically when you set USE_CN_MIRROR=true.

Access Points

After startup:

ServiceURL
Web UIhttp://localhost:8082
APIhttp://localhost:8080
Agent Gatewayhttp://localhost:8081
Browser Gatewayhttp://localhost:8083

Default login: admin / admin123 (change this in config.toml).

First startup may take 1–2 minutes while images are pulled and services initialize.

Common Commands

Prefix with sudo on Linux if your user is not in the docker group.

bash
docker compose up -d           # Start
diff --git a/assets/installation_docker.md.Bk_onHJi.lean.js b/assets/installation_docker.md.qkaakAVc.lean.js
similarity index 71%
rename from assets/installation_docker.md.Bk_onHJi.lean.js
rename to assets/installation_docker.md.qkaakAVc.lean.js
index 17fbe21e..a33f2b92 100644
--- a/assets/installation_docker.md.Bk_onHJi.lean.js
+++ b/assets/installation_docker.md.qkaakAVc.lean.js
@@ -1 +1 @@
-import{_ as i,o as a,c as e,ag as t}from"./chunks/framework.ePeAWSvT.js";const c=JSON.parse('{"title":"Docker Installation","description":"","frontmatter":{},"headers":[],"relativePath":"installation/docker.md","filePath":"installation/docker.md","lastUpdated":1772882768000}'),n={name:"installation/docker.md"};function l(o,s,h,r,d,p){return a(),e("div",null,[...s[0]||(s[0]=[t("",48)])])}const g=i(n,[["render",l]]);export{c as __pageData,g as default};
+import{_ as i,o as a,c as e,ag as t}from"./chunks/framework.BZohXCq9.js";const c=JSON.parse('{"title":"Docker Installation","description":"","frontmatter":{},"headers":[],"relativePath":"installation/docker.md","filePath":"installation/docker.md","lastUpdated":1772882768000}'),n={name:"installation/docker.md"};function l(o,s,h,r,d,p){return a(),e("div",null,[...s[0]||(s[0]=[t("",48)])])}const g=i(n,[["render",l]]);export{c as __pageData,g as default};
diff --git a/assets/memory-providers_builtin.md.Cgc3R-Wx.js b/assets/memory-providers_builtin.md.BDxazTz6.js
similarity index 97%
rename from assets/memory-providers_builtin.md.Cgc3R-Wx.js
rename to assets/memory-providers_builtin.md.BDxazTz6.js
index 41b85cd5..84a2946a 100644
--- a/assets/memory-providers_builtin.md.Cgc3R-Wx.js
+++ b/assets/memory-providers_builtin.md.BDxazTz6.js
@@ -1 +1 @@
-import{_ as r,o as i,c as t,ag as o}from"./chunks/framework.ePeAWSvT.js";const h=JSON.parse('{"title":"Built-in Memory Provider","description":"","frontmatter":{},"headers":[],"relativePath":"memory-providers/builtin.md","filePath":"memory-providers/builtin.md","lastUpdated":1772873936000}'),a={name:"memory-providers/builtin.md"};function n(l,e,d,s,m,g){return i(),t("div",null,[...e[0]||(e[0]=[o('

Built-in Memory Provider

The built-in memory provider is the standard memory backend shipped with Memoh. It works with Memoh's memory pipeline and supports:

  • Automatic memory extraction from conversations
  • Semantic memory retrieval during chat
  • Manual memory creation and editing
  • Memory compaction and rebuild workflows

To configure it well, you usually assign:

  • Memory Model: The LLM used for memory extraction and decision making
  • Embedding Model: The embedding model used for dense vector search

Creating a Built-in Provider

Manage providers from the Memory Providers page in the sidebar.

  1. Navigate to the Memory Providers page.
  2. Click Add Memory Provider.
  3. Fill in the following fields:
    • Name: A display name for this provider.
    • Provider Type: Select builtin.
  4. Click Create.

Configuring a Built-in Provider

After creating a provider, select it from the sidebar and configure its settings.

FieldDescription
NameThe display name shown in the UI.
Provider TypeThe provider implementation. Currently this is builtin only.
Memory ModelOptional chat model used for memory extraction and memory-related decisions.
Embedding ModelOptional embedding model used for semantic vector search.

Managing Providers

  • Edit: Select a provider and update its name or model bindings.
  • Delete: Remove a provider you no longer use.

Assigning a Memory Provider to a Bot

  1. Navigate to the Bots page and open your bot.
  2. Go to the Settings tab.
  3. Find the Memory Provider dropdown.
  4. Select the provider you created.
  5. Click Save.

If no memory provider is selected, the bot will not use that provider configuration in its runtime settings.


Using Memory After Setup

Once a memory provider is assigned to the bot, you can manage actual memories from the bot's Memory tab:

  • Create memories manually
  • Extract memories from conversations
  • Search, edit, and delete memories
  • Compact or rebuild the memory store

For day-to-day memory operations, continue with Bot Memory Management.

',24)])])}const p=r(a,[["render",n]]);export{h as __pageData,p as default}; +import{_ as r,o as i,c as t,ag as o}from"./chunks/framework.BZohXCq9.js";const h=JSON.parse('{"title":"Built-in Memory Provider","description":"","frontmatter":{},"headers":[],"relativePath":"memory-providers/builtin.md","filePath":"memory-providers/builtin.md","lastUpdated":1772873936000}'),a={name:"memory-providers/builtin.md"};function n(l,e,d,s,m,g){return i(),t("div",null,[...e[0]||(e[0]=[o('

Built-in Memory Provider

The built-in memory provider is the standard memory backend shipped with Memoh. It works with Memoh's memory pipeline and supports:

  • Automatic memory extraction from conversations
  • Semantic memory retrieval during chat
  • Manual memory creation and editing
  • Memory compaction and rebuild workflows

To configure it well, you usually assign:

  • Memory Model: The LLM used for memory extraction and decision making
  • Embedding Model: The embedding model used for dense vector search

Creating a Built-in Provider

Manage providers from the Memory Providers page in the sidebar.

  1. Navigate to the Memory Providers page.
  2. Click Add Memory Provider.
  3. Fill in the following fields:
    • Name: A display name for this provider.
    • Provider Type: Select builtin.
  4. Click Create.

Configuring a Built-in Provider

After creating a provider, select it from the sidebar and configure its settings.

FieldDescription
NameThe display name shown in the UI.
Provider TypeThe provider implementation. Currently this is builtin only.
Memory ModelOptional chat model used for memory extraction and memory-related decisions.
Embedding ModelOptional embedding model used for semantic vector search.

Managing Providers

  • Edit: Select a provider and update its name or model bindings.
  • Delete: Remove a provider you no longer use.

Assigning a Memory Provider to a Bot

  1. Navigate to the Bots page and open your bot.
  2. Go to the Settings tab.
  3. Find the Memory Provider dropdown.
  4. Select the provider you created.
  5. Click Save.

If no memory provider is selected, the bot will not use that provider configuration in its runtime settings.


Using Memory After Setup

Once a memory provider is assigned to the bot, you can manage actual memories from the bot's Memory tab:

  • Create memories manually
  • Extract memories from conversations
  • Search, edit, and delete memories
  • Compact or rebuild the memory store

For day-to-day memory operations, continue with Bot Memory Management.

',24)])])}const p=r(a,[["render",n]]);export{h as __pageData,p as default}; diff --git a/assets/memory-providers_builtin.md.Cgc3R-Wx.lean.js b/assets/memory-providers_builtin.md.BDxazTz6.lean.js similarity index 73% rename from assets/memory-providers_builtin.md.Cgc3R-Wx.lean.js rename to assets/memory-providers_builtin.md.BDxazTz6.lean.js index bfd6da9d..6888c647 100644 --- a/assets/memory-providers_builtin.md.Cgc3R-Wx.lean.js +++ b/assets/memory-providers_builtin.md.BDxazTz6.lean.js @@ -1 +1 @@ -import{_ as r,o as i,c as t,ag as o}from"./chunks/framework.ePeAWSvT.js";const h=JSON.parse('{"title":"Built-in Memory Provider","description":"","frontmatter":{},"headers":[],"relativePath":"memory-providers/builtin.md","filePath":"memory-providers/builtin.md","lastUpdated":1772873936000}'),a={name:"memory-providers/builtin.md"};function n(l,e,d,s,m,g){return i(),t("div",null,[...e[0]||(e[0]=[o("",24)])])}const p=r(a,[["render",n]]);export{h as __pageData,p as default}; +import{_ as r,o as i,c as t,ag as o}from"./chunks/framework.BZohXCq9.js";const h=JSON.parse('{"title":"Built-in Memory Provider","description":"","frontmatter":{},"headers":[],"relativePath":"memory-providers/builtin.md","filePath":"memory-providers/builtin.md","lastUpdated":1772873936000}'),a={name:"memory-providers/builtin.md"};function n(l,e,d,s,m,g){return i(),t("div",null,[...e[0]||(e[0]=[o("",24)])])}const p=r(a,[["render",n]]);export{h as __pageData,p as default}; diff --git a/assets/memory-providers_index.md.DLe5Y0PL.js b/assets/memory-providers_index.md.DNPBOVmb.js similarity index 97% rename from assets/memory-providers_index.md.DLe5Y0PL.js rename to assets/memory-providers_index.md.DNPBOVmb.js index 95692473..a185631e 100644 --- a/assets/memory-providers_index.md.DLe5Y0PL.js +++ b/assets/memory-providers_index.md.DNPBOVmb.js @@ -1 +1 @@ -import{_ as r,o,c as t,ag as i}from"./chunks/framework.ePeAWSvT.js";const c=JSON.parse('{"title":"Memory Providers","description":"","frontmatter":{},"headers":[],"relativePath":"memory-providers/index.md","filePath":"memory-providers/index.md","lastUpdated":1772873936000}'),a={name:"memory-providers/index.md"};function s(n,e,d,l,m,p){return o(),t("div",null,[...e[0]||(e[0]=[i('

Memory Providers

Memoh uses a Memory Provider to define how a bot stores, retrieves, and manages long-term memory. A bot can bind one memory provider in its Settings tab, and that provider becomes the backend for memory extraction and memory search.

Available Providers

Memoh currently includes the following memory provider:

  • Built-in: The default memory system included with Memoh.

More provider types may be added in future versions, but right now builtin is the only supported provider type in the product and web UI.


Basic Flow

  1. Open the Memory Providers page from the sidebar.
  2. Create a provider instance using one of the supported provider types.
  3. Configure the provider settings.
  4. Open a bot's Settings tab and assign that provider in Memory Provider.
  5. Manage actual memories from the bot's Memory tab.

Next Steps

',12)])])}const u=r(a,[["render",s]]);export{c as __pageData,u as default}; +import{_ as r,o,c as t,ag as i}from"./chunks/framework.BZohXCq9.js";const c=JSON.parse('{"title":"Memory Providers","description":"","frontmatter":{},"headers":[],"relativePath":"memory-providers/index.md","filePath":"memory-providers/index.md","lastUpdated":1772873936000}'),a={name:"memory-providers/index.md"};function s(n,e,d,l,m,p){return o(),t("div",null,[...e[0]||(e[0]=[i('

Memory Providers

Memoh uses a Memory Provider to define how a bot stores, retrieves, and manages long-term memory. A bot can bind one memory provider in its Settings tab, and that provider becomes the backend for memory extraction and memory search.

Available Providers

Memoh currently includes the following memory provider:

  • Built-in: The default memory system included with Memoh.

More provider types may be added in future versions, but right now builtin is the only supported provider type in the product and web UI.


Basic Flow

  1. Open the Memory Providers page from the sidebar.
  2. Create a provider instance using one of the supported provider types.
  3. Configure the provider settings.
  4. Open a bot's Settings tab and assign that provider in Memory Provider.
  5. Manage actual memories from the bot's Memory tab.

Next Steps

',12)])])}const u=r(a,[["render",s]]);export{c as __pageData,u as default}; diff --git a/assets/memory-providers_index.md.DLe5Y0PL.lean.js b/assets/memory-providers_index.md.DNPBOVmb.lean.js similarity index 85% rename from assets/memory-providers_index.md.DLe5Y0PL.lean.js rename to assets/memory-providers_index.md.DNPBOVmb.lean.js index 84f1f3e4..15a25083 100644 --- a/assets/memory-providers_index.md.DLe5Y0PL.lean.js +++ b/assets/memory-providers_index.md.DNPBOVmb.lean.js @@ -1 +1 @@ -import{_ as r,o,c as t,ag as i}from"./chunks/framework.ePeAWSvT.js";const c=JSON.parse('{"title":"Memory Providers","description":"","frontmatter":{},"headers":[],"relativePath":"memory-providers/index.md","filePath":"memory-providers/index.md","lastUpdated":1772873936000}'),a={name:"memory-providers/index.md"};function s(n,e,d,l,m,p){return o(),t("div",null,[...e[0]||(e[0]=[i("",12)])])}const u=r(a,[["render",s]]);export{c as __pageData,u as default}; +import{_ as r,o,c as t,ag as i}from"./chunks/framework.BZohXCq9.js";const c=JSON.parse('{"title":"Memory Providers","description":"","frontmatter":{},"headers":[],"relativePath":"memory-providers/index.md","filePath":"memory-providers/index.md","lastUpdated":1772873936000}'),a={name:"memory-providers/index.md"};function s(n,e,d,l,m,p){return o(),t("div",null,[...e[0]||(e[0]=[i("",12)])])}const u=r(a,[["render",s]]);export{c as __pageData,u as default}; diff --git a/assets/zh_concepts_identity-and-binding.md.B6I6pSqI.js b/assets/zh_concepts_identity-and-binding.md.7e9GdoK6.js similarity index 96% rename from assets/zh_concepts_identity-and-binding.md.B6I6pSqI.js rename to assets/zh_concepts_identity-and-binding.md.7e9GdoK6.js index da61f8a7..8ac20bdd 100644 --- a/assets/zh_concepts_identity-and-binding.md.B6I6pSqI.js +++ b/assets/zh_concepts_identity-and-binding.md.7e9GdoK6.js @@ -1 +1 @@ -import{_ as o,o as e,c as a,ag as i}from"./chunks/framework.ePeAWSvT.js";const u=JSON.parse('{"title":"账号模型与绑定","description":"","frontmatter":{},"headers":[],"relativePath":"zh/concepts/identity-and-binding.md","filePath":"zh/concepts/identity-and-binding.md","lastUpdated":1770887583000}'),l={name:"zh/concepts/identity-and-binding.md"};function n(r,t,d,s,c,h){return e(),a("div",null,[...t[0]||(t[0]=[i('

账号模型与绑定

账号模型

Memoh 将平台账号与系统账号视为两类不同实体:

  • 平台账号(ChannelIdentity 是用户在外部接入平台上的账号(例如飞书账号),不是 Memoh 内部账号。
  • 系统账号(User 是 Memoh 系统内账号。

平台账号在初始阶段可以不绑定系统账号。
bind 的职责是完成这两类账号的关联。

接入平台与 Bot

  • 接入平台(channel 是入站消息来源。
  • Bot 是系统内的授权与资源边界。

Bot 由系统账号管理,入站消息由平台账号产生。

为什么账号绑定是账号作用域

账号绑定的目标是建立账号归属关系,而不是直接发放 bot 资源权限:

  • 它只负责平台账号与系统账号的绑定;
  • 不把账号绑定与成员管理语义耦合在一起;
  • 让 bot 访问控制保持独立、可演进。

账号绑定流程(当前共识)

  1. 用户以自己的系统账号申请 bind code;
  2. 平台账号在支持的接入平台会话中发送 code;
  3. 系统校验 code,完成平台账号到系统账号的绑定;
  4. bot 成员与授权由独立流程处理。

Bot 类型语义

  • Public bot:支持成员协作语义。
  • Personal bot:语义上应为单 owner,不应依赖成员机制。

注:本文档记录的是产品语义与共识方向。
部分运行时细节仍可能处于收敛阶段。

',16)])])}const p=o(l,[["render",n]]);export{u as __pageData,p as default}; +import{_ as o,o as e,c as a,ag as i}from"./chunks/framework.BZohXCq9.js";const u=JSON.parse('{"title":"账号模型与绑定","description":"","frontmatter":{},"headers":[],"relativePath":"zh/concepts/identity-and-binding.md","filePath":"zh/concepts/identity-and-binding.md","lastUpdated":1770887583000}'),l={name:"zh/concepts/identity-and-binding.md"};function n(r,t,d,s,c,h){return e(),a("div",null,[...t[0]||(t[0]=[i('

账号模型与绑定

账号模型

Memoh 将平台账号与系统账号视为两类不同实体:

  • 平台账号(ChannelIdentity 是用户在外部接入平台上的账号(例如飞书账号),不是 Memoh 内部账号。
  • 系统账号(User 是 Memoh 系统内账号。

平台账号在初始阶段可以不绑定系统账号。
bind 的职责是完成这两类账号的关联。

接入平台与 Bot

  • 接入平台(channel 是入站消息来源。
  • Bot 是系统内的授权与资源边界。

Bot 由系统账号管理,入站消息由平台账号产生。

为什么账号绑定是账号作用域

账号绑定的目标是建立账号归属关系,而不是直接发放 bot 资源权限:

  • 它只负责平台账号与系统账号的绑定;
  • 不把账号绑定与成员管理语义耦合在一起;
  • 让 bot 访问控制保持独立、可演进。

账号绑定流程(当前共识)

  1. 用户以自己的系统账号申请 bind code;
  2. 平台账号在支持的接入平台会话中发送 code;
  3. 系统校验 code,完成平台账号到系统账号的绑定;
  4. bot 成员与授权由独立流程处理。

Bot 类型语义

  • Public bot:支持成员协作语义。
  • Personal bot:语义上应为单 owner,不应依赖成员机制。

注:本文档记录的是产品语义与共识方向。
部分运行时细节仍可能处于收敛阶段。

',16)])])}const p=o(l,[["render",n]]);export{u as __pageData,p as default}; diff --git a/assets/zh_concepts_identity-and-binding.md.B6I6pSqI.lean.js b/assets/zh_concepts_identity-and-binding.md.7e9GdoK6.lean.js similarity index 74% rename from assets/zh_concepts_identity-and-binding.md.B6I6pSqI.lean.js rename to assets/zh_concepts_identity-and-binding.md.7e9GdoK6.lean.js index 1432b7b5..1351e318 100644 --- a/assets/zh_concepts_identity-and-binding.md.B6I6pSqI.lean.js +++ b/assets/zh_concepts_identity-and-binding.md.7e9GdoK6.lean.js @@ -1 +1 @@ -import{_ as o,o as e,c as a,ag as i}from"./chunks/framework.ePeAWSvT.js";const u=JSON.parse('{"title":"账号模型与绑定","description":"","frontmatter":{},"headers":[],"relativePath":"zh/concepts/identity-and-binding.md","filePath":"zh/concepts/identity-and-binding.md","lastUpdated":1770887583000}'),l={name:"zh/concepts/identity-and-binding.md"};function n(r,t,d,s,c,h){return e(),a("div",null,[...t[0]||(t[0]=[i("",16)])])}const p=o(l,[["render",n]]);export{u as __pageData,p as default}; +import{_ as o,o as e,c as a,ag as i}from"./chunks/framework.BZohXCq9.js";const u=JSON.parse('{"title":"账号模型与绑定","description":"","frontmatter":{},"headers":[],"relativePath":"zh/concepts/identity-and-binding.md","filePath":"zh/concepts/identity-and-binding.md","lastUpdated":1770887583000}'),l={name:"zh/concepts/identity-and-binding.md"};function n(r,t,d,s,c,h){return e(),a("div",null,[...t[0]||(t[0]=[i("",16)])])}const p=o(l,[["render",n]]);export{u as __pageData,p as default}; diff --git a/assets/zh_concepts_index.md.uaZIblvt.js b/assets/zh_concepts_index.md.Brd21jcS.js similarity index 93% rename from assets/zh_concepts_index.md.uaZIblvt.js rename to assets/zh_concepts_index.md.Brd21jcS.js index 4f2d0c85..b1eba40e 100644 --- a/assets/zh_concepts_index.md.uaZIblvt.js +++ b/assets/zh_concepts_index.md.Brd21jcS.js @@ -1 +1 @@ -import{_ as a,o as t,c as o,ag as n}from"./chunks/framework.ePeAWSvT.js";const _=JSON.parse('{"title":"核心概念","description":"","frontmatter":{},"headers":[],"relativePath":"zh/concepts/index.md","filePath":"zh/concepts/index.md","lastUpdated":1770887583000}'),r={name:"zh/concepts/index.md"};function i(l,e,d,s,c,h){return t(),o("div",null,[...e[0]||(e[0]=[n('

核心概念

本章节用于定义 Memoh 的核心账号与访问概念。

概念图

  • 系统账号(User:Memoh 系统内账号。
  • 平台账号(ChannelIdentity:用户在外部接入平台上的账号,不是 Memoh 系统内账号(例如用户的飞书账号)。
  • Bot:由系统账号管理的资源与访问边界。
  • 账号绑定(bind:把平台账号关联到系统账号的过程。

为什么重要

Memoh 需要同时处理外部接入平台消息与系统内权限控制。
因此我们明确区分平台账号与系统账号,并将 bot 授权与账号绑定解耦。

术语说明:文档中的“平台账号”统一指用户在对应平台上的真实账号(如飞书账号),不指本项目内部账号。

本章内容

',9)])])}const m=a(r,[["render",i]]);export{_ as __pageData,m as default}; +import{_ as a,o as t,c as o,ag as n}from"./chunks/framework.BZohXCq9.js";const _=JSON.parse('{"title":"核心概念","description":"","frontmatter":{},"headers":[],"relativePath":"zh/concepts/index.md","filePath":"zh/concepts/index.md","lastUpdated":1770887583000}'),r={name:"zh/concepts/index.md"};function i(l,e,d,s,c,h){return t(),o("div",null,[...e[0]||(e[0]=[n('

核心概念

本章节用于定义 Memoh 的核心账号与访问概念。

概念图

  • 系统账号(User:Memoh 系统内账号。
  • 平台账号(ChannelIdentity:用户在外部接入平台上的账号,不是 Memoh 系统内账号(例如用户的飞书账号)。
  • Bot:由系统账号管理的资源与访问边界。
  • 账号绑定(bind:把平台账号关联到系统账号的过程。

为什么重要

Memoh 需要同时处理外部接入平台消息与系统内权限控制。
因此我们明确区分平台账号与系统账号,并将 bot 授权与账号绑定解耦。

术语说明:文档中的“平台账号”统一指用户在对应平台上的真实账号(如飞书账号),不指本项目内部账号。

本章内容

',9)])])}const m=a(r,[["render",i]]);export{_ as __pageData,m as default}; diff --git a/assets/zh_concepts_index.md.uaZIblvt.lean.js b/assets/zh_concepts_index.md.Brd21jcS.lean.js similarity index 71% rename from assets/zh_concepts_index.md.uaZIblvt.lean.js rename to assets/zh_concepts_index.md.Brd21jcS.lean.js index 5bd73a1f..bcce78ea 100644 --- a/assets/zh_concepts_index.md.uaZIblvt.lean.js +++ b/assets/zh_concepts_index.md.Brd21jcS.lean.js @@ -1 +1 @@ -import{_ as a,o as t,c as o,ag as n}from"./chunks/framework.ePeAWSvT.js";const _=JSON.parse('{"title":"核心概念","description":"","frontmatter":{},"headers":[],"relativePath":"zh/concepts/index.md","filePath":"zh/concepts/index.md","lastUpdated":1770887583000}'),r={name:"zh/concepts/index.md"};function i(l,e,d,s,c,h){return t(),o("div",null,[...e[0]||(e[0]=[n("",9)])])}const m=a(r,[["render",i]]);export{_ as __pageData,m as default}; +import{_ as a,o as t,c as o,ag as n}from"./chunks/framework.BZohXCq9.js";const _=JSON.parse('{"title":"核心概念","description":"","frontmatter":{},"headers":[],"relativePath":"zh/concepts/index.md","filePath":"zh/concepts/index.md","lastUpdated":1770887583000}'),r={name:"zh/concepts/index.md"};function i(l,e,d,s,c,h){return t(),o("div",null,[...e[0]||(e[0]=[n("",9)])])}const m=a(r,[["render",i]]);export{_ as __pageData,m as default}; diff --git a/assets/zh_index.md.DbGu2QT1.js b/assets/zh_index.md.CZQRt_rQ.js similarity index 92% rename from assets/zh_index.md.DbGu2QT1.js rename to assets/zh_index.md.CZQRt_rQ.js index 581ec206..bce67d1e 100644 --- a/assets/zh_index.md.DbGu2QT1.js +++ b/assets/zh_index.md.CZQRt_rQ.js @@ -1 +1 @@ -import{_ as a,o as t,c as l,ag as i}from"./chunks/framework.ePeAWSvT.js";const _=JSON.parse('{"title":"Memoh 文档","description":"","frontmatter":{},"headers":[],"relativePath":"zh/index.md","filePath":"zh/index.md","lastUpdated":1770887583000}'),o={name:"zh/index.md"};function r(h,e,n,d,s,m){return t(),l("div",null,[...e[0]||(e[0]=[i('

Memoh 文档

Memoh 是一个多成员、长记忆、容器化的 AI Agent 系统。

文档章节

面向文档贡献者

当前维护范围

当前文档先聚焦账号语义与访问控制:

  • 区分系统账号与平台账号
  • 解释为什么账号绑定是账号作用域
  • 说明账号绑定与 bot 访问控制之间的关系

说明:“平台账号”指用户在外部平台上的真实账号(例如飞书账号),不是 Memoh 系统账号。

',10)])])}const p=a(o,[["render",r]]);export{_ as __pageData,p as default}; +import{_ as a,o as t,c as l,ag as i}from"./chunks/framework.BZohXCq9.js";const _=JSON.parse('{"title":"Memoh 文档","description":"","frontmatter":{},"headers":[],"relativePath":"zh/index.md","filePath":"zh/index.md","lastUpdated":1770887583000}'),o={name:"zh/index.md"};function r(h,e,n,d,s,m){return t(),l("div",null,[...e[0]||(e[0]=[i('

Memoh 文档

Memoh 是一个多成员、长记忆、容器化的 AI Agent 系统。

文档章节

面向文档贡献者

当前维护范围

当前文档先聚焦账号语义与访问控制:

  • 区分系统账号与平台账号
  • 解释为什么账号绑定是账号作用域
  • 说明账号绑定与 bot 访问控制之间的关系

说明:“平台账号”指用户在外部平台上的真实账号(例如飞书账号),不是 Memoh 系统账号。

',10)])])}const p=a(o,[["render",r]]);export{_ as __pageData,p as default}; diff --git a/assets/zh_index.md.DbGu2QT1.lean.js b/assets/zh_index.md.CZQRt_rQ.lean.js similarity index 69% rename from assets/zh_index.md.DbGu2QT1.lean.js rename to assets/zh_index.md.CZQRt_rQ.lean.js index b3fbd93d..ac6973e5 100644 --- a/assets/zh_index.md.DbGu2QT1.lean.js +++ b/assets/zh_index.md.CZQRt_rQ.lean.js @@ -1 +1 @@ -import{_ as a,o as t,c as l,ag as i}from"./chunks/framework.ePeAWSvT.js";const _=JSON.parse('{"title":"Memoh 文档","description":"","frontmatter":{},"headers":[],"relativePath":"zh/index.md","filePath":"zh/index.md","lastUpdated":1770887583000}'),o={name:"zh/index.md"};function r(h,e,n,d,s,m){return t(),l("div",null,[...e[0]||(e[0]=[i("",10)])])}const p=a(o,[["render",r]]);export{_ as __pageData,p as default}; +import{_ as a,o as t,c as l,ag as i}from"./chunks/framework.BZohXCq9.js";const _=JSON.parse('{"title":"Memoh 文档","description":"","frontmatter":{},"headers":[],"relativePath":"zh/index.md","filePath":"zh/index.md","lastUpdated":1770887583000}'),o={name:"zh/index.md"};function r(h,e,n,d,s,m){return t(),l("div",null,[...e[0]||(e[0]=[i("",10)])])}const p=a(o,[["render",r]]);export{_ as __pageData,p as default}; diff --git a/assets/zh_style_terminology.md.C89A7q1C.js b/assets/zh_style_terminology.md.DLv5QofI.js similarity index 96% rename from assets/zh_style_terminology.md.C89A7q1C.js rename to assets/zh_style_terminology.md.DLv5QofI.js index e446d13d..23f5f1a7 100644 --- a/assets/zh_style_terminology.md.C89A7q1C.js +++ b/assets/zh_style_terminology.md.DLv5QofI.js @@ -1 +1 @@ -import{_ as e,o as l,c as t,ag as a}from"./chunks/framework.ePeAWSvT.js";const u=JSON.parse('{"title":"术语规范","description":"","frontmatter":{},"headers":[],"relativePath":"zh/style/terminology.md","filePath":"zh/style/terminology.md","lastUpdated":1770887583000}'),i={name:"zh/style/terminology.md"};function r(n,o,s,d,c,h){return l(),t("div",null,[...o[0]||(o[0]=[a('

术语规范

适用对象:文档编写者与维护者。 本页用于统一写作语义,不是面向最终用户的功能说明。

规范术语

  • 系统账号(User:Memoh 系统内账号。
  • 平台账号(ChannelIdentity:用户在外部接入平台上的账号,不是 Memoh 内账号。
  • 接入平台(channel:承载入站消息的外部平台。
  • 账号绑定(bind:把平台账号关联到系统账号的过程。
  • 绑定码(Bind Code):用于账号绑定的一次性代码。
  • Bot:由系统账号管理的资源与授权边界。

推荐写法

  • 面向产品语义时,优先写 “平台账号”,不要直接写 actor。
  • 描述业务行为时,优先写 “接入平台”,不要直接写 channel。
  • 首次出现保留技术别名,后续可只用中文术语:
    • 平台账号(ChannelIdentity
    • 系统账号(User
    • 账号绑定(bind

禁用或不推荐写法

  • 在概念文档中直接使用 actor(除非明确引用代码符号)。
  • 使用含糊表述如 “平台用户”(未区分系统账号与平台账号)。
  • 写出“平台账号是 Memoh 内部账号”这类错误语义。

示例

  • 正确:“平台账号是用户在飞书上的账号,不是 Memoh 系统账号。”
  • 正确:“账号绑定用于把平台账号关联到系统账号。”
  • 错误:“Actor 是 Memoh 里的用户。”

自检清单

  • 是否明确区分了系统账号与平台账号?
  • 叙述中是否将 channel 表述为接入平台?
  • 是否仅在首处保留技术别名?
',12)])])}const m=e(i,[["render",r]]);export{u as __pageData,m as default}; +import{_ as e,o as l,c as t,ag as a}from"./chunks/framework.BZohXCq9.js";const u=JSON.parse('{"title":"术语规范","description":"","frontmatter":{},"headers":[],"relativePath":"zh/style/terminology.md","filePath":"zh/style/terminology.md","lastUpdated":1770887583000}'),i={name:"zh/style/terminology.md"};function r(n,o,s,d,c,h){return l(),t("div",null,[...o[0]||(o[0]=[a('

术语规范

适用对象:文档编写者与维护者。 本页用于统一写作语义,不是面向最终用户的功能说明。

规范术语

  • 系统账号(User:Memoh 系统内账号。
  • 平台账号(ChannelIdentity:用户在外部接入平台上的账号,不是 Memoh 内账号。
  • 接入平台(channel:承载入站消息的外部平台。
  • 账号绑定(bind:把平台账号关联到系统账号的过程。
  • 绑定码(Bind Code):用于账号绑定的一次性代码。
  • Bot:由系统账号管理的资源与授权边界。

推荐写法

  • 面向产品语义时,优先写 “平台账号”,不要直接写 actor。
  • 描述业务行为时,优先写 “接入平台”,不要直接写 channel。
  • 首次出现保留技术别名,后续可只用中文术语:
    • 平台账号(ChannelIdentity
    • 系统账号(User
    • 账号绑定(bind

禁用或不推荐写法

  • 在概念文档中直接使用 actor(除非明确引用代码符号)。
  • 使用含糊表述如 “平台用户”(未区分系统账号与平台账号)。
  • 写出“平台账号是 Memoh 内部账号”这类错误语义。

示例

  • 正确:“平台账号是用户在飞书上的账号,不是 Memoh 系统账号。”
  • 正确:“账号绑定用于把平台账号关联到系统账号。”
  • 错误:“Actor 是 Memoh 里的用户。”

自检清单

  • 是否明确区分了系统账号与平台账号?
  • 叙述中是否将 channel 表述为接入平台?
  • 是否仅在首处保留技术别名?
',12)])])}const m=e(i,[["render",r]]);export{u as __pageData,m as default}; diff --git a/assets/zh_style_terminology.md.C89A7q1C.lean.js b/assets/zh_style_terminology.md.DLv5QofI.lean.js similarity index 71% rename from assets/zh_style_terminology.md.C89A7q1C.lean.js rename to assets/zh_style_terminology.md.DLv5QofI.lean.js index 217f4f6d..5650b32c 100644 --- a/assets/zh_style_terminology.md.C89A7q1C.lean.js +++ b/assets/zh_style_terminology.md.DLv5QofI.lean.js @@ -1 +1 @@ -import{_ as e,o as l,c as t,ag as a}from"./chunks/framework.ePeAWSvT.js";const u=JSON.parse('{"title":"术语规范","description":"","frontmatter":{},"headers":[],"relativePath":"zh/style/terminology.md","filePath":"zh/style/terminology.md","lastUpdated":1770887583000}'),i={name:"zh/style/terminology.md"};function r(n,o,s,d,c,h){return l(),t("div",null,[...o[0]||(o[0]=[a("",12)])])}const m=e(i,[["render",r]]);export{u as __pageData,m as default}; +import{_ as e,o as l,c as t,ag as a}from"./chunks/framework.BZohXCq9.js";const u=JSON.parse('{"title":"术语规范","description":"","frontmatter":{},"headers":[],"relativePath":"zh/style/terminology.md","filePath":"zh/style/terminology.md","lastUpdated":1770887583000}'),i={name:"zh/style/terminology.md"};function r(n,o,s,d,c,h){return l(),t("div",null,[...o[0]||(o[0]=[a("",12)])])}const m=e(i,[["render",r]]);export{u as __pageData,m as default}; diff --git a/blogs/2026-02-16.html b/blogs/2026-02-16.html index 4162e7f4..3bd45be3 100644 --- a/blogs/2026-02-16.html +++ b/blogs/2026-02-16.html @@ -9,18 +9,18 @@ - + - - - + + +
Skip to content

Introduction to Memoh - The Case for an Always-On, Containerized Home Agent

Overview

We enter 2026 with a familiar tension: models get smarter every quarter, but the “agent experience” still breaks on context, latency, privacy, and real-world workflows. Over the past year, we kept circling three questions:

  • Where does the capability boundary of agents actually sit?
  • What’s the real value of long context?
  • What hardware form factor makes “always-on, personal AI” feel natural?

Memoh is our attempt to turn those questions into something buildable—not a manifesto, but a system that can survive contact with reality.

Story Time

Time travels fast. Somewhere between “I’ll remember this” and “wait, why did we decide that?”, a year disappears.

That’s the annoying part of building: most progress doesn’t feel like progress while it’s happening. It’s just a stream of small choices, half-finished threads, late-night fixes, and the occasional moment that actually clicks. The kind of moment where you sit back and think: okay—this is real.

Around the same time, I noticed something else: the internet started to feel smoother—and worse.

Text got cleaner, longer, more polite, more… empty. You could smell when something was generated: low information density, too many metaphors, too much agreement, not enough stakes.

I caught myself doing it too.

So I started forcing a constraint: say it plainly. Keep the density. Don’t inflate. Don’t hide behind style. If something mattered, anchor it to a real moment, a real trade-off, a real cost paid.

Because the thing LLMs can’t give you is not “intelligence.” It’s weight. The feeling that a human actually stood somewhere in time and wrote from that position.

That’s when I realized what I wanted wasn’t “an AI that can talk.” I wanted an AI that can live with you—quietly, continuously, accumulating context without turning your life into content sludge.

Phones were our first instinct—it's personal, powerful, always there. But mobile OS is closed: without OEM privileges you can build an app, not ambient infrastructure.

So we looked for the always-on node every home already has: the router (conceptually). Then the economics clash—router-class hardware can’t carry memory, RAG, tools, and multi-user agents. The device evolves: more RAM/storage, a screen, mic/speaker, tiny battery for take out, portable form.

Eventually it stops being a router. It becomes a new category: a home agent base layer.

What

Memoh is a containerized home/studio AI base layer: cloud-grade model capability paired with local-first memory (knowledge base, RAG/search, conversation history) that stays under your control.

Why

Long-context models raise the ceiling for agents—but they also make “fully local” expensive and “fully cloud” uncomfortable. People don’t want to re-brief AI every day, and they don’t want their durable context trapped in someone else’s feed. Containerization makes Memoh portable, reproducible, and safe to run as always-on infrastructure—so continuity becomes cheap, private, and dependable.

How

We run Memoh as a containerized stack: isolated services for storage (files/DB/vector index), retrieval, tool/runtime execution, and the control plane. Inference calls cloud APIs when you need frontier capability; durable memory and indexing stay local. The device acts as an always-on node (router-like, not a router) serving multiple users with strict boundaries: sharing is explicit, private context remains private, and everything is deployable/upgradable as versioned containers.

Features

  • Multi-bot Management: Create multiple bots; humans and bots, or bots with each other, can chat privately, in groups, or collaborate.

    Multi-bot Management

  • Containerized: Each bot runs in its own isolated container. Bots can freely execute commands, edit files, and access the network within their containers—like having their own computer.

    Containerized

  • Memory Engineering: Every chat is stored in the database, with the last 24 hours of context loaded by default. Each conversation turn is stored as memory and can be retrieved by bots through semantic search.

    Memory Engineering

  • Various Platforms: Supports Telegram, Lark (Feishu), and more.

  • Simple and Easy to Use: Configure bots and settings for Provider, Model, Memory, Channel, MCP, and Skills through a graphical interface—no coding required to set up your own AI bot.

  • Scheduled Tasks: Schedule tasks with cron expressions to run commands at specified times.

  • More...

Compare to OpenClaw

We share a core belief: both Memoh and OpenClaw treat the agent as more than a chatbox—we give the LLM a playground: a real environment where it can remember, use tools, and iterate.

Where Memoh differs:

  • Lighter and Faster: built as home/studio infrastructure, can be held in the edge device
  • Containerized by default: each bot gets an isolated container (files/commands/network/jobs)
  • Hybrid split: cloud inference, local-first memory + indexing
  • Multi-user first: explicit sharing and privacy boundaries, support a2a (Agent2Agent)
  • Sustainable: have an experienced team and confidence to push forward and build it

Conclusion

Memoh is built for one thing: always-on continuity—an AI that stays online, and a memory that stays yours.

We keep frontier inference in the cloud, keep durable context local, and run everything as a containerized, always-on stack. If you want an agent that feels less like an app and more like home infrastructure, that’s the bet Memoh is making.

Furthermore, we will continue to operate and permanently open-source Memoh, making it a product with long impact.

Published under AGPLv3

- + \ No newline at end of file diff --git a/blogs/index.html b/blogs/index.html index 9677948f..77c7e5c2 100644 --- a/blogs/index.html +++ b/blogs/index.html @@ -9,18 +9,18 @@ - + - - - + + +
Skip to content

Blogs

This section contains the latest blogs about Memoh.

Published under AGPLv3

- + \ No newline at end of file diff --git a/channels/discord.html b/channels/discord.html index c0a24729..86084d57 100644 --- a/channels/discord.html +++ b/channels/discord.html @@ -9,18 +9,18 @@ - + - - - + + + -
Skip to content

Discord Channel Configuration

Connecting your Memoh Bot to Discord allows it to join servers and interact with community members.

Step 1: Create a Discord Application

  1. Go to the Discord Developer Portal.
  2. Click New Application and give it a name.
  3. In the left sidebar, go to Bot.
  4. Click Reset Token to generate a Bot Token. Copy this token and store it securely.

Step 2: Configure Bot Settings

  1. Scroll down to the Privileged Gateway Intents section.
  2. Enable Message Content Intent (required for the bot to read user messages).
  3. Save changes.

Step 3: Invite the Bot to Your Server

  1. Go to OAuth2 > URL Generator.
  2. Select scopes: bot, applications.commands.
  3. Select permissions: Send Messages, Read Message History, Embed Links, Attach Files.
  4. Copy the generated URL and open it in your browser.
  5. Select the server you want to add the bot to and authorize it.

Official Guide: Discord Developer Portal - Bots

Step 4: Configure Memoh

  1. Go to your Bot's Channels tab in the Memoh Web UI.
  2. Click Add Channel and select Discord.
  3. Paste your Bot Token.
  4. Click Save and Enable.

Features Supported

  • Message Content: Full access to chat text.
  • Attachments: Support for images and files.
  • Commands: Integration with Discord's slash commands (if configured via MCP).

Published under AGPLv3

- +
Skip to content

Discord Channel Configuration

Connecting your Memoh Bot to Discord allows it to join servers and interact with community members.

Step 1: Create a Discord Application

  1. Go to the Discord Developer Portal.
  2. Click New Application and give it a name.
  3. In the left sidebar, go to Bot.
  4. Click Reset Token to generate a Bot Token. Copy this token and store it securely.

Step 2: Configure Bot Settings

  1. Scroll down to the Privileged Gateway Intents section.
  2. Enable Message Content Intent (required for the bot to read user messages).
  3. Save changes.

Step 3: Invite the Bot to Your Server

  1. Go to OAuth2 > URL Generator.
  2. Select scopes: bot, applications.commands.
  3. Select permissions: Send Messages, Read Message History, Embed Links, Attach Files.
  4. Copy the generated URL and open it in your browser.
  5. Select the server you want to add the bot to and authorize it.

Official Guide: Discord Developer Portal - Bots

Step 4: Configure Memoh

  1. Go to your Bot's Channels tab in the Memoh Web UI.
  2. Click Add Channel and select Discord.
  3. Paste your Bot Token.
  4. Click Save and Enable.

Features Supported

  • Message Content: Full access to chat text.
  • Attachments: Support for images and files.
  • Commands: Integration with Discord's slash commands (if configured via MCP).

Published under AGPLv3

+ \ No newline at end of file diff --git a/channels/feishu.html b/channels/feishu.html index 83073dd9..927a3ec1 100644 --- a/channels/feishu.html +++ b/channels/feishu.html @@ -9,18 +9,18 @@ - + - - - + + + -
Skip to content

Feishu (Lark) Channel Configuration

Memoh supports integrating with Feishu (Lark) via the Open Platform. This allows your enterprise bots to interact with users in groups or private chats.

Step 1: Create a Feishu App

  1. Go to the Feishu Open Platform and log in.
  2. Click Create Custom App.
  3. Enter a name and description, then click Create.
  4. In the left sidebar, go to App Settings > Credentials & Basic Info.
  5. Copy your App ID and App Secret.

Step 2: Enable Bot Capability

  1. In the Feishu Developer Console, go to Capabilities > Bot.
  2. Click Enable Bot.

Step 3: Configure Permissions

  1. Go to Capabilities > Permissions.
  2. Search for and enable the following permissions (at minimum):
    • im:message (Receive and send messages)
    • im:chat (Access group chat information)
  3. Click Apply for Permissions if required by your organization.

Step 4: Configure Events (Webhook Mode)

  1. In Memoh, go to your Bot's Channels tab and add a Feishu channel.
  2. Choose Inbound Mode: webhook.
  3. Fill in your App ID and App Secret.
  4. Click Save. Memoh will generate a Webhook Callback URL.
  5. Copy this URL.
  6. In the Feishu Console, go to App Settings > Event Subscriptions.
  7. Paste the URL into the Verification URL field and save.
  8. Add events like Receive Message (im.message.receive_v1).

Official Guide: Feishu Custom Bot Guide

Step 5: Publish Your App

  1. In the Feishu Console, go to App Release > Version Management & Release.
  2. Click Create a Version, fill in the details, and submit for approval.
  3. Once approved and published, the bot is ready to use.

Published under AGPLv3

- +
Skip to content

Feishu (Lark) Channel Configuration

Memoh supports integrating with Feishu (Lark) via the Open Platform. This allows your enterprise bots to interact with users in groups or private chats.

Step 1: Create a Feishu App

  1. Go to the Feishu Open Platform and log in.
  2. Click Create Custom App.
  3. Enter a name and description, then click Create.
  4. In the left sidebar, go to App Settings > Credentials & Basic Info.
  5. Copy your App ID and App Secret.

Step 2: Enable Bot Capability

  1. In the Feishu Developer Console, go to Capabilities > Bot.
  2. Click Enable Bot.

Step 3: Configure Permissions

  1. Go to Capabilities > Permissions.
  2. Search for and enable the following permissions (at minimum):
    • im:message (Receive and send messages)
    • im:chat (Access group chat information)
  3. Click Apply for Permissions if required by your organization.

Step 4: Configure Events (Webhook Mode)

  1. In Memoh, go to your Bot's Channels tab and add a Feishu channel.
  2. Choose Inbound Mode: webhook.
  3. Fill in your App ID and App Secret.
  4. Click Save. Memoh will generate a Webhook Callback URL.
  5. Copy this URL.
  6. In the Feishu Console, go to App Settings > Event Subscriptions.
  7. Paste the URL into the Verification URL field and save.
  8. Add events like Receive Message (im.message.receive_v1).

Official Guide: Feishu Custom Bot Guide

Step 5: Publish Your App

  1. In the Feishu Console, go to App Release > Version Management & Release.
  2. Click Create a Version, fill in the details, and submit for approval.
  3. Once approved and published, the bot is ready to use.

Published under AGPLv3

+ \ No newline at end of file diff --git a/channels/index.html b/channels/index.html index 8d4dddf1..617dec95 100644 --- a/channels/index.html +++ b/channels/index.html @@ -9,18 +9,18 @@ - + - - - + + + -
Skip to content

Channels Overview

Channels are the gateways that connect your Memoh Bots to the outside world. By configuring channels, you can interact with your bots via your favorite messaging platforms.

Memoh currently supports the following channels:

  • Telegram: The most feature-rich integration with streaming and attachment support.
  • Feishu (Lark): Enterprise-ready integration for business workflows.
  • Discord: Community-focused integration for servers and direct messages.
  • Email: Connect via standard SMTP and IMAP (configured through Email Providers).
  • Web: Built-in chat interface for immediate access.

General Setup Flow

  1. Create an external app/bot: Register your bot on the target platform (e.g., via BotFather on Telegram).
  2. Obtain credentials: Fetch API tokens, App IDs, or secrets.
  3. Configure in Memoh: Add the channel to your Bot's settings and paste the credentials.
  4. Enable: Activate the channel to start receiving and sending messages.

Choose a channel from the sidebar to see detailed configuration guides for each platform.

Published under AGPLv3

- +
Skip to content

Channels Overview

Channels are the gateways that connect your Memoh Bots to the outside world. By configuring channels, you can interact with your bots via your favorite messaging platforms.

Memoh currently supports the following channels:

  • Telegram: The most feature-rich integration with streaming and attachment support.
  • Feishu (Lark): Enterprise-ready integration for business workflows.
  • Discord: Community-focused integration for servers and direct messages.
  • QQ: Quick setup for personal DM bots via the dedicated AI bot registration portal.
  • Email: Connect via standard SMTP and IMAP (configured through Email Providers).
  • Web: Built-in chat interface for immediate access.

General Setup Flow

  1. Create an external app/bot: Register your bot on the target platform (e.g., via BotFather on Telegram).
  2. Obtain credentials: Fetch API tokens, App IDs, or secrets.
  3. Configure in Memoh: Add the channel to your Bot's settings and paste the credentials.
  4. Enable: Activate the channel to start receiving and sending messages.

Choose a channel from the sidebar to see detailed configuration guides for each platform.

Published under AGPLv3

+ \ No newline at end of file diff --git a/channels/qq.html b/channels/qq.html new file mode 100644 index 00000000..fb289977 --- /dev/null +++ b/channels/qq.html @@ -0,0 +1,26 @@ + + + + + + QQ Channel Configuration | Memoh Documentation + + + + + + + + + + + + + + + +
Skip to content

QQ Channel Configuration

Connecting your Memoh Bot to QQ allows it to interact with users through QQ's official Bot platform.

Step 1: Create a QQ Bot

  1. Go to the QQ Bot Open Platform and log in with your QQ account.
  2. Click Create Bot (创建机器人) - no approval required. Each account can create up to 5 bots.
  3. Copy the AppID and AppSecret displayed on the page.

Important: AppSecret is only shown once. Save it securely - viewing it again will force a reset.

Step 2: Configure Memoh

  1. Go to your Bot's Channels tab in the Memoh Web UI.
  2. Click Add Channel and select QQ.
  3. Paste your AppID and AppSecret.
  4. Configure optional settings:
    • Markdown Support: Enable Markdown formatting (default: enabled).
    • Enable Input Hint: Show typing indicators (default: enabled).
  5. Click Save and Enable.

Step 3: Bind Your Identity (Optional)

If your bot is a personal type bot, bind your QQ identity to chat with it directly:

  1. In Memoh Web UI, go to Settings > Bind Code.
  2. Select QQ and click Generate.
  3. Copy the code and send it to your bot in a QQ direct message.

Features Supported

  • Message Content: Full support for text messages.
  • Markdown: Rich formatting with bold, italic, code blocks, and links.
  • Attachments: Support for images and files.
  • Typing Indicators: Visual feedback while generating responses.
  • Target Types: C2C (direct message), group, and channel.

Official Resources

Published under AGPLv3

+ + + + \ No newline at end of file diff --git a/channels/telegram.html b/channels/telegram.html index 942d6922..da041a7d 100644 --- a/channels/telegram.html +++ b/channels/telegram.html @@ -9,18 +9,18 @@ - + - - - + + + -
Skip to content

Telegram Channel Configuration

This guide walks you through connecting your Memoh Bot to Telegram. Telegram is one of the most supported platforms in Memoh, featuring streaming responses, Markdown formatting, and attachment support.

Step 1: Create a Telegram Bot

You need to create a bot on Telegram to get an API token.

  1. Open Telegram and search for the official @BotFather bot.
  2. Send the /newbot command.
  3. Follow the prompts:
    • Name: Choose a display name for your bot (e.g., My Memoh Bot).
    • Username: Choose a unique username ending in bot (e.g., my_memoh_bot).
  4. BotFather will provide you with an API Token (e.g., 123456789:ABCdefGHIjklMNOpqrsTUVwxyz). Keep this token secret.

Official Guide: Telegram Bot Tutorial

Step 2: Configure Memoh

  1. Go to your Bot's Detail Page in the Memoh Web UI.
  2. Select the Channels tab.
  3. Click Add Channel and select Telegram.
  4. Paste your API Token into the credentials field.
  5. Click Save and Enable.

Step 3: Bind Your Identity (Optional)

If your bot is a personal type bot, you need to bind your Telegram identity to your Memoh account to chat with it directly.

  1. In Memoh Web UI, go to Settings > Bind Code.
  2. Select Telegram and click Generate.
  3. Copy the code.
  4. Open a chat with your new bot on Telegram and send the bind code.
  5. The bot should respond that your identity is successfully linked.

Features Supported

  • Streaming: Responses appear as the bot "thinks."
  • Markdown: Support for bold, italic, code blocks, and links.
  • Attachments: Send images or files to the bot; the bot can also send files back.
  • Replies: The bot understands context from message replies.

Published under AGPLv3

- +
Skip to content

Telegram Channel Configuration

This guide walks you through connecting your Memoh Bot to Telegram. Telegram is one of the most supported platforms in Memoh, featuring streaming responses, Markdown formatting, and attachment support.

Step 1: Create a Telegram Bot

You need to create a bot on Telegram to get an API token.

  1. Open Telegram and search for the official @BotFather bot.
  2. Send the /newbot command.
  3. Follow the prompts:
    • Name: Choose a display name for your bot (e.g., My Memoh Bot).
    • Username: Choose a unique username ending in bot (e.g., my_memoh_bot).
  4. BotFather will provide you with an API Token (e.g., 123456789:ABCdefGHIjklMNOpqrsTUVwxyz). Keep this token secret.

Official Guide: Telegram Bot Tutorial

Step 2: Configure Memoh

  1. Go to your Bot's Detail Page in the Memoh Web UI.
  2. Select the Channels tab.
  3. Click Add Channel and select Telegram.
  4. Paste your API Token into the credentials field.
  5. Click Save and Enable.

Step 3: Bind Your Identity (Optional)

If your bot is a personal type bot, you need to bind your Telegram identity to your Memoh account to chat with it directly.

  1. In Memoh Web UI, go to Settings > Bind Code.
  2. Select Telegram and click Generate.
  3. Copy the code.
  4. Open a chat with your new bot on Telegram and send the bind code.
  5. The bot should respond that your identity is successfully linked.

Features Supported

  • Streaming: Responses appear as the bot "thinks."
  • Markdown: Support for bold, italic, code blocks, and links.
  • Attachments: Send images or files to the bot; the bot can also send files back.
  • Replies: The bot understands context from message replies.

Published under AGPLv3

+ \ No newline at end of file diff --git a/getting-started/bot.html b/getting-started/bot.html index a98faad5..82ddfe73 100644 --- a/getting-started/bot.html +++ b/getting-started/bot.html @@ -9,18 +9,18 @@ - + - - - + + + -
Skip to content

Bot Management

A Bot is an independent AI agent that comes with its own isolated container, persistent memory, and configurable personality. Bots can chat via various messaging platforms (Channels) and perform complex tasks using specialized tools.

Creating a Bot

  1. Navigate to the Bots page from the sidebar.
  2. Click the Create Bot button.
  3. Fill in the basic info:
    • Display Name: The name users will see in group chats.
    • Avatar: A URL for the bot's profile picture.
    • Type: Choose personal (private to owner) or public (accessible to guests).
  4. Click Create.

Bot Detail Page

Once created, clicking on a bot card takes you to its Detail Page, where you can manage its entire lifecycle through several specialized tabs.

Overview Tab

The Overview tab provides a quick health check of the bot's services. It monitors:

  • Container status (running/stopped)
  • Database connectivity
  • Channel configurations
  • Memory system health

If any check shows a warning or error, follow the provided details to troubleshoot.

Configuring the Bot's Core Settings

After creating a bot, the most important step is configuring its runtime settings. These define how the bot talks, remembers, searches, and uses browser automation.

  1. Navigate to your bot's Detail Page.
  2. Go to the Settings tab.
  3. Configure the core fields:
    • Chat Model: Used for standard conversations with users.
    • Memory Provider: Select the memory backend the bot should use.
    • Search Provider: Select the search engine provider for web search.
    • Browser Context: Select the browser profile the bot should use for browser automation.
  4. Click Save at the bottom of the form.

If you have not created these resources yet, set them up first:


Settings Tab Reference

The Settings tab contains all the core parameters that define your bot's behavior and runtime configuration.

FieldDescription
Chat ModelThe main LLM used for generating chat responses.
Memory ProviderThe memory backend assigned to the bot. The built-in provider can optionally define its own memory and embedding models.
Search ProviderThe search engine used for web browsing capabilities.
Browser ContextThe browser environment used for web automation, such as viewport, locale, and mobile behavior.
Max Context Load TimeTime limit (seconds) for loading context before generation.
Max Context TokensToken limit for the loaded conversation history.
LanguageThe bot's primary communication language.
Reasoning EnabledIf the selected model supports reasoning (like OpenAI o1), enable this to use its deep thinking capabilities.
Reasoning EffortSet the level of reasoning effort (low, medium, high).
Allow Guest(Public bots only) If enabled, non-registered users can interact with the bot.

Deleting a Bot

To permanently remove a bot and all its associated data (including container files and memory):

  1. Navigate to the Settings tab in the Bot Detail page.
  2. Scroll to the Danger Zone at the bottom.
  3. Click Delete Bot and confirm the action.

Warning: This action is irreversible. All persistent data for this bot will be lost.

Published under AGPLv3

- +
Skip to content

Bot Management

A Bot is an independent AI agent that comes with its own isolated container, persistent memory, and configurable personality. Bots can chat via various messaging platforms (Channels) and perform complex tasks using specialized tools.

Creating a Bot

  1. Navigate to the Bots page from the sidebar.
  2. Click the Create Bot button.
  3. Fill in the basic info:
    • Display Name: The name users will see in group chats.
    • Avatar: A URL for the bot's profile picture.
    • Type: Choose personal (private to owner) or public (accessible to guests).
  4. Click Create.

Bot Detail Page

Once created, clicking on a bot card takes you to its Detail Page, where you can manage its entire lifecycle through several specialized tabs.

Overview Tab

The Overview tab provides a quick health check of the bot's services. It monitors:

  • Container status (running/stopped)
  • Database connectivity
  • Channel configurations
  • Memory system health

If any check shows a warning or error, follow the provided details to troubleshoot.

Configuring the Bot's Core Settings

After creating a bot, the most important step is configuring its runtime settings. These define how the bot talks, remembers, searches, and uses browser automation.

  1. Navigate to your bot's Detail Page.
  2. Go to the Settings tab.
  3. Configure the core fields:
    • Chat Model: Used for standard conversations with users.
    • Memory Provider: Select the memory backend the bot should use.
    • Search Provider: Select the search engine provider for web search.
    • Browser Context: Select the browser profile the bot should use for browser automation.
  4. Click Save at the bottom of the form.

If you have not created these resources yet, set them up first:


Settings Tab Reference

The Settings tab contains all the core parameters that define your bot's behavior and runtime configuration.

FieldDescription
Chat ModelThe main LLM used for generating chat responses.
Memory ProviderThe memory backend assigned to the bot. The built-in provider can optionally define its own memory and embedding models.
Search ProviderThe search engine used for web browsing capabilities.
Browser ContextThe browser environment used for web automation, such as viewport, locale, and mobile behavior.
Max Context Load TimeTime limit (seconds) for loading context before generation.
Max Context TokensToken limit for the loaded conversation history.
LanguageThe bot's primary communication language.
Reasoning EnabledIf the selected model supports reasoning (like OpenAI o1), enable this to use its deep thinking capabilities.
Reasoning EffortSet the level of reasoning effort (low, medium, high).
Allow Guest(Public bots only) If enabled, non-registered users can interact with the bot.

Deleting a Bot

To permanently remove a bot and all its associated data (including container files and memory):

  1. Navigate to the Settings tab in the Bot Detail page.
  2. Scroll to the Danger Zone at the bottom.
  3. Click Delete Bot and confirm the action.

Warning: This action is irreversible. All persistent data for this bot will be lost.

Published under AGPLv3

+ \ No newline at end of file diff --git a/getting-started/browser.html b/getting-started/browser.html index 16c40e66..d1966ff9 100644 --- a/getting-started/browser.html +++ b/getting-started/browser.html @@ -9,18 +9,18 @@ - + - - - + + + -
Skip to content

Browser Contexts

Memoh can give a bot access to a headless browser through the Browser Gateway. A Browser Context stores the browser environment a bot should use, such as viewport size, locale, timezone, and mobile behavior.

Once a browser context is assigned to a bot, the bot can use browser tools to open pages, click elements, fill forms, capture screenshots, and inspect page content.


Concept: Browser Gateway

The Browser Gateway is powered by Playwright and provides browser automation for bots. In practice, a browser context acts like a reusable browser profile configuration for one or more bots.

Typical use cases include:

  • Navigating websites
  • Clicking buttons and links
  • Filling and submitting forms
  • Reading rendered page content
  • Capturing screenshots or PDFs

Creating a Browser Context

Manage contexts from the Browser Contexts page in the sidebar.

  1. Navigate to the Browser Contexts page.
  2. Click Add Browser Context.
  3. Fill in the following field:
    • Name: A display name for this browser context.
  4. Click Create.

Configuring a Browser Context

After creating a context, select it from the sidebar and update its settings.

FieldDescription
NameThe display name shown in the UI.
Viewport WidthBrowser viewport width in pixels.
Viewport HeightBrowser viewport height in pixels.
User AgentOptional custom browser user agent string.
Device Scale FactorOptional device pixel ratio.
LocaleOptional locale such as en-US or zh-CN.
Timezone IDOptional timezone such as UTC or Asia/Shanghai.
Is MobileEnables mobile-style browser behavior.
Ignore HTTPS ErrorsAllows navigation to sites with invalid HTTPS certificates.

Managing Contexts

  • Edit: Select a context and update its configuration.
  • Delete: Remove a context you no longer use.

Assigning a Browser Context to a Bot

  1. Navigate to the Bots page and open your bot.
  2. Go to the Settings tab.
  3. Find the Browser Context dropdown.
  4. Select the context you created.
  5. Click Save.

After saving, the bot can use that browser context when browser tools are invoked.


Bot Interaction

When a browser context is configured, the bot can use built-in browser tools such as:

  • browser_action: perform actions like navigation, click, fill, select, scroll, tab management, screenshot, or PDF export
  • browser_observe: inspect the current page and gather information for the model

This lets the bot interact with real websites instead of relying only on static HTML or search results.


Next Steps

Published under AGPLv3

- +
Skip to content

Browser Contexts

Memoh can give a bot access to a headless browser through the Browser Gateway. A Browser Context stores the browser environment a bot should use, such as viewport size, locale, timezone, and mobile behavior.

Once a browser context is assigned to a bot, the bot can use browser tools to open pages, click elements, fill forms, capture screenshots, and inspect page content.


Concept: Browser Gateway

The Browser Gateway is powered by Playwright and provides browser automation for bots. In practice, a browser context acts like a reusable browser profile configuration for one or more bots.

Typical use cases include:

  • Navigating websites
  • Clicking buttons and links
  • Filling and submitting forms
  • Reading rendered page content
  • Capturing screenshots or PDFs

Creating a Browser Context

Manage contexts from the Browser Contexts page in the sidebar.

  1. Navigate to the Browser Contexts page.
  2. Click Add Browser Context.
  3. Fill in the following field:
    • Name: A display name for this browser context.
  4. Click Create.

Configuring a Browser Context

After creating a context, select it from the sidebar and update its settings.

FieldDescription
NameThe display name shown in the UI.
Viewport WidthBrowser viewport width in pixels.
Viewport HeightBrowser viewport height in pixels.
User AgentOptional custom browser user agent string.
Device Scale FactorOptional device pixel ratio.
LocaleOptional locale such as en-US or zh-CN.
Timezone IDOptional timezone such as UTC or Asia/Shanghai.
Is MobileEnables mobile-style browser behavior.
Ignore HTTPS ErrorsAllows navigation to sites with invalid HTTPS certificates.

Managing Contexts

  • Edit: Select a context and update its configuration.
  • Delete: Remove a context you no longer use.

Assigning a Browser Context to a Bot

  1. Navigate to the Bots page and open your bot.
  2. Go to the Settings tab.
  3. Find the Browser Context dropdown.
  4. Select the context you created.
  5. Click Save.

After saving, the bot can use that browser context when browser tools are invoked.


Bot Interaction

When a browser context is configured, the bot can use built-in browser tools such as:

  • browser_action: perform actions like navigation, click, fill, select, scroll, tab management, screenshot, or PDF export
  • browser_observe: inspect the current page and gather information for the model

This lets the bot interact with real websites instead of relying only on static HTML or search results.


Next Steps

Published under AGPLv3

+ \ No newline at end of file diff --git a/getting-started/channels.html b/getting-started/channels.html index 889a6d1f..e706a8bc 100644 --- a/getting-started/channels.html +++ b/getting-started/channels.html @@ -9,18 +9,18 @@ - + - - - + + + -
Skip to content

Bot Channels

Channels connect your Bot to various messaging platforms, allowing you to interact with it using your favorite chat applications.

Concept: Unified Communication

Memoh acts as a hub that bridges different messaging services. You can configure multiple channels for a single bot, enabling it to chat on Telegram, Discord, and more simultaneously.


Supported Channels

Configure your bot's connections from the Channels tab in the Bot Detail page.

For detailed step-by-step guides on how to create and configure bots for each platform, see:


Configuration Flow

1. Adding a Channel

  1. Click Add Channel.
  2. Select the platform from the list.
  3. Fill in the required credentials and configuration. The fields are dynamic and change based on the selected channel.

2. Common Fields

FieldDescription
CredentialsAPI tokens, secrets, or bot keys provided by the platform.
DisabledQuickly enable or disable a channel without removing its configuration.
RoutingConfigure how messages are mapped between the platform and Memoh.

3. Special Case: Feishu Webhook

If using Feishu in webhook inbound mode:

  1. Memoh will generate a Webhook Callback URL.
  2. Copy this URL and paste it into your Feishu App's event configuration.
  3. This allows Feishu to send messages directly to Memoh.

Operations

  • Save: Update the configuration.
  • Save and Enable: Update and immediately activate the channel.
  • Enable/Disable Toggle: Switch the channel's active status.
  • Delete: Permanently remove a channel's configuration.

Published under AGPLv3

- +
Skip to content

Bot Channels

Channels connect your Bot to various messaging platforms, allowing you to interact with it using your favorite chat applications.

Concept: Unified Communication

Memoh acts as a hub that bridges different messaging services. You can configure multiple channels for a single bot, enabling it to chat on Telegram, Discord, and more simultaneously.


Supported Channels

Configure your bot's connections from the Channels tab in the Bot Detail page.

For detailed step-by-step guides on how to create and configure bots for each platform, see:


Configuration Flow

1. Adding a Channel

  1. Click Add Channel.
  2. Select the platform from the list.
  3. Fill in the required credentials and configuration. The fields are dynamic and change based on the selected channel.

2. Common Fields

FieldDescription
CredentialsAPI tokens, secrets, or bot keys provided by the platform.
DisabledQuickly enable or disable a channel without removing its configuration.
RoutingConfigure how messages are mapped between the platform and Memoh.

3. Special Case: Feishu Webhook

If using Feishu in webhook inbound mode:

  1. Memoh will generate a Webhook Callback URL.
  2. Copy this URL and paste it into your Feishu App's event configuration.
  3. This allows Feishu to send messages directly to Memoh.

Operations

  • Save: Update the configuration.
  • Save and Enable: Update and immediately activate the channel.
  • Enable/Disable Toggle: Switch the channel's active status.
  • Delete: Permanently remove a channel's configuration.

Published under AGPLv3

+ \ No newline at end of file diff --git a/getting-started/container.html b/getting-started/container.html index 66950b9c..64f691f0 100644 --- a/getting-started/container.html +++ b/getting-started/container.html @@ -9,18 +9,18 @@ - + - - - + + + -
Skip to content

Bot Container Management

Every Bot in Memoh operates within its own isolated container environment. This isolation ensures security, provides a dedicated filesystem, and allows the bot to execute code or commands without affecting other bots or the host system.

Concept: The Isolated Workspace

The container acts as the bot's private "computer." Within it, the bot can:

  • Store and modify files
  • Install software via package managers
  • Execute scripts
  • Maintain state across multiple sessions

Operations

Manage the lifecycle of your bot's environment from the Container tab in the Bot Detail page.

Lifecycle Actions

  • Create: Initialize the container if it doesn't exist (using the configured image).
  • Start: Launch the container. The bot must have a running container to perform many operations like file editing or executing tools.
  • Stop: Gracefully shut down the container to save resources.
  • Delete: Remove the container instance. This will delete the temporary state but preserve the data in persistent volumes.

Container Information

The Container tab displays real-time data about the bot's runtime:

  • Container ID: Unique identifier for the instance.
  • Status: Whether it's currently running, stopped, or creating.
  • Image: The Docker/Containerd image used as the base.
  • Paths: Host and container paths for data persistence.
  • Tasks: Number of active background tasks running in the container.

Snapshots

Snapshots allow you to capture the current state of the bot's container and restore it later. This is useful for:

  • Saving a known good configuration
  • Versioning the bot's environment
  • Testing complex changes safely

Creating a Snapshot

  1. Ensure the container is stopped or in a stable state.
  2. Click Create Snapshot.
  3. Provide a name for the snapshot.

Restoring a Snapshot

  • Find the desired snapshot in the list and click Restore. This will reset the container to the captured state.

Managing Snapshots

  • View a list of existing snapshots with their creation timestamps and parent relationships.
  • Use the Delete button next to a snapshot to remove it.

Published under AGPLv3

- +
Skip to content

Bot Container Management

Every Bot in Memoh operates within its own isolated container environment. This isolation ensures security, provides a dedicated filesystem, and allows the bot to execute code or commands without affecting other bots or the host system.

Concept: The Isolated Workspace

The container acts as the bot's private "computer." Within it, the bot can:

  • Store and modify files
  • Install software via package managers
  • Execute scripts
  • Maintain state across multiple sessions

Operations

Manage the lifecycle of your bot's environment from the Container tab in the Bot Detail page.

Lifecycle Actions

  • Create: Initialize the container if it doesn't exist (using the configured image).
  • Start: Launch the container. The bot must have a running container to perform many operations like file editing or executing tools.
  • Stop: Gracefully shut down the container to save resources.
  • Delete: Remove the container instance. This will delete the temporary state but preserve the data in persistent volumes.

Container Information

The Container tab displays real-time data about the bot's runtime:

  • Container ID: Unique identifier for the instance.
  • Status: Whether it's currently running, stopped, or creating.
  • Image: The Docker/Containerd image used as the base.
  • Paths: Host and container paths for data persistence.
  • Tasks: Number of active background tasks running in the container.

Snapshots

Snapshots allow you to capture the current state of the bot's container and restore it later. This is useful for:

  • Saving a known good configuration
  • Versioning the bot's environment
  • Testing complex changes safely

Creating a Snapshot

  1. Ensure the container is stopped or in a stable state.
  2. Click Create Snapshot.
  3. Provide a name for the snapshot.

Restoring a Snapshot

  • Find the desired snapshot in the list and click Restore. This will reset the container to the captured state.

Managing Snapshots

  • View a list of existing snapshots with their creation timestamps and parent relationships.
  • Use the Delete button next to a snapshot to remove it.

Published under AGPLv3

+ \ No newline at end of file diff --git a/getting-started/email.html b/getting-started/email.html index e70738bb..baad7cce 100644 --- a/getting-started/email.html +++ b/getting-started/email.html @@ -9,18 +9,18 @@ - + - - - + + + -
Skip to content

Email Providers and Bindings

Memoh allows your Bot to send and receive emails, providing another powerful channel for communication and task management.

Concept: Email as a Bot Channel

Connecting email to your Bot involves two steps:

  1. Email Provider: Configure a connection to an email service (like Mailgun or a generic SMTP server).
  2. Email Binding: Link a specific email address from a provider to a Bot.

Email Provider

Manage your email service connections from the Email Provider page in the sidebar.

Creating a Provider

  1. Navigate to the Email Provider page from the sidebar.
  2. Click Add Email Provider.
  3. Choose the provider type:
    • Mailgun: For high-volume delivery.
    • Generic SMTP: For traditional email servers.
  4. Fill in the required fields (e.g., domain, api_key, host, port, username, password).
  5. Click Create.

Bot Email Bindings

Configure your bot's email capabilities from the Email tab in the Bot Detail page.

Adding a Binding

  1. Click Add Binding.
  2. Select the Email Provider you created.
  3. Provide the Email Address to be associated with the bot.
  4. Set the bot's permissions:
    • Can Read: If enabled, the bot can check and process incoming emails.
    • Can Write: If enabled, the bot can compose and send outgoing emails.
    • Can Delete: If enabled, the bot can manage its own email inbox.
  5. Click Create.

Outbox and History

The Email tab also provides an Outbox showing an audit log of all emails sent by the bot:

  • To: The recipient's email address.
  • Subject: The email's subject line.
  • Status: Whether the email was sent successfully.
  • Sent At: The timestamp of the email delivery.

Bot Interaction

  • The bot can use its email permissions to send reports, respond to user inquiries, or trigger actions based on incoming mail.
  • Outgoing emails are tracked in the outbox for monitoring and troubleshooting.
  • The bot handles email in a structured way, allowing it to "converse" via email just as it does via chat.

Published under AGPLv3

- +
Skip to content

Email Providers and Bindings

Memoh allows your Bot to send and receive emails, providing another powerful channel for communication and task management.

Concept: Email as a Bot Channel

Connecting email to your Bot involves two steps:

  1. Email Provider: Configure a connection to an email service (like Mailgun or a generic SMTP server).
  2. Email Binding: Link a specific email address from a provider to a Bot.

Email Provider

Manage your email service connections from the Email Provider page in the sidebar.

Creating a Provider

  1. Navigate to the Email Provider page from the sidebar.
  2. Click Add Email Provider.
  3. Choose the provider type:
    • Mailgun: For high-volume delivery.
    • Generic SMTP: For traditional email servers.
  4. Fill in the required fields (e.g., domain, api_key, host, port, username, password).
  5. Click Create.

Bot Email Bindings

Configure your bot's email capabilities from the Email tab in the Bot Detail page.

Adding a Binding

  1. Click Add Binding.
  2. Select the Email Provider you created.
  3. Provide the Email Address to be associated with the bot.
  4. Set the bot's permissions:
    • Can Read: If enabled, the bot can check and process incoming emails.
    • Can Write: If enabled, the bot can compose and send outgoing emails.
    • Can Delete: If enabled, the bot can manage its own email inbox.
  5. Click Create.

Outbox and History

The Email tab also provides an Outbox showing an audit log of all emails sent by the bot:

  • To: The recipient's email address.
  • Subject: The email's subject line.
  • Status: Whether the email was sent successfully.
  • Sent At: The timestamp of the email delivery.

Bot Interaction

  • The bot can use its email permissions to send reports, respond to user inquiries, or trigger actions based on incoming mail.
  • Outgoing emails are tracked in the outbox for monitoring and troubleshooting.
  • The bot handles email in a structured way, allowing it to "converse" via email just as it does via chat.

Published under AGPLv3

+ \ No newline at end of file diff --git a/getting-started/files.html b/getting-started/files.html index d5e90bb7..67e2d19d 100644 --- a/getting-started/files.html +++ b/getting-started/files.html @@ -9,18 +9,18 @@ - + - - - + + + -
Skip to content

Bot Files Management

Every Memoh Bot has its own dedicated filesystem inside its isolated container. You can manage this filesystem directly from the Files tab in the Bot Detail page.


Operations

The FileManager component provides a familiar file-browsing experience with a toolbar, directory tree, and integrated editor.

Browsing and Navigation

  • Breadcrumb Navigation: Quickly move between parent directories.
  • Refresh: Reload the file list to see the latest changes (e.g., files created by the bot).
  • New Folder: Create a directory within the current path.

Managing Files

  • Upload: Select files from your local computer to transfer them into the bot's container.
  • Rename: Click on a file or folder and use the rename action to update its identifier.
  • Delete: Remove files or folders (with recursive support for directories).
  • Download: Retrieve a file from the bot's container back to your local machine.

Viewing and Editing

The integrated FileViewer allows you to interact with the bot's files without leaving the web UI.

Text Files

  • Read/Edit: Click a text file (e.g., .md, .js, .py, .toml) to open it in the built-in Monaco Editor.
  • Syntax Highlighting: Supports common programming languages and configuration formats.
  • Save: Modify the file's content and click Save to apply the changes to the bot's filesystem.

Images

  • Preview: Click an image file (e.g., .png, .jpg, .webp) to see a visual preview directly in the file manager.

Bot Interaction with Files

Remember that the bot itself can also perform these operations:

  • Use its Skills or MCP tools to read, write, and manage its own files.
  • The Files tab is your portal to monitor and manually intervene in the bot's workspace.

Published under AGPLv3

- +
Skip to content

Bot Files Management

Every Memoh Bot has its own dedicated filesystem inside its isolated container. You can manage this filesystem directly from the Files tab in the Bot Detail page.


Operations

The FileManager component provides a familiar file-browsing experience with a toolbar, directory tree, and integrated editor.

Browsing and Navigation

  • Breadcrumb Navigation: Quickly move between parent directories.
  • Refresh: Reload the file list to see the latest changes (e.g., files created by the bot).
  • New Folder: Create a directory within the current path.

Managing Files

  • Upload: Select files from your local computer to transfer them into the bot's container.
  • Rename: Click on a file or folder and use the rename action to update its identifier.
  • Delete: Remove files or folders (with recursive support for directories).
  • Download: Retrieve a file from the bot's container back to your local machine.

Viewing and Editing

The integrated FileViewer allows you to interact with the bot's files without leaving the web UI.

Text Files

  • Read/Edit: Click a text file (e.g., .md, .js, .py, .toml) to open it in the built-in Monaco Editor.
  • Syntax Highlighting: Supports common programming languages and configuration formats.
  • Save: Modify the file's content and click Save to apply the changes to the bot's filesystem.

Images

  • Preview: Click an image file (e.g., .png, .jpg, .webp) to see a visual preview directly in the file manager.

Bot Interaction with Files

Remember that the bot itself can also perform these operations:

  • Use its Skills or MCP tools to read, write, and manage its own files.
  • The Files tab is your portal to monitor and manually intervene in the bot's workspace.

Published under AGPLv3

+ \ No newline at end of file diff --git a/getting-started/heartbeat.html b/getting-started/heartbeat.html index e445bd16..f3510209 100644 --- a/getting-started/heartbeat.html +++ b/getting-started/heartbeat.html @@ -9,18 +9,18 @@ - + - - - + + + -
Skip to content

Bot Heartbeat

The Heartbeat feature allows you to schedule periodic tasks for your Bot, enabling it to perform autonomous actions even when you aren't chatting with it.

Concept: Scheduled Autonomy

A Heartbeat is a recurring trigger that prompts the bot to "think" and execute its skills or tools at a set interval. This is useful for:

  • Periodic status checks
  • Automatic data collection
  • Cleaning up the filesystem
  • Sending scheduled notifications

Configuration

Configure the heartbeat from the Heartbeat tab in the Bot Detail page.

FieldDescription
EnabledToggle the heartbeat on or off.
IntervalHow often (in minutes) the heartbeat should trigger. The default is 30 minutes.
ModelThe LLM used to execute the heartbeat task. This can be different from the main chat model.

Logs and Monitoring

The Heartbeat tab provides a detailed audit log of every execution:

  • Status: Whether the heartbeat completed successfully (ok), encountered an issue (alert), or failed (error).
  • Time: When the heartbeat was triggered.
  • Duration: How long the bot took to process the task.
  • Result: A summary of the bot's action or response during that heartbeat.

Managing Logs

  • Filter by Status: Quickly find errors or alerts.
  • Refresh: Load the latest log entries.
  • Clear Logs: Remove old heartbeat records to keep the interface clean.
  • Load More: View older history.

Bot Interaction

  • During a heartbeat, the bot receives a special system prompt that it should perform its "routine" tasks.
  • The bot can use any of its assigned Skills or MCP tools during a heartbeat.
  • Heartbeat logs provide the "memory" of the bot's autonomous activities.

Published under AGPLv3

- +
Skip to content

Bot Heartbeat

The Heartbeat feature allows you to schedule periodic tasks for your Bot, enabling it to perform autonomous actions even when you aren't chatting with it.

Concept: Scheduled Autonomy

A Heartbeat is a recurring trigger that prompts the bot to "think" and execute its skills or tools at a set interval. This is useful for:

  • Periodic status checks
  • Automatic data collection
  • Cleaning up the filesystem
  • Sending scheduled notifications

Configuration

Configure the heartbeat from the Heartbeat tab in the Bot Detail page.

FieldDescription
EnabledToggle the heartbeat on or off.
IntervalHow often (in minutes) the heartbeat should trigger. The default is 30 minutes.
ModelThe LLM used to execute the heartbeat task. This can be different from the main chat model.

Logs and Monitoring

The Heartbeat tab provides a detailed audit log of every execution:

  • Status: Whether the heartbeat completed successfully (ok), encountered an issue (alert), or failed (error).
  • Time: When the heartbeat was triggered.
  • Duration: How long the bot took to process the task.
  • Result: A summary of the bot's action or response during that heartbeat.

Managing Logs

  • Filter by Status: Quickly find errors or alerts.
  • Refresh: Load the latest log entries.
  • Clear Logs: Remove old heartbeat records to keep the interface clean.
  • Load More: View older history.

Bot Interaction

  • During a heartbeat, the bot receives a special system prompt that it should perform its "routine" tasks.
  • The bot can use any of its assigned Skills or MCP tools during a heartbeat.
  • Heartbeat logs provide the "memory" of the bot's autonomous activities.

Published under AGPLv3

+ \ No newline at end of file diff --git a/getting-started/mcp.html b/getting-started/mcp.html index a0d86e44..bedb8461 100644 --- a/getting-started/mcp.html +++ b/getting-started/mcp.html @@ -9,18 +9,18 @@ - + - - - + + + -
Skip to content

MCP Connections

Memoh fully supports the Model Context Protocol (MCP), allowing you to connect your Bot to external tool services and context providers.

Concept: Extending Bot Capabilities

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.


Connection Types

Configure MCP connections from the MCP tab in the Bot Detail page.

1. Stdio (Local Process)

This type of connection executes a local command on the server and communicates via standard input/output.

FieldDescription
CommandThe executable to run (e.g., npx, python3).
ArgumentsA list of command-line arguments (e.g., -y, @modelcontextprotocol/server-filesystem, /opt/memoh/data).
EnvKey-value pairs for environment variables.
CWDWorking directory for the process.

2. Remote (HTTP/SSE)

This type of connection connects to a remote MCP server over the network.

FieldDescription
URLThe endpoint of the remote MCP server.
HeadersCustom HTTP headers (e.g., for authentication).
TransportChoose between http or sse (Server-Sent Events).

Operations

  • Add Connection: Click Add, choose the type, and fill in the configuration.
  • Import JSON: Use the Import button to quickly add multiple connections from a standard mcpServers JSON config file.
  • Toggle Active: Enable or disable specific connections without deleting them.
  • Search: Quickly find a connection by name or ID.
  • Export: Export a connection configuration to a JSON file.

Bot Interaction

Once an MCP connection is active, the bot will automatically:

  • Discover the tools and resources exposed by the MCP server.
  • Use these tools to perform tasks requested by the user.
  • Include the context provided by the MCP server in its reasoning process.

Published under AGPLv3

- +
Skip to content

MCP Connections

Memoh fully supports the Model Context Protocol (MCP), allowing you to connect your Bot to external tool services and context providers.

Concept: Extending Bot Capabilities

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.


Connection Types

Configure MCP connections from the MCP tab in the Bot Detail page.

1. Stdio (Local Process)

This type of connection executes a local command on the server and communicates via standard input/output.

FieldDescription
CommandThe executable to run (e.g., npx, python3).
ArgumentsA list of command-line arguments (e.g., -y, @modelcontextprotocol/server-filesystem, /opt/memoh/data).
EnvKey-value pairs for environment variables.
CWDWorking directory for the process.

2. Remote (HTTP/SSE)

This type of connection connects to a remote MCP server over the network.

FieldDescription
URLThe endpoint of the remote MCP server.
HeadersCustom HTTP headers (e.g., for authentication).
TransportChoose between http or sse (Server-Sent Events).

Operations

  • Add Connection: Click Add, choose the type, and fill in the configuration.
  • Import JSON: Use the Import button to quickly add multiple connections from a standard mcpServers JSON config file.
  • Toggle Active: Enable or disable specific connections without deleting them.
  • Search: Quickly find a connection by name or ID.
  • Export: Export a connection configuration to a JSON file.

Bot Interaction

Once an MCP connection is active, the bot will automatically:

  • Discover the tools and resources exposed by the MCP server.
  • Use these tools to perform tasks requested by the user.
  • Include the context provided by the MCP server in its reasoning process.

Published under AGPLv3

+ \ No newline at end of file diff --git a/getting-started/memory.html b/getting-started/memory.html index 54c4e092..643e4183 100644 --- a/getting-started/memory.html +++ b/getting-started/memory.html @@ -9,18 +9,18 @@ - + - - - + + + -
Skip to content

Bot Memory Management

Memoh's structured long-term memory system allows bots to remember information across multiple conversations, providing contextually relevant and personalized interactions.

Prerequisites

Before using the Memory tab, make sure your bot already has a Memory Provider configured.

  1. Create a provider from the Built-in Memory Provider guide.
  2. Open your bot's Settings tab.
  3. Select the provider in the Memory Provider field.
  4. Click Save.

Without a memory provider, the bot will not have an active memory backend configuration.


With the built-in memory provider, memories are stored in Memoh's memory system and retrieved through semantic search. When a user asks a question, Memoh finds the most relevant memories and includes them in the bot's runtime context.


Operations

Manage your bot's memories from the Memory tab in the Bot Detail page.

1. Creating Memories

  • New Memory: Manually enter a memory's content in the provided textarea.
  • From Conversation: Select specific messages from the bot's conversation history to extract into memory.

2. Searching and Managing

  • Search: Filter memories by ID or text content.
  • Edit: Modify existing memory entries directly in the list.
  • Delete: Remove memories that are no longer needed.

Memory Compression (Compact)

Over time, memories can accumulate and become redundant. The Compact feature helps optimize the memory pool.

  • Ratio: Set the compression ratio (for example 0.8, 0.5, or 0.3) to determine how much information is retained.
  • Decay Days: Optionally specify a time window to compact only memories older than a certain number of days.

Visualization: Vector Manifold

The Memory tab includes visual tools to help you understand how the memory system is performing:

Top-K Bucket Chart

Shows the distribution of relevant memories retrieved for the most recent queries.

CDF Curve (Cumulative Distribution Function)

Visualizes the scoring threshold of retrieved memories, helping you fine-tune how much relevant information the bot should consider.


Bot Interaction

  • The bot automatically searches and retrieves memories during chat.
  • The assigned Memory Provider controls the memory backend used by the bot.
  • For the built-in provider, you can optionally configure a Memory Model and an Embedding Model inside the provider settings.
  • Memories provide the long-term knowledge that makes each bot unique to its owner.

Published under AGPLv3

- +
Skip to content

Bot Memory Management

Memoh's structured long-term memory system allows bots to remember information across multiple conversations, providing contextually relevant and personalized interactions.

Prerequisites

Before using the Memory tab, make sure your bot already has a Memory Provider configured.

  1. Create a provider from the Built-in Memory Provider guide.
  2. Open your bot's Settings tab.
  3. Select the provider in the Memory Provider field.
  4. Click Save.

Without a memory provider, the bot will not have an active memory backend configuration.


With the built-in memory provider, memories are stored in Memoh's memory system and retrieved through semantic search. When a user asks a question, Memoh finds the most relevant memories and includes them in the bot's runtime context.


Operations

Manage your bot's memories from the Memory tab in the Bot Detail page.

1. Creating Memories

  • New Memory: Manually enter a memory's content in the provided textarea.
  • From Conversation: Select specific messages from the bot's conversation history to extract into memory.

2. Searching and Managing

  • Search: Filter memories by ID or text content.
  • Edit: Modify existing memory entries directly in the list.
  • Delete: Remove memories that are no longer needed.

Memory Compression (Compact)

Over time, memories can accumulate and become redundant. The Compact feature helps optimize the memory pool.

  • Ratio: Set the compression ratio (for example 0.8, 0.5, or 0.3) to determine how much information is retained.
  • Decay Days: Optionally specify a time window to compact only memories older than a certain number of days.

Visualization: Vector Manifold

The Memory tab includes visual tools to help you understand how the memory system is performing:

Top-K Bucket Chart

Shows the distribution of relevant memories retrieved for the most recent queries.

CDF Curve (Cumulative Distribution Function)

Visualizes the scoring threshold of retrieved memories, helping you fine-tune how much relevant information the bot should consider.


Bot Interaction

  • The bot automatically searches and retrieves memories during chat.
  • The assigned Memory Provider controls the memory backend used by the bot.
  • For the built-in provider, you can optionally configure a Memory Model and an Embedding Model inside the provider settings.
  • Memories provide the long-term knowledge that makes each bot unique to its owner.

Published under AGPLv3

+ \ No newline at end of file diff --git a/getting-started/provider-and-model.html b/getting-started/provider-and-model.html index c0df92c0..659ed415 100644 --- a/getting-started/provider-and-model.html +++ b/getting-started/provider-and-model.html @@ -9,18 +9,18 @@ - + - - - + + + -
Skip to content

LLM Provider and Model

To use Memoh, you first need to configure at least one LLM Provider and at least one Model.

LLM Provider

An LLM Provider represents a connection to an AI service (like OpenAI, Anthropic, or a self-hosted compatible API). It stores the base URL and authentication credentials.

Creating a Provider

  1. Navigate to the Models page from the sidebar.
  2. Click the Add Provider button at the bottom of the sidebar.
  3. Fill in the following fields:
    • Name: A display name for this provider (e.g., "OpenAI").
    • Base URL: The root URL of the API (e.g., https://api.openai.com/v1).
    • API Key: Your authentication token for the service.
  4. Click Create.

Managing Providers

  • Edit: Select a provider from the list and use the form on the right to update its name, URL, or API key.
  • Delete: Use the Delete Provider button in the provider settings form.

Model

A Model is a specific AI instance (like gpt-4o or text-embedding-3-small) that belongs to a Provider. Memoh distinguishes between Chat models (for conversation) and Embedding models (for memory search).

Adding a Model

  1. Select a Provider from the list on the Models page.
  2. Click Add Model in the model list section.
  3. Configure the following fields:
FieldRequiredDescription
TypeYeschat for conversation, embedding for vector search.
Model IDYesThe exact identifier used by the provider (e.g., gpt-4o).
NameNoA friendly display name (defaults to Model ID).
Client TypeYes (Chat)The API protocol: openai-responses, openai-completions, anthropic-messages, or google-generative-ai.
Input ModalitiesYes (Chat)Capabilities supported: text (default), image, audio, video, file.
Supports ReasoningNoEnable if the model supports internal reasoning steps (e.g., OpenAI o1).
DimensionsYes (Embed)The vector size for embedding models (e.g., 1536).
  1. Click Create.

Managing Models

  • Edit: Click the edit icon next to a model in the list.
  • Delete: Click the trash icon next to a model to remove it.

Next Steps

Now that you have configured your models, you can proceed to Create and Configure a Bot.

Published under AGPLv3

- +
Skip to content

LLM Provider and Model

To use Memoh, you first need to configure at least one LLM Provider and at least one Model.

LLM Provider

An LLM Provider represents a connection to an AI service (like OpenAI, Anthropic, or a self-hosted compatible API). It stores the base URL and authentication credentials.

Creating a Provider

  1. Navigate to the Models page from the sidebar.
  2. Click the Add Provider button at the bottom of the sidebar.
  3. Fill in the following fields:
    • Name: A display name for this provider (e.g., "OpenAI").
    • Base URL: The root URL of the API (e.g., https://api.openai.com/v1).
    • API Key: Your authentication token for the service.
  4. Click Create.

Managing Providers

  • Edit: Select a provider from the list and use the form on the right to update its name, URL, or API key.
  • Delete: Use the Delete Provider button in the provider settings form.

Model

A Model is a specific AI instance (like gpt-4o or text-embedding-3-small) that belongs to a Provider. Memoh distinguishes between Chat models (for conversation) and Embedding models (for memory search).

Adding a Model

  1. Select a Provider from the list on the Models page.
  2. Click Add Model in the model list section.
  3. Configure the following fields:
FieldRequiredDescription
TypeYeschat for conversation, embedding for vector search.
Model IDYesThe exact identifier used by the provider (e.g., gpt-4o).
NameNoA friendly display name (defaults to Model ID).
Client TypeYes (Chat)The API protocol: openai-responses, openai-completions, anthropic-messages, or google-generative-ai.
Input ModalitiesYes (Chat)Capabilities supported: text (default), image, audio, video, file.
Supports ReasoningNoEnable if the model supports internal reasoning steps (e.g., OpenAI o1).
DimensionsYes (Embed)The vector size for embedding models (e.g., 1536).
  1. Click Create.

Managing Models

  • Edit: Click the edit icon next to a model in the list.
  • Delete: Click the trash icon next to a model to remove it.

Next Steps

Now that you have configured your models, you can proceed to Create and Configure a Bot.

Published under AGPLv3

+ \ No newline at end of file diff --git a/getting-started/schedule.html b/getting-started/schedule.html index f95cf12d..16468a06 100644 --- a/getting-started/schedule.html +++ b/getting-started/schedule.html @@ -9,17 +9,17 @@ - + - - - + + + -
Skip to content

Scheduled Tasks

Scheduled Tasks allow you to automate recurring bot actions using cron expressions. This is useful for sending periodic reports, checking external data, performing maintenance, or triggering any routine task without manual intervention.

Concept: Cron-Based Automation

A Schedule is a cron-triggered rule bound to a specific bot. When a schedule fires, it sends a command to the agent, which executes it using its available tools, skills, and context. The bot can then deliver results to any connected channel.


Schedule Fields

FieldDescription
NameA display name for the task (e.g., "Morning News Summary").
DescriptionA brief explanation of what the task does.
PatternA cron expression that defines when the task runs (e.g., 0 9 * * * for daily at 9:00 AM).
CommandThe natural-language instruction sent to the agent when the schedule triggers (e.g., "Summarize today's top tech news and send it to the Telegram channel").
EnabledWhether the schedule is currently active.
Max CallsOptional limit on the total number of executions. Leave empty for unlimited.
Current CallsThe number of times this schedule has already fired.

Cron Pattern Reference

The pattern field uses standard cron syntax with five fields:

┌───────────── minute (0–59)
+    
Skip to content

Scheduled Tasks

Scheduled Tasks allow you to automate recurring bot actions using cron expressions. This is useful for sending periodic reports, checking external data, performing maintenance, or triggering any routine task without manual intervention.

Concept: Cron-Based Automation

A Schedule is a cron-triggered rule bound to a specific bot. When a schedule fires, it sends a command to the agent, which executes it using its available tools, skills, and context. The bot can then deliver results to any connected channel.


Schedule Fields

FieldDescription
NameA display name for the task (e.g., "Morning News Summary").
DescriptionA brief explanation of what the task does.
PatternA cron expression that defines when the task runs (e.g., 0 9 * * * for daily at 9:00 AM).
CommandThe natural-language instruction sent to the agent when the schedule triggers (e.g., "Summarize today's top tech news and send it to the Telegram channel").
EnabledWhether the schedule is currently active.
Max CallsOptional limit on the total number of executions. Leave empty for unlimited.
Current CallsThe number of times this schedule has already fired.

Cron Pattern Reference

The pattern field uses standard cron syntax with five fields:

┌───────────── minute (0–59)
 │ ┌───────────── hour (0–23)
 │ │ ┌───────────── day of month (1–31)
 │ │ │ ┌───────────── month (1–12)
@@ -33,7 +33,7 @@
   "enabled": true,
   "max_calls": null
 }

Execution Flow

When a schedule fires:

  1. The cron service triggers the schedule.
  2. The current_calls counter is incremented.
  3. If max_calls is set and reached, the schedule is automatically disabled.
  4. The agent receives the command along with the schedule context.
  5. The agent executes the command using its tools (e.g., web search, file read, send message).
  6. Results can be delivered to any connected channel.

Schedule vs. Heartbeat

FeatureScheduleHeartbeat
TriggerCron expression (flexible timing)Fixed interval (minutes)
CommandCustom natural-language instructionGeneric "routine check" prompt
Max CallsOptional execution limitUnlimited
Use CaseSpecific recurring tasksPeriodic autonomous thinking

Both features complement each other: use Heartbeat for general-purpose periodic activity and Schedule for precise, task-oriented automation.

Published under AGPLv3

- + \ No newline at end of file diff --git a/getting-started/search-provider.html b/getting-started/search-provider.html index 620f7c5e..e22aca3c 100644 --- a/getting-started/search-provider.html +++ b/getting-started/search-provider.html @@ -9,18 +9,18 @@ - + - - - + + + -
Skip to content

Search Providers

Memoh allows you to connect your Bot to various search engines, enabling it to browse the web for real-time information and external knowledge.

Concept: Real-Time Knowledge

A Search Provider is a connection to a specific search API (like Brave, Google, or Bing). Once configured, it becomes a tool that your Bot can use during conversation.


Supported Search Engines

Configure your search engines from the Search Provider page in the sidebar.

Supported EnginesNotes
BraveHighly recommended for privacy and performance.
BingPowerful global search capability.
GoogleComprehensive web search.
TavilyDesigned specifically for AI-powered research.
SearxNGConnect to your own self-hosted search aggregator.
DuckDuckGoPrivacy-focused search.
Other ProvidersSogou, Serper, Jina, Exa, Bocha, Yandex.

Configuration Flow

1. Adding a Search Provider

  1. Navigate to the Search Provider page from the sidebar.
  2. Click Add Search Provider.
  3. Fill in the following:
    • Name: A friendly name (e.g., "My Brave Search").
    • API Key: Your credentials for the specific search engine API.
    • Other Parameters: Depending on the engine, you may need to specify additional settings (e.g., base_url for SearxNG).

2. Managing Providers

  • Edit: Select a provider from the sidebar and update its configuration in the form on the right.
  • Delete: Use the Delete Provider button in the provider settings form.

Assigning a Search Provider to a Bot

  1. Navigate to the Bots page and select your bot.
  2. Go to the Settings tab.
  3. Find the Search Provider dropdown and select the provider you created.
  4. Click Save.

Bot Interaction

  • When a user's question requires real-time information, the bot will automatically call its assigned Search Provider.
  • The bot will process the search results to provide a grounded and accurate response.
  • Multiple search results can be synthesized to provide a comprehensive answer.

Published under AGPLv3

- +
Skip to content

Search Providers

Memoh allows you to connect your Bot to various search engines, enabling it to browse the web for real-time information and external knowledge.

Concept: Real-Time Knowledge

A Search Provider is a connection to a specific search API (like Brave, Google, or Bing). Once configured, it becomes a tool that your Bot can use during conversation.


Supported Search Engines

Configure your search engines from the Search Provider page in the sidebar.

Supported EnginesNotes
BraveHighly recommended for privacy and performance.
BingPowerful global search capability.
GoogleComprehensive web search.
TavilyDesigned specifically for AI-powered research.
SearxNGConnect to your own self-hosted search aggregator.
DuckDuckGoPrivacy-focused search.
Other ProvidersSogou, Serper, Jina, Exa, Bocha, Yandex.

Configuration Flow

1. Adding a Search Provider

  1. Navigate to the Search Provider page from the sidebar.
  2. Click Add Search Provider.
  3. Fill in the following:
    • Name: A friendly name (e.g., "My Brave Search").
    • API Key: Your credentials for the specific search engine API.
    • Other Parameters: Depending on the engine, you may need to specify additional settings (e.g., base_url for SearxNG).

2. Managing Providers

  • Edit: Select a provider from the sidebar and update its configuration in the form on the right.
  • Delete: Use the Delete Provider button in the provider settings form.

Assigning a Search Provider to a Bot

  1. Navigate to the Bots page and select your bot.
  2. Go to the Settings tab.
  3. Find the Search Provider dropdown and select the provider you created.
  4. Click Save.

Bot Interaction

  • When a user's question requires real-time information, the bot will automatically call its assigned Search Provider.
  • The bot will process the search results to provide a grounded and accurate response.
  • Multiple search results can be synthesized to provide a comprehensive answer.

Published under AGPLv3

+ \ No newline at end of file diff --git a/getting-started/skills.html b/getting-started/skills.html index 4440890d..bc7fae01 100644 --- a/getting-started/skills.html +++ b/getting-started/skills.html @@ -9,17 +9,17 @@ - + - - - + + + -
Skip to content

Bot Skills

Skills are the "personality" and "capabilities" of a Memoh Bot. They define how the bot should behave and what tools it can use.

Concept: Skills as Markdown

A Skill is represented as a Markdown document with YAML frontmatter. These files are stored within the bot's container and parsed into tools and personality traits.

Example Skill Structure

yaml
---
+    
Skip to content

Bot Skills

Skills are the "personality" and "capabilities" of a Memoh Bot. They define how the bot should behave and what tools it can use.

Concept: Skills as Markdown

A Skill is represented as a Markdown document with YAML frontmatter. These files are stored within the bot's container and parsed into tools and personality traits.

Example Skill Structure

yaml
---
 name: coder-skill
 description: Enables advanced coding capabilities and tool use.
 ---
@@ -27,7 +27,7 @@
 # Coder Skill
 As a coder, you always follow best practices and write clean, documented code. 
 You can use the `edit_file` and `run_command` tools to assist the user.

Managing Skills

Manage your bot's skill set from the Skills tab in the Bot Detail page.

Adding a Skill

  1. Click Add Skill.
  2. A dialog with a basic template will open in the Monaco Editor.
  3. Fill in the name, description, and content.
  4. Click Save.

Editing and Deleting

  • Edit: Click the pencil icon next to a skill card to modify its content or frontmatter.
  • Delete: Click the trash icon to remove a skill from the bot's container.

How Bots Use Skills

  • Skills are injected into the bot's system prompt during conversation.
  • The YAML frontmatter helps the system categorize and manage the skills as tools.
  • Modular skills allow you to easily "swap" behaviors or capabilities without rewriting the entire bot.

Published under AGPLv3

- + \ No newline at end of file diff --git a/getting-started/subagents.html b/getting-started/subagents.html index 67f2320a..b78fe4a1 100644 --- a/getting-started/subagents.html +++ b/getting-started/subagents.html @@ -9,18 +9,18 @@ - + - - - + + + -
Skip to content

Bot Subagents

Subagents are specialized AI entities with their own independent conversation context. They are managed by the main Bot to delegate complex tasks or focus on specific domains.

Concept: Task Specialization

A Subagent is like a specialized teammate for your Bot. While the main Bot handles general conversation, it can spin up and communicate with a Subagent to perform deep analysis, research, or execution.


Fields

Configure Subagents from the Subagents tab in the Bot Detail page.

FieldDescription
NameThe identifier for the subagent (e.g., "Research Assistant").
DescriptionA brief explanation of the subagent's purpose and role.
SkillsA list of specific Skills assigned from the bot's container.
MessagesThe conversation history and context specific to this subagent.
UsageStatistics on token consumption and activity.

Operations

  • Add Subagent: Create a new entity by providing a name and description.
  • Edit: Update the name or description of an existing subagent.
  • Delete: Permanently remove a subagent and its independent context.
  • View Context: Open a dialog to inspect the subagent's conversation history and usage metrics.

Bot Interaction

  • The main Bot uses the Subagent Tool to create, communicate with, and receive results from subagents.
  • Subagents inherit the main bot's container permissions but operate with their own "mental workspace."
  • This modular approach allows for building multi-agent systems within a single Bot's scope.

Published under AGPLv3

- +
Skip to content

Bot Subagents

Subagents are specialized AI entities with their own independent conversation context. They are managed by the main Bot to delegate complex tasks or focus on specific domains.

Concept: Task Specialization

A Subagent is like a specialized teammate for your Bot. While the main Bot handles general conversation, it can spin up and communicate with a Subagent to perform deep analysis, research, or execution.


Fields

Configure Subagents from the Subagents tab in the Bot Detail page.

FieldDescription
NameThe identifier for the subagent (e.g., "Research Assistant").
DescriptionA brief explanation of the subagent's purpose and role.
SkillsA list of specific Skills assigned from the bot's container.
MessagesThe conversation history and context specific to this subagent.
UsageStatistics on token consumption and activity.

Operations

  • Add Subagent: Create a new entity by providing a name and description.
  • Edit: Update the name or description of an existing subagent.
  • Delete: Permanently remove a subagent and its independent context.
  • View Context: Open a dialog to inspect the subagent's conversation history and usage metrics.

Bot Interaction

  • The main Bot uses the Subagent Tool to create, communicate with, and receive results from subagents.
  • Subagents inherit the main bot's container permissions but operate with their own "mental workspace."
  • This modular approach allows for building multi-agent systems within a single Bot's scope.

Published under AGPLv3

+ \ No newline at end of file diff --git a/hashmap.json b/hashmap.json index 8e1f39ca..88b79e9b 100644 --- a/hashmap.json +++ b/hashmap.json @@ -1 +1 @@ -{"about.md":"gLogz9hP","blogs_2026-02-16.md":"CVgn4GCU","blogs_index.md":"DyCOc_Zm","channels_discord.md":"DBWQl28b","channels_feishu.md":"-Rc8F8IG","channels_index.md":"Cd1GuQFE","channels_telegram.md":"URjBaQHx","getting-started_bot.md":"CxYqtI4G","getting-started_browser.md":"CHy6pyTr","getting-started_channels.md":"DiSUpicV","getting-started_container.md":"CiSK-fMx","getting-started_email.md":"CKJOqdzG","getting-started_files.md":"Cl6keVS-","getting-started_heartbeat.md":"CgIS9a7z","getting-started_mcp.md":"DyRwe04F","getting-started_memory.md":"CVd8M6Eu","getting-started_provider-and-model.md":"BGpLYgEh","getting-started_schedule.md":"B0pL41RB","getting-started_search-provider.md":"CWTVwyy0","getting-started_skills.md":"EnvAtRea","getting-started_subagents.md":"B79V3Ppa","index.md":"7vMrZCVa","installation_docker.md":"Bk_onHJi","memory-providers_builtin.md":"Cgc3R-Wx","memory-providers_index.md":"DLe5Y0PL","zh_concepts_identity-and-binding.md":"B6I6pSqI","zh_concepts_index.md":"uaZIblvt","zh_index.md":"DbGu2QT1","zh_style_terminology.md":"C89A7q1C"} +{"about.md":"Dtv0dtOs","blogs_2026-02-16.md":"cjgZmunL","blogs_index.md":"B2P01evP","channels_discord.md":"WNpdGj29","channels_feishu.md":"BBJ8KQPd","channels_index.md":"T_VHXXZf","channels_qq.md":"B_4bodh-","channels_telegram.md":"B9i-uoiX","getting-started_bot.md":"AR4RHnpe","getting-started_browser.md":"B8YEEooM","getting-started_channels.md":"C0YPWL-y","getting-started_container.md":"D49M0dHe","getting-started_email.md":"BRkUZLh2","getting-started_files.md":"CczR71or","getting-started_heartbeat.md":"B-SMiJUD","getting-started_mcp.md":"Bb2toM2o","getting-started_memory.md":"Dt7Ez9Lk","getting-started_provider-and-model.md":"BquaPnJe","getting-started_schedule.md":"CNDu3SiN","getting-started_search-provider.md":"R9B5DkBj","getting-started_skills.md":"DzSZ-qiC","getting-started_subagents.md":"6oBLlW8a","index.md":"D1yGsPie","installation_docker.md":"qkaakAVc","memory-providers_builtin.md":"BDxazTz6","memory-providers_index.md":"DNPBOVmb","zh_concepts_identity-and-binding.md":"7e9GdoK6","zh_concepts_index.md":"Brd21jcS","zh_index.md":"CZQRt_rQ","zh_style_terminology.md":"DLv5QofI"} diff --git a/index.html b/index.html index 906fdfb4..67a5f1c6 100644 --- a/index.html +++ b/index.html @@ -9,18 +9,18 @@ - + - - - + + + -
Skip to content

Memoh Documentation

Memoh(/ˈmemoʊ/) is a multi-member, structured long-memory, containerized AI agent system. Create your own AI bots, chat with them via Telegram, Lark (Feishu), Web, or CLI. Each bot runs in an isolated container with its own memory system — able to edit files, run commands, and access the network.

Documentation

Published under AGPLv3

- +
Skip to content

Memoh Documentation

Memoh(/ˈmemoʊ/) is a multi-member, structured long-memory, containerized AI agent system. Create your own AI bots, chat with them via Telegram, Lark (Feishu), Web, or CLI. Each bot runs in an isolated container with its own memory system — able to edit files, run commands, and access the network.

Documentation

Published under AGPLv3

+ \ No newline at end of file diff --git a/installation/docker.html b/installation/docker.html index e0815af1..d270799a 100644 --- a/installation/docker.html +++ b/installation/docker.html @@ -9,17 +9,17 @@ - + - - - + + + -
Skip to content

Docker Installation

Docker is the recommended way to run Memoh. The stack includes PostgreSQL, Qdrant, the main server (with embedded Containerd), agent gateway, and web UI — all orchestrated via Docker Compose. You do not need to install containerd, nerdctl, or buildkit on your host; everything runs inside containers.

Prerequisites

Run the official install script (requires Docker and Docker Compose):

bash
curl -fsSL https://memoh.sh | sudo sh

The script will:

  1. Check for Docker and Docker Compose
  2. Prompt for configuration (workspace, data directory, admin credentials, JWT secret, Postgres password)
  3. Fetch the latest release tag from GitHub and clone the repository
  4. Generate config.toml from the Docker template with your settings
  5. Pin Docker image versions to the release
  6. Pull images and start all services

Silent install (use all defaults, no prompts):

bash
curl -fsSL https://memoh.sh | sudo sh -s -- -y

Defaults when running silently:

  • Workspace: ~/memoh
  • Data directory: ~/memoh/data
  • Admin: admin / admin123
  • JWT secret: auto-generated
  • Postgres password: memoh123

Install a specific version:

bash
MEMOH_VERSION=v1.0.0 curl -fsSL https://memoh.sh | sudo sh

Use China mainland mirror (for slow image pulls):

bash
USE_CN_MIRROR=true curl -fsSL https://memoh.sh | sudo sh

Environment variables can be combined, e.g. MEMOH_VERSION=v1.0.0 USE_CN_MIRROR=true curl -fsSL https://memoh.sh | sudo sh

Manual Install

bash
git clone https://github.com/memohai/Memoh.git
+    
Skip to content

Docker Installation

Docker is the recommended way to run Memoh. The stack includes PostgreSQL, Qdrant, the main server (with embedded Containerd), agent gateway, and web UI — all orchestrated via Docker Compose. You do not need to install containerd, nerdctl, or buildkit on your host; everything runs inside containers.

Prerequisites

Run the official install script (requires Docker and Docker Compose):

bash
curl -fsSL https://memoh.sh | sudo sh

The script will:

  1. Check for Docker and Docker Compose
  2. Prompt for configuration (workspace, data directory, admin credentials, JWT secret, Postgres password)
  3. Fetch the latest release tag from GitHub and clone the repository
  4. Generate config.toml from the Docker template with your settings
  5. Pin Docker image versions to the release
  6. Pull images and start all services

Silent install (use all defaults, no prompts):

bash
curl -fsSL https://memoh.sh | sudo sh -s -- -y

Defaults when running silently:

  • Workspace: ~/memoh
  • Data directory: ~/memoh/data
  • Admin: admin / admin123
  • JWT secret: auto-generated
  • Postgres password: memoh123

Install a specific version:

bash
MEMOH_VERSION=v1.0.0 curl -fsSL https://memoh.sh | sudo sh

Use China mainland mirror (for slow image pulls):

bash
USE_CN_MIRROR=true curl -fsSL https://memoh.sh | sudo sh

Environment variables can be combined, e.g. MEMOH_VERSION=v1.0.0 USE_CN_MIRROR=true curl -fsSL https://memoh.sh | sudo sh

Manual Install

bash
git clone https://github.com/memohai/Memoh.git
 cd Memoh
 cp conf/app.docker.toml config.toml

Edit config.toml — at minimum change:

  • admin.password — Admin password
  • auth.jwt_secret — Generate with openssl rand -base64 32
  • postgres.password — Database password (also set POSTGRES_PASSWORD env var to match)

Then start:

bash
sudo POSTGRES_PASSWORD=your-db-password docker compose up -d

On macOS or if your user is in the docker group, sudo is not required.

Important: docker-compose.yml mounts ./config.toml by default. You must create this file before starting — running without it will fail.

China Mainland Mirror

For users in mainland China who cannot access Docker Hub directly, uncomment the registry line in config.toml:

toml
[mcp]
 registry = "memoh.cn"

And use the China mirror compose overlay:

bash
sudo docker compose -f docker-compose.yml -f docker/docker-compose.cn.yml up -d

The install script handles this automatically when you set USE_CN_MIRROR=true.

Access Points

After startup:

ServiceURL
Web UIhttp://localhost:8082
APIhttp://localhost:8080
Agent Gatewayhttp://localhost:8081
Browser Gatewayhttp://localhost:8083

Default login: admin / admin123 (change this in config.toml).

First startup may take 1–2 minutes while images are pulled and services initialize.

Common Commands

Prefix with sudo on Linux if your user is not in the docker group.

bash
docker compose up -d           # Start
@@ -29,7 +29,7 @@
 docker compose pull && docker compose up -d  # Update to latest images

Environment Variables

VariableDefaultDescription
POSTGRES_PASSWORDmemoh123PostgreSQL password (must match postgres.password in config.toml)
MEMOH_CONFIG./config.tomlPath to the configuration file
MEMOH_VERSION(latest release)Git tag to install (e.g. v1.0.0). Also pins Docker image versions.
USE_CN_MIRRORfalseSet to true to use China mainland mirror for Docker images

Production Checklist

  1. Passwords — Change all default passwords and secrets in config.toml
  2. HTTPS — Configure SSL (e.g. via docker-compose.override.yml with certs or a reverse proxy)
  3. Firewall — Restrict access to necessary ports
  4. Resource limits — Set memory/CPU limits for containers
  5. Backups — Regular backups of Postgres and Qdrant data

Troubleshooting

bash
docker compose logs server      # View main service logs
 docker compose config           # Validate configuration
 docker compose build --no-cache && docker compose up -d  # Full rebuild

Security Warnings

  • The main service runs with privileged container access — only run in trusted environments
  • You must change all default passwords and secrets before production use
  • Use HTTPS in production

Published under AGPLv3

- + \ No newline at end of file diff --git a/memory-providers/builtin.html b/memory-providers/builtin.html index 1a933359..68850b90 100644 --- a/memory-providers/builtin.html +++ b/memory-providers/builtin.html @@ -9,18 +9,18 @@ - + - - - + + + -
Skip to content

Built-in Memory Provider

The built-in memory provider is the standard memory backend shipped with Memoh. It works with Memoh's memory pipeline and supports:

  • Automatic memory extraction from conversations
  • Semantic memory retrieval during chat
  • Manual memory creation and editing
  • Memory compaction and rebuild workflows

To configure it well, you usually assign:

  • Memory Model: The LLM used for memory extraction and decision making
  • Embedding Model: The embedding model used for dense vector search

Creating a Built-in Provider

Manage providers from the Memory Providers page in the sidebar.

  1. Navigate to the Memory Providers page.
  2. Click Add Memory Provider.
  3. Fill in the following fields:
    • Name: A display name for this provider.
    • Provider Type: Select builtin.
  4. Click Create.

Configuring a Built-in Provider

After creating a provider, select it from the sidebar and configure its settings.

FieldDescription
NameThe display name shown in the UI.
Provider TypeThe provider implementation. Currently this is builtin only.
Memory ModelOptional chat model used for memory extraction and memory-related decisions.
Embedding ModelOptional embedding model used for semantic vector search.

Managing Providers

  • Edit: Select a provider and update its name or model bindings.
  • Delete: Remove a provider you no longer use.

Assigning a Memory Provider to a Bot

  1. Navigate to the Bots page and open your bot.
  2. Go to the Settings tab.
  3. Find the Memory Provider dropdown.
  4. Select the provider you created.
  5. Click Save.

If no memory provider is selected, the bot will not use that provider configuration in its runtime settings.


Using Memory After Setup

Once a memory provider is assigned to the bot, you can manage actual memories from the bot's Memory tab:

  • Create memories manually
  • Extract memories from conversations
  • Search, edit, and delete memories
  • Compact or rebuild the memory store

For day-to-day memory operations, continue with Bot Memory Management.

Published under AGPLv3

- +
Skip to content

Built-in Memory Provider

The built-in memory provider is the standard memory backend shipped with Memoh. It works with Memoh's memory pipeline and supports:

  • Automatic memory extraction from conversations
  • Semantic memory retrieval during chat
  • Manual memory creation and editing
  • Memory compaction and rebuild workflows

To configure it well, you usually assign:

  • Memory Model: The LLM used for memory extraction and decision making
  • Embedding Model: The embedding model used for dense vector search

Creating a Built-in Provider

Manage providers from the Memory Providers page in the sidebar.

  1. Navigate to the Memory Providers page.
  2. Click Add Memory Provider.
  3. Fill in the following fields:
    • Name: A display name for this provider.
    • Provider Type: Select builtin.
  4. Click Create.

Configuring a Built-in Provider

After creating a provider, select it from the sidebar and configure its settings.

FieldDescription
NameThe display name shown in the UI.
Provider TypeThe provider implementation. Currently this is builtin only.
Memory ModelOptional chat model used for memory extraction and memory-related decisions.
Embedding ModelOptional embedding model used for semantic vector search.

Managing Providers

  • Edit: Select a provider and update its name or model bindings.
  • Delete: Remove a provider you no longer use.

Assigning a Memory Provider to a Bot

  1. Navigate to the Bots page and open your bot.
  2. Go to the Settings tab.
  3. Find the Memory Provider dropdown.
  4. Select the provider you created.
  5. Click Save.

If no memory provider is selected, the bot will not use that provider configuration in its runtime settings.


Using Memory After Setup

Once a memory provider is assigned to the bot, you can manage actual memories from the bot's Memory tab:

  • Create memories manually
  • Extract memories from conversations
  • Search, edit, and delete memories
  • Compact or rebuild the memory store

For day-to-day memory operations, continue with Bot Memory Management.

Published under AGPLv3

+ \ No newline at end of file diff --git a/memory-providers/index.html b/memory-providers/index.html index 885201cc..3c9e0efc 100644 --- a/memory-providers/index.html +++ b/memory-providers/index.html @@ -9,18 +9,18 @@ - + - - - + + + -
Skip to content

Memory Providers

Memoh uses a Memory Provider to define how a bot stores, retrieves, and manages long-term memory. A bot can bind one memory provider in its Settings tab, and that provider becomes the backend for memory extraction and memory search.

Available Providers

Memoh currently includes the following memory provider:

  • Built-in: The default memory system included with Memoh.

More provider types may be added in future versions, but right now builtin is the only supported provider type in the product and web UI.


Basic Flow

  1. Open the Memory Providers page from the sidebar.
  2. Create a provider instance using one of the supported provider types.
  3. Configure the provider settings.
  4. Open a bot's Settings tab and assign that provider in Memory Provider.
  5. Manage actual memories from the bot's Memory tab.

Next Steps

Published under AGPLv3

- +
Skip to content

Memory Providers

Memoh uses a Memory Provider to define how a bot stores, retrieves, and manages long-term memory. A bot can bind one memory provider in its Settings tab, and that provider becomes the backend for memory extraction and memory search.

Available Providers

Memoh currently includes the following memory provider:

  • Built-in: The default memory system included with Memoh.

More provider types may be added in future versions, but right now builtin is the only supported provider type in the product and web UI.


Basic Flow

  1. Open the Memory Providers page from the sidebar.
  2. Create a provider instance using one of the supported provider types.
  3. Configure the provider settings.
  4. Open a bot's Settings tab and assign that provider in Memory Provider.
  5. Manage actual memories from the bot's Memory tab.

Next Steps

Published under AGPLv3

+ \ No newline at end of file diff --git a/zh/concepts/identity-and-binding.html b/zh/concepts/identity-and-binding.html index 06a871d2..c1931c94 100644 --- a/zh/concepts/identity-and-binding.html +++ b/zh/concepts/identity-and-binding.html @@ -9,18 +9,18 @@ - + - - - + + +
Skip to content

账号模型与绑定

账号模型

Memoh 将平台账号与系统账号视为两类不同实体:

  • 平台账号(ChannelIdentity 是用户在外部接入平台上的账号(例如飞书账号),不是 Memoh 内部账号。
  • 系统账号(User 是 Memoh 系统内账号。

平台账号在初始阶段可以不绑定系统账号。
bind 的职责是完成这两类账号的关联。

接入平台与 Bot

  • 接入平台(channel 是入站消息来源。
  • Bot 是系统内的授权与资源边界。

Bot 由系统账号管理,入站消息由平台账号产生。

为什么账号绑定是账号作用域

账号绑定的目标是建立账号归属关系,而不是直接发放 bot 资源权限:

  • 它只负责平台账号与系统账号的绑定;
  • 不把账号绑定与成员管理语义耦合在一起;
  • 让 bot 访问控制保持独立、可演进。

账号绑定流程(当前共识)

  1. 用户以自己的系统账号申请 bind code;
  2. 平台账号在支持的接入平台会话中发送 code;
  3. 系统校验 code,完成平台账号到系统账号的绑定;
  4. bot 成员与授权由独立流程处理。

Bot 类型语义

  • Public bot:支持成员协作语义。
  • Personal bot:语义上应为单 owner,不应依赖成员机制。

注:本文档记录的是产品语义与共识方向。
部分运行时细节仍可能处于收敛阶段。

Published under AGPLv3

- + \ No newline at end of file diff --git a/zh/concepts/index.html b/zh/concepts/index.html index 6de022c2..25793d7c 100644 --- a/zh/concepts/index.html +++ b/zh/concepts/index.html @@ -9,18 +9,18 @@ - + - - - + + +
Skip to content

核心概念

本章节用于定义 Memoh 的核心账号与访问概念。

概念图

  • 系统账号(User:Memoh 系统内账号。
  • 平台账号(ChannelIdentity:用户在外部接入平台上的账号,不是 Memoh 系统内账号(例如用户的飞书账号)。
  • Bot:由系统账号管理的资源与访问边界。
  • 账号绑定(bind:把平台账号关联到系统账号的过程。

为什么重要

Memoh 需要同时处理外部接入平台消息与系统内权限控制。
因此我们明确区分平台账号与系统账号,并将 bot 授权与账号绑定解耦。

术语说明:文档中的“平台账号”统一指用户在对应平台上的真实账号(如飞书账号),不指本项目内部账号。

本章内容

Published under AGPLv3

- + \ No newline at end of file diff --git a/zh/index.html b/zh/index.html index 9c99a084..30ea8fed 100644 --- a/zh/index.html +++ b/zh/index.html @@ -9,18 +9,18 @@ - + - - - + + +
Skip to content

Memoh 文档

Memoh 是一个多成员、长记忆、容器化的 AI Agent 系统。

文档章节

面向文档贡献者

当前维护范围

当前文档先聚焦账号语义与访问控制:

  • 区分系统账号与平台账号
  • 解释为什么账号绑定是账号作用域
  • 说明账号绑定与 bot 访问控制之间的关系

说明:“平台账号”指用户在外部平台上的真实账号(例如飞书账号),不是 Memoh 系统账号。

Published under AGPLv3

- + \ No newline at end of file diff --git a/zh/style/terminology.html b/zh/style/terminology.html index da34b184..980661be 100644 --- a/zh/style/terminology.html +++ b/zh/style/terminology.html @@ -9,18 +9,18 @@ - + - - - + + +
Skip to content

术语规范

适用对象:文档编写者与维护者。 本页用于统一写作语义,不是面向最终用户的功能说明。

规范术语

  • 系统账号(User:Memoh 系统内账号。
  • 平台账号(ChannelIdentity:用户在外部接入平台上的账号,不是 Memoh 内账号。
  • 接入平台(channel:承载入站消息的外部平台。
  • 账号绑定(bind:把平台账号关联到系统账号的过程。
  • 绑定码(Bind Code):用于账号绑定的一次性代码。
  • Bot:由系统账号管理的资源与授权边界。

推荐写法

  • 面向产品语义时,优先写 “平台账号”,不要直接写 actor。
  • 描述业务行为时,优先写 “接入平台”,不要直接写 channel。
  • 首次出现保留技术别名,后续可只用中文术语:
    • 平台账号(ChannelIdentity
    • 系统账号(User
    • 账号绑定(bind

禁用或不推荐写法

  • 在概念文档中直接使用 actor(除非明确引用代码符号)。
  • 使用含糊表述如 “平台用户”(未区分系统账号与平台账号)。
  • 写出“平台账号是 Memoh 内部账号”这类错误语义。

示例

  • 正确:“平台账号是用户在飞书上的账号,不是 Memoh 系统账号。”
  • 正确:“账号绑定用于把平台账号关联到系统账号。”
  • 错误:“Actor 是 Memoh 里的用户。”

自检清单

  • 是否明确区分了系统账号与平台账号?
  • 叙述中是否将 channel 表述为接入平台?
  • 是否仅在首处保留技术别名?

Published under AGPLv3

- + \ No newline at end of file