This commit is contained in:
sheepbox8646
2026-02-15 13:33:48 +00:00
parent b1dea124b5
commit 0fc66be491
49 changed files with 119 additions and 175 deletions
+2 -2
View File
@@ -9,7 +9,7 @@
<link rel="preload stylesheet" href="/assets/style.BZIg-cXr.css" as="style">
<link rel="preload stylesheet" href="/vp-icons.css" as="style">
<script type="module" src="/assets/app.BCeoDn-v.js"></script>
<script type="module" src="/assets/app.GclA5Rgp.js"></script>
<link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
<link rel="icon" href="/logo.png">
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
@@ -17,7 +17,7 @@
</head>
<body>
<div id="app"></div>
<script>window.__VP_HASH_MAP__=JSON.parse("{\"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\":\"Bp0XdM9y\",\"cli_provider.md\":\"CEEKGN01\",\"cli_schedule.md\":\"DSG0HQuo\",\"concepts_identity-and-binding.md\":\"Dqnt6wsW\",\"concepts_index.md\":\"CxGkiYqO\",\"getting-started.md\":\"DF97X5A_\",\"index.md\":\"XthB7km1\",\"installation_config-toml.md\":\"DLEOCXmn\",\"installation_docker.md\":\"xaCmXfCQ\",\"style_terminology.md\":\"zpSWt3dU\",\"troubleshooting.md\":\"DEVYH0Du\",\"zh_concepts_identity-and-binding.md\":\"BpgZjxhl\",\"zh_concepts_index.md\":\"CFVegv9w\",\"zh_index.md\":\"N8D_wq8q\",\"zh_style_terminology.md\":\"DtBRpWD7\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Memoh Documentation\",\"description\":\"Multi-Member, Structured Long-Memory, Containerized AI Agent System.\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"siteTitle\":\"Memoh\",\"sidebar\":{\"/\":[{\"text\":\"Overview\",\"link\":\"/index.md\"},{\"text\":\"Getting Started\",\"link\":\"/getting-started.md\"},{\"text\":\"Installation\",\"items\":[{\"text\":\"Docker\",\"link\":\"/installation/docker.md\"},{\"text\":\"config.toml\",\"link\":\"/installation/config-toml.md\"}]},{\"text\":\"CLI\",\"items\":[{\"text\":\"Overview\",\"link\":\"/cli/index.md\"},{\"text\":\"authentication\",\"link\":\"/cli/auth.md\"},{\"text\":\"config\",\"link\":\"/cli/config.md\"},{\"text\":\"provider\",\"link\":\"/cli/provider.md\"},{\"text\":\"model\",\"link\":\"/cli/model.md\"},{\"text\":\"bot\",\"link\":\"/cli/bot.md\"},{\"text\":\"channel\",\"link\":\"/cli/channel.md\"},{\"text\":\"schedule\",\"link\":\"/cli/schedule.md\"},{\"text\":\"chat\",\"link\":\"/cli/chat.md\"}]},{\"text\":\"Core Concepts\",\"items\":[{\"text\":\"Concepts Overview\",\"link\":\"/concepts/index.md\"},{\"text\":\"Accounts and Linking\",\"link\":\"/concepts/identity-and-binding.md\"}]},{\"text\":\"Documentation Style Guide\",\"items\":[{\"text\":\"Terminology Rules\",\"link\":\"/style/terminology.md\"}]}],\"/zh/\":[{\"text\":\"文档总览\",\"link\":\"/zh/index.md\"},{\"text\":\"核心概念\",\"items\":[{\"text\":\"概念总览\",\"link\":\"/zh/concepts/index.md\"},{\"text\":\"账号模型与绑定\",\"link\":\"/zh/concepts/identity-and-binding.md\"}]},{\"text\":\"文档写作规范\",\"items\":[{\"text\":\"术语规范\",\"link\":\"/zh/style/terminology.md\"}]}]},\"logo\":{\"src\":\"/logo.png\",\"alt\":\"Memoh\"},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/memohai/Memoh\"}],\"footer\":{\"message\":\"Published under AGPLv3\",\"copyright\":\"Copyright © 2024 Memoh\"},\"search\":{\"provider\":\"local\"},\"editLink\":{\"pattern\":\"https://github.com/memohai/Memoh/edit/main/docs/docs/:path\",\"text\":\"Edit on GitHub\"},\"lastUpdated\":{\"text\":\"Last Updated\",\"formatOptions\":{\"dateStyle\":\"short\",\"timeStyle\":\"medium\"}}},\"locales\":{\"root\":{\"label\":\"English\",\"lang\":\"en\"},\"zh\":{\"label\":\"简体中文\",\"lang\":\"zh\"}},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
<script>window.__VP_HASH_MAP__=JSON.parse("{\"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\":\"Bp0XdM9y\",\"cli_provider.md\":\"CEEKGN01\",\"cli_schedule.md\":\"DSG0HQuo\",\"getting-started.md\":\"B026JaLd\",\"getting-started_provider-and-model.md\":\"Ix_AFx48\",\"index.md\":\"BxPQTo9L\",\"installation_config-toml.md\":\"DLEOCXmn\",\"installation_docker.md\":\"xaCmXfCQ\",\"troubleshooting.md\":\"DEVYH0Du\",\"zh_concepts_identity-and-binding.md\":\"BpgZjxhl\",\"zh_concepts_index.md\":\"CFVegv9w\",\"zh_index.md\":\"N8D_wq8q\",\"zh_style_terminology.md\":\"DtBRpWD7\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Memoh Documentation\",\"description\":\"Multi-Member, Structured Long-Memory, Containerized AI Agent System.\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"siteTitle\":\"Memoh\",\"sidebar\":{\"/\":[{\"text\":\"Overview\",\"link\":\"/index.md\"},{\"text\":\"About Memoh\",\"link\":\"/getting-started.md\"},{\"text\":\"Installation\",\"items\":[{\"text\":\"Docker\",\"link\":\"/installation/docker.md\"},{\"text\":\"config.toml\",\"link\":\"/installation/config-toml.md\"}]},{\"text\":\"Getting Started\",\"items\":[{\"text\":\"Provider and Model\",\"link\":\"/getting-started/provider-and-model.md\"}]},{\"text\":\"CLI\",\"items\":[{\"text\":\"Overview\",\"link\":\"/cli/index.md\"},{\"text\":\"authentication\",\"link\":\"/cli/auth.md\"},{\"text\":\"config\",\"link\":\"/cli/config.md\"},{\"text\":\"provider\",\"link\":\"/cli/provider.md\"},{\"text\":\"model\",\"link\":\"/cli/model.md\"},{\"text\":\"bot\",\"link\":\"/cli/bot.md\"},{\"text\":\"channel\",\"link\":\"/cli/channel.md\"},{\"text\":\"schedule\",\"link\":\"/cli/schedule.md\"},{\"text\":\"chat\",\"link\":\"/cli/chat.md\"}]}],\"/zh/\":[{\"text\":\"文档总览\",\"link\":\"/zh/index.md\"}]},\"logo\":{\"src\":\"/logo.png\",\"alt\":\"Memoh\"},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/memohai/Memoh\"}],\"footer\":{\"message\":\"Published under AGPLv3\",\"copyright\":\"Copyright © 2024 Memoh\"},\"search\":{\"provider\":\"local\"},\"editLink\":{\"pattern\":\"https://github.com/memohai/Memoh/edit/main/docs/docs/:path\",\"text\":\"Edit on GitHub\"},\"lastUpdated\":{\"text\":\"Last Updated\",\"formatOptions\":{\"dateStyle\":\"short\",\"timeStyle\":\"medium\"}}},\"locales\":{\"root\":{\"label\":\"English\",\"lang\":\"en\"},\"zh\":{\"label\":\"简体中文\",\"lang\":\"zh\"}},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
</body>
</html>
@@ -1 +1 @@
import{t as p}from"./chunks/theme.Bxi9Rr1a.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.DcdcgJt5.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};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
import{_ as e,o as t,c as o,ag as a}from"./chunks/framework.DEqXEGcv.js";const h=JSON.parse('{"title":"Accounts and Linking","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/identity-and-binding.md","filePath":"concepts/identity-and-binding.md","lastUpdated":1770887583000}'),i={name:"concepts/identity-and-binding.md"};function s(c,n,l,r,d,u){return t(),o("div",null,[...n[0]||(n[0]=[a('<h1 id="accounts-and-linking" tabindex="-1">Accounts and Linking <a class="header-anchor" href="#accounts-and-linking" aria-label="Permalink to &quot;Accounts and Linking&quot;"></a></h1><h2 id="account-model" tabindex="-1">Account Model <a class="header-anchor" href="#account-model" aria-label="Permalink to &quot;Account Model&quot;"></a></h2><p>Memoh treats platform accounts and system accounts as two different entities:</p><ul><li><strong>Platform Account (<code>ChannelIdentity</code>)</strong> is the user&#39;s account on an external access platform (for example, a TG account), not a Memoh internal account.</li><li><strong>System Account (<code>User</code>)</strong> is an internal account in Memoh.</li></ul><p>A platform account can exist before linking.<br><code>bind</code> is the mechanism that links these two account types.</p><h2 id="access-platform-and-bot" tabindex="-1">Access Platform and Bot <a class="header-anchor" href="#access-platform-and-bot" aria-label="Permalink to &quot;Access Platform and Bot&quot;"></a></h2><ul><li><strong>Access Platform (<code>channel</code>)</strong> is where inbound messages come from.</li><li><strong>Bot</strong> is an authorization and resource boundary inside Memoh.</li></ul><p>Bots are managed by system accounts, while inbound messages are produced by platform accounts.</p><h2 id="why-linking-is-account-scoped" tabindex="-1">Why Linking Is Account-Scoped <a class="header-anchor" href="#why-linking-is-account-scoped" aria-label="Permalink to &quot;Why Linking Is Account-Scoped&quot;"></a></h2><p>Account linking exists to establish account ownership, not to grant bot resources directly:</p><ul><li>It links platform accounts and system accounts independent of any single bot.</li><li>It avoids coupling account linking with member management semantics.</li><li>It keeps bot authorization and account linking decoupled.</li></ul><h2 id="linking-flow-current-consensus" tabindex="-1">Linking Flow (Current Consensus) <a class="header-anchor" href="#linking-flow-current-consensus" aria-label="Permalink to &quot;Linking Flow (Current Consensus)&quot;"></a></h2><ol><li>A user requests a bind code under their own system account.</li><li>The platform account sends the code from a supported access-platform conversation.</li><li>Memoh validates the code and links platform account to system account.</li><li>Bot membership and authorization are handled by their own flows.</li></ol><h2 id="bot-type-semantics" tabindex="-1">Bot Type Semantics <a class="header-anchor" href="#bot-type-semantics" aria-label="Permalink to &quot;Bot Type Semantics&quot;"></a></h2><ul><li><strong>Public bot</strong>: supports member-based collaboration.</li><li><strong>Personal bot</strong>: conceptually single-owner, and should not rely on member semantics.</li></ul><blockquote><p>Note: The conceptual model is documented here as product semantics.<br> Runtime behavior may still be in transition as implementations are tightened.</p></blockquote>',16)])])}const p=e(i,[["render",s]]);export{h as __pageData,p as default};
@@ -1 +0,0 @@
import{_ as e,o as t,c as o,ag as a}from"./chunks/framework.DEqXEGcv.js";const h=JSON.parse('{"title":"Accounts and Linking","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/identity-and-binding.md","filePath":"concepts/identity-and-binding.md","lastUpdated":1770887583000}'),i={name:"concepts/identity-and-binding.md"};function s(c,n,l,r,d,u){return t(),o("div",null,[...n[0]||(n[0]=[a("",16)])])}const p=e(i,[["render",s]]);export{h as __pageData,p as default};
-1
View File
@@ -1 +0,0 @@
import{_ as t,o as a,c as n,ag as o}from"./chunks/framework.DEqXEGcv.js";const m=JSON.parse('{"title":"Core Concepts","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/index.md","filePath":"concepts/index.md","lastUpdated":1770887583000}'),s={name:"concepts/index.md"};function c(r,e,i,l,h,p){return a(),n("div",null,[...e[0]||(e[0]=[o('<h1 id="core-concepts" tabindex="-1">Core Concepts <a class="header-anchor" href="#core-concepts" aria-label="Permalink to &quot;Core Concepts&quot;"></a></h1><p>This section defines the core account and access concepts used by Memoh.</p><h2 id="concept-map" tabindex="-1">Concept Map <a class="header-anchor" href="#concept-map" aria-label="Permalink to &quot;Concept Map&quot;"></a></h2><ul><li><strong>System Account (<code>User</code>)</strong>: an internal account in Memoh.</li><li><strong>Platform Account (<code>ChannelIdentity</code>)</strong>: a user&#39;s account on an external access platform, not a Memoh account (for example, the user&#39;s Telegram (TG) account).</li><li><strong>Bot</strong>: an access and resource boundary managed by a system account.</li><li><strong>Account Linking (<code>bind</code>)</strong>: the process that links a platform account to a system account.</li></ul><h2 id="why-this-matters" tabindex="-1">Why This Matters <a class="header-anchor" href="#why-this-matters" aria-label="Permalink to &quot;Why This Matters&quot;"></a></h2><p>Memoh receives messages from external access platforms, but manages permissions and resources inside the system. To keep these concerns clear, the model separates platform accounts from system accounts, while keeping bot access control as an independent concern.</p><p>Terminology note: &quot;platform account&quot; always means the user&#39;s account on that platform (such as TG), not an internal account created by this project.</p><h2 id="in-this-chapter" tabindex="-1">In This Chapter <a class="header-anchor" href="#in-this-chapter" aria-label="Permalink to &quot;In This Chapter&quot;"></a></h2><ul><li><a href="/concepts/identity-and-binding.html">Accounts and Linking</a></li></ul>',9)])])}const u=t(s,[["render",c]]);export{m as __pageData,u as default};
@@ -1 +0,0 @@
import{_ as t,o as a,c as n,ag as o}from"./chunks/framework.DEqXEGcv.js";const m=JSON.parse('{"title":"Core Concepts","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/index.md","filePath":"concepts/index.md","lastUpdated":1770887583000}'),s={name:"concepts/index.md"};function c(r,e,i,l,h,p){return a(),n("div",null,[...e[0]||(e[0]=[o("",9)])])}const u=t(s,[["render",c]]);export{m as __pageData,u as default};
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
import{_ as a,o as t,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":1771162384000}'),n={name:"getting-started.md"};function r(l,e,s,c,d,h){return t(),o("div",null,[...e[0]||(e[0]=[i("",31)])])}const p=a(n,[["render",r]]);export{u as __pageData,p as default};
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
import{_ as t,o as a,c as o,ag as i}from"./chunks/framework.DEqXEGcv.js";const u=JSON.parse('{"title":"Getting Started","description":"","frontmatter":{},"headers":[],"relativePath":"getting-started.md","filePath":"getting-started.md","lastUpdated":1771161622000}'),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};
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
import{_ as t,o,c as d,ag as a}from"./chunks/framework.DEqXEGcv.js";const r="/getting-started/provider-model-01-sidebar.png",l="/getting-started/provider-model-02-add-provider.png",i="/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":1771162384000}'),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]=[a("",34)])])}const f=t(s,[["render",p]]);export{v as __pageData,f as default};
+1
View File
@@ -0,0 +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('<h1 id="memoh-documentation" tabindex="-1">Memoh Documentation <a class="header-anchor" href="#memoh-documentation" aria-label="Permalink to &quot;Memoh Documentation&quot;"></a></h1><p>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.</p><h2 id="documentation" tabindex="-1">Documentation <a class="header-anchor" href="#documentation" aria-label="Permalink to &quot;Documentation&quot;"></a></h2><ul><li><strong><a href="/getting-started.html">About Memoh</a></strong> — What Memoh is, key features, and installation links.</li><li><strong><a href="/installation/docker.html">Installation</a></strong> — <a href="/installation/docker.html">Docker</a> (recommended) and <a href="/installation/config-toml.html">config.toml</a> reference.</li><li><strong><a href="/getting-started/provider-and-model.html">Getting Started</a></strong> — Configure provider and model.</li><li><strong><a href="/cli/">CLI</a></strong> — Command-line tool for bots, channels, providers, models, schedules, and chat.</li></ul>',4)])])}const f=t(i,[["render",r]]);export{u as __pageData,f as default};
+1
View File
@@ -0,0 +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};
-1
View File
@@ -1 +0,0 @@
import{_ as e,o,c as a,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":1771161622000}'),r={name:"index.md"};function i(s,t,l,c,m,d){return o(),a("div",null,[...t[0]||(t[0]=[n('<h1 id="memoh-documentation" tabindex="-1">Memoh Documentation <a class="header-anchor" href="#memoh-documentation" aria-label="Permalink to &quot;Memoh Documentation&quot;"></a></h1><p>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.</p><h2 id="documentation" tabindex="-1">Documentation <a class="header-anchor" href="#documentation" aria-label="Permalink to &quot;Documentation&quot;"></a></h2><ul><li><strong><a href="/getting-started.html">Getting Started</a></strong> — What Memoh is, key features, and installation links.</li><li><strong><a href="/installation/docker.html">Installation</a></strong> — <a href="/installation/docker.html">Docker</a> (recommended) and <a href="/installation/config-toml.html">config.toml</a> reference.</li><li><strong><a href="/cli/">CLI</a></strong> — Command-line tool for bots, channels, providers, models, schedules, and chat.</li><li><strong><a href="/concepts/">Core Concepts</a></strong> — <a href="/concepts/">Concepts overview</a> and <a href="/concepts/identity-and-binding.html">Accounts and linking</a>.</li></ul><h2 id="for-contributors" tabindex="-1">For Contributors <a class="header-anchor" href="#for-contributors" aria-label="Permalink to &quot;For Contributors&quot;"></a></h2><ul><li><a href="/style/terminology.html">Terminology Rules</a> — Documentation style guide.</li></ul>',6)])])}const f=e(r,[["render",i]]);export{u as __pageData,f as default};
-1
View File
@@ -1 +0,0 @@
import{_ as e,o,c as a,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":1771161622000}'),r={name:"index.md"};function i(s,t,l,c,m,d){return o(),a("div",null,[...t[0]||(t[0]=[n("",6)])])}const f=e(r,[["render",i]]);export{u as __pageData,f as default};
-1
View File
@@ -1 +0,0 @@
import{_ as o,o as t,c as n,ag as a}from"./chunks/framework.DEqXEGcv.js";const h=JSON.parse('{"title":"Terminology Rules","description":"","frontmatter":{},"headers":[],"relativePath":"style/terminology.md","filePath":"style/terminology.md","lastUpdated":1770887583000}'),r={name:"style/terminology.md"};function i(l,e,s,c,u,d){return t(),n("div",null,[...e[0]||(e[0]=[a('<h1 id="terminology-rules" tabindex="-1">Terminology Rules <a class="header-anchor" href="#terminology-rules" aria-label="Permalink to &quot;Terminology Rules&quot;"></a></h1><blockquote><p>Audience: documentation contributors and maintainers. This page defines writing terms. It is not product user guidance.</p></blockquote><h2 id="canonical-terms" tabindex="-1">Canonical Terms <a class="header-anchor" href="#canonical-terms" aria-label="Permalink to &quot;Canonical Terms&quot;"></a></h2><ul><li><strong>System Account (<code>User</code>)</strong>: the account inside Memoh.</li><li><strong>Platform Account (<code>ChannelIdentity</code>)</strong>: the user&#39;s account on an external access platform, not a Memoh account.</li><li><strong>Access Platform (<code>channel</code>)</strong>: the external platform carrying inbound messages.</li><li><strong>Account Linking (<code>bind</code>)</strong>: linking a Platform Account to a System Account.</li><li><strong>Bind Code</strong>: one-time code used for account linking.</li><li><strong>Bot</strong>: resource and authorization boundary managed by a System Account.</li></ul><h2 id="preferred-wording" tabindex="-1">Preferred Wording <a class="header-anchor" href="#preferred-wording" aria-label="Permalink to &quot;Preferred Wording&quot;"></a></h2><ul><li>Write <strong>&quot;platform account&quot;</strong> instead of &quot;actor&quot; in user-facing docs.</li><li>Write <strong>&quot;access platform&quot;</strong> instead of &quot;channel&quot; when describing product behavior.</li><li>Keep code aliases in parentheses on first mention: <ul><li><code>Platform Account (ChannelIdentity)</code></li><li><code>System Account (User)</code></li><li><code>Account Linking (bind)</code></li></ul></li></ul><h2 id="disallowed-or-discouraged-terms" tabindex="-1">Disallowed or Discouraged Terms <a class="header-anchor" href="#disallowed-or-discouraged-terms" aria-label="Permalink to &quot;Disallowed or Discouraged Terms&quot;"></a></h2><ul><li>Avoid plain <strong>actor</strong> in conceptual docs (except when quoting code symbols).</li><li>Avoid ambiguous <strong>platform user</strong> phrasing (it does not distinguish system vs platform account).</li><li>Avoid wording that implies Platform Account is created inside Memoh.</li></ul><h2 id="example-sentences" tabindex="-1">Example Sentences <a class="header-anchor" href="#example-sentences" aria-label="Permalink to &quot;Example Sentences&quot;"></a></h2><ul><li>Correct: &quot;A platform account is the user&#39;s TG account, not a Memoh account.&quot;</li><li>Correct: &quot;Account linking binds a platform account to a system account.&quot;</li><li>Incorrect: &quot;Actor is a user in Memoh.&quot;</li></ul><h2 id="contributor-checklist" tabindex="-1">Contributor Checklist <a class="header-anchor" href="#contributor-checklist" aria-label="Permalink to &quot;Contributor Checklist&quot;"></a></h2><ul><li>Is every &quot;account&quot; term clearly scoped (system vs platform)?</li><li>Is &quot;channel&quot; replaced by &quot;access platform&quot; in prose?</li><li>Are code aliases kept only as parenthetical references?</li></ul>',12)])])}const g=o(r,[["render",i]]);export{h as __pageData,g as default};
@@ -1 +0,0 @@
import{_ as o,o as t,c as n,ag as a}from"./chunks/framework.DEqXEGcv.js";const h=JSON.parse('{"title":"Terminology Rules","description":"","frontmatter":{},"headers":[],"relativePath":"style/terminology.md","filePath":"style/terminology.md","lastUpdated":1770887583000}'),r={name:"style/terminology.md"};function i(l,e,s,c,u,d){return t(),n("div",null,[...e[0]||(e[0]=[a("",12)])])}const g=o(r,[["render",i]]);export{h as __pageData,g as default};
+4 -4
View File
File diff suppressed because one or more lines are too long
+4 -4
View File
File diff suppressed because one or more lines are too long
+4 -4
View File
File diff suppressed because one or more lines are too long
+5 -5
View File
File diff suppressed because one or more lines are too long
+4 -4
View File
File diff suppressed because one or more lines are too long
+5 -5
View File
File diff suppressed because one or more lines are too long
+4 -4
View File
File diff suppressed because one or more lines are too long
+4 -4
View File
File diff suppressed because one or more lines are too long
+4 -4
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+6 -6
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

+1 -1
View File
@@ -1 +1 @@
{"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":"Bp0XdM9y","cli_provider.md":"CEEKGN01","cli_schedule.md":"DSG0HQuo","concepts_identity-and-binding.md":"Dqnt6wsW","concepts_index.md":"CxGkiYqO","getting-started.md":"DF97X5A_","index.md":"XthB7km1","installation_config-toml.md":"DLEOCXmn","installation_docker.md":"xaCmXfCQ","style_terminology.md":"zpSWt3dU","troubleshooting.md":"DEVYH0Du","zh_concepts_identity-and-binding.md":"BpgZjxhl","zh_concepts_index.md":"CFVegv9w","zh_index.md":"N8D_wq8q","zh_style_terminology.md":"DtBRpWD7"}
{"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":"Bp0XdM9y","cli_provider.md":"CEEKGN01","cli_schedule.md":"DSG0HQuo","getting-started.md":"B026JaLd","getting-started_provider-and-model.md":"Ix_AFx48","index.md":"BxPQTo9L","installation_config-toml.md":"DLEOCXmn","installation_docker.md":"xaCmXfCQ","troubleshooting.md":"DEVYH0Du","zh_concepts_identity-and-binding.md":"BpgZjxhl","zh_concepts_index.md":"CFVegv9w","zh_index.md":"N8D_wq8q","zh_style_terminology.md":"DtBRpWD7"}
+5 -5
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+4 -4
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+4 -4
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long