Unified Agent + reusable Go agent core.
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

vitepress

Lyric 6b5a5a05 9ee12e9b

+6529
web/docs/docs/.vitepress/config.ts web/vitepress/docs/.vitepress/config.ts
web/docs/docs/.vitepress/theme/custom.css web/vitepress/docs/.vitepress/theme/custom.css
web/docs/docs/index.md web/vitepress/docs/index.md
web/docs/docs/ja/index.md web/vitepress/docs/ja/index.md
web/docs/docs/public/android-chrome-192x192.png web/vitepress/docs/public/android-chrome-192x192.png
web/docs/docs/public/android-chrome-512x512.png web/vitepress/docs/public/android-chrome-512x512.png
web/docs/docs/public/apple-touch-icon.png web/vitepress/docs/public/apple-touch-icon.png
web/docs/docs/public/favicon-16x16.png web/vitepress/docs/public/favicon-16x16.png
web/docs/docs/public/favicon-32x32.png web/vitepress/docs/public/favicon-32x32.png
web/docs/docs/public/favicon.ico web/vitepress/docs/public/favicon.ico
web/docs/docs/public/favicon.svg web/vitepress/docs/public/favicon.svg
web/docs/docs/public/mister-morph-logo.svg web/vitepress/docs/public/mister-morph-logo.svg
web/docs/docs/public/safari-pinned-tab.svg web/vitepress/docs/public/safari-pinned-tab.svg
web/docs/docs/public/site.webmanifest web/vitepress/docs/public/site.webmanifest
web/docs/docs/zh/index.md web/vitepress/docs/zh/index.md
+32
web/vitepress/.gitignore
··· 1 + # Dependencies 2 + node_modules/ 3 + .pnpm-store/ 4 + 5 + # Build output 6 + dist/ 7 + dist-ssr/ 8 + docs/.vitepress/cache/ 9 + docs/.vitepress/dist/ 10 + 11 + # Local overrides 12 + *.local 13 + 14 + # Logs 15 + logs/ 16 + *.log 17 + npm-debug.log* 18 + pnpm-debug.log* 19 + yarn-debug.log* 20 + yarn-error.log* 21 + lerna-debug.log* 22 + 23 + # Editor files 24 + .vscode/* 25 + !.vscode/extensions.json 26 + .idea/ 27 + .DS_Store 28 + *.suo 29 + *.ntvs* 30 + *.njsproj 31 + *.sln 32 + *.sw?
+23
web/vitepress/README.md
··· 1 + # VitePress Docs (web/docs) 2 + 3 + ## Run locally 4 + 5 + ```bash 6 + pnpm install 7 + pnpm dev 8 + ``` 9 + 10 + ## Build 11 + 12 + ```bash 13 + pnpm build 14 + pnpm serve 15 + ``` 16 + 17 + ## Agent-friendly outputs 18 + 19 + After `pnpm build`, generated files include: 20 + 21 + - `dist/llms.txt` 22 + - `dist/llms-full.txt` 23 + - per-page `*.md`
+24
web/vitepress/docs/.vitepress/theme/index.ts
··· 1 + import DefaultTheme from 'vitepress/theme' 2 + import type { Theme } from 'vitepress' 3 + import CopyOrDownloadAsMarkdownButtons from 'vitepress-plugin-llms/vitepress-components/CopyOrDownloadAsMarkdownButtons.vue' 4 + import 'quail-ui/dist/index.css' 5 + import './custom.css' 6 + 7 + const applyMorphTheme = () => { 8 + if (typeof document === 'undefined') { 9 + return 10 + } 11 + document.body.dataset.theme = 'morph' 12 + document.body.classList.remove('dark') 13 + document.body.classList.add('light') 14 + } 15 + 16 + export default { 17 + extends: DefaultTheme, 18 + enhanceApp({ app }) { 19 + app.component('CopyOrDownloadAsMarkdownButtons', CopyOrDownloadAsMarkdownButtons) 20 + }, 21 + setup() { 22 + applyMorphTheme() 23 + } 24 + } satisfies Theme
+105
web/vitepress/docs/guide/agent-level-customization.md
··· 1 + --- 2 + title: Agent-Level Customization 3 + description: Low-level customization beyond integration runtime APIs. 4 + --- 5 + 6 + # Agent-Level Customization 7 + 8 + Use this page when you need behavior not exposed by `integration.Runtime`. 9 + 10 + ## Minimal Runnable Example (Agent Low-Level API) 11 + 12 + This example uses `agent.New(...)` directly, without `integration.Runtime`. 13 + 14 + ```go 15 + package main 16 + 17 + import ( 18 + "context" 19 + "fmt" 20 + "os" 21 + 22 + "github.com/quailyquaily/mistermorph/agent" 23 + "github.com/quailyquaily/mistermorph/providers/uniai" 24 + "github.com/quailyquaily/mistermorph/tools" 25 + ) 26 + 27 + func main() { 28 + client := uniai.New(uniai.Config{ 29 + Provider: "openai", 30 + Endpoint: "https://api.openai.com", 31 + APIKey: os.Getenv("OPENAI_API_KEY"), 32 + Model: "gpt-5.4", 33 + }) 34 + 35 + reg := tools.NewRegistry() // minimal example: no tools 36 + 37 + spec := agent.DefaultPromptSpec() 38 + spec.Blocks = append(spec.Blocks, agent.PromptBlock{ 39 + Content: "[[ Runtime Rule ]]\\nAnswer in one short paragraph.", 40 + }) 41 + 42 + eng := agent.New(client, reg, agent.Config{ 43 + MaxSteps: 8, 44 + ParseRetries: 2, 45 + ToolRepeatLimit: 3, 46 + }, spec) 47 + 48 + final, _, err := eng.Run(context.Background(), "Introduce yourself", agent.RunOptions{ 49 + Model: "gpt-5.4", 50 + }) 51 + if err != nil { 52 + panic(err) 53 + } 54 + 55 + fmt.Println(final.Output) 56 + } 57 + ``` 58 + 59 + ## Typical Cases 60 + 61 + - inject dynamic prompt blocks from code per task 62 + - replace system prompt rendering logic 63 + - inject extra LLM request params 64 + - customize tool success/fallback handling 65 + 66 + ## Inject Prompt Blocks with `PromptSpec` 67 + 68 + ```go 69 + spec := agent.DefaultPromptSpec() 70 + spec.Blocks = append(spec.Blocks, agent.PromptBlock{ 71 + Content: "[[ Project Policy ]]\nAlways include trace_id in external API calls.", 72 + }) 73 + 74 + engine := agent.New(client, reg, agentCfg, spec) 75 + ``` 76 + 77 + ## Replace Prompt Builder 78 + 79 + ```go 80 + engine := agent.New( 81 + client, 82 + reg, 83 + agentCfg, 84 + spec, 85 + agent.WithPromptBuilder(func(reg *tools.Registry, task string) string { 86 + return "your fully custom system prompt" 87 + }), 88 + ) 89 + ``` 90 + 91 + ## Other Low-Level Hooks 92 + 93 + - `agent.WithParamsBuilder(...)` 94 + - `agent.WithOnToolSuccess(...)` 95 + - `agent.WithFallbackFinal(...)` 96 + - `agent.WithPlanStepUpdate(...)` 97 + 98 + ## Scope Boundary 99 + 100 + - custom tool registration: [Advanced Core Embedding](/guide/core-advanced-embedding) 101 + - Telegram channel integration: [Advanced Core Embedding](/guide/core-advanced-embedding) 102 + 103 + ## Recommendation 104 + 105 + Prefer `integration` by default. Move to this level only when you need capabilities that `integration` does not expose.
+49
web/vitepress/docs/guide/build-agent-with-core.md
··· 1 + --- 2 + title: Build an Agent with Core 3 + description: Embed Mister Morph integration runtime in your Go project. 4 + --- 5 + 6 + # Build an Agent with Core 7 + 8 + Use `integration` as the embedding entrypoint. 9 + 10 + ## Minimal Example 11 + 12 + ```go 13 + package main 14 + 15 + import ( 16 + "context" 17 + "fmt" 18 + 19 + "github.com/quailyquaily/mistermorph/agent" 20 + "github.com/quailyquaily/mistermorph/integration" 21 + ) 22 + 23 + func main() { 24 + cfg := integration.DefaultConfig() 25 + cfg.BuiltinToolNames = []string{"read_file", "url_fetch", "todo_update"} 26 + cfg.Set("llm.provider", "openai") 27 + cfg.Set("llm.model", "gpt-5.4") 28 + cfg.Set("llm.api_key", "YOUR_API_KEY") 29 + 30 + rt := integration.New(cfg) 31 + 32 + task := "Read README and output a short summary" 33 + final, _, err := rt.RunTask(context.Background(), task, agent.RunOptions{}) 34 + if err != nil { 35 + panic(err) 36 + } 37 + 38 + fmt.Println(final.Output) 39 + } 40 + ``` 41 + 42 + ## Common Tuning 43 + 44 + - `cfg.BuiltinToolNames` 45 + - `cfg.Set("max_steps", N)` 46 + - `cfg.Set("tool_repeat_limit", N)` 47 + - `cfg.Inspect.Prompt`, `cfg.Inspect.Request` 48 + 49 + Prepared mode (`NewRunEngine*`) is covered in [Advanced Core Embedding](/guide/core-advanced-embedding).
+62
web/vitepress/docs/guide/built-in-tools.md
··· 1 + --- 2 + title: Built-in Tools 3 + description: Static tools, runtime-injected tools, and channel-specific tools. 4 + --- 5 + 6 + # Built-in Tools 7 + 8 + Tools are registered in two phases: static + runtime. 9 + 10 + ## Static Tools (config-driven) 11 + 12 + These are created from config without runtime context. 13 + 14 + - `read_file`: read local files 15 + - `write_file`: write local files under allowed dirs 16 + - `bash`: execute local shell commands 17 + - `url_fetch`: HTTP(S) fetch/download 18 + - `web_search`: web search 19 + - `contacts_send`: send outbound message by contact 20 + 21 + ## Runtime Tools (LLM runtime dependent) 22 + 23 + These are injected when runtime has active LLM client/model. 24 + 25 + - `plan_create` 26 + - `todo_update` 27 + 28 + ## Channel-Specific Runtime Tools 29 + 30 + - Telegram runtime can add: 31 + - `telegram_send_voice` 32 + - `telegram_send_photo` 33 + - `telegram_send_file` 34 + - `message_react` 35 + - Slack runtime can add: 36 + - `message_react` 37 + 38 + ## Tool Selection in Core Embedding 39 + 40 + You can whitelist built-ins via `integration.Config.BuiltinToolNames`. 41 + 42 + ```go 43 + cfg.BuiltinToolNames = []string{"read_file", "url_fetch", "todo_update"} 44 + ``` 45 + 46 + Empty list means all known built-ins. 47 + 48 + ## Key Config Sections 49 + 50 + ```yaml 51 + tools: 52 + read_file: ... 53 + write_file: ... 54 + bash: ... 55 + url_fetch: ... 56 + web_search: ... 57 + contacts_send: ... 58 + todo_update: ... 59 + plan_create: ... 60 + ``` 61 + 62 + See `docs/tools.md` for deeper parameter-level behavior.
+40
web/vitepress/docs/guide/config-patterns.md
··· 1 + --- 2 + title: Config Patterns 3 + description: Common patterns for routes, profiles, and tool policy. 4 + --- 5 + 6 + # Config Patterns 7 + 8 + ## LLM Profiles and Routes 9 + 10 + ```yaml 11 + llm: 12 + model: gpt-5.4 13 + profiles: 14 + cheap: 15 + model: gpt-4.1-mini 16 + routes: 17 + main_loop: default 18 + addressing: cheap 19 + heartbeat: cheap 20 + ``` 21 + 22 + ## Tool Toggles 23 + 24 + ```yaml 25 + tools: 26 + bash: 27 + enabled: false 28 + url_fetch: 29 + enabled: true 30 + timeout: "30s" 31 + ``` 32 + 33 + ## Runtime Limits 34 + 35 + ```yaml 36 + max_steps: 20 37 + tool_repeat_limit: 4 38 + ``` 39 + 40 + Use `assets/config/config.example.yaml` as canonical key list.
+238
web/vitepress/docs/guide/config-reference.md
··· 1 + --- 2 + title: Config Fields Reference 3 + description: Complete field map for config.yaml. 4 + --- 5 + 6 + # Config Fields Reference 7 + 8 + Source of truth: `assets/config/config.example.yaml`. 9 + 10 + All keys can be overridden by env vars (`MISTER_MORPH_...`). See [Environment Variables Reference](/guide/env-vars-reference). 11 + 12 + ## Global 13 + 14 + - `user_agent`: outbound HTTP user-agent for tools. 15 + 16 + ## LLM 17 + 18 + - `llm.provider` 19 + - `llm.model` 20 + - `llm.endpoint` 21 + - `llm.api_key` 22 + - `llm.request_timeout` 23 + - `llm.temperature` (optional) 24 + - `llm.reasoning_effort` 25 + - `llm.reasoning_budget_tokens` (optional) 26 + - `llm.tools_emulation_mode` (`off|fallback|force`) 27 + - `llm.azure.deployment` 28 + - `llm.bedrock.aws_key` 29 + - `llm.bedrock.aws_secret` 30 + - `llm.bedrock.region` 31 + - `llm.bedrock.model_arn` 32 + - `llm.cloudflare.account_id` 33 + - `llm.cloudflare.api_token` 34 + - `llm.profiles.<profile>.*` (named profile overrides) 35 + - `llm.routes.main_loop` 36 + - `llm.routes.addressing` 37 + - `llm.routes.heartbeat` 38 + - `llm.routes.plan_create` 39 + - `llm.routes.memory_draft` 40 + 41 + ## Multimodal 42 + 43 + - `multimodal.image.sources` 44 + 45 + ## Logging 46 + 47 + - `logging.level` 48 + - `logging.format` 49 + - `logging.add_source` 50 + - `logging.include_thoughts` 51 + - `logging.include_tool_params` 52 + - `logging.include_skill_contents` 53 + - `logging.max_thought_chars` 54 + - `logging.max_json_bytes` 55 + - `logging.max_string_value_chars` 56 + - `logging.max_skill_content_chars` 57 + - `logging.redact_keys` 58 + 59 + ## Secrets and Auth Profiles 60 + 61 + - `secrets.allow_profiles` 62 + - `auth_profiles.<id>.credential.kind` 63 + - `auth_profiles.<id>.credential.secret` 64 + - `auth_profiles.<id>.allow.url_prefixes` 65 + - `auth_profiles.<id>.allow.methods` 66 + - `auth_profiles.<id>.allow.follow_redirects` 67 + - `auth_profiles.<id>.allow.allow_proxy` 68 + - `auth_profiles.<id>.allow.deny_private_ips` 69 + - `auth_profiles.<id>.bindings.url_fetch.inject.location` 70 + - `auth_profiles.<id>.bindings.url_fetch.inject.name` 71 + - `auth_profiles.<id>.bindings.url_fetch.inject.format` 72 + - `auth_profiles.<id>.bindings.url_fetch.allow_user_headers` 73 + - `auth_profiles.<id>.bindings.url_fetch.user_header_allowlist` 74 + 75 + ## Guard 76 + 77 + - `guard.enabled` 78 + - `guard.dir_name` 79 + - `guard.network.url_fetch.allowed_url_prefixes` 80 + - `guard.network.url_fetch.deny_private_ips` 81 + - `guard.network.url_fetch.follow_redirects` 82 + - `guard.network.url_fetch.allow_proxy` 83 + - `guard.redaction.enabled` 84 + - `guard.redaction.patterns` 85 + - `guard.audit.jsonl_path` 86 + - `guard.audit.rotate_max_bytes` 87 + - `guard.approvals.enabled` 88 + 89 + ## Tools 90 + 91 + - `tools.read_file.max_bytes` 92 + - `tools.read_file.deny_paths` 93 + - `tools.write_file.enabled` 94 + - `tools.write_file.max_bytes` 95 + - `tools.contacts_send.enabled` 96 + - `tools.todo_update.enabled` 97 + - `tools.plan_create.enabled` 98 + - `tools.plan_create.max_steps` 99 + - `tools.url_fetch.enabled` 100 + - `tools.url_fetch.timeout` 101 + - `tools.url_fetch.max_bytes` 102 + - `tools.url_fetch.max_bytes_download` 103 + - `tools.web_search.enabled` 104 + - `tools.web_search.base_url` 105 + - `tools.web_search.timeout` 106 + - `tools.web_search.max_results` 107 + - `tools.bash.enabled` 108 + - `tools.bash.timeout` 109 + - `tools.bash.max_output_bytes` 110 + - `tools.bash.deny_paths` 111 + - `tools.bash.injected_env_vars` 112 + 113 + ## MCP 114 + 115 + - `mcp.servers[].name` 116 + - `mcp.servers[].enable` 117 + - `mcp.servers[].type` (`stdio|http`) 118 + - `mcp.servers[].command` 119 + - `mcp.servers[].args` 120 + - `mcp.servers[].env` 121 + - `mcp.servers[].url` 122 + - `mcp.servers[].headers` 123 + - `mcp.servers[].allowed_tools` 124 + 125 + ## Memory 126 + 127 + - `memory.enabled` 128 + - `memory.dir_name` 129 + - `memory.short_term_days` 130 + - `memory.injection.enabled` 131 + - `memory.injection.max_items` 132 + 133 + ## Bus, Contacts, Tasks, Skills 134 + 135 + - `bus.max_inflight` 136 + - `contacts.dir_name` 137 + - `contacts.proactive.max_turns_per_session` 138 + - `contacts.proactive.session_cooldown` 139 + - `contacts.proactive.failure_cooldown` 140 + - `tasks.dir_name` 141 + - `tasks.persistence_targets` 142 + - `tasks.rotate_max_bytes` 143 + - `tasks.targets.console.heartbeat_topic_id` 144 + - `skills.dir_name` 145 + - `skills.enabled` 146 + - `skills.load` 147 + 148 + ## Server and Console 149 + 150 + - `server.listen` (deprecated) 151 + - `server.auth_token` 152 + - `server.max_queue` 153 + - `console.listen` 154 + - `console.base_path` 155 + - `console.static_dir` 156 + - `console.password` 157 + - `console.password_hash` 158 + - `console.session_ttl` 159 + - `console.managed_runtimes` 160 + - `console.endpoints[].name` 161 + - `console.endpoints[].url` 162 + - `console.endpoints[].auth_token` 163 + 164 + ## Telegram 165 + 166 + - `telegram.bot_token` 167 + - `telegram.allowed_chat_ids` 168 + - `telegram.group_trigger_mode` 169 + - `telegram.addressing_confidence_threshold` 170 + - `telegram.addressing_interject_threshold` 171 + - `telegram.poll_timeout` 172 + - `telegram.task_timeout` 173 + - `telegram.max_concurrency` 174 + - `telegram.serve_listen` 175 + 176 + ## Slack 177 + 178 + - `slack.base_url` 179 + - `slack.bot_token` 180 + - `slack.app_token` 181 + - `slack.allowed_team_ids` 182 + - `slack.allowed_channel_ids` 183 + - `slack.group_trigger_mode` 184 + - `slack.addressing_confidence_threshold` 185 + - `slack.addressing_interject_threshold` 186 + - `slack.task_timeout` 187 + - `slack.max_concurrency` 188 + - `slack.serve_listen` 189 + 190 + ## LINE 191 + 192 + - `line.base_url` 193 + - `line.channel_access_token` 194 + - `line.channel_secret` 195 + - `line.webhook_listen` 196 + - `line.webhook_path` 197 + - `line.allowed_group_ids` 198 + - `line.group_trigger_mode` 199 + - `line.addressing_confidence_threshold` 200 + - `line.addressing_interject_threshold` 201 + - `line.task_timeout` 202 + - `line.max_concurrency` 203 + - `line.serve_listen` 204 + 205 + ## Lark 206 + 207 + - `lark.base_url` 208 + - `lark.app_id` 209 + - `lark.app_secret` 210 + - `lark.webhook_listen` 211 + - `lark.webhook_path` 212 + - `lark.verification_token` 213 + - `lark.encrypt_key` 214 + - `lark.allowed_chat_ids` 215 + - `lark.group_trigger_mode` 216 + - `lark.addressing_confidence_threshold` 217 + - `lark.addressing_interject_threshold` 218 + - `lark.task_timeout` 219 + - `lark.max_concurrency` 220 + - `lark.serve_listen` 221 + 222 + ## Heartbeat 223 + 224 + - `heartbeat.enabled` 225 + - `heartbeat.interval` 226 + 227 + ## Loop Limits and File Storage 228 + 229 + - `max_steps` 230 + - `parse_retries` 231 + - `max_token_budget` 232 + - `tool_repeat_limit` 233 + - `timeout` 234 + - `file_state_dir` 235 + - `file_cache_dir` 236 + - `file_cache.max_age` 237 + - `file_cache.max_files` 238 + - `file_cache.max_total_bytes`
+172
web/vitepress/docs/guide/core-advanced-embedding.md
··· 1 + --- 2 + title: Advanced Core Embedding 3 + description: "Integration runtime capabilities: config, registry, run engine, and channel runners." 4 + --- 5 + 6 + # Advanced Core Embedding 7 + 8 + This page only covers capabilities provided by the `integration` package. 9 + 10 + ## What `integration` Provides 11 + 12 + - `integration.DefaultConfig()` / `integration.Config.Set(...)` 13 + - `integration.New(cfg)` 14 + - `rt.NewRegistry()` 15 + - `rt.NewRunEngine(...)` 16 + - `rt.NewRunEngineWithRegistry(...)` 17 + - `rt.RunTask(...)` 18 + - `rt.RequestTimeout()` 19 + - `rt.NewTelegramBot(...)` 20 + - `rt.NewSlackBot(...)` 21 + 22 + ## Config Layer (Inside `integration.Config`) 23 + 24 + - `Overrides` + `Set(key, value)`: override Viper keys. 25 + - `Features`: toggle built-in runtime wiring (`PlanTool`, `Guard`, `Skills`). 26 + - `BuiltinToolNames`: built-in tool whitelist (empty = all built-ins). 27 + - `Inspect`: prompt/request dump behavior. 28 + 29 + ```go 30 + cfg := integration.DefaultConfig() 31 + cfg.Set("llm.provider", "openai") 32 + cfg.Set("llm.model", "gpt-5.4") 33 + cfg.Set("llm.api_key", os.Getenv("OPENAI_API_KEY")) 34 + cfg.Features.Skills = true 35 + cfg.BuiltinToolNames = []string{"read_file", "url_fetch", "todo_update"} 36 + ``` 37 + 38 + ## Registry and Custom Tools 39 + 40 + `integration` lets you extend runtime registry before engine creation. 41 + 42 + ### Runnable Example (Custom Tool + integration Runtime) 43 + 44 + ```go 45 + package main 46 + 47 + import ( 48 + "context" 49 + "encoding/json" 50 + "fmt" 51 + "os" 52 + "strings" 53 + 54 + "github.com/quailyquaily/mistermorph/agent" 55 + "github.com/quailyquaily/mistermorph/integration" 56 + ) 57 + 58 + type EchoTool struct{} 59 + 60 + func (t *EchoTool) Name() string { return "echo_text" } 61 + 62 + func (t *EchoTool) Description() string { 63 + return "Echoes input text as JSON." 64 + } 65 + 66 + func (t *EchoTool) ParameterSchema() string { 67 + return `{ 68 + "type": "object", 69 + "properties": { 70 + "text": {"type": "string", "description": "Text to echo."} 71 + }, 72 + "required": ["text"] 73 + }` 74 + } 75 + 76 + func (t *EchoTool) Execute(_ context.Context, params map[string]any) (string, error) { 77 + text, _ := params["text"].(string) 78 + text = strings.TrimSpace(text) 79 + if text == "" { 80 + return "", fmt.Errorf("text is required") 81 + } 82 + b, _ := json.Marshal(map[string]any{"text": text}) 83 + return string(b), nil 84 + } 85 + 86 + func main() { 87 + cfg := integration.DefaultConfig() 88 + cfg.Set("llm.provider", "openai") 89 + cfg.Set("llm.model", "gpt-5.4") 90 + cfg.Set("llm.api_key", os.Getenv("OPENAI_API_KEY")) 91 + 92 + rt := integration.New(cfg) 93 + reg := rt.NewRegistry() 94 + reg.Register(&EchoTool{}) 95 + 96 + task := "Call tool echo_text with text 'hello from tool', then answer with that text." 97 + 98 + prepared, err := rt.NewRunEngineWithRegistry(context.Background(), task, reg) 99 + if err != nil { 100 + panic(err) 101 + } 102 + defer prepared.Cleanup() 103 + 104 + final, _, err := prepared.Engine.Run(context.Background(), task, agent.RunOptions{Model: prepared.Model}) 105 + if err != nil { 106 + panic(err) 107 + } 108 + 109 + fmt.Println(final.Output) 110 + } 111 + ``` 112 + 113 + ## Run APIs 114 + 115 + ### Prepared Engine API 116 + 117 + ```go 118 + prepared, err := rt.NewRunEngine(context.Background(), task) 119 + if err != nil { 120 + panic(err) 121 + } 122 + defer prepared.Cleanup() 123 + 124 + final, _, err := prepared.Engine.Run(context.Background(), task, agent.RunOptions{ 125 + Model: prepared.Model, 126 + }) 127 + ``` 128 + 129 + #### Why Use Prepared Engine API 130 + 131 + - Controlled lifecycle: you decide exactly when to call `Cleanup()`. 132 + - Reusability: reuse the same `prepared.Engine` for multiple runs. 133 + - Per-run flexibility: pass different `RunOptions` on each run. 134 + - Better orchestration: direct access to `prepared.Model` and `Engine` for your session/scheduler layer. 135 + 136 + ### Convenience API 137 + 138 + ```go 139 + final, runCtx, err := rt.RunTask(context.Background(), task, agent.RunOptions{}) 140 + _ = final 141 + _ = runCtx 142 + _ = err 143 + ``` 144 + 145 + ## Inspect and Runtime Diagnostics 146 + 147 + ```go 148 + cfg.Inspect.Prompt = true 149 + cfg.Inspect.Request = true 150 + cfg.Inspect.DumpDir = "./dump" 151 + ``` 152 + 153 + ## Telegram Channel Integration (Advanced) 154 + 155 + ```go 156 + tg, _ := rt.NewTelegramBot(integration.TelegramOptions{BotToken: os.Getenv("MISTER_MORPH_TELEGRAM_BOT_TOKEN")}) 157 + _ = tg 158 + ``` 159 + 160 + ## Slack Channel Integration (Optional) 161 + 162 + ```go 163 + sl, _ := rt.NewSlackBot(integration.SlackOptions{ 164 + BotToken: os.Getenv("MISTER_MORPH_SLACK_BOT_TOKEN"), 165 + AppToken: os.Getenv("MISTER_MORPH_SLACK_APP_TOKEN"), 166 + }) 167 + _ = sl 168 + ``` 169 + 170 + ## Out of Scope for This Page 171 + 172 + Low-level engine customization is documented in [Agent-Level Customization](/guide/agent-level-customization).
+50
web/vitepress/docs/guide/docs-map.md
··· 1 + --- 2 + title: Repository Docs Map 3 + description: Where to find deeper design and runtime documents in the repo. 4 + --- 5 + 6 + # Repository Docs Map 7 + 8 + ## This Site Structure 9 + 10 + - Getting Started 11 + - [Overview](/guide/overview) 12 + - [Quickstart (CLI)](/guide/quickstart-cli) 13 + - [Install and Configure](/guide/install-and-config) 14 + - Developer (Embedding) 15 + - [Build an Agent with Core](/guide/build-agent-with-core) 16 + - [Advanced Core Embedding](/guide/core-advanced-embedding) 17 + - [Agent-Level Customization](/guide/agent-level-customization) 18 + - Runtime 19 + - [Runtime Modes](/guide/runtime-modes) 20 + - [Prompt Architecture (Top-Down)](/guide/prompt-architecture) 21 + - [Memory](/guide/memory) 22 + - [Skills](/guide/skills) 23 + - [Built-in Tools](/guide/built-in-tools) 24 + - [MCP](/guide/mcp) 25 + - Operations 26 + - [Security and Guard](/guide/security-and-guard) 27 + - [Config Patterns](/guide/config-patterns) 28 + - [Config Fields Reference](/guide/config-reference) 29 + - [Environment Variables Reference](/guide/env-vars-reference) 30 + 31 + ## Core and Architecture 32 + 33 + - [`docs/arch.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/arch.md) 34 + - [`docs/integration.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/integration.md) 35 + - [`docs/prompt.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/prompt.md) 36 + 37 + ## Runtime and Channels 38 + 39 + - [`docs/console.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/console.md) 40 + - [`docs/slack.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/slack.md) 41 + - [`docs/line.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/line.md) 42 + - [`docs/lark.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/lark.md) 43 + 44 + ## Governance and State 45 + 46 + - [`docs/security.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/security.md) 47 + - [`docs/tools.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/tools.md) 48 + - [`docs/skills.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/skills.md) 49 + - [`docs/memory.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/memory.md) 50 + - [`docs/bus.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/bus.md)
+83
web/vitepress/docs/guide/env-vars-reference.md
··· 1 + --- 2 + title: Environment Variables Reference 3 + description: Complete env var model, mapping rule, and compatibility variables. 4 + --- 5 + 6 + # Environment Variables Reference 7 + 8 + ## Precedence 9 + 10 + Effective precedence is: 11 + 12 + 1. CLI flags 13 + 2. `MISTER_MORPH_*` env vars 14 + 3. `config.yaml` 15 + 4. code defaults 16 + 17 + ## Complete Support Rule 18 + 19 + All config keys are env-overridable through one rule: 20 + 21 + - Prefix with `MISTER_MORPH_` 22 + - Convert to upper case 23 + - Replace `.` and `-` with `_` 24 + 25 + Examples: 26 + 27 + - `llm.api_key` -> `MISTER_MORPH_LLM_API_KEY` 28 + - `tools.bash.enabled` -> `MISTER_MORPH_TOOLS_BASH_ENABLED` 29 + - `mcp.servers` -> `MISTER_MORPH_MCP_SERVERS` 30 + 31 + So all fields listed in [Config Fields Reference](/guide/config-reference) are supported as env vars. 32 + 33 + ## High-Frequency Variables 34 + 35 + - `MISTER_MORPH_CONFIG` 36 + - `MISTER_MORPH_LLM_PROVIDER` 37 + - `MISTER_MORPH_LLM_ENDPOINT` 38 + - `MISTER_MORPH_LLM_MODEL` 39 + - `MISTER_MORPH_LLM_API_KEY` 40 + - `MISTER_MORPH_SERVER_AUTH_TOKEN` 41 + - `MISTER_MORPH_CONSOLE_PASSWORD` 42 + - `MISTER_MORPH_CONSOLE_PASSWORD_HASH` 43 + - `MISTER_MORPH_TELEGRAM_BOT_TOKEN` 44 + - `MISTER_MORPH_SLACK_BOT_TOKEN` 45 + - `MISTER_MORPH_SLACK_APP_TOKEN` 46 + - `MISTER_MORPH_LINE_CHANNEL_ACCESS_TOKEN` 47 + - `MISTER_MORPH_LINE_CHANNEL_SECRET` 48 + - `MISTER_MORPH_LARK_APP_ID` 49 + - `MISTER_MORPH_LARK_APP_SECRET` 50 + - `MISTER_MORPH_FILE_STATE_DIR` 51 + - `MISTER_MORPH_FILE_CACHE_DIR` 52 + 53 + ## `${ENV_VAR}` Expansion Inside Config 54 + 55 + All string values in config support `${ENV_VAR}` expansion. 56 + 57 + ```yaml 58 + llm: 59 + api_key: "${OPENAI_API_KEY}" 60 + mcp: 61 + servers: 62 + - name: remote 63 + headers: 64 + Authorization: "Bearer ${MCP_REMOTE_TOKEN}" 65 + ``` 66 + 67 + Notes: 68 + 69 + - only `${NAME}` form is expanded 70 + - bare `$NAME` is not expanded 71 + - missing vars become empty string with warning 72 + 73 + ## Compatibility / Special Env Vars 74 + 75 + - `TELEGRAM_BOT_TOKEN` 76 + - fallback for `mistermorph telegram send` 77 + - preferred var is still `MISTER_MORPH_TELEGRAM_BOT_TOKEN` 78 + - `NO_COLOR` and `TERM=dumb` 79 + - affect CLI color output behavior only 80 + 81 + ## Practical Pattern 82 + 83 + For secrets, keep config value as `${ENV_VAR}` and set the secret in runtime environment.
+45
web/vitepress/docs/guide/install-and-config.md
··· 1 + --- 2 + title: Install and Configure 3 + description: Installation options and baseline configuration model. 4 + --- 5 + 6 + # Install and Configure 7 + 8 + ## Install Options 9 + 10 + ```bash 11 + # Release installer 12 + curl -fsSL -o /tmp/install-mistermorph.sh https://raw.githubusercontent.com/quailyquaily/mistermorph/refs/heads/master/scripts/install-release.sh 13 + sudo bash /tmp/install-mistermorph.sh 14 + ``` 15 + 16 + ```bash 17 + # Go install 18 + go install github.com/quailyquaily/mistermorph/cmd/mistermorph@latest 19 + ``` 20 + 21 + ## Initialize Files 22 + 23 + ```bash 24 + mistermorph install 25 + ``` 26 + 27 + Default workspace is `~/.morph/`. 28 + 29 + ## Config Sources (precedence) 30 + 31 + - CLI flags 32 + - Environment variables 33 + - `config.yaml` 34 + 35 + ## Minimal `config.yaml` 36 + 37 + ```yaml 38 + llm: 39 + provider: openai 40 + model: gpt-5.4 41 + endpoint: https://api.openai.com 42 + api_key: ${OPENAI_API_KEY} 43 + ``` 44 + 45 + Use `assets/config/config.example.yaml` as the full key reference.
+68
web/vitepress/docs/guide/mcp.md
··· 1 + --- 2 + title: MCP 3 + description: Configure MCP servers and expose remote tools as local agent tools. 4 + --- 5 + 6 + # MCP 7 + 8 + Mister Morph can connect to MCP servers and expose their tools in the same tool-calling loop. 9 + 10 + ## Tool Name Mapping 11 + 12 + MCP tools are registered as: 13 + 14 + - `mcp_<server_name>__<tool_name>` 15 + 16 + Example: 17 + 18 + - `mcp_filesystem__read_file` 19 + 20 + ## Supported Transports 21 + 22 + - `stdio` (default) 23 + - `http` 24 + 25 + ## Config Shape 26 + 27 + ```yaml 28 + mcp: 29 + servers: 30 + - name: filesystem 31 + type: stdio 32 + command: npx 33 + args: ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"] 34 + allowed_tools: [] 35 + 36 + - name: remote 37 + type: http 38 + url: "https://mcp.example.com/mcp" 39 + headers: 40 + Authorization: "Bearer ${MCP_REMOTE_TOKEN}" 41 + allowed_tools: ["search"] 42 + ``` 43 + 44 + Field behavior: 45 + 46 + - `enable: false` disables a server entry 47 + - `allowed_tools: []` means all tools from that server 48 + - invalid server config is skipped with warning 49 + 50 + ## Lifecycle 51 + 52 + 1. Runtime reads `mcp.servers`. 53 + 2. Connect to each enabled/valid server. 54 + 3. List server tools. 55 + 4. Adapt and register tools into local registry. 56 + 5. On shutdown, close MCP sessions. 57 + 58 + ## Failure Model 59 + 60 + - Per-server failures are isolated. 61 + - Other servers and built-in tools keep working. 62 + - If no server connects, runtime still runs without MCP tools. 63 + 64 + ## Security Notes 65 + 66 + - Prefer `allowed_tools` to reduce blast radius. 67 + - Keep auth headers in env vars (`${ENV_VAR}`), not plain text. 68 + - Combine with guard/network policy for outbound controls.
+61
web/vitepress/docs/guide/memory.md
··· 1 + --- 2 + title: Memory 3 + description: WAL-based memory architecture, injection, and writeback behavior. 4 + --- 5 + 6 + # Memory 7 + 8 + Mister Morph memory is append-first and rebuildable. 9 + 10 + ## Architecture 11 + 12 + - Source of truth: `memory/log/*.jsonl` (WAL) 13 + - Read model: markdown projections 14 + - `memory/index.md` (long-term) 15 + - `memory/YYYY-MM-DD/*.md` (short-term) 16 + - Projection runs asynchronously; hot path writes only WAL. 17 + 18 + ## Runtime Flow 19 + 20 + 1. Before LLM call: runtime prepares memory snapshot and injects it into prompt blocks. 21 + 2. After final reply: runtime records raw memory event to WAL. 22 + 3. Projection worker replays WAL and updates markdown files. 23 + 24 + ## Injection Rules 25 + 26 + Memory injection runs only when all conditions match: 27 + 28 + - `memory.enabled = true` 29 + - `memory.injection.enabled = true` 30 + - runtime provides a valid `subject_id` 31 + - snapshot content is not empty 32 + 33 + `memory.injection.max_items` limits injected summary items. 34 + 35 + ## Writeback Rules 36 + 37 + Writeback runs only when: 38 + 39 + - final reply is actually published 40 + - memory orchestrator exists 41 + - `subject_id` exists 42 + 43 + If final output is empty/lightweight, writeback may be skipped. 44 + 45 + ## Config Keys 46 + 47 + ```yaml 48 + memory: 49 + enabled: true 50 + dir_name: "memory" 51 + short_term_days: 7 52 + injection: 53 + enabled: true 54 + max_items: 50 55 + ``` 56 + 57 + ## Operational Notes 58 + 59 + - If markdown projections are damaged, rebuild from WAL. 60 + - Treat `memory/log/*.jsonl` as durable data. 61 + - Keep `file_state_dir` on persistent storage in production.
+27
web/vitepress/docs/guide/overview.md
··· 1 + --- 2 + title: Overview 3 + description: What Mister Morph is, and the fastest path through these docs. 4 + --- 5 + 6 + # Overview 7 + 8 + Mister Morph is a unified agent project with two primary usage patterns: 9 + 10 + - CLI-first workflow (`mistermorph run`, `telegram`, `slack`, `console serve`) 11 + - Embedded Go core (`integration` package) 12 + 13 + ## Choose Your Path 14 + 15 + - Building automation quickly: start with [Quickstart (CLI)](/guide/quickstart-cli) 16 + - Embedding in your Go project: go to [Build an Agent with Core](/guide/build-agent-with-core) 17 + - Running long-lived channels: read [Runtime Modes](/guide/runtime-modes) 18 + - Production hardening: read [Security and Guard](/guide/security-and-guard) 19 + 20 + ## Repository Structure Snapshot 21 + 22 + - CLI entry: `cmd/mistermorph/` 23 + - Agent engine: `agent/` 24 + - Embedding core: `integration/` 25 + - Built-in tools: `tools/` 26 + - Provider backends: `providers/` 27 + - Detailed docs: `docs/`
+119
web/vitepress/docs/guide/prompt-architecture.md
··· 1 + --- 2 + title: Prompt Architecture (Top-Down) 3 + description: How system prompt content is assembled from identity to runtime blocks. 4 + --- 5 + 6 + # Prompt Architecture (Top-Down) 7 + 8 + This is the runtime order used in current code. 9 + 10 + ## Top-Down Flow Diagram 11 + 12 + ```text 13 + PromptSpecWithSkills(...) 14 + | 15 + v 16 + ApplyPersonaIdentity(...) 17 + | 18 + v 19 + AppendLocalToolNotesBlock(...) 20 + | 21 + v 22 + AppendPlanCreateGuidanceBlock(...) 23 + | 24 + v 25 + AppendTodoWorkflowBlock(...) 26 + | 27 + v 28 + Channel PromptAugment(...) 29 + | 30 + v 31 + AppendMemorySummariesBlock(...) 32 + | 33 + v 34 + BuildSystemPrompt(...) -> system prompt text 35 + ``` 36 + 37 + ## 1) Identity Layer 38 + 39 + Base identity comes from `agent.DefaultPromptSpec()`. 40 + 41 + Then runtime may replace it via local persona files: 42 + 43 + - `file_state_dir/IDENTITY.md` 44 + - `file_state_dir/SOUL.md` 45 + 46 + Applied by `promptprofile.ApplyPersonaIdentity(...)`. 47 + 48 + ## 2) Skills Layer 49 + 50 + `skillsutil.PromptSpecWithSkills(...)` discovers selected skills and injects only metadata into the system prompt: 51 + 52 + - skill name 53 + - `SKILL.md` path 54 + - short description 55 + - required `auth_profiles` (if provided) 56 + 57 + The model reads the actual skill file through `read_file` when needed. 58 + 59 + ## 3) Core Policy Blocks 60 + 61 + Common blocks are appended in task runtime order: 62 + 63 + 1. local tool notes (`SCRIPTS.md`) via `AppendLocalToolNotesBlock` 64 + 2. `plan_create` guidance via `AppendPlanCreateGuidanceBlock` 65 + 3. TODO workflow policy via `AppendTodoWorkflowBlock` 66 + 67 + ## 4) Channel Blocks 68 + 69 + Channel runtime then appends channel-specific blocks. 70 + 71 + Examples: 72 + 73 + - Telegram: `AppendTelegramRuntimeBlocks(...)` 74 + - Slack: `AppendSlackRuntimeBlocks(...)` 75 + - LINE: `AppendLineRuntimeBlocks(...)` 76 + - Lark: `AppendLarkRuntimeBlocks(...)` 77 + 78 + ## 5) Memory Injection Block 79 + 80 + If enabled, memory snapshot text is appended as another block through `AppendMemorySummariesBlock(...)`. 81 + 82 + ## 6) System Prompt Rendering 83 + 84 + `agent.BuildSystemPrompt(...)` renders `agent/prompts/system.md` with: 85 + 86 + - identity 87 + - skills metadata 88 + - appended blocks 89 + - tool summary from registry 90 + - rules list 91 + 92 + ## 7) Message Stack Sent to LLM 93 + 94 + In `engine.Run(...)`, message order is: 95 + 96 + ```text 97 + [system] rendered system prompt 98 + -> 99 + [user] mister_morph_meta (optional) 100 + -> 101 + [history] non-system messages 102 + -> 103 + [user] current message or raw task 104 + ``` 105 + 106 + 1. system prompt 107 + 2. injected runtime metadata message (`mister_morph_meta`, if present) 108 + 3. history messages (non-system) 109 + 4. current message (if provided) or raw task text 110 + 111 + ## Practical Rule 112 + 113 + If you need to customize prompt behavior, prefer these extension points in order: 114 + 115 + 1. `IDENTITY.md` / `SOUL.md` 116 + 2. `SKILL.md` + `skills.load` 117 + 3. `SCRIPTS.md` 118 + 4. runtime-specific prompt augment 119 + 5. low-level `agent.WithPromptBuilder(...)` (only for full custom wiring)
+40
web/vitepress/docs/guide/quickstart-cli.md
··· 1 + --- 2 + title: Quickstart (CLI) 3 + description: Get a runnable CLI setup in a few minutes. 4 + --- 5 + 6 + # Quickstart (CLI) 7 + 8 + ## 1. Install 9 + 10 + ```bash 11 + go install github.com/quailyquaily/mistermorph/cmd/mistermorph@latest 12 + ``` 13 + 14 + ## 2. Initialize workspace 15 + 16 + ```bash 17 + mistermorph install 18 + ``` 19 + 20 + ## 3. Set model credentials 21 + 22 + ```bash 23 + export MISTER_MORPH_LLM_PROVIDER="openai" 24 + export MISTER_MORPH_LLM_MODEL="gpt-5.4" 25 + export MISTER_MORPH_LLM_API_KEY="YOUR_API_KEY" 26 + ``` 27 + 28 + ## 4. Run first task 29 + 30 + ```bash 31 + mistermorph run --task "Summarize this repository" 32 + ``` 33 + 34 + ## 5. Useful debug switches 35 + 36 + ```bash 37 + mistermorph run --inspect-prompt --inspect-request --task "hello" 38 + ``` 39 + 40 + For full config keys, see [Config Patterns](/guide/config-patterns) and `assets/config/config.example.yaml`.
+43
web/vitepress/docs/guide/runtime-modes.md
··· 1 + --- 2 + title: Runtime Modes 3 + description: Which runtime to use for CLI, bots, or web console. 4 + --- 5 + 6 + # Runtime Modes 7 + 8 + ## One-shot task 9 + 10 + ```bash 11 + mistermorph run --task "..." 12 + ``` 13 + 14 + ## Telegram bot 15 + 16 + ```bash 17 + mistermorph telegram --log-level info 18 + ``` 19 + 20 + ## Slack bot 21 + 22 + ```bash 23 + mistermorph slack --log-level info 24 + ``` 25 + 26 + ## Console backend 27 + 28 + ```bash 29 + mistermorph console serve 30 + ``` 31 + 32 + ## Legacy daemon (if needed) 33 + 34 + ```bash 35 + mistermorph serve --server-listen 127.0.0.1:8787 36 + ``` 37 + 38 + Detailed setup docs: 39 + 40 + - `docs/console.md` 41 + - `docs/slack.md` 42 + - `docs/line.md` 43 + - `docs/lark.md`
+29
web/vitepress/docs/guide/security-and-guard.md
··· 1 + --- 2 + title: Security and Guard 3 + description: Practical baseline for safe deployment. 4 + --- 5 + 6 + # Security and Guard 7 + 8 + ## Recommended Baseline 9 + 10 + - Keep API keys in env vars, not committed config 11 + - Restrict outbound domains with `guard.network.url_fetch.allowed_url_prefixes` 12 + - Keep redaction enabled (`guard.redaction.enabled: true`) 13 + - Enable approvals for risky actions in long-running modes 14 + 15 + ## Minimal Guard Snippet 16 + 17 + ```yaml 18 + guard: 19 + enabled: true 20 + network: 21 + url_fetch: 22 + allowed_url_prefixes: ["https://"] 23 + deny_private_ips: true 24 + follow_redirects: false 25 + redaction: 26 + enabled: true 27 + ``` 28 + 29 + For production details, read `docs/security.md`.
+63
web/vitepress/docs/guide/skills.md
··· 1 + --- 2 + title: Skills 3 + description: Skill discovery, loading strategy, and runtime behavior. 4 + --- 5 + 6 + # Skills 7 + 8 + Skills are local instruction packs centered on `SKILL.md`. 9 + 10 + ## What a Skill Is 11 + 12 + A skill is prompt context, not a tool. 13 + 14 + - Skills tell the model how to solve a type of task. 15 + - Tools execute actions (`read_file`, `url_fetch`, `bash`, ...). 16 + 17 + ## Discovery 18 + 19 + Default discovery root: 20 + 21 + - `file_state_dir/skills` (usually `~/.morph/skills`) 22 + 23 + Runtime scans for `SKILL.md` recursively. 24 + 25 + ## Loading Controls 26 + 27 + ```yaml 28 + skills: 29 + enabled: true 30 + dir_name: "skills" 31 + load: [] 32 + ``` 33 + 34 + - `enabled: false` => no skill loading 35 + - `load: []` => load all discovered skills 36 + - `load: ["a", "b"]` => load selected skills 37 + - unknown entries are ignored 38 + 39 + Task text can also trigger by `$skill-name` or `$skill-id`. 40 + 41 + ## Runtime Injection Model 42 + 43 + Loaded skill metadata is injected into system prompt: 44 + 45 + - `name` 46 + - `file_path` 47 + - `description` 48 + - `auth_profiles` (optional) 49 + 50 + Actual `SKILL.md` content is loaded only when the model calls `read_file`. 51 + 52 + ## CLI Commands 53 + 54 + ```bash 55 + mistermorph skills list 56 + mistermorph skills install 57 + mistermorph skills install "https://example.com/SKILL.md" 58 + ``` 59 + 60 + ## Safety Notes 61 + 62 + - Remote skill install reviews content before writing. 63 + - Files are downloaded and written only; not executed during install.
+105
web/vitepress/docs/ja/guide/agent-level-customization.md
··· 1 + --- 2 + title: Agent レイヤ拡張 3 + description: integration Runtime API を超える低レベルカスタマイズ。 4 + --- 5 + 6 + # Agent レイヤ拡張 7 + 8 + `integration.Runtime` が公開していない挙動が必要なときに使います。 9 + 10 + ## 最小実行例(Agent 低レベル API) 11 + 12 + この例は `integration.Runtime` を使わず、`agent.New(...)` を直接使います。 13 + 14 + ```go 15 + package main 16 + 17 + import ( 18 + "context" 19 + "fmt" 20 + "os" 21 + 22 + "github.com/quailyquaily/mistermorph/agent" 23 + "github.com/quailyquaily/mistermorph/providers/uniai" 24 + "github.com/quailyquaily/mistermorph/tools" 25 + ) 26 + 27 + func main() { 28 + client := uniai.New(uniai.Config{ 29 + Provider: "openai", 30 + Endpoint: "https://api.openai.com", 31 + APIKey: os.Getenv("OPENAI_API_KEY"), 32 + Model: "gpt-5.4", 33 + }) 34 + 35 + reg := tools.NewRegistry() // 最小例: ツール未登録 36 + 37 + spec := agent.DefaultPromptSpec() 38 + spec.Blocks = append(spec.Blocks, agent.PromptBlock{ 39 + Content: "[[ Runtime Rule ]]\\n短い1段落で回答すること。", 40 + }) 41 + 42 + eng := agent.New(client, reg, agent.Config{ 43 + MaxSteps: 8, 44 + ParseRetries: 2, 45 + ToolRepeatLimit: 3, 46 + }, spec) 47 + 48 + final, _, err := eng.Run(context.Background(), "自己紹介してください", agent.RunOptions{ 49 + Model: "gpt-5.4", 50 + }) 51 + if err != nil { 52 + panic(err) 53 + } 54 + 55 + fmt.Println(final.Output) 56 + } 57 + ``` 58 + 59 + ## 典型ケース 60 + 61 + - タスク単位で動的に prompt block を注入したい 62 + - system prompt 構築を丸ごと差し替えたい 63 + - 追加の LLM リクエストパラメータを入れたい 64 + - ツール成功/失敗後の処理を独自化したい 65 + 66 + ## `PromptSpec` で Prompt Block を注入 67 + 68 + ```go 69 + spec := agent.DefaultPromptSpec() 70 + spec.Blocks = append(spec.Blocks, agent.PromptBlock{ 71 + Content: "[[ Project Policy ]]\n外部 API 呼び出しには trace_id を必ず付与する。", 72 + }) 73 + 74 + engine := agent.New(client, reg, agentCfg, spec) 75 + ``` 76 + 77 + ## `WithPromptBuilder` で Prompt 構築を差し替え 78 + 79 + ```go 80 + engine := agent.New( 81 + client, 82 + reg, 83 + agentCfg, 84 + spec, 85 + agent.WithPromptBuilder(func(reg *tools.Registry, task string) string { 86 + return "完全にカスタムな system prompt" 87 + }), 88 + ) 89 + ``` 90 + 91 + ## その他の低レベル Hook 92 + 93 + - `agent.WithParamsBuilder(...)` 94 + - `agent.WithOnToolSuccess(...)` 95 + - `agent.WithFallbackFinal(...)` 96 + - `agent.WithPlanStepUpdate(...)` 97 + 98 + ## 範囲の切り分け 99 + 100 + - カスタムツール登録: [Core 高度な組み込み](/ja/guide/core-advanced-embedding) 101 + - Telegram チャネル接続: [Core 高度な組み込み](/ja/guide/core-advanced-embedding) 102 + 103 + ## 推奨方針 104 + 105 + 通常は `integration` を優先し、必要時のみこのレイヤへ下りるのが安全です。
+49
web/vitepress/docs/ja/guide/build-agent-with-core.md
··· 1 + --- 2 + title: Core で Agent を素早く構築 3 + description: Go プロジェクトへ Mister Morph integration runtime を組み込む。 4 + --- 5 + 6 + # Core で Agent を素早く構築 7 + 8 + `integration` を組み込み入口として使います。 9 + 10 + ## 最小サンプル 11 + 12 + ```go 13 + package main 14 + 15 + import ( 16 + "context" 17 + "fmt" 18 + 19 + "github.com/quailyquaily/mistermorph/agent" 20 + "github.com/quailyquaily/mistermorph/integration" 21 + ) 22 + 23 + func main() { 24 + cfg := integration.DefaultConfig() 25 + cfg.BuiltinToolNames = []string{"read_file", "url_fetch", "todo_update"} 26 + cfg.Set("llm.provider", "openai") 27 + cfg.Set("llm.model", "gpt-5.4") 28 + cfg.Set("llm.api_key", "YOUR_API_KEY") 29 + 30 + rt := integration.New(cfg) 31 + 32 + task := "README を読んで短く要約" 33 + final, _, err := rt.RunTask(context.Background(), task, agent.RunOptions{}) 34 + if err != nil { 35 + panic(err) 36 + } 37 + 38 + fmt.Println(final.Output) 39 + } 40 + ``` 41 + 42 + ## よく調整する項目 43 + 44 + - `cfg.BuiltinToolNames` 45 + - `cfg.Set("max_steps", N)` 46 + - `cfg.Set("tool_repeat_limit", N)` 47 + - `cfg.Inspect.Prompt`、`cfg.Inspect.Request` 48 + 49 + Prepared 方式(`NewRunEngine*`)は [Core 高度な組み込み](/ja/guide/core-advanced-embedding) にまとめています。
+62
web/vitepress/docs/ja/guide/built-in-tools.md
··· 1 + --- 2 + title: 組み込みツール 3 + description: 静的ツール、ランタイム注入ツール、チャネル専用ツール。 4 + --- 5 + 6 + # 組み込みツール 7 + 8 + ツール登録は「静的登録 + ランタイム注入」の2段階です。 9 + 10 + ## 静的ツール(設定駆動) 11 + 12 + runtime 文脈なしで作られるツール: 13 + 14 + - `read_file` 15 + - `write_file` 16 + - `bash` 17 + - `url_fetch` 18 + - `web_search` 19 + - `contacts_send` 20 + 21 + ## ランタイムツール(LLM 文脈依存) 22 + 23 + runtime で注入されるツール: 24 + 25 + - `plan_create` 26 + - `todo_update` 27 + 28 + ## チャネル専用ツール 29 + 30 + - Telegram では次が追加される場合があります: 31 + - `telegram_send_voice` 32 + - `telegram_send_photo` 33 + - `telegram_send_file` 34 + - `message_react` 35 + - Slack では次が追加される場合があります: 36 + - `message_react` 37 + 38 + ## Core 組み込み時のホワイトリスト 39 + 40 + `integration.Config.BuiltinToolNames` で組み込みツールを制限できます。 41 + 42 + ```go 43 + cfg.BuiltinToolNames = []string{"read_file", "url_fetch", "todo_update"} 44 + ``` 45 + 46 + 空配列は全組み込みツールを意味します。 47 + 48 + ## 設定セクション 49 + 50 + ```yaml 51 + tools: 52 + read_file: ... 53 + write_file: ... 54 + bash: ... 55 + url_fetch: ... 56 + web_search: ... 57 + contacts_send: ... 58 + todo_update: ... 59 + plan_create: ... 60 + ``` 61 + 62 + パラメータ詳細は `docs/tools.md` を参照してください。
+40
web/vitepress/docs/ja/guide/config-patterns.md
··· 1 + --- 2 + title: 設定パターン 3 + description: profiles、routes、ツールポリシーの代表例。 4 + --- 5 + 6 + # 設定パターン 7 + 8 + ## LLM Profiles と Routes 9 + 10 + ```yaml 11 + llm: 12 + model: gpt-5.4 13 + profiles: 14 + cheap: 15 + model: gpt-4.1-mini 16 + routes: 17 + main_loop: default 18 + addressing: cheap 19 + heartbeat: cheap 20 + ``` 21 + 22 + ## ツールの有効/無効 23 + 24 + ```yaml 25 + tools: 26 + bash: 27 + enabled: false 28 + url_fetch: 29 + enabled: true 30 + timeout: "30s" 31 + ``` 32 + 33 + ## 実行上限 34 + 35 + ```yaml 36 + max_steps: 20 37 + tool_repeat_limit: 4 38 + ``` 39 + 40 + キーの完全一覧は `assets/config/config.example.yaml` を参照。
+238
web/vitepress/docs/ja/guide/config-reference.md
··· 1 + --- 2 + title: 設定フィールド一覧 3 + description: config.yaml の完全フィールドマップ。 4 + --- 5 + 6 + # 設定フィールド一覧 7 + 8 + 基準ファイル: `assets/config/config.example.yaml`。 9 + 10 + すべてのキーは env で上書きできます(`MISTER_MORPH_...`)。詳細は[環境変数一覧](/ja/guide/env-vars-reference)。 11 + 12 + ## グローバル 13 + 14 + - `user_agent` 15 + 16 + ## LLM 17 + 18 + - `llm.provider` 19 + - `llm.model` 20 + - `llm.endpoint` 21 + - `llm.api_key` 22 + - `llm.request_timeout` 23 + - `llm.temperature`(任意) 24 + - `llm.reasoning_effort` 25 + - `llm.reasoning_budget_tokens`(任意) 26 + - `llm.tools_emulation_mode`(`off|fallback|force`) 27 + - `llm.azure.deployment` 28 + - `llm.bedrock.aws_key` 29 + - `llm.bedrock.aws_secret` 30 + - `llm.bedrock.region` 31 + - `llm.bedrock.model_arn` 32 + - `llm.cloudflare.account_id` 33 + - `llm.cloudflare.api_token` 34 + - `llm.profiles.<profile>.*` 35 + - `llm.routes.main_loop` 36 + - `llm.routes.addressing` 37 + - `llm.routes.heartbeat` 38 + - `llm.routes.plan_create` 39 + - `llm.routes.memory_draft` 40 + 41 + ## Multimodal 42 + 43 + - `multimodal.image.sources` 44 + 45 + ## Logging 46 + 47 + - `logging.level` 48 + - `logging.format` 49 + - `logging.add_source` 50 + - `logging.include_thoughts` 51 + - `logging.include_tool_params` 52 + - `logging.include_skill_contents` 53 + - `logging.max_thought_chars` 54 + - `logging.max_json_bytes` 55 + - `logging.max_string_value_chars` 56 + - `logging.max_skill_content_chars` 57 + - `logging.redact_keys` 58 + 59 + ## Secrets / Auth Profiles 60 + 61 + - `secrets.allow_profiles` 62 + - `auth_profiles.<id>.credential.kind` 63 + - `auth_profiles.<id>.credential.secret` 64 + - `auth_profiles.<id>.allow.url_prefixes` 65 + - `auth_profiles.<id>.allow.methods` 66 + - `auth_profiles.<id>.allow.follow_redirects` 67 + - `auth_profiles.<id>.allow.allow_proxy` 68 + - `auth_profiles.<id>.allow.deny_private_ips` 69 + - `auth_profiles.<id>.bindings.url_fetch.inject.location` 70 + - `auth_profiles.<id>.bindings.url_fetch.inject.name` 71 + - `auth_profiles.<id>.bindings.url_fetch.inject.format` 72 + - `auth_profiles.<id>.bindings.url_fetch.allow_user_headers` 73 + - `auth_profiles.<id>.bindings.url_fetch.user_header_allowlist` 74 + 75 + ## Guard 76 + 77 + - `guard.enabled` 78 + - `guard.dir_name` 79 + - `guard.network.url_fetch.allowed_url_prefixes` 80 + - `guard.network.url_fetch.deny_private_ips` 81 + - `guard.network.url_fetch.follow_redirects` 82 + - `guard.network.url_fetch.allow_proxy` 83 + - `guard.redaction.enabled` 84 + - `guard.redaction.patterns` 85 + - `guard.audit.jsonl_path` 86 + - `guard.audit.rotate_max_bytes` 87 + - `guard.approvals.enabled` 88 + 89 + ## Tools 90 + 91 + - `tools.read_file.max_bytes` 92 + - `tools.read_file.deny_paths` 93 + - `tools.write_file.enabled` 94 + - `tools.write_file.max_bytes` 95 + - `tools.contacts_send.enabled` 96 + - `tools.todo_update.enabled` 97 + - `tools.plan_create.enabled` 98 + - `tools.plan_create.max_steps` 99 + - `tools.url_fetch.enabled` 100 + - `tools.url_fetch.timeout` 101 + - `tools.url_fetch.max_bytes` 102 + - `tools.url_fetch.max_bytes_download` 103 + - `tools.web_search.enabled` 104 + - `tools.web_search.base_url` 105 + - `tools.web_search.timeout` 106 + - `tools.web_search.max_results` 107 + - `tools.bash.enabled` 108 + - `tools.bash.timeout` 109 + - `tools.bash.max_output_bytes` 110 + - `tools.bash.deny_paths` 111 + - `tools.bash.injected_env_vars` 112 + 113 + ## MCP 114 + 115 + - `mcp.servers[].name` 116 + - `mcp.servers[].enable` 117 + - `mcp.servers[].type`(`stdio|http`) 118 + - `mcp.servers[].command` 119 + - `mcp.servers[].args` 120 + - `mcp.servers[].env` 121 + - `mcp.servers[].url` 122 + - `mcp.servers[].headers` 123 + - `mcp.servers[].allowed_tools` 124 + 125 + ## Memory 126 + 127 + - `memory.enabled` 128 + - `memory.dir_name` 129 + - `memory.short_term_days` 130 + - `memory.injection.enabled` 131 + - `memory.injection.max_items` 132 + 133 + ## Bus / Contacts / Tasks / Skills 134 + 135 + - `bus.max_inflight` 136 + - `contacts.dir_name` 137 + - `contacts.proactive.max_turns_per_session` 138 + - `contacts.proactive.session_cooldown` 139 + - `contacts.proactive.failure_cooldown` 140 + - `tasks.dir_name` 141 + - `tasks.persistence_targets` 142 + - `tasks.rotate_max_bytes` 143 + - `tasks.targets.console.heartbeat_topic_id` 144 + - `skills.dir_name` 145 + - `skills.enabled` 146 + - `skills.load` 147 + 148 + ## Server / Console 149 + 150 + - `server.listen`(非推奨) 151 + - `server.auth_token` 152 + - `server.max_queue` 153 + - `console.listen` 154 + - `console.base_path` 155 + - `console.static_dir` 156 + - `console.password` 157 + - `console.password_hash` 158 + - `console.session_ttl` 159 + - `console.managed_runtimes` 160 + - `console.endpoints[].name` 161 + - `console.endpoints[].url` 162 + - `console.endpoints[].auth_token` 163 + 164 + ## Telegram 165 + 166 + - `telegram.bot_token` 167 + - `telegram.allowed_chat_ids` 168 + - `telegram.group_trigger_mode` 169 + - `telegram.addressing_confidence_threshold` 170 + - `telegram.addressing_interject_threshold` 171 + - `telegram.poll_timeout` 172 + - `telegram.task_timeout` 173 + - `telegram.max_concurrency` 174 + - `telegram.serve_listen` 175 + 176 + ## Slack 177 + 178 + - `slack.base_url` 179 + - `slack.bot_token` 180 + - `slack.app_token` 181 + - `slack.allowed_team_ids` 182 + - `slack.allowed_channel_ids` 183 + - `slack.group_trigger_mode` 184 + - `slack.addressing_confidence_threshold` 185 + - `slack.addressing_interject_threshold` 186 + - `slack.task_timeout` 187 + - `slack.max_concurrency` 188 + - `slack.serve_listen` 189 + 190 + ## LINE 191 + 192 + - `line.base_url` 193 + - `line.channel_access_token` 194 + - `line.channel_secret` 195 + - `line.webhook_listen` 196 + - `line.webhook_path` 197 + - `line.allowed_group_ids` 198 + - `line.group_trigger_mode` 199 + - `line.addressing_confidence_threshold` 200 + - `line.addressing_interject_threshold` 201 + - `line.task_timeout` 202 + - `line.max_concurrency` 203 + - `line.serve_listen` 204 + 205 + ## Lark 206 + 207 + - `lark.base_url` 208 + - `lark.app_id` 209 + - `lark.app_secret` 210 + - `lark.webhook_listen` 211 + - `lark.webhook_path` 212 + - `lark.verification_token` 213 + - `lark.encrypt_key` 214 + - `lark.allowed_chat_ids` 215 + - `lark.group_trigger_mode` 216 + - `lark.addressing_confidence_threshold` 217 + - `lark.addressing_interject_threshold` 218 + - `lark.task_timeout` 219 + - `lark.max_concurrency` 220 + - `lark.serve_listen` 221 + 222 + ## Heartbeat 223 + 224 + - `heartbeat.enabled` 225 + - `heartbeat.interval` 226 + 227 + ## ループ制限とファイル保存 228 + 229 + - `max_steps` 230 + - `parse_retries` 231 + - `max_token_budget` 232 + - `tool_repeat_limit` 233 + - `timeout` 234 + - `file_state_dir` 235 + - `file_cache_dir` 236 + - `file_cache.max_age` 237 + - `file_cache.max_files` 238 + - `file_cache.max_total_bytes`
+172
web/vitepress/docs/ja/guide/core-advanced-embedding.md
··· 1 + --- 2 + title: Core 高度な組み込み 3 + description: integration パッケージの提供範囲のみを扱う(設定、レジストリ、実行、チャネルランナー)。 4 + --- 5 + 6 + # Core 高度な組み込み 7 + 8 + このページは `integration` パッケージが直接提供する機能のみを扱います。 9 + 10 + ## `integration` が提供する機能 11 + 12 + - `integration.DefaultConfig()` / `integration.Config.Set(...)` 13 + - `integration.New(cfg)` 14 + - `rt.NewRegistry()` 15 + - `rt.NewRunEngine(...)` 16 + - `rt.NewRunEngineWithRegistry(...)` 17 + - `rt.RunTask(...)` 18 + - `rt.RequestTimeout()` 19 + - `rt.NewTelegramBot(...)` 20 + - `rt.NewSlackBot(...)` 21 + 22 + ## 設定レイヤ(`integration.Config`) 23 + 24 + - `Overrides` + `Set(key, value)`: Viper キーを上書き。 25 + - `Features`: ランタイム機能注入の切り替え(`PlanTool` / `Guard` / `Skills`)。 26 + - `BuiltinToolNames`: 組み込みツールのホワイトリスト(空で全有効)。 27 + - `Inspect`: Prompt/Request のダンプ制御。 28 + 29 + ```go 30 + cfg := integration.DefaultConfig() 31 + cfg.Set("llm.provider", "openai") 32 + cfg.Set("llm.model", "gpt-5.4") 33 + cfg.Set("llm.api_key", os.Getenv("OPENAI_API_KEY")) 34 + cfg.Features.Skills = true 35 + cfg.BuiltinToolNames = []string{"read_file", "url_fetch", "todo_update"} 36 + ``` 37 + 38 + ## レジストリとカスタムツール 39 + 40 + エンジン作成前にツールレジストリを拡張できます。 41 + 42 + ### 実行可能な例(カスタムツール + integration) 43 + 44 + ```go 45 + package main 46 + 47 + import ( 48 + "context" 49 + "encoding/json" 50 + "fmt" 51 + "os" 52 + "strings" 53 + 54 + "github.com/quailyquaily/mistermorph/agent" 55 + "github.com/quailyquaily/mistermorph/integration" 56 + ) 57 + 58 + type EchoTool struct{} 59 + 60 + func (t *EchoTool) Name() string { return "echo_text" } 61 + 62 + func (t *EchoTool) Description() string { 63 + return "Echoes input text as JSON." 64 + } 65 + 66 + func (t *EchoTool) ParameterSchema() string { 67 + return `{ 68 + "type": "object", 69 + "properties": { 70 + "text": {"type": "string", "description": "Text to echo."} 71 + }, 72 + "required": ["text"] 73 + }` 74 + } 75 + 76 + func (t *EchoTool) Execute(_ context.Context, params map[string]any) (string, error) { 77 + text, _ := params["text"].(string) 78 + text = strings.TrimSpace(text) 79 + if text == "" { 80 + return "", fmt.Errorf("text is required") 81 + } 82 + b, _ := json.Marshal(map[string]any{"text": text}) 83 + return string(b), nil 84 + } 85 + 86 + func main() { 87 + cfg := integration.DefaultConfig() 88 + cfg.Set("llm.provider", "openai") 89 + cfg.Set("llm.model", "gpt-5.4") 90 + cfg.Set("llm.api_key", os.Getenv("OPENAI_API_KEY")) 91 + 92 + rt := integration.New(cfg) 93 + reg := rt.NewRegistry() 94 + reg.Register(&EchoTool{}) 95 + 96 + task := "Call tool echo_text with text 'hello from tool', then answer with that text." 97 + 98 + prepared, err := rt.NewRunEngineWithRegistry(context.Background(), task, reg) 99 + if err != nil { 100 + panic(err) 101 + } 102 + defer prepared.Cleanup() 103 + 104 + final, _, err := prepared.Engine.Run(context.Background(), task, agent.RunOptions{Model: prepared.Model}) 105 + if err != nil { 106 + panic(err) 107 + } 108 + 109 + fmt.Println(final.Output) 110 + } 111 + ``` 112 + 113 + ## 実行 API 114 + 115 + ### Prepared Engine API 116 + 117 + ```go 118 + prepared, err := rt.NewRunEngine(context.Background(), task) 119 + if err != nil { 120 + panic(err) 121 + } 122 + defer prepared.Cleanup() 123 + 124 + final, _, err := prepared.Engine.Run(context.Background(), task, agent.RunOptions{ 125 + Model: prepared.Model, 126 + }) 127 + ``` 128 + 129 + #### Prepared Engine API を選ぶ理由 130 + 131 + - ライフサイクル制御: `Cleanup()` のタイミングを明示的に管理できる。 132 + - 再利用性: 同じ `prepared.Engine` を複数回 `Run(...)` できる。 133 + - 実行ごとの柔軟性: 各 `Run` で異なる `RunOptions` を渡せる。 134 + - 編成しやすさ: `prepared.Model` と `Engine` を直接扱えるため、上位のセッション層に統合しやすい。 135 + 136 + ### 省略 API 137 + 138 + ```go 139 + final, runCtx, err := rt.RunTask(context.Background(), task, agent.RunOptions{}) 140 + _ = final 141 + _ = runCtx 142 + _ = err 143 + ``` 144 + 145 + ## デバッグと診断 146 + 147 + ```go 148 + cfg.Inspect.Prompt = true 149 + cfg.Inspect.Request = true 150 + cfg.Inspect.DumpDir = "./dump" 151 + ``` 152 + 153 + ## Telegram チャネル接続(上級) 154 + 155 + ```go 156 + tg, _ := rt.NewTelegramBot(integration.TelegramOptions{BotToken: os.Getenv("MISTER_MORPH_TELEGRAM_BOT_TOKEN")}) 157 + _ = tg 158 + ``` 159 + 160 + ## Slack チャネル接続(任意) 161 + 162 + ```go 163 + sl, _ := rt.NewSlackBot(integration.SlackOptions{ 164 + BotToken: os.Getenv("MISTER_MORPH_SLACK_BOT_TOKEN"), 165 + AppToken: os.Getenv("MISTER_MORPH_SLACK_APP_TOKEN"), 166 + }) 167 + _ = sl 168 + ``` 169 + 170 + ## このページの範囲外 171 + 172 + より低レベルな内容は [Agent レイヤ拡張](/ja/guide/agent-level-customization) を参照してください。
+50
web/vitepress/docs/ja/guide/docs-map.md
··· 1 + --- 2 + title: リポジトリ文書マップ 3 + description: より詳細な設計・実装文書への入口。 4 + --- 5 + 6 + # リポジトリ文書マップ 7 + 8 + ## サイト内ドキュメント構成 9 + 10 + - はじめに 11 + - [概要](/ja/guide/overview) 12 + - [クイックスタート(CLI)](/ja/guide/quickstart-cli) 13 + - [インストールと設定](/ja/guide/install-and-config) 14 + - 開発者(組み込み) 15 + - [Core で Agent を素早く構築](/ja/guide/build-agent-with-core) 16 + - [Core 高度な組み込み](/ja/guide/core-advanced-embedding) 17 + - [Agent レイヤ拡張](/ja/guide/agent-level-customization) 18 + - Runtime 19 + - [Runtime モード](/ja/guide/runtime-modes) 20 + - [Prompt 設計(トップダウン)](/ja/guide/prompt-architecture) 21 + - [Memory](/ja/guide/memory) 22 + - [Skills](/ja/guide/skills) 23 + - [組み込みツール](/ja/guide/built-in-tools) 24 + - [MCP](/ja/guide/mcp) 25 + - 運用 26 + - [セキュリティと Guard](/ja/guide/security-and-guard) 27 + - [設定パターン](/ja/guide/config-patterns) 28 + - [設定フィールド一覧](/ja/guide/config-reference) 29 + - [環境変数一覧](/ja/guide/env-vars-reference) 30 + 31 + ## Core と設計 32 + 33 + - [`docs/arch.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/arch.md) 34 + - [`docs/integration.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/integration.md) 35 + - [`docs/prompt.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/prompt.md) 36 + 37 + ## Runtime とチャネル 38 + 39 + - [`docs/console.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/console.md) 40 + - [`docs/slack.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/slack.md) 41 + - [`docs/line.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/line.md) 42 + - [`docs/lark.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/lark.md) 43 + 44 + ## 運用・状態管理 45 + 46 + - [`docs/security.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/security.md) 47 + - [`docs/tools.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/tools.md) 48 + - [`docs/skills.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/skills.md) 49 + - [`docs/memory.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/memory.md) 50 + - [`docs/bus.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/bus.md)
+83
web/vitepress/docs/ja/guide/env-vars-reference.md
··· 1 + --- 2 + title: 環境変数一覧 3 + description: 完全な環境変数モデル、マッピング規則、互換変数。 4 + --- 5 + 6 + # 環境変数一覧 7 + 8 + ## 優先順位 9 + 10 + 適用順序: 11 + 12 + 1. CLI フラグ 13 + 2. `MISTER_MORPH_*` 環境変数 14 + 3. `config.yaml` 15 + 4. コードデフォルト 16 + 17 + ## 完全対応ルール 18 + 19 + すべての設定キーは次の規則で env 上書きできます。 20 + 21 + - 接頭辞: `MISTER_MORPH_` 22 + - 大文字化 23 + - `.` と `-` を `_` に変換 24 + 25 + 例: 26 + 27 + - `llm.api_key` -> `MISTER_MORPH_LLM_API_KEY` 28 + - `tools.bash.enabled` -> `MISTER_MORPH_TOOLS_BASH_ENABLED` 29 + - `mcp.servers` -> `MISTER_MORPH_MCP_SERVERS` 30 + 31 + つまり、[設定フィールド一覧](/ja/guide/config-reference)の全キーが env 対応です。 32 + 33 + ## 利用頻度の高い変数 34 + 35 + - `MISTER_MORPH_CONFIG` 36 + - `MISTER_MORPH_LLM_PROVIDER` 37 + - `MISTER_MORPH_LLM_ENDPOINT` 38 + - `MISTER_MORPH_LLM_MODEL` 39 + - `MISTER_MORPH_LLM_API_KEY` 40 + - `MISTER_MORPH_SERVER_AUTH_TOKEN` 41 + - `MISTER_MORPH_CONSOLE_PASSWORD` 42 + - `MISTER_MORPH_CONSOLE_PASSWORD_HASH` 43 + - `MISTER_MORPH_TELEGRAM_BOT_TOKEN` 44 + - `MISTER_MORPH_SLACK_BOT_TOKEN` 45 + - `MISTER_MORPH_SLACK_APP_TOKEN` 46 + - `MISTER_MORPH_LINE_CHANNEL_ACCESS_TOKEN` 47 + - `MISTER_MORPH_LINE_CHANNEL_SECRET` 48 + - `MISTER_MORPH_LARK_APP_ID` 49 + - `MISTER_MORPH_LARK_APP_SECRET` 50 + - `MISTER_MORPH_FILE_STATE_DIR` 51 + - `MISTER_MORPH_FILE_CACHE_DIR` 52 + 53 + ## config 内の `${ENV_VAR}` 展開 54 + 55 + config の全 string 値で `${ENV_VAR}` 展開が使えます。 56 + 57 + ```yaml 58 + llm: 59 + api_key: "${OPENAI_API_KEY}" 60 + mcp: 61 + servers: 62 + - name: remote 63 + headers: 64 + Authorization: "Bearer ${MCP_REMOTE_TOKEN}" 65 + ``` 66 + 67 + 注意: 68 + 69 + - `${NAME}` 形式のみ展開 70 + - 裸の `$NAME` は展開しない 71 + - 未設定変数は空文字に置換され warning が出る 72 + 73 + ## 互換 / 特殊環境変数 74 + 75 + - `TELEGRAM_BOT_TOKEN` 76 + - `mistermorph telegram send` のみの互換フォールバック 77 + - 推奨は `MISTER_MORPH_TELEGRAM_BOT_TOKEN` 78 + - `NO_COLOR`、`TERM=dumb` 79 + - CLI の色表示挙動のみ変更 80 + 81 + ## 実務パターン 82 + 83 + 機密値は `${ENV_VAR}` を使い、実値は実行環境から注入する運用を推奨します。
+45
web/vitepress/docs/ja/guide/install-and-config.md
··· 1 + --- 2 + title: インストールと設定 3 + description: 導入方法と基本設定モデル。 4 + --- 5 + 6 + # インストールと設定 7 + 8 + ## インストール方法 9 + 10 + ```bash 11 + # リリース版インストーラ 12 + curl -fsSL -o /tmp/install-mistermorph.sh https://raw.githubusercontent.com/quailyquaily/mistermorph/refs/heads/master/scripts/install-release.sh 13 + sudo bash /tmp/install-mistermorph.sh 14 + ``` 15 + 16 + ```bash 17 + # Go からインストール 18 + go install github.com/quailyquaily/mistermorph/cmd/mistermorph@latest 19 + ``` 20 + 21 + ## 初期ファイル作成 22 + 23 + ```bash 24 + mistermorph install 25 + ``` 26 + 27 + 標準ワークスペースは `~/.morph/` です。 28 + 29 + ## 設定の優先順位 30 + 31 + - CLI フラグ 32 + - 環境変数 33 + - `config.yaml` 34 + 35 + ## 最小 `config.yaml` 36 + 37 + ```yaml 38 + llm: 39 + provider: openai 40 + model: gpt-5.4 41 + endpoint: https://api.openai.com 42 + api_key: ${OPENAI_API_KEY} 43 + ``` 44 + 45 + 全キーは `assets/config/config.example.yaml` を基準にしてください。
+65
web/vitepress/docs/ja/guide/mcp.md
··· 1 + --- 2 + title: MCP 3 + description: MCP サーバー設定と、リモートツールのローカル統合。 4 + --- 5 + 6 + # MCP 7 + 8 + Mister Morph は MCP サーバーへ接続し、リモートツールを同じ tool-calling ループに統合できます。 9 + 10 + ## ツール名マッピング 11 + 12 + MCP ツールは次の名前で登録されます。 13 + 14 + - `mcp_<server_name>__<tool_name>` 15 + 16 + 例: `mcp_filesystem__read_file` 17 + 18 + ## 対応トランスポート 19 + 20 + - `stdio`(デフォルト) 21 + - `http` 22 + 23 + ## 設定形式 24 + 25 + ```yaml 26 + mcp: 27 + servers: 28 + - name: filesystem 29 + type: stdio 30 + command: npx 31 + args: ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"] 32 + allowed_tools: [] 33 + 34 + - name: remote 35 + type: http 36 + url: "https://mcp.example.com/mcp" 37 + headers: 38 + Authorization: "Bearer ${MCP_REMOTE_TOKEN}" 39 + allowed_tools: ["search"] 40 + ``` 41 + 42 + フィールド挙動: 43 + 44 + - `enable: false` でそのサーバーを無効化 45 + - `allowed_tools: []` はそのサーバーの全ツールを許可 46 + - 不正な設定は warning を出してスキップ 47 + 48 + ## ライフサイクル 49 + 50 + 1. `mcp.servers` を読む 51 + 2. 有効かつ正しいサーバーへ接続 52 + 3. ツール一覧を取得 53 + 4. ローカル registry へアダプト登録 54 + 5. 終了時に MCP session を close 55 + 56 + ## 障害モデル 57 + 58 + - サーバー単位で分離(1台失敗しても他は継続) 59 + - MCP が0件でも通常ツールで runtime は動作 60 + 61 + ## セキュリティ 62 + 63 + - `allowed_tools` で最小権限化 64 + - 認証ヘッダーは `${ENV_VAR}` で管理 65 + - guard/network 制御と併用する
+60
web/vitepress/docs/ja/guide/memory.md
··· 1 + --- 2 + title: Memory 3 + description: WAL ベースの memory アーキテクチャ、注入、書き戻しルール。 4 + --- 5 + 6 + # Memory 7 + 8 + Mister Morph の memory は「WAL 先行書き込み + 非同期投影」です。 9 + 10 + ## アーキテクチャ 11 + 12 + - 真のデータ源: `memory/log/*.jsonl`(WAL) 13 + - 読み取りモデル: 14 + - `memory/index.md`(長期) 15 + - `memory/YYYY-MM-DD/*.md`(短期) 16 + - ホットパスは WAL のみ書き込み。Markdown 更新は非同期。 17 + 18 + ## 実行フロー 19 + 20 + 1. LLM 呼び出し前に snapshot を作成し prompt block へ注入 21 + 2. 最終返信後に raw memory event を WAL へ追記 22 + 3. projection worker が WAL を再生して markdown を更新 23 + 24 + ## 注入条件 25 + 26 + すべて満たすときのみ注入: 27 + 28 + - `memory.enabled = true` 29 + - `memory.injection.enabled = true` 30 + - 有効な `subject_id` がある 31 + - snapshot が空でない 32 + 33 + `memory.injection.max_items` で注入件数を制限します。 34 + 35 + ## 書き戻し条件 36 + 37 + すべて満たすときのみ書き戻し: 38 + 39 + - 最終返信が実際に publish される 40 + - memory orchestrator が存在 41 + - `subject_id` が存在 42 + 43 + 軽量返信や空出力では書き戻しをスキップします。 44 + 45 + ## 主要設定 46 + 47 + ```yaml 48 + memory: 49 + enabled: true 50 + dir_name: "memory" 51 + short_term_days: 7 52 + injection: 53 + enabled: true 54 + max_items: 50 55 + ``` 56 + 57 + ## 運用メモ 58 + 59 + - 投影 markdown が壊れても WAL から再構築可能 60 + - 本番では `file_state_dir` を永続ストレージに置く
+27
web/vitepress/docs/ja/guide/overview.md
··· 1 + --- 2 + title: 概要 3 + description: Mister Morph の全体像と推奨読書順。 4 + --- 5 + 6 + # 概要 7 + 8 + Mister Morph には主に 2 つの使い方があります。 9 + 10 + - CLI ワークフロー(`mistermorph run`、`telegram`、`slack`、`console serve`) 11 + - Go への組み込み(`integration` パッケージ) 12 + 13 + ## 目的別の読み方 14 + 15 + - まず動かす: [クイックスタート(CLI)](/ja/guide/quickstart-cli) 16 + - Go に組み込む: [Core で Agent を素早く構築](/ja/guide/build-agent-with-core) 17 + - 常駐実行を理解: [Runtime モード](/ja/guide/runtime-modes) 18 + - 本番運用の安全化: [セキュリティと Guard](/ja/guide/security-and-guard) 19 + 20 + ## リポジトリ構成(要点) 21 + 22 + - CLI エントリ: `cmd/mistermorph/` 23 + - Agent エンジン: `agent/` 24 + - 組み込み Core: `integration/` 25 + - 組み込みツール: `tools/` 26 + - Provider 実装: `providers/` 27 + - 詳細文書: `docs/`
+117
web/vitepress/docs/ja/guide/prompt-architecture.md
··· 1 + --- 2 + title: Prompt 設計(トップダウン) 3 + description: Identity 層から Runtime 層まで、システム Prompt の組み立て順を説明。 4 + --- 5 + 6 + # Prompt 設計(トップダウン) 7 + 8 + 以下は現行コードの実際の順序です。 9 + 10 + ## トップダウン図 11 + 12 + ```text 13 + PromptSpecWithSkills(...) 14 + | 15 + v 16 + ApplyPersonaIdentity(...) 17 + | 18 + v 19 + AppendLocalToolNotesBlock(...) 20 + | 21 + v 22 + AppendPlanCreateGuidanceBlock(...) 23 + | 24 + v 25 + AppendTodoWorkflowBlock(...) 26 + | 27 + v 28 + Channel PromptAugment(...) 29 + | 30 + v 31 + AppendMemorySummariesBlock(...) 32 + | 33 + v 34 + BuildSystemPrompt(...) -> system prompt テキスト 35 + ``` 36 + 37 + ## 1) Identity 層 38 + 39 + ベースは `agent.DefaultPromptSpec()`。 40 + 41 + 次にローカル persona ファイルで上書きされる場合があります。 42 + 43 + - `file_state_dir/IDENTITY.md` 44 + - `file_state_dir/SOUL.md` 45 + 46 + 適用関数は `promptprofile.ApplyPersonaIdentity(...)`。 47 + 48 + ## 2) Skills 層 49 + 50 + `skillsutil.PromptSpecWithSkills(...)` は skill のメタ情報だけを注入します。 51 + 52 + - 名前 53 + - `SKILL.md` パス 54 + - 説明 55 + - `auth_profiles`(ある場合) 56 + 57 + 実際の `SKILL.md` 本文は必要時に `read_file` で読みます。 58 + 59 + ## 3) Core ポリシーブロック 60 + 61 + task runtime では次の順で追加されます。 62 + 63 + 1. `SCRIPTS.md` のローカルツールノート 64 + 2. `plan_create` ガイダンス 65 + 3. TODO ワークフローポリシー 66 + 67 + ## 4) チャネルブロック 68 + 69 + 次にチャネルごとのブロックを追加します。 70 + 71 + - Telegram 72 + - Slack 73 + - LINE 74 + - Lark 75 + 76 + ## 5) Memory 注入ブロック 77 + 78 + memory が有効な場合、memory summary ブロックを追加します。 79 + 80 + ## 6) システム Prompt のレンダリング 81 + 82 + `agent.BuildSystemPrompt(...)` が `agent/prompts/system.md` を使って以下を統合します。 83 + 84 + - identity 85 + - skills メタ情報 86 + - 追加ブロック 87 + - ツール要約 88 + - 追加ルール 89 + 90 + ## 7) LLM に送るメッセージ順 91 + 92 + `engine.Run(...)` の順序: 93 + 94 + ```text 95 + [system] レンダリング済み system prompt 96 + -> 97 + [user] mister_morph_meta(任意) 98 + -> 99 + [history] system 以外の履歴 100 + -> 101 + [user] current message または raw task 102 + ``` 103 + 104 + 1. system prompt 105 + 2. runtime metadata(`mister_morph_meta`) 106 + 3. history(system 以外) 107 + 4. current message または raw task 108 + 109 + ## 実務上の優先順位 110 + 111 + Prompt を調整する時は次の順で拡張するのが安全です。 112 + 113 + 1. `IDENTITY.md` / `SOUL.md` 114 + 2. `SKILL.md` + `skills.load` 115 + 3. `SCRIPTS.md` 116 + 4. runtime prompt augment 117 + 5. `agent.WithPromptBuilder(...)`(完全カスタム時のみ)
+40
web/vitepress/docs/ja/guide/quickstart-cli.md
··· 1 + --- 2 + title: クイックスタート(CLI) 3 + description: 数分で CLI を実行可能にする最短手順。 4 + --- 5 + 6 + # クイックスタート(CLI) 7 + 8 + ## 1. インストール 9 + 10 + ```bash 11 + go install github.com/quailyquaily/mistermorph/cmd/mistermorph@latest 12 + ``` 13 + 14 + ## 2. ワークスペース初期化 15 + 16 + ```bash 17 + mistermorph install 18 + ``` 19 + 20 + ## 3. モデル認証情報を設定 21 + 22 + ```bash 23 + export MISTER_MORPH_LLM_PROVIDER="openai" 24 + export MISTER_MORPH_LLM_MODEL="gpt-5.4" 25 + export MISTER_MORPH_LLM_API_KEY="YOUR_API_KEY" 26 + ``` 27 + 28 + ## 4. 最初のタスク実行 29 + 30 + ```bash 31 + mistermorph run --task "Summarize this repository" 32 + ``` 33 + 34 + ## 5. デバッグスイッチ 35 + 36 + ```bash 37 + mistermorph run --inspect-prompt --inspect-request --task "hello" 38 + ``` 39 + 40 + 設定の全体像は [設定パターン](/ja/guide/config-patterns) と `assets/config/config.example.yaml` を参照。
+43
web/vitepress/docs/ja/guide/runtime-modes.md
··· 1 + --- 2 + title: Runtime モード 3 + description: CLI、Bot、Console の実行モードを選ぶ。 4 + --- 5 + 6 + # Runtime モード 7 + 8 + ## 単発タスク 9 + 10 + ```bash 11 + mistermorph run --task "..." 12 + ``` 13 + 14 + ## Telegram Bot 15 + 16 + ```bash 17 + mistermorph telegram --log-level info 18 + ``` 19 + 20 + ## Slack Bot 21 + 22 + ```bash 23 + mistermorph slack --log-level info 24 + ``` 25 + 26 + ## Console バックエンド 27 + 28 + ```bash 29 + mistermorph console serve 30 + ``` 31 + 32 + ## 旧 Daemon(必要時のみ) 33 + 34 + ```bash 35 + mistermorph serve --server-listen 127.0.0.1:8787 36 + ``` 37 + 38 + 詳細は次を参照: 39 + 40 + - `docs/console.md` 41 + - `docs/slack.md` 42 + - `docs/line.md` 43 + - `docs/lark.md`
+29
web/vitepress/docs/ja/guide/security-and-guard.md
··· 1 + --- 2 + title: セキュリティと Guard 3 + description: 本番運用向けの実践的な安全設定。 4 + --- 5 + 6 + # セキュリティと Guard 7 + 8 + ## 推奨ベースライン 9 + 10 + - API キーは環境変数で管理 11 + - `guard.network.url_fetch.allowed_url_prefixes` で送信先制限 12 + - 脱敏を有効化(`guard.redaction.enabled: true`) 13 + - 常駐モードでは approval を有効化 14 + 15 + ## 最小 Guard 設定 16 + 17 + ```yaml 18 + guard: 19 + enabled: true 20 + network: 21 + url_fetch: 22 + allowed_url_prefixes: ["https://"] 23 + deny_private_ips: true 24 + follow_redirects: false 25 + redaction: 26 + enabled: true 27 + ``` 28 + 29 + 本番運用の詳細は `docs/security.md` を参照。
+63
web/vitepress/docs/ja/guide/skills.md
··· 1 + --- 2 + title: Skills 3 + description: Skill の発見、読み込み戦略、ランタイム挙動。 4 + --- 5 + 6 + # Skills 7 + 8 + Skill は `SKILL.md` を中心としたローカル指示パックです。 9 + 10 + ## Skill とは 11 + 12 + Skill はツールではなく prompt コンテキストです。 13 + 14 + - Skill: どう進めるかを定義 15 + - Tool: 実際の操作を実行(`read_file`、`url_fetch`、`bash` など) 16 + 17 + ## 発見パス 18 + 19 + デフォルトのルート: 20 + 21 + - `file_state_dir/skills`(通常 `~/.morph/skills`) 22 + 23 + runtime は `SKILL.md` を再帰的に探索します。 24 + 25 + ## 読み込み制御 26 + 27 + ```yaml 28 + skills: 29 + enabled: true 30 + dir_name: "skills" 31 + load: [] 32 + ``` 33 + 34 + - `enabled: false`: 読み込まない 35 + - `load: []`: 発見した skill をすべて読み込む 36 + - `load: ["a", "b"]`: 指定 skill のみ読み込む 37 + - 不明な項目は無視される 38 + 39 + タスク本文の `$skill-name` / `$skill-id` でもトリガーできます。 40 + 41 + ## 注入モデル 42 + 43 + system prompt に入るのは skill メタ情報のみ: 44 + 45 + - `name` 46 + - `file_path` 47 + - `description` 48 + - `auth_profiles`(任意) 49 + 50 + 実体の `SKILL.md` は必要時に `read_file` で読みます。 51 + 52 + ## 主要コマンド 53 + 54 + ```bash 55 + mistermorph skills list 56 + mistermorph skills install 57 + mistermorph skills install "https://example.com/SKILL.md" 58 + ``` 59 + 60 + ## セーフティ 61 + 62 + - リモート skill は保存前にレビュー/確認を行う 63 + - インストール中にスクリプトは実行されない
+105
web/vitepress/docs/zh/guide/agent-level-customization.md
··· 1 + --- 2 + title: Agent 底层扩展 3 + description: 超出 integration Runtime API 的低层定制能力。 4 + --- 5 + 6 + # Agent 底层扩展 7 + 8 + 当你需要的能力不在 `integration.Runtime` 暴露范围内时,使用本页方案。 9 + 10 + ## 最小可运行示例(agent 底层 API) 11 + 12 + 这个例子直接使用 `agent.New(...)`,不经过 `integration.Runtime`。 13 + 14 + ```go 15 + package main 16 + 17 + import ( 18 + "context" 19 + "fmt" 20 + "os" 21 + 22 + "github.com/quailyquaily/mistermorph/agent" 23 + "github.com/quailyquaily/mistermorph/providers/uniai" 24 + "github.com/quailyquaily/mistermorph/tools" 25 + ) 26 + 27 + func main() { 28 + client := uniai.New(uniai.Config{ 29 + Provider: "openai", 30 + Endpoint: "https://api.openai.com", 31 + APIKey: os.Getenv("OPENAI_API_KEY"), 32 + Model: "gpt-5.4", 33 + }) 34 + 35 + reg := tools.NewRegistry() // 最小示例:不注册任何工具 36 + 37 + spec := agent.DefaultPromptSpec() 38 + spec.Blocks = append(spec.Blocks, agent.PromptBlock{ 39 + Content: "[[ Runtime Rule ]]\\n请用一段简短中文回答。", 40 + }) 41 + 42 + eng := agent.New(client, reg, agent.Config{ 43 + MaxSteps: 8, 44 + ParseRetries: 2, 45 + ToolRepeatLimit: 3, 46 + }, spec) 47 + 48 + final, _, err := eng.Run(context.Background(), "介绍一下你自己", agent.RunOptions{ 49 + Model: "gpt-5.4", 50 + }) 51 + if err != nil { 52 + panic(err) 53 + } 54 + 55 + fmt.Println(final.Output) 56 + } 57 + ``` 58 + 59 + ## 典型场景 60 + 61 + - 按任务动态注入 prompt block 62 + - 完全替换 system prompt 构造逻辑 63 + - 注入额外 LLM 请求参数 64 + - 自定义工具成功/失败后的处理行为 65 + 66 + ## 用 `PromptSpec` 注入 Prompt Block 67 + 68 + ```go 69 + spec := agent.DefaultPromptSpec() 70 + spec.Blocks = append(spec.Blocks, agent.PromptBlock{ 71 + Content: "[[ Project Policy ]]\n外部 API 调用必须带 trace_id。", 72 + }) 73 + 74 + engine := agent.New(client, reg, agentCfg, spec) 75 + ``` 76 + 77 + ## 用 `WithPromptBuilder` 完全替换 Prompt 构造 78 + 79 + ```go 80 + engine := agent.New( 81 + client, 82 + reg, 83 + agentCfg, 84 + spec, 85 + agent.WithPromptBuilder(func(reg *tools.Registry, task string) string { 86 + return "你的完整自定义 system prompt" 87 + }), 88 + ) 89 + ``` 90 + 91 + ## 其他低层 Hook 92 + 93 + - `agent.WithParamsBuilder(...)` 94 + - `agent.WithOnToolSuccess(...)` 95 + - `agent.WithFallbackFinal(...)` 96 + - `agent.WithPlanStepUpdate(...)` 97 + 98 + ## 范围边界 99 + 100 + - 自定义工具注册:放在 [Core 嵌入进阶](/zh/guide/core-advanced-embedding) 101 + - Telegram channel 接入:放在 [Core 嵌入进阶](/zh/guide/core-advanced-embedding) 102 + 103 + ## 建议 104 + 105 + 默认优先使用 `integration`。只有当 `integration` 无法覆盖需求时,再下沉到这一层。
+49
web/vitepress/docs/zh/guide/build-agent-with-core.md
··· 1 + --- 2 + title: 用 Core 快速搭建 Agent 3 + description: 在 Go 项目中嵌入 Mister Morph integration runtime。 4 + --- 5 + 6 + # 用 Core 快速搭建 Agent 7 + 8 + `integration` 是推荐的嵌入入口。 9 + 10 + ## 最小示例 11 + 12 + ```go 13 + package main 14 + 15 + import ( 16 + "context" 17 + "fmt" 18 + 19 + "github.com/quailyquaily/mistermorph/agent" 20 + "github.com/quailyquaily/mistermorph/integration" 21 + ) 22 + 23 + func main() { 24 + cfg := integration.DefaultConfig() 25 + cfg.BuiltinToolNames = []string{"read_file", "url_fetch", "todo_update"} 26 + cfg.Set("llm.provider", "openai") 27 + cfg.Set("llm.model", "gpt-5.4") 28 + cfg.Set("llm.api_key", "YOUR_API_KEY") 29 + 30 + rt := integration.New(cfg) 31 + 32 + task := "读取 README 并输出简短摘要" 33 + final, _, err := rt.RunTask(context.Background(), task, agent.RunOptions{}) 34 + if err != nil { 35 + panic(err) 36 + } 37 + 38 + fmt.Println(final.Output) 39 + } 40 + ``` 41 + 42 + ## 常用调节点 43 + 44 + - `cfg.BuiltinToolNames` 45 + - `cfg.Set("max_steps", N)` 46 + - `cfg.Set("tool_repeat_limit", N)` 47 + - `cfg.Inspect.Prompt`、`cfg.Inspect.Request` 48 + 49 + Prepared 方式(`NewRunEngine*`)放在 [Core 嵌入进阶](/zh/guide/core-advanced-embedding)。
+62
web/vitepress/docs/zh/guide/built-in-tools.md
··· 1 + --- 2 + title: 内置工具 3 + description: 静态工具、运行时注入工具与通道专属工具。 4 + --- 5 + 6 + # 内置工具 7 + 8 + 工具分两阶段注册:静态注册 + 运行时注入。 9 + 10 + ## 静态工具(配置驱动) 11 + 12 + 无需 runtime 上下文即可创建: 13 + 14 + - `read_file` 15 + - `write_file` 16 + - `bash` 17 + - `url_fetch` 18 + - `web_search` 19 + - `contacts_send` 20 + 21 + ## 运行时工具(依赖 LLM 上下文) 22 + 23 + 运行时会注入: 24 + 25 + - `plan_create` 26 + - `todo_update` 27 + 28 + ## 通道专属工具 29 + 30 + - Telegram 可能注入: 31 + - `telegram_send_voice` 32 + - `telegram_send_photo` 33 + - `telegram_send_file` 34 + - `message_react` 35 + - Slack 可能注入: 36 + - `message_react` 37 + 38 + ## Core 嵌入里的白名单 39 + 40 + 可通过 `integration.Config.BuiltinToolNames` 限制内置工具。 41 + 42 + ```go 43 + cfg.BuiltinToolNames = []string{"read_file", "url_fetch", "todo_update"} 44 + ``` 45 + 46 + 为空表示启用全部内置工具。 47 + 48 + ## 配置入口 49 + 50 + ```yaml 51 + tools: 52 + read_file: ... 53 + write_file: ... 54 + bash: ... 55 + url_fetch: ... 56 + web_search: ... 57 + contacts_send: ... 58 + todo_update: ... 59 + plan_create: ... 60 + ``` 61 + 62 + 参数级细节见 `docs/tools.md`。
+40
web/vitepress/docs/zh/guide/config-patterns.md
··· 1 + --- 2 + title: 配置模式 3 + description: 常用的 profiles、routes 与工具策略配置方法。 4 + --- 5 + 6 + # 配置模式 7 + 8 + ## LLM Profiles 与 Routes 9 + 10 + ```yaml 11 + llm: 12 + model: gpt-5.4 13 + profiles: 14 + cheap: 15 + model: gpt-4.1-mini 16 + routes: 17 + main_loop: default 18 + addressing: cheap 19 + heartbeat: cheap 20 + ``` 21 + 22 + ## 工具开关 23 + 24 + ```yaml 25 + tools: 26 + bash: 27 + enabled: false 28 + url_fetch: 29 + enabled: true 30 + timeout: "30s" 31 + ``` 32 + 33 + ## 运行上限 34 + 35 + ```yaml 36 + max_steps: 20 37 + tool_repeat_limit: 4 38 + ``` 39 + 40 + 完整键定义以 `assets/config/config.example.yaml` 为准。
+272
web/vitepress/docs/zh/guide/config-reference.md
··· 1 + --- 2 + title: 配置字段总览 3 + description: config.yaml 的完整字段说明(逐字段解释)。 4 + --- 5 + 6 + # 配置字段总览 7 + 8 + 权威来源:`assets/config/config.example.yaml`。 9 + 10 + 所有字段都可用 `MISTER_MORPH_...` 环境变量覆盖,映射规则见[环境变量总览](/zh/guide/env-vars-reference)。 11 + 12 + ## 全局 13 + 14 + | 字段 | 含义 | 15 + |---|---| 16 + | `user_agent` | 全局 HTTP User-Agent,作用于 `url_fetch`、`web_search` 等外联工具。 | 17 + 18 + ## LLM 19 + 20 + | 字段 | 含义 | 21 + |---|---| 22 + | `llm.provider` | 主模型提供方(如 `openai`、`azure`、`bedrock`、`cloudflare` 等)。 | 23 + | `llm.model` | 主循环默认模型名。 | 24 + | `llm.endpoint` | OpenAI 兼容提供方的 API 基础地址。 | 25 + | `llm.api_key` | 提供方 API Key。建议写成 `${ENV_VAR}`。 | 26 + | `llm.request_timeout` | 单次 LLM 请求超时时间。 | 27 + | `llm.temperature` | 可选的默认采样温度;未设置时不强制传给提供方。 | 28 + | `llm.reasoning_effort` | 可选推理强度(`none/minimal/low/medium/high/max/xhigh`)。 | 29 + | `llm.reasoning_budget_tokens` | 可选推理预算 token。 | 30 + | `llm.tools_emulation_mode` | 工具调用仿真策略(`off/fallback/force`)。 | 31 + | `llm.azure.deployment` | Azure OpenAI 的 deployment 名称。 | 32 + | `llm.bedrock.aws_key` | Bedrock 的 AWS Access Key。 | 33 + | `llm.bedrock.aws_secret` | Bedrock 的 AWS Secret Key。 | 34 + | `llm.bedrock.region` | Bedrock 区域。 | 35 + | `llm.bedrock.model_arn` | Bedrock 模型 ARN。 | 36 + | `llm.cloudflare.account_id` | Cloudflare Workers AI 账号 ID。 | 37 + | `llm.cloudflare.api_token` | Cloudflare Workers AI API Token。 | 38 + | `llm.profiles.<profile>.*` | 命名 LLM 配置档;可覆盖 provider/model/key 等,用于路由不同任务。 | 39 + | `llm.routes.main_loop` | 主 agent 循环用哪个 profile。 | 40 + | `llm.routes.addressing` | 群聊“是否被点名”判定用哪个 profile。 | 41 + | `llm.routes.heartbeat` | 心跳任务用哪个 profile。 | 42 + | `llm.routes.plan_create` | `plan_create` 工具用哪个 profile。 | 43 + | `llm.routes.memory_draft` | memory 草稿/整理相关调用用哪个 profile。 | 44 + 45 + ## Multimodal 46 + 47 + | 字段 | 含义 | 48 + |---|---| 49 + | `multimodal.image.sources` | 允许图像输入的来源白名单(如 `telegram`、`line`、`remote_download`)。 | 50 + 51 + ## Logging 52 + 53 + | 字段 | 含义 | 54 + |---|---| 55 + | `logging.level` | 日志级别(`debug/info/warn/error`)。 | 56 + | `logging.format` | 日志格式(`text/json`)。 | 57 + | `logging.add_source` | 是否在日志中附带源码位置(文件:行)。 | 58 + | `logging.include_thoughts` | 是否输出模型 thoughts(可能包含敏感信息)。 | 59 + | `logging.include_tool_params` | 是否记录工具调用参数(会脱敏/截断)。 | 60 + | `logging.include_skill_contents` | 是否记录已加载 `SKILL.md` 内容(截断后)。 | 61 + | `logging.max_thought_chars` | thoughts 日志最大字符数。 | 62 + | `logging.max_json_bytes` | 参数 JSON 日志最大字节数。 | 63 + | `logging.max_string_value_chars` | 日志中单个字符串值的最大长度。 | 64 + | `logging.max_skill_content_chars` | `SKILL.md` 记录时最大字符数。 | 65 + | `logging.redact_keys` | 额外脱敏键名列表。 | 66 + 67 + ## Secrets 与 Auth Profiles 68 + 69 + | 字段 | 含义 | 70 + |---|---| 71 + | `secrets.allow_profiles` | 允许运行时使用的认证 profile 白名单。 | 72 + | `auth_profiles.<id>.credential.kind` | 凭证类型(如 api key/bearer)。 | 73 + | `auth_profiles.<id>.credential.secret` | 实际密钥内容,建议 `${ENV_VAR}`。 | 74 + | `auth_profiles.<id>.allow.url_prefixes` | 允许访问的 URL 前缀白名单。 | 75 + | `auth_profiles.<id>.allow.methods` | 允许的 HTTP 方法白名单。 | 76 + | `auth_profiles.<id>.allow.follow_redirects` | 是否允许跟随重定向。 | 77 + | `auth_profiles.<id>.allow.allow_proxy` | 是否允许走系统代理。 | 78 + | `auth_profiles.<id>.allow.deny_private_ips` | 是否禁止私网/本地地址。 | 79 + | `auth_profiles.<id>.bindings.url_fetch.inject.location` | 凭证注入位置(例如 header/query)。 | 80 + | `auth_profiles.<id>.bindings.url_fetch.inject.name` | 注入字段名(例如 `Authorization`)。 | 81 + | `auth_profiles.<id>.bindings.url_fetch.inject.format` | 注入格式(例如 bearer)。 | 82 + | `auth_profiles.<id>.bindings.url_fetch.allow_user_headers` | 是否允许用户再额外传 header。 | 83 + | `auth_profiles.<id>.bindings.url_fetch.user_header_allowlist` | 允许用户自带的 header 白名单。 | 84 + 85 + ## Guard 86 + 87 + | 字段 | 含义 | 88 + |---|---| 89 + | `guard.enabled` | 是否启用 Guard 安全层。 | 90 + | `guard.dir_name` | Guard 状态目录名(位于 `file_state_dir` 下)。 | 91 + | `guard.network.url_fetch.allowed_url_prefixes` | `url_fetch` 可访问目的地前缀白名单。 | 92 + | `guard.network.url_fetch.deny_private_ips` | 是否拒绝私网/本地 IP 目标。 | 93 + | `guard.network.url_fetch.follow_redirects` | `url_fetch` 是否允许重定向。 | 94 + | `guard.network.url_fetch.allow_proxy` | `url_fetch` 是否允许代理。 | 95 + | `guard.redaction.enabled` | 是否启用输出脱敏。 | 96 + | `guard.redaction.patterns` | 自定义脱敏正则模式。 | 97 + | `guard.audit.jsonl_path` | 审计日志 JSONL 路径(空则使用默认目录)。 | 98 + | `guard.audit.rotate_max_bytes` | 审计日志滚动大小阈值。 | 99 + | `guard.approvals.enabled` | 是否启用审批流程。 | 100 + 101 + ## Tools 102 + 103 + | 字段 | 含义 | 104 + |---|---| 105 + | `tools.read_file.max_bytes` | `read_file` 单次最大读取字节数。 | 106 + | `tools.read_file.deny_paths` | `read_file` 拒绝读取的路径/文件名列表。 | 107 + | `tools.write_file.enabled` | 是否启用 `write_file`。 | 108 + | `tools.write_file.max_bytes` | `write_file` 单次最大写入字节数。 | 109 + | `tools.contacts_send.enabled` | 是否启用 `contacts_send`。 | 110 + | `tools.todo_update.enabled` | 是否启用 `todo_update`。 | 111 + | `tools.plan_create.enabled` | 是否启用 `plan_create`。 | 112 + | `tools.plan_create.max_steps` | `plan_create` 默认最大步骤数。 | 113 + | `tools.url_fetch.enabled` | 是否启用 `url_fetch`。 | 114 + | `tools.url_fetch.timeout` | `url_fetch` 请求超时。 | 115 + | `tools.url_fetch.max_bytes` | `url_fetch` 直接返回时的最大读取字节数。 | 116 + | `tools.url_fetch.max_bytes_download` | `url_fetch` 下载到文件时的最大读取字节数。 | 117 + | `tools.web_search.enabled` | 是否启用 `web_search`。 | 118 + | `tools.web_search.base_url` | 搜索后端地址(当前默认 DuckDuckGo HTML)。 | 119 + | `tools.web_search.timeout` | `web_search` 请求超时。 | 120 + | `tools.web_search.max_results` | `web_search` 默认返回条数上限。 | 121 + | `tools.bash.enabled` | 是否启用 `bash`(高风险能力)。 | 122 + | `tools.bash.timeout` | `bash` 单次执行超时。 | 123 + | `tools.bash.max_output_bytes` | `bash` 每个输出流最大保留字节数。 | 124 + | `tools.bash.deny_paths` | `bash` 命令中禁止引用的路径列表。 | 125 + | `tools.bash.injected_env_vars` | 额外注入给 `bash` 子进程的环境变量白名单。 | 126 + 127 + ## MCP 128 + 129 + | 字段 | 含义 | 130 + |---|---| 131 + | `mcp.servers[].name` | MCP 服务器标识名;会参与工具命名空间。 | 132 + | `mcp.servers[].enable` | 是否启用该 MCP 服务器配置。 | 133 + | `mcp.servers[].type` | 传输类型(`stdio` 或 `http`)。 | 134 + | `mcp.servers[].command` | `stdio` 模式下的启动命令。 | 135 + | `mcp.servers[].args` | `stdio` 模式命令参数。 | 136 + | `mcp.servers[].env` | `stdio` 模式传给子进程的环境变量。 | 137 + | `mcp.servers[].url` | `http` 模式 MCP Endpoint。 | 138 + | `mcp.servers[].headers` | `http` 模式自定义请求头(支持 `${ENV_VAR}`)。 | 139 + | `mcp.servers[].allowed_tools` | 该服务器允许暴露的工具白名单;空表示全部。 | 140 + 141 + ## Memory 142 + 143 + | 字段 | 含义 | 144 + |---|---| 145 + | `memory.enabled` | 是否启用 memory 子系统。 | 146 + | `memory.dir_name` | memory 目录名(位于 `file_state_dir` 下)。 | 147 + | `memory.short_term_days` | 注入短期记忆时回看天数窗口。 | 148 + | `memory.injection.enabled` | 是否把记忆摘要注入系统 prompt。 | 149 + | `memory.injection.max_items` | 单次注入的最大记忆条目数。 | 150 + 151 + ## Bus / Contacts / Tasks / Skills 152 + 153 + | 字段 | 含义 | 154 + |---|---| 155 + | `bus.max_inflight` | 进程内消息总线最大并发在途数。 | 156 + | `contacts.dir_name` | 联系人业务状态目录名。 | 157 + | `contacts.proactive.max_turns_per_session` | 主动会话最大轮次。 | 158 + | `contacts.proactive.session_cooldown` | 主动会话轮次耗尽后的冷却时长。 | 159 + | `contacts.proactive.failure_cooldown` | 主动发送失败后的冷却时长。 | 160 + | `tasks.dir_name` | task 持久化目录名。 | 161 + | `tasks.persistence_targets` | 启用任务文件持久化的目标运行时。 | 162 + | `tasks.rotate_max_bytes` | 任务日志/状态文件滚动大小阈值。 | 163 + | `tasks.targets.console.heartbeat_topic_id` | console 心跳保留 topic id。 | 164 + | `skills.dir_name` | skills 根目录名。 | 165 + | `skills.enabled` | 是否启用 skills 加载。 | 166 + | `skills.load` | 预加载 skill 列表;空列表表示加载全部已发现 skill。 | 167 + 168 + ## Server 与 Console 169 + 170 + | 字段 | 含义 | 171 + |---|---| 172 + | `server.listen` | 已废弃;旧版共享监听地址回退项。 | 173 + | `server.auth_token` | 运行时 API 鉴权 token(Bearer)。 | 174 + | `server.max_queue` | 任务队列最大长度。 | 175 + | `console.listen` | Console API + 静态资源监听地址。 | 176 + | `console.base_path` | Console 路由基础路径。 | 177 + | `console.static_dir` | Console 静态站点目录(生产构建产物)。 | 178 + | `console.password` | Console 明文密码(生产不推荐)。 | 179 + | `console.password_hash` | Console bcrypt 密码哈希。 | 180 + | `console.session_ttl` | Console 会话 token 有效期。 | 181 + | `console.managed_runtimes` | 由 console 进程托管的通道 runtime 列表(如 telegram/slack)。 | 182 + | `console.endpoints[].name` | 外部 runtime endpoint 显示名称。 | 183 + | `console.endpoints[].url` | 外部 runtime endpoint 地址。 | 184 + | `console.endpoints[].auth_token` | 访问该 endpoint 的鉴权 token。 | 185 + 186 + ## Telegram 187 + 188 + | 字段 | 含义 | 189 + |---|---| 190 + | `telegram.bot_token` | Telegram Bot Token。 | 191 + | `telegram.allowed_chat_ids` | 允许访问的 chat id 白名单;空表示不限制。 | 192 + | `telegram.group_trigger_mode` | 群聊触发策略(`strict/smart/talkative`)。 | 193 + | `telegram.addressing_confidence_threshold` | addressing 判定通过所需最小置信度。 | 194 + | `telegram.addressing_interject_threshold` | Telegram addressing 的 interject 上限阈值。 | 195 + | `telegram.poll_timeout` | 长轮询超时。 | 196 + | `telegram.task_timeout` | 单条消息任务超时(`0s` 表示沿用上层)。 | 197 + | `telegram.max_concurrency` | 并发处理 chat 的上限。 | 198 + | `telegram.serve_listen` | Telegram runtime API 监听地址。 | 199 + 200 + ## Slack 201 + 202 + | 字段 | 含义 | 203 + |---|---| 204 + | `slack.base_url` | Slack Web API 基础地址(通常不用改)。 | 205 + | `slack.bot_token` | Slack Bot Token(xoxb)。 | 206 + | `slack.app_token` | Slack Socket Mode App Token(xapp)。 | 207 + | `slack.allowed_team_ids` | 允许 workspace 白名单。 | 208 + | `slack.allowed_channel_ids` | 允许 channel 白名单(也可用于心跳通知目标)。 | 209 + | `slack.group_trigger_mode` | 群聊触发策略(`strict/smart/talkative`)。 | 210 + | `slack.addressing_confidence_threshold` | addressing 判定通过所需最小置信度。 | 211 + | `slack.addressing_interject_threshold` | Slack addressing 的 interject 下限阈值。 | 212 + | `slack.task_timeout` | 单条消息任务超时。 | 213 + | `slack.max_concurrency` | 会话并发处理上限。 | 214 + | `slack.serve_listen` | Slack runtime API 监听地址。 | 215 + 216 + ## LINE 217 + 218 + | 字段 | 含义 | 219 + |---|---| 220 + | `line.base_url` | LINE Messaging API 基础地址。 | 221 + | `line.channel_access_token` | LINE Channel Access Token。 | 222 + | `line.channel_secret` | LINE Webhook 签名校验密钥。 | 223 + | `line.webhook_listen` | LINE webhook 监听地址。 | 224 + | `line.webhook_path` | LINE webhook 路由路径。 | 225 + | `line.allowed_group_ids` | 允许 group 白名单;空表示不限制。 | 226 + | `line.group_trigger_mode` | 群聊触发策略(`strict/smart/talkative`)。 | 227 + | `line.addressing_confidence_threshold` | addressing 判定通过所需最小置信度。 | 228 + | `line.addressing_interject_threshold` | LINE addressing 的 interject 下限阈值。 | 229 + | `line.task_timeout` | 单条消息任务超时。 | 230 + | `line.max_concurrency` | 会话并发处理上限。 | 231 + | `line.serve_listen` | LINE runtime API 监听地址。 | 232 + 233 + ## Lark 234 + 235 + | 字段 | 含义 | 236 + |---|---| 237 + | `lark.base_url` | Lark/飞书 Open API 基础地址。 | 238 + | `lark.app_id` | Lark App ID。 | 239 + | `lark.app_secret` | Lark App Secret。 | 240 + | `lark.webhook_listen` | Lark webhook 监听地址。 | 241 + | `lark.webhook_path` | Lark webhook 路由路径。 | 242 + | `lark.verification_token` | 事件订阅校验 token。 | 243 + | `lark.encrypt_key` | 事件订阅加密 key。 | 244 + | `lark.allowed_chat_ids` | 允许 chat 白名单;空表示不限制。 | 245 + | `lark.group_trigger_mode` | 群聊触发策略(`strict/smart/talkative`)。 | 246 + | `lark.addressing_confidence_threshold` | addressing 判定通过所需最小置信度。 | 247 + | `lark.addressing_interject_threshold` | Lark addressing 的 interject 下限阈值。 | 248 + | `lark.task_timeout` | 单条消息任务超时。 | 249 + | `lark.max_concurrency` | 会话并发处理上限。 | 250 + | `lark.serve_listen` | Lark runtime API 监听地址。 | 251 + 252 + ## Heartbeat 253 + 254 + | 字段 | 含义 | 255 + |---|---| 256 + | `heartbeat.enabled` | 是否启用心跳机制。 | 257 + | `heartbeat.interval` | 心跳执行间隔。 | 258 + 259 + ## 循环限制与文件目录 260 + 261 + | 字段 | 含义 | 262 + |---|---| 263 + | `max_steps` | 单次任务最多工具调用步数。 | 264 + | `parse_retries` | 模型输出 JSON 解析失败时的重试次数。 | 265 + | `max_token_budget` | 累计 token 预算上限(`0` 表示不限制)。 | 266 + | `tool_repeat_limit` | 同名工具在单任务中的重复成功调用上限。 | 267 + | `timeout` | 整个任务运行超时。 | 268 + | `file_state_dir` | 运行状态根目录(memory/skills/tasks 等)。 | 269 + | `file_cache_dir` | 文件缓存根目录(下载文件、媒体临时文件等)。 | 270 + | `file_cache.max_age` | 缓存文件最大保留时长。 | 271 + | `file_cache.max_files` | 缓存文件数量上限。 | 272 + | `file_cache.max_total_bytes` | 缓存总大小上限。 |
+172
web/vitepress/docs/zh/guide/core-advanced-embedding.md
··· 1 + --- 2 + title: Core 嵌入进阶 3 + description: 仅覆盖 integration 包能力:配置、注册表、运行引擎与通道运行器。 4 + --- 5 + 6 + # Core 嵌入进阶 7 + 8 + 本页只讲 `integration` 包直接提供的能力。 9 + 10 + ## `integration` 提供了什么 11 + 12 + - `integration.DefaultConfig()` / `integration.Config.Set(...)` 13 + - `integration.New(cfg)` 14 + - `rt.NewRegistry()` 15 + - `rt.NewRunEngine(...)` 16 + - `rt.NewRunEngineWithRegistry(...)` 17 + - `rt.RunTask(...)` 18 + - `rt.RequestTimeout()` 19 + - `rt.NewTelegramBot(...)` 20 + - `rt.NewSlackBot(...)` 21 + 22 + ## 配置层(`integration.Config`) 23 + 24 + - `Overrides` + `Set(key, value)`:覆盖任意 Viper 配置键。 25 + - `Features`:控制运行时能力注入(`PlanTool`、`Guard`、`Skills`)。 26 + - `BuiltinToolNames`:内置工具白名单(空表示全部)。 27 + - `Inspect`:Prompt/Request 落盘调试。 28 + 29 + ```go 30 + cfg := integration.DefaultConfig() 31 + cfg.Set("llm.provider", "openai") 32 + cfg.Set("llm.model", "gpt-5.4") 33 + cfg.Set("llm.api_key", os.Getenv("OPENAI_API_KEY")) 34 + cfg.Features.Skills = true 35 + cfg.BuiltinToolNames = []string{"read_file", "url_fetch", "todo_update"} 36 + ``` 37 + 38 + ## 注册表与自定义工具 39 + 40 + `integration` 支持在创建引擎前扩展工具注册表。 41 + 42 + ### 可运行示例(自定义工具 + integration) 43 + 44 + ```go 45 + package main 46 + 47 + import ( 48 + "context" 49 + "encoding/json" 50 + "fmt" 51 + "os" 52 + "strings" 53 + 54 + "github.com/quailyquaily/mistermorph/agent" 55 + "github.com/quailyquaily/mistermorph/integration" 56 + ) 57 + 58 + type EchoTool struct{} 59 + 60 + func (t *EchoTool) Name() string { return "echo_text" } 61 + 62 + func (t *EchoTool) Description() string { 63 + return "Echoes input text as JSON." 64 + } 65 + 66 + func (t *EchoTool) ParameterSchema() string { 67 + return `{ 68 + "type": "object", 69 + "properties": { 70 + "text": {"type": "string", "description": "Text to echo."} 71 + }, 72 + "required": ["text"] 73 + }` 74 + } 75 + 76 + func (t *EchoTool) Execute(_ context.Context, params map[string]any) (string, error) { 77 + text, _ := params["text"].(string) 78 + text = strings.TrimSpace(text) 79 + if text == "" { 80 + return "", fmt.Errorf("text is required") 81 + } 82 + b, _ := json.Marshal(map[string]any{"text": text}) 83 + return string(b), nil 84 + } 85 + 86 + func main() { 87 + cfg := integration.DefaultConfig() 88 + cfg.Set("llm.provider", "openai") 89 + cfg.Set("llm.model", "gpt-5.4") 90 + cfg.Set("llm.api_key", os.Getenv("OPENAI_API_KEY")) 91 + 92 + rt := integration.New(cfg) 93 + reg := rt.NewRegistry() 94 + reg.Register(&EchoTool{}) 95 + 96 + task := "Call tool echo_text with text 'hello from tool', then answer with that text." 97 + 98 + prepared, err := rt.NewRunEngineWithRegistry(context.Background(), task, reg) 99 + if err != nil { 100 + panic(err) 101 + } 102 + defer prepared.Cleanup() 103 + 104 + final, _, err := prepared.Engine.Run(context.Background(), task, agent.RunOptions{Model: prepared.Model}) 105 + if err != nil { 106 + panic(err) 107 + } 108 + 109 + fmt.Println(final.Output) 110 + } 111 + ``` 112 + 113 + ## 运行 API 114 + 115 + ### Prepared Engine 方式 116 + 117 + ```go 118 + prepared, err := rt.NewRunEngine(context.Background(), task) 119 + if err != nil { 120 + panic(err) 121 + } 122 + defer prepared.Cleanup() 123 + 124 + final, _, err := prepared.Engine.Run(context.Background(), task, agent.RunOptions{ 125 + Model: prepared.Model, 126 + }) 127 + ``` 128 + 129 + #### 为什么选 Prepared Engine 方式 130 + 131 + - 生命周期可控:你可以明确在何时 `Cleanup()`,适合接入你自己的进程管理。 132 + - 可复用:同一个 `prepared.Engine` 可以多次 `Run(...)`,避免重复准备。 133 + - 运行参数可变:每次 `Run` 都可传不同 `RunOptions`(如 `History`、`Meta`、`OnStream`)。 134 + - 便于编排:你能直接拿到 `prepared.Model` 与 `Engine`,更适合做上层会话/调度封装。 135 + 136 + ### 便捷方式 137 + 138 + ```go 139 + final, runCtx, err := rt.RunTask(context.Background(), task, agent.RunOptions{}) 140 + _ = final 141 + _ = runCtx 142 + _ = err 143 + ``` 144 + 145 + ## 调试与诊断 146 + 147 + ```go 148 + cfg.Inspect.Prompt = true 149 + cfg.Inspect.Request = true 150 + cfg.Inspect.DumpDir = "./dump" 151 + ``` 152 + 153 + ## 接入 Telegram Channel(进阶) 154 + 155 + ```go 156 + tg, _ := rt.NewTelegramBot(integration.TelegramOptions{BotToken: os.Getenv("MISTER_MORPH_TELEGRAM_BOT_TOKEN")}) 157 + _ = tg 158 + ``` 159 + 160 + ## 接入 Slack Channel(可选) 161 + 162 + ```go 163 + sl, _ := rt.NewSlackBot(integration.SlackOptions{ 164 + BotToken: os.Getenv("MISTER_MORPH_SLACK_BOT_TOKEN"), 165 + AppToken: os.Getenv("MISTER_MORPH_SLACK_APP_TOKEN"), 166 + }) 167 + _ = sl 168 + ``` 169 + 170 + ## 本页不覆盖内容 171 + 172 + 更底层的能力请看 [Agent 底层扩展](/zh/guide/agent-level-customization)。
+50
web/vitepress/docs/zh/guide/docs-map.md
··· 1 + --- 2 + title: 仓库文档地图 3 + description: 仓库中更完整设计文档的入口索引。 4 + --- 5 + 6 + # 仓库文档地图 7 + 8 + ## 站内文档结构 9 + 10 + - 开始使用 11 + - [总览](/zh/guide/overview) 12 + - [快速开始(CLI)](/zh/guide/quickstart-cli) 13 + - [安装与配置](/zh/guide/install-and-config) 14 + - 开发者(嵌入) 15 + - [用 Core 快速搭建 Agent](/zh/guide/build-agent-with-core) 16 + - [Core 嵌入进阶](/zh/guide/core-advanced-embedding) 17 + - [Agent 底层扩展](/zh/guide/agent-level-customization) 18 + - Runtime 19 + - [Runtime 模式](/zh/guide/runtime-modes) 20 + - [Prompt 组织(自顶向下)](/zh/guide/prompt-architecture) 21 + - [Memory](/zh/guide/memory) 22 + - [Skills](/zh/guide/skills) 23 + - [内置工具](/zh/guide/built-in-tools) 24 + - [MCP](/zh/guide/mcp) 25 + - 运维与治理 26 + - [安全与 Guard](/zh/guide/security-and-guard) 27 + - [配置模式](/zh/guide/config-patterns) 28 + - [配置字段总览](/zh/guide/config-reference) 29 + - [环境变量总览](/zh/guide/env-vars-reference) 30 + 31 + ## Core 与架构 32 + 33 + - [`docs/arch.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/arch.md) 34 + - [`docs/integration.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/integration.md) 35 + - [`docs/prompt.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/prompt.md) 36 + 37 + ## Runtime 与通道 38 + 39 + - [`docs/console.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/console.md) 40 + - [`docs/slack.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/slack.md) 41 + - [`docs/line.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/line.md) 42 + - [`docs/lark.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/lark.md) 43 + 44 + ## 治理与状态 45 + 46 + - [`docs/security.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/security.md) 47 + - [`docs/tools.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/tools.md) 48 + - [`docs/skills.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/skills.md) 49 + - [`docs/memory.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/memory.md) 50 + - [`docs/bus.md`](https://github.com/quailyquaily/mistermorph/blob/master/docs/bus.md)
+83
web/vitepress/docs/zh/guide/env-vars-reference.md
··· 1 + --- 2 + title: 环境变量总览 3 + description: 完整环境变量模型、映射规则与兼容变量说明。 4 + --- 5 + 6 + # 环境变量总览 7 + 8 + ## 优先级 9 + 10 + 生效顺序: 11 + 12 + 1. CLI flags 13 + 2. `MISTER_MORPH_*` 环境变量 14 + 3. `config.yaml` 15 + 4. 代码默认值 16 + 17 + ## 完整支持规则 18 + 19 + 所有配置键都可按同一规则映射成环境变量: 20 + 21 + - 前缀:`MISTER_MORPH_` 22 + - 转大写 23 + - `.` 和 `-` 替换为 `_` 24 + 25 + 示例: 26 + 27 + - `llm.api_key` -> `MISTER_MORPH_LLM_API_KEY` 28 + - `tools.bash.enabled` -> `MISTER_MORPH_TOOLS_BASH_ENABLED` 29 + - `mcp.servers` -> `MISTER_MORPH_MCP_SERVERS` 30 + 31 + 因此,[配置字段总览](/zh/guide/config-reference)中的全部字段都支持环境变量覆盖。 32 + 33 + ## 高频环境变量 34 + 35 + - `MISTER_MORPH_CONFIG` 36 + - `MISTER_MORPH_LLM_PROVIDER` 37 + - `MISTER_MORPH_LLM_ENDPOINT` 38 + - `MISTER_MORPH_LLM_MODEL` 39 + - `MISTER_MORPH_LLM_API_KEY` 40 + - `MISTER_MORPH_SERVER_AUTH_TOKEN` 41 + - `MISTER_MORPH_CONSOLE_PASSWORD` 42 + - `MISTER_MORPH_CONSOLE_PASSWORD_HASH` 43 + - `MISTER_MORPH_TELEGRAM_BOT_TOKEN` 44 + - `MISTER_MORPH_SLACK_BOT_TOKEN` 45 + - `MISTER_MORPH_SLACK_APP_TOKEN` 46 + - `MISTER_MORPH_LINE_CHANNEL_ACCESS_TOKEN` 47 + - `MISTER_MORPH_LINE_CHANNEL_SECRET` 48 + - `MISTER_MORPH_LARK_APP_ID` 49 + - `MISTER_MORPH_LARK_APP_SECRET` 50 + - `MISTER_MORPH_FILE_STATE_DIR` 51 + - `MISTER_MORPH_FILE_CACHE_DIR` 52 + 53 + ## 配置内 `${ENV_VAR}` 展开 54 + 55 + 配置里的所有字符串都支持 `${ENV_VAR}` 展开。 56 + 57 + ```yaml 58 + llm: 59 + api_key: "${OPENAI_API_KEY}" 60 + mcp: 61 + servers: 62 + - name: remote 63 + headers: 64 + Authorization: "Bearer ${MCP_REMOTE_TOKEN}" 65 + ``` 66 + 67 + 说明: 68 + 69 + - 仅展开 `${NAME}` 形式 70 + - 裸 `$NAME` 不展开 71 + - 未设置变量会替换为空字符串并给出 warning 72 + 73 + ## 兼容/特殊环境变量 74 + 75 + - `TELEGRAM_BOT_TOKEN` 76 + - 仅用于 `mistermorph telegram send` 的兼容回退 77 + - 优先仍是 `MISTER_MORPH_TELEGRAM_BOT_TOKEN` 78 + - `NO_COLOR`、`TERM=dumb` 79 + - 仅影响 CLI 颜色输出 80 + 81 + ## 实践建议 82 + 83 + 敏感值建议用 `${ENV_VAR}` 占位,并在运行环境注入真实 secret。
+45
web/vitepress/docs/zh/guide/install-and-config.md
··· 1 + --- 2 + title: 安装与配置 3 + description: 安装方式与基础配置模型。 4 + --- 5 + 6 + # 安装与配置 7 + 8 + ## 安装方式 9 + 10 + ```bash 11 + # 发布版安装脚本 12 + curl -fsSL -o /tmp/install-mistermorph.sh https://raw.githubusercontent.com/quailyquaily/mistermorph/refs/heads/master/scripts/install-release.sh 13 + sudo bash /tmp/install-mistermorph.sh 14 + ``` 15 + 16 + ```bash 17 + # Go 安装 18 + go install github.com/quailyquaily/mistermorph/cmd/mistermorph@latest 19 + ``` 20 + 21 + ## 初始化文件 22 + 23 + ```bash 24 + mistermorph install 25 + ``` 26 + 27 + 默认工作目录是 `~/.morph/`。 28 + 29 + ## 配置来源优先级 30 + 31 + - CLI flags 32 + - 环境变量 33 + - `config.yaml` 34 + 35 + ## 最小 `config.yaml` 36 + 37 + ```yaml 38 + llm: 39 + provider: openai 40 + model: gpt-5.4 41 + endpoint: https://api.openai.com 42 + api_key: ${OPENAI_API_KEY} 43 + ``` 44 + 45 + 完整键列表以 `assets/config/config.example.yaml` 为准。
+66
web/vitepress/docs/zh/guide/mcp.md
··· 1 + --- 2 + title: MCP 3 + description: 配置 MCP server,并把远端工具接入本地 Agent 工具循环。 4 + --- 5 + 6 + # MCP 7 + 8 + Mister Morph 可连接 MCP server,并把远端工具注册到同一个 tool-calling 循环中。 9 + 10 + ## 工具名映射 11 + 12 + MCP 工具会被注册为: 13 + 14 + - `mcp_<server_name>__<tool_name>` 15 + 16 + 例如:`mcp_filesystem__read_file` 17 + 18 + ## 支持的传输类型 19 + 20 + - `stdio`(默认) 21 + - `http` 22 + 23 + ## 配置结构 24 + 25 + ```yaml 26 + mcp: 27 + servers: 28 + - name: filesystem 29 + type: stdio 30 + command: npx 31 + args: ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"] 32 + allowed_tools: [] 33 + 34 + - name: remote 35 + type: http 36 + url: "https://mcp.example.com/mcp" 37 + headers: 38 + Authorization: "Bearer ${MCP_REMOTE_TOKEN}" 39 + allowed_tools: ["search"] 40 + ``` 41 + 42 + 字段行为: 43 + 44 + - `enable: false` 可禁用某个 server 45 + - `allowed_tools: []` 表示该 server 的全部工具都可用 46 + - 配置非法的 server 会被跳过并记 warning 47 + 48 + ## 生命周期 49 + 50 + 1. 读取 `mcp.servers` 51 + 2. 连接每个启用且合法的 server 52 + 3. 拉取工具列表 53 + 4. 适配并注册进本地 registry 54 + 5. 关闭时清理 MCP session 55 + 56 + ## 故障模型 57 + 58 + - 单个 server 失败不会拖垮整体 59 + - 其他 server 和内置工具可继续工作 60 + - 全部连接失败时仅是不加载 MCP 工具 61 + 62 + ## 安全建议 63 + 64 + - 用 `allowed_tools` 做最小权限 65 + - header token 放 `${ENV_VAR}`,不要明文 66 + - 配合 guard/network 策略做外联控制
+60
web/vitepress/docs/zh/guide/memory.md
··· 1 + --- 2 + title: Memory 3 + description: 基于 WAL 的 memory 架构、注入和回写规则。 4 + --- 5 + 6 + # Memory 7 + 8 + Mister Morph 的 memory 采用“先 WAL 追加,再异步投影”。 9 + 10 + ## 架构 11 + 12 + - 真正的数据源:`memory/log/*.jsonl`(WAL) 13 + - 可读投影: 14 + - `memory/index.md`(长期) 15 + - `memory/YYYY-MM-DD/*.md`(短期) 16 + - 热路径只写 WAL,Markdown 投影异步更新。 17 + 18 + ## 运行流程 19 + 20 + 1. LLM 调用前:准备 memory snapshot 并注入 prompt block 21 + 2. 最终回复后:写入原始 memory event 到 WAL 22 + 3. 投影 worker 回放 WAL 并更新 markdown 23 + 24 + ## 注入条件 25 + 26 + 只有全部满足才注入: 27 + 28 + - `memory.enabled = true` 29 + - `memory.injection.enabled = true` 30 + - runtime 提供有效 `subject_id` 31 + - snapshot 非空 32 + 33 + `memory.injection.max_items` 控制注入条目数上限。 34 + 35 + ## 回写条件 36 + 37 + 只有全部满足才回写: 38 + 39 + - 最终回复需要实际发布 40 + - memory orchestrator 存在 41 + - `subject_id` 存在 42 + 43 + 轻量回复或空输出会跳过回写。 44 + 45 + ## 关键配置 46 + 47 + ```yaml 48 + memory: 49 + enabled: true 50 + dir_name: "memory" 51 + short_term_days: 7 52 + injection: 53 + enabled: true 54 + max_items: 50 55 + ``` 56 + 57 + ## 运维建议 58 + 59 + - 投影损坏可由 WAL 重建。 60 + - 生产环境把 `file_state_dir` 放到持久化存储。
+27
web/vitepress/docs/zh/guide/overview.md
··· 1 + --- 2 + title: 总览 3 + description: 了解 Mister Morph 的能力边界和推荐阅读路径。 4 + --- 5 + 6 + # 总览 7 + 8 + Mister Morph 主要有两种使用方式: 9 + 10 + - CLI 工作流(`mistermorph run`、`telegram`、`slack`、`console serve`) 11 + - Go 内嵌 core(`integration` 包) 12 + 13 + ## 选择你的路径 14 + 15 + - 先快速跑通:看 [快速开始(CLI)](/zh/guide/quickstart-cli) 16 + - 嵌入到 Go 项目:看 [用 Core 快速搭建 Agent](/zh/guide/build-agent-with-core) 17 + - 了解长期运行入口:看 [Runtime 模式](/zh/guide/runtime-modes) 18 + - 上线前治理:看 [安全与 Guard](/zh/guide/security-and-guard) 19 + 20 + ## 仓库结构快照 21 + 22 + - CLI 入口:`cmd/mistermorph/` 23 + - Agent 引擎:`agent/` 24 + - 嵌入 Core:`integration/` 25 + - 内置工具:`tools/` 26 + - Provider 后端:`providers/` 27 + - 详细文档:`docs/`
+117
web/vitepress/docs/zh/guide/prompt-architecture.md
··· 1 + --- 2 + title: Prompt 组织(自顶向下) 3 + description: 从身份层到运行时层,说明系统 Prompt 的拼装顺序。 4 + --- 5 + 6 + # Prompt 组织(自顶向下) 7 + 8 + 下面是当前代码里的真实顺序。 9 + 10 + ## 顶层流程图 11 + 12 + ```text 13 + PromptSpecWithSkills(...) 14 + | 15 + v 16 + ApplyPersonaIdentity(...) 17 + | 18 + v 19 + AppendLocalToolNotesBlock(...) 20 + | 21 + v 22 + AppendPlanCreateGuidanceBlock(...) 23 + | 24 + v 25 + AppendTodoWorkflowBlock(...) 26 + | 27 + v 28 + Channel PromptAugment(...) 29 + | 30 + v 31 + AppendMemorySummariesBlock(...) 32 + | 33 + v 34 + BuildSystemPrompt(...) -> system prompt 文本 35 + ``` 36 + 37 + ## 1) Identity 层 38 + 39 + 基础身份来自 `agent.DefaultPromptSpec()`。 40 + 41 + 随后 runtime 可能用本地 persona 覆盖: 42 + 43 + - `file_state_dir/IDENTITY.md` 44 + - `file_state_dir/SOUL.md` 45 + 46 + 通过 `promptprofile.ApplyPersonaIdentity(...)` 应用。 47 + 48 + ## 2) Skills 层 49 + 50 + `skillsutil.PromptSpecWithSkills(...)` 只注入 skill 元数据: 51 + 52 + - 名称 53 + - `SKILL.md` 路径 54 + - 描述 55 + - `auth_profiles`(如果有) 56 + 57 + 需要具体技能内容时,模型再调用 `read_file` 读取 `SKILL.md`。 58 + 59 + ## 3) Core 策略块 60 + 61 + 在 task runtime 里依次追加: 62 + 63 + 1. 本地工具说明(`SCRIPTS.md`) 64 + 2. `plan_create` 指引 65 + 3. TODO 工作流策略 66 + 67 + ## 4) 通道策略块 68 + 69 + 再由各通道追加自己的策略块: 70 + 71 + - Telegram 72 + - Slack 73 + - LINE 74 + - Lark 75 + 76 + ## 5) Memory 注入块 77 + 78 + 若启用 memory,会再追加 memory summary 块。 79 + 80 + ## 6) 渲染系统 Prompt 81 + 82 + `agent.BuildSystemPrompt(...)` 用 `agent/prompts/system.md` 渲染: 83 + 84 + - identity 85 + - skills 元数据 86 + - 追加 block 87 + - 工具摘要 88 + - 附加规则 89 + 90 + ## 7) 发送给 LLM 的消息顺序 91 + 92 + `engine.Run(...)` 中的顺序: 93 + 94 + ```text 95 + [system] 渲染后的 system prompt 96 + -> 97 + [user] mister_morph_meta(可选) 98 + -> 99 + [history] 非 system 历史消息 100 + -> 101 + [user] current message 或原始 task 102 + ``` 103 + 104 + 1. system prompt 105 + 2. runtime meta(`mister_morph_meta`) 106 + 3. history(非 system) 107 + 4. current message 或原始 task 108 + 109 + ## 实践建议 110 + 111 + 自定义 prompt 时,优先按这个层级做: 112 + 113 + 1. `IDENTITY.md` / `SOUL.md` 114 + 2. `SKILL.md` + `skills.load` 115 + 3. `SCRIPTS.md` 116 + 4. runtime prompt augment 117 + 5. `agent.WithPromptBuilder(...)`(仅在必须完全自定义时)
+40
web/vitepress/docs/zh/guide/quickstart-cli.md
··· 1 + --- 2 + title: 快速开始(CLI) 3 + description: 几分钟内完成可运行的 CLI 配置。 4 + --- 5 + 6 + # 快速开始(CLI) 7 + 8 + ## 1. 安装 9 + 10 + ```bash 11 + go install github.com/quailyquaily/mistermorph/cmd/mistermorph@latest 12 + ``` 13 + 14 + ## 2. 初始化工作目录 15 + 16 + ```bash 17 + mistermorph install 18 + ``` 19 + 20 + ## 3. 设置模型凭据 21 + 22 + ```bash 23 + export MISTER_MORPH_LLM_PROVIDER="openai" 24 + export MISTER_MORPH_LLM_MODEL="gpt-5.4" 25 + export MISTER_MORPH_LLM_API_KEY="YOUR_API_KEY" 26 + ``` 27 + 28 + ## 4. 跑第一个任务 29 + 30 + ```bash 31 + mistermorph run --task "Summarize this repository" 32 + ``` 33 + 34 + ## 5. 调试开关 35 + 36 + ```bash 37 + mistermorph run --inspect-prompt --inspect-request --task "hello" 38 + ``` 39 + 40 + 完整配置项见 [配置模式](/zh/guide/config-patterns) 和 `assets/config/config.example.yaml`。
+43
web/vitepress/docs/zh/guide/runtime-modes.md
··· 1 + --- 2 + title: Runtime 模式 3 + description: 选择 CLI、机器人或控制台运行方式。 4 + --- 5 + 6 + # Runtime 模式 7 + 8 + ## 一次性任务 9 + 10 + ```bash 11 + mistermorph run --task "..." 12 + ``` 13 + 14 + ## Telegram Bot 15 + 16 + ```bash 17 + mistermorph telegram --log-level info 18 + ``` 19 + 20 + ## Slack Bot 21 + 22 + ```bash 23 + mistermorph slack --log-level info 24 + ``` 25 + 26 + ## Console 后端 27 + 28 + ```bash 29 + mistermorph console serve 30 + ``` 31 + 32 + ## 旧版守护进程(按需) 33 + 34 + ```bash 35 + mistermorph serve --server-listen 127.0.0.1:8787 36 + ``` 37 + 38 + 详细接入见: 39 + 40 + - `docs/console.md` 41 + - `docs/slack.md` 42 + - `docs/line.md` 43 + - `docs/lark.md`
+29
web/vitepress/docs/zh/guide/security-and-guard.md
··· 1 + --- 2 + title: 安全与 Guard 3 + description: 生产场景下的安全基线建议。 4 + --- 5 + 6 + # 安全与 Guard 7 + 8 + ## 推荐基线 9 + 10 + - API Key 放环境变量,不提交到仓库 11 + - 用 `guard.network.url_fetch.allowed_url_prefixes` 限制外连 12 + - 保持脱敏开启(`guard.redaction.enabled: true`) 13 + - 长期运行模式下启用 approval 14 + 15 + ## 最小 Guard 配置 16 + 17 + ```yaml 18 + guard: 19 + enabled: true 20 + network: 21 + url_fetch: 22 + allowed_url_prefixes: ["https://"] 23 + deny_private_ips: true 24 + follow_redirects: false 25 + redaction: 26 + enabled: true 27 + ``` 28 + 29 + 上线细节请看 `docs/security.md`。
+63
web/vitepress/docs/zh/guide/skills.md
··· 1 + --- 2 + title: Skills 3 + description: Skill 发现、加载策略与运行时行为。 4 + --- 5 + 6 + # Skills 7 + 8 + Skill 是以 `SKILL.md` 为核心的本地指令包。 9 + 10 + ## Skill 是什么 11 + 12 + Skill 是提示上下文,不是工具。 13 + 14 + - Skill 负责“怎么做” 15 + - Tool 负责“执行动作”(`read_file`、`url_fetch`、`bash` 等) 16 + 17 + ## 发现路径 18 + 19 + 默认根目录: 20 + 21 + - `file_state_dir/skills`(通常是 `~/.morph/skills`) 22 + 23 + 运行时会递归扫描 `SKILL.md`。 24 + 25 + ## 加载控制 26 + 27 + ```yaml 28 + skills: 29 + enabled: true 30 + dir_name: "skills" 31 + load: [] 32 + ``` 33 + 34 + - `enabled: false`:不加载 skill 35 + - `load: []`:加载全部已发现 skill 36 + - `load: ["a", "b"]`:只加载指定 skill 37 + - 未知条目会被忽略 38 + 39 + 任务文本中写 `$skill-name` / `$skill-id` 也会触发加载。 40 + 41 + ## 注入方式 42 + 43 + 系统 Prompt 只注入 skill 元数据: 44 + 45 + - `name` 46 + - `file_path` 47 + - `description` 48 + - `auth_profiles`(可选) 49 + 50 + 真正的 `SKILL.md` 内容需要模型自行 `read_file`。 51 + 52 + ## 常用命令 53 + 54 + ```bash 55 + mistermorph skills list 56 + mistermorph skills install 57 + mistermorph skills install "https://example.com/SKILL.md" 58 + ``` 59 + 60 + ## 安全说明 61 + 62 + - 远程 skill 安装前会审查与确认。 63 + - 安装过程只下载写盘,不会执行脚本。
+23
web/vitepress/package.json
··· 1 + { 2 + "name": "mistermorph-docs", 3 + "private": true, 4 + "type": "module", 5 + "scripts": { 6 + "dev": "vitepress dev docs", 7 + "build": "vitepress build docs", 8 + "serve": "vitepress serve docs" 9 + }, 10 + "devDependencies": { 11 + "quail-ui": "^0.9.4", 12 + "vitepress": "1.6.4", 13 + "vitepress-plugin-llms": "^1.12.0", 14 + "vue": "3.5.30" 15 + }, 16 + "pnpm": { 17 + "peerDependencyRules": { 18 + "ignoreMissing": [ 19 + "@algolia/client-search" 20 + ] 21 + } 22 + } 23 + }
+2522
web/vitepress/pnpm-lock.yaml
··· 1 + lockfileVersion: '9.0' 2 + 3 + settings: 4 + autoInstallPeers: true 5 + excludeLinksFromLockfile: false 6 + 7 + importers: 8 + 9 + .: 10 + devDependencies: 11 + quail-ui: 12 + specifier: ^0.9.4 13 + version: 0.9.4 14 + vitepress: 15 + specifier: 1.6.4 16 + version: 1.6.4(@algolia/client-search@5.49.2)(postcss@8.5.8)(qrcode@1.5.4)(search-insights@2.17.3) 17 + vitepress-plugin-llms: 18 + specifier: ^1.12.0 19 + version: 1.12.0 20 + vue: 21 + specifier: 3.5.30 22 + version: 3.5.30 23 + 24 + packages: 25 + 26 + '@algolia/abtesting@1.15.2': 27 + resolution: {integrity: sha512-rF7vRVE61E0QORw8e2NNdnttcl3jmFMWS9B4hhdga12COe+lMa26bQLfcBn/Nbp9/AF/8gXdaRCPsVns3CnjsA==} 28 + engines: {node: '>= 14.0.0'} 29 + 30 + '@algolia/autocomplete-core@1.17.7': 31 + resolution: {integrity: sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==} 32 + 33 + '@algolia/autocomplete-plugin-algolia-insights@1.17.7': 34 + resolution: {integrity: sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==} 35 + peerDependencies: 36 + search-insights: '>= 1 < 3' 37 + 38 + '@algolia/autocomplete-preset-algolia@1.17.7': 39 + resolution: {integrity: sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==} 40 + peerDependencies: 41 + '@algolia/client-search': '>= 4.9.1 < 6' 42 + algoliasearch: '>= 4.9.1 < 6' 43 + 44 + '@algolia/autocomplete-shared@1.17.7': 45 + resolution: {integrity: sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==} 46 + peerDependencies: 47 + '@algolia/client-search': '>= 4.9.1 < 6' 48 + algoliasearch: '>= 4.9.1 < 6' 49 + 50 + '@algolia/client-abtesting@5.49.2': 51 + resolution: {integrity: sha512-XyvKCm0RRmovMI/ChaAVjTwpZhXdbgt3iZofK914HeEHLqD1MUFFVLz7M0+Ou7F56UkHXwRbpHwb9xBDNopprQ==} 52 + engines: {node: '>= 14.0.0'} 53 + 54 + '@algolia/client-analytics@5.49.2': 55 + resolution: {integrity: sha512-jq/3qvtmj3NijZlhq7A1B0Cl41GfaBpjJxcwukGsYds6aMSCWrEAJ9pUqw/C9B3hAmILYKl7Ljz3N9SFvekD3Q==} 56 + engines: {node: '>= 14.0.0'} 57 + 58 + '@algolia/client-common@5.49.2': 59 + resolution: {integrity: sha512-bn0biLequn3epobCfjUqCxlIlurLr4RHu7RaE4trgN+RDcUq6HCVC3/yqq1hwbNYpVtulnTOJzcaxYlSr1fnuw==} 60 + engines: {node: '>= 14.0.0'} 61 + 62 + '@algolia/client-insights@5.49.2': 63 + resolution: {integrity: sha512-z14wfFs1T3eeYbCArC8pvntAWsPo9f6hnUGoj8IoRUJTwgJiiySECkm8bmmV47/x0oGHfsVn3kBdjMX0yq0sNA==} 64 + engines: {node: '>= 14.0.0'} 65 + 66 + '@algolia/client-personalization@5.49.2': 67 + resolution: {integrity: sha512-GpRf7yuuAX93+Qt0JGEJZwgtL0MFdjFO9n7dn8s2pA9mTjzl0Sc5+uTk1VPbIAuf7xhCP9Mve+URGb6J+EYxgA==} 68 + engines: {node: '>= 14.0.0'} 69 + 70 + '@algolia/client-query-suggestions@5.49.2': 71 + resolution: {integrity: sha512-HZwApmNkp0DiAjZcLYdQLddcG4Agb88OkojiAHGgcm5DVXobT5uSZ9lmyrbw/tmQBJwgu2CNw4zTyXoIB7YbPA==} 72 + engines: {node: '>= 14.0.0'} 73 + 74 + '@algolia/client-search@5.49.2': 75 + resolution: {integrity: sha512-y1IOpG6OSmTpGg/CT0YBb/EAhR2nsC18QWp9Jy8HO9iGySpcwaTvs5kHa17daP3BMTwWyaX9/1tDTDQshZzXdg==} 76 + engines: {node: '>= 14.0.0'} 77 + 78 + '@algolia/ingestion@1.49.2': 79 + resolution: {integrity: sha512-YYJRjaZ2bqk923HxE4um7j/Cm3/xoSkF2HC2ZweOF8cXL3sqnlndSUYmCaxHFjNPWLaSHk2IfssX6J/tdKTULw==} 80 + engines: {node: '>= 14.0.0'} 81 + 82 + '@algolia/monitoring@1.49.2': 83 + resolution: {integrity: sha512-9WgH+Dha39EQQyGKCHlGYnxW/7W19DIrEbCEbnzwAMpGAv1yTWCHMPXHxYa+LcL3eCp2V/5idD1zHNlIKmHRHg==} 84 + engines: {node: '>= 14.0.0'} 85 + 86 + '@algolia/recommend@5.49.2': 87 + resolution: {integrity: sha512-K7Gp5u+JtVYgaVpBxF5rGiM+Ia8SsMdcAJMTDV93rwh00DKNllC19o1g+PwrDjDvyXNrnTEbofzbTs2GLfFyKA==} 88 + engines: {node: '>= 14.0.0'} 89 + 90 + '@algolia/requester-browser-xhr@5.49.2': 91 + resolution: {integrity: sha512-3UhYCcWX6fbtN8ABcxZlhaQEwXFh3CsFtARyyadQShHMPe3mJV9Wel4FpJTa+seugRkbezFz0tt6aPTZSYTBuA==} 92 + engines: {node: '>= 14.0.0'} 93 + 94 + '@algolia/requester-fetch@5.49.2': 95 + resolution: {integrity: sha512-G94VKSGbsr+WjsDDOBe5QDQ82QYgxvpxRGJfCHZBnYKYsy/jv9qGIDb93biza+LJWizQBUtDj7bZzp3QZyzhPQ==} 96 + engines: {node: '>= 14.0.0'} 97 + 98 + '@algolia/requester-node-http@5.49.2': 99 + resolution: {integrity: sha512-UuihBGHafG/ENsrcTGAn5rsOffrCIRuHMOsD85fZGLEY92ate+BMTUqxz60dv5zerh8ZumN4bRm8eW2z9L11jA==} 100 + engines: {node: '>= 14.0.0'} 101 + 102 + '@babel/helper-string-parser@7.27.1': 103 + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} 104 + engines: {node: '>=6.9.0'} 105 + 106 + '@babel/helper-validator-identifier@7.28.5': 107 + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} 108 + engines: {node: '>=6.9.0'} 109 + 110 + '@babel/parser@7.29.2': 111 + resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} 112 + engines: {node: '>=6.0.0'} 113 + hasBin: true 114 + 115 + '@babel/types@7.29.0': 116 + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} 117 + engines: {node: '>=6.9.0'} 118 + 119 + '@docsearch/css@3.8.2': 120 + resolution: {integrity: sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==} 121 + 122 + '@docsearch/js@3.8.2': 123 + resolution: {integrity: sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==} 124 + 125 + '@docsearch/react@3.8.2': 126 + resolution: {integrity: sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==} 127 + peerDependencies: 128 + '@types/react': '>= 16.8.0 < 19.0.0' 129 + react: '>= 16.8.0 < 19.0.0' 130 + react-dom: '>= 16.8.0 < 19.0.0' 131 + search-insights: '>= 1 < 3' 132 + peerDependenciesMeta: 133 + '@types/react': 134 + optional: true 135 + react: 136 + optional: true 137 + react-dom: 138 + optional: true 139 + search-insights: 140 + optional: true 141 + 142 + '@esbuild/aix-ppc64@0.21.5': 143 + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} 144 + engines: {node: '>=12'} 145 + cpu: [ppc64] 146 + os: [aix] 147 + 148 + '@esbuild/android-arm64@0.21.5': 149 + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} 150 + engines: {node: '>=12'} 151 + cpu: [arm64] 152 + os: [android] 153 + 154 + '@esbuild/android-arm@0.21.5': 155 + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} 156 + engines: {node: '>=12'} 157 + cpu: [arm] 158 + os: [android] 159 + 160 + '@esbuild/android-x64@0.21.5': 161 + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} 162 + engines: {node: '>=12'} 163 + cpu: [x64] 164 + os: [android] 165 + 166 + '@esbuild/darwin-arm64@0.21.5': 167 + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} 168 + engines: {node: '>=12'} 169 + cpu: [arm64] 170 + os: [darwin] 171 + 172 + '@esbuild/darwin-x64@0.21.5': 173 + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} 174 + engines: {node: '>=12'} 175 + cpu: [x64] 176 + os: [darwin] 177 + 178 + '@esbuild/freebsd-arm64@0.21.5': 179 + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} 180 + engines: {node: '>=12'} 181 + cpu: [arm64] 182 + os: [freebsd] 183 + 184 + '@esbuild/freebsd-x64@0.21.5': 185 + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} 186 + engines: {node: '>=12'} 187 + cpu: [x64] 188 + os: [freebsd] 189 + 190 + '@esbuild/linux-arm64@0.21.5': 191 + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} 192 + engines: {node: '>=12'} 193 + cpu: [arm64] 194 + os: [linux] 195 + 196 + '@esbuild/linux-arm@0.21.5': 197 + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} 198 + engines: {node: '>=12'} 199 + cpu: [arm] 200 + os: [linux] 201 + 202 + '@esbuild/linux-ia32@0.21.5': 203 + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} 204 + engines: {node: '>=12'} 205 + cpu: [ia32] 206 + os: [linux] 207 + 208 + '@esbuild/linux-loong64@0.21.5': 209 + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} 210 + engines: {node: '>=12'} 211 + cpu: [loong64] 212 + os: [linux] 213 + 214 + '@esbuild/linux-mips64el@0.21.5': 215 + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} 216 + engines: {node: '>=12'} 217 + cpu: [mips64el] 218 + os: [linux] 219 + 220 + '@esbuild/linux-ppc64@0.21.5': 221 + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} 222 + engines: {node: '>=12'} 223 + cpu: [ppc64] 224 + os: [linux] 225 + 226 + '@esbuild/linux-riscv64@0.21.5': 227 + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} 228 + engines: {node: '>=12'} 229 + cpu: [riscv64] 230 + os: [linux] 231 + 232 + '@esbuild/linux-s390x@0.21.5': 233 + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} 234 + engines: {node: '>=12'} 235 + cpu: [s390x] 236 + os: [linux] 237 + 238 + '@esbuild/linux-x64@0.21.5': 239 + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} 240 + engines: {node: '>=12'} 241 + cpu: [x64] 242 + os: [linux] 243 + 244 + '@esbuild/netbsd-x64@0.21.5': 245 + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} 246 + engines: {node: '>=12'} 247 + cpu: [x64] 248 + os: [netbsd] 249 + 250 + '@esbuild/openbsd-x64@0.21.5': 251 + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} 252 + engines: {node: '>=12'} 253 + cpu: [x64] 254 + os: [openbsd] 255 + 256 + '@esbuild/sunos-x64@0.21.5': 257 + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} 258 + engines: {node: '>=12'} 259 + cpu: [x64] 260 + os: [sunos] 261 + 262 + '@esbuild/win32-arm64@0.21.5': 263 + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} 264 + engines: {node: '>=12'} 265 + cpu: [arm64] 266 + os: [win32] 267 + 268 + '@esbuild/win32-ia32@0.21.5': 269 + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} 270 + engines: {node: '>=12'} 271 + cpu: [ia32] 272 + os: [win32] 273 + 274 + '@esbuild/win32-x64@0.21.5': 275 + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} 276 + engines: {node: '>=12'} 277 + cpu: [x64] 278 + os: [win32] 279 + 280 + '@iconify-json/simple-icons@1.2.75': 281 + resolution: {integrity: sha512-KvcCUbvcBWb0sbqLIxHoY8z5/piXY08wcY9gfMhF+ph3AfzGMaSmZFkUY71HSXAljQngXkgs4bdKdekO0HQWvg==} 282 + 283 + '@iconify/types@2.0.0': 284 + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} 285 + 286 + '@jridgewell/sourcemap-codec@1.5.5': 287 + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} 288 + 289 + '@rollup/rollup-android-arm-eabi@4.60.0': 290 + resolution: {integrity: sha512-WOhNW9K8bR3kf4zLxbfg6Pxu2ybOUbB2AjMDHSQx86LIF4rH4Ft7vmMwNt0loO0eonglSNy4cpD3MKXXKQu0/A==} 291 + cpu: [arm] 292 + os: [android] 293 + 294 + '@rollup/rollup-android-arm64@4.60.0': 295 + resolution: {integrity: sha512-u6JHLll5QKRvjciE78bQXDmqRqNs5M/3GVqZeMwvmjaNODJih/WIrJlFVEihvV0MiYFmd+ZyPr9wxOVbPAG2Iw==} 296 + cpu: [arm64] 297 + os: [android] 298 + 299 + '@rollup/rollup-darwin-arm64@4.60.0': 300 + resolution: {integrity: sha512-qEF7CsKKzSRc20Ciu2Zw1wRrBz4g56F7r/vRwY430UPp/nt1x21Q/fpJ9N5l47WWvJlkNCPJz3QRVw008fi7yA==} 301 + cpu: [arm64] 302 + os: [darwin] 303 + 304 + '@rollup/rollup-darwin-x64@4.60.0': 305 + resolution: {integrity: sha512-WADYozJ4QCnXCH4wPB+3FuGmDPoFseVCUrANmA5LWwGmC6FL14BWC7pcq+FstOZv3baGX65tZ378uT6WG8ynTw==} 306 + cpu: [x64] 307 + os: [darwin] 308 + 309 + '@rollup/rollup-freebsd-arm64@4.60.0': 310 + resolution: {integrity: sha512-6b8wGHJlDrGeSE3aH5mGNHBjA0TTkxdoNHik5EkvPHCt351XnigA4pS7Wsj/Eo9Y8RBU6f35cjN9SYmCFBtzxw==} 311 + cpu: [arm64] 312 + os: [freebsd] 313 + 314 + '@rollup/rollup-freebsd-x64@4.60.0': 315 + resolution: {integrity: sha512-h25Ga0t4jaylMB8M/JKAyrvvfxGRjnPQIR8lnCayyzEjEOx2EJIlIiMbhpWxDRKGKF8jbNH01NnN663dH638mA==} 316 + cpu: [x64] 317 + os: [freebsd] 318 + 319 + '@rollup/rollup-linux-arm-gnueabihf@4.60.0': 320 + resolution: {integrity: sha512-RzeBwv0B3qtVBWtcuABtSuCzToo2IEAIQrcyB/b2zMvBWVbjo8bZDjACUpnaafaxhTw2W+imQbP2BD1usasK4g==} 321 + cpu: [arm] 322 + os: [linux] 323 + libc: [glibc] 324 + 325 + '@rollup/rollup-linux-arm-musleabihf@4.60.0': 326 + resolution: {integrity: sha512-Sf7zusNI2CIU1HLzuu9Tc5YGAHEZs5Lu7N1ssJG4Tkw6e0MEsN7NdjUDDfGNHy2IU+ENyWT+L2obgWiguWibWQ==} 327 + cpu: [arm] 328 + os: [linux] 329 + libc: [musl] 330 + 331 + '@rollup/rollup-linux-arm64-gnu@4.60.0': 332 + resolution: {integrity: sha512-DX2x7CMcrJzsE91q7/O02IJQ5/aLkVtYFryqCjduJhUfGKG6yJV8hxaw8pZa93lLEpPTP/ohdN4wFz7yp/ry9A==} 333 + cpu: [arm64] 334 + os: [linux] 335 + libc: [glibc] 336 + 337 + '@rollup/rollup-linux-arm64-musl@4.60.0': 338 + resolution: {integrity: sha512-09EL+yFVbJZlhcQfShpswwRZ0Rg+z/CsSELFCnPt3iK+iqwGsI4zht3secj5vLEs957QvFFXnzAT0FFPIxSrkQ==} 339 + cpu: [arm64] 340 + os: [linux] 341 + libc: [musl] 342 + 343 + '@rollup/rollup-linux-loong64-gnu@4.60.0': 344 + resolution: {integrity: sha512-i9IcCMPr3EXm8EQg5jnja0Zyc1iFxJjZWlb4wr7U2Wx/GrddOuEafxRdMPRYVaXjgbhvqalp6np07hN1w9kAKw==} 345 + cpu: [loong64] 346 + os: [linux] 347 + libc: [glibc] 348 + 349 + '@rollup/rollup-linux-loong64-musl@4.60.0': 350 + resolution: {integrity: sha512-DGzdJK9kyJ+B78MCkWeGnpXJ91tK/iKA6HwHxF4TAlPIY7GXEvMe8hBFRgdrR9Ly4qebR/7gfUs9y2IoaVEyog==} 351 + cpu: [loong64] 352 + os: [linux] 353 + libc: [musl] 354 + 355 + '@rollup/rollup-linux-ppc64-gnu@4.60.0': 356 + resolution: {integrity: sha512-RwpnLsqC8qbS8z1H1AxBA1H6qknR4YpPR9w2XX0vo2Sz10miu57PkNcnHVaZkbqyw/kUWfKMI73jhmfi9BRMUQ==} 357 + cpu: [ppc64] 358 + os: [linux] 359 + libc: [glibc] 360 + 361 + '@rollup/rollup-linux-ppc64-musl@4.60.0': 362 + resolution: {integrity: sha512-Z8pPf54Ly3aqtdWC3G4rFigZgNvd+qJlOE52fmko3KST9SoGfAdSRCwyoyG05q1HrrAblLbk1/PSIV+80/pxLg==} 363 + cpu: [ppc64] 364 + os: [linux] 365 + libc: [musl] 366 + 367 + '@rollup/rollup-linux-riscv64-gnu@4.60.0': 368 + resolution: {integrity: sha512-3a3qQustp3COCGvnP4SvrMHnPQ9d1vzCakQVRTliaz8cIp/wULGjiGpbcqrkv0WrHTEp8bQD/B3HBjzujVWLOA==} 369 + cpu: [riscv64] 370 + os: [linux] 371 + libc: [glibc] 372 + 373 + '@rollup/rollup-linux-riscv64-musl@4.60.0': 374 + resolution: {integrity: sha512-pjZDsVH/1VsghMJ2/kAaxt6dL0psT6ZexQVrijczOf+PeP2BUqTHYejk3l6TlPRydggINOeNRhvpLa0AYpCWSQ==} 375 + cpu: [riscv64] 376 + os: [linux] 377 + libc: [musl] 378 + 379 + '@rollup/rollup-linux-s390x-gnu@4.60.0': 380 + resolution: {integrity: sha512-3ObQs0BhvPgiUVZrN7gqCSvmFuMWvWvsjG5ayJ3Lraqv+2KhOsp+pUbigqbeWqueGIsnn+09HBw27rJ+gYK4VQ==} 381 + cpu: [s390x] 382 + os: [linux] 383 + libc: [glibc] 384 + 385 + '@rollup/rollup-linux-x64-gnu@4.60.0': 386 + resolution: {integrity: sha512-EtylprDtQPdS5rXvAayrNDYoJhIz1/vzN2fEubo3yLE7tfAw+948dO0g4M0vkTVFhKojnF+n6C8bDNe+gDRdTg==} 387 + cpu: [x64] 388 + os: [linux] 389 + libc: [glibc] 390 + 391 + '@rollup/rollup-linux-x64-musl@4.60.0': 392 + resolution: {integrity: sha512-k09oiRCi/bHU9UVFqD17r3eJR9bn03TyKraCrlz5ULFJGdJGi7VOmm9jl44vOJvRJ6P7WuBi/s2A97LxxHGIdw==} 393 + cpu: [x64] 394 + os: [linux] 395 + libc: [musl] 396 + 397 + '@rollup/rollup-openbsd-x64@4.60.0': 398 + resolution: {integrity: sha512-1o/0/pIhozoSaDJoDcec+IVLbnRtQmHwPV730+AOD29lHEEo4F5BEUB24H0OBdhbBBDwIOSuf7vgg0Ywxdfiiw==} 399 + cpu: [x64] 400 + os: [openbsd] 401 + 402 + '@rollup/rollup-openharmony-arm64@4.60.0': 403 + resolution: {integrity: sha512-pESDkos/PDzYwtyzB5p/UoNU/8fJo68vcXM9ZW2V0kjYayj1KaaUfi1NmTUTUpMn4UhU4gTuK8gIaFO4UGuMbA==} 404 + cpu: [arm64] 405 + os: [openharmony] 406 + 407 + '@rollup/rollup-win32-arm64-msvc@4.60.0': 408 + resolution: {integrity: sha512-hj1wFStD7B1YBeYmvY+lWXZ7ey73YGPcViMShYikqKT1GtstIKQAtfUI6yrzPjAy/O7pO0VLXGmUVWXQMaYgTQ==} 409 + cpu: [arm64] 410 + os: [win32] 411 + 412 + '@rollup/rollup-win32-ia32-msvc@4.60.0': 413 + resolution: {integrity: sha512-SyaIPFoxmUPlNDq5EHkTbiKzmSEmq/gOYFI/3HHJ8iS/v1mbugVa7dXUzcJGQfoytp9DJFLhHH4U3/eTy2Bq4w==} 414 + cpu: [ia32] 415 + os: [win32] 416 + 417 + '@rollup/rollup-win32-x64-gnu@4.60.0': 418 + resolution: {integrity: sha512-RdcryEfzZr+lAr5kRm2ucN9aVlCCa2QNq4hXelZxb8GG0NJSazq44Z3PCCc8wISRuCVnGs0lQJVX5Vp6fKA+IA==} 419 + cpu: [x64] 420 + os: [win32] 421 + 422 + '@rollup/rollup-win32-x64-msvc@4.60.0': 423 + resolution: {integrity: sha512-PrsWNQ8BuE00O3Xsx3ALh2Df8fAj9+cvvX9AIA6o4KpATR98c9mud4XtDWVvsEuyia5U4tVSTKygawyJkjm60w==} 424 + cpu: [x64] 425 + os: [win32] 426 + 427 + '@shikijs/core@2.5.0': 428 + resolution: {integrity: sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==} 429 + 430 + '@shikijs/engine-javascript@2.5.0': 431 + resolution: {integrity: sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==} 432 + 433 + '@shikijs/engine-oniguruma@2.5.0': 434 + resolution: {integrity: sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==} 435 + 436 + '@shikijs/langs@2.5.0': 437 + resolution: {integrity: sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==} 438 + 439 + '@shikijs/themes@2.5.0': 440 + resolution: {integrity: sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==} 441 + 442 + '@shikijs/transformers@2.5.0': 443 + resolution: {integrity: sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg==} 444 + 445 + '@shikijs/types@2.5.0': 446 + resolution: {integrity: sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==} 447 + 448 + '@shikijs/vscode-textmate@10.0.2': 449 + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} 450 + 451 + '@types/debug@4.1.13': 452 + resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} 453 + 454 + '@types/estree@1.0.8': 455 + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} 456 + 457 + '@types/hast@3.0.4': 458 + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} 459 + 460 + '@types/linkify-it@5.0.0': 461 + resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} 462 + 463 + '@types/markdown-it@14.1.2': 464 + resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} 465 + 466 + '@types/mdast@4.0.4': 467 + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} 468 + 469 + '@types/mdurl@2.0.0': 470 + resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} 471 + 472 + '@types/ms@2.1.0': 473 + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} 474 + 475 + '@types/unist@3.0.3': 476 + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} 477 + 478 + '@types/web-bluetooth@0.0.21': 479 + resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} 480 + 481 + '@ungap/structured-clone@1.3.0': 482 + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} 483 + 484 + '@vitejs/plugin-vue@5.2.4': 485 + resolution: {integrity: sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==} 486 + engines: {node: ^18.0.0 || >=20.0.0} 487 + peerDependencies: 488 + vite: ^5.0.0 || ^6.0.0 489 + vue: ^3.2.25 490 + 491 + '@vue/compiler-core@3.5.30': 492 + resolution: {integrity: sha512-s3DfdZkcu/qExZ+td75015ljzHc6vE+30cFMGRPROYjqkroYI5NV2X1yAMX9UeyBNWB9MxCfPcsjpLS11nzkkw==} 493 + 494 + '@vue/compiler-dom@3.5.30': 495 + resolution: {integrity: sha512-eCFYESUEVYHhiMuK4SQTldO3RYxyMR/UQL4KdGD1Yrkfdx4m/HYuZ9jSfPdA+nWJY34VWndiYdW/wZXyiPEB9g==} 496 + 497 + '@vue/compiler-sfc@3.5.30': 498 + resolution: {integrity: sha512-LqmFPDn89dtU9vI3wHJnwaV6GfTRD87AjWpTWpyrdVOObVtjIuSeZr181z5C4PmVx/V3j2p+0f7edFKGRMpQ5A==} 499 + 500 + '@vue/compiler-ssr@3.5.30': 501 + resolution: {integrity: sha512-NsYK6OMTnx109PSL2IAyf62JP6EUdk4Dmj6AkWcJGBvN0dQoMYtVekAmdqgTtWQgEJo+Okstbf/1p7qZr5H+bA==} 502 + 503 + '@vue/devtools-api@6.6.4': 504 + resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} 505 + 506 + '@vue/devtools-api@7.7.9': 507 + resolution: {integrity: sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==} 508 + 509 + '@vue/devtools-kit@7.7.9': 510 + resolution: {integrity: sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==} 511 + 512 + '@vue/devtools-shared@7.7.9': 513 + resolution: {integrity: sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==} 514 + 515 + '@vue/reactivity@3.5.30': 516 + resolution: {integrity: sha512-179YNgKATuwj9gB+66snskRDOitDiuOZqkYia7mHKJaidOMo/WJxHKF8DuGc4V4XbYTJANlfEKb0yxTQotnx4Q==} 517 + 518 + '@vue/runtime-core@3.5.30': 519 + resolution: {integrity: sha512-e0Z+8PQsUTdwV8TtEsLzUM7SzC7lQwYKePydb7K2ZnmS6jjND+WJXkmmfh/swYzRyfP1EY3fpdesyYoymCzYfg==} 520 + 521 + '@vue/runtime-dom@3.5.30': 522 + resolution: {integrity: sha512-2UIGakjU4WSQ0T4iwDEW0W7vQj6n7AFn7taqZ9Cvm0Q/RA2FFOziLESrDL4GmtI1wV3jXg5nMoJSYO66egDUBw==} 523 + 524 + '@vue/server-renderer@3.5.30': 525 + resolution: {integrity: sha512-v+R34icapydRwbZRD0sXwtHqrQJv38JuMB4JxbOxd8NEpGLny7cncMp53W9UH/zo4j8eDHjQ1dEJXwzFQknjtQ==} 526 + peerDependencies: 527 + vue: 3.5.30 528 + 529 + '@vue/shared@3.5.30': 530 + resolution: {integrity: sha512-YXgQ7JjaO18NeK2K9VTbDHaFy62WrObMa6XERNfNOkAhD1F1oDSf3ZJ7K6GqabZ0BvSDHajp8qfS5Sa2I9n8uQ==} 531 + 532 + '@vueuse/core@12.8.2': 533 + resolution: {integrity: sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==} 534 + 535 + '@vueuse/integrations@12.8.2': 536 + resolution: {integrity: sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g==} 537 + peerDependencies: 538 + async-validator: ^4 539 + axios: ^1 540 + change-case: ^5 541 + drauu: ^0.4 542 + focus-trap: ^7 543 + fuse.js: ^7 544 + idb-keyval: ^6 545 + jwt-decode: ^4 546 + nprogress: ^0.2 547 + qrcode: ^1.5 548 + sortablejs: ^1 549 + universal-cookie: ^7 550 + peerDependenciesMeta: 551 + async-validator: 552 + optional: true 553 + axios: 554 + optional: true 555 + change-case: 556 + optional: true 557 + drauu: 558 + optional: true 559 + focus-trap: 560 + optional: true 561 + fuse.js: 562 + optional: true 563 + idb-keyval: 564 + optional: true 565 + jwt-decode: 566 + optional: true 567 + nprogress: 568 + optional: true 569 + qrcode: 570 + optional: true 571 + sortablejs: 572 + optional: true 573 + universal-cookie: 574 + optional: true 575 + 576 + '@vueuse/metadata@12.8.2': 577 + resolution: {integrity: sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==} 578 + 579 + '@vueuse/shared@12.8.2': 580 + resolution: {integrity: sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==} 581 + 582 + algoliasearch@5.49.2: 583 + resolution: {integrity: sha512-1K0wtDaRONwfhL4h8bbJ9qTjmY6rhGgRvvagXkMBsAOMNr+3Q2SffHECh9DIuNVrMA1JwA0zCwhyepgBZVakng==} 584 + engines: {node: '>= 14.0.0'} 585 + 586 + ansi-regex@5.0.1: 587 + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 588 + engines: {node: '>=8'} 589 + 590 + ansi-styles@4.3.0: 591 + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 592 + engines: {node: '>=8'} 593 + 594 + argparse@1.0.10: 595 + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 596 + 597 + argparse@2.0.1: 598 + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 599 + 600 + bail@2.0.2: 601 + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} 602 + 603 + balanced-match@4.0.4: 604 + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} 605 + engines: {node: 18 || 20 || >=22} 606 + 607 + birpc@2.9.0: 608 + resolution: {integrity: sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==} 609 + 610 + brace-expansion@5.0.4: 611 + resolution: {integrity: sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==} 612 + engines: {node: 18 || 20 || >=22} 613 + 614 + camelcase@5.3.1: 615 + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} 616 + engines: {node: '>=6'} 617 + 618 + ccount@2.0.1: 619 + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} 620 + 621 + character-entities-html4@2.1.0: 622 + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} 623 + 624 + character-entities-legacy@3.0.0: 625 + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} 626 + 627 + character-entities@2.0.2: 628 + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} 629 + 630 + cliui@6.0.0: 631 + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} 632 + 633 + cliui@8.0.1: 634 + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} 635 + engines: {node: '>=12'} 636 + 637 + color-convert@2.0.1: 638 + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 639 + engines: {node: '>=7.0.0'} 640 + 641 + color-name@1.1.4: 642 + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 643 + 644 + comma-separated-tokens@2.0.3: 645 + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} 646 + 647 + copy-anything@4.0.5: 648 + resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==} 649 + engines: {node: '>=18'} 650 + 651 + csstype@3.2.3: 652 + resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} 653 + 654 + dayjs@1.11.20: 655 + resolution: {integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==} 656 + 657 + debug@4.4.3: 658 + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} 659 + engines: {node: '>=6.0'} 660 + peerDependencies: 661 + supports-color: '*' 662 + peerDependenciesMeta: 663 + supports-color: 664 + optional: true 665 + 666 + decamelize@1.2.0: 667 + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} 668 + engines: {node: '>=0.10.0'} 669 + 670 + decode-named-character-reference@1.3.0: 671 + resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} 672 + 673 + dequal@2.0.3: 674 + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} 675 + engines: {node: '>=6'} 676 + 677 + devlop@1.1.0: 678 + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} 679 + 680 + dijkstrajs@1.0.3: 681 + resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} 682 + 683 + emoji-regex-xs@1.0.0: 684 + resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} 685 + 686 + emoji-regex@8.0.0: 687 + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 688 + 689 + entities@4.5.0: 690 + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} 691 + engines: {node: '>=0.12'} 692 + 693 + entities@7.0.1: 694 + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} 695 + engines: {node: '>=0.12'} 696 + 697 + esbuild@0.21.5: 698 + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} 699 + engines: {node: '>=12'} 700 + hasBin: true 701 + 702 + escalade@3.2.0: 703 + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 704 + engines: {node: '>=6'} 705 + 706 + escape-string-regexp@5.0.0: 707 + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} 708 + engines: {node: '>=12'} 709 + 710 + esprima@4.0.1: 711 + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 712 + engines: {node: '>=4'} 713 + hasBin: true 714 + 715 + estree-walker@2.0.2: 716 + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 717 + 718 + extend-shallow@2.0.1: 719 + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} 720 + engines: {node: '>=0.10.0'} 721 + 722 + extend@3.0.2: 723 + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} 724 + 725 + fault@2.0.1: 726 + resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} 727 + 728 + find-up@4.1.0: 729 + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 730 + engines: {node: '>=8'} 731 + 732 + focus-trap@7.8.0: 733 + resolution: {integrity: sha512-/yNdlIkpWbM0ptxno3ONTuf+2g318kh2ez3KSeZN5dZ8YC6AAmgeWz+GasYYiBJPFaYcSAPeu4GfhUaChzIJXA==} 734 + 735 + format@0.2.2: 736 + resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} 737 + engines: {node: '>=0.4.x'} 738 + 739 + fsevents@2.3.3: 740 + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 741 + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 742 + os: [darwin] 743 + 744 + get-caller-file@2.0.5: 745 + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 746 + engines: {node: 6.* || 8.* || >= 10.*} 747 + 748 + gray-matter@4.0.3: 749 + resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} 750 + engines: {node: '>=6.0'} 751 + 752 + hast-util-to-html@9.0.5: 753 + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} 754 + 755 + hast-util-whitespace@3.0.0: 756 + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} 757 + 758 + hookable@5.5.3: 759 + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} 760 + 761 + html-void-elements@3.0.0: 762 + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} 763 + 764 + is-extendable@0.1.1: 765 + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} 766 + engines: {node: '>=0.10.0'} 767 + 768 + is-fullwidth-code-point@3.0.0: 769 + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 770 + engines: {node: '>=8'} 771 + 772 + is-plain-obj@4.1.0: 773 + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} 774 + engines: {node: '>=12'} 775 + 776 + is-what@5.5.0: 777 + resolution: {integrity: sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==} 778 + engines: {node: '>=18'} 779 + 780 + js-yaml@3.14.2: 781 + resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} 782 + hasBin: true 783 + 784 + kind-of@6.0.3: 785 + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} 786 + engines: {node: '>=0.10.0'} 787 + 788 + linkify-it@5.0.0: 789 + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} 790 + 791 + locate-path@5.0.0: 792 + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 793 + engines: {node: '>=8'} 794 + 795 + longest-streak@3.1.0: 796 + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} 797 + 798 + magic-string@0.30.21: 799 + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} 800 + 801 + mark.js@8.11.1: 802 + resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} 803 + 804 + markdown-it@14.1.1: 805 + resolution: {integrity: sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==} 806 + hasBin: true 807 + 808 + markdown-title@1.0.2: 809 + resolution: {integrity: sha512-MqIQVVkz+uGEHi3TsHx/czcxxCbRIL7sv5K5DnYw/tI+apY54IbPefV/cmgxp6LoJSEx/TqcHdLs/298afG5QQ==} 810 + engines: {node: '>=6'} 811 + 812 + mdast-util-from-markdown@2.0.3: 813 + resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==} 814 + 815 + mdast-util-frontmatter@2.0.1: 816 + resolution: {integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==} 817 + 818 + mdast-util-phrasing@4.1.0: 819 + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} 820 + 821 + mdast-util-to-hast@13.2.1: 822 + resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} 823 + 824 + mdast-util-to-markdown@2.1.2: 825 + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} 826 + 827 + mdast-util-to-string@4.0.0: 828 + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} 829 + 830 + mdurl@2.0.0: 831 + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} 832 + 833 + micromark-core-commonmark@2.0.3: 834 + resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} 835 + 836 + micromark-extension-frontmatter@2.0.0: 837 + resolution: {integrity: sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==} 838 + 839 + micromark-factory-destination@2.0.1: 840 + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} 841 + 842 + micromark-factory-label@2.0.1: 843 + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} 844 + 845 + micromark-factory-space@2.0.1: 846 + resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} 847 + 848 + micromark-factory-title@2.0.1: 849 + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} 850 + 851 + micromark-factory-whitespace@2.0.1: 852 + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} 853 + 854 + micromark-util-character@2.1.1: 855 + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} 856 + 857 + micromark-util-chunked@2.0.1: 858 + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} 859 + 860 + micromark-util-classify-character@2.0.1: 861 + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} 862 + 863 + micromark-util-combine-extensions@2.0.1: 864 + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} 865 + 866 + micromark-util-decode-numeric-character-reference@2.0.2: 867 + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} 868 + 869 + micromark-util-decode-string@2.0.1: 870 + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} 871 + 872 + micromark-util-encode@2.0.1: 873 + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} 874 + 875 + micromark-util-html-tag-name@2.0.1: 876 + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} 877 + 878 + micromark-util-normalize-identifier@2.0.1: 879 + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} 880 + 881 + micromark-util-resolve-all@2.0.1: 882 + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} 883 + 884 + micromark-util-sanitize-uri@2.0.1: 885 + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} 886 + 887 + micromark-util-subtokenize@2.1.0: 888 + resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} 889 + 890 + micromark-util-symbol@2.0.1: 891 + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} 892 + 893 + micromark-util-types@2.0.2: 894 + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} 895 + 896 + micromark@4.0.2: 897 + resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} 898 + 899 + millify@6.1.0: 900 + resolution: {integrity: sha512-H/E3J6t+DQs/F2YgfDhxUVZz/dF8JXPPKTLHL/yHCcLZLtCXJDUaqvhJXQwqOVBvbyNn4T0WjLpIHd7PAw7fBA==} 901 + hasBin: true 902 + 903 + minimatch@10.2.4: 904 + resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} 905 + engines: {node: 18 || 20 || >=22} 906 + 907 + minisearch@7.2.0: 908 + resolution: {integrity: sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==} 909 + 910 + mitt@3.0.1: 911 + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} 912 + 913 + ms@2.1.3: 914 + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 915 + 916 + nanoid@3.3.11: 917 + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} 918 + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 919 + hasBin: true 920 + 921 + oniguruma-to-es@3.1.1: 922 + resolution: {integrity: sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==} 923 + 924 + p-limit@2.3.0: 925 + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 926 + engines: {node: '>=6'} 927 + 928 + p-locate@4.1.0: 929 + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 930 + engines: {node: '>=8'} 931 + 932 + p-try@2.2.0: 933 + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 934 + engines: {node: '>=6'} 935 + 936 + path-exists@4.0.0: 937 + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 938 + engines: {node: '>=8'} 939 + 940 + path-to-regexp@6.3.0: 941 + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} 942 + 943 + perfect-debounce@1.0.0: 944 + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} 945 + 946 + picocolors@1.1.1: 947 + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 948 + 949 + pngjs@5.0.0: 950 + resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} 951 + engines: {node: '>=10.13.0'} 952 + 953 + postcss@8.5.8: 954 + resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} 955 + engines: {node: ^10 || ^12 || >=14} 956 + 957 + preact@10.29.0: 958 + resolution: {integrity: sha512-wSAGyk2bYR1c7t3SZ3jHcM6xy0lcBcDel6lODcs9ME6Th++Dx2KU+6D3HD8wMMKGA8Wpw7OMd3/4RGzYRpzwRg==} 959 + 960 + pretty-bytes@7.1.0: 961 + resolution: {integrity: sha512-nODzvTiYVRGRqAOvE84Vk5JDPyyxsVk0/fbA/bq7RqlnhksGpset09XTxbpvLTIjoaF7K8Z8DG8yHtKGTPSYRw==} 962 + engines: {node: '>=20'} 963 + 964 + property-information@7.1.0: 965 + resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} 966 + 967 + punycode.js@2.3.1: 968 + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} 969 + engines: {node: '>=6'} 970 + 971 + qrcode@1.5.4: 972 + resolution: {integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==} 973 + engines: {node: '>=10.13.0'} 974 + hasBin: true 975 + 976 + quail-js@0.3.28: 977 + resolution: {integrity: sha512-nmA598pJ2BoqUb5/Gd9JBNtWwL0UUs67AIjByoM9BhKhizVzuwLda4J3Etyd51TJpEGAdVHXtg5thOOyITKCMA==} 978 + 979 + quail-ui@0.9.4: 980 + resolution: {integrity: sha512-dYdkdaWTU/bS+9B/6GZMhSMDHE9xGF8SXIiqT43O3nEsF8i92cbKvlbVDARdzoyMJ8xD4ze2BLeExeH+l5W9IA==} 981 + 982 + regex-recursion@6.0.2: 983 + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} 984 + 985 + regex-utilities@2.3.0: 986 + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} 987 + 988 + regex@6.1.0: 989 + resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} 990 + 991 + remark-frontmatter@5.0.0: 992 + resolution: {integrity: sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==} 993 + 994 + remark-parse@11.0.0: 995 + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} 996 + 997 + remark-stringify@11.0.0: 998 + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} 999 + 1000 + remark@15.0.1: 1001 + resolution: {integrity: sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==} 1002 + 1003 + require-directory@2.1.1: 1004 + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 1005 + engines: {node: '>=0.10.0'} 1006 + 1007 + require-main-filename@2.0.0: 1008 + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} 1009 + 1010 + rfdc@1.4.1: 1011 + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} 1012 + 1013 + rollup@4.60.0: 1014 + resolution: {integrity: sha512-yqjxruMGBQJ2gG4HtjZtAfXArHomazDHoFwFFmZZl0r7Pdo7qCIXKqKHZc8yeoMgzJJ+pO6pEEHa+V7uzWlrAQ==} 1015 + engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1016 + hasBin: true 1017 + 1018 + search-insights@2.17.3: 1019 + resolution: {integrity: sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==} 1020 + 1021 + section-matter@1.0.0: 1022 + resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} 1023 + engines: {node: '>=4'} 1024 + 1025 + set-blocking@2.0.0: 1026 + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} 1027 + 1028 + shiki@2.5.0: 1029 + resolution: {integrity: sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==} 1030 + 1031 + source-map-js@1.2.1: 1032 + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1033 + engines: {node: '>=0.10.0'} 1034 + 1035 + space-separated-tokens@2.0.2: 1036 + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} 1037 + 1038 + speakingurl@14.0.1: 1039 + resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} 1040 + engines: {node: '>=0.10.0'} 1041 + 1042 + sprintf-js@1.0.3: 1043 + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} 1044 + 1045 + string-width@4.2.3: 1046 + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1047 + engines: {node: '>=8'} 1048 + 1049 + stringify-entities@4.0.4: 1050 + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} 1051 + 1052 + strip-ansi@6.0.1: 1053 + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1054 + engines: {node: '>=8'} 1055 + 1056 + strip-bom-string@1.0.0: 1057 + resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} 1058 + engines: {node: '>=0.10.0'} 1059 + 1060 + superjson@2.2.6: 1061 + resolution: {integrity: sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==} 1062 + engines: {node: '>=16'} 1063 + 1064 + tabbable@6.4.0: 1065 + resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==} 1066 + 1067 + tokenx@1.3.0: 1068 + resolution: {integrity: sha512-NLdXTEZkKiO0gZuLtMoZKjCXTREXeZZt8nnnNeyoXtNZAfG/GKGSbQtLU5STspc0rMSwcA+UJfWZkbNU01iKmQ==} 1069 + 1070 + trim-lines@3.0.1: 1071 + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} 1072 + 1073 + trough@2.2.0: 1074 + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} 1075 + 1076 + uc.micro@2.1.0: 1077 + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} 1078 + 1079 + unified@11.0.5: 1080 + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} 1081 + 1082 + unist-util-is@6.0.1: 1083 + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} 1084 + 1085 + unist-util-position@5.0.0: 1086 + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} 1087 + 1088 + unist-util-remove@4.0.0: 1089 + resolution: {integrity: sha512-b4gokeGId57UVRX/eVKej5gXqGlc9+trkORhFJpu9raqZkZhU0zm8Doi05+HaiBsMEIJowL+2WtQ5ItjsngPXg==} 1090 + 1091 + unist-util-stringify-position@4.0.0: 1092 + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} 1093 + 1094 + unist-util-visit-parents@6.0.2: 1095 + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} 1096 + 1097 + unist-util-visit@5.1.0: 1098 + resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} 1099 + 1100 + vfile-message@4.0.3: 1101 + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} 1102 + 1103 + vfile@6.0.3: 1104 + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} 1105 + 1106 + vite@5.4.21: 1107 + resolution: {integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==} 1108 + engines: {node: ^18.0.0 || >=20.0.0} 1109 + hasBin: true 1110 + peerDependencies: 1111 + '@types/node': ^18.0.0 || >=20.0.0 1112 + less: '*' 1113 + lightningcss: ^1.21.0 1114 + sass: '*' 1115 + sass-embedded: '*' 1116 + stylus: '*' 1117 + sugarss: '*' 1118 + terser: ^5.4.0 1119 + peerDependenciesMeta: 1120 + '@types/node': 1121 + optional: true 1122 + less: 1123 + optional: true 1124 + lightningcss: 1125 + optional: true 1126 + sass: 1127 + optional: true 1128 + sass-embedded: 1129 + optional: true 1130 + stylus: 1131 + optional: true 1132 + sugarss: 1133 + optional: true 1134 + terser: 1135 + optional: true 1136 + 1137 + vitepress-plugin-llms@1.12.0: 1138 + resolution: {integrity: sha512-zuzL7a8UJuGl46le5cAy/QxKMGlpSylcsLjDDn6BYPc1u+eP3nzoQk9ne9XFBqrE7exoJlIYJELVN8HMgYlFKQ==} 1139 + engines: {node: '>=18.0.0'} 1140 + 1141 + vitepress@1.6.4: 1142 + resolution: {integrity: sha512-+2ym1/+0VVrbhNyRoFFesVvBvHAVMZMK0rw60E3X/5349M1GuVdKeazuksqopEdvkKwKGs21Q729jX81/bkBJg==} 1143 + hasBin: true 1144 + peerDependencies: 1145 + markdown-it-mathjax3: ^4 1146 + postcss: ^8 1147 + peerDependenciesMeta: 1148 + markdown-it-mathjax3: 1149 + optional: true 1150 + postcss: 1151 + optional: true 1152 + 1153 + vue-router@4.6.4: 1154 + resolution: {integrity: sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==} 1155 + peerDependencies: 1156 + vue: ^3.5.0 1157 + 1158 + vue@3.5.30: 1159 + resolution: {integrity: sha512-hTHLc6VNZyzzEH/l7PFGjpcTvUgiaPK5mdLkbjrTeWSRcEfxFrv56g/XckIYlE9ckuobsdwqd5mk2g1sBkMewg==} 1160 + peerDependencies: 1161 + typescript: '*' 1162 + peerDependenciesMeta: 1163 + typescript: 1164 + optional: true 1165 + 1166 + which-module@2.0.1: 1167 + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} 1168 + 1169 + wrap-ansi@6.2.0: 1170 + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} 1171 + engines: {node: '>=8'} 1172 + 1173 + wrap-ansi@7.0.0: 1174 + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1175 + engines: {node: '>=10'} 1176 + 1177 + y18n@4.0.3: 1178 + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} 1179 + 1180 + y18n@5.0.8: 1181 + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 1182 + engines: {node: '>=10'} 1183 + 1184 + yargs-parser@18.1.3: 1185 + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} 1186 + engines: {node: '>=6'} 1187 + 1188 + yargs-parser@21.1.1: 1189 + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 1190 + engines: {node: '>=12'} 1191 + 1192 + yargs@15.4.1: 1193 + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} 1194 + engines: {node: '>=8'} 1195 + 1196 + yargs@17.7.2: 1197 + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} 1198 + engines: {node: '>=12'} 1199 + 1200 + zwitch@2.0.4: 1201 + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} 1202 + 1203 + snapshots: 1204 + 1205 + '@algolia/abtesting@1.15.2': 1206 + dependencies: 1207 + '@algolia/client-common': 5.49.2 1208 + '@algolia/requester-browser-xhr': 5.49.2 1209 + '@algolia/requester-fetch': 5.49.2 1210 + '@algolia/requester-node-http': 5.49.2 1211 + 1212 + '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.49.2)(algoliasearch@5.49.2)(search-insights@2.17.3)': 1213 + dependencies: 1214 + '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.49.2)(algoliasearch@5.49.2)(search-insights@2.17.3) 1215 + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.49.2)(algoliasearch@5.49.2) 1216 + transitivePeerDependencies: 1217 + - '@algolia/client-search' 1218 + - algoliasearch 1219 + - search-insights 1220 + 1221 + '@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.49.2)(algoliasearch@5.49.2)(search-insights@2.17.3)': 1222 + dependencies: 1223 + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.49.2)(algoliasearch@5.49.2) 1224 + search-insights: 2.17.3 1225 + transitivePeerDependencies: 1226 + - '@algolia/client-search' 1227 + - algoliasearch 1228 + 1229 + '@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.49.2)(algoliasearch@5.49.2)': 1230 + dependencies: 1231 + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.49.2)(algoliasearch@5.49.2) 1232 + '@algolia/client-search': 5.49.2 1233 + algoliasearch: 5.49.2 1234 + 1235 + '@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.49.2)(algoliasearch@5.49.2)': 1236 + dependencies: 1237 + '@algolia/client-search': 5.49.2 1238 + algoliasearch: 5.49.2 1239 + 1240 + '@algolia/client-abtesting@5.49.2': 1241 + dependencies: 1242 + '@algolia/client-common': 5.49.2 1243 + '@algolia/requester-browser-xhr': 5.49.2 1244 + '@algolia/requester-fetch': 5.49.2 1245 + '@algolia/requester-node-http': 5.49.2 1246 + 1247 + '@algolia/client-analytics@5.49.2': 1248 + dependencies: 1249 + '@algolia/client-common': 5.49.2 1250 + '@algolia/requester-browser-xhr': 5.49.2 1251 + '@algolia/requester-fetch': 5.49.2 1252 + '@algolia/requester-node-http': 5.49.2 1253 + 1254 + '@algolia/client-common@5.49.2': {} 1255 + 1256 + '@algolia/client-insights@5.49.2': 1257 + dependencies: 1258 + '@algolia/client-common': 5.49.2 1259 + '@algolia/requester-browser-xhr': 5.49.2 1260 + '@algolia/requester-fetch': 5.49.2 1261 + '@algolia/requester-node-http': 5.49.2 1262 + 1263 + '@algolia/client-personalization@5.49.2': 1264 + dependencies: 1265 + '@algolia/client-common': 5.49.2 1266 + '@algolia/requester-browser-xhr': 5.49.2 1267 + '@algolia/requester-fetch': 5.49.2 1268 + '@algolia/requester-node-http': 5.49.2 1269 + 1270 + '@algolia/client-query-suggestions@5.49.2': 1271 + dependencies: 1272 + '@algolia/client-common': 5.49.2 1273 + '@algolia/requester-browser-xhr': 5.49.2 1274 + '@algolia/requester-fetch': 5.49.2 1275 + '@algolia/requester-node-http': 5.49.2 1276 + 1277 + '@algolia/client-search@5.49.2': 1278 + dependencies: 1279 + '@algolia/client-common': 5.49.2 1280 + '@algolia/requester-browser-xhr': 5.49.2 1281 + '@algolia/requester-fetch': 5.49.2 1282 + '@algolia/requester-node-http': 5.49.2 1283 + 1284 + '@algolia/ingestion@1.49.2': 1285 + dependencies: 1286 + '@algolia/client-common': 5.49.2 1287 + '@algolia/requester-browser-xhr': 5.49.2 1288 + '@algolia/requester-fetch': 5.49.2 1289 + '@algolia/requester-node-http': 5.49.2 1290 + 1291 + '@algolia/monitoring@1.49.2': 1292 + dependencies: 1293 + '@algolia/client-common': 5.49.2 1294 + '@algolia/requester-browser-xhr': 5.49.2 1295 + '@algolia/requester-fetch': 5.49.2 1296 + '@algolia/requester-node-http': 5.49.2 1297 + 1298 + '@algolia/recommend@5.49.2': 1299 + dependencies: 1300 + '@algolia/client-common': 5.49.2 1301 + '@algolia/requester-browser-xhr': 5.49.2 1302 + '@algolia/requester-fetch': 5.49.2 1303 + '@algolia/requester-node-http': 5.49.2 1304 + 1305 + '@algolia/requester-browser-xhr@5.49.2': 1306 + dependencies: 1307 + '@algolia/client-common': 5.49.2 1308 + 1309 + '@algolia/requester-fetch@5.49.2': 1310 + dependencies: 1311 + '@algolia/client-common': 5.49.2 1312 + 1313 + '@algolia/requester-node-http@5.49.2': 1314 + dependencies: 1315 + '@algolia/client-common': 5.49.2 1316 + 1317 + '@babel/helper-string-parser@7.27.1': {} 1318 + 1319 + '@babel/helper-validator-identifier@7.28.5': {} 1320 + 1321 + '@babel/parser@7.29.2': 1322 + dependencies: 1323 + '@babel/types': 7.29.0 1324 + 1325 + '@babel/types@7.29.0': 1326 + dependencies: 1327 + '@babel/helper-string-parser': 7.27.1 1328 + '@babel/helper-validator-identifier': 7.28.5 1329 + 1330 + '@docsearch/css@3.8.2': {} 1331 + 1332 + '@docsearch/js@3.8.2(@algolia/client-search@5.49.2)(search-insights@2.17.3)': 1333 + dependencies: 1334 + '@docsearch/react': 3.8.2(@algolia/client-search@5.49.2)(search-insights@2.17.3) 1335 + preact: 10.29.0 1336 + transitivePeerDependencies: 1337 + - '@algolia/client-search' 1338 + - '@types/react' 1339 + - react 1340 + - react-dom 1341 + - search-insights 1342 + 1343 + '@docsearch/react@3.8.2(@algolia/client-search@5.49.2)(search-insights@2.17.3)': 1344 + dependencies: 1345 + '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.49.2)(algoliasearch@5.49.2)(search-insights@2.17.3) 1346 + '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.49.2)(algoliasearch@5.49.2) 1347 + '@docsearch/css': 3.8.2 1348 + algoliasearch: 5.49.2 1349 + optionalDependencies: 1350 + search-insights: 2.17.3 1351 + transitivePeerDependencies: 1352 + - '@algolia/client-search' 1353 + 1354 + '@esbuild/aix-ppc64@0.21.5': 1355 + optional: true 1356 + 1357 + '@esbuild/android-arm64@0.21.5': 1358 + optional: true 1359 + 1360 + '@esbuild/android-arm@0.21.5': 1361 + optional: true 1362 + 1363 + '@esbuild/android-x64@0.21.5': 1364 + optional: true 1365 + 1366 + '@esbuild/darwin-arm64@0.21.5': 1367 + optional: true 1368 + 1369 + '@esbuild/darwin-x64@0.21.5': 1370 + optional: true 1371 + 1372 + '@esbuild/freebsd-arm64@0.21.5': 1373 + optional: true 1374 + 1375 + '@esbuild/freebsd-x64@0.21.5': 1376 + optional: true 1377 + 1378 + '@esbuild/linux-arm64@0.21.5': 1379 + optional: true 1380 + 1381 + '@esbuild/linux-arm@0.21.5': 1382 + optional: true 1383 + 1384 + '@esbuild/linux-ia32@0.21.5': 1385 + optional: true 1386 + 1387 + '@esbuild/linux-loong64@0.21.5': 1388 + optional: true 1389 + 1390 + '@esbuild/linux-mips64el@0.21.5': 1391 + optional: true 1392 + 1393 + '@esbuild/linux-ppc64@0.21.5': 1394 + optional: true 1395 + 1396 + '@esbuild/linux-riscv64@0.21.5': 1397 + optional: true 1398 + 1399 + '@esbuild/linux-s390x@0.21.5': 1400 + optional: true 1401 + 1402 + '@esbuild/linux-x64@0.21.5': 1403 + optional: true 1404 + 1405 + '@esbuild/netbsd-x64@0.21.5': 1406 + optional: true 1407 + 1408 + '@esbuild/openbsd-x64@0.21.5': 1409 + optional: true 1410 + 1411 + '@esbuild/sunos-x64@0.21.5': 1412 + optional: true 1413 + 1414 + '@esbuild/win32-arm64@0.21.5': 1415 + optional: true 1416 + 1417 + '@esbuild/win32-ia32@0.21.5': 1418 + optional: true 1419 + 1420 + '@esbuild/win32-x64@0.21.5': 1421 + optional: true 1422 + 1423 + '@iconify-json/simple-icons@1.2.75': 1424 + dependencies: 1425 + '@iconify/types': 2.0.0 1426 + 1427 + '@iconify/types@2.0.0': {} 1428 + 1429 + '@jridgewell/sourcemap-codec@1.5.5': {} 1430 + 1431 + '@rollup/rollup-android-arm-eabi@4.60.0': 1432 + optional: true 1433 + 1434 + '@rollup/rollup-android-arm64@4.60.0': 1435 + optional: true 1436 + 1437 + '@rollup/rollup-darwin-arm64@4.60.0': 1438 + optional: true 1439 + 1440 + '@rollup/rollup-darwin-x64@4.60.0': 1441 + optional: true 1442 + 1443 + '@rollup/rollup-freebsd-arm64@4.60.0': 1444 + optional: true 1445 + 1446 + '@rollup/rollup-freebsd-x64@4.60.0': 1447 + optional: true 1448 + 1449 + '@rollup/rollup-linux-arm-gnueabihf@4.60.0': 1450 + optional: true 1451 + 1452 + '@rollup/rollup-linux-arm-musleabihf@4.60.0': 1453 + optional: true 1454 + 1455 + '@rollup/rollup-linux-arm64-gnu@4.60.0': 1456 + optional: true 1457 + 1458 + '@rollup/rollup-linux-arm64-musl@4.60.0': 1459 + optional: true 1460 + 1461 + '@rollup/rollup-linux-loong64-gnu@4.60.0': 1462 + optional: true 1463 + 1464 + '@rollup/rollup-linux-loong64-musl@4.60.0': 1465 + optional: true 1466 + 1467 + '@rollup/rollup-linux-ppc64-gnu@4.60.0': 1468 + optional: true 1469 + 1470 + '@rollup/rollup-linux-ppc64-musl@4.60.0': 1471 + optional: true 1472 + 1473 + '@rollup/rollup-linux-riscv64-gnu@4.60.0': 1474 + optional: true 1475 + 1476 + '@rollup/rollup-linux-riscv64-musl@4.60.0': 1477 + optional: true 1478 + 1479 + '@rollup/rollup-linux-s390x-gnu@4.60.0': 1480 + optional: true 1481 + 1482 + '@rollup/rollup-linux-x64-gnu@4.60.0': 1483 + optional: true 1484 + 1485 + '@rollup/rollup-linux-x64-musl@4.60.0': 1486 + optional: true 1487 + 1488 + '@rollup/rollup-openbsd-x64@4.60.0': 1489 + optional: true 1490 + 1491 + '@rollup/rollup-openharmony-arm64@4.60.0': 1492 + optional: true 1493 + 1494 + '@rollup/rollup-win32-arm64-msvc@4.60.0': 1495 + optional: true 1496 + 1497 + '@rollup/rollup-win32-ia32-msvc@4.60.0': 1498 + optional: true 1499 + 1500 + '@rollup/rollup-win32-x64-gnu@4.60.0': 1501 + optional: true 1502 + 1503 + '@rollup/rollup-win32-x64-msvc@4.60.0': 1504 + optional: true 1505 + 1506 + '@shikijs/core@2.5.0': 1507 + dependencies: 1508 + '@shikijs/engine-javascript': 2.5.0 1509 + '@shikijs/engine-oniguruma': 2.5.0 1510 + '@shikijs/types': 2.5.0 1511 + '@shikijs/vscode-textmate': 10.0.2 1512 + '@types/hast': 3.0.4 1513 + hast-util-to-html: 9.0.5 1514 + 1515 + '@shikijs/engine-javascript@2.5.0': 1516 + dependencies: 1517 + '@shikijs/types': 2.5.0 1518 + '@shikijs/vscode-textmate': 10.0.2 1519 + oniguruma-to-es: 3.1.1 1520 + 1521 + '@shikijs/engine-oniguruma@2.5.0': 1522 + dependencies: 1523 + '@shikijs/types': 2.5.0 1524 + '@shikijs/vscode-textmate': 10.0.2 1525 + 1526 + '@shikijs/langs@2.5.0': 1527 + dependencies: 1528 + '@shikijs/types': 2.5.0 1529 + 1530 + '@shikijs/themes@2.5.0': 1531 + dependencies: 1532 + '@shikijs/types': 2.5.0 1533 + 1534 + '@shikijs/transformers@2.5.0': 1535 + dependencies: 1536 + '@shikijs/core': 2.5.0 1537 + '@shikijs/types': 2.5.0 1538 + 1539 + '@shikijs/types@2.5.0': 1540 + dependencies: 1541 + '@shikijs/vscode-textmate': 10.0.2 1542 + '@types/hast': 3.0.4 1543 + 1544 + '@shikijs/vscode-textmate@10.0.2': {} 1545 + 1546 + '@types/debug@4.1.13': 1547 + dependencies: 1548 + '@types/ms': 2.1.0 1549 + 1550 + '@types/estree@1.0.8': {} 1551 + 1552 + '@types/hast@3.0.4': 1553 + dependencies: 1554 + '@types/unist': 3.0.3 1555 + 1556 + '@types/linkify-it@5.0.0': {} 1557 + 1558 + '@types/markdown-it@14.1.2': 1559 + dependencies: 1560 + '@types/linkify-it': 5.0.0 1561 + '@types/mdurl': 2.0.0 1562 + 1563 + '@types/mdast@4.0.4': 1564 + dependencies: 1565 + '@types/unist': 3.0.3 1566 + 1567 + '@types/mdurl@2.0.0': {} 1568 + 1569 + '@types/ms@2.1.0': {} 1570 + 1571 + '@types/unist@3.0.3': {} 1572 + 1573 + '@types/web-bluetooth@0.0.21': {} 1574 + 1575 + '@ungap/structured-clone@1.3.0': {} 1576 + 1577 + '@vitejs/plugin-vue@5.2.4(vite@5.4.21)(vue@3.5.30)': 1578 + dependencies: 1579 + vite: 5.4.21 1580 + vue: 3.5.30 1581 + 1582 + '@vue/compiler-core@3.5.30': 1583 + dependencies: 1584 + '@babel/parser': 7.29.2 1585 + '@vue/shared': 3.5.30 1586 + entities: 7.0.1 1587 + estree-walker: 2.0.2 1588 + source-map-js: 1.2.1 1589 + 1590 + '@vue/compiler-dom@3.5.30': 1591 + dependencies: 1592 + '@vue/compiler-core': 3.5.30 1593 + '@vue/shared': 3.5.30 1594 + 1595 + '@vue/compiler-sfc@3.5.30': 1596 + dependencies: 1597 + '@babel/parser': 7.29.2 1598 + '@vue/compiler-core': 3.5.30 1599 + '@vue/compiler-dom': 3.5.30 1600 + '@vue/compiler-ssr': 3.5.30 1601 + '@vue/shared': 3.5.30 1602 + estree-walker: 2.0.2 1603 + magic-string: 0.30.21 1604 + postcss: 8.5.8 1605 + source-map-js: 1.2.1 1606 + 1607 + '@vue/compiler-ssr@3.5.30': 1608 + dependencies: 1609 + '@vue/compiler-dom': 3.5.30 1610 + '@vue/shared': 3.5.30 1611 + 1612 + '@vue/devtools-api@6.6.4': {} 1613 + 1614 + '@vue/devtools-api@7.7.9': 1615 + dependencies: 1616 + '@vue/devtools-kit': 7.7.9 1617 + 1618 + '@vue/devtools-kit@7.7.9': 1619 + dependencies: 1620 + '@vue/devtools-shared': 7.7.9 1621 + birpc: 2.9.0 1622 + hookable: 5.5.3 1623 + mitt: 3.0.1 1624 + perfect-debounce: 1.0.0 1625 + speakingurl: 14.0.1 1626 + superjson: 2.2.6 1627 + 1628 + '@vue/devtools-shared@7.7.9': 1629 + dependencies: 1630 + rfdc: 1.4.1 1631 + 1632 + '@vue/reactivity@3.5.30': 1633 + dependencies: 1634 + '@vue/shared': 3.5.30 1635 + 1636 + '@vue/runtime-core@3.5.30': 1637 + dependencies: 1638 + '@vue/reactivity': 3.5.30 1639 + '@vue/shared': 3.5.30 1640 + 1641 + '@vue/runtime-dom@3.5.30': 1642 + dependencies: 1643 + '@vue/reactivity': 3.5.30 1644 + '@vue/runtime-core': 3.5.30 1645 + '@vue/shared': 3.5.30 1646 + csstype: 3.2.3 1647 + 1648 + '@vue/server-renderer@3.5.30(vue@3.5.30)': 1649 + dependencies: 1650 + '@vue/compiler-ssr': 3.5.30 1651 + '@vue/shared': 3.5.30 1652 + vue: 3.5.30 1653 + 1654 + '@vue/shared@3.5.30': {} 1655 + 1656 + '@vueuse/core@12.8.2': 1657 + dependencies: 1658 + '@types/web-bluetooth': 0.0.21 1659 + '@vueuse/metadata': 12.8.2 1660 + '@vueuse/shared': 12.8.2 1661 + vue: 3.5.30 1662 + transitivePeerDependencies: 1663 + - typescript 1664 + 1665 + '@vueuse/integrations@12.8.2(focus-trap@7.8.0)(qrcode@1.5.4)': 1666 + dependencies: 1667 + '@vueuse/core': 12.8.2 1668 + '@vueuse/shared': 12.8.2 1669 + vue: 3.5.30 1670 + optionalDependencies: 1671 + focus-trap: 7.8.0 1672 + qrcode: 1.5.4 1673 + transitivePeerDependencies: 1674 + - typescript 1675 + 1676 + '@vueuse/metadata@12.8.2': {} 1677 + 1678 + '@vueuse/shared@12.8.2': 1679 + dependencies: 1680 + vue: 3.5.30 1681 + transitivePeerDependencies: 1682 + - typescript 1683 + 1684 + algoliasearch@5.49.2: 1685 + dependencies: 1686 + '@algolia/abtesting': 1.15.2 1687 + '@algolia/client-abtesting': 5.49.2 1688 + '@algolia/client-analytics': 5.49.2 1689 + '@algolia/client-common': 5.49.2 1690 + '@algolia/client-insights': 5.49.2 1691 + '@algolia/client-personalization': 5.49.2 1692 + '@algolia/client-query-suggestions': 5.49.2 1693 + '@algolia/client-search': 5.49.2 1694 + '@algolia/ingestion': 1.49.2 1695 + '@algolia/monitoring': 1.49.2 1696 + '@algolia/recommend': 5.49.2 1697 + '@algolia/requester-browser-xhr': 5.49.2 1698 + '@algolia/requester-fetch': 5.49.2 1699 + '@algolia/requester-node-http': 5.49.2 1700 + 1701 + ansi-regex@5.0.1: {} 1702 + 1703 + ansi-styles@4.3.0: 1704 + dependencies: 1705 + color-convert: 2.0.1 1706 + 1707 + argparse@1.0.10: 1708 + dependencies: 1709 + sprintf-js: 1.0.3 1710 + 1711 + argparse@2.0.1: {} 1712 + 1713 + bail@2.0.2: {} 1714 + 1715 + balanced-match@4.0.4: {} 1716 + 1717 + birpc@2.9.0: {} 1718 + 1719 + brace-expansion@5.0.4: 1720 + dependencies: 1721 + balanced-match: 4.0.4 1722 + 1723 + camelcase@5.3.1: {} 1724 + 1725 + ccount@2.0.1: {} 1726 + 1727 + character-entities-html4@2.1.0: {} 1728 + 1729 + character-entities-legacy@3.0.0: {} 1730 + 1731 + character-entities@2.0.2: {} 1732 + 1733 + cliui@6.0.0: 1734 + dependencies: 1735 + string-width: 4.2.3 1736 + strip-ansi: 6.0.1 1737 + wrap-ansi: 6.2.0 1738 + 1739 + cliui@8.0.1: 1740 + dependencies: 1741 + string-width: 4.2.3 1742 + strip-ansi: 6.0.1 1743 + wrap-ansi: 7.0.0 1744 + 1745 + color-convert@2.0.1: 1746 + dependencies: 1747 + color-name: 1.1.4 1748 + 1749 + color-name@1.1.4: {} 1750 + 1751 + comma-separated-tokens@2.0.3: {} 1752 + 1753 + copy-anything@4.0.5: 1754 + dependencies: 1755 + is-what: 5.5.0 1756 + 1757 + csstype@3.2.3: {} 1758 + 1759 + dayjs@1.11.20: {} 1760 + 1761 + debug@4.4.3: 1762 + dependencies: 1763 + ms: 2.1.3 1764 + 1765 + decamelize@1.2.0: {} 1766 + 1767 + decode-named-character-reference@1.3.0: 1768 + dependencies: 1769 + character-entities: 2.0.2 1770 + 1771 + dequal@2.0.3: {} 1772 + 1773 + devlop@1.1.0: 1774 + dependencies: 1775 + dequal: 2.0.3 1776 + 1777 + dijkstrajs@1.0.3: {} 1778 + 1779 + emoji-regex-xs@1.0.0: {} 1780 + 1781 + emoji-regex@8.0.0: {} 1782 + 1783 + entities@4.5.0: {} 1784 + 1785 + entities@7.0.1: {} 1786 + 1787 + esbuild@0.21.5: 1788 + optionalDependencies: 1789 + '@esbuild/aix-ppc64': 0.21.5 1790 + '@esbuild/android-arm': 0.21.5 1791 + '@esbuild/android-arm64': 0.21.5 1792 + '@esbuild/android-x64': 0.21.5 1793 + '@esbuild/darwin-arm64': 0.21.5 1794 + '@esbuild/darwin-x64': 0.21.5 1795 + '@esbuild/freebsd-arm64': 0.21.5 1796 + '@esbuild/freebsd-x64': 0.21.5 1797 + '@esbuild/linux-arm': 0.21.5 1798 + '@esbuild/linux-arm64': 0.21.5 1799 + '@esbuild/linux-ia32': 0.21.5 1800 + '@esbuild/linux-loong64': 0.21.5 1801 + '@esbuild/linux-mips64el': 0.21.5 1802 + '@esbuild/linux-ppc64': 0.21.5 1803 + '@esbuild/linux-riscv64': 0.21.5 1804 + '@esbuild/linux-s390x': 0.21.5 1805 + '@esbuild/linux-x64': 0.21.5 1806 + '@esbuild/netbsd-x64': 0.21.5 1807 + '@esbuild/openbsd-x64': 0.21.5 1808 + '@esbuild/sunos-x64': 0.21.5 1809 + '@esbuild/win32-arm64': 0.21.5 1810 + '@esbuild/win32-ia32': 0.21.5 1811 + '@esbuild/win32-x64': 0.21.5 1812 + 1813 + escalade@3.2.0: {} 1814 + 1815 + escape-string-regexp@5.0.0: {} 1816 + 1817 + esprima@4.0.1: {} 1818 + 1819 + estree-walker@2.0.2: {} 1820 + 1821 + extend-shallow@2.0.1: 1822 + dependencies: 1823 + is-extendable: 0.1.1 1824 + 1825 + extend@3.0.2: {} 1826 + 1827 + fault@2.0.1: 1828 + dependencies: 1829 + format: 0.2.2 1830 + 1831 + find-up@4.1.0: 1832 + dependencies: 1833 + locate-path: 5.0.0 1834 + path-exists: 4.0.0 1835 + 1836 + focus-trap@7.8.0: 1837 + dependencies: 1838 + tabbable: 6.4.0 1839 + 1840 + format@0.2.2: {} 1841 + 1842 + fsevents@2.3.3: 1843 + optional: true 1844 + 1845 + get-caller-file@2.0.5: {} 1846 + 1847 + gray-matter@4.0.3: 1848 + dependencies: 1849 + js-yaml: 3.14.2 1850 + kind-of: 6.0.3 1851 + section-matter: 1.0.0 1852 + strip-bom-string: 1.0.0 1853 + 1854 + hast-util-to-html@9.0.5: 1855 + dependencies: 1856 + '@types/hast': 3.0.4 1857 + '@types/unist': 3.0.3 1858 + ccount: 2.0.1 1859 + comma-separated-tokens: 2.0.3 1860 + hast-util-whitespace: 3.0.0 1861 + html-void-elements: 3.0.0 1862 + mdast-util-to-hast: 13.2.1 1863 + property-information: 7.1.0 1864 + space-separated-tokens: 2.0.2 1865 + stringify-entities: 4.0.4 1866 + zwitch: 2.0.4 1867 + 1868 + hast-util-whitespace@3.0.0: 1869 + dependencies: 1870 + '@types/hast': 3.0.4 1871 + 1872 + hookable@5.5.3: {} 1873 + 1874 + html-void-elements@3.0.0: {} 1875 + 1876 + is-extendable@0.1.1: {} 1877 + 1878 + is-fullwidth-code-point@3.0.0: {} 1879 + 1880 + is-plain-obj@4.1.0: {} 1881 + 1882 + is-what@5.5.0: {} 1883 + 1884 + js-yaml@3.14.2: 1885 + dependencies: 1886 + argparse: 1.0.10 1887 + esprima: 4.0.1 1888 + 1889 + kind-of@6.0.3: {} 1890 + 1891 + linkify-it@5.0.0: 1892 + dependencies: 1893 + uc.micro: 2.1.0 1894 + 1895 + locate-path@5.0.0: 1896 + dependencies: 1897 + p-locate: 4.1.0 1898 + 1899 + longest-streak@3.1.0: {} 1900 + 1901 + magic-string@0.30.21: 1902 + dependencies: 1903 + '@jridgewell/sourcemap-codec': 1.5.5 1904 + 1905 + mark.js@8.11.1: {} 1906 + 1907 + markdown-it@14.1.1: 1908 + dependencies: 1909 + argparse: 2.0.1 1910 + entities: 4.5.0 1911 + linkify-it: 5.0.0 1912 + mdurl: 2.0.0 1913 + punycode.js: 2.3.1 1914 + uc.micro: 2.1.0 1915 + 1916 + markdown-title@1.0.2: {} 1917 + 1918 + mdast-util-from-markdown@2.0.3: 1919 + dependencies: 1920 + '@types/mdast': 4.0.4 1921 + '@types/unist': 3.0.3 1922 + decode-named-character-reference: 1.3.0 1923 + devlop: 1.1.0 1924 + mdast-util-to-string: 4.0.0 1925 + micromark: 4.0.2 1926 + micromark-util-decode-numeric-character-reference: 2.0.2 1927 + micromark-util-decode-string: 2.0.1 1928 + micromark-util-normalize-identifier: 2.0.1 1929 + micromark-util-symbol: 2.0.1 1930 + micromark-util-types: 2.0.2 1931 + unist-util-stringify-position: 4.0.0 1932 + transitivePeerDependencies: 1933 + - supports-color 1934 + 1935 + mdast-util-frontmatter@2.0.1: 1936 + dependencies: 1937 + '@types/mdast': 4.0.4 1938 + devlop: 1.1.0 1939 + escape-string-regexp: 5.0.0 1940 + mdast-util-from-markdown: 2.0.3 1941 + mdast-util-to-markdown: 2.1.2 1942 + micromark-extension-frontmatter: 2.0.0 1943 + transitivePeerDependencies: 1944 + - supports-color 1945 + 1946 + mdast-util-phrasing@4.1.0: 1947 + dependencies: 1948 + '@types/mdast': 4.0.4 1949 + unist-util-is: 6.0.1 1950 + 1951 + mdast-util-to-hast@13.2.1: 1952 + dependencies: 1953 + '@types/hast': 3.0.4 1954 + '@types/mdast': 4.0.4 1955 + '@ungap/structured-clone': 1.3.0 1956 + devlop: 1.1.0 1957 + micromark-util-sanitize-uri: 2.0.1 1958 + trim-lines: 3.0.1 1959 + unist-util-position: 5.0.0 1960 + unist-util-visit: 5.1.0 1961 + vfile: 6.0.3 1962 + 1963 + mdast-util-to-markdown@2.1.2: 1964 + dependencies: 1965 + '@types/mdast': 4.0.4 1966 + '@types/unist': 3.0.3 1967 + longest-streak: 3.1.0 1968 + mdast-util-phrasing: 4.1.0 1969 + mdast-util-to-string: 4.0.0 1970 + micromark-util-classify-character: 2.0.1 1971 + micromark-util-decode-string: 2.0.1 1972 + unist-util-visit: 5.1.0 1973 + zwitch: 2.0.4 1974 + 1975 + mdast-util-to-string@4.0.0: 1976 + dependencies: 1977 + '@types/mdast': 4.0.4 1978 + 1979 + mdurl@2.0.0: {} 1980 + 1981 + micromark-core-commonmark@2.0.3: 1982 + dependencies: 1983 + decode-named-character-reference: 1.3.0 1984 + devlop: 1.1.0 1985 + micromark-factory-destination: 2.0.1 1986 + micromark-factory-label: 2.0.1 1987 + micromark-factory-space: 2.0.1 1988 + micromark-factory-title: 2.0.1 1989 + micromark-factory-whitespace: 2.0.1 1990 + micromark-util-character: 2.1.1 1991 + micromark-util-chunked: 2.0.1 1992 + micromark-util-classify-character: 2.0.1 1993 + micromark-util-html-tag-name: 2.0.1 1994 + micromark-util-normalize-identifier: 2.0.1 1995 + micromark-util-resolve-all: 2.0.1 1996 + micromark-util-subtokenize: 2.1.0 1997 + micromark-util-symbol: 2.0.1 1998 + micromark-util-types: 2.0.2 1999 + 2000 + micromark-extension-frontmatter@2.0.0: 2001 + dependencies: 2002 + fault: 2.0.1 2003 + micromark-util-character: 2.1.1 2004 + micromark-util-symbol: 2.0.1 2005 + micromark-util-types: 2.0.2 2006 + 2007 + micromark-factory-destination@2.0.1: 2008 + dependencies: 2009 + micromark-util-character: 2.1.1 2010 + micromark-util-symbol: 2.0.1 2011 + micromark-util-types: 2.0.2 2012 + 2013 + micromark-factory-label@2.0.1: 2014 + dependencies: 2015 + devlop: 1.1.0 2016 + micromark-util-character: 2.1.1 2017 + micromark-util-symbol: 2.0.1 2018 + micromark-util-types: 2.0.2 2019 + 2020 + micromark-factory-space@2.0.1: 2021 + dependencies: 2022 + micromark-util-character: 2.1.1 2023 + micromark-util-types: 2.0.2 2024 + 2025 + micromark-factory-title@2.0.1: 2026 + dependencies: 2027 + micromark-factory-space: 2.0.1 2028 + micromark-util-character: 2.1.1 2029 + micromark-util-symbol: 2.0.1 2030 + micromark-util-types: 2.0.2 2031 + 2032 + micromark-factory-whitespace@2.0.1: 2033 + dependencies: 2034 + micromark-factory-space: 2.0.1 2035 + micromark-util-character: 2.1.1 2036 + micromark-util-symbol: 2.0.1 2037 + micromark-util-types: 2.0.2 2038 + 2039 + micromark-util-character@2.1.1: 2040 + dependencies: 2041 + micromark-util-symbol: 2.0.1 2042 + micromark-util-types: 2.0.2 2043 + 2044 + micromark-util-chunked@2.0.1: 2045 + dependencies: 2046 + micromark-util-symbol: 2.0.1 2047 + 2048 + micromark-util-classify-character@2.0.1: 2049 + dependencies: 2050 + micromark-util-character: 2.1.1 2051 + micromark-util-symbol: 2.0.1 2052 + micromark-util-types: 2.0.2 2053 + 2054 + micromark-util-combine-extensions@2.0.1: 2055 + dependencies: 2056 + micromark-util-chunked: 2.0.1 2057 + micromark-util-types: 2.0.2 2058 + 2059 + micromark-util-decode-numeric-character-reference@2.0.2: 2060 + dependencies: 2061 + micromark-util-symbol: 2.0.1 2062 + 2063 + micromark-util-decode-string@2.0.1: 2064 + dependencies: 2065 + decode-named-character-reference: 1.3.0 2066 + micromark-util-character: 2.1.1 2067 + micromark-util-decode-numeric-character-reference: 2.0.2 2068 + micromark-util-symbol: 2.0.1 2069 + 2070 + micromark-util-encode@2.0.1: {} 2071 + 2072 + micromark-util-html-tag-name@2.0.1: {} 2073 + 2074 + micromark-util-normalize-identifier@2.0.1: 2075 + dependencies: 2076 + micromark-util-symbol: 2.0.1 2077 + 2078 + micromark-util-resolve-all@2.0.1: 2079 + dependencies: 2080 + micromark-util-types: 2.0.2 2081 + 2082 + micromark-util-sanitize-uri@2.0.1: 2083 + dependencies: 2084 + micromark-util-character: 2.1.1 2085 + micromark-util-encode: 2.0.1 2086 + micromark-util-symbol: 2.0.1 2087 + 2088 + micromark-util-subtokenize@2.1.0: 2089 + dependencies: 2090 + devlop: 1.1.0 2091 + micromark-util-chunked: 2.0.1 2092 + micromark-util-symbol: 2.0.1 2093 + micromark-util-types: 2.0.2 2094 + 2095 + micromark-util-symbol@2.0.1: {} 2096 + 2097 + micromark-util-types@2.0.2: {} 2098 + 2099 + micromark@4.0.2: 2100 + dependencies: 2101 + '@types/debug': 4.1.13 2102 + debug: 4.4.3 2103 + decode-named-character-reference: 1.3.0 2104 + devlop: 1.1.0 2105 + micromark-core-commonmark: 2.0.3 2106 + micromark-factory-space: 2.0.1 2107 + micromark-util-character: 2.1.1 2108 + micromark-util-chunked: 2.0.1 2109 + micromark-util-combine-extensions: 2.0.1 2110 + micromark-util-decode-numeric-character-reference: 2.0.2 2111 + micromark-util-encode: 2.0.1 2112 + micromark-util-normalize-identifier: 2.0.1 2113 + micromark-util-resolve-all: 2.0.1 2114 + micromark-util-sanitize-uri: 2.0.1 2115 + micromark-util-subtokenize: 2.1.0 2116 + micromark-util-symbol: 2.0.1 2117 + micromark-util-types: 2.0.2 2118 + transitivePeerDependencies: 2119 + - supports-color 2120 + 2121 + millify@6.1.0: 2122 + dependencies: 2123 + yargs: 17.7.2 2124 + 2125 + minimatch@10.2.4: 2126 + dependencies: 2127 + brace-expansion: 5.0.4 2128 + 2129 + minisearch@7.2.0: {} 2130 + 2131 + mitt@3.0.1: {} 2132 + 2133 + ms@2.1.3: {} 2134 + 2135 + nanoid@3.3.11: {} 2136 + 2137 + oniguruma-to-es@3.1.1: 2138 + dependencies: 2139 + emoji-regex-xs: 1.0.0 2140 + regex: 6.1.0 2141 + regex-recursion: 6.0.2 2142 + 2143 + p-limit@2.3.0: 2144 + dependencies: 2145 + p-try: 2.2.0 2146 + 2147 + p-locate@4.1.0: 2148 + dependencies: 2149 + p-limit: 2.3.0 2150 + 2151 + p-try@2.2.0: {} 2152 + 2153 + path-exists@4.0.0: {} 2154 + 2155 + path-to-regexp@6.3.0: {} 2156 + 2157 + perfect-debounce@1.0.0: {} 2158 + 2159 + picocolors@1.1.1: {} 2160 + 2161 + pngjs@5.0.0: {} 2162 + 2163 + postcss@8.5.8: 2164 + dependencies: 2165 + nanoid: 3.3.11 2166 + picocolors: 1.1.1 2167 + source-map-js: 1.2.1 2168 + 2169 + preact@10.29.0: {} 2170 + 2171 + pretty-bytes@7.1.0: {} 2172 + 2173 + property-information@7.1.0: {} 2174 + 2175 + punycode.js@2.3.1: {} 2176 + 2177 + qrcode@1.5.4: 2178 + dependencies: 2179 + dijkstrajs: 1.0.3 2180 + pngjs: 5.0.0 2181 + yargs: 15.4.1 2182 + 2183 + quail-js@0.3.28: 2184 + dependencies: 2185 + dayjs: 1.11.20 2186 + 2187 + quail-ui@0.9.4: 2188 + dependencies: 2189 + qrcode: 1.5.4 2190 + quail-js: 0.3.28 2191 + vue: 3.5.30 2192 + vue-router: 4.6.4(vue@3.5.30) 2193 + transitivePeerDependencies: 2194 + - typescript 2195 + 2196 + regex-recursion@6.0.2: 2197 + dependencies: 2198 + regex-utilities: 2.3.0 2199 + 2200 + regex-utilities@2.3.0: {} 2201 + 2202 + regex@6.1.0: 2203 + dependencies: 2204 + regex-utilities: 2.3.0 2205 + 2206 + remark-frontmatter@5.0.0: 2207 + dependencies: 2208 + '@types/mdast': 4.0.4 2209 + mdast-util-frontmatter: 2.0.1 2210 + micromark-extension-frontmatter: 2.0.0 2211 + unified: 11.0.5 2212 + transitivePeerDependencies: 2213 + - supports-color 2214 + 2215 + remark-parse@11.0.0: 2216 + dependencies: 2217 + '@types/mdast': 4.0.4 2218 + mdast-util-from-markdown: 2.0.3 2219 + micromark-util-types: 2.0.2 2220 + unified: 11.0.5 2221 + transitivePeerDependencies: 2222 + - supports-color 2223 + 2224 + remark-stringify@11.0.0: 2225 + dependencies: 2226 + '@types/mdast': 4.0.4 2227 + mdast-util-to-markdown: 2.1.2 2228 + unified: 11.0.5 2229 + 2230 + remark@15.0.1: 2231 + dependencies: 2232 + '@types/mdast': 4.0.4 2233 + remark-parse: 11.0.0 2234 + remark-stringify: 11.0.0 2235 + unified: 11.0.5 2236 + transitivePeerDependencies: 2237 + - supports-color 2238 + 2239 + require-directory@2.1.1: {} 2240 + 2241 + require-main-filename@2.0.0: {} 2242 + 2243 + rfdc@1.4.1: {} 2244 + 2245 + rollup@4.60.0: 2246 + dependencies: 2247 + '@types/estree': 1.0.8 2248 + optionalDependencies: 2249 + '@rollup/rollup-android-arm-eabi': 4.60.0 2250 + '@rollup/rollup-android-arm64': 4.60.0 2251 + '@rollup/rollup-darwin-arm64': 4.60.0 2252 + '@rollup/rollup-darwin-x64': 4.60.0 2253 + '@rollup/rollup-freebsd-arm64': 4.60.0 2254 + '@rollup/rollup-freebsd-x64': 4.60.0 2255 + '@rollup/rollup-linux-arm-gnueabihf': 4.60.0 2256 + '@rollup/rollup-linux-arm-musleabihf': 4.60.0 2257 + '@rollup/rollup-linux-arm64-gnu': 4.60.0 2258 + '@rollup/rollup-linux-arm64-musl': 4.60.0 2259 + '@rollup/rollup-linux-loong64-gnu': 4.60.0 2260 + '@rollup/rollup-linux-loong64-musl': 4.60.0 2261 + '@rollup/rollup-linux-ppc64-gnu': 4.60.0 2262 + '@rollup/rollup-linux-ppc64-musl': 4.60.0 2263 + '@rollup/rollup-linux-riscv64-gnu': 4.60.0 2264 + '@rollup/rollup-linux-riscv64-musl': 4.60.0 2265 + '@rollup/rollup-linux-s390x-gnu': 4.60.0 2266 + '@rollup/rollup-linux-x64-gnu': 4.60.0 2267 + '@rollup/rollup-linux-x64-musl': 4.60.0 2268 + '@rollup/rollup-openbsd-x64': 4.60.0 2269 + '@rollup/rollup-openharmony-arm64': 4.60.0 2270 + '@rollup/rollup-win32-arm64-msvc': 4.60.0 2271 + '@rollup/rollup-win32-ia32-msvc': 4.60.0 2272 + '@rollup/rollup-win32-x64-gnu': 4.60.0 2273 + '@rollup/rollup-win32-x64-msvc': 4.60.0 2274 + fsevents: 2.3.3 2275 + 2276 + search-insights@2.17.3: {} 2277 + 2278 + section-matter@1.0.0: 2279 + dependencies: 2280 + extend-shallow: 2.0.1 2281 + kind-of: 6.0.3 2282 + 2283 + set-blocking@2.0.0: {} 2284 + 2285 + shiki@2.5.0: 2286 + dependencies: 2287 + '@shikijs/core': 2.5.0 2288 + '@shikijs/engine-javascript': 2.5.0 2289 + '@shikijs/engine-oniguruma': 2.5.0 2290 + '@shikijs/langs': 2.5.0 2291 + '@shikijs/themes': 2.5.0 2292 + '@shikijs/types': 2.5.0 2293 + '@shikijs/vscode-textmate': 10.0.2 2294 + '@types/hast': 3.0.4 2295 + 2296 + source-map-js@1.2.1: {} 2297 + 2298 + space-separated-tokens@2.0.2: {} 2299 + 2300 + speakingurl@14.0.1: {} 2301 + 2302 + sprintf-js@1.0.3: {} 2303 + 2304 + string-width@4.2.3: 2305 + dependencies: 2306 + emoji-regex: 8.0.0 2307 + is-fullwidth-code-point: 3.0.0 2308 + strip-ansi: 6.0.1 2309 + 2310 + stringify-entities@4.0.4: 2311 + dependencies: 2312 + character-entities-html4: 2.1.0 2313 + character-entities-legacy: 3.0.0 2314 + 2315 + strip-ansi@6.0.1: 2316 + dependencies: 2317 + ansi-regex: 5.0.1 2318 + 2319 + strip-bom-string@1.0.0: {} 2320 + 2321 + superjson@2.2.6: 2322 + dependencies: 2323 + copy-anything: 4.0.5 2324 + 2325 + tabbable@6.4.0: {} 2326 + 2327 + tokenx@1.3.0: {} 2328 + 2329 + trim-lines@3.0.1: {} 2330 + 2331 + trough@2.2.0: {} 2332 + 2333 + uc.micro@2.1.0: {} 2334 + 2335 + unified@11.0.5: 2336 + dependencies: 2337 + '@types/unist': 3.0.3 2338 + bail: 2.0.2 2339 + devlop: 1.1.0 2340 + extend: 3.0.2 2341 + is-plain-obj: 4.1.0 2342 + trough: 2.2.0 2343 + vfile: 6.0.3 2344 + 2345 + unist-util-is@6.0.1: 2346 + dependencies: 2347 + '@types/unist': 3.0.3 2348 + 2349 + unist-util-position@5.0.0: 2350 + dependencies: 2351 + '@types/unist': 3.0.3 2352 + 2353 + unist-util-remove@4.0.0: 2354 + dependencies: 2355 + '@types/unist': 3.0.3 2356 + unist-util-is: 6.0.1 2357 + unist-util-visit-parents: 6.0.2 2358 + 2359 + unist-util-stringify-position@4.0.0: 2360 + dependencies: 2361 + '@types/unist': 3.0.3 2362 + 2363 + unist-util-visit-parents@6.0.2: 2364 + dependencies: 2365 + '@types/unist': 3.0.3 2366 + unist-util-is: 6.0.1 2367 + 2368 + unist-util-visit@5.1.0: 2369 + dependencies: 2370 + '@types/unist': 3.0.3 2371 + unist-util-is: 6.0.1 2372 + unist-util-visit-parents: 6.0.2 2373 + 2374 + vfile-message@4.0.3: 2375 + dependencies: 2376 + '@types/unist': 3.0.3 2377 + unist-util-stringify-position: 4.0.0 2378 + 2379 + vfile@6.0.3: 2380 + dependencies: 2381 + '@types/unist': 3.0.3 2382 + vfile-message: 4.0.3 2383 + 2384 + vite@5.4.21: 2385 + dependencies: 2386 + esbuild: 0.21.5 2387 + postcss: 8.5.8 2388 + rollup: 4.60.0 2389 + optionalDependencies: 2390 + fsevents: 2.3.3 2391 + 2392 + vitepress-plugin-llms@1.12.0: 2393 + dependencies: 2394 + gray-matter: 4.0.3 2395 + markdown-it: 14.1.1 2396 + markdown-title: 1.0.2 2397 + mdast-util-from-markdown: 2.0.3 2398 + millify: 6.1.0 2399 + minimatch: 10.2.4 2400 + path-to-regexp: 6.3.0 2401 + picocolors: 1.1.1 2402 + pretty-bytes: 7.1.0 2403 + remark: 15.0.1 2404 + remark-frontmatter: 5.0.0 2405 + tokenx: 1.3.0 2406 + unist-util-remove: 4.0.0 2407 + unist-util-visit: 5.1.0 2408 + transitivePeerDependencies: 2409 + - supports-color 2410 + 2411 + vitepress@1.6.4(@algolia/client-search@5.49.2)(postcss@8.5.8)(qrcode@1.5.4)(search-insights@2.17.3): 2412 + dependencies: 2413 + '@docsearch/css': 3.8.2 2414 + '@docsearch/js': 3.8.2(@algolia/client-search@5.49.2)(search-insights@2.17.3) 2415 + '@iconify-json/simple-icons': 1.2.75 2416 + '@shikijs/core': 2.5.0 2417 + '@shikijs/transformers': 2.5.0 2418 + '@shikijs/types': 2.5.0 2419 + '@types/markdown-it': 14.1.2 2420 + '@vitejs/plugin-vue': 5.2.4(vite@5.4.21)(vue@3.5.30) 2421 + '@vue/devtools-api': 7.7.9 2422 + '@vue/shared': 3.5.30 2423 + '@vueuse/core': 12.8.2 2424 + '@vueuse/integrations': 12.8.2(focus-trap@7.8.0)(qrcode@1.5.4) 2425 + focus-trap: 7.8.0 2426 + mark.js: 8.11.1 2427 + minisearch: 7.2.0 2428 + shiki: 2.5.0 2429 + vite: 5.4.21 2430 + vue: 3.5.30 2431 + optionalDependencies: 2432 + postcss: 8.5.8 2433 + transitivePeerDependencies: 2434 + - '@algolia/client-search' 2435 + - '@types/node' 2436 + - '@types/react' 2437 + - async-validator 2438 + - axios 2439 + - change-case 2440 + - drauu 2441 + - fuse.js 2442 + - idb-keyval 2443 + - jwt-decode 2444 + - less 2445 + - lightningcss 2446 + - nprogress 2447 + - qrcode 2448 + - react 2449 + - react-dom 2450 + - sass 2451 + - sass-embedded 2452 + - search-insights 2453 + - sortablejs 2454 + - stylus 2455 + - sugarss 2456 + - terser 2457 + - typescript 2458 + - universal-cookie 2459 + 2460 + vue-router@4.6.4(vue@3.5.30): 2461 + dependencies: 2462 + '@vue/devtools-api': 6.6.4 2463 + vue: 3.5.30 2464 + 2465 + vue@3.5.30: 2466 + dependencies: 2467 + '@vue/compiler-dom': 3.5.30 2468 + '@vue/compiler-sfc': 3.5.30 2469 + '@vue/runtime-dom': 3.5.30 2470 + '@vue/server-renderer': 3.5.30(vue@3.5.30) 2471 + '@vue/shared': 3.5.30 2472 + 2473 + which-module@2.0.1: {} 2474 + 2475 + wrap-ansi@6.2.0: 2476 + dependencies: 2477 + ansi-styles: 4.3.0 2478 + string-width: 4.2.3 2479 + strip-ansi: 6.0.1 2480 + 2481 + wrap-ansi@7.0.0: 2482 + dependencies: 2483 + ansi-styles: 4.3.0 2484 + string-width: 4.2.3 2485 + strip-ansi: 6.0.1 2486 + 2487 + y18n@4.0.3: {} 2488 + 2489 + y18n@5.0.8: {} 2490 + 2491 + yargs-parser@18.1.3: 2492 + dependencies: 2493 + camelcase: 5.3.1 2494 + decamelize: 1.2.0 2495 + 2496 + yargs-parser@21.1.1: {} 2497 + 2498 + yargs@15.4.1: 2499 + dependencies: 2500 + cliui: 6.0.0 2501 + decamelize: 1.2.0 2502 + find-up: 4.1.0 2503 + get-caller-file: 2.0.5 2504 + require-directory: 2.1.1 2505 + require-main-filename: 2.0.0 2506 + set-blocking: 2.0.0 2507 + string-width: 4.2.3 2508 + which-module: 2.0.1 2509 + y18n: 4.0.3 2510 + yargs-parser: 18.1.3 2511 + 2512 + yargs@17.7.2: 2513 + dependencies: 2514 + cliui: 8.0.1 2515 + escalade: 3.2.0 2516 + get-caller-file: 2.0.5 2517 + require-directory: 2.1.1 2518 + string-width: 4.2.3 2519 + y18n: 5.0.8 2520 + yargs-parser: 21.1.1 2521 + 2522 + zwitch@2.0.4: {}