{"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": "

\nEnglish | 中文\n

\n\n
\n\n

\n \"Aether\n \"Aether\n

\n\n

\n \"Aeloon\n

\n\n

\n \"Aeloon\"\n \"Aeloon\"\n

\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
\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(): \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
\n\n*\"始于鳌,成于龙.\"*\nBorn from the deep. Rising into something more.\n\n
\n"}, "2bb4a8d9b30ff79b5e0e463b65e6fc35919fb124": {"t": 1785771344.2642164, "n": 8743, "h": "ab175f4f2ea96df8", "c": "

\nEnglish | 中文\n

\n\n
\n\n

\n \"Aether\n \"Aether\n

\n\n

\n \"Aeloon\n

\n\n

\n \"Aeloon\"\n \"Aeloon\"\n

\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
\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(): \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
\n\n*\"始于鳌,成于龙.\"*\nBorn from the deep. Rising into something more.\n\n
\n"}, "373a97b93de59316133fedd32e9d43163d53256c": {"t": 1785771345.6355426, "n": 8731, "h": "e64418ad6cc10525", "c": "

\nEnglish | 中文\n

\n\n
\n\n

\n \"Aether\n \"Aether\n

\n\n

\n \"Aeloon\n

\n\n

\n \"Aeloon\"\n \"Aeloon\"\n

\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
\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(): \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
\n\n*\"始于鳌,成于龙.\"*\nBorn from the deep. Rising into something more.\n\n
\n"}, "d1a6484b6e88bcf6a6119b28cf1af8d6811ed1e0": {"t": 1785771346.801461, "n": 8513, "h": "e75ea3f44aa58682", "c": "

\nEnglish | 中文\n

\n\n
\n\n

\n \"Aether\n

\n\n

\n \"Aeloon\n

\n\n

\n \"Aeloon\"\n

\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
\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(): \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
\n\n*\"始于鳌,成于龙.\"*\nBorn from the deep. Rising into something more.\n\n
\n"}, "7543d7cba757e3a94a9ef1d3988253abf345e14e": {"t": 1785771347.9566593, "n": 8521, "h": "082464737409fe0c", "c": "

\nEnglish | 中文\n

\n\n
\n\n

\n \"Aether\n

\n\n

\n \"Aeloon\n

\n\n

\n \"Aeloon\"\n

\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
\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(): \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
\n\n*\"始于鳌,成于龙.\"*\nBorn from the deep. Rising into something more.\n\n
\n"}}, "README.cn.md": {"e5afaa1c27eb8fa2f7c1e76545aa92291eeaf4e4": {"t": 1785747256.5710664, "n": 5517, "h": "c7485d9b13906f61", "c": "

\nEnglish | 中文\n

\n\n
\n\n

\n \"Aether\n

\n\n

\n \"Aeloon\n

\n\n

\n \"Aeloon\"\n

\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
\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(): \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
\n\n*\"始于鳌,成于龙.\"*\nBorn from the deep. Rising into something more.\n\n
\n"}, "cd28e00d709f0290bd5658ae13fa9dfeb400a765": {"t": 1785771343.2248373, "n": 5517, "h": "c7485d9b13906f61", "c": "

\nEnglish | 中文\n

\n\n
\n\n

\n \"Aether\n

\n\n

\n \"Aeloon\n

\n\n

\n \"Aeloon\"\n

\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
\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(): \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
\n\n*\"始于鳌,成于龙.\"*\nBorn from the deep. Rising into something more.\n\n
\n"}, "1284cc3f69224e8ceb0753010836e444be1f1301": {"t": 1785771344.4632297, "n": 5553, "h": "5b3084e6de2ebca9", "c": "

\nEnglish | 中文\n

\n\n
\n\n

\n \"Aether\n

\n\n

\n \"Aeloon\n

\n\n

\n \"Aeloon\"\n

\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
\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(): \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
\n\n*\"始于鳌,成于龙.\"*\nBorn from the deep. Rising into something more.\n\n
\n"}, "689af96791041dce620063412eef749b5e46cee4": {"t": 1785771345.7365813, "n": 5521, "h": "fde53144a1e9e446", "c": "

\nEnglish | 中文\n

\n\n
\n\n

\n \"Aether\n

\n\n

\n \"Aeloon\n

\n\n

\n \"Aeloon\"\n

\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
\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(): \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
\n\n*\"始于鳌,成于龙.\"*\nBorn from the deep. Rising into something more.\n\n
\n"}, "7543d7cba757e3a94a9ef1d3988253abf345e14e": {"t": 1785771346.9584029, "n": 5524, "h": "2616037184b03a46", "c": "

\nEnglish | 中文\n

\n\n
\n\n

\n \"Aether\n

\n\n

\n \"Aeloon\n

\n\n

\n \"Aeloon\"\n

\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
\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(): \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
\n\n*\"始于鳌,成于龙.\"*\nBorn from the deep. Rising into something more.\n\n
\n"}}}}