Files
hack/tools/scripts/llm-key-hunter/results/_cache/content/aetherheart-ai_aeloon.json
T

1 line
106 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"repo": "aetherheart-ai/aeloon", "files": {"aeloon/providers/registry.py": {"e5afaa1c27eb8fa2f7c1e76545aa92291eeaf4e4": {"t": 1785674193.9351356, "n": 17257, "h": "742af5d1c4ff1aae", "c": "\"\"\"Provider metadata and lookup helpers.\n\nTo add a provider:\n1. Add a `ProviderSpec` to `PROVIDERS`.\n2. Add a config field in `config/schema.py`.\n\nOrder matters. Gateway specs should stay near the top.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass, field\nfrom typing import Any\n\n\n@dataclass(frozen=True)\nclass ProviderSpec:\n \"\"\"Metadata for one provider.\n\n `env_extras` values may use `{api_key}` and `{api_base}`.\n \"\"\"\n\n # Basic identity\n name: str # config field name, e.g. \"dashscope\"\n keywords: tuple[str, ...] # model-name keywords for matching (lowercase)\n env_key: str # LiteLLM env var, e.g. \"DASHSCOPE_API_KEY\"\n display_name: str = \"\" # shown in `aeloon status`\n\n # LiteLLM model prefixing\n litellm_prefix: str = \"\" # \"dashscope\" → model becomes \"dashscope/{model}\"\n skip_prefixes: tuple[str, ...] = () # don't prefix if model already starts with these\n\n # Extra env vars, e.g. ((\"ZHIPUAI_API_KEY\", \"{api_key}\"),)\n env_extras: tuple[tuple[str, str], ...] = ()\n\n # Gateway/local detection\n is_gateway: bool = False # routes any model (OpenRouter, AiHubMix)\n is_local: bool = False # local deployment (vLLM, Ollama)\n detect_by_key_prefix: str = \"\" # match api_key prefix, e.g. \"sk-or-\"\n detect_by_base_keyword: str = \"\" # match substring in api_base URL\n default_api_base: str = \"\" # fallback base URL\n\n # Routing behavior\n strip_model_prefix: bool = False # strip \"provider/\" before re-prefixing\n litellm_kwargs: dict[str, Any] = field(default_factory=dict) # extra kwargs passed to LiteLLM\n\n # Per-model param overrides\n model_overrides: tuple[tuple[str, dict[str, Any]], ...] = ()\n\n # OAuth-based providers do not use API keys.\n is_oauth: bool = False # if True, uses OAuth flow instead of API key\n\n # Direct providers bypass LiteLLM.\n is_direct: bool = False\n\n # Some providers support cache_control blocks.\n supports_prompt_caching: bool = False\n\n @property\n def label(self) -> str:\n return self.display_name or self.name.title()\n\n\n# Provider table. Earlier entries win.\n\nPROVIDERS: tuple[ProviderSpec, ...] = (\n # === Custom (direct OpenAI-compatible endpoint, bypasses LiteLLM) ======\n ProviderSpec(\n name=\"custom\",\n keywords=(),\n env_key=\"\",\n display_name=\"Custom\",\n litellm_prefix=\"\",\n is_direct=True,\n ),\n # === Azure OpenAI (direct API calls with API version 2024-10-21) =====\n ProviderSpec(\n name=\"azure_openai\",\n keywords=(\"azure\", \"azure-openai\"),\n env_key=\"\",\n display_name=\"Azure OpenAI\",\n litellm_prefix=\"\",\n is_direct=True,\n ),\n # === Gateways (detected by api_key / api_base, not model name) =========\n # Gateways can route any model, so they win in fallback.\n # OpenRouter: global gateway, keys start with \"sk-or-\"\n ProviderSpec(\n name=\"openrouter\",\n keywords=(\"openrouter\",),\n env_key=\"OPENROUTER_API_KEY\",\n display_name=\"OpenRouter\",\n litellm_prefix=\"openrouter\", # anthropic/claude-3 → openrouter/anthropic/claude-3\n skip_prefixes=(),\n env_extras=(),\n is_gateway=True,\n is_local=False,\n detect_by_key_prefix=\"sk-or-\",\n detect_by_base_keyword=\"openrouter\",\n default_api_base=\"https://openrouter.ai/api/v1\",\n strip_model_prefix=False,\n model_overrides=(),\n supports_prompt_caching=True,\n ),\n # AiHubMix: global gateway, OpenAI-compatible interface.\n # strip_model_prefix=True: it doesn't understand \"anthropic/claude-3\",\n # so we strip to bare \"claude-3\" then re-prefix as \"openai/claude-3\".\n ProviderSpec(\n name=\"aihubmix\",\n keywords=(\"aihubmix\",),\n env_key=\"OPENAI_API_KEY\", # OpenAI-compatible\n display_name=\"AiHubMix\",\n litellm_prefix=\"openai\", # → openai/{model}\n skip_prefixes=(),\n env_extras=(),\n is_gateway=True,\n is_local=False,\n detect_by_key_prefix=\"\",\n detect_by_base_keyword=\"aihubmix\",\n default_api_base=\"https://aihubmix.com/v1\",\n strip_model_prefix=True, # anthropic/claude-3 → claude-3 → openai/claude-3\n model_overrides=(),\n ),\n # SiliconFlow (硅基流动): OpenAI-compatible gateway, model names keep org prefix\n ProviderSpec(\n name=\"siliconflow\",\n keywords=(\"siliconflow\",),\n env_key=\"OPENAI_API_KEY\",\n display_name=\"SiliconFlow\",\n litellm_prefix=\"openai\",\n skip_prefixes=(),\n env_extras=(),\n is_gateway=True,\n is_local=False,\n detect_by_key_prefix=\"\",\n detect_by_base_keyword=\"siliconflow\",\n default_api_base=\"https://api.siliconflow.cn/v1\",\n strip_model_prefix=False,\n model_overrides=(),\n ),\n # VolcEngine (火山引擎): OpenAI-compatible gateway, pay-per-use models\n ProviderSpec(\n name=\"volcengine\",\n keywords=(\"volcengine\", \"volces\", \"ark\"),\n env_key=\"OPENAI_API_KEY\",\n display_name=\"VolcEngine\",\n litellm_prefix=\"volcengine\",\n skip_prefixes=(),\n env_extras=(),\n is_gateway=True,\n is_local=False,\n detect_by_key_prefix=\"\",\n detect_by_base_keyword=\"volces\",\n default_api_base=\"https://ark.cn-beijing.volces.com/api/v3\",\n strip_model_prefix=False,\n model_overrides=(),\n ),\n # VolcEngine Coding Plan (火山引擎 Coding Plan): same key as volcengine\n ProviderSpec(\n name=\"volcengine_coding_plan\",\n keywords=(\"volcengine-plan\",),\n env_key=\"OPENAI_API_KEY\",\n display_name=\"VolcEngine Coding Plan\",\n litellm_prefix=\"volcengine\",\n skip_prefixes=(),\n env_extras=(),\n is_gateway=True,\n is_local=False,\n detect_by_key_prefix=\"\",\n detect_by_base_keyword=\"\",\n default_api_base=\"https://ark.cn-beijing.volces.com/api/coding/v3\",\n strip_model_prefix=True,\n model_overrides=(),\n ),\n # BytePlus: VolcEngine international, pay-per-use models\n ProviderSpec(\n name=\"byteplus\",\n keywords=(\"byteplus\",),\n env_key=\"OPENAI_API_KEY\",\n display_name=\"BytePlus\",\n litellm_prefix=\"volcengine\",\n skip_prefixes=(),\n env_extras=(),\n is_gateway=True,\n is_local=False,\n detect_by_key_prefix=\"\",\n detect_by_base_keyword=\"bytepluses\",\n default_api_base=\"https://ark.ap-southeast.bytepluses.com/api/v3\",\n strip_model_prefix=True,\n model_overrides=(),\n ),\n # BytePlus Coding Plan: same key as byteplus\n ProviderSpec(\n name=\"byteplus_coding_plan\",\n keywords=(\"byteplus-plan\",),\n env_key=\"OPENAI_API_KEY\",\n display_name=\"BytePlus Coding Plan\",\n litellm_prefix=\"volcengine\",\n skip_prefixes=(),\n env_extras=(),\n is_gateway=True,\n is_local=False,\n detect_by_key_prefix=\"\",\n detect_by_base_keyword=\"\",\n default_api_base=\"https://ark.ap-southeast.bytepluses.com/api/coding/v3\",\n strip_model_prefix=True,\n model_overrides=(),\n ),\n # === Standard providers (matched by model-name keywords) ===============\n # Anthropic: LiteLLM recognizes \"claude-*\" natively, no prefix needed.\n ProviderSpec(\n name=\"anthropic\",\n keywords=(\"anthropic\", \"claude\"),\n env_key=\"ANTHROPIC_API_KEY\",\n display_name=\"Anthropic\",\n litellm_prefix=\"\",\n skip_prefixes=(),\n env_extras=(),\n is_gateway=False,\n is_local=False,\n detect_by_key_prefix=\"\",\n detect_by_base_keyword=\"\",\n default_api_base=\"\",\n strip_model_prefix=False,\n model_overrides=(),\n supports_prompt_caching=True,\n ),\n # OpenAI: LiteLLM recognizes \"gpt-*\" natively, no prefix needed.\n ProviderSpec(\n name=\"openai\",\n keywords=(\"openai\", \"gpt\"),\n env_key=\"OPENAI_API_KEY\",\n display_name=\"OpenAI\",\n litellm_prefix=\"\",\n skip_prefixes=(),\n env_extras=(),\n is_gateway=False,\n is_local=False,\n detect_by_key_prefix=\"\",\n detect_by_base_keyword=\"\",\n default_api_base=\"\",\n strip_model_prefix=False,\n model_overrides=(),\n ),\n # OpenAI Codex: uses OAuth, not API key.\n ProviderSpec(\n name=\"openai_codex\",\n keywords=(\"openai-codex\",),\n env_key=\"\", # OAuth-based, no API key\n display_name=\"OpenAI Codex\",\n litellm_prefix=\"\", # Not routed through LiteLLM\n skip_prefixes=(),\n env_extras=(),\n is_gateway=False,\n is_local=False,\n detect_by_key_prefix=\"\",\n detect_by_base_keyword=\"codex\",\n default_api_base=\"https://chatgpt.com/backend-api\",\n strip_model_prefix=False,\n model_overrides=(),\n is_oauth=True, # OAuth-based authentication\n ),\n # Github Copilot: uses OAuth, not API key.\n ProviderSpec(\n name=\"github_copilot\",\n keywords=(\"github_copilot\", \"copilot\"),\n env_key=\"\", # OAuth-based, no API key\n display_name=\"Github Copilot\",\n litellm_prefix=\"github_copilot\", # github_copilot/model → github_copilot/model\n skip_prefixes=(\"github_copilot/\",),\n env_extras=(),\n is_gateway=False,\n is_local=False,\n detect_by_key_prefix=\"\",\n detect_by_base_keyword=\"\",\n default_api_base=\"\",\n strip_model_prefix=False,\n model_overrides=(),\n is_oauth=True, # OAuth-based authentication\n ),\n # DeepSeek: needs \"deepseek/\" prefix for LiteLLM routing.\n ProviderSpec(\n name=\"deepseek\",\n keywords=(\"deepseek\",),\n env_key=\"DEEPSEEK_API_KEY\",\n display_name=\"DeepSeek\",\n litellm_prefix=\"deepseek\", # deepseek-chat → deepseek/deepseek-chat\n skip_prefixes=(\"deepseek/\",), # avoid double-prefix\n env_extras=(),\n is_gateway=False,\n is_local=False,\n detect_by_key_prefix=\"\",\n detect_by_base_keyword=\"\",\n default_api_base=\"\",\n strip_model_prefix=False,\n model_overrides=(),\n ),\n # Gemini: needs \"gemini/\" prefix for LiteLLM.\n ProviderSpec(\n name=\"gemini\",\n keywords=(\"gemini\",),\n env_key=\"GEMINI_API_KEY\",\n display_name=\"Gemini\",\n litellm_prefix=\"gemini\", # gemini-pro → gemini/gemini-pro\n skip_prefixes=(\"gemini/\",), # avoid double-prefix\n env_extras=(),\n is_gateway=False,\n is_local=False,\n detect_by_key_prefix=\"\",\n detect_by_base_keyword=\"\",\n default_api_base=\"\",\n strip_model_prefix=False,\n model_overrides=(),\n ),\n # Zhipu: LiteLLM uses \"zai/\" prefix.\n # Also mirrors key to ZHIPUAI_API_KEY (some LiteLLM paths check that).\n # skip_prefixes: don't add \"zai/\" when already routed via gateway.\n ProviderSpec(\n name=\"zhipu\",\n keywords=(\"zhipu\", \"glm\", \"zai\"),\n env_key=\"ZAI_API_KEY\",\n display_name=\"Zhipu AI\",\n litellm_prefix=\"zai\", # glm-4 → zai/glm-4\n skip_prefixes=(\"zhipu/\", \"zai/\", \"openrouter/\", \"hosted_vllm/\"),\n env_extras=((\"ZHIPUAI_API_KEY\", \"{api_key}\"),),\n is_gateway=False,\n is_local=False,\n detect_by_key_prefix=\"\",\n detect_by_base_keyword=\"\",\n default_api_base=\"\",\n strip_model_prefix=False,\n model_overrides=(),\n ),\n # DashScope: Qwen models, needs \"dashscope/\" prefix.\n ProviderSpec(\n name=\"dashscope\",\n keywords=(\"qwen\", \"dashscope\"),\n env_key=\"DASHSCOPE_API_KEY\",\n display_name=\"DashScope\",\n litellm_prefix=\"dashscope\", # qwen-max → dashscope/qwen-max\n skip_prefixes=(\"dashscope/\", \"openrouter/\"),\n env_extras=(),\n is_gateway=False,\n is_local=False,\n detect_by_key_prefix=\"\",\n detect_by_base_keyword=\"\",\n default_api_base=\"\",\n strip_model_prefix=False,\n model_overrides=(),\n ),\n # Moonshot: Kimi models, needs \"moonshot/\" prefix.\n # LiteLLM requires MOONSHOT_API_BASE env var to find the endpoint.\n # Kimi K2.5 API enforces temperature >= 1.0.\n ProviderSpec(\n name=\"moonshot\",\n keywords=(\"moonshot\", \"kimi\"),\n env_key=\"MOONSHOT_API_KEY\",\n display_name=\"Moonshot\",\n litellm_prefix=\"moonshot\", # kimi-k2.5 → moonshot/kimi-k2.5\n skip_prefixes=(\"moonshot/\", \"openrouter/\"),\n env_extras=((\"MOONSHOT_API_BASE\", \"{api_base}\"),),\n is_gateway=False,\n is_local=False,\n detect_by_key_prefix=\"\",\n detect_by_base_keyword=\"\",\n default_api_base=\"https://api.moonshot.ai/v1\", # intl; use api.moonshot.cn for China\n strip_model_prefix=False,\n model_overrides=((\"kimi-k2.5\", {\"temperature\": 1.0}),),\n ),\n # MiniMax: needs \"minimax/\" prefix for LiteLLM routing.\n # Uses OpenAI-compatible API at api.minimax.io/v1.\n ProviderSpec(\n name=\"minimax\",\n keywords=(\"minimax\",),\n env_key=\"MINIMAX_API_KEY\",\n display_name=\"MiniMax\",\n litellm_prefix=\"minimax\", # MiniMax-M2.1 → minimax/MiniMax-M2.1\n skip_prefixes=(\"minimax/\", \"openrouter/\"),\n env_extras=(),\n is_gateway=False,\n is_local=False,\n detect_by_key_prefix=\"\",\n detect_by_base_keyword=\"\",\n default_api_base=\"https://api.minimax.io/v1\",\n strip_model_prefix=False,\n model_overrides=(),\n ),\n # === Local deployment (matched by config key, NOT by api_base) =========\n # vLLM / any OpenAI-compatible local server.\n # Detected when config key is \"vllm\" (provider_name=\"vllm\").\n ProviderSpec(\n name=\"vllm\",\n keywords=(\"vllm\",),\n env_key=\"HOSTED_VLLM_API_KEY\",\n display_name=\"vLLM/Local\",\n litellm_prefix=\"hosted_vllm\", # Llama-3-8B → hosted_vllm/Llama-3-8B\n skip_prefixes=(),\n env_extras=(),\n is_gateway=False,\n is_local=True,\n detect_by_key_prefix=\"\",\n detect_by_base_keyword=\"\",\n default_api_base=\"\", # user must provide in config\n strip_model_prefix=False,\n model_overrides=(),\n ),\n # === Ollama (local, OpenAI-compatible) ===================================\n ProviderSpec(\n name=\"ollama\",\n keywords=(\"ollama\", \"nemotron\"),\n env_key=\"OLLAMA_API_KEY\",\n display_name=\"Ollama\",\n litellm_prefix=\"ollama_chat\", # model → ollama_chat/model\n skip_prefixes=(\"ollama/\", \"ollama_chat/\"),\n env_extras=(),\n is_gateway=False,\n is_local=True,\n detect_by_key_prefix=\"\",\n detect_by_base_keyword=\"11434\",\n default_api_base=\"http://localhost:11434\",\n strip_model_prefix=False,\n model_overrides=(),\n ),\n # === Auxiliary (not a primary LLM provider) ============================\n # Groq: mainly used for Whisper voice transcription, also usable for LLM.\n # Needs \"groq/\" prefix for LiteLLM routing. Placed last — it rarely wins fallback.\n ProviderSpec(\n name=\"groq\",\n keywords=(\"groq\",),\n env_key=\"GROQ_API_KEY\",\n display_name=\"Groq\",\n litellm_prefix=\"groq\", # llama3-8b-8192 → groq/llama3-8b-8192\n skip_prefixes=(\"groq/\",), # avoid double-prefix\n env_extras=(),\n is_gateway=False,\n is_local=False,\n detect_by_key_prefix=\"\",\n detect_by_base_keyword=\"\",\n default_api_base=\"\",\n strip_model_prefix=False,\n model_overrides=(),\n ),\n)\n\n\n# Lookup helpers\n\n\ndef find_by_model(model: str) -> ProviderSpec | None:\n \"\"\"Match a non-gateway provider from its model name.\"\"\"\n model_lower = model.lower()\n model_normalized = model_lower.replace(\"-\", \"_\")\n model_prefix = model_lower.split(\"/\", 1)[0] if \"/\" in model_lower else \"\"\n normalized_prefix = model_prefix.replace(\"-\", \"_\")\n std_specs = [s for s in PROVIDERS if not s.is_gateway and not s.is_local]\n\n # Honor an explicit provider prefix first.\n for spec in std_specs:\n if model_prefix and normalized_prefix == spec.name:\n return spec\n\n for spec in std_specs:\n if any(\n kw in model_lower or kw.replace(\"-\", \"_\") in model_normalized for kw in spec.keywords\n ):\n return spec\n return None\n\n\ndef find_gateway(\n provider_name: str | None = None,\n api_key: str | None = None,\n api_base: str | None = None,\n) -> ProviderSpec | None:\n \"\"\"Detect a gateway or local provider from config values.\"\"\"\n # 1. Match the configured provider name.\n if provider_name:\n spec = find_by_name(provider_name)\n if spec and (spec.is_gateway or spec.is_local):\n return spec\n\n # 2. Match API key prefix or base URL.\n for spec in PROVIDERS:\n if spec.detect_by_key_prefix and api_key and api_key.startswith(spec.detect_by_key_prefix):\n return spec\n if spec.detect_by_base_keyword and api_base and spec.detect_by_base_keyword in api_base:\n return spec\n\n return None\n\n\ndef find_by_name(name: str) -> ProviderSpec | None:\n \"\"\"Find a provider spec by config field name, e.g. \"dashscope\".\"\"\"\n for spec in PROVIDERS:\n if spec.name == name:\n return spec\n return None\n"}}, "README.md": {"e5afaa1c27eb8fa2f7c1e76545aa92291eeaf4e4": {"t": 1785747200.9822888, "n": 8743, "h": "ab175f4f2ea96df8", "c": "<p align=\"right\">\n<b>English</b> | <a href=\"./README.cn.md\">中文</a>\n</p>\n\n<div align=\"center\">\n\n<p align=\"left\">\n <img src=\"./assets/AE-logo.svg#gh-light-mode-only\" alt=\"Aether Heart\" height=\"60\" />\n <img src=\"./assets/AE-logo-dark.svg#gh-dark-mode-only\" alt=\"Aether Heart\" height=\"60\" />\n</p>\n\n<p align=\"center\">\n <img src=\"./assets/aeloon-alive.png\" alt=\"Aeloon alive\" height=\"360\" />\n</p>\n\n<p align=\"center\">\n <img src=\"./assets/Aeloon.svg#gh-light-mode-only\" alt=\"Aeloon\" height=\"40\" />\n <img src=\"./assets/Aeloon-dark.svg#gh-dark-mode-only\" alt=\"Aeloon\" height=\"40\" />\n</p>\n\nA **safe · light · fast** AI Agent\n\n[![Python](https://img.shields.io/badge/Python-3.11%2B-blue.svg)](https://python.org)\n[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](./LICENSE)\n[![Ruff](https://img.shields.io/badge/Linter-Ruff%200.15.6-orange.svg)](https://docs.astral.sh/ruff/)\n\n</div>\n\n---\n\n## What is Aeloon?\n\nAeloon is a lightweight, high-performance, and modular AI agent framework featuring graph-driven parallel acceleration and flexible hot-swappable plugins for many usages (Deep research, Wiki, SkillGraph, ACP Bridge and StatusPannel).\n\nCore philosophy: **one agent, all platforms, self-hosted data, privacy first.**\n\n---\n\n## ✨ Key Features\n\n| Feature | Description |\n|---------|-------------|\n| 🔄 **Message Bus Architecture** | Channel → MessageBus → Dispatcher → AgentLoop → Tool execution → Routed reply — decoupled and extensible |\n| 📡 **Multi-Channel** | Telegram, Feishu, DingTalk, WeCom, Slack, Discord, QQ, Email, WhatsApp, Matrix, WeChat |\n| 🧠 **Smart Context** | Automatic context building, memory consolidation, skill injection, sub-agent delegation |\n| 🔧 **Built-in Tools** | FileSystem, Web search/fetch, Shell exec, Cron, MCP protocol, Message sending |\n| 🤖 **Multi-Provider** | OpenAI, Anthropic, DeepSeek, Gemini, Zhipu, Moonshot, MiniMax, Groq, Ollama, vLLM, Azure OpenAI, OpenRouter, custom endpoints |\n| 📝 **Skill System** | Pure Markdown-driven — extend agent capabilities with zero code |\n| 🔌 **MCP Protocol** | Built-in MCP client to connect external tool servers |\n| 🔧 **Plugin SDK** | Complete plugin development framework: commands, tools, services, middleware, status bar, lifecycle management |\n| 🌉 **ACP Bridge** | Built-in ACP Bridge plugin connecting to external agent ecosystems via ACP protocol |\n| 📊 **Task Graph** | Tool calls compiled into a DAG — read-only ops run concurrently, writes serialized conservatively |\n| 🔒 **Security First** | Network safety policies, execution sandbox, API key isolation |\n| 🐳 **Docker Ready** | One-command `docker compose up` for gateway mode |\n\n---\n\n## 🚀 Quick Start\n\n### One-Click Install\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/AetherHeartAI/Aeloon/main/install.sh | bash\n```\n\nThe installer walks you through provider and channel setup interactively. Offline and source installs are also supported:\n\n```bash\n# Install from local source\nbash install.sh --from-source\n\n# Install a specific version\nbash install.sh --version v1.0.0\n\n# Offline mode (requires local wheel)\nbash install.sh --offline\n```\n\n### Manual Install\n\n```bash\n# Install from source\ngit clone https://github.com/AetherHeartAI/Aeloon.git\ncd Aeloon\npip install -e .\n\n# First-time config\naeloon onboard\n```\n\n### Build a wheel\n\n```bash\n# Output to dist/ by default\nbash scripts/build_wheel.sh\n\n# Use a custom directory and clear old artifacts\nbash scripts/build_wheel.sh ./artifacts --clear\n```\n\n### First Conversation\n\n```bash\n# One-shot CLI chat\naeloon agent -m \"Hello Aeloon.\"\n\n# Start gateway mode (connects all channels)\naeloon gateway\n\n# Check channel status\naeloon channels status\n```\n---\n\n## 🔌 Channel Support\n\n**WeChat** and **Feishu** support QR scan login out of the box (`/wechat login`, Feishu in-app auth).\n\nOther channels: Telegram, DingTalk, WeCom, Slack, Discord, QQ, Email, WhatsApp, Matrix.\n\nAll channels inherit `BaseChannel` and are **auto-discovered** — drop a file in `aeloon/channels/` and it works, no registration needed.\n\n---\n\n## 🤖 Provider Support\n\nMajor LLMs with one-click setup: OpenAI, Anthropic, DeepSeek, Gemini, Zhipu, Moonshot, MiniMax, Groq, OpenRouter (free tier included), Azure OpenAI, Ollama, vLLM, plus OAuth-based OpenAI Codex / GitHub Copilot.\n\nSelection priority: explicit name → model keyword match → API key prefix → API base match.\n\n---\n\n## 🔧 Tool System\n\n| Tool | Module | Function |\n|------|--------|----------|\n| FileSystem | `filesystem.py` | Read/write files, list directories, search |\n| Web | `web.py` | Search (DuckDuckGo), fetch pages, extract content |\n| Shell | `shell.py` | Execute commands (with safety policy) |\n| Cron | `cron.py` | Create/list/remove scheduled tasks |\n| MCP | `mcp.py` | Connect to external MCP tool servers |\n| Message | `message.py` | Cross-channel message sending |\n| Policy | `policy.py` | Tool execution policy control |\n| Spawn | `spawn.py` | Sub-agent delegation |\n\n---\n\n## 📝 Skill System\n\n**Pure Markdown** — extend agent capabilities with zero code. Drop a `SKILL.md` into `.aeloon/skills/` and it's injected into the system prompt. Built-in skills cover scheduling, doc conversion, GitHub, memory, summarization, terminal, and more.\n\n---\n\n## 🔌 Plugin System\n\nPlugins are modular components that extend Aeloon's core: custom slash commands, agent tools, background services, message middleware, status bar contributions, and isolated config/storage namespaces.\n\n**Plugin types**:\n- **Task Plugin** (commands + middleware) — request-response workflows, e.g. `/sr`, `/se`\n- **Hybrid Plugin** (commands + tools + services) — long-running agents, e.g. market monitoring\n- **Service / Status Plugin** (services or status bar contributions) — service-style extensions or CLI status bar contributions, e.g. `StatusPannel`\n\n**Built-in plugins**:\n\n| Plugin | Type | Description |\n|--------|------|-------------|\n| [**ScienceResearch**](./aeloon/plugins/ScienceResearch/README-SR.md) | Task | AI4S research workflow: literature search, ArXiv, risk assessment, orchestrator, structured output |\n| [**SkillGraph**](./aeloon/plugins/SkillGraph/) | Task | Skill dependency graph compilation and visualization |\n| [**Wiki**](./aeloon/plugins/Wiki/README.md) | Hybrid | Local knowledge base: content ingestion, smart digest, conversational knowledge enhancement, knowledge graph |\n| [**ACP Bridge**](./aeloon/plugins/acp_bridge/README.md) | Hybrid | External ACP agent bridging — connect third-party Agent protocols |\n| [**StatusPannel**](./aeloon/plugins/StatusPannel/) | Service | CLI status bar: model name, context token usage |\n\n**Lifecycle**: Discover → Validate → Register → Commit → Activate → Running → Deactivate\n\n**Five-step dev paradigm**: Extend `Plugin` → Implement `register(api)` → Implement `activate()` → Write handlers → Create `aeloon.plugin.json` manifest.\n\nFull development guide: [aeloon/plugins/README.md](./aeloon/plugins/README.md).\n\n---\n\n## 🐳 Docker Deployment\n\n```bash\n# Gateway mode\ndocker compose up\n\n# CLI interactive mode\ndocker compose run --rm aeloon-cli\n```\n\nDefault `docker-compose.yml` configuration:\n- Gateway port: `18790`\n- Config mount: `~/.aeloon:/root/.aeloon`\n- Resource limits: 1 CPU / 1GB memory\n\n---\n\n## ⚙️ Configuration\n\nConfig lives at `~/.aeloon/config.json` and supports camelCase aliases. Loading precedence:\n\n```\n--config flag > AELOON_CONFIG env var > ~/.aeloon/config.json\n```\n\nMinimal example:\n\n```json\n{\n \"agents\": {\n \"defaults\": {\n \"provider\": \"openrouter\",\n \"model\": \"deepseek/deepseek-r1:free\"\n }\n },\n \"providers\": {\n \"openrouter\": {\n \"apiKey\": \"sk-or-v1-...\"\n }\n }\n}\n```\n\n---\n\n## 🧪 Development\n\n```bash\n# Install dev dependencies\npip install -e \".[dev]\"\n\n# Run tests\npytest\n\n# Run specific tests\npytest tests/test_kernel.py\npytest -k \"telegram\"\n\n# Lint + auto-fix\nruff check --fix .\n\n# Format\nruff format .\n```\n\n**Requirements**: `ruff==0.15.6` (CI enforced), Python ≥ 3.11, type hints on all public functions, `async/await` preferred for I/O.\n\n### Commit Convention\n\nUses [Conventional Commits](https://www.conventionalcommits.org/):\n\n```\n<type>(<scope>): <short summary>\n```\n\nTypes: `feat`, `fix`, `chore`, `docs`, `test`, `refactor`, `perf`, `ci`\n\n---\n\n## 🔒 Security\n\n- **Network policy**: `_network_safety.py` restricts reachable URLs to prevent SSRF\n- **Execution sandbox**: Shell tool uses policy controls for allowed commands\n- **API key isolation**: Keys stored in config, never logged\n- **Channel auth**: Each channel supports `allowFrom` whitelisting\n- **MCP security**: MCP connections can configure allowed tool scopes\n\n---\n\n## 📜 License\n\n[MIT License](./LICENSE) © 2026 Aether Heart contributors\n\n---\n\n<div align=\"center\">\n\n*\"始于鳌,成于龙.\"*\nBorn from the deep. Rising into something more.\n\n</div>\n"}, "2bb4a8d9b30ff79b5e0e463b65e6fc35919fb124": {"t": 1785771344.2642164, "n": 8743, "h": "ab175f4f2ea96df8", "c": "<p align=\"right\">\n<b>English</b> | <a href=\"./README.cn.md\">中文</a>\n</p>\n\n<div align=\"center\">\n\n<p align=\"left\">\n <img src=\"./assets/AE-logo.svg#gh-light-mode-only\" alt=\"Aether Heart\" height=\"60\" />\n <img src=\"./assets/AE-logo-dark.svg#gh-dark-mode-only\" alt=\"Aether Heart\" height=\"60\" />\n</p>\n\n<p align=\"center\">\n <img src=\"./assets/aeloon-alive.png\" alt=\"Aeloon alive\" height=\"360\" />\n</p>\n\n<p align=\"center\">\n <img src=\"./assets/Aeloon.svg#gh-light-mode-only\" alt=\"Aeloon\" height=\"40\" />\n <img src=\"./assets/Aeloon-dark.svg#gh-dark-mode-only\" alt=\"Aeloon\" height=\"40\" />\n</p>\n\nA **safe · light · fast** AI Agent\n\n[![Python](https://img.shields.io/badge/Python-3.11%2B-blue.svg)](https://python.org)\n[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](./LICENSE)\n[![Ruff](https://img.shields.io/badge/Linter-Ruff%200.15.6-orange.svg)](https://docs.astral.sh/ruff/)\n\n</div>\n\n---\n\n## What is Aeloon?\n\nAeloon is a lightweight, high-performance, and modular AI agent framework featuring graph-driven parallel acceleration and flexible hot-swappable plugins for many usages (Deep research, Wiki, SkillGraph, ACP Bridge and StatusPannel).\n\nCore philosophy: **one agent, all platforms, self-hosted data, privacy first.**\n\n---\n\n## ✨ Key Features\n\n| Feature | Description |\n|---------|-------------|\n| 🔄 **Message Bus Architecture** | Channel → MessageBus → Dispatcher → AgentLoop → Tool execution → Routed reply — decoupled and extensible |\n| 📡 **Multi-Channel** | Telegram, Feishu, DingTalk, WeCom, Slack, Discord, QQ, Email, WhatsApp, Matrix, WeChat |\n| 🧠 **Smart Context** | Automatic context building, memory consolidation, skill injection, sub-agent delegation |\n| 🔧 **Built-in Tools** | FileSystem, Web search/fetch, Shell exec, Cron, MCP protocol, Message sending |\n| 🤖 **Multi-Provider** | OpenAI, Anthropic, DeepSeek, Gemini, Zhipu, Moonshot, MiniMax, Groq, Ollama, vLLM, Azure OpenAI, OpenRouter, custom endpoints |\n| 📝 **Skill System** | Pure Markdown-driven — extend agent capabilities with zero code |\n| 🔌 **MCP Protocol** | Built-in MCP client to connect external tool servers |\n| 🔧 **Plugin SDK** | Complete plugin development framework: commands, tools, services, middleware, status bar, lifecycle management |\n| 🌉 **ACP Bridge** | Built-in ACP Bridge plugin connecting to external agent ecosystems via ACP protocol |\n| 📊 **Task Graph** | Tool calls compiled into a DAG — read-only ops run concurrently, writes serialized conservatively |\n| 🔒 **Security First** | Network safety policies, execution sandbox, API key isolation |\n| 🐳 **Docker Ready** | One-command `docker compose up` for gateway mode |\n\n---\n\n## 🚀 Quick Start\n\n### One-Click Install\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/AetherHeartAI/Aeloon/main/install.sh | bash\n```\n\nThe installer walks you through provider and channel setup interactively. Offline and source installs are also supported:\n\n```bash\n# Install from local source\nbash install.sh --from-source\n\n# Install a specific version\nbash install.sh --version v1.0.0\n\n# Offline mode (requires local wheel)\nbash install.sh --offline\n```\n\n### Manual Install\n\n```bash\n# Install from source\ngit clone https://github.com/AetherHeartAI/Aeloon.git\ncd Aeloon\npip install -e .\n\n# First-time config\naeloon onboard\n```\n\n### Build a wheel\n\n```bash\n# Output to dist/ by default\nbash scripts/build_wheel.sh\n\n# Use a custom directory and clear old artifacts\nbash scripts/build_wheel.sh ./artifacts --clear\n```\n\n### First Conversation\n\n```bash\n# One-shot CLI chat\naeloon agent -m \"Hello Aeloon.\"\n\n# Start gateway mode (connects all channels)\naeloon gateway\n\n# Check channel status\naeloon channels status\n```\n---\n\n## 🔌 Channel Support\n\n**WeChat** and **Feishu** support QR scan login out of the box (`/wechat login`, Feishu in-app auth).\n\nOther channels: Telegram, DingTalk, WeCom, Slack, Discord, QQ, Email, WhatsApp, Matrix.\n\nAll channels inherit `BaseChannel` and are **auto-discovered** — drop a file in `aeloon/channels/` and it works, no registration needed.\n\n---\n\n## 🤖 Provider Support\n\nMajor LLMs with one-click setup: OpenAI, Anthropic, DeepSeek, Gemini, Zhipu, Moonshot, MiniMax, Groq, OpenRouter (free tier included), Azure OpenAI, Ollama, vLLM, plus OAuth-based OpenAI Codex / GitHub Copilot.\n\nSelection priority: explicit name → model keyword match → API key prefix → API base match.\n\n---\n\n## 🔧 Tool System\n\n| Tool | Module | Function |\n|------|--------|----------|\n| FileSystem | `filesystem.py` | Read/write files, list directories, search |\n| Web | `web.py` | Search (DuckDuckGo), fetch pages, extract content |\n| Shell | `shell.py` | Execute commands (with safety policy) |\n| Cron | `cron.py` | Create/list/remove scheduled tasks |\n| MCP | `mcp.py` | Connect to external MCP tool servers |\n| Message | `message.py` | Cross-channel message sending |\n| Policy | `policy.py` | Tool execution policy control |\n| Spawn | `spawn.py` | Sub-agent delegation |\n\n---\n\n## 📝 Skill System\n\n**Pure Markdown** — extend agent capabilities with zero code. Drop a `SKILL.md` into `.aeloon/skills/` and it's injected into the system prompt. Built-in skills cover scheduling, doc conversion, GitHub, memory, summarization, terminal, and more.\n\n---\n\n## 🔌 Plugin System\n\nPlugins are modular components that extend Aeloon's core: custom slash commands, agent tools, background services, message middleware, status bar contributions, and isolated config/storage namespaces.\n\n**Plugin types**:\n- **Task Plugin** (commands + middleware) — request-response workflows, e.g. `/sr`, `/se`\n- **Hybrid Plugin** (commands + tools + services) — long-running agents, e.g. market monitoring\n- **Service / Status Plugin** (services or status bar contributions) — service-style extensions or CLI status bar contributions, e.g. `StatusPannel`\n\n**Built-in plugins**:\n\n| Plugin | Type | Description |\n|--------|------|-------------|\n| [**ScienceResearch**](./aeloon/plugins/ScienceResearch/README-SR.md) | Task | AI4S research workflow: literature search, ArXiv, risk assessment, orchestrator, structured output |\n| [**SkillGraph**](./aeloon/plugins/SkillGraph/) | Task | Skill dependency graph compilation and visualization |\n| [**Wiki**](./aeloon/plugins/Wiki/README.md) | Hybrid | Local knowledge base: content ingestion, smart digest, conversational knowledge enhancement, knowledge graph |\n| [**ACP Bridge**](./aeloon/plugins/acp_bridge/README.md) | Hybrid | External ACP agent bridging — connect third-party Agent protocols |\n| [**StatusPannel**](./aeloon/plugins/StatusPannel/) | Service | CLI status bar: model name, context token usage |\n\n**Lifecycle**: Discover → Validate → Register → Commit → Activate → Running → Deactivate\n\n**Five-step dev paradigm**: Extend `Plugin` → Implement `register(api)` → Implement `activate()` → Write handlers → Create `aeloon.plugin.json` manifest.\n\nFull development guide: [aeloon/plugins/README.md](./aeloon/plugins/README.md).\n\n---\n\n## 🐳 Docker Deployment\n\n```bash\n# Gateway mode\ndocker compose up\n\n# CLI interactive mode\ndocker compose run --rm aeloon-cli\n```\n\nDefault `docker-compose.yml` configuration:\n- Gateway port: `18790`\n- Config mount: `~/.aeloon:/root/.aeloon`\n- Resource limits: 1 CPU / 1GB memory\n\n---\n\n## ⚙️ Configuration\n\nConfig lives at `~/.aeloon/config.json` and supports camelCase aliases. Loading precedence:\n\n```\n--config flag > AELOON_CONFIG env var > ~/.aeloon/config.json\n```\n\nMinimal example:\n\n```json\n{\n \"agents\": {\n \"defaults\": {\n \"provider\": \"openrouter\",\n \"model\": \"deepseek/deepseek-r1:free\"\n }\n },\n \"providers\": {\n \"openrouter\": {\n \"apiKey\": \"sk-or-v1-...\"\n }\n }\n}\n```\n\n---\n\n## 🧪 Development\n\n```bash\n# Install dev dependencies\npip install -e \".[dev]\"\n\n# Run tests\npytest\n\n# Run specific tests\npytest tests/test_kernel.py\npytest -k \"telegram\"\n\n# Lint + auto-fix\nruff check --fix .\n\n# Format\nruff format .\n```\n\n**Requirements**: `ruff==0.15.6` (CI enforced), Python ≥ 3.11, type hints on all public functions, `async/await` preferred for I/O.\n\n### Commit Convention\n\nUses [Conventional Commits](https://www.conventionalcommits.org/):\n\n```\n<type>(<scope>): <short summary>\n```\n\nTypes: `feat`, `fix`, `chore`, `docs`, `test`, `refactor`, `perf`, `ci`\n\n---\n\n## 🔒 Security\n\n- **Network policy**: `_network_safety.py` restricts reachable URLs to prevent SSRF\n- **Execution sandbox**: Shell tool uses policy controls for allowed commands\n- **API key isolation**: Keys stored in config, never logged\n- **Channel auth**: Each channel supports `allowFrom` whitelisting\n- **MCP security**: MCP connections can configure allowed tool scopes\n\n---\n\n## 📜 License\n\n[MIT License](./LICENSE) © 2026 Aether Heart contributors\n\n---\n\n<div align=\"center\">\n\n*\"始于鳌,成于龙.\"*\nBorn from the deep. Rising into something more.\n\n</div>\n"}, "373a97b93de59316133fedd32e9d43163d53256c": {"t": 1785771345.6355426, "n": 8731, "h": "e64418ad6cc10525", "c": "<p align=\"right\">\n<b>English</b> | <a href=\"./README.cn.md\">中文</a>\n</p>\n\n<div align=\"center\">\n\n<p align=\"left\">\n <img src=\"./assets/AE-logo.svg#gh-light-mode-only\" alt=\"Aether Heart\" height=\"60\" />\n <img src=\"./assets/AE-logo-dark.svg#gh-dark-mode-only\" alt=\"Aether Heart\" height=\"60\" />\n</p>\n\n<p align=\"center\">\n <img src=\"./assets/aeloon-alive.png\" alt=\"Aeloon alive\" height=\"360\" />\n</p>\n\n<p align=\"center\">\n <img src=\"./assets/Aeloon.svg#gh-light-mode-only\" alt=\"Aeloon\" height=\"40\" />\n <img src=\"./assets/Aeloon-dark.svg#gh-dark-mode-only\" alt=\"Aeloon\" height=\"40\" />\n</p>\n\nA **safe · light · fast** AI Agent\n\n[![Python](https://img.shields.io/badge/Python-3.11%2B-blue.svg)](https://python.org)\n[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](./LICENSE)\n[![Ruff](https://img.shields.io/badge/Linter-Ruff%200.15.6-orange.svg)](https://docs.astral.sh/ruff/)\n\n</div>\n\n---\n\n## What is Aeloon?\n\nAeloon is a message-bus-based AI assistant runtime. It unifies LLMs, tool calls, memory, and multi-channel messaging into a single runtime — you talk to it via CLI, Web UI, or IM platforms, and it orchestrates everything.\n\nCore philosophy: **one agent, all platforms, self-hosted data, privacy first.**\n\n---\n\n## ✨ Key Features\n\n| Feature | Description |\n|---------|-------------|\n| 🔄 **Message Bus Architecture** | Channel → MessageBus → Dispatcher → AgentLoop → Tool execution → Routed reply — decoupled and extensible |\n| 📡 **Multi-Channel** | Telegram, Feishu, DingTalk, WeCom, Slack, Discord, QQ, Email, WhatsApp, Matrix, WeChat |\n| 🧠 **Smart Context** | Automatic context building, memory consolidation, skill injection, sub-agent delegation |\n| 🔧 **Built-in Tools** | FileSystem, Web search/fetch, Shell exec, Cron, MCP protocol, Message sending |\n| 🤖 **Multi-Provider** | OpenAI, Anthropic, DeepSeek, Gemini, Zhipu, Moonshot, MiniMax, Groq, Ollama, vLLM, Azure OpenAI, OpenRouter, custom endpoints |\n| 📝 **Skill System** | Pure Markdown-driven — extend agent capabilities with zero code |\n| 🔌 **MCP Protocol** | Built-in MCP client to connect external tool servers |\n| 🔧 **Plugin SDK** | Complete plugin development framework: commands, tools, services, middleware, status bar, lifecycle management |\n| 🌉 **ACP Bridge** | Built-in ACP Bridge plugin connecting to external agent ecosystems via ACP protocol |\n| 📊 **Task Graph** | Tool calls compiled into a DAG — read-only ops run concurrently, writes serialized conservatively |\n| 🔒 **Security First** | Network safety policies, execution sandbox, API key isolation |\n| 🐳 **Docker Ready** | One-command `docker compose up` for gateway mode |\n\n---\n\n## 🚀 Quick Start\n\n### One-Click Install\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/AetherHeartAI/Aeloon/main/install.sh | bash\n```\n\nThe installer walks you through provider and channel setup interactively. Offline and source installs are also supported:\n\n```bash\n# Install from local source\nbash install.sh --from-source\n\n# Install a specific version\nbash install.sh --version v1.0.0\n\n# Offline mode (requires local wheel)\nbash install.sh --offline\n```\n\n### Manual Install\n\n```bash\n# Install from source\ngit clone https://github.com/AetherHeartAI/Aeloon.git\ncd Aeloon\npip install -e .\n\n# First-time config\naeloon onboard\n```\n\n### Build a wheel\n\n```bash\n# Output to dist/ by default\nbash scripts/build_wheel.sh\n\n# Use a custom directory and clear old artifacts\nbash scripts/build_wheel.sh ./artifacts --clear\n```\n\n### First Conversation\n\n```bash\n# One-shot CLI chat\naeloon agent -m \"Hello Aeloon.\"\n\n# Start gateway mode (connects all channels)\naeloon gateway\n\n# Check channel status\naeloon channels status\n```\n---\n\n## 🔌 Channel Support\n\n**WeChat** and **Feishu** support QR scan login out of the box (`/wechat login`, Feishu in-app auth).\n\nOther channels: Telegram, DingTalk, WeCom, Slack, Discord, QQ, Email, WhatsApp, Matrix.\n\nAll channels inherit `BaseChannel` and are **auto-discovered** — drop a file in `aeloon/channels/` and it works, no registration needed.\n\n---\n\n## 🤖 Provider Support\n\nMajor LLMs with one-click setup: OpenAI, Anthropic, DeepSeek, Gemini, Zhipu, Moonshot, MiniMax, Groq, OpenRouter (free tier included), Azure OpenAI, Ollama, vLLM, plus OAuth-based OpenAI Codex / GitHub Copilot.\n\nSelection priority: explicit name → model keyword match → API key prefix → API base match.\n\n---\n\n## 🔧 Tool System\n\n| Tool | Module | Function |\n|------|--------|----------|\n| FileSystem | `filesystem.py` | Read/write files, list directories, search |\n| Web | `web.py` | Search (DuckDuckGo), fetch pages, extract content |\n| Shell | `shell.py` | Execute commands (with safety policy) |\n| Cron | `cron.py` | Create/list/remove scheduled tasks |\n| MCP | `mcp.py` | Connect to external MCP tool servers |\n| Message | `message.py` | Cross-channel message sending |\n| Policy | `policy.py` | Tool execution policy control |\n| Spawn | `spawn.py` | Sub-agent delegation |\n\n---\n\n## 📝 Skill System\n\n**Pure Markdown** — extend agent capabilities with zero code. Drop a `SKILL.md` into `.aeloon/skills/` and it's injected into the system prompt. Built-in skills cover scheduling, doc conversion, GitHub, memory, summarization, terminal, and more.\n\n---\n\n## 🔌 Plugin System\n\nPlugins are modular components that extend Aeloon's core: custom slash commands, agent tools, background services, message middleware, status bar contributions, and isolated config/storage namespaces.\n\n**Plugin types**:\n- **Task Plugin** (commands + middleware) — request-response workflows, e.g. `/sr`, `/se`\n- **Hybrid Plugin** (commands + tools + services) — long-running agents, e.g. market monitoring\n- **Service / Status Plugin** (services or status bar contributions) — service-style extensions or CLI status bar contributions, e.g. `StatusPannel`\n\n**Built-in plugins**:\n\n| Plugin | Type | Description |\n|--------|------|-------------|\n| [**ScienceResearch**](./aeloon/plugins/ScienceResearch/README-SR.md) | Task | AI4S research workflow: literature search, ArXiv, risk assessment, orchestrator, structured output |\n| [**SkillGraph**](./aeloon/plugins/SkillGraph/) | Task | Skill dependency graph compilation and visualization |\n| [**Wiki**](./aeloon/plugins/Wiki/README.md) | Hybrid | Local knowledge base: content ingestion, smart digest, conversational knowledge enhancement, knowledge graph |\n| [**ACP Bridge**](./aeloon/plugins/acp_bridge/README.md) | Hybrid | External ACP agent bridging — connect third-party Agent protocols |\n| [**StatusPannel**](./aeloon/plugins/StatusPannel/) | Service | CLI status bar: model name, context token usage |\n\n**Lifecycle**: Discover → Validate → Register → Commit → Activate → Running → Deactivate\n\n**Five-step dev paradigm**: Extend `Plugin` → Implement `register(api)` → Implement `activate()` → Write handlers → Create `aeloon.plugin.json` manifest.\n\nFull development guide: [aeloon/plugins/README.md](./aeloon/plugins/README.md).\n\n---\n\n## 🐳 Docker Deployment\n\n```bash\n# Gateway mode\ndocker compose up\n\n# CLI interactive mode\ndocker compose run --rm aeloon-cli\n```\n\nDefault `docker-compose.yml` configuration:\n- Gateway port: `18790`\n- Config mount: `~/.aeloon:/root/.aeloon`\n- Resource limits: 1 CPU / 1GB memory\n\n---\n\n## ⚙️ Configuration\n\nConfig lives at `~/.aeloon/config.json` and supports camelCase aliases. Loading precedence:\n\n```\n--config flag > AELOON_CONFIG env var > ~/.aeloon/config.json\n```\n\nMinimal example:\n\n```json\n{\n \"agents\": {\n \"defaults\": {\n \"provider\": \"openrouter\",\n \"model\": \"deepseek/deepseek-r1:free\"\n }\n },\n \"providers\": {\n \"openrouter\": {\n \"apiKey\": \"sk-or-v1-...\"\n }\n }\n}\n```\n\n---\n\n## 🧪 Development\n\n```bash\n# Install dev dependencies\npip install -e \".[dev]\"\n\n# Run tests\npytest\n\n# Run specific tests\npytest tests/test_kernel.py\npytest -k \"telegram\"\n\n# Lint + auto-fix\nruff check --fix .\n\n# Format\nruff format .\n```\n\n**Requirements**: `ruff==0.15.6` (CI enforced), Python ≥ 3.11, type hints on all public functions, `async/await` preferred for I/O.\n\n### Commit Convention\n\nUses [Conventional Commits](https://www.conventionalcommits.org/):\n\n```\n<type>(<scope>): <short summary>\n```\n\nTypes: `feat`, `fix`, `chore`, `docs`, `test`, `refactor`, `perf`, `ci`\n\n---\n\n## 🔒 Security\n\n- **Network policy**: `_network_safety.py` restricts reachable URLs to prevent SSRF\n- **Execution sandbox**: Shell tool uses policy controls for allowed commands\n- **API key isolation**: Keys stored in config, never logged\n- **Channel auth**: Each channel supports `allowFrom` whitelisting\n- **MCP security**: MCP connections can configure allowed tool scopes\n\n---\n\n## 📜 License\n\n[MIT License](./LICENSE) © 2026 Aether Heart contributors\n\n---\n\n<div align=\"center\">\n\n*\"始于鳌,成于龙.\"*\nBorn from the deep. Rising into something more.\n\n</div>\n"}, "d1a6484b6e88bcf6a6119b28cf1af8d6811ed1e0": {"t": 1785771346.801461, "n": 8513, "h": "e75ea3f44aa58682", "c": "<p align=\"right\">\n<b>English</b> | <a href=\"./README.cn.md\">中文</a>\n</p>\n\n<div align=\"center\">\n\n<p align=\"left\">\n <img src=\"./assets/AH.svg\" alt=\"Aether Heart\" height=\"60\" />\n</p>\n\n<p align=\"center\">\n <img src=\"./assets/aeloon-alive.png\" alt=\"Aeloon alive\" height=\"360\" />\n</p>\n\n<p align=\"center\">\n <img src=\"./assets/Aeloon.svg\" alt=\"Aeloon\" height=\"40\" />\n</p>\n\nA **safe · light · fast** AI Agent\n\n[![Python](https://img.shields.io/badge/Python-3.11%2B-blue.svg)](https://python.org)\n[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](./LICENSE)\n[![Ruff](https://img.shields.io/badge/Linter-Ruff%200.15.6-orange.svg)](https://docs.astral.sh/ruff/)\n\n</div>\n\n---\n\n## What is Aeloon?\n\nAeloon is a message-bus-based AI assistant runtime. It unifies LLMs, tool calls, memory, and multi-channel messaging into a single runtime — you talk to it via CLI, Web UI, or IM platforms, and it orchestrates everything.\n\nCore philosophy: **one agent, all platforms, self-hosted data, privacy first.**\n\n---\n\n## ✨ Key Features\n\n| Feature | Description |\n|---------|-------------|\n| 🔄 **Message Bus Architecture** | Channel → MessageBus → Dispatcher → AgentLoop → Tool execution → Routed reply — decoupled and extensible |\n| 📡 **Multi-Channel** | Telegram, Feishu, DingTalk, WeCom, Slack, Discord, QQ, Email, WhatsApp, Matrix, WeChat |\n| 🧠 **Smart Context** | Automatic context building, memory consolidation, skill injection, sub-agent delegation |\n| 🔧 **Built-in Tools** | FileSystem, Web search/fetch, Shell exec, Cron, MCP protocol, Message sending |\n| 🤖 **Multi-Provider** | OpenAI, Anthropic, DeepSeek, Gemini, Zhipu, Moonshot, MiniMax, Groq, Ollama, vLLM, Azure OpenAI, OpenRouter, custom endpoints |\n| 📝 **Skill System** | Pure Markdown-driven — extend agent capabilities with zero code |\n| 🔌 **MCP Protocol** | Built-in MCP client to connect external tool servers |\n| 🔧 **Plugin SDK** | Complete plugin development framework: commands, tools, services, middleware, status bar, lifecycle management |\n| 🌉 **ACP Bridge** | Built-in ACP Bridge plugin connecting to external agent ecosystems via ACP protocol |\n| 📊 **Task Graph** | Tool calls compiled into a DAG — read-only ops run concurrently, writes serialized conservatively |\n| 🔒 **Security First** | Network safety policies, execution sandbox, API key isolation |\n| 🐳 **Docker Ready** | One-command `docker compose up` for gateway mode |\n\n---\n\n## 🚀 Quick Start\n\n### One-Click Install\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/AetherHeartAI/Aeloon/main/install.sh | bash\n```\n\nThe installer walks you through provider and channel setup interactively. Offline and source installs are also supported:\n\n```bash\n# Install from local source\nbash install.sh --from-source\n\n# Install a specific version\nbash install.sh --version v1.0.0\n\n# Offline mode (requires local wheel)\nbash install.sh --offline\n```\n\n### Manual Install\n\n```bash\n# Install from source\ngit clone https://github.com/AetherHeartAI/Aeloon.git\ncd Aeloon\npip install -e .\n\n# First-time config\naeloon onboard\n```\n\n### Build a wheel\n\n```bash\n# Output to dist/ by default\nbash scripts/build_wheel.sh\n\n# Use a custom directory and clear old artifacts\nbash scripts/build_wheel.sh ./artifacts --clear\n```\n\n### First Conversation\n\n```bash\n# One-shot CLI chat\naeloon agent -m \"Hello Aeloon.\"\n\n# Start gateway mode (connects all channels)\naeloon gateway\n\n# Check channel status\naeloon channels status\n```\n---\n\n## 🔌 Channel Support\n\n**WeChat** and **Feishu** support QR scan login out of the box (`/wechat login`, Feishu in-app auth).\n\nOther channels: Telegram, DingTalk, WeCom, Slack, Discord, QQ, Email, WhatsApp, Matrix.\n\nAll channels inherit `BaseChannel` and are **auto-discovered** — drop a file in `aeloon/channels/` and it works, no registration needed.\n\n---\n\n## 🤖 Provider Support\n\nMajor LLMs with one-click setup: OpenAI, Anthropic, DeepSeek, Gemini, Zhipu, Moonshot, MiniMax, Groq, OpenRouter (free tier included), Azure OpenAI, Ollama, vLLM, plus OAuth-based OpenAI Codex / GitHub Copilot.\n\nSelection priority: explicit name → model keyword match → API key prefix → API base match.\n\n---\n\n## 🔧 Tool System\n\n| Tool | Module | Function |\n|------|--------|----------|\n| FileSystem | `filesystem.py` | Read/write files, list directories, search |\n| Web | `web.py` | Search (DuckDuckGo), fetch pages, extract content |\n| Shell | `shell.py` | Execute commands (with safety policy) |\n| Cron | `cron.py` | Create/list/remove scheduled tasks |\n| MCP | `mcp.py` | Connect to external MCP tool servers |\n| Message | `message.py` | Cross-channel message sending |\n| Policy | `policy.py` | Tool execution policy control |\n| Spawn | `spawn.py` | Sub-agent delegation |\n\n---\n\n## 📝 Skill System\n\n**Pure Markdown** — extend agent capabilities with zero code. Drop a `SKILL.md` into `.aeloon/skills/` and it's injected into the system prompt. Built-in skills cover scheduling, doc conversion, GitHub, memory, summarization, terminal, and more.\n\n---\n\n## 🔌 Plugin System\n\nPlugins are modular components that extend Aeloon's core: custom slash commands, agent tools, background services, message middleware, status bar contributions, and isolated config/storage namespaces.\n\n**Plugin types**:\n- **Task Plugin** (commands + middleware) — request-response workflows, e.g. `/sr`, `/se`\n- **Hybrid Plugin** (commands + tools + services) — long-running agents, e.g. market monitoring\n- **Service / Status Plugin** (services or status bar contributions) — service-style extensions or CLI status bar contributions, e.g. `StatusPannel`\n\n**Built-in plugins**:\n\n| Plugin | Type | Description |\n|--------|------|-------------|\n| [**ScienceResearch**](./aeloon/plugins/ScienceResearch/README-SR.md) | Task | AI4S research workflow: literature search, ArXiv, risk assessment, orchestrator, structured output |\n| [**SkillGraph**](./aeloon/plugins/SkillGraph/) | Task | Skill dependency graph compilation and visualization |\n| [**Wiki**](./aeloon/plugins/Wiki/README.md) | Hybrid | Local knowledge base: content ingestion, smart digest, conversational knowledge enhancement, knowledge graph |\n| [**ACP Bridge**](./aeloon/plugins/acp_bridge/README.md) | Hybrid | External ACP agent bridging — connect third-party Agent protocols |\n| [**StatusPannel**](./aeloon/plugins/StatusPannel/) | Service | CLI status bar: model name, context token usage |\n\n**Lifecycle**: Discover → Validate → Register → Commit → Activate → Running → Deactivate\n\n**Five-step dev paradigm**: Extend `Plugin` → Implement `register(api)` → Implement `activate()` → Write handlers → Create `aeloon.plugin.json` manifest.\n\nFull development guide: [aeloon/plugins/README.md](./aeloon/plugins/README.md).\n\n---\n\n## 🐳 Docker Deployment\n\n```bash\n# Gateway mode\ndocker compose up\n\n# CLI interactive mode\ndocker compose run --rm aeloon-cli\n```\n\nDefault `docker-compose.yml` configuration:\n- Gateway port: `18790`\n- Config mount: `~/.aeloon:/root/.aeloon`\n- Resource limits: 1 CPU / 1GB memory\n\n---\n\n## ⚙️ Configuration\n\nConfig lives at `~/.aeloon/config.json` and supports camelCase aliases. Loading precedence:\n\n```\n--config flag > AELOON_CONFIG env var > ~/.aeloon/config.json\n```\n\nMinimal example:\n\n```json\n{\n \"agents\": {\n \"defaults\": {\n \"provider\": \"openrouter\",\n \"model\": \"deepseek/deepseek-r1:free\"\n }\n },\n \"providers\": {\n \"openrouter\": {\n \"apiKey\": \"sk-or-v1-...\"\n }\n }\n}\n```\n\n---\n\n## 🧪 Development\n\n```bash\n# Install dev dependencies\npip install -e \".[dev]\"\n\n# Run tests\npytest\n\n# Run specific tests\npytest tests/test_kernel.py\npytest -k \"telegram\"\n\n# Lint + auto-fix\nruff check --fix .\n\n# Format\nruff format .\n```\n\n**Requirements**: `ruff==0.15.6` (CI enforced), Python ≥ 3.11, type hints on all public functions, `async/await` preferred for I/O.\n\n### Commit Convention\n\nUses [Conventional Commits](https://www.conventionalcommits.org/):\n\n```\n<type>(<scope>): <short summary>\n```\n\nTypes: `feat`, `fix`, `chore`, `docs`, `test`, `refactor`, `perf`, `ci`\n\n---\n\n## 🔒 Security\n\n- **Network policy**: `_network_safety.py` restricts reachable URLs to prevent SSRF\n- **Execution sandbox**: Shell tool uses policy controls for allowed commands\n- **API key isolation**: Keys stored in config, never logged\n- **Channel auth**: Each channel supports `allowFrom` whitelisting\n- **MCP security**: MCP connections can configure allowed tool scopes\n\n---\n\n## 📜 License\n\n[MIT License](./LICENSE) © 2026 Aether Heart contributors\n\n---\n\n<div align=\"center\">\n\n*\"始于鳌,成于龙.\"*\nBorn from the deep. Rising into something more.\n\n</div>\n"}, "7543d7cba757e3a94a9ef1d3988253abf345e14e": {"t": 1785771347.9566593, "n": 8521, "h": "082464737409fe0c", "c": "<p align=\"right\">\n<b>English</b> | <a href=\"./README.cn.md\">中文</a>\n</p>\n\n<div align=\"center\">\n\n<p align=\"left\">\n <img src=\"./assets/AH.svg\" alt=\"Aether Heart\" height=\"60\" />\n</p>\n\n<p align=\"center\">\n <img src=\"./assets/aeloon-alive.png\" alt=\"Aeloon alive\" height=\"360\" />\n</p>\n\n<p align=\"center\">\n <img src=\"./assets/Aeloon.svg\" alt=\"Aeloon\" height=\"40\" />\n</p>\n\nA **safe · light · fast** AI agent runtime\n\n[![Python](https://img.shields.io/badge/Python-3.11%2B-blue.svg)](https://python.org)\n[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](./LICENSE)\n[![Ruff](https://img.shields.io/badge/Linter-Ruff%200.15.6-orange.svg)](https://docs.astral.sh/ruff/)\n\n</div>\n\n---\n\n## What is Aeloon?\n\nAeloon is a message-bus-based AI assistant runtime. It unifies LLMs, tool calls, memory, and multi-channel messaging into a single runtime — you talk to it via CLI, Web UI, or IM platforms, and it orchestrates everything.\n\nCore philosophy: **one agent, all platforms, self-hosted data, privacy first.**\n\n---\n\n## ✨ Key Features\n\n| Feature | Description |\n|---------|-------------|\n| 🔄 **Message Bus Architecture** | Channel → MessageBus → Dispatcher → AgentLoop → Tool execution → Routed reply — decoupled and extensible |\n| 📡 **Multi-Channel** | Telegram, Feishu, DingTalk, WeCom, Slack, Discord, QQ, Email, WhatsApp, Matrix, WeChat |\n| 🧠 **Smart Context** | Automatic context building, memory consolidation, skill injection, sub-agent delegation |\n| 🔧 **Built-in Tools** | FileSystem, Web search/fetch, Shell exec, Cron, MCP protocol, Message sending |\n| 🤖 **Multi-Provider** | OpenAI, Anthropic, DeepSeek, Gemini, Zhipu, Moonshot, MiniMax, Groq, Ollama, vLLM, Azure OpenAI, OpenRouter, custom endpoints |\n| 📝 **Skill System** | Pure Markdown-driven — extend agent capabilities with zero code |\n| 🔌 **MCP Protocol** | Built-in MCP client to connect external tool servers |\n| 🔧 **Plugin SDK** | Complete plugin development framework: commands, tools, services, middleware, status bar, lifecycle management |\n| 🌉 **ACP Bridge** | Built-in ACP Bridge plugin connecting to external agent ecosystems via ACP protocol |\n| 📊 **Task Graph** | Tool calls compiled into a DAG — read-only ops run concurrently, writes serialized conservatively |\n| 🔒 **Security First** | Network safety policies, execution sandbox, API key isolation |\n| 🐳 **Docker Ready** | One-command `docker compose up` for gateway mode |\n\n---\n\n## 🚀 Quick Start\n\n### One-Click Install\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/AetherHeartAI/Aeloon/main/install.sh | bash\n```\n\nThe installer walks you through provider and channel setup interactively. Offline and source installs are also supported:\n\n```bash\n# Install from local source\nbash install.sh --from-source\n\n# Install a specific version\nbash install.sh --version v1.0.0\n\n# Offline mode (requires local wheel)\nbash install.sh --offline\n```\n\n### Manual Install\n\n```bash\n# Install from source\ngit clone https://github.com/AetherHeartAI/Aeloon.git\ncd Aeloon\npip install -e .\n\n# First-time config\naeloon onboard\n```\n\n### Build a wheel\n\n```bash\n# Output to dist/ by default\nbash scripts/build_wheel.sh\n\n# Use a custom directory and clear old artifacts\nbash scripts/build_wheel.sh ./artifacts --clear\n```\n\n### First Conversation\n\n```bash\n# One-shot CLI chat\naeloon agent -m \"Hello Aeloon.\"\n\n# Start gateway mode (connects all channels)\naeloon gateway\n\n# Check channel status\naeloon channels status\n```\n---\n\n## 🔌 Channel Support\n\n**WeChat** and **Feishu** support QR scan login out of the box (`/wechat login`, Feishu in-app auth).\n\nOther channels: Telegram, DingTalk, WeCom, Slack, Discord, QQ, Email, WhatsApp, Matrix.\n\nAll channels inherit `BaseChannel` and are **auto-discovered** — drop a file in `aeloon/channels/` and it works, no registration needed.\n\n---\n\n## 🤖 Provider Support\n\nMajor LLMs with one-click setup: OpenAI, Anthropic, DeepSeek, Gemini, Zhipu, Moonshot, MiniMax, Groq, OpenRouter (free tier included), Azure OpenAI, Ollama, vLLM, plus OAuth-based OpenAI Codex / GitHub Copilot.\n\nSelection priority: explicit name → model keyword match → API key prefix → API base match.\n\n---\n\n## 🔧 Tool System\n\n| Tool | Module | Function |\n|------|--------|----------|\n| FileSystem | `filesystem.py` | Read/write files, list directories, search |\n| Web | `web.py` | Search (DuckDuckGo), fetch pages, extract content |\n| Shell | `shell.py` | Execute commands (with safety policy) |\n| Cron | `cron.py` | Create/list/remove scheduled tasks |\n| MCP | `mcp.py` | Connect to external MCP tool servers |\n| Message | `message.py` | Cross-channel message sending |\n| Policy | `policy.py` | Tool execution policy control |\n| Spawn | `spawn.py` | Sub-agent delegation |\n\n---\n\n## 📝 Skill System\n\n**Pure Markdown** — extend agent capabilities with zero code. Drop a `SKILL.md` into `.aeloon/skills/` and it's injected into the system prompt. Built-in skills cover scheduling, doc conversion, GitHub, memory, summarization, terminal, and more.\n\n---\n\n## 🔌 Plugin System\n\nPlugins are modular components that extend Aeloon's core: custom slash commands, agent tools, background services, message middleware, status bar contributions, and isolated config/storage namespaces.\n\n**Plugin types**:\n- **Task Plugin** (commands + middleware) — request-response workflows, e.g. `/sr`, `/se`\n- **Hybrid Plugin** (commands + tools + services) — long-running agents, e.g. market monitoring\n- **Service / Status Plugin** (services or status bar contributions) — service-style extensions or CLI status bar contributions, e.g. `StatusPannel`\n\n**Built-in plugins**:\n\n| Plugin | Type | Description |\n|--------|------|-------------|\n| [**ScienceResearch**](./aeloon/plugins/ScienceResearch/README-SR.md) | Task | AI4S research workflow: literature search, ArXiv, risk assessment, orchestrator, structured output |\n| [**SkillGraph**](./aeloon/plugins/SkillGraph/) | Task | Skill dependency graph compilation and visualization |\n| [**Wiki**](./aeloon/plugins/Wiki/README.md) | Hybrid | Local knowledge base: content ingestion, smart digest, conversational knowledge enhancement, knowledge graph |\n| [**ACP Bridge**](./aeloon/plugins/acp_bridge/README.md) | Hybrid | External ACP agent bridging — connect third-party Agent protocols |\n| [**StatusPannel**](./aeloon/plugins/StatusPannel/) | Service | CLI status bar: model name, context token usage |\n\n**Lifecycle**: Discover → Validate → Register → Commit → Activate → Running → Deactivate\n\n**Five-step dev paradigm**: Extend `Plugin` → Implement `register(api)` → Implement `activate()` → Write handlers → Create `aeloon.plugin.json` manifest.\n\nFull development guide: [aeloon/plugins/README.md](./aeloon/plugins/README.md).\n\n---\n\n## 🐳 Docker Deployment\n\n```bash\n# Gateway mode\ndocker compose up\n\n# CLI interactive mode\ndocker compose run --rm aeloon-cli\n```\n\nDefault `docker-compose.yml` configuration:\n- Gateway port: `18790`\n- Config mount: `~/.aeloon:/root/.aeloon`\n- Resource limits: 1 CPU / 1GB memory\n\n---\n\n## ⚙️ Configuration\n\nConfig lives at `~/.aeloon/config.json` and supports camelCase aliases. Loading precedence:\n\n```\n--config flag > AELOON_CONFIG env var > ~/.aeloon/config.json\n```\n\nMinimal example:\n\n```json\n{\n \"agents\": {\n \"defaults\": {\n \"provider\": \"openrouter\",\n \"model\": \"deepseek/deepseek-r1:free\"\n }\n },\n \"providers\": {\n \"openrouter\": {\n \"apiKey\": \"sk-or-v1-...\"\n }\n }\n}\n```\n\n---\n\n## 🧪 Development\n\n```bash\n# Install dev dependencies\npip install -e \".[dev]\"\n\n# Run tests\npytest\n\n# Run specific tests\npytest tests/test_kernel.py\npytest -k \"telegram\"\n\n# Lint + auto-fix\nruff check --fix .\n\n# Format\nruff format .\n```\n\n**Requirements**: `ruff==0.15.6` (CI enforced), Python ≥ 3.11, type hints on all public functions, `async/await` preferred for I/O.\n\n### Commit Convention\n\nUses [Conventional Commits](https://www.conventionalcommits.org/):\n\n```\n<type>(<scope>): <short summary>\n```\n\nTypes: `feat`, `fix`, `chore`, `docs`, `test`, `refactor`, `perf`, `ci`\n\n---\n\n## 🔒 Security\n\n- **Network policy**: `_network_safety.py` restricts reachable URLs to prevent SSRF\n- **Execution sandbox**: Shell tool uses policy controls for allowed commands\n- **API key isolation**: Keys stored in config, never logged\n- **Channel auth**: Each channel supports `allowFrom` whitelisting\n- **MCP security**: MCP connections can configure allowed tool scopes\n\n---\n\n## 📜 License\n\n[MIT License](./LICENSE) © 2026 Aether Heart contributors\n\n---\n\n<div align=\"center\">\n\n*\"始于鳌,成于龙.\"*\nBorn from the deep. Rising into something more.\n\n</div>\n"}}, "README.cn.md": {"e5afaa1c27eb8fa2f7c1e76545aa92291eeaf4e4": {"t": 1785747256.5710664, "n": 5517, "h": "c7485d9b13906f61", "c": "<p align=\"right\">\n<a href=\"./README.md\">English</a> | <b>中文</b>\n</p>\n\n<div align=\"center\">\n\n<p align=\"left\">\n <img src=\"./assets/AH.svg\" alt=\"Aether Heart\" height=\"60\" />\n</p>\n\n<p align=\"center\">\n <img src=\"./assets/aeloon-alive.png\" alt=\"Aeloon alive\" height=\"360\" />\n</p>\n\n<p align=\"center\">\n <img src=\"./assets/Aeloon.svg\" alt=\"Aeloon\" height=\"40\" />\n</p>\n\n**安全 · 轻量 · 快速** 的 AI 智能体\n\n[![Python](https://img.shields.io/badge/Python-3.11%2B-blue.svg)](https://python.org)\n[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](./LICENSE)\n[![Ruff](https://img.shields.io/badge/Linter-Ruff%200.15.6-orange.svg)](https://docs.astral.sh/ruff/)\n\n</div>\n\n---\n\n## Aeloon 是什么?\n\nAeloon 是一个轻量级、高性能且模块化的 AI Agent 框架。其核心特性包括图驱动的并行加速,以及支持多种应用场景(如深度研究、维基、技能图谱、ACP 桥接和状态面板)的灵活热插拔插件系统。\n\n核心理念:**一个智能体,全平台可用,数据自持,隐私至上。**\n\n---\n\n## ✨ 核心特性\n\n| 特性 | 说明 |\n|------|------|\n| 🔄 **消息总线架构** | 渠道 → MessageBus → Dispatcher → AgentLoop → 工具执行 → 路由回复,解耦且可扩展 |\n| 📡 **多渠道支持** | Telegram、飞书、钉钉、企业微信、Slack、Discord、QQ、Email、WhatsApp、Matrix、WeChat |\n| 🧠 **智能上下文** | 自动上下文构建、记忆合并、技能注入、子智能体委托 |\n| 🔧 **内置工具** | 文件系统、Web 搜索/抓取、Shell 执行、定时任务(Cron)、MCP 协议、消息发送 |\n| 🤖 **多 Provider** | OpenAI、Anthropic、DeepSeek、Gemini、通义千问、月之暗面、MiniMax、Groq、Ollama、vLLM、Azure OpenAI、OpenRouter、自定义端点 |\n| 📝 **技能系统** | 纯 Markdown 驱动,零代码即可扩展智能体能力 |\n| 🔌 **MCP 协议** | 内置 MCP 客户端,可连接外部工具服务器 |\n| 🔧 **插件 SDK** | 完整插件开发框架:命令、工具、服务、中间件、状态栏、生命周期管理 |\n| 🌉 **ACP 桥接** | 内置 ACP Bridge 插件,通过 ACP 协议连接外部智能体生态 |\n| 📊 **任务图** | 工具调用编译为 DAG,只读操作并发执行,写操作串行保守调度 |\n| 🔒 **安全优先** | 网络安全策略、执行沙箱、API Key 隔离 |\n| 🐳 **Docker 就绪** | 一键 `docker compose up` 启动网关模式 |\n\n---\n\n## 🚀 快速开始\n\n### 一键安装\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/AetherHeartAI/Aeloon/main/install.sh | bash\n```\n\n安装脚本会交互式引导你配置 Provider 和渠道。也支持离线安装和从源码安装:\n\n```bash\n# 从本地源码安装\nbash install.sh --from-source\n\n# 指定版本\nbash install.sh --version v1.0.0\n\n# 离线模式(需本地 wheel)\nbash install.sh --offline\n```\n\n### 手动安装\n\n```bash\n# 克隆仓库\ngit clone https://github.com/AetherHeartAI/Aeloon.git\ncd Aeloon\npip install -e .\n\n# 首次配置\naeloon onboard\n```\n\n### 第一次对话\n\n```bash\n# CLI 一轮对话\naeloon agent -m \"你好,Aeloon.\"\n\n# 启动网关模式(连接各渠道)\naeloon gateway\n\n# 查看渠道状态\naeloon channels status\n```\n\n\n---\n\n## 🔌 渠道支持\n\n**微信** 和 **飞书** 支持扫码直接登录(`/wechat login`、飞书应用内免登),开箱即用。\n\n其他渠道:Telegram、钉钉、企业微信、Slack、Discord、QQ、Email、WhatsApp、Matrix。\n\n所有渠道继承 `BaseChannel`,**自动发现**——放入 `aeloon/channels/` 即可启用,无需注册。\n\n---\n\n## 🤖 Provider 支持\n\n国内外主流模型一键接入:OpenAI、Anthropic、DeepSeek、Gemini、通义千问、月之暗面、MiniMax、Groq、OpenRouter(含免费额度)、Azure OpenAI、Ollama、vLLM,以及 OAuth 认证的 OpenAI Codex / GitHub Copilot。\n\n选择优先级:显式指定 → 模型关键词匹配 → API Key 前缀 → API Base 匹配。\n\n---\n\n## 🔧 工具系统\n\n| 工具 | 模块 | 功能 |\n|------|------|------|\n| FileSystem | `filesystem.py` | 读写文件、目录列表、搜索 |\n| Web | `web.py` | 搜索(DuckDuckGo)、抓取网页、提取正文 |\n| Shell | `shell.py` | 执行命令(带安全策略) |\n| Cron | `cron.py` | 创建/列表/删除定时任务 |\n| MCP | `mcp.py` | 连接外部 MCP 工具服务器 |\n| Message | `message.py` | 跨渠道发送消息 |\n| Policy | `policy.py` | 工具执行策略控制 |\n| Spawn | `spawn.py` | 子智能体委派 |\n\n---\n\n## 📝 技能系统\n\n**纯 Markdown** 驱动,零代码扩展智能体能力。在工作区 `.aeloon/skills/` 下创建 `SKILL.md` 即可注入新技能到系统提示。内置技能涵盖定时任务、文档转换、GitHub 操作、记忆管理、摘要、终端等。\n\n---\n\n## 🔌 插件系统\n\n插件是扩展 Aeloon 核心能力的模块化组件,支持:自定义 Slash 命令、注册 Agent 工具、后台服务、消息中间件、状态栏贡献,以及独立的配置与存储命名空间。\n\n**插件类型**:\n- **Task Plugin**(命令 + 中间件)—— 请求-响应式工作流,如 `/sr`、`/wiki`\n- **Hybrid Plugin**(命令 + 工具 + 服务)—— 长期运行代理,如市场监控\n- **Service / Status Plugin**(服务或状态栏贡献)—— 服务型扩展或 CLI 状态栏贡献,如 `StatusPannel`\n\n**内置插件**:\n\n| 插件 | 类型 | 说明 |\n|------|------|------|\n| [**ScienceResearch**](./aeloon/plugins/ScienceResearch/README-SR.md) | Task | AI4S 科研工作流:文献检索、ArXiv、风险评估、编排器、结构化输出 |\n| [**SkillGraph**](./aeloon/plugins/SkillGraph/) | Task | 技能依赖图编译与可视化 |\n| [**Wiki**](./aeloon/plugins/Wiki/README.md) | Hybrid | 本地知识库:内容采集、智能摘要、对话知识增强、知识图谱 |\n| [**ACP Bridge**](./aeloon/plugins/acp_bridge/README.md) | Hybrid | 外部 ACP 智能体桥接,连接第三方 Agent 协议 |\n| [**StatusPannel**](./aeloon/plugins/StatusPannel/) | Service | CLI 状态栏:模型名称、上下文 Token 用量 |\n\n**生命周期**:发现 → 验证 → 注册 → 提交 → 激活 → 运行 → 停用\n\n**五步开发范式**:继承 `Plugin` → 实现 `register(api)` → 实现 `activate()` → 编写业务处理 → 创建 `aeloon.plugin.json` 清单。\n\n完整开发指南见 [aeloon/plugins/README.md](./aeloon/plugins/README.md)。\n\n---\n\n## 🐳 Docker 部署\n\n```bash\n# 网关模式\ndocker compose up\n\n# CLI 交互模式\ndocker compose run --rm aeloon-cli\n```\n\n`docker-compose.yml` 默认配置:\n- 网关端口:`18790`\n- 配置目录挂载:`~/.aeloon:/root/.aeloon`\n- 资源限制:1 CPU / 1GB 内存\n\n---\n\n## ⚙️ 配置\n\n配置文件位于 `~/.aeloon/config.json`,支持 camelCase 别名。加载优先级:\n\n```\n--config 标志 > AELOON_CONFIG 环境变量 > ~/.aeloon/config.json\n```\n\n最小配置示例:\n\n```json\n{\n \"agents\": {\n \"defaults\": {\n \"provider\": \"openrouter\",\n \"model\": \"deepseek/deepseek-r1:free\"\n }\n },\n \"providers\": {\n \"openrouter\": {\n \"apiKey\": \"sk-or-v1-...\"\n }\n }\n}\n```\n\n---\n\n## 🧪 开发\n\n```bash\n# 安装开发依赖\npip install -e \".[dev]\"\n\n# 运行测试\npytest\n\n# 运行指定测试\npytest tests/test_kernel.py\npytest -k \"telegram\"\n\n# 代码检查 + 自动修复\nruff check --fix .\n\n# 格式化\nruff format .\n```\n\n**要求**:`ruff==0.15.6`(CI 强制),Python ≥ 3.11,所有公开函数需要类型注解,异步 I/O 优先使用 `async/await`。\n\n### 提交规范\n\n采用 [Conventional Commits](https://www.conventionalcommits.org/) 格式:\n\n```\n<type>(<scope>): <short summary>\n```\n\n类型:`feat`、`fix`、`chore`、`docs`、`test`、`refactor`、`perf`、`ci`\n\n---\n\n## 🔒 安全\n\n- **网络策略**:`_network_safety.py` 限制可访问的 URL,防止 SSRF\n- **执行沙箱**:Shell 工具通过策略控制可执行命令\n- **API Key 隔离**:配置文件存储 API Key,不记录到日志\n- **渠道认证**:每条渠道支持 `allowFrom` 白名单\n- **MCP 安全**:MCP 连接可配置允许的工具范围\n\n---\n\n## 📜 许可证\n\n[MIT License](./LICENSE) © 2026 Aether Heart contributors\n\n---\n\n<div align=\"center\">\n\n*\"始于鳌,成于龙.\"*\nBorn from the deep. Rising into something more.\n\n</div>\n"}, "cd28e00d709f0290bd5658ae13fa9dfeb400a765": {"t": 1785771343.2248373, "n": 5517, "h": "c7485d9b13906f61", "c": "<p align=\"right\">\n<a href=\"./README.md\">English</a> | <b>中文</b>\n</p>\n\n<div align=\"center\">\n\n<p align=\"left\">\n <img src=\"./assets/AH.svg\" alt=\"Aether Heart\" height=\"60\" />\n</p>\n\n<p align=\"center\">\n <img src=\"./assets/aeloon-alive.png\" alt=\"Aeloon alive\" height=\"360\" />\n</p>\n\n<p align=\"center\">\n <img src=\"./assets/Aeloon.svg\" alt=\"Aeloon\" height=\"40\" />\n</p>\n\n**安全 · 轻量 · 快速** 的 AI 智能体\n\n[![Python](https://img.shields.io/badge/Python-3.11%2B-blue.svg)](https://python.org)\n[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](./LICENSE)\n[![Ruff](https://img.shields.io/badge/Linter-Ruff%200.15.6-orange.svg)](https://docs.astral.sh/ruff/)\n\n</div>\n\n---\n\n## Aeloon 是什么?\n\nAeloon 是一个轻量级、高性能且模块化的 AI Agent 框架。其核心特性包括图驱动的并行加速,以及支持多种应用场景(如深度研究、维基、技能图谱、ACP 桥接和状态面板)的灵活热插拔插件系统。\n\n核心理念:**一个智能体,全平台可用,数据自持,隐私至上。**\n\n---\n\n## ✨ 核心特性\n\n| 特性 | 说明 |\n|------|------|\n| 🔄 **消息总线架构** | 渠道 → MessageBus → Dispatcher → AgentLoop → 工具执行 → 路由回复,解耦且可扩展 |\n| 📡 **多渠道支持** | Telegram、飞书、钉钉、企业微信、Slack、Discord、QQ、Email、WhatsApp、Matrix、WeChat |\n| 🧠 **智能上下文** | 自动上下文构建、记忆合并、技能注入、子智能体委托 |\n| 🔧 **内置工具** | 文件系统、Web 搜索/抓取、Shell 执行、定时任务(Cron)、MCP 协议、消息发送 |\n| 🤖 **多 Provider** | OpenAI、Anthropic、DeepSeek、Gemini、通义千问、月之暗面、MiniMax、Groq、Ollama、vLLM、Azure OpenAI、OpenRouter、自定义端点 |\n| 📝 **技能系统** | 纯 Markdown 驱动,零代码即可扩展智能体能力 |\n| 🔌 **MCP 协议** | 内置 MCP 客户端,可连接外部工具服务器 |\n| 🔧 **插件 SDK** | 完整插件开发框架:命令、工具、服务、中间件、状态栏、生命周期管理 |\n| 🌉 **ACP 桥接** | 内置 ACP Bridge 插件,通过 ACP 协议连接外部智能体生态 |\n| 📊 **任务图** | 工具调用编译为 DAG,只读操作并发执行,写操作串行保守调度 |\n| 🔒 **安全优先** | 网络安全策略、执行沙箱、API Key 隔离 |\n| 🐳 **Docker 就绪** | 一键 `docker compose up` 启动网关模式 |\n\n---\n\n## 🚀 快速开始\n\n### 一键安装\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/AetherHeartAI/Aeloon/main/install.sh | bash\n```\n\n安装脚本会交互式引导你配置 Provider 和渠道。也支持离线安装和从源码安装:\n\n```bash\n# 从本地源码安装\nbash install.sh --from-source\n\n# 指定版本\nbash install.sh --version v1.0.0\n\n# 离线模式(需本地 wheel)\nbash install.sh --offline\n```\n\n### 手动安装\n\n```bash\n# 克隆仓库\ngit clone https://github.com/AetherHeartAI/Aeloon.git\ncd Aeloon\npip install -e .\n\n# 首次配置\naeloon onboard\n```\n\n### 第一次对话\n\n```bash\n# CLI 一轮对话\naeloon agent -m \"你好,Aeloon.\"\n\n# 启动网关模式(连接各渠道)\naeloon gateway\n\n# 查看渠道状态\naeloon channels status\n```\n\n\n---\n\n## 🔌 渠道支持\n\n**微信** 和 **飞书** 支持扫码直接登录(`/wechat login`、飞书应用内免登),开箱即用。\n\n其他渠道:Telegram、钉钉、企业微信、Slack、Discord、QQ、Email、WhatsApp、Matrix。\n\n所有渠道继承 `BaseChannel`,**自动发现**——放入 `aeloon/channels/` 即可启用,无需注册。\n\n---\n\n## 🤖 Provider 支持\n\n国内外主流模型一键接入:OpenAI、Anthropic、DeepSeek、Gemini、通义千问、月之暗面、MiniMax、Groq、OpenRouter(含免费额度)、Azure OpenAI、Ollama、vLLM,以及 OAuth 认证的 OpenAI Codex / GitHub Copilot。\n\n选择优先级:显式指定 → 模型关键词匹配 → API Key 前缀 → API Base 匹配。\n\n---\n\n## 🔧 工具系统\n\n| 工具 | 模块 | 功能 |\n|------|------|------|\n| FileSystem | `filesystem.py` | 读写文件、目录列表、搜索 |\n| Web | `web.py` | 搜索(DuckDuckGo)、抓取网页、提取正文 |\n| Shell | `shell.py` | 执行命令(带安全策略) |\n| Cron | `cron.py` | 创建/列表/删除定时任务 |\n| MCP | `mcp.py` | 连接外部 MCP 工具服务器 |\n| Message | `message.py` | 跨渠道发送消息 |\n| Policy | `policy.py` | 工具执行策略控制 |\n| Spawn | `spawn.py` | 子智能体委派 |\n\n---\n\n## 📝 技能系统\n\n**纯 Markdown** 驱动,零代码扩展智能体能力。在工作区 `.aeloon/skills/` 下创建 `SKILL.md` 即可注入新技能到系统提示。内置技能涵盖定时任务、文档转换、GitHub 操作、记忆管理、摘要、终端等。\n\n---\n\n## 🔌 插件系统\n\n插件是扩展 Aeloon 核心能力的模块化组件,支持:自定义 Slash 命令、注册 Agent 工具、后台服务、消息中间件、状态栏贡献,以及独立的配置与存储命名空间。\n\n**插件类型**:\n- **Task Plugin**(命令 + 中间件)—— 请求-响应式工作流,如 `/sr`、`/wiki`\n- **Hybrid Plugin**(命令 + 工具 + 服务)—— 长期运行代理,如市场监控\n- **Service / Status Plugin**(服务或状态栏贡献)—— 服务型扩展或 CLI 状态栏贡献,如 `StatusPannel`\n\n**内置插件**:\n\n| 插件 | 类型 | 说明 |\n|------|------|------|\n| [**ScienceResearch**](./aeloon/plugins/ScienceResearch/README-SR.md) | Task | AI4S 科研工作流:文献检索、ArXiv、风险评估、编排器、结构化输出 |\n| [**SkillGraph**](./aeloon/plugins/SkillGraph/) | Task | 技能依赖图编译与可视化 |\n| [**Wiki**](./aeloon/plugins/Wiki/README.md) | Hybrid | 本地知识库:内容采集、智能摘要、对话知识增强、知识图谱 |\n| [**ACP Bridge**](./aeloon/plugins/acp_bridge/README.md) | Hybrid | 外部 ACP 智能体桥接,连接第三方 Agent 协议 |\n| [**StatusPannel**](./aeloon/plugins/StatusPannel/) | Service | CLI 状态栏:模型名称、上下文 Token 用量 |\n\n**生命周期**:发现 → 验证 → 注册 → 提交 → 激活 → 运行 → 停用\n\n**五步开发范式**:继承 `Plugin` → 实现 `register(api)` → 实现 `activate()` → 编写业务处理 → 创建 `aeloon.plugin.json` 清单。\n\n完整开发指南见 [aeloon/plugins/README.md](./aeloon/plugins/README.md)。\n\n---\n\n## 🐳 Docker 部署\n\n```bash\n# 网关模式\ndocker compose up\n\n# CLI 交互模式\ndocker compose run --rm aeloon-cli\n```\n\n`docker-compose.yml` 默认配置:\n- 网关端口:`18790`\n- 配置目录挂载:`~/.aeloon:/root/.aeloon`\n- 资源限制:1 CPU / 1GB 内存\n\n---\n\n## ⚙️ 配置\n\n配置文件位于 `~/.aeloon/config.json`,支持 camelCase 别名。加载优先级:\n\n```\n--config 标志 > AELOON_CONFIG 环境变量 > ~/.aeloon/config.json\n```\n\n最小配置示例:\n\n```json\n{\n \"agents\": {\n \"defaults\": {\n \"provider\": \"openrouter\",\n \"model\": \"deepseek/deepseek-r1:free\"\n }\n },\n \"providers\": {\n \"openrouter\": {\n \"apiKey\": \"sk-or-v1-...\"\n }\n }\n}\n```\n\n---\n\n## 🧪 开发\n\n```bash\n# 安装开发依赖\npip install -e \".[dev]\"\n\n# 运行测试\npytest\n\n# 运行指定测试\npytest tests/test_kernel.py\npytest -k \"telegram\"\n\n# 代码检查 + 自动修复\nruff check --fix .\n\n# 格式化\nruff format .\n```\n\n**要求**:`ruff==0.15.6`(CI 强制),Python ≥ 3.11,所有公开函数需要类型注解,异步 I/O 优先使用 `async/await`。\n\n### 提交规范\n\n采用 [Conventional Commits](https://www.conventionalcommits.org/) 格式:\n\n```\n<type>(<scope>): <short summary>\n```\n\n类型:`feat`、`fix`、`chore`、`docs`、`test`、`refactor`、`perf`、`ci`\n\n---\n\n## 🔒 安全\n\n- **网络策略**:`_network_safety.py` 限制可访问的 URL,防止 SSRF\n- **执行沙箱**:Shell 工具通过策略控制可执行命令\n- **API Key 隔离**:配置文件存储 API Key,不记录到日志\n- **渠道认证**:每条渠道支持 `allowFrom` 白名单\n- **MCP 安全**:MCP 连接可配置允许的工具范围\n\n---\n\n## 📜 许可证\n\n[MIT License](./LICENSE) © 2026 Aether Heart contributors\n\n---\n\n<div align=\"center\">\n\n*\"始于鳌,成于龙.\"*\nBorn from the deep. Rising into something more.\n\n</div>\n"}, "1284cc3f69224e8ceb0753010836e444be1f1301": {"t": 1785771344.4632297, "n": 5553, "h": "5b3084e6de2ebca9", "c": "<p align=\"right\">\n<a href=\"./README.md\">English</a> | <b>中文</b>\n</p>\n\n<div align=\"center\">\n\n<p align=\"left\">\n <img src=\"./assets/AH.svg\" alt=\"Aether Heart\" height=\"60\" />\n</p>\n\n<p align=\"center\">\n <img src=\"./assets/aeloon-alive.png\" alt=\"Aeloon alive\" height=\"360\" />\n</p>\n\n<p align=\"center\">\n <img src=\"./assets/Aeloon.svg\" alt=\"Aeloon\" height=\"40\" />\n</p>\n\n**安全 · 轻量 · 快速** 的 AI 智能体\n\n[![Python](https://img.shields.io/badge/Python-3.11%2B-blue.svg)](https://python.org)\n[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](./LICENSE)\n[![Ruff](https://img.shields.io/badge/Linter-Ruff%200.15.6-orange.svg)](https://docs.astral.sh/ruff/)\n\n</div>\n\n---\n\n## Aeloon 是什么?\n\nAeloon 是一个轻量级、高性能且模块化的 AI Agent 框架。其核心特性包括图驱动的并行加速(graph-driven parallel acceleration),以及支持多种应用场景(如深度研究、维基、技能图谱、ACP 桥接和状态面板)的灵活热插拔插件系统。\n\n核心理念:**一个智能体,全平台可用,数据自持,隐私至上。**\n\n---\n\n## ✨ 核心特性\n\n| 特性 | 说明 |\n|------|------|\n| 🔄 **消息总线架构** | 渠道 → MessageBus → Dispatcher → AgentLoop → 工具执行 → 路由回复,解耦且可扩展 |\n| 📡 **多渠道支持** | Telegram、飞书、钉钉、企业微信、Slack、Discord、QQ、Email、WhatsApp、Matrix、WeChat |\n| 🧠 **智能上下文** | 自动上下文构建、记忆合并、技能注入、子智能体委托 |\n| 🔧 **内置工具** | 文件系统、Web 搜索/抓取、Shell 执行、定时任务(Cron)、MCP 协议、消息发送 |\n| 🤖 **多 Provider** | OpenAI、Anthropic、DeepSeek、Gemini、通义千问、月之暗面、MiniMax、Groq、Ollama、vLLM、Azure OpenAI、OpenRouter、自定义端点 |\n| 📝 **技能系统** | 纯 Markdown 驱动,零代码即可扩展智能体能力 |\n| 🔌 **MCP 协议** | 内置 MCP 客户端,可连接外部工具服务器 |\n| 🔧 **插件 SDK** | 完整插件开发框架:命令、工具、服务、中间件、状态栏、生命周期管理 |\n| 🌉 **ACP 桥接** | 内置 ACP Bridge 插件,通过 ACP 协议连接外部智能体生态 |\n| 📊 **任务图** | 工具调用编译为 DAG,只读操作并发执行,写操作串行保守调度 |\n| 🔒 **安全优先** | 网络安全策略、执行沙箱、API Key 隔离 |\n| 🐳 **Docker 就绪** | 一键 `docker compose up` 启动网关模式 |\n\n---\n\n## 🚀 快速开始\n\n### 一键安装\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/AetherHeartAI/Aeloon/main/install.sh | bash\n```\n\n安装脚本会交互式引导你配置 Provider 和渠道。也支持离线安装和从源码安装:\n\n```bash\n# 从本地源码安装\nbash install.sh --from-source\n\n# 指定版本\nbash install.sh --version v1.0.0\n\n# 离线模式(需本地 wheel)\nbash install.sh --offline\n```\n\n### 手动安装\n\n```bash\n# 克隆仓库\ngit clone https://github.com/AetherHeartAI/Aeloon.git\ncd Aeloon\npip install -e .\n\n# 首次配置\naeloon onboard\n```\n\n### 第一次对话\n\n```bash\n# CLI 一轮对话\naeloon agent -m \"你好,Aeloon.\"\n\n# 启动网关模式(连接各渠道)\naeloon gateway\n\n# 查看渠道状态\naeloon channels status\n```\n\n\n---\n\n## 🔌 渠道支持\n\n**微信** 和 **飞书** 支持扫码直接登录(`/wechat login`、飞书应用内免登),开箱即用。\n\n其他渠道:Telegram、钉钉、企业微信、Slack、Discord、QQ、Email、WhatsApp、Matrix。\n\n所有渠道继承 `BaseChannel`,**自动发现**——放入 `aeloon/channels/` 即可启用,无需注册。\n\n---\n\n## 🤖 Provider 支持\n\n国内外主流模型一键接入:OpenAI、Anthropic、DeepSeek、Gemini、通义千问、月之暗面、MiniMax、Groq、OpenRouter(含免费额度)、Azure OpenAI、Ollama、vLLM,以及 OAuth 认证的 OpenAI Codex / GitHub Copilot。\n\n选择优先级:显式指定 → 模型关键词匹配 → API Key 前缀 → API Base 匹配。\n\n---\n\n## 🔧 工具系统\n\n| 工具 | 模块 | 功能 |\n|------|------|------|\n| FileSystem | `filesystem.py` | 读写文件、目录列表、搜索 |\n| Web | `web.py` | 搜索(DuckDuckGo)、抓取网页、提取正文 |\n| Shell | `shell.py` | 执行命令(带安全策略) |\n| Cron | `cron.py` | 创建/列表/删除定时任务 |\n| MCP | `mcp.py` | 连接外部 MCP 工具服务器 |\n| Message | `message.py` | 跨渠道发送消息 |\n| Policy | `policy.py` | 工具执行策略控制 |\n| Spawn | `spawn.py` | 子智能体委派 |\n\n---\n\n## 📝 技能系统\n\n**纯 Markdown** 驱动,零代码扩展智能体能力。在工作区 `.aeloon/skills/` 下创建 `SKILL.md` 即可注入新技能到系统提示。内置技能涵盖定时任务、文档转换、GitHub 操作、记忆管理、摘要、终端等。\n\n---\n\n## 🔌 插件系统\n\n插件是扩展 Aeloon 核心能力的模块化组件,支持:自定义 Slash 命令、注册 Agent 工具、后台服务、消息中间件、状态栏贡献,以及独立的配置与存储命名空间。\n\n**插件类型**:\n- **Task Plugin**(命令 + 中间件)—— 请求-响应式工作流,如 `/sr`、`/wiki`\n- **Hybrid Plugin**(命令 + 工具 + 服务)—— 长期运行代理,如市场监控\n- **Service / Status Plugin**(服务或状态栏贡献)—— 服务型扩展或 CLI 状态栏贡献,如 `StatusPannel`\n\n**内置插件**:\n\n| 插件 | 类型 | 说明 |\n|------|------|------|\n| [**ScienceResearch**](./aeloon/plugins/ScienceResearch/README-SR.md) | Task | AI4S 科研工作流:文献检索、ArXiv、风险评估、编排器、结构化输出 |\n| [**SkillGraph**](./aeloon/plugins/SkillGraph/) | Task | 技能依赖图编译与可视化 |\n| [**Wiki**](./aeloon/plugins/Wiki/README.md) | Hybrid | 本地知识库:内容采集、智能摘要、对话知识增强、知识图谱 |\n| [**ACP Bridge**](./aeloon/plugins/acp_bridge/README.md) | Hybrid | 外部 ACP 智能体桥接,连接第三方 Agent 协议 |\n| [**StatusPannel**](./aeloon/plugins/StatusPannel/) | Service | CLI 状态栏:模型名称、上下文 Token 用量 |\n\n**生命周期**:发现 → 验证 → 注册 → 提交 → 激活 → 运行 → 停用\n\n**五步开发范式**:继承 `Plugin` → 实现 `register(api)` → 实现 `activate()` → 编写业务处理 → 创建 `aeloon.plugin.json` 清单。\n\n完整开发指南见 [aeloon/plugins/README.md](./aeloon/plugins/README.md)。\n\n---\n\n## 🐳 Docker 部署\n\n```bash\n# 网关模式\ndocker compose up\n\n# CLI 交互模式\ndocker compose run --rm aeloon-cli\n```\n\n`docker-compose.yml` 默认配置:\n- 网关端口:`18790`\n- 配置目录挂载:`~/.aeloon:/root/.aeloon`\n- 资源限制:1 CPU / 1GB 内存\n\n---\n\n## ⚙️ 配置\n\n配置文件位于 `~/.aeloon/config.json`,支持 camelCase 别名。加载优先级:\n\n```\n--config 标志 > AELOON_CONFIG 环境变量 > ~/.aeloon/config.json\n```\n\n最小配置示例:\n\n```json\n{\n \"agents\": {\n \"defaults\": {\n \"provider\": \"openrouter\",\n \"model\": \"deepseek/deepseek-r1:free\"\n }\n },\n \"providers\": {\n \"openrouter\": {\n \"apiKey\": \"sk-or-v1-...\"\n }\n }\n}\n```\n\n---\n\n## 🧪 开发\n\n```bash\n# 安装开发依赖\npip install -e \".[dev]\"\n\n# 运行测试\npytest\n\n# 运行指定测试\npytest tests/test_kernel.py\npytest -k \"telegram\"\n\n# 代码检查 + 自动修复\nruff check --fix .\n\n# 格式化\nruff format .\n```\n\n**要求**:`ruff==0.15.6`(CI 强制),Python ≥ 3.11,所有公开函数需要类型注解,异步 I/O 优先使用 `async/await`。\n\n### 提交规范\n\n采用 [Conventional Commits](https://www.conventionalcommits.org/) 格式:\n\n```\n<type>(<scope>): <short summary>\n```\n\n类型:`feat`、`fix`、`chore`、`docs`、`test`、`refactor`、`perf`、`ci`\n\n---\n\n## 🔒 安全\n\n- **网络策略**:`_network_safety.py` 限制可访问的 URL,防止 SSRF\n- **执行沙箱**:Shell 工具通过策略控制可执行命令\n- **API Key 隔离**:配置文件存储 API Key,不记录到日志\n- **渠道认证**:每条渠道支持 `allowFrom` 白名单\n- **MCP 安全**:MCP 连接可配置允许的工具范围\n\n---\n\n## 📜 许可证\n\n[MIT License](./LICENSE) © 2026 Aether Heart contributors\n\n---\n\n<div align=\"center\">\n\n*\"始于鳌,成于龙.\"*\nBorn from the deep. Rising into something more.\n\n</div>\n"}, "689af96791041dce620063412eef749b5e46cee4": {"t": 1785771345.7365813, "n": 5521, "h": "fde53144a1e9e446", "c": "<p align=\"right\">\n<a href=\"./README.md\">English</a> | <b>中文</b>\n</p>\n\n<div align=\"center\">\n\n<p align=\"left\">\n <img src=\"./assets/AH.svg\" alt=\"Aether Heart\" height=\"60\" />\n</p>\n\n<p align=\"center\">\n <img src=\"./assets/aeloon-alive.png\" alt=\"Aeloon alive\" height=\"360\" />\n</p>\n\n<p align=\"center\">\n <img src=\"./assets/Aeloon.svg\" alt=\"Aeloon\" height=\"40\" />\n</p>\n\n**安全 · 轻量 · 快速** 的 AI 智能体\n\n[![Python](https://img.shields.io/badge/Python-3.11%2B-blue.svg)](https://python.org)\n[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](./LICENSE)\n[![Ruff](https://img.shields.io/badge/Linter-Ruff%200.15.6-orange.svg)](https://docs.astral.sh/ruff/)\n\n</div>\n\n---\n\n## Aeloon 是什么?\n\nAeloon 是一个基于消息总线的 AI 助手运行时框架。它将大语言模型、工具调用、记忆系统和多渠道消息整合为一个统一的运行时——你可以通过 CLI、Web UI 或即时通讯平台与它对话,而它负责协调一切。\n\n核心理念:**一个智能体,全平台可用,数据自持,隐私至上。**\n\n---\n\n## ✨ 核心特性\n\n| 特性 | 说明 |\n|------|------|\n| 🔄 **消息总线架构** | 渠道 → MessageBus → Dispatcher → AgentLoop → 工具执行 → 路由回复,解耦且可扩展 |\n| 📡 **多渠道支持** | Telegram、飞书、钉钉、企业微信、Slack、Discord、QQ、Email、WhatsApp、Matrix、WeChat |\n| 🧠 **智能上下文** | 自动上下文构建、记忆合并、技能注入、子智能体委托 |\n| 🔧 **内置工具** | 文件系统、Web 搜索/抓取、Shell 执行、定时任务(Cron)、MCP 协议、消息发送 |\n| 🤖 **多 Provider** | OpenAI、Anthropic、DeepSeek、Gemini、通义千问、月之暗面、MiniMax、Groq、Ollama、vLLM、Azure OpenAI、OpenRouter、自定义端点 |\n| 📝 **技能系统** | 纯 Markdown 驱动,零代码即可扩展智能体能力 |\n| 🔌 **MCP 协议** | 内置 MCP 客户端,可连接外部工具服务器 |\n| 🔧 **插件 SDK** | 完整插件开发框架:命令、工具、服务、中间件、状态栏、生命周期管理 |\n| 🌉 **ACP 桥接** | 内置 ACP Bridge 插件,通过 ACP 协议连接外部智能体生态 |\n| 📊 **任务图** | 工具调用编译为 DAG,只读操作并发执行,写操作串行保守调度 |\n| 🔒 **安全优先** | 网络安全策略、执行沙箱、API Key 隔离 |\n| 🐳 **Docker 就绪** | 一键 `docker compose up` 启动网关模式 |\n\n---\n\n## 🚀 快速开始\n\n### 一键安装\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/AetherHeartAI/Aeloon/main/install.sh | bash\n```\n\n安装脚本会交互式引导你配置 Provider 和渠道。也支持离线安装和从源码安装:\n\n```bash\n# 从本地源码安装\nbash install.sh --from-source\n\n# 指定版本\nbash install.sh --version v1.0.0\n\n# 离线模式(需本地 wheel)\nbash install.sh --offline\n```\n\n### 手动安装\n\n```bash\n# 克隆仓库\ngit clone https://github.com/AetherHeartAI/Aeloon.git\ncd Aeloon\npip install -e .\n\n# 首次配置\naeloon onboard\n```\n\n### 第一次对话\n\n```bash\n# CLI 一轮对话\naeloon agent -m \"你好,Aeloon.\"\n\n# 启动网关模式(连接各渠道)\naeloon gateway\n\n# 查看渠道状态\naeloon channels status\n```\n\n\n---\n\n## 🔌 渠道支持\n\n**微信** 和 **飞书** 支持扫码直接登录(`/wechat login`、飞书应用内免登),开箱即用。\n\n其他渠道:Telegram、钉钉、企业微信、Slack、Discord、QQ、Email、WhatsApp、Matrix。\n\n所有渠道继承 `BaseChannel`,**自动发现**——放入 `aeloon/channels/` 即可启用,无需注册。\n\n---\n\n## 🤖 Provider 支持\n\n国内外主流模型一键接入:OpenAI、Anthropic、DeepSeek、Gemini、通义千问、月之暗面、MiniMax、Groq、OpenRouter(含免费额度)、Azure OpenAI、Ollama、vLLM,以及 OAuth 认证的 OpenAI Codex / GitHub Copilot。\n\n选择优先级:显式指定 → 模型关键词匹配 → API Key 前缀 → API Base 匹配。\n\n---\n\n## 🔧 工具系统\n\n| 工具 | 模块 | 功能 |\n|------|------|------|\n| FileSystem | `filesystem.py` | 读写文件、目录列表、搜索 |\n| Web | `web.py` | 搜索(DuckDuckGo)、抓取网页、提取正文 |\n| Shell | `shell.py` | 执行命令(带安全策略) |\n| Cron | `cron.py` | 创建/列表/删除定时任务 |\n| MCP | `mcp.py` | 连接外部 MCP 工具服务器 |\n| Message | `message.py` | 跨渠道发送消息 |\n| Policy | `policy.py` | 工具执行策略控制 |\n| Spawn | `spawn.py` | 子智能体委派 |\n\n---\n\n## 📝 技能系统\n\n**纯 Markdown** 驱动,零代码扩展智能体能力。在工作区 `.aeloon/skills/` 下创建 `SKILL.md` 即可注入新技能到系统提示。内置技能涵盖定时任务、文档转换、GitHub 操作、记忆管理、摘要、终端等。\n\n---\n\n## 🔌 插件系统\n\n插件是扩展 Aeloon 核心能力的模块化组件,支持:自定义 Slash 命令、注册 Agent 工具、后台服务、消息中间件、状态栏贡献,以及独立的配置与存储命名空间。\n\n**插件类型**:\n- **Task Plugin**(命令 + 中间件)—— 请求-响应式工作流,如 `/sr`、`/wiki`\n- **Hybrid Plugin**(命令 + 工具 + 服务)—— 长期运行代理,如市场监控\n- **Service / Status Plugin**(服务或状态栏贡献)—— 服务型扩展或 CLI 状态栏贡献,如 `StatusPannel`\n\n**内置插件**:\n\n| 插件 | 类型 | 说明 |\n|------|------|------|\n| [**ScienceResearch**](./aeloon/plugins/ScienceResearch/README-SR.md) | Task | AI4S 科研工作流:文献检索、ArXiv、风险评估、编排器、结构化输出 |\n| [**SkillGraph**](./aeloon/plugins/SkillGraph/) | Task | 技能依赖图编译与可视化 |\n| [**Wiki**](./aeloon/plugins/Wiki/README.md) | Hybrid | 本地知识库:内容采集、智能摘要、对话知识增强、知识图谱 |\n| [**ACP Bridge**](./aeloon/plugins/acp_bridge/README.md) | Hybrid | 外部 ACP 智能体桥接,连接第三方 Agent 协议 |\n| [**StatusPannel**](./aeloon/plugins/StatusPannel/) | Service | CLI 状态栏:模型名称、上下文 Token 用量 |\n\n**生命周期**:发现 → 验证 → 注册 → 提交 → 激活 → 运行 → 停用\n\n**五步开发范式**:继承 `Plugin` → 实现 `register(api)` → 实现 `activate()` → 编写业务处理 → 创建 `aeloon.plugin.json` 清单。\n\n完整开发指南见 [aeloon/plugins/README.md](./aeloon/plugins/README.md)。\n\n---\n\n## 🐳 Docker 部署\n\n```bash\n# 网关模式\ndocker compose up\n\n# CLI 交互模式\ndocker compose run --rm aeloon-cli\n```\n\n`docker-compose.yml` 默认配置:\n- 网关端口:`18790`\n- 配置目录挂载:`~/.aeloon:/root/.aeloon`\n- 资源限制:1 CPU / 1GB 内存\n\n---\n\n## ⚙️ 配置\n\n配置文件位于 `~/.aeloon/config.json`,支持 camelCase 别名。加载优先级:\n\n```\n--config 标志 > AELOON_CONFIG 环境变量 > ~/.aeloon/config.json\n```\n\n最小配置示例:\n\n```json\n{\n \"agents\": {\n \"defaults\": {\n \"provider\": \"openrouter\",\n \"model\": \"deepseek/deepseek-r1:free\"\n }\n },\n \"providers\": {\n \"openrouter\": {\n \"apiKey\": \"sk-or-v1-...\"\n }\n }\n}\n```\n\n---\n\n## 🧪 开发\n\n```bash\n# 安装开发依赖\npip install -e \".[dev]\"\n\n# 运行测试\npytest\n\n# 运行指定测试\npytest tests/test_kernel.py\npytest -k \"telegram\"\n\n# 代码检查 + 自动修复\nruff check --fix .\n\n# 格式化\nruff format .\n```\n\n**要求**:`ruff==0.15.6`(CI 强制),Python ≥ 3.11,所有公开函数需要类型注解,异步 I/O 优先使用 `async/await`。\n\n### 提交规范\n\n采用 [Conventional Commits](https://www.conventionalcommits.org/) 格式:\n\n```\n<type>(<scope>): <short summary>\n```\n\n类型:`feat`、`fix`、`chore`、`docs`、`test`、`refactor`、`perf`、`ci`\n\n---\n\n## 🔒 安全\n\n- **网络策略**:`_network_safety.py` 限制可访问的 URL,防止 SSRF\n- **执行沙箱**:Shell 工具通过策略控制可执行命令\n- **API Key 隔离**:配置文件存储 API Key,不记录到日志\n- **渠道认证**:每条渠道支持 `allowFrom` 白名单\n- **MCP 安全**:MCP 连接可配置允许的工具范围\n\n---\n\n## 📜 许可证\n\n[MIT License](./LICENSE) © 2026 Aether Heart contributors\n\n---\n\n<div align=\"center\">\n\n*\"始于鳌,成于龙.\"*\nBorn from the deep. Rising into something more.\n\n</div>\n"}, "7543d7cba757e3a94a9ef1d3988253abf345e14e": {"t": 1785771346.9584029, "n": 5524, "h": "2616037184b03a46", "c": "<p align=\"right\">\n<a href=\"./README.md\">English</a> | <b>中文</b>\n</p>\n\n<div align=\"center\">\n\n<p align=\"left\">\n <img src=\"./assets/AH.svg\" alt=\"Aether Heart\" height=\"60\" />\n</p>\n\n<p align=\"center\">\n <img src=\"./assets/aeloon-alive.png\" alt=\"Aeloon alive\" height=\"360\" />\n</p>\n\n<p align=\"center\">\n <img src=\"./assets/Aeloon.svg\" alt=\"Aeloon\" height=\"40\" />\n</p>\n\n**安全 · 轻量 · 快速** 的 AI 智能体运行时\n\n[![Python](https://img.shields.io/badge/Python-3.11%2B-blue.svg)](https://python.org)\n[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](./LICENSE)\n[![Ruff](https://img.shields.io/badge/Linter-Ruff%200.15.6-orange.svg)](https://docs.astral.sh/ruff/)\n\n</div>\n\n---\n\n## Aeloon 是什么?\n\nAeloon 是一个基于消息总线的 AI 助手运行时框架。它将大语言模型、工具调用、记忆系统和多渠道消息整合为一个统一的运行时——你可以通过 CLI、Web UI 或即时通讯平台与它对话,而它负责协调一切。\n\n核心理念:**一个智能体,全平台可用,数据自持,隐私至上。**\n\n---\n\n## ✨ 核心特性\n\n| 特性 | 说明 |\n|------|------|\n| 🔄 **消息总线架构** | 渠道 → MessageBus → Dispatcher → AgentLoop → 工具执行 → 路由回复,解耦且可扩展 |\n| 📡 **多渠道支持** | Telegram、飞书、钉钉、企业微信、Slack、Discord、QQ、Email、WhatsApp、Matrix、WeChat |\n| 🧠 **智能上下文** | 自动上下文构建、记忆合并、技能注入、子智能体委托 |\n| 🔧 **内置工具** | 文件系统、Web 搜索/抓取、Shell 执行、定时任务(Cron)、MCP 协议、消息发送 |\n| 🤖 **多 Provider** | OpenAI、Anthropic、DeepSeek、Gemini、通义千问、月之暗面、MiniMax、Groq、Ollama、vLLM、Azure OpenAI、OpenRouter、自定义端点 |\n| 📝 **技能系统** | 纯 Markdown 驱动,零代码即可扩展智能体能力 |\n| 🔌 **MCP 协议** | 内置 MCP 客户端,可连接外部工具服务器 |\n| 🔧 **插件 SDK** | 完整插件开发框架:命令、工具、服务、中间件、状态栏、生命周期管理 |\n| 🌉 **ACP 桥接** | 内置 ACP Bridge 插件,通过 ACP 协议连接外部智能体生态 |\n| 📊 **任务图** | 工具调用编译为 DAG,只读操作并发执行,写操作串行保守调度 |\n| 🔒 **安全优先** | 网络安全策略、执行沙箱、API Key 隔离 |\n| 🐳 **Docker 就绪** | 一键 `docker compose up` 启动网关模式 |\n\n---\n\n## 🚀 快速开始\n\n### 一键安装\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/AetherHeartAI/Aeloon/main/install.sh | bash\n```\n\n安装脚本会交互式引导你配置 Provider 和渠道。也支持离线安装和从源码安装:\n\n```bash\n# 从本地源码安装\nbash install.sh --from-source\n\n# 指定版本\nbash install.sh --version v1.0.0\n\n# 离线模式(需本地 wheel)\nbash install.sh --offline\n```\n\n### 手动安装\n\n```bash\n# 克隆仓库\ngit clone https://github.com/AetherHeartAI/Aeloon.git\ncd Aeloon\npip install -e .\n\n# 首次配置\naeloon onboard\n```\n\n### 第一次对话\n\n```bash\n# CLI 一轮对话\naeloon agent -m \"你好,Aeloon.\"\n\n# 启动网关模式(连接各渠道)\naeloon gateway\n\n# 查看渠道状态\naeloon channels status\n```\n\n\n---\n\n## 🔌 渠道支持\n\n**微信** 和 **飞书** 支持扫码直接登录(`/wechat login`、飞书应用内免登),开箱即用。\n\n其他渠道:Telegram、钉钉、企业微信、Slack、Discord、QQ、Email、WhatsApp、Matrix。\n\n所有渠道继承 `BaseChannel`,**自动发现**——放入 `aeloon/channels/` 即可启用,无需注册。\n\n---\n\n## 🤖 Provider 支持\n\n国内外主流模型一键接入:OpenAI、Anthropic、DeepSeek、Gemini、通义千问、月之暗面、MiniMax、Groq、OpenRouter(含免费额度)、Azure OpenAI、Ollama、vLLM,以及 OAuth 认证的 OpenAI Codex / GitHub Copilot。\n\n选择优先级:显式指定 → 模型关键词匹配 → API Key 前缀 → API Base 匹配。\n\n---\n\n## 🔧 工具系统\n\n| 工具 | 模块 | 功能 |\n|------|------|------|\n| FileSystem | `filesystem.py` | 读写文件、目录列表、搜索 |\n| Web | `web.py` | 搜索(DuckDuckGo)、抓取网页、提取正文 |\n| Shell | `shell.py` | 执行命令(带安全策略) |\n| Cron | `cron.py` | 创建/列表/删除定时任务 |\n| MCP | `mcp.py` | 连接外部 MCP 工具服务器 |\n| Message | `message.py` | 跨渠道发送消息 |\n| Policy | `policy.py` | 工具执行策略控制 |\n| Spawn | `spawn.py` | 子智能体委派 |\n\n---\n\n## 📝 技能系统\n\n**纯 Markdown** 驱动,零代码扩展智能体能力。在工作区 `.aeloon/skills/` 下创建 `SKILL.md` 即可注入新技能到系统提示。内置技能涵盖定时任务、文档转换、GitHub 操作、记忆管理、摘要、终端等。\n\n---\n\n## 🔌 插件系统\n\n插件是扩展 Aeloon 核心能力的模块化组件,支持:自定义 Slash 命令、注册 Agent 工具、后台服务、消息中间件、状态栏贡献,以及独立的配置与存储命名空间。\n\n**插件类型**:\n- **Task Plugin**(命令 + 中间件)—— 请求-响应式工作流,如 `/sr`、`/wiki`\n- **Hybrid Plugin**(命令 + 工具 + 服务)—— 长期运行代理,如市场监控\n- **Service / Status Plugin**(服务或状态栏贡献)—— 服务型扩展或 CLI 状态栏贡献,如 `StatusPannel`\n\n**内置插件**:\n\n| 插件 | 类型 | 说明 |\n|------|------|------|\n| [**ScienceResearch**](./aeloon/plugins/ScienceResearch/README-SR.md) | Task | AI4S 科研工作流:文献检索、ArXiv、风险评估、编排器、结构化输出 |\n| [**SkillGraph**](./aeloon/plugins/SkillGraph/) | Task | 技能依赖图编译与可视化 |\n| [**Wiki**](./aeloon/plugins/Wiki/README.md) | Hybrid | 本地知识库:内容采集、智能摘要、对话知识增强、知识图谱 |\n| [**ACP Bridge**](./aeloon/plugins/acp_bridge/README.md) | Hybrid | 外部 ACP 智能体桥接,连接第三方 Agent 协议 |\n| [**StatusPannel**](./aeloon/plugins/StatusPannel/) | Service | CLI 状态栏:模型名称、上下文 Token 用量 |\n\n**生命周期**:发现 → 验证 → 注册 → 提交 → 激活 → 运行 → 停用\n\n**五步开发范式**:继承 `Plugin` → 实现 `register(api)` → 实现 `activate()` → 编写业务处理 → 创建 `aeloon.plugin.json` 清单。\n\n完整开发指南见 [aeloon/plugins/README.md](./aeloon/plugins/README.md)。\n\n---\n\n## 🐳 Docker 部署\n\n```bash\n# 网关模式\ndocker compose up\n\n# CLI 交互模式\ndocker compose run --rm aeloon-cli\n```\n\n`docker-compose.yml` 默认配置:\n- 网关端口:`18790`\n- 配置目录挂载:`~/.aeloon:/root/.aeloon`\n- 资源限制:1 CPU / 1GB 内存\n\n---\n\n## ⚙️ 配置\n\n配置文件位于 `~/.aeloon/config.json`,支持 camelCase 别名。加载优先级:\n\n```\n--config 标志 > AELOON_CONFIG 环境变量 > ~/.aeloon/config.json\n```\n\n最小配置示例:\n\n```json\n{\n \"agents\": {\n \"defaults\": {\n \"provider\": \"openrouter\",\n \"model\": \"deepseek/deepseek-r1:free\"\n }\n },\n \"providers\": {\n \"openrouter\": {\n \"apiKey\": \"sk-or-v1-...\"\n }\n }\n}\n```\n\n---\n\n## 🧪 开发\n\n```bash\n# 安装开发依赖\npip install -e \".[dev]\"\n\n# 运行测试\npytest\n\n# 运行指定测试\npytest tests/test_kernel.py\npytest -k \"telegram\"\n\n# 代码检查 + 自动修复\nruff check --fix .\n\n# 格式化\nruff format .\n```\n\n**要求**:`ruff==0.15.6`(CI 强制),Python ≥ 3.11,所有公开函数需要类型注解,异步 I/O 优先使用 `async/await`。\n\n### 提交规范\n\n采用 [Conventional Commits](https://www.conventionalcommits.org/) 格式:\n\n```\n<type>(<scope>): <short summary>\n```\n\n类型:`feat`、`fix`、`chore`、`docs`、`test`、`refactor`、`perf`、`ci`\n\n---\n\n## 🔒 安全\n\n- **网络策略**:`_network_safety.py` 限制可访问的 URL,防止 SSRF\n- **执行沙箱**:Shell 工具通过策略控制可执行命令\n- **API Key 隔离**:配置文件存储 API Key,不记录到日志\n- **渠道认证**:每条渠道支持 `allowFrom` 白名单\n- **MCP 安全**:MCP 连接可配置允许的工具范围\n\n---\n\n## 📜 许可证\n\n[MIT License](./LICENSE) © 2026 Aether Heart contributors\n\n---\n\n<div align=\"center\">\n\n*\"始于鳌,成于龙.\"*\nBorn from the deep. Rising into something more.\n\n</div>\n"}}}}