This commit is contained in:
sheepbox8646
2026-02-15 13:46:04 +00:00
parent 0fc66be491
commit 75a2153e8b
59 changed files with 389 additions and 81 deletions
@@ -1 +1 @@
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};
import{t as p}from"./chunks/theme.C1FTWL1O.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
View File
@@ -0,0 +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('<h1 id="bot" tabindex="-1">Bot <a class="header-anchor" href="#bot" aria-label="Permalink to &quot;Bot&quot;"></a></h1><p>A <strong>bot</strong> is the primary runtime entity in Memoh.</p><p>Each bot has its own:</p><ul><li>Configuration</li><li>Container lifecycle</li><li>Memory scope</li><li>Channel bindings</li><li>Model assignments</li></ul><h2 id="key-settings" tabindex="-1">Key Settings <a class="header-anchor" href="#key-settings" aria-label="Permalink to &quot;Key Settings&quot;"></a></h2><ul><li><strong>max-load-time</strong> (<code>max_context_load_time</code>): how many minutes of recent conversation context are loaded into prompts</li><li><strong>language</strong>: preferred language for interaction (default is <code>auto</code>)</li><li><strong>chat model / memory model / embedding model</strong>: model IDs used by this bot</li></ul><h2 id="why-it-matters" tabindex="-1">Why It Matters <a class="header-anchor" href="#why-it-matters" aria-label="Permalink to &quot;Why It Matters&quot;"></a></h2><p>The bot abstraction allows Memoh to isolate behavior and resources per agent, while keeping management centralized in one Web UI.</p><h2 id="web-ui-path" tabindex="-1">Web UI Path <a class="header-anchor" href="#web-ui-path" aria-label="Permalink to &quot;Web UI Path&quot;"></a></h2><ul><li><code>Bots &gt; Select a bot &gt; Settings</code></li></ul>',10)])])}const u=t(n,[["render",r]]);export{p as __pageData,u as default};
+1
View File
@@ -0,0 +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};
+1
View File
@@ -0,0 +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('<h1 id="channel" tabindex="-1">Channel <a class="header-anchor" href="#channel" aria-label="Permalink to &quot;Channel&quot;"></a></h1><p>A <strong>channel</strong> connects a bot to an external communication platform.</p><p>Examples include:</p><ul><li>Telegram</li><li>Feishu (Lark)</li><li>Web chat</li></ul><h2 id="what-a-channel-configuration-defines" tabindex="-1">What a Channel Configuration Defines <a class="header-anchor" href="#what-a-channel-configuration-defines" aria-label="Permalink to &quot;What a Channel Configuration Defines&quot;"></a></h2><ul><li>Platform type and credentials</li><li>Message routing from external users to a target bot</li><li>Reply delivery back to the source platform</li></ul><h2 id="why-it-matters" tabindex="-1">Why It Matters <a class="header-anchor" href="#why-it-matters" aria-label="Permalink to &quot;Why It Matters&quot;"></a></h2><p>Channels decouple bot logic from transport, so one bot can serve users across multiple platforms.</p><h2 id="web-ui-path" tabindex="-1">Web UI Path <a class="header-anchor" href="#web-ui-path" aria-label="Permalink to &quot;Web UI Path&quot;"></a></h2><ul><li><code>Bots &gt; Select a bot &gt; Channels</code></li></ul>',10)])])}const f=e(o,[["render",r]]);export{p as __pageData,f as default};
@@ -0,0 +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};
+1
View File
@@ -0,0 +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('<h1 id="container" tabindex="-1">Container <a class="header-anchor" href="#container" aria-label="Permalink to &quot;Container&quot;"></a></h1><p>Each bot runs in its own <strong>isolated container</strong>.</p><h2 id="what-isolation-gives-you" tabindex="-1">What Isolation Gives You <a class="header-anchor" href="#what-isolation-gives-you" aria-label="Permalink to &quot;What Isolation Gives You&quot;"></a></h2><ul><li>Separate filesystem per bot</li><li>Separate runtime process space</li><li>Controlled lifecycle (create/start/stop/delete)</li></ul><p>This prevents one bot from interfering with another bot&#39;s execution environment.</p><h2 id="why-it-matters" tabindex="-1">Why It Matters <a class="header-anchor" href="#why-it-matters" aria-label="Permalink to &quot;Why It Matters&quot;"></a></h2><p>Container isolation is the foundation that allows bots to run tools, commands, and file operations safely in parallel.</p><h2 id="web-ui-path" tabindex="-1">Web UI Path <a class="header-anchor" href="#web-ui-path" aria-label="Permalink to &quot;Web UI Path&quot;"></a></h2><ul><li><code>Bots &gt; Select a bot &gt; Container</code></li></ul>',9)])])}const m=e(i,[["render",r]]);export{u as __pageData,m as default};
@@ -0,0 +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};
@@ -0,0 +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('<h1 id="conversation-and-history" tabindex="-1">Conversation and History <a class="header-anchor" href="#conversation-and-history" aria-label="Permalink to &quot;Conversation and History&quot;"></a></h1><p>Memoh organizes interactions as <strong>conversations</strong> with preserved <strong>history</strong>.</p><h2 id="what-this-includes" tabindex="-1">What This Includes <a class="header-anchor" href="#what-this-includes" aria-label="Permalink to &quot;What This Includes&quot;"></a></h2><ul><li>Ongoing chat context between users and bots</li><li>Message-level timeline and traceability</li><li>Source context for memory extraction and debugging</li></ul><h2 id="why-it-matters" tabindex="-1">Why It Matters <a class="header-anchor" href="#why-it-matters" aria-label="Permalink to &quot;Why It Matters&quot;"></a></h2><p>Conversation history powers:</p><ul><li>Better response continuity</li><li>Auditing and troubleshooting</li><li>Post-hoc analysis of bot behavior</li></ul><h2 id="web-ui-path" tabindex="-1">Web UI Path <a class="header-anchor" href="#web-ui-path" aria-label="Permalink to &quot;Web UI Path&quot;"></a></h2><ul><li><code>Chat &gt; Select conversation</code></li><li><code>Bots &gt; Select a bot &gt; History</code></li></ul>',9)])])}const _=e(n,[["render",s]]);export{p as __pageData,_ as default};
@@ -0,0 +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};
+1
View File
@@ -0,0 +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('<h1 id="concepts-overview" tabindex="-1">Concepts Overview <a class="header-anchor" href="#concepts-overview" aria-label="Permalink to &quot;Concepts Overview&quot;"></a></h1><p>This section explains the core design concepts behind Memoh.</p><p>Use these pages when you want to understand how Memoh is designed, why features exist, and how different parts work together.</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>Bot</strong>: the core runtime unit</li><li><strong>Provider and Model</strong>: how LLM capability is plugged in</li><li><strong>Memory</strong>: how long-term knowledge is stored and retrieved</li><li><strong>Channel</strong>: how external platforms connect to bots</li><li><strong>Schedule</strong>: how tasks are triggered automatically</li><li><strong>Container</strong>: isolated execution environment per bot</li><li><strong>MCP</strong>: external tool and service integration protocol</li><li><strong>Subagents</strong>: specialized delegated agents</li><li><strong>Skills</strong>: reusable capability prompts/instructions</li><li><strong>Conversation and History</strong>: chat context and traceability</li></ul><h2 id="recommended-reading-order" tabindex="-1">Recommended Reading Order <a class="header-anchor" href="#recommended-reading-order" aria-label="Permalink to &quot;Recommended Reading Order&quot;"></a></h2><ol><li><a href="/concepts/bot.html">Bot</a></li><li><a href="/concepts/provider-and-model.html">Provider and Model</a></li><li><a href="/concepts/memory.html">Memory</a></li><li><a href="/concepts/channel.html">Channel</a></li><li><a href="/concepts/container.html">Container</a></li><li><a href="/concepts/schedule.html">Schedule</a></li><li><a href="/concepts/mcp.html">MCP</a></li><li><a href="/concepts/subagents.html">Subagents</a></li><li><a href="/concepts/skills.html">Skills</a></li><li><a href="/concepts/conversation-and-history.html">Conversation and History</a></li></ol>',7)])])}const g=t(r,[["render",i]]);export{m as __pageData,g as default};
@@ -0,0 +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};
+1
View File
@@ -0,0 +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('<h1 id="mcp" tabindex="-1">MCP <a class="header-anchor" href="#mcp" aria-label="Permalink to &quot;MCP&quot;"></a></h1><p><strong>MCP (Model Context Protocol)</strong> connects Memoh bots to external tool services.</p><h2 id="what-mcp-adds" tabindex="-1">What MCP Adds <a class="header-anchor" href="#what-mcp-adds" aria-label="Permalink to &quot;What MCP Adds&quot;"></a></h2><ul><li>Standardized tool discovery and invocation</li><li>Remote capability extension without changing core bot code</li><li>Per-bot integration flexibility</li></ul><p>Memoh supports MCP connections so bots can access external systems through a unified protocol.</p><h2 id="why-it-matters" tabindex="-1">Why It Matters <a class="header-anchor" href="#why-it-matters" aria-label="Permalink to &quot;Why It Matters&quot;"></a></h2><p>MCP makes capability extension modular. You can add or swap tool backends with minimal coupling.</p><h2 id="web-ui-path" tabindex="-1">Web UI Path <a class="header-anchor" href="#web-ui-path" aria-label="Permalink to &quot;Web UI Path&quot;"></a></h2><ul><li><code>Bots &gt; Select a bot &gt; MCP</code></li></ul>',9)])])}const u=a(s,[["render",n]]);export{m as __pageData,u as default};
+1
View File
@@ -0,0 +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};
+1
View File
@@ -0,0 +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('<h1 id="memory" tabindex="-1">Memory <a class="header-anchor" href="#memory" aria-label="Permalink to &quot;Memory&quot;"></a></h1><p><strong>Memory</strong> is Memoh&#39;s long-term knowledge system for each bot.</p><h2 id="how-it-works" tabindex="-1">How It Works <a class="header-anchor" href="#how-it-works" aria-label="Permalink to &quot;How It Works&quot;"></a></h2><ul><li>Important facts are extracted from conversations</li><li>Memories are stored and indexed</li><li>Relevant memories are retrieved by semantic similarity when needed</li></ul><p>Memoh combines vector retrieval with keyword-style retrieval for better recall and precision.</p><h2 id="why-it-matters" tabindex="-1">Why It Matters <a class="header-anchor" href="#why-it-matters" aria-label="Permalink to &quot;Why It Matters&quot;"></a></h2><p>Memory enables continuity across long timelines, so bots can maintain context beyond short prompt windows.</p><h2 id="web-ui-path" tabindex="-1">Web UI Path <a class="header-anchor" href="#web-ui-path" aria-label="Permalink to &quot;Web UI Path&quot;"></a></h2><ul><li><code>Bots &gt; Select a bot &gt; Memory</code></li></ul>',9)])])}const y=t(i,[["render",s]]);export{p as __pageData,y as default};
@@ -0,0 +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};
@@ -0,0 +1 @@
import{_ as o,o as t,c as d,ag as a}from"./chunks/framework.DEqXEGcv.js";const h=JSON.parse('{"title":"Provider and Model","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/provider-and-model.md","filePath":"concepts/provider-and-model.md","lastUpdated":1771163124000}'),r={name:"concepts/provider-and-model.md"};function i(n,e,l,s,c,m){return t(),d("div",null,[...e[0]||(e[0]=[a('<h1 id="provider-and-model" tabindex="-1">Provider and Model <a class="header-anchor" href="#provider-and-model" aria-label="Permalink to &quot;Provider and Model&quot;"></a></h1><p>In Memoh, <strong>provider</strong> and <strong>model</strong> are separate but connected concepts:</p><ul><li>A <strong>provider</strong> is the LLM service configuration (API endpoint, key, client type)</li><li>A <strong>model</strong> is the concrete chat or embedding model under that provider</li></ul><h2 id="typical-setup" tabindex="-1">Typical Setup <a class="header-anchor" href="#typical-setup" aria-label="Permalink to &quot;Typical Setup&quot;"></a></h2><p>At minimum, a production-ready bot usually needs:</p><ul><li>One <strong>chat</strong> model for dialog generation</li><li>One <strong>embedding</strong> model for memory indexing and retrieval</li></ul><h2 id="model-assignment-to-bot" tabindex="-1">Model Assignment to Bot <a class="header-anchor" href="#model-assignment-to-bot" aria-label="Permalink to &quot;Model Assignment to Bot&quot;"></a></h2><p>Bots reference model IDs in settings:</p><ul><li><code>chat_model_id</code></li><li><code>memory_model_id</code></li><li><code>embedding_model_id</code></li></ul><p>This enables per-bot customization (for quality, latency, or cost).</p><h2 id="web-ui-path" tabindex="-1">Web UI Path <a class="header-anchor" href="#web-ui-path" aria-label="Permalink to &quot;Web UI Path&quot;"></a></h2><ul><li><code>Models &gt; Add Provider &gt; Select Provider &gt; Add Model</code></li><li><code>Bots &gt; Select a bot &gt; Settings &gt; Choose chat/memory/embedding models</code></li></ul>',12)])])}const u=o(r,[["render",i]]);export{h as __pageData,u as default};
@@ -0,0 +1 @@
import{_ as o,o as t,c as d,ag as a}from"./chunks/framework.DEqXEGcv.js";const h=JSON.parse('{"title":"Provider and Model","description":"","frontmatter":{},"headers":[],"relativePath":"concepts/provider-and-model.md","filePath":"concepts/provider-and-model.md","lastUpdated":1771163124000}'),r={name:"concepts/provider-and-model.md"};function i(n,e,l,s,c,m){return t(),d("div",null,[...e[0]||(e[0]=[a("",12)])])}const u=o(r,[["render",i]]);export{h as __pageData,u as default};
+1
View File
@@ -0,0 +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('<h1 id="schedule" tabindex="-1">Schedule <a class="header-anchor" href="#schedule" aria-label="Permalink to &quot;Schedule&quot;"></a></h1><p>A <strong>schedule</strong> is a cron-based automation rule that runs bot commands at defined times.</p><h2 id="core-fields" tabindex="-1">Core Fields <a class="header-anchor" href="#core-fields" aria-label="Permalink to &quot;Core Fields&quot;"></a></h2><ul><li><code>pattern</code>: cron expression</li><li><code>command</code>: command or task to execute</li><li><code>enabled</code>: whether the schedule is active</li><li><code>max_calls</code>: optional execution cap</li><li><code>current_calls</code>: current run count</li></ul><h2 id="why-it-matters" tabindex="-1">Why It Matters <a class="header-anchor" href="#why-it-matters" aria-label="Permalink to &quot;Why It Matters&quot;"></a></h2><p>Schedules make bots proactive, not only reactive.<br> You can automate recurring operations like summaries, reminders, checks, and maintenance tasks.</p><h2 id="web-ui-path" tabindex="-1">Web UI Path <a class="header-anchor" href="#web-ui-path" aria-label="Permalink to &quot;Web UI Path&quot;"></a></h2><ul><li><code>Not available in current Web UI</code></li></ul><blockquote><p>Schedule is supported by backend and CLI/API, but there is currently no dedicated schedule page in the Web UI.</p></blockquote>',9)])])}const m=a(r,[["render",l]]);export{p as __pageData,m as default};
@@ -0,0 +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};
+1
View File
@@ -0,0 +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('<h1 id="skills" tabindex="-1">Skills <a class="header-anchor" href="#skills" aria-label="Permalink to &quot;Skills&quot;"></a></h1><p><strong>Skills</strong> are reusable capability instructions that guide how a bot (or subagent) solves specific classes of tasks.</p><h2 id="typical-skill-content" tabindex="-1">Typical Skill Content <a class="header-anchor" href="#typical-skill-content" aria-label="Permalink to &quot;Typical Skill Content&quot;"></a></h2><ul><li>Scope and purpose</li><li>Input expectations</li><li>Execution steps</li><li>Constraints and output format</li></ul><h2 id="why-it-matters" tabindex="-1">Why It Matters <a class="header-anchor" href="#why-it-matters" aria-label="Permalink to &quot;Why It Matters&quot;"></a></h2><p>Skills help keep behavior consistent, reduce prompt duplication, and make complex workflows easier to maintain.</p><h2 id="web-ui-path" tabindex="-1">Web UI Path <a class="header-anchor" href="#web-ui-path" aria-label="Permalink to &quot;Web UI Path&quot;"></a></h2><ul><li><code>Bots &gt; Select a bot &gt; Subagents</code></li></ul><blockquote><p>Skills are currently primarily managed through agent/workspace configuration and runtime conventions, while subagent-related behavior is visible from the Subagents area.</p></blockquote>',9)])])}const k=e(s,[["render",o]]);export{d as __pageData,k as default};
@@ -0,0 +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};
+1
View File
@@ -0,0 +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('<h1 id="subagents" tabindex="-1">Subagents <a class="header-anchor" href="#subagents" aria-label="Permalink to &quot;Subagents&quot;"></a></h1><p><strong>Subagents</strong> are specialized helper agents that a bot can delegate tasks to.</p><h2 id="core-idea" tabindex="-1">Core Idea <a class="header-anchor" href="#core-idea" aria-label="Permalink to &quot;Core Idea&quot;"></a></h2><ul><li>The main bot acts as coordinator</li><li>Subagents focus on narrower tasks</li><li>Results are combined back into the main workflow</li></ul><p>This supports decomposition of complex requests into smaller, more reliable execution units.</p><h2 id="why-it-matters" tabindex="-1">Why It Matters <a class="header-anchor" href="#why-it-matters" aria-label="Permalink to &quot;Why It Matters&quot;"></a></h2><p>Subagent architecture improves scalability for multi-step tasks and helps separate responsibilities by role.</p><h2 id="web-ui-path" tabindex="-1">Web UI Path <a class="header-anchor" href="#web-ui-path" aria-label="Permalink to &quot;Web UI Path&quot;"></a></h2><ul><li><code>Bots &gt; Select a bot &gt; Subagents</code></li></ul>',9)])])}const p=a(r,[["render",i]]);export{b as __pageData,p as default};
@@ -0,0 +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};