From 88777ac9ed0a6e7eb19cd3a5e0052e6030a34e05 Mon Sep 17 00:00:00 2001 From: sheepbox8646 Date: Wed, 25 Feb 2026 07:57:19 +0000 Subject: [PATCH] deploy: bb31a35b78c700faa93bb0539c1a536047f2652c --- 404.html | 4 ++-- assets/{app.njbNB0oZ.js => app.B1Uz6bRN.js} | 2 +- ...FOaZyb.js => blogs_2026-02-16.md.CVgn4GCU.js} | 2 +- ...n.js => blogs_2026-02-16.md.CVgn4GCU.lean.js} | 2 +- ...Wx4LKT.lean.js => blogs_index.md.DyCOc_Zm.js} | 2 +- ...Wx4LKT.js => blogs_index.md.DyCOc_Zm.lean.js} | 2 +- assets/chunks/@localSearchIndexroot.DwgVjkgi.js | 1 + assets/chunks/@localSearchIndexroot.YMGcEMuZ.js | 1 - assets/chunks/@localSearchIndexzh.dDuBvO1t.js | 1 + assets/chunks/@localSearchIndexzh.hHhvpH9g.js | 1 - ....ClZZAp-8.js => VPLocalSearchBox.CkO_Q3B1.js} | 2 +- ...amework.DEqXEGcv.js => framework.ePeAWSvT.js} | 16 ++++++++-------- .../{theme.Ws_3DOcl.js => theme.5W6lE5dH.js} | 4 ++-- ...th.md.DPl-4zFk.js => cli_auth.md.C8ws3CHD.js} | 2 +- ...4zFk.lean.js => cli_auth.md.C8ws3CHD.lean.js} | 2 +- ...bot.md.B2YOOp9H.js => cli_bot.md.BnhEB6FG.js} | 2 +- ...OOp9H.lean.js => cli_bot.md.BnhEB6FG.lean.js} | 2 +- ...md.T-qsPRZ9.js => cli_channel.md.BBEJiWrG.js} | 2 +- ...9.lean.js => cli_channel.md.BBEJiWrG.lean.js} | 2 +- ...at.md.LOg8zrpn.js => cli_chat.md.Cr9VFV7R.js} | 2 +- ...zrpn.lean.js => cli_chat.md.Cr9VFV7R.lean.js} | 2 +- ....md.C-0Xv0hx.js => cli_config.md.B8bSu8j2.js} | 2 +- ...hx.lean.js => cli_config.md.B8bSu8j2.lean.js} | 2 +- ...x.md.CTMBSccU.js => cli_index.md.CZsWbIpX.js} | 2 +- ...ccU.lean.js => cli_index.md.CZsWbIpX.lean.js} | 2 +- ...l.md.Bw08RtnA.js => cli_model.md.DjdZHTvQ.js} | 2 +- ...tnA.lean.js => cli_model.md.DjdZHTvQ.lean.js} | 2 +- ...d.cID16uzP.js => cli_provider.md.D1oztYQ9.js} | 2 +- ....lean.js => cli_provider.md.D1oztYQ9.lean.js} | 2 +- ...d.DSG0HQuo.js => cli_schedule.md.D2s8Q1KC.js} | 2 +- ....lean.js => cli_schedule.md.D2s8Q1KC.lean.js} | 2 +- ...d.1aZ6YcT_.js => concepts_bot.md.C_C3siLW.js} | 2 +- ....lean.js => concepts_bot.md.C_C3siLW.lean.js} | 2 +- ...h0thdg.js => concepts_channel.md.DdS-uyu8.js} | 2 +- ...n.js => concepts_channel.md.DdS-uyu8.lean.js} | 2 +- ...4tv7.js => concepts_container.md.Djausou_.js} | 2 +- ...js => concepts_container.md.Djausou_.lean.js} | 2 +- ...epts_conversation-and-history.md.BS_PnG4v.js} | 2 +- ...conversation-and-history.md.BS_PnG4v.lean.js} | 2 +- ...C-_J0Dnw.js => concepts_index.md.Ci6EwNPX.js} | 2 +- ...ean.js => concepts_index.md.Ci6EwNPX.lean.js} | 2 +- ...d.Bi2x7eIb.js => concepts_mcp.md.B9KnE-R7.js} | 2 +- ....lean.js => concepts_mcp.md.B9KnE-R7.lean.js} | 2 +- ..._8mQlYI.js => concepts_memory.md.BgBEcLnX.js} | 2 +- ...an.js => concepts_memory.md.BgBEcLnX.lean.js} | 2 +- ...> concepts_provider-and-model.md.DQq3j0ql.js} | 2 +- ...cepts_provider-and-model.md.DQq3j0ql.lean.js} | 2 +- ...Mw6iP.js => concepts_schedule.md.COs_2DXO.js} | 2 +- ....js => concepts_schedule.md.COs_2DXO.lean.js} | 2 +- ...6zpo0BV.js => concepts_skills.md.HeUi2diL.js} | 2 +- ...an.js => concepts_skills.md.HeUi2diL.lean.js} | 2 +- ...ZCBU.js => concepts_subagents.md.C0_bz0wW.js} | 2 +- ...js => concepts_subagents.md.C0_bz0wW.lean.js} | 2 +- ...WV4Fvb6.js => getting-started.md.C9lgqnN0.js} | 2 +- ...an.js => getting-started.md.C9lgqnN0.lean.js} | 2 +- ...=> getting-started_create-bot.md.Da6WTI-u.js} | 2 +- ...tting-started_create-bot.md.Da6WTI-u.lean.js} | 2 +- ...ing-started_platform-telegram.md.BlTohjMj.js} | 2 +- ...tarted_platform-telegram.md.BlTohjMj.lean.js} | 2 +- ...ng-started_provider-and-model.md.hf8EhYPV.js} | 2 +- ...arted_provider-and-model.md.hf8EhYPV.lean.js} | 2 +- ...index.md.BxPQTo9L.js => index.md.BJ6rgQi7.js} | 2 +- ...xPQTo9L.lean.js => index.md.BJ6rgQi7.lean.js} | 2 +- ...s => installation_config-toml.md.BJygOlxN.js} | 2 +- ...installation_config-toml.md.BJygOlxN.lean.js} | 2 +- ...nY7.js => installation_docker.md.Cmz-MLJu.js} | 2 +- ...s => installation_docker.md.Cmz-MLJu.lean.js} | 2 +- ...GskTOuw.js => troubleshooting.md.rkMlAGoL.js} | 2 +- ...an.js => troubleshooting.md.rkMlAGoL.lean.js} | 2 +- ...concepts_identity-and-binding.md.B6I6pSqI.js} | 2 +- ...pts_identity-and-binding.md.B6I6pSqI.lean.js} | 2 +- ...egv9w.js => zh_concepts_index.md.uaZIblvt.js} | 2 +- ....js => zh_concepts_index.md.uaZIblvt.lean.js} | 2 +- ...ex.md.N8D_wq8q.js => zh_index.md.DbGu2QT1.js} | 2 +- ...wq8q.lean.js => zh_index.md.DbGu2QT1.lean.js} | 2 +- ...D7.js => zh_style_terminology.md.C89A7q1C.js} | 2 +- ... => zh_style_terminology.md.C89A7q1C.lean.js} | 2 +- blogs/2026-02-16.html | 10 +++++----- blogs/index.html | 10 +++++----- cli/auth.html | 10 +++++----- cli/bot.html | 10 +++++----- cli/channel.html | 10 +++++----- cli/chat.html | 10 +++++----- cli/config.html | 10 +++++----- cli/index.html | 10 +++++----- cli/model.html | 10 +++++----- cli/provider.html | 10 +++++----- cli/schedule.html | 10 +++++----- concepts/bot.html | 10 +++++----- concepts/channel.html | 10 +++++----- concepts/container.html | 10 +++++----- concepts/conversation-and-history.html | 10 +++++----- concepts/index.html | 10 +++++----- concepts/mcp.html | 10 +++++----- concepts/memory.html | 10 +++++----- concepts/provider-and-model.html | 10 +++++----- concepts/schedule.html | 10 +++++----- concepts/skills.html | 10 +++++----- concepts/subagents.html | 10 +++++----- getting-started.html | 10 +++++----- getting-started/create-bot.html | 10 +++++----- getting-started/platform-telegram.html | 10 +++++----- getting-started/provider-and-model.html | 10 +++++----- hashmap.json | 2 +- index.html | 10 +++++----- installation/config-toml.html | 10 +++++----- installation/docker.html | 14 +++++++------- troubleshooting.html | 10 +++++----- zh/concepts/identity-and-binding.html | 10 +++++----- zh/concepts/index.html | 10 +++++----- zh/index.html | 10 +++++----- zh/style/terminology.html | 10 +++++----- 112 files changed, 257 insertions(+), 257 deletions(-) rename assets/{app.njbNB0oZ.js => app.B1Uz6bRN.js} (90%) rename assets/{blogs_2026-02-16.md.DSFOaZyb.js => blogs_2026-02-16.md.CVgn4GCU.js} (98%) rename assets/{blogs_2026-02-16.md.DSFOaZyb.lean.js => blogs_2026-02-16.md.CVgn4GCU.lean.js} (82%) rename assets/{blogs_index.md.liWx4LKT.lean.js => blogs_index.md.DyCOc_Zm.js} (82%) rename assets/{blogs_index.md.liWx4LKT.js => blogs_index.md.DyCOc_Zm.lean.js} (82%) create mode 100644 assets/chunks/@localSearchIndexroot.DwgVjkgi.js delete mode 100644 assets/chunks/@localSearchIndexroot.YMGcEMuZ.js create mode 100644 assets/chunks/@localSearchIndexzh.dDuBvO1t.js delete mode 100644 assets/chunks/@localSearchIndexzh.hHhvpH9g.js rename assets/chunks/{VPLocalSearchBox.ClZZAp-8.js => VPLocalSearchBox.CkO_Q3B1.js} (99%) rename assets/chunks/{framework.DEqXEGcv.js => framework.ePeAWSvT.js} (90%) rename assets/chunks/{theme.Ws_3DOcl.js => theme.5W6lE5dH.js} (99%) rename assets/{cli_auth.md.DPl-4zFk.js => cli_auth.md.C8ws3CHD.js} (94%) rename assets/{cli_auth.md.DPl-4zFk.lean.js => cli_auth.md.C8ws3CHD.lean.js} (69%) rename assets/{cli_bot.md.B2YOOp9H.js => cli_bot.md.BnhEB6FG.js} (98%) rename assets/{cli_bot.md.B2YOOp9H.lean.js => cli_bot.md.BnhEB6FG.lean.js} (69%) rename assets/{cli_channel.md.T-qsPRZ9.js => cli_channel.md.BBEJiWrG.js} (98%) rename assets/{cli_channel.md.T-qsPRZ9.lean.js => cli_channel.md.BBEJiWrG.lean.js} (70%) rename assets/{cli_chat.md.LOg8zrpn.js => cli_chat.md.Cr9VFV7R.js} (96%) rename assets/{cli_chat.md.LOg8zrpn.lean.js => cli_chat.md.Cr9VFV7R.lean.js} (69%) rename assets/{cli_config.md.C-0Xv0hx.js => cli_config.md.B8bSu8j2.js} (96%) rename assets/{cli_config.md.C-0Xv0hx.lean.js => cli_config.md.B8bSu8j2.lean.js} (69%) rename assets/{cli_index.md.CTMBSccU.js => cli_index.md.CZsWbIpX.js} (97%) rename assets/{cli_index.md.CTMBSccU.lean.js => cli_index.md.CZsWbIpX.lean.js} (69%) rename assets/{cli_model.md.Bw08RtnA.js => cli_model.md.DjdZHTvQ.js} (98%) rename assets/{cli_model.md.Bw08RtnA.lean.js => cli_model.md.DjdZHTvQ.lean.js} (69%) rename assets/{cli_provider.md.cID16uzP.js => cli_provider.md.D1oztYQ9.js} (98%) rename assets/{cli_provider.md.cID16uzP.lean.js => cli_provider.md.D1oztYQ9.lean.js} (70%) rename assets/{cli_schedule.md.DSG0HQuo.js => cli_schedule.md.D2s8Q1KC.js} (98%) rename assets/{cli_schedule.md.DSG0HQuo.lean.js => cli_schedule.md.D2s8Q1KC.lean.js} (70%) rename assets/{concepts_bot.md.1aZ6YcT_.js => concepts_bot.md.C_C3siLW.js} (92%) rename assets/{concepts_bot.md.1aZ6YcT_.lean.js => concepts_bot.md.C_C3siLW.lean.js} (69%) rename assets/{concepts_channel.md.kmh0thdg.js => concepts_channel.md.DdS-uyu8.js} (92%) rename assets/{concepts_channel.md.kmh0thdg.lean.js => concepts_channel.md.DdS-uyu8.lean.js} (70%) rename assets/{concepts_container.md.CGr24tv7.js => concepts_container.md.Djausou_.js} (92%) rename assets/{concepts_container.md.CGr24tv7.lean.js => concepts_container.md.Djausou_.lean.js} (71%) rename assets/{concepts_conversation-and-history.md.CrsSw6px.js => concepts_conversation-and-history.md.BS_PnG4v.js} (92%) rename assets/{concepts_conversation-and-history.md.CrsSw6px.lean.js => concepts_conversation-and-history.md.BS_PnG4v.lean.js} (74%) rename assets/{concepts_index.md.C-_J0Dnw.js => concepts_index.md.Ci6EwNPX.js} (97%) rename assets/{concepts_index.md.C-_J0Dnw.lean.js => concepts_index.md.Ci6EwNPX.lean.js} (85%) rename assets/{concepts_mcp.md.Bi2x7eIb.js => concepts_mcp.md.B9KnE-R7.js} (91%) rename assets/{concepts_mcp.md.Bi2x7eIb.lean.js => concepts_mcp.md.B9KnE-R7.lean.js} (69%) rename assets/{concepts_memory.md.C_8mQlYI.js => concepts_memory.md.BgBEcLnX.js} (91%) rename assets/{concepts_memory.md.C_8mQlYI.lean.js => concepts_memory.md.BgBEcLnX.lean.js} (70%) rename assets/{concepts_provider-and-model.md.DxvTinZF.js => concepts_provider-and-model.md.DQq3j0ql.js} (97%) rename assets/{concepts_provider-and-model.md.DxvTinZF.lean.js => concepts_provider-and-model.md.DQq3j0ql.lean.js} (86%) rename assets/{concepts_schedule.md.DZlMw6iP.js => concepts_schedule.md.COs_2DXO.js} (92%) rename assets/{concepts_schedule.md.DZlMw6iP.lean.js => concepts_schedule.md.COs_2DXO.lean.js} (70%) rename assets/{concepts_skills.md.F6zpo0BV.js => concepts_skills.md.HeUi2diL.js} (92%) rename assets/{concepts_skills.md.F6zpo0BV.lean.js => concepts_skills.md.HeUi2diL.lean.js} (70%) rename assets/{concepts_subagents.md.B1gVZCBU.js => concepts_subagents.md.C0_bz0wW.js} (91%) rename assets/{concepts_subagents.md.B1gVZCBU.lean.js => concepts_subagents.md.C0_bz0wW.lean.js} (71%) rename assets/{getting-started.md.BWV4Fvb6.js => getting-started.md.C9lgqnN0.js} (98%) rename assets/{getting-started.md.BWV4Fvb6.lean.js => getting-started.md.C9lgqnN0.lean.js} (70%) rename assets/{getting-started_create-bot.md.5rz1rkV2.js => getting-started_create-bot.md.Da6WTI-u.js} (98%) rename assets/{getting-started_create-bot.md.5rz1rkV2.lean.js => getting-started_create-bot.md.Da6WTI-u.lean.js} (90%) rename assets/{getting-started_platform-telegram.md.DnjlGtcF.js => getting-started_platform-telegram.md.BlTohjMj.js} (98%) rename assets/{getting-started_platform-telegram.md.DnjlGtcF.lean.js => getting-started_platform-telegram.md.BlTohjMj.lean.js} (89%) rename assets/{getting-started_provider-and-model.md.BA0D0cN8.js => getting-started_provider-and-model.md.hf8EhYPV.js} (98%) rename assets/{getting-started_provider-and-model.md.BA0D0cN8.lean.js => getting-started_provider-and-model.md.hf8EhYPV.lean.js} (91%) rename assets/{index.md.BxPQTo9L.js => index.md.BJ6rgQi7.js} (92%) rename assets/{index.md.BxPQTo9L.lean.js => index.md.BJ6rgQi7.lean.js} (69%) rename assets/{installation_config-toml.md.BNcS6Wgd.js => installation_config-toml.md.BJygOlxN.js} (99%) rename assets/{installation_config-toml.md.BNcS6Wgd.lean.js => installation_config-toml.md.BJygOlxN.lean.js} (72%) rename assets/{installation_docker.md.DfhF5nY7.js => installation_docker.md.Cmz-MLJu.js} (81%) rename assets/{installation_docker.md.DfhF5nY7.lean.js => installation_docker.md.Cmz-MLJu.lean.js} (57%) rename assets/{troubleshooting.md.DGskTOuw.js => troubleshooting.md.rkMlAGoL.js} (98%) rename assets/{troubleshooting.md.DGskTOuw.lean.js => troubleshooting.md.rkMlAGoL.lean.js} (70%) rename assets/{zh_concepts_identity-and-binding.md.BpgZjxhl.js => zh_concepts_identity-and-binding.md.B6I6pSqI.js} (96%) rename assets/{zh_concepts_identity-and-binding.md.BpgZjxhl.lean.js => zh_concepts_identity-and-binding.md.B6I6pSqI.lean.js} (74%) rename assets/{zh_concepts_index.md.CFVegv9w.js => zh_concepts_index.md.uaZIblvt.js} (93%) rename assets/{zh_concepts_index.md.CFVegv9w.lean.js => zh_concepts_index.md.uaZIblvt.lean.js} (71%) rename assets/{zh_index.md.N8D_wq8q.js => zh_index.md.DbGu2QT1.js} (92%) rename assets/{zh_index.md.N8D_wq8q.lean.js => zh_index.md.DbGu2QT1.lean.js} (69%) rename assets/{zh_style_terminology.md.DtBRpWD7.js => zh_style_terminology.md.C89A7q1C.js} (96%) rename assets/{zh_style_terminology.md.DtBRpWD7.lean.js => zh_style_terminology.md.C89A7q1C.lean.js} (71%) diff --git a/404.html b/404.html index c9ad3885..65d9cf36 100644 --- a/404.html +++ b/404.html @@ -9,7 +9,7 @@ - + @@ -17,7 +17,7 @@
- + \ No newline at end of file diff --git a/assets/app.njbNB0oZ.js b/assets/app.B1Uz6bRN.js similarity index 90% rename from assets/app.njbNB0oZ.js rename to assets/app.B1Uz6bRN.js index 83cdd9e3..41176806 100644 --- a/assets/app.njbNB0oZ.js +++ b/assets/app.B1Uz6bRN.js @@ -1 +1 @@ -import{t as p}from"./chunks/theme.Ws_3DOcl.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.DEqXEGcv.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.5W6lE5dH.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}; diff --git a/assets/blogs_2026-02-16.md.DSFOaZyb.js b/assets/blogs_2026-02-16.md.CVgn4GCU.js similarity index 98% rename from assets/blogs_2026-02-16.md.DSFOaZyb.js rename to assets/blogs_2026-02-16.md.CVgn4GCU.js index cc06684a..b7350e38 100644 --- a/assets/blogs_2026-02-16.md.DSFOaZyb.js +++ b/assets/blogs_2026-02-16.md.CVgn4GCU.js @@ -1 +1 @@ -import{_ as t,o as a,c as o,ag as n}from"./chunks/framework.DEqXEGcv.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.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}; diff --git a/assets/blogs_2026-02-16.md.DSFOaZyb.lean.js b/assets/blogs_2026-02-16.md.CVgn4GCU.lean.js similarity index 82% rename from assets/blogs_2026-02-16.md.DSFOaZyb.lean.js rename to assets/blogs_2026-02-16.md.CVgn4GCU.lean.js index 02b62335..9a489d53 100644 --- a/assets/blogs_2026-02-16.md.DSFOaZyb.lean.js +++ b/assets/blogs_2026-02-16.md.CVgn4GCU.lean.js @@ -1 +1 @@ -import{_ as t,o as a,c as o,ag as n}from"./chunks/framework.DEqXEGcv.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.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}; diff --git a/assets/blogs_index.md.liWx4LKT.lean.js b/assets/blogs_index.md.DyCOc_Zm.js similarity index 82% rename from assets/blogs_index.md.liWx4LKT.lean.js rename to assets/blogs_index.md.DyCOc_Zm.js index 0fe11026..29dd1bc2 100644 --- a/assets/blogs_index.md.liWx4LKT.lean.js +++ b/assets/blogs_index.md.DyCOc_Zm.js @@ -1 +1 @@ -import{_ as a,o,c as s,j as e,a as l}from"./chunks/framework.DEqXEGcv.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.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}; diff --git a/assets/blogs_index.md.liWx4LKT.js b/assets/blogs_index.md.DyCOc_Zm.lean.js similarity index 82% rename from assets/blogs_index.md.liWx4LKT.js rename to assets/blogs_index.md.DyCOc_Zm.lean.js index 0fe11026..29dd1bc2 100644 --- a/assets/blogs_index.md.liWx4LKT.js +++ b/assets/blogs_index.md.DyCOc_Zm.lean.js @@ -1 +1 @@ -import{_ as a,o,c as s,j as e,a as l}from"./chunks/framework.DEqXEGcv.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.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}; diff --git a/assets/chunks/@localSearchIndexroot.DwgVjkgi.js b/assets/chunks/@localSearchIndexroot.DwgVjkgi.js new file mode 100644 index 00000000..f0cf6fbb --- /dev/null +++ b/assets/chunks/@localSearchIndexroot.DwgVjkgi.js @@ -0,0 +1 @@ +const e='{"documentCount":169,"nextId":169,"documentIds":{"0":"/blogs/2026-02-16.html#introduction-to-memoh-the-case-for-an-always-on-containerized-home-agent","1":"/blogs/2026-02-16.html#overview","2":"/blogs/2026-02-16.html#story-time","3":"/blogs/2026-02-16.html#what","4":"/blogs/2026-02-16.html#why","5":"/blogs/2026-02-16.html#how","6":"/blogs/2026-02-16.html#features","7":"/blogs/2026-02-16.html#compare-to-openclaw","8":"/blogs/2026-02-16.html#conclusion","9":"/blogs/#blogs","10":"/cli/auth.html#auth-commands","11":"/cli/auth.html#login","12":"/cli/auth.html#logout","13":"/cli/auth.html#whoami","14":"/cli/channel.html#channel-commands","15":"/cli/channel.html#channel-list","16":"/cli/channel.html#channel-info","17":"/cli/channel.html#channel-config-get","18":"/cli/channel.html#channel-config-set","19":"/cli/channel.html#channel-bind-get","20":"/cli/channel.html#channel-bind-set","21":"/cli/bot.html#bot-commands","22":"/cli/bot.html#bot-list","23":"/cli/bot.html#bot-create","24":"/cli/bot.html#bot-update","25":"/cli/bot.html#bot-delete","26":"/cli/bot.html#bot-chat","27":"/cli/bot.html#bot-set-model","28":"/cli/chat.html#chat-commands","29":"/cli/chat.html#default-interactive-chat","30":"/cli/chat.html#tui","31":"/cli/chat.html#version","32":"/cli/config.html#config-commands","33":"/cli/config.html#config","34":"/cli/config.html#config-set","35":"/cli/#memoh-cli","36":"/cli/#installation","37":"/cli/#configuration","38":"/cli/#commands","39":"/cli/model.html#model-commands","40":"/cli/model.html#model-list","41":"/cli/model.html#model-create","42":"/cli/model.html#model-delete","43":"/cli/provider.html#provider-commands","44":"/cli/provider.html#provider-list","45":"/cli/provider.html#provider-create","46":"/cli/provider.html#provider-delete","47":"/cli/schedule.html#schedule-commands","48":"/cli/schedule.html#schedule-list","49":"/cli/schedule.html#schedule-get","50":"/cli/schedule.html#schedule-create","51":"/cli/schedule.html#schedule-update","52":"/cli/schedule.html#schedule-toggle","53":"/cli/schedule.html#schedule-delete","54":"/concepts/bot.html#bot","55":"/concepts/bot.html#key-settings","56":"/concepts/bot.html#why-it-matters","57":"/concepts/bot.html#web-ui-path","58":"/concepts/channel.html#channel","59":"/concepts/channel.html#what-a-channel-configuration-defines","60":"/concepts/channel.html#why-it-matters","61":"/concepts/channel.html#web-ui-path","62":"/concepts/conversation-and-history.html#conversation-and-history","63":"/concepts/conversation-and-history.html#what-this-includes","64":"/concepts/conversation-and-history.html#why-it-matters","65":"/concepts/conversation-and-history.html#web-ui-path","66":"/concepts/container.html#container","67":"/concepts/container.html#what-isolation-gives-you","68":"/concepts/container.html#why-it-matters","69":"/concepts/container.html#web-ui-path","70":"/concepts/#concepts-overview","71":"/concepts/#concept-map","72":"/concepts/#recommended-reading-order","73":"/concepts/mcp.html#mcp","74":"/concepts/mcp.html#what-mcp-adds","75":"/concepts/mcp.html#why-it-matters","76":"/concepts/mcp.html#web-ui-path","77":"/concepts/memory.html#memory","78":"/concepts/memory.html#how-it-works","79":"/concepts/memory.html#why-it-matters","80":"/concepts/memory.html#web-ui-path","81":"/concepts/schedule.html#schedule","82":"/concepts/schedule.html#core-fields","83":"/concepts/schedule.html#why-it-matters","84":"/concepts/schedule.html#web-ui-path","85":"/concepts/skills.html#skills","86":"/concepts/skills.html#typical-skill-content","87":"/concepts/skills.html#why-it-matters","88":"/concepts/skills.html#web-ui-path","89":"/concepts/provider-and-model.html#provider-and-model","90":"/concepts/provider-and-model.html#client-types","91":"/concepts/provider-and-model.html#typical-setup","92":"/concepts/provider-and-model.html#model-assignment-to-bot","93":"/concepts/provider-and-model.html#web-ui-path","94":"/concepts/subagents.html#subagents","95":"/concepts/subagents.html#core-idea","96":"/concepts/subagents.html#why-it-matters","97":"/concepts/subagents.html#web-ui-path","98":"/getting-started/create-bot.html#create-bot","99":"/getting-started/create-bot.html#prerequisites","100":"/getting-started/create-bot.html#step-1-open-the-bot-page","101":"/getting-started/create-bot.html#step-2-create-a-bot","102":"/getting-started/create-bot.html#step-3-bot-configuration","103":"/getting-started/create-bot.html#step-4-check-bot","104":"/getting-started/create-bot.html#next-steps","105":"/getting-started.html#about-memoh","106":"/getting-started.html#what-is-memoh","107":"/getting-started.html#key-features","108":"/getting-started.html#multi-bot-management","109":"/getting-started.html#containerized-isolation","110":"/getting-started.html#memory-engineering","111":"/getting-started.html#multi-platform-support","112":"/getting-started.html#agent-capabilities","113":"/getting-started.html#multi-llm-provider-support","114":"/getting-started.html#mcp-protocol-support","115":"/getting-started.html#scheduled-tasks","116":"/getting-started.html#graphical-configuration","117":"/getting-started.html#cli-tool","118":"/getting-started.html#installation","119":"/getting-started/platform-telegram.html#configure-telegram-channel","120":"/getting-started/platform-telegram.html#prerequisites","121":"/getting-started/platform-telegram.html#step-1-create-a-telegram-bot","122":"/getting-started/platform-telegram.html#step-2-open-the-bot-platforms-page","123":"/getting-started/platform-telegram.html#step-3-add-telegram-channel","124":"/getting-started/platform-telegram.html#step-4-bind-your-telegram-account","125":"/getting-started/platform-telegram.html#step-6-test-the-connection","126":"/getting-started/platform-telegram.html#next-steps","127":"/#memoh-documentation","128":"/#documentation","129":"/getting-started/provider-and-model.html#configure-provider-and-model","130":"/getting-started/provider-and-model.html#prerequisites","131":"/getting-started/provider-and-model.html#step-1-open-the-models-page","132":"/getting-started/provider-and-model.html#step-2-add-a-provider","133":"/getting-started/provider-and-model.html#step-3-add-models","134":"/getting-started/provider-and-model.html#step-4-edit-or-delete","135":"/getting-started/provider-and-model.html#next-steps","136":"/installation/config-toml.html#config-toml-reference","137":"/installation/config-toml.html#full-example","138":"/installation/config-toml.html#section-reference","139":"/installation/config-toml.html#log","140":"/installation/config-toml.html#server","141":"/installation/config-toml.html#admin","142":"/installation/config-toml.html#auth","143":"/installation/config-toml.html#containerd","144":"/installation/config-toml.html#mcp","145":"/installation/config-toml.html#postgres","146":"/installation/config-toml.html#qdrant","147":"/installation/config-toml.html#agent-gateway","148":"/installation/config-toml.html#web","149":"/installation/config-toml.html#brave","150":"/installation/docker.html#docker-installation","151":"/installation/docker.html#prerequisites","152":"/installation/docker.html#one-click-install","153":"/installation/docker.html#manual-install","154":"/installation/docker.html#access-points","155":"/installation/docker.html#custom-configuration","156":"/installation/docker.html#common-commands","157":"/installation/docker.html#production-checklist","158":"/installation/docker.html#troubleshooting","159":"/installation/docker.html#security-warnings","160":"/troubleshooting.html#troubleshooting","161":"/troubleshooting.html#mcp-container-no-running-task-found-task-mcp-xxx-not-found","162":"/troubleshooting.html#symptom","163":"/troubleshooting.html#cause","164":"/troubleshooting.html#solution","165":"/troubleshooting.html#mcp-container-image-update-not-taking-effect-after-rebuild","166":"/troubleshooting.html#symptom-1","167":"/troubleshooting.html#cause-1","168":"/troubleshooting.html#solution-1"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[12,1,1],"1":[1,12,74],"2":[2,12,215],"3":[1,12,29],"4":[1,12,54],"5":[1,12,65],"6":[1,12,104],"7":[3,12,83],"8":[1,12,62],"9":[1,1,12],"10":[2,1,1],"11":[1,2,25],"12":[1,2,10],"13":[1,2,23],"14":[2,1,8],"15":[2,2,12],"16":[2,2,20],"17":[3,2,18],"18":[3,2,36],"19":[3,2,21],"20":[3,2,30],"21":[2,1,7],"22":[2,2,23],"23":[2,2,29],"24":[2,2,31],"25":[2,2,10],"26":[2,2,19],"27":[3,2,26],"28":[2,1,1],"29":[3,2,46],"30":[1,2,29],"31":[1,2,6],"32":[2,1,18],"33":[1,2,16],"34":[2,2,39],"35":[2,1,28],"36":[1,2,56],"37":[1,2,20],"38":[1,2,61],"39":[2,1,6],"40":[2,2,15],"41":[2,2,57],"42":[2,2,13],"43":[2,1,8],"44":[2,2,21],"45":[2,2,37],"46":[2,2,13],"47":[2,1,18],"48":[2,2,12],"49":[2,2,11],"50":[2,2,51],"51":[2,2,32],"52":[2,2,14],"53":[2,2,9],"54":[1,1,23],"55":[2,1,31],"56":[3,1,21],"57":[3,1,7],"58":[1,1,18],"59":[5,1,20],"60":[3,1,15],"61":[3,1,7],"62":[3,1,9],"63":[3,3,17],"64":[3,3,16],"65":[3,3,9],"66":[1,1,9],"67":[4,1,24],"68":[3,1,19],"69":[3,1,7],"70":[2,1,29],"71":[2,2,56],"72":[3,2,14],"73":[1,1,12],"74":[3,1,31],"75":[3,1,16],"76":[3,1,7],"77":[1,1,12],"78":[3,1,30],"79":[3,1,16],"80":[3,1,7],"81":[1,1,16],"82":[2,1,23],"83":[3,1,20],"84":[3,1,23],"85":[1,1,18],"86":[3,1,11],"87":[3,1,16],"88":[3,1,28],"89":[3,1,35],"90":[2,3,45],"91":[2,3,20],"92":[4,3,21],"93":[3,3,16],"94":[1,1,13],"95":[2,1,30],"96":[3,1,15],"97":[3,1,7],"98":[2,1,1],"99":[1,2,7],"100":[6,2,11],"101":[5,2,47],"102":[4,2,23],"103":[4,2,18],"104":[2,2,16],"105":[2,1,1],"106":[4,2,50],"107":[2,2,1],"108":[3,4,29],"109":[2,4,33],"110":[2,4,51],"111":[3,4,31],"112":[2,4,57],"113":[4,4,27],"114":[3,4,23],"115":[2,4,22],"116":[2,4,27],"117":[2,4,24],"118":[1,2,35],"119":[3,1,17],"120":[1,3,27],"121":[6,3,48],"122":[7,3,25],"123":[5,3,31],"124":[6,3,44],"125":[5,3,38],"126":[2,3,21],"127":[2,1,45],"128":[1,2,32],"129":[4,1,25],"130":[1,4,19],"131":[6,4,34],"132":[5,4,65],"133":[4,4,91],"134":[5,4,29],"135":[2,4,24],"136":[3,1,29],"137":[2,3,81],"138":[2,3,1],"139":[2,4,17],"140":[2,4,24],"141":[2,4,18],"142":[2,4,30],"143":[2,4,20],"144":[2,4,38],"145":[2,4,30],"146":[2,4,34],"147":[3,4,34],"148":[2,4,17],"149":[2,4,32],"150":[2,1,42],"151":[1,2,5],"152":[3,2,67],"153":[2,2,56],"154":[2,2,31],"155":[2,2,67],"156":[2,2,31],"157":[2,2,40],"158":[1,2,21],"159":[2,2,27],"160":[1,1,1],"161":[9,1,1],"162":[1,10,46],"163":[1,10,65],"164":[1,10,58],"165":[9,1,1],"166":[1,10,33],"167":[1,10,44],"168":[1,10,55]},"averageFieldLength":[2.4792899408284024,2.8402366863905324,28.218934911242602],"storedFields":{"0":{"title":"Introduction to Memoh - The Case for an Always-On, Containerized Home Agent","titles":[]},"1":{"title":"Overview","titles":["Introduction to Memoh - The Case for an Always-On, Containerized Home Agent"]},"2":{"title":"Story Time","titles":["Introduction to Memoh - The Case for an Always-On, Containerized Home Agent"]},"3":{"title":"What","titles":["Introduction to Memoh - The Case for an Always-On, Containerized Home Agent"]},"4":{"title":"Why","titles":["Introduction to Memoh - The Case for an Always-On, Containerized Home Agent"]},"5":{"title":"How","titles":["Introduction to Memoh - The Case for an Always-On, Containerized Home Agent"]},"6":{"title":"Features","titles":["Introduction to Memoh - The Case for an Always-On, Containerized Home Agent"]},"7":{"title":"Compare to OpenClaw","titles":["Introduction to Memoh - The Case for an Always-On, Containerized Home Agent"]},"8":{"title":"Conclusion","titles":["Introduction to Memoh - The Case for an Always-On, Containerized Home Agent"]},"9":{"title":"Blogs","titles":[]},"10":{"title":"Auth Commands","titles":[]},"11":{"title":"login","titles":["Auth Commands"]},"12":{"title":"logout","titles":["Auth Commands"]},"13":{"title":"whoami","titles":["Auth Commands"]},"14":{"title":"Channel Commands","titles":[]},"15":{"title":"channel list","titles":["Channel Commands"]},"16":{"title":"channel info","titles":["Channel Commands"]},"17":{"title":"channel config get","titles":["Channel Commands"]},"18":{"title":"channel config set","titles":["Channel Commands"]},"19":{"title":"channel bind get","titles":["Channel Commands"]},"20":{"title":"channel bind set","titles":["Channel Commands"]},"21":{"title":"Bot Commands","titles":[]},"22":{"title":"bot list","titles":["Bot Commands"]},"23":{"title":"bot create","titles":["Bot Commands"]},"24":{"title":"bot update","titles":["Bot Commands"]},"25":{"title":"bot delete","titles":["Bot Commands"]},"26":{"title":"bot chat","titles":["Bot Commands"]},"27":{"title":"bot set-model","titles":["Bot Commands"]},"28":{"title":"Chat Commands","titles":[]},"29":{"title":"Default: Interactive Chat","titles":["Chat Commands"]},"30":{"title":"tui","titles":["Chat Commands"]},"31":{"title":"version","titles":["Chat Commands"]},"32":{"title":"Config Commands","titles":[]},"33":{"title":"config","titles":["Config Commands"]},"34":{"title":"config set","titles":["Config Commands"]},"35":{"title":"Memoh CLI","titles":[]},"36":{"title":"Installation","titles":["Memoh CLI"]},"37":{"title":"Configuration","titles":["Memoh CLI"]},"38":{"title":"Commands","titles":["Memoh CLI"]},"39":{"title":"Model Commands","titles":[]},"40":{"title":"model list","titles":["Model Commands"]},"41":{"title":"model create","titles":["Model Commands"]},"42":{"title":"model delete","titles":["Model Commands"]},"43":{"title":"Provider Commands","titles":[]},"44":{"title":"provider list","titles":["Provider Commands"]},"45":{"title":"provider create","titles":["Provider Commands"]},"46":{"title":"provider delete","titles":["Provider Commands"]},"47":{"title":"Schedule Commands","titles":[]},"48":{"title":"schedule list","titles":["Schedule Commands"]},"49":{"title":"schedule get","titles":["Schedule Commands"]},"50":{"title":"schedule create","titles":["Schedule Commands"]},"51":{"title":"schedule update","titles":["Schedule Commands"]},"52":{"title":"schedule toggle","titles":["Schedule Commands"]},"53":{"title":"schedule delete","titles":["Schedule Commands"]},"54":{"title":"Bot","titles":[]},"55":{"title":"Key Settings","titles":["Bot"]},"56":{"title":"Why It Matters","titles":["Bot"]},"57":{"title":"Web UI Path","titles":["Bot"]},"58":{"title":"Channel","titles":[]},"59":{"title":"What a Channel Configuration Defines","titles":["Channel"]},"60":{"title":"Why It Matters","titles":["Channel"]},"61":{"title":"Web UI Path","titles":["Channel"]},"62":{"title":"Conversation and History","titles":[]},"63":{"title":"What This Includes","titles":["Conversation and History"]},"64":{"title":"Why It Matters","titles":["Conversation and History"]},"65":{"title":"Web UI Path","titles":["Conversation and History"]},"66":{"title":"Container","titles":[]},"67":{"title":"What Isolation Gives You","titles":["Container"]},"68":{"title":"Why It Matters","titles":["Container"]},"69":{"title":"Web UI Path","titles":["Container"]},"70":{"title":"Concepts Overview","titles":[]},"71":{"title":"Concept Map","titles":["Concepts Overview"]},"72":{"title":"Recommended Reading Order","titles":["Concepts Overview"]},"73":{"title":"MCP","titles":[]},"74":{"title":"What MCP Adds","titles":["MCP"]},"75":{"title":"Why It Matters","titles":["MCP"]},"76":{"title":"Web UI Path","titles":["MCP"]},"77":{"title":"Memory","titles":[]},"78":{"title":"How It Works","titles":["Memory"]},"79":{"title":"Why It Matters","titles":["Memory"]},"80":{"title":"Web UI Path","titles":["Memory"]},"81":{"title":"Schedule","titles":[]},"82":{"title":"Core Fields","titles":["Schedule"]},"83":{"title":"Why It Matters","titles":["Schedule"]},"84":{"title":"Web UI Path","titles":["Schedule"]},"85":{"title":"Skills","titles":[]},"86":{"title":"Typical Skill Content","titles":["Skills"]},"87":{"title":"Why It Matters","titles":["Skills"]},"88":{"title":"Web UI Path","titles":["Skills"]},"89":{"title":"Provider and Model","titles":[]},"90":{"title":"Client Types","titles":["Provider and Model"]},"91":{"title":"Typical Setup","titles":["Provider and Model"]},"92":{"title":"Model Assignment to Bot","titles":["Provider and Model"]},"93":{"title":"Web UI Path","titles":["Provider and Model"]},"94":{"title":"Subagents","titles":[]},"95":{"title":"Core Idea","titles":["Subagents"]},"96":{"title":"Why It Matters","titles":["Subagents"]},"97":{"title":"Web UI Path","titles":["Subagents"]},"98":{"title":"Create Bot","titles":[]},"99":{"title":"Prerequisites","titles":["Create Bot"]},"100":{"title":"Step 1: Open the Bot Page","titles":["Create Bot"]},"101":{"title":"Step 2: create a Bot","titles":["Create Bot"]},"102":{"title":"Step 3: Bot Configuration","titles":["Create Bot"]},"103":{"title":"Step 4: Check Bot","titles":["Create Bot"]},"104":{"title":"Next Steps","titles":["Create Bot"]},"105":{"title":"About Memoh","titles":[]},"106":{"title":"What is Memoh?","titles":["About Memoh"]},"107":{"title":"Key Features","titles":["About Memoh"]},"108":{"title":"Multi-Bot Management","titles":["About Memoh","Key Features"]},"109":{"title":"Containerized Isolation","titles":["About Memoh","Key Features"]},"110":{"title":"Memory Engineering","titles":["About Memoh","Key Features"]},"111":{"title":"Multi-Platform Support","titles":["About Memoh","Key Features"]},"112":{"title":"Agent Capabilities","titles":["About Memoh","Key Features"]},"113":{"title":"Multi-LLM Provider Support","titles":["About Memoh","Key Features"]},"114":{"title":"MCP Protocol Support","titles":["About Memoh","Key Features"]},"115":{"title":"Scheduled Tasks","titles":["About Memoh","Key Features"]},"116":{"title":"Graphical Configuration","titles":["About Memoh","Key Features"]},"117":{"title":"CLI Tool","titles":["About Memoh","Key Features"]},"118":{"title":"Installation","titles":["About Memoh"]},"119":{"title":"Configure Telegram Channel","titles":[]},"120":{"title":"Prerequisites","titles":["Configure Telegram Channel"]},"121":{"title":"Step 1: Create a Telegram Bot","titles":["Configure Telegram Channel"]},"122":{"title":"Step 2: Open the Bot Platforms Page","titles":["Configure Telegram Channel"]},"123":{"title":"Step 3: Add Telegram Channel","titles":["Configure Telegram Channel"]},"124":{"title":"Step 4: Bind Your Telegram Account","titles":["Configure Telegram Channel"]},"125":{"title":"Step 6: Test the Connection","titles":["Configure Telegram Channel"]},"126":{"title":"Next Steps","titles":["Configure Telegram Channel"]},"127":{"title":"Memoh Documentation","titles":[]},"128":{"title":"Documentation","titles":["Memoh Documentation"]},"129":{"title":"Configure Provider and Model","titles":[]},"130":{"title":"Prerequisites","titles":["Configure Provider and Model"]},"131":{"title":"Step 1: Open the Models Page","titles":["Configure Provider and Model"]},"132":{"title":"Step 2: Add a Provider","titles":["Configure Provider and Model"]},"133":{"title":"Step 3: Add Models","titles":["Configure Provider and Model"]},"134":{"title":"Step 4: Edit or Delete","titles":["Configure Provider and Model"]},"135":{"title":"Next Steps","titles":["Configure Provider and Model"]},"136":{"title":"config.toml Reference","titles":[]},"137":{"title":"Full Example","titles":["config.toml Reference"]},"138":{"title":"Section Reference","titles":["config.toml Reference"]},"139":{"title":"[log]","titles":["config.toml Reference","Section Reference"]},"140":{"title":"[server]","titles":["config.toml Reference","Section Reference"]},"141":{"title":"[admin]","titles":["config.toml Reference","Section Reference"]},"142":{"title":"[auth]","titles":["config.toml Reference","Section Reference"]},"143":{"title":"[containerd]","titles":["config.toml Reference","Section Reference"]},"144":{"title":"[mcp]","titles":["config.toml Reference","Section Reference"]},"145":{"title":"[postgres]","titles":["config.toml Reference","Section Reference"]},"146":{"title":"[qdrant]","titles":["config.toml Reference","Section Reference"]},"147":{"title":"[agent_gateway]","titles":["config.toml Reference","Section Reference"]},"148":{"title":"[web]","titles":["config.toml Reference","Section Reference"]},"149":{"title":"[brave]","titles":["config.toml Reference","Section Reference"]},"150":{"title":"Docker Installation","titles":[]},"151":{"title":"Prerequisites","titles":["Docker Installation"]},"152":{"title":"One-Click Install","titles":["Docker Installation"]},"153":{"title":"Manual Install","titles":["Docker Installation"]},"154":{"title":"Access Points","titles":["Docker Installation"]},"155":{"title":"Custom Configuration","titles":["Docker Installation"]},"156":{"title":"Common Commands","titles":["Docker Installation"]},"157":{"title":"Production Checklist","titles":["Docker Installation"]},"158":{"title":"Troubleshooting","titles":["Docker Installation"]},"159":{"title":"Security Warnings","titles":["Docker Installation"]},"160":{"title":"Troubleshooting","titles":[]},"161":{"title":"MCP Container: no running task found: task mcp-xxx not found","titles":["Troubleshooting"]},"162":{"title":"Symptom","titles":["Troubleshooting","MCP Container: no running task found: task mcp-xxx not found"]},"163":{"title":"Cause","titles":["Troubleshooting","MCP Container: no running task found: task mcp-xxx not found"]},"164":{"title":"Solution","titles":["Troubleshooting","MCP Container: no running task found: task mcp-xxx not found"]},"165":{"title":"MCP Container: Image update not taking effect after rebuild","titles":["Troubleshooting"]},"166":{"title":"Symptom","titles":["Troubleshooting","MCP Container: Image update not taking effect after rebuild"]},"167":{"title":"Cause","titles":["Troubleshooting","MCP Container: Image update not taking effect after rebuild"]},"168":{"title":"Solution","titles":["Troubleshooting","MCP Container: Image update not taking effect after rebuild"]}},"dirtCount":0,"index":[["$path",{"2":{"166":1}}],["xxx",{"0":{"161":1},"1":{"162":1,"163":1,"164":1},"2":{"162":1,"163":1}}],["x26",{"2":{"158":2}}],["x3c",{"2":{"29":1,"30":1,"42":1,"46":1,"48":1,"49":2,"50":1,"51":2,"52":2,"53":2,"164":1}}],["|",{"2":{"152":2}}],["7",{"2":{"142":1}}],["5432",{"2":{"137":1,"145":1}}],["5",{"2":{"125":1}}],["6334",{"2":{"137":1,"146":1}}],["6",{"0":{"125":1}}],["8081",{"2":{"137":1,"147":1,"154":1}}],["8082",{"2":{"120":1,"130":1,"137":1,"148":1,"154":1}}],["8080",{"2":{"33":1,"34":2,"36":1,"137":1,"140":3,"154":1}}],["qdrant",{"0":{"146":1},"2":{"110":1,"118":1,"137":1,"146":2,"150":1,"157":1}}],["qq",{"2":{"101":1}}],["quot",{"2":{"139":4,"140":2,"141":2,"142":6,"143":4,"144":6,"145":8,"146":6,"147":4,"148":2,"149":4}}],["quality",{"2":{"92":1}}],["quarter",{"2":{"1":1}}],["quit",{"2":{"26":1,"29":1}}],["quietly",{"2":{"2":1}}],["questions",{"2":{"1":2}}],["9am",{"2":{"50":1}}],["9",{"2":{"50":1}}],["32",{"2":{"137":1,"142":1,"155":1}}],["3",{"0":{"102":1,"123":1,"133":1},"2":{"41":2,"133":2}}],["10",{"2":{"137":1,"146":1}}],["100",{"2":{"34":1}}],["123456789",{"2":{"121":1,"123":1}}],["127",{"2":{"33":1,"34":1,"36":1,"137":4,"145":1,"146":1,"147":1,"148":1}}],["11434",{"2":{"45":1,"132":2}}],["1536",{"2":{"41":1,"133":1}}],["168h",{"2":{"137":1,"142":1}}],["168",{"2":{"34":1}}],["192",{"2":{"34":1}}],["1",{"0":{"100":1,"121":1,"131":1},"2":{"33":1,"34":2,"36":1,"137":4,"145":1,"146":1,"147":1,"148":1,"154":1}}],["0",{"2":{"33":2,"34":2,"36":2,"50":1,"137":8,"145":2,"146":2,"147":2,"148":2}}],["=",{"2":{"33":2,"137":29,"162":2,"164":1}}],["4",{"0":{"103":1,"124":1,"134":1},"2":{"27":1,"41":2,"42":1,"133":2}}],["~",{"2":{"11":1,"32":1,"37":2,"152":2}}],["+",{"2":{"7":1}}],["js",{"2":{"166":1,"168":1}}],["json",{"2":{"11":1,"37":1,"139":1}}],["jwt",{"2":{"11":1,"137":2,"142":4,"152":2,"155":1}}],["jobs",{"2":{"7":1}}],["just",{"2":{"2":1}}],["2",{"0":{"101":1,"122":1,"132":1},"2":{"133":2,"154":1}}],["24h",{"2":{"142":2}}],["24",{"2":{"6":1,"110":1}}],["2026",{"2":{"1":1,"9":1}}],["volume",{"2":{"163":1,"167":1}}],["v2",{"2":{"151":1}}],["v1",{"2":{"45":1,"132":4,"137":1,"149":1}}],["visible",{"2":{"88":1}}],["via",{"2":{"34":1,"35":1,"106":1,"110":1,"113":1,"114":1,"119":1,"127":1,"135":1,"136":1,"150":1,"157":1}}],["view",{"2":{"32":1,"37":1,"156":1,"158":2}}],["validate",{"2":{"158":1}}],["value",{"2":{"1":1}}],["various",{"2":{"6":1}}],["verify",{"2":{"145":2,"168":1}}],["verification",{"2":{"18":2}}],["version",{"0":{"31":1},"2":{"31":2,"38":2}}],["versioned",{"2":{"5":1}}],["vector",{"2":{"5":1,"78":1,"110":1,"146":1}}],["ui",{"0":{"57":1,"61":1,"65":1,"69":1,"76":1,"80":1,"84":1,"88":1,"93":1,"97":1},"2":{"30":1,"38":1,"56":1,"84":2,"116":1,"120":1,"122":1,"124":1,"129":1,"130":1,"148":2,"150":1,"154":1}}],["using",{"2":{"115":1}}],["usually",{"2":{"91":1}}],["usage",{"2":{"27":1}}],["uses",{"2":{"136":1,"153":1,"163":1,"168":1}}],["used",{"2":{"55":1,"153":1}}],["use",{"2":{"6":1,"7":1,"29":1,"32":1,"36":1,"37":1,"70":1,"89":1,"132":1,"134":1,"140":1,"152":1,"155":1,"159":2,"162":1,"163":1}}],["username",{"2":{"11":2,"13":1,"121":1,"137":1,"141":2}}],["users",{"2":{"5":1,"59":1,"60":1,"63":1,"119":1,"163":2}}],["user",{"2":{"2":1,"7":1,"13":2,"14":1,"19":1,"20":4,"22":2,"38":2,"101":1,"137":1,"145":2,"153":1,"156":1}}],["url",{"2":{"23":2,"24":2,"45":4,"101":1,"132":4,"134":1,"137":2,"146":2,"149":2,"154":1}}],["updating",{"2":{"166":1}}],["update",{"0":{"24":1,"51":1,"165":1},"1":{"166":1,"167":1,"168":1},"2":{"24":2,"32":1,"34":1,"38":3,"51":2,"164":1}}],["up",{"2":{"6":1,"108":1,"116":1,"126":1,"152":1,"153":1,"155":1,"156":2,"158":1,"164":1}}],["upgradable",{"2":{"5":1}}],["unified",{"2":{"74":1,"111":1}}],["units",{"2":{"95":1}}],["unit",{"2":{"71":1}}],["unlimited",{"2":{"50":1}}],["uncomfortable",{"2":{"4":1}}],["understand",{"2":{"70":1}}],["under",{"2":{"3":1,"89":1,"133":1}}],["rm",{"2":{"164":1,"168":1}}],["rpc",{"2":{"162":1}}],["right",{"2":{"131":1,"133":1,"134":1}}],["rich",{"2":{"112":1}}],["rule",{"2":{"81":1}}],["runc",{"2":{"163":1}}],["running",{"0":{"161":1},"1":{"162":1,"163":1,"164":1},"2":{"29":1,"35":1,"36":1,"118":1,"120":1,"130":1,"152":1,"155":1,"162":1}}],["runs",{"2":{"6":1,"66":1,"81":1,"109":1,"127":1,"144":1,"150":1,"159":1}}],["runtime",{"2":{"5":1,"54":1,"67":1,"71":1,"88":1}}],["run",{"2":{"4":1,"5":1,"6":1,"8":1,"36":1,"38":1,"50":1,"68":1,"82":1,"115":1,"127":1,"137":1,"143":1,"150":1,"152":1,"155":1,"159":1,"164":1}}],["root",{"2":{"137":1,"144":1,"153":1,"155":1,"163":2,"164":2}}],["routing",{"2":{"59":1}}],["router",{"2":{"2":3,"5":2}}],["role",{"2":{"13":1,"96":1}}],["rand",{"2":{"137":1,"142":1,"155":1}}],["range",{"2":{"113":1}}],["raise",{"2":{"4":1}}],["ram",{"2":{"2":1}}],["rag",{"2":{"2":1,"3":1}}],["rebuilt",{"2":{"167":1}}],["rebuilding",{"2":{"166":1}}],["rebuild",{"0":{"165":1},"1":{"166":1,"167":1,"168":1},"2":{"156":1,"158":1}}],["regular",{"2":{"157":1}}],["request",{"2":{"146":1,"163":1}}],["requests",{"2":{"95":1}}],["requires",{"2":{"125":1,"152":1}}],["require",{"2":{"38":1,"47":1,"145":1}}],["required",{"2":{"6":1,"41":1,"116":1,"133":1,"142":1,"153":1}}],["reference",{"0":{"136":1,"138":1},"1":{"137":1,"138":1,"139":2,"140":2,"141":2,"142":2,"143":2,"144":2,"145":2,"146":2,"147":2,"148":2,"149":2},"2":{"92":1,"118":1,"128":1,"153":1,"155":2}}],["reliable",{"2":{"95":1}}],["related",{"2":{"88":1}}],["relevant",{"2":{"78":1}}],["reduce",{"2":{"87":1}}],["recreate",{"2":{"168":1}}],["recurring",{"2":{"83":1}}],["recall",{"2":{"78":1}}],["recommended",{"0":{"72":1},"2":{"118":1,"128":1,"150":1,"155":1}}],["recent",{"2":{"55":1}}],["reusable",{"2":{"71":1,"85":1}}],["repository",{"2":{"152":1,"153":1}}],["replies",{"2":{"111":1}}],["reply",{"2":{"59":1}}],["reproducible",{"2":{"4":1}}],["resource",{"2":{"157":1}}],["resources",{"2":{"56":1}}],["restrict",{"2":{"157":1}}],["restarts",{"2":{"167":1}}],["restarting",{"2":{"166":1}}],["restart",{"2":{"156":1,"164":2,"168":2}}],["res",{"2":{"137":1,"149":1}}],["respond",{"2":{"125":1}}],["responsibilities",{"2":{"96":1}}],["response",{"2":{"64":1}}],["responses",{"2":{"29":1,"41":2,"90":2,"113":1,"133":2}}],["results",{"2":{"95":1}}],["reads",{"2":{"147":1}}],["read",{"2":{"109":1,"112":1}}],["ready",{"2":{"91":1}}],["reading",{"0":{"72":1}}],["reactions",{"2":{"112":1}}],["reactive",{"2":{"83":1}}],["reachable",{"2":{"36":1}}],["realized",{"2":{"2":1}}],["reality",{"2":{"1":1}}],["real",{"2":{"1":2,"2":4,"7":1,"29":1,"112":1}}],["retrieved",{"2":{"6":1,"71":1,"78":1}}],["retrieval",{"2":{"5":1,"78":2,"91":1,"110":1}}],["remove",{"2":{"168":1}}],["remote",{"2":{"74":1}}],["reminders",{"2":{"83":1}}],["remains",{"2":{"5":1}}],["remember",{"2":{"2":1,"7":1}}],["re",{"2":{"4":1,"168":1}}],["gateway",{"0":{"147":1},"2":{"137":1,"147":2,"150":1,"154":1}}],["guide",{"2":{"85":1,"119":1,"129":1}}],["google",{"2":{"41":1,"90":2,"113":1,"133":1}}],["got",{"2":{"2":1}}],["global",{"2":{"36":2}}],["git",{"2":{"36":1,"151":1,"153":1}}],["github",{"2":{"36":1,"153":1}}],["gives",{"0":{"67":1}}],["give",{"2":{"2":1,"7":1}}],["gpt",{"2":{"27":1,"41":2,"42":1,"133":2}}],["gt",{"2":{"17":1,"18":5,"19":1,"20":3,"22":1,"23":3,"24":2,"27":2,"29":2,"30":1,"34":2,"41":6,"44":1,"45":3,"47":1,"50":5,"51":5,"57":2,"61":2,"65":3,"69":2,"76":2,"80":2,"88":2,"93":6,"97":2}}],["g",{"2":{"15":1,"18":1,"20":1,"34":1,"41":1,"50":1,"101":3,"104":1,"121":3,"123":1,"132":2,"133":2,"140":1,"142":1,"157":1,"162":1,"163":1,"166":1}}],["group",{"2":{"101":2,"125":1,"153":1,"156":1}}],["groups",{"2":{"6":1,"108":1}}],["gravatar",{"2":{"101":1}}],["graphical",{"0":{"116":1},"2":{"6":1}}],["grade",{"2":{"3":1}}],["generate",{"2":{"124":1,"142":1,"152":1,"155":1}}],["generated",{"2":{"2":1,"152":1}}],["generation",{"2":{"91":1}}],["generative",{"2":{"41":1,"90":2,"113":1,"133":1}}],["getting",{"2":{"128":1}}],["gets",{"2":{"7":1}}],["get",{"0":{"17":1,"19":1,"49":1},"2":{"1":1,"17":2,"19":2,"38":2,"49":2,"118":1,"124":1,"149":1}}],["yml",{"2":{"157":1,"164":1}}],["y",{"2":{"152":1}}],["yours",{"2":{"8":1}}],["your",{"0":{"124":1},"2":{"2":1,"3":1,"6":1,"29":1,"36":1,"102":1,"103":1,"104":1,"106":1,"116":1,"119":2,"121":2,"124":1,"125":2,"126":2,"127":1,"132":1,"137":3,"150":1,"153":1,"155":2,"156":1,"164":2}}],["you",{"0":{"67":1},"2":{"2":5,"5":1,"8":1,"29":1,"70":1,"75":1,"83":1,"106":1,"119":1,"120":2,"121":1,"122":1,"124":1,"129":2,"130":1,"132":1,"133":1,"134":1,"135":2,"136":1,"150":1,"159":1,"163":2,"164":1}}],["year",{"2":{"1":1,"2":1}}],["knowledge",{"2":{"3":1,"71":1,"77":1}}],["keyword",{"2":{"78":1,"110":1}}],["key",{"0":{"55":1,"107":1},"1":{"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1},"2":{"18":3,"45":3,"89":1,"110":1,"128":1,"132":4,"134":1,"137":2,"146":2,"149":3}}],["keeping",{"2":{"56":1}}],["keep",{"2":{"2":1,"8":2,"87":1,"110":1,"164":1}}],["kept",{"2":{"1":1}}],["kind",{"2":{"2":1}}],["d",{"2":{"152":1,"153":1,"155":1,"156":2,"158":1}}],["duplication",{"2":{"87":1}}],["durable",{"2":{"4":1,"5":1,"8":1}}],["data",{"2":{"137":2,"144":4,"152":3,"157":1,"163":5,"164":3,"167":1}}],["database",{"2":{"6":1,"110":1,"137":1,"145":4,"155":1}}],["daily",{"2":{"50":1,"108":1}}],["days",{"2":{"142":1}}],["day",{"2":{"4":1}}],["db",{"2":{"5":1}}],["down",{"2":{"156":1}}],["do",{"2":{"150":1}}],["documentation",{"0":{"127":1,"128":1},"1":{"128":1},"2":{"117":1}}],["dockerfile",{"2":{"166":1}}],["docker",{"0":{"150":1},"1":{"151":1,"152":1,"153":1,"154":1,"155":1,"156":1,"157":1,"158":1,"159":1},"2":{"36":1,"118":2,"120":1,"128":1,"130":1,"136":2,"137":1,"140":1,"144":2,"147":1,"150":2,"151":2,"152":6,"153":5,"155":5,"156":5,"157":1,"158":4,"163":1,"164":5,"167":2,"168":1}}],["don",{"2":{"2":2,"4":2}}],["doing",{"2":{"2":1}}],["doesn",{"2":{"2":1}}],["does",{"2":{"1":1,"163":1}}],["debug",{"2":{"139":1}}],["debugging",{"2":{"63":1}}],["detail",{"2":{"168":1}}],["details",{"2":{"131":1,"155":1}}],["detection",{"2":{"110":1}}],["determines",{"2":{"89":1,"90":1}}],["developers",{"2":{"117":1}}],["device",{"2":{"2":1,"5":1,"7":1}}],["deeply",{"2":{"110":1}}],["dedicated",{"2":{"84":1}}],["designed",{"2":{"70":1,"117":1}}],["design",{"2":{"70":1}}],["desc",{"2":{"50":1,"51":1,"162":1}}],["descriptions",{"2":{"155":1}}],["description",{"2":{"17":1,"18":1,"19":1,"20":1,"22":1,"23":1,"24":1,"27":1,"29":1,"30":1,"34":1,"38":1,"41":1,"44":1,"45":1,"50":4,"51":3,"90":1,"101":1,"123":1,"132":1,"133":1,"139":1,"140":1,"141":1,"142":1,"143":1,"144":1,"145":1,"146":1,"147":1,"148":1,"149":1}}],["decomposition",{"2":{"95":1}}],["decouple",{"2":{"60":1}}],["decide",{"2":{"2":1}}],["delegate",{"2":{"94":1,"112":1}}],["delegated",{"2":{"71":1}}],["delete",{"0":{"25":1,"42":1,"46":1,"53":1,"134":1},"2":{"25":2,"38":4,"42":3,"46":3,"53":2,"67":1,"134":2,"162":1,"168":1}}],["delivery",{"2":{"59":1}}],["defined",{"2":{"81":1}}],["defines",{"0":{"59":1}}],["defaults",{"2":{"152":2}}],["default",{"0":{"29":1},"2":{"6":1,"7":1,"30":1,"34":1,"36":1,"38":1,"55":1,"110":1,"136":1,"137":1,"139":1,"140":1,"141":1,"142":1,"143":2,"144":1,"145":1,"146":1,"147":1,"148":1,"149":1,"153":1,"154":1,"157":1,"159":1,"164":1,"167":1,"168":2}}],["dependencies",{"2":{"118":1}}],["dependable",{"2":{"4":1}}],["deployable",{"2":{"5":1}}],["density",{"2":{"2":2}}],["directory",{"2":{"136":1,"152":2,"163":1}}],["direct",{"2":{"125":1}}],["dialog",{"2":{"91":1,"101":1,"123":1,"124":1,"132":1,"133":1}}],["different",{"2":{"70":1,"133":1}}],["differs",{"2":{"7":1}}],["dimensions",{"2":{"41":4,"133":1}}],["discord",{"2":{"101":1,"104":1}}],["discovery",{"2":{"74":1}}],["disable",{"2":{"51":1,"52":1,"137":1,"145":2,"149":1}}],["disabled",{"2":{"50":2,"51":1}}],["disappears",{"2":{"2":1}}],["display",{"2":{"13":1,"23":1,"24":1,"41":1,"101":1,"121":1,"132":1,"133":2,"141":1}}],["did",{"2":{"2":1}}],["npx",{"2":{"166":1}}],["n",{"2":{"41":1,"50":1,"51":1,"164":1,"167":1,"168":2}}],["nano",{"2":{"155":1}}],["narrower",{"2":{"95":1}}],["name==$",{"2":{"167":1}}],["named",{"2":{"163":1}}],["namespace",{"2":{"137":1,"143":2}}],["name>",{"2":{"46":1}}],["name",{"2":{"13":1,"23":4,"24":3,"41":4,"44":3,"45":4,"46":1,"50":4,"51":3,"101":2,"121":2,"132":4,"133":2,"134":1,"145":1,"146":1,"147":1}}],["natural",{"2":{"1":1}}],["never",{"2":{"167":1}}],["nerdctl",{"2":{"150":1}}],["necessary",{"2":{"124":1,"157":1}}],["next",{"0":{"104":1,"126":1,"135":1},"2":{"121":1}}],["network",{"2":{"6":1,"7":1,"106":1,"109":1,"127":1}}],["needs",{"2":{"91":1}}],["needed",{"2":{"78":1}}],["need",{"2":{"5":1,"121":1,"129":1,"133":1,"150":1}}],["newbot",{"2":{"121":1}}],["new",{"2":{"2":1,"23":1,"41":1,"45":1,"50":1,"101":1,"132":1,"167":1,"168":2}}],["nomic",{"2":{"133":1}}],["none",{"2":{"131":1}}],["no",{"0":{"161":1},"1":{"162":1,"163":1,"164":1},"2":{"6":1,"29":1,"84":1,"116":1,"118":1,"152":1,"153":1,"158":1,"162":1,"163":1}}],["node",{"2":{"2":1,"5":1,"166":1,"168":1}}],["note",{"2":{"164":1}}],["notfound",{"2":{"162":1}}],["noticed",{"2":{"2":1}}],["not",{"0":{"161":1,"165":1},"1":{"162":1,"163":1,"164":1,"166":1,"167":1,"168":1},"2":{"1":1,"2":3,"5":1,"34":1,"83":1,"84":1,"150":1,"153":1,"156":1,"162":3,"163":1,"166":1}}],["night",{"2":{"2":1}}],["io",{"2":{"137":1,"144":1,"168":1}}],["image",{"0":{"165":1},"1":{"166":1,"167":1,"168":1},"2":{"137":1,"144":3,"166":1,"167":7,"168":3}}],["images",{"2":{"133":1,"154":1,"167":1,"168":2}}],["imported",{"2":{"167":1,"168":1}}],["import",{"2":{"167":2,"168":1}}],["important",{"2":{"78":1}}],["improves",{"2":{"96":1}}],["impact",{"2":{"8":1}}],["icon",{"2":{"101":1,"132":1}}],["id=xxx",{"2":{"162":1}}],["identity",{"2":{"124":1}}],["idea",{"0":{"95":1}}],["ids",{"2":{"55":1,"92":1}}],["id>",{"2":{"29":1,"30":1,"42":1,"48":1,"49":2,"50":1,"51":2,"52":2,"53":2,"164":1}}],["id",{"2":{"13":1,"17":1,"18":4,"20":8,"22":2,"24":2,"25":1,"26":1,"27":4,"29":3,"30":2,"41":6,"42":1,"47":1,"49":1,"92":3,"133":1}}],["if",{"2":{"2":1,"8":1,"13":1,"16":1,"34":1,"124":1,"131":1,"133":1,"153":1,"156":1,"164":2,"167":1,"168":1}}],["initialize",{"2":{"154":1}}],["inside",{"2":{"112":1,"150":1,"163":2}}],["inspired",{"2":{"110":1}}],["instead",{"2":{"164":1}}],["instructions",{"2":{"71":1,"85":1}}],["install",{"0":{"152":1,"153":1},"2":{"36":2,"150":1,"152":2}}],["installation",{"0":{"36":1,"118":1,"150":1},"1":{"151":1,"152":1,"153":1,"154":1,"155":1,"156":1,"157":1,"158":1,"159":1},"2":{"36":1,"120":1,"128":2,"130":1,"136":1}}],["instinct",{"2":{"2":1}}],["independent",{"2":{"106":1,"114":1}}],["indexed",{"2":{"78":1}}],["indexing",{"2":{"5":1,"7":1,"91":1}}],["index",{"2":{"5":1}}],["including",{"2":{"89":1,"113":1}}],["includes",{"0":{"63":1},"2":{"118":1,"150":1}}],["include",{"2":{"58":1}}],["input",{"2":{"86":1}}],["invocation",{"2":{"74":1}}],["invoked",{"2":{"30":1}}],["inactive",{"2":{"23":2,"24":2}}],["in",{"2":{"2":1,"4":1,"6":3,"7":1,"8":1,"11":2,"13":1,"29":1,"32":1,"37":2,"38":1,"50":1,"54":1,"56":1,"66":1,"68":1,"71":1,"84":2,"89":1,"92":1,"100":1,"101":2,"102":1,"103":1,"108":1,"109":1,"111":1,"112":1,"120":1,"121":1,"122":2,"123":2,"124":1,"125":1,"127":1,"130":1,"131":1,"132":3,"133":1,"134":2,"135":2,"136":1,"137":1,"140":1,"141":1,"142":1,"144":1,"146":1,"147":1,"153":3,"156":1,"159":2,"163":1,"164":2,"166":1,"167":2}}],["info",{"0":{"16":1},"2":{"13":1,"16":1,"24":1,"137":1,"139":2}}],["information",{"2":{"2":1,"112":1}}],["inference",{"2":{"5":1,"7":1,"8":1}}],["infrastructure",{"2":{"2":1,"4":1,"7":1,"8":1}}],["inflate",{"2":{"2":1}}],["int",{"2":{"145":1,"146":1,"147":1,"148":1}}],["integration",{"2":{"71":1,"74":1,"112":1}}],["interfering",{"2":{"67":1,"109":1}}],["interfaces",{"2":{"140":1}}],["interface",{"2":{"6":1,"111":1}}],["interactions",{"2":{"62":1}}],["interaction",{"2":{"55":1}}],["interactively",{"2":{"24":1}}],["interactive",{"0":{"29":1},"2":{"11":1,"26":1,"29":1,"34":1,"38":1,"41":1,"45":1}}],["internet",{"2":{"2":1}}],["intelligence",{"2":{"2":1}}],["into",{"2":{"1":1,"2":1,"55":1,"95":2}}],["introduction",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1},"2":{"9":1}}],["iterate",{"2":{"7":1}}],["its",{"2":{"6":1,"32":1,"35":1,"54":1,"66":1,"89":1,"106":2,"109":1,"114":1,"125":1,"127":1}}],["it",{"0":{"56":1,"60":1,"64":1,"68":1,"75":1,"78":1,"79":1,"83":1,"87":1,"96":1},"2":{"2":9,"7":2,"8":1,"32":1,"35":1,"106":1,"121":1,"136":1,"155":1,"163":1,"164":1,"168":2}}],["i",{"2":{"2":7}}],["isolation",{"0":{"67":1,"109":1},"2":{"68":1}}],["isolate",{"2":{"56":1}}],["isolated",{"2":{"5":1,"6":1,"7":1,"66":1,"71":1,"109":1,"127":1}}],["is",{"0":{"106":1},"2":{"1":1,"2":3,"3":1,"5":2,"6":2,"8":2,"16":1,"35":1,"36":3,"54":1,"55":1,"68":1,"70":1,"71":2,"77":1,"81":1,"82":1,"84":2,"88":1,"89":2,"106":1,"120":1,"127":1,"128":1,"130":1,"147":1,"150":1,"153":4,"155":1,"156":1,"163":1,"167":2}}],["http",{"2":{"45":1,"114":1,"120":1,"130":1,"132":2,"137":1,"140":1,"146":2,"154":3}}],["https",{"2":{"36":1,"101":1,"132":2,"137":1,"149":1,"152":2,"153":1,"157":1,"159":1}}],["helps",{"2":{"96":1}}],["helper",{"2":{"94":1}}],["help",{"2":{"36":2,"87":1}}],["held",{"2":{"7":1}}],["hybrid",{"2":{"7":1}}],["hoc",{"2":{"64":1}}],["host",{"2":{"33":2,"34":6,"36":1,"37":1,"38":1,"118":1,"137":3,"140":1,"144":1,"145":2,"147":3,"148":2,"150":1,"155":1,"163":2}}],["hours",{"2":{"6":1,"110":1}}],["how",{"0":{"5":1,"78":1},"2":{"55":1,"70":2,"71":4,"85":1,"90":1}}],["home",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1},"2":{"2":2,"3":1,"7":1,"8":1}}],["history",{"0":{"62":1},"1":{"63":1,"64":1,"65":1},"2":{"3":1,"62":1,"64":1,"65":1,"71":1,"72":1}}],["hide",{"2":{"2":1}}],["humans",{"2":{"6":1,"108":1}}],["human",{"2":{"2":1}}],["have",{"2":{"7":1,"114":1,"120":2,"125":1,"130":1,"135":1}}],["having",{"2":{"6":1,"106":1}}],["has",{"2":{"2":1,"54":1,"90":1,"106":1,"124":1,"131":1}}],["half",{"2":{"2":1}}],["happening",{"2":{"2":1}}],["hardware",{"2":{"1":1,"2":1}}],["ls",{"2":{"168":1}}],["leave",{"2":{"149":1}}],["least",{"2":{"129":1,"133":1,"135":1}}],["lean",{"2":{"110":1}}],["left",{"2":{"100":1,"103":1,"122":1,"131":2,"132":2,"133":1}}],["level=error",{"2":{"162":1}}],["level=warn",{"2":{"162":1}}],["level",{"2":{"63":1,"137":1,"139":2}}],["less",{"2":{"8":1}}],["lt",{"2":{"17":1,"18":5,"19":1,"20":3,"22":1,"23":3,"24":2,"27":2,"29":2,"30":1,"34":2,"41":6,"44":1,"45":3,"47":1,"50":5,"51":5}}],["larger",{"2":{"168":1}}],["lark",{"2":{"6":1,"58":1,"104":1,"106":1,"111":1,"127":1}}],["language",{"2":{"55":2,"110":1}}],["last",{"2":{"6":1,"110":1}}],["layer",{"2":{"2":1,"3":1,"110":1}}],["latest",{"2":{"9":1,"137":1,"144":1,"168":1}}],["late",{"2":{"2":1}}],["latency",{"2":{"1":1,"92":1}}],["library",{"2":{"137":1,"144":1,"168":1}}],["limits",{"2":{"115":1,"157":2}}],["linux",{"2":{"156":1}}],["links",{"2":{"128":1}}],["linked",{"2":{"124":1}}],["link",{"2":{"36":1}}],["line",{"2":{"35":1,"111":1,"117":1,"128":1}}],["listen",{"2":{"140":1}}],["list",{"0":{"15":1,"22":1,"40":1,"44":1,"48":1},"2":{"15":2,"22":2,"38":5,"40":2,"44":4,"48":2,"131":1,"133":1,"134":1}}],["lighter",{"2":{"7":1}}],["lifecycle",{"2":{"54":1,"67":1}}],["life",{"2":{"2":1}}],["live",{"2":{"2":1}}],["like",{"2":{"2":1,"5":1,"6":1,"8":2,"83":1,"90":1,"106":1,"132":2,"166":1}}],["looks",{"2":{"136":1}}],["looked",{"2":{"2":1}}],["loads",{"2":{"110":1}}],["load",{"2":{"55":2}}],["loaded",{"2":{"6":1,"55":1}}],["logs",{"2":{"156":2,"158":4,"162":2}}],["logic",{"2":{"60":1}}],["login",{"0":{"11":1},"2":{"11":1,"38":2,"141":2,"154":1}}],["logged",{"2":{"13":1,"120":1,"130":1}}],["logout",{"0":{"12":1},"2":{"12":1,"38":1}}],["log",{"0":{"139":1},"2":{"11":1,"12":1,"38":2,"137":1,"139":2}}],["locally",{"2":{"164":1}}],["localhost",{"2":{"45":1,"120":1,"130":1,"132":2,"154":3}}],["local",{"2":{"3":1,"4":1,"5":1,"7":1,"8":1,"15":1,"132":3,"164":1}}],["low",{"2":{"2":1}}],["longer",{"2":{"2":1}}],["long",{"2":{"1":1,"4":1,"8":1,"71":1,"77":1,"79":1,"106":1,"126":1,"127":1}}],["llama3",{"2":{"133":2}}],["llm",{"0":{"113":1},"2":{"7":1,"38":1,"43":1,"71":1,"89":1,"90":1,"113":1,"129":1}}],["llms",{"2":{"2":1}}],["ll",{"2":{"2":1,"29":1}}],["python",{"2":{"166":1,"168":1}}],["ps",{"2":{"156":1}}],["plus",{"2":{"101":1,"132":1}}],["plugged",{"2":{"71":1}}],["placeholder",{"2":{"132":1}}],["platform",{"0":{"111":1},"2":{"19":1,"58":1,"59":2,"104":1,"106":1,"124":1}}],["platforms",{"0":{"122":1},"2":{"6":1,"60":1,"71":1,"111":1,"122":1}}],["playground",{"2":{"7":1}}],["plane",{"2":{"5":1}}],["plainly",{"2":{"2":1}}],["pnpm",{"2":{"36":4}}],["purpose",{"2":{"86":1}}],["public",{"2":{"23":1,"101":3,"125":1}}],["push",{"2":{"7":1}}],["persistent",{"2":{"167":1}}],["person",{"2":{"101":2,"125":1}}],["personal",{"2":{"1":1,"2":1,"23":1}}],["per",{"2":{"56":1,"67":1,"71":1,"74":1,"92":1}}],["permanently",{"2":{"8":1}}],["people",{"2":{"4":1}}],["phones",{"2":{"2":1}}],["point",{"2":{"155":1}}],["points",{"0":{"154":1}}],["postgres",{"0":{"145":1},"2":{"137":2,"145":1,"152":2,"155":2,"157":1}}],["postgresql",{"2":{"118":1,"145":2,"150":1}}],["post",{"2":{"64":1}}],["position",{"2":{"2":1}}],["powered",{"2":{"109":1}}],["powers",{"2":{"64":1}}],["powerful",{"2":{"2":1}}],["ports",{"2":{"157":1}}],["port",{"2":{"33":2,"34":6,"36":1,"37":1,"38":1,"137":3,"140":1,"145":2,"147":2,"148":2}}],["portable",{"2":{"2":1,"4":1}}],["polite",{"2":{"2":1}}],["prefix",{"2":{"156":1}}],["prefer",{"2":{"117":1}}],["preferred",{"2":{"55":1}}],["prerequisites",{"0":{"99":1,"120":1,"130":1,"151":1}}],["precision",{"2":{"78":1}}],["prevents",{"2":{"67":1}}],["preserved",{"2":{"62":1}}],["press",{"2":{"26":1,"29":1}}],["primarily",{"2":{"88":1}}],["primary",{"2":{"54":1}}],["privileged",{"2":{"159":1}}],["privileges",{"2":{"2":1}}],["privately",{"2":{"6":1,"108":1}}],["private",{"2":{"4":1,"5":2}}],["privacy",{"2":{"1":1,"7":1}}],["project",{"2":{"153":1,"155":1}}],["proactive",{"2":{"83":1}}],["protocol",{"0":{"114":1},"2":{"71":1,"73":1,"74":1,"89":1,"114":1,"133":1,"144":1}}],["process",{"2":{"67":1}}],["provide",{"2":{"121":1}}],["provided",{"2":{"34":1}}],["provider=container",{"2":{"162":1}}],["providers",{"2":{"35":1,"38":1,"43":1,"44":1,"113":1,"116":1,"128":1,"133":1}}],["provider",{"0":{"43":1,"44":1,"45":1,"46":1,"89":1,"113":1,"129":1,"132":1},"1":{"44":1,"45":1,"46":1,"90":1,"91":1,"92":1,"93":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1},"2":{"6":1,"38":1,"40":1,"41":6,"44":7,"45":5,"46":5,"71":1,"72":1,"89":3,"93":2,"99":1,"128":1,"129":1,"131":3,"132":3,"133":2,"134":3}}],["prompt",{"2":{"79":1,"87":1,"103":1,"125":1,"152":1}}],["prompted",{"2":{"29":1}}],["prompts",{"2":{"11":2,"16":1,"23":1,"34":2,"41":2,"45":2,"50":1,"55":1,"71":1,"121":1,"152":1}}],["production",{"0":{"157":1},"2":{"91":1,"141":1,"155":1,"159":2}}],["product",{"2":{"8":1}}],["progress",{"2":{"2":2}}],["panel",{"2":{"132":1,"133":2,"134":1}}],["panels",{"2":{"131":1}}],["page",{"0":{"100":1,"122":1,"131":1},"2":{"84":1,"100":1,"102":1,"103":1,"122":2,"124":1,"131":2,"168":1}}],["pages",{"2":{"70":1}}],["parallel",{"2":{"68":1}}],["parts",{"2":{"70":1}}],["part",{"2":{"2":1,"36":1}}],["path",{"0":{"57":1,"61":1,"65":1,"69":1,"76":1,"80":1,"84":1,"88":1,"93":1,"97":1},"2":{"137":1,"143":2,"144":1,"155":1,"163":2,"164":1}}],["pattern",{"2":{"50":4,"51":3,"82":1}}],["packages",{"2":{"36":2}}],["passed",{"2":{"24":1}}],["passwords",{"2":{"157":2,"159":1}}],["password",{"2":{"11":2,"137":4,"141":2,"145":2,"152":2,"155":5}}],["past",{"2":{"1":1}}],["paired",{"2":{"3":1}}],["paid",{"2":{"2":1}}],["bm25",{"2":{"110":1}}],["bindings",{"2":{"54":1}}],["binding",{"2":{"19":1,"20":1,"38":1,"124":2,"125":1}}],["bind",{"0":{"19":1,"20":1,"124":1},"2":{"19":1,"20":1,"101":1,"124":3,"147":1,"148":1}}],["blogs",{"0":{"9":1},"2":{"9":1}}],["by",{"2":{"6":2,"7":1,"22":2,"42":1,"44":2,"46":1,"49":1,"55":1,"78":1,"84":1,"96":1,"109":1,"110":2,"136":1,"153":1}}],["bottom",{"2":{"132":1}}],["botfather",{"2":{"121":3,"123":1}}],["both",{"2":{"7":1}}],["bots",{"2":{"6":6,"21":1,"22":1,"35":2,"38":1,"47":1,"57":1,"61":1,"63":1,"65":1,"68":1,"69":1,"71":1,"73":1,"74":1,"76":1,"79":1,"80":1,"83":1,"88":1,"92":1,"93":1,"97":1,"100":2,"101":1,"102":1,"106":1,"108":4,"109":1,"112":1,"116":1,"122":2,"125":2,"127":1,"128":1,"129":1,"135":1,"163":1}}],["bot",{"0":{"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"54":1,"92":1,"98":1,"100":1,"101":1,"102":1,"103":1,"108":1,"121":1,"122":1},"1":{"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"55":1,"56":1,"57":1,"99":1,"100":1,"101":1,"102":1,"103":1,"104":1},"2":{"6":3,"7":1,"14":1,"17":2,"18":2,"22":1,"23":4,"24":5,"25":2,"26":2,"27":4,"29":6,"30":4,"38":4,"47":2,"48":3,"49":2,"50":3,"51":2,"52":2,"53":2,"54":2,"55":1,"56":1,"57":1,"58":1,"59":1,"60":2,"61":1,"64":1,"65":1,"66":1,"67":3,"69":1,"71":2,"72":1,"74":2,"76":1,"77":1,"80":1,"81":1,"85":1,"88":1,"91":1,"92":1,"93":1,"94":1,"95":1,"97":1,"101":4,"102":1,"103":1,"104":1,"106":1,"108":1,"109":1,"112":1,"114":1,"116":1,"117":1,"119":2,"120":2,"121":8,"122":1,"123":1,"124":1,"125":4,"126":2,"127":1,"135":2,"143":1,"144":2,"162":2,"164":1,"168":2}}],["boundaries",{"2":{"5":1,"7":1}}],["boundary",{"2":{"1":1}}],["brave",{"0":{"149":1},"2":{"112":1,"137":2,"149":5}}],["brief",{"2":{"4":1}}],["breaks",{"2":{"1":1}}],["basic",{"2":{"102":1}}],["bashdocker",{"2":{"156":1,"158":1,"164":2,"168":3}}],["bashsudo",{"2":{"155":1}}],["bashcp",{"2":{"155":1}}],["bashcurl",{"2":{"152":2}}],["bashcd",{"2":{"36":2}}],["bashgit",{"2":{"36":1,"153":1}}],["bashmemoh",{"2":{"11":1,"12":1,"13":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":2,"29":1,"30":1,"31":1,"33":1,"34":2,"40":1,"41":2,"42":2,"44":2,"45":2,"46":2,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1}}],["base64",{"2":{"137":1,"142":1,"155":1}}],["based",{"2":{"47":1,"81":1}}],["base",{"2":{"2":1,"3":2,"45":3,"101":1,"132":4,"134":1,"137":2,"146":1,"149":2}}],["battery",{"2":{"2":1}}],["backups",{"2":{"157":2}}],["backend",{"2":{"84":1}}],["backends",{"2":{"75":1}}],["back",{"2":{"2":1,"13":1,"59":1,"95":1}}],["before",{"2":{"129":1,"159":1}}],["been",{"2":{"124":1}}],["beyond",{"2":{"79":1}}],["behavior",{"2":{"30":1,"56":1,"64":1,"87":1,"88":1}}],["behind",{"2":{"2":1,"70":1}}],["better",{"2":{"64":1,"78":1}}],["bet",{"2":{"8":1}}],["between",{"2":{"2":1,"63":1,"113":1}}],["belief",{"2":{"7":1}}],["be",{"2":{"6":1,"7":1,"24":1,"29":1,"168":1}}],["becomes",{"2":{"2":1,"4":1}}],["because",{"2":{"2":1}}],["being",{"2":{"2":1}}],["built",{"2":{"7":1,"8":1,"111":1,"112":1,"144":1,"153":1}}],["buildkit",{"2":{"150":1}}],["build",{"2":{"2":1,"7":1,"36":1,"108":1,"152":1,"154":1,"156":1,"158":1}}],["building",{"2":{"2":1}}],["buildable",{"2":{"1":1}}],["button",{"2":{"101":1,"123":1,"132":1}}],["but",{"2":{"1":2,"2":1,"4":1,"30":1,"84":1,"89":1,"163":1}}],["symptom",{"0":{"162":1,"166":1}}],["systems",{"2":{"74":1}}],["system",{"2":{"1":1,"77":1,"106":2,"112":1,"125":1,"127":2}}],["ssl",{"2":{"145":1,"157":1}}],["sslmode",{"2":{"137":1,"145":1}}],["sse",{"2":{"114":1}}],["snapshotter",{"2":{"137":1,"144":2}}],["skips",{"2":{"167":1}}],["skill",{"0":{"86":1},"2":{"112":1}}],["skills",{"0":{"85":1},"1":{"86":1,"87":1,"88":1},"2":{"6":1,"71":1,"72":1,"85":1,"87":1,"88":1,"112":2,"116":1,"126":1}}],["sk",{"2":{"132":1}}],["switch",{"2":{"113":1}}],["swap",{"2":{"75":1}}],["shif",{"2":{"167":1}}],["sh",{"2":{"152":4,"167":1}}],["should",{"2":{"124":1,"125":1,"168":1}}],["short",{"2":{"79":1}}],["shows",{"2":{"133":1}}],["show",{"2":{"13":1,"16":1,"31":1,"33":1,"38":3,"162":2}}],["share",{"2":{"7":1}}],["sharing",{"2":{"5":1,"7":1}}],["space",{"2":{"67":1}}],["split",{"2":{"7":1}}],["specialized",{"2":{"71":1,"94":1,"112":1}}],["specific",{"2":{"85":1,"164":1}}],["specified",{"2":{"6":1,"115":1}}],["specify",{"2":{"29":1,"47":1}}],["speaker",{"2":{"2":1}}],["script",{"2":{"152":2,"167":1}}],["screen",{"2":{"2":1}}],["scalability",{"2":{"96":1}}],["scope",{"2":{"54":1,"86":1}}],["schema",{"2":{"16":1}}],["schedules",{"2":{"35":1,"38":1,"47":1,"48":1,"83":1,"126":1,"128":1}}],["schedule",{"0":{"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"81":1},"1":{"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"82":1,"83":1,"84":1},"2":{"6":1,"38":1,"47":1,"48":1,"49":2,"50":3,"51":3,"52":2,"53":2,"71":1,"72":1,"81":1,"82":1,"84":2}}],["scheduled",{"0":{"115":1},"2":{"6":1,"115":1}}],["significantly",{"2":{"168":1}}],["signing",{"2":{"142":1}}],["size",{"2":{"168":1}}],["since",{"2":{"163":1,"167":1}}],["silently",{"2":{"152":1}}],["silent",{"2":{"152":1}}],["sidebar",{"2":{"100":1,"103":1,"122":1,"131":1,"132":1,"135":1}}],["similarity",{"2":{"78":1}}],["simple",{"2":{"6":1}}],["sit",{"2":{"1":1,"2":1}}],["such",{"2":{"163":1}}],["successful",{"2":{"124":2}}],["sudo",{"2":{"152":2,"153":2,"156":1}}],["summaries",{"2":{"83":1}}],["subagent",{"2":{"85":1,"88":1,"96":1}}],["subagents",{"0":{"94":1},"1":{"95":1,"96":1,"97":1},"2":{"71":1,"72":1,"88":2,"94":1,"95":1,"97":1,"112":2}}],["subcommand",{"2":{"29":1}}],["sustainable",{"2":{"7":1}}],["supported",{"2":{"84":1}}],["support",{"0":{"111":1,"113":1,"114":1},"2":{"7":1,"111":2}}],["supports",{"2":{"6":1,"18":1,"20":1,"74":1,"95":1,"110":1,"114":1,"115":1,"133":1}}],["survives",{"2":{"167":1}}],["survive",{"2":{"1":1}}],["sending",{"2":{"125":1}}],["send",{"2":{"112":1,"121":1,"124":1,"125":2}}],["separate",{"2":{"67":2,"89":1,"96":1,"109":1,"164":1}}],["see",{"2":{"36":1,"117":1,"120":2,"130":1,"136":1,"153":1,"155":2}}],["session",{"2":{"30":1,"38":1}}],["security",{"0":{"159":1}}],["securely",{"2":{"121":1}}],["seconds",{"2":{"124":1,"137":1,"146":2}}],["secrets",{"2":{"157":1,"159":1}}],["secret",{"2":{"18":3,"137":2,"142":2,"152":2,"155":1}}],["section",{"0":{"138":1},"1":{"139":1,"140":1,"141":1,"142":1,"143":1,"144":1,"145":1,"146":1,"147":1,"148":1,"149":1},"2":{"9":1,"70":1,"102":1,"124":1}}],["selecting",{"2":{"134":1}}],["selected",{"2":{"24":1,"131":2}}],["select",{"2":{"16":1,"29":1,"57":1,"61":1,"65":2,"69":1,"76":1,"80":1,"88":1,"93":2,"97":1,"102":1,"122":1,"123":1,"124":1,"133":1}}],["serve",{"2":{"60":1}}],["server",{"0":{"140":1},"2":{"11":1,"35":1,"36":1,"38":1,"118":1,"137":1,"140":1,"147":1,"150":1,"158":1,"162":1,"163":2,"164":3}}],["service",{"2":{"71":1,"89":1,"90":1,"147":1,"154":1,"158":1,"159":1}}],["services",{"2":{"5":1,"73":1,"90":1,"113":1,"114":1,"118":1,"132":1,"152":1,"154":1}}],["serving",{"2":{"5":1}}],["setting",{"2":{"124":1}}],["settings",{"0":{"55":1},"2":{"6":1,"57":1,"92":1,"93":1,"102":1,"116":1,"135":1}}],["setup",{"0":{"91":1},"2":{"118":1}}],["set",{"0":{"18":1,"20":1,"27":1,"34":1},"2":{"6":1,"18":2,"20":2,"23":2,"24":2,"27":2,"34":3,"37":1,"38":3,"108":1,"112":1,"116":1,"126":1,"155":1,"157":1,"163":1,"164":1}}],["semantic",{"2":{"6":1,"78":1,"110":1}}],["search",{"2":{"3":1,"6":1,"110":1,"112":3,"121":1,"131":1,"137":1,"149":7}}],["sludge",{"2":{"2":1}}],["save",{"2":{"102":1,"121":1,"123":1,"124":1,"132":1}}],["safely",{"2":{"68":1}}],["safe",{"2":{"4":1}}],["say",{"2":{"2":1}}],["same",{"2":{"2":1,"30":1,"133":1}}],["solution",{"0":{"164":1,"168":1}}],["solves",{"2":{"85":1}}],["sock",{"2":{"137":1,"143":1}}],["socket",{"2":{"137":1,"143":2}}],["source",{"2":{"8":1,"36":1,"59":1,"63":1,"163":1}}],["so",{"2":{"2":2,"4":1,"60":1,"74":1,"79":1,"168":1}}],["someone",{"2":{"4":1}}],["somewhere",{"2":{"2":2}}],["something",{"2":{"1":1,"2":3}}],["smell",{"2":{"2":1}}],["smoother",{"2":{"2":1}}],["smaller",{"2":{"95":1}}],["small",{"2":{"2":1,"41":2,"133":2}}],["smarter",{"2":{"1":1}}],["step",{"0":{"100":1,"101":1,"102":1,"103":1,"121":1,"122":1,"123":1,"124":1,"125":1,"131":1,"132":1,"133":1,"134":1},"2":{"96":1,"121":1,"125":1}}],["steps",{"0":{"104":1,"126":1,"135":1},"2":{"86":1}}],["string",{"2":{"139":2,"140":1,"141":3,"142":2,"143":2,"144":3,"145":5,"146":3,"147":1,"148":1,"149":2}}],["strict",{"2":{"5":1}}],["structured",{"2":{"106":1,"110":1,"127":1}}],["streaming",{"2":{"26":1,"111":1,"117":1}}],["stream",{"2":{"2":1,"29":1}}],["studio",{"2":{"3":1,"7":1}}],["stop",{"2":{"67":1,"156":1}}],["stops",{"2":{"2":1}}],["store",{"2":{"110":1,"167":1}}],["stores",{"2":{"11":1,"32":1,"37":1,"110":1}}],["stored",{"2":{"6":2,"12":1,"71":1,"78":1}}],["storage",{"2":{"2":1,"5":1}}],["story",{"0":{"2":1}}],["stood",{"2":{"2":1}}],["style",{"2":{"2":1,"78":1}}],["stale",{"2":{"164":1}}],["status",{"2":{"156":1}}],["state",{"2":{"52":1,"131":1}}],["standardized",{"2":{"74":1}}],["starting",{"2":{"155":1}}],["startup",{"2":{"154":2}}],["starts",{"2":{"29":1}}],["start",{"2":{"26":1,"36":1,"67":1,"152":1,"153":1,"156":1}}],["started",{"2":{"2":2,"128":1}}],["stay",{"2":{"5":1}}],["stays",{"2":{"3":1,"8":2}}],["stack",{"2":{"5":1,"8":1,"150":1}}],["stakes",{"2":{"2":1}}],["still",{"2":{"1":1,"166":1}}],["s",{"2":{"1":1,"2":6,"4":1,"8":1,"17":1,"18":1,"19":1,"20":1,"67":1,"77":1,"126":1,"131":1,"152":1,"167":1,"168":1}}],["effect",{"0":{"165":1},"1":{"166":1,"167":1,"168":1}}],["errors",{"2":{"166":1}}],["error=",{"2":{"162":2}}],["error",{"2":{"139":1,"162":1}}],["etc",{"2":{"90":1}}],["email",{"2":{"137":1,"141":2}}],["embedded",{"2":{"167":1}}],["embeddings",{"2":{"133":1}}],["embedding",{"2":{"27":2,"39":1,"41":7,"55":1,"89":1,"91":1,"92":1,"93":1,"102":1,"129":1,"133":6,"135":1}}],["embed",{"2":{"133":1}}],["empty",{"2":{"2":1,"50":1,"131":1,"149":1}}],["e",{"2":{"15":1,"18":1,"20":1,"34":1,"41":1,"50":1,"101":3,"104":1,"121":3,"123":1,"132":2,"133":2,"140":1,"142":1,"157":1,"162":1,"163":1,"166":1}}],["edge",{"2":{"7":1}}],["edit",{"0":{"134":1},"2":{"6":1,"106":1,"112":1,"127":1,"134":2,"155":1}}],["easier",{"2":{"87":1}}],["easy",{"2":{"6":1}}],["each",{"2":{"6":3,"7":1,"54":1,"66":1,"77":1,"90":1,"108":1,"109":2,"110":1,"114":1,"127":1,"134":1,"144":1}}],["exec",{"2":{"162":1,"164":1,"166":1,"168":2}}],["executable",{"2":{"166":1}}],["execute",{"2":{"6":1,"82":1,"106":1,"109":1,"112":1,"162":1}}],["executions",{"2":{"50":1,"51":1}}],["execution",{"2":{"5":1,"67":1,"71":1,"82":1,"86":1,"95":1,"115":1}}],["exists",{"2":{"164":1,"167":1}}],["exist",{"2":{"70":1,"163":1}}],["exit",{"2":{"26":1,"29":1}}],["extra",{"2":{"118":1}}],["extracts",{"2":{"110":1}}],["extracted",{"2":{"78":1}}],["extraction",{"2":{"63":1}}],["extend",{"2":{"112":1,"126":1}}],["extension",{"2":{"74":1,"75":1}}],["external",{"2":{"58":1,"59":1,"71":2,"73":1,"74":1,"114":1}}],["examples",{"2":{"34":1,"41":1,"44":1,"45":1,"58":1}}],["example",{"0":{"137":1},"2":{"27":1,"33":1,"34":1,"42":1,"46":1,"132":2,"133":1,"137":1}}],["expiration",{"2":{"142":1}}],["expires",{"2":{"137":1,"142":1}}],["expression",{"2":{"82":1}}],["expressions",{"2":{"6":1,"115":1}}],["explains",{"2":{"70":1}}],["explicitly",{"2":{"30":1}}],["explicit",{"2":{"5":1,"7":1}}],["expectations",{"2":{"86":1}}],["expensive",{"2":{"4":1}}],["experienced",{"2":{"7":1}}],["experience",{"2":{"1":1}}],["eventually",{"2":{"2":1}}],["everything",{"2":{"5":1,"8":1,"150":1}}],["every",{"2":{"1":1,"2":1,"4":1,"6":1,"106":1}}],["evolves",{"2":{"2":1}}],["economics",{"2":{"2":1}}],["end",{"2":{"121":1}}],["endpoint",{"2":{"89":1}}],["endpoints",{"2":{"43":1}}],["engineered",{"2":{"110":1}}],["engineering",{"0":{"110":1},"2":{"6":1}}],["entrypoint",{"2":{"167":2}}],["entity",{"2":{"54":1}}],["enter",{"2":{"1":1,"26":1,"29":1,"121":2}}],["ensure",{"2":{"36":1}}],["enables",{"2":{"79":1,"92":1}}],["enabled",{"2":{"50":2,"51":1,"82":1}}],["enable",{"2":{"27":1,"51":1,"52":1,"126":1,"133":1}}],["encrypt",{"2":{"18":2}}],["environments",{"2":{"159":1}}],["environment",{"2":{"7":1,"67":1,"71":1}}],["enough",{"2":{"2":1}}],["else",{"2":{"2":1,"4":1}}],["msg=",{"2":{"162":2}}],["mistral",{"2":{"90":1}}],["missing",{"2":{"45":1}}],["minimum",{"2":{"91":1}}],["minimal",{"2":{"75":1}}],["minutes",{"2":{"55":1,"154":1}}],["mic",{"2":{"2":1}}],["my",{"2":{"27":1,"41":2,"44":1,"45":1,"46":1,"101":1,"121":2,"132":1}}],["myself",{"2":{"2":1}}],["mcp",{"0":{"73":1,"74":1,"114":1,"144":1,"161":2,"165":1},"1":{"74":1,"75":1,"76":1,"162":2,"163":2,"164":2,"166":1,"167":1,"168":1},"2":{"6":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"114":2,"116":1,"137":2,"144":3,"162":1,"163":2,"164":2,"166":2,"167":2,"168":3}}],["must",{"2":{"121":1,"159":1}}],["multimodal",{"2":{"40":1,"41":2,"133":1}}],["multiple",{"2":{"5":1,"6":1,"60":1,"108":1,"111":1}}],["multi",{"0":{"108":1,"111":1,"113":1},"2":{"2":1,"6":1,"7":1,"96":1,"106":1,"110":1,"127":1}}],["much",{"2":{"2":1}}],["mention",{"2":{"125":1}}],["messaging",{"2":{"111":1,"112":1}}],["message",{"2":{"29":1,"59":1,"63":1,"124":1,"125":2}}],["messages",{"2":{"26":1,"41":1,"90":2,"112":1,"113":1,"119":1,"125":1,"133":1}}],["mem0",{"2":{"110":1}}],["members",{"2":{"108":1}}],["member",{"2":{"106":1,"127":1}}],["memories",{"2":{"78":2,"110":1,"112":1,"146":1}}],["memory",{"0":{"77":1,"110":1},"1":{"78":1,"79":1,"80":1},"2":{"2":1,"3":1,"5":1,"6":3,"7":1,"8":1,"27":2,"54":1,"55":1,"63":1,"71":1,"72":1,"77":1,"79":1,"80":1,"91":1,"92":1,"93":1,"102":1,"104":1,"106":2,"110":3,"112":1,"126":2,"127":2,"133":1,"137":1,"146":1,"157":1}}],["memoh123",{"2":{"152":1}}],["memohai",{"2":{"36":1,"153":1}}],["memoh",{"0":{"0":1,"35":1,"105":1,"106":1,"127":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"36":1,"37":1,"38":1,"106":1,"107":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1,"118":1,"128":1},"2":{"1":1,"3":1,"4":1,"5":1,"7":2,"8":3,"9":1,"11":2,"29":2,"30":1,"32":1,"34":1,"35":3,"36":6,"37":4,"38":2,"41":2,"44":1,"45":1,"54":1,"56":1,"62":1,"70":2,"73":1,"74":1,"77":1,"78":1,"89":1,"90":1,"106":1,"118":1,"120":1,"121":2,"122":1,"124":1,"127":1,"128":2,"130":1,"136":2,"137":2,"144":2,"145":1,"150":1,"152":4,"153":2,"155":2,"163":3,"164":2,"168":3}}],["metadata",{"2":{"16":1}}],["metaphors",{"2":{"2":1}}],["mounted",{"2":{"153":1,"163":1}}],["mount",{"2":{"136":1,"163":2,"164":1}}],["mode",{"2":{"145":1}}],["model",{"0":{"27":1,"39":1,"40":1,"41":1,"42":1,"89":1,"92":1,"129":1},"1":{"40":1,"41":1,"42":1,"90":1,"91":1,"92":1,"93":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1},"2":{"3":1,"6":1,"27":7,"38":2,"40":1,"41":10,"42":7,"54":1,"55":4,"71":1,"72":1,"73":1,"89":3,"90":1,"91":2,"92":4,"93":1,"99":1,"102":3,"114":1,"117":1,"125":1,"128":1,"131":1,"133":8,"134":2,"135":2,"144":1}}],["models",{"0":{"131":1,"133":1},"2":{"1":1,"4":1,"35":1,"38":1,"39":1,"40":1,"41":2,"93":2,"116":1,"128":1,"129":1,"131":2,"133":2,"135":1}}],["modular",{"2":{"75":1}}],["monorepo",{"2":{"36":1}}],["mobile",{"2":{"2":1}}],["more",{"2":{"2":3,"6":2,"7":1,"8":1,"95":1,"106":1,"117":1}}],["moment",{"2":{"2":3}}],["most",{"2":{"2":1,"38":1}}],["machine",{"2":{"163":1}}],["macos",{"2":{"153":1}}],["may",{"2":{"154":1,"162":1}}],["main",{"2":{"95":2,"147":1,"150":1,"158":1,"159":1}}],["maintenance",{"2":{"83":1}}],["maintain",{"2":{"79":1,"87":1}}],["map",{"0":{"71":1}}],["matters",{"0":{"56":1,"60":1,"64":1,"68":1,"75":1,"79":1,"83":1,"87":1,"96":1}}],["mattered",{"2":{"2":1}}],["max",{"2":{"50":3,"51":2,"55":2,"82":1,"115":1}}],["markdown",{"2":{"111":1}}],["mark",{"2":{"41":1}}],["making",{"2":{"8":2}}],["make",{"2":{"4":1,"83":1,"87":1}}],["makes",{"2":{"1":1,"4":1,"75":1}}],["manual",{"0":{"153":1},"2":{"115":1,"118":1}}],["managing",{"2":{"35":1}}],["managed",{"2":{"88":1}}],["manage",{"2":{"14":1,"21":1,"39":1,"43":1,"47":1,"104":1,"108":1,"112":1}}],["management",{"0":{"108":1},"2":{"6":1,"56":1,"112":1,"116":1,"117":2}}],["many",{"2":{"2":1,"55":1}}],["manifesto",{"2":{"1":1}}],["f",{"2":{"156":1}}],["fssl",{"2":{"152":2}}],["follow",{"2":{"121":1}}],["found",{"0":{"161":2},"1":{"162":2,"163":2,"164":2},"2":{"162":3,"166":1}}],["foundation",{"2":{"68":1}}],["four",{"2":{"113":1}}],["focus",{"2":{"95":1}}],["forward",{"2":{"7":1}}],["forcing",{"2":{"2":1}}],["format",{"2":{"86":1,"137":1,"139":2}}],["form",{"2":{"1":1,"2":1,"133":1}}],["for",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1},"2":{"2":2,"4":1,"5":1,"6":1,"8":1,"11":1,"16":1,"19":1,"23":1,"25":1,"27":1,"34":2,"35":1,"41":3,"45":2,"47":1,"48":1,"50":3,"55":1,"63":1,"77":1,"78":1,"91":2,"92":1,"96":1,"101":3,"102":1,"108":1,"111":1,"112":1,"117":2,"118":1,"121":3,"125":2,"126":2,"128":1,"132":3,"133":6,"136":1,"140":1,"141":1,"142":1,"143":1,"144":1,"146":2,"149":1,"152":2,"153":1,"155":3,"157":1}}],["flexibly",{"2":{"113":1}}],["flexibility",{"2":{"74":1}}],["flip",{"2":{"52":1}}],["flag",{"2":{"40":1}}],["fulfil",{"2":{"163":1}}],["full",{"0":{"137":1},"2":{"111":2,"145":1,"158":1}}],["fully",{"2":{"4":2}}],["furthermore",{"2":{"8":1}}],["freely",{"2":{"6":1,"109":1}}],["frontier",{"2":{"5":1,"8":1}}],["from",{"2":{"2":1,"16":1,"36":1,"59":1,"60":1,"67":1,"78":1,"88":1,"110":1,"123":1,"133":1,"137":1,"144":1,"152":1,"155":1,"164":1,"168":2}}],["feb",{"2":{"9":1}}],["feishu",{"2":{"6":1,"15":1,"18":4,"20":4,"58":1,"104":1,"106":1,"111":1,"127":1}}],["features",{"0":{"6":1,"107":1},"1":{"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1},"2":{"70":1,"128":1}}],["feed",{"2":{"4":1}}],["feels",{"2":{"8":1}}],["feeling",{"2":{"2":1}}],["feel",{"2":{"1":1,"2":2}}],["fi",{"2":{"167":1}}],["firewall",{"2":{"157":1}}],["first",{"2":{"2":1,"3":1,"7":2,"38":1,"154":1}}],["find",{"2":{"124":1}}],["finished",{"2":{"2":1}}],["field",{"2":{"101":1,"123":1,"132":1,"133":1,"139":1,"140":1,"141":1,"142":1,"143":1,"144":1,"145":1,"146":1,"147":1,"148":1,"149":1,"155":1}}],["fields",{"0":{"82":1},"2":{"45":1,"118":1,"153":1}}],["fill",{"2":{"101":1,"123":1,"132":1,"133":1}}],["file",{"2":{"68":1,"136":1,"153":1,"155":1,"163":1,"166":1}}],["filesystem",{"2":{"67":1,"109":1}}],["files",{"2":{"5":1,"6":1,"7":1,"106":1,"109":1,"112":1,"127":1}}],["filter",{"2":{"22":2,"44":2}}],["fixes",{"2":{"2":1}}],["fail",{"2":{"166":1}}],["failed",{"2":{"162":2,"163":1}}],["fails",{"2":{"13":1,"163":1}}],["family",{"2":{"108":1}}],["familiar",{"2":{"1":1}}],["facts",{"2":{"78":1,"110":1}}],["factor",{"2":{"1":1}}],["falls",{"2":{"13":1}}],["faster",{"2":{"7":1}}],["fast",{"2":{"2":1}}],["write",{"2":{"109":1,"112":1}}],["wrote",{"2":{"2":1}}],["wide",{"2":{"113":1}}],["windows",{"2":{"79":1}}],["will",{"2":{"8":1,"121":2,"152":1}}],["within",{"2":{"6":1,"106":1,"109":1}}],["without",{"2":{"2":2,"74":1,"109":1}}],["with",{"2":{"1":2,"2":1,"3":1,"5":1,"6":3,"8":1,"21":1,"26":1,"29":3,"30":1,"35":1,"38":1,"40":1,"62":1,"67":1,"75":1,"78":1,"90":2,"101":1,"106":1,"108":2,"109":2,"111":1,"112":1,"118":1,"119":1,"121":1,"127":2,"132":1,"133":4,"136":1,"142":1,"152":1,"153":1,"155":1,"156":1,"157":1,"159":1,"163":1,"166":1}}],["way",{"2":{"150":1}}],["warnings",{"0":{"159":1}}],["warn",{"2":{"139":1}}],["walks",{"2":{"119":1,"129":1}}],["want",{"2":{"4":2,"8":1,"70":1,"122":1}}],["wanted",{"2":{"2":2}}],["wasn",{"2":{"2":1}}],["was",{"2":{"2":1,"168":1}}],["wait",{"2":{"2":1}}],["who",{"2":{"117":1}}],["whoami",{"0":{"13":1},"2":{"13":1,"38":1}}],["which",{"2":{"29":1,"89":2}}],["while",{"2":{"2":1,"56":1,"88":1,"154":1}}],["whether",{"2":{"82":1}}],["when",{"2":{"2":2,"5":1,"70":1,"78":1,"125":1,"152":1,"155":2,"162":1,"163":1}}],["where",{"2":{"1":1,"2":1,"7":2}}],["why",{"0":{"4":1,"56":1,"60":1,"64":1,"68":1,"75":1,"79":1,"83":1,"87":1,"96":1},"2":{"2":1,"70":1}}],["what",{"0":{"3":1,"59":1,"63":1,"67":1,"74":1,"106":1},"2":{"1":2,"2":1,"128":1}}],["workflow",{"2":{"95":1}}],["workflows",{"2":{"1":1,"87":1}}],["workspace",{"2":{"88":1,"152":2}}],["works",{"0":{"78":1},"2":{"90":1}}],["work",{"2":{"70":1}}],["worse",{"2":{"2":1}}],["world",{"2":{"1":1}}],["wechat",{"2":{"104":1}}],["web",{"0":{"57":1,"61":1,"65":1,"69":1,"76":1,"80":1,"84":1,"88":1,"93":1,"97":1,"148":1},"2":{"56":1,"58":1,"84":2,"111":2,"112":1,"116":1,"118":1,"120":1,"122":1,"124":1,"127":1,"129":1,"130":1,"137":1,"148":2,"149":2,"150":1,"154":1}}],["were",{"2":{"2":1,"168":1}}],["weight",{"2":{"2":1}}],["we",{"2":{"1":2,"2":2,"5":1,"7":2,"8":2}}],["old",{"2":{"167":1,"168":1}}],["ollama",{"2":{"45":1,"46":1,"90":1,"132":7,"133":2}}],["opt",{"2":{"144":1,"163":1,"164":1}}],["optionally",{"2":{"23":1,"44":1}}],["optional",{"2":{"18":2,"50":2,"82":1,"133":1,"146":1}}],["option",{"2":{"17":1,"18":1,"19":1,"20":1,"22":1,"23":1,"24":1,"27":1,"29":1,"30":1,"34":1,"41":1,"44":1,"45":1,"50":1,"51":1}}],["options",{"2":{"17":1,"18":1,"19":1,"20":1,"22":1,"23":1,"24":1,"27":1,"29":1,"30":1,"34":2,"41":1,"44":1,"45":1,"50":1,"51":1}}],["operations",{"2":{"68":1,"83":1,"112":1}}],["operate",{"2":{"8":1}}],["openssl",{"2":{"137":1,"142":1,"155":1}}],["openai",{"2":{"41":6,"44":1,"90":4,"113":2,"132":5,"133":9}}],["open",{"0":{"100":1,"122":1,"131":1},"2":{"8":1,"20":3,"100":1,"102":1,"103":1,"121":1,"122":2,"124":2,"131":1,"133":1,"163":1}}],["openclaw",{"0":{"7":1},"2":{"7":1}}],["omitted",{"2":{"16":1}}],["owner",{"2":{"22":3}}],["own",{"2":{"6":3,"54":1,"66":1,"106":3,"109":1,"114":1,"116":1,"127":2,"155":1}}],["others",{"2":{"125":1}}],["otherwise",{"2":{"29":1}}],["other",{"2":{"6":1,"108":1,"109":1,"116":1}}],["orchestrated",{"2":{"150":1}}],["order",{"0":{"72":1}}],["organizes",{"2":{"62":1}}],["or",{"0":{"134":1},"2":{"6":2,"20":1,"23":1,"24":1,"27":2,"32":1,"34":1,"38":1,"41":1,"52":1,"75":1,"82":1,"85":1,"89":1,"92":1,"108":3,"118":1,"127":1,"131":1,"133":5,"134":2,"139":1,"140":1,"150":1,"153":1,"163":1}}],["outside",{"2":{"164":1}}],["output",{"2":{"33":1,"86":1}}],["out",{"2":{"2":1,"12":1,"38":1}}],["our",{"2":{"1":1,"2":1}}],["oem",{"2":{"2":1}}],["os",{"2":{"2":1}}],["okay",{"2":{"2":1}}],["occasional",{"2":{"2":1}}],["official",{"2":{"121":1,"152":1}}],["off",{"2":{"2":1}}],["of",{"2":{"1":2,"2":3,"6":1,"36":1,"55":1,"64":1,"85":1,"95":1,"110":1,"112":1,"113":1,"132":1,"157":1}}],["override",{"2":{"157":1}}],["overlayfs",{"2":{"137":1,"144":1}}],["over",{"2":{"1":1}}],["overview",{"0":{"1":1,"70":1},"1":{"71":1,"72":1}}],["once",{"2":{"135":1}}],["ongoing",{"2":{"63":1}}],["only",{"2":{"22":1,"83":1,"133":1,"153":1,"159":1}}],["online",{"2":{"8":1}}],["one",{"0":{"152":1},"2":{"8":1,"29":1,"56":1,"60":1,"67":1,"91":2,"102":1,"118":1,"129":1,"133":2,"135":2,"149":1}}],["on",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1},"2":{"1":2,"2":1,"4":1,"5":1,"8":2,"95":1,"118":1,"125":1,"134":1,"150":1,"153":1,"155":1,"156":1}}],["ctr",{"2":{"164":1,"167":1,"168":2}}],["cpu",{"2":{"157":1}}],["custom",{"0":{"155":1},"2":{"136":1}}],["customization",{"2":{"92":1}}],["currently",{"2":{"18":1,"20":1,"84":1,"88":1}}],["current",{"2":{"13":1,"19":1,"20":1,"33":1,"38":1,"52":1,"82":2,"84":1,"136":1}}],["certs",{"2":{"157":1}}],["centralized",{"2":{"56":1}}],["ceiling",{"2":{"4":1}}],["cmd",{"2":{"50":1,"51":1}}],["cd",{"2":{"36":1,"153":1}}],["creation",{"2":{"133":1}}],["creating",{"2":{"129":1}}],["creates",{"2":{"163":1}}],["created",{"2":{"120":1,"162":1}}],["create",{"0":{"23":1,"41":1,"45":1,"50":1,"98":1,"101":1,"121":1},"1":{"99":1,"100":1,"101":1,"102":1,"103":1,"104":1},"2":{"6":1,"23":2,"38":4,"41":5,"45":4,"50":4,"67":1,"106":1,"108":1,"112":1,"120":1,"121":1,"127":1,"135":1}}],["credentials",{"2":{"43":1,"59":1,"152":1}}],["cron",{"2":{"6":1,"47":1,"50":2,"51":1,"81":1,"82":1,"115":1}}],["choose",{"2":{"93":1}}],["choices",{"2":{"2":1}}],["checklist",{"0":{"157":1}}],["check",{"0":{"103":1},"2":{"152":1,"167":1}}],["checks",{"2":{"83":1}}],["cheap",{"2":{"4":1}}],["changing",{"2":{"74":1}}],["changes",{"2":{"155":1}}],["change",{"2":{"37":1,"137":1,"141":1,"155":2,"157":1,"159":1}}],["channels",{"2":{"14":1,"16":1,"35":1,"38":1,"60":1,"61":1,"116":1,"128":1}}],["channel",{"0":{"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"58":1,"59":1,"119":1,"123":1},"1":{"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"59":1,"60":1,"61":1,"120":1,"121":1,"122":1,"123":1,"124":1,"125":1,"126":1},"2":{"6":1,"14":1,"15":2,"16":3,"17":3,"18":3,"19":3,"20":3,"38":2,"54":1,"58":1,"71":1,"72":1,"101":2,"104":1,"111":1,"117":1,"122":1,"123":3}}],["chatting",{"2":{"35":1}}],["chatbox",{"2":{"7":1}}],["chat",{"0":{"26":1,"28":1,"29":1},"1":{"29":1,"30":1,"31":1},"2":{"6":2,"21":1,"26":2,"27":3,"29":3,"30":3,"38":4,"39":1,"41":2,"55":1,"58":1,"63":1,"65":1,"71":1,"89":1,"90":1,"91":1,"92":1,"93":1,"102":1,"103":2,"106":1,"108":1,"111":2,"113":1,"117":1,"119":1,"124":1,"127":1,"128":1,"129":1,"133":4,"135":1}}],["copy",{"2":{"155":1}}],["collection",{"2":{"137":1,"146":2}}],["collaborate",{"2":{"6":1,"108":1}}],["coordinator",{"2":{"95":1}}],["count",{"2":{"82":1,"115":1}}],["coupling",{"2":{"75":1}}],["could",{"2":{"2":1}}],["code",{"2":{"74":1,"112":1,"124":3,"162":1,"163":2}}],["coding",{"2":{"6":1,"116":1}}],["core",{"0":{"82":1,"95":1},"2":{"7":1,"70":1,"71":1,"74":1}}],["come",{"2":{"112":1}}],["combined",{"2":{"95":1}}],["combines",{"2":{"78":1}}],["common",{"0":{"156":1}}],["communicates",{"2":{"90":1}}],["communication",{"2":{"58":1}}],["command=date",{"2":{"162":1}}],["command",{"2":{"35":1,"36":1,"38":2,"50":3,"51":2,"82":2,"111":1,"117":1,"121":1,"128":1}}],["commands",{"0":{"10":1,"14":1,"21":1,"28":1,"32":1,"38":1,"39":1,"43":1,"47":1,"156":1},"1":{"11":1,"12":1,"13":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"29":1,"30":1,"31":1,"33":1,"34":1,"40":1,"41":1,"42":1,"44":1,"45":1,"46":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1},"2":{"6":2,"7":1,"32":1,"38":1,"47":1,"68":1,"81":1,"106":1,"109":1,"112":1,"115":1,"127":1,"162":1}}],["com",{"2":{"34":1,"36":1,"101":1,"132":2,"137":2,"149":2,"153":1}}],["compose",{"2":{"118":1,"147":1,"150":1,"151":1,"152":3,"153":3,"155":3,"156":5,"157":1,"158":5,"164":2,"168":1}}],["compaction",{"2":{"110":1}}],["compatible",{"2":{"90":1,"113":1}}],["compare",{"0":{"7":1}}],["complete",{"2":{"99":1,"124":1}}],["completions",{"2":{"41":2,"90":2,"113":1,"133":4}}],["complex",{"2":{"87":1,"95":1,"112":1}}],["computer",{"2":{"6":1,"106":1}}],["cost",{"2":{"2":1,"92":1}}],["conf",{"2":{"153":1,"155":1,"164":1}}],["confirmation",{"2":{"25":1}}],["config=",{"2":{"155":1}}],["config",{"0":{"17":1,"18":1,"32":1,"33":1,"34":1,"136":1},"1":{"33":1,"34":1,"137":1,"138":1,"139":1,"140":1,"141":1,"142":1,"143":1,"144":1,"145":1,"146":1,"147":1,"148":1,"149":1},"2":{"17":1,"18":1,"32":2,"33":2,"34":4,"37":4,"38":3,"118":1,"128":1,"136":3,"152":1,"153":3,"155":9,"158":1,"163":1,"164":4}}],["configurable",{"2":{"112":1}}],["configuration",{"0":{"37":1,"59":1,"102":1,"116":1,"155":1},"2":{"14":1,"17":1,"18":1,"54":1,"88":1,"89":1,"99":1,"100":1,"102":1,"103":1,"117":1,"118":1,"122":1,"123":1,"131":1,"136":1,"144":1,"152":1,"153":1,"158":1}}],["configured",{"2":{"36":1,"125":1}}],["configure",{"0":{"119":1,"129":1},"1":{"120":1,"121":1,"122":1,"123":1,"124":1,"125":1,"126":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1},"2":{"6":1,"115":1,"116":1,"126":1,"128":1,"129":1,"157":1}}],["confidence",{"2":{"7":1}}],["conventions",{"2":{"88":1}}],["conversations",{"2":{"62":1,"78":1}}],["conversation",{"0":{"62":1},"1":{"63":1,"64":1,"65":1},"2":{"3":1,"6":1,"55":1,"64":1,"65":1,"71":1,"72":1,"110":2,"133":1}}],["consistent",{"2":{"87":1}}],["constraints",{"2":{"86":1}}],["constraint",{"2":{"2":1}}],["connection",{"0":{"125":1}}],["connections",{"2":{"74":1,"114":1}}],["connecting",{"2":{"111":1,"119":1}}],["connected",{"2":{"89":1}}],["connect",{"2":{"71":1,"114":1,"122":1}}],["connects",{"2":{"58":1,"73":1}}],["concrete",{"2":{"89":1}}],["concept",{"0":{"71":1}}],["concepts",{"0":{"70":1},"1":{"71":1,"72":1},"2":{"70":1,"89":1}}],["conceptually",{"2":{"2":1}}],["conclusion",{"0":{"8":1}}],["continue",{"2":{"8":1}}],["continuity",{"2":{"4":1,"8":1,"64":1,"79":1}}],["continuously",{"2":{"2":1}}],["controlled",{"2":{"67":1}}],["control",{"2":{"3":1,"5":1}}],["content",{"0":{"86":1},"2":{"2":1}}],["context",{"2":{"1":2,"2":1,"4":2,"5":1,"6":1,"8":1,"55":2,"63":2,"71":1,"73":1,"79":1,"110":1,"114":1,"144":1}}],["contains",{"2":{"9":1}}],["containerd",{"0":{"143":1},"2":{"109":1,"118":1,"137":3,"143":4,"144":1,"150":2,"158":2,"162":1,"163":3,"164":2,"166":2,"167":4,"168":5}}],["container",{"0":{"66":1,"161":1,"165":1},"1":{"67":1,"68":1,"69":1,"162":1,"163":1,"164":1,"166":1,"167":1,"168":1},"2":{"6":1,"7":1,"50":1,"54":1,"66":1,"68":1,"69":1,"71":1,"72":1,"106":2,"109":1,"112":2,"127":1,"144":3,"159":1,"162":3,"163":2,"164":2,"166":1,"167":1,"168":2}}],["containers",{"2":{"5":1,"6":1,"109":1,"143":1,"150":1,"157":1,"163":1,"164":1}}],["containerization",{"2":{"4":1}}],["containerized",{"0":{"0":1,"109":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1},"2":{"3":1,"5":1,"6":1,"7":1,"8":1,"106":1,"127":1}}],["contact",{"2":{"1":1}}],["click",{"0":{"152":1},"2":{"100":1,"101":1,"102":1,"103":1,"118":1,"122":2,"123":2,"124":1,"131":1,"132":2,"133":1}}],["clicks",{"2":{"2":1}}],["client",{"0":{"90":1},"2":{"40":1,"41":5,"89":1,"90":2,"113":1,"133":5}}],["cli",{"0":{"35":1,"117":1},"1":{"36":1,"37":1,"38":1},"2":{"31":1,"32":1,"35":1,"36":4,"37":1,"38":2,"84":1,"111":1,"117":1,"127":1,"128":1}}],["clean",{"2":{"164":1}}],["cleaner",{"2":{"2":1}}],["clear",{"2":{"12":1,"38":1}}],["clone",{"2":{"36":1,"152":1,"153":2}}],["cloud",{"2":{"3":1,"4":1,"5":1,"7":1,"8":1,"146":1}}],["closed",{"2":{"2":1}}],["classes",{"2":{"85":1}}],["class",{"2":{"2":1}}],["clash",{"2":{"2":1}}],["cause",{"0":{"163":1,"167":1}}],["caught",{"2":{"2":1}}],["cache",{"2":{"158":1}}],["ca",{"2":{"145":1}}],["card",{"2":{"102":1,"134":1}}],["carry",{"2":{"2":1}}],["capabilities",{"0":{"112":1},"2":{"112":1,"126":1}}],["capability",{"2":{"1":1,"3":1,"5":1,"71":2,"74":1,"75":1,"85":1}}],["cap",{"2":{"82":1}}],["call",{"2":{"13":1,"147":1}}],["calls",{"2":{"5":1,"50":2,"51":1,"82":2}}],["category",{"2":{"2":1}}],["can",{"2":{"1":1,"2":5,"6":3,"7":2,"22":1,"24":1,"60":1,"74":1,"75":1,"79":1,"83":1,"94":1,"106":1,"108":1,"109":1,"114":1,"132":1,"134":1,"135":1,"136":1}}],["case",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1}}],["circling",{"2":{"1":1}}],["after",{"0":{"165":1},"1":{"166":1,"167":1,"168":1},"2":{"134":1,"154":1,"166":1}}],["adapter",{"2":{"111":1}}],["added",{"2":{"168":1}}],["adding",{"2":{"166":1}}],["address",{"2":{"140":1}}],["addr",{"2":{"137":1,"140":1,"147":1}}],["add",{"0":{"123":1,"132":1,"133":1},"2":{"75":1,"93":2,"104":1,"123":2,"125":1,"126":1,"129":1,"132":2,"133":2}}],["adds",{"0":{"74":1}}],["admin123",{"2":{"152":1,"154":1}}],["admin",{"0":{"141":1},"2":{"22":1,"137":3,"141":4,"152":3,"154":1,"155":2}}],["admins",{"2":{"22":1}}],["auditing",{"2":{"64":1}}],["automated",{"2":{"126":1}}],["automate",{"2":{"83":1}}],["automatic",{"2":{"110":1}}],["automatically",{"2":{"71":1,"110":1,"115":1}}],["automation",{"2":{"81":1}}],["auto",{"2":{"55":1,"110":1,"152":1}}],["authentication",{"2":{"38":1}}],["auth",{"0":{"10":1,"142":1},"1":{"11":1,"12":1,"13":1},"2":{"37":1,"137":1,"155":1}}],["able",{"2":{"127":1}}],["abcdefghijklmnopqrstuvwxyz",{"2":{"121":1,"123":1}}],["abstraction",{"2":{"56":1}}],["about",{"0":{"105":1},"1":{"106":1,"107":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1,"118":1},"2":{"9":1,"128":1}}],["architecture",{"2":{"96":1,"111":1}}],["area",{"2":{"88":1}}],["are",{"2":{"55":1,"71":1,"78":3,"85":1,"88":1,"89":1,"94":1,"95":1}}],["argument",{"2":{"24":1}}],["around",{"2":{"2":1}}],["avatar",{"2":{"23":2,"24":2,"101":3}}],["available",{"2":{"15":1,"16":1,"84":1,"102":1}}],["a2a",{"2":{"7":1}}],["attachments",{"2":{"111":1}}],["attempt",{"2":{"1":1}}],["at",{"2":{"6":1,"36":1,"50":1,"81":1,"91":1,"115":1,"120":1,"129":1,"130":1,"132":1,"133":1,"135":1,"149":1,"155":1,"163":1}}],["api",{"2":{"13":1,"34":3,"35":1,"36":1,"43":1,"45":3,"84":1,"89":2,"90":4,"101":1,"113":4,"132":7,"133":1,"134":1,"137":3,"146":3,"147":1,"149":7,"154":1}}],["apis",{"2":{"5":1}}],["appears",{"2":{"132":1}}],["app",{"2":{"2":1,"8":1,"18":4,"153":1,"155":1,"164":1}}],["assign",{"2":{"112":1,"135":1}}],["assignment",{"0":{"92":1}}],["assignments",{"2":{"54":1}}],["asks",{"2":{"25":1}}],["as",{"2":{"4":1,"5":3,"6":1,"7":2,"8":1,"24":1,"27":2,"30":1,"36":1,"41":1,"50":2,"62":1,"95":1,"110":1,"123":1,"163":1}}],["allowing",{"2":{"106":1,"119":1}}],["allows",{"2":{"56":1,"68":1}}],["all",{"2":{"22":1,"40":1,"44":1,"47":1,"48":1,"116":1,"118":2,"140":1,"150":1,"152":2,"153":1,"157":1,"159":1}}],["also",{"2":{"4":1,"90":1,"162":1,"164":1}}],["already",{"2":{"2":1,"167":1}}],["always",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1},"2":{"1":1,"2":2,"4":1,"5":1,"8":2}}],["ambient",{"2":{"2":1}}],["across",{"2":{"60":1,"79":1,"167":1}}],["according",{"2":{"125":1}}],["account",{"0":{"124":1},"2":{"120":1}}],["accounts",{"2":{"108":1}}],["access",{"0":{"154":1},"2":{"6":1,"74":1,"106":1,"127":1,"157":1,"159":1}}],["accumulating",{"2":{"2":1}}],["actions",{"2":{"134":1}}],["active",{"2":{"23":2,"24":2,"82":1}}],["acts",{"2":{"5":1,"95":1}}],["actually",{"2":{"1":1,"2":2}}],["agreement",{"2":{"2":1}}],["agent2agent",{"2":{"7":1}}],["agents",{"2":{"1":1,"2":1,"4":1,"71":1,"94":1}}],["agent",{"0":{"0":1,"112":1,"147":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1},"2":{"1":1,"2":1,"7":1,"8":1,"56":1,"88":1,"106":1,"118":1,"127":1,"137":1,"147":4,"150":1,"154":1}}],["ai",{"2":{"1":1,"2":2,"3":1,"4":1,"6":1,"8":1,"41":1,"90":2,"106":2,"113":1,"116":1,"127":2,"133":1}}],["a",{"0":{"59":1,"101":1,"121":1,"132":1},"2":{"1":3,"2":11,"3":1,"5":2,"6":1,"7":4,"8":3,"16":1,"17":1,"18":1,"19":1,"23":1,"25":1,"26":1,"27":2,"35":2,"36":1,"38":1,"41":1,"42":1,"45":1,"46":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"57":1,"58":2,"59":1,"61":1,"65":1,"69":1,"74":1,"76":1,"80":1,"81":2,"85":1,"88":1,"89":2,"90":1,"91":1,"93":1,"94":1,"97":1,"101":2,"106":1,"109":1,"110":1,"112":1,"113":1,"116":1,"117":1,"120":2,"121":3,"125":3,"127":1,"132":3,"133":1,"134":1,"135":1,"136":2,"144":1,"162":1,"163":2,"167":1}}],["another",{"2":{"67":1}}],["analysis",{"2":{"64":1}}],["any",{"2":{"45":1}}],["anthropic",{"2":{"41":1,"90":2,"113":1,"133":1}}],["anchor",{"2":{"2":1}}],["annoying",{"2":{"2":1}}],["and",{"0":{"62":1,"89":1,"129":1},"1":{"63":1,"64":1,"65":1,"90":1,"91":1,"92":1,"93":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1},"2":{"1":1,"2":6,"4":4,"5":3,"6":7,"7":6,"8":4,"11":1,"12":1,"14":1,"16":1,"21":1,"23":1,"26":1,"29":1,"33":1,"34":2,"35":1,"36":1,"37":2,"38":1,"39":1,"40":1,"41":1,"43":1,"50":1,"56":1,"59":1,"63":3,"64":1,"68":1,"70":1,"71":5,"72":2,"74":1,"78":2,"83":1,"84":1,"86":2,"87":1,"88":1,"89":2,"91":1,"96":1,"99":1,"102":1,"106":4,"108":1,"109":2,"110":2,"111":1,"112":4,"114":1,"115":1,"116":1,"117":1,"121":3,"124":1,"125":1,"127":1,"128":4,"129":2,"131":3,"133":1,"134":1,"135":2,"150":1,"152":2,"153":1,"154":1,"155":2,"156":1,"157":2,"159":1,"163":1,"164":1,"166":1,"168":1}}],["an",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1},"2":{"2":3,"5":1,"7":2,"8":3,"26":1,"29":1,"58":1,"106":1,"127":1,"131":1,"163":1}}],["two",{"2":{"131":1}}],["ttl",{"2":{"124":1}}],["typically",{"2":{"147":1}}],["typical",{"0":{"86":1,"91":1}}],["type",{"2":{"16":3,"17":3,"18":3,"19":3,"20":3,"23":3,"26":2,"29":2,"40":2,"41":11,"59":1,"89":1,"90":2,"101":2,"103":1,"123":1,"133":6,"139":1,"140":1,"141":1,"142":1,"143":1,"144":1,"145":1,"146":1,"147":1,"148":1,"149":1}}],["types",{"0":{"90":1},"2":{"15":1,"113":1}}],["tui",{"0":{"30":1},"2":{"30":2,"38":1}}],["turning",{"2":{"2":1}}],["turn",{"2":{"1":1,"6":1,"110":1}}],["tries",{"2":{"162":1}}],["trigger",{"2":{"168":1}}],["triggers",{"2":{"115":1}}],["triggered",{"2":{"71":1}}],["trusted",{"2":{"159":1}}],["troubleshooting",{"0":{"158":1,"160":1},"1":{"161":1,"162":1,"163":1,"164":1,"165":1,"166":1,"167":1,"168":1},"2":{"64":1}}],["treat",{"2":{"7":1}}],["traceability",{"2":{"63":1,"71":1}}],["transport",{"2":{"60":1}}],["trapped",{"2":{"4":1}}],["trade",{"2":{"2":1}}],["travels",{"2":{"2":1}}],["taking",{"0":{"165":1},"1":{"166":1,"167":1,"168":1}}],["take",{"2":{"2":1,"154":1}}],["tab",{"2":{"122":1}}],["task",{"0":{"161":2},"1":{"162":2,"163":2,"164":2},"2":{"82":1,"162":3}}],["tasks",{"0":{"115":1},"2":{"6":2,"71":1,"83":1,"85":1,"94":1,"95":1,"96":1,"108":1,"112":1,"115":1,"126":1}}],["target",{"2":{"59":1}}],["talks",{"2":{"35":1}}],["talk",{"2":{"2":1}}],["tiny",{"2":{"2":1}}],["timeout",{"2":{"137":1,"146":2}}],["timelines",{"2":{"79":1}}],["timeline",{"2":{"63":1}}],["times",{"2":{"6":1,"81":1,"115":1}}],["time",{"0":{"2":1},"2":{"2":3,"29":1,"55":2,"112":1}}],["template",{"2":{"152":1,"155":1}}],["test",{"0":{"125":1},"2":{"103":1}}],["term",{"2":{"71":1,"77":1,"126":1}}],["terminal",{"2":{"30":1,"38":1,"117":1}}],["teams",{"2":{"108":1}}],["team",{"2":{"7":1}}],["telegram",{"0":{"119":1,"121":1,"123":1,"124":1},"1":{"120":1,"121":1,"122":1,"123":1,"124":1,"125":1,"126":1},"2":{"6":1,"15":1,"58":1,"101":2,"104":1,"106":1,"111":1,"119":2,"120":1,"121":1,"122":1,"123":1,"124":2,"125":1,"127":1}}],["text",{"2":{"2":1,"41":2,"133":3,"137":1,"139":2}}],["tension",{"2":{"1":1}}],["t",{"2":{"2":6,"4":2}}],["than",{"2":{"7":1}}],["that",{"2":{"1":1,"2":8,"3":1,"8":4,"68":1,"81":1,"85":1,"89":1,"90":1,"94":1}}],["through",{"2":{"6":2,"74":1,"88":1,"116":1,"119":1,"129":1}}],["threads",{"2":{"2":1}}],["three",{"2":{"1":1}}],["thing",{"2":{"2":1,"8":1}}],["think",{"2":{"2":1}}],["this",{"0":{"63":1},"2":{"2":2,"9":1,"55":1,"67":1,"70":1,"92":1,"95":1,"101":1,"119":1,"121":1,"129":1,"132":1,"144":1,"153":1,"163":1}}],["those",{"2":{"1":1}}],["these",{"2":{"32":1,"70":1,"135":1}}],["them",{"2":{"21":1,"106":1,"110":1,"127":1,"133":1}}],["their",{"2":{"4":1,"6":2,"40":1,"109":1}}],["they",{"2":{"4":2}}],["then",{"2":{"2":1,"11":1,"103":1,"167":1}}],["there",{"2":{"2":1,"84":1}}],["the",{"0":{"0":1,"100":1,"122":1,"125":1,"131":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1},"2":{"1":4,"2":12,"4":1,"5":2,"6":3,"7":3,"8":2,"9":1,"11":2,"12":1,"13":2,"19":1,"20":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":5,"37":1,"38":1,"45":1,"47":1,"50":1,"54":1,"56":1,"59":1,"68":1,"70":1,"71":1,"82":1,"84":1,"88":1,"89":2,"90":1,"95":2,"99":1,"100":2,"101":3,"103":2,"106":1,"110":2,"112":1,"117":1,"118":1,"120":1,"121":5,"122":6,"123":6,"124":3,"125":2,"127":1,"129":1,"130":1,"131":3,"132":7,"133":7,"134":4,"135":2,"136":1,"147":2,"149":1,"150":3,"152":4,"153":3,"155":5,"156":1,"159":1,"162":2,"163":5,"164":6,"166":2,"167":5,"168":6}}],["together",{"2":{"70":1}}],["toggle",{"0":{"52":1},"2":{"38":1,"52":1}}],["toml",{"0":{"136":1},"1":{"137":1,"138":1,"139":1,"140":1,"141":1,"142":1,"143":1,"144":1,"145":1,"146":1,"147":1,"148":1,"149":1},"2":{"32":1,"37":1,"118":1,"128":1,"136":2,"137":1,"152":1,"153":2,"155":6,"163":1,"164":3}}],["tokens",{"2":{"142":1}}],["token",{"2":{"11":2,"12":1,"13":1,"18":3,"37":2,"38":1,"121":2,"123":2}}],["tool",{"0":{"117":1},"2":{"5":1,"35":1,"71":1,"73":1,"74":1,"75":1,"114":1,"117":1,"128":1,"149":1,"162":1}}],["tools",{"2":{"2":1,"7":1,"68":1,"112":1,"162":1,"166":1}}],["too",{"2":{"2":3}}],["to",{"0":{"0":1,"7":1,"92":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1},"2":{"1":1,"2":2,"4":2,"6":3,"7":1,"8":1,"11":1,"13":1,"16":1,"26":1,"29":5,"30":1,"32":1,"35":1,"36":1,"37":2,"38":1,"47":1,"50":1,"56":1,"58":1,"59":2,"68":1,"70":1,"71":1,"73":1,"82":1,"87":1,"89":1,"94":1,"100":1,"103":2,"104":1,"106":1,"108":1,"110":1,"111":1,"112":1,"114":1,"115":1,"116":1,"118":1,"119":2,"120":1,"121":1,"122":4,"123":1,"124":2,"125":3,"126":2,"127":1,"129":1,"130":1,"131":1,"132":1,"133":1,"143":1,"147":1,"149":1,"150":2,"155":1,"157":1,"162":2,"163":2,"164":2,"166":1,"168":1}}]],"serializationVersion":2}';export{e as default}; diff --git a/assets/chunks/@localSearchIndexroot.YMGcEMuZ.js b/assets/chunks/@localSearchIndexroot.YMGcEMuZ.js deleted file mode 100644 index 06ef44a2..00000000 --- a/assets/chunks/@localSearchIndexroot.YMGcEMuZ.js +++ /dev/null @@ -1 +0,0 @@ -const e='{"documentCount":169,"nextId":169,"documentIds":{"0":"/blogs/2026-02-16.html#introduction-to-memoh-the-case-for-an-always-on-containerized-home-agent","1":"/blogs/2026-02-16.html#overview","2":"/blogs/2026-02-16.html#story-time","3":"/blogs/2026-02-16.html#what","4":"/blogs/2026-02-16.html#why","5":"/blogs/2026-02-16.html#how","6":"/blogs/2026-02-16.html#features","7":"/blogs/2026-02-16.html#compare-to-openclaw","8":"/blogs/2026-02-16.html#conclusion","9":"/blogs/#blogs","10":"/cli/auth.html#auth-commands","11":"/cli/auth.html#login","12":"/cli/auth.html#logout","13":"/cli/auth.html#whoami","14":"/cli/bot.html#bot-commands","15":"/cli/bot.html#bot-list","16":"/cli/bot.html#bot-create","17":"/cli/bot.html#bot-update","18":"/cli/bot.html#bot-delete","19":"/cli/bot.html#bot-chat","20":"/cli/bot.html#bot-set-model","21":"/cli/channel.html#channel-commands","22":"/cli/channel.html#channel-list","23":"/cli/channel.html#channel-info","24":"/cli/channel.html#channel-config-get","25":"/cli/channel.html#channel-config-set","26":"/cli/channel.html#channel-bind-get","27":"/cli/channel.html#channel-bind-set","28":"/cli/config.html#config-commands","29":"/cli/config.html#config","30":"/cli/config.html#config-set","31":"/cli/chat.html#chat-commands","32":"/cli/chat.html#default-interactive-chat","33":"/cli/chat.html#tui","34":"/cli/chat.html#version","35":"/cli/model.html#model-commands","36":"/cli/model.html#model-list","37":"/cli/model.html#model-create","38":"/cli/model.html#model-delete","39":"/cli/#memoh-cli","40":"/cli/#installation","41":"/cli/#configuration","42":"/cli/#commands","43":"/cli/provider.html#provider-commands","44":"/cli/provider.html#provider-list","45":"/cli/provider.html#provider-create","46":"/cli/provider.html#provider-delete","47":"/cli/schedule.html#schedule-commands","48":"/cli/schedule.html#schedule-list","49":"/cli/schedule.html#schedule-get","50":"/cli/schedule.html#schedule-create","51":"/cli/schedule.html#schedule-update","52":"/cli/schedule.html#schedule-toggle","53":"/cli/schedule.html#schedule-delete","54":"/concepts/container.html#container","55":"/concepts/container.html#what-isolation-gives-you","56":"/concepts/container.html#why-it-matters","57":"/concepts/container.html#web-ui-path","58":"/concepts/channel.html#channel","59":"/concepts/channel.html#what-a-channel-configuration-defines","60":"/concepts/channel.html#why-it-matters","61":"/concepts/channel.html#web-ui-path","62":"/concepts/bot.html#bot","63":"/concepts/bot.html#key-settings","64":"/concepts/bot.html#why-it-matters","65":"/concepts/bot.html#web-ui-path","66":"/concepts/#concepts-overview","67":"/concepts/#concept-map","68":"/concepts/#recommended-reading-order","69":"/concepts/conversation-and-history.html#conversation-and-history","70":"/concepts/conversation-and-history.html#what-this-includes","71":"/concepts/conversation-and-history.html#why-it-matters","72":"/concepts/conversation-and-history.html#web-ui-path","73":"/concepts/mcp.html#mcp","74":"/concepts/mcp.html#what-mcp-adds","75":"/concepts/mcp.html#why-it-matters","76":"/concepts/mcp.html#web-ui-path","77":"/concepts/memory.html#memory","78":"/concepts/memory.html#how-it-works","79":"/concepts/memory.html#why-it-matters","80":"/concepts/memory.html#web-ui-path","81":"/concepts/provider-and-model.html#provider-and-model","82":"/concepts/provider-and-model.html#client-types","83":"/concepts/provider-and-model.html#typical-setup","84":"/concepts/provider-and-model.html#model-assignment-to-bot","85":"/concepts/provider-and-model.html#web-ui-path","86":"/concepts/schedule.html#schedule","87":"/concepts/schedule.html#core-fields","88":"/concepts/schedule.html#why-it-matters","89":"/concepts/schedule.html#web-ui-path","90":"/concepts/skills.html#skills","91":"/concepts/skills.html#typical-skill-content","92":"/concepts/skills.html#why-it-matters","93":"/concepts/skills.html#web-ui-path","94":"/concepts/subagents.html#subagents","95":"/concepts/subagents.html#core-idea","96":"/concepts/subagents.html#why-it-matters","97":"/concepts/subagents.html#web-ui-path","98":"/getting-started.html#about-memoh","99":"/getting-started.html#what-is-memoh","100":"/getting-started.html#key-features","101":"/getting-started.html#multi-bot-management","102":"/getting-started.html#containerized-isolation","103":"/getting-started.html#memory-engineering","104":"/getting-started.html#multi-platform-support","105":"/getting-started.html#agent-capabilities","106":"/getting-started.html#multi-llm-provider-support","107":"/getting-started.html#mcp-protocol-support","108":"/getting-started.html#scheduled-tasks","109":"/getting-started.html#graphical-configuration","110":"/getting-started.html#cli-tool","111":"/getting-started.html#installation","112":"/getting-started/create-bot.html#create-bot","113":"/getting-started/create-bot.html#prerequisites","114":"/getting-started/create-bot.html#step-1-open-the-bot-page","115":"/getting-started/create-bot.html#step-2-create-a-bot","116":"/getting-started/create-bot.html#step-3-bot-configuration","117":"/getting-started/create-bot.html#step-4-check-bot","118":"/getting-started/create-bot.html#next-steps","119":"/getting-started/platform-telegram.html#configure-telegram-channel","120":"/getting-started/platform-telegram.html#prerequisites","121":"/getting-started/platform-telegram.html#step-1-create-a-telegram-bot","122":"/getting-started/platform-telegram.html#step-2-open-the-bot-platforms-page","123":"/getting-started/platform-telegram.html#step-3-add-telegram-channel","124":"/getting-started/platform-telegram.html#step-4-bind-your-telegram-account","125":"/getting-started/platform-telegram.html#step-6-test-the-connection","126":"/getting-started/platform-telegram.html#next-steps","127":"/getting-started/provider-and-model.html#configure-provider-and-model","128":"/getting-started/provider-and-model.html#prerequisites","129":"/getting-started/provider-and-model.html#step-1-open-the-models-page","130":"/getting-started/provider-and-model.html#step-2-add-a-provider","131":"/getting-started/provider-and-model.html#step-3-add-models","132":"/getting-started/provider-and-model.html#step-4-edit-or-delete","133":"/getting-started/provider-and-model.html#next-steps","134":"/#memoh-documentation","135":"/#documentation","136":"/installation/config-toml.html#config-toml-reference","137":"/installation/config-toml.html#full-example","138":"/installation/config-toml.html#section-reference","139":"/installation/config-toml.html#log","140":"/installation/config-toml.html#server","141":"/installation/config-toml.html#admin","142":"/installation/config-toml.html#auth","143":"/installation/config-toml.html#containerd","144":"/installation/config-toml.html#mcp","145":"/installation/config-toml.html#postgres","146":"/installation/config-toml.html#qdrant","147":"/installation/config-toml.html#agent-gateway","148":"/installation/config-toml.html#web","149":"/installation/config-toml.html#brave","150":"/installation/docker.html#docker-installation","151":"/installation/docker.html#prerequisites","152":"/installation/docker.html#one-click-install","153":"/installation/docker.html#manual-install","154":"/installation/docker.html#access-points","155":"/installation/docker.html#custom-configuration","156":"/installation/docker.html#common-commands","157":"/installation/docker.html#production-checklist","158":"/installation/docker.html#troubleshooting","159":"/installation/docker.html#security-warnings","160":"/troubleshooting.html#troubleshooting","161":"/troubleshooting.html#mcp-container-no-running-task-found-task-mcp-xxx-not-found","162":"/troubleshooting.html#symptom","163":"/troubleshooting.html#cause","164":"/troubleshooting.html#solution","165":"/troubleshooting.html#mcp-container-image-update-not-taking-effect-after-rebuild","166":"/troubleshooting.html#symptom-1","167":"/troubleshooting.html#cause-1","168":"/troubleshooting.html#solution-1"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[12,1,1],"1":[1,12,74],"2":[2,12,215],"3":[1,12,29],"4":[1,12,54],"5":[1,12,65],"6":[1,12,104],"7":[3,12,83],"8":[1,12,62],"9":[1,1,12],"10":[2,1,1],"11":[1,2,25],"12":[1,2,10],"13":[1,2,23],"14":[2,1,7],"15":[2,2,23],"16":[2,2,29],"17":[2,2,31],"18":[2,2,10],"19":[2,2,19],"20":[3,2,26],"21":[2,1,8],"22":[2,2,12],"23":[2,2,20],"24":[3,2,18],"25":[3,2,36],"26":[3,2,21],"27":[3,2,30],"28":[2,1,18],"29":[1,2,16],"30":[2,2,39],"31":[2,1,1],"32":[3,2,46],"33":[1,2,29],"34":[1,2,6],"35":[2,1,6],"36":[2,2,15],"37":[2,2,57],"38":[2,2,13],"39":[2,1,28],"40":[1,2,56],"41":[1,2,20],"42":[1,2,61],"43":[2,1,8],"44":[2,2,21],"45":[2,2,37],"46":[2,2,13],"47":[2,1,18],"48":[2,2,12],"49":[2,2,11],"50":[2,2,51],"51":[2,2,32],"52":[2,2,14],"53":[2,2,9],"54":[1,1,9],"55":[4,1,24],"56":[3,1,19],"57":[3,1,7],"58":[1,1,18],"59":[5,1,20],"60":[3,1,15],"61":[3,1,7],"62":[1,1,23],"63":[2,1,31],"64":[3,1,21],"65":[3,1,7],"66":[2,1,29],"67":[2,2,56],"68":[3,2,14],"69":[3,1,9],"70":[3,3,17],"71":[3,3,16],"72":[3,3,9],"73":[1,1,12],"74":[3,1,31],"75":[3,1,16],"76":[3,1,7],"77":[1,1,12],"78":[3,1,30],"79":[3,1,16],"80":[3,1,7],"81":[3,1,35],"82":[2,3,45],"83":[2,3,20],"84":[4,3,21],"85":[3,3,16],"86":[1,1,16],"87":[2,1,23],"88":[3,1,20],"89":[3,1,23],"90":[1,1,18],"91":[3,1,11],"92":[3,1,16],"93":[3,1,28],"94":[1,1,13],"95":[2,1,30],"96":[3,1,15],"97":[3,1,7],"98":[2,1,1],"99":[4,2,50],"100":[2,2,1],"101":[3,4,29],"102":[2,4,33],"103":[2,4,51],"104":[3,4,31],"105":[2,4,57],"106":[4,4,27],"107":[3,4,23],"108":[2,4,22],"109":[2,4,27],"110":[2,4,24],"111":[1,2,35],"112":[2,1,1],"113":[1,2,7],"114":[6,2,11],"115":[5,2,47],"116":[4,2,23],"117":[4,2,18],"118":[2,2,16],"119":[3,1,17],"120":[1,3,27],"121":[6,3,48],"122":[7,3,25],"123":[5,3,31],"124":[6,3,44],"125":[5,3,38],"126":[2,3,21],"127":[4,1,25],"128":[1,4,19],"129":[6,4,34],"130":[5,4,65],"131":[4,4,91],"132":[5,4,29],"133":[2,4,24],"134":[2,1,45],"135":[1,2,32],"136":[3,1,29],"137":[2,3,81],"138":[2,3,1],"139":[2,4,17],"140":[2,4,24],"141":[2,4,18],"142":[2,4,30],"143":[2,4,20],"144":[2,4,38],"145":[2,4,30],"146":[2,4,34],"147":[3,4,34],"148":[2,4,17],"149":[2,4,32],"150":[2,1,42],"151":[1,2,5],"152":[3,2,74],"153":[2,2,56],"154":[2,2,31],"155":[2,2,67],"156":[2,2,31],"157":[2,2,40],"158":[1,2,21],"159":[2,2,27],"160":[1,1,1],"161":[9,1,1],"162":[1,10,46],"163":[1,10,65],"164":[1,10,58],"165":[9,1,1],"166":[1,10,33],"167":[1,10,44],"168":[1,10,55]},"averageFieldLength":[2.4792899408284024,2.8402366863905324,28.2603550295858],"storedFields":{"0":{"title":"Introduction to Memoh - The Case for an Always-On, Containerized Home Agent","titles":[]},"1":{"title":"Overview","titles":["Introduction to Memoh - The Case for an Always-On, Containerized Home Agent"]},"2":{"title":"Story Time","titles":["Introduction to Memoh - The Case for an Always-On, Containerized Home Agent"]},"3":{"title":"What","titles":["Introduction to Memoh - The Case for an Always-On, Containerized Home Agent"]},"4":{"title":"Why","titles":["Introduction to Memoh - The Case for an Always-On, Containerized Home Agent"]},"5":{"title":"How","titles":["Introduction to Memoh - The Case for an Always-On, Containerized Home Agent"]},"6":{"title":"Features","titles":["Introduction to Memoh - The Case for an Always-On, Containerized Home Agent"]},"7":{"title":"Compare to OpenClaw","titles":["Introduction to Memoh - The Case for an Always-On, Containerized Home Agent"]},"8":{"title":"Conclusion","titles":["Introduction to Memoh - The Case for an Always-On, Containerized Home Agent"]},"9":{"title":"Blogs","titles":[]},"10":{"title":"Auth Commands","titles":[]},"11":{"title":"login","titles":["Auth Commands"]},"12":{"title":"logout","titles":["Auth Commands"]},"13":{"title":"whoami","titles":["Auth Commands"]},"14":{"title":"Bot Commands","titles":[]},"15":{"title":"bot list","titles":["Bot Commands"]},"16":{"title":"bot create","titles":["Bot Commands"]},"17":{"title":"bot update","titles":["Bot Commands"]},"18":{"title":"bot delete","titles":["Bot Commands"]},"19":{"title":"bot chat","titles":["Bot Commands"]},"20":{"title":"bot set-model","titles":["Bot Commands"]},"21":{"title":"Channel Commands","titles":[]},"22":{"title":"channel list","titles":["Channel Commands"]},"23":{"title":"channel info","titles":["Channel Commands"]},"24":{"title":"channel config get","titles":["Channel Commands"]},"25":{"title":"channel config set","titles":["Channel Commands"]},"26":{"title":"channel bind get","titles":["Channel Commands"]},"27":{"title":"channel bind set","titles":["Channel Commands"]},"28":{"title":"Config Commands","titles":[]},"29":{"title":"config","titles":["Config Commands"]},"30":{"title":"config set","titles":["Config Commands"]},"31":{"title":"Chat Commands","titles":[]},"32":{"title":"Default: Interactive Chat","titles":["Chat Commands"]},"33":{"title":"tui","titles":["Chat Commands"]},"34":{"title":"version","titles":["Chat Commands"]},"35":{"title":"Model Commands","titles":[]},"36":{"title":"model list","titles":["Model Commands"]},"37":{"title":"model create","titles":["Model Commands"]},"38":{"title":"model delete","titles":["Model Commands"]},"39":{"title":"Memoh CLI","titles":[]},"40":{"title":"Installation","titles":["Memoh CLI"]},"41":{"title":"Configuration","titles":["Memoh CLI"]},"42":{"title":"Commands","titles":["Memoh CLI"]},"43":{"title":"Provider Commands","titles":[]},"44":{"title":"provider list","titles":["Provider Commands"]},"45":{"title":"provider create","titles":["Provider Commands"]},"46":{"title":"provider delete","titles":["Provider Commands"]},"47":{"title":"Schedule Commands","titles":[]},"48":{"title":"schedule list","titles":["Schedule Commands"]},"49":{"title":"schedule get","titles":["Schedule Commands"]},"50":{"title":"schedule create","titles":["Schedule Commands"]},"51":{"title":"schedule update","titles":["Schedule Commands"]},"52":{"title":"schedule toggle","titles":["Schedule Commands"]},"53":{"title":"schedule delete","titles":["Schedule Commands"]},"54":{"title":"Container","titles":[]},"55":{"title":"What Isolation Gives You","titles":["Container"]},"56":{"title":"Why It Matters","titles":["Container"]},"57":{"title":"Web UI Path","titles":["Container"]},"58":{"title":"Channel","titles":[]},"59":{"title":"What a Channel Configuration Defines","titles":["Channel"]},"60":{"title":"Why It Matters","titles":["Channel"]},"61":{"title":"Web UI Path","titles":["Channel"]},"62":{"title":"Bot","titles":[]},"63":{"title":"Key Settings","titles":["Bot"]},"64":{"title":"Why It Matters","titles":["Bot"]},"65":{"title":"Web UI Path","titles":["Bot"]},"66":{"title":"Concepts Overview","titles":[]},"67":{"title":"Concept Map","titles":["Concepts Overview"]},"68":{"title":"Recommended Reading Order","titles":["Concepts Overview"]},"69":{"title":"Conversation and History","titles":[]},"70":{"title":"What This Includes","titles":["Conversation and History"]},"71":{"title":"Why It Matters","titles":["Conversation and History"]},"72":{"title":"Web UI Path","titles":["Conversation and History"]},"73":{"title":"MCP","titles":[]},"74":{"title":"What MCP Adds","titles":["MCP"]},"75":{"title":"Why It Matters","titles":["MCP"]},"76":{"title":"Web UI Path","titles":["MCP"]},"77":{"title":"Memory","titles":[]},"78":{"title":"How It Works","titles":["Memory"]},"79":{"title":"Why It Matters","titles":["Memory"]},"80":{"title":"Web UI Path","titles":["Memory"]},"81":{"title":"Provider and Model","titles":[]},"82":{"title":"Client Types","titles":["Provider and Model"]},"83":{"title":"Typical Setup","titles":["Provider and Model"]},"84":{"title":"Model Assignment to Bot","titles":["Provider and Model"]},"85":{"title":"Web UI Path","titles":["Provider and Model"]},"86":{"title":"Schedule","titles":[]},"87":{"title":"Core Fields","titles":["Schedule"]},"88":{"title":"Why It Matters","titles":["Schedule"]},"89":{"title":"Web UI Path","titles":["Schedule"]},"90":{"title":"Skills","titles":[]},"91":{"title":"Typical Skill Content","titles":["Skills"]},"92":{"title":"Why It Matters","titles":["Skills"]},"93":{"title":"Web UI Path","titles":["Skills"]},"94":{"title":"Subagents","titles":[]},"95":{"title":"Core Idea","titles":["Subagents"]},"96":{"title":"Why It Matters","titles":["Subagents"]},"97":{"title":"Web UI Path","titles":["Subagents"]},"98":{"title":"About Memoh","titles":[]},"99":{"title":"What is Memoh?","titles":["About Memoh"]},"100":{"title":"Key Features","titles":["About Memoh"]},"101":{"title":"Multi-Bot Management","titles":["About Memoh","Key Features"]},"102":{"title":"Containerized Isolation","titles":["About Memoh","Key Features"]},"103":{"title":"Memory Engineering","titles":["About Memoh","Key Features"]},"104":{"title":"Multi-Platform Support","titles":["About Memoh","Key Features"]},"105":{"title":"Agent Capabilities","titles":["About Memoh","Key Features"]},"106":{"title":"Multi-LLM Provider Support","titles":["About Memoh","Key Features"]},"107":{"title":"MCP Protocol Support","titles":["About Memoh","Key Features"]},"108":{"title":"Scheduled Tasks","titles":["About Memoh","Key Features"]},"109":{"title":"Graphical Configuration","titles":["About Memoh","Key Features"]},"110":{"title":"CLI Tool","titles":["About Memoh","Key Features"]},"111":{"title":"Installation","titles":["About Memoh"]},"112":{"title":"Create Bot","titles":[]},"113":{"title":"Prerequisites","titles":["Create Bot"]},"114":{"title":"Step 1: Open the Bot Page","titles":["Create Bot"]},"115":{"title":"Step 2: create a Bot","titles":["Create Bot"]},"116":{"title":"Step 3: Bot Configuration","titles":["Create Bot"]},"117":{"title":"Step 4: Check Bot","titles":["Create Bot"]},"118":{"title":"Next Steps","titles":["Create Bot"]},"119":{"title":"Configure Telegram Channel","titles":[]},"120":{"title":"Prerequisites","titles":["Configure Telegram Channel"]},"121":{"title":"Step 1: Create a Telegram Bot","titles":["Configure Telegram Channel"]},"122":{"title":"Step 2: Open the Bot Platforms Page","titles":["Configure Telegram Channel"]},"123":{"title":"Step 3: Add Telegram Channel","titles":["Configure Telegram Channel"]},"124":{"title":"Step 4: Bind Your Telegram Account","titles":["Configure Telegram Channel"]},"125":{"title":"Step 6: Test the Connection","titles":["Configure Telegram Channel"]},"126":{"title":"Next Steps","titles":["Configure Telegram Channel"]},"127":{"title":"Configure Provider and Model","titles":[]},"128":{"title":"Prerequisites","titles":["Configure Provider and Model"]},"129":{"title":"Step 1: Open the Models Page","titles":["Configure Provider and Model"]},"130":{"title":"Step 2: Add a Provider","titles":["Configure Provider and Model"]},"131":{"title":"Step 3: Add Models","titles":["Configure Provider and Model"]},"132":{"title":"Step 4: Edit or Delete","titles":["Configure Provider and Model"]},"133":{"title":"Next Steps","titles":["Configure Provider and Model"]},"134":{"title":"Memoh Documentation","titles":[]},"135":{"title":"Documentation","titles":["Memoh Documentation"]},"136":{"title":"config.toml Reference","titles":[]},"137":{"title":"Full Example","titles":["config.toml Reference"]},"138":{"title":"Section Reference","titles":["config.toml Reference"]},"139":{"title":"[log]","titles":["config.toml Reference","Section Reference"]},"140":{"title":"[server]","titles":["config.toml Reference","Section Reference"]},"141":{"title":"[admin]","titles":["config.toml Reference","Section Reference"]},"142":{"title":"[auth]","titles":["config.toml Reference","Section Reference"]},"143":{"title":"[containerd]","titles":["config.toml Reference","Section Reference"]},"144":{"title":"[mcp]","titles":["config.toml Reference","Section Reference"]},"145":{"title":"[postgres]","titles":["config.toml Reference","Section Reference"]},"146":{"title":"[qdrant]","titles":["config.toml Reference","Section Reference"]},"147":{"title":"[agent_gateway]","titles":["config.toml Reference","Section Reference"]},"148":{"title":"[web]","titles":["config.toml Reference","Section Reference"]},"149":{"title":"[brave]","titles":["config.toml Reference","Section Reference"]},"150":{"title":"Docker Installation","titles":[]},"151":{"title":"Prerequisites","titles":["Docker Installation"]},"152":{"title":"One-Click Install","titles":["Docker Installation"]},"153":{"title":"Manual Install","titles":["Docker Installation"]},"154":{"title":"Access Points","titles":["Docker Installation"]},"155":{"title":"Custom Configuration","titles":["Docker Installation"]},"156":{"title":"Common Commands","titles":["Docker Installation"]},"157":{"title":"Production Checklist","titles":["Docker Installation"]},"158":{"title":"Troubleshooting","titles":["Docker Installation"]},"159":{"title":"Security Warnings","titles":["Docker Installation"]},"160":{"title":"Troubleshooting","titles":[]},"161":{"title":"MCP Container: no running task found: task mcp-xxx not found","titles":["Troubleshooting"]},"162":{"title":"Symptom","titles":["Troubleshooting","MCP Container: no running task found: task mcp-xxx not found"]},"163":{"title":"Cause","titles":["Troubleshooting","MCP Container: no running task found: task mcp-xxx not found"]},"164":{"title":"Solution","titles":["Troubleshooting","MCP Container: no running task found: task mcp-xxx not found"]},"165":{"title":"MCP Container: Image update not taking effect after rebuild","titles":["Troubleshooting"]},"166":{"title":"Symptom","titles":["Troubleshooting","MCP Container: Image update not taking effect after rebuild"]},"167":{"title":"Cause","titles":["Troubleshooting","MCP Container: Image update not taking effect after rebuild"]},"168":{"title":"Solution","titles":["Troubleshooting","MCP Container: Image update not taking effect after rebuild"]}},"dirtCount":0,"index":[["$path",{"2":{"166":1}}],["xxx",{"0":{"161":1},"1":{"162":1,"163":1,"164":1},"2":{"162":1,"163":1}}],["x26",{"2":{"158":2}}],["x3c",{"2":{"32":1,"33":1,"38":1,"46":1,"48":1,"49":2,"50":1,"51":2,"52":2,"53":2,"164":1}}],["|",{"2":{"152":2}}],["7",{"2":{"142":1}}],["5432",{"2":{"137":1,"145":1}}],["5",{"2":{"125":1}}],["6334",{"2":{"137":1,"146":1}}],["6",{"0":{"125":1}}],["8081",{"2":{"137":1,"147":1,"154":1}}],["8082",{"2":{"120":1,"128":1,"137":1,"148":1,"154":1}}],["8080",{"2":{"29":1,"30":2,"40":1,"137":1,"140":3,"154":1}}],["qq",{"2":{"115":1}}],["qdrant",{"0":{"146":1},"2":{"103":1,"111":1,"137":1,"146":2,"150":1,"157":1}}],["quot",{"2":{"139":4,"140":2,"141":2,"142":6,"143":4,"144":6,"145":8,"146":6,"147":4,"148":2,"149":4}}],["quality",{"2":{"84":1}}],["quarter",{"2":{"1":1}}],["quit",{"2":{"19":1,"32":1}}],["quietly",{"2":{"2":1}}],["questions",{"2":{"1":2}}],["9am",{"2":{"50":1}}],["9",{"2":{"50":1}}],["32",{"2":{"137":1,"142":1,"155":1}}],["3",{"0":{"116":1,"123":1,"131":1},"2":{"37":2,"131":2}}],["10",{"2":{"137":1,"146":1}}],["100",{"2":{"30":1}}],["123456789",{"2":{"121":1,"123":1}}],["127",{"2":{"29":1,"30":1,"40":1,"137":4,"145":1,"146":1,"147":1,"148":1}}],["11434",{"2":{"45":1,"130":2}}],["1536",{"2":{"37":1,"131":1}}],["168h",{"2":{"137":1,"142":1}}],["168",{"2":{"30":1}}],["192",{"2":{"30":1}}],["1",{"0":{"114":1,"121":1,"129":1},"2":{"29":1,"30":2,"40":1,"137":4,"145":1,"146":1,"147":1,"148":1,"154":1}}],["0",{"2":{"29":2,"30":2,"40":2,"50":1,"137":8,"145":2,"146":2,"147":2,"148":2}}],["=",{"2":{"29":2,"137":29,"162":2,"164":1}}],["4",{"0":{"117":1,"124":1,"132":1},"2":{"20":1,"37":2,"38":1,"131":2}}],["~",{"2":{"11":1,"28":1,"41":2,"152":2}}],["+",{"2":{"7":1}}],["js",{"2":{"166":1,"168":1}}],["json",{"2":{"11":1,"41":1,"139":1}}],["jwt",{"2":{"11":1,"137":2,"142":4,"152":2,"155":1}}],["jobs",{"2":{"7":1}}],["just",{"2":{"2":1}}],["2",{"0":{"115":1,"122":1,"130":1},"2":{"131":2,"154":1}}],["24h",{"2":{"142":2}}],["24",{"2":{"6":1,"103":1}}],["2026",{"2":{"1":1,"9":1}}],["volume",{"2":{"163":1,"167":1}}],["v2",{"2":{"151":1}}],["v1",{"2":{"45":1,"130":4,"137":1,"149":1}}],["visible",{"2":{"93":1}}],["via",{"2":{"30":1,"39":1,"99":1,"103":1,"106":1,"107":1,"119":1,"133":1,"134":1,"136":1,"150":1,"157":1}}],["view",{"2":{"28":1,"41":1,"156":1,"158":2}}],["validate",{"2":{"158":1}}],["value",{"2":{"1":1}}],["various",{"2":{"6":1}}],["verify",{"2":{"145":2,"168":1}}],["verification",{"2":{"25":2}}],["version",{"0":{"34":1},"2":{"34":2,"42":2}}],["versioned",{"2":{"5":1}}],["vector",{"2":{"5":1,"78":1,"103":1,"146":1}}],["ui",{"0":{"57":1,"61":1,"65":1,"72":1,"76":1,"80":1,"85":1,"89":1,"93":1,"97":1},"2":{"33":1,"42":1,"64":1,"89":2,"109":1,"120":1,"122":1,"124":1,"127":1,"128":1,"148":2,"150":1,"154":1}}],["using",{"2":{"108":1}}],["usually",{"2":{"83":1}}],["usage",{"2":{"20":1}}],["uses",{"2":{"136":1,"153":1,"163":1,"168":1}}],["used",{"2":{"63":1,"153":1}}],["use",{"2":{"6":1,"7":1,"28":1,"32":1,"40":1,"41":1,"66":1,"81":1,"130":1,"132":1,"140":1,"152":1,"155":1,"159":2,"162":1,"163":1}}],["username",{"2":{"11":2,"13":1,"121":1,"137":1,"141":2}}],["users",{"2":{"5":1,"59":1,"60":1,"70":1,"119":1,"163":2}}],["user",{"2":{"2":1,"7":1,"13":2,"15":2,"21":1,"26":1,"27":4,"42":2,"115":1,"137":1,"145":2,"153":1,"156":1}}],["url",{"2":{"16":2,"17":2,"45":4,"115":1,"130":4,"132":1,"137":2,"146":2,"149":2,"154":1}}],["updating",{"2":{"166":1}}],["update",{"0":{"17":1,"51":1,"165":1},"1":{"166":1,"167":1,"168":1},"2":{"17":2,"28":1,"30":1,"42":3,"51":2,"164":1}}],["up",{"2":{"6":1,"101":1,"109":1,"126":1,"152":1,"153":1,"155":1,"156":2,"158":1,"164":1}}],["upgradable",{"2":{"5":1}}],["unified",{"2":{"74":1,"104":1}}],["units",{"2":{"95":1}}],["unit",{"2":{"67":1}}],["unlimited",{"2":{"50":1}}],["uncomfortable",{"2":{"4":1}}],["understand",{"2":{"66":1}}],["under",{"2":{"3":1,"81":1,"131":1}}],["rm",{"2":{"164":1,"168":1}}],["rpc",{"2":{"162":1}}],["right",{"2":{"129":1,"131":1,"132":1}}],["rich",{"2":{"105":1}}],["rule",{"2":{"86":1}}],["runc",{"2":{"163":1}}],["running",{"0":{"161":1},"1":{"162":1,"163":1,"164":1},"2":{"32":1,"39":1,"40":1,"111":1,"120":1,"128":1,"152":1,"155":1,"162":1}}],["runs",{"2":{"6":1,"54":1,"86":1,"102":1,"134":1,"144":1,"150":1,"159":1}}],["runtime",{"2":{"5":1,"55":1,"62":1,"67":1,"93":1}}],["run",{"2":{"4":1,"5":1,"6":1,"8":1,"40":1,"42":1,"50":1,"56":1,"87":1,"108":1,"134":1,"137":1,"143":1,"150":1,"152":1,"155":1,"159":1,"164":1}}],["root",{"2":{"137":1,"144":1,"153":1,"155":1,"163":2,"164":2}}],["routing",{"2":{"59":1}}],["router",{"2":{"2":3,"5":2}}],["role",{"2":{"13":1,"96":1}}],["raw",{"2":{"152":2}}],["rand",{"2":{"137":1,"142":1,"155":1}}],["range",{"2":{"106":1}}],["raise",{"2":{"4":1}}],["ram",{"2":{"2":1}}],["rag",{"2":{"2":1,"3":1}}],["rebuilt",{"2":{"167":1}}],["rebuilding",{"2":{"166":1}}],["rebuild",{"0":{"165":1},"1":{"166":1,"167":1,"168":1},"2":{"156":1,"158":1}}],["regular",{"2":{"157":1}}],["request",{"2":{"146":1,"163":1}}],["requests",{"2":{"95":1}}],["requires",{"2":{"125":1,"152":1}}],["require",{"2":{"42":1,"47":1,"145":1}}],["required",{"2":{"6":1,"37":1,"109":1,"131":1,"142":1,"153":1}}],["reliable",{"2":{"95":1}}],["related",{"2":{"93":1}}],["relevant",{"2":{"78":1}}],["reduce",{"2":{"92":1}}],["reference",{"0":{"136":1,"138":1},"1":{"137":1,"138":1,"139":2,"140":2,"141":2,"142":2,"143":2,"144":2,"145":2,"146":2,"147":2,"148":2,"149":2},"2":{"84":1,"111":1,"135":1,"153":1,"155":2}}],["recreate",{"2":{"168":1}}],["recurring",{"2":{"88":1}}],["recall",{"2":{"78":1}}],["recommended",{"0":{"68":1},"2":{"111":1,"135":1,"150":1,"155":1}}],["recent",{"2":{"63":1}}],["reusable",{"2":{"67":1,"90":1}}],["resource",{"2":{"157":1}}],["resources",{"2":{"64":1}}],["restrict",{"2":{"157":1}}],["restarts",{"2":{"167":1}}],["restarting",{"2":{"166":1}}],["restart",{"2":{"156":1,"164":2,"168":2}}],["res",{"2":{"137":1,"149":1}}],["respond",{"2":{"125":1}}],["responsibilities",{"2":{"96":1}}],["response",{"2":{"71":1}}],["responses",{"2":{"32":1,"37":2,"82":2,"106":1,"131":2}}],["results",{"2":{"95":1}}],["repository",{"2":{"152":1,"153":1}}],["replies",{"2":{"104":1}}],["reply",{"2":{"59":1}}],["reproducible",{"2":{"4":1}}],["reactions",{"2":{"105":1}}],["reactive",{"2":{"88":1}}],["reachable",{"2":{"40":1}}],["reads",{"2":{"147":1}}],["read",{"2":{"102":1,"105":1}}],["ready",{"2":{"83":1}}],["reading",{"0":{"68":1}}],["realized",{"2":{"2":1}}],["reality",{"2":{"1":1}}],["real",{"2":{"1":2,"2":4,"7":1,"32":1,"105":1}}],["retrieved",{"2":{"6":1,"67":1,"78":1}}],["retrieval",{"2":{"5":1,"78":2,"83":1,"103":1}}],["remove",{"2":{"168":1}}],["remote",{"2":{"74":1}}],["reminders",{"2":{"88":1}}],["remains",{"2":{"5":1}}],["remember",{"2":{"2":1,"7":1}}],["re",{"2":{"4":1,"168":1}}],["gateway",{"0":{"147":1},"2":{"137":1,"147":2,"150":1,"154":1}}],["guide",{"2":{"90":1,"119":1,"127":1}}],["global",{"2":{"40":2}}],["git",{"2":{"40":1,"151":1,"153":1}}],["githubusercontent",{"2":{"152":2}}],["github",{"2":{"40":1,"153":1}}],["gives",{"0":{"55":1}}],["give",{"2":{"2":1,"7":1}}],["google",{"2":{"37":1,"82":2,"106":1,"131":1}}],["got",{"2":{"2":1}}],["g",{"2":{"22":1,"25":1,"27":1,"30":1,"37":1,"50":1,"115":3,"118":1,"121":3,"123":1,"130":2,"131":2,"140":1,"142":1,"157":1,"162":1,"163":1,"166":1}}],["gpt",{"2":{"20":1,"37":2,"38":1,"131":2}}],["gt",{"2":{"15":1,"16":3,"17":2,"20":2,"24":1,"25":5,"26":1,"27":3,"30":2,"32":2,"33":1,"37":6,"44":1,"45":3,"47":1,"50":5,"51":5,"57":2,"61":2,"65":2,"72":3,"76":2,"80":2,"85":6,"93":2,"97":2}}],["group",{"2":{"115":2,"125":1,"153":1,"156":1}}],["groups",{"2":{"6":1,"101":1}}],["gravatar",{"2":{"115":1}}],["graphical",{"0":{"109":1},"2":{"6":1}}],["grade",{"2":{"3":1}}],["generate",{"2":{"124":1,"142":1,"152":1,"155":1}}],["generated",{"2":{"2":1,"152":1}}],["generation",{"2":{"83":1}}],["generative",{"2":{"37":1,"82":2,"106":1,"131":1}}],["getting",{"2":{"135":1}}],["gets",{"2":{"7":1}}],["get",{"0":{"24":1,"26":1,"49":1},"2":{"1":1,"24":2,"26":2,"42":2,"49":2,"111":1,"124":1,"149":1}}],["yml",{"2":{"157":1,"164":1}}],["y",{"2":{"152":1}}],["yours",{"2":{"8":1}}],["your",{"0":{"124":1},"2":{"2":1,"3":1,"6":1,"32":1,"40":1,"99":1,"109":1,"116":1,"117":1,"118":1,"119":2,"121":2,"124":1,"125":2,"126":2,"130":1,"134":1,"137":3,"150":1,"153":1,"155":2,"156":1,"164":2}}],["you",{"0":{"55":1},"2":{"2":5,"5":1,"8":1,"32":1,"66":1,"75":1,"88":1,"99":1,"119":1,"120":2,"121":1,"122":1,"124":1,"127":2,"128":1,"130":1,"131":1,"132":1,"133":2,"136":1,"150":1,"159":1,"163":2,"164":1}}],["year",{"2":{"1":1,"2":1}}],["knowledge",{"2":{"3":1,"67":1,"77":1}}],["keyword",{"2":{"78":1,"103":1}}],["key",{"0":{"63":1,"100":1},"1":{"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"108":1,"109":1,"110":1},"2":{"25":3,"45":3,"81":1,"103":1,"130":4,"132":1,"135":1,"137":2,"146":2,"149":3}}],["keeping",{"2":{"64":1}}],["keep",{"2":{"2":1,"8":2,"92":1,"103":1,"164":1}}],["kept",{"2":{"1":1}}],["kind",{"2":{"2":1}}],["d",{"2":{"152":1,"153":1,"155":1,"156":2,"158":1}}],["duplication",{"2":{"92":1}}],["durable",{"2":{"4":1,"5":1,"8":1}}],["data",{"2":{"137":2,"144":4,"152":3,"157":1,"163":5,"164":3,"167":1}}],["database",{"2":{"6":1,"103":1,"137":1,"145":4,"155":1}}],["daily",{"2":{"50":1,"101":1}}],["days",{"2":{"142":1}}],["day",{"2":{"4":1}}],["db",{"2":{"5":1}}],["down",{"2":{"156":1}}],["do",{"2":{"150":1}}],["documentation",{"0":{"134":1,"135":1},"1":{"135":1},"2":{"110":1}}],["dockerfile",{"2":{"166":1}}],["docker",{"0":{"150":1},"1":{"151":1,"152":1,"153":1,"154":1,"155":1,"156":1,"157":1,"158":1,"159":1},"2":{"40":1,"111":2,"120":1,"128":1,"135":1,"136":2,"137":1,"140":1,"144":2,"147":1,"150":2,"151":2,"152":6,"153":5,"155":5,"156":5,"157":1,"158":4,"163":1,"164":5,"167":2,"168":1}}],["don",{"2":{"2":2,"4":2}}],["doing",{"2":{"2":1}}],["doesn",{"2":{"2":1}}],["does",{"2":{"1":1,"163":1}}],["debug",{"2":{"139":1}}],["debugging",{"2":{"70":1}}],["detail",{"2":{"168":1}}],["details",{"2":{"129":1,"155":1}}],["detection",{"2":{"103":1}}],["determines",{"2":{"81":1,"82":1}}],["developers",{"2":{"110":1}}],["device",{"2":{"2":1,"5":1,"7":1}}],["deeply",{"2":{"103":1}}],["dedicated",{"2":{"89":1}}],["designed",{"2":{"66":1,"110":1}}],["design",{"2":{"66":1}}],["desc",{"2":{"50":1,"51":1,"162":1}}],["descriptions",{"2":{"155":1}}],["description",{"2":{"15":1,"16":1,"17":1,"20":1,"24":1,"25":1,"26":1,"27":1,"30":1,"32":1,"33":1,"37":1,"42":1,"44":1,"45":1,"50":4,"51":3,"82":1,"115":1,"123":1,"130":1,"131":1,"139":1,"140":1,"141":1,"142":1,"143":1,"144":1,"145":1,"146":1,"147":1,"148":1,"149":1}}],["decomposition",{"2":{"95":1}}],["decouple",{"2":{"60":1}}],["decide",{"2":{"2":1}}],["delegate",{"2":{"94":1,"105":1}}],["delegated",{"2":{"67":1}}],["delete",{"0":{"18":1,"38":1,"46":1,"53":1,"132":1},"2":{"18":2,"38":3,"42":4,"46":3,"53":2,"55":1,"132":2,"162":1,"168":1}}],["delivery",{"2":{"59":1}}],["defined",{"2":{"86":1}}],["defines",{"0":{"59":1}}],["defaults",{"2":{"152":2}}],["default",{"0":{"32":1},"2":{"6":1,"7":1,"30":1,"33":1,"40":1,"42":1,"63":1,"103":1,"136":1,"137":1,"139":1,"140":1,"141":1,"142":1,"143":2,"144":1,"145":1,"146":1,"147":1,"148":1,"149":1,"153":1,"154":1,"157":1,"159":1,"164":1,"167":1,"168":2}}],["dependencies",{"2":{"111":1}}],["dependable",{"2":{"4":1}}],["deployable",{"2":{"5":1}}],["density",{"2":{"2":2}}],["directory",{"2":{"136":1,"152":2,"163":1}}],["direct",{"2":{"125":1}}],["dialog",{"2":{"83":1,"115":1,"123":1,"124":1,"130":1,"131":1}}],["different",{"2":{"66":1,"131":1}}],["differs",{"2":{"7":1}}],["dimensions",{"2":{"37":4,"131":1}}],["discord",{"2":{"115":1,"118":1}}],["discovery",{"2":{"74":1}}],["disable",{"2":{"51":1,"52":1,"137":1,"145":2,"149":1}}],["disabled",{"2":{"50":2,"51":1}}],["disappears",{"2":{"2":1}}],["display",{"2":{"13":1,"16":1,"17":1,"37":1,"115":1,"121":1,"130":1,"131":2,"141":1}}],["did",{"2":{"2":1}}],["npx",{"2":{"166":1}}],["n",{"2":{"37":1,"50":1,"51":1,"164":1,"167":1,"168":2}}],["nano",{"2":{"155":1}}],["narrower",{"2":{"95":1}}],["name==$",{"2":{"167":1}}],["named",{"2":{"163":1}}],["namespace",{"2":{"137":1,"143":2}}],["name>",{"2":{"46":1}}],["name",{"2":{"13":1,"16":4,"17":3,"37":4,"44":3,"45":4,"46":1,"50":4,"51":3,"115":2,"121":2,"130":4,"131":2,"132":1,"145":1,"146":1,"147":1}}],["natural",{"2":{"1":1}}],["never",{"2":{"167":1}}],["nerdctl",{"2":{"150":1}}],["necessary",{"2":{"124":1,"157":1}}],["next",{"0":{"118":1,"126":1,"133":1},"2":{"121":1}}],["network",{"2":{"6":1,"7":1,"99":1,"102":1,"134":1}}],["needs",{"2":{"83":1}}],["needed",{"2":{"78":1}}],["need",{"2":{"5":1,"121":1,"127":1,"131":1,"150":1}}],["newbot",{"2":{"121":1}}],["new",{"2":{"2":1,"16":1,"37":1,"45":1,"50":1,"115":1,"130":1,"167":1,"168":2}}],["nomic",{"2":{"131":1}}],["none",{"2":{"129":1}}],["no",{"0":{"161":1},"1":{"162":1,"163":1,"164":1},"2":{"6":1,"32":1,"89":1,"109":1,"111":1,"152":1,"153":1,"158":1,"162":1,"163":1}}],["node",{"2":{"2":1,"5":1,"166":1,"168":1}}],["note",{"2":{"164":1}}],["notfound",{"2":{"162":1}}],["noticed",{"2":{"2":1}}],["not",{"0":{"161":1,"165":1},"1":{"162":1,"163":1,"164":1,"166":1,"167":1,"168":1},"2":{"1":1,"2":3,"5":1,"30":1,"88":1,"89":1,"150":1,"153":1,"156":1,"162":3,"163":1,"166":1}}],["night",{"2":{"2":1}}],["io",{"2":{"137":1,"144":1,"168":1}}],["image",{"0":{"165":1},"1":{"166":1,"167":1,"168":1},"2":{"137":1,"144":3,"166":1,"167":7,"168":3}}],["images",{"2":{"131":1,"154":1,"167":1,"168":2}}],["imported",{"2":{"167":1,"168":1}}],["import",{"2":{"167":2,"168":1}}],["important",{"2":{"78":1}}],["improves",{"2":{"96":1}}],["impact",{"2":{"8":1}}],["icon",{"2":{"115":1,"130":1}}],["id=xxx",{"2":{"162":1}}],["identity",{"2":{"124":1}}],["idea",{"0":{"95":1}}],["ids",{"2":{"63":1,"84":1}}],["id>",{"2":{"32":1,"33":1,"38":1,"48":1,"49":2,"50":1,"51":2,"52":2,"53":2,"164":1}}],["id",{"2":{"13":1,"15":2,"17":2,"18":1,"19":1,"20":4,"24":1,"25":4,"27":8,"32":3,"33":2,"37":6,"38":1,"47":1,"49":1,"84":3,"131":1}}],["if",{"2":{"2":1,"8":1,"13":1,"23":1,"30":1,"124":1,"129":1,"131":1,"153":1,"156":1,"164":2,"167":1,"168":1}}],["initialize",{"2":{"154":1}}],["inside",{"2":{"105":1,"150":1,"163":2}}],["inspired",{"2":{"103":1}}],["instead",{"2":{"164":1}}],["instructions",{"2":{"67":1,"90":1}}],["install",{"0":{"152":1,"153":1},"2":{"40":2,"150":1,"152":4}}],["installation",{"0":{"40":1,"111":1,"150":1},"1":{"151":1,"152":1,"153":1,"154":1,"155":1,"156":1,"157":1,"158":1,"159":1},"2":{"40":1,"120":1,"128":1,"135":2,"136":1}}],["instinct",{"2":{"2":1}}],["independent",{"2":{"99":1,"107":1}}],["indexed",{"2":{"78":1}}],["indexing",{"2":{"5":1,"7":1,"83":1}}],["index",{"2":{"5":1}}],["input",{"2":{"91":1}}],["including",{"2":{"81":1,"106":1}}],["includes",{"0":{"70":1},"2":{"111":1,"150":1}}],["include",{"2":{"58":1}}],["invocation",{"2":{"74":1}}],["invoked",{"2":{"33":1}}],["inactive",{"2":{"16":2,"17":2}}],["in",{"2":{"2":1,"4":1,"6":3,"7":1,"8":1,"11":2,"13":1,"28":1,"32":1,"41":2,"42":1,"50":1,"54":1,"56":1,"62":1,"64":1,"67":1,"81":1,"84":1,"89":2,"101":1,"102":1,"104":1,"105":1,"114":1,"115":2,"116":1,"117":1,"120":1,"121":1,"122":2,"123":2,"124":1,"125":1,"128":1,"129":1,"130":3,"131":1,"132":2,"133":2,"134":1,"136":1,"137":1,"140":1,"141":1,"142":1,"144":1,"146":1,"147":1,"153":3,"156":1,"159":2,"163":1,"164":2,"166":1,"167":2}}],["info",{"0":{"23":1},"2":{"13":1,"17":1,"23":1,"137":1,"139":2}}],["information",{"2":{"2":1,"105":1}}],["inference",{"2":{"5":1,"7":1,"8":1}}],["infrastructure",{"2":{"2":1,"4":1,"7":1,"8":1}}],["inflate",{"2":{"2":1}}],["int",{"2":{"145":1,"146":1,"147":1,"148":1}}],["integration",{"2":{"67":1,"74":1,"105":1}}],["interactions",{"2":{"69":1}}],["interaction",{"2":{"63":1}}],["interactively",{"2":{"17":1}}],["interactive",{"0":{"32":1},"2":{"11":1,"19":1,"30":1,"32":1,"37":1,"42":1,"45":1}}],["interfering",{"2":{"55":1,"102":1}}],["interfaces",{"2":{"140":1}}],["interface",{"2":{"6":1,"104":1}}],["internet",{"2":{"2":1}}],["intelligence",{"2":{"2":1}}],["into",{"2":{"1":1,"2":1,"63":1,"95":2}}],["introduction",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1},"2":{"9":1}}],["iterate",{"2":{"7":1}}],["its",{"2":{"6":1,"28":1,"39":1,"54":1,"62":1,"81":1,"99":2,"102":1,"107":1,"125":1,"134":1}}],["it",{"0":{"56":1,"60":1,"64":1,"71":1,"75":1,"78":1,"79":1,"88":1,"92":1,"96":1},"2":{"2":9,"7":2,"8":1,"28":1,"39":1,"99":1,"121":1,"136":1,"155":1,"163":1,"164":1,"168":2}}],["i",{"2":{"2":7}}],["isolate",{"2":{"64":1}}],["isolated",{"2":{"5":1,"6":1,"7":1,"54":1,"67":1,"102":1,"134":1}}],["isolation",{"0":{"55":1,"102":1},"2":{"56":1}}],["is",{"0":{"99":1},"2":{"1":1,"2":3,"3":1,"5":2,"6":2,"8":2,"23":1,"39":1,"40":3,"56":1,"62":1,"63":1,"66":1,"67":2,"77":1,"81":2,"86":1,"87":1,"89":2,"93":1,"99":1,"120":1,"128":1,"134":1,"135":1,"147":1,"150":1,"153":4,"155":1,"156":1,"163":1,"167":2}}],["http",{"2":{"45":1,"107":1,"120":1,"128":1,"130":2,"137":1,"140":1,"146":2,"154":3}}],["https",{"2":{"40":1,"115":1,"130":2,"137":1,"149":1,"152":2,"153":1,"157":1,"159":1}}],["helps",{"2":{"96":1}}],["helper",{"2":{"94":1}}],["help",{"2":{"40":2,"92":1}}],["held",{"2":{"7":1}}],["hybrid",{"2":{"7":1}}],["hoc",{"2":{"71":1}}],["host",{"2":{"29":2,"30":6,"40":1,"41":1,"42":1,"111":1,"137":3,"140":1,"144":1,"145":2,"147":3,"148":2,"150":1,"155":1,"163":2}}],["hours",{"2":{"6":1,"103":1}}],["how",{"0":{"5":1,"78":1},"2":{"63":1,"66":2,"67":4,"82":1,"90":1}}],["home",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1},"2":{"2":2,"3":1,"7":1,"8":1}}],["history",{"0":{"69":1},"1":{"70":1,"71":1,"72":1},"2":{"3":1,"67":1,"68":1,"69":1,"71":1,"72":1}}],["hide",{"2":{"2":1}}],["humans",{"2":{"6":1,"101":1}}],["human",{"2":{"2":1}}],["have",{"2":{"7":1,"107":1,"120":2,"125":1,"128":1,"133":1}}],["having",{"2":{"6":1,"99":1}}],["has",{"2":{"2":1,"62":1,"82":1,"99":1,"124":1,"129":1}}],["half",{"2":{"2":1}}],["happening",{"2":{"2":1}}],["hardware",{"2":{"1":1,"2":1}}],["ls",{"2":{"168":1}}],["leave",{"2":{"149":1}}],["least",{"2":{"127":1,"131":1,"133":1}}],["lean",{"2":{"103":1}}],["left",{"2":{"114":1,"117":1,"122":1,"129":2,"130":2,"131":1}}],["level=error",{"2":{"162":1}}],["level=warn",{"2":{"162":1}}],["level",{"2":{"70":1,"137":1,"139":2}}],["less",{"2":{"8":1}}],["lt",{"2":{"15":1,"16":3,"17":2,"20":2,"24":1,"25":5,"26":1,"27":3,"30":2,"32":2,"33":1,"37":6,"44":1,"45":3,"47":1,"50":5,"51":5}}],["larger",{"2":{"168":1}}],["lark",{"2":{"6":1,"58":1,"99":1,"104":1,"118":1,"134":1}}],["language",{"2":{"63":2,"103":1}}],["last",{"2":{"6":1,"103":1}}],["layer",{"2":{"2":1,"3":1,"103":1}}],["latest",{"2":{"9":1,"137":1,"144":1,"168":1}}],["late",{"2":{"2":1}}],["latency",{"2":{"1":1,"84":1}}],["library",{"2":{"137":1,"144":1,"168":1}}],["limits",{"2":{"108":1,"157":2}}],["linux",{"2":{"156":1}}],["links",{"2":{"135":1}}],["linked",{"2":{"124":1}}],["link",{"2":{"40":1}}],["line",{"2":{"39":1,"104":1,"110":1,"135":1}}],["listen",{"2":{"140":1}}],["list",{"0":{"15":1,"22":1,"36":1,"44":1,"48":1},"2":{"15":2,"22":2,"36":2,"42":5,"44":4,"48":2,"129":1,"131":1,"132":1}}],["lighter",{"2":{"7":1}}],["lifecycle",{"2":{"55":1,"62":1}}],["life",{"2":{"2":1}}],["live",{"2":{"2":1}}],["like",{"2":{"2":1,"5":1,"6":1,"8":2,"82":1,"88":1,"99":1,"130":2,"166":1}}],["looks",{"2":{"136":1}}],["looked",{"2":{"2":1}}],["loads",{"2":{"103":1}}],["load",{"2":{"63":2}}],["loaded",{"2":{"6":1,"63":1}}],["logs",{"2":{"156":2,"158":4,"162":2}}],["logic",{"2":{"60":1}}],["login",{"0":{"11":1},"2":{"11":1,"42":2,"141":2,"154":1}}],["logged",{"2":{"13":1,"120":1,"128":1}}],["logout",{"0":{"12":1},"2":{"12":1,"42":1}}],["log",{"0":{"139":1},"2":{"11":1,"12":1,"42":2,"137":1,"139":2}}],["locally",{"2":{"164":1}}],["localhost",{"2":{"45":1,"120":1,"128":1,"130":2,"154":3}}],["local",{"2":{"3":1,"4":1,"5":1,"7":1,"8":1,"22":1,"130":3,"164":1}}],["low",{"2":{"2":1}}],["longer",{"2":{"2":1}}],["long",{"2":{"1":1,"4":1,"8":1,"67":1,"77":1,"79":1,"99":1,"126":1,"134":1}}],["llama3",{"2":{"131":2}}],["llm",{"0":{"106":1},"2":{"7":1,"42":1,"43":1,"67":1,"81":1,"82":1,"106":1,"127":1}}],["llms",{"2":{"2":1}}],["ll",{"2":{"2":1,"32":1}}],["python",{"2":{"166":1,"168":1}}],["ps",{"2":{"156":1}}],["plus",{"2":{"115":1,"130":1}}],["plugged",{"2":{"67":1}}],["placeholder",{"2":{"130":1}}],["platform",{"0":{"104":1},"2":{"26":1,"58":1,"59":2,"99":1,"118":1,"124":1}}],["platforms",{"0":{"122":1},"2":{"6":1,"60":1,"67":1,"104":1,"122":1}}],["playground",{"2":{"7":1}}],["plane",{"2":{"5":1}}],["plainly",{"2":{"2":1}}],["pnpm",{"2":{"40":4}}],["purpose",{"2":{"91":1}}],["public",{"2":{"16":1,"115":3,"125":1}}],["push",{"2":{"7":1}}],["persistent",{"2":{"167":1}}],["person",{"2":{"115":2,"125":1}}],["personal",{"2":{"1":1,"2":1,"16":1}}],["per",{"2":{"55":1,"64":1,"67":1,"74":1,"84":1}}],["permanently",{"2":{"8":1}}],["people",{"2":{"4":1}}],["phones",{"2":{"2":1}}],["point",{"2":{"155":1}}],["points",{"0":{"154":1}}],["postgres",{"0":{"145":1},"2":{"137":2,"145":1,"152":2,"155":2,"157":1}}],["postgresql",{"2":{"111":1,"145":2,"150":1}}],["post",{"2":{"71":1}}],["position",{"2":{"2":1}}],["powered",{"2":{"102":1}}],["powers",{"2":{"71":1}}],["powerful",{"2":{"2":1}}],["ports",{"2":{"157":1}}],["port",{"2":{"29":2,"30":6,"40":1,"41":1,"42":1,"137":3,"140":1,"145":2,"147":2,"148":2}}],["portable",{"2":{"2":1,"4":1}}],["polite",{"2":{"2":1}}],["primarily",{"2":{"93":1}}],["primary",{"2":{"62":1}}],["privileged",{"2":{"159":1}}],["privileges",{"2":{"2":1}}],["privately",{"2":{"6":1,"101":1}}],["private",{"2":{"4":1,"5":2}}],["privacy",{"2":{"1":1,"7":1}}],["prefix",{"2":{"156":1}}],["prefer",{"2":{"110":1}}],["preferred",{"2":{"63":1}}],["prerequisites",{"0":{"113":1,"120":1,"128":1,"151":1}}],["precision",{"2":{"78":1}}],["preserved",{"2":{"69":1}}],["press",{"2":{"19":1,"32":1}}],["prevents",{"2":{"55":1}}],["project",{"2":{"153":1,"155":1}}],["proactive",{"2":{"88":1}}],["protocol",{"0":{"107":1},"2":{"67":1,"73":1,"74":1,"81":1,"107":1,"131":1,"144":1}}],["process",{"2":{"55":1}}],["prompt",{"2":{"79":1,"92":1,"117":1,"125":1,"152":1}}],["prompted",{"2":{"32":1}}],["prompts",{"2":{"11":2,"16":1,"23":1,"30":2,"37":2,"45":2,"50":1,"63":1,"67":1,"121":1,"152":1}}],["provide",{"2":{"121":1}}],["provided",{"2":{"30":1}}],["provider=container",{"2":{"162":1}}],["providers",{"2":{"39":1,"42":1,"43":1,"44":1,"106":1,"109":1,"131":1,"135":1}}],["provider",{"0":{"43":1,"44":1,"45":1,"46":1,"81":1,"106":1,"127":1,"130":1},"1":{"44":1,"45":1,"46":1,"82":1,"83":1,"84":1,"85":1,"128":1,"129":1,"130":1,"131":1,"132":1,"133":1},"2":{"6":1,"36":1,"37":6,"42":1,"44":7,"45":5,"46":5,"67":1,"68":1,"81":3,"85":2,"113":1,"127":1,"129":3,"130":3,"131":2,"132":3,"135":1}}],["production",{"0":{"157":1},"2":{"83":1,"141":1,"155":1,"159":2}}],["product",{"2":{"8":1}}],["progress",{"2":{"2":2}}],["panel",{"2":{"130":1,"131":2,"132":1}}],["panels",{"2":{"129":1}}],["page",{"0":{"114":1,"122":1,"129":1},"2":{"89":1,"114":1,"116":1,"117":1,"122":2,"124":1,"129":2,"168":1}}],["pages",{"2":{"66":1}}],["path",{"0":{"57":1,"61":1,"65":1,"72":1,"76":1,"80":1,"85":1,"89":1,"93":1,"97":1},"2":{"137":1,"143":2,"144":1,"155":1,"163":2,"164":1}}],["pattern",{"2":{"50":4,"51":3,"87":1}}],["parallel",{"2":{"56":1}}],["parts",{"2":{"66":1}}],["part",{"2":{"2":1,"40":1}}],["packages",{"2":{"40":2}}],["passed",{"2":{"17":1}}],["passwords",{"2":{"157":2,"159":1}}],["password",{"2":{"11":2,"137":4,"141":2,"145":2,"152":2,"155":5}}],["past",{"2":{"1":1}}],["paired",{"2":{"3":1}}],["paid",{"2":{"2":1}}],["bm25",{"2":{"103":1}}],["bindings",{"2":{"62":1}}],["binding",{"2":{"26":1,"27":1,"42":1,"124":2,"125":1}}],["bind",{"0":{"26":1,"27":1,"124":1},"2":{"26":1,"27":1,"115":1,"124":3,"147":1,"148":1}}],["blogs",{"0":{"9":1},"2":{"9":1}}],["by",{"2":{"6":2,"7":1,"15":2,"38":1,"44":2,"46":1,"49":1,"63":1,"78":1,"89":1,"96":1,"102":1,"103":2,"136":1,"153":1}}],["bottom",{"2":{"130":1}}],["botfather",{"2":{"121":3,"123":1}}],["both",{"2":{"7":1}}],["bots",{"2":{"6":6,"14":1,"15":1,"39":2,"42":1,"47":1,"56":1,"57":1,"61":1,"65":1,"67":1,"70":1,"72":1,"73":1,"74":1,"76":1,"79":1,"80":1,"84":1,"85":1,"88":1,"93":1,"97":1,"99":1,"101":4,"102":1,"105":1,"109":1,"114":2,"115":1,"116":1,"122":2,"125":2,"127":1,"133":1,"134":1,"135":1,"163":1}}],["bot",{"0":{"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"62":1,"84":1,"101":1,"112":1,"114":1,"115":1,"116":1,"117":1,"121":1,"122":1},"1":{"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"63":1,"64":1,"65":1,"113":1,"114":1,"115":1,"116":1,"117":1,"118":1},"2":{"6":3,"7":1,"15":1,"16":4,"17":5,"18":2,"19":2,"20":4,"21":1,"24":2,"25":2,"32":6,"33":4,"42":4,"47":2,"48":3,"49":2,"50":3,"51":2,"52":2,"53":2,"54":1,"55":3,"57":1,"58":1,"59":1,"60":2,"61":1,"62":2,"63":1,"64":1,"65":1,"67":2,"68":1,"71":1,"72":1,"74":2,"76":1,"77":1,"80":1,"83":1,"84":1,"85":1,"86":1,"90":1,"93":1,"94":1,"95":1,"97":1,"99":1,"101":1,"102":1,"105":1,"107":1,"109":1,"110":1,"115":4,"116":1,"117":1,"118":1,"119":2,"120":2,"121":8,"122":1,"123":1,"124":1,"125":4,"126":2,"133":2,"134":1,"143":1,"144":2,"162":2,"164":1,"168":2}}],["boundaries",{"2":{"5":1,"7":1}}],["boundary",{"2":{"1":1}}],["brave",{"0":{"149":1},"2":{"105":1,"137":2,"149":5}}],["brief",{"2":{"4":1}}],["breaks",{"2":{"1":1}}],["basic",{"2":{"116":1}}],["bashdocker",{"2":{"156":1,"158":1,"164":2,"168":3}}],["bashsudo",{"2":{"155":1}}],["bashcp",{"2":{"155":1}}],["bashcurl",{"2":{"152":2}}],["bashcd",{"2":{"40":2}}],["bashgit",{"2":{"40":1,"153":1}}],["bashmemoh",{"2":{"11":1,"12":1,"13":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":2,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"29":1,"30":2,"32":1,"33":1,"34":1,"36":1,"37":2,"38":2,"44":2,"45":2,"46":2,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1}}],["base64",{"2":{"137":1,"142":1,"155":1}}],["based",{"2":{"47":1,"86":1}}],["base",{"2":{"2":1,"3":2,"45":3,"115":1,"130":4,"132":1,"137":2,"146":1,"149":2}}],["battery",{"2":{"2":1}}],["backups",{"2":{"157":2}}],["backend",{"2":{"89":1}}],["backends",{"2":{"75":1}}],["back",{"2":{"2":1,"13":1,"59":1,"95":1}}],["before",{"2":{"127":1,"159":1}}],["been",{"2":{"124":1}}],["beyond",{"2":{"79":1}}],["behavior",{"2":{"33":1,"64":1,"71":1,"92":1,"93":1}}],["behind",{"2":{"2":1,"66":1}}],["better",{"2":{"71":1,"78":1}}],["bet",{"2":{"8":1}}],["between",{"2":{"2":1,"70":1,"106":1}}],["belief",{"2":{"7":1}}],["be",{"2":{"6":1,"7":1,"17":1,"32":1,"168":1}}],["becomes",{"2":{"2":1,"4":1}}],["because",{"2":{"2":1}}],["being",{"2":{"2":1}}],["built",{"2":{"7":1,"8":1,"104":1,"105":1,"144":1,"153":1}}],["buildkit",{"2":{"150":1}}],["build",{"2":{"2":1,"7":1,"40":1,"101":1,"152":1,"154":1,"156":1,"158":1}}],["building",{"2":{"2":1}}],["buildable",{"2":{"1":1}}],["button",{"2":{"115":1,"123":1,"130":1}}],["but",{"2":{"1":2,"2":1,"4":1,"33":1,"81":1,"89":1,"163":1}}],["symptom",{"0":{"162":1,"166":1}}],["systems",{"2":{"74":1}}],["system",{"2":{"1":1,"77":1,"99":2,"105":1,"125":1,"134":2}}],["ssl",{"2":{"145":1,"157":1}}],["sslmode",{"2":{"137":1,"145":1}}],["sse",{"2":{"107":1}}],["snapshotter",{"2":{"137":1,"144":2}}],["skips",{"2":{"167":1}}],["skill",{"0":{"91":1},"2":{"105":1}}],["skills",{"0":{"90":1},"1":{"91":1,"92":1,"93":1},"2":{"6":1,"67":1,"68":1,"90":1,"92":1,"93":1,"105":2,"109":1,"126":1}}],["sk",{"2":{"130":1}}],["switch",{"2":{"106":1}}],["swap",{"2":{"75":1}}],["shif",{"2":{"167":1}}],["sh",{"2":{"152":4,"167":1}}],["should",{"2":{"124":1,"125":1,"168":1}}],["short",{"2":{"79":1}}],["shows",{"2":{"131":1}}],["show",{"2":{"13":1,"23":1,"29":1,"34":1,"42":3,"162":2}}],["share",{"2":{"7":1}}],["sharing",{"2":{"5":1,"7":1}}],["space",{"2":{"55":1}}],["split",{"2":{"7":1}}],["specialized",{"2":{"67":1,"94":1,"105":1}}],["specific",{"2":{"90":1,"164":1}}],["specified",{"2":{"6":1,"108":1}}],["specify",{"2":{"32":1,"47":1}}],["speaker",{"2":{"2":1}}],["scripts",{"2":{"152":2}}],["script",{"2":{"152":2,"167":1}}],["screen",{"2":{"2":1}}],["scalability",{"2":{"96":1}}],["scope",{"2":{"62":1,"91":1}}],["schema",{"2":{"23":1}}],["schedules",{"2":{"39":1,"42":1,"47":1,"48":1,"88":1,"126":1,"135":1}}],["schedule",{"0":{"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"86":1},"1":{"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"87":1,"88":1,"89":1},"2":{"6":1,"42":1,"47":1,"48":1,"49":2,"50":3,"51":3,"52":2,"53":2,"67":1,"68":1,"86":1,"87":1,"89":2}}],["scheduled",{"0":{"108":1},"2":{"6":1,"108":1}}],["significantly",{"2":{"168":1}}],["signing",{"2":{"142":1}}],["size",{"2":{"168":1}}],["since",{"2":{"163":1,"167":1}}],["silently",{"2":{"152":1}}],["silent",{"2":{"152":1}}],["sidebar",{"2":{"114":1,"117":1,"122":1,"129":1,"130":1,"133":1}}],["similarity",{"2":{"78":1}}],["simple",{"2":{"6":1}}],["sit",{"2":{"1":1,"2":1}}],["such",{"2":{"163":1}}],["successful",{"2":{"124":2}}],["sudo",{"2":{"152":2,"153":2,"156":1}}],["summaries",{"2":{"88":1}}],["subagent",{"2":{"90":1,"93":1,"96":1}}],["subagents",{"0":{"94":1},"1":{"95":1,"96":1,"97":1},"2":{"67":1,"68":1,"93":2,"94":1,"95":1,"97":1,"105":2}}],["subcommand",{"2":{"32":1}}],["sustainable",{"2":{"7":1}}],["supported",{"2":{"89":1}}],["support",{"0":{"104":1,"106":1,"107":1},"2":{"7":1,"104":2}}],["supports",{"2":{"6":1,"25":1,"27":1,"74":1,"95":1,"103":1,"107":1,"108":1,"131":1}}],["survives",{"2":{"167":1}}],["survive",{"2":{"1":1}}],["sending",{"2":{"125":1}}],["send",{"2":{"105":1,"121":1,"124":1,"125":2}}],["separate",{"2":{"55":2,"81":1,"96":1,"102":1,"164":1}}],["see",{"2":{"40":1,"110":1,"120":2,"128":1,"136":1,"153":1,"155":2}}],["session",{"2":{"33":1,"42":1}}],["security",{"0":{"159":1}}],["securely",{"2":{"121":1}}],["seconds",{"2":{"124":1,"137":1,"146":2}}],["secrets",{"2":{"157":1,"159":1}}],["secret",{"2":{"25":3,"137":2,"142":2,"152":2,"155":1}}],["section",{"0":{"138":1},"1":{"139":1,"140":1,"141":1,"142":1,"143":1,"144":1,"145":1,"146":1,"147":1,"148":1,"149":1},"2":{"9":1,"66":1,"116":1,"124":1}}],["selecting",{"2":{"132":1}}],["select",{"2":{"23":1,"32":1,"57":1,"61":1,"65":1,"72":2,"76":1,"80":1,"85":2,"93":1,"97":1,"116":1,"122":1,"123":1,"124":1,"131":1}}],["selected",{"2":{"17":1,"129":2}}],["serve",{"2":{"60":1}}],["server",{"0":{"140":1},"2":{"11":1,"39":1,"40":1,"42":1,"111":1,"137":1,"140":1,"147":1,"150":1,"158":1,"162":1,"163":2,"164":3}}],["service",{"2":{"67":1,"81":1,"82":1,"147":1,"154":1,"158":1,"159":1}}],["services",{"2":{"5":1,"73":1,"82":1,"106":1,"107":1,"111":1,"130":1,"152":1,"154":1}}],["serving",{"2":{"5":1}}],["setting",{"2":{"124":1}}],["settings",{"0":{"63":1},"2":{"6":1,"65":1,"84":1,"85":1,"109":1,"116":1,"133":1}}],["setup",{"0":{"83":1},"2":{"111":1}}],["set",{"0":{"20":1,"25":1,"27":1,"30":1},"2":{"6":1,"16":2,"17":2,"20":2,"25":2,"27":2,"30":3,"41":1,"42":3,"101":1,"105":1,"109":1,"126":1,"155":1,"157":1,"163":1,"164":1}}],["semantic",{"2":{"6":1,"78":1,"103":1}}],["search",{"2":{"3":1,"6":1,"103":1,"105":3,"121":1,"129":1,"137":1,"149":7}}],["sludge",{"2":{"2":1}}],["save",{"2":{"116":1,"121":1,"123":1,"124":1,"130":1}}],["safely",{"2":{"56":1}}],["safe",{"2":{"4":1}}],["say",{"2":{"2":1}}],["same",{"2":{"2":1,"33":1,"131":1}}],["solution",{"0":{"164":1,"168":1}}],["solves",{"2":{"90":1}}],["sock",{"2":{"137":1,"143":1}}],["socket",{"2":{"137":1,"143":2}}],["source",{"2":{"8":1,"40":1,"59":1,"70":1,"163":1}}],["so",{"2":{"2":2,"4":1,"60":1,"74":1,"79":1,"168":1}}],["someone",{"2":{"4":1}}],["somewhere",{"2":{"2":2}}],["something",{"2":{"1":1,"2":3}}],["smell",{"2":{"2":1}}],["smoother",{"2":{"2":1}}],["smaller",{"2":{"95":1}}],["small",{"2":{"2":1,"37":2,"131":2}}],["smarter",{"2":{"1":1}}],["step",{"0":{"114":1,"115":1,"116":1,"117":1,"121":1,"122":1,"123":1,"124":1,"125":1,"129":1,"130":1,"131":1,"132":1},"2":{"96":1,"121":1,"125":1}}],["steps",{"0":{"118":1,"126":1,"133":1},"2":{"91":1}}],["string",{"2":{"139":2,"140":1,"141":3,"142":2,"143":2,"144":3,"145":5,"146":3,"147":1,"148":1,"149":2}}],["strict",{"2":{"5":1}}],["structured",{"2":{"99":1,"103":1,"134":1}}],["streaming",{"2":{"19":1,"104":1,"110":1}}],["stream",{"2":{"2":1,"32":1}}],["studio",{"2":{"3":1,"7":1}}],["stop",{"2":{"55":1,"156":1}}],["stops",{"2":{"2":1}}],["store",{"2":{"103":1,"167":1}}],["stores",{"2":{"11":1,"28":1,"41":1,"103":1}}],["stored",{"2":{"6":2,"12":1,"67":1,"78":1}}],["storage",{"2":{"2":1,"5":1}}],["story",{"0":{"2":1}}],["stood",{"2":{"2":1}}],["style",{"2":{"2":1,"78":1}}],["stale",{"2":{"164":1}}],["status",{"2":{"156":1}}],["state",{"2":{"52":1,"129":1}}],["standardized",{"2":{"74":1}}],["starting",{"2":{"155":1}}],["startup",{"2":{"154":2}}],["starts",{"2":{"32":1}}],["start",{"2":{"19":1,"40":1,"55":1,"152":1,"153":1,"156":1}}],["started",{"2":{"2":2,"135":1}}],["stay",{"2":{"5":1}}],["stays",{"2":{"3":1,"8":2}}],["stack",{"2":{"5":1,"8":1,"150":1}}],["stakes",{"2":{"2":1}}],["still",{"2":{"1":1,"166":1}}],["s",{"2":{"1":1,"2":6,"4":1,"8":1,"24":1,"25":1,"26":1,"27":1,"55":1,"77":1,"126":1,"129":1,"152":1,"167":1,"168":1}}],["effect",{"0":{"165":1},"1":{"166":1,"167":1,"168":1}}],["errors",{"2":{"166":1}}],["error=",{"2":{"162":2}}],["error",{"2":{"139":1,"162":1}}],["etc",{"2":{"82":1}}],["e",{"2":{"22":1,"25":1,"27":1,"30":1,"37":1,"50":1,"115":3,"118":1,"121":3,"123":1,"130":2,"131":2,"140":1,"142":1,"157":1,"162":1,"163":1,"166":1}}],["email",{"2":{"137":1,"141":2}}],["embedded",{"2":{"167":1}}],["embeddings",{"2":{"131":1}}],["embedding",{"2":{"20":2,"35":1,"37":7,"63":1,"81":1,"83":1,"84":1,"85":1,"116":1,"127":1,"131":6,"133":1}}],["embed",{"2":{"131":1}}],["empty",{"2":{"2":1,"50":1,"129":1,"149":1}}],["edge",{"2":{"7":1}}],["edit",{"0":{"132":1},"2":{"6":1,"99":1,"105":1,"132":2,"134":1,"155":1}}],["easier",{"2":{"92":1}}],["easy",{"2":{"6":1}}],["each",{"2":{"6":3,"7":1,"54":1,"62":1,"77":1,"82":1,"101":1,"102":2,"103":1,"107":1,"132":1,"134":1,"144":1}}],["exec",{"2":{"162":1,"164":1,"166":1,"168":2}}],["executable",{"2":{"166":1}}],["execute",{"2":{"6":1,"87":1,"99":1,"102":1,"105":1,"162":1}}],["executions",{"2":{"50":1,"51":1}}],["execution",{"2":{"5":1,"55":1,"67":1,"87":1,"91":1,"95":1,"108":1}}],["extra",{"2":{"111":1}}],["extracts",{"2":{"103":1}}],["extracted",{"2":{"78":1}}],["extraction",{"2":{"70":1}}],["extend",{"2":{"105":1,"126":1}}],["extension",{"2":{"74":1,"75":1}}],["external",{"2":{"58":1,"59":1,"67":2,"73":1,"74":1,"107":1}}],["exists",{"2":{"164":1,"167":1}}],["exist",{"2":{"66":1,"163":1}}],["exit",{"2":{"19":1,"32":1}}],["examples",{"2":{"30":1,"37":1,"44":1,"45":1,"58":1}}],["example",{"0":{"137":1},"2":{"20":1,"29":1,"30":1,"38":1,"46":1,"130":2,"131":1,"137":1}}],["expiration",{"2":{"142":1}}],["expires",{"2":{"137":1,"142":1}}],["expression",{"2":{"87":1}}],["expressions",{"2":{"6":1,"108":1}}],["explains",{"2":{"66":1}}],["explicitly",{"2":{"33":1}}],["explicit",{"2":{"5":1,"7":1}}],["expectations",{"2":{"91":1}}],["expensive",{"2":{"4":1}}],["experienced",{"2":{"7":1}}],["experience",{"2":{"1":1}}],["eventually",{"2":{"2":1}}],["everything",{"2":{"5":1,"8":1,"150":1}}],["every",{"2":{"1":1,"2":1,"4":1,"6":1,"99":1}}],["evolves",{"2":{"2":1}}],["economics",{"2":{"2":1}}],["end",{"2":{"121":1}}],["endpoint",{"2":{"81":1}}],["endpoints",{"2":{"43":1}}],["engineered",{"2":{"103":1}}],["engineering",{"0":{"103":1},"2":{"6":1}}],["entrypoint",{"2":{"167":2}}],["entity",{"2":{"62":1}}],["enter",{"2":{"1":1,"19":1,"32":1,"121":2}}],["ensure",{"2":{"40":1}}],["encrypt",{"2":{"25":2}}],["enables",{"2":{"79":1,"84":1}}],["enabled",{"2":{"50":2,"51":1,"87":1}}],["enable",{"2":{"20":1,"51":1,"52":1,"126":1,"131":1}}],["environments",{"2":{"159":1}}],["environment",{"2":{"7":1,"55":1,"67":1}}],["enough",{"2":{"2":1}}],["else",{"2":{"2":1,"4":1}}],["msg=",{"2":{"162":2}}],["mistral",{"2":{"82":1}}],["missing",{"2":{"45":1}}],["minimum",{"2":{"83":1}}],["minimal",{"2":{"75":1}}],["minutes",{"2":{"63":1,"154":1}}],["mic",{"2":{"2":1}}],["my",{"2":{"20":1,"37":2,"44":1,"45":1,"46":1,"115":1,"121":2,"130":1}}],["myself",{"2":{"2":1}}],["mcp",{"0":{"73":1,"74":1,"107":1,"144":1,"161":2,"165":1},"1":{"74":1,"75":1,"76":1,"162":2,"163":2,"164":2,"166":1,"167":1,"168":1},"2":{"6":1,"67":1,"68":1,"73":1,"74":1,"75":1,"76":1,"107":2,"109":1,"137":2,"144":3,"162":1,"163":2,"164":2,"166":2,"167":2,"168":3}}],["must",{"2":{"121":1,"159":1}}],["multimodal",{"2":{"36":1,"37":2,"131":1}}],["multiple",{"2":{"5":1,"6":1,"60":1,"101":1,"104":1}}],["multi",{"0":{"101":1,"104":1,"106":1},"2":{"2":1,"6":1,"7":1,"96":1,"99":1,"103":1,"134":1}}],["much",{"2":{"2":1}}],["mention",{"2":{"125":1}}],["messaging",{"2":{"104":1,"105":1}}],["message",{"2":{"32":1,"59":1,"70":1,"124":1,"125":2}}],["messages",{"2":{"19":1,"37":1,"82":2,"105":1,"106":1,"119":1,"125":1,"131":1}}],["mem0",{"2":{"103":1}}],["members",{"2":{"101":1}}],["member",{"2":{"99":1,"134":1}}],["memories",{"2":{"78":2,"103":1,"105":1,"146":1}}],["memory",{"0":{"77":1,"103":1},"1":{"78":1,"79":1,"80":1},"2":{"2":1,"3":1,"5":1,"6":3,"7":1,"8":1,"20":2,"62":1,"63":1,"67":1,"68":1,"70":1,"77":1,"79":1,"80":1,"83":1,"84":1,"85":1,"99":2,"103":3,"105":1,"116":1,"118":1,"126":2,"131":1,"134":2,"137":1,"146":1,"157":1}}],["memoh123",{"2":{"152":1}}],["memohai",{"2":{"40":1,"152":2,"153":1}}],["memoh",{"0":{"0":1,"39":1,"98":1,"99":1,"134":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"40":1,"41":1,"42":1,"99":1,"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"108":1,"109":1,"110":1,"111":1,"135":1},"2":{"1":1,"3":1,"4":1,"5":1,"7":2,"8":3,"9":1,"11":2,"28":1,"30":1,"32":2,"33":1,"37":2,"39":3,"40":6,"41":4,"42":2,"44":1,"45":1,"62":1,"64":1,"66":2,"69":1,"73":1,"74":1,"77":1,"78":1,"81":1,"82":1,"99":1,"111":1,"120":1,"121":2,"122":1,"124":1,"128":1,"134":1,"135":2,"136":2,"137":2,"144":2,"145":1,"150":1,"152":4,"153":2,"155":2,"163":3,"164":2,"168":3}}],["metadata",{"2":{"23":1}}],["metaphors",{"2":{"2":1}}],["mounted",{"2":{"153":1,"163":1}}],["mount",{"2":{"136":1,"163":2,"164":1}}],["mode",{"2":{"145":1}}],["model",{"0":{"20":1,"35":1,"36":1,"37":1,"38":1,"81":1,"84":1,"127":1},"1":{"36":1,"37":1,"38":1,"82":1,"83":1,"84":1,"85":1,"128":1,"129":1,"130":1,"131":1,"132":1,"133":1},"2":{"3":1,"6":1,"20":7,"36":1,"37":10,"38":7,"42":2,"62":1,"63":4,"67":1,"68":1,"73":1,"81":3,"82":1,"83":2,"84":4,"85":1,"107":1,"110":1,"113":1,"116":3,"125":1,"129":1,"131":8,"132":2,"133":2,"135":1,"144":1}}],["models",{"0":{"129":1,"131":1},"2":{"1":1,"4":1,"35":1,"36":1,"37":2,"39":1,"42":1,"85":2,"109":1,"127":1,"129":2,"131":2,"133":1,"135":1}}],["modular",{"2":{"75":1}}],["monorepo",{"2":{"40":1}}],["mobile",{"2":{"2":1}}],["more",{"2":{"2":3,"6":2,"7":1,"8":1,"95":1,"99":1,"110":1}}],["moment",{"2":{"2":3}}],["most",{"2":{"2":1,"42":1}}],["machine",{"2":{"163":1}}],["macos",{"2":{"153":1}}],["may",{"2":{"154":1,"162":1}}],["main",{"2":{"95":2,"147":1,"150":1,"152":2,"158":1,"159":1}}],["maintenance",{"2":{"88":1}}],["maintain",{"2":{"79":1,"92":1}}],["map",{"0":{"67":1}}],["matters",{"0":{"56":1,"60":1,"64":1,"71":1,"75":1,"79":1,"88":1,"92":1,"96":1}}],["mattered",{"2":{"2":1}}],["max",{"2":{"50":3,"51":2,"63":2,"87":1,"108":1}}],["markdown",{"2":{"104":1}}],["mark",{"2":{"37":1}}],["making",{"2":{"8":2}}],["make",{"2":{"4":1,"88":1,"92":1}}],["makes",{"2":{"1":1,"4":1,"75":1}}],["manual",{"0":{"153":1},"2":{"108":1,"111":1}}],["managing",{"2":{"39":1}}],["managed",{"2":{"93":1}}],["manage",{"2":{"14":1,"21":1,"35":1,"43":1,"47":1,"101":1,"105":1,"118":1}}],["management",{"0":{"101":1},"2":{"6":1,"64":1,"105":1,"109":1,"110":2}}],["many",{"2":{"2":1,"63":1}}],["manifesto",{"2":{"1":1}}],["f",{"2":{"156":1}}],["fssl",{"2":{"152":2}}],["follow",{"2":{"121":1}}],["found",{"0":{"161":2},"1":{"162":2,"163":2,"164":2},"2":{"162":3,"166":1}}],["foundation",{"2":{"56":1}}],["four",{"2":{"106":1}}],["focus",{"2":{"95":1}}],["forward",{"2":{"7":1}}],["forcing",{"2":{"2":1}}],["format",{"2":{"91":1,"137":1,"139":2}}],["form",{"2":{"1":1,"2":1,"131":1}}],["for",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1},"2":{"2":2,"4":1,"5":1,"6":1,"8":1,"11":1,"16":1,"18":1,"20":1,"23":1,"26":1,"30":2,"37":3,"39":1,"45":2,"47":1,"48":1,"50":3,"63":1,"70":1,"77":1,"78":1,"83":2,"84":1,"96":1,"101":1,"104":1,"105":1,"110":2,"111":1,"115":3,"116":1,"121":3,"125":2,"126":2,"130":3,"131":6,"135":1,"136":1,"140":1,"141":1,"142":1,"143":1,"144":1,"146":2,"149":1,"152":2,"153":1,"155":3,"157":1}}],["flexibly",{"2":{"106":1}}],["flexibility",{"2":{"74":1}}],["flip",{"2":{"52":1}}],["flag",{"2":{"36":1}}],["fulfil",{"2":{"163":1}}],["full",{"0":{"137":1},"2":{"104":2,"145":1,"158":1}}],["fully",{"2":{"4":2}}],["furthermore",{"2":{"8":1}}],["freely",{"2":{"6":1,"102":1}}],["frontier",{"2":{"5":1,"8":1}}],["from",{"2":{"2":1,"23":1,"40":1,"55":1,"59":1,"60":1,"78":1,"93":1,"103":1,"123":1,"131":1,"137":1,"144":1,"152":1,"155":1,"164":1,"168":2}}],["feb",{"2":{"9":1}}],["feishu",{"2":{"6":1,"22":1,"25":4,"27":4,"58":1,"99":1,"104":1,"118":1,"134":1}}],["features",{"0":{"6":1,"100":1},"1":{"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"108":1,"109":1,"110":1},"2":{"66":1,"135":1}}],["feed",{"2":{"4":1}}],["feels",{"2":{"8":1}}],["feeling",{"2":{"2":1}}],["feel",{"2":{"1":1,"2":2}}],["fi",{"2":{"167":1}}],["firewall",{"2":{"157":1}}],["first",{"2":{"2":1,"3":1,"7":2,"42":1,"154":1}}],["find",{"2":{"124":1}}],["finished",{"2":{"2":1}}],["field",{"2":{"115":1,"123":1,"130":1,"131":1,"139":1,"140":1,"141":1,"142":1,"143":1,"144":1,"145":1,"146":1,"147":1,"148":1,"149":1,"155":1}}],["fields",{"0":{"87":1},"2":{"45":1,"111":1,"153":1}}],["fill",{"2":{"115":1,"123":1,"130":1,"131":1}}],["file",{"2":{"56":1,"136":1,"153":1,"155":1,"163":1,"166":1}}],["filesystem",{"2":{"55":1,"102":1}}],["files",{"2":{"5":1,"6":1,"7":1,"99":1,"102":1,"105":1,"134":1}}],["filter",{"2":{"15":2,"44":2}}],["fixes",{"2":{"2":1}}],["fail",{"2":{"166":1}}],["failed",{"2":{"162":2,"163":1}}],["fails",{"2":{"13":1,"163":1}}],["family",{"2":{"101":1}}],["familiar",{"2":{"1":1}}],["facts",{"2":{"78":1,"103":1}}],["factor",{"2":{"1":1}}],["falls",{"2":{"13":1}}],["faster",{"2":{"7":1}}],["fast",{"2":{"2":1}}],["write",{"2":{"102":1,"105":1}}],["wrote",{"2":{"2":1}}],["wide",{"2":{"106":1}}],["windows",{"2":{"79":1}}],["will",{"2":{"8":1,"121":2,"152":1}}],["within",{"2":{"6":1,"99":1,"102":1}}],["without",{"2":{"2":2,"74":1,"102":1}}],["with",{"2":{"1":2,"2":1,"3":1,"5":1,"6":3,"8":1,"14":1,"19":1,"32":3,"33":1,"36":1,"39":1,"42":1,"55":1,"69":1,"75":1,"78":1,"82":2,"99":1,"101":2,"102":2,"104":1,"105":1,"111":1,"115":1,"119":1,"121":1,"130":1,"131":4,"134":2,"136":1,"142":1,"152":1,"153":1,"155":1,"156":1,"157":1,"159":1,"163":1,"166":1}}],["way",{"2":{"150":1}}],["warnings",{"0":{"159":1}}],["warn",{"2":{"139":1}}],["walks",{"2":{"119":1,"127":1}}],["want",{"2":{"4":2,"8":1,"66":1,"122":1}}],["wanted",{"2":{"2":2}}],["wasn",{"2":{"2":1}}],["was",{"2":{"2":1,"168":1}}],["wait",{"2":{"2":1}}],["who",{"2":{"110":1}}],["whoami",{"0":{"13":1},"2":{"13":1,"42":1}}],["which",{"2":{"32":1,"81":2}}],["while",{"2":{"2":1,"64":1,"93":1,"154":1}}],["whether",{"2":{"87":1}}],["when",{"2":{"2":2,"5":1,"66":1,"78":1,"125":1,"152":1,"155":2,"162":1,"163":1}}],["where",{"2":{"1":1,"2":1,"7":2}}],["why",{"0":{"4":1,"56":1,"60":1,"64":1,"71":1,"75":1,"79":1,"88":1,"92":1,"96":1},"2":{"2":1,"66":1}}],["what",{"0":{"3":1,"55":1,"59":1,"70":1,"74":1,"99":1},"2":{"1":2,"2":1,"135":1}}],["workflow",{"2":{"95":1}}],["workflows",{"2":{"1":1,"92":1}}],["workspace",{"2":{"93":1,"152":2}}],["works",{"0":{"78":1},"2":{"82":1}}],["work",{"2":{"66":1}}],["worse",{"2":{"2":1}}],["world",{"2":{"1":1}}],["wechat",{"2":{"118":1}}],["web",{"0":{"57":1,"61":1,"65":1,"72":1,"76":1,"80":1,"85":1,"89":1,"93":1,"97":1,"148":1},"2":{"58":1,"64":1,"89":2,"104":2,"105":1,"109":1,"111":1,"120":1,"122":1,"124":1,"127":1,"128":1,"134":1,"137":1,"148":2,"149":2,"150":1,"154":1}}],["were",{"2":{"2":1,"168":1}}],["weight",{"2":{"2":1}}],["we",{"2":{"1":2,"2":2,"5":1,"7":2,"8":2}}],["old",{"2":{"167":1,"168":1}}],["ollama",{"2":{"45":1,"46":1,"82":1,"130":7,"131":2}}],["omitted",{"2":{"23":1}}],["opt",{"2":{"144":1,"163":1,"164":1}}],["optional",{"2":{"25":2,"50":2,"87":1,"131":1,"146":1}}],["optionally",{"2":{"16":1,"44":1}}],["option",{"2":{"15":1,"16":1,"17":1,"20":1,"24":1,"25":1,"26":1,"27":1,"30":1,"32":1,"33":1,"37":1,"44":1,"45":1,"50":1,"51":1}}],["options",{"2":{"15":1,"16":1,"17":1,"20":1,"24":1,"25":1,"26":1,"27":1,"30":2,"32":1,"33":1,"37":1,"44":1,"45":1,"50":1,"51":1}}],["operations",{"2":{"56":1,"88":1,"105":1}}],["operate",{"2":{"8":1}}],["openssl",{"2":{"137":1,"142":1,"155":1}}],["openai",{"2":{"37":6,"44":1,"82":4,"106":2,"130":5,"131":9}}],["open",{"0":{"114":1,"122":1,"129":1},"2":{"8":1,"27":3,"114":1,"116":1,"117":1,"121":1,"122":2,"124":2,"129":1,"131":1,"163":1}}],["openclaw",{"0":{"7":1},"2":{"7":1}}],["owner",{"2":{"15":3}}],["own",{"2":{"6":3,"54":1,"62":1,"99":3,"102":1,"107":1,"109":1,"134":2,"155":1}}],["others",{"2":{"125":1}}],["otherwise",{"2":{"32":1}}],["other",{"2":{"6":1,"101":1,"102":1,"109":1}}],["orchestrated",{"2":{"150":1}}],["organizes",{"2":{"69":1}}],["order",{"0":{"68":1}}],["or",{"0":{"132":1},"2":{"6":2,"16":1,"17":1,"20":2,"27":1,"28":1,"30":1,"37":1,"42":1,"52":1,"75":1,"81":1,"84":1,"87":1,"90":1,"101":3,"111":1,"129":1,"131":5,"132":2,"134":1,"139":1,"140":1,"150":1,"153":1,"163":1}}],["outside",{"2":{"164":1}}],["output",{"2":{"29":1,"91":1}}],["out",{"2":{"2":1,"12":1,"42":1}}],["our",{"2":{"1":1,"2":1}}],["oem",{"2":{"2":1}}],["os",{"2":{"2":1}}],["okay",{"2":{"2":1}}],["occasional",{"2":{"2":1}}],["official",{"2":{"121":1,"152":1}}],["off",{"2":{"2":1}}],["of",{"2":{"1":2,"2":3,"6":1,"40":1,"63":1,"71":1,"90":1,"95":1,"103":1,"105":1,"106":1,"130":1,"157":1}}],["override",{"2":{"157":1}}],["overlayfs",{"2":{"137":1,"144":1}}],["over",{"2":{"1":1}}],["overview",{"0":{"1":1,"66":1},"1":{"67":1,"68":1}}],["once",{"2":{"133":1}}],["ongoing",{"2":{"70":1}}],["only",{"2":{"15":1,"88":1,"131":1,"153":1,"159":1}}],["online",{"2":{"8":1}}],["one",{"0":{"152":1},"2":{"8":1,"32":1,"55":1,"60":1,"64":1,"83":2,"111":1,"116":1,"127":1,"131":2,"133":2,"149":1}}],["on",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1},"2":{"1":2,"2":1,"4":1,"5":1,"8":2,"95":1,"111":1,"125":1,"132":1,"150":1,"153":1,"155":1,"156":1}}],["ctr",{"2":{"164":1,"167":1,"168":2}}],["cpu",{"2":{"157":1}}],["custom",{"0":{"155":1},"2":{"136":1}}],["customization",{"2":{"84":1}}],["currently",{"2":{"25":1,"27":1,"89":1,"93":1}}],["current",{"2":{"13":1,"26":1,"27":1,"29":1,"42":1,"52":1,"87":2,"89":1,"136":1}}],["certs",{"2":{"157":1}}],["centralized",{"2":{"64":1}}],["ceiling",{"2":{"4":1}}],["cmd",{"2":{"50":1,"51":1}}],["cd",{"2":{"40":1,"153":1}}],["creation",{"2":{"131":1}}],["creating",{"2":{"127":1}}],["creates",{"2":{"163":1}}],["created",{"2":{"120":1,"162":1}}],["create",{"0":{"16":1,"37":1,"45":1,"50":1,"112":1,"115":1,"121":1},"1":{"113":1,"114":1,"115":1,"116":1,"117":1,"118":1},"2":{"6":1,"16":2,"37":5,"42":4,"45":4,"50":4,"55":1,"99":1,"101":1,"105":1,"120":1,"121":1,"133":1,"134":1}}],["credentials",{"2":{"43":1,"59":1,"152":1}}],["cron",{"2":{"6":1,"47":1,"50":2,"51":1,"86":1,"87":1,"108":1}}],["checklist",{"0":{"157":1}}],["check",{"0":{"117":1},"2":{"152":1,"167":1}}],["checks",{"2":{"88":1}}],["cheap",{"2":{"4":1}}],["choose",{"2":{"85":1}}],["choices",{"2":{"2":1}}],["changing",{"2":{"74":1}}],["changes",{"2":{"155":1}}],["change",{"2":{"41":1,"137":1,"141":1,"155":2,"157":1,"159":1}}],["channels",{"2":{"21":1,"23":1,"39":1,"42":1,"60":1,"61":1,"109":1,"135":1}}],["channel",{"0":{"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"58":1,"59":1,"119":1,"123":1},"1":{"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"59":1,"60":1,"61":1,"120":1,"121":1,"122":1,"123":1,"124":1,"125":1,"126":1},"2":{"6":1,"21":1,"22":2,"23":3,"24":3,"25":3,"26":3,"27":3,"42":2,"58":1,"62":1,"67":1,"68":1,"104":1,"110":1,"115":2,"118":1,"122":1,"123":3}}],["chatting",{"2":{"39":1}}],["chatbox",{"2":{"7":1}}],["chat",{"0":{"19":1,"31":1,"32":1},"1":{"32":1,"33":1,"34":1},"2":{"6":2,"14":1,"19":2,"20":3,"32":3,"33":3,"35":1,"37":2,"42":4,"58":1,"63":1,"67":1,"70":1,"72":1,"81":1,"82":1,"83":1,"84":1,"85":1,"99":1,"101":1,"104":2,"106":1,"110":1,"116":1,"117":2,"119":1,"124":1,"127":1,"131":4,"133":1,"134":1,"135":1}}],["copy",{"2":{"155":1}}],["collection",{"2":{"137":1,"146":2}}],["collaborate",{"2":{"6":1,"101":1}}],["coordinator",{"2":{"95":1}}],["count",{"2":{"87":1,"108":1}}],["coupling",{"2":{"75":1}}],["could",{"2":{"2":1}}],["code",{"2":{"74":1,"105":1,"124":3,"162":1,"163":2}}],["coding",{"2":{"6":1,"109":1}}],["core",{"0":{"87":1,"95":1},"2":{"7":1,"66":1,"67":1,"74":1}}],["come",{"2":{"105":1}}],["combined",{"2":{"95":1}}],["combines",{"2":{"78":1}}],["common",{"0":{"156":1}}],["communicates",{"2":{"82":1}}],["communication",{"2":{"58":1}}],["command=date",{"2":{"162":1}}],["command",{"2":{"39":1,"40":1,"42":2,"50":3,"51":2,"87":2,"104":1,"110":1,"121":1,"135":1}}],["commands",{"0":{"10":1,"14":1,"21":1,"28":1,"31":1,"35":1,"42":1,"43":1,"47":1,"156":1},"1":{"11":1,"12":1,"13":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"29":1,"30":1,"32":1,"33":1,"34":1,"36":1,"37":1,"38":1,"44":1,"45":1,"46":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1},"2":{"6":2,"7":1,"28":1,"42":1,"47":1,"56":1,"86":1,"99":1,"102":1,"105":1,"108":1,"134":1,"162":1}}],["com",{"2":{"30":1,"40":1,"115":1,"130":2,"137":2,"149":2,"152":2,"153":1}}],["compose",{"2":{"111":1,"147":1,"150":1,"151":1,"152":3,"153":3,"155":3,"156":5,"157":1,"158":5,"164":2,"168":1}}],["complete",{"2":{"113":1,"124":1}}],["completions",{"2":{"37":2,"82":2,"106":1,"131":4}}],["complex",{"2":{"92":1,"95":1,"105":1}}],["compaction",{"2":{"103":1}}],["compatible",{"2":{"82":1,"106":1}}],["compare",{"0":{"7":1}}],["computer",{"2":{"6":1,"99":1}}],["cost",{"2":{"2":1,"84":1}}],["conf",{"2":{"153":1,"155":1,"164":1}}],["config=",{"2":{"155":1}}],["config",{"0":{"24":1,"25":1,"28":1,"29":1,"30":1,"136":1},"1":{"29":1,"30":1,"137":1,"138":1,"139":1,"140":1,"141":1,"142":1,"143":1,"144":1,"145":1,"146":1,"147":1,"148":1,"149":1},"2":{"24":1,"25":1,"28":2,"29":2,"30":4,"41":4,"42":3,"111":1,"135":1,"136":3,"152":1,"153":3,"155":9,"158":1,"163":1,"164":4}}],["configurable",{"2":{"105":1}}],["configuration",{"0":{"41":1,"59":1,"109":1,"116":1,"155":1},"2":{"21":1,"24":1,"25":1,"62":1,"81":1,"93":1,"110":1,"111":1,"113":1,"114":1,"116":1,"117":1,"122":1,"123":1,"129":1,"136":1,"144":1,"152":1,"153":1,"158":1}}],["configured",{"2":{"40":1,"125":1}}],["configure",{"0":{"119":1,"127":1},"1":{"120":1,"121":1,"122":1,"123":1,"124":1,"125":1,"126":1,"128":1,"129":1,"130":1,"131":1,"132":1,"133":1},"2":{"6":1,"108":1,"109":1,"126":1,"127":1,"135":1,"157":1}}],["confirmation",{"2":{"18":1}}],["confidence",{"2":{"7":1}}],["conventions",{"2":{"93":1}}],["conversations",{"2":{"69":1,"78":1}}],["conversation",{"0":{"69":1},"1":{"70":1,"71":1,"72":1},"2":{"3":1,"6":1,"63":1,"67":1,"68":1,"71":1,"72":1,"103":2,"131":1}}],["consistent",{"2":{"92":1}}],["constraints",{"2":{"91":1}}],["constraint",{"2":{"2":1}}],["connection",{"0":{"125":1}}],["connections",{"2":{"74":1,"107":1}}],["connecting",{"2":{"104":1,"119":1}}],["connected",{"2":{"81":1}}],["connect",{"2":{"67":1,"107":1,"122":1}}],["connects",{"2":{"58":1,"73":1}}],["concrete",{"2":{"81":1}}],["concept",{"0":{"67":1}}],["concepts",{"0":{"66":1},"1":{"67":1,"68":1},"2":{"66":1,"81":1}}],["conceptually",{"2":{"2":1}}],["conclusion",{"0":{"8":1}}],["continue",{"2":{"8":1}}],["continuity",{"2":{"4":1,"8":1,"71":1,"79":1}}],["continuously",{"2":{"2":1}}],["controlled",{"2":{"55":1}}],["control",{"2":{"3":1,"5":1}}],["content",{"0":{"91":1},"2":{"2":1}}],["context",{"2":{"1":2,"2":1,"4":2,"5":1,"6":1,"8":1,"63":2,"67":1,"70":2,"73":1,"79":1,"103":1,"107":1,"144":1}}],["contains",{"2":{"9":1}}],["containerd",{"0":{"143":1},"2":{"102":1,"111":1,"137":3,"143":4,"144":1,"150":2,"158":2,"162":1,"163":3,"164":2,"166":2,"167":4,"168":5}}],["container",{"0":{"54":1,"161":1,"165":1},"1":{"55":1,"56":1,"57":1,"162":1,"163":1,"164":1,"166":1,"167":1,"168":1},"2":{"6":1,"7":1,"50":1,"54":1,"56":1,"57":1,"62":1,"67":1,"68":1,"99":2,"102":1,"105":2,"134":1,"144":3,"159":1,"162":3,"163":2,"164":2,"166":1,"167":1,"168":2}}],["containers",{"2":{"5":1,"6":1,"102":1,"143":1,"150":1,"157":1,"163":1,"164":1}}],["containerization",{"2":{"4":1}}],["containerized",{"0":{"0":1,"102":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1},"2":{"3":1,"5":1,"6":1,"7":1,"8":1,"99":1,"134":1}}],["contact",{"2":{"1":1}}],["click",{"0":{"152":1},"2":{"111":1,"114":1,"115":1,"116":1,"117":1,"122":2,"123":2,"124":1,"129":1,"130":2,"131":1}}],["clicks",{"2":{"2":1}}],["client",{"0":{"82":1},"2":{"36":1,"37":5,"81":1,"82":2,"106":1,"131":5}}],["cli",{"0":{"39":1,"110":1},"1":{"40":1,"41":1,"42":1},"2":{"28":1,"34":1,"39":1,"40":4,"41":1,"42":2,"89":1,"104":1,"110":1,"134":1,"135":1}}],["clean",{"2":{"164":1}}],["cleaner",{"2":{"2":1}}],["clear",{"2":{"12":1,"42":1}}],["clone",{"2":{"40":1,"152":1,"153":2}}],["cloud",{"2":{"3":1,"4":1,"5":1,"7":1,"8":1,"146":1}}],["closed",{"2":{"2":1}}],["classes",{"2":{"90":1}}],["class",{"2":{"2":1}}],["clash",{"2":{"2":1}}],["cause",{"0":{"163":1,"167":1}}],["caught",{"2":{"2":1}}],["cache",{"2":{"158":1}}],["ca",{"2":{"145":1}}],["card",{"2":{"116":1,"132":1}}],["carry",{"2":{"2":1}}],["capabilities",{"0":{"105":1},"2":{"105":1,"126":1}}],["capability",{"2":{"1":1,"3":1,"5":1,"67":2,"74":1,"75":1,"90":1}}],["cap",{"2":{"87":1}}],["call",{"2":{"13":1,"147":1}}],["calls",{"2":{"5":1,"50":2,"51":1,"87":2}}],["category",{"2":{"2":1}}],["can",{"2":{"1":1,"2":5,"6":3,"7":2,"15":1,"17":1,"60":1,"74":1,"75":1,"79":1,"88":1,"94":1,"99":1,"101":1,"102":1,"107":1,"130":1,"132":1,"133":1,"136":1}}],["case",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1}}],["circling",{"2":{"1":1}}],["after",{"0":{"165":1},"1":{"166":1,"167":1,"168":1},"2":{"132":1,"154":1,"166":1}}],["adapter",{"2":{"104":1}}],["added",{"2":{"168":1}}],["adding",{"2":{"166":1}}],["address",{"2":{"140":1}}],["addr",{"2":{"137":1,"140":1,"147":1}}],["add",{"0":{"123":1,"130":1,"131":1},"2":{"75":1,"85":2,"118":1,"123":2,"125":1,"126":1,"127":1,"130":2,"131":2}}],["adds",{"0":{"74":1}}],["admin123",{"2":{"152":1,"154":1}}],["admin",{"0":{"141":1},"2":{"15":1,"137":3,"141":4,"152":3,"154":1,"155":2}}],["admins",{"2":{"15":1}}],["auditing",{"2":{"71":1}}],["automated",{"2":{"126":1}}],["automate",{"2":{"88":1}}],["automatic",{"2":{"103":1}}],["automatically",{"2":{"67":1,"103":1,"108":1}}],["automation",{"2":{"86":1}}],["auto",{"2":{"63":1,"103":1,"152":1}}],["authentication",{"2":{"42":1}}],["auth",{"0":{"10":1,"142":1},"1":{"11":1,"12":1,"13":1},"2":{"41":1,"137":1,"155":1}}],["able",{"2":{"134":1}}],["abcdefghijklmnopqrstuvwxyz",{"2":{"121":1,"123":1}}],["abstraction",{"2":{"64":1}}],["about",{"0":{"98":1},"1":{"99":1,"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"108":1,"109":1,"110":1,"111":1},"2":{"9":1,"135":1}}],["available",{"2":{"22":1,"23":1,"89":1,"116":1}}],["avatar",{"2":{"16":2,"17":2,"115":3}}],["architecture",{"2":{"96":1,"104":1}}],["area",{"2":{"93":1}}],["are",{"2":{"63":1,"67":1,"78":3,"81":1,"90":1,"93":1,"94":1,"95":1}}],["argument",{"2":{"17":1}}],["around",{"2":{"2":1}}],["a2a",{"2":{"7":1}}],["attachments",{"2":{"104":1}}],["attempt",{"2":{"1":1}}],["at",{"2":{"6":1,"40":1,"50":1,"83":1,"86":1,"108":1,"120":1,"127":1,"128":1,"130":1,"131":1,"133":1,"149":1,"155":1,"163":1}}],["api",{"2":{"13":1,"30":3,"39":1,"40":1,"43":1,"45":3,"81":2,"82":4,"89":1,"106":4,"115":1,"130":7,"131":1,"132":1,"137":3,"146":3,"147":1,"149":7,"154":1}}],["apis",{"2":{"5":1}}],["appears",{"2":{"130":1}}],["app",{"2":{"2":1,"8":1,"25":4,"153":1,"155":1,"164":1}}],["assign",{"2":{"105":1,"133":1}}],["assignment",{"0":{"84":1}}],["assignments",{"2":{"62":1}}],["asks",{"2":{"18":1}}],["as",{"2":{"4":1,"5":3,"6":1,"7":2,"8":1,"17":1,"20":2,"33":1,"37":1,"40":1,"50":2,"69":1,"95":1,"103":1,"123":1,"163":1}}],["allowing",{"2":{"99":1,"119":1}}],["allows",{"2":{"56":1,"64":1}}],["all",{"2":{"15":1,"36":1,"44":1,"47":1,"48":1,"109":1,"111":2,"140":1,"150":1,"152":2,"153":1,"157":1,"159":1}}],["also",{"2":{"4":1,"82":1,"162":1,"164":1}}],["already",{"2":{"2":1,"167":1}}],["always",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1},"2":{"1":1,"2":2,"4":1,"5":1,"8":2}}],["ambient",{"2":{"2":1}}],["across",{"2":{"60":1,"79":1,"167":1}}],["according",{"2":{"125":1}}],["account",{"0":{"124":1},"2":{"120":1}}],["accounts",{"2":{"101":1}}],["access",{"0":{"154":1},"2":{"6":1,"74":1,"99":1,"134":1,"157":1,"159":1}}],["accumulating",{"2":{"2":1}}],["actions",{"2":{"132":1}}],["active",{"2":{"16":2,"17":2,"87":1}}],["acts",{"2":{"5":1,"95":1}}],["actually",{"2":{"1":1,"2":2}}],["agreement",{"2":{"2":1}}],["agent2agent",{"2":{"7":1}}],["agents",{"2":{"1":1,"2":1,"4":1,"67":1,"94":1}}],["agent",{"0":{"0":1,"105":1,"147":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1},"2":{"1":1,"2":1,"7":1,"8":1,"64":1,"93":1,"99":1,"111":1,"134":1,"137":1,"147":4,"150":1,"154":1}}],["ai",{"2":{"1":1,"2":2,"3":1,"4":1,"6":1,"8":1,"37":1,"82":2,"99":2,"106":1,"109":1,"131":1,"134":2}}],["a",{"0":{"59":1,"115":1,"121":1,"130":1},"2":{"1":3,"2":11,"3":1,"5":2,"6":1,"7":4,"8":3,"16":1,"18":1,"19":1,"20":2,"23":1,"24":1,"25":1,"26":1,"37":1,"38":1,"39":2,"40":1,"42":1,"45":1,"46":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"57":1,"58":2,"59":1,"61":1,"62":1,"65":1,"72":1,"74":1,"76":1,"80":1,"81":2,"82":1,"83":1,"85":1,"86":2,"90":1,"93":1,"94":1,"97":1,"99":1,"102":1,"103":1,"105":1,"106":1,"109":1,"110":1,"115":2,"120":2,"121":3,"125":3,"130":3,"131":1,"132":1,"133":1,"134":1,"136":2,"144":1,"162":1,"163":2,"167":1}}],["analysis",{"2":{"71":1}}],["another",{"2":{"55":1}}],["any",{"2":{"45":1}}],["anthropic",{"2":{"37":1,"82":2,"106":1,"131":1}}],["anchor",{"2":{"2":1}}],["annoying",{"2":{"2":1}}],["and",{"0":{"69":1,"81":1,"127":1},"1":{"70":1,"71":1,"72":1,"82":1,"83":1,"84":1,"85":1,"128":1,"129":1,"130":1,"131":1,"132":1,"133":1},"2":{"1":1,"2":6,"4":4,"5":3,"6":7,"7":6,"8":4,"11":1,"12":1,"14":1,"16":1,"19":1,"21":1,"23":1,"29":1,"30":2,"32":1,"35":1,"36":1,"37":1,"39":1,"40":1,"41":2,"42":1,"43":1,"50":1,"56":1,"59":1,"64":1,"66":1,"67":5,"68":2,"70":3,"71":1,"74":1,"78":2,"81":2,"83":1,"88":1,"89":1,"91":2,"92":1,"93":1,"96":1,"99":4,"101":1,"102":2,"103":2,"104":1,"105":4,"107":1,"108":1,"109":1,"110":1,"113":1,"116":1,"121":3,"124":1,"125":1,"127":2,"129":3,"131":1,"132":1,"133":2,"134":1,"135":4,"150":1,"152":2,"153":1,"154":1,"155":2,"156":1,"157":2,"159":1,"163":1,"164":1,"166":1,"168":1}}],["an",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1},"2":{"2":3,"5":1,"7":2,"8":3,"19":1,"32":1,"58":1,"99":1,"129":1,"134":1,"163":1}}],["two",{"2":{"129":1}}],["ttl",{"2":{"124":1}}],["typically",{"2":{"147":1}}],["typical",{"0":{"83":1,"91":1}}],["types",{"0":{"82":1},"2":{"22":1,"106":1}}],["type",{"2":{"16":3,"19":2,"23":3,"24":3,"25":3,"26":3,"27":3,"32":2,"36":2,"37":11,"59":1,"81":1,"82":2,"115":2,"117":1,"123":1,"131":6,"139":1,"140":1,"141":1,"142":1,"143":1,"144":1,"145":1,"146":1,"147":1,"148":1,"149":1}}],["tui",{"0":{"33":1},"2":{"33":2,"42":1}}],["turning",{"2":{"2":1}}],["turn",{"2":{"1":1,"6":1,"103":1}}],["tries",{"2":{"162":1}}],["trigger",{"2":{"168":1}}],["triggers",{"2":{"108":1}}],["triggered",{"2":{"67":1}}],["trusted",{"2":{"159":1}}],["troubleshooting",{"0":{"158":1,"160":1},"1":{"161":1,"162":1,"163":1,"164":1,"165":1,"166":1,"167":1,"168":1},"2":{"71":1}}],["treat",{"2":{"7":1}}],["traceability",{"2":{"67":1,"70":1}}],["transport",{"2":{"60":1}}],["trapped",{"2":{"4":1}}],["trade",{"2":{"2":1}}],["travels",{"2":{"2":1}}],["taking",{"0":{"165":1},"1":{"166":1,"167":1,"168":1}}],["take",{"2":{"2":1,"154":1}}],["tab",{"2":{"122":1}}],["task",{"0":{"161":2},"1":{"162":2,"163":2,"164":2},"2":{"87":1,"162":3}}],["tasks",{"0":{"108":1},"2":{"6":2,"67":1,"88":1,"90":1,"94":1,"95":1,"96":1,"101":1,"105":1,"108":1,"126":1}}],["target",{"2":{"59":1}}],["talks",{"2":{"39":1}}],["talk",{"2":{"2":1}}],["tiny",{"2":{"2":1}}],["timeout",{"2":{"137":1,"146":2}}],["timelines",{"2":{"79":1}}],["timeline",{"2":{"70":1}}],["times",{"2":{"6":1,"86":1,"108":1}}],["time",{"0":{"2":1},"2":{"2":3,"32":1,"63":2,"105":1}}],["template",{"2":{"152":1,"155":1}}],["test",{"0":{"125":1},"2":{"117":1}}],["term",{"2":{"67":1,"77":1,"126":1}}],["terminal",{"2":{"33":1,"42":1,"110":1}}],["teams",{"2":{"101":1}}],["team",{"2":{"7":1}}],["telegram",{"0":{"119":1,"121":1,"123":1,"124":1},"1":{"120":1,"121":1,"122":1,"123":1,"124":1,"125":1,"126":1},"2":{"6":1,"22":1,"58":1,"99":1,"104":1,"115":2,"118":1,"119":2,"120":1,"121":1,"122":1,"123":1,"124":2,"125":1,"134":1}}],["text",{"2":{"2":1,"37":2,"131":3,"137":1,"139":2}}],["tension",{"2":{"1":1}}],["t",{"2":{"2":6,"4":2}}],["than",{"2":{"7":1}}],["that",{"2":{"1":1,"2":8,"3":1,"8":4,"56":1,"81":1,"82":1,"86":1,"90":1,"94":1}}],["through",{"2":{"6":2,"74":1,"93":1,"109":1,"119":1,"127":1}}],["threads",{"2":{"2":1}}],["three",{"2":{"1":1}}],["thing",{"2":{"2":1,"8":1}}],["think",{"2":{"2":1}}],["this",{"0":{"70":1},"2":{"2":2,"9":1,"55":1,"63":1,"66":1,"84":1,"95":1,"115":1,"119":1,"121":1,"127":1,"130":1,"144":1,"153":1,"163":1}}],["those",{"2":{"1":1}}],["these",{"2":{"28":1,"66":1,"133":1}}],["them",{"2":{"14":1,"99":1,"103":1,"131":1,"134":1}}],["their",{"2":{"4":1,"6":2,"36":1,"102":1}}],["they",{"2":{"4":2}}],["then",{"2":{"2":1,"11":1,"117":1,"167":1}}],["there",{"2":{"2":1,"89":1}}],["the",{"0":{"0":1,"114":1,"122":1,"125":1,"129":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1},"2":{"1":4,"2":12,"4":1,"5":2,"6":3,"7":3,"8":2,"9":1,"11":2,"12":1,"13":2,"26":1,"27":1,"28":1,"29":1,"30":1,"33":1,"34":1,"39":1,"40":5,"41":1,"42":1,"45":1,"47":1,"50":1,"56":1,"59":1,"62":1,"64":1,"66":1,"67":1,"81":2,"82":1,"87":1,"89":1,"93":1,"95":2,"99":1,"103":2,"105":1,"110":1,"111":1,"113":1,"114":2,"115":3,"117":2,"120":1,"121":5,"122":6,"123":6,"124":3,"125":2,"127":1,"128":1,"129":3,"130":7,"131":7,"132":4,"133":2,"134":1,"136":1,"147":2,"149":1,"150":3,"152":4,"153":3,"155":5,"156":1,"159":1,"162":2,"163":5,"164":6,"166":2,"167":5,"168":6}}],["together",{"2":{"66":1}}],["toggle",{"0":{"52":1},"2":{"42":1,"52":1}}],["toml",{"0":{"136":1},"1":{"137":1,"138":1,"139":1,"140":1,"141":1,"142":1,"143":1,"144":1,"145":1,"146":1,"147":1,"148":1,"149":1},"2":{"28":1,"41":1,"111":1,"135":1,"136":2,"137":1,"152":1,"153":2,"155":6,"163":1,"164":3}}],["tokens",{"2":{"142":1}}],["token",{"2":{"11":2,"12":1,"13":1,"25":3,"41":2,"42":1,"121":2,"123":2}}],["tool",{"0":{"110":1},"2":{"5":1,"39":1,"67":1,"73":1,"74":1,"75":1,"107":1,"110":1,"135":1,"149":1,"162":1}}],["tools",{"2":{"2":1,"7":1,"56":1,"105":1,"162":1,"166":1}}],["too",{"2":{"2":3}}],["to",{"0":{"0":1,"7":1,"84":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1},"2":{"1":1,"2":2,"4":2,"6":3,"7":1,"8":1,"11":1,"13":1,"19":1,"23":1,"28":1,"32":5,"33":1,"39":1,"40":1,"41":2,"42":1,"47":1,"50":1,"56":1,"58":1,"59":2,"64":1,"66":1,"67":1,"73":1,"81":1,"87":1,"92":1,"94":1,"99":1,"101":1,"103":1,"104":1,"105":1,"107":1,"108":1,"109":1,"111":1,"114":1,"117":2,"118":1,"119":2,"120":1,"121":1,"122":4,"123":1,"124":2,"125":3,"126":2,"127":1,"128":1,"129":1,"130":1,"131":1,"134":1,"143":1,"147":1,"149":1,"150":2,"155":1,"157":1,"162":2,"163":2,"164":2,"166":1,"168":1}}]],"serializationVersion":2}';export{e as default}; diff --git a/assets/chunks/@localSearchIndexzh.dDuBvO1t.js b/assets/chunks/@localSearchIndexzh.dDuBvO1t.js new file mode 100644 index 00000000..744fcffb --- /dev/null +++ b/assets/chunks/@localSearchIndexzh.dDuBvO1t.js @@ -0,0 +1 @@ +const t='{"documentCount":20,"nextId":20,"documentIds":{"0":"/zh/concepts/identity-and-binding.html#账号模型与绑定","1":"/zh/concepts/identity-and-binding.html#账号模型","2":"/zh/concepts/identity-and-binding.html#接入平台与-bot","3":"/zh/concepts/identity-and-binding.html#为什么账号绑定是账号作用域","4":"/zh/concepts/identity-and-binding.html#账号绑定流程-当前共识","5":"/zh/concepts/identity-and-binding.html#bot-类型语义","6":"/zh/concepts/#核心概念","7":"/zh/concepts/#概念图","8":"/zh/concepts/#为什么重要","9":"/zh/concepts/#本章内容","10":"/zh/#memoh-文档","11":"/zh/#文档章节","12":"/zh/#面向文档贡献者","13":"/zh/#当前维护范围","14":"/zh/style/terminology.html#术语规范","15":"/zh/style/terminology.html#规范术语","16":"/zh/style/terminology.html#推荐写法","17":"/zh/style/terminology.html#禁用或不推荐写法","18":"/zh/style/terminology.html#示例","19":"/zh/style/terminology.html#自检清单"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[1,1,1],"1":[1,1,16],"2":[2,1,8],"3":[1,1,10],"4":[3,1,9],"5":[2,1,11],"6":[1,1,4],"7":[1,1,15],"8":[1,1,13],"9":[1,1,2],"10":[2,1,8],"11":[1,2,3],"12":[1,2,2],"13":[1,2,14],"14":[1,1,5],"15":[1,1,22],"16":[1,1,16],"17":[1,1,12],"18":[1,1,11],"19":[1,1,6]},"averageFieldLength":[1.25,1.15,9.400000000000002],"storedFields":{"0":{"title":"账号模型与绑定","titles":[]},"1":{"title":"账号模型","titles":["账号模型与绑定"]},"2":{"title":"接入平台与 Bot","titles":["账号模型与绑定"]},"3":{"title":"为什么账号绑定是账号作用域","titles":["账号模型与绑定"]},"4":{"title":"账号绑定流程(当前共识)","titles":["账号模型与绑定"]},"5":{"title":"Bot 类型语义","titles":["账号模型与绑定"]},"6":{"title":"核心概念","titles":[]},"7":{"title":"概念图","titles":["核心概念"]},"8":{"title":"为什么重要","titles":["核心概念"]},"9":{"title":"本章内容","titles":["核心概念"]},"10":{"title":"Memoh 文档","titles":[]},"11":{"title":"文档章节","titles":["Memoh 文档"]},"12":{"title":"面向文档贡献者","titles":["Memoh 文档"]},"13":{"title":"当前维护范围","titles":["Memoh 文档"]},"14":{"title":"术语规范","titles":[]},"15":{"title":"规范术语","titles":["术语规范"]},"16":{"title":"推荐写法","titles":["术语规范"]},"17":{"title":"禁用或不推荐写法","titles":["术语规范"]},"18":{"title":"示例","titles":["术语规范"]},"19":{"title":"自检清单","titles":["术语规范"]}},"dirtCount":0,"index":[["表述为接入平台",{"2":{"19":1}}],["叙述中是否将",{"2":{"19":1}}],["自检清单",{"0":{"19":1}}],["里的用户",{"2":{"18":1}}],["错误",{"2":{"18":1}}],["正确",{"2":{"18":2}}],["示例",{"0":{"18":1}}],["这类错误语义",{"2":{"17":1}}],["写出",{"2":{"17":1}}],["未区分系统账号与平台账号",{"2":{"17":1}}],["平台用户",{"2":{"17":1}}],["平台账号是用户在飞书上的账号",{"2":{"18":1}}],["平台账号是",{"2":{"17":1}}],["平台账号在支持的接入平台会话中发送",{"2":{"4":1}}],["平台账号在初始阶段可以不绑定系统账号",{"2":{"1":1}}],["平台账号",{"2":{"1":1,"7":1,"8":1,"13":1,"15":1,"16":2}}],["使用含糊表述如",{"2":{"17":1}}],["除非明确引用代码符号",{"2":{"17":1}}],["在概念文档中直接使用",{"2":{"17":1}}],["禁用或不推荐写法",{"0":{"17":1}}],["后续可只用中文术语",{"2":{"16":1}}],["首次出现保留技术别名",{"2":{"16":1}}],["描述业务行为时",{"2":{"16":1}}],["优先写",{"2":{"16":2}}],["面向产品语义时",{"2":{"16":1}}],["面向文档贡献者",{"0":{"12":1}}],["推荐写法",{"0":{"16":1}}],["用于账号绑定的一次性代码",{"2":{"15":1}}],["用户在外部接入平台上的账号",{"2":{"7":1,"15":1}}],["用户以自己的系统账号申请",{"2":{"4":1}}],["绑定码",{"2":{"15":1}}],["承载入站消息的外部平台",{"2":{"15":1}}],["内账号",{"2":{"15":1}}],["内部账号",{"2":{"1":1,"17":1}}],["规范术语",{"0":{"15":1}}],["适用对象",{"2":{"14":1}}],["指用户在外部平台上的真实账号",{"2":{"13":1}}],["说明",{"2":{"13":1}}],["说明账号绑定与",{"2":{"13":1}}],["访问控制之间的关系",{"2":{"13":1}}],["访问控制保持独立",{"2":{"3":1}}],["解释为什么账号绑定是账号作用域",{"2":{"13":1}}],["区分系统账号与平台账号",{"2":{"13":1}}],["当前文档先聚焦账号语义与访问控制",{"2":{"13":1}}],["当前维护范围",{"0":{"13":1}}],["当前共识",{"0":{"4":1}}],["术语规范",{"0":{"14":1},"1":{"15":1,"16":1,"17":1,"18":1,"19":1},"2":{"12":1}}],["术语说明",{"2":{"8":1}}],["快速开始",{"2":{"11":1}}],["actor",{"2":{"16":1,"17":1,"18":1}}],["agent",{"2":{"10":1}}],["ai",{"2":{"10":1}}],["容器化的",{"2":{"10":1}}],["长记忆",{"2":{"10":1}}],["文档编写者与维护者",{"2":{"14":1}}],["文档章节",{"0":{"11":1}}],["文档",{"0":{"10":1},"1":{"11":1,"12":1,"13":1}}],["文档中的",{"2":{"8":1}}],["如飞书账号",{"2":{"8":1}}],["统一指用户在对应平台上的真实账号",{"2":{"8":1}}],["授权与账号绑定解耦",{"2":{"8":1}}],["并将",{"2":{"8":1}}],["因此我们明确区分平台账号与系统账号",{"2":{"8":1}}],["需要同时处理外部接入平台消息与系统内权限控制",{"2":{"8":1}}],["为什么重要",{"0":{"8":1}}],["为什么账号绑定是账号作用域",{"0":{"3":1}}],["把平台账号关联到系统账号的过程",{"2":{"7":1,"15":1}}],["例如用户的飞书账号",{"2":{"7":1}}],["例如飞书账号",{"2":{"1":1,"13":1}}],["概念图",{"0":{"7":1}}],["的核心账号与访问概念",{"2":{"6":1}}],["的职责是完成这两类账号的关联",{"2":{"1":1}}],["本页用于统一写作语义",{"2":{"14":1}}],["本章内容",{"0":{"9":1}}],["本章节用于定义",{"2":{"6":1}}],["本文档记录的是产品语义与共识方向",{"2":{"5":1}}],["核心概念",{"0":{"6":1},"1":{"7":1,"8":1,"9":1},"2":{"11":1}}],["部分运行时细节仍可能处于收敛阶段",{"2":{"5":1}}],["注",{"2":{"5":1}}],["owner",{"2":{"5":1}}],["语义上应为单",{"2":{"5":1}}],["personal",{"2":{"5":1}}],["public",{"2":{"5":1}}],["支持成员协作语义",{"2":{"5":1}}],["类型语义",{"0":{"5":1}}],["成员与授权由独立流程处理",{"2":{"4":1}}],["完成平台账号到系统账号的绑定",{"2":{"4":1}}],["code",{"2":{"4":3,"15":1}}],["channel",{"2":{"2":1,"15":1,"16":1,"19":1}}],["channelidentity",{"2":{"1":1,"7":1,"15":1,"16":1}}],["可演进",{"2":{"3":1}}],["让",{"2":{"3":1}}],["不要直接写",{"2":{"16":2}}],["不指本项目内部账号",{"2":{"8":1}}],["不应依赖成员机制",{"2":{"5":1}}],["不把账号绑定与成员管理语义耦合在一起",{"2":{"3":1}}],["不是面向最终用户的功能说明",{"2":{"14":1}}],["不是",{"2":{"1":1,"7":1,"13":1,"15":1,"18":1}}],["它只负责平台账号与系统账号的绑定",{"2":{"3":1}}],["资源权限",{"2":{"3":1}}],["而不是直接发放",{"2":{"3":1}}],["账号绑定用于把平台账号关联到系统账号",{"2":{"18":1}}],["账号绑定",{"2":{"7":1,"15":1,"16":1}}],["账号绑定流程",{"0":{"4":1}}],["账号绑定的目标是建立账号归属关系",{"2":{"3":1}}],["账号模型",{"0":{"1":1}}],["账号模型与绑定",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1},"2":{"9":1}}],["入站消息由平台账号产生",{"2":{"2":1}}],["由系统账号管理的资源与授权边界",{"2":{"15":1}}],["由系统账号管理的资源与访问边界",{"2":{"7":1}}],["由系统账号管理",{"2":{"2":1}}],["接入平台",{"2":{"2":1,"15":1,"16":1}}],["接入平台与",{"0":{"2":1}}],["bot",{"0":{"2":1,"5":1},"2":{"2":2,"3":2,"4":1,"5":2,"7":1,"8":1,"13":1,"15":1}}],["bind",{"2":{"1":1,"4":1,"7":1,"15":2,"16":1}}],["系统",{"2":{"10":1}}],["系统校验",{"2":{"4":1}}],["系统内账号",{"2":{"1":1,"7":2,"15":1}}],["系统账号",{"2":{"1":1,"7":1,"13":1,"15":1,"16":1,"18":1}}],["是否仅在首处保留技术别名",{"2":{"19":1}}],["是否明确区分了系统账号与平台账号",{"2":{"19":1}}],["是一个多成员",{"2":{"10":1}}],["是系统内的授权与资源边界",{"2":{"2":1}}],["是入站消息来源",{"2":{"2":1}}],["是",{"2":{"1":1,"18":1}}],["是用户在外部接入平台上的账号",{"2":{"1":1}}],["user",{"2":{"1":1,"7":1,"15":1,"16":1}}],["将平台账号与系统账号视为两类不同实体",{"2":{"1":1}}],["memoh",{"0":{"10":1},"1":{"11":1,"12":1,"13":1},"2":{"1":3,"6":1,"7":2,"8":1,"10":1,"13":1,"15":2,"17":1,"18":2}}]],"serializationVersion":2}';export{t as default}; diff --git a/assets/chunks/@localSearchIndexzh.hHhvpH9g.js b/assets/chunks/@localSearchIndexzh.hHhvpH9g.js deleted file mode 100644 index 9f19ddbc..00000000 --- a/assets/chunks/@localSearchIndexzh.hHhvpH9g.js +++ /dev/null @@ -1 +0,0 @@ -const t='{"documentCount":20,"nextId":20,"documentIds":{"0":"/zh/concepts/identity-and-binding.html#账号模型与绑定","1":"/zh/concepts/identity-and-binding.html#账号模型","2":"/zh/concepts/identity-and-binding.html#接入平台与-bot","3":"/zh/concepts/identity-and-binding.html#为什么账号绑定是账号作用域","4":"/zh/concepts/identity-and-binding.html#账号绑定流程-当前共识","5":"/zh/concepts/identity-and-binding.html#bot-类型语义","6":"/zh/#memoh-文档","7":"/zh/#文档章节","8":"/zh/#面向文档贡献者","9":"/zh/#当前维护范围","10":"/zh/concepts/#核心概念","11":"/zh/concepts/#概念图","12":"/zh/concepts/#为什么重要","13":"/zh/concepts/#本章内容","14":"/zh/style/terminology.html#术语规范","15":"/zh/style/terminology.html#规范术语","16":"/zh/style/terminology.html#推荐写法","17":"/zh/style/terminology.html#禁用或不推荐写法","18":"/zh/style/terminology.html#示例","19":"/zh/style/terminology.html#自检清单"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[1,1,1],"1":[1,1,16],"2":[2,1,8],"3":[1,1,10],"4":[3,1,9],"5":[2,1,11],"6":[2,1,8],"7":[1,2,3],"8":[1,2,2],"9":[1,2,14],"10":[1,1,4],"11":[1,1,15],"12":[1,1,13],"13":[1,1,2],"14":[1,1,5],"15":[1,1,22],"16":[1,1,16],"17":[1,1,12],"18":[1,1,11],"19":[1,1,6]},"averageFieldLength":[1.25,1.15,9.400000000000002],"storedFields":{"0":{"title":"账号模型与绑定","titles":[]},"1":{"title":"账号模型","titles":["账号模型与绑定"]},"2":{"title":"接入平台与 Bot","titles":["账号模型与绑定"]},"3":{"title":"为什么账号绑定是账号作用域","titles":["账号模型与绑定"]},"4":{"title":"账号绑定流程(当前共识)","titles":["账号模型与绑定"]},"5":{"title":"Bot 类型语义","titles":["账号模型与绑定"]},"6":{"title":"Memoh 文档","titles":[]},"7":{"title":"文档章节","titles":["Memoh 文档"]},"8":{"title":"面向文档贡献者","titles":["Memoh 文档"]},"9":{"title":"当前维护范围","titles":["Memoh 文档"]},"10":{"title":"核心概念","titles":[]},"11":{"title":"概念图","titles":["核心概念"]},"12":{"title":"为什么重要","titles":["核心概念"]},"13":{"title":"本章内容","titles":["核心概念"]},"14":{"title":"术语规范","titles":[]},"15":{"title":"规范术语","titles":["术语规范"]},"16":{"title":"推荐写法","titles":["术语规范"]},"17":{"title":"禁用或不推荐写法","titles":["术语规范"]},"18":{"title":"示例","titles":["术语规范"]},"19":{"title":"自检清单","titles":["术语规范"]}},"dirtCount":0,"index":[["表述为接入平台",{"2":{"19":1}}],["叙述中是否将",{"2":{"19":1}}],["自检清单",{"0":{"19":1}}],["里的用户",{"2":{"18":1}}],["错误",{"2":{"18":1}}],["正确",{"2":{"18":2}}],["示例",{"0":{"18":1}}],["这类错误语义",{"2":{"17":1}}],["写出",{"2":{"17":1}}],["未区分系统账号与平台账号",{"2":{"17":1}}],["平台用户",{"2":{"17":1}}],["平台账号是用户在飞书上的账号",{"2":{"18":1}}],["平台账号是",{"2":{"17":1}}],["平台账号在支持的接入平台会话中发送",{"2":{"4":1}}],["平台账号在初始阶段可以不绑定系统账号",{"2":{"1":1}}],["平台账号",{"2":{"1":1,"9":1,"11":1,"12":1,"15":1,"16":2}}],["使用含糊表述如",{"2":{"17":1}}],["除非明确引用代码符号",{"2":{"17":1}}],["在概念文档中直接使用",{"2":{"17":1}}],["禁用或不推荐写法",{"0":{"17":1}}],["后续可只用中文术语",{"2":{"16":1}}],["首次出现保留技术别名",{"2":{"16":1}}],["描述业务行为时",{"2":{"16":1}}],["优先写",{"2":{"16":2}}],["面向产品语义时",{"2":{"16":1}}],["面向文档贡献者",{"0":{"8":1}}],["推荐写法",{"0":{"16":1}}],["用于账号绑定的一次性代码",{"2":{"15":1}}],["用户在外部接入平台上的账号",{"2":{"11":1,"15":1}}],["用户以自己的系统账号申请",{"2":{"4":1}}],["绑定码",{"2":{"15":1}}],["承载入站消息的外部平台",{"2":{"15":1}}],["内账号",{"2":{"15":1}}],["内部账号",{"2":{"1":1,"17":1}}],["规范术语",{"0":{"15":1}}],["适用对象",{"2":{"14":1}}],["如飞书账号",{"2":{"12":1}}],["统一指用户在对应平台上的真实账号",{"2":{"12":1}}],["术语说明",{"2":{"12":1}}],["术语规范",{"0":{"14":1},"1":{"15":1,"16":1,"17":1,"18":1,"19":1},"2":{"8":1}}],["授权与账号绑定解耦",{"2":{"12":1}}],["并将",{"2":{"12":1}}],["因此我们明确区分平台账号与系统账号",{"2":{"12":1}}],["需要同时处理外部接入平台消息与系统内权限控制",{"2":{"12":1}}],["为什么重要",{"0":{"12":1}}],["为什么账号绑定是账号作用域",{"0":{"3":1}}],["把平台账号关联到系统账号的过程",{"2":{"11":1,"15":1}}],["例如用户的飞书账号",{"2":{"11":1}}],["例如飞书账号",{"2":{"1":1,"9":1}}],["概念图",{"0":{"11":1}}],["的核心账号与访问概念",{"2":{"10":1}}],["的职责是完成这两类账号的关联",{"2":{"1":1}}],["本页用于统一写作语义",{"2":{"14":1}}],["本章内容",{"0":{"13":1}}],["本章节用于定义",{"2":{"10":1}}],["本文档记录的是产品语义与共识方向",{"2":{"5":1}}],["指用户在外部平台上的真实账号",{"2":{"9":1}}],["说明",{"2":{"9":1}}],["说明账号绑定与",{"2":{"9":1}}],["访问控制之间的关系",{"2":{"9":1}}],["访问控制保持独立",{"2":{"3":1}}],["解释为什么账号绑定是账号作用域",{"2":{"9":1}}],["区分系统账号与平台账号",{"2":{"9":1}}],["当前文档先聚焦账号语义与访问控制",{"2":{"9":1}}],["当前维护范围",{"0":{"9":1}}],["当前共识",{"0":{"4":1}}],["核心概念",{"0":{"10":1},"1":{"11":1,"12":1,"13":1},"2":{"7":1}}],["快速开始",{"2":{"7":1}}],["actor",{"2":{"16":1,"17":1,"18":1}}],["agent",{"2":{"6":1}}],["ai",{"2":{"6":1}}],["容器化的",{"2":{"6":1}}],["长记忆",{"2":{"6":1}}],["文档编写者与维护者",{"2":{"14":1}}],["文档中的",{"2":{"12":1}}],["文档章节",{"0":{"7":1}}],["文档",{"0":{"6":1},"1":{"7":1,"8":1,"9":1}}],["部分运行时细节仍可能处于收敛阶段",{"2":{"5":1}}],["注",{"2":{"5":1}}],["owner",{"2":{"5":1}}],["语义上应为单",{"2":{"5":1}}],["personal",{"2":{"5":1}}],["public",{"2":{"5":1}}],["支持成员协作语义",{"2":{"5":1}}],["类型语义",{"0":{"5":1}}],["成员与授权由独立流程处理",{"2":{"4":1}}],["完成平台账号到系统账号的绑定",{"2":{"4":1}}],["code",{"2":{"4":3,"15":1}}],["channel",{"2":{"2":1,"15":1,"16":1,"19":1}}],["channelidentity",{"2":{"1":1,"11":1,"15":1,"16":1}}],["可演进",{"2":{"3":1}}],["让",{"2":{"3":1}}],["不要直接写",{"2":{"16":2}}],["不指本项目内部账号",{"2":{"12":1}}],["不应依赖成员机制",{"2":{"5":1}}],["不把账号绑定与成员管理语义耦合在一起",{"2":{"3":1}}],["不是面向最终用户的功能说明",{"2":{"14":1}}],["不是",{"2":{"1":1,"9":1,"11":1,"15":1,"18":1}}],["它只负责平台账号与系统账号的绑定",{"2":{"3":1}}],["资源权限",{"2":{"3":1}}],["而不是直接发放",{"2":{"3":1}}],["账号绑定用于把平台账号关联到系统账号",{"2":{"18":1}}],["账号绑定",{"2":{"11":1,"15":1,"16":1}}],["账号绑定流程",{"0":{"4":1}}],["账号绑定的目标是建立账号归属关系",{"2":{"3":1}}],["账号模型",{"0":{"1":1}}],["账号模型与绑定",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1},"2":{"13":1}}],["入站消息由平台账号产生",{"2":{"2":1}}],["由系统账号管理的资源与授权边界",{"2":{"15":1}}],["由系统账号管理的资源与访问边界",{"2":{"11":1}}],["由系统账号管理",{"2":{"2":1}}],["接入平台",{"2":{"2":1,"15":1,"16":1}}],["接入平台与",{"0":{"2":1}}],["bot",{"0":{"2":1,"5":1},"2":{"2":2,"3":2,"4":1,"5":2,"9":1,"11":1,"12":1,"15":1}}],["bind",{"2":{"1":1,"4":1,"11":1,"15":2,"16":1}}],["系统",{"2":{"6":1}}],["系统校验",{"2":{"4":1}}],["系统内账号",{"2":{"1":1,"11":2,"15":1}}],["系统账号",{"2":{"1":1,"9":1,"11":1,"15":1,"16":1,"18":1}}],["是否仅在首处保留技术别名",{"2":{"19":1}}],["是否明确区分了系统账号与平台账号",{"2":{"19":1}}],["是一个多成员",{"2":{"6":1}}],["是系统内的授权与资源边界",{"2":{"2":1}}],["是入站消息来源",{"2":{"2":1}}],["是",{"2":{"1":1,"18":1}}],["是用户在外部接入平台上的账号",{"2":{"1":1}}],["user",{"2":{"1":1,"11":1,"15":1,"16":1}}],["将平台账号与系统账号视为两类不同实体",{"2":{"1":1}}],["memoh",{"0":{"6":1},"1":{"7":1,"8":1,"9":1},"2":{"1":3,"6":1,"9":1,"10":1,"11":2,"12":1,"15":2,"17":1,"18":2}}]],"serializationVersion":2}';export{t as default}; diff --git a/assets/chunks/VPLocalSearchBox.ClZZAp-8.js b/assets/chunks/VPLocalSearchBox.CkO_Q3B1.js similarity index 99% rename from assets/chunks/VPLocalSearchBox.ClZZAp-8.js rename to assets/chunks/VPLocalSearchBox.CkO_Q3B1.js index fef8436a..cca6927e 100644 --- a/assets/chunks/VPLocalSearchBox.ClZZAp-8.js +++ b/assets/chunks/VPLocalSearchBox.CkO_Q3B1.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.DEqXEGcv.js";import{u as an,c as on}from"./theme.Ws_3DOcl.js";const ln={root:()=>nt(()=>import("./@localSearchIndexroot.YMGcEMuZ.js"),[]),zh:()=>nt(()=>import("./@localSearchIndexzh.hHhvpH9g.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.ePeAWSvT.js";import{u as an,c as on}from"./theme.5W6lE5dH.js";const ln={root:()=>nt(()=>import("./@localSearchIndexroot.DwgVjkgi.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.DEqXEGcv.js b/assets/chunks/framework.ePeAWSvT.js similarity index 90% rename from assets/chunks/framework.DEqXEGcv.js rename to assets/chunks/framework.ePeAWSvT.js index 0c6d53e6..e677b467 100644 --- a/assets/chunks/framework.DEqXEGcv.js +++ b/assets/chunks/framework.ePeAWSvT.js @@ -1,19 +1,19 @@ /** -* @vue/shared v3.5.28 +* @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.28 +* @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,R=r===!0?1/0:r;d=()=>Qe(g(),R)}const D=Ri(),P=()=>{a.stop(),D&&D.active&&qs(D.effects,a)};if(i&&t){const g=t;t=(...R)=>{g(...R),P()}}let I=y?new Array(e.length).fill(vn):vn;const p=g=>{if(!(!(a.flags&1)||!a.dirty&&!g))if(t){const R=a.run();if(r||b||(y?R.some((j,M)=>lt(j,I[M])):lt(R,I))){m&&m();const j=mt;mt=a;try{const M=[R,I===vn?void 0:y&&I[0]===vn?[]:I,_];I=R,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 R of g)R();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.28 +**/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 R=t.el=y(""),j=t.anchor=y("");_(R,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 R=t.anchor=e.anchor,j=t.target=e.target,M=t.targetAnchor=e.targetAnchor,k=Xt(e.props),T=k?n:j,O=k?R: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,R,u,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const A=t.target=Ls(t.props,b);A&&_n(t,A,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),R=so(n,e),j=(T,O)=>{T&&je(T,s,9,O)},M=(T,O)=>{const A=O[1];j(T,O),K(T)?T.every(w=>w.length<=1)&&A():T.length<=1&&A()},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 A=R[g];A&&yt(e,A)&&A.el[Ke]&&A.el[Ke](),j(O,[T])},enter(T){let O=u,A=a,w=d;if(!n.isMounted)if(i)O=P||u,A=I||a,w=p||d;else return;let H=!1;T[Ut]=oe=>{H||(H=!0,oe?j(w,[T]):j(A,[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 A=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,R[A]===e&&delete R[A])};const H=T[Ke].bind(null,!1);R[A]=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,R,j,M,k=!1)=>{k=k||!!g.dynamicChildren;const T=Pt(p)&&p.data==="[",O=()=>y(p,g,R,j,M,T),{type:A,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(A){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,R)):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:A,shapeFlag:w,dirs:H,transition:Y}=g,oe=T==="input"||T==="option";if(oe||A!==-1){H&&Be(g,null,R,"created");let U=!1;if(I(p)){U=Ao(null,Y)&&R&&R.vnode.props&&R.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,R),g.el=p=V}if(w&16&&!(O&&(O.innerHTML||O.textContent))){let V=_(p.firstChild,g,p,R,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]===` +**/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||A&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,R)}else if(O.onClick)s(p,"onClick",null,O.onClick,void 0,R);else if(A&4&&ct(O.style))for(const V in O.style)O.style[V]}let X;(X=O&&O.onVnodeBeforeMount)&&Oe(X,R,g),H&&Be(g,null,R,"beforeMount"),((X=O&&O.onVnodeMounted)||H||U)&&Po(()=>{X&&Oe(X,R,g),U&&Y.enter(p),H&&Be(g,null,R,"mounted")},j)}return p.nextSibling},_=(p,g,R,j,M,k,T)=>{T=T||!!g.dynamicChildren;const O=g.children,A=O.length;for(let w=0;w{const{slotScopeIds:T}=g;T&&(M=M?M.concat(T):T);const O=o(p),A=_(i(p),g,O,R,j,M,k);return A&&Pt(A)&&A.data==="]"?i(g.anchor=A):(Rt(),c(g.anchor=u("]"),O,A),A)},y=(p,g,R,j,M,k)=>{if(wn(p.parentElement,1)||Rt(),g.el=null,k){const A=D(p);for(;;){const w=i(p);if(w&&w!==A)l(w);else break}}const T=i(p),O=o(p);return l(p),n(null,g,O,T,R,j,bn(O),M),R&&(R.vnode.el=g.el,yo(R,g.el)),T},D=(p,g="[",R="]")=>{let j=0;for(;p;)if(p=i(p),p&&Pt(p)&&(p.data===g&&j++,p.data===R)){if(j===0)return i(p);j--}return p},P=(p,g,R)=>{const j=g.parentNode;j&&j.replaceChild(p,g);let M=R;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,R=>yc(b,R));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:R,renderTracked:j,renderTriggered:M,errorCaptured:k,serverPrefetch:T,expose:O,inheritAttrs:A,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={});R&&e.render===qe&&(e.render=R),A!=null&&(e.inheritAttrs=A),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,R=g;P=Pe(u.call(R,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:R}=p;g.length&&R&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?R(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)},R=(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)A(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.28";/** -* @vue/runtime-dom v3.5.28 +`)&&(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:R,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()},A=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:A(!1),onAppear:A(!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(R,[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:_=A=>{console.error(A)},initOnMounted:b}=s,y=(a?Ee:He)(typeof t=="function"?t():t),D=ie(()=>ce(e));if(!n)try{n=Jo("getDefaultStorage",()=>{var A;return(A=Ve)==null?void 0:A.localStorage})()}catch(A){_(A)}if(!n)return y;const P=ce(t),I=ou(P),p=(r=s.serializer)!=null?r:lu[I],{pause:g,resume:R}=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(A,w){if(d){const H={key:D.value,oldValue:A,newValue:w,storageArea:n};d.dispatchEvent(n instanceof Storage?new StorageEvent("storage",H):new CustomEvent(fi,{detail:H}))}}function M(A){try{const w=n.getItem(D.value);if(A==null)j(w,null),n.removeItem(D.value);else{const H=p.write(A);w!==H&&(n.setItem(D.value,H),j(w,H))}}catch(w){_(w)}}function k(A){const w=A?A.newValue:n.getItem(D.value);if(w==null)return c&&P!=null&&n.setItem(D.value,p.write(P)),P;if(!A&&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(A){if(!(A&&A.storageArea!==n)){if(A&&A.key==null){y.value=P;return}if(!(A&&A.key!==D.value)){g();try{(A==null?void 0:A.newValue)!==p.write(y.value)&&(y.value=k(A))}catch(w){_(w)}finally{A?zn(R):R()}}}}function O(A){T(A.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,R,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(R==="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:R,value:j};if(k.size===0&&T.size===0&&O===null)return;let A;a&&(A=r.document.createElement("style"),A.appendChild(document.createTextNode(cu)),r.document.head.appendChild(A));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(A).opacity,document.head.removeChild(A))});function P(g){var R;D(t,n,(R=d[g])!=null?R: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,A,w;if(!u)return;const H=ce(e);if(!H)return;(A=H instanceof Document?u.document.body:H)==null||A.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),R=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:A,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"&&A==="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"&&A==="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;R(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;R(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&&R(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}; +**/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.Ws_3DOcl.js b/assets/chunks/theme.5W6lE5dH.js similarity index 99% rename from assets/chunks/theme.Ws_3DOcl.js rename to assets/chunks/theme.5W6lE5dH.js index 8bbdc72f..fb3b72dc 100644 --- a/assets/chunks/theme.Ws_3DOcl.js +++ b/assets/chunks/theme.5W6lE5dH.js @@ -1,2 +1,2 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPLocalSearchBox.ClZZAp-8.js","assets/chunks/framework.DEqXEGcv.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.DEqXEGcv.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-aaa6e838"]]),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-76a26b96"]]);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-dfc2df69"]]),$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-d2620846"]]),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-fad92edc"]]);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-cdbe67d9"]]),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-2b0b76c8"]]),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-b1a17dd0"]]),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-988d8479"]]),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-1a1c4531"]]),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-6c297114"]]),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-f0a34cf4"]]),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-424d2d34"]]),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-a20d14dd"]]),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-dd1a349e"]]),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-16303541"]]),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-8c5f7ad8"]]);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-362e5f2b"]]),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-de6ccdac"]]);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-1beb589f"]]),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-1848b25f"]]),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-a1c075d9"]]),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-19a53f1d"]]),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-e535638f"]]),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-74252e80"]]),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-5a42a220"]]),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-7d65ca86"]]),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-98d4351f"]]),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-420d3291"]]),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-666f89b0"]]),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-ac0ab563"]]),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-f3818e60"]]);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.ClZZAp-8.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-9e324bde"]]),$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-d49e6955"]]),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-74a2735f"]]),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-ce4862ea"]]),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-5287c39b"]]),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-f75638c5"]]),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-f7c84cfd"]]),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-84c01ec6"]]),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-8b1f9e52"]]),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-8b746c2c"]]),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-483b9559"]]),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-714aa3bc"]]),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-d36b375d"]]),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-195160a8"]]),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-cca7f7fa"]]),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-80284609"]]),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-c2080d03"]]),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.CkO_Q3B1.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-aaa6e838"]]),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-76a26b96"]]);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-dfc2df69"]]),$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-d2620846"]]),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-fad92edc"]]);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-cdbe67d9"]]),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-2b0b76c8"]]),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-b1a17dd0"]]),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-988d8479"]]),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-1a1c4531"]]),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-6c297114"]]),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-f0a34cf4"]]),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-424d2d34"]]),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-a20d14dd"]]),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-dd1a349e"]]),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-16303541"]]),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-8c5f7ad8"]]);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-362e5f2b"]]),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-de6ccdac"]]);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-1beb589f"]]),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-1848b25f"]]),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-a1c075d9"]]),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-19a53f1d"]]),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-e535638f"]]),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-74252e80"]]),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-5a42a220"]]),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-7d65ca86"]]),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-98d4351f"]]),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-420d3291"]]),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-666f89b0"]]),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-ac0ab563"]]),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-f3818e60"]]);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.CkO_Q3B1.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-9e324bde"]]),$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-d49e6955"]]),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-74a2735f"]]),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-ce4862ea"]]),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-5287c39b"]]),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-f75638c5"]]),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-f7c84cfd"]]),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-84c01ec6"]]),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-8b1f9e52"]]),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-8b746c2c"]]),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-483b9559"]]),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-714aa3bc"]]),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-d36b375d"]]),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-195160a8"]]),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-cca7f7fa"]]),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-80284609"]]),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-c2080d03"]]),xs={Layout:Ns,enhanceApp:({app:e})=>{e.component("Badge",Re)}};export{uo as c,xs as t,L as u}; diff --git a/assets/cli_auth.md.DPl-4zFk.js b/assets/cli_auth.md.C8ws3CHD.js similarity index 94% rename from assets/cli_auth.md.DPl-4zFk.js rename to assets/cli_auth.md.C8ws3CHD.js index 01bc2fa6..440f336a 100644 --- a/assets/cli_auth.md.DPl-4zFk.js +++ b/assets/cli_auth.md.C8ws3CHD.js @@ -1 +1 @@ -import{_ as e,o as s,c as t,ag as i}from"./chunks/framework.DEqXEGcv.js";const u=JSON.parse('{"title":"Auth Commands","description":"","frontmatter":{},"headers":[],"relativePath":"cli/auth.md","filePath":"cli/auth.md","lastUpdated":1771161622000}'),o={name:"cli/auth.md"};function n(l,a,h,r,d,p){return s(),t("div",null,[...a[0]||(a[0]=[i('

Auth Commands

login

Log in to the Memoh server. Prompts for username and password, then stores the JWT token in ~/.memoh/token.json.

bash
memoh login

Interactive prompts:

  • Username
  • Password

logout

Clear the stored token and log out.

bash
memoh logout

whoami

Show the current logged-in user (username, display name, user ID, role). Falls back to token info if the API call fails.

bash
memoh whoami
',12)])])}const m=e(o,[["render",n]]);export{u as __pageData,m as default}; +import{_ as e,o as s,c as t,ag as i}from"./chunks/framework.ePeAWSvT.js";const u=JSON.parse('{"title":"Auth Commands","description":"","frontmatter":{},"headers":[],"relativePath":"cli/auth.md","filePath":"cli/auth.md","lastUpdated":1771161622000}'),o={name:"cli/auth.md"};function n(l,a,h,r,d,p){return s(),t("div",null,[...a[0]||(a[0]=[i('

Auth Commands

login

Log in to the Memoh server. Prompts for username and password, then stores the JWT token in ~/.memoh/token.json.

bash
memoh login

Interactive prompts:

  • Username
  • Password

logout

Clear the stored token and log out.

bash
memoh logout

whoami

Show the current logged-in user (username, display name, user ID, role). Falls back to token info if the API call fails.

bash
memoh whoami
',12)])])}const m=e(o,[["render",n]]);export{u as __pageData,m as default}; diff --git a/assets/cli_auth.md.DPl-4zFk.lean.js b/assets/cli_auth.md.C8ws3CHD.lean.js similarity index 69% rename from assets/cli_auth.md.DPl-4zFk.lean.js rename to assets/cli_auth.md.C8ws3CHD.lean.js index f0f43e0f..4b920807 100644 --- a/assets/cli_auth.md.DPl-4zFk.lean.js +++ b/assets/cli_auth.md.C8ws3CHD.lean.js @@ -1 +1 @@ -import{_ as e,o as s,c as t,ag as i}from"./chunks/framework.DEqXEGcv.js";const u=JSON.parse('{"title":"Auth Commands","description":"","frontmatter":{},"headers":[],"relativePath":"cli/auth.md","filePath":"cli/auth.md","lastUpdated":1771161622000}'),o={name:"cli/auth.md"};function n(l,a,h,r,d,p){return s(),t("div",null,[...a[0]||(a[0]=[i("",12)])])}const m=e(o,[["render",n]]);export{u as __pageData,m as default}; +import{_ as e,o as s,c as t,ag as i}from"./chunks/framework.ePeAWSvT.js";const u=JSON.parse('{"title":"Auth Commands","description":"","frontmatter":{},"headers":[],"relativePath":"cli/auth.md","filePath":"cli/auth.md","lastUpdated":1771161622000}'),o={name:"cli/auth.md"};function n(l,a,h,r,d,p){return s(),t("div",null,[...a[0]||(a[0]=[i("",12)])])}const m=e(o,[["render",n]]);export{u as __pageData,m as default}; diff --git a/assets/cli_bot.md.B2YOOp9H.js b/assets/cli_bot.md.BnhEB6FG.js similarity index 98% rename from assets/cli_bot.md.B2YOOp9H.js rename to assets/cli_bot.md.BnhEB6FG.js index f3410505..2f11c0f5 100644 --- a/assets/cli_bot.md.B2YOOp9H.js +++ b/assets/cli_bot.md.BnhEB6FG.js @@ -1 +1 @@ -import{_ as a,o as e,c as s,ag as i}from"./chunks/framework.DEqXEGcv.js";const b=JSON.parse('{"title":"Bot Commands","description":"","frontmatter":{},"headers":[],"relativePath":"cli/bot.md","filePath":"cli/bot.md","lastUpdated":1771161622000}'),d={name:"cli/bot.md"};function o(h,t,l,n,p,r){return e(),s("div",null,[...t[0]||(t[0]=[i('

Bot Commands

Manage bots and chat with them.

bot list

List all bots. Admins can filter by owner.

bash
memoh bot list [options]
OptionDescription
--owner <user_id>Filter by owner user ID (admin only)

bot create

Create a new bot. Prompts for type and optionally name.

bash
memoh bot create [options]
OptionDescription
--type <type>personal or public
--name <name>Display name
--avatar <url>Avatar URL
--activeSet bot active
--inactiveSet bot inactive

bot update

Update bot info. Bot ID can be passed as argument or selected interactively.

bash
memoh bot update [id] [options]
OptionDescription
--name <name>Display name
--avatar <url>Avatar URL
--activeSet bot active
--inactiveSet bot inactive

bot delete

Delete a bot. Asks for confirmation.

bash
memoh bot delete [id]

bot chat

Start an interactive streaming chat with a bot.

bash
memoh bot chat [id]

Type messages and press Enter. Type exit to quit.

bot set-model

Enable a model for a bot (chat, memory, or embedding).

bash
memoh bot set-model [id] [options]
OptionDescription
--as <usage>chat, memory, or embedding
--model <model_id>Model ID

Example:

bash
memoh bot set-model my-bot-id --as chat --model gpt-4
',27)])])}const k=a(d,[["render",o]]);export{b as __pageData,k as default}; +import{_ as a,o as e,c as s,ag as i}from"./chunks/framework.ePeAWSvT.js";const b=JSON.parse('{"title":"Bot Commands","description":"","frontmatter":{},"headers":[],"relativePath":"cli/bot.md","filePath":"cli/bot.md","lastUpdated":1771161622000}'),d={name:"cli/bot.md"};function o(h,t,l,n,p,r){return e(),s("div",null,[...t[0]||(t[0]=[i('

Bot Commands

Manage bots and chat with them.

bot list

List all bots. Admins can filter by owner.

bash
memoh bot list [options]
OptionDescription
--owner <user_id>Filter by owner user ID (admin only)

bot create

Create a new bot. Prompts for type and optionally name.

bash
memoh bot create [options]
OptionDescription
--type <type>personal or public
--name <name>Display name
--avatar <url>Avatar URL
--activeSet bot active
--inactiveSet bot inactive

bot update

Update bot info. Bot ID can be passed as argument or selected interactively.

bash
memoh bot update [id] [options]
OptionDescription
--name <name>Display name
--avatar <url>Avatar URL
--activeSet bot active
--inactiveSet bot inactive

bot delete

Delete a bot. Asks for confirmation.

bash
memoh bot delete [id]

bot chat

Start an interactive streaming chat with a bot.

bash
memoh bot chat [id]

Type messages and press Enter. Type exit to quit.

bot set-model

Enable a model for a bot (chat, memory, or embedding).

bash
memoh bot set-model [id] [options]
OptionDescription
--as <usage>chat, memory, or embedding
--model <model_id>Model ID

Example:

bash
memoh bot set-model my-bot-id --as chat --model gpt-4
',27)])])}const k=a(d,[["render",o]]);export{b as __pageData,k as default}; diff --git a/assets/cli_bot.md.B2YOOp9H.lean.js b/assets/cli_bot.md.BnhEB6FG.lean.js similarity index 69% rename from assets/cli_bot.md.B2YOOp9H.lean.js rename to assets/cli_bot.md.BnhEB6FG.lean.js index 622a81ad..886668cd 100644 --- a/assets/cli_bot.md.B2YOOp9H.lean.js +++ b/assets/cli_bot.md.BnhEB6FG.lean.js @@ -1 +1 @@ -import{_ as a,o as e,c as s,ag as i}from"./chunks/framework.DEqXEGcv.js";const b=JSON.parse('{"title":"Bot Commands","description":"","frontmatter":{},"headers":[],"relativePath":"cli/bot.md","filePath":"cli/bot.md","lastUpdated":1771161622000}'),d={name:"cli/bot.md"};function o(h,t,l,n,p,r){return e(),s("div",null,[...t[0]||(t[0]=[i("",27)])])}const k=a(d,[["render",o]]);export{b as __pageData,k as default}; +import{_ as a,o as e,c as s,ag as i}from"./chunks/framework.ePeAWSvT.js";const b=JSON.parse('{"title":"Bot Commands","description":"","frontmatter":{},"headers":[],"relativePath":"cli/bot.md","filePath":"cli/bot.md","lastUpdated":1771161622000}'),d={name:"cli/bot.md"};function o(h,t,l,n,p,r){return e(),s("div",null,[...t[0]||(t[0]=[i("",27)])])}const k=a(d,[["render",o]]);export{b as __pageData,k as default}; diff --git a/assets/cli_channel.md.T-qsPRZ9.js b/assets/cli_channel.md.BBEJiWrG.js similarity index 98% rename from assets/cli_channel.md.T-qsPRZ9.js rename to assets/cli_channel.md.BBEJiWrG.js index 642b9bbc..73c59d27 100644 --- a/assets/cli_channel.md.T-qsPRZ9.js +++ b/assets/cli_channel.md.BBEJiWrG.js @@ -1 +1 @@ -import{_ as a,o as e,c as i,ag as s}from"./chunks/framework.DEqXEGcv.js";const k=JSON.parse('{"title":"Channel Commands","description":"","frontmatter":{},"headers":[],"relativePath":"cli/channel.md","filePath":"cli/channel.md","lastUpdated":1771161622000}'),n={name:"cli/channel.md"};function h(l,t,d,o,p,c){return e(),i("div",null,[...t[0]||(t[0]=[s('

Channel Commands

Manage channels and bot/user channel configuration.

channel list

List available channel types (e.g. telegram, feishu, local).

bash
memoh channel list

channel info

Show channel metadata and schema for a channel type.

bash
memoh channel info [type]

If type is omitted, prompts to select from available channels.

channel config get

Get a bot's channel configuration.

bash
memoh channel config get [bot_id] [options]
OptionDescription
--type <type>Channel type

channel config set

Set a bot's channel configuration. Currently supports Feishu.

bash
memoh channel config set [bot_id] [options]
OptionDescription
--type <type>Channel type (e.g. feishu)
--app_id <id>Feishu App ID
--app_secret <secret>Feishu App Secret
--encrypt_key <key>Encrypt key (optional)
--verification_token <token>Verification token (optional)

channel bind get

Get the current user's channel binding for a platform.

bash
memoh channel bind get [options]
OptionDescription
--type <type>Channel type

channel bind set

Set the current user's channel binding. Currently supports Feishu (open_id or user_id).

bash
memoh channel bind set [options]
OptionDescription
--type <type>Channel type (e.g. feishu)
--open_id <id>Feishu Open ID
--user_id <id>Feishu User ID
',25)])])}const g=a(n,[["render",h]]);export{k as __pageData,g as default}; +import{_ as a,o as e,c as i,ag as s}from"./chunks/framework.ePeAWSvT.js";const k=JSON.parse('{"title":"Channel Commands","description":"","frontmatter":{},"headers":[],"relativePath":"cli/channel.md","filePath":"cli/channel.md","lastUpdated":1771161622000}'),n={name:"cli/channel.md"};function h(l,t,d,o,p,c){return e(),i("div",null,[...t[0]||(t[0]=[s('

Channel Commands

Manage channels and bot/user channel configuration.

channel list

List available channel types (e.g. telegram, feishu, local).

bash
memoh channel list

channel info

Show channel metadata and schema for a channel type.

bash
memoh channel info [type]

If type is omitted, prompts to select from available channels.

channel config get

Get a bot's channel configuration.

bash
memoh channel config get [bot_id] [options]
OptionDescription
--type <type>Channel type

channel config set

Set a bot's channel configuration. Currently supports Feishu.

bash
memoh channel config set [bot_id] [options]
OptionDescription
--type <type>Channel type (e.g. feishu)
--app_id <id>Feishu App ID
--app_secret <secret>Feishu App Secret
--encrypt_key <key>Encrypt key (optional)
--verification_token <token>Verification token (optional)

channel bind get

Get the current user's channel binding for a platform.

bash
memoh channel bind get [options]
OptionDescription
--type <type>Channel type

channel bind set

Set the current user's channel binding. Currently supports Feishu (open_id or user_id).

bash
memoh channel bind set [options]
OptionDescription
--type <type>Channel type (e.g. feishu)
--open_id <id>Feishu Open ID
--user_id <id>Feishu User ID
',25)])])}const g=a(n,[["render",h]]);export{k as __pageData,g as default}; diff --git a/assets/cli_channel.md.T-qsPRZ9.lean.js b/assets/cli_channel.md.BBEJiWrG.lean.js similarity index 70% rename from assets/cli_channel.md.T-qsPRZ9.lean.js rename to assets/cli_channel.md.BBEJiWrG.lean.js index d445ace2..b1b54fef 100644 --- a/assets/cli_channel.md.T-qsPRZ9.lean.js +++ b/assets/cli_channel.md.BBEJiWrG.lean.js @@ -1 +1 @@ -import{_ as a,o as e,c as i,ag as s}from"./chunks/framework.DEqXEGcv.js";const k=JSON.parse('{"title":"Channel Commands","description":"","frontmatter":{},"headers":[],"relativePath":"cli/channel.md","filePath":"cli/channel.md","lastUpdated":1771161622000}'),n={name:"cli/channel.md"};function h(l,t,d,o,p,c){return e(),i("div",null,[...t[0]||(t[0]=[s("",25)])])}const g=a(n,[["render",h]]);export{k as __pageData,g as default}; +import{_ as a,o as e,c as i,ag as s}from"./chunks/framework.ePeAWSvT.js";const k=JSON.parse('{"title":"Channel Commands","description":"","frontmatter":{},"headers":[],"relativePath":"cli/channel.md","filePath":"cli/channel.md","lastUpdated":1771161622000}'),n={name:"cli/channel.md"};function h(l,t,d,o,p,c){return e(),i("div",null,[...t[0]||(t[0]=[s("",25)])])}const g=a(n,[["render",h]]);export{k as __pageData,g as default}; diff --git a/assets/cli_chat.md.LOg8zrpn.js b/assets/cli_chat.md.Cr9VFV7R.js similarity index 96% rename from assets/cli_chat.md.LOg8zrpn.js rename to assets/cli_chat.md.Cr9VFV7R.js index 63a95204..1d80722f 100644 --- a/assets/cli_chat.md.LOg8zrpn.js +++ b/assets/cli_chat.md.Cr9VFV7R.js @@ -1,3 +1,3 @@ -import{_ as a,o as s,c as i,ag as e}from"./chunks/framework.DEqXEGcv.js";const k=JSON.parse('{"title":"Chat Commands","description":"","frontmatter":{},"headers":[],"relativePath":"cli/chat.md","filePath":"cli/chat.md","lastUpdated":1771161622000}'),h={name:"cli/chat.md"};function n(o,t,l,d,p,r){return s(),i("div",null,[...t[0]||(t[0]=[e(`

Chat Commands

Default: Interactive Chat

Running memoh with no subcommand starts an interactive chat. Use --bot <id> to specify which bot to chat with; otherwise you'll be prompted to select one.

bash
memoh [options]
+import{_ as a,o as s,c as i,ag as e}from"./chunks/framework.ePeAWSvT.js";const k=JSON.parse('{"title":"Chat Commands","description":"","frontmatter":{},"headers":[],"relativePath":"cli/chat.md","filePath":"cli/chat.md","lastUpdated":1771161622000}'),h={name:"cli/chat.md"};function n(o,t,l,d,p,r){return s(),i("div",null,[...t[0]||(t[0]=[e(`

Chat Commands

Default: Interactive Chat

Running memoh with no subcommand starts an interactive chat. Use --bot <id> to specify which bot to chat with; otherwise you'll be prompted to select one.

bash
memoh [options]
 memoh --bot <bot_id>
OptionDescription
--bot <id>Bot ID to chat with

Type your message and press Enter. Type exit to quit. Responses stream in real time.

tui

Terminal UI chat session. Same behavior as the default chat but explicitly invoked.

bash
memoh tui [options]
 memoh tui --bot <bot_id>
OptionDescription
--bot <id>Bot ID to chat with

version

Show the CLI version.

bash
memoh version
`,13)])])}const b=a(h,[["render",n]]);export{k as __pageData,b as default}; diff --git a/assets/cli_chat.md.LOg8zrpn.lean.js b/assets/cli_chat.md.Cr9VFV7R.lean.js similarity index 69% rename from assets/cli_chat.md.LOg8zrpn.lean.js rename to assets/cli_chat.md.Cr9VFV7R.lean.js index 2cf1d596..e1e256f6 100644 --- a/assets/cli_chat.md.LOg8zrpn.lean.js +++ b/assets/cli_chat.md.Cr9VFV7R.lean.js @@ -1 +1 @@ -import{_ as a,o as s,c as i,ag as e}from"./chunks/framework.DEqXEGcv.js";const k=JSON.parse('{"title":"Chat Commands","description":"","frontmatter":{},"headers":[],"relativePath":"cli/chat.md","filePath":"cli/chat.md","lastUpdated":1771161622000}'),h={name:"cli/chat.md"};function n(o,t,l,d,p,r){return s(),i("div",null,[...t[0]||(t[0]=[e("",13)])])}const b=a(h,[["render",n]]);export{k as __pageData,b as default}; +import{_ as a,o as s,c as i,ag as e}from"./chunks/framework.ePeAWSvT.js";const k=JSON.parse('{"title":"Chat Commands","description":"","frontmatter":{},"headers":[],"relativePath":"cli/chat.md","filePath":"cli/chat.md","lastUpdated":1771161622000}'),h={name:"cli/chat.md"};function n(o,t,l,d,p,r){return s(),i("div",null,[...t[0]||(t[0]=[e("",13)])])}const b=a(h,[["render",n]]);export{k as __pageData,b as default}; diff --git a/assets/cli_config.md.C-0Xv0hx.js b/assets/cli_config.md.B8bSu8j2.js similarity index 96% rename from assets/cli_config.md.C-0Xv0hx.js rename to assets/cli_config.md.B8bSu8j2.js index a452acbe..5838a590 100644 --- a/assets/cli_config.md.C-0Xv0hx.js +++ b/assets/cli_config.md.B8bSu8j2.js @@ -1,4 +1,4 @@ -import{_ as a,o as i,c as t,ag as e}from"./chunks/framework.DEqXEGcv.js";const g=JSON.parse('{"title":"Config Commands","description":"","frontmatter":{},"headers":[],"relativePath":"cli/config.md","filePath":"cli/config.md","lastUpdated":1771161622000}'),n={name:"cli/config.md"};function o(p,s,h,l,d,c){return i(),t("div",null,[...s[0]||(s[0]=[e(`

Config Commands

The CLI stores its config in ~/.memoh/config.toml. Use these commands to view or update it.

config

Show the current config (host and port).

bash
memoh config

Output example:

host = "127.0.0.1"
+import{_ as a,o as i,c as t,ag as e}from"./chunks/framework.ePeAWSvT.js";const g=JSON.parse('{"title":"Config Commands","description":"","frontmatter":{},"headers":[],"relativePath":"cli/config.md","filePath":"cli/config.md","lastUpdated":1771161622000}'),n={name:"cli/config.md"};function o(p,s,h,l,d,c){return i(),t("div",null,[...s[0]||(s[0]=[e(`

Config Commands

The CLI stores its config in ~/.memoh/config.toml. Use these commands to view or update it.

config

Show the current config (host and port).

bash
memoh config

Output example:

host = "127.0.0.1"
 port = 8080

config set

Update the config. Prompts for host and port if not provided via options.

bash
memoh config set [options]
OptionDescription
--host <host>API host (e.g. 127.0.0.1 or api.example.com)
--port <port>API port (default: 8080)

Examples:

bash
memoh config set --host 192.168.1.100 --port 8080
 memoh config set
 # Interactive prompts for host and port
`,13)])])}const k=a(n,[["render",o]]);export{g as __pageData,k as default}; diff --git a/assets/cli_config.md.C-0Xv0hx.lean.js b/assets/cli_config.md.B8bSu8j2.lean.js similarity index 69% rename from assets/cli_config.md.C-0Xv0hx.lean.js rename to assets/cli_config.md.B8bSu8j2.lean.js index baf5fe95..bb5a1fb2 100644 --- a/assets/cli_config.md.C-0Xv0hx.lean.js +++ b/assets/cli_config.md.B8bSu8j2.lean.js @@ -1 +1 @@ -import{_ as a,o as i,c as t,ag as e}from"./chunks/framework.DEqXEGcv.js";const g=JSON.parse('{"title":"Config Commands","description":"","frontmatter":{},"headers":[],"relativePath":"cli/config.md","filePath":"cli/config.md","lastUpdated":1771161622000}'),n={name:"cli/config.md"};function o(p,s,h,l,d,c){return i(),t("div",null,[...s[0]||(s[0]=[e("",13)])])}const k=a(n,[["render",o]]);export{g as __pageData,k as default}; +import{_ as a,o as i,c as t,ag as e}from"./chunks/framework.ePeAWSvT.js";const g=JSON.parse('{"title":"Config Commands","description":"","frontmatter":{},"headers":[],"relativePath":"cli/config.md","filePath":"cli/config.md","lastUpdated":1771161622000}'),n={name:"cli/config.md"};function o(p,s,h,l,d,c){return i(),t("div",null,[...s[0]||(s[0]=[e("",13)])])}const k=a(n,[["render",o]]);export{g as __pageData,k as default}; diff --git a/assets/cli_index.md.CTMBSccU.js b/assets/cli_index.md.CZsWbIpX.js similarity index 97% rename from assets/cli_index.md.CTMBSccU.js rename to assets/cli_index.md.CZsWbIpX.js index d20ac4d5..e4d3903a 100644 --- a/assets/cli_index.md.CTMBSccU.js +++ b/assets/cli_index.md.CZsWbIpX.js @@ -1,4 +1,4 @@ -import{_ as a,o as e,c as s,ag as i}from"./chunks/framework.DEqXEGcv.js";const m=JSON.parse('{"title":"Memoh CLI","description":"","frontmatter":{},"headers":[],"relativePath":"cli/index.md","filePath":"cli/index.md","lastUpdated":1771161622000}'),n={name:"cli/index.md"};function h(o,t,l,d,r,p){return e(),s("div",null,[...t[0]||(t[0]=[i(`

Memoh CLI

The Memoh CLI (memoh) is a command-line tool for managing bots, channels, providers, models, schedules, and chatting with bots. It talks to a running Memoh server via its API.

Installation

The CLI is part of the Memoh monorepo. Install from source:

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

Memoh CLI

The Memoh CLI (memoh) is a command-line tool for managing bots, channels, providers, models, schedules, and chatting with bots. It talks to a running Memoh server via its API.

Installation

The CLI is part of the Memoh monorepo. Install from source:

bash
git clone https://github.com/memohai/Memoh.git
 cd Memoh
 pnpm install

Run the CLI:

bash
cd packages/cli
 pnpm start -- --help

To use memoh as a global command:

bash
cd packages/cli
diff --git a/assets/cli_index.md.CTMBSccU.lean.js b/assets/cli_index.md.CZsWbIpX.lean.js
similarity index 69%
rename from assets/cli_index.md.CTMBSccU.lean.js
rename to assets/cli_index.md.CZsWbIpX.lean.js
index e925c11f..a30a2772 100644
--- a/assets/cli_index.md.CTMBSccU.lean.js
+++ b/assets/cli_index.md.CZsWbIpX.lean.js
@@ -1 +1 @@
-import{_ as a,o as e,c as s,ag as i}from"./chunks/framework.DEqXEGcv.js";const m=JSON.parse('{"title":"Memoh CLI","description":"","frontmatter":{},"headers":[],"relativePath":"cli/index.md","filePath":"cli/index.md","lastUpdated":1771161622000}'),n={name:"cli/index.md"};function h(o,t,l,d,r,p){return e(),s("div",null,[...t[0]||(t[0]=[i("",15)])])}const k=a(n,[["render",h]]);export{m as __pageData,k as default};
+import{_ as a,o as e,c as s,ag as i}from"./chunks/framework.ePeAWSvT.js";const m=JSON.parse('{"title":"Memoh CLI","description":"","frontmatter":{},"headers":[],"relativePath":"cli/index.md","filePath":"cli/index.md","lastUpdated":1771161622000}'),n={name:"cli/index.md"};function h(o,t,l,d,r,p){return e(),s("div",null,[...t[0]||(t[0]=[i("",15)])])}const k=a(n,[["render",h]]);export{m as __pageData,k as default};
diff --git a/assets/cli_model.md.Bw08RtnA.js b/assets/cli_model.md.DjdZHTvQ.js
similarity index 98%
rename from assets/cli_model.md.Bw08RtnA.js
rename to assets/cli_model.md.DjdZHTvQ.js
index 596c1115..12eaba26 100644
--- a/assets/cli_model.md.Bw08RtnA.js
+++ b/assets/cli_model.md.DjdZHTvQ.js
@@ -1,4 +1,4 @@
-import{_ as i,o as e,c as a,ag as t}from"./chunks/framework.DEqXEGcv.js";const c=JSON.parse('{"title":"Model Commands","description":"","frontmatter":{},"headers":[],"relativePath":"cli/model.md","filePath":"cli/model.md","lastUpdated":1771410627000}'),d={name:"cli/model.md"};function l(n,s,h,p,o,k){return e(),a("div",null,[...s[0]||(s[0]=[t(`

Model Commands

Manage chat and embedding models.

model list

List all models with their provider, type, client type, and multimodal flag.

bash
memoh model list

model create

Create a new model. Prompts for provider, model ID, type, client type, and (for embedding models) dimensions.

bash
memoh model create [options]
OptionDescription
--model_id <id>Model ID (e.g. gpt-4, text-embedding-3-small)
--name <name>Display name
--provider <provider>Provider name
--client_type <type>Client type: openai-responses, openai-completions, anthropic-messages, google-generative-ai
--type <type>chat or embedding
--dimensions <n>Embedding dimensions (required for embedding models)
--multimodalMark as multimodal

Examples:

bash
memoh model create --model_id gpt-4 --provider my-openai --client_type openai-responses --type chat
+import{_ as i,o as e,c as a,ag as t}from"./chunks/framework.ePeAWSvT.js";const c=JSON.parse('{"title":"Model Commands","description":"","frontmatter":{},"headers":[],"relativePath":"cli/model.md","filePath":"cli/model.md","lastUpdated":1771410627000}'),d={name:"cli/model.md"};function l(n,s,h,p,o,k){return e(),a("div",null,[...s[0]||(s[0]=[t(`

Model Commands

Manage chat and embedding models.

model list

List all models with their provider, type, client type, and multimodal flag.

bash
memoh model list

model create

Create a new model. Prompts for provider, model ID, type, client type, and (for embedding models) dimensions.

bash
memoh model create [options]
OptionDescription
--model_id <id>Model ID (e.g. gpt-4, text-embedding-3-small)
--name <name>Display name
--provider <provider>Provider name
--client_type <type>Client type: openai-responses, openai-completions, anthropic-messages, google-generative-ai
--type <type>chat or embedding
--dimensions <n>Embedding dimensions (required for embedding models)
--multimodalMark as multimodal

Examples:

bash
memoh model create --model_id gpt-4 --provider my-openai --client_type openai-responses --type chat
 memoh model create --model_id text-embedding-3-small --provider my-openai --client_type openai-completions --type embedding --dimensions 1536
 memoh model create
 # Interactive prompts

model delete

Delete a model by model ID.

bash
memoh model delete --model <model_id>

Example:

bash
memoh model delete --model gpt-4
`,16)])])}const m=i(d,[["render",l]]);export{c as __pageData,m as default}; diff --git a/assets/cli_model.md.Bw08RtnA.lean.js b/assets/cli_model.md.DjdZHTvQ.lean.js similarity index 69% rename from assets/cli_model.md.Bw08RtnA.lean.js rename to assets/cli_model.md.DjdZHTvQ.lean.js index 4e2a033b..bdec4659 100644 --- a/assets/cli_model.md.Bw08RtnA.lean.js +++ b/assets/cli_model.md.DjdZHTvQ.lean.js @@ -1 +1 @@ -import{_ as i,o as e,c as a,ag as t}from"./chunks/framework.DEqXEGcv.js";const c=JSON.parse('{"title":"Model Commands","description":"","frontmatter":{},"headers":[],"relativePath":"cli/model.md","filePath":"cli/model.md","lastUpdated":1771410627000}'),d={name:"cli/model.md"};function l(n,s,h,p,o,k){return e(),a("div",null,[...s[0]||(s[0]=[t("",16)])])}const m=i(d,[["render",l]]);export{c as __pageData,m as default}; +import{_ as i,o as e,c as a,ag as t}from"./chunks/framework.ePeAWSvT.js";const c=JSON.parse('{"title":"Model Commands","description":"","frontmatter":{},"headers":[],"relativePath":"cli/model.md","filePath":"cli/model.md","lastUpdated":1771410627000}'),d={name:"cli/model.md"};function l(n,s,h,p,o,k){return e(),a("div",null,[...s[0]||(s[0]=[t("",16)])])}const m=i(d,[["render",l]]);export{c as __pageData,m as default}; diff --git a/assets/cli_provider.md.cID16uzP.js b/assets/cli_provider.md.D1oztYQ9.js similarity index 98% rename from assets/cli_provider.md.cID16uzP.js rename to assets/cli_provider.md.D1oztYQ9.js index aae30ccb..82297f73 100644 --- a/assets/cli_provider.md.cID16uzP.js +++ b/assets/cli_provider.md.D1oztYQ9.js @@ -1,4 +1,4 @@ -import{_ as i,o as a,c as e,ag as t}from"./chunks/framework.DEqXEGcv.js";const c=JSON.parse('{"title":"Provider Commands","description":"","frontmatter":{},"headers":[],"relativePath":"cli/provider.md","filePath":"cli/provider.md","lastUpdated":1771410627000}'),p={name:"cli/provider.md"};function h(l,s,n,r,d,o){return a(),e("div",null,[...s[0]||(s[0]=[t(`

Provider Commands

Manage LLM providers (API endpoints and credentials).

provider list

List all providers. Optionally filter by provider name.

bash
memoh provider list [options]
OptionDescription
--provider <name>Filter by provider name

Examples:

bash
memoh provider list
+import{_ as i,o as a,c as e,ag as t}from"./chunks/framework.ePeAWSvT.js";const c=JSON.parse('{"title":"Provider Commands","description":"","frontmatter":{},"headers":[],"relativePath":"cli/provider.md","filePath":"cli/provider.md","lastUpdated":1771410627000}'),p={name:"cli/provider.md"};function h(l,s,n,r,d,o){return a(),e("div",null,[...s[0]||(s[0]=[t(`

Provider Commands

Manage LLM providers (API endpoints and credentials).

provider list

List all providers. Optionally filter by provider name.

bash
memoh provider list [options]
OptionDescription
--provider <name>Filter by provider name

Examples:

bash
memoh provider list
 memoh provider list --provider my-openai

provider create

Create a new provider. Prompts for any missing fields.

bash
memoh provider create [options]
OptionDescription
--name <name>Provider name
--base_url <url>Base URL for the API
--api_key <key>API key

Examples:

bash
memoh provider create --name my-ollama --base_url http://localhost:11434/v1
 memoh provider create
 # Interactive prompts

provider delete

Delete a provider by name.

bash
memoh provider delete --provider <name>

Example:

bash
memoh provider delete --provider my-ollama
`,19)])])}const F=i(p,[["render",h]]);export{c as __pageData,F as default}; diff --git a/assets/cli_provider.md.cID16uzP.lean.js b/assets/cli_provider.md.D1oztYQ9.lean.js similarity index 70% rename from assets/cli_provider.md.cID16uzP.lean.js rename to assets/cli_provider.md.D1oztYQ9.lean.js index 2684ffee..f3e31194 100644 --- a/assets/cli_provider.md.cID16uzP.lean.js +++ b/assets/cli_provider.md.D1oztYQ9.lean.js @@ -1 +1 @@ -import{_ as i,o as a,c as e,ag as t}from"./chunks/framework.DEqXEGcv.js";const c=JSON.parse('{"title":"Provider Commands","description":"","frontmatter":{},"headers":[],"relativePath":"cli/provider.md","filePath":"cli/provider.md","lastUpdated":1771410627000}'),p={name:"cli/provider.md"};function h(l,s,n,r,d,o){return a(),e("div",null,[...s[0]||(s[0]=[t("",19)])])}const F=i(p,[["render",h]]);export{c as __pageData,F as default}; +import{_ as i,o as a,c as e,ag as t}from"./chunks/framework.ePeAWSvT.js";const c=JSON.parse('{"title":"Provider Commands","description":"","frontmatter":{},"headers":[],"relativePath":"cli/provider.md","filePath":"cli/provider.md","lastUpdated":1771410627000}'),p={name:"cli/provider.md"};function h(l,s,n,r,d,o){return a(),e("div",null,[...s[0]||(s[0]=[t("",19)])])}const F=i(p,[["render",h]]);export{c as __pageData,F as default}; diff --git a/assets/cli_schedule.md.DSG0HQuo.js b/assets/cli_schedule.md.D2s8Q1KC.js similarity index 98% rename from assets/cli_schedule.md.DSG0HQuo.js rename to assets/cli_schedule.md.D2s8Q1KC.js index dba54067..fa68b9ac 100644 --- a/assets/cli_schedule.md.DSG0HQuo.js +++ b/assets/cli_schedule.md.D2s8Q1KC.js @@ -1 +1 @@ -import{_ as t,o as i,c as a,ag as e}from"./chunks/framework.DEqXEGcv.js";const c=JSON.parse('{"title":"Schedule Commands","description":"","frontmatter":{},"headers":[],"relativePath":"cli/schedule.md","filePath":"cli/schedule.md","lastUpdated":1771161622000}'),d={name:"cli/schedule.md"};function h(l,s,n,p,k,r){return i(),a("div",null,[...s[0]||(s[0]=[e('

Schedule Commands

Manage cron-based schedules for bots. All schedule commands require --bot <id> to specify the bot.

schedule list

List all schedules for a bot.

bash
memoh schedule list --bot <bot_id>

schedule get

Get a schedule by ID.

bash
memoh schedule get <id> --bot <bot_id>

schedule create

Create a new schedule. Prompts for name, description, cron pattern, command, and optional max calls.

bash
memoh schedule create [options] --bot <bot_id>
OptionDescription
--name <name>Schedule name
--description <desc>Description
--pattern <pattern>Cron pattern (e.g. 0 9 * * * for daily at 9am)
--command <cmd>Command to run in the bot container
--max_calls <n>Max executions (optional, empty for unlimited)
--enabledCreate as enabled
--disabledCreate as disabled

schedule update

Update a schedule.

bash
memoh schedule update <id> [options] --bot <bot_id>
OptionDescription
--name <name>Schedule name
--description <desc>Description
--pattern <pattern>Cron pattern
--command <cmd>Command
--max_calls <n>Max executions
--enabledEnable
--disabledDisable

schedule toggle

Enable or disable a schedule (flip current state).

bash
memoh schedule toggle <id> --bot <bot_id>

schedule delete

Delete a schedule.

bash
memoh schedule delete <id> --bot <bot_id>
',22)])])}const g=t(d,[["render",h]]);export{c as __pageData,g as default}; +import{_ as t,o as i,c as a,ag as e}from"./chunks/framework.ePeAWSvT.js";const c=JSON.parse('{"title":"Schedule Commands","description":"","frontmatter":{},"headers":[],"relativePath":"cli/schedule.md","filePath":"cli/schedule.md","lastUpdated":1771161622000}'),d={name:"cli/schedule.md"};function h(l,s,n,p,k,r){return i(),a("div",null,[...s[0]||(s[0]=[e('

Schedule Commands

Manage cron-based schedules for bots. All schedule commands require --bot <id> to specify the bot.

schedule list

List all schedules for a bot.

bash
memoh schedule list --bot <bot_id>

schedule get

Get a schedule by ID.

bash
memoh schedule get <id> --bot <bot_id>

schedule create

Create a new schedule. Prompts for name, description, cron pattern, command, and optional max calls.

bash
memoh schedule create [options] --bot <bot_id>
OptionDescription
--name <name>Schedule name
--description <desc>Description
--pattern <pattern>Cron pattern (e.g. 0 9 * * * for daily at 9am)
--command <cmd>Command to run in the bot container
--max_calls <n>Max executions (optional, empty for unlimited)
--enabledCreate as enabled
--disabledCreate as disabled

schedule update

Update a schedule.

bash
memoh schedule update <id> [options] --bot <bot_id>
OptionDescription
--name <name>Schedule name
--description <desc>Description
--pattern <pattern>Cron pattern
--command <cmd>Command
--max_calls <n>Max executions
--enabledEnable
--disabledDisable

schedule toggle

Enable or disable a schedule (flip current state).

bash
memoh schedule toggle <id> --bot <bot_id>

schedule delete

Delete a schedule.

bash
memoh schedule delete <id> --bot <bot_id>
',22)])])}const g=t(d,[["render",h]]);export{c as __pageData,g as default}; diff --git a/assets/cli_schedule.md.DSG0HQuo.lean.js b/assets/cli_schedule.md.D2s8Q1KC.lean.js similarity index 70% rename from assets/cli_schedule.md.DSG0HQuo.lean.js rename to assets/cli_schedule.md.D2s8Q1KC.lean.js index d60ba1db..ea3b6426 100644 --- a/assets/cli_schedule.md.DSG0HQuo.lean.js +++ b/assets/cli_schedule.md.D2s8Q1KC.lean.js @@ -1 +1 @@ -import{_ as t,o as i,c as a,ag as e}from"./chunks/framework.DEqXEGcv.js";const c=JSON.parse('{"title":"Schedule Commands","description":"","frontmatter":{},"headers":[],"relativePath":"cli/schedule.md","filePath":"cli/schedule.md","lastUpdated":1771161622000}'),d={name:"cli/schedule.md"};function h(l,s,n,p,k,r){return i(),a("div",null,[...s[0]||(s[0]=[e("",22)])])}const g=t(d,[["render",h]]);export{c as __pageData,g as default}; +import{_ as t,o as i,c as a,ag as e}from"./chunks/framework.ePeAWSvT.js";const c=JSON.parse('{"title":"Schedule Commands","description":"","frontmatter":{},"headers":[],"relativePath":"cli/schedule.md","filePath":"cli/schedule.md","lastUpdated":1771161622000}'),d={name:"cli/schedule.md"};function h(l,s,n,p,k,r){return i(),a("div",null,[...s[0]||(s[0]=[e("",22)])])}const g=t(d,[["render",h]]);export{c as __pageData,g as default}; diff --git a/assets/concepts_bot.md.1aZ6YcT_.js b/assets/concepts_bot.md.C_C3siLW.js similarity index 92% rename from assets/concepts_bot.md.1aZ6YcT_.js rename to assets/concepts_bot.md.C_C3siLW.js index 31ac566b..7192cd5d 100644 --- a/assets/concepts_bot.md.1aZ6YcT_.js +++ b/assets/concepts_bot.md.C_C3siLW.js @@ -1 +1 @@ -import{_ as t,o as a,c as o,ag as i}from"./chunks/framework.DEqXEGcv.js";const p=JSON.parse('{"title":"Bot","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/bot.md","filePath":"concepts/bot.md","lastUpdated":1771163124000}'),n={name:"concepts/bot.md"};function r(l,e,s,d,c,h){return a(),o("div",null,[...e[0]||(e[0]=[i('

Bot

A bot is the primary runtime entity in Memoh.

Each bot has its own:

  • Configuration
  • Container lifecycle
  • Memory scope
  • Channel bindings
  • Model assignments

Key Settings

  • max-load-time (max_context_load_time): how many minutes of recent conversation context are loaded into prompts
  • language: preferred language for interaction (default is auto)
  • chat model / memory model / embedding model: model IDs used by this bot

Why It Matters

The bot abstraction allows Memoh to isolate behavior and resources per agent, while keeping management centralized in one Web UI.

Web UI Path

  • Bots > Select a bot > Settings
',10)])])}const u=t(n,[["render",r]]);export{p as __pageData,u as default}; +import{_ as t,o as a,c as o,ag as i}from"./chunks/framework.ePeAWSvT.js";const p=JSON.parse('{"title":"Bot","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/bot.md","filePath":"concepts/bot.md","lastUpdated":1771163124000}'),n={name:"concepts/bot.md"};function r(l,e,s,d,c,h){return a(),o("div",null,[...e[0]||(e[0]=[i('

Bot

A bot is the primary runtime entity in Memoh.

Each bot has its own:

  • Configuration
  • Container lifecycle
  • Memory scope
  • Channel bindings
  • Model assignments

Key Settings

  • max-load-time (max_context_load_time): how many minutes of recent conversation context are loaded into prompts
  • language: preferred language for interaction (default is auto)
  • chat model / memory model / embedding model: model IDs used by this bot

Why It Matters

The bot abstraction allows Memoh to isolate behavior and resources per agent, while keeping management centralized in one Web UI.

Web UI Path

  • Bots > Select a bot > Settings
',10)])])}const u=t(n,[["render",r]]);export{p as __pageData,u as default}; diff --git a/assets/concepts_bot.md.1aZ6YcT_.lean.js b/assets/concepts_bot.md.C_C3siLW.lean.js similarity index 69% rename from assets/concepts_bot.md.1aZ6YcT_.lean.js rename to assets/concepts_bot.md.C_C3siLW.lean.js index 1782b526..171bbd35 100644 --- a/assets/concepts_bot.md.1aZ6YcT_.lean.js +++ b/assets/concepts_bot.md.C_C3siLW.lean.js @@ -1 +1 @@ -import{_ as t,o as a,c as o,ag as i}from"./chunks/framework.DEqXEGcv.js";const p=JSON.parse('{"title":"Bot","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/bot.md","filePath":"concepts/bot.md","lastUpdated":1771163124000}'),n={name:"concepts/bot.md"};function r(l,e,s,d,c,h){return a(),o("div",null,[...e[0]||(e[0]=[i("",10)])])}const u=t(n,[["render",r]]);export{p as __pageData,u as default}; +import{_ as t,o as a,c as o,ag as i}from"./chunks/framework.ePeAWSvT.js";const p=JSON.parse('{"title":"Bot","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/bot.md","filePath":"concepts/bot.md","lastUpdated":1771163124000}'),n={name:"concepts/bot.md"};function r(l,e,s,d,c,h){return a(),o("div",null,[...e[0]||(e[0]=[i("",10)])])}const u=t(n,[["render",r]]);export{p as __pageData,u as default}; diff --git a/assets/concepts_channel.md.kmh0thdg.js b/assets/concepts_channel.md.DdS-uyu8.js similarity index 92% rename from assets/concepts_channel.md.kmh0thdg.js rename to assets/concepts_channel.md.DdS-uyu8.js index 88bad2bb..316114a9 100644 --- a/assets/concepts_channel.md.kmh0thdg.js +++ b/assets/concepts_channel.md.DdS-uyu8.js @@ -1 +1 @@ -import{_ as e,o as t,c as n,ag as l}from"./chunks/framework.DEqXEGcv.js";const p=JSON.parse('{"title":"Channel","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/channel.md","filePath":"concepts/channel.md","lastUpdated":1771163124000}'),o={name:"concepts/channel.md"};function r(i,a,s,c,h,d){return t(),n("div",null,[...a[0]||(a[0]=[l('

Channel

A channel connects a bot to an external communication platform.

Examples include:

  • Telegram
  • Feishu (Lark)
  • Web chat

What a Channel Configuration Defines

  • Platform type and credentials
  • Message routing from external users to a target bot
  • Reply delivery back to the source platform

Why It Matters

Channels decouple bot logic from transport, so one bot can serve users across multiple platforms.

Web UI Path

  • Bots > Select a bot > Channels
',10)])])}const f=e(o,[["render",r]]);export{p as __pageData,f as default}; +import{_ as e,o as t,c as n,ag as l}from"./chunks/framework.ePeAWSvT.js";const p=JSON.parse('{"title":"Channel","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/channel.md","filePath":"concepts/channel.md","lastUpdated":1771163124000}'),o={name:"concepts/channel.md"};function r(i,a,s,c,h,d){return t(),n("div",null,[...a[0]||(a[0]=[l('

Channel

A channel connects a bot to an external communication platform.

Examples include:

  • Telegram
  • Feishu (Lark)
  • Web chat

What a Channel Configuration Defines

  • Platform type and credentials
  • Message routing from external users to a target bot
  • Reply delivery back to the source platform

Why It Matters

Channels decouple bot logic from transport, so one bot can serve users across multiple platforms.

Web UI Path

  • Bots > Select a bot > Channels
',10)])])}const f=e(o,[["render",r]]);export{p as __pageData,f as default}; diff --git a/assets/concepts_channel.md.kmh0thdg.lean.js b/assets/concepts_channel.md.DdS-uyu8.lean.js similarity index 70% rename from assets/concepts_channel.md.kmh0thdg.lean.js rename to assets/concepts_channel.md.DdS-uyu8.lean.js index eebf0fd0..e8e02516 100644 --- a/assets/concepts_channel.md.kmh0thdg.lean.js +++ b/assets/concepts_channel.md.DdS-uyu8.lean.js @@ -1 +1 @@ -import{_ as e,o as t,c as n,ag as l}from"./chunks/framework.DEqXEGcv.js";const p=JSON.parse('{"title":"Channel","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/channel.md","filePath":"concepts/channel.md","lastUpdated":1771163124000}'),o={name:"concepts/channel.md"};function r(i,a,s,c,h,d){return t(),n("div",null,[...a[0]||(a[0]=[l("",10)])])}const f=e(o,[["render",r]]);export{p as __pageData,f as default}; +import{_ as e,o as t,c as n,ag as l}from"./chunks/framework.ePeAWSvT.js";const p=JSON.parse('{"title":"Channel","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/channel.md","filePath":"concepts/channel.md","lastUpdated":1771163124000}'),o={name:"concepts/channel.md"};function r(i,a,s,c,h,d){return t(),n("div",null,[...a[0]||(a[0]=[l("",10)])])}const f=e(o,[["render",r]]);export{p as __pageData,f as default}; diff --git a/assets/concepts_container.md.CGr24tv7.js b/assets/concepts_container.md.Djausou_.js similarity index 92% rename from assets/concepts_container.md.CGr24tv7.js rename to assets/concepts_container.md.Djausou_.js index c2cb5056..3a583327 100644 --- a/assets/concepts_container.md.CGr24tv7.js +++ b/assets/concepts_container.md.Djausou_.js @@ -1 +1 @@ -import{_ as e,o as a,c as o,ag as n}from"./chunks/framework.DEqXEGcv.js";const u=JSON.parse('{"title":"Container","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/container.md","filePath":"concepts/container.md","lastUpdated":1771163124000}'),i={name:"concepts/container.md"};function r(s,t,l,c,h,d){return a(),o("div",null,[...t[0]||(t[0]=[n('

Container

Each bot runs in its own isolated container.

What Isolation Gives You

  • Separate filesystem per bot
  • Separate runtime process space
  • Controlled lifecycle (create/start/stop/delete)

This prevents one bot from interfering with another bot's execution environment.

Why It Matters

Container isolation is the foundation that allows bots to run tools, commands, and file operations safely in parallel.

Web UI Path

  • Bots > Select a bot > Container
',9)])])}const m=e(i,[["render",r]]);export{u as __pageData,m as default}; +import{_ as e,o as a,c as o,ag as n}from"./chunks/framework.ePeAWSvT.js";const u=JSON.parse('{"title":"Container","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/container.md","filePath":"concepts/container.md","lastUpdated":1771163124000}'),i={name:"concepts/container.md"};function r(s,t,l,c,h,d){return a(),o("div",null,[...t[0]||(t[0]=[n('

Container

Each bot runs in its own isolated container.

What Isolation Gives You

  • Separate filesystem per bot
  • Separate runtime process space
  • Controlled lifecycle (create/start/stop/delete)

This prevents one bot from interfering with another bot's execution environment.

Why It Matters

Container isolation is the foundation that allows bots to run tools, commands, and file operations safely in parallel.

Web UI Path

  • Bots > Select a bot > Container
',9)])])}const m=e(i,[["render",r]]);export{u as __pageData,m as default}; diff --git a/assets/concepts_container.md.CGr24tv7.lean.js b/assets/concepts_container.md.Djausou_.lean.js similarity index 71% rename from assets/concepts_container.md.CGr24tv7.lean.js rename to assets/concepts_container.md.Djausou_.lean.js index f4acbd8d..f8b84854 100644 --- a/assets/concepts_container.md.CGr24tv7.lean.js +++ b/assets/concepts_container.md.Djausou_.lean.js @@ -1 +1 @@ -import{_ as e,o as a,c as o,ag as n}from"./chunks/framework.DEqXEGcv.js";const u=JSON.parse('{"title":"Container","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/container.md","filePath":"concepts/container.md","lastUpdated":1771163124000}'),i={name:"concepts/container.md"};function r(s,t,l,c,h,d){return a(),o("div",null,[...t[0]||(t[0]=[n("",9)])])}const m=e(i,[["render",r]]);export{u as __pageData,m as default}; +import{_ as e,o as a,c as o,ag as n}from"./chunks/framework.ePeAWSvT.js";const u=JSON.parse('{"title":"Container","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/container.md","filePath":"concepts/container.md","lastUpdated":1771163124000}'),i={name:"concepts/container.md"};function r(s,t,l,c,h,d){return a(),o("div",null,[...t[0]||(t[0]=[n("",9)])])}const m=e(i,[["render",r]]);export{u as __pageData,m as default}; diff --git a/assets/concepts_conversation-and-history.md.CrsSw6px.js b/assets/concepts_conversation-and-history.md.BS_PnG4v.js similarity index 92% rename from assets/concepts_conversation-and-history.md.CrsSw6px.js rename to assets/concepts_conversation-and-history.md.BS_PnG4v.js index d2ea60f6..aac2dbbb 100644 --- a/assets/concepts_conversation-and-history.md.CrsSw6px.js +++ b/assets/concepts_conversation-and-history.md.BS_PnG4v.js @@ -1 +1 @@ -import{_ as e,o as a,c as o,ag as i}from"./chunks/framework.DEqXEGcv.js";const p=JSON.parse('{"title":"Conversation and History","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/conversation-and-history.md","filePath":"concepts/conversation-and-history.md","lastUpdated":1771163124000}'),n={name:"concepts/conversation-and-history.md"};function s(r,t,l,c,h,d){return a(),o("div",null,[...t[0]||(t[0]=[i('

Conversation and History

Memoh organizes interactions as conversations with preserved history.

What This Includes

  • Ongoing chat context between users and bots
  • Message-level timeline and traceability
  • Source context for memory extraction and debugging

Why It Matters

Conversation history powers:

  • Better response continuity
  • Auditing and troubleshooting
  • Post-hoc analysis of bot behavior

Web UI Path

  • Chat > Select conversation
  • Bots > Select a bot > History
',9)])])}const _=e(n,[["render",s]]);export{p as __pageData,_ as default}; +import{_ as e,o as a,c as o,ag as i}from"./chunks/framework.ePeAWSvT.js";const p=JSON.parse('{"title":"Conversation and History","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/conversation-and-history.md","filePath":"concepts/conversation-and-history.md","lastUpdated":1771163124000}'),n={name:"concepts/conversation-and-history.md"};function s(r,t,l,c,h,d){return a(),o("div",null,[...t[0]||(t[0]=[i('

Conversation and History

Memoh organizes interactions as conversations with preserved history.

What This Includes

  • Ongoing chat context between users and bots
  • Message-level timeline and traceability
  • Source context for memory extraction and debugging

Why It Matters

Conversation history powers:

  • Better response continuity
  • Auditing and troubleshooting
  • Post-hoc analysis of bot behavior

Web UI Path

  • Chat > Select conversation
  • Bots > Select a bot > History
',9)])])}const _=e(n,[["render",s]]);export{p as __pageData,_ as default}; diff --git a/assets/concepts_conversation-and-history.md.CrsSw6px.lean.js b/assets/concepts_conversation-and-history.md.BS_PnG4v.lean.js similarity index 74% rename from assets/concepts_conversation-and-history.md.CrsSw6px.lean.js rename to assets/concepts_conversation-and-history.md.BS_PnG4v.lean.js index ce83b98a..61d438c9 100644 --- a/assets/concepts_conversation-and-history.md.CrsSw6px.lean.js +++ b/assets/concepts_conversation-and-history.md.BS_PnG4v.lean.js @@ -1 +1 @@ -import{_ as e,o as a,c as o,ag as i}from"./chunks/framework.DEqXEGcv.js";const p=JSON.parse('{"title":"Conversation and History","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/conversation-and-history.md","filePath":"concepts/conversation-and-history.md","lastUpdated":1771163124000}'),n={name:"concepts/conversation-and-history.md"};function s(r,t,l,c,h,d){return a(),o("div",null,[...t[0]||(t[0]=[i("",9)])])}const _=e(n,[["render",s]]);export{p as __pageData,_ as default}; +import{_ as e,o as a,c as o,ag as i}from"./chunks/framework.ePeAWSvT.js";const p=JSON.parse('{"title":"Conversation and History","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/conversation-and-history.md","filePath":"concepts/conversation-and-history.md","lastUpdated":1771163124000}'),n={name:"concepts/conversation-and-history.md"};function s(r,t,l,c,h,d){return a(),o("div",null,[...t[0]||(t[0]=[i("",9)])])}const _=e(n,[["render",s]]);export{p as __pageData,_ as default}; diff --git a/assets/concepts_index.md.C-_J0Dnw.js b/assets/concepts_index.md.Ci6EwNPX.js similarity index 97% rename from assets/concepts_index.md.C-_J0Dnw.js rename to assets/concepts_index.md.Ci6EwNPX.js index 5d1c4e19..2e49f8e5 100644 --- a/assets/concepts_index.md.C-_J0Dnw.js +++ b/assets/concepts_index.md.Ci6EwNPX.js @@ -1 +1 @@ -import{_ as t,o,c as n,ag as a}from"./chunks/framework.DEqXEGcv.js";const m=JSON.parse('{"title":"Concepts Overview","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/index.md","filePath":"concepts/index.md","lastUpdated":1771163124000}'),r={name:"concepts/index.md"};function i(l,e,s,c,d,h){return o(),n("div",null,[...e[0]||(e[0]=[a('

Concepts Overview

This section explains the core design concepts behind Memoh.

Use these pages when you want to understand how Memoh is designed, why features exist, and how different parts work together.

Concept Map

  • Bot: the core runtime unit
  • Provider and Model: how LLM capability is plugged in
  • Memory: how long-term knowledge is stored and retrieved
  • Channel: how external platforms connect to bots
  • Schedule: how tasks are triggered automatically
  • Container: isolated execution environment per bot
  • MCP: external tool and service integration protocol
  • Subagents: specialized delegated agents
  • Skills: reusable capability prompts/instructions
  • Conversation and History: chat context and traceability
  1. Bot
  2. Provider and Model
  3. Memory
  4. Channel
  5. Container
  6. Schedule
  7. MCP
  8. Subagents
  9. Skills
  10. Conversation and History
',7)])])}const g=t(r,[["render",i]]);export{m as __pageData,g as default}; +import{_ as t,o,c as n,ag as a}from"./chunks/framework.ePeAWSvT.js";const m=JSON.parse('{"title":"Concepts Overview","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/index.md","filePath":"concepts/index.md","lastUpdated":1771163124000}'),r={name:"concepts/index.md"};function i(l,e,s,c,d,h){return o(),n("div",null,[...e[0]||(e[0]=[a('

Concepts Overview

This section explains the core design concepts behind Memoh.

Use these pages when you want to understand how Memoh is designed, why features exist, and how different parts work together.

Concept Map

  • Bot: the core runtime unit
  • Provider and Model: how LLM capability is plugged in
  • Memory: how long-term knowledge is stored and retrieved
  • Channel: how external platforms connect to bots
  • Schedule: how tasks are triggered automatically
  • Container: isolated execution environment per bot
  • MCP: external tool and service integration protocol
  • Subagents: specialized delegated agents
  • Skills: reusable capability prompts/instructions
  • Conversation and History: chat context and traceability
  1. Bot
  2. Provider and Model
  3. Memory
  4. Channel
  5. Container
  6. Schedule
  7. MCP
  8. Subagents
  9. Skills
  10. Conversation and History
',7)])])}const g=t(r,[["render",i]]);export{m as __pageData,g as default}; diff --git a/assets/concepts_index.md.C-_J0Dnw.lean.js b/assets/concepts_index.md.Ci6EwNPX.lean.js similarity index 85% rename from assets/concepts_index.md.C-_J0Dnw.lean.js rename to assets/concepts_index.md.Ci6EwNPX.lean.js index 242adce9..22ad6186 100644 --- a/assets/concepts_index.md.C-_J0Dnw.lean.js +++ b/assets/concepts_index.md.Ci6EwNPX.lean.js @@ -1 +1 @@ -import{_ as t,o,c as n,ag as a}from"./chunks/framework.DEqXEGcv.js";const m=JSON.parse('{"title":"Concepts Overview","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/index.md","filePath":"concepts/index.md","lastUpdated":1771163124000}'),r={name:"concepts/index.md"};function i(l,e,s,c,d,h){return o(),n("div",null,[...e[0]||(e[0]=[a("",7)])])}const g=t(r,[["render",i]]);export{m as __pageData,g as default}; +import{_ as t,o,c as n,ag as a}from"./chunks/framework.ePeAWSvT.js";const m=JSON.parse('{"title":"Concepts Overview","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/index.md","filePath":"concepts/index.md","lastUpdated":1771163124000}'),r={name:"concepts/index.md"};function i(l,e,s,c,d,h){return o(),n("div",null,[...e[0]||(e[0]=[a("",7)])])}const g=t(r,[["render",i]]);export{m as __pageData,g as default}; diff --git a/assets/concepts_mcp.md.Bi2x7eIb.js b/assets/concepts_mcp.md.B9KnE-R7.js similarity index 91% rename from assets/concepts_mcp.md.Bi2x7eIb.js rename to assets/concepts_mcp.md.B9KnE-R7.js index 5a4e2faa..cd185d83 100644 --- a/assets/concepts_mcp.md.Bi2x7eIb.js +++ b/assets/concepts_mcp.md.B9KnE-R7.js @@ -1 +1 @@ -import{_ as a,o as e,c as o,ag as i}from"./chunks/framework.DEqXEGcv.js";const m=JSON.parse('{"title":"MCP","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/mcp.md","filePath":"concepts/mcp.md","lastUpdated":1771163124000}'),s={name:"concepts/mcp.md"};function n(r,t,c,l,d,h){return e(),o("div",null,[...t[0]||(t[0]=[i('

MCP

MCP (Model Context Protocol) connects Memoh bots to external tool services.

What MCP Adds

  • Standardized tool discovery and invocation
  • Remote capability extension without changing core bot code
  • Per-bot integration flexibility

Memoh supports MCP connections so bots can access external systems through a unified protocol.

Why It Matters

MCP makes capability extension modular. You can add or swap tool backends with minimal coupling.

Web UI Path

  • Bots > Select a bot > MCP
',9)])])}const u=a(s,[["render",n]]);export{m as __pageData,u as default}; +import{_ as a,o as e,c as o,ag as i}from"./chunks/framework.ePeAWSvT.js";const m=JSON.parse('{"title":"MCP","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/mcp.md","filePath":"concepts/mcp.md","lastUpdated":1771163124000}'),s={name:"concepts/mcp.md"};function n(r,t,c,l,d,h){return e(),o("div",null,[...t[0]||(t[0]=[i('

MCP

MCP (Model Context Protocol) connects Memoh bots to external tool services.

What MCP Adds

  • Standardized tool discovery and invocation
  • Remote capability extension without changing core bot code
  • Per-bot integration flexibility

Memoh supports MCP connections so bots can access external systems through a unified protocol.

Why It Matters

MCP makes capability extension modular. You can add or swap tool backends with minimal coupling.

Web UI Path

  • Bots > Select a bot > MCP
',9)])])}const u=a(s,[["render",n]]);export{m as __pageData,u as default}; diff --git a/assets/concepts_mcp.md.Bi2x7eIb.lean.js b/assets/concepts_mcp.md.B9KnE-R7.lean.js similarity index 69% rename from assets/concepts_mcp.md.Bi2x7eIb.lean.js rename to assets/concepts_mcp.md.B9KnE-R7.lean.js index dad8f3ec..af5cb574 100644 --- a/assets/concepts_mcp.md.Bi2x7eIb.lean.js +++ b/assets/concepts_mcp.md.B9KnE-R7.lean.js @@ -1 +1 @@ -import{_ as a,o as e,c as o,ag as i}from"./chunks/framework.DEqXEGcv.js";const m=JSON.parse('{"title":"MCP","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/mcp.md","filePath":"concepts/mcp.md","lastUpdated":1771163124000}'),s={name:"concepts/mcp.md"};function n(r,t,c,l,d,h){return e(),o("div",null,[...t[0]||(t[0]=[i("",9)])])}const u=a(s,[["render",n]]);export{m as __pageData,u as default}; +import{_ as a,o as e,c as o,ag as i}from"./chunks/framework.ePeAWSvT.js";const m=JSON.parse('{"title":"MCP","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/mcp.md","filePath":"concepts/mcp.md","lastUpdated":1771163124000}'),s={name:"concepts/mcp.md"};function n(r,t,c,l,d,h){return e(),o("div",null,[...t[0]||(t[0]=[i("",9)])])}const u=a(s,[["render",n]]);export{m as __pageData,u as default}; diff --git a/assets/concepts_memory.md.C_8mQlYI.js b/assets/concepts_memory.md.BgBEcLnX.js similarity index 91% rename from assets/concepts_memory.md.C_8mQlYI.js rename to assets/concepts_memory.md.BgBEcLnX.js index cc669e75..242fd89e 100644 --- a/assets/concepts_memory.md.C_8mQlYI.js +++ b/assets/concepts_memory.md.BgBEcLnX.js @@ -1 +1 @@ -import{_ as t,o as a,c as o,ag as r}from"./chunks/framework.DEqXEGcv.js";const p=JSON.parse('{"title":"Memory","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/memory.md","filePath":"concepts/memory.md","lastUpdated":1771163124000}'),i={name:"concepts/memory.md"};function s(n,e,l,m,c,d){return a(),o("div",null,[...e[0]||(e[0]=[r('

Memory

Memory is Memoh's long-term knowledge system for each bot.

How It Works

  • Important facts are extracted from conversations
  • Memories are stored and indexed
  • Relevant memories are retrieved by semantic similarity when needed

Memoh combines vector retrieval with keyword-style retrieval for better recall and precision.

Why It Matters

Memory enables continuity across long timelines, so bots can maintain context beyond short prompt windows.

Web UI Path

  • Bots > Select a bot > Memory
',9)])])}const y=t(i,[["render",s]]);export{p as __pageData,y as default}; +import{_ as t,o as a,c as o,ag as r}from"./chunks/framework.ePeAWSvT.js";const p=JSON.parse('{"title":"Memory","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/memory.md","filePath":"concepts/memory.md","lastUpdated":1771163124000}'),i={name:"concepts/memory.md"};function s(n,e,l,m,c,d){return a(),o("div",null,[...e[0]||(e[0]=[r('

Memory

Memory is Memoh's long-term knowledge system for each bot.

How It Works

  • Important facts are extracted from conversations
  • Memories are stored and indexed
  • Relevant memories are retrieved by semantic similarity when needed

Memoh combines vector retrieval with keyword-style retrieval for better recall and precision.

Why It Matters

Memory enables continuity across long timelines, so bots can maintain context beyond short prompt windows.

Web UI Path

  • Bots > Select a bot > Memory
',9)])])}const y=t(i,[["render",s]]);export{p as __pageData,y as default}; diff --git a/assets/concepts_memory.md.C_8mQlYI.lean.js b/assets/concepts_memory.md.BgBEcLnX.lean.js similarity index 70% rename from assets/concepts_memory.md.C_8mQlYI.lean.js rename to assets/concepts_memory.md.BgBEcLnX.lean.js index d1615b69..f4477315 100644 --- a/assets/concepts_memory.md.C_8mQlYI.lean.js +++ b/assets/concepts_memory.md.BgBEcLnX.lean.js @@ -1 +1 @@ -import{_ as t,o as a,c as o,ag as r}from"./chunks/framework.DEqXEGcv.js";const p=JSON.parse('{"title":"Memory","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/memory.md","filePath":"concepts/memory.md","lastUpdated":1771163124000}'),i={name:"concepts/memory.md"};function s(n,e,l,m,c,d){return a(),o("div",null,[...e[0]||(e[0]=[r("",9)])])}const y=t(i,[["render",s]]);export{p as __pageData,y as default}; +import{_ as t,o as a,c as o,ag as r}from"./chunks/framework.ePeAWSvT.js";const p=JSON.parse('{"title":"Memory","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/memory.md","filePath":"concepts/memory.md","lastUpdated":1771163124000}'),i={name:"concepts/memory.md"};function s(n,e,l,m,c,d){return a(),o("div",null,[...e[0]||(e[0]=[r("",9)])])}const y=t(i,[["render",s]]);export{p as __pageData,y as default}; diff --git a/assets/concepts_provider-and-model.md.DxvTinZF.js b/assets/concepts_provider-and-model.md.DQq3j0ql.js similarity index 97% rename from assets/concepts_provider-and-model.md.DxvTinZF.js rename to assets/concepts_provider-and-model.md.DQq3j0ql.js index 5ead1f5c..3f1fe3a0 100644 --- a/assets/concepts_provider-and-model.md.DxvTinZF.js +++ b/assets/concepts_provider-and-model.md.DQq3j0ql.js @@ -1 +1 @@ -import{_ as t,o,c as d,ag as a}from"./chunks/framework.DEqXEGcv.js";const m=JSON.parse('{"title":"Provider and Model","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/provider-and-model.md","filePath":"concepts/provider-and-model.md","lastUpdated":1771410627000}'),i={name:"concepts/provider-and-model.md"};function r(n,e,l,s,c,p){return o(),d("div",null,[...e[0]||(e[0]=[a('

Provider and Model

In Memoh, provider and model are separate but connected concepts:

  • A provider is the LLM service configuration (API endpoint and key)
  • A model is the concrete chat or embedding model under that provider, including its client type which determines which API protocol to use

Client Types

Each model has a client_type that determines how Memoh communicates with the LLM service:

Client TypeDescription
openai-responsesOpenAI Responses API
openai-completionsOpenAI Chat Completions API (also works with compatible services like Ollama, Mistral, etc.)
anthropic-messagesAnthropic Messages API
google-generative-aiGoogle Generative AI API

Typical Setup

At minimum, a production-ready bot usually needs:

  • One chat model for dialog generation
  • One embedding model for memory indexing and retrieval

Model Assignment to Bot

Bots reference model IDs in settings:

  • chat_model_id
  • memory_model_id
  • embedding_model_id

This enables per-bot customization (for quality, latency, or cost).

Web UI Path

  • Models > Add Provider > Select Provider > Add Model
  • Bots > Select a bot > Settings > Choose chat/memory/embedding models
',15)])])}const g=t(i,[["render",r]]);export{m as __pageData,g as default}; +import{_ as t,o,c as d,ag as a}from"./chunks/framework.ePeAWSvT.js";const m=JSON.parse('{"title":"Provider and Model","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/provider-and-model.md","filePath":"concepts/provider-and-model.md","lastUpdated":1771410627000}'),i={name:"concepts/provider-and-model.md"};function r(n,e,l,s,c,p){return o(),d("div",null,[...e[0]||(e[0]=[a('

Provider and Model

In Memoh, provider and model are separate but connected concepts:

  • A provider is the LLM service configuration (API endpoint and key)
  • A model is the concrete chat or embedding model under that provider, including its client type which determines which API protocol to use

Client Types

Each model has a client_type that determines how Memoh communicates with the LLM service:

Client TypeDescription
openai-responsesOpenAI Responses API
openai-completionsOpenAI Chat Completions API (also works with compatible services like Ollama, Mistral, etc.)
anthropic-messagesAnthropic Messages API
google-generative-aiGoogle Generative AI API

Typical Setup

At minimum, a production-ready bot usually needs:

  • One chat model for dialog generation
  • One embedding model for memory indexing and retrieval

Model Assignment to Bot

Bots reference model IDs in settings:

  • chat_model_id
  • memory_model_id
  • embedding_model_id

This enables per-bot customization (for quality, latency, or cost).

Web UI Path

  • Models > Add Provider > Select Provider > Add Model
  • Bots > Select a bot > Settings > Choose chat/memory/embedding models
',15)])])}const g=t(i,[["render",r]]);export{m as __pageData,g as default}; diff --git a/assets/concepts_provider-and-model.md.DxvTinZF.lean.js b/assets/concepts_provider-and-model.md.DQq3j0ql.lean.js similarity index 86% rename from assets/concepts_provider-and-model.md.DxvTinZF.lean.js rename to assets/concepts_provider-and-model.md.DQq3j0ql.lean.js index ae2bdfea..795f6364 100644 --- a/assets/concepts_provider-and-model.md.DxvTinZF.lean.js +++ b/assets/concepts_provider-and-model.md.DQq3j0ql.lean.js @@ -1 +1 @@ -import{_ as t,o,c as d,ag as a}from"./chunks/framework.DEqXEGcv.js";const m=JSON.parse('{"title":"Provider and Model","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/provider-and-model.md","filePath":"concepts/provider-and-model.md","lastUpdated":1771410627000}'),i={name:"concepts/provider-and-model.md"};function r(n,e,l,s,c,p){return o(),d("div",null,[...e[0]||(e[0]=[a("",15)])])}const g=t(i,[["render",r]]);export{m as __pageData,g as default}; +import{_ as t,o,c as d,ag as a}from"./chunks/framework.ePeAWSvT.js";const m=JSON.parse('{"title":"Provider and Model","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/provider-and-model.md","filePath":"concepts/provider-and-model.md","lastUpdated":1771410627000}'),i={name:"concepts/provider-and-model.md"};function r(n,e,l,s,c,p){return o(),d("div",null,[...e[0]||(e[0]=[a("",15)])])}const g=t(i,[["render",r]]);export{m as __pageData,g as default}; diff --git a/assets/concepts_schedule.md.DZlMw6iP.js b/assets/concepts_schedule.md.COs_2DXO.js similarity index 92% rename from assets/concepts_schedule.md.DZlMw6iP.js rename to assets/concepts_schedule.md.COs_2DXO.js index fc1fd549..85f8b0a3 100644 --- a/assets/concepts_schedule.md.DZlMw6iP.js +++ b/assets/concepts_schedule.md.COs_2DXO.js @@ -1 +1 @@ -import{_ as a,o as t,c as o,ag as c}from"./chunks/framework.DEqXEGcv.js";const p=JSON.parse('{"title":"Schedule","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/schedule.md","filePath":"concepts/schedule.md","lastUpdated":1771163124000}'),r={name:"concepts/schedule.md"};function l(s,e,d,i,n,u){return t(),o("div",null,[...e[0]||(e[0]=[c('

Schedule

A schedule is a cron-based automation rule that runs bot commands at defined times.

Core Fields

  • pattern: cron expression
  • command: command or task to execute
  • enabled: whether the schedule is active
  • max_calls: optional execution cap
  • current_calls: current run count

Why It Matters

Schedules make bots proactive, not only reactive.
You can automate recurring operations like summaries, reminders, checks, and maintenance tasks.

Web UI Path

  • Not available in current Web UI

Schedule is supported by backend and CLI/API, but there is currently no dedicated schedule page in the Web UI.

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

Schedule

A schedule is a cron-based automation rule that runs bot commands at defined times.

Core Fields

  • pattern: cron expression
  • command: command or task to execute
  • enabled: whether the schedule is active
  • max_calls: optional execution cap
  • current_calls: current run count

Why It Matters

Schedules make bots proactive, not only reactive.
You can automate recurring operations like summaries, reminders, checks, and maintenance tasks.

Web UI Path

  • Not available in current Web UI

Schedule is supported by backend and CLI/API, but there is currently no dedicated schedule page in the Web UI.

',9)])])}const m=a(r,[["render",l]]);export{p as __pageData,m as default}; diff --git a/assets/concepts_schedule.md.DZlMw6iP.lean.js b/assets/concepts_schedule.md.COs_2DXO.lean.js similarity index 70% rename from assets/concepts_schedule.md.DZlMw6iP.lean.js rename to assets/concepts_schedule.md.COs_2DXO.lean.js index b0f7b7bd..ec1865fc 100644 --- a/assets/concepts_schedule.md.DZlMw6iP.lean.js +++ b/assets/concepts_schedule.md.COs_2DXO.lean.js @@ -1 +1 @@ -import{_ as a,o as t,c as o,ag as c}from"./chunks/framework.DEqXEGcv.js";const p=JSON.parse('{"title":"Schedule","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/schedule.md","filePath":"concepts/schedule.md","lastUpdated":1771163124000}'),r={name:"concepts/schedule.md"};function l(s,e,d,i,n,u){return t(),o("div",null,[...e[0]||(e[0]=[c("",9)])])}const m=a(r,[["render",l]]);export{p as __pageData,m as default}; +import{_ as a,o as t,c as o,ag as c}from"./chunks/framework.ePeAWSvT.js";const p=JSON.parse('{"title":"Schedule","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/schedule.md","filePath":"concepts/schedule.md","lastUpdated":1771163124000}'),r={name:"concepts/schedule.md"};function l(s,e,d,i,n,u){return t(),o("div",null,[...e[0]||(e[0]=[c("",9)])])}const m=a(r,[["render",l]]);export{p as __pageData,m as default}; diff --git a/assets/concepts_skills.md.F6zpo0BV.js b/assets/concepts_skills.md.HeUi2diL.js similarity index 92% rename from assets/concepts_skills.md.F6zpo0BV.js rename to assets/concepts_skills.md.HeUi2diL.js index 5c1b10b5..588a5166 100644 --- a/assets/concepts_skills.md.F6zpo0BV.js +++ b/assets/concepts_skills.md.HeUi2diL.js @@ -1 +1 @@ -import{_ as e,o as a,c as l,ag as i}from"./chunks/framework.DEqXEGcv.js";const d=JSON.parse('{"title":"Skills","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/skills.md","filePath":"concepts/skills.md","lastUpdated":1771163124000}'),s={name:"concepts/skills.md"};function o(n,t,r,c,p,h){return a(),l("div",null,[...t[0]||(t[0]=[i('

Skills

Skills are reusable capability instructions that guide how a bot (or subagent) solves specific classes of tasks.

Typical Skill Content

  • Scope and purpose
  • Input expectations
  • Execution steps
  • Constraints and output format

Why It Matters

Skills help keep behavior consistent, reduce prompt duplication, and make complex workflows easier to maintain.

Web UI Path

  • Bots > Select a bot > Subagents

Skills are currently primarily managed through agent/workspace configuration and runtime conventions, while subagent-related behavior is visible from the Subagents area.

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

Skills

Skills are reusable capability instructions that guide how a bot (or subagent) solves specific classes of tasks.

Typical Skill Content

  • Scope and purpose
  • Input expectations
  • Execution steps
  • Constraints and output format

Why It Matters

Skills help keep behavior consistent, reduce prompt duplication, and make complex workflows easier to maintain.

Web UI Path

  • Bots > Select a bot > Subagents

Skills are currently primarily managed through agent/workspace configuration and runtime conventions, while subagent-related behavior is visible from the Subagents area.

',9)])])}const k=e(s,[["render",o]]);export{d as __pageData,k as default}; diff --git a/assets/concepts_skills.md.F6zpo0BV.lean.js b/assets/concepts_skills.md.HeUi2diL.lean.js similarity index 70% rename from assets/concepts_skills.md.F6zpo0BV.lean.js rename to assets/concepts_skills.md.HeUi2diL.lean.js index 52cee5e4..37589cfe 100644 --- a/assets/concepts_skills.md.F6zpo0BV.lean.js +++ b/assets/concepts_skills.md.HeUi2diL.lean.js @@ -1 +1 @@ -import{_ as e,o as a,c as l,ag as i}from"./chunks/framework.DEqXEGcv.js";const d=JSON.parse('{"title":"Skills","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/skills.md","filePath":"concepts/skills.md","lastUpdated":1771163124000}'),s={name:"concepts/skills.md"};function o(n,t,r,c,p,h){return a(),l("div",null,[...t[0]||(t[0]=[i("",9)])])}const k=e(s,[["render",o]]);export{d as __pageData,k as default}; +import{_ as e,o as a,c as l,ag as i}from"./chunks/framework.ePeAWSvT.js";const d=JSON.parse('{"title":"Skills","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/skills.md","filePath":"concepts/skills.md","lastUpdated":1771163124000}'),s={name:"concepts/skills.md"};function o(n,t,r,c,p,h){return a(),l("div",null,[...t[0]||(t[0]=[i("",9)])])}const k=e(s,[["render",o]]);export{d as __pageData,k as default}; diff --git a/assets/concepts_subagents.md.B1gVZCBU.js b/assets/concepts_subagents.md.C0_bz0wW.js similarity index 91% rename from assets/concepts_subagents.md.B1gVZCBU.js rename to assets/concepts_subagents.md.C0_bz0wW.js index 5a0cd18c..6d7bf730 100644 --- a/assets/concepts_subagents.md.B1gVZCBU.js +++ b/assets/concepts_subagents.md.C0_bz0wW.js @@ -1 +1 @@ -import{_ as a,o as t,c as s,ag as o}from"./chunks/framework.DEqXEGcv.js";const b=JSON.parse('{"title":"Subagents","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/subagents.md","filePath":"concepts/subagents.md","lastUpdated":1771163124000}'),r={name:"concepts/subagents.md"};function i(n,e,l,c,u,d){return t(),s("div",null,[...e[0]||(e[0]=[o('

Subagents

Subagents are specialized helper agents that a bot can delegate tasks to.

Core Idea

  • The main bot acts as coordinator
  • Subagents focus on narrower tasks
  • Results are combined back into the main workflow

This supports decomposition of complex requests into smaller, more reliable execution units.

Why It Matters

Subagent architecture improves scalability for multi-step tasks and helps separate responsibilities by role.

Web UI Path

  • Bots > Select a bot > Subagents
',9)])])}const p=a(r,[["render",i]]);export{b as __pageData,p as default}; +import{_ as a,o as t,c as s,ag as o}from"./chunks/framework.ePeAWSvT.js";const b=JSON.parse('{"title":"Subagents","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/subagents.md","filePath":"concepts/subagents.md","lastUpdated":1771163124000}'),r={name:"concepts/subagents.md"};function i(n,e,l,c,u,d){return t(),s("div",null,[...e[0]||(e[0]=[o('

Subagents

Subagents are specialized helper agents that a bot can delegate tasks to.

Core Idea

  • The main bot acts as coordinator
  • Subagents focus on narrower tasks
  • Results are combined back into the main workflow

This supports decomposition of complex requests into smaller, more reliable execution units.

Why It Matters

Subagent architecture improves scalability for multi-step tasks and helps separate responsibilities by role.

Web UI Path

  • Bots > Select a bot > Subagents
',9)])])}const p=a(r,[["render",i]]);export{b as __pageData,p as default}; diff --git a/assets/concepts_subagents.md.B1gVZCBU.lean.js b/assets/concepts_subagents.md.C0_bz0wW.lean.js similarity index 71% rename from assets/concepts_subagents.md.B1gVZCBU.lean.js rename to assets/concepts_subagents.md.C0_bz0wW.lean.js index e43a9292..454c9ae1 100644 --- a/assets/concepts_subagents.md.B1gVZCBU.lean.js +++ b/assets/concepts_subagents.md.C0_bz0wW.lean.js @@ -1 +1 @@ -import{_ as a,o as t,c as s,ag as o}from"./chunks/framework.DEqXEGcv.js";const b=JSON.parse('{"title":"Subagents","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/subagents.md","filePath":"concepts/subagents.md","lastUpdated":1771163124000}'),r={name:"concepts/subagents.md"};function i(n,e,l,c,u,d){return t(),s("div",null,[...e[0]||(e[0]=[o("",9)])])}const p=a(r,[["render",i]]);export{b as __pageData,p as default}; +import{_ as a,o as t,c as s,ag as o}from"./chunks/framework.ePeAWSvT.js";const b=JSON.parse('{"title":"Subagents","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/subagents.md","filePath":"concepts/subagents.md","lastUpdated":1771163124000}'),r={name:"concepts/subagents.md"};function i(n,e,l,c,u,d){return t(),s("div",null,[...e[0]||(e[0]=[o("",9)])])}const p=a(r,[["render",i]]);export{b as __pageData,p as default}; diff --git a/assets/getting-started.md.BWV4Fvb6.js b/assets/getting-started.md.C9lgqnN0.js similarity index 98% rename from assets/getting-started.md.BWV4Fvb6.js rename to assets/getting-started.md.C9lgqnN0.js index 5fb89d8d..bd73babe 100644 --- a/assets/getting-started.md.BWV4Fvb6.js +++ b/assets/getting-started.md.C9lgqnN0.js @@ -1 +1 @@ -import{_ as t,o as a,c as o,ag as i}from"./chunks/framework.DEqXEGcv.js";const u=JSON.parse('{"title":"About Memoh","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started.md","filePath":"getting-started.md","lastUpdated":1771410627000}'),n={name:"getting-started.md"};function r(l,e,s,c,d,h){return a(),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, Lark (Feishu), and more. 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.

Key Features

Multi-Bot Management

Create multiple bots. Humans and bots, or bots with each other, can chat privately, in groups, or collaborate. Build bot teams, or set up accounts for family members to manage daily tasks with bots.

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.

Memory Engineering

A deeply engineered memory layer inspired by Mem0:

  • Automatically extracts key facts from each conversation turn and stores them as structured memories
  • Supports semantic search (via Qdrant vector database) and keyword retrieval (BM25)
  • Loads the last 24 hours of conversation context by default
  • Automatic memory compaction to keep the memory store lean
  • 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
  • Lark (Feishu) — Full support
  • Web — Built-in web chat interface
  • CLI — Command-line chat

Agent Capabilities

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

  • Web Search — Brave Search integration for real-time information
  • Subagents — Create specialized subagents, assign skills, and delegate complex tasks
  • Skills — Configurable skill system to extend bot capabilities
  • Container Operations — Read/write files, edit code, and execute commands inside the container
  • Memory Management — Search and manage memories
  • Messaging — Send messages and reactions

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

MCP Protocol Support

Supports Model Context Protocol (MCP) via HTTP and SSE to connect external tool services. 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.

Graphical Configuration

Configure bots, channels, providers, models, MCP, skills, and all other settings through a web management UI — 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.
  • config.toml — Reference for all configuration fields.
',31)])])}const p=t(n,[["render",r]]);export{u as __pageData,p as default}; +import{_ as t,o as a,c as o,ag as i}from"./chunks/framework.ePeAWSvT.js";const u=JSON.parse('{"title":"About Memoh","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started.md","filePath":"getting-started.md","lastUpdated":1771410627000}'),n={name:"getting-started.md"};function r(l,e,s,c,d,h){return a(),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, Lark (Feishu), and more. 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.

Key Features

Multi-Bot Management

Create multiple bots. Humans and bots, or bots with each other, can chat privately, in groups, or collaborate. Build bot teams, or set up accounts for family members to manage daily tasks with bots.

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.

Memory Engineering

A deeply engineered memory layer inspired by Mem0:

  • Automatically extracts key facts from each conversation turn and stores them as structured memories
  • Supports semantic search (via Qdrant vector database) and keyword retrieval (BM25)
  • Loads the last 24 hours of conversation context by default
  • Automatic memory compaction to keep the memory store lean
  • 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
  • Lark (Feishu) — Full support
  • Web — Built-in web chat interface
  • CLI — Command-line chat

Agent Capabilities

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

  • Web Search — Brave Search integration for real-time information
  • Subagents — Create specialized subagents, assign skills, and delegate complex tasks
  • Skills — Configurable skill system to extend bot capabilities
  • Container Operations — Read/write files, edit code, and execute commands inside the container
  • Memory Management — Search and manage memories
  • Messaging — Send messages and reactions

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

MCP Protocol Support

Supports Model Context Protocol (MCP) via HTTP and SSE to connect external tool services. 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.

Graphical Configuration

Configure bots, channels, providers, models, MCP, skills, and all other settings through a web management UI — 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.
  • config.toml — Reference for all configuration fields.
',31)])])}const p=t(n,[["render",r]]);export{u as __pageData,p as default}; diff --git a/assets/getting-started.md.BWV4Fvb6.lean.js b/assets/getting-started.md.C9lgqnN0.lean.js similarity index 70% rename from assets/getting-started.md.BWV4Fvb6.lean.js rename to assets/getting-started.md.C9lgqnN0.lean.js index 6943f839..0a3050f1 100644 --- a/assets/getting-started.md.BWV4Fvb6.lean.js +++ b/assets/getting-started.md.C9lgqnN0.lean.js @@ -1 +1 @@ -import{_ as t,o as a,c as o,ag as i}from"./chunks/framework.DEqXEGcv.js";const u=JSON.parse('{"title":"About Memoh","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started.md","filePath":"getting-started.md","lastUpdated":1771410627000}'),n={name:"getting-started.md"};function r(l,e,s,c,d,h){return a(),o("div",null,[...e[0]||(e[0]=[i("",31)])])}const p=t(n,[["render",r]]);export{u as __pageData,p as default}; +import{_ as t,o as a,c as o,ag as i}from"./chunks/framework.ePeAWSvT.js";const u=JSON.parse('{"title":"About Memoh","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started.md","filePath":"getting-started.md","lastUpdated":1771410627000}'),n={name:"getting-started.md"};function r(l,e,s,c,d,h){return a(),o("div",null,[...e[0]||(e[0]=[i("",31)])])}const p=t(n,[["render",r]]);export{u as __pageData,p as default}; diff --git a/assets/getting-started_create-bot.md.5rz1rkV2.js b/assets/getting-started_create-bot.md.Da6WTI-u.js similarity index 98% rename from assets/getting-started_create-bot.md.5rz1rkV2.js rename to assets/getting-started_create-bot.md.Da6WTI-u.js index 48f4790f..b2e752ef 100644 --- a/assets/getting-started_create-bot.md.5rz1rkV2.js +++ b/assets/getting-started_create-bot.md.Da6WTI-u.js @@ -1 +1 @@ -import{_ as e,o,c as a,ag as r}from"./chunks/framework.DEqXEGcv.js";const n="/getting-started/bots-01-sidebar.png",s="/getting-started/bots-02-create-bot.png",i="/getting-started/bots-03-config.png",c="/getting-started/bots-04-setting.png",d="/getting-started/bots-05-chat.png",_=JSON.parse('{"title":"Create Bot","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/create-bot.md","filePath":"getting-started/create-bot.md","lastUpdated":1771405736000}'),p={name:"getting-started/create-bot.md"};function l(g,t,h,b,u,m){return o(),a("div",null,[...t[0]||(t[0]=[r('

Create Bot

Prerequisites

  • Complete the provider and model configuration.

Step 1: Open the Bot Page

Click Bots in the left sidebar to open the Bots configuration page.

Bots page - sidebar

Step 2: create a Bot

Click the New Bot button (with a plus icon)

Create Bot button

In the dialog, fill in:

FieldDescription
NameA display name for this bot (e.g. my-bot, telegram-public-bot)
Avatar URLThe API base Avatar (e.g.https://gravatar.com/avatar/***)
TypeBots type: person, public, public for channel(e.g. telegram group, qq group, discord channel, person for bind user)

Step 3: Bot Configuration

Click one bot Card in Bots page

Bot Configuration

open settings section

setting

select your available Chat Model, Memory Model, Embedding Model and save for basic Configuration

Step 4: Check Bot

Click Chat in the left sidebar to open chat page. then type your prompt to test the Bot configuration

alt text

Next Steps

',22)])])}const B=e(p,[["render",l]]);export{_ as __pageData,B as default}; +import{_ as e,o,c as a,ag as r}from"./chunks/framework.ePeAWSvT.js";const n="/getting-started/bots-01-sidebar.png",s="/getting-started/bots-02-create-bot.png",i="/getting-started/bots-03-config.png",c="/getting-started/bots-04-setting.png",d="/getting-started/bots-05-chat.png",_=JSON.parse('{"title":"Create Bot","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/create-bot.md","filePath":"getting-started/create-bot.md","lastUpdated":1771405736000}'),p={name:"getting-started/create-bot.md"};function l(g,t,h,b,u,m){return o(),a("div",null,[...t[0]||(t[0]=[r('

Create Bot

Prerequisites

  • Complete the provider and model configuration.

Step 1: Open the Bot Page

Click Bots in the left sidebar to open the Bots configuration page.

Bots page - sidebar

Step 2: create a Bot

Click the New Bot button (with a plus icon)

Create Bot button

In the dialog, fill in:

FieldDescription
NameA display name for this bot (e.g. my-bot, telegram-public-bot)
Avatar URLThe API base Avatar (e.g.https://gravatar.com/avatar/***)
TypeBots type: person, public, public for channel(e.g. telegram group, qq group, discord channel, person for bind user)

Step 3: Bot Configuration

Click one bot Card in Bots page

Bot Configuration

open settings section

setting

select your available Chat Model, Memory Model, Embedding Model and save for basic Configuration

Step 4: Check Bot

Click Chat in the left sidebar to open chat page. then type your prompt to test the Bot configuration

alt text

Next Steps

',22)])])}const B=e(p,[["render",l]]);export{_ as __pageData,B as default}; diff --git a/assets/getting-started_create-bot.md.5rz1rkV2.lean.js b/assets/getting-started_create-bot.md.Da6WTI-u.lean.js similarity index 90% rename from assets/getting-started_create-bot.md.5rz1rkV2.lean.js rename to assets/getting-started_create-bot.md.Da6WTI-u.lean.js index 97a522ea..91d99e3e 100644 --- a/assets/getting-started_create-bot.md.5rz1rkV2.lean.js +++ b/assets/getting-started_create-bot.md.Da6WTI-u.lean.js @@ -1 +1 @@ -import{_ as e,o,c as a,ag as r}from"./chunks/framework.DEqXEGcv.js";const n="/getting-started/bots-01-sidebar.png",s="/getting-started/bots-02-create-bot.png",i="/getting-started/bots-03-config.png",c="/getting-started/bots-04-setting.png",d="/getting-started/bots-05-chat.png",_=JSON.parse('{"title":"Create Bot","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/create-bot.md","filePath":"getting-started/create-bot.md","lastUpdated":1771405736000}'),p={name:"getting-started/create-bot.md"};function l(g,t,h,b,u,m){return o(),a("div",null,[...t[0]||(t[0]=[r("",22)])])}const B=e(p,[["render",l]]);export{_ as __pageData,B as default}; +import{_ as e,o,c as a,ag as r}from"./chunks/framework.ePeAWSvT.js";const n="/getting-started/bots-01-sidebar.png",s="/getting-started/bots-02-create-bot.png",i="/getting-started/bots-03-config.png",c="/getting-started/bots-04-setting.png",d="/getting-started/bots-05-chat.png",_=JSON.parse('{"title":"Create Bot","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/create-bot.md","filePath":"getting-started/create-bot.md","lastUpdated":1771405736000}'),p={name:"getting-started/create-bot.md"};function l(g,t,h,b,u,m){return o(),a("div",null,[...t[0]||(t[0]=[r("",22)])])}const B=e(p,[["render",l]]);export{_ as __pageData,B as default}; diff --git a/assets/getting-started_platform-telegram.md.DnjlGtcF.js b/assets/getting-started_platform-telegram.md.BlTohjMj.js similarity index 98% rename from assets/getting-started_platform-telegram.md.DnjlGtcF.js rename to assets/getting-started_platform-telegram.md.BlTohjMj.js index 6314b2cd..ddfd1f9d 100644 --- a/assets/getting-started_platform-telegram.md.DnjlGtcF.js +++ b/assets/getting-started_platform-telegram.md.BlTohjMj.js @@ -1 +1 @@ -import{_ as t,o,c as a,ag as r}from"./chunks/framework.DEqXEGcv.js";const n="/getting-started/platform-telegram-01-platforms.png",l="/getting-started/platform-telegram-02-bindcode.png",u=JSON.parse('{"title":"Configure Telegram Channel","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/platform-telegram.md","filePath":"getting-started/platform-telegram.md","lastUpdated":1771405736000}'),s={name:"getting-started/platform-telegram.md"};function i(d,e,c,h,p,g){return o(),a("div",null,[...e[0]||(e[0]=[r('

Configure Telegram Channel

This guide walks you through connecting your bot to Telegram, allowing users to chat with your bot via Telegram messages.

Prerequisites

Step 1: Create a Telegram Bot

Open Telegram and search for the official bot @BotFather.

Send the /newbot command to BotFather and follow the prompts:

  1. Enter a name for your bot (display name, e.g., My Memoh Bot)
  2. Enter a username for your bot (must end with bot, e.g., my_memoh_bot)

BotFather will create the bot and provide a Bot Token (e.g., 123456789:ABCdefGHIjklMNOpqrsTUVwxyz).

Save this token securely — you will need it in the next step.

Step 2: Open the Bot Platforms Page

In the Memoh Web UI, click Bots in the left sidebar to open the Bots page.

Select the bot you want to connect to Telegram.

Click the Platforms tab to open the channel configuration page.

Step 3: Add Telegram Channel

Click the Add Channel button.

In the dialog, select Telegram as the channel type.

Fill in the configuration:

FieldDescription
Bot TokenThe token from BotFather (e.g., 123456789:ABCdefGHIjklMNOpqrsTUVwxyz)

Click Save to add the channel.

Add Channel button

Step 4: Bind Your Telegram Account

Open the Memoh web ui setting page, find Bind Code section, select telegram platform and necessary TTL(seconds), Generate bind code.

Bind Code

Open the bot dialog in telegram, send Bind Code to chat, you should get Binding successful! Your identity has been linked. message if successful

Click Save to complete the binding.

Step 6: Test the Connection

Send a message to your bot on Telegram:

  • For public bots: Add the bot to a group, have others mention your bot when sending messages.
  • For person bots: Send a direct message (requires binding in Step 5)

The bot should respond according to its configured model and system prompt.

Next Steps

  • Configure Memory to enable long-term memory for your bot
  • Set up Skills to extend your bot's capabilities
  • Add Schedules for automated tasks
',32)])])}const b=t(s,[["render",i]]);export{u as __pageData,b as default}; +import{_ as t,o,c as a,ag as r}from"./chunks/framework.ePeAWSvT.js";const n="/getting-started/platform-telegram-01-platforms.png",l="/getting-started/platform-telegram-02-bindcode.png",u=JSON.parse('{"title":"Configure Telegram Channel","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/platform-telegram.md","filePath":"getting-started/platform-telegram.md","lastUpdated":1771405736000}'),s={name:"getting-started/platform-telegram.md"};function i(d,e,c,h,p,g){return o(),a("div",null,[...e[0]||(e[0]=[r('

Configure Telegram Channel

This guide walks you through connecting your bot to Telegram, allowing users to chat with your bot via Telegram messages.

Prerequisites

Step 1: Create a Telegram Bot

Open Telegram and search for the official bot @BotFather.

Send the /newbot command to BotFather and follow the prompts:

  1. Enter a name for your bot (display name, e.g., My Memoh Bot)
  2. Enter a username for your bot (must end with bot, e.g., my_memoh_bot)

BotFather will create the bot and provide a Bot Token (e.g., 123456789:ABCdefGHIjklMNOpqrsTUVwxyz).

Save this token securely — you will need it in the next step.

Step 2: Open the Bot Platforms Page

In the Memoh Web UI, click Bots in the left sidebar to open the Bots page.

Select the bot you want to connect to Telegram.

Click the Platforms tab to open the channel configuration page.

Step 3: Add Telegram Channel

Click the Add Channel button.

In the dialog, select Telegram as the channel type.

Fill in the configuration:

FieldDescription
Bot TokenThe token from BotFather (e.g., 123456789:ABCdefGHIjklMNOpqrsTUVwxyz)

Click Save to add the channel.

Add Channel button

Step 4: Bind Your Telegram Account

Open the Memoh web ui setting page, find Bind Code section, select telegram platform and necessary TTL(seconds), Generate bind code.

Bind Code

Open the bot dialog in telegram, send Bind Code to chat, you should get Binding successful! Your identity has been linked. message if successful

Click Save to complete the binding.

Step 6: Test the Connection

Send a message to your bot on Telegram:

  • For public bots: Add the bot to a group, have others mention your bot when sending messages.
  • For person bots: Send a direct message (requires binding in Step 5)

The bot should respond according to its configured model and system prompt.

Next Steps

  • Configure Memory to enable long-term memory for your bot
  • Set up Skills to extend your bot's capabilities
  • Add Schedules for automated tasks
',32)])])}const b=t(s,[["render",i]]);export{u as __pageData,b as default}; diff --git a/assets/getting-started_platform-telegram.md.DnjlGtcF.lean.js b/assets/getting-started_platform-telegram.md.BlTohjMj.lean.js similarity index 89% rename from assets/getting-started_platform-telegram.md.DnjlGtcF.lean.js rename to assets/getting-started_platform-telegram.md.BlTohjMj.lean.js index d163f525..e657156a 100644 --- a/assets/getting-started_platform-telegram.md.DnjlGtcF.lean.js +++ b/assets/getting-started_platform-telegram.md.BlTohjMj.lean.js @@ -1 +1 @@ -import{_ as t,o,c as a,ag as r}from"./chunks/framework.DEqXEGcv.js";const n="/getting-started/platform-telegram-01-platforms.png",l="/getting-started/platform-telegram-02-bindcode.png",u=JSON.parse('{"title":"Configure Telegram Channel","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/platform-telegram.md","filePath":"getting-started/platform-telegram.md","lastUpdated":1771405736000}'),s={name:"getting-started/platform-telegram.md"};function i(d,e,c,h,p,g){return o(),a("div",null,[...e[0]||(e[0]=[r("",32)])])}const b=t(s,[["render",i]]);export{u as __pageData,b as default}; +import{_ as t,o,c as a,ag as r}from"./chunks/framework.ePeAWSvT.js";const n="/getting-started/platform-telegram-01-platforms.png",l="/getting-started/platform-telegram-02-bindcode.png",u=JSON.parse('{"title":"Configure Telegram Channel","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/platform-telegram.md","filePath":"getting-started/platform-telegram.md","lastUpdated":1771405736000}'),s={name:"getting-started/platform-telegram.md"};function i(d,e,c,h,p,g){return o(),a("div",null,[...e[0]||(e[0]=[r("",32)])])}const b=t(s,[["render",i]]);export{u as __pageData,b as default}; diff --git a/assets/getting-started_provider-and-model.md.BA0D0cN8.js b/assets/getting-started_provider-and-model.md.hf8EhYPV.js similarity index 98% rename from assets/getting-started_provider-and-model.md.BA0D0cN8.js rename to assets/getting-started_provider-and-model.md.hf8EhYPV.js index d9c99fcc..9ab9f7df 100644 --- a/assets/getting-started_provider-and-model.md.BA0D0cN8.js +++ b/assets/getting-started_provider-and-model.md.hf8EhYPV.js @@ -1 +1 @@ -import{_ as t,o,c as d,ag as r}from"./chunks/framework.DEqXEGcv.js";const a="/getting-started/provider-model-01-sidebar.png",i="/getting-started/provider-model-02-add-provider.png",l="/getting-started/provider-model-03-provider-dialog.png",n="/getting-started/provider-model-04-provider-selected.png",v=JSON.parse('{"title":"Configure Provider and Model","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/provider-and-model.md","filePath":"getting-started/provider-and-model.md","lastUpdated":1771410627000}'),s={name:"getting-started/provider-and-model.md"};function p(c,e,g,h,m,u){return o(),d("div",null,[...e[0]||(e[0]=[r('

Configure Provider and Model

Before creating bots, you need to configure at least one LLM provider and add chat and embedding models. This guide walks you through the Web UI.

Prerequisites

Step 1: Open the Models Page

Click Models in the left sidebar to open the Provider and Model configuration page.

Models page - sidebar

The page has two panels:

  • Left: Provider list and search
  • Right: Selected provider's details and models (or an empty state if none selected)

Step 2: Add a Provider

Click the Add Provider button (with a plus icon) at the bottom of the left panel.

Add Provider button

In the dialog, fill in:

FieldDescription
NameA display name for this provider (e.g. my-openai, ollama-local)
API KeyYour API key. For local services like Ollama, you can use a placeholder like ollama
Base URLThe API base URL (e.g. https://api.openai.com/v1, http://localhost:11434/v1 for Ollama)

Add Provider dialog

Example — OpenAI:

  • Name: openai
  • API Key: sk-...
  • Base URL: https://api.openai.com/v1

Example — Ollama (local):

  • Name: ollama
  • API Key: ollama
  • Base URL: http://localhost:11434/v1

Click Add to save. The new provider appears in the left sidebar.

Step 3: Add Models

Select a provider from the left panel. The right panel shows the provider form and the model list.

Provider selected - model list

Click Add Model to open the model creation dialog.

Fill in:

FieldDescription
Client TypeAPI protocol: openai-responses, openai-completions, anthropic-messages, or google-generative-ai
Typechat or embedding
ModelModel ID (e.g. gpt-4, llama3.2, text-embedding-3-small)
Display NameOptional display name
DimensionsRequired for embedding models (e.g. 1536 for OpenAI embeddings)
MultimodalFor chat models only — enable if the model supports images

You need at least:

  • One chat model (for conversation)
  • One embedding model (for memory)

Add them under the same or different providers. For example:

  • Chat: gpt-4 with client type openai-responses (OpenAI) or llama3.2 with client type openai-completions (Ollama)
  • Embedding: text-embedding-3-small with client type openai-completions (OpenAI) or nomic-embed-text with client type openai-completions (Ollama)

Step 4: Edit or Delete

  • Provider: After selecting a provider, you can edit Name, API Key, and Base URL in the right panel, or delete the provider.
  • Model: Use the edit or delete actions on each model card in the list.

Next Steps

Once you have at least one chat model and one embedding model, you can create a bot (via Bots in the sidebar) and assign these models in the bot settings.

',34)])])}const f=t(s,[["render",p]]);export{v as __pageData,f as default}; +import{_ as t,o,c as d,ag as r}from"./chunks/framework.ePeAWSvT.js";const a="/getting-started/provider-model-01-sidebar.png",i="/getting-started/provider-model-02-add-provider.png",l="/getting-started/provider-model-03-provider-dialog.png",n="/getting-started/provider-model-04-provider-selected.png",v=JSON.parse('{"title":"Configure Provider and Model","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/provider-and-model.md","filePath":"getting-started/provider-and-model.md","lastUpdated":1771410627000}'),s={name:"getting-started/provider-and-model.md"};function p(c,e,g,h,m,u){return o(),d("div",null,[...e[0]||(e[0]=[r('

Configure Provider and Model

Before creating bots, you need to configure at least one LLM provider and add chat and embedding models. This guide walks you through the Web UI.

Prerequisites

Step 1: Open the Models Page

Click Models in the left sidebar to open the Provider and Model configuration page.

Models page - sidebar

The page has two panels:

  • Left: Provider list and search
  • Right: Selected provider's details and models (or an empty state if none selected)

Step 2: Add a Provider

Click the Add Provider button (with a plus icon) at the bottom of the left panel.

Add Provider button

In the dialog, fill in:

FieldDescription
NameA display name for this provider (e.g. my-openai, ollama-local)
API KeyYour API key. For local services like Ollama, you can use a placeholder like ollama
Base URLThe API base URL (e.g. https://api.openai.com/v1, http://localhost:11434/v1 for Ollama)

Add Provider dialog

Example — OpenAI:

  • Name: openai
  • API Key: sk-...
  • Base URL: https://api.openai.com/v1

Example — Ollama (local):

  • Name: ollama
  • API Key: ollama
  • Base URL: http://localhost:11434/v1

Click Add to save. The new provider appears in the left sidebar.

Step 3: Add Models

Select a provider from the left panel. The right panel shows the provider form and the model list.

Provider selected - model list

Click Add Model to open the model creation dialog.

Fill in:

FieldDescription
Client TypeAPI protocol: openai-responses, openai-completions, anthropic-messages, or google-generative-ai
Typechat or embedding
ModelModel ID (e.g. gpt-4, llama3.2, text-embedding-3-small)
Display NameOptional display name
DimensionsRequired for embedding models (e.g. 1536 for OpenAI embeddings)
MultimodalFor chat models only — enable if the model supports images

You need at least:

  • One chat model (for conversation)
  • One embedding model (for memory)

Add them under the same or different providers. For example:

  • Chat: gpt-4 with client type openai-responses (OpenAI) or llama3.2 with client type openai-completions (Ollama)
  • Embedding: text-embedding-3-small with client type openai-completions (OpenAI) or nomic-embed-text with client type openai-completions (Ollama)

Step 4: Edit or Delete

  • Provider: After selecting a provider, you can edit Name, API Key, and Base URL in the right panel, or delete the provider.
  • Model: Use the edit or delete actions on each model card in the list.

Next Steps

Once you have at least one chat model and one embedding model, you can create a bot (via Bots in the sidebar) and assign these models in the bot settings.

',34)])])}const f=t(s,[["render",p]]);export{v as __pageData,f as default}; diff --git a/assets/getting-started_provider-and-model.md.BA0D0cN8.lean.js b/assets/getting-started_provider-and-model.md.hf8EhYPV.lean.js similarity index 91% rename from assets/getting-started_provider-and-model.md.BA0D0cN8.lean.js rename to assets/getting-started_provider-and-model.md.hf8EhYPV.lean.js index 05d89d3f..a8325e4e 100644 --- a/assets/getting-started_provider-and-model.md.BA0D0cN8.lean.js +++ b/assets/getting-started_provider-and-model.md.hf8EhYPV.lean.js @@ -1 +1 @@ -import{_ as t,o,c as d,ag as r}from"./chunks/framework.DEqXEGcv.js";const a="/getting-started/provider-model-01-sidebar.png",i="/getting-started/provider-model-02-add-provider.png",l="/getting-started/provider-model-03-provider-dialog.png",n="/getting-started/provider-model-04-provider-selected.png",v=JSON.parse('{"title":"Configure Provider and Model","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/provider-and-model.md","filePath":"getting-started/provider-and-model.md","lastUpdated":1771410627000}'),s={name:"getting-started/provider-and-model.md"};function p(c,e,g,h,m,u){return o(),d("div",null,[...e[0]||(e[0]=[r("",34)])])}const f=t(s,[["render",p]]);export{v as __pageData,f as default}; +import{_ as t,o,c as d,ag as r}from"./chunks/framework.ePeAWSvT.js";const a="/getting-started/provider-model-01-sidebar.png",i="/getting-started/provider-model-02-add-provider.png",l="/getting-started/provider-model-03-provider-dialog.png",n="/getting-started/provider-model-04-provider-selected.png",v=JSON.parse('{"title":"Configure Provider and Model","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started/provider-and-model.md","filePath":"getting-started/provider-and-model.md","lastUpdated":1771410627000}'),s={name:"getting-started/provider-and-model.md"};function p(c,e,g,h,m,u){return o(),d("div",null,[...e[0]||(e[0]=[r("",34)])])}const f=t(s,[["render",p]]);export{v as __pageData,f as default}; diff --git a/assets/index.md.BxPQTo9L.js b/assets/index.md.BJ6rgQi7.js similarity index 92% rename from assets/index.md.BxPQTo9L.js rename to assets/index.md.BJ6rgQi7.js index 8f0b2a54..d6701e19 100644 --- a/assets/index.md.BxPQTo9L.js +++ b/assets/index.md.BJ6rgQi7.js @@ -1 +1 @@ -import{_ as t,o as a,c as o,ag as n}from"./chunks/framework.DEqXEGcv.js";const u=JSON.parse('{"title":"Memoh Documentation","description":"","frontmatter":{},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1771162384000}'),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 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.ePeAWSvT.js";const u=JSON.parse('{"title":"Memoh Documentation","description":"","frontmatter":{},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1771162384000}'),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 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.BxPQTo9L.lean.js b/assets/index.md.BJ6rgQi7.lean.js similarity index 69% rename from assets/index.md.BxPQTo9L.lean.js rename to assets/index.md.BJ6rgQi7.lean.js index 231cf4a9..357572a0 100644 --- a/assets/index.md.BxPQTo9L.lean.js +++ b/assets/index.md.BJ6rgQi7.lean.js @@ -1 +1 @@ -import{_ as t,o as a,c as o,ag as n}from"./chunks/framework.DEqXEGcv.js";const u=JSON.parse('{"title":"Memoh Documentation","description":"","frontmatter":{},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1771162384000}'),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.ePeAWSvT.js";const u=JSON.parse('{"title":"Memoh Documentation","description":"","frontmatter":{},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1771162384000}'),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_config-toml.md.BNcS6Wgd.js b/assets/installation_config-toml.md.BJygOlxN.js similarity index 99% rename from assets/installation_config-toml.md.BNcS6Wgd.js rename to assets/installation_config-toml.md.BJygOlxN.js index 65949e1c..dbf95a05 100644 --- a/assets/installation_config-toml.md.BNcS6Wgd.js +++ b/assets/installation_config-toml.md.BJygOlxN.js @@ -1,4 +1,4 @@ -import{_ as s,o as a,c as e,ag as i}from"./chunks/framework.DEqXEGcv.js";const k=JSON.parse('{"title":"config.toml Reference","description":"","frontmatter":{},"headers":[],"relativePath":"installation/config-toml.md","filePath":"installation/config-toml.md","lastUpdated":1771874735000}'),d={name:"installation/config-toml.md"};function n(o,t,h,r,l,p){return a(),e("div",null,[...t[0]||(t[0]=[i(`

config.toml Reference

Memoh uses a TOML configuration file. By default it looks for config.toml in the current directory. With Docker, you can mount a custom config via MEMOH_CONFIG (see Docker installation).

Full Example

toml
[log]
+import{_ as s,o as a,c as e,ag as i}from"./chunks/framework.ePeAWSvT.js";const k=JSON.parse('{"title":"config.toml Reference","description":"","frontmatter":{},"headers":[],"relativePath":"installation/config-toml.md","filePath":"installation/config-toml.md","lastUpdated":1771874735000}'),d={name:"installation/config-toml.md"};function n(o,t,h,r,l,p){return a(),e("div",null,[...t[0]||(t[0]=[i(`

config.toml Reference

Memoh uses a TOML configuration file. By default it looks for config.toml in the current directory. With Docker, you can mount a custom config via MEMOH_CONFIG (see Docker installation).

Full Example

toml
[log]
 level = "info"
 format = "text"
 
diff --git a/assets/installation_config-toml.md.BNcS6Wgd.lean.js b/assets/installation_config-toml.md.BJygOlxN.lean.js
similarity index 72%
rename from assets/installation_config-toml.md.BNcS6Wgd.lean.js
rename to assets/installation_config-toml.md.BJygOlxN.lean.js
index ece683b3..5cfb45d4 100644
--- a/assets/installation_config-toml.md.BNcS6Wgd.lean.js
+++ b/assets/installation_config-toml.md.BJygOlxN.lean.js
@@ -1 +1 @@
-import{_ as s,o as a,c as e,ag as i}from"./chunks/framework.DEqXEGcv.js";const k=JSON.parse('{"title":"config.toml Reference","description":"","frontmatter":{},"headers":[],"relativePath":"installation/config-toml.md","filePath":"installation/config-toml.md","lastUpdated":1771874735000}'),d={name:"installation/config-toml.md"};function n(o,t,h,r,l,p){return a(),e("div",null,[...t[0]||(t[0]=[i("",30)])])}const E=s(d,[["render",n]]);export{k as __pageData,E as default};
+import{_ as s,o as a,c as e,ag as i}from"./chunks/framework.ePeAWSvT.js";const k=JSON.parse('{"title":"config.toml Reference","description":"","frontmatter":{},"headers":[],"relativePath":"installation/config-toml.md","filePath":"installation/config-toml.md","lastUpdated":1771874735000}'),d={name:"installation/config-toml.md"};function n(o,t,h,r,l,p){return a(),e("div",null,[...t[0]||(t[0]=[i("",30)])])}const E=s(d,[["render",n]]);export{k as __pageData,E as default};
diff --git a/assets/installation_docker.md.DfhF5nY7.js b/assets/installation_docker.md.Cmz-MLJu.js
similarity index 81%
rename from assets/installation_docker.md.DfhF5nY7.js
rename to assets/installation_docker.md.Cmz-MLJu.js
index cdd558b2..434af352 100644
--- a/assets/installation_docker.md.DfhF5nY7.js
+++ b/assets/installation_docker.md.Cmz-MLJu.js
@@ -1,4 +1,4 @@
-import{_ as i,o as a,c as e,ag as t}from"./chunks/framework.DEqXEGcv.js";const c=JSON.parse('{"title":"Docker Installation","description":"","frontmatter":{},"headers":[],"relativePath":"installation/docker.md","filePath":"installation/docker.md","lastUpdated":1771431627000}'),n={name:"installation/docker.md"};function l(o,s,h,r,p,d){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, Containerd, the main server, 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

One-Click Install

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

bash
curl -fsSL https://raw.githubusercontent.com/memohai/Memoh/main/scripts/install.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. Clone the repository
  4. Generate config.toml from the Docker template
  5. Start all services with docker compose up -d --build

Silent install (use all defaults, no prompts):

bash
curl -fsSL https://raw.githubusercontent.com/memohai/Memoh/main/scripts/install.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

Manual Install

Clone the repository and start with Docker Compose:

bash
git clone https://github.com/memohai/Memoh.git
+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":1772006186000}'),n={name:"installation/docker.md"};function l(o,s,h,r,p,d){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, Containerd, the main server, 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

One-Click Install

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. Clone the repository
  4. Generate config.toml from the Docker template
  5. Start all services with docker compose up -d --build

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

Manual Install

Clone the repository and start with Docker Compose:

bash
git clone https://github.com/memohai/Memoh.git
 cd Memoh
 sudo docker compose up -d

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

By default, Docker Compose uses conf/app.docker.toml. No config file in the project root is mounted — only this built-in config is used. See config.toml reference for all configuration fields.

Access Points

After startup:

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

Default login: admin / admin123

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

Custom Configuration

To use your own config file:

  1. Copy the Docker config template and edit it. See config.toml reference for field descriptions:
bash
cp conf/app.docker.toml config.toml
 nano config.toml
  1. Point MEMOH_CONFIG at your config when starting (path is on the host; run docker compose from the project root):
bash
sudo MEMOH_CONFIG=./config.toml docker compose up -d

Recommended changes for production (see config.toml reference for details):

  • admin.password — Change the admin password
  • auth.jwt_secret — Generate with openssl rand -base64 32
  • postgres.password — Change the database password (and set POSTGRES_PASSWORD when running docker compose)

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.DfhF5nY7.lean.js b/assets/installation_docker.md.Cmz-MLJu.lean.js
similarity index 57%
rename from assets/installation_docker.md.DfhF5nY7.lean.js
rename to assets/installation_docker.md.Cmz-MLJu.lean.js
index a11b647a..774f868d 100644
--- a/assets/installation_docker.md.DfhF5nY7.lean.js
+++ b/assets/installation_docker.md.Cmz-MLJu.lean.js
@@ -1 +1 @@
-import{_ as i,o as a,c as e,ag as t}from"./chunks/framework.DEqXEGcv.js";const c=JSON.parse('{"title":"Docker Installation","description":"","frontmatter":{},"headers":[],"relativePath":"installation/docker.md","filePath":"installation/docker.md","lastUpdated":1771431627000}'),n={name:"installation/docker.md"};function l(o,s,h,r,p,d){return a(),e("div",null,[...s[0]||(s[0]=[t("",40)])])}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.ePeAWSvT.js";const c=JSON.parse('{"title":"Docker Installation","description":"","frontmatter":{},"headers":[],"relativePath":"installation/docker.md","filePath":"installation/docker.md","lastUpdated":1772006186000}'),n={name:"installation/docker.md"};function l(o,s,h,r,p,d){return a(),e("div",null,[...s[0]||(s[0]=[t("",40)])])}const g=i(n,[["render",l]]);export{c as __pageData,g as default};
diff --git a/assets/troubleshooting.md.DGskTOuw.js b/assets/troubleshooting.md.rkMlAGoL.js
similarity index 98%
rename from assets/troubleshooting.md.DGskTOuw.js
rename to assets/troubleshooting.md.rkMlAGoL.js
index 5bc289f3..625579d9 100644
--- a/assets/troubleshooting.md.DGskTOuw.js
+++ b/assets/troubleshooting.md.rkMlAGoL.js
@@ -1 +1 @@
-import{_ as a,o as i,c as e,ag as t}from"./chunks/framework.DEqXEGcv.js";const k=JSON.parse('{"title":"Troubleshooting","description":"","frontmatter":{},"headers":[],"relativePath":"troubleshooting.md","filePath":"troubleshooting.md","lastUpdated":1771431627000}'),n={name:"troubleshooting.md"};function o(l,s,h,r,p,d){return i(),e("div",null,[...s[0]||(s[0]=[t('

Troubleshooting

MCP Container: no running task found: task mcp-xxx not found

Symptom

When a bot tries to use container tools (e.g., execute commands), the server logs show:

level=WARN msg="exec failed" provider=container_tool bot_id=xxx command=date error="no running task found: task mcp-xxx not found"

The containerd container logs may also show:

level=error msg="failed to delete task" error="rpc error: code = NotFound desc = container not created: not found"

Cause

The [mcp] data_root in config.toml is set to a host machine path (e.g., /Users/you/Code/Memoh/data), but the server and containerd containers use a Docker named volume mounted at /opt/memoh/data.

When the server creates an MCP container inside containerd, it uses data_root as the mount source. Since this host path does not exist inside the containerd container, runc fails with:

failed to fulfil mount request: open /Users/you/Code/Memoh/data/bots/xxx: no such file or directory

Solution

  1. Set data_root to the in-container path in your config:
toml
[mcp]\ndata_root = "/opt/memoh/data"
  1. Clean up the stale containerd container (if it exists):
bash
docker exec memoh-containerd ctr -n default containers rm mcp-<bot-id>
  1. Restart the server:
bash
docker compose restart server

Note: If you also run the server locally (outside Docker), keep the Docker config (conf/app.docker.toml) separate from your local config.toml, and update docker-compose.yml to mount the Docker-specific config instead.

MCP Container: Image update not taking effect after rebuild

Symptom

After updating Dockerfile.containerd (e.g., adding Node.js/Python to the MCP image), rebuilding and restarting the containerd container, MCP tools still fail with errors like:

exec: "npx": executable file not found in $PATH

Cause

The containerd entrypoint script (containerd-entrypoint.sh) skips image import if the image already exists in containerd's image store:

sh
if ! ctr -n default images check "name==${MCP_IMAGE}" ...; then\n  # import\nfi

Since containerd_data is a persistent Docker volume, the old MCP image survives across container restarts. The new image embedded in the rebuilt Docker image is never imported.

Solution

  1. Remove the old MCP image from containerd:
bash
docker exec memoh-containerd ctr -n default images rm docker.io/library/memoh-mcp:latest
  1. Restart the containerd container to trigger re-import:
bash
docker compose restart containerd
  1. Verify the new image was imported (size should be significantly larger if Node.js/Python were added):
bash
docker exec memoh-containerd ctr -n default images ls
  1. Delete the bot's MCP container and recreate it from the bot detail page so it uses the new image.
',35)])])}const g=a(n,[["render",o]]);export{k as __pageData,g as default}; +import{_ as a,o as i,c as e,ag as t}from"./chunks/framework.ePeAWSvT.js";const k=JSON.parse('{"title":"Troubleshooting","description":"","frontmatter":{},"headers":[],"relativePath":"troubleshooting.md","filePath":"troubleshooting.md","lastUpdated":1771431627000}'),n={name:"troubleshooting.md"};function o(l,s,h,r,p,d){return i(),e("div",null,[...s[0]||(s[0]=[t('

Troubleshooting

MCP Container: no running task found: task mcp-xxx not found

Symptom

When a bot tries to use container tools (e.g., execute commands), the server logs show:

level=WARN msg="exec failed" provider=container_tool bot_id=xxx command=date error="no running task found: task mcp-xxx not found"

The containerd container logs may also show:

level=error msg="failed to delete task" error="rpc error: code = NotFound desc = container not created: not found"

Cause

The [mcp] data_root in config.toml is set to a host machine path (e.g., /Users/you/Code/Memoh/data), but the server and containerd containers use a Docker named volume mounted at /opt/memoh/data.

When the server creates an MCP container inside containerd, it uses data_root as the mount source. Since this host path does not exist inside the containerd container, runc fails with:

failed to fulfil mount request: open /Users/you/Code/Memoh/data/bots/xxx: no such file or directory

Solution

  1. Set data_root to the in-container path in your config:
toml
[mcp]\ndata_root = "/opt/memoh/data"
  1. Clean up the stale containerd container (if it exists):
bash
docker exec memoh-containerd ctr -n default containers rm mcp-<bot-id>
  1. Restart the server:
bash
docker compose restart server

Note: If you also run the server locally (outside Docker), keep the Docker config (conf/app.docker.toml) separate from your local config.toml, and update docker-compose.yml to mount the Docker-specific config instead.

MCP Container: Image update not taking effect after rebuild

Symptom

After updating Dockerfile.containerd (e.g., adding Node.js/Python to the MCP image), rebuilding and restarting the containerd container, MCP tools still fail with errors like:

exec: "npx": executable file not found in $PATH

Cause

The containerd entrypoint script (containerd-entrypoint.sh) skips image import if the image already exists in containerd's image store:

sh
if ! ctr -n default images check "name==${MCP_IMAGE}" ...; then\n  # import\nfi

Since containerd_data is a persistent Docker volume, the old MCP image survives across container restarts. The new image embedded in the rebuilt Docker image is never imported.

Solution

  1. Remove the old MCP image from containerd:
bash
docker exec memoh-containerd ctr -n default images rm docker.io/library/memoh-mcp:latest
  1. Restart the containerd container to trigger re-import:
bash
docker compose restart containerd
  1. Verify the new image was imported (size should be significantly larger if Node.js/Python were added):
bash
docker exec memoh-containerd ctr -n default images ls
  1. Delete the bot's MCP container and recreate it from the bot detail page so it uses the new image.
',35)])])}const g=a(n,[["render",o]]);export{k as __pageData,g as default}; diff --git a/assets/troubleshooting.md.DGskTOuw.lean.js b/assets/troubleshooting.md.rkMlAGoL.lean.js similarity index 70% rename from assets/troubleshooting.md.DGskTOuw.lean.js rename to assets/troubleshooting.md.rkMlAGoL.lean.js index a19aefeb..12bfd7ec 100644 --- a/assets/troubleshooting.md.DGskTOuw.lean.js +++ b/assets/troubleshooting.md.rkMlAGoL.lean.js @@ -1 +1 @@ -import{_ as a,o as i,c as e,ag as t}from"./chunks/framework.DEqXEGcv.js";const k=JSON.parse('{"title":"Troubleshooting","description":"","frontmatter":{},"headers":[],"relativePath":"troubleshooting.md","filePath":"troubleshooting.md","lastUpdated":1771431627000}'),n={name:"troubleshooting.md"};function o(l,s,h,r,p,d){return i(),e("div",null,[...s[0]||(s[0]=[t("",35)])])}const g=a(n,[["render",o]]);export{k as __pageData,g as default}; +import{_ as a,o as i,c as e,ag as t}from"./chunks/framework.ePeAWSvT.js";const k=JSON.parse('{"title":"Troubleshooting","description":"","frontmatter":{},"headers":[],"relativePath":"troubleshooting.md","filePath":"troubleshooting.md","lastUpdated":1771431627000}'),n={name:"troubleshooting.md"};function o(l,s,h,r,p,d){return i(),e("div",null,[...s[0]||(s[0]=[t("",35)])])}const g=a(n,[["render",o]]);export{k as __pageData,g as default}; diff --git a/assets/zh_concepts_identity-and-binding.md.BpgZjxhl.js b/assets/zh_concepts_identity-and-binding.md.B6I6pSqI.js similarity index 96% rename from assets/zh_concepts_identity-and-binding.md.BpgZjxhl.js rename to assets/zh_concepts_identity-and-binding.md.B6I6pSqI.js index 7d1cbdb6..da61f8a7 100644 --- a/assets/zh_concepts_identity-and-binding.md.BpgZjxhl.js +++ b/assets/zh_concepts_identity-and-binding.md.B6I6pSqI.js @@ -1 +1 @@ -import{_ as o,o as e,c as a,ag as i}from"./chunks/framework.DEqXEGcv.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.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}; diff --git a/assets/zh_concepts_identity-and-binding.md.BpgZjxhl.lean.js b/assets/zh_concepts_identity-and-binding.md.B6I6pSqI.lean.js similarity index 74% rename from assets/zh_concepts_identity-and-binding.md.BpgZjxhl.lean.js rename to assets/zh_concepts_identity-and-binding.md.B6I6pSqI.lean.js index 2c554c0b..1432b7b5 100644 --- a/assets/zh_concepts_identity-and-binding.md.BpgZjxhl.lean.js +++ b/assets/zh_concepts_identity-and-binding.md.B6I6pSqI.lean.js @@ -1 +1 @@ -import{_ as o,o as e,c as a,ag as i}from"./chunks/framework.DEqXEGcv.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.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}; diff --git a/assets/zh_concepts_index.md.CFVegv9w.js b/assets/zh_concepts_index.md.uaZIblvt.js similarity index 93% rename from assets/zh_concepts_index.md.CFVegv9w.js rename to assets/zh_concepts_index.md.uaZIblvt.js index 5d81575b..4f2d0c85 100644 --- a/assets/zh_concepts_index.md.CFVegv9w.js +++ b/assets/zh_concepts_index.md.uaZIblvt.js @@ -1 +1 @@ -import{_ as a,o as t,c as o,ag as n}from"./chunks/framework.DEqXEGcv.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.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}; diff --git a/assets/zh_concepts_index.md.CFVegv9w.lean.js b/assets/zh_concepts_index.md.uaZIblvt.lean.js similarity index 71% rename from assets/zh_concepts_index.md.CFVegv9w.lean.js rename to assets/zh_concepts_index.md.uaZIblvt.lean.js index ead9f6b9..5bd73a1f 100644 --- a/assets/zh_concepts_index.md.CFVegv9w.lean.js +++ b/assets/zh_concepts_index.md.uaZIblvt.lean.js @@ -1 +1 @@ -import{_ as a,o as t,c as o,ag as n}from"./chunks/framework.DEqXEGcv.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.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}; diff --git a/assets/zh_index.md.N8D_wq8q.js b/assets/zh_index.md.DbGu2QT1.js similarity index 92% rename from assets/zh_index.md.N8D_wq8q.js rename to assets/zh_index.md.DbGu2QT1.js index edd2af0c..581ec206 100644 --- a/assets/zh_index.md.N8D_wq8q.js +++ b/assets/zh_index.md.DbGu2QT1.js @@ -1 +1 @@ -import{_ as a,o as t,c as l,ag as i}from"./chunks/framework.DEqXEGcv.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.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}; diff --git a/assets/zh_index.md.N8D_wq8q.lean.js b/assets/zh_index.md.DbGu2QT1.lean.js similarity index 69% rename from assets/zh_index.md.N8D_wq8q.lean.js rename to assets/zh_index.md.DbGu2QT1.lean.js index 554dd7ee..b3fbd93d 100644 --- a/assets/zh_index.md.N8D_wq8q.lean.js +++ b/assets/zh_index.md.DbGu2QT1.lean.js @@ -1 +1 @@ -import{_ as a,o as t,c as l,ag as i}from"./chunks/framework.DEqXEGcv.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.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}; diff --git a/assets/zh_style_terminology.md.DtBRpWD7.js b/assets/zh_style_terminology.md.C89A7q1C.js similarity index 96% rename from assets/zh_style_terminology.md.DtBRpWD7.js rename to assets/zh_style_terminology.md.C89A7q1C.js index 8b656477..e446d13d 100644 --- a/assets/zh_style_terminology.md.DtBRpWD7.js +++ b/assets/zh_style_terminology.md.C89A7q1C.js @@ -1 +1 @@ -import{_ as e,o as l,c as t,ag as a}from"./chunks/framework.DEqXEGcv.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.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}; diff --git a/assets/zh_style_terminology.md.DtBRpWD7.lean.js b/assets/zh_style_terminology.md.C89A7q1C.lean.js similarity index 71% rename from assets/zh_style_terminology.md.DtBRpWD7.lean.js rename to assets/zh_style_terminology.md.C89A7q1C.lean.js index 85d788cd..217f4f6d 100644 --- a/assets/zh_style_terminology.md.DtBRpWD7.lean.js +++ b/assets/zh_style_terminology.md.C89A7q1C.lean.js @@ -1 +1 @@ -import{_ as e,o as l,c as t,ag as a}from"./chunks/framework.DEqXEGcv.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.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}; diff --git a/blogs/2026-02-16.html b/blogs/2026-02-16.html index ab7f53be..c3c1d050 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 82cdb831..33c9e5c5 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/cli/auth.html b/cli/auth.html index 4cd7a590..6495f5d5 100644 --- a/cli/auth.html +++ b/cli/auth.html @@ -9,18 +9,18 @@ - + - - - + + +
Skip to content

Auth Commands

login

Log in to the Memoh server. Prompts for username and password, then stores the JWT token in ~/.memoh/token.json.

bash
memoh login

Interactive prompts:

  • Username
  • Password

logout

Clear the stored token and log out.

bash
memoh logout

whoami

Show the current logged-in user (username, display name, user ID, role). Falls back to token info if the API call fails.

bash
memoh whoami

Published under AGPLv3

- + \ No newline at end of file diff --git a/cli/bot.html b/cli/bot.html index 4e0ef6a9..ad235472 100644 --- a/cli/bot.html +++ b/cli/bot.html @@ -9,18 +9,18 @@ - + - - - + + +
Skip to content

Bot Commands

Manage bots and chat with them.

bot list

List all bots. Admins can filter by owner.

bash
memoh bot list [options]
OptionDescription
--owner <user_id>Filter by owner user ID (admin only)

bot create

Create a new bot. Prompts for type and optionally name.

bash
memoh bot create [options]
OptionDescription
--type <type>personal or public
--name <name>Display name
--avatar <url>Avatar URL
--activeSet bot active
--inactiveSet bot inactive

bot update

Update bot info. Bot ID can be passed as argument or selected interactively.

bash
memoh bot update [id] [options]
OptionDescription
--name <name>Display name
--avatar <url>Avatar URL
--activeSet bot active
--inactiveSet bot inactive

bot delete

Delete a bot. Asks for confirmation.

bash
memoh bot delete [id]

bot chat

Start an interactive streaming chat with a bot.

bash
memoh bot chat [id]

Type messages and press Enter. Type exit to quit.

bot set-model

Enable a model for a bot (chat, memory, or embedding).

bash
memoh bot set-model [id] [options]
OptionDescription
--as <usage>chat, memory, or embedding
--model <model_id>Model ID

Example:

bash
memoh bot set-model my-bot-id --as chat --model gpt-4

Published under AGPLv3

- + \ No newline at end of file diff --git a/cli/channel.html b/cli/channel.html index c04013e5..dcb24f68 100644 --- a/cli/channel.html +++ b/cli/channel.html @@ -9,18 +9,18 @@ - + - - - + + +
Skip to content

Channel Commands

Manage channels and bot/user channel configuration.

channel list

List available channel types (e.g. telegram, feishu, local).

bash
memoh channel list

channel info

Show channel metadata and schema for a channel type.

bash
memoh channel info [type]

If type is omitted, prompts to select from available channels.

channel config get

Get a bot's channel configuration.

bash
memoh channel config get [bot_id] [options]
OptionDescription
--type <type>Channel type

channel config set

Set a bot's channel configuration. Currently supports Feishu.

bash
memoh channel config set [bot_id] [options]
OptionDescription
--type <type>Channel type (e.g. feishu)
--app_id <id>Feishu App ID
--app_secret <secret>Feishu App Secret
--encrypt_key <key>Encrypt key (optional)
--verification_token <token>Verification token (optional)

channel bind get

Get the current user's channel binding for a platform.

bash
memoh channel bind get [options]
OptionDescription
--type <type>Channel type

channel bind set

Set the current user's channel binding. Currently supports Feishu (open_id or user_id).

bash
memoh channel bind set [options]
OptionDescription
--type <type>Channel type (e.g. feishu)
--open_id <id>Feishu Open ID
--user_id <id>Feishu User ID

Published under AGPLv3

- + \ No newline at end of file diff --git a/cli/chat.html b/cli/chat.html index 0f5445ff..6fead5f5 100644 --- a/cli/chat.html +++ b/cli/chat.html @@ -9,11 +9,11 @@ - + - - - + + + @@ -22,7 +22,7 @@
Skip to content

Chat Commands

Default: Interactive Chat

Running memoh with no subcommand starts an interactive chat. Use --bot <id> to specify which bot to chat with; otherwise you'll be prompted to select one.

bash
memoh [options]
 memoh --bot <bot_id>
OptionDescription
--bot <id>Bot ID to chat with

Type your message and press Enter. Type exit to quit. Responses stream in real time.

tui

Terminal UI chat session. Same behavior as the default chat but explicitly invoked.

bash
memoh tui [options]
 memoh tui --bot <bot_id>
OptionDescription
--bot <id>Bot ID to chat with

version

Show the CLI version.

bash
memoh version

Published under AGPLv3

- + \ No newline at end of file diff --git a/cli/config.html b/cli/config.html index a625440b..681e5128 100644 --- a/cli/config.html +++ b/cli/config.html @@ -9,11 +9,11 @@ - + - - - + + + @@ -23,7 +23,7 @@ port = 8080

config set

Update the config. Prompts for host and port if not provided via options.

bash
memoh config set [options]
OptionDescription
--host <host>API host (e.g. 127.0.0.1 or api.example.com)
--port <port>API port (default: 8080)

Examples:

bash
memoh config set --host 192.168.1.100 --port 8080
 memoh config set
 # Interactive prompts for host and port

Published under AGPLv3

- + \ No newline at end of file diff --git a/cli/index.html b/cli/index.html index 9619fffb..1949df35 100644 --- a/cli/index.html +++ b/cli/index.html @@ -9,11 +9,11 @@ - + - - - + + + @@ -26,7 +26,7 @@ pnpm build pnpm link --global memoh --help

Ensure your Memoh server is running (see Docker installation) and the API is reachable at the configured host/port (default: 127.0.0.1:8080).

Configuration

The CLI stores config in ~/.memoh/config.toml and auth token in ~/.memoh/token.json. Use memoh config to view and memoh config set to change host/port.

Commands

CommandDescription
loginLog in to the Memoh server
logoutLog out and clear token
whoamiShow current user
configShow or update CLI config (host, port)
providerList, create, delete LLM providers
modelList, create, delete models
botList, create, update, delete bots; chat; set model
channelList channels; get/set bot channel config; get/set user binding
scheduleList, create, update, toggle, delete bot schedules
chatInteractive chat with a bot (default command)
tuiTerminal UI chat session
versionShow CLI version

Most commands require authentication. Run memoh login first.

Published under AGPLv3

- + \ No newline at end of file diff --git a/cli/model.html b/cli/model.html index e8621082..3691c36f 100644 --- a/cli/model.html +++ b/cli/model.html @@ -9,11 +9,11 @@ - + - - - + + + @@ -23,7 +23,7 @@ memoh model create --model_id text-embedding-3-small --provider my-openai --client_type openai-completions --type embedding --dimensions 1536 memoh model create # Interactive prompts

model delete

Delete a model by model ID.

bash
memoh model delete --model <model_id>

Example:

bash
memoh model delete --model gpt-4

Published under AGPLv3

- + \ No newline at end of file diff --git a/cli/provider.html b/cli/provider.html index 6504087a..4f5abb98 100644 --- a/cli/provider.html +++ b/cli/provider.html @@ -9,11 +9,11 @@ - + - - - + + + @@ -23,7 +23,7 @@ memoh provider list --provider my-openai

provider create

Create a new provider. Prompts for any missing fields.

bash
memoh provider create [options]
OptionDescription
--name <name>Provider name
--base_url <url>Base URL for the API
--api_key <key>API key

Examples:

bash
memoh provider create --name my-ollama --base_url http://localhost:11434/v1
 memoh provider create
 # Interactive prompts

provider delete

Delete a provider by name.

bash
memoh provider delete --provider <name>

Example:

bash
memoh provider delete --provider my-ollama

Published under AGPLv3

- + \ No newline at end of file diff --git a/cli/schedule.html b/cli/schedule.html index 8fdcaf14..86ed1413 100644 --- a/cli/schedule.html +++ b/cli/schedule.html @@ -9,18 +9,18 @@ - + - - - + + +
Skip to content

Schedule Commands

Manage cron-based schedules for bots. All schedule commands require --bot <id> to specify the bot.

schedule list

List all schedules for a bot.

bash
memoh schedule list --bot <bot_id>

schedule get

Get a schedule by ID.

bash
memoh schedule get <id> --bot <bot_id>

schedule create

Create a new schedule. Prompts for name, description, cron pattern, command, and optional max calls.

bash
memoh schedule create [options] --bot <bot_id>
OptionDescription
--name <name>Schedule name
--description <desc>Description
--pattern <pattern>Cron pattern (e.g. 0 9 * * * for daily at 9am)
--command <cmd>Command to run in the bot container
--max_calls <n>Max executions (optional, empty for unlimited)
--enabledCreate as enabled
--disabledCreate as disabled

schedule update

Update a schedule.

bash
memoh schedule update <id> [options] --bot <bot_id>
OptionDescription
--name <name>Schedule name
--description <desc>Description
--pattern <pattern>Cron pattern
--command <cmd>Command
--max_calls <n>Max executions
--enabledEnable
--disabledDisable

schedule toggle

Enable or disable a schedule (flip current state).

bash
memoh schedule toggle <id> --bot <bot_id>

schedule delete

Delete a schedule.

bash
memoh schedule delete <id> --bot <bot_id>

Published under AGPLv3

- + \ No newline at end of file diff --git a/concepts/bot.html b/concepts/bot.html index aa7f4631..1f33c552 100644 --- a/concepts/bot.html +++ b/concepts/bot.html @@ -9,18 +9,18 @@ - + - - - + + +
Skip to content

Bot

A bot is the primary runtime entity in Memoh.

Each bot has its own:

  • Configuration
  • Container lifecycle
  • Memory scope
  • Channel bindings
  • Model assignments

Key Settings

  • max-load-time (max_context_load_time): how many minutes of recent conversation context are loaded into prompts
  • language: preferred language for interaction (default is auto)
  • chat model / memory model / embedding model: model IDs used by this bot

Why It Matters

The bot abstraction allows Memoh to isolate behavior and resources per agent, while keeping management centralized in one Web UI.

Web UI Path

  • Bots > Select a bot > Settings

Published under AGPLv3

- + \ No newline at end of file diff --git a/concepts/channel.html b/concepts/channel.html index 6e4e9d92..6ae4ea73 100644 --- a/concepts/channel.html +++ b/concepts/channel.html @@ -9,18 +9,18 @@ - + - - - + + +
Skip to content

Channel

A channel connects a bot to an external communication platform.

Examples include:

  • Telegram
  • Feishu (Lark)
  • Web chat

What a Channel Configuration Defines

  • Platform type and credentials
  • Message routing from external users to a target bot
  • Reply delivery back to the source platform

Why It Matters

Channels decouple bot logic from transport, so one bot can serve users across multiple platforms.

Web UI Path

  • Bots > Select a bot > Channels

Published under AGPLv3

- + \ No newline at end of file diff --git a/concepts/container.html b/concepts/container.html index 3c6343ca..a1e4332a 100644 --- a/concepts/container.html +++ b/concepts/container.html @@ -9,18 +9,18 @@ - + - - - + + +
Skip to content

Container

Each bot runs in its own isolated container.

What Isolation Gives You

  • Separate filesystem per bot
  • Separate runtime process space
  • Controlled lifecycle (create/start/stop/delete)

This prevents one bot from interfering with another bot's execution environment.

Why It Matters

Container isolation is the foundation that allows bots to run tools, commands, and file operations safely in parallel.

Web UI Path

  • Bots > Select a bot > Container

Published under AGPLv3

- + \ No newline at end of file diff --git a/concepts/conversation-and-history.html b/concepts/conversation-and-history.html index 7b939b31..e34af0c9 100644 --- a/concepts/conversation-and-history.html +++ b/concepts/conversation-and-history.html @@ -9,18 +9,18 @@ - + - - - + + +
Skip to content

Conversation and History

Memoh organizes interactions as conversations with preserved history.

What This Includes

  • Ongoing chat context between users and bots
  • Message-level timeline and traceability
  • Source context for memory extraction and debugging

Why It Matters

Conversation history powers:

  • Better response continuity
  • Auditing and troubleshooting
  • Post-hoc analysis of bot behavior

Web UI Path

  • Chat > Select conversation
  • Bots > Select a bot > History

Published under AGPLv3

- + \ No newline at end of file diff --git a/concepts/index.html b/concepts/index.html index 76c3c1d7..d3dc40e5 100644 --- a/concepts/index.html +++ b/concepts/index.html @@ -9,18 +9,18 @@ - + - - - + + +
Skip to content

Concepts Overview

This section explains the core design concepts behind Memoh.

Use these pages when you want to understand how Memoh is designed, why features exist, and how different parts work together.

Concept Map

  • Bot: the core runtime unit
  • Provider and Model: how LLM capability is plugged in
  • Memory: how long-term knowledge is stored and retrieved
  • Channel: how external platforms connect to bots
  • Schedule: how tasks are triggered automatically
  • Container: isolated execution environment per bot
  • MCP: external tool and service integration protocol
  • Subagents: specialized delegated agents
  • Skills: reusable capability prompts/instructions
  • Conversation and History: chat context and traceability
  1. Bot
  2. Provider and Model
  3. Memory
  4. Channel
  5. Container
  6. Schedule
  7. MCP
  8. Subagents
  9. Skills
  10. Conversation and History

Published under AGPLv3

- + \ No newline at end of file diff --git a/concepts/mcp.html b/concepts/mcp.html index 9fb0f4c5..1b3c2fcb 100644 --- a/concepts/mcp.html +++ b/concepts/mcp.html @@ -9,18 +9,18 @@ - + - - - + + +
Skip to content

MCP

MCP (Model Context Protocol) connects Memoh bots to external tool services.

What MCP Adds

  • Standardized tool discovery and invocation
  • Remote capability extension without changing core bot code
  • Per-bot integration flexibility

Memoh supports MCP connections so bots can access external systems through a unified protocol.

Why It Matters

MCP makes capability extension modular. You can add or swap tool backends with minimal coupling.

Web UI Path

  • Bots > Select a bot > MCP

Published under AGPLv3

- + \ No newline at end of file diff --git a/concepts/memory.html b/concepts/memory.html index 6ee96184..a2677254 100644 --- a/concepts/memory.html +++ b/concepts/memory.html @@ -9,18 +9,18 @@ - + - - - + + +
Skip to content

Memory

Memory is Memoh's long-term knowledge system for each bot.

How It Works

  • Important facts are extracted from conversations
  • Memories are stored and indexed
  • Relevant memories are retrieved by semantic similarity when needed

Memoh combines vector retrieval with keyword-style retrieval for better recall and precision.

Why It Matters

Memory enables continuity across long timelines, so bots can maintain context beyond short prompt windows.

Web UI Path

  • Bots > Select a bot > Memory

Published under AGPLv3

- + \ No newline at end of file diff --git a/concepts/provider-and-model.html b/concepts/provider-and-model.html index 9d8b1c92..7f1c4c55 100644 --- a/concepts/provider-and-model.html +++ b/concepts/provider-and-model.html @@ -9,18 +9,18 @@ - + - - - + + +
Skip to content

Provider and Model

In Memoh, provider and model are separate but connected concepts:

  • A provider is the LLM service configuration (API endpoint and key)
  • A model is the concrete chat or embedding model under that provider, including its client type which determines which API protocol to use

Client Types

Each model has a client_type that determines how Memoh communicates with the LLM service:

Client TypeDescription
openai-responsesOpenAI Responses API
openai-completionsOpenAI Chat Completions API (also works with compatible services like Ollama, Mistral, etc.)
anthropic-messagesAnthropic Messages API
google-generative-aiGoogle Generative AI API

Typical Setup

At minimum, a production-ready bot usually needs:

  • One chat model for dialog generation
  • One embedding model for memory indexing and retrieval

Model Assignment to Bot

Bots reference model IDs in settings:

  • chat_model_id
  • memory_model_id
  • embedding_model_id

This enables per-bot customization (for quality, latency, or cost).

Web UI Path

  • Models > Add Provider > Select Provider > Add Model
  • Bots > Select a bot > Settings > Choose chat/memory/embedding models

Published under AGPLv3

- + \ No newline at end of file diff --git a/concepts/schedule.html b/concepts/schedule.html index 40ad9d83..7fa85445 100644 --- a/concepts/schedule.html +++ b/concepts/schedule.html @@ -9,18 +9,18 @@ - + - - - + + +
Skip to content

Schedule

A schedule is a cron-based automation rule that runs bot commands at defined times.

Core Fields

  • pattern: cron expression
  • command: command or task to execute
  • enabled: whether the schedule is active
  • max_calls: optional execution cap
  • current_calls: current run count

Why It Matters

Schedules make bots proactive, not only reactive.
You can automate recurring operations like summaries, reminders, checks, and maintenance tasks.

Web UI Path

  • Not available in current Web UI

Schedule is supported by backend and CLI/API, but there is currently no dedicated schedule page in the Web UI.

Published under AGPLv3

- + \ No newline at end of file diff --git a/concepts/skills.html b/concepts/skills.html index a3f56bd6..6e20cf9f 100644 --- a/concepts/skills.html +++ b/concepts/skills.html @@ -9,18 +9,18 @@ - + - - - + + +
Skip to content

Skills

Skills are reusable capability instructions that guide how a bot (or subagent) solves specific classes of tasks.

Typical Skill Content

  • Scope and purpose
  • Input expectations
  • Execution steps
  • Constraints and output format

Why It Matters

Skills help keep behavior consistent, reduce prompt duplication, and make complex workflows easier to maintain.

Web UI Path

  • Bots > Select a bot > Subagents

Skills are currently primarily managed through agent/workspace configuration and runtime conventions, while subagent-related behavior is visible from the Subagents area.

Published under AGPLv3

- + \ No newline at end of file diff --git a/concepts/subagents.html b/concepts/subagents.html index 068b4e87..cee4cbfd 100644 --- a/concepts/subagents.html +++ b/concepts/subagents.html @@ -9,18 +9,18 @@ - + - - - + + +
Skip to content

Subagents

Subagents are specialized helper agents that a bot can delegate tasks to.

Core Idea

  • The main bot acts as coordinator
  • Subagents focus on narrower tasks
  • Results are combined back into the main workflow

This supports decomposition of complex requests into smaller, more reliable execution units.

Why It Matters

Subagent architecture improves scalability for multi-step tasks and helps separate responsibilities by role.

Web UI Path

  • Bots > Select a bot > Subagents

Published under AGPLv3

- + \ No newline at end of file diff --git a/getting-started.html b/getting-started.html index 09bda1e4..4d630f7f 100644 --- a/getting-started.html +++ b/getting-started.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, Lark (Feishu), and more. 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.

Key Features

Multi-Bot Management

Create multiple bots. Humans and bots, or bots with each other, can chat privately, in groups, or collaborate. Build bot teams, or set up accounts for family members to manage daily tasks with bots.

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.

Memory Engineering

A deeply engineered memory layer inspired by Mem0:

  • Automatically extracts key facts from each conversation turn and stores them as structured memories
  • Supports semantic search (via Qdrant vector database) and keyword retrieval (BM25)
  • Loads the last 24 hours of conversation context by default
  • Automatic memory compaction to keep the memory store lean
  • 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
  • Lark (Feishu) — Full support
  • Web — Built-in web chat interface
  • CLI — Command-line chat

Agent Capabilities

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

  • Web Search — Brave Search integration for real-time information
  • Subagents — Create specialized subagents, assign skills, and delegate complex tasks
  • Skills — Configurable skill system to extend bot capabilities
  • Container Operations — Read/write files, edit code, and execute commands inside the container
  • Memory Management — Search and manage memories
  • Messaging — Send messages and reactions

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

MCP Protocol Support

Supports Model Context Protocol (MCP) via HTTP and SSE to connect external tool services. 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.

Graphical Configuration

Configure bots, channels, providers, models, MCP, skills, and all other settings through a web management UI — 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.
  • config.toml — Reference for all configuration fields.

Published under AGPLv3

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

Create Bot

Prerequisites

  • Complete the provider and model configuration.

Step 1: Open the Bot Page

Click Bots in the left sidebar to open the Bots configuration page.

Bots page - sidebar

Step 2: create a Bot

Click the New Bot button (with a plus icon)

Create Bot button

In the dialog, fill in:

FieldDescription
NameA display name for this bot (e.g. my-bot, telegram-public-bot)
Avatar URLThe API base Avatar (e.g.https://gravatar.com/avatar/***)
TypeBots type: person, public, public for channel(e.g. telegram group, qq group, discord channel, person for bind user)

Step 3: Bot Configuration

Click one bot Card in Bots page

Bot Configuration

open settings section

setting

select your available Chat Model, Memory Model, Embedding Model and save for basic Configuration

Step 4: Check Bot

Click Chat in the left sidebar to open chat page. then type your prompt to test the Bot configuration

alt text

Next Steps

Published under AGPLv3

- + \ No newline at end of file diff --git a/getting-started/platform-telegram.html b/getting-started/platform-telegram.html index b1fadf9e..df2ad8d9 100644 --- a/getting-started/platform-telegram.html +++ b/getting-started/platform-telegram.html @@ -9,18 +9,18 @@ - + - - - + + +
Skip to content

Configure Telegram Channel

This guide walks you through connecting your bot to Telegram, allowing users to chat with your bot via Telegram messages.

Prerequisites

Step 1: Create a Telegram Bot

Open Telegram and search for the official bot @BotFather.

Send the /newbot command to BotFather and follow the prompts:

  1. Enter a name for your bot (display name, e.g., My Memoh Bot)
  2. Enter a username for your bot (must end with bot, e.g., my_memoh_bot)

BotFather will create the bot and provide a Bot Token (e.g., 123456789:ABCdefGHIjklMNOpqrsTUVwxyz).

Save this token securely — you will need it in the next step.

Step 2: Open the Bot Platforms Page

In the Memoh Web UI, click Bots in the left sidebar to open the Bots page.

Select the bot you want to connect to Telegram.

Click the Platforms tab to open the channel configuration page.

Step 3: Add Telegram Channel

Click the Add Channel button.

In the dialog, select Telegram as the channel type.

Fill in the configuration:

FieldDescription
Bot TokenThe token from BotFather (e.g., 123456789:ABCdefGHIjklMNOpqrsTUVwxyz)

Click Save to add the channel.

Add Channel button

Step 4: Bind Your Telegram Account

Open the Memoh web ui setting page, find Bind Code section, select telegram platform and necessary TTL(seconds), Generate bind code.

Bind Code

Open the bot dialog in telegram, send Bind Code to chat, you should get Binding successful! Your identity has been linked. message if successful

Click Save to complete the binding.

Step 6: Test the Connection

Send a message to your bot on Telegram:

  • For public bots: Add the bot to a group, have others mention your bot when sending messages.
  • For person bots: Send a direct message (requires binding in Step 5)

The bot should respond according to its configured model and system prompt.

Next Steps

  • Configure Memory to enable long-term memory for your bot
  • Set up Skills to extend your bot's capabilities
  • Add Schedules for automated tasks

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 33c03a4f..5aa0dad5 100644 --- a/getting-started/provider-and-model.html +++ b/getting-started/provider-and-model.html @@ -9,18 +9,18 @@ - + - - - + + +
Skip to content

Configure Provider and Model

Before creating bots, you need to configure at least one LLM provider and add chat and embedding models. This guide walks you through the Web UI.

Prerequisites

Step 1: Open the Models Page

Click Models in the left sidebar to open the Provider and Model configuration page.

Models page - sidebar

The page has two panels:

  • Left: Provider list and search
  • Right: Selected provider's details and models (or an empty state if none selected)

Step 2: Add a Provider

Click the Add Provider button (with a plus icon) at the bottom of the left panel.

Add Provider button

In the dialog, fill in:

FieldDescription
NameA display name for this provider (e.g. my-openai, ollama-local)
API KeyYour API key. For local services like Ollama, you can use a placeholder like ollama
Base URLThe API base URL (e.g. https://api.openai.com/v1, http://localhost:11434/v1 for Ollama)

Add Provider dialog

Example — OpenAI:

  • Name: openai
  • API Key: sk-...
  • Base URL: https://api.openai.com/v1

Example — Ollama (local):

  • Name: ollama
  • API Key: ollama
  • Base URL: http://localhost:11434/v1

Click Add to save. The new provider appears in the left sidebar.

Step 3: Add Models

Select a provider from the left panel. The right panel shows the provider form and the model list.

Provider selected - model list

Click Add Model to open the model creation dialog.

Fill in:

FieldDescription
Client TypeAPI protocol: openai-responses, openai-completions, anthropic-messages, or google-generative-ai
Typechat or embedding
ModelModel ID (e.g. gpt-4, llama3.2, text-embedding-3-small)
Display NameOptional display name
DimensionsRequired for embedding models (e.g. 1536 for OpenAI embeddings)
MultimodalFor chat models only — enable if the model supports images

You need at least:

  • One chat model (for conversation)
  • One embedding model (for memory)

Add them under the same or different providers. For example:

  • Chat: gpt-4 with client type openai-responses (OpenAI) or llama3.2 with client type openai-completions (Ollama)
  • Embedding: text-embedding-3-small with client type openai-completions (OpenAI) or nomic-embed-text with client type openai-completions (Ollama)

Step 4: Edit or Delete

  • Provider: After selecting a provider, you can edit Name, API Key, and Base URL in the right panel, or delete the provider.
  • Model: Use the edit or delete actions on each model card in the list.

Next Steps

Once you have at least one chat model and one embedding model, you can create a bot (via Bots in the sidebar) and assign these models in the bot settings.

Published under AGPLv3

- + \ No newline at end of file diff --git a/hashmap.json b/hashmap.json index 33f52e65..949956d8 100644 --- a/hashmap.json +++ b/hashmap.json @@ -1 +1 @@ -{"blogs_2026-02-16.md":"DSFOaZyb","blogs_index.md":"liWx4LKT","cli_auth.md":"DPl-4zFk","cli_bot.md":"B2YOOp9H","cli_channel.md":"T-qsPRZ9","cli_chat.md":"LOg8zrpn","cli_config.md":"C-0Xv0hx","cli_index.md":"CTMBSccU","cli_model.md":"Bw08RtnA","cli_provider.md":"cID16uzP","cli_schedule.md":"DSG0HQuo","concepts_bot.md":"1aZ6YcT_","concepts_channel.md":"kmh0thdg","concepts_container.md":"CGr24tv7","concepts_conversation-and-history.md":"CrsSw6px","concepts_index.md":"C-_J0Dnw","concepts_mcp.md":"Bi2x7eIb","concepts_memory.md":"C_8mQlYI","concepts_provider-and-model.md":"DxvTinZF","concepts_schedule.md":"DZlMw6iP","concepts_skills.md":"F6zpo0BV","concepts_subagents.md":"B1gVZCBU","getting-started.md":"BWV4Fvb6","getting-started_create-bot.md":"5rz1rkV2","getting-started_platform-telegram.md":"DnjlGtcF","getting-started_provider-and-model.md":"BA0D0cN8","index.md":"BxPQTo9L","installation_config-toml.md":"BNcS6Wgd","installation_docker.md":"DfhF5nY7","troubleshooting.md":"DGskTOuw","zh_concepts_identity-and-binding.md":"BpgZjxhl","zh_concepts_index.md":"CFVegv9w","zh_index.md":"N8D_wq8q","zh_style_terminology.md":"DtBRpWD7"} +{"blogs_2026-02-16.md":"CVgn4GCU","blogs_index.md":"DyCOc_Zm","cli_auth.md":"C8ws3CHD","cli_bot.md":"BnhEB6FG","cli_channel.md":"BBEJiWrG","cli_chat.md":"Cr9VFV7R","cli_config.md":"B8bSu8j2","cli_index.md":"CZsWbIpX","cli_model.md":"DjdZHTvQ","cli_provider.md":"D1oztYQ9","cli_schedule.md":"D2s8Q1KC","concepts_bot.md":"C_C3siLW","concepts_channel.md":"DdS-uyu8","concepts_container.md":"Djausou_","concepts_conversation-and-history.md":"BS_PnG4v","concepts_index.md":"Ci6EwNPX","concepts_mcp.md":"B9KnE-R7","concepts_memory.md":"BgBEcLnX","concepts_provider-and-model.md":"DQq3j0ql","concepts_schedule.md":"COs_2DXO","concepts_skills.md":"HeUi2diL","concepts_subagents.md":"C0_bz0wW","getting-started.md":"C9lgqnN0","getting-started_create-bot.md":"Da6WTI-u","getting-started_platform-telegram.md":"BlTohjMj","getting-started_provider-and-model.md":"hf8EhYPV","index.md":"BJ6rgQi7","installation_config-toml.md":"BJygOlxN","installation_docker.md":"Cmz-MLJu","troubleshooting.md":"rkMlAGoL","zh_concepts_identity-and-binding.md":"B6I6pSqI","zh_concepts_index.md":"uaZIblvt","zh_index.md":"DbGu2QT1","zh_style_terminology.md":"C89A7q1C"} diff --git a/index.html b/index.html index 674494eb..058e1679 100644 --- a/index.html +++ b/index.html @@ -9,18 +9,18 @@ - + - - - + + +
Skip to content

Memoh Documentation

Memoh 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/config-toml.html b/installation/config-toml.html index 18f6b997..800de9e3 100644 --- a/installation/config-toml.html +++ b/installation/config-toml.html @@ -9,11 +9,11 @@ - + - - - + + + @@ -69,7 +69,7 @@ [brave] api_key = "" base_url = "https://api.search.brave.com/res/v1/"

Section Reference

[log]

FieldTypeDefaultDescription
levelstring"info"Log level: debug, info, warn, error
formatstring"text"Log format: text or json

[server]

FieldTypeDefaultDescription
addrstring":8080"HTTP listen address. Use :8080 for all interfaces, or host:port (e.g. server:8080 in Docker).

[admin]

FieldTypeDefaultDescription
usernamestring"admin"Admin login username
passwordstringAdmin login password. Change in production.
emailstringAdmin email (for display)

[auth]

FieldTypeDefaultDescription
jwt_secretstringSecret for signing JWT tokens. Required. Generate with openssl rand -base64 32.
jwt_expires_instring"24h"JWT expiration, e.g. "24h", "168h" (7 days)

[containerd]

FieldTypeDefaultDescription
socket_pathstring"/run/containerd/containerd.sock"Path to containerd socket
namespacestring"default"Containerd namespace for bot containers

[mcp]

MCP (Model Context Protocol) container configuration. Each bot runs in a container built from this image.

FieldTypeDefaultDescription
imagestring"docker.io/library/memoh-mcp:latest"MCP container image
snapshotterstring"overlayfs"Containerd snapshotter
data_rootstring"data"Host path for bot data (Docker: /opt/memoh/data)

[postgres]

FieldTypeDefaultDescription
hoststring"127.0.0.1"PostgreSQL host
portint5432PostgreSQL port
userstring"postgres"Database user
passwordstringDatabase password
databasestring"memoh"Database name
sslmodestring"disable"SSL mode: disable, require, verify-ca, verify-full

[qdrant]

FieldTypeDefaultDescription
base_urlstring"http://127.0.0.1:6334"Qdrant HTTP API URL
api_keystring""Optional API key for Qdrant Cloud
collectionstring"memory"Vector collection name for memories
timeout_secondsint10Request timeout in seconds

[agent_gateway]

FieldTypeDefaultDescription
hoststring"127.0.0.1"Agent gateway bind host
portint8081Agent gateway port

In Docker Compose, host is typically "agent" (service name). The agent reads [server].addr to call the main API.

[web]

FieldTypeDefaultDescription
hoststring"127.0.0.1"Web UI bind host
portint8082Web UI port

[brave]

Brave Search API for the web search tool. Leave api_key empty to disable web search.

FieldTypeDefaultDescription
api_keystring""Brave Search API key. Get one at brave.com/search/api.
base_urlstring"https://api.search.brave.com/res/v1/"Brave Search API base URL

Published under AGPLv3

- + \ No newline at end of file diff --git a/installation/docker.html b/installation/docker.html index 2a267f1b..75db4ff3 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, Containerd, the main server, 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

One-Click Install

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

bash
curl -fsSL https://raw.githubusercontent.com/memohai/Memoh/main/scripts/install.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. Clone the repository
  4. Generate config.toml from the Docker template
  5. Start all services with docker compose up -d --build

Silent install (use all defaults, no prompts):

bash
curl -fsSL https://raw.githubusercontent.com/memohai/Memoh/main/scripts/install.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

Manual Install

Clone the repository and start with Docker Compose:

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, Containerd, the main server, 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

One-Click Install

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. Clone the repository
  4. Generate config.toml from the Docker template
  5. Start all services with docker compose up -d --build

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

Manual Install

Clone the repository and start with Docker Compose:

bash
git clone https://github.com/memohai/Memoh.git
 cd Memoh
 sudo docker compose up -d

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

By default, Docker Compose uses conf/app.docker.toml. No config file in the project root is mounted — only this built-in config is used. See config.toml reference for all configuration fields.

Access Points

After startup:

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

Default login: admin / admin123

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

Custom Configuration

To use your own config file:

  1. Copy the Docker config template and edit it. See config.toml reference for field descriptions:
bash
cp conf/app.docker.toml config.toml
 nano config.toml
  1. Point MEMOH_CONFIG at your config when starting (path is on the host; run docker compose from the project root):
bash
sudo MEMOH_CONFIG=./config.toml docker compose up -d

Recommended changes for production (see config.toml reference for details):

  • admin.password — Change the admin password
  • auth.jwt_secret — Generate with openssl rand -base64 32
  • postgres.password — Change the database password (and set POSTGRES_PASSWORD when running docker compose)

Common Commands

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

bash
docker compose up -d           # Start
@@ -29,8 +29,8 @@
 docker compose up -d --build   # Rebuild and restart

Production Checklist

  1. HTTPS — Configure SSL (e.g. via docker-compose.override.yml with certs)
  2. Passwords — Change all default passwords and secrets
  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 logs containerd # View containerd 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

- +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/troubleshooting.html b/troubleshooting.html index 3f66fa3e..1fdbc62c 100644 --- a/troubleshooting.html +++ b/troubleshooting.html @@ -9,11 +9,11 @@ - + - - - + + + @@ -23,7 +23,7 @@ data_root = "/opt/memoh/data"
  1. Clean up the stale containerd container (if it exists):
bash
docker exec memoh-containerd ctr -n default containers rm mcp-<bot-id>
  1. Restart the server:
bash
docker compose restart server

Note: If you also run the server locally (outside Docker), keep the Docker config (conf/app.docker.toml) separate from your local config.toml, and update docker-compose.yml to mount the Docker-specific config instead.

MCP Container: Image update not taking effect after rebuild

Symptom

After updating Dockerfile.containerd (e.g., adding Node.js/Python to the MCP image), rebuilding and restarting the containerd container, MCP tools still fail with errors like:

exec: "npx": executable file not found in $PATH

Cause

The containerd entrypoint script (containerd-entrypoint.sh) skips image import if the image already exists in containerd's image store:

sh
if ! ctr -n default images check "name==${MCP_IMAGE}" ...; then
   # import
 fi

Since containerd_data is a persistent Docker volume, the old MCP image survives across container restarts. The new image embedded in the rebuilt Docker image is never imported.

Solution

  1. Remove the old MCP image from containerd:
bash
docker exec memoh-containerd ctr -n default images rm docker.io/library/memoh-mcp:latest
  1. Restart the containerd container to trigger re-import:
bash
docker compose restart containerd
  1. Verify the new image was imported (size should be significantly larger if Node.js/Python were added):
bash
docker exec memoh-containerd ctr -n default images ls
  1. Delete the bot's MCP container and recreate it from the bot detail page so it uses the new image.

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 27431ca0..bf64bfff 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 55c1f7a9..229ace3b 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 25c29039..99e1e796 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 b0b05b7f..aee5da05 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